/*!!** * EIMMODEL V1.0.0 * A WebGL-based 3D Viewer for threejs * http://www.i3vsoft.com/ * Built on 2021-2-25 7:24:06 PM * commitHash 2611d22d * Copyright 2021, 广州君和信息技术有限公司 ***/ ! function (A, e) { "object" == typeof exports && "undefined" != typeof module ? e(exports) : "function" == typeof define && define.amd ? define(["exports"], e) : e((A = A || self).EIMMODEL = {}) }(this, (function (A) { "use strict"; console.log("EIMMODEL Version: 1.0.0"); var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {}; ! function (A, e) { A(e = { exports: {} }, e.exports) }((function (A) { ! function (e, t) { var i = function () { function A(A) { return "[object Array]" === Object.prototype.toString.call(A) } function e(A, e) { for (var t in e) e.hasOwnProperty(t) && (A[t] = e[t]) } function t(A) { if (!(this instanceof t)) throw new TypeError(this + "is not a promise"); if ("function" != typeof A) throw new TypeError("Promise resolver " + A + " is not a function"); var e = new i; this._resolver = e; try { A((function (A) { e.resolve(A) }), (function (A) { e.reject(A) })) } catch (A) { e.reject(A) } } function i() { this._callbacks = [], this._errbacks = [], this._status = "pending", this._result = null } return e(t.prototype, { then: function (A, e) { var i, o, n = new this.constructor((function (A, e) { i = A, o = e })); return this._resolver._addCallbacks("function" == typeof A ? t._makeCallback(n, i, o, A) : i, "function" == typeof e ? t._makeCallback(n, i, o, e) : o), n }, catch: function (A) { return this.then(void 0, A) } }), t._makeCallback = function (A, e, t, i) { return function (o) { var n; try { n = i(o) } catch (A) { return void t(A) } n !== A ? e(n) : t(new TypeError("Cannot resolve a promise with itself")) } }, t.resolve = function (A) { return A && A.constructor === this ? A : new this((function (e) { e(A) })) }, t.reject = function (A) { var e = new this((function () {})); return e._resolver._result = A, e._resolver._status = "rejected", e }, t.all = function (e) { var t = this; return new t((function (i, o) { if (A(e)) { var n = e.length, r = 0, a = e.length, s = []; if (1 > a) return i(s); for (; a > r; r++) t.resolve(e[r]).then(l(r), o) } else o(new TypeError("Promise.all expects an array of values or promises")); function l(A) { return function (e) { s[A] = e, --n || i(s) } } })) }, t.race = function (e) { var t = this; return new t((function (i, o) { if (A(e)) for (var n = 0, r = e.length; r > n; n++) t.resolve(e[n]).then(i, o); else o(new TypeError("Promise.race expects an array of values or promises")) })) }, t.async = "undefined" != typeof setImmediate ? function (A) { setImmediate(A) } : "undefined" != typeof process && process.nextTick ? process.nextTick : function (A) { setTimeout(A, 0) }, e(i.prototype, { fulfill: function (A) { var e = this._status; "pending" !== e && "accepted" !== e || (this._result = A, this._status = "fulfilled"), "fulfilled" === this._status && (this._notify(this._callbacks, this._result), this._callbacks = [], this._errbacks = null) }, reject: function (A) { var e = this._status; "pending" !== e && "accepted" !== e || (this._result = A, this._status = "rejected"), "rejected" === this._status && (this._notify(this._errbacks, this._result), this._callbacks = null, this._errbacks = []) }, resolve: function (A) { "pending" === this._status && (this._status = "accepted", this._value = A, (this._callbacks && this._callbacks.length || this._errbacks && this._errbacks.length) && this._unwrap(this._value)) }, _unwrap: function (A) { var e, t = this, i = !1; if (!A || "object" != typeof A && "function" != typeof A) t.fulfill(A); else try { "function" == typeof (e = A.then) ? e.call(A, (function (A) { i || (i = !0, t._unwrap(A)) }), (function (A) { i || (i = !0, t.reject(A)) })): t.fulfill(A) } catch (A) { i || t.reject(A) } }, _addCallbacks: function (A, e) { var t = this._callbacks, i = this._errbacks; switch (t && t.push(A), i && i.push(e), this._status) { case "accepted": this._unwrap(this._value); break; case "fulfilled": this.fulfill(this._result); break; case "rejected": this.reject(this._result) } }, _notify: function (A, e) { A.length && t.async((function () { var t, i; for (t = 0, i = A.length; i > t; ++t) A[t](e) })) } }), t.Resolver = i, t }(); A && (A.exports = i), (e = e || self).PromisePolyfill = i, e.Promise || (e.Promise = i) }(e) })); void 0 === Number.EPSILON && (Number.EPSILON = Math.pow(2, -52)), void 0 === Number.isInteger && (Number.isInteger = function (A) { return "number" == typeof A && isFinite(A) && Math.floor(A) === A }), void 0 === Math.sign && (Math.sign = function (A) { return 0 > A ? -1 : A > 0 ? 1 : +A }), "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 (A) { if (null == A) throw new TypeError("Cannot convert undefined or null to object"); for (var e = Object(A), t = 1; arguments.length > t; t++) { var i = arguments[t]; if (null != i) for (var o in i) Object.prototype.hasOwnProperty.call(i, o) && (e[o] = i[o]) } return e }); var t = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 }; function i() {} Object.assign(i.prototype, { addEventListener: function (A, e) { void 0 === this._listeners && (this._listeners = {}); var t = this._listeners; void 0 === t[A] && (t[A] = []), -1 === t[A].indexOf(e) && t[A].push(e) }, hasEventListener: function (A, e) { if (void 0 === this._listeners) return !1; var t = this._listeners; return void 0 !== t[A] && -1 !== t[A].indexOf(e) }, removeEventListener: function (A, e) { if (void 0 !== this._listeners) { var t = this._listeners[A]; if (void 0 !== t) { var i = t.indexOf(e); - 1 !== i && t.splice(i, 1) } } }, dispatchEvent: function (A) { if (void 0 !== this._listeners) { var e = this._listeners[A.type]; if (void 0 !== e) { A.target = this; for (var t = e.slice(0), i = 0, o = t.length; o > i; i++) t[i].call(this, A) } } } }); for (var o = [], n = 0; 256 > n; n++) o[n] = (16 > n ? "0" : "") + n.toString(16); var r, a = { DEG2RAD: Math.PI / 180, RAD2DEG: 180 / Math.PI, generateUUID: function () { var A = 4294967295 * Math.random() | 0, e = 4294967295 * Math.random() | 0, t = 4294967295 * Math.random() | 0, i = 4294967295 * Math.random() | 0; return (o[255 & A] + o[A >> 8 & 255] + o[A >> 16 & 255] + o[A >> 24 & 255] + "-" + o[255 & e] + o[e >> 8 & 255] + "-" + o[e >> 16 & 15 | 64] + o[e >> 24 & 255] + "-" + o[63 & t | 128] + o[t >> 8 & 255] + "-" + o[t >> 16 & 255] + o[t >> 24 & 255] + o[255 & i] + o[i >> 8 & 255] + o[i >> 16 & 255] + o[i >> 24 & 255]).toUpperCase() }, clamp: function (A, e, t) { return Math.max(e, Math.min(t, A)) }, euclideanModulo: function (A, e) { return (A % e + e) % e }, mapLinear: function (A, e, t, i, o) { return i + (A - e) * (o - i) / (t - e) }, lerp: function (A, e, t) { return (1 - t) * A + t * e }, smoothstep: function (A, e, t) { return A > e ? t > A ? (A = (A - e) / (t - e)) * A * (3 - 2 * A) : 1 : 0 }, smootherstep: function (A, e, t) { return A > e ? t > A ? (A = (A - e) / (t - e)) * A * A * (A * (6 * A - 15) + 10) : 1 : 0 }, randInt: function (A, e) { return A + Math.floor(Math.random() * (e - A + 1)) }, randFloat: function (A, e) { return A + Math.random() * (e - A) }, randFloatSpread: function (A) { return A * (.5 - Math.random()) }, degToRad: function (A) { return A * a.DEG2RAD }, radToDeg: function (A) { return A * a.RAD2DEG }, isPowerOfTwo: function (A) { return 0 == (A & A - 1) && 0 !== A }, ceilPowerOfTwo: function (A) { return Math.pow(2, Math.ceil(Math.log(A) / Math.LN2)) }, floorPowerOfTwo: function (A) { return Math.pow(2, Math.floor(Math.log(A) / Math.LN2)) }, setQuaternionFromProperEuler: function (A, e, t, i, o) { var n = Math.cos, r = Math.sin, a = n(t / 2), s = r(t / 2), l = n((e + i) / 2), c = r((e + i) / 2), h = n((e - i) / 2), d = r((e - i) / 2), p = n((i - e) / 2), g = r((i - e) / 2); "XYX" === o ? A.set(a * c, s * h, s * d, a * l) : "YZY" === o ? A.set(s * d, a * c, s * h, a * l) : "ZXZ" === o ? A.set(s * h, s * d, a * c, a * l) : "XZX" === o ? A.set(a * c, s * g, s * p, a * l) : "YXY" === o ? A.set(s * p, a * c, s * g, a * l) : "ZYZ" === o ? A.set(s * g, s * p, a * c, a * l) : console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order.") } }; function s(A, e) { this.x = A || 0, this.y = e || 0 } function l() { 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.") } Object.defineProperties(s.prototype, { width: { get: function () { return this.x }, set: function (A) { this.x = A } }, height: { get: function () { return this.y }, set: function (A) { this.y = A } } }), Object.assign(s.prototype, { isVector2: !0, set: function (A, e) { return this.x = A, this.y = e, this }, setScalar: function (A) { return this.x = A, this.y = A, this }, setX: function (A) { return this.x = A, this }, setY: function (A) { return this.y = A, this }, setComponent: function (A, e) { switch (A) { case 0: this.x = e; break; case 1: this.y = e; break; default: throw new Error("index is out of range: " + A) } return this }, getComponent: function (A) { switch (A) { case 0: return this.x; case 1: return this.y; default: throw new Error("index is out of range: " + A) } }, clone: function () { return new this.constructor(this.x, this.y) }, copy: function (A) { return this.x = A.x, this.y = A.y, this }, add: function (A, e) { return void 0 !== e ? (console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(A, e)) : (this.x += A.x, this.y += A.y, this) }, addScalar: function (A) { return this.x += A, this.y += A, this }, addVectors: function (A, e) { return this.x = A.x + e.x, this.y = A.y + e.y, this }, addScaledVector: function (A, e) { return this.x += A.x * e, this.y += A.y * e, this }, sub: function (A, e) { return void 0 !== e ? (console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(A, e)) : (this.x -= A.x, this.y -= A.y, this) }, subScalar: function (A) { return this.x -= A, this.y -= A, this }, subVectors: function (A, e) { return this.x = A.x - e.x, this.y = A.y - e.y, this }, multiply: function (A) { return this.x *= A.x, this.y *= A.y, this }, multiplyScalar: function (A) { return this.x *= A, this.y *= A, this }, divide: function (A) { return this.x /= A.x, this.y /= A.y, this }, divideScalar: function (A) { return this.multiplyScalar(1 / A) }, applyMatrix3: function (A) { var e = this.x, t = this.y, i = A.elements; return this.x = i[0] * e + i[3] * t + i[6], this.y = i[1] * e + i[4] * t + i[7], this }, min: function (A) { return this.x = Math.min(this.x, A.x), this.y = Math.min(this.y, A.y), this }, max: function (A) { return this.x = Math.max(this.x, A.x), this.y = Math.max(this.y, A.y), this }, clamp: function (A, e) { return this.x = Math.max(A.x, Math.min(e.x, this.x)), this.y = Math.max(A.y, Math.min(e.y, this.y)), this }, clampScalar: function (A, e) { return this.x = Math.max(A, Math.min(e, this.x)), this.y = Math.max(A, Math.min(e, this.y)), this }, clampLength: function (A, e) { var t = this.length(); return this.divideScalar(t || 1).multiplyScalar(Math.max(A, Math.min(e, t))) }, floor: function () { return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this }, ceil: function () { return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this }, round: function () { return this.x = Math.round(this.x), this.y = Math.round(this.y), this }, roundToZero: function () { return this.x = 0 > this.x ? Math.ceil(this.x) : Math.floor(this.x), this.y = 0 > this.y ? Math.ceil(this.y) : Math.floor(this.y), this }, negate: function () { return this.x = -this.x, this.y = -this.y, this }, dot: function (A) { return this.x * A.x + this.y * A.y }, cross: function (A) { return this.x * A.y - this.y * A.x }, lengthSq: function () { return this.x * this.x + this.y * this.y }, length: function () { return Math.sqrt(this.x * this.x + this.y * this.y) }, manhattanLength: function () { return Math.abs(this.x) + Math.abs(this.y) }, normalize: function () { return this.divideScalar(this.length() || 1) }, angle: function () { return Math.atan2(-this.y, -this.x) + Math.PI }, distanceTo: function (A) { return Math.sqrt(this.distanceToSquared(A)) }, distanceToSquared: function (A) { var e = this.x - A.x, t = this.y - A.y; return e * e + t * t }, manhattanDistanceTo: function (A) { return Math.abs(this.x - A.x) + Math.abs(this.y - A.y) }, setLength: function (A) { return this.normalize().multiplyScalar(A) }, lerp: function (A, e) { return this.x += (A.x - this.x) * e, this.y += (A.y - this.y) * e, this }, lerpVectors: function (A, e, t) { return this.subVectors(e, A).multiplyScalar(t).add(A) }, equals: function (A) { return A.x === this.x && A.y === this.y }, fromArray: function (A, e) { return void 0 === e && (e = 0), this.x = A[e], this.y = A[e + 1], this }, toArray: function (A, e) { return void 0 === A && (A = []), void 0 === e && (e = 0), A[e] = this.x, A[e + 1] = this.y, A }, fromBufferAttribute: function (A, e, t) { return void 0 !== t && console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."), this.x = A.getX(e), this.y = A.getY(e), this }, rotateAround: function (A, e) { var t = Math.cos(e), i = Math.sin(e), o = this.x - A.x, n = this.y - A.y; return this.x = o * t - n * i + A.x, this.y = o * i + n * t + A.y, this } }), Object.assign(l.prototype, { isMatrix3: !0, set: function (A, e, t, i, o, n, r, a, s) { var l = this.elements; return l[0] = A, l[1] = i, l[2] = r, l[3] = e, l[4] = o, l[5] = a, l[6] = t, l[7] = n, l[8] = s, this }, identity: function () { return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1), this }, clone: function () { return (new this.constructor).fromArray(this.elements) }, copy: function (A) { var e = this.elements, t = A.elements; return e[0] = t[0], e[1] = t[1], e[2] = t[2], e[3] = t[3], e[4] = t[4], e[5] = t[5], e[6] = t[6], e[7] = t[7], e[8] = t[8], this }, extractBasis: function (A, e, t) { return A.setFromMatrix3Column(this, 0), e.setFromMatrix3Column(this, 1), t.setFromMatrix3Column(this, 2), this }, setFromMatrix4: function (A) { var e = A.elements; return this.set(e[0], e[4], e[8], e[1], e[5], e[9], e[2], e[6], e[10]), this }, multiply: function (A) { return this.multiplyMatrices(this, A) }, premultiply: function (A) { return this.multiplyMatrices(A, this) }, multiplyMatrices: function (A, e) { var t = A.elements, i = e.elements, o = this.elements, n = t[0], r = t[3], a = t[6], s = t[1], l = t[4], c = t[7], h = t[2], d = t[5], p = t[8], g = i[0], u = i[3], f = i[6], m = i[1], C = i[4], y = i[7], v = i[2], I = i[5], E = i[8]; return o[0] = n * g + r * m + a * v, o[3] = n * u + r * C + a * I, o[6] = n * f + r * y + a * E, o[1] = s * g + l * m + c * v, o[4] = s * u + l * C + c * I, o[7] = s * f + l * y + c * E, o[2] = h * g + d * m + p * v, o[5] = h * u + d * C + p * I, o[8] = h * f + d * y + p * E, this }, multiplyScalar: function (A) { var e = this.elements; return e[0] *= A, e[3] *= A, e[6] *= A, e[1] *= A, e[4] *= A, e[7] *= A, e[2] *= A, e[5] *= A, e[8] *= A, this }, determinant: function () { var A = this.elements, e = A[0], t = A[1], i = A[2], o = A[3], n = A[4], r = A[5], a = A[6], s = A[7], l = A[8]; return e * n * l - e * r * s - t * o * l + t * r * a + i * o * s - i * n * a }, getInverse: function (A, e) { void 0 !== e && console.warn("THREE.Matrix3: .getInverse() can no longer be configured to throw on degenerate."); var t = A.elements, i = this.elements, o = t[0], n = t[1], r = t[2], a = t[3], s = t[4], l = t[5], c = t[6], h = t[7], d = t[8], p = d * s - l * h, g = l * c - d * a, u = h * a - s * c, f = o * p + n * g + r * u; if (0 === f) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0); var m = 1 / f; return i[0] = p * m, i[1] = (r * h - d * n) * m, i[2] = (l * n - r * s) * m, i[3] = g * m, i[4] = (d * o - r * c) * m, i[5] = (r * a - l * o) * m, i[6] = u * m, i[7] = (n * c - h * o) * m, i[8] = (s * o - n * a) * m, this }, transpose: function () { var A, e = this.elements; return A = e[1], e[1] = e[3], e[3] = A, A = e[2], e[2] = e[6], e[6] = A, A = e[5], e[5] = e[7], e[7] = A, this }, getNormalMatrix: function (A) { return this.setFromMatrix4(A).getInverse(this).transpose() }, transposeIntoArray: function (A) { var e = this.elements; return A[0] = e[0], A[1] = e[3], A[2] = e[6], A[3] = e[1], A[4] = e[4], A[5] = e[7], A[6] = e[2], A[7] = e[5], A[8] = e[8], this }, setUvTransform: function (A, e, t, i, o, n, r) { var a = Math.cos(o), s = Math.sin(o); this.set(t * a, t * s, -t * (a * n + s * r) + n + A, -i * s, i * a, -i * (-s * n + a * r) + r + e, 0, 0, 1) }, scale: function (A, e) { var t = this.elements; return t[0] *= A, t[3] *= A, t[6] *= A, t[1] *= e, t[4] *= e, t[7] *= e, this }, rotate: function (A) { var e = Math.cos(A), t = Math.sin(A), i = this.elements, o = i[0], n = i[3], r = i[6], a = i[1], s = i[4], l = i[7]; return i[0] = e * o + t * a, i[3] = e * n + t * s, i[6] = e * r + t * l, i[1] = -t * o + e * a, i[4] = -t * n + e * s, i[7] = -t * r + e * l, this }, translate: function (A, e) { var t = this.elements; return t[0] += A * t[2], t[3] += A * t[5], t[6] += A * t[8], t[1] += e * t[2], t[4] += e * t[5], t[7] += e * t[8], this }, equals: function (A) { for (var e = this.elements, t = A.elements, i = 0; 9 > i; i++) if (e[i] !== t[i]) return !1; return !0 }, fromArray: function (A, e) { void 0 === e && (e = 0); for (var t = 0; 9 > t; t++) this.elements[t] = A[t + e]; return this }, toArray: function (A, e) { void 0 === A && (A = []), void 0 === e && (e = 0); var t = this.elements; return A[e] = t[0], A[e + 1] = t[1], A[e + 2] = t[2], A[e + 3] = t[3], A[e + 4] = t[4], A[e + 5] = t[5], A[e + 6] = t[6], A[e + 7] = t[7], A[e + 8] = t[8], A } }); var c = { getDataURL: function (A) { var e; if ("undefined" == typeof HTMLCanvasElement) return A.src; if (A instanceof HTMLCanvasElement) e = A; else { void 0 === r && (r = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas")), r.width = A.width, r.height = A.height; var t = r.getContext("2d"); A instanceof ImageData ? t.putImageData(A, 0, 0) : t.drawImage(A, 0, 0, A.width, A.height), e = r } return e.width > 2048 || e.height > 2048 ? e.toDataURL("image/jpeg", .6) : e.toDataURL("image/png") } }, h = 0; function d(A, e, t, i, o, n, r, c, p, g) { Object.defineProperty(this, "id", { value: h++ }), this.uuid = a.generateUUID(), this.name = "", this.image = void 0 !== A ? A : d.DEFAULT_IMAGE, this.mipmaps = [], this.mapping = void 0 !== e ? e : d.DEFAULT_MAPPING, this.wrapS = void 0 !== t ? t : 1001, this.wrapT = void 0 !== i ? i : 1001, this.magFilter = void 0 !== o ? o : 1006, this.minFilter = void 0 !== n ? n : 1008, this.anisotropy = void 0 !== p ? p : 1, this.format = void 0 !== r ? r : 1023, this.internalFormat = null, this.type = void 0 !== c ? c : 1009, this.offset = new s(0, 0), this.repeat = new s(1, 1), this.center = new s(0, 0), this.rotation = 0, this.matrixAutoUpdate = !0, this.matrix = new l, this.generateMipmaps = !0, this.premultiplyAlpha = !1, this.flipY = !0, this.unpackAlignment = 4, this.encoding = void 0 !== g ? g : 3e3, this.version = 0, this.onUpdate = null } function p(A, e, t, i) { this.x = A || 0, this.y = e || 0, this.z = t || 0, this.w = void 0 !== i ? i : 1 } function g(A, e, t) { this.width = A, this.height = e, this.scissor = new p(0, 0, A, e), this.scissorTest = !1, this.viewport = new p(0, 0, A, e), this.texture = new d(void 0, (t = t || {}).mapping, t.wrapS, t.wrapT, t.magFilter, t.minFilter, t.format, t.type, t.anisotropy, t.encoding), this.texture.image = {}, this.texture.image.width = A, this.texture.image.height = e, this.texture.generateMipmaps = void 0 !== t.generateMipmaps && t.generateMipmaps, this.texture.minFilter = void 0 !== t.minFilter ? t.minFilter : 1006, this.depthBuffer = void 0 === t.depthBuffer || t.depthBuffer, this.stencilBuffer = void 0 === t.stencilBuffer || t.stencilBuffer, this.depthTexture = void 0 !== t.depthTexture ? t.depthTexture : null } function u(A, e, t) { g.call(this, A, e, t), this.samples = 4 } function f(A, e, t, i) { this._x = A || 0, this._y = e || 0, this._z = t || 0, this._w = void 0 !== i ? i : 1 } d.DEFAULT_IMAGE = void 0, d.DEFAULT_MAPPING = 300, d.prototype = Object.assign(Object.create(i.prototype), { constructor: d, 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 (A) { return this.name = A.name, this.image = A.image, this.mipmaps = A.mipmaps.slice(0), this.mapping = A.mapping, this.wrapS = A.wrapS, this.wrapT = A.wrapT, this.magFilter = A.magFilter, this.minFilter = A.minFilter, this.anisotropy = A.anisotropy, this.format = A.format, this.internalFormat = A.internalFormat, this.type = A.type, this.offset.copy(A.offset), this.repeat.copy(A.repeat), this.center.copy(A.center), this.rotation = A.rotation, this.matrixAutoUpdate = A.matrixAutoUpdate, this.matrix.copy(A.matrix), this.generateMipmaps = A.generateMipmaps, this.premultiplyAlpha = A.premultiplyAlpha, this.flipY = A.flipY, this.unpackAlignment = A.unpackAlignment, this.encoding = A.encoding, this }, toJSON: function (A) { var e = void 0 === A || "string" == typeof A; if (!e && void 0 !== A.textures[this.uuid]) return A.textures[this.uuid]; var t = { 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 i = this.image; if (void 0 === i.uuid && (i.uuid = a.generateUUID()), !e && void 0 === A.images[i.uuid]) { var o; if (Array.isArray(i)) { o = []; for (var n = 0, r = i.length; r > n; n++) o.push(c.getDataURL(i[n])) } else o = c.getDataURL(i); A.images[i.uuid] = { uuid: i.uuid, url: o } } t.image = i.uuid } return e || (A.textures[this.uuid] = t), t }, dispose: function () { this.dispatchEvent({ type: "dispose" }) }, transformUv: function (A) { if (300 !== this.mapping) return A; if (A.applyMatrix3(this.matrix), 0 > A.x || A.x > 1) switch (this.wrapS) { case 1e3: A.x = A.x - Math.floor(A.x); break; case 1001: A.x = 0 > A.x ? 0 : 1; break; case 1002: A.x = 1 === Math.abs(Math.floor(A.x) % 2) ? Math.ceil(A.x) - A.x : A.x - Math.floor(A.x) } if (0 > A.y || A.y > 1) switch (this.wrapT) { case 1e3: A.y = A.y - Math.floor(A.y); break; case 1001: A.y = 0 > A.y ? 0 : 1; break; case 1002: A.y = 1 === Math.abs(Math.floor(A.y) % 2) ? Math.ceil(A.y) - A.y : A.y - Math.floor(A.y) } return this.flipY && (A.y = 1 - A.y), A } }), Object.defineProperty(d.prototype, "needsUpdate", { set: function (A) { !0 === A && this.version++ } }), Object.defineProperties(p.prototype, { width: { get: function () { return this.z }, set: function (A) { this.z = A } }, height: { get: function () { return this.w }, set: function (A) { this.w = A } } }), Object.assign(p.prototype, { isVector4: !0, set: function (A, e, t, i) { return this.x = A, this.y = e, this.z = t, this.w = i, this }, setScalar: function (A) { return this.x = A, this.y = A, this.z = A, this.w = A, this }, setX: function (A) { return this.x = A, this }, setY: function (A) { return this.y = A, this }, setZ: function (A) { return this.z = A, this }, setW: function (A) { return this.w = A, this }, setComponent: function (A, e) { switch (A) { case 0: this.x = e; break; case 1: this.y = e; break; case 2: this.z = e; break; case 3: this.w = e; break; default: throw new Error("index is out of range: " + A) } return this }, getComponent: function (A) { switch (A) { 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: " + A) } }, clone: function () { return new this.constructor(this.x, this.y, this.z, this.w) }, copy: function (A) { return this.x = A.x, this.y = A.y, this.z = A.z, this.w = void 0 !== A.w ? A.w : 1, this }, add: function (A, e) { return void 0 !== e ? (console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(A, e)) : (this.x += A.x, this.y += A.y, this.z += A.z, this.w += A.w, this) }, addScalar: function (A) { return this.x += A, this.y += A, this.z += A, this.w += A, this }, addVectors: function (A, e) { return this.x = A.x + e.x, this.y = A.y + e.y, this.z = A.z + e.z, this.w = A.w + e.w, this }, addScaledVector: function (A, e) { return this.x += A.x * e, this.y += A.y * e, this.z += A.z * e, this.w += A.w * e, this }, sub: function (A, e) { return void 0 !== e ? (console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(A, e)) : (this.x -= A.x, this.y -= A.y, this.z -= A.z, this.w -= A.w, this) }, subScalar: function (A) { return this.x -= A, this.y -= A, this.z -= A, this.w -= A, this }, subVectors: function (A, e) { return this.x = A.x - e.x, this.y = A.y - e.y, this.z = A.z - e.z, this.w = A.w - e.w, this }, multiplyScalar: function (A) { return this.x *= A, this.y *= A, this.z *= A, this.w *= A, this }, applyMatrix4: function (A) { var e = this.x, t = this.y, i = this.z, o = this.w, n = A.elements; return this.x = n[0] * e + n[4] * t + n[8] * i + n[12] * o, this.y = n[1] * e + n[5] * t + n[9] * i + n[13] * o, this.z = n[2] * e + n[6] * t + n[10] * i + n[14] * o, this.w = n[3] * e + n[7] * t + n[11] * i + n[15] * o, this }, divideScalar: function (A) { return this.multiplyScalar(1 / A) }, setAxisAngleFromQuaternion: function (A) { this.w = 2 * Math.acos(A.w); var e = Math.sqrt(1 - A.w * A.w); return 1e-4 > e ? (this.x = 1, this.y = 0, this.z = 0) : (this.x = A.x / e, this.y = A.y / e, this.z = A.z / e), this }, setAxisAngleFromRotationMatrix: function (A) { var e, t, i, o, n = A.elements, r = n[0], a = n[4], s = n[8], l = n[1], c = n[5], h = n[9], d = n[2], p = n[6], g = n[10]; if (.01 > Math.abs(a - l) && .01 > Math.abs(s - d) && .01 > Math.abs(h - p)) { if (.1 > Math.abs(a + l) && .1 > Math.abs(s + d) && .1 > Math.abs(h + p) && .1 > Math.abs(r + c + g - 3)) return this.set(1, 0, 0, 0), this; e = Math.PI; var u = (r + 1) / 2, f = (c + 1) / 2, m = (g + 1) / 2, C = (a + l) / 4, y = (s + d) / 4, v = (h + p) / 4; return u > f && u > m ? .01 > u ? (t = 0, i = .707106781, o = .707106781) : (i = C / (t = Math.sqrt(u)), o = y / t) : f > m ? .01 > f ? (t = .707106781, i = 0, o = .707106781) : (t = C / (i = Math.sqrt(f)), o = v / i) : .01 > m ? (t = .707106781, i = .707106781, o = 0) : (t = y / (o = Math.sqrt(m)), i = v / o), this.set(t, i, o, e), this } var I = Math.sqrt((p - h) * (p - h) + (s - d) * (s - d) + (l - a) * (l - a)); return .001 > Math.abs(I) && (I = 1), this.x = (p - h) / I, this.y = (s - d) / I, this.z = (l - a) / I, this.w = Math.acos((r + c + g - 1) / 2), this }, min: function (A) { return this.x = Math.min(this.x, A.x), this.y = Math.min(this.y, A.y), this.z = Math.min(this.z, A.z), this.w = Math.min(this.w, A.w), this }, max: function (A) { return this.x = Math.max(this.x, A.x), this.y = Math.max(this.y, A.y), this.z = Math.max(this.z, A.z), this.w = Math.max(this.w, A.w), this }, clamp: function (A, e) { return this.x = Math.max(A.x, Math.min(e.x, this.x)), this.y = Math.max(A.y, Math.min(e.y, this.y)), this.z = Math.max(A.z, Math.min(e.z, this.z)), this.w = Math.max(A.w, Math.min(e.w, this.w)), this }, clampScalar: function (A, e) { return this.x = Math.max(A, Math.min(e, this.x)), this.y = Math.max(A, Math.min(e, this.y)), this.z = Math.max(A, Math.min(e, this.z)), this.w = Math.max(A, Math.min(e, this.w)), this }, clampLength: function (A, e) { var t = this.length(); return this.divideScalar(t || 1).multiplyScalar(Math.max(A, Math.min(e, 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 }, 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 }, 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 }, roundToZero: function () { return this.x = 0 > this.x ? Math.ceil(this.x) : Math.floor(this.x), this.y = 0 > this.y ? Math.ceil(this.y) : Math.floor(this.y), this.z = 0 > this.z ? Math.ceil(this.z) : Math.floor(this.z), this.w = 0 > this.w ? Math.ceil(this.w) : Math.floor(this.w), this }, negate: function () { return this.x = -this.x, this.y = -this.y, this.z = -this.z, this.w = -this.w, this }, dot: function (A) { return this.x * A.x + this.y * A.y + this.z * A.z + this.w * A.w }, lengthSq: function () { return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w }, length: function () { return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w) }, manhattanLength: function () { return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w) }, normalize: function () { return this.divideScalar(this.length() || 1) }, setLength: function (A) { return this.normalize().multiplyScalar(A) }, lerp: function (A, e) { return this.x += (A.x - this.x) * e, this.y += (A.y - this.y) * e, this.z += (A.z - this.z) * e, this.w += (A.w - this.w) * e, this }, lerpVectors: function (A, e, t) { return this.subVectors(e, A).multiplyScalar(t).add(A) }, equals: function (A) { return A.x === this.x && A.y === this.y && A.z === this.z && A.w === this.w }, fromArray: function (A, e) { return void 0 === e && (e = 0), this.x = A[e], this.y = A[e + 1], this.z = A[e + 2], this.w = A[e + 3], this }, toArray: function (A, e) { return void 0 === A && (A = []), void 0 === e && (e = 0), A[e] = this.x, A[e + 1] = this.y, A[e + 2] = this.z, A[e + 3] = this.w, A }, fromBufferAttribute: function (A, e, t) { return void 0 !== t && console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."), this.x = A.getX(e), this.y = A.getY(e), this.z = A.getZ(e), this.w = A.getW(e), this } }), g.prototype = Object.assign(Object.create(i.prototype), { constructor: g, isWebGLRenderTarget: !0, setSize: function (A, e) { this.width === A && this.height === e || (this.width = A, this.height = e, this.texture.image.width = A, this.texture.image.height = e, this.dispose()), this.viewport.set(0, 0, A, e), this.scissor.set(0, 0, A, e) }, clone: function () { return (new this.constructor).copy(this) }, copy: function (A) { return this.width = A.width, this.height = A.height, this.viewport.copy(A.viewport), this.texture = A.texture.clone(), this.depthBuffer = A.depthBuffer, this.stencilBuffer = A.stencilBuffer, this.depthTexture = A.depthTexture, this }, dispose: function () { this.dispatchEvent({ type: "dispose" }) } }), u.prototype = Object.assign(Object.create(g.prototype), { constructor: u, isWebGLMultisampleRenderTarget: !0, copy: function (A) { return g.prototype.copy.call(this, A), this.samples = A.samples, this } }), Object.assign(f, { slerp: function (A, e, t, i) { return t.copy(A).slerp(e, i) }, slerpFlat: function (A, e, t, i, o, n, r) { var a = t[i + 0], s = t[i + 1], l = t[i + 2], c = t[i + 3], h = o[n + 0], d = o[n + 1], p = o[n + 2], g = o[n + 3]; if (c !== g || a !== h || s !== d || l !== p) { var u = 1 - r, f = a * h + s * d + l * p + c * g, m = 0 > f ? -1 : 1, C = 1 - f * f; if (C > Number.EPSILON) { var y = Math.sqrt(C), v = Math.atan2(y, f * m); u = Math.sin(u * v) / y, r = Math.sin(r * v) / y } var I = r * m; if (a = a * u + h * I, s = s * u + d * I, l = l * u + p * I, c = c * u + g * I, u === 1 - r) { var E = 1 / Math.sqrt(a * a + s * s + l * l + c * c); a *= E, s *= E, l *= E, c *= E } } A[e] = a, A[e + 1] = s, A[e + 2] = l, A[e + 3] = c } }), Object.defineProperties(f.prototype, { x: { get: function () { return this._x }, set: function (A) { this._x = A, this._onChangeCallback() } }, y: { get: function () { return this._y }, set: function (A) { this._y = A, this._onChangeCallback() } }, z: { get: function () { return this._z }, set: function (A) { this._z = A, this._onChangeCallback() } }, w: { get: function () { return this._w }, set: function (A) { this._w = A, this._onChangeCallback() } } }), Object.assign(f.prototype, { isQuaternion: !0, set: function (A, e, t, i) { return this._x = A, this._y = e, this._z = t, this._w = i, this._onChangeCallback(), this }, clone: function () { return new this.constructor(this._x, this._y, this._z, this._w) }, copy: function (A) { return this._x = A.x, this._y = A.y, this._z = A.z, this._w = A.w, this._onChangeCallback(), this }, setFromEuler: function (A, e) { if (!A || !A.isEuler) throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order."); var t = A._x, i = A._y, o = A._z, n = A.order, r = Math.cos, a = Math.sin, s = r(t / 2), l = r(i / 2), c = r(o / 2), h = a(t / 2), d = a(i / 2), p = a(o / 2); return "XYZ" === n ? (this._x = h * l * c + s * d * p, this._y = s * d * c - h * l * p, this._z = s * l * p + h * d * c, this._w = s * l * c - h * d * p) : "YXZ" === n ? (this._x = h * l * c + s * d * p, this._y = s * d * c - h * l * p, this._z = s * l * p - h * d * c, this._w = s * l * c + h * d * p) : "ZXY" === n ? (this._x = h * l * c - s * d * p, this._y = s * d * c + h * l * p, this._z = s * l * p + h * d * c, this._w = s * l * c - h * d * p) : "ZYX" === n ? (this._x = h * l * c - s * d * p, this._y = s * d * c + h * l * p, this._z = s * l * p - h * d * c, this._w = s * l * c + h * d * p) : "YZX" === n ? (this._x = h * l * c + s * d * p, this._y = s * d * c + h * l * p, this._z = s * l * p - h * d * c, this._w = s * l * c - h * d * p) : "XZY" === n && (this._x = h * l * c - s * d * p, this._y = s * d * c - h * l * p, this._z = s * l * p + h * d * c, this._w = s * l * c + h * d * p), !1 !== e && this._onChangeCallback(), this }, setFromAxisAngle: function (A, e) { var t = e / 2, i = Math.sin(t); return this._x = A.x * i, this._y = A.y * i, this._z = A.z * i, this._w = Math.cos(t), this._onChangeCallback(), this }, setFromRotationMatrix: function (A) { var e, t = A.elements, i = t[0], o = t[4], n = t[8], r = t[1], a = t[5], s = t[9], l = t[2], c = t[6], h = t[10], d = i + a + h; return d > 0 ? (e = .5 / Math.sqrt(d + 1), this._w = .25 / e, this._x = (c - s) * e, this._y = (n - l) * e, this._z = (r - o) * e) : i > a && i > h ? (e = 2 * Math.sqrt(1 + i - a - h), this._w = (c - s) / e, this._x = .25 * e, this._y = (o + r) / e, this._z = (n + l) / e) : a > h ? (e = 2 * Math.sqrt(1 + a - i - h), this._w = (n - l) / e, this._x = (o + r) / e, this._y = .25 * e, this._z = (s + c) / e) : (e = 2 * Math.sqrt(1 + h - i - a), this._w = (r - o) / e, this._x = (n + l) / e, this._y = (s + c) / e, this._z = .25 * e), this._onChangeCallback(), this }, setFromUnitVectors: function (A, e) { var t = A.dot(e) + 1; return 1e-6 > t ? (t = 0, Math.abs(A.x) > Math.abs(A.z) ? (this._x = -A.y, this._y = A.x, this._z = 0, this._w = t) : (this._x = 0, this._y = -A.z, this._z = A.y, this._w = t)) : (this._x = A.y * e.z - A.z * e.y, this._y = A.z * e.x - A.x * e.z, this._z = A.x * e.y - A.y * e.x, this._w = t), this.normalize() }, angleTo: function (A) { return 2 * Math.acos(Math.abs(a.clamp(this.dot(A), -1, 1))) }, rotateTowards: function (A, e) { var t = this.angleTo(A); if (0 === t) return this; var i = Math.min(1, e / t); return this.slerp(A, i), this }, inverse: function () { return this.conjugate() }, conjugate: function () { return this._x *= -1, this._y *= -1, this._z *= -1, this._onChangeCallback(), this }, dot: function (A) { return this._x * A._x + this._y * A._y + this._z * A._z + this._w * A._w }, lengthSq: function () { return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w }, length: function () { return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w) }, normalize: function () { var A = this.length(); return 0 === A ? (this._x = 0, this._y = 0, this._z = 0, this._w = 1) : (this._x = this._x * (A = 1 / A), this._y = this._y * A, this._z = this._z * A, this._w = this._w * A), this._onChangeCallback(), this }, multiply: function (A, e) { return void 0 !== e ? (console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), this.multiplyQuaternions(A, e)) : this.multiplyQuaternions(this, A) }, premultiply: function (A) { return this.multiplyQuaternions(A, this) }, multiplyQuaternions: function (A, e) { var t = A._x, i = A._y, o = A._z, n = A._w, r = e._x, a = e._y, s = e._z, l = e._w; return this._x = t * l + n * r + i * s - o * a, this._y = i * l + n * a + o * r - t * s, this._z = o * l + n * s + t * a - i * r, this._w = n * l - t * r - i * a - o * s, this._onChangeCallback(), this }, slerp: function (A, e) { if (0 === e) return this; if (1 === e) return this.copy(A); var t = this._x, i = this._y, o = this._z, n = this._w, r = n * A._w + t * A._x + i * A._y + o * A._z; if (0 > r ? (this._w = -A._w, this._x = -A._x, this._y = -A._y, this._z = -A._z, r = -r) : this.copy(A), r >= 1) return this._w = n, this._x = t, this._y = i, this._z = o, this; var a = 1 - r * r; if (Number.EPSILON >= a) { var s = 1 - e; return this._w = s * n + e * this._w, this._x = s * t + e * this._x, this._y = s * i + e * this._y, this._z = s * o + e * this._z, this.normalize(), this._onChangeCallback(), this } var l = Math.sqrt(a), c = Math.atan2(l, r), h = Math.sin((1 - e) * c) / l, d = Math.sin(e * c) / l; return this._w = n * h + this._w * d, this._x = t * h + this._x * d, this._y = i * h + this._y * d, this._z = o * h + this._z * d, this._onChangeCallback(), this }, equals: function (A) { return A._x === this._x && A._y === this._y && A._z === this._z && A._w === this._w }, fromArray: function (A, e) { return void 0 === e && (e = 0), this._x = A[e], this._y = A[e + 1], this._z = A[e + 2], this._w = A[e + 3], this._onChangeCallback(), this }, toArray: function (A, e) { return void 0 === A && (A = []), void 0 === e && (e = 0), A[e] = this._x, A[e + 1] = this._y, A[e + 2] = this._z, A[e + 3] = this._w, A }, fromBufferAttribute: function (A, e) { return this._x = A.getX(e), this._y = A.getY(e), this._z = A.getZ(e), this._w = A.getW(e), this }, _onChange: function (A) { return this._onChangeCallback = A, this }, _onChangeCallback: function () {} }); var m = new y, C = new f; function y(A, e, t) { this.x = A || 0, this.y = e || 0, this.z = t || 0 } Object.assign(y.prototype, { isVector3: !0, set: function (A, e, t) { return this.x = A, this.y = e, this.z = t, this }, setScalar: function (A) { return this.x = A, this.y = A, this.z = A, this }, setX: function (A) { return this.x = A, this }, setY: function (A) { return this.y = A, this }, setZ: function (A) { return this.z = A, this }, setComponent: function (A, e) { switch (A) { case 0: this.x = e; break; case 1: this.y = e; break; case 2: this.z = e; break; default: throw new Error("index is out of range: " + A) } return this }, getComponent: function (A) { switch (A) { case 0: return this.x; case 1: return this.y; case 2: return this.z; default: throw new Error("index is out of range: " + A) } }, clone: function () { return new this.constructor(this.x, this.y, this.z) }, copy: function (A) { return this.x = A.x, this.y = A.y, this.z = A.z, this }, add: function (A, e) { return void 0 !== e ? (console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(A, e)) : (this.x += A.x, this.y += A.y, this.z += A.z, this) }, addScalar: function (A) { return this.x += A, this.y += A, this.z += A, this }, addVectors: function (A, e) { return this.x = A.x + e.x, this.y = A.y + e.y, this.z = A.z + e.z, this }, addScaledVector: function (A, e) { return this.x += A.x * e, this.y += A.y * e, this.z += A.z * e, this }, sub: function (A, e) { return void 0 !== e ? (console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(A, e)) : (this.x -= A.x, this.y -= A.y, this.z -= A.z, this) }, subScalar: function (A) { return this.x -= A, this.y -= A, this.z -= A, this }, subVectors: function (A, e) { return this.x = A.x - e.x, this.y = A.y - e.y, this.z = A.z - e.z, this }, multiply: function (A, e) { return void 0 !== e ? (console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), this.multiplyVectors(A, e)) : (this.x *= A.x, this.y *= A.y, this.z *= A.z, this) }, multiplyScalar: function (A) { return this.x *= A, this.y *= A, this.z *= A, this }, multiplyVectors: function (A, e) { return this.x = A.x * e.x, this.y = A.y * e.y, this.z = A.z * e.z, this }, applyEuler: function (A) { return A && A.isEuler || console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."), this.applyQuaternion(C.setFromEuler(A)) }, applyAxisAngle: function (A, e) { return this.applyQuaternion(C.setFromAxisAngle(A, e)) }, applyMatrix3: function (A) { var e = this.x, t = this.y, i = this.z, o = A.elements; return this.x = o[0] * e + o[3] * t + o[6] * i, this.y = o[1] * e + o[4] * t + o[7] * i, this.z = o[2] * e + o[5] * t + o[8] * i, this }, applyNormalMatrix: function (A) { return this.applyMatrix3(A).normalize() }, applyMatrix4: function (A) { var e = this.x, t = this.y, i = this.z, o = A.elements, n = 1 / (o[3] * e + o[7] * t + o[11] * i + o[15]); return this.x = (o[0] * e + o[4] * t + o[8] * i + o[12]) * n, this.y = (o[1] * e + o[5] * t + o[9] * i + o[13]) * n, this.z = (o[2] * e + o[6] * t + o[10] * i + o[14]) * n, this }, applyQuaternion: function (A) { var e = this.x, t = this.y, i = this.z, o = A.x, n = A.y, r = A.z, a = A.w, s = a * e + n * i - r * t, l = a * t + r * e - o * i, c = a * i + o * t - n * e, h = -o * e - n * t - r * i; return this.x = s * a + h * -o + l * -r - c * -n, this.y = l * a + h * -n + c * -o - s * -r, this.z = c * a + h * -r + s * -n - l * -o, this }, project: function (A) { return this.applyMatrix4(A.matrixWorldInverse).applyMatrix4(A.projectionMatrix) }, unproject: function (A) { return this.applyMatrix4(A.projectionMatrixInverse).applyMatrix4(A.matrixWorld) }, transformDirection: function (A) { var e = this.x, t = this.y, i = this.z, o = A.elements; return this.x = o[0] * e + o[4] * t + o[8] * i, this.y = o[1] * e + o[5] * t + o[9] * i, this.z = o[2] * e + o[6] * t + o[10] * i, this.normalize() }, divide: function (A) { return this.x /= A.x, this.y /= A.y, this.z /= A.z, this }, divideScalar: function (A) { return this.multiplyScalar(1 / A) }, min: function (A) { return this.x = Math.min(this.x, A.x), this.y = Math.min(this.y, A.y), this.z = Math.min(this.z, A.z), this }, max: function (A) { return this.x = Math.max(this.x, A.x), this.y = Math.max(this.y, A.y), this.z = Math.max(this.z, A.z), this }, clamp: function (A, e) { return this.x = Math.max(A.x, Math.min(e.x, this.x)), this.y = Math.max(A.y, Math.min(e.y, this.y)), this.z = Math.max(A.z, Math.min(e.z, this.z)), this }, clampScalar: function (A, e) { return this.x = Math.max(A, Math.min(e, this.x)), this.y = Math.max(A, Math.min(e, this.y)), this.z = Math.max(A, Math.min(e, this.z)), this }, clampLength: function (A, e) { var t = this.length(); return this.divideScalar(t || 1).multiplyScalar(Math.max(A, Math.min(e, t))) }, floor: function () { return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this }, ceil: function () { return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this }, round: function () { return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this }, roundToZero: function () { return this.x = 0 > this.x ? Math.ceil(this.x) : Math.floor(this.x), this.y = 0 > this.y ? Math.ceil(this.y) : Math.floor(this.y), this.z = 0 > this.z ? Math.ceil(this.z) : Math.floor(this.z), this }, negate: function () { return this.x = -this.x, this.y = -this.y, this.z = -this.z, this }, dot: function (A) { return this.x * A.x + this.y * A.y + this.z * A.z }, lengthSq: function () { return this.x * this.x + this.y * this.y + this.z * this.z }, length: function () { return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) }, manhattanLength: function () { return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) }, normalize: function () { return this.divideScalar(this.length() || 1) }, setLength: function (A) { return this.normalize().multiplyScalar(A) }, lerp: function (A, e) { return this.x += (A.x - this.x) * e, this.y += (A.y - this.y) * e, this.z += (A.z - this.z) * e, this }, lerpVectors: function (A, e, t) { return this.subVectors(e, A).multiplyScalar(t).add(A) }, cross: function (A, e) { return void 0 !== e ? (console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."), this.crossVectors(A, e)) : this.crossVectors(this, A) }, crossVectors: function (A, e) { var t = A.x, i = A.y, o = A.z, n = e.x, r = e.y, a = e.z; return this.x = i * a - o * r, this.y = o * n - t * a, this.z = t * r - i * n, this }, projectOnVector: function (A) { var e = A.lengthSq(); if (0 === e) return this.set(0, 0, 0); var t = A.dot(this) / e; return this.copy(A).multiplyScalar(t) }, projectOnPlane: function (A) { return m.copy(this).projectOnVector(A), this.sub(m) }, reflect: function (A) { return this.sub(m.copy(A).multiplyScalar(2 * this.dot(A))) }, angleTo: function (A) { var e = Math.sqrt(this.lengthSq() * A.lengthSq()); if (0 === e) return Math.PI / 2; var t = this.dot(A) / e; return Math.acos(a.clamp(t, -1, 1)) }, distanceTo: function (A) { return Math.sqrt(this.distanceToSquared(A)) }, distanceToSquared: function (A) { var e = this.x - A.x, t = this.y - A.y, i = this.z - A.z; return e * e + t * t + i * i }, manhattanDistanceTo: function (A) { return Math.abs(this.x - A.x) + Math.abs(this.y - A.y) + Math.abs(this.z - A.z) }, setFromSpherical: function (A) { return this.setFromSphericalCoords(A.radius, A.phi, A.theta) }, setFromSphericalCoords: function (A, e, t) { var i = Math.sin(e) * A; return this.x = i * Math.sin(t), this.y = Math.cos(e) * A, this.z = i * Math.cos(t), this }, setFromCylindrical: function (A) { return this.setFromCylindricalCoords(A.radius, A.theta, A.y) }, setFromCylindricalCoords: function (A, e, t) { return this.x = A * Math.sin(e), this.y = t, this.z = A * Math.cos(e), this }, setFromMatrixPosition: function (A) { var e = A.elements; return this.x = e[12], this.y = e[13], this.z = e[14], this }, setFromMatrixScale: function (A) { var e = this.setFromMatrixColumn(A, 0).length(), t = this.setFromMatrixColumn(A, 1).length(), i = this.setFromMatrixColumn(A, 2).length(); return this.x = e, this.y = t, this.z = i, this }, setFromMatrixColumn: function (A, e) { return this.fromArray(A.elements, 4 * e) }, setFromMatrix3Column: function (A, e) { return this.fromArray(A.elements, 3 * e) }, equals: function (A) { return A.x === this.x && A.y === this.y && A.z === this.z }, fromArray: function (A, e) { return void 0 === e && (e = 0), this.x = A[e], this.y = A[e + 1], this.z = A[e + 2], this }, toArray: function (A, e) { return void 0 === A && (A = []), void 0 === e && (e = 0), A[e] = this.x, A[e + 1] = this.y, A[e + 2] = this.z, A }, fromBufferAttribute: function (A, e, t) { return void 0 !== t && console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."), this.x = A.getX(e), this.y = A.getY(e), this.z = A.getZ(e), this } }); var v = new y, I = new M, E = new y(0, 0, 0), B = new y(1, 1, 1), x = new y, S = new y, w = new y; function M() { 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.") } Object.assign(M.prototype, { isMatrix4: !0, set: function (A, e, t, i, o, n, r, a, s, l, c, h, d, p, g, u) { var f = this.elements; return f[0] = A, f[4] = e, f[8] = t, f[12] = i, f[1] = o, f[5] = n, f[9] = r, f[13] = a, f[2] = s, f[6] = l, f[10] = c, f[14] = h, f[3] = d, f[7] = p, f[11] = g, f[15] = u, this }, identity: function () { return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this }, clone: function () { return (new M).fromArray(this.elements) }, copy: function (A) { var e = this.elements, t = A.elements; return e[0] = t[0], e[1] = t[1], e[2] = t[2], e[3] = t[3], e[4] = t[4], e[5] = t[5], e[6] = t[6], e[7] = t[7], e[8] = t[8], e[9] = t[9], e[10] = t[10], e[11] = t[11], e[12] = t[12], e[13] = t[13], e[14] = t[14], e[15] = t[15], this }, copyPosition: function (A) { var e = this.elements, t = A.elements; return e[12] = t[12], e[13] = t[13], e[14] = t[14], this }, extractBasis: function (A, e, t) { return A.setFromMatrixColumn(this, 0), e.setFromMatrixColumn(this, 1), t.setFromMatrixColumn(this, 2), this }, makeBasis: function (A, e, t) { return this.set(A.x, e.x, t.x, 0, A.y, e.y, t.y, 0, A.z, e.z, t.z, 0, 0, 0, 0, 1), this }, extractRotation: function (A) { var e = this.elements, t = A.elements, i = 1 / v.setFromMatrixColumn(A, 0).length(), o = 1 / v.setFromMatrixColumn(A, 1).length(), n = 1 / v.setFromMatrixColumn(A, 2).length(); return e[0] = t[0] * i, e[1] = t[1] * i, e[2] = t[2] * i, e[3] = 0, e[4] = t[4] * o, e[5] = t[5] * o, e[6] = t[6] * o, e[7] = 0, e[8] = t[8] * n, e[9] = t[9] * n, e[10] = t[10] * n, e[11] = 0, e[12] = 0, e[13] = 0, e[14] = 0, e[15] = 1, this }, makeRotationFromEuler: function (A) { A && A.isEuler || console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); var e = this.elements, t = A.x, i = A.y, o = A.z, n = Math.cos(t), r = Math.sin(t), a = Math.cos(i), s = Math.sin(i), l = Math.cos(o), c = Math.sin(o); if ("XYZ" === A.order) { var h = n * l, d = n * c, p = r * l, g = r * c; e[0] = a * l, e[4] = -a * c, e[8] = s, e[1] = d + p * s, e[5] = h - g * s, e[9] = -r * a, e[2] = g - h * s, e[6] = p + d * s, e[10] = n * a } else if ("YXZ" === A.order) { var u = a * c, f = s * l; e[0] = (m = a * l) + (C = s * c) * r, e[4] = f * r - u, e[8] = n * s, e[1] = n * c, e[5] = n * l, e[9] = -r, e[2] = u * r - f, e[6] = C + m * r, e[10] = n * a } else if ("ZXY" === A.order) { var m, C; u = a * c, f = s * l; e[0] = (m = a * l) - (C = s * c) * r, e[4] = -n * c, e[8] = f + u * r, e[1] = u + f * r, e[5] = n * l, e[9] = C - m * r, e[2] = -n * s, e[6] = r, e[10] = n * a } else if ("ZYX" === A.order) { h = n * l, d = n * c, p = r * l, g = r * c; e[0] = a * l, e[4] = p * s - d, e[8] = h * s + g, e[1] = a * c, e[5] = g * s + h, e[9] = d * s - p, e[2] = -s, e[6] = r * a, e[10] = n * a } else if ("YZX" === A.order) { var y = n * a, v = n * s, I = r * a, E = r * s; e[0] = a * l, e[4] = E - y * c, e[8] = I * c + v, e[1] = c, e[5] = n * l, e[9] = -r * l, e[2] = -s * l, e[6] = v * c + I, e[10] = y - E * c } else if ("XZY" === A.order) { y = n * a, v = n * s, I = r * a, E = r * s; e[0] = a * l, e[4] = -c, e[8] = s * l, e[1] = y * c + E, e[5] = n * l, e[9] = v * c - I, e[2] = I * c - v, e[6] = r * l, e[10] = E * c + y } return e[3] = 0, e[7] = 0, e[11] = 0, e[12] = 0, e[13] = 0, e[14] = 0, e[15] = 1, this }, makeRotationFromQuaternion: function (A) { return this.compose(E, A, B) }, lookAt: function (A, e, t) { var i = this.elements; return w.subVectors(A, e), 0 === w.lengthSq() && (w.z = 1), w.normalize(), x.crossVectors(t, w), 0 === x.lengthSq() && (1 === Math.abs(t.z) ? w.x += 1e-4 : w.z += 1e-4, w.normalize(), x.crossVectors(t, w)), x.normalize(), S.crossVectors(w, x), i[0] = x.x, i[4] = S.x, i[8] = w.x, i[1] = x.y, i[5] = S.y, i[9] = w.y, i[2] = x.z, i[6] = S.z, i[10] = w.z, this }, multiply: function (A, e) { return void 0 !== e ? (console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."), this.multiplyMatrices(A, e)) : this.multiplyMatrices(this, A) }, premultiply: function (A) { return this.multiplyMatrices(A, this) }, multiplyMatrices: function (A, e) { var t = A.elements, i = e.elements, o = this.elements, n = t[0], r = t[4], a = t[8], s = t[12], l = t[1], c = t[5], h = t[9], d = t[13], p = t[2], g = t[6], u = t[10], f = t[14], m = t[3], C = t[7], y = t[11], v = t[15], I = i[0], E = i[4], B = i[8], x = i[12], S = i[1], w = i[5], M = i[9], b = i[13], U = i[2], F = i[6], K = i[10], Q = i[14], R = i[3], T = i[7], k = i[11], D = i[15]; return o[0] = n * I + r * S + a * U + s * R, o[4] = n * E + r * w + a * F + s * T, o[8] = n * B + r * M + a * K + s * k, o[12] = n * x + r * b + a * Q + s * D, o[1] = l * I + c * S + h * U + d * R, o[5] = l * E + c * w + h * F + d * T, o[9] = l * B + c * M + h * K + d * k, o[13] = l * x + c * b + h * Q + d * D, o[2] = p * I + g * S + u * U + f * R, o[6] = p * E + g * w + u * F + f * T, o[10] = p * B + g * M + u * K + f * k, o[14] = p * x + g * b + u * Q + f * D, o[3] = m * I + C * S + y * U + v * R, o[7] = m * E + C * w + y * F + v * T, o[11] = m * B + C * M + y * K + v * k, o[15] = m * x + C * b + y * Q + v * D, this }, multiplyScalar: function (A) { var e = this.elements; return e[0] *= A, e[4] *= A, e[8] *= A, e[12] *= A, e[1] *= A, e[5] *= A, e[9] *= A, e[13] *= A, e[2] *= A, e[6] *= A, e[10] *= A, e[14] *= A, e[3] *= A, e[7] *= A, e[11] *= A, e[15] *= A, this }, determinant: function () { var A = this.elements, e = A[0], t = A[4], i = A[8], o = A[12], n = A[1], r = A[5], a = A[9], s = A[13], l = A[2], c = A[6], h = A[10], d = A[14]; return A[3] * (+o * a * c - i * s * c - o * r * h + t * s * h + i * r * d - t * a * d) + A[7] * (+e * a * d - e * s * h + o * n * h - i * n * d + i * s * l - o * a * l) + A[11] * (+e * s * c - e * r * d - o * n * c + t * n * d + o * r * l - t * s * l) + A[15] * (-i * r * l - e * a * c + e * r * h + i * n * c - t * n * h + t * a * l) }, transpose: function () { var A, e = this.elements; return A = e[1], e[1] = e[4], e[4] = A, A = e[2], e[2] = e[8], e[8] = A, A = e[6], e[6] = e[9], e[9] = A, A = e[3], e[3] = e[12], e[12] = A, A = e[7], e[7] = e[13], e[13] = A, A = e[11], e[11] = e[14], e[14] = A, this }, setPosition: function (A, e, t) { var i = this.elements; return A.isVector3 ? (i[12] = A.x, i[13] = A.y, i[14] = A.z) : (i[12] = A, i[13] = e, i[14] = t), this }, getInverse: function (A, e) { void 0 !== e && console.warn("THREE.Matrix4: .getInverse() can no longer be configured to throw on degenerate."); var t = this.elements, i = A.elements, o = i[0], n = i[1], r = i[2], a = i[3], s = i[4], l = i[5], c = i[6], h = i[7], d = i[8], p = i[9], g = i[10], u = i[11], f = i[12], m = i[13], C = i[14], y = i[15], v = p * C * h - m * g * h + m * c * u - l * C * u - p * c * y + l * g * y, I = f * g * h - d * C * h - f * c * u + s * C * u + d * c * y - s * g * y, E = d * m * h - f * p * h + f * l * u - s * m * u - d * l * y + s * p * y, B = f * p * c - d * m * c - f * l * g + s * m * g + d * l * C - s * p * C, x = o * v + n * I + r * E + a * B; if (0 === x) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); var S = 1 / x; return t[0] = v * S, t[1] = (m * g * a - p * C * a - m * r * u + n * C * u + p * r * y - n * g * y) * S, t[2] = (l * C * a - m * c * a + m * r * h - n * C * h - l * r * y + n * c * y) * S, t[3] = (p * c * a - l * g * a - p * r * h + n * g * h + l * r * u - n * c * u) * S, t[4] = I * S, t[5] = (d * C * a - f * g * a + f * r * u - o * C * u - d * r * y + o * g * y) * S, t[6] = (f * c * a - s * C * a - f * r * h + o * C * h + s * r * y - o * c * y) * S, t[7] = (s * g * a - d * c * a + d * r * h - o * g * h - s * r * u + o * c * u) * S, t[8] = E * S, t[9] = (f * p * a - d * m * a - f * n * u + o * m * u + d * n * y - o * p * y) * S, t[10] = (s * m * a - f * l * a + f * n * h - o * m * h - s * n * y + o * l * y) * S, t[11] = (d * l * a - s * p * a - d * n * h + o * p * h + s * n * u - o * l * u) * S, t[12] = B * S, t[13] = (d * m * r - f * p * r + f * n * g - o * m * g - d * n * C + o * p * C) * S, t[14] = (f * l * r - s * m * r - f * n * c + o * m * c + s * n * C - o * l * C) * S, t[15] = (s * p * r - d * l * r + d * n * c - o * p * c - s * n * g + o * l * g) * S, this }, scale: function (A) { var e = this.elements, t = A.x, i = A.y, o = A.z; return e[0] *= t, e[4] *= i, e[8] *= o, e[1] *= t, e[5] *= i, e[9] *= o, e[2] *= t, e[6] *= i, e[10] *= o, e[3] *= t, e[7] *= i, e[11] *= o, this }, getMaxScaleOnAxis: function () { var A = this.elements; return Math.sqrt(Math.max(A[0] * A[0] + A[1] * A[1] + A[2] * A[2], A[4] * A[4] + A[5] * A[5] + A[6] * A[6], A[8] * A[8] + A[9] * A[9] + A[10] * A[10])) }, makeTranslation: function (A, e, t) { return this.set(1, 0, 0, A, 0, 1, 0, e, 0, 0, 1, t, 0, 0, 0, 1), this }, makeRotationX: function (A) { var e = Math.cos(A), t = Math.sin(A); return this.set(1, 0, 0, 0, 0, e, -t, 0, 0, t, e, 0, 0, 0, 0, 1), this }, makeRotationY: function (A) { var e = Math.cos(A), t = Math.sin(A); return this.set(e, 0, t, 0, 0, 1, 0, 0, -t, 0, e, 0, 0, 0, 0, 1), this }, makeRotationZ: function (A) { var e = Math.cos(A), t = Math.sin(A); return this.set(e, -t, 0, 0, t, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this }, makeRotationAxis: function (A, e) { var t = Math.cos(e), i = Math.sin(e), o = 1 - t, n = A.x, r = A.y, a = A.z, s = o * n, l = o * r; return this.set(s * n + t, s * r - i * a, s * a + i * r, 0, s * r + i * a, l * r + t, l * a - i * n, 0, s * a - i * r, l * a + i * n, o * a * a + t, 0, 0, 0, 0, 1), this }, makeScale: function (A, e, t) { return this.set(A, 0, 0, 0, 0, e, 0, 0, 0, 0, t, 0, 0, 0, 0, 1), this }, makeShear: function (A, e, t) { return this.set(1, e, t, 0, A, 1, t, 0, A, e, 1, 0, 0, 0, 0, 1), this }, compose: function (A, e, t) { var i = this.elements, o = e._x, n = e._y, r = e._z, a = e._w, s = o + o, l = n + n, c = r + r, h = o * s, d = o * l, p = o * c, g = n * l, u = n * c, f = r * c, m = a * s, C = a * l, y = a * c, v = t.x, I = t.y, E = t.z; return i[0] = (1 - (g + f)) * v, i[1] = (d + y) * v, i[2] = (p - C) * v, i[3] = 0, i[4] = (d - y) * I, i[5] = (1 - (h + f)) * I, i[6] = (u + m) * I, i[7] = 0, i[8] = (p + C) * E, i[9] = (u - m) * E, i[10] = (1 - (h + g)) * E, i[11] = 0, i[12] = A.x, i[13] = A.y, i[14] = A.z, i[15] = 1, this }, decompose: function (A, e, t) { var i = this.elements, o = v.set(i[0], i[1], i[2]).length(), n = v.set(i[4], i[5], i[6]).length(), r = v.set(i[8], i[9], i[10]).length(); 0 > this.determinant() && (o = -o), A.x = i[12], A.y = i[13], A.z = i[14], I.copy(this); var a = 1 / o, s = 1 / n, l = 1 / r; return I.elements[0] *= a, I.elements[1] *= a, I.elements[2] *= a, I.elements[4] *= s, I.elements[5] *= s, I.elements[6] *= s, I.elements[8] *= l, I.elements[9] *= l, I.elements[10] *= l, e.setFromRotationMatrix(I), t.x = o, t.y = n, t.z = r, this }, makePerspective: function (A, e, t, i, o, n) { void 0 === n && console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs."); var r = this.elements, a = 2 * o / (t - i), s = (e + A) / (e - A), l = (t + i) / (t - i), c = -(n + o) / (n - o), h = -2 * n * o / (n - o); return r[0] = 2 * o / (e - A), r[4] = 0, r[8] = s, r[12] = 0, r[1] = 0, r[5] = a, r[9] = l, r[13] = 0, r[2] = 0, r[6] = 0, r[10] = c, r[14] = h, r[3] = 0, r[7] = 0, r[11] = -1, r[15] = 0, this }, makeOrthographic: function (A, e, t, i, o, n) { var r = this.elements, a = 1 / (e - A), s = 1 / (t - i), l = 1 / (n - o), c = (e + A) * a, h = (t + i) * s, d = (n + o) * l; return r[0] = 2 * a, r[4] = 0, r[8] = 0, r[12] = -c, r[1] = 0, r[5] = 2 * s, r[9] = 0, r[13] = -h, r[2] = 0, r[6] = 0, r[10] = -2 * l, r[14] = -d, r[3] = 0, r[7] = 0, r[11] = 0, r[15] = 1, this }, equals: function (A) { for (var e = this.elements, t = A.elements, i = 0; 16 > i; i++) if (e[i] !== t[i]) return !1; return !0 }, fromArray: function (A, e) { void 0 === e && (e = 0); for (var t = 0; 16 > t; t++) this.elements[t] = A[t + e]; return this }, toArray: function (A, e) { void 0 === A && (A = []), void 0 === e && (e = 0); var t = this.elements; return A[e] = t[0], A[e + 1] = t[1], A[e + 2] = t[2], A[e + 3] = t[3], A[e + 4] = t[4], A[e + 5] = t[5], A[e + 6] = t[6], A[e + 7] = t[7], A[e + 8] = t[8], A[e + 9] = t[9], A[e + 10] = t[10], A[e + 11] = t[11], A[e + 12] = t[12], A[e + 13] = t[13], A[e + 14] = t[14], A[e + 15] = t[15], A } }); var b = new M, U = new f; function F(A, e, t, i) { this._x = A || 0, this._y = e || 0, this._z = t || 0, this._order = i || F.DefaultOrder } function K() { this.mask = 1 } F.RotationOrders = ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"], F.DefaultOrder = "XYZ", Object.defineProperties(F.prototype, { x: { get: function () { return this._x }, set: function (A) { this._x = A, this._onChangeCallback() } }, y: { get: function () { return this._y }, set: function (A) { this._y = A, this._onChangeCallback() } }, z: { get: function () { return this._z }, set: function (A) { this._z = A, this._onChangeCallback() } }, order: { get: function () { return this._order }, set: function (A) { this._order = A, this._onChangeCallback() } } }), Object.assign(F.prototype, { isEuler: !0, set: function (A, e, t, i) { return this._x = A, this._y = e, this._z = t, this._order = i || this._order, this._onChangeCallback(), this }, clone: function () { return new this.constructor(this._x, this._y, this._z, this._order) }, copy: function (A) { return this._x = A._x, this._y = A._y, this._z = A._z, this._order = A._order, this._onChangeCallback(), this }, setFromRotationMatrix: function (A, e, t) { var i = a.clamp, o = A.elements, n = o[0], r = o[4], s = o[8], l = o[1], c = o[5], h = o[9], d = o[2], p = o[6], g = o[10]; return "XYZ" === (e = e || this._order) ? (this._y = Math.asin(i(s, -1, 1)), .9999999 > Math.abs(s) ? (this._x = Math.atan2(-h, g), this._z = Math.atan2(-r, n)) : (this._x = Math.atan2(p, c), this._z = 0)) : "YXZ" === e ? (this._x = Math.asin(-i(h, -1, 1)), .9999999 > Math.abs(h) ? (this._y = Math.atan2(s, g), this._z = Math.atan2(l, c)) : (this._y = Math.atan2(-d, n), this._z = 0)) : "ZXY" === e ? (this._x = Math.asin(i(p, -1, 1)), .9999999 > Math.abs(p) ? (this._y = Math.atan2(-d, g), this._z = Math.atan2(-r, c)) : (this._y = 0, this._z = Math.atan2(l, n))) : "ZYX" === e ? (this._y = Math.asin(-i(d, -1, 1)), .9999999 > Math.abs(d) ? (this._x = Math.atan2(p, g), this._z = Math.atan2(l, n)) : (this._x = 0, this._z = Math.atan2(-r, c))) : "YZX" === e ? (this._z = Math.asin(i(l, -1, 1)), .9999999 > Math.abs(l) ? (this._x = Math.atan2(-h, c), this._y = Math.atan2(-d, n)) : (this._x = 0, this._y = Math.atan2(s, g))) : "XZY" === e ? (this._z = Math.asin(-i(r, -1, 1)), .9999999 > Math.abs(r) ? (this._x = Math.atan2(p, c), this._y = Math.atan2(s, n)) : (this._x = Math.atan2(-h, g), this._y = 0)) : console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: " + e), this._order = e, !1 !== t && this._onChangeCallback(), this }, setFromQuaternion: function (A, e, t) { return b.makeRotationFromQuaternion(A), this.setFromRotationMatrix(b, e, t) }, setFromVector3: function (A, e) { return this.set(A.x, A.y, A.z, e || this._order) }, reorder: function (A) { return U.setFromEuler(this), this.setFromQuaternion(U, A) }, equals: function (A) { return A._x === this._x && A._y === this._y && A._z === this._z && A._order === this._order }, fromArray: function (A) { return this._x = A[0], this._y = A[1], this._z = A[2], void 0 !== A[3] && (this._order = A[3]), this._onChangeCallback(), this }, toArray: function (A, e) { return void 0 === A && (A = []), void 0 === e && (e = 0), A[e] = this._x, A[e + 1] = this._y, A[e + 2] = this._z, A[e + 3] = this._order, A }, toVector3: function (A) { return A ? A.set(this._x, this._y, this._z) : new y(this._x, this._y, this._z) }, _onChange: function (A) { return this._onChangeCallback = A, this }, _onChangeCallback: function () {} }), Object.assign(K.prototype, { set: function (A) { this.mask = 1 << A | 0 }, enable: function (A) { this.mask |= 1 << A | 0 }, enableAll: function () { this.mask = -1 }, toggle: function (A) { this.mask ^= 1 << A | 0 }, disable: function (A) { this.mask &= ~(1 << A | 0) }, disableAll: function () { this.mask = 0 }, test: function (A) { return 0 != (this.mask & A.mask) } }); var Q = 0, R = new y, T = new f, k = new M, D = new y, L = new y, N = new y, O = new f, V = new y(1, 0, 0), G = new y(0, 1, 0), P = new y(0, 0, 1), q = { type: "added" }, j = { type: "removed" }; function H() { Object.defineProperty(this, "id", { value: Q++ }), this.uuid = a.generateUUID(), this.name = "", this.type = "Object3D", this.parent = null, this.children = [], this.up = H.DefaultUp.clone(); var A = new y, e = new F, t = new f, i = new y(1, 1, 1); e._onChange((function () { t.setFromEuler(e, !1) })), t._onChange((function () { e.setFromQuaternion(t, void 0, !1) })), Object.defineProperties(this, { position: { configurable: !0, enumerable: !0, value: A }, rotation: { configurable: !0, enumerable: !0, value: e }, quaternion: { configurable: !0, enumerable: !0, value: t }, scale: { configurable: !0, enumerable: !0, value: i }, modelViewMatrix: { value: new M }, normalMatrix: { value: new l } }), this.matrix = new M, this.matrixWorld = new M, this.matrixAutoUpdate = H.DefaultMatrixAutoUpdate, this.matrixWorldNeedsUpdate = !1, this.layers = new K, this.visible = !0, this.castShadow = !1, this.receiveShadow = !1, this.frustumCulled = !0, this.renderOrder = 0, this.userData = {} } function Y() { H.call(this), this.type = "Scene", this.background = null, this.environment = null, this.fog = null, this.overrideMaterial = null, this.autoUpdate = !0, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { detail: this })) } H.DefaultUp = new y(0, 1, 0), H.DefaultMatrixAutoUpdate = !0, H.prototype = Object.assign(Object.create(i.prototype), { constructor: H, isObject3D: !0, onBeforeRender: function () {}, onAfterRender: function () {}, applyMatrix4: function (A) { this.matrixAutoUpdate && this.updateMatrix(), this.matrix.premultiply(A), this.matrix.decompose(this.position, this.quaternion, this.scale) }, applyQuaternion: function (A) { return this.quaternion.premultiply(A), this }, setRotationFromAxisAngle: function (A, e) { this.quaternion.setFromAxisAngle(A, e) }, setRotationFromEuler: function (A) { this.quaternion.setFromEuler(A, !0) }, setRotationFromMatrix: function (A) { this.quaternion.setFromRotationMatrix(A) }, setRotationFromQuaternion: function (A) { this.quaternion.copy(A) }, rotateOnAxis: function (A, e) { return T.setFromAxisAngle(A, e), this.quaternion.multiply(T), this }, rotateOnWorldAxis: function (A, e) { return T.setFromAxisAngle(A, e), this.quaternion.premultiply(T), this }, rotateX: function (A) { return this.rotateOnAxis(V, A) }, rotateY: function (A) { return this.rotateOnAxis(G, A) }, rotateZ: function (A) { return this.rotateOnAxis(P, A) }, translateOnAxis: function (A, e) { return R.copy(A).applyQuaternion(this.quaternion), this.position.add(R.multiplyScalar(e)), this }, translateX: function (A) { return this.translateOnAxis(V, A) }, translateY: function (A) { return this.translateOnAxis(G, A) }, translateZ: function (A) { return this.translateOnAxis(P, A) }, localToWorld: function (A) { return A.applyMatrix4(this.matrixWorld) }, worldToLocal: function (A) { return A.applyMatrix4(k.getInverse(this.matrixWorld)) }, lookAt: function (A, e, t) { A.isVector3 ? D.copy(A) : D.set(A, e, t); var i = this.parent; this.updateWorldMatrix(!0, !1), L.setFromMatrixPosition(this.matrixWorld), this.isCamera || this.isLight ? k.lookAt(L, D, this.up) : k.lookAt(D, L, this.up), this.quaternion.setFromRotationMatrix(k), i && (k.extractRotation(i.matrixWorld), T.setFromRotationMatrix(k), this.quaternion.premultiply(T.inverse())) }, add: function (A) { if (arguments.length > 1) { for (var e = 0; arguments.length > e; e++) this.add(arguments[e]); return this } return A === this ? (console.error("THREE.Object3D.add: object can't be added as a child of itself.", A), this) : (A && A.isObject3D ? (null !== A.parent && A.parent.remove(A), A.parent = this, this.children.push(A), A.dispatchEvent(q)) : console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.", A), this) }, remove: function (A) { if (arguments.length > 1) { for (var e = 0; arguments.length > e; e++) this.remove(arguments[e]); return this } var t = this.children.indexOf(A); return -1 !== t && (A.parent = null, this.children.splice(t, 1), A.dispatchEvent(j)), this }, attach: function (A) { return this.updateWorldMatrix(!0, !1), k.getInverse(this.matrixWorld), null !== A.parent && (A.parent.updateWorldMatrix(!0, !1), k.multiply(A.parent.matrixWorld)), A.applyMatrix4(k), A.updateWorldMatrix(!1, !1), this.add(A), this }, getObjectById: function (A) { return this.getObjectByProperty("id", A) }, getObjectByName: function (A) { return this.getObjectByProperty("name", A) }, getObjectByProperty: function (A, e) { if (this[A] === e) return this; for (var t = 0, i = this.children.length; i > t; t++) { var o = this.children[t].getObjectByProperty(A, e); if (void 0 !== o) return o } }, getWorldPosition: function (A) { return void 0 === A && (console.warn("THREE.Object3D: .getWorldPosition() target is now required"), A = new y), this.updateMatrixWorld(!0), A.setFromMatrixPosition(this.matrixWorld) }, getWorldQuaternion: function (A) { return void 0 === A && (console.warn("THREE.Object3D: .getWorldQuaternion() target is now required"), A = new f), this.updateMatrixWorld(!0), this.matrixWorld.decompose(L, A, N), A }, getWorldScale: function (A) { return void 0 === A && (console.warn("THREE.Object3D: .getWorldScale() target is now required"), A = new y), this.updateMatrixWorld(!0), this.matrixWorld.decompose(L, O, A), A }, getWorldDirection: function (A) { void 0 === A && (console.warn("THREE.Object3D: .getWorldDirection() target is now required"), A = new y), this.updateMatrixWorld(!0); var e = this.matrixWorld.elements; return A.set(e[8], e[9], e[10]).normalize() }, raycast: function () {}, traverse: function (A) { A(this); for (var e = this.children, t = 0, i = e.length; i > t; t++) e[t].traverse(A) }, traverseVisible: function (A) { if (!1 !== this.visible) { A(this); for (var e = this.children, t = 0, i = e.length; i > t; t++) e[t].traverseVisible(A) } }, traverseAncestors: function (A) { var e = this.parent; null !== e && (A(e), e.traverseAncestors(A)) }, updateMatrix: function () { this.matrix.compose(this.position, this.quaternion, this.scale), this.matrixWorldNeedsUpdate = !0 }, updateMatrixWorld: function (A) { this.matrixAutoUpdate && this.updateMatrix(), (this.matrixWorldNeedsUpdate || A) && (null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), this.matrixWorldNeedsUpdate = !1, A = !0); for (var e = this.children, t = 0, i = e.length; i > t; t++) e[t].updateMatrixWorld(A) }, updateWorldMatrix: function (A, e) { var t = this.parent; if (!0 === A && null !== t && t.updateWorldMatrix(!0, !1), this.matrixAutoUpdate && this.updateMatrix(), null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), !0 === e) for (var i = this.children, o = 0, n = i.length; n > o; o++) i[o].updateWorldMatrix(!1, !0) }, toJSON: function (A) { var e = void 0 === A || "string" == typeof A, t = {}; e && (A = { geometries: {}, materials: {}, textures: {}, images: {}, shapes: {} }, t.metadata = { version: 4.5, type: "Object", generator: "Object3D.toJSON" }); var i = {}; function o(e, t) { return void 0 === e[t.uuid] && (e[t.uuid] = t.toJSON(A)), t.uuid } if (i.uuid = this.uuid, i.type = this.type, "" !== this.name && (i.name = this.name), !0 === this.castShadow && (i.castShadow = !0), !0 === this.receiveShadow && (i.receiveShadow = !0), !1 === this.visible && (i.visible = !1), !1 === this.frustumCulled && (i.frustumCulled = !1), 0 !== this.renderOrder && (i.renderOrder = this.renderOrder), "{}" !== JSON.stringify(this.userData) && (i.userData = this.userData), i.layers = this.layers.mask, i.matrix = this.matrix.toArray(), !1 === this.matrixAutoUpdate && (i.matrixAutoUpdate = !1), this.isInstancedMesh && (i.type = "InstancedMesh", i.count = this.count, i.instanceMatrix = this.instanceMatrix.toJSON()), this.isMesh || this.isLine || this.isPoints) { i.geometry = o(A.geometries, this.geometry); var n = this.geometry.parameters; if (void 0 !== n && void 0 !== n.shapes) { var r = n.shapes; if (Array.isArray(r)) for (var a = 0, s = r.length; s > a; a++) { o(A.shapes, r[a]) } else o(A.shapes, r) } } if (void 0 !== this.material) if (Array.isArray(this.material)) { var l = []; for (a = 0, s = this.material.length; s > a; a++) l.push(o(A.materials, this.material[a])); i.material = l } else i.material = o(A.materials, this.material); if (this.children.length > 0) { i.children = []; for (a = 0; this.children.length > a; a++) i.children.push(this.children[a].toJSON(A).object) } if (e) { var c = g(A.geometries), h = g(A.materials), d = g(A.textures), p = g(A.images); r = g(A.shapes); c.length > 0 && (t.geometries = c), h.length > 0 && (t.materials = h), d.length > 0 && (t.textures = d), p.length > 0 && (t.images = p), r.length > 0 && (t.shapes = r) } return t.object = i, t; function g(A) { var e = []; for (var t in A) { var i = A[t]; delete i.metadata, e.push(i) } return e } }, clone: function (A) { return (new this.constructor).copy(this, A) }, copy: function (A, e) { if (void 0 === e && (e = !0), this.name = A.name, this.up.copy(A.up), this.position.copy(A.position), this.quaternion.copy(A.quaternion), this.scale.copy(A.scale), this.matrix.copy(A.matrix), this.matrixWorld.copy(A.matrixWorld), this.matrixAutoUpdate = A.matrixAutoUpdate, this.matrixWorldNeedsUpdate = A.matrixWorldNeedsUpdate, this.layers.mask = A.layers.mask, this.visible = A.visible, this.castShadow = A.castShadow, this.receiveShadow = A.receiveShadow, this.frustumCulled = A.frustumCulled, this.renderOrder = A.renderOrder, this.userData = JSON.parse(JSON.stringify(A.userData)), !0 === e) for (var t = 0; A.children.length > t; t++) { this.add(A.children[t].clone()) } return this } }), Y.prototype = Object.assign(Object.create(H.prototype), { constructor: Y, isScene: !0, copy: function (A, e) { return H.prototype.copy.call(this, A, e), null !== A.background && (this.background = A.background.clone()), null !== A.environment && (this.environment = A.environment.clone()), null !== A.fog && (this.fog = A.fog.clone()), null !== A.overrideMaterial && (this.overrideMaterial = A.overrideMaterial.clone()), this.autoUpdate = A.autoUpdate, this.matrixAutoUpdate = A.matrixAutoUpdate, this }, toJSON: function (A) { var e = H.prototype.toJSON.call(this, A); return null !== this.background && (e.object.background = this.background.toJSON(A)), null !== this.environment && (e.object.environment = this.environment.toJSON(A)), null !== this.fog && (e.object.fog = this.fog.toJSON()), e }, dispose: function () { this.dispatchEvent({ type: "dispose" }) } }); var W = [new y, new y, new y, new y, new y, new y, new y, new y], J = new y, z = new aA, Z = new y, X = new y, _ = new y, AA = new y, eA = new y, tA = new y, iA = new y, oA = new y, nA = new y, rA = new y; function aA(A, e) { this.min = void 0 !== A ? A : new y(1 / 0, 1 / 0, 1 / 0), this.max = void 0 !== e ? e : new y(-1 / 0, -1 / 0, -1 / 0) } function sA(A, e, t, i, o) { var n, r; for (n = 0, r = A.length - 3; r >= n; n += 3) { rA.fromArray(A, n); var a = o.x * Math.abs(rA.x) + o.y * Math.abs(rA.y) + o.z * Math.abs(rA.z), s = e.dot(rA), l = t.dot(rA), c = i.dot(rA); if (Math.max(-Math.max(s, l, c), Math.min(s, l, c)) > a) return !1 } return !0 } Object.assign(aA.prototype, { isBox3: !0, set: function (A, e) { return this.min.copy(A), this.max.copy(e), this }, setFromArray: function (A) { for (var e = 1 / 0, t = 1 / 0, i = 1 / 0, o = -1 / 0, n = -1 / 0, r = -1 / 0, a = 0, s = A.length; s > a; a += 3) { var l = A[a], c = A[a + 1], h = A[a + 2]; e > l && (e = l), t > c && (t = c), i > h && (i = h), l > o && (o = l), c > n && (n = c), h > r && (r = h) } return this.min.set(e, t, i), this.max.set(o, n, r), this }, setFromBufferAttribute: function (A) { for (var e = 1 / 0, t = 1 / 0, i = 1 / 0, o = -1 / 0, n = -1 / 0, r = -1 / 0, a = 0, s = A.count; s > a; a++) { var l = A.getX(a), c = A.getY(a), h = A.getZ(a); e > l && (e = l), t > c && (t = c), i > h && (i = h), l > o && (o = l), c > n && (n = c), h > r && (r = h) } return this.min.set(e, t, i), this.max.set(o, n, r), this }, setFromPoints: function (A) { this.makeEmpty(); for (var e = 0, t = A.length; t > e; e++) this.expandByPoint(A[e]); return this }, setFromCenterAndSize: function (A, e) { var t = J.copy(e).multiplyScalar(.5); return this.min.copy(A).sub(t), this.max.copy(A).add(t), this }, setFromObject: function (A) { return this.makeEmpty(), this.expandByObject(A) }, clone: function () { return (new this.constructor).copy(this) }, copy: function (A) { return this.min.copy(A.min), this.max.copy(A.max), this }, 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 }, isEmpty: function () { return this.min.x > this.max.x || this.min.y > this.max.y || this.min.z > this.max.z }, getCenter: function (A) { return void 0 === A && (console.warn("THREE.Box3: .getCenter() target is now required"), A = new y), this.isEmpty() ? A.set(0, 0, 0) : A.addVectors(this.min, this.max).multiplyScalar(.5) }, getSize: function (A) { return void 0 === A && (console.warn("THREE.Box3: .getSize() target is now required"), A = new y), this.isEmpty() ? A.set(0, 0, 0) : A.subVectors(this.max, this.min) }, expandByPoint: function (A) { return this.min.min(A), this.max.max(A), this }, expandByVector: function (A) { return this.min.sub(A), this.max.add(A), this }, expandByScalar: function (A) { return this.min.addScalar(-A), this.max.addScalar(A), this }, expandByObject: function (A) { A.updateWorldMatrix(!1, !1); var e = A.geometry; void 0 !== e && (null === e.boundingBox && e.computeBoundingBox(), z.copy(e.boundingBox), z.applyMatrix4(A.matrixWorld), this.union(z)); for (var t = A.children, i = 0, o = t.length; o > i; i++) this.expandByObject(t[i]); return this }, containsPoint: function (A) { return !(this.min.x > A.x || A.x > this.max.x || this.min.y > A.y || A.y > this.max.y || this.min.z > A.z || A.z > this.max.z) }, containsBox: function (A) { return !(this.min.x > A.min.x || A.max.x > this.max.x || this.min.y > A.min.y || A.max.y > this.max.y || this.min.z > A.min.z || A.max.z > this.max.z) }, getParameter: function (A, e) { return void 0 === e && (console.warn("THREE.Box3: .getParameter() target is now required"), e = new y), e.set((A.x - this.min.x) / (this.max.x - this.min.x), (A.y - this.min.y) / (this.max.y - this.min.y), (A.z - this.min.z) / (this.max.z - this.min.z)) }, intersectsBox: function (A) { return !(this.min.x > A.max.x || A.min.x > this.max.x || this.min.y > A.max.y || A.min.y > this.max.y || this.min.z > A.max.z || A.min.z > this.max.z) }, intersectsSphere: function (A) { return this.clampPoint(A.center, J), J.distanceToSquared(A.center) <= A.radius * A.radius }, intersectsPlane: function (A) { var e, t; return A.normal.x > 0 ? (e = A.normal.x * this.min.x, t = A.normal.x * this.max.x) : (e = A.normal.x * this.max.x, t = A.normal.x * this.min.x), A.normal.y > 0 ? (e += A.normal.y * this.min.y, t += A.normal.y * this.max.y) : (e += A.normal.y * this.max.y, t += A.normal.y * this.min.y), A.normal.z > 0 ? (e += A.normal.z * this.min.z, t += A.normal.z * this.max.z) : (e += A.normal.z * this.max.z, t += A.normal.z * this.min.z), -A.constant >= e && t >= -A.constant }, intersectsTriangle: function (A) { if (this.isEmpty()) return !1; this.getCenter(iA), oA.subVectors(this.max, iA), Z.subVectors(A.a, iA), X.subVectors(A.b, iA), _.subVectors(A.c, iA), AA.subVectors(X, Z), eA.subVectors(_, X), tA.subVectors(Z, _); var e = [0, -AA.z, AA.y, 0, -eA.z, eA.y, 0, -tA.z, tA.y, AA.z, 0, -AA.x, eA.z, 0, -eA.x, tA.z, 0, -tA.x, -AA.y, AA.x, 0, -eA.y, eA.x, 0, -tA.y, tA.x, 0]; return !!sA(e, Z, X, _, oA) && (!!sA(e = [1, 0, 0, 0, 1, 0, 0, 0, 1], Z, X, _, oA) && (nA.crossVectors(AA, eA), sA(e = [nA.x, nA.y, nA.z], Z, X, _, oA))) }, clampPoint: function (A, e) { return void 0 === e && (console.warn("THREE.Box3: .clampPoint() target is now required"), e = new y), e.copy(A).clamp(this.min, this.max) }, distanceToPoint: function (A) { return J.copy(A).clamp(this.min, this.max).sub(A).length() }, getBoundingSphere: function (A) { return void 0 === A && console.error("THREE.Box3: .getBoundingSphere() target is now required"), this.getCenter(A.center), A.radius = .5 * this.getSize(J).length(), A }, intersect: function (A) { return this.min.max(A.min), this.max.min(A.max), this.isEmpty() && this.makeEmpty(), this }, union: function (A) { return this.min.min(A.min), this.max.max(A.max), this }, applyMatrix4: function (A) { return this.isEmpty() || (W[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(A), W[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(A), W[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(A), W[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(A), W[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(A), W[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(A), W[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(A), W[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(A), this.setFromPoints(W)), this }, translate: function (A) { return this.min.add(A), this.max.add(A), this }, equals: function (A) { return A.min.equals(this.min) && A.max.equals(this.max) } }); var lA = new aA; function cA(A, e) { this.center = void 0 !== A ? A : new y, this.radius = void 0 !== e ? e : 0 } Object.assign(cA.prototype, { set: function (A, e) { return this.center.copy(A), this.radius = e, this }, setFromPoints: function (A, e) { var t = this.center; void 0 !== e ? t.copy(e) : lA.setFromPoints(A).getCenter(t); for (var i = 0, o = 0, n = A.length; n > o; o++) i = Math.max(i, t.distanceToSquared(A[o])); return this.radius = Math.sqrt(i), this }, clone: function () { return (new this.constructor).copy(this) }, copy: function (A) { return this.center.copy(A.center), this.radius = A.radius, this }, empty: function () { return 0 >= this.radius }, containsPoint: function (A) { return A.distanceToSquared(this.center) <= this.radius * this.radius }, distanceToPoint: function (A) { return A.distanceTo(this.center) - this.radius }, intersectsSphere: function (A) { var e = this.radius + A.radius; return A.center.distanceToSquared(this.center) <= e * e }, intersectsBox: function (A) { return A.intersectsSphere(this) }, intersectsPlane: function (A) { return Math.abs(A.distanceToPoint(this.center)) <= this.radius }, clampPoint: function (A, e) { var t = this.center.distanceToSquared(A); return void 0 === e && (console.warn("THREE.Sphere: .clampPoint() target is now required"), e = new y), e.copy(A), t > this.radius * this.radius && (e.sub(this.center).normalize(), e.multiplyScalar(this.radius).add(this.center)), e }, getBoundingBox: function (A) { return void 0 === A && (console.warn("THREE.Sphere: .getBoundingBox() target is now required"), A = new aA), A.set(this.center, this.center), A.expandByScalar(this.radius), A }, applyMatrix4: function (A) { return this.center.applyMatrix4(A), this.radius = this.radius * A.getMaxScaleOnAxis(), this }, translate: function (A) { return this.center.add(A), this }, equals: function (A) { return A.center.equals(this.center) && A.radius === this.radius } }); var hA = new y, dA = new y, pA = new y, gA = new y, uA = new y, fA = new y, mA = new y; function CA(A, e) { this.origin = void 0 !== A ? A : new y, this.direction = void 0 !== e ? e : new y(0, 0, -1) } Object.assign(CA.prototype, { set: function (A, e) { return this.origin.copy(A), this.direction.copy(e), this }, clone: function () { return (new this.constructor).copy(this) }, copy: function (A) { return this.origin.copy(A.origin), this.direction.copy(A.direction), this }, at: function (A, e) { return void 0 === e && (console.warn("THREE.Ray: .at() target is now required"), e = new y), e.copy(this.direction).multiplyScalar(A).add(this.origin) }, lookAt: function (A) { return this.direction.copy(A).sub(this.origin).normalize(), this }, recast: function (A) { return this.origin.copy(this.at(A, hA)), this }, closestPointToPoint: function (A, e) { void 0 === e && (console.warn("THREE.Ray: .closestPointToPoint() target is now required"), e = new y), e.subVectors(A, this.origin); var t = e.dot(this.direction); return 0 > t ? e.copy(this.origin) : e.copy(this.direction).multiplyScalar(t).add(this.origin) }, distanceToPoint: function (A) { return Math.sqrt(this.distanceSqToPoint(A)) }, distanceSqToPoint: function (A) { var e = hA.subVectors(A, this.origin).dot(this.direction); return 0 > e ? this.origin.distanceToSquared(A) : (hA.copy(this.direction).multiplyScalar(e).add(this.origin), hA.distanceToSquared(A)) }, distanceSqToSegment: function (A, e, t, i) { dA.copy(A).add(e).multiplyScalar(.5), pA.copy(e).sub(A).normalize(), gA.copy(this.origin).sub(dA); var o, n, r, a, s = .5 * A.distanceTo(e), l = -this.direction.dot(pA), c = gA.dot(this.direction), h = -gA.dot(pA), d = gA.lengthSq(), p = Math.abs(1 - l * l); if (p > 0) if (n = l * c - h, a = s * p, 0 > (o = l * h - c)) n > -a ? n > a ? r = -(o = Math.max(0, -(l * s + c))) * o + (n = o > 0 ? s : Math.min(Math.max(-s, -h), s)) * (n + 2 * h) + d : (o = 0, r = (n = Math.min(Math.max(-s, -h), s)) * (n + 2 * h) + d) : r = -(o = Math.max(0, -(-l * s + c))) * o + (n = o > 0 ? -s : Math.min(Math.max(-s, -h), s)) * (n + 2 * h) + d; else if (n < -a) n = -s, r = -(o = Math.max(0, -(l * n + c))) * o + n * (n + 2 * h) + d; else if (a < n) n = s, r = -(o = Math.max(0, -(l * n + c))) * o + n * (n + 2 * h) + d; else { var g = 1 / p; r = (o *= g) * (o + l * (n *= g) + 2 * c) + n * (l * o + n + 2 * h) + d } else n = l > 0 ? -s : s, r = -(o = Math.max(0, -(l * n + c))) * o + n * (n + 2 * h) + d; return t && t.copy(this.direction).multiplyScalar(o).add(this.origin), i && i.copy(pA).multiplyScalar(n).add(dA), r }, intersectSphere: function (A, e) { hA.subVectors(A.center, this.origin); var t = hA.dot(this.direction), i = hA.dot(hA) - t * t, o = A.radius * A.radius; if (i > o) return null; var n = Math.sqrt(o - i), r = t - n, a = t + n; return 0 > r && 0 > a ? null : this.at(0 > r ? a : r, e) }, intersectsSphere: function (A) { return this.distanceSqToPoint(A.center) <= A.radius * A.radius }, distanceToPlane: function (A) { var e = A.normal.dot(this.direction); if (0 === e) return 0 === A.distanceToPoint(this.origin) ? 0 : null; var t = -(this.origin.dot(A.normal) + A.constant) / e; return 0 > t ? null : t }, intersectPlane: function (A, e) { var t = this.distanceToPlane(A); return null === t ? null : this.at(t, e) }, intersectsPlane: function (A) { var e = A.distanceToPoint(this.origin); return 0 === e || 0 > A.normal.dot(this.direction) * e }, intersectBox: function (A, e) { var t, i, o, n, r, a, s = 1 / this.direction.x, l = 1 / this.direction.y, c = 1 / this.direction.z, h = this.origin; return 0 > s ? (t = (A.max.x - h.x) * s, i = (A.min.x - h.x) * s) : (t = (A.min.x - h.x) * s, i = (A.max.x - h.x) * s), 0 > l ? (o = (A.max.y - h.y) * l, n = (A.min.y - h.y) * l) : (o = (A.min.y - h.y) * l, n = (A.max.y - h.y) * l), t > n || o > i ? null : ((o > t || t != t) && (t = o), (i > n || i != i) && (i = n), 0 > c ? (r = (A.max.z - h.z) * c, a = (A.min.z - h.z) * c) : (r = (A.min.z - h.z) * c, a = (A.max.z - h.z) * c), t > a || r > i ? null : ((r > t || t != t) && (t = r), (i > a || i != i) && (i = a), 0 > i ? null : this.at(0 > t ? i : t, e))) }, intersectsBox: function (A) { return null !== this.intersectBox(A, hA) }, intersectTriangle: function (A, e, t, i, o) { uA.subVectors(e, A), fA.subVectors(t, A), mA.crossVectors(uA, fA); var n, r = this.direction.dot(mA); if (r > 0) { if (i) return null; n = 1 } else { if (r >= 0) return null; n = -1, r = -r } gA.subVectors(this.origin, A); var a = n * this.direction.dot(fA.crossVectors(gA, fA)); if (0 > a) return null; var s = n * this.direction.dot(uA.cross(gA)); if (0 > s) return null; if (a + s > r) return null; var l = -n * gA.dot(mA); return 0 > l ? null : this.at(l / r, o) }, applyMatrix4: function (A) { return this.origin.applyMatrix4(A), this.direction.transformDirection(A), this }, equals: function (A) { return A.origin.equals(this.origin) && A.direction.equals(this.direction) } }); var yA = new y, vA = new y, IA = new l; function EA(A, e) { this.normal = void 0 !== A ? A : new y(1, 0, 0), this.constant = void 0 !== e ? e : 0 } Object.assign(EA.prototype, { isPlane: !0, set: function (A, e) { return this.normal.copy(A), this.constant = e, this }, setComponents: function (A, e, t, i) { return this.normal.set(A, e, t), this.constant = i, this }, setFromNormalAndCoplanarPoint: function (A, e) { return this.normal.copy(A), this.constant = -e.dot(this.normal), this }, setFromCoplanarPoints: function (A, e, t) { var i = yA.subVectors(t, e).cross(vA.subVectors(A, e)).normalize(); return this.setFromNormalAndCoplanarPoint(i, A), this }, clone: function () { return (new this.constructor).copy(this) }, copy: function (A) { return this.normal.copy(A.normal), this.constant = A.constant, this }, normalize: function () { var A = 1 / this.normal.length(); return this.normal.multiplyScalar(A), this.constant *= A, this }, negate: function () { return this.constant *= -1, this.normal.negate(), this }, distanceToPoint: function (A) { return this.normal.dot(A) + this.constant }, distanceToSphere: function (A) { return this.distanceToPoint(A.center) - A.radius }, projectPoint: function (A, e) { return void 0 === e && (console.warn("THREE.Plane: .projectPoint() target is now required"), e = new y), e.copy(this.normal).multiplyScalar(-this.distanceToPoint(A)).add(A) }, intersectLine: function (A, e) { void 0 === e && (console.warn("THREE.Plane: .intersectLine() target is now required"), e = new y); var t = A.delta(yA), i = this.normal.dot(t); if (0 === i) return 0 === this.distanceToPoint(A.start) ? e.copy(A.start) : void 0; var o = -(A.start.dot(this.normal) + this.constant) / i; return 0 > o || o > 1 ? void 0 : e.copy(t).multiplyScalar(o).add(A.start) }, intersectsLine: function (A) { var e = this.distanceToPoint(A.start), t = this.distanceToPoint(A.end); return 0 > e && t > 0 || 0 > t && e > 0 }, intersectsBox: function (A) { return A.intersectsPlane(this) }, intersectsSphere: function (A) { return A.intersectsPlane(this) }, coplanarPoint: function (A) { return void 0 === A && (console.warn("THREE.Plane: .coplanarPoint() target is now required"), A = new y), A.copy(this.normal).multiplyScalar(-this.constant) }, applyMatrix4: function (A, e) { var t = e || IA.getNormalMatrix(A), i = this.coplanarPoint(yA).applyMatrix4(A), o = this.normal.applyMatrix3(t).normalize(); return this.constant = -i.dot(o), this }, translate: function (A) { return this.constant -= A.dot(this.normal), this }, equals: function (A) { return A.normal.equals(this.normal) && A.constant === this.constant } }); var BA = new y, xA = new y, SA = new y, wA = new y, MA = new y, bA = new y, UA = new y, FA = new y, KA = new y, QA = new y; function RA(A, e, t) { this.a = void 0 !== A ? A : new y, this.b = void 0 !== e ? e : new y, this.c = void 0 !== t ? t : new y } Object.assign(RA, { getNormal: function (A, e, t, i) { void 0 === i && (console.warn("THREE.Triangle: .getNormal() target is now required"), i = new y), i.subVectors(t, e), BA.subVectors(A, e), i.cross(BA); var o = i.lengthSq(); return o > 0 ? i.multiplyScalar(1 / Math.sqrt(o)) : i.set(0, 0, 0) }, getBarycoord: function (A, e, t, i, o) { BA.subVectors(i, e), xA.subVectors(t, e), SA.subVectors(A, e); var n = BA.dot(BA), r = BA.dot(xA), a = BA.dot(SA), s = xA.dot(xA), l = xA.dot(SA), c = n * s - r * r; if (void 0 === o && (console.warn("THREE.Triangle: .getBarycoord() target is now required"), o = new y), 0 === c) return o.set(-2, -1, -1); var h = 1 / c, d = (s * a - r * l) * h, p = (n * l - r * a) * h; return o.set(1 - d - p, p, d) }, containsPoint: function (A, e, t, i) { return RA.getBarycoord(A, e, t, i, wA), wA.x >= 0 && wA.y >= 0 && 1 >= wA.x + wA.y }, getUV: function (A, e, t, i, o, n, r, a) { return this.getBarycoord(A, e, t, i, wA), a.set(0, 0), a.addScaledVector(o, wA.x), a.addScaledVector(n, wA.y), a.addScaledVector(r, wA.z), a }, isFrontFacing: function (A, e, t, i) { return BA.subVectors(t, e), xA.subVectors(A, e), 0 > BA.cross(xA).dot(i) } }), Object.assign(RA.prototype, { set: function (A, e, t) { return this.a.copy(A), this.b.copy(e), this.c.copy(t), this }, setFromPointsAndIndices: function (A, e, t, i) { return this.a.copy(A[e]), this.b.copy(A[t]), this.c.copy(A[i]), this }, clone: function () { return (new this.constructor).copy(this) }, copy: function (A) { return this.a.copy(A.a), this.b.copy(A.b), this.c.copy(A.c), this }, getArea: function () { return BA.subVectors(this.c, this.b), xA.subVectors(this.a, this.b), .5 * BA.cross(xA).length() }, getMidpoint: function (A) { return void 0 === A && (console.warn("THREE.Triangle: .getMidpoint() target is now required"), A = new y), A.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3) }, getNormal: function (A) { return RA.getNormal(this.a, this.b, this.c, A) }, getPlane: function (A) { return void 0 === A && (console.warn("THREE.Triangle: .getPlane() target is now required"), A = new EA), A.setFromCoplanarPoints(this.a, this.b, this.c) }, getBarycoord: function (A, e) { return RA.getBarycoord(A, this.a, this.b, this.c, e) }, getUV: function (A, e, t, i, o) { return RA.getUV(A, this.a, this.b, this.c, e, t, i, o) }, containsPoint: function (A) { return RA.containsPoint(A, this.a, this.b, this.c) }, isFrontFacing: function (A) { return RA.isFrontFacing(this.a, this.b, this.c, A) }, intersectsBox: function (A) { return A.intersectsTriangle(this) }, closestPointToPoint: function (A, e) { void 0 === e && (console.warn("THREE.Triangle: .closestPointToPoint() target is now required"), e = new y); var t, i, o = this.a, n = this.b, r = this.c; MA.subVectors(n, o), bA.subVectors(r, o), FA.subVectors(A, o); var a = MA.dot(FA), s = bA.dot(FA); if (0 >= a && 0 >= s) return e.copy(o); KA.subVectors(A, n); var l = MA.dot(KA), c = bA.dot(KA); if (l >= 0 && l >= c) return e.copy(n); var h = a * c - l * s; if (0 >= h && a >= 0 && 0 >= l) return t = a / (a - l), e.copy(o).addScaledVector(MA, t); QA.subVectors(A, r); var d = MA.dot(QA), p = bA.dot(QA); if (p >= 0 && p >= d) return e.copy(r); var g = d * s - a * p; if (0 >= g && s >= 0 && 0 >= p) return i = s / (s - p), e.copy(o).addScaledVector(bA, i); var u = l * p - d * c; if (0 >= u && c - l >= 0 && d - p >= 0) return UA.subVectors(r, n), i = (c - l) / (c - l + (d - p)), e.copy(n).addScaledVector(UA, i); var f = 1 / (u + g + h); return t = g * f, i = h * f, e.copy(o).addScaledVector(MA, t).addScaledVector(bA, i) }, equals: function (A) { return A.a.equals(this.a) && A.b.equals(this.b) && A.c.equals(this.c) } }); var TA = { 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 }, kA = { h: 0, s: 0, l: 0 }, DA = { h: 0, s: 0, l: 0 }; function LA(A, e, t) { return void 0 === e && void 0 === t ? this.set(A) : this.setRGB(A, e, t) } function NA(A, e, t) { return 0 > t && (t += 1), t > 1 && (t -= 1), 1 / 6 > t ? A + 6 * (e - A) * t : .5 > t ? e : 2 / 3 > t ? A + 6 * (e - A) * (2 / 3 - t) : A } function OA(A) { return .04045 > A ? .0773993808 * A : Math.pow(.9478672986 * A + .0521327014, 2.4) } function VA(A) { return .0031308 > A ? 12.92 * A : 1.055 * Math.pow(A, .41666) - .055 } function GA(A, e, t, i, o, n) { this.a = A, this.b = e, this.c = t, this.normal = i && i.isVector3 ? i : new y, this.vertexNormals = Array.isArray(i) ? i : [], this.color = o && o.isColor ? o : new LA, this.vertexColors = Array.isArray(o) ? o : [], this.materialIndex = void 0 !== n ? n : 0 } Object.assign(LA.prototype, { isColor: !0, r: 1, g: 1, b: 1, set: function (A) { return A && A.isColor ? this.copy(A) : "number" == typeof A ? this.setHex(A) : "string" == typeof A && this.setStyle(A), this }, setScalar: function (A) { return this.r = A, this.g = A, this.b = A, this }, setHex: function (A) { return A = Math.floor(A), this.r = (A >> 16 & 255) / 255, this.g = (A >> 8 & 255) / 255, this.b = (255 & A) / 255, this }, setRGB: function (A, e, t) { return this.r = A, this.g = e, this.b = t, this }, setHSL: function (A, e, t) { if (A = a.euclideanModulo(A, 1), e = a.clamp(e, 0, 1), t = a.clamp(t, 0, 1), 0 === e) this.r = this.g = this.b = t; else { var i = t > .5 ? t + e - t * e : t * (1 + e), o = 2 * t - i; this.r = NA(o, i, A + 1 / 3), this.g = NA(o, i, A), this.b = NA(o, i, A - 1 / 3) } return this }, setStyle: function (A) { function e(e) { void 0 !== e && 1 > parseFloat(e) && console.warn("THREE.Color: Alpha component of " + A + " will be ignored.") } var t; if (t = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(A)) { var i, o = t[2]; switch (t[1]) { case "rgb": case "rgba": if (i = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o)) return this.r = Math.min(255, parseInt(i[1], 10)) / 255, this.g = Math.min(255, parseInt(i[2], 10)) / 255, this.b = Math.min(255, parseInt(i[3], 10)) / 255, e(i[5]), this; if (i = /^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o)) return this.r = Math.min(100, parseInt(i[1], 10)) / 100, this.g = Math.min(100, parseInt(i[2], 10)) / 100, this.b = Math.min(100, parseInt(i[3], 10)) / 100, e(i[5]), this; break; case "hsl": case "hsla": if (i = /^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o)) { var n = parseFloat(i[1]) / 360, r = parseInt(i[2], 10) / 100, a = parseInt(i[3], 10) / 100; return e(i[5]), this.setHSL(n, r, a) } } } else if (t = /^\#([A-Fa-f0-9]+)$/.exec(A)) { var s = t[1], l = s.length; if (3 === l) return this.r = parseInt(s.charAt(0) + s.charAt(0), 16) / 255, this.g = parseInt(s.charAt(1) + s.charAt(1), 16) / 255, this.b = parseInt(s.charAt(2) + s.charAt(2), 16) / 255, this; if (6 === l) return this.r = parseInt(s.charAt(0) + s.charAt(1), 16) / 255, this.g = parseInt(s.charAt(2) + s.charAt(3), 16) / 255, this.b = parseInt(s.charAt(4) + s.charAt(5), 16) / 255, this } return A && A.length > 0 ? this.setColorName(A) : this }, setColorName: function (A) { var e = TA[A]; return void 0 !== e ? this.setHex(e) : console.warn("THREE.Color: Unknown color " + A), this }, clone: function () { return new this.constructor(this.r, this.g, this.b) }, copy: function (A) { return this.r = A.r, this.g = A.g, this.b = A.b, this }, copyGammaToLinear: function (A, e) { return void 0 === e && (e = 2), this.r = Math.pow(A.r, e), this.g = Math.pow(A.g, e), this.b = Math.pow(A.b, e), this }, copyLinearToGamma: function (A, e) { void 0 === e && (e = 2); var t = e > 0 ? 1 / e : 1; return this.r = Math.pow(A.r, t), this.g = Math.pow(A.g, t), this.b = Math.pow(A.b, t), this }, convertGammaToLinear: function (A) { return this.copyGammaToLinear(this, A), this }, convertLinearToGamma: function (A) { return this.copyLinearToGamma(this, A), this }, copySRGBToLinear: function (A) { return this.r = OA(A.r), this.g = OA(A.g), this.b = OA(A.b), this }, copyLinearToSRGB: function (A) { return this.r = VA(A.r), this.g = VA(A.g), this.b = VA(A.b), this }, convertSRGBToLinear: function () { return this.copySRGBToLinear(this), this }, convertLinearToSRGB: function () { return this.copyLinearToSRGB(this), this }, getHex: function () { return 255 * this.r << 16 ^ 255 * this.g << 8 ^ 255 * this.b << 0 }, getHexString: function () { return ("000000" + this.getHex().toString(16)).slice(-6) }, getHSL: function (A) { void 0 === A && (console.warn("THREE.Color: .getHSL() target is now required"), A = { h: 0, s: 0, l: 0 }); var e, t, i = this.r, o = this.g, n = this.b, r = Math.max(i, o, n), a = Math.min(i, o, n), s = (a + r) / 2; if (a === r) e = 0, t = 0; else { var l = r - a; switch (t = s > .5 ? l / (2 - r - a) : l / (r + a), r) { case i: e = (o - n) / l + (n > o ? 6 : 0); break; case o: e = (n - i) / l + 2; break; case n: e = (i - o) / l + 4 } e /= 6 } return A.h = e, A.s = t, A.l = s, A }, getStyle: function () { return "rgb(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + ")" }, offsetHSL: function (A, e, t) { return this.getHSL(kA), kA.h += A, kA.s += e, kA.l += t, this.setHSL(kA.h, kA.s, kA.l), this }, add: function (A) { return this.r += A.r, this.g += A.g, this.b += A.b, this }, addColors: function (A, e) { return this.r = A.r + e.r, this.g = A.g + e.g, this.b = A.b + e.b, this }, addScalar: function (A) { return this.r += A, this.g += A, this.b += A, this }, sub: function (A) { return this.r = Math.max(0, this.r - A.r), this.g = Math.max(0, this.g - A.g), this.b = Math.max(0, this.b - A.b), this }, multiply: function (A) { return this.r *= A.r, this.g *= A.g, this.b *= A.b, this }, multiplyScalar: function (A) { return this.r *= A, this.g *= A, this.b *= A, this }, lerp: function (A, e) { return this.r += (A.r - this.r) * e, this.g += (A.g - this.g) * e, this.b += (A.b - this.b) * e, this }, lerpHSL: function (A, e) { this.getHSL(kA), A.getHSL(DA); var t = a.lerp(kA.h, DA.h, e), i = a.lerp(kA.s, DA.s, e), o = a.lerp(kA.l, DA.l, e); return this.setHSL(t, i, o), this }, equals: function (A) { return A.r === this.r && A.g === this.g && A.b === this.b }, fromArray: function (A, e) { return void 0 === e && (e = 0), this.r = A[e], this.g = A[e + 1], this.b = A[e + 2], this }, toArray: function (A, e) { return void 0 === A && (A = []), void 0 === e && (e = 0), A[e] = this.r, A[e + 1] = this.g, A[e + 2] = this.b, A }, toJSON: function () { return this.getHex() } }), LA.NAMES = TA, Object.assign(GA.prototype, { clone: function () { return (new this.constructor).copy(this) }, copy: function (A) { this.a = A.a, this.b = A.b, this.c = A.c, this.normal.copy(A.normal), this.color.copy(A.color), this.materialIndex = A.materialIndex; for (var e = 0, t = A.vertexNormals.length; t > e; e++) this.vertexNormals[e] = A.vertexNormals[e].clone(); for (e = 0, t = A.vertexColors.length; t > e; e++) this.vertexColors[e] = A.vertexColors[e].clone(); return this } }); var PA = 0; function qA() { Object.defineProperty(this, "id", { value: PA++ }), this.uuid = a.generateUUID(), this.name = "", this.type = "Material", this.fog = !0, this.blending = 1, this.side = 0, this.flatShading = !1, this.vertexColors = !1, this.opacity = 1, this.transparent = !1, this.blendSrc = 204, this.blendDst = 205, this.blendEquation = 100, this.blendSrcAlpha = null, this.blendDstAlpha = null, this.blendEquationAlpha = null, this.depthFunc = 3, this.depthTest = !0, this.depthWrite = !0, this.stencilWriteMask = 255, this.stencilFunc = 519, this.stencilRef = 0, this.stencilFuncMask = 255, this.stencilFail = 7680, this.stencilZFail = 7680, this.stencilZPass = 7680, 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 jA(A) { qA.call(this), this.type = "MeshBasicMaterial", this.color = new LA(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.setValues(A) } qA.prototype = Object.assign(Object.create(i.prototype), { constructor: qA, isMaterial: !0, onBeforeCompile: function () {}, setValues: function (A) { if (void 0 !== A) for (var e in A) { var t = A[e]; if (void 0 !== t) if ("shading" !== e) { var i = this[e]; void 0 !== i ? i && i.isColor ? i.set(t) : i && i.isVector3 && t && t.isVector3 ? i.copy(t) : this[e] = t : console.warn("THREE." + this.type + ": '" + e + "' is not a property of this material.") } else console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."), this.flatShading = 1 === t; else console.warn("THREE.Material: '" + e + "' parameter is undefined.") } }, toJSON: function (A) { var e = void 0 === A || "string" == typeof A; e && (A = { textures: {}, images: {} }); var t = { metadata: { version: 4.5, type: "Material", generator: "Material.toJSON" } }; function i(A) { var e = []; for (var t in A) { var i = A[t]; delete i.metadata, e.push(i) } return e } if (t.uuid = this.uuid, t.type = this.type, "" !== this.name && (t.name = this.name), this.color && this.color.isColor && (t.color = this.color.getHex()), void 0 !== this.roughness && (t.roughness = this.roughness), void 0 !== this.metalness && (t.metalness = this.metalness), this.sheen && this.sheen.isColor && (t.sheen = this.sheen.getHex()), this.emissive && this.emissive.isColor && (t.emissive = this.emissive.getHex()), this.emissiveIntensity && 1 !== this.emissiveIntensity && (t.emissiveIntensity = this.emissiveIntensity), this.specular && this.specular.isColor && (t.specular = this.specular.getHex()), void 0 !== this.shininess && (t.shininess = this.shininess), void 0 !== this.clearcoat && (t.clearcoat = this.clearcoat), void 0 !== this.clearcoatRoughness && (t.clearcoatRoughness = this.clearcoatRoughness), this.clearcoatMap && this.clearcoatMap.isTexture && (t.clearcoatMap = this.clearcoatMap.toJSON(A).uuid), this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture && (t.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(A).uuid), this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture && (t.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(A).uuid, t.clearcoatNormalScale = this.clearcoatNormalScale.toArray()), this.map && this.map.isTexture && (t.map = this.map.toJSON(A).uuid), this.matcap && this.matcap.isTexture && (t.matcap = this.matcap.toJSON(A).uuid), this.alphaMap && this.alphaMap.isTexture && (t.alphaMap = this.alphaMap.toJSON(A).uuid), this.lightMap && this.lightMap.isTexture && (t.lightMap = this.lightMap.toJSON(A).uuid), this.aoMap && this.aoMap.isTexture && (t.aoMap = this.aoMap.toJSON(A).uuid, t.aoMapIntensity = this.aoMapIntensity), this.bumpMap && this.bumpMap.isTexture && (t.bumpMap = this.bumpMap.toJSON(A).uuid, t.bumpScale = this.bumpScale), this.normalMap && this.normalMap.isTexture && (t.normalMap = this.normalMap.toJSON(A).uuid, t.normalMapType = this.normalMapType, t.normalScale = this.normalScale.toArray()), this.displacementMap && this.displacementMap.isTexture && (t.displacementMap = this.displacementMap.toJSON(A).uuid, t.displacementScale = this.displacementScale, t.displacementBias = this.displacementBias), this.roughnessMap && this.roughnessMap.isTexture && (t.roughnessMap = this.roughnessMap.toJSON(A).uuid), this.metalnessMap && this.metalnessMap.isTexture && (t.metalnessMap = this.metalnessMap.toJSON(A).uuid), this.emissiveMap && this.emissiveMap.isTexture && (t.emissiveMap = this.emissiveMap.toJSON(A).uuid), this.specularMap && this.specularMap.isTexture && (t.specularMap = this.specularMap.toJSON(A).uuid), this.envMap && this.envMap.isTexture && (t.envMap = this.envMap.toJSON(A).uuid, t.reflectivity = this.reflectivity, t.refractionRatio = this.refractionRatio, void 0 !== this.combine && (t.combine = this.combine), void 0 !== this.envMapIntensity && (t.envMapIntensity = this.envMapIntensity)), this.gradientMap && this.gradientMap.isTexture && (t.gradientMap = this.gradientMap.toJSON(A).uuid), void 0 !== this.size && (t.size = this.size), void 0 !== this.sizeAttenuation && (t.sizeAttenuation = this.sizeAttenuation), 1 !== this.blending && (t.blending = this.blending), !0 === this.flatShading && (t.flatShading = this.flatShading), 0 !== this.side && (t.side = this.side), this.vertexColors && (t.vertexColors = !0), 1 > this.opacity && (t.opacity = this.opacity), !0 === this.transparent && (t.transparent = this.transparent), t.depthFunc = this.depthFunc, t.depthTest = this.depthTest, t.depthWrite = this.depthWrite, t.stencilWrite = this.stencilWrite, t.stencilWriteMask = this.stencilWriteMask, t.stencilFunc = this.stencilFunc, t.stencilRef = this.stencilRef, t.stencilFuncMask = this.stencilFuncMask, t.stencilFail = this.stencilFail, t.stencilZFail = this.stencilZFail, t.stencilZPass = this.stencilZPass, this.rotation && 0 !== this.rotation && (t.rotation = this.rotation), !0 === this.polygonOffset && (t.polygonOffset = !0), 0 !== this.polygonOffsetFactor && (t.polygonOffsetFactor = this.polygonOffsetFactor), 0 !== this.polygonOffsetUnits && (t.polygonOffsetUnits = this.polygonOffsetUnits), this.linewidth && 1 !== this.linewidth && (t.linewidth = this.linewidth), void 0 !== this.dashSize && (t.dashSize = this.dashSize), void 0 !== this.gapSize && (t.gapSize = this.gapSize), void 0 !== this.scale && (t.scale = this.scale), !0 === this.dithering && (t.dithering = !0), this.alphaTest > 0 && (t.alphaTest = this.alphaTest), !0 === this.premultipliedAlpha && (t.premultipliedAlpha = this.premultipliedAlpha), !0 === this.wireframe && (t.wireframe = this.wireframe), this.wireframeLinewidth > 1 && (t.wireframeLinewidth = this.wireframeLinewidth), "round" !== this.wireframeLinecap && (t.wireframeLinecap = this.wireframeLinecap), "round" !== this.wireframeLinejoin && (t.wireframeLinejoin = this.wireframeLinejoin), !0 === this.morphTargets && (t.morphTargets = !0), !0 === this.morphNormals && (t.morphNormals = !0), !0 === this.skinning && (t.skinning = !0), !1 === this.visible && (t.visible = !1), !1 === this.toneMapped && (t.toneMapped = !1), "{}" !== JSON.stringify(this.userData) && (t.userData = this.userData), e) { var o = i(A.textures), n = i(A.images); o.length > 0 && (t.textures = o), n.length > 0 && (t.images = n) } return t }, clone: function () { return (new this.constructor).copy(this) }, copy: function (A) { this.name = A.name, this.fog = A.fog, this.blending = A.blending, this.side = A.side, this.flatShading = A.flatShading, this.vertexColors = A.vertexColors, this.opacity = A.opacity, this.transparent = A.transparent, this.blendSrc = A.blendSrc, this.blendDst = A.blendDst, this.blendEquation = A.blendEquation, this.blendSrcAlpha = A.blendSrcAlpha, this.blendDstAlpha = A.blendDstAlpha, this.blendEquationAlpha = A.blendEquationAlpha, this.depthFunc = A.depthFunc, this.depthTest = A.depthTest, this.depthWrite = A.depthWrite, this.stencilWriteMask = A.stencilWriteMask, this.stencilFunc = A.stencilFunc, this.stencilRef = A.stencilRef, this.stencilFuncMask = A.stencilFuncMask, this.stencilFail = A.stencilFail, this.stencilZFail = A.stencilZFail, this.stencilZPass = A.stencilZPass, this.stencilWrite = A.stencilWrite; var e = A.clippingPlanes, t = null; if (null !== e) { var i = e.length; t = new Array(i); for (var o = 0; o !== i; ++o) t[o] = e[o].clone() } return this.clippingPlanes = t, this.clipIntersection = A.clipIntersection, this.clipShadows = A.clipShadows, this.shadowSide = A.shadowSide, this.colorWrite = A.colorWrite, this.precision = A.precision, this.polygonOffset = A.polygonOffset, this.polygonOffsetFactor = A.polygonOffsetFactor, this.polygonOffsetUnits = A.polygonOffsetUnits, this.dithering = A.dithering, this.alphaTest = A.alphaTest, this.premultipliedAlpha = A.premultipliedAlpha, this.visible = A.visible, this.toneMapped = A.toneMapped, this.userData = JSON.parse(JSON.stringify(A.userData)), this }, dispose: function () { this.dispatchEvent({ type: "dispose" }) } }), Object.defineProperty(qA.prototype, "needsUpdate", { set: function (A) { !0 === A && this.version++ } }), (jA.prototype = Object.create(qA.prototype)).constructor = jA, jA.prototype.isMeshBasicMaterial = !0, jA.prototype.copy = function (A) { return qA.prototype.copy.call(this, A), this.color.copy(A.color), this.map = A.map, this.lightMap = A.lightMap, this.lightMapIntensity = A.lightMapIntensity, this.aoMap = A.aoMap, this.aoMapIntensity = A.aoMapIntensity, this.specularMap = A.specularMap, this.alphaMap = A.alphaMap, this.envMap = A.envMap, this.combine = A.combine, this.reflectivity = A.reflectivity, this.refractionRatio = A.refractionRatio, this.wireframe = A.wireframe, this.wireframeLinewidth = A.wireframeLinewidth, this.wireframeLinecap = A.wireframeLinecap, this.wireframeLinejoin = A.wireframeLinejoin, this.skinning = A.skinning, this.morphTargets = A.morphTargets, this }; var HA = new y; function YA(A, e, t) { if (Array.isArray(A)) throw new TypeError("THREE.BufferAttribute: array should be a Typed Array."); this.name = "", this.array = A, this.itemSize = e, this.count = void 0 !== A ? A.length / e : 0, this.normalized = !0 === t, this.usage = 35044, this.updateRange = { offset: 0, count: -1 }, this.version = 0 } function WA(A, e, t) { YA.call(this, new Int8Array(A), e, t) } function JA(A, e, t) { YA.call(this, new Uint8Array(A), e, t) } function zA(A, e, t) { YA.call(this, new Uint8ClampedArray(A), e, t) } function ZA(A, e, t) { YA.call(this, new Int16Array(A), e, t) } function XA(A, e, t) { YA.call(this, new Uint16Array(A), e, t) } function _A(A, e, t) { YA.call(this, new Int32Array(A), e, t) } function $A(A, e, t) { YA.call(this, new Uint32Array(A), e, t) } function Ae(A, e, t) { YA.call(this, new Float32Array(A), e, t) } function ee(A, e, t) { YA.call(this, new Float64Array(A), e, t) } function te() { this.vertices = [], this.normals = [], this.colors = [], this.uvs = [], this.uvs2 = [], this.groups = [], this.morphTargets = {}, this.skinWeights = [], this.skinIndices = [], this.boundingBox = null, this.boundingSphere = null, this.verticesNeedUpdate = !1, this.normalsNeedUpdate = !1, this.colorsNeedUpdate = !1, this.uvsNeedUpdate = !1, this.groupsNeedUpdate = !1 } function ie(A) { if (0 === A.length) return -1 / 0; for (var e = A[0], t = 1, i = A.length; i > t; ++t) A[t] > e && (e = A[t]); return e } Object.defineProperty(YA.prototype, "needsUpdate", { set: function (A) { !0 === A && this.version++ } }), Object.assign(YA.prototype, { isBufferAttribute: !0, onUploadCallback: function () {}, setUsage: function (A) { return this.usage = A, this }, copy: function (A) { return this.name = A.name, this.array = new A.array.constructor(A.array), this.itemSize = A.itemSize, this.count = A.count, this.normalized = A.normalized, this.usage = A.usage, this }, copyAt: function (A, e, t) { A *= this.itemSize, t *= e.itemSize; for (var i = 0, o = this.itemSize; o > i; i++) this.array[A + i] = e.array[t + i]; return this }, copyArray: function (A) { return this.array.set(A), this }, copyColorsArray: function (A) { for (var e = this.array, t = 0, i = 0, o = A.length; o > i; i++) { var n = A[i]; void 0 === n && (console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined", i), n = new LA), e[t++] = n.r, e[t++] = n.g, e[t++] = n.b } return this }, copyVector2sArray: function (A) { for (var e = this.array, t = 0, i = 0, o = A.length; o > i; i++) { var n = A[i]; void 0 === n && (console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined", i), n = new s), e[t++] = n.x, e[t++] = n.y } return this }, copyVector3sArray: function (A) { for (var e = this.array, t = 0, i = 0, o = A.length; o > i; i++) { var n = A[i]; void 0 === n && (console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined", i), n = new y), e[t++] = n.x, e[t++] = n.y, e[t++] = n.z } return this }, copyVector4sArray: function (A) { for (var e = this.array, t = 0, i = 0, o = A.length; o > i; i++) { var n = A[i]; void 0 === n && (console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined", i), n = new p), e[t++] = n.x, e[t++] = n.y, e[t++] = n.z, e[t++] = n.w } return this }, applyMatrix3: function (A) { for (var e = 0, t = this.count; t > e; e++) HA.x = this.getX(e), HA.y = this.getY(e), HA.z = this.getZ(e), HA.applyMatrix3(A), this.setXYZ(e, HA.x, HA.y, HA.z); return this }, applyMatrix4: function (A) { for (var e = 0, t = this.count; t > e; e++) HA.x = this.getX(e), HA.y = this.getY(e), HA.z = this.getZ(e), HA.applyMatrix4(A), this.setXYZ(e, HA.x, HA.y, HA.z); return this }, applyNormalMatrix: function (A) { for (var e = 0, t = this.count; t > e; e++) HA.x = this.getX(e), HA.y = this.getY(e), HA.z = this.getZ(e), HA.applyNormalMatrix(A), this.setXYZ(e, HA.x, HA.y, HA.z); return this }, transformDirection: function (A) { for (var e = 0, t = this.count; t > e; e++) HA.x = this.getX(e), HA.y = this.getY(e), HA.z = this.getZ(e), HA.transformDirection(A), this.setXYZ(e, HA.x, HA.y, HA.z); return this }, set: function (A, e) { return void 0 === e && (e = 0), this.array.set(A, e), this }, getX: function (A) { return this.array[A * this.itemSize] }, setX: function (A, e) { return this.array[A * this.itemSize] = e, this }, getY: function (A) { return this.array[A * this.itemSize + 1] }, setY: function (A, e) { return this.array[A * this.itemSize + 1] = e, this }, getZ: function (A) { return this.array[A * this.itemSize + 2] }, setZ: function (A, e) { return this.array[A * this.itemSize + 2] = e, this }, getW: function (A) { return this.array[A * this.itemSize + 3] }, setW: function (A, e) { return this.array[A * this.itemSize + 3] = e, this }, setXY: function (A, e, t) { return this.array[(A *= this.itemSize) + 0] = e, this.array[A + 1] = t, this }, setXYZ: function (A, e, t, i) { return this.array[(A *= this.itemSize) + 0] = e, this.array[A + 1] = t, this.array[A + 2] = i, this }, setXYZW: function (A, e, t, i, o) { return this.array[(A *= this.itemSize) + 0] = e, this.array[A + 1] = t, this.array[A + 2] = i, this.array[A + 3] = o, this }, onUpload: function (A) { return this.onUploadCallback = A, 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 } } }), (WA.prototype = Object.create(YA.prototype)).constructor = WA, (JA.prototype = Object.create(YA.prototype)).constructor = JA, (zA.prototype = Object.create(YA.prototype)).constructor = zA, (ZA.prototype = Object.create(YA.prototype)).constructor = ZA, (XA.prototype = Object.create(YA.prototype)).constructor = XA, (_A.prototype = Object.create(YA.prototype)).constructor = _A, ($A.prototype = Object.create(YA.prototype)).constructor = $A, (Ae.prototype = Object.create(YA.prototype)).constructor = Ae, (ee.prototype = Object.create(YA.prototype)).constructor = ee, Object.assign(te.prototype, { computeGroups: function (A) { for (var e, t = [], i = void 0, o = A.faces, n = 0; o.length > n; n++) { var r = o[n]; r.materialIndex !== i && (i = r.materialIndex, void 0 !== e && (e.count = 3 * n - e.start, t.push(e)), e = { start: 3 * n, materialIndex: i }) } void 0 !== e && (e.count = 3 * n - e.start, t.push(e)), this.groups = t }, fromGeometry: function (A) { var e, t = A.faces, i = A.vertices, o = A.faceVertexUvs, n = o[0] && o[0].length > 0, r = o[1] && o[1].length > 0, a = A.morphTargets, l = a.length; if (l > 0) { e = []; for (var c = 0; l > c; c++) e[c] = { name: a[c].name, data: [] }; this.morphTargets.position = e } var h, d = A.morphNormals, p = d.length; if (p > 0) { h = []; for (c = 0; p > c; c++) h[c] = { name: d[c].name, data: [] }; this.morphTargets.normal = h } var g = A.skinIndices, u = A.skinWeights, f = g.length === i.length, m = u.length === i.length; i.length > 0 && 0 === t.length && console.error("THREE.DirectGeometry: Faceless geometries are not supported."); for (c = 0; t.length > c; c++) { var C = t[c]; this.vertices.push(i[C.a], i[C.b], i[C.c]); var y = C.vertexNormals; if (3 === y.length) this.normals.push(y[0], y[1], y[2]); else { var v = C.normal; this.normals.push(v, v, v) } var I, E = C.vertexColors; if (3 === E.length) this.colors.push(E[0], E[1], E[2]); else { var B = C.color; this.colors.push(B, B, B) } if (!0 === n) void 0 !== (I = o[0][c]) ? this.uvs.push(I[0], I[1], I[2]) : (console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ", c), this.uvs.push(new s, new s, new s)); if (!0 === r) void 0 !== (I = o[1][c]) ? this.uvs2.push(I[0], I[1], I[2]) : (console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ", c), this.uvs2.push(new s, new s, new s)); for (var x = 0; l > x; x++) { var S = a[x].vertices; e[x].data.push(S[C.a], S[C.b], S[C.c]) } for (x = 0; p > x; x++) { var w = d[x].vertexNormals[c]; h[x].data.push(w.a, w.b, w.c) } f && this.skinIndices.push(g[C.a], g[C.b], g[C.c]), m && this.skinWeights.push(u[C.a], u[C.b], u[C.c]) } return this.computeGroups(A), this.verticesNeedUpdate = A.verticesNeedUpdate, this.normalsNeedUpdate = A.normalsNeedUpdate, this.colorsNeedUpdate = A.colorsNeedUpdate, this.uvsNeedUpdate = A.uvsNeedUpdate, this.groupsNeedUpdate = A.groupsNeedUpdate, null !== A.boundingSphere && (this.boundingSphere = A.boundingSphere.clone()), null !== A.boundingBox && (this.boundingBox = A.boundingBox.clone()), this } }); var oe = 1, ne = new M, re = new H, ae = new y, se = new aA, le = new aA, ce = new y; function he() { Object.defineProperty(this, "id", { value: oe += 2 }), this.uuid = a.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 = {} } he.prototype = Object.assign(Object.create(i.prototype), { constructor: he, isBufferGeometry: !0, getIndex: function () { return this.index }, setIndex: function (A) { this.index = Array.isArray(A) ? new(ie(A) > 65535 ? $A : XA)(A, 1) : A }, getAttribute: function (A) { return this.attributes[A] }, setAttribute: function (A, e) { return this.attributes[A] = e, this }, deleteAttribute: function (A) { return delete this.attributes[A], this }, addGroup: function (A, e, t) { this.groups.push({ start: A, count: e, materialIndex: void 0 !== t ? t : 0 }) }, clearGroups: function () { this.groups = [] }, setDrawRange: function (A, e) { this.drawRange.start = A, this.drawRange.count = e }, applyMatrix4: function (A) { var e = this.attributes.position; void 0 !== e && (e.applyMatrix4(A), e.needsUpdate = !0); var t = this.attributes.normal; if (void 0 !== t) { var i = (new l).getNormalMatrix(A); t.applyNormalMatrix(i), t.needsUpdate = !0 } var o = this.attributes.tangent; return void 0 !== o && (o.transformDirection(A), o.needsUpdate = !0), null !== this.boundingBox && this.computeBoundingBox(), null !== this.boundingSphere && this.computeBoundingSphere(), this }, rotateX: function (A) { return ne.makeRotationX(A), this.applyMatrix4(ne), this }, rotateY: function (A) { return ne.makeRotationY(A), this.applyMatrix4(ne), this }, rotateZ: function (A) { return ne.makeRotationZ(A), this.applyMatrix4(ne), this }, translate: function (A, e, t) { return ne.makeTranslation(A, e, t), this.applyMatrix4(ne), this }, scale: function (A, e, t) { return ne.makeScale(A, e, t), this.applyMatrix4(ne), this }, lookAt: function (A) { return re.lookAt(A), re.updateMatrix(), this.applyMatrix4(re.matrix), this }, center: function () { return this.computeBoundingBox(), this.boundingBox.getCenter(ae).negate(), this.translate(ae.x, ae.y, ae.z), this }, setFromObject: function (A) { var e = A.geometry; if (A.isPoints || A.isLine) { var t = new Ae(3 * e.vertices.length, 3), i = new Ae(3 * e.colors.length, 3); if (this.setAttribute("position", t.copyVector3sArray(e.vertices)), this.setAttribute("color", i.copyColorsArray(e.colors)), e.lineDistances && e.lineDistances.length === e.vertices.length) { var o = new Ae(e.lineDistances.length, 1); this.setAttribute("lineDistance", o.copyArray(e.lineDistances)) } null !== e.boundingSphere && (this.boundingSphere = e.boundingSphere.clone()), null !== e.boundingBox && (this.boundingBox = e.boundingBox.clone()) } else A.isMesh && e && e.isGeometry && this.fromGeometry(e); return this }, setFromPoints: function (A) { for (var e = [], t = 0, i = A.length; i > t; t++) { var o = A[t]; e.push(o.x, o.y, o.z || 0) } return this.setAttribute("position", new Ae(e, 3)), this }, updateFromObject: function (A) { var e, t = A.geometry; if (A.isMesh) { var i = t.__directGeometry; if (!0 === t.elementsNeedUpdate && (i = void 0, t.elementsNeedUpdate = !1), void 0 === i) return this.fromGeometry(t); i.verticesNeedUpdate = t.verticesNeedUpdate, i.normalsNeedUpdate = t.normalsNeedUpdate, i.colorsNeedUpdate = t.colorsNeedUpdate, i.uvsNeedUpdate = t.uvsNeedUpdate, i.groupsNeedUpdate = t.groupsNeedUpdate, t.verticesNeedUpdate = !1, t.normalsNeedUpdate = !1, t.colorsNeedUpdate = !1, t.uvsNeedUpdate = !1, t.groupsNeedUpdate = !1, t = i } return !0 === t.verticesNeedUpdate && (void 0 !== (e = this.attributes.position) && (e.copyVector3sArray(t.vertices), e.needsUpdate = !0), t.verticesNeedUpdate = !1), !0 === t.normalsNeedUpdate && (void 0 !== (e = this.attributes.normal) && (e.copyVector3sArray(t.normals), e.needsUpdate = !0), t.normalsNeedUpdate = !1), !0 === t.colorsNeedUpdate && (void 0 !== (e = this.attributes.color) && (e.copyColorsArray(t.colors), e.needsUpdate = !0), t.colorsNeedUpdate = !1), t.uvsNeedUpdate && (void 0 !== (e = this.attributes.uv) && (e.copyVector2sArray(t.uvs), e.needsUpdate = !0), t.uvsNeedUpdate = !1), t.lineDistancesNeedUpdate && (void 0 !== (e = this.attributes.lineDistance) && (e.copyArray(t.lineDistances), e.needsUpdate = !0), t.lineDistancesNeedUpdate = !1), t.groupsNeedUpdate && (t.computeGroups(A.geometry), this.groups = t.groups, t.groupsNeedUpdate = !1), this }, fromGeometry: function (A) { return A.__directGeometry = (new te).fromGeometry(A), this.fromDirectGeometry(A.__directGeometry) }, fromDirectGeometry: function (A) { var e = new Float32Array(3 * A.vertices.length); if (this.setAttribute("position", new YA(e, 3).copyVector3sArray(A.vertices)), A.normals.length > 0) { var t = new Float32Array(3 * A.normals.length); this.setAttribute("normal", new YA(t, 3).copyVector3sArray(A.normals)) } if (A.colors.length > 0) { var i = new Float32Array(3 * A.colors.length); this.setAttribute("color", new YA(i, 3).copyColorsArray(A.colors)) } if (A.uvs.length > 0) { var o = new Float32Array(2 * A.uvs.length); this.setAttribute("uv", new YA(o, 2).copyVector2sArray(A.uvs)) } if (A.uvs2.length > 0) { var n = new Float32Array(2 * A.uvs2.length); this.setAttribute("uv2", new YA(n, 2).copyVector2sArray(A.uvs2)) } for (var r in this.groups = A.groups, A.morphTargets) { for (var a = [], s = A.morphTargets[r], l = 0, c = s.length; c > l; l++) { var h = s[l], d = new Ae(3 * h.data.length, 3); d.name = h.name, a.push(d.copyVector3sArray(h.data)) } this.morphAttributes[r] = a } if (A.skinIndices.length > 0) { var p = new Ae(4 * A.skinIndices.length, 4); this.setAttribute("skinIndex", p.copyVector4sArray(A.skinIndices)) } if (A.skinWeights.length > 0) { var g = new Ae(4 * A.skinWeights.length, 4); this.setAttribute("skinWeight", g.copyVector4sArray(A.skinWeights)) } return null !== A.boundingSphere && (this.boundingSphere = A.boundingSphere.clone()), null !== A.boundingBox && (this.boundingBox = A.boundingBox.clone()), this }, computeBoundingBox: function () { null === this.boundingBox && (this.boundingBox = new aA); var A = this.attributes.position, e = this.morphAttributes.position; if (void 0 !== A) { if (this.boundingBox.setFromBufferAttribute(A), e) for (var t = 0, i = e.length; i > t; t++) { se.setFromBufferAttribute(e[t]), this.morphTargetsRelative ? (ce.addVectors(this.boundingBox.min, se.min), this.boundingBox.expandByPoint(ce), ce.addVectors(this.boundingBox.max, se.max), this.boundingBox.expandByPoint(ce)) : (this.boundingBox.expandByPoint(se.min), this.boundingBox.expandByPoint(se.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 cA); var A = this.attributes.position, e = this.morphAttributes.position; if (A) { var t = this.boundingSphere.center; if (se.setFromBufferAttribute(A), e) for (var i = 0, o = e.length; o > i; i++) { le.setFromBufferAttribute(r = e[i]), this.morphTargetsRelative ? (ce.addVectors(se.min, le.min), se.expandByPoint(ce), ce.addVectors(se.max, le.max), se.expandByPoint(ce)) : (se.expandByPoint(le.min), se.expandByPoint(le.max)) } se.getCenter(t); var n = 0; for (i = 0, o = A.count; o > i; i++) ce.fromBufferAttribute(A, i), n = Math.max(n, t.distanceToSquared(ce)); if (e) for (i = 0, o = e.length; o > i; i++) for (var r, a = this.morphTargetsRelative, s = 0, l = (r = e[i]).count; l > s; s++) ce.fromBufferAttribute(r, s), a && (ae.fromBufferAttribute(A, s), ce.add(ae)), n = Math.max(n, t.distanceToSquared(ce)); this.boundingSphere.radius = Math.sqrt(n), 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 () {}, computeVertexNormals: function () { var A = this.index, e = this.attributes; if (e.position) { var t = e.position.array; if (void 0 === e.normal) this.setAttribute("normal", new YA(new Float32Array(t.length), 3)); else for (var i = e.normal.array, o = 0, n = i.length; n > o; o++) i[o] = 0; var r, a, s, l = e.normal.array, c = new y, h = new y, d = new y, p = new y, g = new y; if (A) { var u = A.array; for (o = 0, n = A.count; n > o; o += 3) a = 3 * u[o + 1], s = 3 * u[o + 2], c.fromArray(t, r = 3 * u[o + 0]), h.fromArray(t, a), d.fromArray(t, s), p.subVectors(d, h), g.subVectors(c, h), p.cross(g), l[r] += p.x, l[r + 1] += p.y, l[r + 2] += p.z, l[a] += p.x, l[a + 1] += p.y, l[a + 2] += p.z, l[s] += p.x, l[s + 1] += p.y, l[s + 2] += p.z } else for (o = 0, n = t.length; n > o; o += 9) c.fromArray(t, o), h.fromArray(t, o + 3), d.fromArray(t, o + 6), p.subVectors(d, h), g.subVectors(c, h), p.cross(g), l[o] = p.x, l[o + 1] = p.y, l[o + 2] = p.z, l[o + 3] = p.x, l[o + 4] = p.y, l[o + 5] = p.z, l[o + 6] = p.x, l[o + 7] = p.y, l[o + 8] = p.z; this.normalizeNormals(), e.normal.needsUpdate = !0 } }, merge: function (A, e) { if (A && A.isBufferGeometry) { void 0 === e && (e = 0, console.warn("THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.")); var t = this.attributes; for (var i in t) if (void 0 !== A.attributes[i]) for (var o = t[i].array, n = A.attributes[i], r = n.array, a = n.itemSize * e, s = Math.min(r.length, o.length - a), l = 0, c = a; s > l; l++, c++) o[c] = r[l]; return this } console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.", A) }, normalizeNormals: function () { for (var A = this.attributes.normal, e = 0, t = A.count; t > e; e++) ce.x = A.getX(e), ce.y = A.getY(e), ce.z = A.getZ(e), ce.normalize(), A.setXYZ(e, ce.x, ce.y, ce.z) }, toNonIndexed: function () { function A(A, e) { for (var t = A.array, i = A.itemSize, o = new t.constructor(e.length * i), n = 0, r = 0, a = 0, s = e.length; s > a; a++) { n = e[a] * i; for (var l = 0; i > l; l++) o[r++] = t[n++] } return new YA(o, i) } if (null === this.index) return console.warn("THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed."), this; var e = new he, t = this.index.array, i = this.attributes; for (var o in i) { var n = A(i[o], t); e.setAttribute(o, n) } var r = this.morphAttributes; for (o in r) { for (var a = [], s = r[o], l = 0, c = s.length; c > l; l++) { n = A(s[l], t); a.push(n) } e.morphAttributes[o] = a } e.morphTargetsRelative = this.morphTargetsRelative; for (var h = this.groups, d = (l = 0, h.length); d > l; l++) { var p = h[l]; e.addGroup(p.start, p.count, p.materialIndex) } return e }, toJSON: function () { var A = { metadata: { version: 4.5, type: "BufferGeometry", generator: "BufferGeometry.toJSON" } }; if (A.uuid = this.uuid, A.type = this.type, "" !== this.name && (A.name = this.name), Object.keys(this.userData).length > 0 && (A.userData = this.userData), void 0 !== this.parameters) { var e = this.parameters; for (var t in e) void 0 !== e[t] && (A[t] = e[t]); return A } A.data = { attributes: {} }; var i = this.index; null !== i && (A.data.index = { type: i.array.constructor.name, array: Array.prototype.slice.call(i.array) }); var o = this.attributes; for (var t in o) { var n = (d = o[t]).toJSON(); "" !== d.name && (n.name = d.name), A.data.attributes[t] = n } var r = {}, a = !1; for (var t in this.morphAttributes) { for (var s = this.morphAttributes[t], l = [], c = 0, h = s.length; h > c; c++) { var d; n = (d = s[c]).toJSON(); "" !== d.name && (n.name = d.name), l.push(n) } l.length > 0 && (r[t] = l, a = !0) } a && (A.data.morphAttributes = r, A.data.morphTargetsRelative = this.morphTargetsRelative); var p = this.groups; p.length > 0 && (A.data.groups = JSON.parse(JSON.stringify(p))); var g = this.boundingSphere; return null !== g && (A.data.boundingSphere = { center: g.center.toArray(), radius: g.radius }), A }, clone: function () { return (new he).copy(this) }, copy: function (A) { var e, t, i; this.index = null, this.attributes = {}, this.morphAttributes = {}, this.groups = [], this.boundingBox = null, this.boundingSphere = null, this.name = A.name; var o = A.index; null !== o && this.setIndex(o.clone()); var n = A.attributes; for (e in n) { this.setAttribute(e, n[e].clone()) } var r = A.morphAttributes; for (e in r) { var a = [], s = r[e]; for (t = 0, i = s.length; i > t; t++) a.push(s[t].clone()); this.morphAttributes[e] = a } this.morphTargetsRelative = A.morphTargetsRelative; var l = A.groups; for (t = 0, i = l.length; i > t; t++) { var c = l[t]; this.addGroup(c.start, c.count, c.materialIndex) } var h = A.boundingBox; null !== h && (this.boundingBox = h.clone()); var d = A.boundingSphere; return null !== d && (this.boundingSphere = d.clone()), this.drawRange.start = A.drawRange.start, this.drawRange.count = A.drawRange.count, this.userData = A.userData, this }, dispose: function () { this.dispatchEvent({ type: "dispose" }) } }); var de = new M, pe = new CA, ge = new cA, ue = new y, fe = new y, me = new y, Ce = new y, ye = new y, ve = new y, Ie = new y, Ee = new y, Be = new y, xe = new s, Se = new s, we = new s, Me = new y, be = new y; function Ue(A, e) { H.call(this), this.type = "Mesh", this.geometry = void 0 !== A ? A : new he, this.material = void 0 !== e ? e : new jA, this.updateMorphTargets() } function Fe(A, e, t, i, o, n, r, a) { if (null === (1 === e.side ? i.intersectTriangle(r, n, o, !0, a) : i.intersectTriangle(o, n, r, 2 !== e.side, a))) return null; be.copy(a), be.applyMatrix4(A.matrixWorld); var s = t.ray.origin.distanceTo(be); return t.near > s || s > t.far ? null : { distance: s, point: be.clone(), object: A } } function Ke(A, e, t, i, o, n, r, a, l, c, h, d) { ue.fromBufferAttribute(o, c), fe.fromBufferAttribute(o, h), me.fromBufferAttribute(o, d); var p = A.morphTargetInfluences; if (e.morphTargets && n && p) { Ie.set(0, 0, 0), Ee.set(0, 0, 0), Be.set(0, 0, 0); for (var g = 0, u = n.length; u > g; g++) { var f = p[g], m = n[g]; 0 !== f && (Ce.fromBufferAttribute(m, c), ye.fromBufferAttribute(m, h), ve.fromBufferAttribute(m, d), r ? (Ie.addScaledVector(Ce, f), Ee.addScaledVector(ye, f), Be.addScaledVector(ve, f)) : (Ie.addScaledVector(Ce.sub(ue), f), Ee.addScaledVector(ye.sub(fe), f), Be.addScaledVector(ve.sub(me), f))) } ue.add(Ie), fe.add(Ee), me.add(Be) } var C = Fe(A, e, t, i, ue, fe, me, Me); if (C) { a && (xe.fromBufferAttribute(a, c), Se.fromBufferAttribute(a, h), we.fromBufferAttribute(a, d), C.uv = RA.getUV(Me, ue, fe, me, xe, Se, we, new s)), l && (xe.fromBufferAttribute(l, c), Se.fromBufferAttribute(l, h), we.fromBufferAttribute(l, d), C.uv2 = RA.getUV(Me, ue, fe, me, xe, Se, we, new s)); var y = new GA(c, h, d); RA.getNormal(ue, fe, me, y.normal), C.face = y } return C } Ue.prototype = Object.assign(Object.create(H.prototype), { constructor: Ue, isMesh: !0, copy: function (A) { return H.prototype.copy.call(this, A), void 0 !== A.morphTargetInfluences && (this.morphTargetInfluences = A.morphTargetInfluences.slice()), void 0 !== A.morphTargetDictionary && (this.morphTargetDictionary = Object.assign({}, A.morphTargetDictionary)), this }, updateMorphTargets: function () { var A, e, t, i = this.geometry; if (i.isBufferGeometry) { var o = i.morphAttributes, n = Object.keys(o); if (n.length > 0) { var r = o[n[0]]; if (void 0 !== r) for (this.morphTargetInfluences = [], this.morphTargetDictionary = {}, A = 0, e = r.length; e > A; A++) t = r[A].name || String(A), this.morphTargetInfluences.push(0), this.morphTargetDictionary[t] = A } } else { var a = i.morphTargets; void 0 !== a && a.length > 0 && console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") } }, raycast: function (A, e) { var t, i = this.geometry, o = this.material, n = this.matrixWorld; if (void 0 !== o && (null === i.boundingSphere && i.computeBoundingSphere(), ge.copy(i.boundingSphere), ge.applyMatrix4(n), !1 !== A.ray.intersectsSphere(ge) && (de.getInverse(n), pe.copy(A.ray).applyMatrix4(de), null === i.boundingBox || !1 !== pe.intersectsBox(i.boundingBox)))) if (i.isBufferGeometry) { var r, a, l, c, h, d, p, g, u, f = i.index, m = i.attributes.position, C = i.morphAttributes.position, y = i.morphTargetsRelative, v = i.attributes.uv, I = i.attributes.uv2, E = i.groups, B = i.drawRange; if (null !== f) if (Array.isArray(o)) { for (c = 0, d = E.length; d > c; c++) if (u = o[(g = E[c]).materialIndex]) for (h = Math.max(g.start, B.start), p = Math.min(g.start + g.count, B.start + B.count); p > h; h += 3) r = f.getX(h), a = f.getX(h + 1), l = f.getX(h + 2), (t = Ke(this, u, A, pe, m, C, y, v, I, r, a, l)) && (t.faceIndex = Math.floor(h / 3), t.face.materialIndex = g.materialIndex, e.push(t)) } else for (c = Math.max(0, B.start), d = Math.min(f.count, B.start + B.count); d > c; c += 3) r = f.getX(c), a = f.getX(c + 1), l = f.getX(c + 2), (t = Ke(this, o, A, pe, m, C, y, v, I, r, a, l)) && (t.faceIndex = Math.floor(c / 3), e.push(t)); else if (void 0 !== m) if (Array.isArray(o)) for (c = 0, d = E.length; d > c; c++) for (u = o[(g = E[c]).materialIndex], h = Math.max(g.start, B.start), p = Math.min(g.start + g.count, B.start + B.count); p > h; h += 3) (t = Ke(this, u, A, pe, m, C, y, v, I, r = h, a = h + 1, l = h + 2)) && (t.faceIndex = Math.floor(h / 3), t.face.materialIndex = g.materialIndex, e.push(t)); else for (c = Math.max(0, B.start), d = Math.min(m.count, B.start + B.count); d > c; c += 3) (t = Ke(this, o, A, pe, m, C, y, v, I, r = c, a = c + 1, l = c + 2)) && (t.faceIndex = Math.floor(c / 3), e.push(t)) } else if (i.isGeometry) { var x, S, w, M, b = Array.isArray(o), U = i.vertices, F = i.faces, K = i.faceVertexUvs[0]; K.length > 0 && (M = K); for (var Q = 0, R = F.length; R > Q; Q++) { var T = F[Q], k = b ? o[T.materialIndex] : o; if (void 0 !== k && (t = Fe(this, k, A, pe, x = U[T.a], S = U[T.b], w = U[T.c], Me))) { if (M && M[Q]) { var D = M[Q]; xe.copy(D[0]), Se.copy(D[1]), we.copy(D[2]), t.uv = RA.getUV(Me, x, S, w, xe, Se, we, new s) } t.face = T, t.faceIndex = Q, e.push(t) } } } }, clone: function () { return new this.constructor(this.geometry, this.material).copy(this) } }); var Qe = 0, Re = new M, Te = new H, ke = new y; function De() { Object.defineProperty(this, "id", { value: Qe += 2 }), this.uuid = a.generateUUID(), this.name = "", this.type = "Geometry", this.vertices = [], this.colors = [], this.faces = [], this.faceVertexUvs = [ [] ], this.morphTargets = [], this.morphNormals = [], this.skinWeights = [], this.skinIndices = [], this.lineDistances = [], this.boundingBox = null, this.boundingSphere = null, this.elementsNeedUpdate = !1, this.verticesNeedUpdate = !1, this.uvsNeedUpdate = !1, this.normalsNeedUpdate = !1, this.colorsNeedUpdate = !1, this.lineDistancesNeedUpdate = !1, this.groupsNeedUpdate = !1 } De.prototype = Object.assign(Object.create(i.prototype), { constructor: De, isGeometry: !0, applyMatrix4: function (A) { for (var e = (new l).getNormalMatrix(A), t = 0, i = this.vertices.length; i > t; t++) { this.vertices[t].applyMatrix4(A) } for (t = 0, i = this.faces.length; i > t; t++) { var o = this.faces[t]; o.normal.applyMatrix3(e).normalize(); for (var n = 0, r = o.vertexNormals.length; r > n; n++) o.vertexNormals[n].applyMatrix3(e).normalize() } return null !== this.boundingBox && this.computeBoundingBox(), null !== this.boundingSphere && this.computeBoundingSphere(), this.verticesNeedUpdate = !0, this.normalsNeedUpdate = !0, this }, rotateX: function (A) { return Re.makeRotationX(A), this.applyMatrix4(Re), this }, rotateY: function (A) { return Re.makeRotationY(A), this.applyMatrix4(Re), this }, rotateZ: function (A) { return Re.makeRotationZ(A), this.applyMatrix4(Re), this }, translate: function (A, e, t) { return Re.makeTranslation(A, e, t), this.applyMatrix4(Re), this }, scale: function (A, e, t) { return Re.makeScale(A, e, t), this.applyMatrix4(Re), this }, lookAt: function (A) { return Te.lookAt(A), Te.updateMatrix(), this.applyMatrix4(Te.matrix), this }, fromBufferGeometry: function (A) { var e = this, t = null !== A.index ? A.index.array : void 0, i = A.attributes; if (void 0 === i.position) return console.error("THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion."), this; var o = i.position.array, n = void 0 !== i.normal ? i.normal.array : void 0, r = void 0 !== i.color ? i.color.array : void 0, a = void 0 !== i.uv ? i.uv.array : void 0, l = void 0 !== i.uv2 ? i.uv2.array : void 0; void 0 !== l && (this.faceVertexUvs[1] = []); for (var c = 0; o.length > c; c += 3) e.vertices.push((new y).fromArray(o, c)), void 0 !== r && e.colors.push((new LA).fromArray(r, c)); function h(A, t, i, o) { var c = void 0 === r ? [] : [e.colors[A].clone(), e.colors[t].clone(), e.colors[i].clone()], h = new GA(A, t, i, void 0 === n ? [] : [(new y).fromArray(n, 3 * A), (new y).fromArray(n, 3 * t), (new y).fromArray(n, 3 * i)], c, o); e.faces.push(h), void 0 !== a && e.faceVertexUvs[0].push([(new s).fromArray(a, 2 * A), (new s).fromArray(a, 2 * t), (new s).fromArray(a, 2 * i)]), void 0 !== l && e.faceVertexUvs[1].push([(new s).fromArray(l, 2 * A), (new s).fromArray(l, 2 * t), (new s).fromArray(l, 2 * i)]) } var d = A.groups; if (d.length > 0) for (c = 0; d.length > c; c++) for (var p = d[c], g = p.start, u = g, f = g + p.count; f > u; u += 3) void 0 !== t ? h(t[u], t[u + 1], t[u + 2], p.materialIndex) : h(u, u + 1, u + 2, p.materialIndex); else if (void 0 !== t) for (c = 0; t.length > c; c += 3) h(t[c], t[c + 1], t[c + 2]); else for (c = 0; o.length / 3 > c; c += 3) h(c, c + 1, c + 2); return this.computeFaceNormals(), null !== A.boundingBox && (this.boundingBox = A.boundingBox.clone()), null !== A.boundingSphere && (this.boundingSphere = A.boundingSphere.clone()), this }, center: function () { return this.computeBoundingBox(), this.boundingBox.getCenter(ke).negate(), this.translate(ke.x, ke.y, ke.z), this }, normalize: function () { this.computeBoundingSphere(); var A = this.boundingSphere.center, e = this.boundingSphere.radius, t = 0 === e ? 1 : 1 / e, i = new M; return i.set(t, 0, 0, -t * A.x, 0, t, 0, -t * A.y, 0, 0, t, -t * A.z, 0, 0, 0, 1), this.applyMatrix4(i), this }, computeFaceNormals: function () { for (var A = new y, e = new y, t = 0, i = this.faces.length; i > t; t++) { var o = this.faces[t], n = this.vertices[o.a], r = this.vertices[o.b]; A.subVectors(this.vertices[o.c], r), e.subVectors(n, r), A.cross(e), A.normalize(), o.normal.copy(A) } }, computeVertexNormals: function (A) { var e, t, i, o, n, r; for (void 0 === A && (A = !0), r = new Array(this.vertices.length), e = 0, t = this.vertices.length; t > e; e++) r[e] = new y; if (A) { var a, s, l = new y, c = new y; for (i = 0, o = this.faces.length; o > i; i++) a = this.vertices[(n = this.faces[i]).a], l.subVectors(this.vertices[n.c], s = this.vertices[n.b]), c.subVectors(a, s), l.cross(c), r[n.a].add(l), r[n.b].add(l), r[n.c].add(l) } else for (this.computeFaceNormals(), i = 0, o = this.faces.length; o > i; i++) r[(n = this.faces[i]).a].add(n.normal), r[n.b].add(n.normal), r[n.c].add(n.normal); for (e = 0, t = this.vertices.length; t > e; e++) r[e].normalize(); for (i = 0, o = this.faces.length; o > i; i++) { var h = (n = this.faces[i]).vertexNormals; 3 === h.length ? (h[0].copy(r[n.a]), h[1].copy(r[n.b]), h[2].copy(r[n.c])) : (h[0] = r[n.a].clone(), h[1] = r[n.b].clone(), h[2] = r[n.c].clone()) } this.faces.length > 0 && (this.normalsNeedUpdate = !0) }, computeFlatVertexNormals: function () { var A, e, t; for (this.computeFaceNormals(), A = 0, e = this.faces.length; e > A; A++) { var i = (t = this.faces[A]).vertexNormals; 3 === i.length ? (i[0].copy(t.normal), i[1].copy(t.normal), i[2].copy(t.normal)) : (i[0] = t.normal.clone(), i[1] = t.normal.clone(), i[2] = t.normal.clone()) } this.faces.length > 0 && (this.normalsNeedUpdate = !0) }, computeMorphNormals: function () { var A, e, t, i, o; for (t = 0, i = this.faces.length; i > t; t++) for ((o = this.faces[t]).__originalFaceNormal ? o.__originalFaceNormal.copy(o.normal) : o.__originalFaceNormal = o.normal.clone(), o.__originalVertexNormals || (o.__originalVertexNormals = []), A = 0, e = o.vertexNormals.length; e > A; A++) o.__originalVertexNormals[A] ? o.__originalVertexNormals[A].copy(o.vertexNormals[A]) : o.__originalVertexNormals[A] = o.vertexNormals[A].clone(); var n = new De; for (n.faces = this.faces, A = 0, e = this.morphTargets.length; e > A; A++) { if (!this.morphNormals[A]) { this.morphNormals[A] = {}, this.morphNormals[A].faceNormals = [], this.morphNormals[A].vertexNormals = []; var r = this.morphNormals[A].faceNormals, a = this.morphNormals[A].vertexNormals; for (t = 0, i = this.faces.length; i > t; t++) s = new y, l = { a: new y, b: new y, c: new y }, r.push(s), a.push(l) } var s, l, c = this.morphNormals[A]; for (n.vertices = this.morphTargets[A].vertices, n.computeFaceNormals(), n.computeVertexNormals(), t = 0, i = this.faces.length; i > t; t++) l = c.vertexNormals[t], (s = c.faceNormals[t]).copy((o = this.faces[t]).normal), l.a.copy(o.vertexNormals[0]), l.b.copy(o.vertexNormals[1]), l.c.copy(o.vertexNormals[2]) } for (t = 0, i = this.faces.length; i > t; t++) (o = this.faces[t]).normal = o.__originalFaceNormal, o.vertexNormals = o.__originalVertexNormals }, computeBoundingBox: function () { null === this.boundingBox && (this.boundingBox = new aA), this.boundingBox.setFromPoints(this.vertices) }, computeBoundingSphere: function () { null === this.boundingSphere && (this.boundingSphere = new cA), this.boundingSphere.setFromPoints(this.vertices) }, merge: function (A, e, t) { if (A && A.isGeometry) { var i, o = this.vertices.length, n = this.vertices, r = A.vertices, a = this.faces, s = A.faces, c = this.colors, h = A.colors; void 0 === t && (t = 0), void 0 !== e && (i = (new l).getNormalMatrix(e)); for (var d = 0, p = r.length; p > d; d++) { var g = r[d].clone(); void 0 !== e && g.applyMatrix4(e), n.push(g) } for (d = 0, p = h.length; p > d; d++) c.push(h[d].clone()); for (d = 0, p = s.length; p > d; d++) { var u, f, m = s[d], C = m.vertexNormals, y = m.vertexColors; (u = new GA(m.a + o, m.b + o, m.c + o)).normal.copy(m.normal), void 0 !== i && u.normal.applyMatrix3(i).normalize(); for (var v = 0, I = C.length; I > v; v++) f = C[v].clone(), void 0 !== i && f.applyMatrix3(i).normalize(), u.vertexNormals.push(f); u.color.copy(m.color); for (v = 0, I = y.length; I > v; v++) u.vertexColors.push(y[v].clone()); u.materialIndex = m.materialIndex + t, a.push(u) } for (d = 0, p = A.faceVertexUvs.length; p > d; d++) { var E = A.faceVertexUvs[d]; void 0 === this.faceVertexUvs[d] && (this.faceVertexUvs[d] = []); for (v = 0, I = E.length; I > v; v++) { for (var B = E[v], x = [], S = 0, w = B.length; w > S; S++) x.push(B[S].clone()); this.faceVertexUvs[d].push(x) } } } else console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.", A) }, mergeMesh: function (A) { A && A.isMesh ? (A.matrixAutoUpdate && A.updateMatrix(), this.merge(A.geometry, A.matrix)) : console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.", A) }, mergeVertices: function () { var A, e, t, i, o, n, r, a, s = {}, l = [], c = [], h = Math.pow(10, 4); for (t = 0, i = this.vertices.length; i > t; t++) A = this.vertices[t], void 0 === s[e = Math.round(A.x * h) + "_" + Math.round(A.y * h) + "_" + Math.round(A.z * h)] ? (s[e] = t, l.push(this.vertices[t]), c[t] = l.length - 1) : c[t] = c[s[e]]; var d = []; for (t = 0, i = this.faces.length; i > t; t++) { (o = this.faces[t]).a = c[o.a], o.b = c[o.b], o.c = c[o.c], n = [o.a, o.b, o.c]; for (var p = 0; 3 > p; p++) if (n[p] === n[(p + 1) % 3]) { d.push(t); break } } for (t = d.length - 1; t >= 0; t--) { var g = d[t]; for (this.faces.splice(g, 1), r = 0, a = this.faceVertexUvs.length; a > r; r++) this.faceVertexUvs[r].splice(g, 1) } var u = this.vertices.length - l.length; return this.vertices = l, u }, setFromPoints: function (A) { this.vertices = []; for (var e = 0, t = A.length; t > e; e++) { var i = A[e]; this.vertices.push(new y(i.x, i.y, i.z || 0)) } return this }, sortFacesByMaterialIndex: function () { for (var A = this.faces, e = A.length, t = 0; e > t; t++) A[t]._id = t; A.sort((function (A, e) { return A.materialIndex - e.materialIndex })); var i, o, n = this.faceVertexUvs[0], r = this.faceVertexUvs[1]; n && n.length === e && (i = []), r && r.length === e && (o = []); for (t = 0; e > t; t++) { var a = A[t]._id; i && i.push(n[a]), o && o.push(r[a]) } i && (this.faceVertexUvs[0] = i), o && (this.faceVertexUvs[1] = o) }, toJSON: function () { var A = { metadata: { version: 4.5, type: "Geometry", generator: "Geometry.toJSON" } }; if (A.uuid = this.uuid, A.type = this.type, "" !== this.name && (A.name = this.name), void 0 !== this.parameters) { var e = this.parameters; for (var t in e) void 0 !== e[t] && (A[t] = e[t]); return A } for (var i = [], o = 0; this.vertices.length > o; o++) { var n = this.vertices[o]; i.push(n.x, n.y, n.z) } var r = [], a = [], s = {}, l = [], c = {}, h = [], d = {}; for (o = 0; this.faces.length > o; o++) { var p = this.faces[o], g = void 0 !== this.faceVertexUvs[0][o], u = p.normal.length() > 0, f = p.vertexNormals.length > 0, m = 1 !== p.color.r || 1 !== p.color.g || 1 !== p.color.b, C = p.vertexColors.length > 0, y = 0; if (y = B(y, 0, 0), y = B(y, 1, !0), y = B(y, 2, !1), y = B(y, 3, g), y = B(y, 4, u), y = B(y, 5, f), y = B(y, 6, m), y = B(y, 7, C), r.push(y), r.push(p.a, p.b, p.c), r.push(p.materialIndex), g) { var v = this.faceVertexUvs[0][o]; r.push(w(v[0]), w(v[1]), w(v[2])) } if (u && r.push(x(p.normal)), f) { var I = p.vertexNormals; r.push(x(I[0]), x(I[1]), x(I[2])) } if (m && r.push(S(p.color)), C) { var E = p.vertexColors; r.push(S(E[0]), S(E[1]), S(E[2])) } } function B(A, e, t) { return t ? A | 1 << e : A & ~(1 << e) } function x(A) { var e = A.x.toString() + A.y.toString() + A.z.toString(); return void 0 !== s[e] || (s[e] = a.length / 3, a.push(A.x, A.y, A.z)), s[e] } function S(A) { var e = A.r.toString() + A.g.toString() + A.b.toString(); return void 0 !== c[e] || (c[e] = l.length, l.push(A.getHex())), c[e] } function w(A) { var e = A.x.toString() + A.y.toString(); return void 0 !== d[e] || (d[e] = h.length / 2, h.push(A.x, A.y)), d[e] } return A.data = {}, A.data.vertices = i, A.data.normals = a, l.length > 0 && (A.data.colors = l), h.length > 0 && (A.data.uvs = [h]), A.data.faces = r, A }, clone: function () { return (new De).copy(this) }, copy: function (A) { var e, t, i, o, n, r; this.vertices = [], this.colors = [], this.faces = [], this.faceVertexUvs = [ [] ], this.morphTargets = [], this.morphNormals = [], this.skinWeights = [], this.skinIndices = [], this.lineDistances = [], this.boundingBox = null, this.boundingSphere = null, this.name = A.name; var a = A.vertices; for (e = 0, t = a.length; t > e; e++) this.vertices.push(a[e].clone()); var s = A.colors; for (e = 0, t = s.length; t > e; e++) this.colors.push(s[e].clone()); var l = A.faces; for (e = 0, t = l.length; t > e; e++) this.faces.push(l[e].clone()); for (e = 0, t = A.faceVertexUvs.length; t > e; e++) { var c = A.faceVertexUvs[e]; for (void 0 === this.faceVertexUvs[e] && (this.faceVertexUvs[e] = []), i = 0, o = c.length; o > i; i++) { var h = c[i], d = []; for (n = 0, r = h.length; r > n; n++) { d.push(h[n].clone()) } this.faceVertexUvs[e].push(d) } } var p = A.morphTargets; for (e = 0, t = p.length; t > e; e++) { var g = {}; if (g.name = p[e].name, void 0 !== p[e].vertices) for (g.vertices = [], i = 0, o = p[e].vertices.length; o > i; i++) g.vertices.push(p[e].vertices[i].clone()); if (void 0 !== p[e].normals) for (g.normals = [], i = 0, o = p[e].normals.length; o > i; i++) g.normals.push(p[e].normals[i].clone()); this.morphTargets.push(g) } var u = A.morphNormals; for (e = 0, t = u.length; t > e; e++) { var f = {}; if (void 0 !== u[e].vertexNormals) for (f.vertexNormals = [], i = 0, o = u[e].vertexNormals.length; o > i; i++) { var m = u[e].vertexNormals[i], C = {}; C.a = m.a.clone(), C.b = m.b.clone(), C.c = m.c.clone(), f.vertexNormals.push(C) } if (void 0 !== u[e].faceNormals) for (f.faceNormals = [], i = 0, o = u[e].faceNormals.length; o > i; i++) f.faceNormals.push(u[e].faceNormals[i].clone()); this.morphNormals.push(f) } var y = A.skinWeights; for (e = 0, t = y.length; t > e; e++) this.skinWeights.push(y[e].clone()); var v = A.skinIndices; for (e = 0, t = v.length; t > e; e++) this.skinIndices.push(v[e].clone()); var I = A.lineDistances; for (e = 0, t = I.length; t > e; e++) this.lineDistances.push(I[e]); var E = A.boundingBox; null !== E && (this.boundingBox = E.clone()); var B = A.boundingSphere; return null !== B && (this.boundingSphere = B.clone()), this.elementsNeedUpdate = A.elementsNeedUpdate, this.verticesNeedUpdate = A.verticesNeedUpdate, this.uvsNeedUpdate = A.uvsNeedUpdate, this.normalsNeedUpdate = A.normalsNeedUpdate, this.colorsNeedUpdate = A.colorsNeedUpdate, this.lineDistancesNeedUpdate = A.lineDistancesNeedUpdate, this.groupsNeedUpdate = A.groupsNeedUpdate, this }, dispose: function () { this.dispatchEvent({ type: "dispose" }) } }); class Le extends De { constructor(A, e, t, i, o, n) { super(), this.type = "BoxGeometry", this.parameters = { width: A, height: e, depth: t, widthSegments: i, heightSegments: o, depthSegments: n }, this.fromBufferGeometry(new Ne(A, e, t, i, o, n)), this.mergeVertices() } } class Ne extends he { constructor(A, e, t, i, o, n) { super(), this.type = "BoxBufferGeometry", this.parameters = { width: A, height: e, depth: t, widthSegments: i, heightSegments: o, depthSegments: n }; var r = this; A = A || 1, e = e || 1, t = t || 1, i = Math.floor(i) || 1, o = Math.floor(o) || 1, n = Math.floor(n) || 1; var a = [], s = [], l = [], c = [], h = 0, d = 0; function p(A, e, t, i, o, n, p, g, u, f, m) { var C, v, I = n / u, E = p / f, B = n / 2, x = p / 2, S = g / 2, w = u + 1, M = f + 1, b = 0, U = 0, F = new y; for (v = 0; M > v; v++) { var K = v * E - x; for (C = 0; w > C; C++) { F[A] = (C * I - B) * i, F[e] = K * o, F[t] = S, s.push(F.x, F.y, F.z), F[A] = 0, F[e] = 0, F[t] = g > 0 ? 1 : -1, l.push(F.x, F.y, F.z), c.push(C / u), c.push(1 - v / f), b += 1 } } for (v = 0; f > v; v++) for (C = 0; u > C; C++) { var Q = h + C + w * (v + 1), R = h + (C + 1) + w * (v + 1), T = h + (C + 1) + w * v; a.push(h + C + w * v, Q, T), a.push(Q, R, T), U += 6 } r.addGroup(d, U, m), d += U, h += b } p("z", "y", "x", -1, -1, t, e, A, n, o, 0), p("z", "y", "x", 1, -1, t, e, -A, n, o, 1), p("x", "z", "y", 1, 1, A, t, e, i, n, 2), p("x", "z", "y", 1, -1, A, t, -e, i, n, 3), p("x", "y", "z", 1, -1, A, e, t, i, o, 4), p("x", "y", "z", -1, -1, A, e, -t, i, o, 5), this.setIndex(a), this.setAttribute("position", new Ae(s, 3)), this.setAttribute("normal", new Ae(l, 3)), this.setAttribute("uv", new Ae(c, 2)) } } function Oe(A) { var e = {}; for (var t in A) for (var i in e[t] = {}, A[t]) { var o = A[t][i]; e[t][i] = o && (o.isColor || o.isMatrix3 || o.isMatrix4 || o.isVector2 || o.isVector3 || o.isVector4 || o.isTexture) ? o.clone() : Array.isArray(o) ? o.slice() : o } return e } function Ve(A) { for (var e = {}, t = 0; A.length > t; t++) { var i = Oe(A[t]); for (var o in i) e[o] = i[o] } return e } var Ge = { clone: Oe, merge: Ve }; function Pe(A) { qA.call(this), this.type = "ShaderMaterial", this.defines = {}, this.uniforms = {}, this.vertexShader = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}", this.fragmentShader = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}", this.linewidth = 1, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.lights = !1, this.clipping = !1, this.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, void 0 !== A && (void 0 !== A.attributes && console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."), this.setValues(A)) } function qe() { H.call(this), this.type = "Camera", this.matrixWorldInverse = new M, this.projectionMatrix = new M, this.projectionMatrixInverse = new M } function je(A, e, t, i) { qe.call(this), this.type = "PerspectiveCamera", this.fov = void 0 !== A ? A : 50, this.zoom = 1, this.near = void 0 !== t ? t : .1, this.far = void 0 !== i ? i : 2e3, this.focus = 10, this.aspect = void 0 !== e ? e : 1, this.view = null, this.filmGauge = 35, this.filmOffset = 0, this.updateProjectionMatrix() } (Pe.prototype = Object.create(qA.prototype)).constructor = Pe, Pe.prototype.isShaderMaterial = !0, Pe.prototype.copy = function (A) { return qA.prototype.copy.call(this, A), this.fragmentShader = A.fragmentShader, this.vertexShader = A.vertexShader, this.uniforms = Oe(A.uniforms), this.defines = Object.assign({}, A.defines), this.wireframe = A.wireframe, this.wireframeLinewidth = A.wireframeLinewidth, this.lights = A.lights, this.clipping = A.clipping, this.skinning = A.skinning, this.morphTargets = A.morphTargets, this.morphNormals = A.morphNormals, this.extensions = A.extensions, this }, Pe.prototype.toJSON = function (A) { var e = qA.prototype.toJSON.call(this, A); for (var t in e.uniforms = {}, this.uniforms) { var i = this.uniforms[t].value; e.uniforms[t] = i && i.isTexture ? { type: "t", value: i.toJSON(A).uuid } : i && i.isColor ? { type: "c", value: i.getHex() } : i && i.isVector2 ? { type: "v2", value: i.toArray() } : i && i.isVector3 ? { type: "v3", value: i.toArray() } : i && i.isVector4 ? { type: "v4", value: i.toArray() } : i && i.isMatrix3 ? { type: "m3", value: i.toArray() } : i && i.isMatrix4 ? { type: "m4", value: i.toArray() } : { value: i } } Object.keys(this.defines).length > 0 && (e.defines = this.defines), e.vertexShader = this.vertexShader, e.fragmentShader = this.fragmentShader; var o = {}; for (var n in this.extensions) !0 === this.extensions[n] && (o[n] = !0); return Object.keys(o).length > 0 && (e.extensions = o), e }, qe.prototype = Object.assign(Object.create(H.prototype), { constructor: qe, isCamera: !0, copy: function (A, e) { return H.prototype.copy.call(this, A, e), this.matrixWorldInverse.copy(A.matrixWorldInverse), this.projectionMatrix.copy(A.projectionMatrix), this.projectionMatrixInverse.copy(A.projectionMatrixInverse), this }, getWorldDirection: function (A) { void 0 === A && (console.warn("THREE.Camera: .getWorldDirection() target is now required"), A = new y), this.updateMatrixWorld(!0); var e = this.matrixWorld.elements; return A.set(-e[8], -e[9], -e[10]).normalize() }, updateMatrixWorld: function (A) { H.prototype.updateMatrixWorld.call(this, A), this.matrixWorldInverse.getInverse(this.matrixWorld) }, updateWorldMatrix: function (A, e) { H.prototype.updateWorldMatrix.call(this, A, e), this.matrixWorldInverse.getInverse(this.matrixWorld) }, clone: function () { return (new this.constructor).copy(this) } }), je.prototype = Object.assign(Object.create(qe.prototype), { constructor: je, isPerspectiveCamera: !0, copy: function (A, e) { return qe.prototype.copy.call(this, A, e), this.fov = A.fov, this.zoom = A.zoom, this.near = A.near, this.far = A.far, this.focus = A.focus, this.aspect = A.aspect, this.view = null === A.view ? null : Object.assign({}, A.view), this.filmGauge = A.filmGauge, this.filmOffset = A.filmOffset, this }, setFocalLength: function (A) { var e = .5 * this.getFilmHeight() / A; this.fov = 2 * a.RAD2DEG * Math.atan(e), this.updateProjectionMatrix() }, getFocalLength: function () { var A = Math.tan(.5 * a.DEG2RAD * this.fov); return .5 * this.getFilmHeight() / A }, getEffectiveFOV: function () { return 2 * a.RAD2DEG * Math.atan(Math.tan(.5 * a.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 (A, e, t, i, o, n) { this.aspect = A / e, null === this.view && (this.view = { enabled: !0, fullWidth: 1, fullHeight: 1, offsetX: 0, offsetY: 0, width: 1, height: 1 }), this.view.enabled = !0, this.view.fullWidth = A, this.view.fullHeight = e, this.view.offsetX = t, this.view.offsetY = i, this.view.width = o, this.view.height = n, this.updateProjectionMatrix() }, clearViewOffset: function () { null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix() }, updateProjectionMatrix: function () { var A = this.near, e = A * Math.tan(.5 * a.DEG2RAD * this.fov) / this.zoom, t = 2 * e, i = this.aspect * t, o = -.5 * i, n = this.view; if (null !== this.view && this.view.enabled) { var r = n.fullWidth, s = n.fullHeight; o += n.offsetX * i / r, e -= n.offsetY * t / s, i *= n.width / r, t *= n.height / s } var l = this.filmOffset; 0 !== l && (o += A * l / this.getFilmWidth()), this.projectionMatrix.makePerspective(o, o + i, e, e - t, A, this.far), this.projectionMatrixInverse.getInverse(this.projectionMatrix) }, toJSON: function (A) { var e = H.prototype.toJSON.call(this, A); return e.object.fov = this.fov, e.object.zoom = this.zoom, e.object.near = this.near, e.object.far = this.far, e.object.focus = this.focus, e.object.aspect = this.aspect, null !== this.view && (e.object.view = Object.assign({}, this.view)), e.object.filmGauge = this.filmGauge, e.object.filmOffset = this.filmOffset, e } }); function He(A, e, t, i) { H.call(this), this.type = "CubeCamera"; var o = new je(90, 1, A, e); o.up.set(0, -1, 0), o.lookAt(new y(1, 0, 0)), this.add(o); var n = new je(90, 1, A, e); n.up.set(0, -1, 0), n.lookAt(new y(-1, 0, 0)), this.add(n); var r = new je(90, 1, A, e); r.up.set(0, 0, 1), r.lookAt(new y(0, 1, 0)), this.add(r); var a = new je(90, 1, A, e); a.up.set(0, 0, -1), a.lookAt(new y(0, -1, 0)), this.add(a); var s = new je(90, 1, A, e); s.up.set(0, -1, 0), s.lookAt(new y(0, 0, 1)), this.add(s); var l = new je(90, 1, A, e); l.up.set(0, -1, 0), l.lookAt(new y(0, 0, -1)), this.add(l), this.renderTarget = new Ye(t, i = i || { format: 1022, magFilter: 1006, minFilter: 1006 }), this.renderTarget.texture.name = "CubeCamera", this.update = function (A, e) { null === this.parent && this.updateMatrixWorld(); var t = A.getRenderTarget(), i = this.renderTarget, c = i.texture.generateMipmaps; i.texture.generateMipmaps = !1, A.setRenderTarget(i, 0), A.render(e, o), A.setRenderTarget(i, 1), A.render(e, n), A.setRenderTarget(i, 2), A.render(e, r), A.setRenderTarget(i, 3), A.render(e, a), A.setRenderTarget(i, 4), A.render(e, s), i.texture.generateMipmaps = c, A.setRenderTarget(i, 5), A.render(e, l), A.setRenderTarget(t) }, this.clear = function (A, e, t, i) { for (var o = A.getRenderTarget(), n = this.renderTarget, r = 0; 6 > r; r++) A.setRenderTarget(n, r), A.clear(e, t, i); A.setRenderTarget(o) } } function Ye(A, e, t) { Number.isInteger(e) && (console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"), e = t), g.call(this, A, A, e) } function We(A, e, t, i, o, n, r, a, s, l, c, h) { d.call(this, null, n, r, a, s, l, i, o, c, h), this.image = { data: A || null, width: e || 1, height: t || 1 }, this.magFilter = void 0 !== s ? s : 1003, this.minFilter = void 0 !== l ? l : 1003, this.generateMipmaps = !1, this.flipY = !1, this.unpackAlignment = 1, this.needsUpdate = !0 } (He.prototype = Object.create(H.prototype)).constructor = He, (Ye.prototype = Object.create(g.prototype)).constructor = Ye, Ye.prototype.isWebGLCubeRenderTarget = !0, Ye.prototype.fromEquirectangularTexture = function (A, e) { this.texture.type = e.type, this.texture.format = e.format, this.texture.encoding = e.encoding; var t = new Y, i = { uniforms: { tEquirect: { value: null } }, vertexShader: ["varying vec3 vWorldDirection;", "vec3 transformDirection( in vec3 dir, in mat4 matrix ) {", "\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );", "}", "void main() {", "\tvWorldDirection = transformDirection( position, modelMatrix );", "\t#include ", "\t#include ", "}"].join("\n"), fragmentShader: ["uniform sampler2D tEquirect;", "varying vec3 vWorldDirection;", "#define RECIPROCAL_PI 0.31830988618", "#define RECIPROCAL_PI2 0.15915494", "void main() {", "\tvec3 direction = normalize( vWorldDirection );", "\tvec2 sampleUV;", "\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;", "\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;", "\tgl_FragColor = texture2D( tEquirect, sampleUV );", "}"].join("\n") }, o = new Pe({ type: "CubemapFromEquirect", uniforms: Oe(i.uniforms), vertexShader: i.vertexShader, fragmentShader: i.fragmentShader, side: 1, blending: 0 }); o.uniforms.tEquirect.value = e; var n = new Ue(new Ne(5, 5, 5), o); t.add(n); var r = new He(1, 10, 1); return r.renderTarget = this, r.renderTarget.texture.name = "CubeCameraTexture", r.update(A, t), n.geometry.dispose(), n.material.dispose(), this }, (We.prototype = Object.create(d.prototype)).constructor = We, We.prototype.isDataTexture = !0; var Je = new cA, ze = new y; function Ze(A, e, t, i, o, n) { this.planes = [void 0 !== A ? A : new EA, void 0 !== e ? e : new EA, void 0 !== t ? t : new EA, void 0 !== i ? i : new EA, void 0 !== o ? o : new EA, void 0 !== n ? n : new EA] } Object.assign(Ze.prototype, { set: function (A, e, t, i, o, n) { var r = this.planes; return r[0].copy(A), r[1].copy(e), r[2].copy(t), r[3].copy(i), r[4].copy(o), r[5].copy(n), this }, clone: function () { return (new this.constructor).copy(this) }, copy: function (A) { for (var e = this.planes, t = 0; 6 > t; t++) e[t].copy(A.planes[t]); return this }, setFromProjectionMatrix: function (A) { var e = this.planes, t = A.elements, i = t[0], o = t[1], n = t[2], r = t[3], a = t[4], s = t[5], l = t[6], c = t[7], h = t[8], d = t[9], p = t[10], g = t[11], u = t[12], f = t[13], m = t[14], C = t[15]; return e[0].setComponents(r - i, c - a, g - h, C - u).normalize(), e[1].setComponents(r + i, c + a, g + h, C + u).normalize(), e[2].setComponents(r + o, c + s, g + d, C + f).normalize(), e[3].setComponents(r - o, c - s, g - d, C - f).normalize(), e[4].setComponents(r - n, c - l, g - p, C - m).normalize(), e[5].setComponents(r + n, c + l, g + p, C + m).normalize(), this }, intersectsObject: function (A) { var e = A.geometry; return null === e.boundingSphere && e.computeBoundingSphere(), Je.copy(e.boundingSphere).applyMatrix4(A.matrixWorld), this.intersectsSphere(Je) }, intersectsSprite: function (A) { return Je.center.set(0, 0, 0), Je.radius = .7071067811865476, Je.applyMatrix4(A.matrixWorld), this.intersectsSphere(Je) }, intersectsSphere: function (A) { for (var e = this.planes, t = A.center, i = -A.radius, o = 0; 6 > o; o++) { if (i > e[o].distanceToPoint(t)) return !1 } return !0 }, intersectsBox: function (A) { for (var e = this.planes, t = 0; 6 > t; t++) { var i = e[t]; if (ze.x = i.normal.x > 0 ? A.max.x : A.min.x, ze.y = i.normal.y > 0 ? A.max.y : A.min.y, ze.z = i.normal.z > 0 ? A.max.z : A.min.z, 0 > i.distanceToPoint(ze)) return !1 } return !0 }, containsPoint: function (A) { for (var e = this.planes, t = 0; 6 > t; t++) if (0 > e[t].distanceToPoint(A)) return !1; return !0 } }); var Xe = { common: { diffuse: { value: new LA(15658734) }, opacity: { value: 1 }, map: { value: null }, uvTransform: { value: new l }, uv2Transform: { value: new l }, alphaMap: { value: null } }, specularmap: { specularMap: { value: null } }, envmap: { envMap: { value: null }, flipEnvMap: { value: -1 }, reflectivity: { value: 1 }, refractionRatio: { value: .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 s(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 LA(16777215) } }, lights: { ambientLightColor: { value: [] }, lightProbe: { value: [] }, directionalLights: { value: [], properties: { direction: {}, color: {} } }, directionalLightShadows: { value: [], properties: { shadowBias: {}, shadowRadius: {}, shadowMapSize: {} } }, directionalShadowMap: { value: [] }, directionalShadowMatrix: { value: [] }, spotLights: { value: [], properties: { color: {}, position: {}, direction: {}, distance: {}, coneCos: {}, penumbraCos: {}, decay: {} } }, spotLightShadows: { value: [], properties: { shadowBias: {}, shadowRadius: {}, shadowMapSize: {} } }, spotShadowMap: { value: [] }, spotShadowMatrix: { value: [] }, pointLights: { value: [], properties: { color: {}, position: {}, decay: {}, distance: {} } }, pointLightShadows: { value: [], properties: { shadowBias: {}, shadowRadius: {}, shadowMapSize: {}, shadowCameraNear: {}, shadowCameraFar: {} } }, pointShadowMap: { value: [] }, pointShadowMatrix: { value: [] }, hemisphereLights: { value: [], properties: { direction: {}, skyColor: {}, groundColor: {} } }, rectAreaLights: { value: [], properties: { color: {}, position: {}, width: {}, height: {} } } }, points: { diffuse: { value: new LA(15658734) }, opacity: { value: 1 }, size: { value: 1 }, scale: { value: 1 }, map: { value: null }, alphaMap: { value: null }, uvTransform: { value: new l } }, sprite: { diffuse: { value: new LA(15658734) }, opacity: { value: 1 }, center: { value: new s(.5, .5) }, rotation: { value: 0 }, map: { value: null }, alphaMap: { value: null }, uvTransform: { value: new l } } }; function _e() { var A = null, e = !1, t = null; function i(o, n) { !1 !== e && (t(o, n), A.requestAnimationFrame(i)) } return { start: function () { !0 !== e && null !== t && (A.requestAnimationFrame(i), e = !0) }, stop: function () { e = !1 }, setAnimationLoop: function (A) { t = A }, setContext: function (e) { A = e } } } function $e(A, e) { var t = e.isWebGL2, i = new WeakMap; return { get: function (A) { return A.isInterleavedBufferAttribute && (A = A.data), i.get(A) }, remove: function (e) { e.isInterleavedBufferAttribute && (e = e.data); var t = i.get(e); t && (A.deleteBuffer(t.buffer), i.delete(e)) }, update: function (e, o) { e.isInterleavedBufferAttribute && (e = e.data); var n = i.get(e); void 0 === n ? i.set(e, function (e, t) { var i = e.array, o = e.usage, n = A.createBuffer(); A.bindBuffer(t, n), A.bufferData(t, i, o), e.onUploadCallback(); var r = 5126; return i instanceof Float32Array ? r = 5126 : i instanceof Float64Array ? console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.") : i instanceof Uint16Array ? r = 5123 : i instanceof Int16Array ? r = 5122 : i instanceof Uint32Array ? r = 5125 : i instanceof Int32Array ? r = 5124 : i instanceof Int8Array ? r = 5120 : i instanceof Uint8Array && (r = 5121), { buffer: n, type: r, bytesPerElement: i.BYTES_PER_ELEMENT, version: e.version } }(e, o)) : e.version > n.version && (! function (e, i, o) { var n = i.array, r = i.updateRange; A.bindBuffer(o, e), -1 === r.count ? A.bufferSubData(o, 0, n) : (t ? A.bufferSubData(o, r.offset * n.BYTES_PER_ELEMENT, n, r.offset, r.count) : A.bufferSubData(o, r.offset * n.BYTES_PER_ELEMENT, n.subarray(r.offset, r.offset + r.count)), r.count = -1) }(n.buffer, e, o), n.version = e.version) } } } function At(A, e, t, i) { De.call(this), this.type = "PlaneGeometry", this.parameters = { width: A, height: e, widthSegments: t, heightSegments: i }, this.fromBufferGeometry(new et(A, e, t, i)), this.mergeVertices() } function et(A, e, t, i) { he.call(this), this.type = "PlaneBufferGeometry", this.parameters = { width: A, height: e, widthSegments: t, heightSegments: i }; var o, n, r = (A = A || 1) / 2, a = (e = e || 1) / 2, s = Math.floor(t) || 1, l = Math.floor(i) || 1, c = s + 1, h = l + 1, d = A / s, p = e / l, g = [], u = [], f = [], m = []; for (n = 0; h > n; n++) { var C = n * p - a; for (o = 0; c > o; o++) { u.push(o * d - r, -C, 0), f.push(0, 0, 1), m.push(o / s), m.push(1 - n / l) } } for (n = 0; l > n; n++) for (o = 0; s > o; o++) { var y = o + c * (n + 1), v = o + 1 + c * (n + 1), I = o + 1 + c * n; g.push(o + c * n, y, I), g.push(y, v, I) } this.setIndex(g), this.setAttribute("position", new Ae(u, 3)), this.setAttribute("normal", new Ae(f, 3)), this.setAttribute("uv", new Ae(m, 2)) } (At.prototype = Object.create(De.prototype)).constructor = At, (et.prototype = Object.create(he.prototype)).constructor = et; var tt = { 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: "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", color_vertex: "#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif", common: "#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\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 return m[ 2 ][ 3 ] == - 1.0;\n}", cube_uv_reflection_fragment: "#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_maxMipLevel 8.0\n#define cubeUV_minMipLevel 4.0\n#define cubeUV_maxTileSize 256.0\n#define cubeUV_minTileSize 16.0\nfloat getFace(vec3 direction) {\n vec3 absDirection = abs(direction);\n float face = -1.0;\n if (absDirection.x > absDirection.z) {\n if (absDirection.x > absDirection.y)\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if (absDirection.z > absDirection.y)\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n}\nvec2 getUV(vec3 direction, float face) {\n vec2 uv;\n if (face == 0.0) {\n uv = vec2(-direction.z, direction.y) / abs(direction.x);\n } else if (face == 1.0) {\n uv = vec2(direction.x, -direction.z) / abs(direction.y);\n } else if (face == 2.0) {\n uv = direction.xy / abs(direction.z);\n } else if (face == 3.0) {\n uv = vec2(direction.z, direction.y) / abs(direction.x);\n } else if (face == 4.0) {\n uv = direction.xz / abs(direction.y);\n } else {\n uv = vec2(-direction.x, direction.y) / abs(direction.z);\n }\n return 0.5 * (uv + 1.0);\n}\nvec3 bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) {\n float face = getFace(direction);\n float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0);\n mipInt = max(mipInt, cubeUV_minMipLevel);\n float faceSize = exp2(mipInt);\n float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize);\n vec2 uv = getUV(direction, face) * (faceSize - 1.0);\n vec2 f = fract(uv);\n uv += 0.5 - f;\n if (face > 2.0) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n if(mipInt < cubeUV_maxMipLevel){\n uv.y += 2.0 * cubeUV_maxTileSize;\n }\n uv.y += filterInt * 2.0 * cubeUV_minTileSize;\n uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize);\n uv *= texelSize;\n vec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x += texelSize;\n vec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.y += texelSize;\n vec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x -= texelSize;\n vec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n vec3 tm = mix(tl, tr, f.x);\n vec3 bm = mix(bl, br, f.x);\n return mix(tm, bm, f.y);\n}\n#define r0 1.0\n#define v0 0.339\n#define m0 -2.0\n#define r1 0.8\n#define v1 0.276\n#define m1 -1.0\n#define r4 0.4\n#define v4 0.046\n#define m4 2.0\n#define r5 0.305\n#define v5 0.016\n#define m5 3.0\n#define r6 0.21\n#define v6 0.0038\n#define m6 4.0\nfloat roughnessToMip(float roughness) {\n float mip = 0.0;\n if (roughness >= r1) {\n mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0;\n } else if (roughness >= r4) {\n mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1;\n } else if (roughness >= r5) {\n mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4;\n } else if (roughness >= r6) {\n mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5;\n } else {\n mip = -2.0 * log2(1.16 * roughness); }\n return mip;\n}\nvec4 textureCubeUV(sampler2D envMap, vec3 sampleDir, float roughness) {\n float mip = clamp(roughnessToMip(roughness), m0, cubeUV_maxMipLevel);\n float mipF = fract(mip);\n float mipInt = floor(mip);\n vec3 color0 = bilinearCubeUV(envMap, sampleDir, mipInt);\n if (mipF == 0.0) {\n return vec4(color0, 1.0);\n } else {\n vec3 color1 = bilinearCubeUV(envMap, sampleDir, mipInt + 1.0);\n return vec4(mix(color0, color1, mipF), 1.0);\n }\n}\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\t\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#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\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 vec3 reflectVec = reflect( -viewDir, normal );\n\t\t reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t vec3 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#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\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;\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\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\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\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\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\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\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\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\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\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;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;", lights_toon_pars_fragment: "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\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\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\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\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\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\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\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( 0, 1, 0 ),\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\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\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\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\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#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#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#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 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.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 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.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#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#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#endif\n#endif", shadowmap_vertex: "#ifdef USE_SHADOWMAP\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\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\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\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\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\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\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;\nuniform float toneMappingWhitePoint;\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}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\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 ACESFilmicToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );\n}", 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 \n\t#include \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 \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", cube_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}", depth_frag: "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \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 \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}", distanceRGBA_frag: "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \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 \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", equirect_frag: "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", equirect_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}", linedashed_frag: "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \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 \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", linedashed_vert: "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", meshbasic_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \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 \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", meshbasic_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \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 \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \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 \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\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 \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 \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \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 \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \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 \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \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 \n\t#include \n\t#include \n\t#include \n}", meshmatcap_vert: "#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", meshtoon_frag: "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \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 \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", meshtoon_vert: "#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", meshphong_frag: "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \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 \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", meshphong_vert: "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", meshphysical_frag: "#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSPARENCY\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSPARENCY\n\tuniform float transparency;\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 \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \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 \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSPARENCY\n\t\tdiffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \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 \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \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 \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \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 \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \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 \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \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 \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \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 \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", points_vert: "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \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 \n\t#include \n\t#include \n\t#include \n}", shadow_frag: "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}", shadow_vert: "#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", sprite_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", sprite_vert: "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \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 \n\t#include \n\t#include \n}" }, it = { basic: { uniforms: Ve([Xe.common, Xe.specularmap, Xe.envmap, Xe.aomap, Xe.lightmap, Xe.fog]), vertexShader: tt.meshbasic_vert, fragmentShader: tt.meshbasic_frag }, lambert: { uniforms: Ve([Xe.common, Xe.specularmap, Xe.envmap, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.fog, Xe.lights, { emissive: { value: new LA(0) } }]), vertexShader: tt.meshlambert_vert, fragmentShader: tt.meshlambert_frag }, phong: { uniforms: Ve([Xe.common, Xe.specularmap, Xe.envmap, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.fog, Xe.lights, { emissive: { value: new LA(0) }, specular: { value: new LA(1118481) }, shininess: { value: 30 } }]), vertexShader: tt.meshphong_vert, fragmentShader: tt.meshphong_frag }, standard: { uniforms: Ve([Xe.common, Xe.envmap, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.roughnessmap, Xe.metalnessmap, Xe.fog, Xe.lights, { emissive: { value: new LA(0) }, roughness: { value: .5 }, metalness: { value: .5 }, envMapIntensity: { value: 1 } }]), vertexShader: tt.meshphysical_vert, fragmentShader: tt.meshphysical_frag }, toon: { uniforms: Ve([Xe.common, Xe.specularmap, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.gradientmap, Xe.fog, Xe.lights, { emissive: { value: new LA(0) }, specular: { value: new LA(1118481) }, shininess: { value: 30 } }]), vertexShader: tt.meshtoon_vert, fragmentShader: tt.meshtoon_frag }, matcap: { uniforms: Ve([Xe.common, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.fog, { matcap: { value: null } }]), vertexShader: tt.meshmatcap_vert, fragmentShader: tt.meshmatcap_frag }, points: { uniforms: Ve([Xe.points, Xe.fog]), vertexShader: tt.points_vert, fragmentShader: tt.points_frag }, dashed: { uniforms: Ve([Xe.common, Xe.fog, { scale: { value: 1 }, dashSize: { value: 1 }, totalSize: { value: 2 } }]), vertexShader: tt.linedashed_vert, fragmentShader: tt.linedashed_frag }, depth: { uniforms: Ve([Xe.common, Xe.displacementmap]), vertexShader: tt.depth_vert, fragmentShader: tt.depth_frag }, normal: { uniforms: Ve([Xe.common, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, { opacity: { value: 1 } }]), vertexShader: tt.normal_vert, fragmentShader: tt.normal_frag }, sprite: { uniforms: Ve([Xe.sprite, Xe.fog]), vertexShader: tt.sprite_vert, fragmentShader: tt.sprite_frag }, background: { uniforms: { uvTransform: { value: new l }, t2D: { value: null } }, vertexShader: tt.background_vert, fragmentShader: tt.background_frag }, cube: { uniforms: Ve([Xe.envmap, { opacity: { value: 1 } }]), vertexShader: tt.cube_vert, fragmentShader: tt.cube_frag }, equirect: { uniforms: { tEquirect: { value: null } }, vertexShader: tt.equirect_vert, fragmentShader: tt.equirect_frag }, distanceRGBA: { uniforms: Ve([Xe.common, Xe.displacementmap, { referencePosition: { value: new y }, nearDistance: { value: 1 }, farDistance: { value: 1e3 } }]), vertexShader: tt.distanceRGBA_vert, fragmentShader: tt.distanceRGBA_frag }, shadow: { uniforms: Ve([Xe.lights, Xe.fog, { color: { value: new LA(0) }, opacity: { value: 1 } }]), vertexShader: tt.shadow_vert, fragmentShader: tt.shadow_frag } }; function ot(A, e, t, i) { var o, n, r = new LA(0), a = 0, s = null, l = 0, c = null; function h(A, t) { e.buffers.color.setClear(A.r, A.g, A.b, t, i) } return { getClearColor: function () { return r }, setClearColor: function (A, e) { r.set(A), h(r, a = void 0 !== e ? e : 1) }, getClearAlpha: function () { return a }, setClearAlpha: function (A) { h(r, a = A) }, render: function (e, i, d, p) { var g = i.background, u = A.xr, f = u.getSession && u.getSession(); if (f && "additive" === f.environmentBlendMode && (g = null), null === g ? h(r, a) : g && g.isColor && (h(g, 1), p = !0), (A.autoClear || p) && A.clear(A.autoClearColor, A.autoClearDepth, A.autoClearStencil), g && (g.isCubeTexture || g.isWebGLCubeRenderTarget || 306 === g.mapping)) { void 0 === n && ((n = new Ue(new Ne(1, 1, 1), new Pe({ type: "BackgroundCubeMaterial", uniforms: Oe(it.cube.uniforms), vertexShader: it.cube.vertexShader, fragmentShader: it.cube.fragmentShader, side: 1, depthTest: !1, depthWrite: !1, fog: !1 }))).geometry.deleteAttribute("normal"), n.geometry.deleteAttribute("uv"), n.onBeforeRender = function (A, e, t) { this.matrixWorld.copyPosition(t.matrixWorld) }, Object.defineProperty(n.material, "envMap", { get: function () { return this.uniforms.envMap.value } }), t.update(n)); var m = g.isWebGLCubeRenderTarget ? g.texture : g; n.material.uniforms.envMap.value = m, n.material.uniforms.flipEnvMap.value = m.isCubeTexture ? -1 : 1, s === g && l === m.version && c === A.toneMapping || (n.material.needsUpdate = !0, s = g, l = m.version, c = A.toneMapping), e.unshift(n, n.geometry, n.material, 0, 0, null) } else g && g.isTexture && (void 0 === o && ((o = new Ue(new et(2, 2), new Pe({ type: "BackgroundMaterial", uniforms: Oe(it.background.uniforms), vertexShader: it.background.vertexShader, fragmentShader: it.background.fragmentShader, side: 0, depthTest: !1, depthWrite: !1, fog: !1 }))).geometry.deleteAttribute("normal"), Object.defineProperty(o.material, "map", { get: function () { return this.uniforms.t2D.value } }), t.update(o)), o.material.uniforms.t2D.value = g, !0 === g.matrixAutoUpdate && g.updateMatrix(), o.material.uniforms.uvTransform.value.copy(g.matrix), s === g && l === g.version && c === A.toneMapping || (o.material.needsUpdate = !0, s = g, l = g.version, c = A.toneMapping), e.unshift(o, o.geometry, o.material, 0, 0, null)) } } } function nt(A, e, t, i) { var o, n = i.isWebGL2; this.setMode = function (A) { o = A }, this.render = function (e, i) { A.drawArrays(o, e, i), t.update(i, o) }, this.renderInstances = function (i, r, a, s) { if (0 !== s) { var l, c; if (n) l = A, c = "drawArraysInstanced"; else if (c = "drawArraysInstancedANGLE", null === (l = e.get("ANGLE_instanced_arrays"))) return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); l[c](o, r, a, s), t.update(a, o, s) } } } function rt(A, e, t) { var i; function o(e) { if ("highp" === e) { if (A.getShaderPrecisionFormat(35633, 36338).precision > 0 && A.getShaderPrecisionFormat(35632, 36338).precision > 0) return "highp"; e = "mediump" } return "mediump" === e && A.getShaderPrecisionFormat(35633, 36337).precision > 0 && A.getShaderPrecisionFormat(35632, 36337).precision > 0 ? "mediump" : "lowp" } var n = "undefined" != typeof WebGL2RenderingContext && A instanceof WebGL2RenderingContext || "undefined" != typeof WebGL2ComputeRenderingContext && A instanceof WebGL2ComputeRenderingContext, r = void 0 !== t.precision ? t.precision : "highp", a = o(r); a !== r && (console.warn("THREE.WebGLRenderer:", r, "not supported, using", a, "instead."), r = a); var s = !0 === t.logarithmicDepthBuffer, l = A.getParameter(34930), c = A.getParameter(35660), h = A.getParameter(3379), d = A.getParameter(34076), p = A.getParameter(34921), g = A.getParameter(36347), u = A.getParameter(36348), f = A.getParameter(36349), m = c > 0, C = n || !!e.get("OES_texture_float"); return { isWebGL2: n, getMaxAnisotropy: function () { if (void 0 !== i) return i; var t = e.get("EXT_texture_filter_anisotropic"); return i = null !== t ? A.getParameter(t.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 0 }, getMaxPrecision: o, precision: r, logarithmicDepthBuffer: s, maxTextures: l, maxVertexTextures: c, maxTextureSize: h, maxCubemapSize: d, maxAttributes: p, maxVertexUniforms: g, maxVaryings: u, maxFragmentUniforms: f, vertexTextures: m, floatFragmentTextures: C, floatVertexTextures: m && C, maxSamples: n ? A.getParameter(36183) : 0 } } function at() { var A = this, e = null, t = 0, i = !1, o = !1, n = new EA, r = new l, a = { value: null, needsUpdate: !1 }; function s() { a.value !== e && (a.value = e, a.needsUpdate = t > 0), A.numPlanes = t, A.numIntersection = 0 } function c(e, t, i, o) { var s = null !== e ? e.length : 0, l = null; if (0 !== s) { if (l = a.value, !0 !== o || null === l) { var c = i + 4 * s, h = t.matrixWorldInverse; r.getNormalMatrix(h), (null === l || c > l.length) && (l = new Float32Array(c)); for (var d = 0, p = i; d !== s; ++d, p += 4) n.copy(e[d]).applyMatrix4(h, r), n.normal.toArray(l, p), l[p + 3] = n.constant } a.value = l, a.needsUpdate = !0 } return A.numPlanes = s, A.numIntersection = 0, l } this.uniform = a, this.numPlanes = 0, this.numIntersection = 0, this.init = function (A, o, n) { var r = 0 !== A.length || o || 0 !== t || i; return i = o, e = c(A, n, 0), t = A.length, r }, this.beginShadows = function () { o = !0, c(null) }, this.endShadows = function () { o = !1, s() }, this.setState = function (A, n, r, l, h, d) { if (!i || null === A || 0 === A.length || o && !r) o ? c(null) : s(); else { var p = o ? 0 : t, g = 4 * p, u = h.clippingState || null; a.value = u, u = c(A, l, g, d); for (var f = 0; f !== g; ++f) u[f] = e[f]; h.clippingState = u, this.numIntersection = n ? this.numPlanes : 0, this.numPlanes += p } } } function st(A) { var e = {}; return { get: function (t) { if (void 0 !== e[t]) return e[t]; var i; switch (t) { case "WEBGL_depth_texture": i = A.getExtension("WEBGL_depth_texture") || A.getExtension("MOZ_WEBGL_depth_texture") || A.getExtension("WEBKIT_WEBGL_depth_texture"); break; case "EXT_texture_filter_anisotropic": i = A.getExtension("EXT_texture_filter_anisotropic") || A.getExtension("MOZ_EXT_texture_filter_anisotropic") || A.getExtension("WEBKIT_EXT_texture_filter_anisotropic"); break; case "WEBGL_compressed_texture_s3tc": i = A.getExtension("WEBGL_compressed_texture_s3tc") || A.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || A.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); break; case "WEBGL_compressed_texture_pvrtc": i = A.getExtension("WEBGL_compressed_texture_pvrtc") || A.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"); break; default: i = A.getExtension(t) } return null === i && console.warn("THREE.WebGLRenderer: " + t + " extension not supported."), e[t] = i, i } } } function lt(A, e, t) { var i = new WeakMap, o = new WeakMap; function n(A) { var r = A.target, a = i.get(r); for (var s in null !== a.index && e.remove(a.index), a.attributes) e.remove(a.attributes[s]); r.removeEventListener("dispose", n), i.delete(r); var l = o.get(a); l && (e.remove(l), o.delete(a)), t.memory.geometries-- } function r(A) { var t = [], i = A.index, n = A.attributes.position, r = 0; if (null !== i) { r = i.version; for (var a = 0, s = (l = i.array).length; s > a; a += 3) { t.push(c = l[a + 0], h = l[a + 1], h, d = l[a + 2], d, c) } } else { var l; r = n.version; for (a = 0, s = (l = n.array).length / 3 - 1; s > a; a += 3) { var c, h, d; t.push(c = a + 0, h = a + 1, h, d = a + 2, d, c) } } var p = new(ie(t) > 65535 ? $A : XA)(t, 1); p.version = r, e.update(p, 34963); var g = o.get(A); g && e.remove(g), o.set(A, p) } return { get: function (A, e) { var o = i.get(e); return o || (e.addEventListener("dispose", n), e.isBufferGeometry ? o = e : e.isGeometry && (void 0 === e._bufferGeometry && (e._bufferGeometry = (new he).setFromObject(A)), o = e._bufferGeometry), i.set(e, o), t.memory.geometries++, o) }, update: function (A) { var t = A.index, i = A.attributes; for (var o in null !== t && e.update(t, 34963), i) e.update(i[o], 34962); var n = A.morphAttributes; for (var o in n) for (var r = n[o], a = 0, s = r.length; s > a; a++) e.update(r[a], 34962) }, getWireframeAttribute: function (A) { var e = o.get(A); if (e) { var t = A.index; null !== t && t.version > e.version && r(A) } else r(A); return o.get(A) } } } function ct(A, e, t, i) { var o, n, r, a = i.isWebGL2; this.setMode = function (A) { o = A }, this.setIndex = function (A) { n = A.type, r = A.bytesPerElement }, this.render = function (e, i) { A.drawElements(o, i, n, e * r), t.update(i, o) }, this.renderInstances = function (i, s, l, c) { if (0 !== c) { var h, d; if (a) h = A, d = "drawElementsInstanced"; else if (d = "drawElementsInstancedANGLE", null === (h = e.get("ANGLE_instanced_arrays"))) return void console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); h[d](o, l, n, s * r, c), t.update(l, o, c) } } } function ht(A) { var e = { frame: 0, calls: 0, triangles: 0, points: 0, lines: 0 }; return { memory: { geometries: 0, textures: 0 }, render: e, programs: null, autoReset: !0, reset: function () { e.frame++, e.calls = 0, e.triangles = 0, e.points = 0, e.lines = 0 }, update: function (A, t, i) { switch (i = i || 1, e.calls++, t) { case 4: e.triangles += i * (A / 3); break; case 1: e.lines += i * (A / 2); break; case 3: e.lines += i * (A - 1); break; case 2: e.lines += i * A; break; case 0: e.points += i * A; break; default: console.error("THREE.WebGLInfo: Unknown draw mode:", t) } } } } function dt(A, e) { return Math.abs(e[1]) - Math.abs(A[1]) } function pt(A) { var e = {}, t = new Float32Array(8); return { update: function (i, o, n, r) { var a = i.morphTargetInfluences, s = void 0 === a ? 0 : a.length, l = e[o.id]; if (void 0 === l) { l = []; for (var c = 0; s > c; c++) l[c] = [c, 0]; e[o.id] = l } var h = n.morphTargets && o.morphAttributes.position, d = n.morphNormals && o.morphAttributes.normal; for (c = 0; s > c; c++) { 0 !== (g = l[c])[1] && (h && o.deleteAttribute("morphTarget" + c), d && o.deleteAttribute("morphNormal" + c)) } for (c = 0; s > c; c++) { (g = l[c])[0] = c, g[1] = a[c] } l.sort(dt); var p = 0; for (c = 0; 8 > c; c++) { var g; if (g = l[c]) { var u = g[0], f = g[1]; if (f) { h && o.setAttribute("morphTarget" + c, h[u]), d && o.setAttribute("morphNormal" + c, d[u]), t[c] = f, p += f; continue } } t[c] = 0 } var m = o.morphTargetsRelative ? 1 : 1 - p; r.getUniforms().setValue(A, "morphTargetBaseInfluence", m), r.getUniforms().setValue(A, "morphTargetInfluences", t) } } } function gt(A, e, t, i) { var o = new WeakMap; return { update: function (A) { var n = i.render.frame, r = A.geometry, a = e.get(A, r); return o.get(a) !== n && (r.isGeometry && a.updateFromObject(A), e.update(a), o.set(a, n)), A.isInstancedMesh && t.update(A.instanceMatrix, 34962), a }, dispose: function () { o = new WeakMap } } } function ut(A, e, t, i, o, n, r, a, s, l) { d.call(this, A = void 0 !== A ? A : [], e = void 0 !== e ? e : 301, t, i, o, n, r = void 0 !== r ? r : 1022, a, s, l), this.flipY = !1 } function ft(A, e, t, i) { d.call(this, null), this.image = { data: A || null, width: e || 1, height: t || 1, depth: i || 1 }, this.magFilter = 1003, this.minFilter = 1003, this.wrapR = 1001, this.generateMipmaps = !1, this.flipY = !1, this.needsUpdate = !0 } function mt(A, e, t, i) { d.call(this, null), this.image = { data: A || null, width: e || 1, height: t || 1, depth: i || 1 }, this.magFilter = 1003, this.minFilter = 1003, this.wrapR = 1001, this.generateMipmaps = !1, this.flipY = !1, this.needsUpdate = !0 } it.physical = { uniforms: Ve([it.standard.uniforms, { clearcoat: { value: 0 }, clearcoatMap: { value: null }, clearcoatRoughness: { value: 0 }, clearcoatRoughnessMap: { value: null }, clearcoatNormalScale: { value: new s(1, 1) }, clearcoatNormalMap: { value: null }, sheen: { value: new LA(0) }, transparency: { value: 0 } }]), vertexShader: tt.meshphysical_vert, fragmentShader: tt.meshphysical_frag }, (ut.prototype = Object.create(d.prototype)).constructor = ut, ut.prototype.isCubeTexture = !0, Object.defineProperty(ut.prototype, "images", { get: function () { return this.image }, set: function (A) { this.image = A } }), (ft.prototype = Object.create(d.prototype)).constructor = ft, ft.prototype.isDataTexture2DArray = !0, (mt.prototype = Object.create(d.prototype)).constructor = mt, mt.prototype.isDataTexture3D = !0; var Ct = new d, yt = new ft, vt = new mt, It = new ut, Et = [], Bt = [], xt = new Float32Array(16), St = new Float32Array(9), wt = new Float32Array(4); function Mt(A, e, t) { var i = A[0]; if (0 >= i || i > 0) return A; var o = e * t, n = Et[o]; if (void 0 === n && (n = new Float32Array(o), Et[o] = n), 0 !== e) { i.toArray(n, 0); for (var r = 1, a = 0; r !== e; ++r) A[r].toArray(n, a += t) } return n } function bt(A, e) { if (A.length !== e.length) return !1; for (var t = 0, i = A.length; i > t; t++) if (A[t] !== e[t]) return !1; return !0 } function Ut(A, e) { for (var t = 0, i = e.length; i > t; t++) A[t] = e[t] } function Ft(A, e) { var t = Bt[e]; void 0 === t && (t = new Int32Array(e), Bt[e] = t); for (var i = 0; i !== e; ++i) t[i] = A.allocateTextureUnit(); return t } function Kt(A, e) { var t = this.cache; t[0] !== e && (A.uniform1f(this.addr, e), t[0] = e) } function Qt(A, e) { var t = this.cache; if (void 0 !== e.x) t[0] === e.x && t[1] === e.y || (A.uniform2f(this.addr, e.x, e.y), t[0] = e.x, t[1] = e.y); else { if (bt(t, e)) return; A.uniform2fv(this.addr, e), Ut(t, e) } } function Rt(A, e) { var t = this.cache; if (void 0 !== e.x) t[0] === e.x && t[1] === e.y && t[2] === e.z || (A.uniform3f(this.addr, e.x, e.y, e.z), t[0] = e.x, t[1] = e.y, t[2] = e.z); else if (void 0 !== e.r) t[0] === e.r && t[1] === e.g && t[2] === e.b || (A.uniform3f(this.addr, e.r, e.g, e.b), t[0] = e.r, t[1] = e.g, t[2] = e.b); else { if (bt(t, e)) return; A.uniform3fv(this.addr, e), Ut(t, e) } } function Tt(A, e) { var t = this.cache; if (void 0 !== e.x) t[0] === e.x && t[1] === e.y && t[2] === e.z && t[3] === e.w || (A.uniform4f(this.addr, e.x, e.y, e.z, e.w), t[0] = e.x, t[1] = e.y, t[2] = e.z, t[3] = e.w); else { if (bt(t, e)) return; A.uniform4fv(this.addr, e), Ut(t, e) } } function kt(A, e) { var t = this.cache, i = e.elements; if (void 0 === i) { if (bt(t, e)) return; A.uniformMatrix2fv(this.addr, !1, e), Ut(t, e) } else { if (bt(t, i)) return; wt.set(i), A.uniformMatrix2fv(this.addr, !1, wt), Ut(t, i) } } function Dt(A, e) { var t = this.cache, i = e.elements; if (void 0 === i) { if (bt(t, e)) return; A.uniformMatrix3fv(this.addr, !1, e), Ut(t, e) } else { if (bt(t, i)) return; St.set(i), A.uniformMatrix3fv(this.addr, !1, St), Ut(t, i) } } function Lt(A, e) { var t = this.cache, i = e.elements; if (void 0 === i) { if (bt(t, e)) return; A.uniformMatrix4fv(this.addr, !1, e), Ut(t, e) } else { if (bt(t, i)) return; xt.set(i), A.uniformMatrix4fv(this.addr, !1, xt), Ut(t, i) } } function Nt(A, e, t) { var i = this.cache, o = t.allocateTextureUnit(); i[0] !== o && (A.uniform1i(this.addr, o), i[0] = o), t.safeSetTexture2D(e || Ct, o) } function Ot(A, e, t) { var i = this.cache, o = t.allocateTextureUnit(); i[0] !== o && (A.uniform1i(this.addr, o), i[0] = o), t.setTexture2DArray(e || yt, o) } function Vt(A, e, t) { var i = this.cache, o = t.allocateTextureUnit(); i[0] !== o && (A.uniform1i(this.addr, o), i[0] = o), t.setTexture3D(e || vt, o) } function Gt(A, e, t) { var i = this.cache, o = t.allocateTextureUnit(); i[0] !== o && (A.uniform1i(this.addr, o), i[0] = o), t.safeSetTextureCube(e || It, o) } function Pt(A, e) { var t = this.cache; t[0] !== e && (A.uniform1i(this.addr, e), t[0] = e) } function qt(A, e) { var t = this.cache; bt(t, e) || (A.uniform2iv(this.addr, e), Ut(t, e)) } function jt(A, e) { var t = this.cache; bt(t, e) || (A.uniform3iv(this.addr, e), Ut(t, e)) } function Ht(A, e) { var t = this.cache; bt(t, e) || (A.uniform4iv(this.addr, e), Ut(t, e)) } function Yt(A, e) { var t = this.cache; t[0] !== e && (A.uniform1ui(this.addr, e), t[0] = e) } function Wt(A, e) { A.uniform1fv(this.addr, e) } function Jt(A, e) { A.uniform1iv(this.addr, e) } function zt(A, e) { A.uniform2iv(this.addr, e) } function Zt(A, e) { A.uniform3iv(this.addr, e) } function Xt(A, e) { A.uniform4iv(this.addr, e) } function _t(A, e) { var t = Mt(e, this.size, 2); A.uniform2fv(this.addr, t) } function $t(A, e) { var t = Mt(e, this.size, 3); A.uniform3fv(this.addr, t) } function Ai(A, e) { var t = Mt(e, this.size, 4); A.uniform4fv(this.addr, t) } function ei(A, e) { var t = Mt(e, this.size, 4); A.uniformMatrix2fv(this.addr, !1, t) } function ti(A, e) { var t = Mt(e, this.size, 9); A.uniformMatrix3fv(this.addr, !1, t) } function ii(A, e) { var t = Mt(e, this.size, 16); A.uniformMatrix4fv(this.addr, !1, t) } function oi(A, e, t) { var i = e.length, o = Ft(t, i); A.uniform1iv(this.addr, o); for (var n = 0; n !== i; ++n) t.safeSetTexture2D(e[n] || Ct, o[n]) } function ni(A, e, t) { var i = e.length, o = Ft(t, i); A.uniform1iv(this.addr, o); for (var n = 0; n !== i; ++n) t.safeSetTextureCube(e[n] || It, o[n]) } function ri(A, e, t) { this.id = A, this.addr = t, this.cache = [], this.setValue = function (A) { switch (A) { case 5126: return Kt; case 35664: return Qt; case 35665: return Rt; case 35666: return Tt; case 35674: return kt; case 35675: return Dt; case 35676: return Lt; case 5124: case 35670: return Pt; case 35667: case 35671: return qt; case 35668: case 35672: return jt; case 35669: case 35673: return Ht; case 5125: return Yt; case 35678: case 36198: case 36298: case 36306: case 35682: return Nt; case 35679: case 36299: case 36307: return Vt; case 35680: case 36300: case 36308: case 36293: return Gt; case 36289: case 36303: case 36311: case 36292: return Ot } }(e.type) } function ai(A, e, t) { this.id = A, this.addr = t, this.cache = [], this.size = e.size, this.setValue = function (A) { switch (A) { case 5126: return Wt; case 35664: return _t; case 35665: return $t; case 35666: return Ai; case 35674: return ei; case 35675: return ti; case 35676: return ii; case 5124: case 35670: return Jt; case 35667: case 35671: return zt; case 35668: case 35672: return Zt; case 35669: case 35673: return Xt; case 35678: case 36198: case 36298: case 36306: case 35682: return oi; case 35680: case 36300: case 36308: case 36293: return ni } }(e.type) } function si(A) { this.id = A, this.seq = [], this.map = {} } ai.prototype.updateCache = function (A) { var e = this.cache; A instanceof Float32Array && e.length !== A.length && (this.cache = new Float32Array(A.length)), Ut(e, A) }, si.prototype.setValue = function (A, e, t) { for (var i = this.seq, o = 0, n = i.length; o !== n; ++o) { var r = i[o]; r.setValue(A, e[r.id], t) } }; var li = /([\w\d_]+)(\])?(\[|\.)?/g; function ci(A, e) { A.seq.push(e), A.map[e.id] = e } function hi(A, e, t) { var i = A.name, o = i.length; for (li.lastIndex = 0;;) { var n = li.exec(i), r = n[1], a = n[3]; if ("]" === n[2] && (r |= 0), void 0 === a || "[" === a && li.lastIndex + 2 === o) { ci(t, void 0 === a ? new ri(r, A, e) : new ai(r, A, e)); break } var s = t.map[r]; void 0 === s && ci(t, s = new si(r)), t = s } } function di(A, e) { this.seq = [], this.map = {}; for (var t = A.getProgramParameter(e, 35718), i = 0; t > i; ++i) { var o = A.getActiveUniform(e, i); hi(o, A.getUniformLocation(e, o.name), this) } } function pi(A, e, t) { var i = A.createShader(e); return A.shaderSource(i, t), A.compileShader(i), i } di.prototype.setValue = function (A, e, t, i) { var o = this.map[e]; void 0 !== o && o.setValue(A, t, i) }, di.prototype.setOptional = function (A, e, t) { var i = e[t]; void 0 !== i && this.setValue(A, t, i) }, di.upload = function (A, e, t, i) { for (var o = 0, n = e.length; o !== n; ++o) { var r = e[o], a = t[r.id]; !1 !== a.needsUpdate && r.setValue(A, a.value, i) } }, di.seqWithValue = function (A, e) { for (var t = [], i = 0, o = A.length; i !== o; ++i) { var n = A[i]; n.id in e && t.push(n) } return t }; var gi = 0; function ui(A) { switch (A) { case 3e3: return ["Linear", "( value )"]; case 3001: return ["sRGB", "( value )"]; case 3002: return ["RGBE", "( value )"]; case 3004: return ["RGBM", "( value, 7.0 )"]; case 3005: return ["RGBM", "( value, 16.0 )"]; case 3006: return ["RGBD", "( value, 256.0 )"]; case 3007: return ["Gamma", "( value, float( GAMMA_FACTOR ) )"]; case 3003: return ["LogLuv", "( value )"]; default: throw new Error("unsupported encoding: " + A) } } function fi(A, e, t) { var i = A.getShaderParameter(e, 35713), o = A.getShaderInfoLog(e).trim(); return i && "" === o ? "" : "THREE.WebGLShader: gl.getShaderInfoLog() " + t + "\n" + o + function (A) { for (var e = A.split("\n"), t = 0; e.length > t; t++) e[t] = t + 1 + ": " + e[t]; return e.join("\n") }(A.getShaderSource(e)) } function mi(A, e) { var t = ui(e); return "vec4 " + A + "( vec4 value ) { return " + t[0] + "ToLinear" + t[1] + "; }" } function Ci(A, e) { var t; switch (e) { case 1: t = "Linear"; break; case 2: t = "Reinhard"; break; case 3: t = "Uncharted2"; break; case 4: t = "OptimizedCineon"; break; case 5: t = "ACESFilmic"; break; default: throw new Error("unsupported toneMapping: " + e) } return "vec3 " + A + "( vec3 color ) { return " + t + "ToneMapping( color ); }" } function yi(A) { return "" !== A } function vi(A, e) { return A.replace(/NUM_DIR_LIGHTS/g, e.numDirLights).replace(/NUM_SPOT_LIGHTS/g, e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g, e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, e.numPointLights).replace(/NUM_HEMI_LIGHTS/g, e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g, e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, e.numPointLightShadows) } function Ii(A, e) { return A.replace(/NUM_CLIPPING_PLANES/g, e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, e.numClippingPlanes - e.numClipIntersection) } var Ei = /^[ \t]*#include +<([\w\d./]+)>/gm; function Bi(A) { return A.replace(Ei, xi) } function xi(A, e) { var t = tt[e]; if (void 0 === t) throw new Error("Can not resolve #include <" + e + ">"); return Bi(t) } var Si = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g, wi = /#pragma unroll_loop_start[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}[\s]+?#pragma unroll_loop_end/g; function Mi(A) { return A.replace(wi, Ui).replace(Si, bi) } function bi(A, e, t, i) { return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."), Ui(A, e, t, i) } function Ui(A, e, t, i) { for (var o = "", n = parseInt(e); n < parseInt(t); n++) o += i.replace(/\[ i \]/g, "[ " + n + " ]").replace(/UNROLLED_LOOP_INDEX/g, n); return o } function Fi(A) { var e = "precision " + A.precision + " float;\nprecision " + A.precision + " int;"; return "highp" === A.precision ? e += "\n#define HIGH_PRECISION" : "mediump" === A.precision ? e += "\n#define MEDIUM_PRECISION" : "lowp" === A.precision && (e += "\n#define LOW_PRECISION"), e } function Ki(A, e, t) { var i, o, n, r, a, s = A.getContext(), l = t.defines, c = t.vertexShader, h = t.fragmentShader, d = function (A) { var e = "SHADOWMAP_TYPE_BASIC"; return 1 === A.shadowMapType ? e = "SHADOWMAP_TYPE_PCF" : 2 === A.shadowMapType ? e = "SHADOWMAP_TYPE_PCF_SOFT" : 3 === A.shadowMapType && (e = "SHADOWMAP_TYPE_VSM"), e }(t), p = function (A) { var e = "ENVMAP_TYPE_CUBE"; if (A.envMap) switch (A.envMapMode) { case 301: case 302: e = "ENVMAP_TYPE_CUBE"; break; case 306: case 307: e = "ENVMAP_TYPE_CUBE_UV"; break; case 303: case 304: e = "ENVMAP_TYPE_EQUIREC"; break; case 305: e = "ENVMAP_TYPE_SPHERE" } return e }(t), g = function (A) { var e = "ENVMAP_MODE_REFLECTION"; if (A.envMap) switch (A.envMapMode) { case 302: case 304: e = "ENVMAP_MODE_REFRACTION" } return e }(t), u = function (A) { var e = "ENVMAP_BLENDING_NONE"; if (A.envMap) switch (A.combine) { case 0: e = "ENVMAP_BLENDING_MULTIPLY"; break; case 1: e = "ENVMAP_BLENDING_MIX"; break; case 2: e = "ENVMAP_BLENDING_ADD" } return e }(t), f = A.gammaFactor > 0 ? A.gammaFactor : 1, m = t.isWebGL2 ? "" : function (A) { return [A.extensionDerivatives || A.envMapCubeUV || A.bumpMap || A.tangentSpaceNormalMap || A.clearcoatNormalMap || A.flatShading || "physical" === A.shaderID ? "#extension GL_OES_standard_derivatives : enable" : "", (A.extensionFragDepth || A.logarithmicDepthBuffer) && A.rendererExtensionFragDepth ? "#extension GL_EXT_frag_depth : enable" : "", A.extensionDrawBuffers && A.rendererExtensionDrawBuffers ? "#extension GL_EXT_draw_buffers : require" : "", (A.extensionShaderTextureLOD || A.envMap) && A.rendererExtensionShaderTextureLod ? "#extension GL_EXT_shader_texture_lod : enable" : ""].filter(yi).join("\n") }(t), C = function (A) { var e = []; for (var t in A) { var i = A[t]; !1 !== i && e.push("#define " + t + " " + i) } return e.join("\n") }(l), y = s.createProgram(); if (t.isRawShaderMaterial ? ((i = [C].filter(yi).join("\n")).length > 0 && (i += "\n"), (o = [m, C].filter(yi).join("\n")).length > 0 && (o += "\n")) : (i = [Fi(t), "#define SHADER_NAME " + t.shaderName, C, t.instancing ? "#define USE_INSTANCING" : "", t.supportsVertexTextures ? "#define VERTEX_TEXTURES" : "", "#define GAMMA_FACTOR " + f, "#define MAX_BONES " + t.maxBones, t.useFog && t.fog ? "#define USE_FOG" : "", t.useFog && t.fogExp2 ? "#define FOG_EXP2" : "", t.map ? "#define USE_MAP" : "", t.envMap ? "#define USE_ENVMAP" : "", t.envMap ? "#define " + g : "", t.lightMap ? "#define USE_LIGHTMAP" : "", t.aoMap ? "#define USE_AOMAP" : "", t.emissiveMap ? "#define USE_EMISSIVEMAP" : "", t.bumpMap ? "#define USE_BUMPMAP" : "", t.normalMap ? "#define USE_NORMALMAP" : "", t.normalMap && t.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", t.normalMap && t.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", t.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", t.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", t.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", t.displacementMap && t.supportsVertexTextures ? "#define USE_DISPLACEMENTMAP" : "", t.specularMap ? "#define USE_SPECULARMAP" : "", t.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", t.metalnessMap ? "#define USE_METALNESSMAP" : "", t.alphaMap ? "#define USE_ALPHAMAP" : "", t.vertexTangents ? "#define USE_TANGENT" : "", t.vertexColors ? "#define USE_COLOR" : "", t.vertexUvs ? "#define USE_UV" : "", t.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", t.flatShading ? "#define FLAT_SHADED" : "", t.skinning ? "#define USE_SKINNING" : "", t.useVertexTexture ? "#define BONE_TEXTURE" : "", t.morphTargets ? "#define USE_MORPHTARGETS" : "", t.morphNormals && !1 === t.flatShading ? "#define USE_MORPHNORMALS" : "", t.doubleSided ? "#define DOUBLE_SIDED" : "", t.flipSided ? "#define FLIP_SIDED" : "", t.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", t.shadowMapEnabled ? "#define " + d : "", t.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "", t.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", t.logarithmicDepthBuffer && t.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", " attribute mat4 instanceMatrix;", "#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(yi).join("\n"), o = [m, Fi(t), "#define SHADER_NAME " + t.shaderName, C, t.alphaTest ? "#define ALPHATEST " + t.alphaTest + (t.alphaTest % 1 ? "" : ".0") : "", "#define GAMMA_FACTOR " + f, t.useFog && t.fog ? "#define USE_FOG" : "", t.useFog && t.fogExp2 ? "#define FOG_EXP2" : "", t.map ? "#define USE_MAP" : "", t.matcap ? "#define USE_MATCAP" : "", t.envMap ? "#define USE_ENVMAP" : "", t.envMap ? "#define " + p : "", t.envMap ? "#define " + g : "", t.envMap ? "#define " + u : "", t.lightMap ? "#define USE_LIGHTMAP" : "", t.aoMap ? "#define USE_AOMAP" : "", t.emissiveMap ? "#define USE_EMISSIVEMAP" : "", t.bumpMap ? "#define USE_BUMPMAP" : "", t.normalMap ? "#define USE_NORMALMAP" : "", t.normalMap && t.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", t.normalMap && t.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", t.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", t.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", t.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", t.specularMap ? "#define USE_SPECULARMAP" : "", t.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", t.metalnessMap ? "#define USE_METALNESSMAP" : "", t.alphaMap ? "#define USE_ALPHAMAP" : "", t.sheen ? "#define USE_SHEEN" : "", t.vertexTangents ? "#define USE_TANGENT" : "", t.vertexColors ? "#define USE_COLOR" : "", t.vertexUvs ? "#define USE_UV" : "", t.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", t.gradientMap ? "#define USE_GRADIENTMAP" : "", t.flatShading ? "#define FLAT_SHADED" : "", t.doubleSided ? "#define DOUBLE_SIDED" : "", t.flipSided ? "#define FLIP_SIDED" : "", t.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", t.shadowMapEnabled ? "#define " + d : "", t.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : "", t.physicallyCorrectLights ? "#define PHYSICALLY_CORRECT_LIGHTS" : "", t.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", t.logarithmicDepthBuffer && t.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", (t.extensionShaderTextureLOD || t.envMap) && t.rendererExtensionShaderTextureLod ? "#define TEXTURE_LOD_EXT" : "", "uniform mat4 viewMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", 0 !== t.toneMapping ? "#define TONE_MAPPING" : "", 0 !== t.toneMapping ? tt.tonemapping_pars_fragment : "", 0 !== t.toneMapping ? Ci("toneMapping", t.toneMapping) : "", t.dithering ? "#define DITHERING" : "", t.outputEncoding || t.mapEncoding || t.matcapEncoding || t.envMapEncoding || t.emissiveMapEncoding || t.lightMapEncoding ? tt.encodings_pars_fragment : "", t.mapEncoding ? mi("mapTexelToLinear", t.mapEncoding) : "", t.matcapEncoding ? mi("matcapTexelToLinear", t.matcapEncoding) : "", t.envMapEncoding ? mi("envMapTexelToLinear", t.envMapEncoding) : "", t.emissiveMapEncoding ? mi("emissiveMapTexelToLinear", t.emissiveMapEncoding) : "", t.lightMapEncoding ? mi("lightMapTexelToLinear", t.lightMapEncoding) : "", t.outputEncoding ? (n = "linearToOutputTexel", r = t.outputEncoding, a = ui(r), "vec4 " + n + "( vec4 value ) { return LinearTo" + a[0] + a[1] + "; }") : "", t.depthPacking ? "#define DEPTH_PACKING " + t.depthPacking : "", "\n"].filter(yi).join("\n")), c = Ii(c = vi(c = Bi(c), t), t), h = Ii(h = vi(h = Bi(h), t), t), c = Mi(c), h = Mi(h), t.isWebGL2 && !t.isRawShaderMaterial) { var v = !1, I = /^\s*#version\s+300\s+es\s*\n/; t.isShaderMaterial && null !== c.match(I) && null !== h.match(I) && (v = !0, c = c.replace(I, ""), h = h.replace(I, "")), i = ["#version 300 es\n", "#define attribute in", "#define varying out", "#define texture2D texture"].join("\n") + "\n" + i, o = ["#version 300 es\n", "#define varying in", v ? "" : "out highp vec4 pc_fragColor;", v ? "" : "#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 E, B, x = o + h, S = pi(s, 35633, i + c), w = pi(s, 35632, x); if (s.attachShader(y, S), s.attachShader(y, w), void 0 !== t.index0AttributeName ? s.bindAttribLocation(y, 0, t.index0AttributeName) : !0 === t.morphTargets && s.bindAttribLocation(y, 0, "position"), s.linkProgram(y), A.debug.checkShaderErrors) { var M = s.getProgramInfoLog(y).trim(), b = s.getShaderInfoLog(S).trim(), U = s.getShaderInfoLog(w).trim(), F = !0, K = !0; if (!1 === s.getProgramParameter(y, 35714)) { F = !1; var Q = fi(s, S, "vertex"), R = fi(s, w, "fragment"); console.error("THREE.WebGLProgram: shader error: ", s.getError(), "35715", s.getProgramParameter(y, 35715), "gl.getProgramInfoLog", M, Q, R) } else "" !== M ? console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()", M) : "" !== b && "" !== U || (K = !1); K && (this.diagnostics = { runnable: F, programLog: M, vertexShader: { log: b, prefix: i }, fragmentShader: { log: U, prefix: o } }) } return s.detachShader(y, S), s.detachShader(y, w), s.deleteShader(S), s.deleteShader(w), this.getUniforms = function () { return void 0 === E && (E = new di(s, y)), E }, this.getAttributes = function () { return void 0 === B && (B = function (A, e) { for (var t = {}, i = A.getProgramParameter(e, 35721), o = 0; i > o; o++) { var n = A.getActiveAttrib(e, o).name; t[n] = A.getAttribLocation(e, n) } return t }(s, y)), B }, this.destroy = function () { s.deleteProgram(y), this.program = void 0 }, this.name = t.shaderName, this.id = gi++, this.cacheKey = e, this.usedTimes = 1, this.program = y, this.vertexShader = S, this.fragmentShader = w, this } function Qi(A, e, t) { var i = [], o = t.isWebGL2, n = t.logarithmicDepthBuffer, r = t.floatVertexTextures, a = t.precision, s = t.maxVertexUniforms, l = t.vertexTextures, c = { 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" }, h = ["precision", "isWebGL2", "supportsVertexTextures", "outputEncoding", "instancing", "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"]; function d(A) { var e; return A ? A.isTexture ? e = A.encoding : A.isWebGLRenderTarget && (console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."), e = A.texture.encoding) : e = 3e3, e } this.getParameters = function (i, h, p, g, u, f, m) { var C = g.fog, y = i.envMap || (i.isMeshStandardMaterial ? g.environment : null), v = c[i.type], I = m.isSkinnedMesh ? function (A) { var e = A.skeleton.bones; if (r) return 1024; var t = Math.floor((s - 20) / 4), i = Math.min(t, e.length); return e.length > i ? (console.warn("THREE.WebGLRenderer: Skeleton has " + e.length + " bones. This GPU supports " + i + "."), 0) : i }(m) : 0; null !== i.precision && (a = t.getMaxPrecision(i.precision)) !== i.precision && console.warn("THREE.WebGLProgram.getParameters:", i.precision, "not supported, using", a, "instead."); var E = function (A, e) { var t; if (e) { var i = it[e]; t = { name: A.type, uniforms: Ge.clone(i.uniforms), vertexShader: i.vertexShader, fragmentShader: i.fragmentShader } } else t = { name: A.type, uniforms: A.uniforms, vertexShader: A.vertexShader, fragmentShader: A.fragmentShader }; return t }(i, v); i.onBeforeCompile(E, A); var B = A.getRenderTarget(); return { isWebGL2: o, shaderID: v, shaderName: E.name, uniforms: E.uniforms, vertexShader: E.vertexShader, fragmentShader: E.fragmentShader, defines: i.defines, isRawShaderMaterial: i.isRawShaderMaterial, isShaderMaterial: i.isShaderMaterial, precision: a, instancing: !0 === m.isInstancedMesh, supportsVertexTextures: l, outputEncoding: null !== B ? d(B.texture) : A.outputEncoding, map: !!i.map, mapEncoding: d(i.map), matcap: !!i.matcap, matcapEncoding: d(i.matcap), envMap: !!y, envMapMode: y && y.mapping, envMapEncoding: d(y), envMapCubeUV: !!y && (306 === y.mapping || 307 === y.mapping), lightMap: !!i.lightMap, lightMapEncoding: d(i.lightMap), aoMap: !!i.aoMap, emissiveMap: !!i.emissiveMap, emissiveMapEncoding: d(i.emissiveMap), bumpMap: !!i.bumpMap, normalMap: !!i.normalMap, objectSpaceNormalMap: 1 === i.normalMapType, tangentSpaceNormalMap: 0 === i.normalMapType, 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, 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), uvsVertexOnly: !(i.map || i.bumpMap || i.normalMap || i.specularMap || i.alphaMap || i.emissiveMap || i.roughnessMap || i.metalnessMap || i.clearcoatNormalMap || !i.displacementMap), fog: !!C, useFog: i.fog, fogExp2: C && C.isFogExp2, flatShading: i.flatShading, sizeAttenuation: i.sizeAttenuation, logarithmicDepthBuffer: n, skinning: i.skinning && I > 0, maxBones: I, useVertexTexture: r, morphTargets: i.morphTargets, morphNormals: i.morphNormals, maxMorphTargets: A.maxMorphTargets, maxMorphNormals: A.maxMorphNormals, numDirLights: h.directional.length, numPointLights: h.point.length, numSpotLights: h.spot.length, numRectAreaLights: h.rectArea.length, numHemiLights: h.hemi.length, numDirLightShadows: h.directionalShadowMap.length, numPointLightShadows: h.pointShadowMap.length, numSpotLightShadows: h.spotShadowMap.length, numClippingPlanes: u, numClipIntersection: f, dithering: i.dithering, shadowMapEnabled: A.shadowMap.enabled && p.length > 0, shadowMapType: A.shadowMap.type, toneMapping: i.toneMapped ? A.toneMapping : 0, physicallyCorrectLights: A.physicallyCorrectLights, premultipliedAlpha: i.premultipliedAlpha, alphaTest: i.alphaTest, doubleSided: 2 === i.side, flipSided: 1 === i.side, 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: o || null !== e.get("EXT_frag_depth"), rendererExtensionDrawBuffers: o || null !== e.get("WEBGL_draw_buffers"), rendererExtensionShaderTextureLod: o || null !== e.get("EXT_shader_texture_lod"), onBeforeCompile: i.onBeforeCompile } }, this.getProgramCacheKey = function (e) { var t = []; if (e.shaderID ? t.push(e.shaderID) : (t.push(e.fragmentShader), t.push(e.vertexShader)), void 0 !== e.defines) for (var i in e.defines) t.push(i), t.push(e.defines[i]); if (void 0 === e.isRawShaderMaterial) { for (var o = 0; h.length > o; o++) t.push(e[h[o]]); t.push(A.outputEncoding), t.push(A.gammaFactor) } return t.push(e.onBeforeCompile.toString()), t.join() }, this.acquireProgram = function (e, t) { for (var o, n = 0, r = i.length; r > n; n++) { var a = i[n]; if (a.cacheKey === t) { ++(o = a).usedTimes; break } } return void 0 === o && (o = new Ki(A, t, e), i.push(o)), o }, this.releaseProgram = function (A) { if (0 == --A.usedTimes) { var e = i.indexOf(A); i[e] = i[i.length - 1], i.pop(), A.destroy() } }, this.programs = i } function Ri() { var A = new WeakMap; return { get: function (e) { var t = A.get(e); return void 0 === t && A.set(e, t = {}), t }, remove: function (e) { A.delete(e) }, update: function (e, t, i) { A.get(e)[t] = i }, dispose: function () { A = new WeakMap } } } function Ti(A, e) { return A.groupOrder !== e.groupOrder ? A.groupOrder - e.groupOrder : A.renderOrder !== e.renderOrder ? A.renderOrder - e.renderOrder : A.program !== e.program ? A.program.id - e.program.id : A.material.id !== e.material.id ? A.material.id - e.material.id : A.z !== e.z ? A.z - e.z : A.id - e.id } function ki(A, e) { return A.groupOrder !== e.groupOrder ? A.groupOrder - e.groupOrder : A.renderOrder !== e.renderOrder ? A.renderOrder - e.renderOrder : A.z !== e.z ? e.z - A.z : A.id - e.id } function Di() { var A = [], e = 0, t = [], i = [], o = { id: -1 }; function n(t, i, n, r, a, s) { var l = A[e]; return void 0 === l ? A[e] = l = { id: t.id, object: t, geometry: i, material: n, program: n.program || o, groupOrder: r, renderOrder: t.renderOrder, z: a, group: s } : (l.id = t.id, l.object = t, l.geometry = i, l.material = n, l.program = n.program || o, l.groupOrder = r, l.renderOrder = t.renderOrder, l.z = a, l.group = s), e++, l } return { opaque: t, transparent: i, init: function () { e = 0, t.length = 0, i.length = 0 }, push: function (A, e, o, r, a, s) { var l = n(A, e, o, r, a, s); (!0 === o.transparent ? i : t).push(l) }, unshift: function (A, e, o, r, a, s) { var l = n(A, e, o, r, a, s); (!0 === o.transparent ? i : t).unshift(l) }, finish: function () { for (var t = e, i = A.length; i > t; t++) { var o = A[t]; if (null === o.id) break; o.id = null, o.object = null, o.geometry = null, o.material = null, o.program = null, o.group = null } }, sort: function (A, e) { t.length > 1 && t.sort(A || Ti), i.length > 1 && i.sort(e || ki) } } } function Li() { var A = new WeakMap; function e(t) { var i = t.target; i.removeEventListener("dispose", e), A.delete(i) } return { get: function (t, i) { var o, n = A.get(t); return void 0 === n ? (o = new Di, A.set(t, new WeakMap), A.get(t).set(i, o), t.addEventListener("dispose", e)) : void 0 === (o = n.get(i)) && (o = new Di, n.set(i, o)), o }, dispose: function () { A = new WeakMap } } } function Ni() { var A = {}; return { get: function (e) { if (void 0 !== A[e.id]) return A[e.id]; var t; switch (e.type) { case "DirectionalLight": t = { direction: new y, color: new LA }; break; case "SpotLight": t = { position: new y, direction: new y, color: new LA, distance: 0, coneCos: 0, penumbraCos: 0, decay: 0 }; break; case "PointLight": t = { position: new y, color: new LA, distance: 0, decay: 0 }; break; case "HemisphereLight": t = { direction: new y, skyColor: new LA, groundColor: new LA }; break; case "RectAreaLight": t = { color: new LA, position: new y, halfWidth: new y, halfHeight: new y } } return A[e.id] = t, t } } } var Oi = 0; function Vi(A, e) { return (e.castShadow ? 1 : 0) - (A.castShadow ? 1 : 0) } function Gi() { for (var A, e = new Ni, t = (A = {}, { get: function (e) { if (void 0 !== A[e.id]) return A[e.id]; var t; switch (e.type) { case "DirectionalLight": case "SpotLight": t = { shadowBias: 0, shadowRadius: 1, shadowMapSize: new s }; break; case "PointLight": t = { shadowBias: 0, shadowRadius: 1, shadowMapSize: new s, shadowCameraNear: 1, shadowCameraFar: 1e3 } } return A[e.id] = t, t } }), 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: [], point: [], pointShadow: [], pointShadowMap: [], pointShadowMatrix: [], hemi: [] }, o = 0; 9 > o; o++) i.probe.push(new y); var n = new y, r = new M, a = new M; return { setup: function (A, o, s) { for (var l = 0, c = 0, h = 0, d = 0; 9 > d; d++) i.probe[d].set(0, 0, 0); var p = 0, g = 0, u = 0, f = 0, m = 0, C = 0, y = 0, v = 0, I = s.matrixWorldInverse; A.sort(Vi), d = 0; for (var E = A.length; E > d; d++) { var B = A[d], x = B.color, S = B.intensity, w = B.distance, M = B.shadow && B.shadow.map ? B.shadow.map.texture : null; if (B.isAmbientLight) l += x.r * S, c += x.g * S, h += x.b * S; else if (B.isLightProbe) for (var b = 0; 9 > b; b++) i.probe[b].addScaledVector(B.sh.coefficients[b], S); else if (B.isDirectionalLight) { if ((K = e.get(B)).color.copy(B.color).multiplyScalar(B.intensity), K.direction.setFromMatrixPosition(B.matrixWorld), n.setFromMatrixPosition(B.target.matrixWorld), K.direction.sub(n), K.direction.transformDirection(I), B.castShadow) { var U = B.shadow; (F = t.get(B)).shadowBias = U.bias, F.shadowRadius = U.radius, F.shadowMapSize = U.mapSize, i.directionalShadow[p] = F, i.directionalShadowMap[p] = M, i.directionalShadowMatrix[p] = B.shadow.matrix, C++ } i.directional[p] = K, p++ } else if (B.isSpotLight) { if ((K = e.get(B)).position.setFromMatrixPosition(B.matrixWorld), K.position.applyMatrix4(I), K.color.copy(x).multiplyScalar(S), K.distance = w, K.direction.setFromMatrixPosition(B.matrixWorld), n.setFromMatrixPosition(B.target.matrixWorld), K.direction.sub(n), K.direction.transformDirection(I), K.coneCos = Math.cos(B.angle), K.penumbraCos = Math.cos(B.angle * (1 - B.penumbra)), K.decay = B.decay, B.castShadow) { U = B.shadow; (F = t.get(B)).shadowBias = U.bias, F.shadowRadius = U.radius, F.shadowMapSize = U.mapSize, i.spotShadow[u] = F, i.spotShadowMap[u] = M, i.spotShadowMatrix[u] = B.shadow.matrix, v++ } i.spot[u] = K, u++ } else if (B.isRectAreaLight) { (K = e.get(B)).color.copy(x).multiplyScalar(S), K.position.setFromMatrixPosition(B.matrixWorld), K.position.applyMatrix4(I), a.identity(), r.copy(B.matrixWorld), r.premultiply(I), a.extractRotation(r), K.halfWidth.set(.5 * B.width, 0, 0), K.halfHeight.set(0, .5 * B.height, 0), K.halfWidth.applyMatrix4(a), K.halfHeight.applyMatrix4(a), i.rectArea[f] = K, f++ } else if (B.isPointLight) { if ((K = e.get(B)).position.setFromMatrixPosition(B.matrixWorld), K.position.applyMatrix4(I), K.color.copy(B.color).multiplyScalar(B.intensity), K.distance = B.distance, K.decay = B.decay, B.castShadow) { var F; U = B.shadow; (F = t.get(B)).shadowBias = U.bias, F.shadowRadius = U.radius, F.shadowMapSize = U.mapSize, F.shadowCameraNear = U.camera.near, F.shadowCameraFar = U.camera.far, i.pointShadow[g] = F, i.pointShadowMap[g] = M, i.pointShadowMatrix[g] = B.shadow.matrix, y++ } i.point[g] = K, g++ } else if (B.isHemisphereLight) { var K; (K = e.get(B)).direction.setFromMatrixPosition(B.matrixWorld), K.direction.transformDirection(I), K.direction.normalize(), K.skyColor.copy(B.color).multiplyScalar(S), K.groundColor.copy(B.groundColor).multiplyScalar(S), i.hemi[m] = K, m++ } } i.ambient[0] = l, i.ambient[1] = c, i.ambient[2] = h; var Q = i.hash; Q.directionalLength === p && Q.pointLength === g && Q.spotLength === u && Q.rectAreaLength === f && Q.hemiLength === m && Q.numDirectionalShadows === C && Q.numPointShadows === y && Q.numSpotShadows === v || (i.directional.length = p, i.spot.length = u, i.rectArea.length = f, i.point.length = g, i.hemi.length = m, i.directionalShadow.length = C, i.directionalShadowMap.length = C, i.pointShadow.length = y, i.pointShadowMap.length = y, i.spotShadow.length = v, i.spotShadowMap.length = v, i.directionalShadowMatrix.length = C, i.pointShadowMatrix.length = y, i.spotShadowMatrix.length = v, Q.directionalLength = p, Q.pointLength = g, Q.spotLength = u, Q.rectAreaLength = f, Q.hemiLength = m, Q.numDirectionalShadows = C, Q.numPointShadows = y, Q.numSpotShadows = v, i.version = Oi++) }, state: i } } function Pi() { var A = new Gi, e = [], t = []; return { init: function () { e.length = 0, t.length = 0 }, state: { lightsArray: e, shadowsArray: t, lights: A }, setupLights: function (i) { A.setup(e, t, i) }, pushLight: function (A) { e.push(A) }, pushShadow: function (A) { t.push(A) } } } function qi() { var A = new WeakMap; function e(t) { var i = t.target; i.removeEventListener("dispose", e), A.delete(i) } return { get: function (t, i) { var o; return !1 === A.has(t) ? (o = new Pi, A.set(t, new WeakMap), A.get(t).set(i, o), t.addEventListener("dispose", e)) : !1 === A.get(t).has(i) ? (o = new Pi, A.get(t).set(i, o)) : o = A.get(t).get(i), o }, dispose: function () { A = new WeakMap } } } function ji(A) { qA.call(this), this.type = "MeshDepthMaterial", this.depthPacking = 3200, 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(A) } function Hi(A) { qA.call(this), this.type = "MeshDistanceMaterial", this.referencePosition = new y, 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(A) } (ji.prototype = Object.create(qA.prototype)).constructor = ji, ji.prototype.isMeshDepthMaterial = !0, ji.prototype.copy = function (A) { return qA.prototype.copy.call(this, A), this.depthPacking = A.depthPacking, this.skinning = A.skinning, this.morphTargets = A.morphTargets, this.map = A.map, this.alphaMap = A.alphaMap, this.displacementMap = A.displacementMap, this.displacementScale = A.displacementScale, this.displacementBias = A.displacementBias, this.wireframe = A.wireframe, this.wireframeLinewidth = A.wireframeLinewidth, this }, (Hi.prototype = Object.create(qA.prototype)).constructor = Hi, Hi.prototype.isMeshDistanceMaterial = !0, Hi.prototype.copy = function (A) { return qA.prototype.copy.call(this, A), this.referencePosition.copy(A.referencePosition), this.nearDistance = A.nearDistance, this.farDistance = A.farDistance, this.skinning = A.skinning, this.morphTargets = A.morphTargets, this.map = A.map, this.alphaMap = A.alphaMap, this.displacementMap = A.displacementMap, this.displacementScale = A.displacementScale, this.displacementBias = A.displacementBias, this }; function Yi(A, e, t) { var i = new Ze, o = new s, n = new s, r = new p, a = [], l = [], c = {}, h = { 0: 1, 1: 0, 2: 2 }, d = new Pe({ defines: { SAMPLE_RATE: 2 / 8, HALF_SAMPLE_RATE: 1 / 8 }, uniforms: { shadow_pass: { value: null }, resolution: { value: new s }, radius: { value: 4 } }, vertexShader: "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}", fragmentShader: "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n float mean = 0.0;\n float squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n for ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n #ifdef HORIZONAL_PASS\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean * HALF_SAMPLE_RATE;\n squared_mean = squared_mean * HALF_SAMPLE_RATE;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}" }), u = d.clone(); u.defines.HORIZONAL_PASS = 1; var f = new he; f.setAttribute("position", new YA(new Float32Array([-1, -1, .5, 3, -1, .5, -1, 3, .5]), 3)); var m = new Ue(f, d), C = this; function y(t, i) { var o = e.update(m); d.uniforms.shadow_pass.value = t.map.texture, d.uniforms.resolution.value = t.mapSize, d.uniforms.radius.value = t.radius, A.setRenderTarget(t.mapPass), A.clear(), A.renderBufferDirect(i, null, o, d, m, null), u.uniforms.shadow_pass.value = t.mapPass.texture, u.uniforms.resolution.value = t.mapSize, u.uniforms.radius.value = t.radius, A.setRenderTarget(t.map), A.clear(), A.renderBufferDirect(i, null, o, u, m, null) } function v(A, e, t) { var i = A << 0 | e << 1 | t << 2, o = a[i]; return void 0 === o && (o = new ji({ depthPacking: 3201, morphTargets: A, skinning: e }), a[i] = o), o } function I(A, e, t) { var i = A << 0 | e << 1 | t << 2, o = l[i]; return void 0 === o && (o = new Hi({ morphTargets: A, skinning: e }), l[i] = o), o } function E(e, t, i, o, n, r) { var a = e.geometry, s = null, l = v, d = e.customDepthMaterial; if (!0 === i.isPointLight && (l = I, d = e.customDistanceMaterial), void 0 === d) { var p = !1; !0 === t.morphTargets && (!0 === a.isBufferGeometry ? p = a.morphAttributes && a.morphAttributes.position && a.morphAttributes.position.length > 0 : !0 === a.isGeometry && (p = a.morphTargets && a.morphTargets.length > 0)); var g = !1; !0 === e.isSkinnedMesh && (!0 === t.skinning ? g = !0 : console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:", e)), s = l(p, g, !0 === e.isInstancedMesh) } else s = d; if (A.localClippingEnabled && !0 === t.clipShadows && 0 !== t.clippingPlanes.length) { var u = s.uuid, f = t.uuid, m = c[u]; void 0 === m && (c[u] = m = {}); var C = m[f]; void 0 === C && (C = s.clone(), m[f] = C), s = C } return s.visible = t.visible, s.wireframe = t.wireframe, s.side = 3 === r ? null !== t.shadowSide ? t.shadowSide : t.side : null !== t.shadowSide ? t.shadowSide : h[t.side], s.clipShadows = t.clipShadows, s.clippingPlanes = t.clippingPlanes, s.clipIntersection = t.clipIntersection, s.wireframeLinewidth = t.wireframeLinewidth, s.linewidth = t.linewidth, !0 === i.isPointLight && !0 === s.isMeshDistanceMaterial && (s.referencePosition.setFromMatrixPosition(i.matrixWorld), s.nearDistance = o, s.farDistance = n), s } function B(t, o, n, r, a) { if (!1 !== t.visible) { if (t.layers.test(o.layers) && (t.isMesh || t.isLine || t.isPoints) && (t.castShadow || t.receiveShadow && 3 === a) && (!t.frustumCulled || i.intersectsObject(t))) { t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse, t.matrixWorld); var s = e.update(t), l = t.material; if (Array.isArray(l)) for (var c = s.groups, h = 0, d = c.length; d > h; h++) { var p = c[h], g = l[p.materialIndex]; if (g && g.visible && g.opacity > .9) { var u = E(t, g, r, n.near, n.far, a); A.renderBufferDirect(n, null, s, u, t, p) } } else if (l.visible && l.opacity > .9) { u = E(t, l, r, n.near, n.far, a); A.renderBufferDirect(n, null, s, u, t, null) } } for (var f = t.children, m = 0, C = f.length; C > m; m++) B(f[m], o, n, r, a) } } this.enabled = !1, this.autoUpdate = !0, this.needsUpdate = !1, this.type = 1, this.render = function (e, a, s) { if (!1 !== C.enabled && (!1 !== C.autoUpdate || !1 !== C.needsUpdate) && 0 !== e.length) { var l = A.getRenderTarget(), c = A.getActiveCubeFace(), h = A.getActiveMipmapLevel(), d = A.state; d.setBlending(0), d.buffers.color.setClear(1, 1, 1, 1), d.buffers.depth.setTest(!0), d.setScissorTest(!1); for (var p = 0, u = e.length; u > p; p++) { var f = e[p], m = f.shadow; if (void 0 !== m) { o.copy(m.mapSize); var v, I = m.getFrameExtents(); if (o.multiply(I), n.copy(m.mapSize), (o.x > t || o.y > t) && (console.warn("THREE.WebGLShadowMap:", f, "has shadow exceeding max texture size, reducing"), o.x > t && (n.x = Math.floor(t / I.x), o.x = n.x * I.x, m.mapSize.x = n.x), o.y > t && (n.y = Math.floor(t / I.y), o.y = n.y * I.y, m.mapSize.y = n.y)), null === m.map && !m.isPointLightShadow && 3 === this.type) m.map = new g(o.x, o.y, v = { minFilter: 1006, magFilter: 1006, format: 1023 }), m.map.texture.name = f.name + ".shadowMap", m.mapPass = new g(o.x, o.y, v), m.camera.updateProjectionMatrix(); if (null === m.map) m.map = new g(o.x, o.y, v = { minFilter: 1003, magFilter: 1003, format: 1023 }), m.map.texture.name = f.name + ".shadowMap", m.camera.updateProjectionMatrix(); A.setRenderTarget(m.map), A.clear(); for (var E = m.getViewportCount(), x = 0; E > x; x++) { var S = m.getViewport(x); r.set(n.x * S.x, n.y * S.y, n.x * S.z, n.y * S.w), d.viewport(r), m.updateMatrices(f, x), i = m.getFrustum(), B(a, s, m.camera, f, this.type) } m.isPointLightShadow || 3 !== this.type || y(m, s) } else console.warn("THREE.WebGLShadowMap:", f, "has no shadow.") } C.needsUpdate = !1, A.setRenderTarget(l, c, h) } } } function Wi(A, e, t) { var i = t.isWebGL2; var o = new function () { var e = !1, t = new p, i = null, o = new p(0, 0, 0, 0); return { setMask: function (t) { i === t || e || (A.colorMask(t, t, t, t), i = t) }, setLocked: function (A) { e = A }, setClear: function (e, i, n, r, a) { !0 === a && (e *= r, i *= r, n *= r), t.set(e, i, n, r), !1 === o.equals(t) && (A.clearColor(e, i, n, r), o.copy(t)) }, reset: function () { e = !1, i = null, o.set(-1, 0, 0, 0) } } }, n = new function () { var e = !1, t = null, i = null, o = null; return { setTest: function (A) { A ? O(2929) : V(2929) }, setMask: function (i) { t === i || e || (A.depthMask(i), t = i) }, setFunc: function (e) { if (i !== e) { if (e) switch (e) { case 0: A.depthFunc(512); break; case 1: A.depthFunc(519); break; case 2: A.depthFunc(513); break; case 3: A.depthFunc(515); break; case 4: A.depthFunc(514); break; case 5: A.depthFunc(518); break; case 6: A.depthFunc(516); break; case 7: A.depthFunc(517); break; default: A.depthFunc(515) } else A.depthFunc(515); i = e } }, setLocked: function (A) { e = A }, setClear: function (e) { o !== e && (A.clearDepth(e), o = e) }, reset: function () { e = !1, t = null, i = null, o = null } } }, r = new function () { var e = !1, t = null, i = null, o = null, n = null, r = null, a = null, s = null, l = null; return { setTest: function (A) { e || (A ? O(2960) : V(2960)) }, setMask: function (i) { t === i || e || (A.stencilMask(i), t = i) }, setFunc: function (e, t, r) { i === e && o === t && n === r || (A.stencilFunc(e, t, r), i = e, o = t, n = r) }, setOp: function (e, t, i) { r === e && a === t && s === i || (A.stencilOp(e, t, i), r = e, a = t, s = i) }, setLocked: function (A) { e = A }, setClear: function (e) { l !== e && (A.clearStencil(e), l = e) }, reset: function () { e = !1, t = null, i = null, o = null, n = null, r = null, a = null, s = null, l = null } } }, a = A.getParameter(34921), s = new Uint8Array(a), l = new Uint8Array(a), c = new Uint8Array(a), h = {}, d = null, g = null, u = null, f = null, m = null, C = null, y = null, v = null, I = null, E = !1, B = null, x = null, S = null, w = null, M = null, b = A.getParameter(35661), U = !1, F = 0, K = A.getParameter(7938); - 1 !== K.indexOf("WebGL") ? (F = parseFloat(/^WebGL\ ([0-9])/.exec(K)[1]), U = F >= 1) : -1 !== K.indexOf("OpenGL ES") && (F = parseFloat(/^OpenGL\ ES\ ([0-9])/.exec(K)[1]), U = F >= 2); var Q = null, R = {}, T = new p, k = new p; function D(e, t, i) { var o = new Uint8Array(4), n = A.createTexture(); A.bindTexture(e, n), A.texParameteri(e, 10241, 9728), A.texParameteri(e, 10240, 9728); for (var r = 0; i > r; r++) A.texImage2D(t + r, 0, 6408, 1, 1, 0, 6408, 5121, o); return n } var L = {}; function N(t, o) { (s[t] = 1, 0 === l[t] && (A.enableVertexAttribArray(t), l[t] = 1), c[t] !== o) && ((i ? A : e.get("ANGLE_instanced_arrays"))[i ? "vertexAttribDivisor" : "vertexAttribDivisorANGLE"](t, o), c[t] = o) } function O(e) { !0 !== h[e] && (A.enable(e), h[e] = !0) } function V(e) { !1 !== h[e] && (A.disable(e), h[e] = !1) } L[3553] = D(3553, 3553, 1), L[34067] = D(34067, 34069, 6), o.setClear(0, 0, 0, 1), n.setClear(1), r.setClear(0), O(2929), n.setFunc(3), H(!1), Y(1), O(2884), j(0); var G = { 100: 32774, 101: 32778, 102: 32779 }; if (i) G[103] = 32775, G[104] = 32776; else { var P = e.get("EXT_blend_minmax"); null !== P && (G[103] = P.MIN_EXT, G[104] = P.MAX_EXT) } var q = { 200: 0, 201: 1, 202: 768, 204: 770, 210: 776, 208: 774, 206: 772, 203: 769, 205: 771, 209: 775, 207: 773 }; function j(e, t, i, o, n, r, a, s) { if (0 !== e) { if (g || (O(3042), g = !0), 5 === e) n = n || t, r = r || i, a = a || o, t === f && n === y || (A.blendEquationSeparate(G[t], G[n]), f = t, y = n), i === m && o === C && r === v && a === I || (A.blendFuncSeparate(q[i], q[o], q[r], q[a]), m = i, C = o, v = r, I = a), u = e, E = null; else if (e !== u || s !== E) { if (100 === f && 100 === y || (A.blendEquation(32774), f = 100, y = 100), s) switch (e) { case 1: A.blendFuncSeparate(1, 771, 1, 771); break; case 2: A.blendFunc(1, 1); break; case 3: A.blendFuncSeparate(0, 0, 769, 771); break; case 4: A.blendFuncSeparate(0, 768, 0, 770); break; default: console.error("THREE.WebGLState: Invalid blending: ", e) } else switch (e) { case 1: A.blendFuncSeparate(770, 771, 1, 771); break; case 2: A.blendFunc(770, 1); break; case 3: A.blendFunc(0, 769); break; case 4: A.blendFunc(0, 768); break; default: console.error("THREE.WebGLState: Invalid blending: ", e) } m = null, C = null, v = null, I = null, u = e, E = s } } else g && (V(3042), g = !1) } function H(e) { B !== e && (A.frontFace(e ? 2304 : 2305), B = e) } function Y(e) { 0 !== e ? (O(2884), e !== x && A.cullFace(1 === e ? 1029 : 2 === e ? 1028 : 1032)) : V(2884), x = e } function W(e, t, i) { e ? (O(32823), w === t && M === i || (A.polygonOffset(t, i), w = t, M = i)) : V(32823) } function J(e) { void 0 === e && (e = 33984 + b - 1), Q !== e && (A.activeTexture(e), Q = e) } return { buffers: { color: o, depth: n, stencil: r }, initAttributes: function () { for (var A = 0, e = s.length; e > A; A++) s[A] = 0 }, enableAttribute: function (A) { N(A, 0) }, enableAttributeAndDivisor: N, disableUnusedAttributes: function () { for (var e = 0, t = l.length; e !== t; ++e) l[e] !== s[e] && (A.disableVertexAttribArray(e), l[e] = 0) }, enable: O, disable: V, useProgram: function (e) { return d !== e && (A.useProgram(e), d = e, !0) }, setBlending: j, setMaterial: function (A, e) { 2 === A.side ? V(2884) : O(2884); var t = 1 === A.side; e && (t = !t), H(t), 1 === A.blending && !1 === A.transparent ? j(0) : j(A.blending, A.blendEquation, A.blendSrc, A.blendDst, A.blendEquationAlpha, A.blendSrcAlpha, A.blendDstAlpha, A.premultipliedAlpha), n.setFunc(A.depthFunc), n.setTest(A.depthTest), n.setMask(A.depthWrite), o.setMask(A.colorWrite); var i = A.stencilWrite; r.setTest(i), i && (r.setMask(A.stencilWriteMask), r.setFunc(A.stencilFunc, A.stencilRef, A.stencilFuncMask), r.setOp(A.stencilFail, A.stencilZFail, A.stencilZPass)), W(A.polygonOffset, A.polygonOffsetFactor, A.polygonOffsetUnits) }, setFlipSided: H, setCullFace: Y, setLineWidth: function (e) { e !== S && (U && A.lineWidth(e), S = e) }, setPolygonOffset: W, setScissorTest: function (A) { A ? O(3089) : V(3089) }, activeTexture: J, bindTexture: function (e, t) { null === Q && J(); var i = R[Q]; void 0 === i && (R[Q] = i = { type: void 0, texture: void 0 }), i.type === e && i.texture === t || (A.bindTexture(e, t || L[e]), i.type = e, i.texture = t) }, unbindTexture: function () { var e = R[Q]; void 0 !== e && void 0 !== e.type && (A.bindTexture(e.type, null), e.type = void 0, e.texture = void 0) }, compressedTexImage2D: function () { try { A.compressedTexImage2D.apply(A, arguments) } catch (A) { console.error("THREE.WebGLState:", A) } }, texImage2D: function () { try { A.texImage2D.apply(A, arguments) } catch (A) { console.error("THREE.WebGLState:", A) } }, texImage3D: function () { try { A.texImage3D.apply(A, arguments) } catch (A) { console.error("THREE.WebGLState:", A) } }, scissor: function (e) { !1 === T.equals(e) && (A.scissor(e.x, e.y, e.z, e.w), T.copy(e)) }, viewport: function (e) { !1 === k.equals(e) && (A.viewport(e.x, e.y, e.z, e.w), k.copy(e)) }, reset: function () { for (var e = 0; l.length > e; e++) 1 === l[e] && (A.disableVertexAttribArray(e), l[e] = 0); h = {}, Q = null, R = {}, d = null, u = null, B = null, x = null, o.reset(), n.reset(), r.reset() } } } function Ji(A, e, t, i, o, n, r) { var s, l = o.isWebGL2, c = o.maxTextures, h = o.maxCubemapSize, d = o.maxTextureSize, p = o.maxSamples, g = new WeakMap, u = !1; try { u = "undefined" != typeof OffscreenCanvas && null !== new OffscreenCanvas(1, 1).getContext("2d") } catch (A) {} function f(A, e) { return u ? new OffscreenCanvas(A, e) : document.createElementNS("http://www.w3.org/1999/xhtml", "canvas") } function m(A, e, t, i) { var o = 1; if ((A.width > i || A.height > i) && (o = i / Math.max(A.width, A.height)), 1 > o || !0 === e) { if ("undefined" != typeof HTMLImageElement && A instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && A instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && A instanceof ImageBitmap) { var n = e ? a.floorPowerOfTwo : Math.floor, r = n(o * A.width), l = n(o * A.height); void 0 === s && (s = f(r, l)); var c = t ? f(r, l) : s; return c.width = r, c.height = l, c.getContext("2d").drawImage(A, 0, 0, r, l), console.warn("THREE.WebGLRenderer: Texture has been resized from (" + A.width + "x" + A.height + ") to (" + r + "x" + l + ")."), c } return "data" in A && console.warn("THREE.WebGLRenderer: Image in DataTexture is too big (" + A.width + "x" + A.height + ")."), A } return A } function C(A) { return a.isPowerOfTwo(A.width) && a.isPowerOfTwo(A.height) } function y(A, e) { return A.generateMipmaps && e && 1003 !== A.minFilter && 1006 !== A.minFilter } function v(e, t, o, n) { A.generateMipmap(e), i.get(t).__maxMipLevel = Math.log(Math.max(o, n)) * Math.LOG2E } function I(t, i, o) { if (!1 === l) return i; if (null !== t) { if (void 0 !== A[t]) return A[t]; console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + t + "'") } var n = i; return 6403 === i && (5126 === o && (n = 33326), 5131 === o && (n = 33325), 5121 === o && (n = 33321)), 6407 === i && (5126 === o && (n = 34837), 5131 === o && (n = 34843), 5121 === o && (n = 32849)), 6408 === i && (5126 === o && (n = 34836), 5131 === o && (n = 34842), 5121 === o && (n = 32856)), 33325 !== n && 33326 !== n && 34842 !== n && 34836 !== n || e.get("EXT_color_buffer_float"), n } function E(A) { return 1003 === A || 1004 === A || 1005 === A ? 9728 : 9729 } function B(e) { var t = e.target; t.removeEventListener("dispose", B), function (e) { var t = i.get(e); if (void 0 === t.__webglInit) return; A.deleteTexture(t.__webglTexture), i.remove(e) }(t), t.isVideoTexture && g.delete(t), r.memory.textures-- } function x(e) { var t = e.target; t.removeEventListener("dispose", x), function (e) { var t = i.get(e), o = i.get(e.texture); if (!e) return; void 0 !== o.__webglTexture && A.deleteTexture(o.__webglTexture); e.depthTexture && e.depthTexture.dispose(); if (e.isWebGLCubeRenderTarget) for (var n = 0; 6 > n; n++) A.deleteFramebuffer(t.__webglFramebuffer[n]), t.__webglDepthbuffer && A.deleteRenderbuffer(t.__webglDepthbuffer[n]); else A.deleteFramebuffer(t.__webglFramebuffer), t.__webglDepthbuffer && A.deleteRenderbuffer(t.__webglDepthbuffer), t.__webglMultisampledFramebuffer && A.deleteFramebuffer(t.__webglMultisampledFramebuffer), t.__webglColorRenderbuffer && A.deleteRenderbuffer(t.__webglColorRenderbuffer), t.__webglDepthRenderbuffer && A.deleteRenderbuffer(t.__webglDepthRenderbuffer); i.remove(e.texture), i.remove(e) }(t), r.memory.textures-- } var S = 0; function w(A, e) { var o = i.get(A); if (A.isVideoTexture && function (A) { var e = r.render.frame; g.get(A) !== e && (g.set(A, e), A.update()) }(A), A.version > 0 && o.__version !== A.version) { var n = A.image; if (void 0 === n) console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined"); else { if (!1 !== n.complete) return void R(o, A, e); console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete") } } t.activeTexture(33984 + e), t.bindTexture(3553, o.__webglTexture) } function M(e, o) { if (6 === e.image.length) { var r = i.get(e); if (e.version > 0 && r.__version !== e.version) { Q(r, e), t.activeTexture(33984 + o), t.bindTexture(34067, r.__webglTexture), A.pixelStorei(37440, e.flipY); for (var a = e && (e.isCompressedTexture || e.image[0].isCompressedTexture), s = e.image[0] && e.image[0].isDataTexture, c = [], d = 0; 6 > d; d++) c[d] = a || s ? s ? e.image[d].image : e.image[d] : m(e.image[d], !1, !0, h); var p, g = c[0], u = C(g) || l, f = n.convert(e.format), E = n.convert(e.type), B = I(e.internalFormat, f, E); if (K(34067, e, u), a) { for (d = 0; 6 > d; d++) { p = c[d].mipmaps; for (var x = 0; p.length > x; x++) { var S = p[x]; 1023 !== e.format && 1022 !== e.format ? null !== f ? t.compressedTexImage2D(34069 + d, x, B, S.width, S.height, 0, S.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()") : t.texImage2D(34069 + d, x, B, S.width, S.height, 0, f, E, S.data) } } r.__maxMipLevel = p.length - 1 } else { p = e.mipmaps; for (d = 0; 6 > d; d++) if (s) { t.texImage2D(34069 + d, 0, B, c[d].width, c[d].height, 0, f, E, c[d].data); for (x = 0; p.length > x; x++) { var w = (S = p[x]).image[d].image; t.texImage2D(34069 + d, x + 1, B, w.width, w.height, 0, f, E, w.data) } } else { t.texImage2D(34069 + d, 0, B, f, E, c[d]); for (x = 0; p.length > x; x++) { t.texImage2D(34069 + d, x + 1, B, f, E, (S = p[x]).image[d]) } } r.__maxMipLevel = p.length } y(e, u) && v(34067, e, g.width, g.height), r.__version = e.version, e.onUpdate && e.onUpdate(e) } else t.activeTexture(33984 + o), t.bindTexture(34067, r.__webglTexture) } } function b(A, e) { t.activeTexture(33984 + e), t.bindTexture(34067, i.get(A).__webglTexture) } var U = { 1e3: 10497, 1001: 33071, 1002: 33648 }, F = { 1003: 9728, 1004: 9984, 1005: 9986, 1006: 9729, 1007: 9985, 1008: 9987 }; function K(t, n, r) { r ? (A.texParameteri(t, 10242, U[n.wrapS]), A.texParameteri(t, 10243, U[n.wrapT]), 32879 !== t && 35866 !== t || A.texParameteri(t, 32882, U[n.wrapR]), A.texParameteri(t, 10240, F[n.magFilter]), A.texParameteri(t, 10241, F[n.minFilter])) : (A.texParameteri(t, 10242, 33071), A.texParameteri(t, 10243, 33071), 32879 !== t && 35866 !== t || A.texParameteri(t, 32882, 33071), 1001 === n.wrapS && 1001 === n.wrapT || console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."), A.texParameteri(t, 10240, E(n.magFilter)), A.texParameteri(t, 10241, E(n.minFilter)), 1003 !== n.minFilter && 1006 !== n.minFilter && console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")); var a = e.get("EXT_texture_filter_anisotropic"); if (a) { if (1015 === n.type && null === e.get("OES_texture_float_linear")) return; if (1016 === n.type && null === (l || e.get("OES_texture_half_float_linear"))) return; (n.anisotropy > 1 || i.get(n).__currentAnisotropy) && (A.texParameterf(t, a.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(n.anisotropy, o.getMaxAnisotropy())), i.get(n).__currentAnisotropy = n.anisotropy) } } function Q(e, t) { void 0 === e.__webglInit && (e.__webglInit = !0, t.addEventListener("dispose", B), e.__webglTexture = A.createTexture(), r.memory.textures++) } function R(e, i, o) { var r = 3553; i.isDataTexture2DArray && (r = 35866), i.isDataTexture3D && (r = 32879), Q(e, i), t.activeTexture(33984 + o), t.bindTexture(r, e.__webglTexture), A.pixelStorei(37440, i.flipY), A.pixelStorei(37441, i.premultiplyAlpha), A.pixelStorei(3317, i.unpackAlignment); var a = function (A) { return !l && (1001 !== A.wrapS || 1001 !== A.wrapT || 1003 !== A.minFilter && 1006 !== A.minFilter) }(i) && !1 === C(i.image), s = m(i.image, a, !1, d), c = C(s) || l, h = n.convert(i.format), p = n.convert(i.type), g = I(i.internalFormat, h, p); K(r, i, c); var u, f = i.mipmaps; if (i.isDepthTexture) g = 6402, l ? g = 1015 === i.type ? 36012 : 1014 === i.type ? 33190 : 1020 === i.type ? 35056 : 33189 : 1015 === i.type && console.error("WebGLRenderer: Floating point depth texture requires WebGL2."), 1026 === i.format && 6402 === g && 1012 !== i.type && 1014 !== i.type && (console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."), i.type = 1012, p = n.convert(i.type)), 1027 === i.format && 6402 === g && (g = 34041, 1020 !== i.type && (console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."), i.type = 1020, p = n.convert(i.type))), t.texImage2D(3553, 0, g, s.width, s.height, 0, h, p, null); else if (i.isDataTexture) if (f.length > 0 && c) { for (var E = 0, B = f.length; B > E; E++) t.texImage2D(3553, E, g, (u = f[E]).width, u.height, 0, h, p, u.data); i.generateMipmaps = !1, e.__maxMipLevel = f.length - 1 } else t.texImage2D(3553, 0, g, s.width, s.height, 0, h, p, s.data), e.__maxMipLevel = 0; else if (i.isCompressedTexture) { for (E = 0, B = f.length; B > E; E++) u = f[E], 1023 !== i.format && 1022 !== i.format ? null !== h ? t.compressedTexImage2D(3553, E, g, u.width, u.height, 0, u.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()") : t.texImage2D(3553, E, g, u.width, u.height, 0, h, p, u.data); e.__maxMipLevel = f.length - 1 } else if (i.isDataTexture2DArray) t.texImage3D(35866, 0, g, s.width, s.height, s.depth, 0, h, p, s.data), e.__maxMipLevel = 0; else if (i.isDataTexture3D) t.texImage3D(32879, 0, g, s.width, s.height, s.depth, 0, h, p, s.data), e.__maxMipLevel = 0; else if (f.length > 0 && c) { for (E = 0, B = f.length; B > E; E++) t.texImage2D(3553, E, g, h, p, u = f[E]); i.generateMipmaps = !1, e.__maxMipLevel = f.length - 1 } else t.texImage2D(3553, 0, g, h, p, s), e.__maxMipLevel = 0; y(i, c) && v(r, i, s.width, s.height), e.__version = i.version, i.onUpdate && i.onUpdate(i) } function T(e, o, r, a) { var s = n.convert(o.texture.format), l = n.convert(o.texture.type), c = I(o.texture.internalFormat, s, l); t.texImage2D(a, 0, c, o.width, o.height, 0, s, l, null), A.bindFramebuffer(36160, e), A.framebufferTexture2D(36160, r, a, i.get(o.texture).__webglTexture, 0), A.bindFramebuffer(36160, null) } function k(e, t, i) { if (A.bindRenderbuffer(36161, e), t.depthBuffer && !t.stencilBuffer) { var o = 33189; if (i) { var r = t.depthTexture; r && r.isDepthTexture && (1015 === r.type ? o = 36012 : 1014 === r.type && (o = 33190)); var a = L(t); A.renderbufferStorageMultisample(36161, a, o, t.width, t.height) } else A.renderbufferStorage(36161, o, t.width, t.height); A.framebufferRenderbuffer(36160, 36096, 36161, e) } else if (t.depthBuffer && t.stencilBuffer) { if (i) { a = L(t); A.renderbufferStorageMultisample(36161, a, 35056, t.width, t.height) } else A.renderbufferStorage(36161, 34041, t.width, t.height); A.framebufferRenderbuffer(36160, 33306, 36161, e) } else { var s = n.convert(t.texture.format), l = n.convert(t.texture.type); o = I(t.texture.internalFormat, s, l); if (i) { a = L(t); A.renderbufferStorageMultisample(36161, a, o, t.width, t.height) } else A.renderbufferStorage(36161, o, t.width, t.height) } A.bindRenderbuffer(36161, null) } function D(e) { var t = i.get(e), o = !0 === e.isWebGLCubeRenderTarget; if (e.depthTexture) { if (o) throw new Error("target.depthTexture not supported in Cube render targets"); ! function (e, t) { if (t && t.isWebGLCubeRenderTarget) throw new Error("Depth Texture with cube render targets is not supported"); if (A.bindFramebuffer(36160, e), !t.depthTexture || !t.depthTexture.isDepthTexture) throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture"); i.get(t.depthTexture).__webglTexture && t.depthTexture.image.width === t.width && t.depthTexture.image.height === t.height || (t.depthTexture.image.width = t.width, t.depthTexture.image.height = t.height, t.depthTexture.needsUpdate = !0), w(t.depthTexture, 0); var o = i.get(t.depthTexture).__webglTexture; if (1026 === t.depthTexture.format) A.framebufferTexture2D(36160, 36096, 3553, o, 0); else { if (1027 !== t.depthTexture.format) throw new Error("Unknown depthTexture format"); A.framebufferTexture2D(36160, 33306, 3553, o, 0) } }(t.__webglFramebuffer, e) } else if (o) { t.__webglDepthbuffer = []; for (var n = 0; 6 > n; n++) A.bindFramebuffer(36160, t.__webglFramebuffer[n]), t.__webglDepthbuffer[n] = A.createRenderbuffer(), k(t.__webglDepthbuffer[n], e, !1) } else A.bindFramebuffer(36160, t.__webglFramebuffer), t.__webglDepthbuffer = A.createRenderbuffer(), k(t.__webglDepthbuffer, e, !1); A.bindFramebuffer(36160, null) } function L(A) { return l && A.isWebGLMultisampleRenderTarget ? Math.min(p, A.samples) : 0 } var N = !1, O = !1; this.allocateTextureUnit = function () { var A = S; return c > A || console.warn("THREE.WebGLTextures: Trying to use " + A + " texture units while this GPU supports only " + c), S += 1, A }, this.resetTextureUnits = function () { S = 0 }, this.setTexture2D = w, this.setTexture2DArray = function (A, e) { var o = i.get(A); A.version > 0 && o.__version !== A.version ? R(o, A, e) : (t.activeTexture(33984 + e), t.bindTexture(35866, o.__webglTexture)) }, this.setTexture3D = function (A, e) { var o = i.get(A); A.version > 0 && o.__version !== A.version ? R(o, A, e) : (t.activeTexture(33984 + e), t.bindTexture(32879, o.__webglTexture)) }, this.setTextureCube = M, this.setTextureCubeDynamic = b, this.setupRenderTarget = function (e) { var o = i.get(e), a = i.get(e.texture); e.addEventListener("dispose", x), a.__webglTexture = A.createTexture(), r.memory.textures++; var s = !0 === e.isWebGLCubeRenderTarget, c = !0 === e.isWebGLMultisampleRenderTarget, h = C(e) || l; if (!l || 1022 !== e.texture.format || 1015 !== e.texture.type && 1016 !== e.texture.type || (e.texture.format = 1023, console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")), s) { o.__webglFramebuffer = []; for (var d = 0; 6 > d; d++) o.__webglFramebuffer[d] = A.createFramebuffer() } else if (o.__webglFramebuffer = A.createFramebuffer(), c) if (l) { o.__webglMultisampledFramebuffer = A.createFramebuffer(), o.__webglColorRenderbuffer = A.createRenderbuffer(), A.bindRenderbuffer(36161, o.__webglColorRenderbuffer); var p = n.convert(e.texture.format), g = n.convert(e.texture.type), u = I(e.texture.internalFormat, p, g), f = L(e); A.renderbufferStorageMultisample(36161, f, u, e.width, e.height), A.bindFramebuffer(36160, o.__webglMultisampledFramebuffer), A.framebufferRenderbuffer(36160, 36064, 36161, o.__webglColorRenderbuffer), A.bindRenderbuffer(36161, null), e.depthBuffer && (o.__webglDepthRenderbuffer = A.createRenderbuffer(), k(o.__webglDepthRenderbuffer, e, !0)), A.bindFramebuffer(36160, null) } else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2."); if (s) { t.bindTexture(34067, a.__webglTexture), K(34067, e.texture, h); for (d = 0; 6 > d; d++) T(o.__webglFramebuffer[d], e, 36064, 34069 + d); y(e.texture, h) && v(34067, e.texture, e.width, e.height), t.bindTexture(34067, null) } else t.bindTexture(3553, a.__webglTexture), K(3553, e.texture, h), T(o.__webglFramebuffer, e, 36064, 3553), y(e.texture, h) && v(3553, e.texture, e.width, e.height), t.bindTexture(3553, null); e.depthBuffer && D(e) }, this.updateRenderTargetMipmap = function (A) { var e = A.texture; if (y(e, C(A) || l)) { var o = A.isWebGLCubeRenderTarget ? 34067 : 3553, n = i.get(e).__webglTexture; t.bindTexture(o, n), v(o, e, A.width, A.height), t.bindTexture(o, null) } }, this.updateMultisampleRenderTarget = function (e) { if (e.isWebGLMultisampleRenderTarget) if (l) { var t = i.get(e); A.bindFramebuffer(36008, t.__webglMultisampledFramebuffer), A.bindFramebuffer(36009, t.__webglFramebuffer); var o = e.width, n = e.height, r = 16384; e.depthBuffer && (r |= 256), e.stencilBuffer && (r |= 1024), A.blitFramebuffer(0, 0, o, n, 0, 0, o, n, r, 9728), A.bindFramebuffer(36160, t.__webglMultisampledFramebuffer) } else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.") }, this.safeSetTexture2D = function (A, e) { A && A.isWebGLRenderTarget && (!1 === N && (console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."), N = !0), A = A.texture), w(A, e) }, this.safeSetTextureCube = function (A, e) { A && A.isWebGLCubeRenderTarget && (!1 === O && (console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."), O = !0), A = A.texture), A && A.isCubeTexture || Array.isArray(A.image) && 6 === A.image.length ? M(A, e) : b(A, e) } } function zi(A, e, t) { var i = t.isWebGL2; return { convert: function (A) { var t; if (1009 === A) return 5121; if (1017 === A) return 32819; if (1018 === A) return 32820; if (1019 === A) return 33635; if (1010 === A) return 5120; if (1011 === A) return 5122; if (1012 === A) return 5123; if (1013 === A) return 5124; if (1014 === A) return 5125; if (1015 === A) return 5126; if (1016 === A) return i ? 5131 : null !== (t = e.get("OES_texture_half_float")) ? t.HALF_FLOAT_OES : null; if (1021 === A) return 6406; if (1022 === A) return 6407; if (1023 === A) return 6408; if (1024 === A) return 6409; if (1025 === A) return 6410; if (1026 === A) return 6402; if (1027 === A) return 34041; if (1028 === A) return 6403; if (1029 === A) return 36244; if (1030 === A) return 33319; if (1031 === A) return 33320; if (1032 === A) return 36248; if (1033 === A) return 36249; if (33776 === A || 33777 === A || 33778 === A || 33779 === A) { if (null === (t = e.get("WEBGL_compressed_texture_s3tc"))) return null; if (33776 === A) return t.COMPRESSED_RGB_S3TC_DXT1_EXT; if (33777 === A) return t.COMPRESSED_RGBA_S3TC_DXT1_EXT; if (33778 === A) return t.COMPRESSED_RGBA_S3TC_DXT3_EXT; if (33779 === A) return t.COMPRESSED_RGBA_S3TC_DXT5_EXT } if (35840 === A || 35841 === A || 35842 === A || 35843 === A) { if (null === (t = e.get("WEBGL_compressed_texture_pvrtc"))) return null; if (35840 === A) return t.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; if (35841 === A) return t.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; if (35842 === A) return t.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; if (35843 === A) return t.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG } if (36196 === A) return null !== (t = e.get("WEBGL_compressed_texture_etc1")) ? t.COMPRESSED_RGB_ETC1_WEBGL : null; if ((37492 === A || 37496 === A) && null !== (t = e.get("WEBGL_compressed_texture_etc"))) { if (37492 === A) return t.COMPRESSED_RGB8_ETC2; if (37496 === A) return t.COMPRESSED_RGBA8_ETC2_EAC } return 37808 === A || 37809 === A || 37810 === A || 37811 === A || 37812 === A || 37813 === A || 37814 === A || 37815 === A || 37816 === A || 37817 === A || 37818 === A || 37819 === A || 37820 === A || 37821 === A || 37840 === A || 37841 === A || 37842 === A || 37843 === A || 37844 === A || 37845 === A || 37846 === A || 37847 === A || 37848 === A || 37849 === A || 37850 === A || 37851 === A || 37852 === A || 37853 === A ? null !== (t = e.get("WEBGL_compressed_texture_astc")) ? A : null : 36492 === A ? null !== (t = e.get("EXT_texture_compression_bptc")) ? A : null : 1020 === A ? i ? 34042 : null !== (t = e.get("WEBGL_depth_texture")) ? t.UNSIGNED_INT_24_8_WEBGL : null : void 0 } } } function Zi(A) { je.call(this), this.cameras = A || [] } function Xi() { H.call(this), this.type = "Group" } function _i(A, e) { var t = this, i = null, o = 1, n = null, r = "local-floor", a = null, s = [], l = new Map, c = new je; c.layers.enable(1), c.viewport = new p; var h = new je; h.layers.enable(2), h.viewport = new p; var d = new Zi([c, h]); d.layers.enable(1), d.layers.enable(2); var g = null, u = null; function f(A) { var e = l.get(A.inputSource); e && (e.targetRay && e.targetRay.dispatchEvent({ type: A.type }), e.grip && e.grip.dispatchEvent({ type: A.type })) } function m() { l.forEach((function (A, e) { A.targetRay && (A.targetRay.dispatchEvent({ type: "disconnected", data: e }), A.targetRay.visible = !1), A.grip && (A.grip.dispatchEvent({ type: "disconnected", data: e }), A.grip.visible = !1) })), l.clear(), A.setFramebuffer(null), A.setRenderTarget(A.getRenderTarget()), S.stop(), t.isPresenting = !1, t.dispatchEvent({ type: "sessionend" }) } function C(A) { n = A, S.setContext(i), S.start(), t.isPresenting = !0, t.dispatchEvent({ type: "sessionstart" }) } function v(A) { for (var e = i.inputSources, t = 0; s.length > t; t++) l.set(e[t], s[t]); for (t = 0; A.removed.length > t; t++) { (n = l.get(o = A.removed[t])) && (n.targetRay && n.targetRay.dispatchEvent({ type: "disconnected", data: o }), n.grip && n.grip.dispatchEvent({ type: "disconnected", data: o }), l.delete(o)) } for (t = 0; A.added.length > t; t++) { var o, n; (n = l.get(o = A.added[t])) && (n.targetRay && n.targetRay.dispatchEvent({ type: "connected", data: o }), n.grip && n.grip.dispatchEvent({ type: "connected", data: o })) } } this.enabled = !1, this.isPresenting = !1, this.getController = function (A) { var e = s[A]; return void 0 === e && (s[A] = e = {}), void 0 === e.targetRay && (e.targetRay = new Xi, e.targetRay.matrixAutoUpdate = !1, e.targetRay.visible = !1), e.targetRay }, this.getControllerGrip = function (A) { var e = s[A]; return void 0 === e && (s[A] = e = {}), void 0 === e.grip && (e.grip = new Xi, e.grip.matrixAutoUpdate = !1, e.grip.visible = !1), e.grip }, this.setFramebufferScaleFactor = function (A) { o = A, 1 == t.isPresenting && console.warn("WebXRManager: Cannot change framebuffer scale while presenting VR content") }, this.setReferenceSpaceType = function (A) { r = A }, this.getReferenceSpace = function () { return n }, this.getSession = function () { return i }, this.setSession = function (A) { if (null !== (i = A)) { i.addEventListener("select", f), i.addEventListener("selectstart", f), i.addEventListener("selectend", f), i.addEventListener("squeeze", f), i.addEventListener("squeezestart", f), i.addEventListener("squeezeend", f), i.addEventListener("end", m); var t = e.getContextAttributes(), n = new XRWebGLLayer(i, e, { antialias: t.antialias, alpha: t.alpha, depth: t.depth, stencil: t.stencil, framebufferScaleFactor: o }); i.updateRenderState({ baseLayer: n }), i.requestReferenceSpace(r).then(C), i.addEventListener("inputsourceschange", v) } }; var I = new y, E = new y; function B(A, e) { null === e ? A.matrixWorld.copy(A.matrix) : A.matrixWorld.multiplyMatrices(e.matrixWorld, A.matrix), A.matrixWorldInverse.getInverse(A.matrixWorld) } this.getCamera = function (A) { d.near = h.near = c.near = A.near, d.far = h.far = c.far = A.far, g === d.near && u === d.far || (i.updateRenderState({ depthNear: d.near, depthFar: d.far }), g = d.near, u = d.far); var e = A.parent, t = d.cameras; B(d, e); for (var o = 0; t.length > o; o++) B(t[o], e); A.matrixWorld.copy(d.matrixWorld); for (var n = A.children, r = (o = 0, n.length); r > o; o++) n[o].updateMatrixWorld(!0); return function (A, e, t) { I.setFromMatrixPosition(e.matrixWorld), E.setFromMatrixPosition(t.matrixWorld); var i = I.distanceTo(E), o = e.projectionMatrix.elements, n = t.projectionMatrix.elements, r = o[14] / (o[10] - 1), a = o[14] / (o[10] + 1), s = (o[9] + 1) / o[5], l = (o[9] - 1) / o[5], c = (o[8] - 1) / o[0], h = (n[8] + 1) / n[0], d = r * c, p = r * h, g = i / (-c + h), u = g * -c; e.matrixWorld.decompose(A.position, A.quaternion, A.scale), A.translateX(u), A.translateZ(g), A.matrixWorld.compose(A.position, A.quaternion, A.scale), A.matrixWorldInverse.getInverse(A.matrixWorld); var f = r + g, m = a + g; A.projectionMatrix.makePerspective(d - u, p + (i - u), s * a / m * f, l * a / m * f, f, m) }(d, c, h), d }; var x = null; var S = new _e; S.setAnimationLoop((function (e, t) { if (null !== (a = t.getViewerPose(n))) { var o = a.views, r = i.renderState.baseLayer; A.setFramebuffer(r.framebuffer); for (var l = 0; o.length > l; l++) { var c = o[l], h = r.getViewport(c), p = d.cameras[l]; p.matrix.fromArray(c.transform.matrix), p.projectionMatrix.fromArray(c.projectionMatrix), p.viewport.set(h.x, h.y, h.width, h.height), 0 === l && d.matrix.copy(p.matrix) } } var g = i.inputSources; for (l = 0; s.length > l; l++) { var u = s[l], f = g[l], m = null, C = null; f && (u.targetRay && null !== (m = t.getPose(f.targetRaySpace, n)) && (u.targetRay.matrix.fromArray(m.transform.matrix), u.targetRay.matrix.decompose(u.targetRay.position, u.targetRay.rotation, u.targetRay.scale)), u.grip && f.gripSpace && null !== (C = t.getPose(f.gripSpace, n)) && (u.grip.matrix.fromArray(C.transform.matrix), u.grip.matrix.decompose(u.grip.position, u.grip.rotation, u.grip.scale))), u.targetRay && (u.targetRay.visible = null !== m), u.grip && (u.grip.visible = null !== C) } x && x(e, t) })), this.setAnimationLoop = function (A) { x = A }, this.dispose = function () {} } function $i(A) { var e = void 0 !== (A = A || {}).canvas ? A.canvas : document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"), t = void 0 !== A.context ? A.context : null, i = void 0 !== A.alpha && A.alpha, o = void 0 === A.depth || A.depth, n = void 0 === A.stencil || A.stencil, r = void 0 !== A.antialias && A.antialias, l = void 0 === A.premultipliedAlpha || A.premultipliedAlpha, c = void 0 !== A.preserveDrawingBuffer && A.preserveDrawingBuffer, h = void 0 !== A.powerPreference ? A.powerPreference : "default", d = void 0 !== A.failIfMajorPerformanceCaveat && A.failIfMajorPerformanceCaveat, g = null, u = null; this.domElement = e, this.debug = { checkShaderErrors: !0 }, this.autoClear = !0, this.autoClearColor = !0, this.autoClearDepth = !0, this.autoClearStencil = !0, this.sortObjects = !0, this.clippingPlanes = [], this.localClippingEnabled = !1, this.gammaFactor = 2, this.outputEncoding = 3e3, this.physicallyCorrectLights = !1, this.toneMapping = 1, this.toneMappingExposure = 1, this.toneMappingWhitePoint = 1, this.maxMorphTargets = 8, this.maxMorphNormals = 4; var f, m, C, v, I, E, B, x, S, w, b, U, F, K, Q, R, T, k, D = this, L = !1, N = null, O = 0, V = 0, G = null, P = null, q = -1, j = { geometry: null, program: null, wireframe: !1 }, H = null, W = null, J = new p, z = new p, Z = null, X = e.width, _ = e.height, $ = 1, AA = null, eA = null, tA = new p(0, 0, X, _), iA = new p(0, 0, X, _), oA = !1, nA = new Ze, rA = new at, aA = !1, sA = !1, lA = new M, cA = new y; function hA() { return null === G ? $ : 1 } try { var dA = { alpha: i, depth: o, stencil: n, antialias: r, premultipliedAlpha: l, preserveDrawingBuffer: c, powerPreference: h, failIfMajorPerformanceCaveat: d, xrCompatible: !0 }; if (e.addEventListener("webglcontextlost", fA, !1), e.addEventListener("webglcontextrestored", mA, !1), null === (f = t || e.getContext("webgl", dA) || e.getContext("experimental-webgl", dA))) throw null !== e.getContext("webgl") ? new Error("Error creating WebGL context with your selected attributes.") : new Error("Error creating WebGL context."); void 0 === f.getShaderPrecisionFormat && (f.getShaderPrecisionFormat = function () { return { rangeMin: 1, rangeMax: 1, precision: 1 } }) } catch (A) { throw console.error("THREE.WebGLRenderer: " + A.message), A } function pA() { m = new st(f), !1 === (C = new rt(f, m, A)).isWebGL2 && (m.get("WEBGL_depth_texture"), m.get("OES_texture_float"), m.get("OES_texture_half_float"), m.get("OES_texture_half_float_linear"), m.get("OES_standard_derivatives"), m.get("OES_element_index_uint"), m.get("ANGLE_instanced_arrays")), m.get("OES_texture_float_linear"), k = new zi(f, m, C), (v = new Wi(f, m, C)).scissor(z.copy(iA).multiplyScalar($).floor()), v.viewport(J.copy(tA).multiplyScalar($).floor()), I = new ht(f), E = new Ri, B = new Ji(f, m, v, E, C, k, I), x = new $e(f, C), S = new lt(f, x, I), w = new gt(f, S, x, I), Q = new pt(f), b = new Qi(D, m, C), U = new Li, F = new qi, K = new ot(D, v, w, l), R = new nt(f, m, I, C), T = new ct(f, m, I, C), I.programs = b.programs, D.capabilities = C, D.extensions = m, D.properties = E, D.renderLists = U, D.state = v, D.info = I } pA(); var gA = new _i(D, f); this.xr = gA; var uA = new Yi(D, w, C.maxTextureSize); function fA(A) { A.preventDefault(), console.log("THREE.WebGLRenderer: Context Lost."), L = !0 } function mA() { console.log("THREE.WebGLRenderer: Context Restored."), L = !1, pA() } function CA(A) { var e = A.target; e.removeEventListener("dispose", CA), function (A) { yA(A), E.remove(A) }(e) } function yA(A) { var e = E.get(A).program; A.program = void 0, void 0 !== e && b.releaseProgram(e) } this.shadowMap = uA, this.getContext = function () { return f }, this.getContextAttributes = function () { return f.getContextAttributes() }, this.forceContextLoss = function () { var A = m.get("WEBGL_lose_context"); A && A.loseContext() }, this.forceContextRestore = function () { var A = m.get("WEBGL_lose_context"); A && A.restoreContext() }, this.getPixelRatio = function () { return $ }, this.setPixelRatio = function (A) { void 0 !== A && ($ = A, this.setSize(X, _, !1)) }, this.getSize = function (A) { return void 0 === A && (console.warn("WebGLRenderer: .getsize() now requires a Vector2 as an argument"), A = new s), A.set(X, _) }, this.setSize = function (A, t, i) { gA.isPresenting ? console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.") : (X = A, _ = t, e.width = Math.floor(A * $), e.height = Math.floor(t * $), !1 !== i && (e.style.width = A + "px", e.style.height = t + "px"), this.setViewport(0, 0, A, t)) }, this.getDrawingBufferSize = function (A) { return void 0 === A && (console.warn("WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument"), A = new s), A.set(X * $, _ * $).floor() }, this.setDrawingBufferSize = function (A, t, i) { X = A, _ = t, $ = i, e.width = Math.floor(A * i), e.height = Math.floor(t * i), this.setViewport(0, 0, A, t) }, this.getCurrentViewport = function (A) { return void 0 === A && (console.warn("WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument"), A = new p), A.copy(J) }, this.getViewport = function (A) { return A.copy(tA) }, this.setViewport = function (A, e, t, i) { A.isVector4 ? tA.set(A.x, A.y, A.z, A.w) : tA.set(A, e, t, i), v.viewport(J.copy(tA).multiplyScalar($).floor()) }, this.getScissor = function (A) { return A.copy(iA) }, this.setScissor = function (A, e, t, i) { A.isVector4 ? iA.set(A.x, A.y, A.z, A.w) : iA.set(A, e, t, i), v.scissor(z.copy(iA).multiplyScalar($).floor()) }, this.getScissorTest = function () { return oA }, this.setScissorTest = function (A) { v.setScissorTest(oA = A) }, this.setOpaqueSort = function (A) { AA = A }, this.setTransparentSort = function (A) { eA = A }, this.getClearColor = function () { return K.getClearColor() }, this.setClearColor = function () { K.setClearColor.apply(K, arguments) }, this.getClearAlpha = function () { return K.getClearAlpha() }, this.setClearAlpha = function () { K.setClearAlpha.apply(K, arguments) }, this.clear = function (A, e, t) { var i = 0; (void 0 === A || A) && (i |= 16384), (void 0 === e || e) && (i |= 256), (void 0 === t || t) && (i |= 1024), f.clear(i) }, this.clearColor = function () { this.clear(!0, !1, !1) }, this.clearDepth = function () { this.clear(!1, !0, !1) }, this.clearStencil = function () { this.clear(!1, !1, !0) }, this.dispose = function () { e.removeEventListener("webglcontextlost", fA, !1), e.removeEventListener("webglcontextrestored", mA, !1), U.dispose(), F.dispose(), E.dispose(), w.dispose(), gA.dispose(), EA.stop(), this.forceContextLoss() }, this.renderBufferImmediate = function (A, e) { v.initAttributes(); var t = E.get(A); A.hasPositions && !t.position && (t.position = f.createBuffer()), A.hasNormals && !t.normal && (t.normal = f.createBuffer()), A.hasUvs && !t.uv && (t.uv = f.createBuffer()), A.hasColors && !t.color && (t.color = f.createBuffer()); var i = e.getAttributes(); A.hasPositions && (f.bindBuffer(34962, t.position), f.bufferData(34962, A.positionArray, 35048), v.enableAttribute(i.position), f.vertexAttribPointer(i.position, 3, 5126, !1, 0, 0)), A.hasNormals && (f.bindBuffer(34962, t.normal), f.bufferData(34962, A.normalArray, 35048), v.enableAttribute(i.normal), f.vertexAttribPointer(i.normal, 3, 5126, !1, 0, 0)), A.hasUvs && (f.bindBuffer(34962, t.uv), f.bufferData(34962, A.uvArray, 35048), v.enableAttribute(i.uv), f.vertexAttribPointer(i.uv, 2, 5126, !1, 0, 0)), A.hasColors && (f.bindBuffer(34962, t.color), f.bufferData(34962, A.colorArray, 35048), v.enableAttribute(i.color), f.vertexAttribPointer(i.color, 3, 5126, !1, 0, 0)), v.disableUnusedAttributes(), f.drawArrays(4, 0, A.count), A.count = 0 }; var vA = new Y; this.renderBufferDirect = function (A, e, t, i, o, n) { null === e && (e = vA); var r = o.isMesh && 0 > o.matrixWorld.determinant(), a = MA(A, e, i, o); v.setMaterial(i, r); var s = !1; j.geometry === t.id && j.program === a.id && j.wireframe === (!0 === i.wireframe) || (j.geometry = t.id, j.program = a.id, j.wireframe = !0 === i.wireframe, s = !0), (i.morphTargets || i.morphNormals) && (Q.update(o, t, i, a), s = !0); var l = t.index, c = t.attributes.position; if (null === l) { if (void 0 === c || 0 === c.count) return } else if (0 === l.count) return; var h, d = 1; !0 === i.wireframe && (l = S.getWireframeAttribute(t), d = 2); var p = R; null !== l && (h = x.get(l), (p = T).setIndex(h)), s && (! function (A, e, t, i) { if (!1 === C.isWebGL2 && (A.isInstancedMesh || e.isInstancedBufferGeometry) && null === m.get("ANGLE_instanced_arrays")) return; v.initAttributes(); var o = e.attributes, n = i.getAttributes(), r = t.defaultAttributeValues; for (var a in n) { var s = n[a]; if (s >= 0) { var l = o[a]; if (void 0 !== l) { var c = l.normalized, h = l.itemSize; if (void 0 === (E = x.get(l))) continue; var d = E.buffer, p = E.type, g = E.bytesPerElement; if (l.isInterleavedBufferAttribute) { var u = l.data, y = u.stride, I = l.offset; u && u.isInstancedInterleavedBuffer ? (v.enableAttributeAndDivisor(s, u.meshPerAttribute), void 0 === e.maxInstancedCount && (e.maxInstancedCount = u.meshPerAttribute * u.count)) : v.enableAttribute(s), f.bindBuffer(34962, d), f.vertexAttribPointer(s, h, p, c, y * g, I * g) } else l.isInstancedBufferAttribute ? (v.enableAttributeAndDivisor(s, l.meshPerAttribute), void 0 === e.maxInstancedCount && (e.maxInstancedCount = l.meshPerAttribute * l.count)) : v.enableAttribute(s), f.bindBuffer(34962, d), f.vertexAttribPointer(s, h, p, c, 0, 0) } else if ("instanceMatrix" === a) { var E; if (void 0 === (E = x.get(A.instanceMatrix))) continue; d = E.buffer, p = E.type; v.enableAttributeAndDivisor(s + 0, 1), v.enableAttributeAndDivisor(s + 1, 1), v.enableAttributeAndDivisor(s + 2, 1), v.enableAttributeAndDivisor(s + 3, 1), f.bindBuffer(34962, d), f.vertexAttribPointer(s + 0, 4, p, !1, 64, 0), f.vertexAttribPointer(s + 1, 4, p, !1, 64, 16), f.vertexAttribPointer(s + 2, 4, p, !1, 64, 32), f.vertexAttribPointer(s + 3, 4, p, !1, 64, 48) } else if (void 0 !== r) { var B = r[a]; if (void 0 !== B) switch (B.length) { case 2: f.vertexAttrib2fv(s, B); break; case 3: f.vertexAttrib3fv(s, B); break; case 4: f.vertexAttrib4fv(s, B); break; default: f.vertexAttrib1fv(s, B) } } } } v.disableUnusedAttributes() }(o, t, i, a), null !== l && f.bindBuffer(34963, h.buffer)); var g = null !== l ? l.count : c.count, u = t.drawRange.start * d, y = t.drawRange.count * d, I = null !== n ? n.start * d : 0, E = null !== n ? n.count * d : 1 / 0, B = Math.max(u, I), w = Math.min(g, u + y, I + E) - 1, M = Math.max(0, w - B + 1); if (0 !== M) { if (o.isMesh) !0 === i.wireframe ? (v.setLineWidth(i.wireframeLinewidth * hA()), p.setMode(1)) : p.setMode(4); else if (o.isLine) { var b = i.linewidth; void 0 === b && (b = 1), v.setLineWidth(b * hA()), p.setMode(o.isLineSegments ? 1 : o.isLineLoop ? 2 : 3) } else o.isPoints ? p.setMode(0) : o.isSprite && p.setMode(4); o.isInstancedMesh ? p.renderInstances(t, B, M, o.count) : t.isInstancedBufferGeometry ? p.renderInstances(t, B, M, t.maxInstancedCount) : p.render(B, M) } }, this.compile = function (A, e) { (u = F.get(A, e)).init(), A.traverse((function (A) { A.isLight && (u.pushLight(A), A.castShadow && u.pushShadow(A)) })), u.setupLights(e); var t = {}; A.traverse((function (e) { if (e.material) if (Array.isArray(e.material)) for (var i = 0; e.material.length > i; i++) e.material[i].uuid in t == !1 && (wA(e.material[i], A, e), t[e.material[i].uuid] = !0); else e.material.uuid in t == !1 && (wA(e.material, A, e), t[e.material.uuid] = !0) })) }; var IA = null; var EA = new _e; function BA(A, e, t, i) { if (!1 !== A.visible) { if (A.layers.test(e.layers)) if (A.isGroup) t = A.renderOrder; else if (A.isLOD) !0 === A.autoUpdate && A.update(e); else if (A.isLight) u.pushLight(A), A.castShadow && u.pushShadow(A); else if (A.isSprite) { if (!A.frustumCulled || nA.intersectsSprite(A)) { i && cA.setFromMatrixPosition(A.matrixWorld).applyMatrix4(lA); var o = w.update(A); (n = A.material).visible && g.push(A, o, n, t, cA.z, null) } } else if (A.isImmediateRenderObject) i && cA.setFromMatrixPosition(A.matrixWorld).applyMatrix4(lA), g.push(A, null, A.material, t, cA.z, null); else if ((A.isMesh || A.isLine || A.isPoints) && (A.isSkinnedMesh && A.skeleton.frame !== I.render.frame && (A.skeleton.update(), A.skeleton.frame = I.render.frame), !A.frustumCulled || nA.intersectsObject(A))) { i && cA.setFromMatrixPosition(A.matrixWorld).applyMatrix4(lA); o = w.update(A); var n = A.material; if (Array.isArray(n)) for (var r = o.groups, a = 0, s = r.length; s > a; a++) { var l = r[a], c = n[l.materialIndex]; c && c.visible && g.push(A, o, c, t, cA.z, l) } else n.visible && g.push(A, o, n, t, cA.z, null) } var h = A.children; for (a = 0, s = h.length; s > a; a++) BA(h[a], e, t, i) } } function xA(A, e, t, i) { for (var o = 0, n = A.length; n > o; o++) { var r = A[o], a = r.object, s = r.geometry, l = void 0 === i ? r.material : i, c = r.group; if (t.isArrayCamera) { W = t; for (var h = t.cameras, d = 0, p = h.length; p > d; d++) { var g = h[d]; a.layers.test(g.layers) && (v.viewport(J.copy(g.viewport)), u.setupLights(g), SA(a, e, g, s, l, c)) } } else W = null, SA(a, e, t, s, l, c) } } function SA(A, e, t, i, o, n) { if (A.onBeforeRender(D, e, t, i, o, n), u = F.get(e, W || t), A.modelViewMatrix.multiplyMatrices(t.matrixWorldInverse, A.matrixWorld), A.normalMatrix.getNormalMatrix(A.modelViewMatrix), A.isImmediateRenderObject) { var r = MA(t, e, o, A); v.setMaterial(o), j.geometry = null, j.program = null, j.wireframe = !1, function (A, e) { A.render((function (A) { D.renderBufferImmediate(A, e) })) }(A, r) } else D.renderBufferDirect(t, e, i, o, A, n); A.onAfterRender(D, e, t, i, o, n), u = F.get(e, W || t) } function wA(A, e, t) { var i = E.get(A), o = u.state.lights, n = o.state.version, r = b.getParameters(A, o.state, u.state.shadowsArray, e, rA.numPlanes, rA.numIntersection, t), a = b.getProgramCacheKey(r), s = i.program, l = !0; if (void 0 === s) A.addEventListener("dispose", CA); else if (s.cacheKey !== a) yA(A); else if (i.lightsStateVersion !== n) i.lightsStateVersion = n, l = !1; else { if (void 0 !== r.shaderID) return; l = !1 } l && (s = b.acquireProgram(r, a), i.program = s, i.uniforms = r.uniforms, i.environment = A.isMeshStandardMaterial ? e.environment : null, i.outputEncoding = D.outputEncoding, A.program = s); var c = s.getAttributes(); if (A.morphTargets) { A.numSupportedMorphTargets = 0; for (var h = 0; D.maxMorphTargets > h; h++) 0 > c["morphTarget" + h] || A.numSupportedMorphTargets++ } if (A.morphNormals) { A.numSupportedMorphNormals = 0; for (h = 0; D.maxMorphNormals > h; h++) 0 > c["morphNormal" + h] || A.numSupportedMorphNormals++ } var d = i.uniforms; (A.isShaderMaterial || A.isRawShaderMaterial) && !0 !== A.clipping || (i.numClippingPlanes = rA.numPlanes, i.numIntersection = rA.numIntersection, d.clippingPlanes = rA.uniform), i.fog = e.fog, i.needsLights = function (A) { return A.isMeshLambertMaterial || A.isMeshToonMaterial || A.isMeshPhongMaterial || A.isMeshStandardMaterial || A.isShadowMaterial || A.isShaderMaterial && !0 === A.lights }(A), i.lightsStateVersion = n, i.needsLights && (d.ambientLightColor.value = o.state.ambient, d.lightProbe.value = o.state.probe, d.directionalLights.value = o.state.directional, d.directionalLightShadows.value = o.state.directionalShadow, d.spotLights.value = o.state.spot, d.spotLightShadows.value = o.state.spotShadow, d.rectAreaLights.value = o.state.rectArea, d.pointLights.value = o.state.point, d.pointLightShadows.value = o.state.pointShadow, d.hemisphereLights.value = o.state.hemi, d.directionalShadowMap.value = o.state.directionalShadowMap, d.directionalShadowMatrix.value = o.state.directionalShadowMatrix, d.spotShadowMap.value = o.state.spotShadowMap, d.spotShadowMatrix.value = o.state.spotShadowMatrix, d.pointShadowMap.value = o.state.pointShadowMap, d.pointShadowMatrix.value = o.state.pointShadowMatrix); var p = i.program.getUniforms(), g = di.seqWithValue(p.seq, d); i.uniformsList = g } function MA(A, e, t, i) { B.resetTextureUnits(); var o = e.fog, n = t.isMeshStandardMaterial ? e.environment : null, r = E.get(t), s = u.state.lights; aA && ((sA || A !== H) && rA.setState(t.clippingPlanes, t.clipIntersection, t.clipShadows, A, r, A === H && t.id === q)); t.version === r.__version ? void 0 === r.program || t.fog && r.fog !== o || r.environment !== n || r.needsLights && r.lightsStateVersion !== s.state.version ? wA(t, e, i) : void 0 === r.numClippingPlanes || r.numClippingPlanes === rA.numPlanes && r.numIntersection === rA.numIntersection ? r.outputEncoding !== D.outputEncoding && wA(t, e, i) : wA(t, e, i) : (wA(t, e, i), r.__version = t.version); var l, c, h = !1, d = !1, p = !1, g = r.program, m = g.getUniforms(), y = r.uniforms; if (v.useProgram(g.program) && (h = !0, d = !0, p = !0), t.id !== q && (q = t.id, d = !0), h || H !== A) { if (m.setValue(f, "projectionMatrix", A.projectionMatrix), C.logarithmicDepthBuffer && m.setValue(f, "logDepthBufFC", 2 / (Math.log(A.far + 1) / Math.LN2)), H !== A && (H = A, d = !0, p = !0), t.isShaderMaterial || t.isMeshPhongMaterial || t.isMeshToonMaterial || t.isMeshStandardMaterial || t.envMap) { var I = m.map.cameraPosition; void 0 !== I && I.setValue(f, cA.setFromMatrixPosition(A.matrixWorld)) } (t.isMeshPhongMaterial || t.isMeshToonMaterial || t.isMeshLambertMaterial || t.isMeshBasicMaterial || t.isMeshStandardMaterial || t.isShaderMaterial) && m.setValue(f, "isOrthographic", !0 === A.isOrthographicCamera), (t.isMeshPhongMaterial || t.isMeshToonMaterial || t.isMeshLambertMaterial || t.isMeshBasicMaterial || t.isMeshStandardMaterial || t.isShaderMaterial || t.skinning) && m.setValue(f, "viewMatrix", A.matrixWorldInverse) } if (t.skinning) { m.setOptional(f, i, "bindMatrix"), m.setOptional(f, i, "bindMatrixInverse"); var x = i.skeleton; if (x) if (C.floatVertexTextures) { if (void 0 === x.boneTexture) { var S = Math.sqrt(4 * x.bones.length); S = a.ceilPowerOfTwo(S), S = Math.max(S, 4); var w = new Float32Array(S * S * 4); w.set(x.boneMatrices); var M = new We(w, S, S, 1023, 1015); x.boneMatrices = w, x.boneTexture = M, x.boneTextureSize = S } m.setValue(f, "boneTexture", x.boneTexture, B), m.setValue(f, "boneTextureSize", x.boneTextureSize) } else m.setOptional(f, x, "boneMatrices") } return (d || r.receiveShadow !== i.receiveShadow) && (r.receiveShadow = i.receiveShadow, m.setValue(f, "receiveShadow", i.receiveShadow)), d && (m.setValue(f, "toneMappingExposure", D.toneMappingExposure), m.setValue(f, "toneMappingWhitePoint", D.toneMappingWhitePoint), r.needsLights && ((l = y).ambientLightColor.needsUpdate = c = p, l.lightProbe.needsUpdate = c, l.directionalLights.needsUpdate = c, l.directionalLightShadows.needsUpdate = c, l.pointLights.needsUpdate = c, l.pointLightShadows.needsUpdate = c, l.spotLights.needsUpdate = c, l.spotLightShadows.needsUpdate = c, l.rectAreaLights.needsUpdate = c, l.hemisphereLights.needsUpdate = c), o && t.fog && function (A, e) { A.fogColor.value.copy(e.color), e.isFog ? (A.fogNear.value = e.near, A.fogFar.value = e.far) : e.isFogExp2 && (A.fogDensity.value = e.density) }(y, o), t.isMeshBasicMaterial ? bA(y, t) : t.isMeshLambertMaterial ? (bA(y, t), function (A, e) { e.emissiveMap && (A.emissiveMap.value = e.emissiveMap) }(y, t)) : t.isMeshToonMaterial ? (bA(y, t), function (A, e) { A.specular.value.copy(e.specular), A.shininess.value = Math.max(e.shininess, 1e-4), e.gradientMap && (A.gradientMap.value = e.gradientMap); e.emissiveMap && (A.emissiveMap.value = e.emissiveMap); e.bumpMap && (A.bumpMap.value = e.bumpMap, A.bumpScale.value = e.bumpScale, 1 === e.side && (A.bumpScale.value *= -1)); e.normalMap && (A.normalMap.value = e.normalMap, A.normalScale.value.copy(e.normalScale), 1 === e.side && A.normalScale.value.negate()); e.displacementMap && (A.displacementMap.value = e.displacementMap, A.displacementScale.value = e.displacementScale, A.displacementBias.value = e.displacementBias) }(y, t)) : t.isMeshPhongMaterial ? (bA(y, t), function (A, e) { A.specular.value.copy(e.specular), A.shininess.value = Math.max(e.shininess, 1e-4), e.emissiveMap && (A.emissiveMap.value = e.emissiveMap); e.bumpMap && (A.bumpMap.value = e.bumpMap, A.bumpScale.value = e.bumpScale, 1 === e.side && (A.bumpScale.value *= -1)); e.normalMap && (A.normalMap.value = e.normalMap, A.normalScale.value.copy(e.normalScale), 1 === e.side && A.normalScale.value.negate()); e.displacementMap && (A.displacementMap.value = e.displacementMap, A.displacementScale.value = e.displacementScale, A.displacementBias.value = e.displacementBias) }(y, t)) : t.isMeshStandardMaterial ? (bA(y, t, n), t.isMeshPhysicalMaterial ? function (A, e, t) { UA(A, e, t), A.reflectivity.value = e.reflectivity, A.clearcoat.value = e.clearcoat, A.clearcoatRoughness.value = e.clearcoatRoughness, e.sheen && A.sheen.value.copy(e.sheen); e.clearcoatMap && (A.clearcoatMap.value = e.clearcoatMap); e.clearcoatRoughnessMap && (A.clearcoatRoughnessMap.value = e.clearcoatRoughnessMap); e.clearcoatNormalMap && (A.clearcoatNormalScale.value.copy(e.clearcoatNormalScale), A.clearcoatNormalMap.value = e.clearcoatNormalMap, 1 === e.side && A.clearcoatNormalScale.value.negate()); A.transparency.value = e.transparency }(y, t, n) : UA(y, t, n)) : t.isMeshMatcapMaterial ? (bA(y, t), function (A, e) { e.matcap && (A.matcap.value = e.matcap); e.bumpMap && (A.bumpMap.value = e.bumpMap, A.bumpScale.value = e.bumpScale, 1 === e.side && (A.bumpScale.value *= -1)); e.normalMap && (A.normalMap.value = e.normalMap, A.normalScale.value.copy(e.normalScale), 1 === e.side && A.normalScale.value.negate()); e.displacementMap && (A.displacementMap.value = e.displacementMap, A.displacementScale.value = e.displacementScale, A.displacementBias.value = e.displacementBias) }(y, t)) : t.isMeshDepthMaterial ? (bA(y, t), function (A, e) { e.displacementMap && (A.displacementMap.value = e.displacementMap, A.displacementScale.value = e.displacementScale, A.displacementBias.value = e.displacementBias) }(y, t)) : t.isMeshDistanceMaterial ? (bA(y, t), function (A, e) { e.displacementMap && (A.displacementMap.value = e.displacementMap, A.displacementScale.value = e.displacementScale, A.displacementBias.value = e.displacementBias); A.referencePosition.value.copy(e.referencePosition), A.nearDistance.value = e.nearDistance, A.farDistance.value = e.farDistance }(y, t)) : t.isMeshNormalMaterial ? (bA(y, t), function (A, e) { e.bumpMap && (A.bumpMap.value = e.bumpMap, A.bumpScale.value = e.bumpScale, 1 === e.side && (A.bumpScale.value *= -1)); e.normalMap && (A.normalMap.value = e.normalMap, A.normalScale.value.copy(e.normalScale), 1 === e.side && A.normalScale.value.negate()); e.displacementMap && (A.displacementMap.value = e.displacementMap, A.displacementScale.value = e.displacementScale, A.displacementBias.value = e.displacementBias) }(y, t)) : t.isLineBasicMaterial ? (function (A, e) { A.diffuse.value.copy(e.color), A.opacity.value = e.opacity }(y, t), t.isLineDashedMaterial && function (A, e) { A.dashSize.value = e.dashSize, A.totalSize.value = e.dashSize + e.gapSize, A.scale.value = e.scale }(y, t)) : t.isPointsMaterial ? function (A, e) { A.diffuse.value.copy(e.color), A.opacity.value = e.opacity, A.size.value = e.size * $, A.scale.value = .5 * _, e.map && (A.map.value = e.map); e.alphaMap && (A.alphaMap.value = e.alphaMap); var t; e.map ? t = e.map : e.alphaMap && (t = e.alphaMap); void 0 !== t && (!0 === t.matrixAutoUpdate && t.updateMatrix(), A.uvTransform.value.copy(t.matrix)) }(y, t) : t.isSpriteMaterial ? function (A, e) { A.diffuse.value.copy(e.color), A.opacity.value = e.opacity, A.rotation.value = e.rotation, e.map && (A.map.value = e.map); e.alphaMap && (A.alphaMap.value = e.alphaMap); var t; e.map ? t = e.map : e.alphaMap && (t = e.alphaMap); void 0 !== t && (!0 === t.matrixAutoUpdate && t.updateMatrix(), A.uvTransform.value.copy(t.matrix)) }(y, t) : t.isShadowMaterial && (y.color.value.copy(t.color), y.opacity.value = t.opacity), void 0 !== y.ltc_1 && (y.ltc_1.value = Xe.LTC_1), void 0 !== y.ltc_2 && (y.ltc_2.value = Xe.LTC_2), di.upload(f, r.uniformsList, y, B), t.isShaderMaterial && (t.uniformsNeedUpdate = !1)), t.isShaderMaterial && !0 === t.uniformsNeedUpdate && (di.upload(f, r.uniformsList, y, B), t.uniformsNeedUpdate = !1), t.isSpriteMaterial && m.setValue(f, "center", i.center), m.setValue(f, "modelViewMatrix", i.modelViewMatrix), m.setValue(f, "normalMatrix", i.normalMatrix), m.setValue(f, "modelMatrix", i.matrixWorld), g } function bA(A, e, t) { A.opacity.value = e.opacity, e.color && A.diffuse.value.copy(e.color), e.emissive && A.emissive.value.copy(e.emissive).multiplyScalar(e.emissiveIntensity), e.map && (A.map.value = e.map), e.alphaMap && (A.alphaMap.value = e.alphaMap), e.specularMap && (A.specularMap.value = e.specularMap); var i, o, n = e.envMap || t; n && (A.envMap.value = n, A.flipEnvMap.value = n.isCubeTexture ? -1 : 1, A.reflectivity.value = e.reflectivity, A.refractionRatio.value = e.refractionRatio, A.maxMipLevel.value = E.get(n).__maxMipLevel), e.lightMap && (A.lightMap.value = e.lightMap, A.lightMapIntensity.value = e.lightMapIntensity), e.aoMap && (A.aoMap.value = e.aoMap, A.aoMapIntensity.value = e.aoMapIntensity), e.map ? i = e.map : e.specularMap ? i = e.specularMap : e.displacementMap ? i = e.displacementMap : e.normalMap ? i = e.normalMap : e.bumpMap ? i = e.bumpMap : e.roughnessMap ? i = e.roughnessMap : e.metalnessMap ? i = e.metalnessMap : e.alphaMap ? i = e.alphaMap : e.emissiveMap && (i = e.emissiveMap), void 0 !== i && (i.isWebGLRenderTarget && (i = i.texture), !0 === i.matrixAutoUpdate && i.updateMatrix(), A.uvTransform.value.copy(i.matrix)), e.aoMap ? o = e.aoMap : e.lightMap && (o = e.lightMap), void 0 !== o && (o.isWebGLRenderTarget && (o = o.texture), !0 === o.matrixAutoUpdate && o.updateMatrix(), A.uv2Transform.value.copy(o.matrix)) } function UA(A, e, t) { A.roughness.value = e.roughness, A.metalness.value = e.metalness, e.roughnessMap && (A.roughnessMap.value = e.roughnessMap), e.metalnessMap && (A.metalnessMap.value = e.metalnessMap), e.emissiveMap && (A.emissiveMap.value = e.emissiveMap), e.bumpMap && (A.bumpMap.value = e.bumpMap, A.bumpScale.value = e.bumpScale, 1 === e.side && (A.bumpScale.value *= -1)), e.normalMap && (A.normalMap.value = e.normalMap, A.normalScale.value.copy(e.normalScale), 1 === e.side && A.normalScale.value.negate()), e.displacementMap && (A.displacementMap.value = e.displacementMap, A.displacementScale.value = e.displacementScale, A.displacementBias.value = e.displacementBias), (e.envMap || t) && (A.envMapIntensity.value = e.envMapIntensity) } EA.setAnimationLoop((function (A) { gA.isPresenting || IA && IA(A) })), "undefined" != typeof window && EA.setContext(window), this.setAnimationLoop = function (A) { IA = A, gA.setAnimationLoop(A), EA.start() }, this.render = function (A, e) { var t, i; if (void 0 !== arguments[2] && (console.warn("THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead."), t = arguments[2]), void 0 !== arguments[3] && (console.warn("THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead."), i = arguments[3]), e && e.isCamera) { if (!L) { j.geometry = null, j.program = null, j.wireframe = !1, q = -1, H = null, !0 === A.autoUpdate && A.updateMatrixWorld(), null === e.parent && e.updateMatrixWorld(), gA.enabled && gA.isPresenting && (e = gA.getCamera(e)), (u = F.get(A, e)).init(), A.onBeforeRender(D, A, e, t || G), lA.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), nA.setFromProjectionMatrix(lA), aA = rA.init(this.clippingPlanes, sA = this.localClippingEnabled, e), (g = U.get(A, e)).init(), BA(A, e, 0, D.sortObjects), g.finish(), !0 === D.sortObjects && g.sort(AA, eA), aA && rA.beginShadows(); var o = u.state.shadowsArray; uA.render(o, A, e), u.setupLights(e), aA && rA.endShadows(), this.info.autoReset && this.info.reset(), void 0 !== t && this.setRenderTarget(t), K.render(g, A, e, i); var n = g.opaque, r = g.transparent; if (A.overrideMaterial) { var a = A.overrideMaterial; n.length && xA(n, A, e, a), r.length && xA(r, A, e, a) } else n.length && xA(n, A, e), r.length && xA(r, A, e); A.onAfterRender(D, A, e), null !== G && (B.updateRenderTargetMipmap(G), B.updateMultisampleRenderTarget(G)), v.buffers.depth.setTest(!0), v.buffers.depth.setMask(!0), v.buffers.color.setMask(!0), v.setPolygonOffset(!1), g = null, u = null } } else console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.") }, this.setFramebuffer = function (A) { N !== A && null === G && f.bindFramebuffer(36160, A), N = A }, this.getActiveCubeFace = function () { return O }, this.getActiveMipmapLevel = function () { return V }, this.getRenderTarget = function () { return G }, this.setRenderTarget = function (A, e, t) { G = A, O = e, V = t, A && void 0 === E.get(A).__webglFramebuffer && B.setupRenderTarget(A); var i = N, o = !1; if (A) { var n = E.get(A).__webglFramebuffer; A.isWebGLCubeRenderTarget ? (i = n[e || 0], o = !0) : i = A.isWebGLMultisampleRenderTarget ? E.get(A).__webglMultisampledFramebuffer : n, J.copy(A.viewport), z.copy(A.scissor), Z = A.scissorTest } else J.copy(tA).multiplyScalar($).floor(), z.copy(iA).multiplyScalar($).floor(), Z = oA; if (P !== i && (f.bindFramebuffer(36160, i), P = i), v.viewport(J), v.scissor(z), v.setScissorTest(Z), o) { var r = E.get(A.texture); f.framebufferTexture2D(36160, 36064, 34069 + (e || 0), r.__webglTexture, t || 0) } }, this.readRenderTargetPixels = function (A, e, t, i, o, n, r) { if (A && A.isWebGLRenderTarget) { var a = E.get(A).__webglFramebuffer; if (A.isWebGLCubeRenderTarget && void 0 !== r && (a = a[r]), a) { var s = !1; a !== P && (f.bindFramebuffer(36160, a), s = !0); try { var l = A.texture, c = l.format, h = l.type; if (1023 !== c && k.convert(c) !== f.getParameter(35739)) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."); if (!(1009 === h || k.convert(h) === f.getParameter(35738) || 1015 === h && (C.isWebGL2 || m.get("OES_texture_float") || m.get("WEBGL_color_buffer_float")) || 1016 === h && m.get(C.isWebGL2 ? "EXT_color_buffer_float" : "EXT_color_buffer_half_float"))) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type."); 36053 === f.checkFramebufferStatus(36160) ? 0 > e || e > A.width - i || 0 > t || t > A.height - o || f.readPixels(e, t, i, o, k.convert(c), k.convert(h), n) : console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.") } finally { s && f.bindFramebuffer(36160, P) } } } else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.") }, this.copyFramebufferToTexture = function (A, e, t) { void 0 === t && (t = 0); var i = Math.pow(2, -t), o = Math.floor(e.image.width * i), n = Math.floor(e.image.height * i), r = k.convert(e.format); B.setTexture2D(e, 0), f.copyTexImage2D(3553, t, r, A.x, A.y, o, n, 0), v.unbindTexture() }, this.copyTextureToTexture = function (A, e, t, i) { var o = e.image.width, n = e.image.height, r = k.convert(t.format), a = k.convert(t.type); B.setTexture2D(t, 0), e.isDataTexture ? f.texSubImage2D(3553, i || 0, A.x, A.y, o, n, r, a, e.image.data) : f.texSubImage2D(3553, i || 0, A.x, A.y, r, a, e.image), v.unbindTexture() }, this.initTexture = function (A) { B.setTexture2D(A, 0), v.unbindTexture() }, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { detail: this })) } function Ao(A, e) { this.name = "", this.color = new LA(A), this.density = void 0 !== e ? e : 25e-5 } function eo(A, e, t) { this.name = "", this.color = new LA(A), this.near = void 0 !== e ? e : 1, this.far = void 0 !== t ? t : 1e3 } function to(A, e) { this.array = A, this.stride = e, this.count = void 0 !== A ? A.length / e : 0, this.usage = 35044, this.updateRange = { offset: 0, count: -1 }, this.version = 0 } Zi.prototype = Object.assign(Object.create(je.prototype), { constructor: Zi, isArrayCamera: !0 }), Xi.prototype = Object.assign(Object.create(H.prototype), { constructor: Xi, isGroup: !0 }), Object.assign(_i.prototype, i.prototype), Object.assign(Ao.prototype, { isFogExp2: !0, clone: function () { return new Ao(this.color, this.density) }, toJSON: function () { return { type: "FogExp2", color: this.color.getHex(), density: this.density } } }), Object.assign(eo.prototype, { isFog: !0, clone: function () { return new eo(this.color, this.near, this.far) }, toJSON: function () { return { type: "Fog", color: this.color.getHex(), near: this.near, far: this.far } } }), Object.defineProperty(to.prototype, "needsUpdate", { set: function (A) { !0 === A && this.version++ } }), Object.assign(to.prototype, { isInterleavedBuffer: !0, onUploadCallback: function () {}, setUsage: function (A) { return this.usage = A, this }, copy: function (A) { return this.array = new A.array.constructor(A.array), this.count = A.count, this.stride = A.stride, this.usage = A.usage, this }, copyAt: function (A, e, t) { A *= this.stride, t *= e.stride; for (var i = 0, o = this.stride; o > i; i++) this.array[A + i] = e.array[t + i]; return this }, set: function (A, e) { return void 0 === e && (e = 0), this.array.set(A, e), this }, clone: function () { return (new this.constructor).copy(this) }, onUpload: function (A) { return this.onUploadCallback = A, this } }); var io, oo = new y; function no(A, e, t, i) { this.data = A, this.itemSize = e, this.offset = t, this.normalized = !0 === i } function ro(A) { qA.call(this), this.type = "SpriteMaterial", this.color = new LA(16777215), this.map = null, this.alphaMap = null, this.rotation = 0, this.sizeAttenuation = !0, this.transparent = !0, this.setValues(A) } Object.defineProperties(no.prototype, { count: { get: function () { return this.data.count } }, array: { get: function () { return this.data.array } } }), Object.assign(no.prototype, { isInterleavedBufferAttribute: !0, applyMatrix4: function (A) { for (var e = 0, t = this.data.count; t > e; e++) oo.x = this.getX(e), oo.y = this.getY(e), oo.z = this.getZ(e), oo.applyMatrix4(A), this.setXYZ(e, oo.x, oo.y, oo.z); return this }, setX: function (A, e) { return this.data.array[A * this.data.stride + this.offset] = e, this }, setY: function (A, e) { return this.data.array[A * this.data.stride + this.offset + 1] = e, this }, setZ: function (A, e) { return this.data.array[A * this.data.stride + this.offset + 2] = e, this }, setW: function (A, e) { return this.data.array[A * this.data.stride + this.offset + 3] = e, this }, getX: function (A) { return this.data.array[A * this.data.stride + this.offset] }, getY: function (A) { return this.data.array[A * this.data.stride + this.offset + 1] }, getZ: function (A) { return this.data.array[A * this.data.stride + this.offset + 2] }, getW: function (A) { return this.data.array[A * this.data.stride + this.offset + 3] }, setXY: function (A, e, t) { return this.data.array[(A = A * this.data.stride + this.offset) + 0] = e, this.data.array[A + 1] = t, this }, setXYZ: function (A, e, t, i) { return this.data.array[(A = A * this.data.stride + this.offset) + 0] = e, this.data.array[A + 1] = t, this.data.array[A + 2] = i, this }, setXYZW: function (A, e, t, i, o) { return this.data.array[(A = A * this.data.stride + this.offset) + 0] = e, this.data.array[A + 1] = t, this.data.array[A + 2] = i, this.data.array[A + 3] = o, this } }), (ro.prototype = Object.create(qA.prototype)).constructor = ro, ro.prototype.isSpriteMaterial = !0, ro.prototype.copy = function (A) { return qA.prototype.copy.call(this, A), this.color.copy(A.color), this.map = A.map, this.alphaMap = A.alphaMap, this.rotation = A.rotation, this.sizeAttenuation = A.sizeAttenuation, this }; var ao = new y, so = new y, lo = new y, co = new s, ho = new s, po = new M, go = new y, uo = new y, fo = new y, mo = new s, Co = new s, yo = new s; function vo(A) { if (H.call(this), this.type = "Sprite", void 0 === io) { io = new he; var e = new to(new Float32Array([-.5, -.5, 0, 0, 0, .5, -.5, 0, 1, 0, .5, .5, 0, 1, 1, -.5, .5, 0, 0, 1]), 5); io.setIndex([0, 1, 2, 0, 2, 3]), io.setAttribute("position", new no(e, 3, 0, !1)), io.setAttribute("uv", new no(e, 2, 3, !1)) } this.geometry = io, this.material = void 0 !== A ? A : new ro, this.center = new s(.5, .5) } function Io(A, e, t, i, o, n) { co.subVectors(A, t).addScalar(.5).multiply(i), void 0 !== o ? (ho.x = n * co.x - o * co.y, ho.y = o * co.x + n * co.y) : ho.copy(co), A.copy(e), A.x += ho.x, A.y += ho.y, A.applyMatrix4(po) } vo.prototype = Object.assign(Object.create(H.prototype), { constructor: vo, isSprite: !0, raycast: function (A, e) { null === A.camera && console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'), so.setFromMatrixScale(this.matrixWorld), po.copy(A.camera.matrixWorld), this.modelViewMatrix.multiplyMatrices(A.camera.matrixWorldInverse, this.matrixWorld), lo.setFromMatrixPosition(this.modelViewMatrix), A.camera.isPerspectiveCamera && !1 === this.material.sizeAttenuation && so.multiplyScalar(-lo.z); var t, i, o = this.material.rotation; 0 !== o && (i = Math.cos(o), t = Math.sin(o)); var n = this.center; Io(go.set(-.5, -.5, 0), lo, n, so, t, i), Io(uo.set(.5, -.5, 0), lo, n, so, t, i), Io(fo.set(.5, .5, 0), lo, n, so, t, i), mo.set(0, 0), Co.set(1, 0), yo.set(1, 1); var r = A.ray.intersectTriangle(go, uo, fo, !1, ao); if (null !== r || (Io(uo.set(-.5, .5, 0), lo, n, so, t, i), Co.set(0, 1), null !== (r = A.ray.intersectTriangle(go, fo, uo, !1, ao)))) { var a = A.ray.origin.distanceTo(ao); A.near > a || a > A.far || e.push({ distance: a, point: ao.clone(), uv: RA.getUV(ao, go, uo, fo, mo, Co, yo, new s), face: null, object: this }) } }, clone: function () { return new this.constructor(this.material).copy(this) }, copy: function (A) { return H.prototype.copy.call(this, A), void 0 !== A.center && this.center.copy(A.center), this } }); var Eo = new y, Bo = new y; function xo() { H.call(this), this._currentLevel = 0, this.type = "LOD", Object.defineProperties(this, { levels: { enumerable: !0, value: [] } }), this.autoUpdate = !0 } function So(A, e) { A && A.isGeometry && console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."), Ue.call(this, A, e), this.type = "SkinnedMesh", this.bindMode = "attached", this.bindMatrix = new M, this.bindMatrixInverse = new M } xo.prototype = Object.assign(Object.create(H.prototype), { constructor: xo, isLOD: !0, copy: function (A) { H.prototype.copy.call(this, A, !1); for (var e = A.levels, t = 0, i = e.length; i > t; t++) { var o = e[t]; this.addLevel(o.object.clone(), o.distance) } return this.autoUpdate = A.autoUpdate, this }, addLevel: function (A, e) { void 0 === e && (e = 0), e = Math.abs(e); for (var t = this.levels, i = 0; t.length > i && t[i].distance <= e; i++) ; return t.splice(i, 0, { distance: e, object: A }), this.add(A), this }, getCurrentLevel: function () { return this._currentLevel }, getObjectForDistance: function (A) { var e = this.levels; if (e.length > 0) { for (var t = 1, i = e.length; i > t && e[t].distance <= A; t++) ; return e[t - 1].object } return null }, raycast: function (A, e) { if (this.levels.length > 0) { Eo.setFromMatrixPosition(this.matrixWorld); var t = A.ray.origin.distanceTo(Eo); this.getObjectForDistance(t).raycast(A, e) } }, update: function (A) { var e = this.levels; if (e.length > 1) { Eo.setFromMatrixPosition(A.matrixWorld), Bo.setFromMatrixPosition(this.matrixWorld); var t = Eo.distanceTo(Bo) / A.zoom; e[0].object.visible = !0; for (var i = 1, o = e.length; o > i && e[i].distance <= t; i++) e[i - 1].object.visible = !1, e[i].object.visible = !0; for (this._currentLevel = i - 1; o > i; i++) e[i].object.visible = !1 } }, toJSON: function (A) { var e = H.prototype.toJSON.call(this, A); !1 === this.autoUpdate && (e.object.autoUpdate = !1), e.object.levels = []; for (var t = this.levels, i = 0, o = t.length; o > i; i++) { var n = t[i]; e.object.levels.push({ object: n.object.uuid, distance: n.distance }) } return e } }), So.prototype = Object.assign(Object.create(Ue.prototype), { constructor: So, isSkinnedMesh: !0, bind: function (A, e) { this.skeleton = A, void 0 === e && (this.updateMatrixWorld(!0), this.skeleton.calculateInverses(), e = this.matrixWorld), this.bindMatrix.copy(e), this.bindMatrixInverse.getInverse(e) }, pose: function () { this.skeleton.pose() }, normalizeSkinWeights: function () { for (var A = new p, e = this.geometry.attributes.skinWeight, t = 0, i = e.count; i > t; t++) { A.x = e.getX(t), A.y = e.getY(t), A.z = e.getZ(t), A.w = e.getW(t); var o = 1 / A.manhattanLength(); o !== 1 / 0 ? A.multiplyScalar(o) : A.set(1, 0, 0, 0), e.setXYZW(t, A.x, A.y, A.z, A.w) } }, updateMatrixWorld: function (A) { Ue.prototype.updateMatrixWorld.call(this, A), "attached" === this.bindMode ? this.bindMatrixInverse.getInverse(this.matrixWorld) : "detached" === this.bindMode ? this.bindMatrixInverse.getInverse(this.bindMatrix) : console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode) }, clone: function () { return new this.constructor(this.geometry, this.material).copy(this) } }); var wo = new M, Mo = new M; function bo(A, e) { if (this.bones = (A = A || []).slice(0), this.boneMatrices = new Float32Array(16 * this.bones.length), this.frame = -1, void 0 === e) this.calculateInverses(); else if (this.bones.length === e.length) this.boneInverses = e.slice(0); else { console.warn("THREE.Skeleton boneInverses is the wrong length."), this.boneInverses = []; for (var t = 0, i = this.bones.length; i > t; t++) this.boneInverses.push(new M) } } function Uo() { H.call(this), this.type = "Bone" } Object.assign(bo.prototype, { calculateInverses: function () { this.boneInverses = []; for (var A = 0, e = this.bones.length; e > A; A++) { var t = new M; this.bones[A] && t.getInverse(this.bones[A].matrixWorld), this.boneInverses.push(t) } }, pose: function () { var A, e, t; for (e = 0, t = this.bones.length; t > e; e++) (A = this.bones[e]) && A.matrixWorld.getInverse(this.boneInverses[e]); for (e = 0, t = this.bones.length; t > e; e++) (A = this.bones[e]) && (A.parent && A.parent.isBone ? (A.matrix.getInverse(A.parent.matrixWorld), A.matrix.multiply(A.matrixWorld)) : A.matrix.copy(A.matrixWorld), A.matrix.decompose(A.position, A.quaternion, A.scale)) }, update: function () { for (var A = this.bones, e = this.boneInverses, t = this.boneMatrices, i = this.boneTexture, o = 0, n = A.length; n > o; o++) { wo.multiplyMatrices(A[o] ? A[o].matrixWorld : Mo, e[o]), wo.toArray(t, 16 * o) } void 0 !== i && (i.needsUpdate = !0) }, clone: function () { return new bo(this.bones, this.boneInverses) }, getBoneByName: function (A) { for (var e = 0, t = this.bones.length; t > e; e++) { var i = this.bones[e]; if (i.name === A) return i } }, dispose: function () { this.boneTexture && (this.boneTexture.dispose(), this.boneTexture = void 0) } }), Uo.prototype = Object.assign(Object.create(H.prototype), { constructor: Uo, isBone: !0 }); var Fo = new M, Ko = new M, Qo = [], Ro = new Ue; function To(A, e, t) { Ue.call(this, A, e), this.instanceMatrix = new YA(new Float32Array(16 * t), 16), this.count = t, this.frustumCulled = !1 } function ko(A) { qA.call(this), this.type = "LineBasicMaterial", this.color = new LA(16777215), this.linewidth = 1, this.linecap = "round", this.linejoin = "round", this.setValues(A) } To.prototype = Object.assign(Object.create(Ue.prototype), { constructor: To, isInstancedMesh: !0, getMatrixAt: function (A, e) { e.fromArray(this.instanceMatrix.array, 16 * A) }, raycast: function (A, e) { var t = this.matrixWorld, i = this.count; if (Ro.geometry = this.geometry, Ro.material = this.material, void 0 !== Ro.material) for (var o = 0; i > o; o++) this.getMatrixAt(o, Fo), Ko.multiplyMatrices(t, Fo), Ro.matrixWorld = Ko, Ro.raycast(A, Qo), Qo.length > 0 && (Qo[0].instanceId = o, Qo[0].object = this, e.push(Qo[0]), Qo.length = 0) }, setMatrixAt: function (A, e) { e.toArray(this.instanceMatrix.array, 16 * A) }, updateMorphTargets: function () {} }), (ko.prototype = Object.create(qA.prototype)).constructor = ko, ko.prototype.isLineBasicMaterial = !0, ko.prototype.copy = function (A) { return qA.prototype.copy.call(this, A), this.color.copy(A.color), this.linewidth = A.linewidth, this.linecap = A.linecap, this.linejoin = A.linejoin, this }; var Do = new y, Lo = new y, No = new M, Oo = new CA, Vo = new cA; function Go(A, e, t) { 1 === t && console.error("THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead."), H.call(this), this.type = "Line", this.geometry = void 0 !== A ? A : new he, this.material = void 0 !== e ? e : new ko } Go.prototype = Object.assign(Object.create(H.prototype), { constructor: Go, isLine: !0, computeLineDistances: function () { var A = this.geometry; if (A.isBufferGeometry) if (null === A.index) { for (var e = A.attributes.position, t = [0], i = 1, o = e.count; o > i; i++) Do.fromBufferAttribute(e, i - 1), Lo.fromBufferAttribute(e, i), t[i] = t[i - 1], t[i] += Do.distanceTo(Lo); A.setAttribute("lineDistance", new Ae(t, 1)) } else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); else if (A.isGeometry) { var n = A.vertices; (t = A.lineDistances)[0] = 0; for (i = 1, o = n.length; o > i; i++) t[i] = t[i - 1], t[i] += n[i - 1].distanceTo(n[i]) } return this }, raycast: function (A, e) { var t = this.geometry, i = this.matrixWorld, o = A.params.Line.threshold; if (null === t.boundingSphere && t.computeBoundingSphere(), Vo.copy(t.boundingSphere), Vo.applyMatrix4(i), Vo.radius += o, !1 !== A.ray.intersectsSphere(Vo)) { No.getInverse(i), Oo.copy(A.ray).applyMatrix4(No); var n = o / ((this.scale.x + this.scale.y + this.scale.z) / 3), r = n * n, a = new y, s = new y, l = new y, c = new y, h = this && this.isLineSegments ? 2 : 1; if (t.isBufferGeometry) { var d = t.index, p = t.attributes.position.array; if (null !== d) for (var g = d.array, u = 0, f = g.length - 1; f > u; u += h) { var m = g[u + 1]; if (a.fromArray(p, 3 * g[u]), s.fromArray(p, 3 * m), r >= Oo.distanceSqToSegment(a, s, c, l)) { c.applyMatrix4(this.matrixWorld); var C = A.ray.origin.distanceTo(c); A.near > C || C > A.far || e.push({ distance: C, point: l.clone().applyMatrix4(this.matrixWorld), index: u, face: null, faceIndex: null, object: this }) } } else for (u = 0, f = p.length / 3 - 1; f > u; u += h) { if (a.fromArray(p, 3 * u), s.fromArray(p, 3 * u + 3), r >= Oo.distanceSqToSegment(a, s, c, l)) { c.applyMatrix4(this.matrixWorld); C = A.ray.origin.distanceTo(c); A.near > C || C > A.far || e.push({ distance: C, point: l.clone().applyMatrix4(this.matrixWorld), index: u, face: null, faceIndex: null, object: this }) } } } else if (t.isGeometry) { var v = t.vertices, I = v.length; for (u = 0; I - 1 > u; u += h) { if (r >= Oo.distanceSqToSegment(v[u], v[u + 1], c, l)) { c.applyMatrix4(this.matrixWorld); C = A.ray.origin.distanceTo(c); A.near > C || C > A.far || e.push({ distance: C, point: l.clone().applyMatrix4(this.matrixWorld), index: u, face: null, faceIndex: null, object: this }) } } } } }, clone: function () { return new this.constructor(this.geometry, this.material).copy(this) } }); var Po = new y, qo = new y; function jo(A, e) { Go.call(this, A, e), this.type = "LineSegments" } function Ho(A, e) { Go.call(this, A, e), this.type = "LineLoop" } function Yo(A) { qA.call(this), this.type = "PointsMaterial", this.color = new LA(16777215), this.map = null, this.alphaMap = null, this.size = 1, this.sizeAttenuation = !0, this.morphTargets = !1, this.setValues(A) } jo.prototype = Object.assign(Object.create(Go.prototype), { constructor: jo, isLineSegments: !0, computeLineDistances: function () { var A = this.geometry; if (A.isBufferGeometry) if (null === A.index) { for (var e = A.attributes.position, t = [], i = 0, o = e.count; o > i; i += 2) Po.fromBufferAttribute(e, i), qo.fromBufferAttribute(e, i + 1), t[i] = 0 === i ? 0 : t[i - 1], t[i + 1] = t[i] + Po.distanceTo(qo); A.setAttribute("lineDistance", new Ae(t, 1)) } else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); else if (A.isGeometry) { var n = A.vertices; for (t = A.lineDistances, i = 0, o = n.length; o > i; i += 2) Po.copy(n[i]), qo.copy(n[i + 1]), t[i] = 0 === i ? 0 : t[i - 1], t[i + 1] = t[i] + Po.distanceTo(qo) } return this } }), Ho.prototype = Object.assign(Object.create(Go.prototype), { constructor: Ho, isLineLoop: !0 }), (Yo.prototype = Object.create(qA.prototype)).constructor = Yo, Yo.prototype.isPointsMaterial = !0, Yo.prototype.copy = function (A) { return qA.prototype.copy.call(this, A), this.color.copy(A.color), this.map = A.map, this.alphaMap = A.alphaMap, this.size = A.size, this.sizeAttenuation = A.sizeAttenuation, this.morphTargets = A.morphTargets, this }; var Wo = new M, Jo = new CA, zo = new cA, Zo = new y; function Xo(A, e) { H.call(this), this.type = "Points", this.geometry = void 0 !== A ? A : new he, this.material = void 0 !== e ? e : new Yo, this.updateMorphTargets() } function _o(A, e, t, i, o, n, r) { var a = Jo.distanceSqToPoint(A); if (t > a) { var s = new y; Jo.closestPointToPoint(A, s), s.applyMatrix4(i); var l = o.ray.origin.distanceTo(s); if (o.near > l || l > o.far) return; n.push({ distance: l, distanceToRay: Math.sqrt(a), point: s, index: e, face: null, object: r }) } } function $o(A, e, t, i, o, n, r, a, s) { d.call(this, A, e, t, i, o, n, r, a, s), this.format = void 0 !== r ? r : 1022, this.minFilter = void 0 !== n ? n : 1006, this.magFilter = void 0 !== o ? o : 1006, this.generateMipmaps = !1 } function An(A, e, t, i, o, n, r, a, s, l, c, h) { d.call(this, null, n, r, a, s, l, i, o, c, h), this.image = { width: e, height: t }, this.mipmaps = A, this.flipY = !1, this.generateMipmaps = !1 } function en(A, e, t, i, o, n, r, a, s) { d.call(this, A, e, t, i, o, n, r, a, s), this.needsUpdate = !0 } function tn(A, e, t, i, o, n, r, a, s, l) { if (1026 !== (l = void 0 !== l ? l : 1026) && 1027 !== l) throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat"); void 0 === t && 1026 === l && (t = 1012), void 0 === t && 1027 === l && (t = 1020), d.call(this, null, i, o, n, r, a, l, t, s), this.image = { width: A, height: e }, this.magFilter = void 0 !== r ? r : 1003, this.minFilter = void 0 !== a ? a : 1003, this.flipY = !1, this.generateMipmaps = !1 } function on(A) { he.call(this), this.type = "WireframeGeometry"; var e, t, i, o, n, r, a, s, l, c, h = [], d = [0, 0], p = {}, g = ["a", "b", "c"]; if (A && A.isGeometry) { var u = A.faces; for (e = 0, i = u.length; i > e; e++) { var f = u[e]; for (t = 0; 3 > t; t++) a = f[g[t]], s = f[g[(t + 1) % 3]], d[0] = Math.min(a, s), d[1] = Math.max(a, s), void 0 === p[l = d[0] + "," + d[1]] && (p[l] = { index1: d[0], index2: d[1] }) } for (l in p) h.push((c = A.vertices[(r = p[l]).index1]).x, c.y, c.z), h.push((c = A.vertices[r.index2]).x, c.y, c.z) } else if (A && A.isBufferGeometry) { var m, C, v, I, E; if (c = new y, null !== A.index) { for (m = A.attributes.position, C = A.index, 0 === (v = A.groups).length && (v = [{ start: 0, count: C.count, materialIndex: 0 }]), o = 0, n = v.length; n > o; ++o) for (e = E = (I = v[o]).start, i = E + I.count; i > e; e += 3) for (t = 0; 3 > t; t++) a = C.getX(e + t), s = C.getX(e + (t + 1) % 3), d[0] = Math.min(a, s), d[1] = Math.max(a, s), void 0 === p[l = d[0] + "," + d[1]] && (p[l] = { index1: d[0], index2: d[1] }); for (l in p) c.fromBufferAttribute(m, (r = p[l]).index1), h.push(c.x, c.y, c.z), c.fromBufferAttribute(m, r.index2), h.push(c.x, c.y, c.z) } else for (e = 0, i = (m = A.attributes.position).count / 3; i > e; e++) for (t = 0; 3 > t; t++) c.fromBufferAttribute(m, 3 * e + t), h.push(c.x, c.y, c.z), c.fromBufferAttribute(m, 3 * e + (t + 1) % 3), h.push(c.x, c.y, c.z) } this.setAttribute("position", new Ae(h, 3)) } function nn(A, e, t) { De.call(this), this.type = "ParametricGeometry", this.parameters = { func: A, slices: e, stacks: t }, this.fromBufferGeometry(new rn(A, e, t)), this.mergeVertices() } function rn(A, e, t) { he.call(this), this.type = "ParametricBufferGeometry", this.parameters = { func: A, slices: e, stacks: t }; var i, o, n = [], r = [], a = [], s = [], l = 1e-5, c = new y, h = new y, d = new y, p = new y, g = new y; 3 > A.length && console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter."); var u = e + 1; for (i = 0; t >= i; i++) { var f = i / t; for (o = 0; e >= o; o++) { var m = o / e; A(m, f, h), r.push(h.x, h.y, h.z), 0 > m - l ? (A(m + l, f, d), p.subVectors(d, h)) : (A(m - l, f, d), p.subVectors(h, d)), 0 > f - l ? (A(m, f + l, d), g.subVectors(d, h)) : (A(m, f - l, d), g.subVectors(h, d)), c.crossVectors(p, g).normalize(), a.push(c.x, c.y, c.z), s.push(m, f) } } for (i = 0; t > i; i++) for (o = 0; e > o; o++) { var C = i * u + o + 1, v = (i + 1) * u + o + 1, I = (i + 1) * u + o; n.push(i * u + o, C, I), n.push(C, v, I) } this.setIndex(n), this.setAttribute("position", new Ae(r, 3)), this.setAttribute("normal", new Ae(a, 3)), this.setAttribute("uv", new Ae(s, 2)) } function an(A, e, t, i) { De.call(this), this.type = "PolyhedronGeometry", this.parameters = { vertices: A, indices: e, radius: t, detail: i }, this.fromBufferGeometry(new sn(A, e, t, i)), this.mergeVertices() } function sn(A, e, t, i) { he.call(this), this.type = "PolyhedronBufferGeometry", this.parameters = { vertices: A, indices: e, radius: t, detail: i }, t = t || 1; var o = [], n = []; function r(A, e, t, i) { var o, n, r = Math.pow(2, i), s = []; for (o = 0; r >= o; o++) { s[o] = []; var l = A.clone().lerp(t, o / r), c = e.clone().lerp(t, o / r), h = r - o; for (n = 0; h >= n; n++) s[o][n] = 0 === n && o === r ? l : l.clone().lerp(c, n / h) } for (o = 0; r > o; o++) for (n = 0; 2 * (r - o) - 1 > n; n++) { var d = Math.floor(n / 2); n % 2 == 0 ? (a(s[o][d + 1]), a(s[o + 1][d]), a(s[o][d])) : (a(s[o][d + 1]), a(s[o + 1][d + 1]), a(s[o + 1][d])) } } function a(A) { o.push(A.x, A.y, A.z) } function l(e, t) { var i = 3 * e; t.x = A[i + 0], t.y = A[i + 1], t.z = A[i + 2] } function c(A, e, t, i) { 0 > i && 1 === A.x && (n[e] = A.x - 1), 0 === t.x && 0 === t.z && (n[e] = i / 2 / Math.PI + .5) } function h(A) { return Math.atan2(A.z, -A.x) }! function (A) { for (var t = new y, i = new y, o = new y, n = 0; e.length > n; n += 3) l(e[n + 0], t), l(e[n + 1], i), l(e[n + 2], o), r(t, i, o, A) }(i = i || 0), function (A) { for (var e = new y, t = 0; o.length > t; t += 3) e.x = o[t + 0], e.y = o[t + 1], e.z = o[t + 2], e.normalize().multiplyScalar(A), o[t + 0] = e.x, o[t + 1] = e.y, o[t + 2] = e.z }(t), function () { for (var A = new y, e = 0; o.length > e; e += 3) { A.x = o[e + 0], A.y = o[e + 1], A.z = o[e + 2]; var t = h(A) / 2 / Math.PI + .5, i = (r = A, Math.atan2(-r.y, Math.sqrt(r.x * r.x + r.z * r.z)) / Math.PI + .5); n.push(t, 1 - i) } var r; (function () { for (var A = new y, e = new y, t = new y, i = new y, r = new s, a = new s, l = new s, d = 0, p = 0; o.length > d; d += 9, p += 6) { A.set(o[d + 0], o[d + 1], o[d + 2]), e.set(o[d + 3], o[d + 4], o[d + 5]), t.set(o[d + 6], o[d + 7], o[d + 8]), r.set(n[p + 0], n[p + 1]), a.set(n[p + 2], n[p + 3]), l.set(n[p + 4], n[p + 5]), i.copy(A).add(e).add(t).divideScalar(3); var g = h(i); c(r, p + 0, A, g), c(a, p + 2, e, g), c(l, p + 4, t, g) } })(), function () { for (var A = 0; n.length > A; A += 6) { var e = n[A + 0], t = n[A + 2], i = n[A + 4], o = Math.max(e, t, i), r = Math.min(e, t, i); o > .9 && .1 > r && (.2 > e && (n[A + 0] += 1), .2 > t && (n[A + 2] += 1), .2 > i && (n[A + 4] += 1)) } }() }(), this.setAttribute("position", new Ae(o, 3)), this.setAttribute("normal", new Ae(o.slice(), 3)), this.setAttribute("uv", new Ae(n, 2)), 0 === i ? this.computeVertexNormals() : this.normalizeNormals() } function ln(A, e) { De.call(this), this.type = "TetrahedronGeometry", this.parameters = { radius: A, detail: e }, this.fromBufferGeometry(new cn(A, e)), this.mergeVertices() } function cn(A, e) { sn.call(this, [1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1], [2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1], A, e), this.type = "TetrahedronBufferGeometry", this.parameters = { radius: A, detail: e } } function hn(A, e) { De.call(this), this.type = "OctahedronGeometry", this.parameters = { radius: A, detail: e }, this.fromBufferGeometry(new dn(A, e)), this.mergeVertices() } function dn(A, e) { sn.call(this, [1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1], [0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4, 2], A, e), this.type = "OctahedronBufferGeometry", this.parameters = { radius: A, detail: e } } function pn(A, e) { De.call(this), this.type = "IcosahedronGeometry", this.parameters = { radius: A, detail: e }, this.fromBufferGeometry(new gn(A, e)), this.mergeVertices() } function gn(A, e) { var t = (1 + Math.sqrt(5)) / 2; sn.call(this, [-1, t, 0, 1, t, 0, -1, -t, 0, 1, -t, 0, 0, -1, t, 0, 1, t, 0, -1, -t, 0, 1, -t, t, 0, -1, t, 0, 1, -t, 0, -1, -t, 0, 1], [0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1], A, e), this.type = "IcosahedronBufferGeometry", this.parameters = { radius: A, detail: e } } function un(A, e) { De.call(this), this.type = "DodecahedronGeometry", this.parameters = { radius: A, detail: e }, this.fromBufferGeometry(new fn(A, e)), this.mergeVertices() } function fn(A, e) { var t = (1 + Math.sqrt(5)) / 2, i = 1 / t; sn.call(this, [-1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 0, -i, -t, 0, -i, t, 0, i, -t, 0, i, t, -i, -t, 0, -i, t, 0, i, -t, 0, i, t, 0, -t, 0, -i, t, 0, -i, -t, 0, i, t, 0, i], [3, 11, 7, 3, 7, 15, 3, 15, 13, 7, 19, 17, 7, 17, 6, 7, 6, 15, 17, 4, 8, 17, 8, 10, 17, 10, 6, 8, 0, 16, 8, 16, 2, 8, 2, 10, 0, 12, 1, 0, 1, 18, 0, 18, 16, 6, 10, 2, 6, 2, 13, 6, 13, 15, 2, 16, 18, 2, 18, 3, 2, 3, 13, 18, 1, 9, 18, 9, 11, 18, 11, 3, 4, 14, 12, 4, 12, 0, 4, 0, 8, 11, 9, 5, 11, 5, 19, 11, 19, 7, 19, 5, 14, 19, 14, 4, 19, 4, 17, 1, 12, 14, 1, 14, 5, 1, 5, 9], A, e), this.type = "DodecahedronBufferGeometry", this.parameters = { radius: A, detail: e } } function mn(A, e, t, i, o, n) { De.call(this), this.type = "TubeGeometry", this.parameters = { path: A, tubularSegments: e, radius: t, radialSegments: i, closed: o }, void 0 !== n && console.warn("THREE.TubeGeometry: taper has been removed."); var r = new Cn(A, e, t, i, o); this.tangents = r.tangents, this.normals = r.normals, this.binormals = r.binormals, this.fromBufferGeometry(r), this.mergeVertices() } function Cn(A, e, t, i, o) { he.call(this), this.type = "TubeBufferGeometry", this.parameters = { path: A, tubularSegments: e, radius: t, radialSegments: i, closed: o }, t = t || 1, i = i || 8; var n = A.computeFrenetFrames(e = e || 64, o = o || !1); this.tangents = n.tangents, this.normals = n.normals, this.binormals = n.binormals; var r, a, l = new y, c = new y, h = new s, d = new y, p = [], g = [], u = [], f = []; function m(o) { d = A.getPointAt(o / e, d); var r = n.normals[o], s = n.binormals[o]; for (a = 0; i >= a; a++) { var h = a / i * Math.PI * 2, u = Math.sin(h), f = -Math.cos(h); c.x = f * r.x + u * s.x, c.y = f * r.y + u * s.y, c.z = f * r.z + u * s.z, c.normalize(), g.push(c.x, c.y, c.z), l.x = d.x + t * c.x, l.y = d.y + t * c.y, l.z = d.z + t * c.z, p.push(l.x, l.y, l.z) } }! function () { for (r = 0; e > r; r++) m(r); m(!1 === o ? e : 0), function () { for (r = 0; e >= r; r++) for (a = 0; i >= a; a++) h.x = r / e, h.y = a / i, u.push(h.x, h.y) }(), function () { for (a = 1; e >= a; a++) for (r = 1; i >= r; r++) { var A = (i + 1) * a + (r - 1), t = (i + 1) * a + r, o = (i + 1) * (a - 1) + r; f.push((i + 1) * (a - 1) + (r - 1), A, o), f.push(A, t, o) } }() }(), this.setIndex(f), this.setAttribute("position", new Ae(p, 3)), this.setAttribute("normal", new Ae(g, 3)), this.setAttribute("uv", new Ae(u, 2)) } function yn(A, e, t, i, o, n, r) { De.call(this), this.type = "TorusKnotGeometry", this.parameters = { radius: A, tube: e, tubularSegments: t, radialSegments: i, p: o, q: n }, void 0 !== r && console.warn("THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead."), this.fromBufferGeometry(new vn(A, e, t, i, o, n)), this.mergeVertices() } function vn(A, e, t, i, o, n) { he.call(this), this.type = "TorusKnotBufferGeometry", this.parameters = { radius: A, tube: e, tubularSegments: t, radialSegments: i, p: o, q: n }, A = A || 1, e = e || .4, t = Math.floor(t) || 64, i = Math.floor(i) || 8, o = o || 2, n = n || 3; var r, a, s = [], l = [], c = [], h = [], d = new y, p = new y, g = new y, u = new y, f = new y, m = new y, C = new y; for (r = 0; t >= r; ++r) { var v = r / t * o * Math.PI * 2; for (M(v, o, n, A, g), M(v + .01, o, n, A, u), m.subVectors(u, g), C.addVectors(u, g), f.crossVectors(m, C), C.crossVectors(f, m), f.normalize(), C.normalize(), a = 0; i >= a; ++a) { var I = a / i * Math.PI * 2, E = -e * Math.cos(I), B = e * Math.sin(I); d.x = g.x + (E * C.x + B * f.x), d.y = g.y + (E * C.y + B * f.y), d.z = g.z + (E * C.z + B * f.z), l.push(d.x, d.y, d.z), p.subVectors(d, g).normalize(), c.push(p.x, p.y, p.z), h.push(r / t), h.push(a / i) } } for (a = 1; t >= a; a++) for (r = 1; i >= r; r++) { var x = (i + 1) * a + (r - 1), S = (i + 1) * a + r, w = (i + 1) * (a - 1) + r; s.push((i + 1) * (a - 1) + (r - 1), x, w), s.push(x, S, w) } function M(A, e, t, i, o) { var n = Math.cos(A), r = Math.sin(A), a = t / e * A, s = Math.cos(a); o.x = i * (2 + s) * .5 * n, o.y = i * (2 + s) * r * .5, o.z = i * Math.sin(a) * .5 } this.setIndex(s), this.setAttribute("position", new Ae(l, 3)), this.setAttribute("normal", new Ae(c, 3)), this.setAttribute("uv", new Ae(h, 2)) } function In(A, e, t, i, o) { De.call(this), this.type = "TorusGeometry", this.parameters = { radius: A, tube: e, radialSegments: t, tubularSegments: i, arc: o }, this.fromBufferGeometry(new En(A, e, t, i, o)), this.mergeVertices() } function En(A, e, t, i, o) { he.call(this), this.type = "TorusBufferGeometry", this.parameters = { radius: A, tube: e, radialSegments: t, tubularSegments: i, arc: o }, A = A || 1, e = e || .4, t = Math.floor(t) || 8, i = Math.floor(i) || 6, o = o || 2 * Math.PI; var n, r, a = [], s = [], l = [], c = [], h = new y, d = new y, p = new y; for (n = 0; t >= n; n++) for (r = 0; i >= r; r++) { var g = r / i * o, u = n / t * Math.PI * 2; d.x = (A + e * Math.cos(u)) * Math.cos(g), d.y = (A + e * Math.cos(u)) * Math.sin(g), d.z = e * Math.sin(u), s.push(d.x, d.y, d.z), h.x = A * Math.cos(g), h.y = A * Math.sin(g), p.subVectors(d, h).normalize(), l.push(p.x, p.y, p.z), c.push(r / i), c.push(n / t) } for (n = 1; t >= n; n++) for (r = 1; i >= r; r++) { var f = (i + 1) * (n - 1) + r - 1, m = (i + 1) * (n - 1) + r, C = (i + 1) * n + r; a.push((i + 1) * n + r - 1, f, C), a.push(f, m, C) } this.setIndex(a), this.setAttribute("position", new Ae(s, 3)), this.setAttribute("normal", new Ae(l, 3)), this.setAttribute("uv", new Ae(c, 2)) } Xo.prototype = Object.assign(Object.create(H.prototype), { constructor: Xo, isPoints: !0, raycast: function (A, e) { var t = this.geometry, i = this.matrixWorld, o = A.params.Points.threshold; if (null === t.boundingSphere && t.computeBoundingSphere(), zo.copy(t.boundingSphere), zo.applyMatrix4(i), zo.radius += o, !1 !== A.ray.intersectsSphere(zo)) { Wo.getInverse(i), Jo.copy(A.ray).applyMatrix4(Wo); var n = o / ((this.scale.x + this.scale.y + this.scale.z) / 3), r = n * n; if (t.isBufferGeometry) { var a = t.index, s = t.attributes.position.array; if (null !== a) for (var l = a.array, c = 0, h = l.length; h > c; c++) { var d = l[c]; Zo.fromArray(s, 3 * d), _o(Zo, d, r, i, A, e, this) } else { c = 0; for (var p = s.length / 3; p > c; c++) Zo.fromArray(s, 3 * c), _o(Zo, c, r, i, A, e, this) } } else { var g = t.vertices; for (c = 0, p = g.length; p > c; c++) _o(g[c], c, r, i, A, e, this) } } }, updateMorphTargets: function () { var A, e, t, i = this.geometry; if (i.isBufferGeometry) { var o = i.morphAttributes, n = Object.keys(o); if (n.length > 0) { var r = o[n[0]]; if (void 0 !== r) for (this.morphTargetInfluences = [], this.morphTargetDictionary = {}, A = 0, e = r.length; e > A; A++) t = r[A].name || String(A), this.morphTargetInfluences.push(0), this.morphTargetDictionary[t] = A } } else { var a = i.morphTargets; void 0 !== a && a.length > 0 && console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.") } }, clone: function () { return new this.constructor(this.geometry, this.material).copy(this) } }), $o.prototype = Object.assign(Object.create(d.prototype), { constructor: $o, isVideoTexture: !0, update: function () { var A = this.image; A.HAVE_CURRENT_DATA > A.readyState || (this.needsUpdate = !0) } }), (An.prototype = Object.create(d.prototype)).constructor = An, An.prototype.isCompressedTexture = !0, (en.prototype = Object.create(d.prototype)).constructor = en, en.prototype.isCanvasTexture = !0, (tn.prototype = Object.create(d.prototype)).constructor = tn, tn.prototype.isDepthTexture = !0, (on.prototype = Object.create(he.prototype)).constructor = on, (nn.prototype = Object.create(De.prototype)).constructor = nn, (rn.prototype = Object.create(he.prototype)).constructor = rn, (an.prototype = Object.create(De.prototype)).constructor = an, (sn.prototype = Object.create(he.prototype)).constructor = sn, (ln.prototype = Object.create(De.prototype)).constructor = ln, (cn.prototype = Object.create(sn.prototype)).constructor = cn, (hn.prototype = Object.create(De.prototype)).constructor = hn, (dn.prototype = Object.create(sn.prototype)).constructor = dn, (pn.prototype = Object.create(De.prototype)).constructor = pn, (gn.prototype = Object.create(sn.prototype)).constructor = gn, (un.prototype = Object.create(De.prototype)).constructor = un, (fn.prototype = Object.create(sn.prototype)).constructor = fn, (mn.prototype = Object.create(De.prototype)).constructor = mn, (Cn.prototype = Object.create(he.prototype)).constructor = Cn, Cn.prototype.toJSON = function () { var A = he.prototype.toJSON.call(this); return A.path = this.parameters.path.toJSON(), A }, (yn.prototype = Object.create(De.prototype)).constructor = yn, (vn.prototype = Object.create(he.prototype)).constructor = vn, (In.prototype = Object.create(De.prototype)).constructor = In, (En.prototype = Object.create(he.prototype)).constructor = En; var Bn = function (A, e, t) { t = t || 2; var i, o, n, r, a, s, l, c = e && e.length, h = c ? e[0] * t : A.length, d = xn(A, 0, h, t, !0), p = []; if (!d || d.next === d.prev) return p; if (c && (d = function (A, e, t, i) { var o, n, r, a = []; for (o = 0, n = e.length; n > o; o++) (r = xn(A, e[o] * i, n - 1 > o ? e[o + 1] * i : A.length, i, !1)) === r.next && (r.steiner = !0), a.push(Tn(r)); for (a.sort(Kn), o = 0; a.length > o; o++) Qn(a[o], t), t = Sn(t, t.next); return t }(A, e, d, t)), A.length > 80 * t) { i = n = A[0], o = r = A[1]; for (var g = t; h > g; g += t) i > (a = A[g]) && (i = a), o > (s = A[g + 1]) && (o = s), a > n && (n = a), s > r && (r = s); l = 0 !== (l = Math.max(n - i, r - o)) ? 1 / l : 0 } return wn(d, p, t, i, o, l), p }; function xn(A, e, t, i, o) { var n, r; if (o === function (A, e, t, i) { for (var o = 0, n = e, r = t - i; t > n; n += i) o += (A[r] - A[n]) * (A[n + 1] + A[r + 1]), r = n; return o }(A, e, t, i) > 0) for (n = e; t > n; n += i) r = Pn(n, A[n], A[n + 1], r); else for (n = t - i; n >= e; n -= i) r = Pn(n, A[n], A[n + 1], r); return r && Nn(r, r.next) && (qn(r), r = r.next), r } function Sn(A, e) { if (!A) return A; e || (e = A); var t, i = A; do { if (t = !1, i.steiner || !Nn(i, i.next) && 0 !== Ln(i.prev, i, i.next)) i = i.next; else { if (qn(i), (i = e = i.prev) === i.next) break; t = !0 } } while (t || i !== e); return e } function wn(A, e, t, i, o, n, r) { if (A) { !r && n && function (A, e, t, i) { var o = A; do { null === o.z && (o.z = Rn(o.x, o.y, e, t, i)), o.prevZ = o.prev, o.nextZ = o.next, o = o.next } while (o !== A); o.prevZ.nextZ = null, o.prevZ = null, function (A) { var e, t, i, o, n, r, a, s, l = 1; do { for (t = A, A = null, n = null, r = 0; t;) { for (r++, i = t, a = 0, e = 0; l > e && (a++, i = i.nextZ); e++) ; for (s = l; a > 0 || s > 0 && i;) 0 === a || 0 !== s && i && t.z > i.z ? (o = i, i = i.nextZ, s--) : (o = t, t = t.nextZ, a--), n ? n.nextZ = o : A = o, o.prevZ = n, n = o; t = i } n.nextZ = null, l *= 2 } while (r > 1) }(o) }(A, i, o, n); for (var a, s, l = A; A.prev !== A.next;) if (a = A.prev, s = A.next, n ? bn(A, i, o, n) : Mn(A)) e.push(a.i / t), e.push(A.i / t), e.push(s.i / t), qn(A), A = s.next, l = s.next; else if ((A = s) === l) { r ? 1 === r ? wn(A = Un(A, e, t), e, t, i, o, n, 2) : 2 === r && Fn(A, e, t, i, o, n) : wn(Sn(A), e, t, i, o, n, 1); break } } } function Mn(A) { var e = A.prev, t = A, i = A.next; if (Ln(e, t, i) >= 0) return !1; for (var o = A.next.next; o !== A.prev;) { if (kn(e.x, e.y, t.x, t.y, i.x, i.y, o.x, o.y) && Ln(o.prev, o, o.next) >= 0) return !1; o = o.next } return !0 } function bn(A, e, t, i) { var o = A.prev, n = A, r = A.next; if (Ln(o, n, r) >= 0) return !1; for (var a = o.x > n.x ? o.x > r.x ? o.x : r.x : n.x > r.x ? n.x : r.x, s = o.y > n.y ? o.y > r.y ? o.y : r.y : n.y > r.y ? n.y : r.y, l = Rn(n.x > o.x ? r.x > o.x ? o.x : r.x : r.x > n.x ? n.x : r.x, n.y > o.y ? r.y > o.y ? o.y : r.y : r.y > n.y ? n.y : r.y, e, t, i), c = Rn(a, s, e, t, i), h = A.prevZ, d = A.nextZ; h && h.z >= l && d && c >= d.z;) { if (h !== A.prev && h !== A.next && kn(o.x, o.y, n.x, n.y, r.x, r.y, h.x, h.y) && Ln(h.prev, h, h.next) >= 0) return !1; if (h = h.prevZ, d !== A.prev && d !== A.next && kn(o.x, o.y, n.x, n.y, r.x, r.y, d.x, d.y) && Ln(d.prev, d, d.next) >= 0) return !1; d = d.nextZ } for (; h && h.z >= l;) { if (h !== A.prev && h !== A.next && kn(o.x, o.y, n.x, n.y, r.x, r.y, h.x, h.y) && Ln(h.prev, h, h.next) >= 0) return !1; h = h.prevZ } for (; d && c >= d.z;) { if (d !== A.prev && d !== A.next && kn(o.x, o.y, n.x, n.y, r.x, r.y, d.x, d.y) && Ln(d.prev, d, d.next) >= 0) return !1; d = d.nextZ } return !0 } function Un(A, e, t) { var i = A; do { var o = i.prev, n = i.next.next; !Nn(o, n) && On(o, i, i.next, n) && Vn(o, n) && Vn(n, o) && (e.push(o.i / t), e.push(i.i / t), e.push(n.i / t), qn(i), qn(i.next), i = A = n), i = i.next } while (i !== A); return i } function Fn(A, e, t, i, o, n) { var r = A; do { for (var a = r.next.next; a !== r.prev;) { if (r.i !== a.i && Dn(r, a)) { var s = Gn(r, a); return r = Sn(r, r.next), s = Sn(s, s.next), wn(r, e, t, i, o, n), void wn(s, e, t, i, o, n) } a = a.next } r = r.next } while (r !== A) } function Kn(A, e) { return A.x - e.x } function Qn(A, e) { if (e = function (A, e) { var t, i = e, o = A.x, n = A.y, r = -1 / 0; do { if (i.y >= n && n >= i.next.y && i.next.y !== i.y) { var a = i.x + (n - i.y) * (i.next.x - i.x) / (i.next.y - i.y); if (o >= a && a > r) { if (r = a, a === o) { if (n === i.y) return i; if (n === i.next.y) return i.next } t = i.next.x > i.x ? i : i.next } } i = i.next } while (i !== e); if (!t) return null; if (o === r) return t.prev; var s, l = t, c = t.x, h = t.y, d = 1 / 0; i = t.next; for (; i !== l;) i.x > o || c > i.x || o === i.x || !kn(h > n ? o : r, n, c, h, h > n ? r : o, n, i.x, i.y) || (s = Math.abs(n - i.y) / (o - i.x), (d > s || s === d && i.x > t.x) && Vn(i, A) && (t = i, d = s)), i = i.next; return t }(A, e)) { var t = Gn(e, A); Sn(t, t.next) } } function Rn(A, e, t, i, o) { return (A = 1431655765 & ((A = 858993459 & ((A = 252645135 & ((A = 16711935 & ((A = 32767 * (A - t) * o) | A << 8)) | A << 4)) | A << 2)) | A << 1)) | (e = 1431655765 & ((e = 858993459 & ((e = 252645135 & ((e = 16711935 & ((e = 32767 * (e - i) * o) | e << 8)) | e << 4)) | e << 2)) | e << 1)) << 1 } function Tn(A) { var e = A, t = A; do { (t.x > e.x || e.x === t.x && t.y > e.y) && (t = e), e = e.next } while (e !== A); return t } function kn(A, e, t, i, o, n, r, a) { return (o - r) * (e - a) - (A - r) * (n - a) >= 0 && (A - r) * (i - a) - (t - r) * (e - a) >= 0 && (t - r) * (n - a) - (o - r) * (i - a) >= 0 } function Dn(A, e) { return A.next.i !== e.i && A.prev.i !== e.i && ! function (A, e) { var t = A; do { if (t.i !== A.i && t.next.i !== A.i && t.i !== e.i && t.next.i !== e.i && On(t, t.next, A, e)) return !0; t = t.next } while (t !== A); return !1 }(A, e) && Vn(A, e) && Vn(e, A) && function (A, e) { var t = A, i = !1, o = (A.x + e.x) / 2, n = (A.y + e.y) / 2; do { t.y > n != t.next.y > n && t.next.y !== t.y && (t.next.x - t.x) * (n - t.y) / (t.next.y - t.y) + t.x > o && (i = !i), t = t.next } while (t !== A); return i }(A, e) } function Ln(A, e, t) { return (e.y - A.y) * (t.x - e.x) - (e.x - A.x) * (t.y - e.y) } function Nn(A, e) { return A.x === e.x && A.y === e.y } function On(A, e, t, i) { return !!(Nn(A, t) && Nn(e, i) || Nn(A, i) && Nn(t, e)) || Ln(A, e, t) > 0 != Ln(A, e, i) > 0 && Ln(t, i, A) > 0 != Ln(t, i, e) > 0 } function Vn(A, e) { return 0 > Ln(A.prev, A, A.next) ? Ln(A, e, A.next) >= 0 && Ln(A, A.prev, e) >= 0 : 0 > Ln(A, e, A.prev) || 0 > Ln(A, A.next, e) } function Gn(A, e) { var t = new jn(A.i, A.x, A.y), i = new jn(e.i, e.x, e.y), o = A.next, n = e.prev; return A.next = e, e.prev = A, t.next = o, o.prev = t, i.next = t, t.prev = i, n.next = i, i.prev = n, i } function Pn(A, e, t, i) { var o = new jn(A, e, t); return i ? (o.next = i.next, o.prev = i, i.next.prev = o, i.next = o) : (o.prev = o, o.next = o), o } function qn(A) { A.next.prev = A.prev, A.prev.next = A.next, A.prevZ && (A.prevZ.nextZ = A.nextZ), A.nextZ && (A.nextZ.prevZ = A.prevZ) } function jn(A, e, t) { this.i = A, this.x = e, this.y = t, this.prev = null, this.next = null, this.z = null, this.prevZ = null, this.nextZ = null, this.steiner = !1 } var Hn = { area: function (A) { for (var e = A.length, t = 0, i = e - 1, o = 0; e > o; i = o++) t += A[i].x * A[o].y - A[o].x * A[i].y; return .5 * t }, isClockWise: function (A) { return 0 > Hn.area(A) }, triangulateShape: function (A, e) { var t = [], i = [], o = []; Yn(A), Wn(t, A); var n = A.length; e.forEach(Yn); for (var r = 0; e.length > r; r++) i.push(n), n += e[r].length, Wn(t, e[r]); var a = Bn(t, i); for (r = 0; a.length > r; r += 3) o.push(a.slice(r, r + 3)); return o } }; function Yn(A) { var e = A.length; e > 2 && A[e - 1].equals(A[0]) && A.pop() } function Wn(A, e) { for (var t = 0; e.length > t; t++) A.push(e[t].x), A.push(e[t].y) } function Jn(A, e) { De.call(this), this.type = "ExtrudeGeometry", this.parameters = { shapes: A, options: e }, this.fromBufferGeometry(new zn(A, e)), this.mergeVertices() } function zn(A, e) { he.call(this), this.type = "ExtrudeBufferGeometry", this.parameters = { shapes: A, options: e }, A = Array.isArray(A) ? A : [A]; for (var t = this, i = [], o = [], n = 0, r = A.length; r > n; n++) { a(A[n]) } function a(A) { var n = [], r = void 0 !== e.curveSegments ? e.curveSegments : 12, a = void 0 !== e.steps ? e.steps : 1, l = void 0 !== e.depth ? e.depth : 100, c = void 0 === e.bevelEnabled || e.bevelEnabled, h = void 0 !== e.bevelThickness ? e.bevelThickness : 6, d = void 0 !== e.bevelSize ? e.bevelSize : h - 2, p = void 0 !== e.bevelOffset ? e.bevelOffset : 0, g = void 0 !== e.bevelSegments ? e.bevelSegments : 3, u = e.extrudePath, f = void 0 !== e.UVGenerator ? e.UVGenerator : Zn; void 0 !== e.amount && (console.warn("THREE.ExtrudeBufferGeometry: amount has been renamed to depth."), l = e.amount); var m, C, v, I, E, B, x, S, w = !1; u && (m = u.getSpacedPoints(a), w = !0, c = !1, C = u.computeFrenetFrames(a, !1), v = new y, I = new y, E = new y), c || (g = 0, h = 0, d = 0, p = 0); var M = A.extractPoints(r), b = M.shape, U = M.holes; if (!Hn.isClockWise(b)) for (b = b.reverse(), x = 0, S = U.length; S > x; x++) Hn.isClockWise(B = U[x]) && (U[x] = B.reverse()); var F = Hn.triangulateShape(b, U), K = b; for (x = 0, S = U.length; S > x; x++) b = b.concat(B = U[x]); function Q(A, e, t) { return e || console.error("THREE.ExtrudeGeometry: vec does not exist"), e.clone().multiplyScalar(t).add(A) } var R, T, k, D, L, N, O = b.length, V = F.length; function G(A, e, t) { var i, o, n, r = A.x - e.x, a = A.y - e.y, l = t.x - A.x, c = t.y - A.y, h = r * r + a * a; if (Math.abs(r * c - a * l) > Number.EPSILON) { var d = Math.sqrt(h), p = Math.sqrt(l * l + c * c), g = e.x - a / d, u = e.y + r / d, f = ((t.x - c / p - g) * c - (t.y + l / p - u) * l) / (r * c - a * l), m = (i = g + r * f - A.x) * i + (o = u + a * f - A.y) * o; if (2 >= m) return new s(i, o); n = Math.sqrt(m / 2) } else { var C = !1; r > Number.EPSILON ? l > Number.EPSILON && (C = !0) : -Number.EPSILON > r ? -Number.EPSILON > l && (C = !0) : Math.sign(a) === Math.sign(c) && (C = !0), C ? (i = -a, o = r, n = Math.sqrt(h)) : (i = r, o = a, n = Math.sqrt(h / 2)) } return new s(i / n, o / n) } for (var P = [], q = 0, j = K.length, H = j - 1, Y = q + 1; j > q; q++, H++, Y++) H === j && (H = 0), Y === j && (Y = 0), P[q] = G(K[q], K[H], K[Y]); var W, J, z = [], Z = P.concat(); for (x = 0, S = U.length; S > x; x++) { for (W = [], H = (j = (B = U[x]).length) - 1, Y = (q = 0) + 1; j > q; q++, H++, Y++) H === j && (H = 0), Y === j && (Y = 0), W[q] = G(B[q], B[H], B[Y]); z.push(W), Z = Z.concat(W) } for (R = 0; g > R; R++) { for (k = R / g, D = h * Math.cos(k * Math.PI / 2), T = d * Math.sin(k * Math.PI / 2) + p, q = 0, j = K.length; j > q; q++) _((L = Q(K[q], P[q], T)).x, L.y, -D); for (x = 0, S = U.length; S > x; x++) for (W = z[x], q = 0, j = (B = U[x]).length; j > q; q++) _((L = Q(B[q], W[q], T)).x, L.y, -D) } for (T = d + p, q = 0; O > q; q++) L = c ? Q(b[q], Z[q], T) : b[q], w ? (I.copy(C.normals[0]).multiplyScalar(L.x), v.copy(C.binormals[0]).multiplyScalar(L.y), E.copy(m[0]).add(I).add(v), _(E.x, E.y, E.z)) : _(L.x, L.y, 0); for (J = 1; a >= J; J++) for (q = 0; O > q; q++) L = c ? Q(b[q], Z[q], T) : b[q], w ? (I.copy(C.normals[J]).multiplyScalar(L.x), v.copy(C.binormals[J]).multiplyScalar(L.y), E.copy(m[J]).add(I).add(v), _(E.x, E.y, E.z)) : _(L.x, L.y, l / a * J); for (R = g - 1; R >= 0; R--) { for (k = R / g, D = h * Math.cos(k * Math.PI / 2), T = d * Math.sin(k * Math.PI / 2) + p, q = 0, j = K.length; j > q; q++) _((L = Q(K[q], P[q], T)).x, L.y, l + D); for (x = 0, S = U.length; S > x; x++) for (W = z[x], q = 0, j = (B = U[x]).length; j > q; q++) L = Q(B[q], W[q], T), w ? _(L.x, L.y + m[a - 1].y, m[a - 1].x + D) : _(L.x, L.y, l + D) } function X(A, e) { var t, i; for (q = A.length; --q >= 0;) { t = q, 0 > (i = q - 1) && (i = A.length - 1); var o = 0, n = a + 2 * g; for (o = 0; n > o; o++) { var r = O * o, s = O * (o + 1); AA(e + t + r, e + i + r, e + i + s, e + t + s) } } } function _(A, e, t) { n.push(A), n.push(e), n.push(t) } function $(A, e, o) { eA(A), eA(e), eA(o); var n = i.length / 3, r = f.generateTopUV(t, i, n - 3, n - 2, n - 1); tA(r[0]), tA(r[1]), tA(r[2]) } function AA(A, e, o, n) { eA(A), eA(e), eA(n), eA(e), eA(o), eA(n); var r = i.length / 3, a = f.generateSideWallUV(t, i, r - 6, r - 3, r - 2, r - 1); tA(a[0]), tA(a[1]), tA(a[3]), tA(a[1]), tA(a[2]), tA(a[3]) } function eA(A) { i.push(n[3 * A + 0]), i.push(n[3 * A + 1]), i.push(n[3 * A + 2]) } function tA(A) { o.push(A.x), o.push(A.y) }! function () { var A = i.length / 3; if (c) { var e = 0, o = O * e; for (q = 0; V > q; q++) $((N = F[q])[2] + o, N[1] + o, N[0] + o); for (o = O * (e = a + 2 * g), q = 0; V > q; q++) $((N = F[q])[0] + o, N[1] + o, N[2] + o) } else { for (q = 0; V > q; q++) $((N = F[q])[2], N[1], N[0]); for (q = 0; V > q; q++) $((N = F[q])[0] + O * a, N[1] + O * a, N[2] + O * a) } t.addGroup(A, i.length / 3 - A, 0) }(), function () { var A = i.length / 3, e = 0; for (X(K, e), e += K.length, x = 0, S = U.length; S > x; x++) X(B = U[x], e), e += B.length; t.addGroup(A, i.length / 3 - A, 1) }() } this.setAttribute("position", new Ae(i, 3)), this.setAttribute("uv", new Ae(o, 2)), this.computeVertexNormals() } (Jn.prototype = Object.create(De.prototype)).constructor = Jn, Jn.prototype.toJSON = function () { var A = De.prototype.toJSON.call(this); return Xn(this.parameters.shapes, this.parameters.options, A) }, (zn.prototype = Object.create(he.prototype)).constructor = zn, zn.prototype.toJSON = function () { var A = he.prototype.toJSON.call(this); return Xn(this.parameters.shapes, this.parameters.options, A) }; var Zn = { generateTopUV: function (A, e, t, i, o) { var n = e[3 * i], r = e[3 * i + 1], a = e[3 * o], l = e[3 * o + 1]; return [new s(e[3 * t], e[3 * t + 1]), new s(n, r), new s(a, l)] }, generateSideWallUV: function (A, e, t, i, o, n) { var r = e[3 * t], a = e[3 * t + 1], l = e[3 * t + 2], c = e[3 * i], h = e[3 * i + 1], d = e[3 * i + 2], p = e[3 * o], g = e[3 * o + 1], u = e[3 * o + 2], f = e[3 * n], m = e[3 * n + 1], C = e[3 * n + 2]; return .01 > Math.abs(a - h) ? [new s(r, 1 - l), new s(c, 1 - d), new s(p, 1 - u), new s(f, 1 - C)] : [new s(a, 1 - l), new s(h, 1 - d), new s(g, 1 - u), new s(m, 1 - C)] } }; function Xn(A, e, t) { if (t.shapes = [], Array.isArray(A)) for (var i = 0, o = A.length; o > i; i++) { t.shapes.push(A[i].uuid) } else t.shapes.push(A.uuid); return void 0 !== e.extrudePath && (t.options.extrudePath = e.extrudePath.toJSON()), t } function _n(A, e) { De.call(this), this.type = "TextGeometry", this.parameters = { text: A, parameters: e }, this.fromBufferGeometry(new $n(A, e)), this.mergeVertices() } function $n(A, e) { var t = (e = e || {}).font; if (!t || !t.isFont) return console.error("THREE.TextGeometry: font parameter is not an instance of THREE.Font."), new De; var i = t.generateShapes(A, e.size); e.depth = void 0 !== e.height ? e.height : 50, void 0 === e.bevelThickness && (e.bevelThickness = 10), void 0 === e.bevelSize && (e.bevelSize = 8), void 0 === e.bevelEnabled && (e.bevelEnabled = !1), zn.call(this, i, e), this.type = "TextBufferGeometry" } function Ar(A, e, t, i, o, n, r) { De.call(this), this.type = "SphereGeometry", this.parameters = { radius: A, widthSegments: e, heightSegments: t, phiStart: i, phiLength: o, thetaStart: n, thetaLength: r }, this.fromBufferGeometry(new er(A, e, t, i, o, n, r)), this.mergeVertices() } function er(A, e, t, i, o, n, r) { he.call(this), this.type = "SphereBufferGeometry", this.parameters = { radius: A, widthSegments: e, heightSegments: t, phiStart: i, phiLength: o, thetaStart: n, thetaLength: r }, A = A || 1, e = Math.max(3, Math.floor(e) || 8), t = Math.max(2, Math.floor(t) || 6), i = void 0 !== i ? i : 0, o = void 0 !== o ? o : 2 * Math.PI, n = void 0 !== n ? n : 0, r = void 0 !== r ? r : Math.PI; var a, s, l = Math.min(n + r, Math.PI), c = 0, h = [], d = new y, p = new y, g = [], u = [], f = [], m = []; for (s = 0; t >= s; s++) { var C = [], v = s / t, I = 0; for (0 == s && 0 == n ? I = .5 / e : s == t && l == Math.PI && (I = -.5 / e), a = 0; e >= a; a++) { var E = a / e; d.x = -A * Math.cos(i + E * o) * Math.sin(n + v * r), d.y = A * Math.cos(n + v * r), d.z = A * Math.sin(i + E * o) * Math.sin(n + v * r), u.push(d.x, d.y, d.z), p.copy(d).normalize(), f.push(p.x, p.y, p.z), m.push(E + I, 1 - v), C.push(c++) } h.push(C) } for (s = 0; t > s; s++) for (a = 0; e > a; a++) { var B = h[s][a], x = h[s + 1][a], S = h[s + 1][a + 1]; (0 !== s || n > 0) && g.push(h[s][a + 1], B, S), (s !== t - 1 || l < Math.PI) && g.push(B, x, S) } this.setIndex(g), this.setAttribute("position", new Ae(u, 3)), this.setAttribute("normal", new Ae(f, 3)), this.setAttribute("uv", new Ae(m, 2)) } function tr(A, e, t, i, o, n) { De.call(this), this.type = "RingGeometry", this.parameters = { innerRadius: A, outerRadius: e, thetaSegments: t, phiSegments: i, thetaStart: o, thetaLength: n }, this.fromBufferGeometry(new ir(A, e, t, i, o, n)), this.mergeVertices() } function ir(A, e, t, i, o, n) { he.call(this), this.type = "RingBufferGeometry", this.parameters = { innerRadius: A, outerRadius: e, thetaSegments: t, phiSegments: i, thetaStart: o, thetaLength: n }, A = A || .5, e = e || 1, o = void 0 !== o ? o : 0, n = void 0 !== n ? n : 2 * Math.PI, t = void 0 !== t ? Math.max(3, t) : 8; var r, a, l, c = [], h = [], d = [], p = [], g = A, u = (e - A) / (i = void 0 !== i ? Math.max(1, i) : 1), f = new y, m = new s; for (a = 0; i >= a; a++) { for (l = 0; t >= l; l++) r = o + l / t * n, f.x = g * Math.cos(r), f.y = g * Math.sin(r), h.push(f.x, f.y, f.z), d.push(0, 0, 1), m.x = (f.x / e + 1) / 2, m.y = (f.y / e + 1) / 2, p.push(m.x, m.y); g += u } for (a = 0; i > a; a++) { var C = a * (t + 1); for (l = 0; t > l; l++) { var v = (r = l + C) + t + 1, I = r + t + 2, E = r + 1; c.push(r, v, E), c.push(v, I, E) } } this.setIndex(c), this.setAttribute("position", new Ae(h, 3)), this.setAttribute("normal", new Ae(d, 3)), this.setAttribute("uv", new Ae(p, 2)) } function or(A, e, t, i) { De.call(this), this.type = "LatheGeometry", this.parameters = { points: A, segments: e, phiStart: t, phiLength: i }, this.fromBufferGeometry(new nr(A, e, t, i)), this.mergeVertices() } function nr(A, e, t, i) { he.call(this), this.type = "LatheBufferGeometry", this.parameters = { points: A, segments: e, phiStart: t, phiLength: i }, e = Math.floor(e) || 12, t = t || 0, i = i || 2 * Math.PI, i = a.clamp(i, 0, 2 * Math.PI); var o, n, r, l = [], c = [], h = [], d = 1 / e, p = new y, g = new s; for (n = 0; e >= n; n++) { var u = t + n * d * i, f = Math.sin(u), m = Math.cos(u); for (r = 0; A.length - 1 >= r; r++) p.x = A[r].x * f, p.y = A[r].y, p.z = A[r].x * m, c.push(p.x, p.y, p.z), g.x = n / e, g.y = r / (A.length - 1), h.push(g.x, g.y) } for (n = 0; e > n; n++) for (r = 0; A.length - 1 > r; r++) { var C = (o = r + n * A.length) + A.length, v = o + A.length + 1, I = o + 1; l.push(o, C, I), l.push(C, v, I) } if (this.setIndex(l), this.setAttribute("position", new Ae(c, 3)), this.setAttribute("uv", new Ae(h, 2)), this.computeVertexNormals(), i === 2 * Math.PI) { var E = this.attributes.normal.array, B = new y, x = new y, S = new y; for (o = e * A.length * 3, n = 0, r = 0; A.length > n; n++, r += 3) B.x = E[r + 0], B.y = E[r + 1], B.z = E[r + 2], x.x = E[o + r + 0], x.y = E[o + r + 1], x.z = E[o + r + 2], S.addVectors(B, x).normalize(), E[r + 0] = E[o + r + 0] = S.x, E[r + 1] = E[o + r + 1] = S.y, E[r + 2] = E[o + r + 2] = S.z } } function rr(A, e) { De.call(this), this.type = "ShapeGeometry", "object" == typeof e && (console.warn("THREE.ShapeGeometry: Options parameter has been removed."), e = e.curveSegments), this.parameters = { shapes: A, curveSegments: e }, this.fromBufferGeometry(new ar(A, e)), this.mergeVertices() } function ar(A, e) { he.call(this), this.type = "ShapeBufferGeometry", this.parameters = { shapes: A, curveSegments: e }, e = e || 12; var t = [], i = [], o = [], n = [], r = 0, a = 0; if (!1 === Array.isArray(A)) l(A); else for (var s = 0; A.length > s; s++) l(A[s]), this.addGroup(r, a, s), r += a, a = 0; function l(A) { var r, s, l, c = i.length / 3, h = A.extractPoints(e), d = h.shape, p = h.holes; for (!1 === Hn.isClockWise(d) && (d = d.reverse()), r = 0, s = p.length; s > r; r++) !0 === Hn.isClockWise(l = p[r]) && (p[r] = l.reverse()); var g = Hn.triangulateShape(d, p); for (r = 0, s = p.length; s > r; r++) d = d.concat(l = p[r]); for (r = 0, s = d.length; s > r; r++) { var u = d[r]; i.push(u.x, u.y, 0), o.push(0, 0, 1), n.push(u.x, u.y) } for (r = 0, s = g.length; s > r; r++) { var f = g[r]; t.push(f[0] + c, f[1] + c, f[2] + c), a += 3 } } this.setIndex(t), this.setAttribute("position", new Ae(i, 3)), this.setAttribute("normal", new Ae(o, 3)), this.setAttribute("uv", new Ae(n, 2)) } function sr(A, e) { if (e.shapes = [], Array.isArray(A)) for (var t = 0, i = A.length; i > t; t++) { e.shapes.push(A[t].uuid) } else e.shapes.push(A.uuid); return e } function lr(A, e) { he.call(this), this.type = "EdgesGeometry", this.parameters = { thresholdAngle: e }, e = void 0 !== e ? e : 1; var t, i, o, n, r = [], s = Math.cos(a.DEG2RAD * e), l = [0, 0], c = {}, h = ["a", "b", "c"]; A.isBufferGeometry ? (n = new De).fromBufferGeometry(A) : n = A.clone(), n.mergeVertices(), n.computeFaceNormals(); for (var d = n.vertices, p = n.faces, g = 0, u = p.length; u > g; g++) for (var f = p[g], m = 0; 3 > m; m++) t = f[h[m]], i = f[h[(m + 1) % 3]], l[0] = Math.min(t, i), l[1] = Math.max(t, i), void 0 === c[o = l[0] + "," + l[1]] ? c[o] = { index1: l[0], index2: l[1], face1: g, face2: void 0 } : c[o].face2 = g; for (o in c) { var C = c[o]; if (void 0 === C.face2 || p[C.face1].normal.dot(p[C.face2].normal) <= s) { var y = d[C.index1]; r.push(y.x, y.y, y.z), r.push((y = d[C.index2]).x, y.y, y.z) } } this.setAttribute("position", new Ae(r, 3)) } function cr(A, e, t, i, o, n, r, a) { De.call(this), this.type = "CylinderGeometry", this.parameters = { radiusTop: A, radiusBottom: e, height: t, radialSegments: i, heightSegments: o, openEnded: n, thetaStart: r, thetaLength: a }, this.fromBufferGeometry(new hr(A, e, t, i, o, n, r, a)), this.mergeVertices() } function hr(A, e, t, i, o, n, r, a) { he.call(this), this.type = "CylinderBufferGeometry", this.parameters = { radiusTop: A, radiusBottom: e, height: t, radialSegments: i, heightSegments: o, openEnded: n, thetaStart: r, thetaLength: a }; var l = this; A = void 0 !== A ? A : 1, e = void 0 !== e ? e : 1, t = t || 1, i = Math.floor(i) || 8, o = Math.floor(o) || 1, n = void 0 !== n && n, r = void 0 !== r ? r : 0, a = void 0 !== a ? a : 2 * Math.PI; var c = [], h = [], d = [], p = [], g = 0, u = [], f = t / 2, m = 0; function C(t) { var o, n, u, C = new s, v = new y, I = 0, E = !0 === t ? A : e, B = !0 === t ? 1 : -1; for (n = g, o = 1; i >= o; o++) h.push(0, f * B, 0), d.push(0, B, 0), p.push(.5, .5), g++; for (u = g, o = 0; i >= o; o++) { var x = o / i * a + r, S = Math.cos(x), w = Math.sin(x); v.x = E * w, v.y = f * B, v.z = E * S, h.push(v.x, v.y, v.z), d.push(0, B, 0), C.x = .5 * S + .5, C.y = .5 * w * B + .5, p.push(C.x, C.y), g++ } for (o = 0; i > o; o++) { var M = n + o, b = u + o; !0 === t ? c.push(b, b + 1, M) : c.push(b + 1, b, M), I += 3 } l.addGroup(m, I, !0 === t ? 1 : 2), m += I }! function () { var n, s, C = new y, v = new y, I = 0, E = (e - A) / t; for (s = 0; o >= s; s++) { var B = [], x = s / o, S = x * (e - A) + A; for (n = 0; i >= n; n++) { var w = n / i, M = w * a + r, b = Math.sin(M), U = Math.cos(M); v.x = S * b, v.y = -x * t + f, v.z = S * U, h.push(v.x, v.y, v.z), C.set(b, E, U).normalize(), d.push(C.x, C.y, C.z), p.push(w, 1 - x), B.push(g++) } u.push(B) } for (n = 0; i > n; n++) for (s = 0; o > s; s++) { var F = u[s + 1][n], K = u[s + 1][n + 1], Q = u[s][n + 1]; c.push(u[s][n], F, Q), c.push(F, K, Q), I += 6 } l.addGroup(m, I, 0), m += I }(), !1 === n && (A > 0 && C(!0), e > 0 && C(!1)), this.setIndex(c), this.setAttribute("position", new Ae(h, 3)), this.setAttribute("normal", new Ae(d, 3)), this.setAttribute("uv", new Ae(p, 2)) } function dr(A, e, t, i, o, n, r) { cr.call(this, 0, A, e, t, i, o, n, r), this.type = "ConeGeometry", this.parameters = { radius: A, height: e, radialSegments: t, heightSegments: i, openEnded: o, thetaStart: n, thetaLength: r } } function pr(A, e, t, i, o, n, r) { hr.call(this, 0, A, e, t, i, o, n, r), this.type = "ConeBufferGeometry", this.parameters = { radius: A, height: e, radialSegments: t, heightSegments: i, openEnded: o, thetaStart: n, thetaLength: r } } function gr(A, e, t, i) { De.call(this), this.type = "CircleGeometry", this.parameters = { radius: A, segments: e, thetaStart: t, thetaLength: i }, this.fromBufferGeometry(new ur(A, e, t, i)), this.mergeVertices() } function ur(A, e, t, i) { he.call(this), this.type = "CircleBufferGeometry", this.parameters = { radius: A, segments: e, thetaStart: t, thetaLength: i }, A = A || 1, e = void 0 !== e ? Math.max(3, e) : 8, t = void 0 !== t ? t : 0, i = void 0 !== i ? i : 2 * Math.PI; var o, n, r = [], a = [], l = [], c = [], h = new y, d = new s; for (a.push(0, 0, 0), l.push(0, 0, 1), c.push(.5, .5), n = 0, o = 3; e >= n; n++, o += 3) { var p = t + n / e * i; h.x = A * Math.cos(p), h.y = A * Math.sin(p), a.push(h.x, h.y, h.z), l.push(0, 0, 1), d.x = (a[o] / A + 1) / 2, d.y = (a[o + 1] / A + 1) / 2, c.push(d.x, d.y) } for (o = 1; e >= o; o++) r.push(o, o + 1, 0); this.setIndex(r), this.setAttribute("position", new Ae(a, 3)), this.setAttribute("normal", new Ae(l, 3)), this.setAttribute("uv", new Ae(c, 2)) } (_n.prototype = Object.create(De.prototype)).constructor = _n, ($n.prototype = Object.create(zn.prototype)).constructor = $n, (Ar.prototype = Object.create(De.prototype)).constructor = Ar, (er.prototype = Object.create(he.prototype)).constructor = er, (tr.prototype = Object.create(De.prototype)).constructor = tr, (ir.prototype = Object.create(he.prototype)).constructor = ir, (or.prototype = Object.create(De.prototype)).constructor = or, (nr.prototype = Object.create(he.prototype)).constructor = nr, (rr.prototype = Object.create(De.prototype)).constructor = rr, rr.prototype.toJSON = function () { var A = De.prototype.toJSON.call(this); return sr(this.parameters.shapes, A) }, (ar.prototype = Object.create(he.prototype)).constructor = ar, ar.prototype.toJSON = function () { var A = he.prototype.toJSON.call(this); return sr(this.parameters.shapes, A) }, (lr.prototype = Object.create(he.prototype)).constructor = lr, (cr.prototype = Object.create(De.prototype)).constructor = cr, (hr.prototype = Object.create(he.prototype)).constructor = hr, (dr.prototype = Object.create(cr.prototype)).constructor = dr, (pr.prototype = Object.create(hr.prototype)).constructor = pr, (gr.prototype = Object.create(De.prototype)).constructor = gr, (ur.prototype = Object.create(he.prototype)).constructor = ur; var fr = Object.freeze({ __proto__: null, WireframeGeometry: on, ParametricGeometry: nn, ParametricBufferGeometry: rn, TetrahedronGeometry: ln, TetrahedronBufferGeometry: cn, OctahedronGeometry: hn, OctahedronBufferGeometry: dn, IcosahedronGeometry: pn, IcosahedronBufferGeometry: gn, DodecahedronGeometry: un, DodecahedronBufferGeometry: fn, PolyhedronGeometry: an, PolyhedronBufferGeometry: sn, TubeGeometry: mn, TubeBufferGeometry: Cn, TorusKnotGeometry: yn, TorusKnotBufferGeometry: vn, TorusGeometry: In, TorusBufferGeometry: En, TextGeometry: _n, TextBufferGeometry: $n, SphereGeometry: Ar, SphereBufferGeometry: er, RingGeometry: tr, RingBufferGeometry: ir, PlaneGeometry: At, PlaneBufferGeometry: et, LatheGeometry: or, LatheBufferGeometry: nr, ShapeGeometry: rr, ShapeBufferGeometry: ar, ExtrudeGeometry: Jn, ExtrudeBufferGeometry: zn, EdgesGeometry: lr, ConeGeometry: dr, ConeBufferGeometry: pr, CylinderGeometry: cr, CylinderBufferGeometry: hr, CircleGeometry: gr, CircleBufferGeometry: ur, BoxGeometry: Le, BoxBufferGeometry: Ne }); function mr(A) { qA.call(this), this.type = "ShadowMaterial", this.color = new LA(0), this.transparent = !0, this.setValues(A) } function Cr(A) { Pe.call(this, A), this.type = "RawShaderMaterial" } function yr(A) { qA.call(this), this.defines = { STANDARD: "" }, this.type = "MeshStandardMaterial", this.color = new LA(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 LA(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new s(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.roughnessMap = null, this.metalnessMap = null, this.alphaMap = null, this.envMap = null, this.envMapIntensity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.vertexTangents = !1, this.setValues(A) } function vr(A) { yr.call(this), this.defines = { STANDARD: "", PHYSICAL: "" }, this.type = "MeshPhysicalMaterial", this.clearcoat = 0, this.clearcoatMap = null, this.clearcoatRoughness = 0, this.clearcoatRoughnessMap = null, this.clearcoatNormalScale = new s(1, 1), this.clearcoatNormalMap = null, this.reflectivity = .5, this.sheen = null, this.transparency = 0, this.setValues(A) } function Ir(A) { qA.call(this), this.type = "MeshPhongMaterial", this.color = new LA(16777215), this.specular = new LA(1118481), this.shininess = 30, this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new LA(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new s(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(A) } function Er(A) { qA.call(this), this.defines = { TOON: "" }, this.type = "MeshToonMaterial", this.color = new LA(16777215), this.specular = new LA(1118481), this.shininess = 30, this.map = null, this.gradientMap = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new LA(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new s(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.specularMap = null, 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(A) } function Br(A) { qA.call(this), this.type = "MeshNormalMaterial", this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new s(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(A) } function xr(A) { qA.call(this), this.type = "MeshLambertMaterial", this.color = new LA(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new LA(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(A) } function Sr(A) { qA.call(this), this.defines = { MATCAP: "" }, this.type = "MeshMatcapMaterial", this.color = new LA(16777215), this.matcap = null, this.map = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new s(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(A) } function wr(A) { ko.call(this), this.type = "LineDashedMaterial", this.scale = 1, this.dashSize = 3, this.gapSize = 1, this.setValues(A) } (mr.prototype = Object.create(qA.prototype)).constructor = mr, mr.prototype.isShadowMaterial = !0, mr.prototype.copy = function (A) { return qA.prototype.copy.call(this, A), this.color.copy(A.color), this }, (Cr.prototype = Object.create(Pe.prototype)).constructor = Cr, Cr.prototype.isRawShaderMaterial = !0, (yr.prototype = Object.create(qA.prototype)).constructor = yr, yr.prototype.isMeshStandardMaterial = !0, yr.prototype.copy = function (A) { return qA.prototype.copy.call(this, A), this.defines = { STANDARD: "" }, this.color.copy(A.color), this.roughness = A.roughness, this.metalness = A.metalness, this.map = A.map, this.lightMap = A.lightMap, this.lightMapIntensity = A.lightMapIntensity, this.aoMap = A.aoMap, this.aoMapIntensity = A.aoMapIntensity, this.emissive.copy(A.emissive), this.emissiveMap = A.emissiveMap, this.emissiveIntensity = A.emissiveIntensity, this.bumpMap = A.bumpMap, this.bumpScale = A.bumpScale, this.normalMap = A.normalMap, this.normalMapType = A.normalMapType, this.normalScale.copy(A.normalScale), this.displacementMap = A.displacementMap, this.displacementScale = A.displacementScale, this.displacementBias = A.displacementBias, this.roughnessMap = A.roughnessMap, this.metalnessMap = A.metalnessMap, this.alphaMap = A.alphaMap, this.envMap = A.envMap, this.envMapIntensity = A.envMapIntensity, this.refractionRatio = A.refractionRatio, this.wireframe = A.wireframe, this.wireframeLinewidth = A.wireframeLinewidth, this.wireframeLinecap = A.wireframeLinecap, this.wireframeLinejoin = A.wireframeLinejoin, this.skinning = A.skinning, this.morphTargets = A.morphTargets, this.morphNormals = A.morphNormals, this.vertexTangents = A.vertexTangents, this }, (vr.prototype = Object.create(yr.prototype)).constructor = vr, vr.prototype.isMeshPhysicalMaterial = !0, vr.prototype.copy = function (A) { return yr.prototype.copy.call(this, A), this.defines = { STANDARD: "", PHYSICAL: "" }, this.clearcoat = A.clearcoat, this.clearcoatMap = A.clearcoatMap, this.clearcoatRoughness = A.clearcoatRoughness, this.clearcoatRoughnessMap = A.clearcoatRoughnessMap, this.clearcoatNormalMap = A.clearcoatNormalMap, this.clearcoatNormalScale.copy(A.clearcoatNormalScale), this.reflectivity = A.reflectivity, this.sheen = A.sheen ? (this.sheen || new LA).copy(A.sheen) : null, this.transparency = A.transparency, this }, (Ir.prototype = Object.create(qA.prototype)).constructor = Ir, Ir.prototype.isMeshPhongMaterial = !0, Ir.prototype.copy = function (A) { return qA.prototype.copy.call(this, A), this.color.copy(A.color), this.specular.copy(A.specular), this.shininess = A.shininess, this.map = A.map, this.lightMap = A.lightMap, this.lightMapIntensity = A.lightMapIntensity, this.aoMap = A.aoMap, this.aoMapIntensity = A.aoMapIntensity, this.emissive.copy(A.emissive), this.emissiveMap = A.emissiveMap, this.emissiveIntensity = A.emissiveIntensity, this.bumpMap = A.bumpMap, this.bumpScale = A.bumpScale, this.normalMap = A.normalMap, this.normalMapType = A.normalMapType, this.normalScale.copy(A.normalScale), this.displacementMap = A.displacementMap, this.displacementScale = A.displacementScale, this.displacementBias = A.displacementBias, this.specularMap = A.specularMap, this.alphaMap = A.alphaMap, this.envMap = A.envMap, this.combine = A.combine, this.reflectivity = A.reflectivity, this.refractionRatio = A.refractionRatio, this.wireframe = A.wireframe, this.wireframeLinewidth = A.wireframeLinewidth, this.wireframeLinecap = A.wireframeLinecap, this.wireframeLinejoin = A.wireframeLinejoin, this.skinning = A.skinning, this.morphTargets = A.morphTargets, this.morphNormals = A.morphNormals, this }, (Er.prototype = Object.create(qA.prototype)).constructor = Er, Er.prototype.isMeshToonMaterial = !0, Er.prototype.copy = function (A) { return qA.prototype.copy.call(this, A), this.color.copy(A.color), this.specular.copy(A.specular), this.shininess = A.shininess, this.map = A.map, this.gradientMap = A.gradientMap, this.lightMap = A.lightMap, this.lightMapIntensity = A.lightMapIntensity, this.aoMap = A.aoMap, this.aoMapIntensity = A.aoMapIntensity, this.emissive.copy(A.emissive), this.emissiveMap = A.emissiveMap, this.emissiveIntensity = A.emissiveIntensity, this.bumpMap = A.bumpMap, this.bumpScale = A.bumpScale, this.normalMap = A.normalMap, this.normalMapType = A.normalMapType, this.normalScale.copy(A.normalScale), this.displacementMap = A.displacementMap, this.displacementScale = A.displacementScale, this.displacementBias = A.displacementBias, this.specularMap = A.specularMap, this.alphaMap = A.alphaMap, this.wireframe = A.wireframe, this.wireframeLinewidth = A.wireframeLinewidth, this.wireframeLinecap = A.wireframeLinecap, this.wireframeLinejoin = A.wireframeLinejoin, this.skinning = A.skinning, this.morphTargets = A.morphTargets, this.morphNormals = A.morphNormals, this }, (Br.prototype = Object.create(qA.prototype)).constructor = Br, Br.prototype.isMeshNormalMaterial = !0, Br.prototype.copy = function (A) { return qA.prototype.copy.call(this, A), this.bumpMap = A.bumpMap, this.bumpScale = A.bumpScale, this.normalMap = A.normalMap, this.normalMapType = A.normalMapType, this.normalScale.copy(A.normalScale), this.displacementMap = A.displacementMap, this.displacementScale = A.displacementScale, this.displacementBias = A.displacementBias, this.wireframe = A.wireframe, this.wireframeLinewidth = A.wireframeLinewidth, this.skinning = A.skinning, this.morphTargets = A.morphTargets, this.morphNormals = A.morphNormals, this }, (xr.prototype = Object.create(qA.prototype)).constructor = xr, xr.prototype.isMeshLambertMaterial = !0, xr.prototype.copy = function (A) { return qA.prototype.copy.call(this, A), this.color.copy(A.color), this.map = A.map, this.lightMap = A.lightMap, this.lightMapIntensity = A.lightMapIntensity, this.aoMap = A.aoMap, this.aoMapIntensity = A.aoMapIntensity, this.emissive.copy(A.emissive), this.emissiveMap = A.emissiveMap, this.emissiveIntensity = A.emissiveIntensity, this.specularMap = A.specularMap, this.alphaMap = A.alphaMap, this.envMap = A.envMap, this.combine = A.combine, this.reflectivity = A.reflectivity, this.refractionRatio = A.refractionRatio, this.wireframe = A.wireframe, this.wireframeLinewidth = A.wireframeLinewidth, this.wireframeLinecap = A.wireframeLinecap, this.wireframeLinejoin = A.wireframeLinejoin, this.skinning = A.skinning, this.morphTargets = A.morphTargets, this.morphNormals = A.morphNormals, this }, (Sr.prototype = Object.create(qA.prototype)).constructor = Sr, Sr.prototype.isMeshMatcapMaterial = !0, Sr.prototype.copy = function (A) { return qA.prototype.copy.call(this, A), this.defines = { MATCAP: "" }, this.color.copy(A.color), this.matcap = A.matcap, this.map = A.map, this.bumpMap = A.bumpMap, this.bumpScale = A.bumpScale, this.normalMap = A.normalMap, this.normalMapType = A.normalMapType, this.normalScale.copy(A.normalScale), this.displacementMap = A.displacementMap, this.displacementScale = A.displacementScale, this.displacementBias = A.displacementBias, this.alphaMap = A.alphaMap, this.skinning = A.skinning, this.morphTargets = A.morphTargets, this.morphNormals = A.morphNormals, this }, (wr.prototype = Object.create(ko.prototype)).constructor = wr, wr.prototype.isLineDashedMaterial = !0, wr.prototype.copy = function (A) { return ko.prototype.copy.call(this, A), this.scale = A.scale, this.dashSize = A.dashSize, this.gapSize = A.gapSize, this }; var Mr = Object.freeze({ __proto__: null, ShadowMaterial: mr, SpriteMaterial: ro, RawShaderMaterial: Cr, ShaderMaterial: Pe, PointsMaterial: Yo, MeshPhysicalMaterial: vr, MeshStandardMaterial: yr, MeshPhongMaterial: Ir, MeshToonMaterial: Er, MeshNormalMaterial: Br, MeshLambertMaterial: xr, MeshDepthMaterial: ji, MeshDistanceMaterial: Hi, MeshBasicMaterial: jA, MeshMatcapMaterial: Sr, LineDashedMaterial: wr, LineBasicMaterial: ko, Material: qA }), br = { arraySlice: function (A, e, t) { return br.isTypedArray(A) ? new A.constructor(A.subarray(e, void 0 !== t ? t : A.length)) : A.slice(e, t) }, convertArray: function (A, e, t) { return !A || !t && A.constructor === e ? A : "number" == typeof e.BYTES_PER_ELEMENT ? new e(A) : Array.prototype.slice.call(A) }, isTypedArray: function (A) { return ArrayBuffer.isView(A) && !(A instanceof DataView) }, getKeyframeOrder: function (A) { for (var e = A.length, t = new Array(e), i = 0; i !== e; ++i) t[i] = i; return t.sort((function (e, t) { return A[e] - A[t] })), t }, sortedArray: function (A, e, t) { for (var i = A.length, o = new A.constructor(i), n = 0, r = 0; r !== i; ++n) for (var a = t[n] * e, s = 0; s !== e; ++s) o[r++] = A[a + s]; return o }, flattenJSON: function (A, e, t, i) { for (var o = 1, n = A[0]; void 0 !== n && void 0 === n[i];) n = A[o++]; if (void 0 !== n) { var r = n[i]; if (void 0 !== r) if (Array.isArray(r)) do { void 0 !== (r = n[i]) && (e.push(n.time), t.push.apply(t, r)), n = A[o++] } while (void 0 !== n); else if (void 0 !== r.toArray) do { void 0 !== (r = n[i]) && (e.push(n.time), r.toArray(t, t.length)), n = A[o++] } while (void 0 !== n); else do { void 0 !== (r = n[i]) && (e.push(n.time), t.push(r)), n = A[o++] } while (void 0 !== n) } }, subclip: function (A, e, t, i, o) { o = o || 30; var n = A.clone(); n.name = e; for (var r = [], a = 0; n.tracks.length > a; ++a) { for (var s = n.tracks[a], l = s.getValueSize(), c = [], h = [], d = 0; s.times.length > d; ++d) { var p = s.times[d] * o; if (p >= t && i > p) { c.push(s.times[d]); for (var g = 0; l > g; ++g) h.push(s.values[d * l + g]) } } 0 !== c.length && (s.times = br.convertArray(c, s.times.constructor), s.values = br.convertArray(h, s.values.constructor), r.push(s)) } n.tracks = r; var u = 1 / 0; for (a = 0; n.tracks.length > a; ++a) u > n.tracks[a].times[0] && (u = n.tracks[a].times[0]); for (a = 0; n.tracks.length > a; ++a) n.tracks[a].shift(-1 * u); return n.resetDuration(), n } }; function Ur(A, e, t, i) { this.parameterPositions = A, this._cachedIndex = 0, this.resultBuffer = void 0 !== i ? i : new e.constructor(t), this.sampleValues = e, this.valueSize = t } function Fr(A, e, t, i) { Ur.call(this, A, e, t, i), this._weightPrev = -0, this._offsetPrev = -0, this._weightNext = -0, this._offsetNext = -0 } function Kr(A, e, t, i) { Ur.call(this, A, e, t, i) } function Qr(A, e, t, i) { Ur.call(this, A, e, t, i) } function Rr(A, e, t, i) { if (void 0 === A) throw new Error("THREE.KeyframeTrack: track name is undefined"); if (void 0 === e || 0 === e.length) throw new Error("THREE.KeyframeTrack: no keyframes in track named " + A); this.name = A, this.times = br.convertArray(e, this.TimeBufferType), this.values = br.convertArray(t, this.ValueBufferType), this.setInterpolation(i || this.DefaultInterpolation) } function Tr(A, e, t) { Rr.call(this, A, e, t) } function kr(A, e, t, i) { Rr.call(this, A, e, t, i) } function Dr(A, e, t, i) { Rr.call(this, A, e, t, i) } function Lr(A, e, t, i) { Ur.call(this, A, e, t, i) } function Nr(A, e, t, i) { Rr.call(this, A, e, t, i) } function Or(A, e, t, i) { Rr.call(this, A, e, t, i) } function Vr(A, e, t, i) { Rr.call(this, A, e, t, i) } function Gr(A, e, t) { this.name = A, this.tracks = t, this.duration = void 0 !== e ? e : -1, this.uuid = a.generateUUID(), 0 > this.duration && this.resetDuration() } function Pr(A) { if (void 0 === A.type) throw new Error("THREE.KeyframeTrack: track type undefined, can not parse"); var e = function (A) { switch (A.toLowerCase()) { case "scalar": case "double": case "float": case "number": case "integer": return Dr; case "vector": case "vector2": case "vector3": case "vector4": return Vr; case "color": return kr; case "quaternion": return Nr; case "bool": case "boolean": return Tr; case "string": return Or } throw new Error("THREE.KeyframeTrack: Unsupported typeName: " + A) }(A.type); if (void 0 === A.times) { var t = [], i = []; br.flattenJSON(A.keys, t, i, "value"), A.times = t, A.values = i } return void 0 !== e.parse ? e.parse(A) : new e(A.name, A.times, A.values, A.interpolation) } Object.assign(Ur.prototype, { evaluate: function (A) { var e = this.parameterPositions, t = this._cachedIndex, i = e[t], o = e[t - 1]; A: { e: { var n; t: { i: if (i <= A) { for (var r = t + 2;;) { if (void 0 === i) { if (o > A) break i; return this._cachedIndex = t = e.length, this.afterEnd_(t - 1, A, o) } if (t === r) break; if (o = i, (i = e[++t]) > A) break e } n = e.length; break t } if (A >= o) break A; var a = e[1]; a > A && (t = 2, o = a); for (r = t - 2;;) { if (void 0 === o) return this._cachedIndex = 0, this.beforeStart_(0, A, i); if (t === r) break; if (i = o, A >= (o = e[--t - 1])) break e } n = t, t = 0 } for (; n > t;) { var s = t + n >>> 1; e[s] > A ? n = s : t = s + 1 } if (i = e[t], void 0 === (o = e[t - 1])) return this._cachedIndex = 0, this.beforeStart_(0, A, i); if (void 0 === i) return this._cachedIndex = t = e.length, this.afterEnd_(t - 1, o, A) } this._cachedIndex = t, this.intervalChanged_(t, o, i) } return this.interpolate_(t, o, A, i) }, settings: null, DefaultSettings_: {}, getSettings_: function () { return this.settings || this.DefaultSettings_ }, copySampleValue_: function (A) { for (var e = this.resultBuffer, t = this.sampleValues, i = this.valueSize, o = A * i, n = 0; n !== i; ++n) e[n] = t[o + n]; return e }, interpolate_: function () { throw new Error("call to abstract method") }, intervalChanged_: function () {} }), Object.assign(Ur.prototype, { beforeStart_: Ur.prototype.copySampleValue_, afterEnd_: Ur.prototype.copySampleValue_ }), Fr.prototype = Object.assign(Object.create(Ur.prototype), { constructor: Fr, DefaultSettings_: { endingStart: 2400, endingEnd: 2400 }, intervalChanged_: function (A, e, t) { var i = this.parameterPositions, o = A - 2, n = A + 1, r = i[o], a = i[n]; if (void 0 === r) switch (this.getSettings_().endingStart) { case 2401: o = A, r = 2 * e - t; break; case 2402: r = e + i[o = i.length - 2] - i[o + 1]; break; default: o = A, r = t } if (void 0 === a) switch (this.getSettings_().endingEnd) { case 2401: n = A, a = 2 * t - e; break; case 2402: n = 1, a = t + i[1] - i[0]; break; default: n = A - 1, a = e } var s = .5 * (t - e), l = this.valueSize; this._weightPrev = s / (e - r), this._weightNext = s / (a - t), this._offsetPrev = o * l, this._offsetNext = n * l }, interpolate_: function (A, e, t, i) { for (var o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, a = A * r, s = a - r, l = this._offsetPrev, c = this._offsetNext, h = this._weightPrev, d = this._weightNext, p = (t - e) / (i - e), g = p * p, u = g * p, f = -h * u + 2 * h * g - h * p, m = (1 + h) * u + (-1.5 - 2 * h) * g + (-.5 + h) * p + 1, C = (-1 - d) * u + (1.5 + d) * g + .5 * p, y = d * u - d * g, v = 0; v !== r; ++v) o[v] = f * n[l + v] + m * n[s + v] + C * n[a + v] + y * n[c + v]; return o } }), Kr.prototype = Object.assign(Object.create(Ur.prototype), { constructor: Kr, interpolate_: function (A, e, t, i) { for (var o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, a = A * r, s = a - r, l = (t - e) / (i - e), c = 1 - l, h = 0; h !== r; ++h) o[h] = n[s + h] * c + n[a + h] * l; return o } }), Qr.prototype = Object.assign(Object.create(Ur.prototype), { constructor: Qr, interpolate_: function (A) { return this.copySampleValue_(A - 1) } }), Object.assign(Rr, { toJSON: function (A) { var e, t = A.constructor; if (void 0 !== t.toJSON) e = t.toJSON(A); else { e = { name: A.name, times: br.convertArray(A.times, Array), values: br.convertArray(A.values, Array) }; var i = A.getInterpolation(); i !== A.DefaultInterpolation && (e.interpolation = i) } return e.type = A.ValueTypeName, e } }), Object.assign(Rr.prototype, { constructor: Rr, TimeBufferType: Float32Array, ValueBufferType: Float32Array, DefaultInterpolation: 2301, InterpolantFactoryMethodDiscrete: function (A) { return new Qr(this.times, this.values, this.getValueSize(), A) }, InterpolantFactoryMethodLinear: function (A) { return new Kr(this.times, this.values, this.getValueSize(), A) }, InterpolantFactoryMethodSmooth: function (A) { return new Fr(this.times, this.values, this.getValueSize(), A) }, setInterpolation: function (A) { var e; switch (A) { case 2300: e = this.InterpolantFactoryMethodDiscrete; break; case 2301: e = this.InterpolantFactoryMethodLinear; break; case 2302: e = this.InterpolantFactoryMethodSmooth } if (void 0 === e) { var t = "unsupported interpolation for " + this.ValueTypeName + " keyframe track named " + this.name; if (void 0 === this.createInterpolant) { if (A === this.DefaultInterpolation) throw new Error(t); this.setInterpolation(this.DefaultInterpolation) } return console.warn("THREE.KeyframeTrack:", t), this } return this.createInterpolant = e, this }, getInterpolation: function () { switch (this.createInterpolant) { case this.InterpolantFactoryMethodDiscrete: return 2300; case this.InterpolantFactoryMethodLinear: return 2301; case this.InterpolantFactoryMethodSmooth: return 2302 } }, getValueSize: function () { return this.values.length / this.times.length }, shift: function (A) { if (0 !== A) for (var e = this.times, t = 0, i = e.length; t !== i; ++t) e[t] += A; return this }, scale: function (A) { if (1 !== A) for (var e = this.times, t = 0, i = e.length; t !== i; ++t) e[t] *= A; return this }, trim: function (A, e) { for (var t = this.times, i = t.length, o = 0, n = i - 1; o !== i && A > t[o];) ++o; for (; - 1 !== n && t[n] > e;) --n; if (++n, 0 !== o || n !== i) { n > o || (o = (n = Math.max(n, 1)) - 1); var r = this.getValueSize(); this.times = br.arraySlice(t, o, n), this.values = br.arraySlice(this.values, o * r, n * r) } return this }, validate: function () { var A = !0, e = this.getValueSize(); e - Math.floor(e) != 0 && (console.error("THREE.KeyframeTrack: Invalid value size in track.", this), A = !1); var t = this.times, i = this.values, o = t.length; 0 === o && (console.error("THREE.KeyframeTrack: Track is empty.", this), A = !1); for (var n = null, r = 0; r !== o; r++) { var a = t[r]; if ("number" == typeof a && isNaN(a)) { console.error("THREE.KeyframeTrack: Time is not a valid number.", this, r, a), A = !1; break } if (null !== n && n > a) { console.error("THREE.KeyframeTrack: Out of order keys.", this, r, a, n), A = !1; break } n = a } if (void 0 !== i && br.isTypedArray(i)) { r = 0; for (var s = i.length; r !== s; ++r) { var l = i[r]; if (isNaN(l)) { console.error("THREE.KeyframeTrack: Value is not a valid number.", this, r, l), A = !1; break } } } return A }, optimize: function () { for (var A = br.arraySlice(this.times), e = br.arraySlice(this.values), t = this.getValueSize(), i = 2302 === this.getInterpolation(), o = 1, n = A.length - 1, r = 1; n > r; ++r) { var a = !1, s = A[r]; if (s !== A[r + 1] && (1 !== r || s !== s[0])) if (i) a = !0; else for (var l = r * t, c = l - t, h = l + t, d = 0; d !== t; ++d) { var p = e[l + d]; if (p !== e[c + d] || p !== e[h + d]) { a = !0; break } } if (a) { if (r !== o) { A[o] = A[r]; var g = r * t, u = o * t; for (d = 0; d !== t; ++d) e[u + d] = e[g + d] } ++o } } if (n > 0) { A[o] = A[n]; for (g = n * t, u = o * t, d = 0; d !== t; ++d) e[u + d] = e[g + d]; ++o } return o !== A.length ? (this.times = br.arraySlice(A, 0, o), this.values = br.arraySlice(e, 0, o * t)) : (this.times = A, this.values = e), this }, clone: function () { var A = br.arraySlice(this.times, 0), e = br.arraySlice(this.values, 0), t = new(0, this.constructor)(this.name, A, e); return t.createInterpolant = this.createInterpolant, t } }), Tr.prototype = Object.assign(Object.create(Rr.prototype), { constructor: Tr, ValueTypeName: "bool", ValueBufferType: Array, DefaultInterpolation: 2300, InterpolantFactoryMethodLinear: void 0, InterpolantFactoryMethodSmooth: void 0 }), kr.prototype = Object.assign(Object.create(Rr.prototype), { constructor: kr, ValueTypeName: "color" }), Dr.prototype = Object.assign(Object.create(Rr.prototype), { constructor: Dr, ValueTypeName: "number" }), Lr.prototype = Object.assign(Object.create(Ur.prototype), { constructor: Lr, interpolate_: function (A, e, t, i) { for (var o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, a = A * r, s = (t - e) / (i - e), l = a + r; a !== l; a += 4) f.slerpFlat(o, 0, n, a - r, n, a, s); return o } }), Nr.prototype = Object.assign(Object.create(Rr.prototype), { constructor: Nr, ValueTypeName: "quaternion", DefaultInterpolation: 2301, InterpolantFactoryMethodLinear: function (A) { return new Lr(this.times, this.values, this.getValueSize(), A) }, InterpolantFactoryMethodSmooth: void 0 }), Or.prototype = Object.assign(Object.create(Rr.prototype), { constructor: Or, ValueTypeName: "string", ValueBufferType: Array, DefaultInterpolation: 2300, InterpolantFactoryMethodLinear: void 0, InterpolantFactoryMethodSmooth: void 0 }), Vr.prototype = Object.assign(Object.create(Rr.prototype), { constructor: Vr, ValueTypeName: "vector" }), Object.assign(Gr, { parse: function (A) { for (var e = [], t = A.tracks, i = 1 / (A.fps || 1), o = 0, n = t.length; o !== n; ++o) e.push(Pr(t[o]).scale(i)); return new Gr(A.name, A.duration, e) }, toJSON: function (A) { for (var e = [], t = A.tracks, i = { name: A.name, duration: A.duration, tracks: e, uuid: A.uuid }, o = 0, n = t.length; o !== n; ++o) e.push(Rr.toJSON(t[o])); return i }, CreateFromMorphTargetSequence: function (A, e, t, i) { for (var o = e.length, n = [], r = 0; o > r; r++) { var a = [], s = []; a.push((r + o - 1) % o, r, (r + 1) % o), s.push(0, 1, 0); var l = br.getKeyframeOrder(a); a = br.sortedArray(a, 1, l), s = br.sortedArray(s, 1, l), i || 0 !== a[0] || (a.push(o), s.push(s[0])), n.push(new Dr(".morphTargetInfluences[" + e[r].name + "]", a, s).scale(1 / t)) } return new Gr(A, -1, n) }, findByName: function (A, e) { var t = A; if (!Array.isArray(A)) { t = A.geometry && A.geometry.animations || A.animations } for (var i = 0; t.length > i; i++) if (t[i].name === e) return t[i]; return null }, CreateClipsFromMorphTargetSequences: function (A, e, t) { for (var i = {}, o = /^([\w-]*?)([\d]+)$/, n = 0, r = A.length; r > n; n++) { var a = A[n], s = a.name.match(o); if (s && s.length > 1) { var l = i[h = s[1]]; l || (i[h] = l = []), l.push(a) } } var c = []; for (var h in i) c.push(Gr.CreateFromMorphTargetSequence(h, i[h], e, t)); return c }, parseAnimation: function (A, e) { if (!A) return console.error("THREE.AnimationClip: No animation in JSONLoader data."), null; for (var t = function (A, e, t, i, o) { if (0 !== t.length) { var n = [], r = []; br.flattenJSON(t, n, r, i), 0 !== n.length && o.push(new A(e, n, r)) } }, i = [], o = A.name || "default", n = A.length || -1, r = A.fps || 30, a = A.hierarchy || [], s = 0; a.length > s; s++) { var l = a[s].keys; if (l && 0 !== l.length) if (l[0].morphTargets) { for (var c = {}, h = 0; l.length > h; h++) if (l[h].morphTargets) for (var d = 0; l[h].morphTargets.length > d; d++) c[l[h].morphTargets[d]] = -1; for (var p in c) { var g = [], u = []; for (d = 0; d !== l[h].morphTargets.length; ++d) { var f = l[h]; g.push(f.time), u.push(f.morphTarget === p ? 1 : 0) } i.push(new Dr(".morphTargetInfluence[" + p + "]", g, u)) } n = c.length * (r || 1) } else { var m = ".bones[" + e[s].name + "]"; t(Vr, m + ".position", l, "pos", i), t(Nr, m + ".quaternion", l, "rot", i), t(Vr, m + ".scale", l, "scl", i) } } return 0 === i.length ? null : new Gr(o, n, i) } }), Object.assign(Gr.prototype, { resetDuration: function () { for (var A = 0, e = 0, t = this.tracks.length; e !== t; ++e) { var i = this.tracks[e]; A = Math.max(A, i.times[i.times.length - 1]) } return this.duration = A, this }, trim: function () { for (var A = 0; this.tracks.length > A; A++) this.tracks[A].trim(0, this.duration); return this }, validate: function () { for (var A = !0, e = 0; this.tracks.length > e; e++) A = A && this.tracks[e].validate(); return A }, optimize: function () { for (var A = 0; this.tracks.length > A; A++) this.tracks[A].optimize(); return this }, clone: function () { for (var A = [], e = 0; this.tracks.length > e; e++) A.push(this.tracks[e].clone()); return new Gr(this.name, this.duration, A) } }); var qr = { enabled: !1, files: {}, add: function (A, e) { !1 !== this.enabled && (this.files[A] = e) }, get: function (A) { if (!1 !== this.enabled) return this.files[A] }, remove: function (A) { delete this.files[A] }, clear: function () { this.files = {} } }; function jr(A, e, t) { var i = this, o = !1, n = 0, r = 0, a = void 0, s = []; this.onStart = void 0, this.onLoad = A, this.onProgress = e, this.onError = t, this.itemStart = function (A) { r++, !1 === o && void 0 !== i.onStart && i.onStart(A, n, r), o = !0 }, this.itemEnd = function (A) { n++, void 0 !== i.onProgress && i.onProgress(A, n, r), n === r && (o = !1, void 0 !== i.onLoad && i.onLoad()) }, this.itemError = function (A) { void 0 !== i.onError && i.onError(A) }, this.resolveURL = function (A) { return a ? a(A) : A }, this.setURLModifier = function (A) { return a = A, this }, this.addHandler = function (A, e) { return s.push(A, e), this }, this.removeHandler = function (A) { var e = s.indexOf(A); return -1 !== e && s.splice(e, 2), this }, this.getHandler = function (A) { for (var e = 0, t = s.length; t > e; e += 2) { var i = s[e], o = s[e + 1]; if (i.global && (i.lastIndex = 0), i.test(A)) return o } return null } } var Hr = new jr; function Yr(A) { this.manager = void 0 !== A ? A : Hr, this.crossOrigin = "anonymous", this.path = "", this.resourcePath = "" } Object.assign(Yr.prototype, { load: function () {}, parse: function () {}, setCrossOrigin: function (A) { return this.crossOrigin = A, this }, setPath: function (A) { return this.path = A, this }, setResourcePath: function (A) { return this.resourcePath = A, this } }); var Wr = {}; function Jr(A) { Yr.call(this, A) } function zr(A) { Yr.call(this, A) } function Zr(A) { Yr.call(this, A) } function Xr(A) { Yr.call(this, A) } function _r(A) { Yr.call(this, A) } function $r(A) { Yr.call(this, A) } function Aa(A) { Yr.call(this, A) } function ea() { this.type = "Curve", this.arcLengthDivisions = 200 } function ta(A, e, t, i, o, n, r, a) { ea.call(this), this.type = "EllipseCurve", this.aX = A || 0, this.aY = e || 0, this.xRadius = t || 1, this.yRadius = i || 1, this.aStartAngle = o || 0, this.aEndAngle = n || 2 * Math.PI, this.aClockwise = r || !1, this.aRotation = a || 0 } function ia(A, e, t, i, o, n) { ta.call(this, A, e, t, t, i, o, n), this.type = "ArcCurve" } function oa() { var A = 0, e = 0, t = 0, i = 0; function o(o, n, r, a) { A = o, e = r, t = -3 * o + 3 * n - 2 * r - a, i = 2 * o - 2 * n + r + a } return { initCatmullRom: function (A, e, t, i, n) { o(e, t, n * (t - A), n * (i - e)) }, initNonuniformCatmullRom: function (A, e, t, i, n, r, a) { var s = (e - A) / n - (t - A) / (n + r) + (t - e) / r, l = (t - e) / r - (i - e) / (r + a) + (i - t) / a; o(e, t, s *= r, l *= r) }, calc: function (o) { var n = o * o; return A + e * o + t * n + i * (n * o) } } } Jr.prototype = Object.assign(Object.create(Yr.prototype), { constructor: Jr, load: function (A, e, t, i) { void 0 === A && (A = ""), void 0 !== this.path && (A = this.path + A), A = this.manager.resolveURL(A); var o = this, n = qr.get(A); if (void 0 !== n) return o.manager.itemStart(A), setTimeout((function () { e && e(n), o.manager.itemEnd(A) }), 0), n; if (void 0 === Wr[A]) { var r = A.match(/^data:(.*?)(;base64)?,(.*)$/); if (r) { var a = r[1], s = !!r[2], l = r[3]; l = decodeURIComponent(l), s && (l = atob(l)); try { var c, h = (this.responseType || "").toLowerCase(); switch (h) { case "arraybuffer": case "blob": for (var d = new Uint8Array(l.length), p = 0; l.length > p; p++) d[p] = l.charCodeAt(p); c = "blob" === h ? new Blob([d.buffer], { type: a }) : d.buffer; break; case "document": var g = new DOMParser; c = g.parseFromString(l, a); break; case "json": c = JSON.parse(l); break; default: c = l } setTimeout((function () { e && e(c), o.manager.itemEnd(A) }), 0) } catch (e) { setTimeout((function () { i && i(e), o.manager.itemError(A), o.manager.itemEnd(A) }), 0) } } else { Wr[A] = [], Wr[A].push({ onLoad: e, onProgress: t, onError: i }); var u = new XMLHttpRequest; for (var f in u.open("GET", A, !0), u.addEventListener("load", (function (e) { var t = this.response, i = Wr[A]; if (delete Wr[A], 200 === this.status || 0 === this.status) { 0 === this.status && console.warn("THREE.FileLoader: HTTP Status 0 received."), qr.add(A, t); for (var n = 0, r = i.length; r > n; n++) { (a = i[n]).onLoad && a.onLoad(t) } o.manager.itemEnd(A) } else { for (n = 0, r = i.length; r > n; n++) { var a; (a = i[n]).onError && a.onError(e) } o.manager.itemError(A), o.manager.itemEnd(A) } }), !1), u.addEventListener("progress", (function (e) { for (var t = Wr[A], i = 0, o = t.length; o > i; i++) { var n = t[i]; n.onProgress && n.onProgress(e) } }), !1), u.addEventListener("error", (function (e) { var t = Wr[A]; delete Wr[A]; for (var i = 0, n = t.length; n > i; i++) { var r = t[i]; r.onError && r.onError(e) } o.manager.itemError(A), o.manager.itemEnd(A) }), !1), u.addEventListener("abort", (function (e) { var t = Wr[A]; delete Wr[A]; for (var i = 0, n = t.length; n > i; i++) { var r = t[i]; r.onError && r.onError(e) } o.manager.itemError(A), o.manager.itemEnd(A) }), !1), void 0 !== this.responseType && (u.responseType = this.responseType), void 0 !== this.withCredentials && (u.withCredentials = this.withCredentials), u.overrideMimeType && u.overrideMimeType(void 0 !== this.mimeType ? this.mimeType : "text/plain"), this.requestHeader) u.setRequestHeader(f, this.requestHeader[f]); u.send(null) } return o.manager.itemStart(A), u } Wr[A].push({ onLoad: e, onProgress: t, onError: i }) }, setResponseType: function (A) { return this.responseType = A, this }, setWithCredentials: function (A) { return this.withCredentials = A, this }, setMimeType: function (A) { return this.mimeType = A, this }, setRequestHeader: function (A) { return this.requestHeader = A, this } }), zr.prototype = Object.assign(Object.create(Yr.prototype), { constructor: zr, load: function (A, e, t, i) { var o = this, n = new Jr(o.manager); n.setPath(o.path), n.load(A, (function (A) { e(o.parse(JSON.parse(A))) }), t, i) }, parse: function (A) { for (var e = [], t = 0; A.length > t; t++) { var i = Gr.parse(A[t]); e.push(i) } return e } }), Zr.prototype = Object.assign(Object.create(Yr.prototype), { constructor: Zr, load: function (A, e, t, i) { var o = this, n = [], r = new An; r.image = n; var a = new Jr(this.manager); function s(s) { a.load(A[s], (function (A) { var t = o.parse(A, !0); n[s] = { width: t.width, height: t.height, format: t.format, mipmaps: t.mipmaps }, 6 === (l += 1) && (1 === t.mipmapCount && (r.minFilter = 1006), r.format = t.format, r.needsUpdate = !0, e && e(r)) }), t, i) } if (a.setPath(this.path), a.setResponseType("arraybuffer"), Array.isArray(A)) for (var l = 0, c = 0, h = A.length; h > c; ++c) s(c); else a.load(A, (function (A) { var t = o.parse(A, !0); if (t.isCubemap) for (var i = t.mipmaps.length / t.mipmapCount, a = 0; i > a; a++) { n[a] = { mipmaps: [] }; for (var s = 0; t.mipmapCount > s; s++) n[a].mipmaps.push(t.mipmaps[a * t.mipmapCount + s]), n[a].format = t.format, n[a].width = t.width, n[a].height = t.height } else r.image.width = t.width, r.image.height = t.height, r.mipmaps = t.mipmaps; 1 === t.mipmapCount && (r.minFilter = 1006), r.format = t.format, r.needsUpdate = !0, e && e(r) }), t, i); return r } }), Xr.prototype = Object.assign(Object.create(Yr.prototype), { constructor: Xr, load: function (A, e, t, i) { var o = this, n = new We, r = new Jr(this.manager); return r.setResponseType("arraybuffer"), r.setPath(this.path), r.load(A, (function (A) { var t = o.parse(A); t && (void 0 !== t.image ? n.image = t.image : void 0 !== t.data && (n.image.width = t.width, n.image.height = t.height, n.image.data = t.data), n.wrapS = void 0 !== t.wrapS ? t.wrapS : 1001, n.wrapT = void 0 !== t.wrapT ? t.wrapT : 1001, n.magFilter = void 0 !== t.magFilter ? t.magFilter : 1006, n.minFilter = void 0 !== t.minFilter ? t.minFilter : 1006, n.anisotropy = void 0 !== t.anisotropy ? t.anisotropy : 1, void 0 !== t.format && (n.format = t.format), void 0 !== t.type && (n.type = t.type), void 0 !== t.mipmaps && (n.mipmaps = t.mipmaps, n.minFilter = 1008), 1 === t.mipmapCount && (n.minFilter = 1006), n.needsUpdate = !0, e && e(n, t)) }), t, i), n } }), _r.prototype = Object.assign(Object.create(Yr.prototype), { constructor: _r, load: function (A, e, t, i) { void 0 !== this.path && (A = this.path + A), A = this.manager.resolveURL(A); var o = this, n = qr.get(A); if (void 0 !== n) return o.manager.itemStart(A), setTimeout((function () { e && e(n), o.manager.itemEnd(A) }), 0), n; var r = document.createElementNS("http://www.w3.org/1999/xhtml", "img"); function a() { r.removeEventListener("load", a, !1), r.removeEventListener("error", s, !1), qr.add(A, this), e && e(this), o.manager.itemEnd(A) } function s(e) { r.removeEventListener("load", a, !1), r.removeEventListener("error", s, !1), i && i(e), o.manager.itemError(A), o.manager.itemEnd(A) } return r.addEventListener("load", a, !1), r.addEventListener("error", s, !1), "data:" !== A.substr(0, 5) && void 0 !== this.crossOrigin && (r.crossOrigin = this.crossOrigin), o.manager.itemStart(A), r.src = A, r } }), $r.prototype = Object.assign(Object.create(Yr.prototype), { constructor: $r, load: function (A, e, t, i) { var o = new ut, n = new _r(this.manager); n.setCrossOrigin(this.crossOrigin), n.setPath(this.path); var r = 0; function a(t) { n.load(A[t], (function (A) { o.images[t] = A, 6 === ++r && (o.needsUpdate = !0, e && e(o)) }), void 0, i) } for (var s = 0; A.length > s; ++s) a(s); return o } }), Aa.prototype = Object.assign(Object.create(Yr.prototype), { constructor: Aa, load: function (A, e, t, i) { var o = new d, n = new _r(this.manager); return n.setCrossOrigin(this.crossOrigin), n.setPath(this.path), n.load(A, (function (t) { o.image = t; var i = A.search(/\.jpe?g($|\?)/i) > 0 || 0 === A.search(/^data\:image\/jpeg/); o.format = i ? 1022 : 1023, o.needsUpdate = !0, void 0 !== e && e(o) }), t, i), o } }), Object.assign(ea.prototype, { getPoint: function () { return console.warn("THREE.Curve: .getPoint() not implemented."), null }, getPointAt: function (A, e) { var t = this.getUtoTmapping(A); return this.getPoint(t, e) }, getPoints: function (A) { void 0 === A && (A = 5); for (var e = [], t = 0; A >= t; t++) e.push(this.getPoint(t / A)); return e }, getSpacedPoints: function (A) { void 0 === A && (A = 5); for (var e = [], t = 0; A >= t; t++) e.push(this.getPointAt(t / A)); return e }, getLength: function () { var A = this.getLengths(); return A[A.length - 1] }, getLengths: function (A) { if (void 0 === A && (A = this.arcLengthDivisions), this.cacheArcLengths && this.cacheArcLengths.length === A + 1 && !this.needsUpdate) return this.cacheArcLengths; this.needsUpdate = !1; var e, t, i = [], o = this.getPoint(0), n = 0; for (i.push(0), t = 1; A >= t; t++) n += (e = this.getPoint(t / A)).distanceTo(o), i.push(n), o = e; return this.cacheArcLengths = i, i }, updateArcLengths: function () { this.needsUpdate = !0, this.getLengths() }, getUtoTmapping: function (A, e) { var t, i = this.getLengths(), o = 0, n = i.length; t = e || A * i[n - 1]; for (var r, a = 0, s = n - 1; s >= a;) if (0 > (r = i[o = Math.floor(a + (s - a) / 2)] - t)) a = o + 1; else { if (0 >= r) { s = o; break } s = o - 1 } if (i[o = s] === t) return o / (n - 1); var l = i[o]; return (o + (t - l) / (i[o + 1] - l)) / (n - 1) }, getTangent: function (A) { var e = A - 1e-4, t = A + 1e-4; 0 > e && (e = 0), t > 1 && (t = 1); var i = this.getPoint(e); return this.getPoint(t).clone().sub(i).normalize() }, getTangentAt: function (A) { var e = this.getUtoTmapping(A); return this.getTangent(e) }, computeFrenetFrames: function (A, e) { var t, i, o = new y, n = [], r = [], s = [], l = new y, c = new M; for (t = 0; A >= t; t++) n[t] = this.getTangentAt(t / A), n[t].normalize(); r[0] = new y, s[0] = new y; var h = Number.MAX_VALUE, d = Math.abs(n[0].x), p = Math.abs(n[0].y), g = Math.abs(n[0].z); for (d > h || (h = d, o.set(1, 0, 0)), p > h || (h = p, o.set(0, 1, 0)), g > h || o.set(0, 0, 1), l.crossVectors(n[0], o).normalize(), r[0].crossVectors(n[0], l), s[0].crossVectors(n[0], r[0]), t = 1; A >= t; t++) r[t] = r[t - 1].clone(), s[t] = s[t - 1].clone(), l.crossVectors(n[t - 1], n[t]), l.length() > Number.EPSILON && (l.normalize(), i = Math.acos(a.clamp(n[t - 1].dot(n[t]), -1, 1)), r[t].applyMatrix4(c.makeRotationAxis(l, i))), s[t].crossVectors(n[t], r[t]); if (!0 === e) for (i = Math.acos(a.clamp(r[0].dot(r[A]), -1, 1)), i /= A, n[0].dot(l.crossVectors(r[0], r[A])) > 0 && (i = -i), t = 1; A >= t; t++) r[t].applyMatrix4(c.makeRotationAxis(n[t], i * t)), s[t].crossVectors(n[t], r[t]); return { tangents: n, normals: r, binormals: s } }, clone: function () { return (new this.constructor).copy(this) }, copy: function (A) { return this.arcLengthDivisions = A.arcLengthDivisions, this }, toJSON: function () { var A = { metadata: { version: 4.5, type: "Curve", generator: "Curve.toJSON" } }; return A.arcLengthDivisions = this.arcLengthDivisions, A.type = this.type, A }, fromJSON: function (A) { return this.arcLengthDivisions = A.arcLengthDivisions, this } }), (ta.prototype = Object.create(ea.prototype)).constructor = ta, ta.prototype.isEllipseCurve = !0, ta.prototype.getPoint = function (A, e) { for (var t = e || new s, i = 2 * Math.PI, o = this.aEndAngle - this.aStartAngle, n = Math.abs(o) < Number.EPSILON; 0 > o;) o += i; for (; o > i;) o -= i; Number.EPSILON > o && (o = n ? 0 : i), !0 !== this.aClockwise || n || (o === i ? o = -i : o -= i); var r = this.aStartAngle + A * o, a = this.aX + this.xRadius * Math.cos(r), l = this.aY + this.yRadius * Math.sin(r); if (0 !== this.aRotation) { var c = Math.cos(this.aRotation), h = Math.sin(this.aRotation), d = a - this.aX, p = l - this.aY; a = d * c - p * h + this.aX, l = d * h + p * c + this.aY } return t.set(a, l) }, ta.prototype.copy = function (A) { return ea.prototype.copy.call(this, A), this.aX = A.aX, this.aY = A.aY, this.xRadius = A.xRadius, this.yRadius = A.yRadius, this.aStartAngle = A.aStartAngle, this.aEndAngle = A.aEndAngle, this.aClockwise = A.aClockwise, this.aRotation = A.aRotation, this }, ta.prototype.toJSON = function () { var A = ea.prototype.toJSON.call(this); return A.aX = this.aX, A.aY = this.aY, A.xRadius = this.xRadius, A.yRadius = this.yRadius, A.aStartAngle = this.aStartAngle, A.aEndAngle = this.aEndAngle, A.aClockwise = this.aClockwise, A.aRotation = this.aRotation, A }, ta.prototype.fromJSON = function (A) { return ea.prototype.fromJSON.call(this, A), this.aX = A.aX, this.aY = A.aY, this.xRadius = A.xRadius, this.yRadius = A.yRadius, this.aStartAngle = A.aStartAngle, this.aEndAngle = A.aEndAngle, this.aClockwise = A.aClockwise, this.aRotation = A.aRotation, this }, (ia.prototype = Object.create(ta.prototype)).constructor = ia, ia.prototype.isArcCurve = !0; var na = new y, ra = new oa, aa = new oa, sa = new oa; function la(A, e, t, i) { ea.call(this), this.type = "CatmullRomCurve3", this.points = A || [], this.closed = e || !1, this.curveType = t || "centripetal", this.tension = i || .5 } function ca(A, e, t, i, o) { var n = .5 * (i - e), r = .5 * (o - t), a = A * A; return (2 * t - 2 * i + n + r) * (A * a) + (-3 * t + 3 * i - 2 * n - r) * a + n * A + t } function ha(A, e, t, i) { return function (A, e) { var t = 1 - A; return t * t * e }(A, e) + function (A, e) { return 2 * (1 - A) * A * e }(A, t) + function (A, e) { return A * A * e }(A, i) } function da(A, e, t, i, o) { return function (A, e) { var t = 1 - A; return t * t * t * e }(A, e) + function (A, e) { var t = 1 - A; return 3 * t * t * A * e }(A, t) + function (A, e) { return 3 * (1 - A) * A * A * e }(A, i) + function (A, e) { return A * A * A * e }(A, o) } function pa(A, e, t, i) { ea.call(this), this.type = "CubicBezierCurve", this.v0 = A || new s, this.v1 = e || new s, this.v2 = t || new s, this.v3 = i || new s } function ga(A, e, t, i) { ea.call(this), this.type = "CubicBezierCurve3", this.v0 = A || new y, this.v1 = e || new y, this.v2 = t || new y, this.v3 = i || new y } function ua(A, e) { ea.call(this), this.type = "LineCurve", this.v1 = A || new s, this.v2 = e || new s } function fa(A, e) { ea.call(this), this.type = "LineCurve3", this.v1 = A || new y, this.v2 = e || new y } function ma(A, e, t) { ea.call(this), this.type = "QuadraticBezierCurve", this.v0 = A || new s, this.v1 = e || new s, this.v2 = t || new s } function Ca(A, e, t) { ea.call(this), this.type = "QuadraticBezierCurve3", this.v0 = A || new y, this.v1 = e || new y, this.v2 = t || new y } function ya(A) { ea.call(this), this.type = "SplineCurve", this.points = A || [] } (la.prototype = Object.create(ea.prototype)).constructor = la, la.prototype.isCatmullRomCurve3 = !0, la.prototype.getPoint = function (A, e) { var t, i, o, n, r = e || new y, a = this.points, s = a.length, l = (s - (this.closed ? 0 : 1)) * A, c = Math.floor(l), h = l - c; if (this.closed ? c += c > 0 ? 0 : (Math.floor(Math.abs(c) / s) + 1) * s : 0 === h && c === s - 1 && (c = s - 2, h = 1), this.closed || c > 0 ? t = a[(c - 1) % s] : (na.subVectors(a[0], a[1]).add(a[0]), t = na), i = a[c % s], o = a[(c + 1) % s], this.closed || s > c + 2 ? n = a[(c + 2) % s] : (na.subVectors(a[s - 1], a[s - 2]).add(a[s - 1]), n = na), "centripetal" === this.curveType || "chordal" === this.curveType) { var d = "chordal" === this.curveType ? .5 : .25, p = Math.pow(t.distanceToSquared(i), d), g = Math.pow(i.distanceToSquared(o), d), u = Math.pow(o.distanceToSquared(n), d); 1e-4 > g && (g = 1), 1e-4 > p && (p = g), 1e-4 > u && (u = g), ra.initNonuniformCatmullRom(t.x, i.x, o.x, n.x, p, g, u), aa.initNonuniformCatmullRom(t.y, i.y, o.y, n.y, p, g, u), sa.initNonuniformCatmullRom(t.z, i.z, o.z, n.z, p, g, u) } else "catmullrom" === this.curveType && (ra.initCatmullRom(t.x, i.x, o.x, n.x, this.tension), aa.initCatmullRom(t.y, i.y, o.y, n.y, this.tension), sa.initCatmullRom(t.z, i.z, o.z, n.z, this.tension)); return r.set(ra.calc(h), aa.calc(h), sa.calc(h)), r }, la.prototype.copy = function (A) { ea.prototype.copy.call(this, A), this.points = []; for (var e = 0, t = A.points.length; t > e; e++) { this.points.push(A.points[e].clone()) } return this.closed = A.closed, this.curveType = A.curveType, this.tension = A.tension, this }, la.prototype.toJSON = function () { var A = ea.prototype.toJSON.call(this); A.points = []; for (var e = 0, t = this.points.length; t > e; e++) { A.points.push(this.points[e].toArray()) } return A.closed = this.closed, A.curveType = this.curveType, A.tension = this.tension, A }, la.prototype.fromJSON = function (A) { ea.prototype.fromJSON.call(this, A), this.points = []; for (var e = 0, t = A.points.length; t > e; e++) { var i = A.points[e]; this.points.push((new y).fromArray(i)) } return this.closed = A.closed, this.curveType = A.curveType, this.tension = A.tension, this }, (pa.prototype = Object.create(ea.prototype)).constructor = pa, pa.prototype.isCubicBezierCurve = !0, pa.prototype.getPoint = function (A, e) { var t = e || new s, i = this.v0, o = this.v1, n = this.v2, r = this.v3; return t.set(da(A, i.x, o.x, n.x, r.x), da(A, i.y, o.y, n.y, r.y)), t }, pa.prototype.copy = function (A) { return ea.prototype.copy.call(this, A), this.v0.copy(A.v0), this.v1.copy(A.v1), this.v2.copy(A.v2), this.v3.copy(A.v3), this }, pa.prototype.toJSON = function () { var A = ea.prototype.toJSON.call(this); return A.v0 = this.v0.toArray(), A.v1 = this.v1.toArray(), A.v2 = this.v2.toArray(), A.v3 = this.v3.toArray(), A }, pa.prototype.fromJSON = function (A) { return ea.prototype.fromJSON.call(this, A), this.v0.fromArray(A.v0), this.v1.fromArray(A.v1), this.v2.fromArray(A.v2), this.v3.fromArray(A.v3), this }, (ga.prototype = Object.create(ea.prototype)).constructor = ga, ga.prototype.isCubicBezierCurve3 = !0, ga.prototype.getPoint = function (A, e) { var t = e || new y, i = this.v0, o = this.v1, n = this.v2, r = this.v3; return t.set(da(A, i.x, o.x, n.x, r.x), da(A, i.y, o.y, n.y, r.y), da(A, i.z, o.z, n.z, r.z)), t }, ga.prototype.copy = function (A) { return ea.prototype.copy.call(this, A), this.v0.copy(A.v0), this.v1.copy(A.v1), this.v2.copy(A.v2), this.v3.copy(A.v3), this }, ga.prototype.toJSON = function () { var A = ea.prototype.toJSON.call(this); return A.v0 = this.v0.toArray(), A.v1 = this.v1.toArray(), A.v2 = this.v2.toArray(), A.v3 = this.v3.toArray(), A }, ga.prototype.fromJSON = function (A) { return ea.prototype.fromJSON.call(this, A), this.v0.fromArray(A.v0), this.v1.fromArray(A.v1), this.v2.fromArray(A.v2), this.v3.fromArray(A.v3), this }, (ua.prototype = Object.create(ea.prototype)).constructor = ua, ua.prototype.isLineCurve = !0, ua.prototype.getPoint = function (A, e) { var t = e || new s; return 1 === A ? t.copy(this.v2) : (t.copy(this.v2).sub(this.v1), t.multiplyScalar(A).add(this.v1)), t }, ua.prototype.getPointAt = function (A, e) { return this.getPoint(A, e) }, ua.prototype.getTangent = function () { return this.v2.clone().sub(this.v1).normalize() }, ua.prototype.copy = function (A) { return ea.prototype.copy.call(this, A), this.v1.copy(A.v1), this.v2.copy(A.v2), this }, ua.prototype.toJSON = function () { var A = ea.prototype.toJSON.call(this); return A.v1 = this.v1.toArray(), A.v2 = this.v2.toArray(), A }, ua.prototype.fromJSON = function (A) { return ea.prototype.fromJSON.call(this, A), this.v1.fromArray(A.v1), this.v2.fromArray(A.v2), this }, (fa.prototype = Object.create(ea.prototype)).constructor = fa, fa.prototype.isLineCurve3 = !0, fa.prototype.getPoint = function (A, e) { var t = e || new y; return 1 === A ? t.copy(this.v2) : (t.copy(this.v2).sub(this.v1), t.multiplyScalar(A).add(this.v1)), t }, fa.prototype.getPointAt = function (A, e) { return this.getPoint(A, e) }, fa.prototype.copy = function (A) { return ea.prototype.copy.call(this, A), this.v1.copy(A.v1), this.v2.copy(A.v2), this }, fa.prototype.toJSON = function () { var A = ea.prototype.toJSON.call(this); return A.v1 = this.v1.toArray(), A.v2 = this.v2.toArray(), A }, fa.prototype.fromJSON = function (A) { return ea.prototype.fromJSON.call(this, A), this.v1.fromArray(A.v1), this.v2.fromArray(A.v2), this }, (ma.prototype = Object.create(ea.prototype)).constructor = ma, ma.prototype.isQuadraticBezierCurve = !0, ma.prototype.getPoint = function (A, e) { var t = e || new s, i = this.v0, o = this.v1, n = this.v2; return t.set(ha(A, i.x, o.x, n.x), ha(A, i.y, o.y, n.y)), t }, ma.prototype.copy = function (A) { return ea.prototype.copy.call(this, A), this.v0.copy(A.v0), this.v1.copy(A.v1), this.v2.copy(A.v2), this }, ma.prototype.toJSON = function () { var A = ea.prototype.toJSON.call(this); return A.v0 = this.v0.toArray(), A.v1 = this.v1.toArray(), A.v2 = this.v2.toArray(), A }, ma.prototype.fromJSON = function (A) { return ea.prototype.fromJSON.call(this, A), this.v0.fromArray(A.v0), this.v1.fromArray(A.v1), this.v2.fromArray(A.v2), this }, (Ca.prototype = Object.create(ea.prototype)).constructor = Ca, Ca.prototype.isQuadraticBezierCurve3 = !0, Ca.prototype.getPoint = function (A, e) { var t = e || new y, i = this.v0, o = this.v1, n = this.v2; return t.set(ha(A, i.x, o.x, n.x), ha(A, i.y, o.y, n.y), ha(A, i.z, o.z, n.z)), t }, Ca.prototype.copy = function (A) { return ea.prototype.copy.call(this, A), this.v0.copy(A.v0), this.v1.copy(A.v1), this.v2.copy(A.v2), this }, Ca.prototype.toJSON = function () { var A = ea.prototype.toJSON.call(this); return A.v0 = this.v0.toArray(), A.v1 = this.v1.toArray(), A.v2 = this.v2.toArray(), A }, Ca.prototype.fromJSON = function (A) { return ea.prototype.fromJSON.call(this, A), this.v0.fromArray(A.v0), this.v1.fromArray(A.v1), this.v2.fromArray(A.v2), this }, (ya.prototype = Object.create(ea.prototype)).constructor = ya, ya.prototype.isSplineCurve = !0, ya.prototype.getPoint = function (A, e) { var t = e || new s, i = this.points, o = (i.length - 1) * A, n = Math.floor(o), r = o - n, a = i[0 === n ? n : n - 1], l = i[n], c = i[n > i.length - 2 ? i.length - 1 : n + 1], h = i[n > i.length - 3 ? i.length - 1 : n + 2]; return t.set(ca(r, a.x, l.x, c.x, h.x), ca(r, a.y, l.y, c.y, h.y)), t }, ya.prototype.copy = function (A) { ea.prototype.copy.call(this, A), this.points = []; for (var e = 0, t = A.points.length; t > e; e++) { this.points.push(A.points[e].clone()) } return this }, ya.prototype.toJSON = function () { var A = ea.prototype.toJSON.call(this); A.points = []; for (var e = 0, t = this.points.length; t > e; e++) { A.points.push(this.points[e].toArray()) } return A }, ya.prototype.fromJSON = function (A) { ea.prototype.fromJSON.call(this, A), this.points = []; for (var e = 0, t = A.points.length; t > e; e++) { var i = A.points[e]; this.points.push((new s).fromArray(i)) } return this }; var va = Object.freeze({ __proto__: null, ArcCurve: ia, CatmullRomCurve3: la, CubicBezierCurve: pa, CubicBezierCurve3: ga, EllipseCurve: ta, LineCurve: ua, LineCurve3: fa, QuadraticBezierCurve: ma, QuadraticBezierCurve3: Ca, SplineCurve: ya }); function Ia() { ea.call(this), this.type = "CurvePath", this.curves = [], this.autoClose = !1 } function Ea(A) { Ia.call(this), this.type = "Path", this.currentPoint = new s, A && this.setFromPoints(A) } function Ba(A) { Ea.call(this, A), this.uuid = a.generateUUID(), this.type = "Shape", this.holes = [] } function xa(A, e) { H.call(this), this.type = "Light", this.color = new LA(A), this.intensity = void 0 !== e ? e : 1, this.receiveShadow = void 0 } function Sa(A, e, t) { xa.call(this, A, t), this.type = "HemisphereLight", this.castShadow = void 0, this.position.copy(H.DefaultUp), this.updateMatrix(), this.groundColor = new LA(e) } function wa(A) { this.camera = A, this.bias = 0, this.radius = 1, this.mapSize = new s(512, 512), this.map = null, this.mapPass = null, this.matrix = new M, this._frustum = new Ze, this._frameExtents = new s(1, 1), this._viewportCount = 1, this._viewports = [new p(0, 0, 1, 1)] } function Ma() { wa.call(this, new je(50, 1, .5, 500)) } function ba(A, e, t, i, o, n) { xa.call(this, A, e), this.type = "SpotLight", this.position.copy(H.DefaultUp), this.updateMatrix(), this.target = new H, Object.defineProperty(this, "power", { get: function () { return this.intensity * Math.PI }, set: function (A) { this.intensity = A / Math.PI } }), this.distance = void 0 !== t ? t : 0, this.angle = void 0 !== i ? i : Math.PI / 3, this.penumbra = void 0 !== o ? o : 0, this.decay = void 0 !== n ? n : 1, this.shadow = new Ma } function Ua() { wa.call(this, new je(90, 1, .5, 500)), this._frameExtents = new s(4, 2), this._viewportCount = 6, this._viewports = [new p(2, 1, 1, 1), new p(0, 1, 1, 1), new p(3, 1, 1, 1), new p(1, 1, 1, 1), new p(3, 0, 1, 1), new p(1, 0, 1, 1)], this._cubeDirections = [new y(1, 0, 0), new y(-1, 0, 0), new y(0, 0, 1), new y(0, 0, -1), new y(0, 1, 0), new y(0, -1, 0)], this._cubeUps = [new y(0, 1, 0), new y(0, 1, 0), new y(0, 1, 0), new y(0, 1, 0), new y(0, 0, 1), new y(0, 0, -1)] } function Fa(A, e, t, i) { xa.call(this, A, e), this.type = "PointLight", Object.defineProperty(this, "power", { get: function () { return 4 * this.intensity * Math.PI }, set: function (A) { this.intensity = A / (4 * Math.PI) } }), this.distance = void 0 !== t ? t : 0, this.decay = void 0 !== i ? i : 1, this.shadow = new Ua } function Ka(A, e, t, i, o, n) { qe.call(this), this.type = "OrthographicCamera", this.zoom = 1, this.view = null, this.left = void 0 !== A ? A : -1, this.right = void 0 !== e ? e : 1, this.top = void 0 !== t ? t : 1, this.bottom = void 0 !== i ? i : -1, this.near = void 0 !== o ? o : .1, this.far = void 0 !== n ? n : 2e3, this.updateProjectionMatrix() } function Qa() { wa.call(this, new Ka(-5, 5, 5, -5, .5, 500)) } function Ra(A, e) { xa.call(this, A, e), this.type = "DirectionalLight", this.position.copy(H.DefaultUp), this.updateMatrix(), this.target = new H, this.shadow = new Qa } function Ta(A, e) { xa.call(this, A, e), this.type = "AmbientLight", this.castShadow = void 0 } function ka(A, e, t, i) { xa.call(this, A, e), this.type = "RectAreaLight", this.width = void 0 !== t ? t : 10, this.height = void 0 !== i ? i : 10 } function Da(A) { Yr.call(this, A), this.textures = {} } Ia.prototype = Object.assign(Object.create(ea.prototype), { constructor: Ia, add: function (A) { this.curves.push(A) }, closePath: function () { var A = this.curves[0].getPoint(0), e = this.curves[this.curves.length - 1].getPoint(1); A.equals(e) || this.curves.push(new ua(e, A)) }, getPoint: function (A) { for (var e = A * this.getLength(), t = this.getCurveLengths(), i = 0; t.length > i;) { if (t[i] >= e) { var o = t[i] - e, n = this.curves[i], r = n.getLength(); return n.getPointAt(0 === r ? 0 : 1 - o / r) } i++ } return null }, getLength: function () { var A = this.getCurveLengths(); return A[A.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 A = [], e = 0, t = 0, i = this.curves.length; i > t; t++) e += this.curves[t].getLength(), A.push(e); return this.cacheLengths = A, A }, getSpacedPoints: function (A) { void 0 === A && (A = 40); for (var e = [], t = 0; A >= t; t++) e.push(this.getPoint(t / A)); return this.autoClose && e.push(e[0]), e }, getPoints: function (A) { A = A || 12; for (var e, t = [], i = 0, o = this.curves; o.length > i; i++) for (var n = o[i], r = n.getPoints(n && n.isEllipseCurve ? 2 * A : n && (n.isLineCurve || n.isLineCurve3) ? 1 : n && n.isSplineCurve ? A * n.points.length : A), a = 0; r.length > a; a++) { var s = r[a]; e && e.equals(s) || (t.push(s), e = s) } return this.autoClose && t.length > 1 && !t[t.length - 1].equals(t[0]) && t.push(t[0]), t }, copy: function (A) { ea.prototype.copy.call(this, A), this.curves = []; for (var e = 0, t = A.curves.length; t > e; e++) { this.curves.push(A.curves[e].clone()) } return this.autoClose = A.autoClose, this }, toJSON: function () { var A = ea.prototype.toJSON.call(this); A.autoClose = this.autoClose, A.curves = []; for (var e = 0, t = this.curves.length; t > e; e++) { A.curves.push(this.curves[e].toJSON()) } return A }, fromJSON: function (A) { ea.prototype.fromJSON.call(this, A), this.autoClose = A.autoClose, this.curves = []; for (var e = 0, t = A.curves.length; t > e; e++) { var i = A.curves[e]; this.curves.push((new va[i.type]).fromJSON(i)) } return this } }), Ea.prototype = Object.assign(Object.create(Ia.prototype), { constructor: Ea, setFromPoints: function (A) { this.moveTo(A[0].x, A[0].y); for (var e = 1, t = A.length; t > e; e++) this.lineTo(A[e].x, A[e].y); return this }, moveTo: function (A, e) { return this.currentPoint.set(A, e), this }, lineTo: function (A, e) { var t = new ua(this.currentPoint.clone(), new s(A, e)); return this.curves.push(t), this.currentPoint.set(A, e), this }, quadraticCurveTo: function (A, e, t, i) { var o = new ma(this.currentPoint.clone(), new s(A, e), new s(t, i)); return this.curves.push(o), this.currentPoint.set(t, i), this }, bezierCurveTo: function (A, e, t, i, o, n) { var r = new pa(this.currentPoint.clone(), new s(A, e), new s(t, i), new s(o, n)); return this.curves.push(r), this.currentPoint.set(o, n), this }, splineThru: function (A) { var e = new ya([this.currentPoint.clone()].concat(A)); return this.curves.push(e), this.currentPoint.copy(A[A.length - 1]), this }, arc: function (A, e, t, i, o, n) { return this.absarc(A + this.currentPoint.x, e + this.currentPoint.y, t, i, o, n), this }, absarc: function (A, e, t, i, o, n) { return this.absellipse(A, e, t, t, i, o, n), this }, ellipse: function (A, e, t, i, o, n, r, a) { return this.absellipse(A + this.currentPoint.x, e + this.currentPoint.y, t, i, o, n, r, a), this }, absellipse: function (A, e, t, i, o, n, r, a) { var s = new ta(A, e, t, i, o, n, r, a); if (this.curves.length > 0) { var l = s.getPoint(0); l.equals(this.currentPoint) || this.lineTo(l.x, l.y) } this.curves.push(s); var c = s.getPoint(1); return this.currentPoint.copy(c), this }, copy: function (A) { return Ia.prototype.copy.call(this, A), this.currentPoint.copy(A.currentPoint), this }, toJSON: function () { var A = Ia.prototype.toJSON.call(this); return A.currentPoint = this.currentPoint.toArray(), A }, fromJSON: function (A) { return Ia.prototype.fromJSON.call(this, A), this.currentPoint.fromArray(A.currentPoint), this } }), Ba.prototype = Object.assign(Object.create(Ea.prototype), { constructor: Ba, getPointsHoles: function (A) { for (var e = [], t = 0, i = this.holes.length; i > t; t++) e[t] = this.holes[t].getPoints(A); return e }, extractPoints: function (A) { return { shape: this.getPoints(A), holes: this.getPointsHoles(A) } }, copy: function (A) { Ea.prototype.copy.call(this, A), this.holes = []; for (var e = 0, t = A.holes.length; t > e; e++) { this.holes.push(A.holes[e].clone()) } return this }, toJSON: function () { var A = Ea.prototype.toJSON.call(this); A.uuid = this.uuid, A.holes = []; for (var e = 0, t = this.holes.length; t > e; e++) { A.holes.push(this.holes[e].toJSON()) } return A }, fromJSON: function (A) { Ea.prototype.fromJSON.call(this, A), this.uuid = A.uuid, this.holes = []; for (var e = 0, t = A.holes.length; t > e; e++) { var i = A.holes[e]; this.holes.push((new Ea).fromJSON(i)) } return this } }), xa.prototype = Object.assign(Object.create(H.prototype), { constructor: xa, isLight: !0, copy: function (A) { return H.prototype.copy.call(this, A), this.color.copy(A.color), this.intensity = A.intensity, this }, toJSON: function (A) { var e = H.prototype.toJSON.call(this, A); return e.object.color = this.color.getHex(), e.object.intensity = this.intensity, void 0 !== this.groundColor && (e.object.groundColor = this.groundColor.getHex()), void 0 !== this.distance && (e.object.distance = this.distance), void 0 !== this.angle && (e.object.angle = this.angle), void 0 !== this.decay && (e.object.decay = this.decay), void 0 !== this.penumbra && (e.object.penumbra = this.penumbra), void 0 !== this.shadow && (e.object.shadow = this.shadow.toJSON()), e } }), Sa.prototype = Object.assign(Object.create(xa.prototype), { constructor: Sa, isHemisphereLight: !0, copy: function (A) { return xa.prototype.copy.call(this, A), this.groundColor.copy(A.groundColor), this } }), Object.assign(wa.prototype, { _projScreenMatrix: new M, _lightPositionWorld: new y, _lookTarget: new y, getViewportCount: function () { return this._viewportCount }, getFrustum: function () { return this._frustum }, updateMatrices: function (A) { var e = this.camera, t = this.matrix, i = this._projScreenMatrix, o = this._lookTarget, n = this._lightPositionWorld; n.setFromMatrixPosition(A.matrixWorld), e.position.copy(n), o.setFromMatrixPosition(A.target.matrixWorld), e.lookAt(o), e.updateMatrixWorld(), i.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), this._frustum.setFromProjectionMatrix(i), t.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), t.multiply(e.projectionMatrix), t.multiply(e.matrixWorldInverse) }, getViewport: function (A) { return this._viewports[A] }, getFrameExtents: function () { return this._frameExtents }, copy: function (A) { return this.camera = A.camera.clone(), this.bias = A.bias, this.radius = A.radius, this.mapSize.copy(A.mapSize), this }, clone: function () { return (new this.constructor).copy(this) }, toJSON: function () { var A = {}; return 0 !== this.bias && (A.bias = this.bias), 1 !== this.radius && (A.radius = this.radius), 512 === this.mapSize.x && 512 === this.mapSize.y || (A.mapSize = this.mapSize.toArray()), A.camera = this.camera.toJSON(!1).object, delete A.camera.matrix, A } }), Ma.prototype = Object.assign(Object.create(wa.prototype), { constructor: Ma, isSpotLightShadow: !0, updateMatrices: function (A) { var e = this.camera, t = 2 * a.RAD2DEG * A.angle, i = this.mapSize.width / this.mapSize.height, o = A.distance || e.far; t === e.fov && i === e.aspect && o === e.far || (e.fov = t, e.aspect = i, e.far = o, e.updateProjectionMatrix()), wa.prototype.updateMatrices.call(this, A) } }), ba.prototype = Object.assign(Object.create(xa.prototype), { constructor: ba, isSpotLight: !0, copy: function (A) { return xa.prototype.copy.call(this, A), this.distance = A.distance, this.angle = A.angle, this.penumbra = A.penumbra, this.decay = A.decay, this.target = A.target.clone(), this.shadow = A.shadow.clone(), this } }), Ua.prototype = Object.assign(Object.create(wa.prototype), { constructor: Ua, isPointLightShadow: !0, updateMatrices: function (A, e) { void 0 === e && (e = 0); var t = this.camera, i = this.matrix, o = this._lightPositionWorld, n = this._lookTarget, r = this._projScreenMatrix; o.setFromMatrixPosition(A.matrixWorld), t.position.copy(o), n.copy(t.position), n.add(this._cubeDirections[e]), t.up.copy(this._cubeUps[e]), t.lookAt(n), t.updateMatrixWorld(), i.makeTranslation(-o.x, -o.y, -o.z), r.multiplyMatrices(t.projectionMatrix, t.matrixWorldInverse), this._frustum.setFromProjectionMatrix(r) } }), Fa.prototype = Object.assign(Object.create(xa.prototype), { constructor: Fa, isPointLight: !0, copy: function (A) { return xa.prototype.copy.call(this, A), this.distance = A.distance, this.decay = A.decay, this.shadow = A.shadow.clone(), this } }), Ka.prototype = Object.assign(Object.create(qe.prototype), { constructor: Ka, isOrthographicCamera: !0, copy: function (A, e) { return qe.prototype.copy.call(this, A, e), this.left = A.left, this.right = A.right, this.top = A.top, this.bottom = A.bottom, this.near = A.near, this.far = A.far, this.zoom = A.zoom, this.view = null === A.view ? null : Object.assign({}, A.view), this }, setViewOffset: function (A, e, t, i, o, n) { 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 = A, this.view.fullHeight = e, this.view.offsetX = t, this.view.offsetY = i, this.view.width = o, this.view.height = n, this.updateProjectionMatrix() }, clearViewOffset: function () { null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix() }, updateProjectionMatrix: function () { var A = (this.right - this.left) / (2 * this.zoom), e = (this.top - this.bottom) / (2 * this.zoom), t = (this.right + this.left) / 2, i = (this.top + this.bottom) / 2, o = t - A, n = t + A, r = i + e, a = i - e; if (null !== this.view && this.view.enabled) { var s = (this.right - this.left) / this.view.fullWidth / this.zoom, l = (this.top - this.bottom) / this.view.fullHeight / this.zoom; n = (o += s * this.view.offsetX) + s * this.view.width, a = (r -= l * this.view.offsetY) - l * this.view.height } this.projectionMatrix.makeOrthographic(o, n, r, a, this.near, this.far), this.projectionMatrixInverse.getInverse(this.projectionMatrix) }, toJSON: function (A) { var e = H.prototype.toJSON.call(this, A); return e.object.zoom = this.zoom, e.object.left = this.left, e.object.right = this.right, e.object.top = this.top, e.object.bottom = this.bottom, e.object.near = this.near, e.object.far = this.far, null !== this.view && (e.object.view = Object.assign({}, this.view)), e } }), Qa.prototype = Object.assign(Object.create(wa.prototype), { constructor: Qa, isDirectionalLightShadow: !0, updateMatrices: function (A) { wa.prototype.updateMatrices.call(this, A) } }), Ra.prototype = Object.assign(Object.create(xa.prototype), { constructor: Ra, isDirectionalLight: !0, copy: function (A) { return xa.prototype.copy.call(this, A), this.target = A.target.clone(), this.shadow = A.shadow.clone(), this } }), Ta.prototype = Object.assign(Object.create(xa.prototype), { constructor: Ta, isAmbientLight: !0 }), ka.prototype = Object.assign(Object.create(xa.prototype), { constructor: ka, isRectAreaLight: !0, copy: function (A) { return xa.prototype.copy.call(this, A), this.width = A.width, this.height = A.height, this }, toJSON: function (A) { var e = xa.prototype.toJSON.call(this, A); return e.object.width = this.width, e.object.height = this.height, e } }), Da.prototype = Object.assign(Object.create(Yr.prototype), { constructor: Da, load: function (A, e, t, i) { var o = this, n = new Jr(o.manager); n.setPath(o.path), n.load(A, (function (A) { e(o.parse(JSON.parse(A))) }), t, i) }, parse: function (A) { var e = this.textures; function t(A) { return void 0 === e[A] && console.warn("THREE.MaterialLoader: Undefined texture", A), e[A] } var i = new Mr[A.type]; if (void 0 !== A.uuid && (i.uuid = A.uuid), void 0 !== A.name && (i.name = A.name), void 0 !== A.color && i.color.setHex(A.color), void 0 !== A.roughness && (i.roughness = A.roughness), void 0 !== A.metalness && (i.metalness = A.metalness), void 0 !== A.sheen && (i.sheen = (new LA).setHex(A.sheen)), void 0 !== A.emissive && i.emissive.setHex(A.emissive), void 0 !== A.specular && i.specular.setHex(A.specular), void 0 !== A.shininess && (i.shininess = A.shininess), void 0 !== A.clearcoat && (i.clearcoat = A.clearcoat), void 0 !== A.clearcoatRoughness && (i.clearcoatRoughness = A.clearcoatRoughness), void 0 !== A.fog && (i.fog = A.fog), void 0 !== A.flatShading && (i.flatShading = A.flatShading), void 0 !== A.blending && (i.blending = A.blending), void 0 !== A.combine && (i.combine = A.combine), void 0 !== A.side && (i.side = A.side), void 0 !== A.opacity && (i.opacity = A.opacity), void 0 !== A.transparent && (i.transparent = A.transparent), void 0 !== A.alphaTest && (i.alphaTest = A.alphaTest), void 0 !== A.depthTest && (i.depthTest = A.depthTest), void 0 !== A.depthWrite && (i.depthWrite = A.depthWrite), void 0 !== A.colorWrite && (i.colorWrite = A.colorWrite), void 0 !== A.stencilWrite && (i.stencilWrite = A.stencilWrite), void 0 !== A.stencilWriteMask && (i.stencilWriteMask = A.stencilWriteMask), void 0 !== A.stencilFunc && (i.stencilFunc = A.stencilFunc), void 0 !== A.stencilRef && (i.stencilRef = A.stencilRef), void 0 !== A.stencilFuncMask && (i.stencilFuncMask = A.stencilFuncMask), void 0 !== A.stencilFail && (i.stencilFail = A.stencilFail), void 0 !== A.stencilZFail && (i.stencilZFail = A.stencilZFail), void 0 !== A.stencilZPass && (i.stencilZPass = A.stencilZPass), void 0 !== A.wireframe && (i.wireframe = A.wireframe), void 0 !== A.wireframeLinewidth && (i.wireframeLinewidth = A.wireframeLinewidth), void 0 !== A.wireframeLinecap && (i.wireframeLinecap = A.wireframeLinecap), void 0 !== A.wireframeLinejoin && (i.wireframeLinejoin = A.wireframeLinejoin), void 0 !== A.rotation && (i.rotation = A.rotation), 1 !== A.linewidth && (i.linewidth = A.linewidth), void 0 !== A.dashSize && (i.dashSize = A.dashSize), void 0 !== A.gapSize && (i.gapSize = A.gapSize), void 0 !== A.scale && (i.scale = A.scale), void 0 !== A.polygonOffset && (i.polygonOffset = A.polygonOffset), void 0 !== A.polygonOffsetFactor && (i.polygonOffsetFactor = A.polygonOffsetFactor), void 0 !== A.polygonOffsetUnits && (i.polygonOffsetUnits = A.polygonOffsetUnits), void 0 !== A.skinning && (i.skinning = A.skinning), void 0 !== A.morphTargets && (i.morphTargets = A.morphTargets), void 0 !== A.morphNormals && (i.morphNormals = A.morphNormals), void 0 !== A.dithering && (i.dithering = A.dithering), void 0 !== A.vertexTangents && (i.vertexTangents = A.vertexTangents), void 0 !== A.visible && (i.visible = A.visible), void 0 !== A.toneMapped && (i.toneMapped = A.toneMapped), void 0 !== A.userData && (i.userData = A.userData), void 0 !== A.vertexColors && (i.vertexColors = "number" == typeof A.vertexColors ? A.vertexColors > 0 : A.vertexColors), void 0 !== A.uniforms) for (var o in A.uniforms) { var n = A.uniforms[o]; switch (i.uniforms[o] = {}, n.type) { case "t": i.uniforms[o].value = t(n.value); break; case "c": i.uniforms[o].value = (new LA).setHex(n.value); break; case "v2": i.uniforms[o].value = (new s).fromArray(n.value); break; case "v3": i.uniforms[o].value = (new y).fromArray(n.value); break; case "v4": i.uniforms[o].value = (new p).fromArray(n.value); break; case "m3": i.uniforms[o].value = (new l).fromArray(n.value); case "m4": i.uniforms[o].value = (new M).fromArray(n.value); break; default: i.uniforms[o].value = n.value } } if (void 0 !== A.defines && (i.defines = A.defines), void 0 !== A.vertexShader && (i.vertexShader = A.vertexShader), void 0 !== A.fragmentShader && (i.fragmentShader = A.fragmentShader), void 0 !== A.extensions) for (var r in A.extensions) i.extensions[r] = A.extensions[r]; if (void 0 !== A.shading && (i.flatShading = 1 === A.shading), void 0 !== A.size && (i.size = A.size), void 0 !== A.sizeAttenuation && (i.sizeAttenuation = A.sizeAttenuation), void 0 !== A.map && (i.map = t(A.map)), void 0 !== A.matcap && (i.matcap = t(A.matcap)), void 0 !== A.alphaMap && (i.alphaMap = t(A.alphaMap)), void 0 !== A.bumpMap && (i.bumpMap = t(A.bumpMap)), void 0 !== A.bumpScale && (i.bumpScale = A.bumpScale), void 0 !== A.normalMap && (i.normalMap = t(A.normalMap)), void 0 !== A.normalMapType && (i.normalMapType = A.normalMapType), void 0 !== A.normalScale) { var a = A.normalScale; !1 === Array.isArray(a) && (a = [a, a]), i.normalScale = (new s).fromArray(a) } return void 0 !== A.displacementMap && (i.displacementMap = t(A.displacementMap)), void 0 !== A.displacementScale && (i.displacementScale = A.displacementScale), void 0 !== A.displacementBias && (i.displacementBias = A.displacementBias), void 0 !== A.roughnessMap && (i.roughnessMap = t(A.roughnessMap)), void 0 !== A.metalnessMap && (i.metalnessMap = t(A.metalnessMap)), void 0 !== A.emissiveMap && (i.emissiveMap = t(A.emissiveMap)), void 0 !== A.emissiveIntensity && (i.emissiveIntensity = A.emissiveIntensity), void 0 !== A.specularMap && (i.specularMap = t(A.specularMap)), void 0 !== A.envMap && (i.envMap = t(A.envMap)), void 0 !== A.envMapIntensity && (i.envMapIntensity = A.envMapIntensity), void 0 !== A.reflectivity && (i.reflectivity = A.reflectivity), void 0 !== A.refractionRatio && (i.refractionRatio = A.refractionRatio), void 0 !== A.lightMap && (i.lightMap = t(A.lightMap)), void 0 !== A.lightMapIntensity && (i.lightMapIntensity = A.lightMapIntensity), void 0 !== A.aoMap && (i.aoMap = t(A.aoMap)), void 0 !== A.aoMapIntensity && (i.aoMapIntensity = A.aoMapIntensity), void 0 !== A.gradientMap && (i.gradientMap = t(A.gradientMap)), void 0 !== A.clearcoatMap && (i.clearcoatMap = t(A.clearcoatMap)), void 0 !== A.clearcoatRoughnessMap && (i.clearcoatRoughnessMap = t(A.clearcoatRoughnessMap)), void 0 !== A.clearcoatNormalMap && (i.clearcoatNormalMap = t(A.clearcoatNormalMap)), void 0 !== A.clearcoatNormalScale && (i.clearcoatNormalScale = (new s).fromArray(A.clearcoatNormalScale)), i }, setTextures: function (A) { return this.textures = A, this } }); var La = { decodeText: function (A) { if ("undefined" != typeof TextDecoder) return (new TextDecoder).decode(A); for (var e = "", t = 0, i = A.length; i > t; t++) e += String.fromCharCode(A[t]); try { return decodeURIComponent(escape(e)) } catch (A) { return e } }, extractUrlBase: function (A) { var e = A.lastIndexOf("/"); return -1 === e ? "./" : A.substr(0, e + 1) } }; function Na() { he.call(this), this.type = "InstancedBufferGeometry", this.maxInstancedCount = void 0 } function Oa(A, e, t, i) { "number" == typeof t && (i = t, t = !1, console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")), YA.call(this, A, e, t), this.meshPerAttribute = i || 1 } function Va(A) { Yr.call(this, A) } Na.prototype = Object.assign(Object.create(he.prototype), { constructor: Na, isInstancedBufferGeometry: !0, copy: function (A) { return he.prototype.copy.call(this, A), this.maxInstancedCount = A.maxInstancedCount, this }, clone: function () { return (new this.constructor).copy(this) }, toJSON: function () { var A = he.prototype.toJSON.call(this); return A.maxInstancedCount = this.maxInstancedCount, A.isInstancedBufferGeometry = !0, A } }), Oa.prototype = Object.assign(Object.create(YA.prototype), { constructor: Oa, isInstancedBufferAttribute: !0, copy: function (A) { return YA.prototype.copy.call(this, A), this.meshPerAttribute = A.meshPerAttribute, this }, toJSON: function () { var A = YA.prototype.toJSON.call(this); return A.meshPerAttribute = this.meshPerAttribute, A.isInstancedBufferAttribute = !0, A } }), Va.prototype = Object.assign(Object.create(Yr.prototype), { constructor: Va, load: function (A, e, t, i) { var o = this, n = new Jr(o.manager); n.setPath(o.path), n.load(A, (function (A) { e(o.parse(JSON.parse(A))) }), t, i) }, parse: function (A) { var e = A.isInstancedBufferGeometry ? new Na : new he, t = A.data.index; if (void 0 !== t) { var i = new Ga[t.type](t.array); e.setIndex(new YA(i, 1)) } var o = A.data.attributes; for (var n in o) { i = new Ga[(d = o[n]).type](d.array); var r = new(d.isInstancedBufferAttribute ? Oa : YA)(i, d.itemSize, d.normalized); void 0 !== d.name && (r.name = d.name), e.setAttribute(n, r) } var a = A.data.morphAttributes; if (a) for (var n in a) { for (var s = a[n], l = [], c = 0, h = s.length; h > c; c++) { var d; r = new YA(i = new Ga[(d = s[c]).type](d.array), d.itemSize, d.normalized); void 0 !== d.name && (r.name = d.name), l.push(r) } e.morphAttributes[n] = l } A.data.morphTargetsRelative && (e.morphTargetsRelative = !0); var p = A.data.groups || A.data.drawcalls || A.data.offsets; if (void 0 !== p) { c = 0; for (var g = p.length; c !== g; ++c) { var u = p[c]; e.addGroup(u.start, u.count, u.materialIndex) } } var f = A.data.boundingSphere; if (void 0 !== f) { var m = new y; void 0 !== f.center && m.fromArray(f.center), e.boundingSphere = new cA(m, f.radius) } return A.name && (e.name = A.name), A.userData && (e.userData = A.userData), e } }); var Ga = { Int8Array: Int8Array, Uint8Array: Uint8Array, Uint8ClampedArray: "undefined" != typeof Uint8ClampedArray ? Uint8ClampedArray : Uint8Array, Int16Array: Int16Array, Uint16Array: Uint16Array, Int32Array: Int32Array, Uint32Array: Uint32Array, Float32Array: Float32Array, Float64Array: Float64Array }; function Pa(A) { Yr.call(this, A) } Pa.prototype = Object.assign(Object.create(Yr.prototype), { constructor: Pa, load: function (A, e, t, i) { var o = this, n = "" === this.path ? La.extractUrlBase(A) : this.path; this.resourcePath = this.resourcePath || n; var r = new Jr(o.manager); r.setPath(this.path), r.load(A, (function (t) { var n = null; try { n = JSON.parse(t) } catch (e) { return void 0 !== i && i(e), void console.error("THREE:ObjectLoader: Can't parse " + A + ".", e.message) } var r = n.metadata; void 0 !== r && void 0 !== r.type && "geometry" !== r.type.toLowerCase() ? o.parse(n, e) : console.error("THREE.ObjectLoader: Can't load " + A) }), t, i) }, parse: function (A, e) { var t = this.parseShape(A.shapes), i = this.parseGeometries(A.geometries, t), o = this.parseImages(A.images, (function () { void 0 !== e && e(a) })), n = this.parseTextures(A.textures, o), r = this.parseMaterials(A.materials, n), a = this.parseObject(A.object, i, r); return A.animations && (a.animations = this.parseAnimations(A.animations)), void 0 !== A.images && 0 !== A.images.length || void 0 !== e && e(a), a }, parseShape: function (A) { var e = {}; if (void 0 !== A) for (var t = 0, i = A.length; i > t; t++) { var o = (new Ba).fromJSON(A[t]); e[o.uuid] = o } return e }, parseGeometries: function (A, e) { var t = {}; if (void 0 !== A) for (var i = new Va, o = 0, n = A.length; n > o; o++) { var r, a = A[o]; switch (a.type) { case "PlaneGeometry": case "PlaneBufferGeometry": r = new fr[a.type](a.width, a.height, a.widthSegments, a.heightSegments); break; case "BoxGeometry": case "BoxBufferGeometry": case "CubeGeometry": r = new fr[a.type](a.width, a.height, a.depth, a.widthSegments, a.heightSegments, a.depthSegments); break; case "CircleGeometry": case "CircleBufferGeometry": r = new fr[a.type](a.radius, a.segments, a.thetaStart, a.thetaLength); break; case "CylinderGeometry": case "CylinderBufferGeometry": r = new fr[a.type](a.radiusTop, a.radiusBottom, a.height, a.radialSegments, a.heightSegments, a.openEnded, a.thetaStart, a.thetaLength); break; case "ConeGeometry": case "ConeBufferGeometry": r = new fr[a.type](a.radius, a.height, a.radialSegments, a.heightSegments, a.openEnded, a.thetaStart, a.thetaLength); break; case "SphereGeometry": case "SphereBufferGeometry": r = new fr[a.type](a.radius, a.widthSegments, a.heightSegments, a.phiStart, a.phiLength, a.thetaStart, a.thetaLength); break; case "DodecahedronGeometry": case "DodecahedronBufferGeometry": case "IcosahedronGeometry": case "IcosahedronBufferGeometry": case "OctahedronGeometry": case "OctahedronBufferGeometry": case "TetrahedronGeometry": case "TetrahedronBufferGeometry": r = new fr[a.type](a.radius, a.detail); break; case "RingGeometry": case "RingBufferGeometry": r = new fr[a.type](a.innerRadius, a.outerRadius, a.thetaSegments, a.phiSegments, a.thetaStart, a.thetaLength); break; case "TorusGeometry": case "TorusBufferGeometry": r = new fr[a.type](a.radius, a.tube, a.radialSegments, a.tubularSegments, a.arc); break; case "TorusKnotGeometry": case "TorusKnotBufferGeometry": r = new fr[a.type](a.radius, a.tube, a.tubularSegments, a.radialSegments, a.p, a.q); break; case "TubeGeometry": case "TubeBufferGeometry": r = new fr[a.type]((new va[a.path.type]).fromJSON(a.path), a.tubularSegments, a.radius, a.radialSegments, a.closed); break; case "LatheGeometry": case "LatheBufferGeometry": r = new fr[a.type](a.points, a.segments, a.phiStart, a.phiLength); break; case "PolyhedronGeometry": case "PolyhedronBufferGeometry": r = new fr[a.type](a.vertices, a.indices, a.radius, a.details); break; case "ShapeGeometry": case "ShapeBufferGeometry": for (var s = [], l = 0, c = a.shapes.length; c > l; l++) { s.push(e[a.shapes[l]]) } r = new fr[a.type](s, a.curveSegments); break; case "ExtrudeGeometry": case "ExtrudeBufferGeometry": for (s = [], l = 0, c = a.shapes.length; c > l; l++) { s.push(e[a.shapes[l]]) } var h = a.options.extrudePath; void 0 !== h && (a.options.extrudePath = (new va[h.type]).fromJSON(h)), r = new fr[a.type](s, a.options); break; case "BufferGeometry": case "InstancedBufferGeometry": r = i.parse(a); break; case "Geometry": console.error('THREE.ObjectLoader: Loading "Geometry" is not supported anymore.'); break; default: console.warn('THREE.ObjectLoader: Unsupported geometry type "' + a.type + '"'); continue } r.uuid = a.uuid, void 0 !== a.name && (r.name = a.name), !0 === r.isBufferGeometry && void 0 !== a.userData && (r.userData = a.userData), t[a.uuid] = r } return t }, parseMaterials: function (A, e) { var t = {}, i = {}; if (void 0 !== A) { var o = new Da; o.setTextures(e); for (var n = 0, r = A.length; r > n; n++) { var a = A[n]; if ("MultiMaterial" === a.type) { for (var s = [], l = 0; a.materials.length > l; l++) { var c = a.materials[l]; void 0 === t[c.uuid] && (t[c.uuid] = o.parse(c)), s.push(t[c.uuid]) } i[a.uuid] = s } else void 0 === t[a.uuid] && (t[a.uuid] = o.parse(a)), i[a.uuid] = t[a.uuid] } } return i }, parseAnimations: function (A) { for (var e = [], t = 0; A.length > t; t++) { var i = A[t], o = Gr.parse(i); void 0 !== i.uuid && (o.uuid = i.uuid), e.push(o) } return e }, parseImages: function (A, e) { var t = this, i = {}; function o(A) { return t.manager.itemStart(A), n.load(A, (function () { t.manager.itemEnd(A) }), void 0, (function () { t.manager.itemError(A), t.manager.itemEnd(A) })) } if (void 0 !== A && A.length > 0) { var n = new _r(new jr(e)); n.setCrossOrigin(this.crossOrigin); for (var r = 0, a = A.length; a > r; r++) { var s = A[r], l = s.url; if (Array.isArray(l)) { i[s.uuid] = []; for (var c = 0, h = l.length; h > c; c++) { var d = l[c], p = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(d) ? d : t.resourcePath + d; i[s.uuid].push(o(p)) } } else { p = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(s.url) ? s.url : t.resourcePath + s.url; i[s.uuid] = o(p) } } } return i }, parseTextures: function (A, e) { function t(A, e) { return "number" == typeof A ? A : (console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.", A), e[A]) } var i = {}; if (void 0 !== A) for (var o = 0, n = A.length; n > o; o++) { var r, a = A[o]; void 0 === a.image && console.warn('THREE.ObjectLoader: No "image" specified for', a.uuid), void 0 === e[a.image] && console.warn("THREE.ObjectLoader: Undefined image", a.image), (r = Array.isArray(e[a.image]) ? new ut(e[a.image]) : new d(e[a.image])).needsUpdate = !0, r.uuid = a.uuid, void 0 !== a.name && (r.name = a.name), void 0 !== a.mapping && (r.mapping = t(a.mapping, ja)), void 0 !== a.offset && r.offset.fromArray(a.offset), void 0 !== a.repeat && r.repeat.fromArray(a.repeat), void 0 !== a.center && r.center.fromArray(a.center), void 0 !== a.rotation && (r.rotation = a.rotation), void 0 !== a.wrap && (r.wrapS = t(a.wrap[0], Ha), r.wrapT = t(a.wrap[1], Ha)), void 0 !== a.format && (r.format = a.format), void 0 !== a.type && (r.type = a.type), void 0 !== a.encoding && (r.encoding = a.encoding), void 0 !== a.minFilter && (r.minFilter = t(a.minFilter, Ya)), void 0 !== a.magFilter && (r.magFilter = t(a.magFilter, Ya)), void 0 !== a.anisotropy && (r.anisotropy = a.anisotropy), void 0 !== a.flipY && (r.flipY = a.flipY), void 0 !== a.premultiplyAlpha && (r.premultiplyAlpha = a.premultiplyAlpha), void 0 !== a.unpackAlignment && (r.unpackAlignment = a.unpackAlignment), i[a.uuid] = r } return i }, parseObject: function (A, e, t) { var i; function o(A) { return void 0 === e[A] && console.warn("THREE.ObjectLoader: Undefined geometry", A), e[A] } function n(A) { if (void 0 !== A) { if (Array.isArray(A)) { for (var e = [], i = 0, o = A.length; o > i; i++) { var n = A[i]; void 0 === t[n] && console.warn("THREE.ObjectLoader: Undefined material", n), e.push(t[n]) } return e } return void 0 === t[A] && console.warn("THREE.ObjectLoader: Undefined material", A), t[A] } } switch (A.type) { case "Scene": i = new Y, void 0 !== A.background && Number.isInteger(A.background) && (i.background = new LA(A.background)), void 0 !== A.fog && ("Fog" === A.fog.type ? i.fog = new eo(A.fog.color, A.fog.near, A.fog.far) : "FogExp2" === A.fog.type && (i.fog = new Ao(A.fog.color, A.fog.density))); break; case "PerspectiveCamera": i = new je(A.fov, A.aspect, A.near, A.far), void 0 !== A.focus && (i.focus = A.focus), void 0 !== A.zoom && (i.zoom = A.zoom), void 0 !== A.filmGauge && (i.filmGauge = A.filmGauge), void 0 !== A.filmOffset && (i.filmOffset = A.filmOffset), void 0 !== A.view && (i.view = Object.assign({}, A.view)); break; case "OrthographicCamera": i = new Ka(A.left, A.right, A.top, A.bottom, A.near, A.far), void 0 !== A.zoom && (i.zoom = A.zoom), void 0 !== A.view && (i.view = Object.assign({}, A.view)); break; case "AmbientLight": i = new Ta(A.color, A.intensity); break; case "DirectionalLight": i = new Ra(A.color, A.intensity); break; case "PointLight": i = new Fa(A.color, A.intensity, A.distance, A.decay); break; case "RectAreaLight": i = new ka(A.color, A.intensity, A.width, A.height); break; case "SpotLight": i = new ba(A.color, A.intensity, A.distance, A.angle, A.penumbra, A.decay); break; case "HemisphereLight": i = new Sa(A.color, A.groundColor, A.intensity); break; case "SkinnedMesh": console.warn("THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet."); case "Mesh": i = new Ue(r = o(A.geometry), a = n(A.material)); break; case "InstancedMesh": var r = o(A.geometry), a = n(A.material), s = A.instanceMatrix; (i = new To(r, a, A.count)).instanceMatrix = new YA(new Float32Array(s.array), 16); break; case "LOD": i = new xo; break; case "Line": i = new Go(o(A.geometry), n(A.material), A.mode); break; case "LineLoop": i = new Ho(o(A.geometry), n(A.material)); break; case "LineSegments": i = new jo(o(A.geometry), n(A.material)); break; case "PointCloud": case "Points": i = new Xo(o(A.geometry), n(A.material)); break; case "Sprite": i = new vo(n(A.material)); break; case "Group": i = new Xi; break; default: i = new H } if (i.uuid = A.uuid, void 0 !== A.name && (i.name = A.name), void 0 !== A.matrix ? (i.matrix.fromArray(A.matrix), void 0 !== A.matrixAutoUpdate && (i.matrixAutoUpdate = A.matrixAutoUpdate), i.matrixAutoUpdate && i.matrix.decompose(i.position, i.quaternion, i.scale)) : (void 0 !== A.position && i.position.fromArray(A.position), void 0 !== A.rotation && i.rotation.fromArray(A.rotation), void 0 !== A.quaternion && i.quaternion.fromArray(A.quaternion), void 0 !== A.scale && i.scale.fromArray(A.scale)), void 0 !== A.castShadow && (i.castShadow = A.castShadow), void 0 !== A.receiveShadow && (i.receiveShadow = A.receiveShadow), A.shadow && (void 0 !== A.shadow.bias && (i.shadow.bias = A.shadow.bias), void 0 !== A.shadow.radius && (i.shadow.radius = A.shadow.radius), void 0 !== A.shadow.mapSize && i.shadow.mapSize.fromArray(A.shadow.mapSize), void 0 !== A.shadow.camera && (i.shadow.camera = this.parseObject(A.shadow.camera))), void 0 !== A.visible && (i.visible = A.visible), void 0 !== A.frustumCulled && (i.frustumCulled = A.frustumCulled), void 0 !== A.renderOrder && (i.renderOrder = A.renderOrder), void 0 !== A.userData && (i.userData = A.userData), void 0 !== A.layers && (i.layers.mask = A.layers), void 0 !== A.children) for (var l = A.children, c = 0; l.length > c; c++) i.add(this.parseObject(l[c], e, t)); if ("LOD" === A.type) { void 0 !== A.autoUpdate && (i.autoUpdate = A.autoUpdate); for (var h = A.levels, d = 0; h.length > d; d++) { var p = h[d], g = i.getObjectByProperty("uuid", p.object); void 0 !== g && i.addLevel(g, p.distance) } } return i } }); var qa, ja = { UVMapping: 300, CubeReflectionMapping: 301, CubeRefractionMapping: 302, EquirectangularReflectionMapping: 303, EquirectangularRefractionMapping: 304, SphericalReflectionMapping: 305, CubeUVReflectionMapping: 306, CubeUVRefractionMapping: 307 }, Ha = { RepeatWrapping: 1e3, ClampToEdgeWrapping: 1001, MirroredRepeatWrapping: 1002 }, Ya = { NearestFilter: 1003, NearestMipmapNearestFilter: 1004, NearestMipmapLinearFilter: 1005, LinearFilter: 1006, LinearMipmapNearestFilter: 1007, LinearMipmapLinearFilter: 1008 }; function Wa(A) { "undefined" == typeof createImageBitmap && console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."), "undefined" == typeof fetch && console.warn("THREE.ImageBitmapLoader: fetch() not supported."), Yr.call(this, A), this.options = void 0 } function Ja() { this.type = "ShapePath", this.color = new LA, this.subPaths = [], this.currentPath = null } function za(A) { this.type = "Font", this.data = A } function Za(A, e, t, i, o) { var n = o.glyphs[A] || o.glyphs["?"]; if (n) { var r, a, s, l, c, h, d, p, g = new Ja; if (n.o) for (var u = n._cachedOutline || (n._cachedOutline = n.o.split(" ")), f = 0, m = u.length; m > f;) { switch (u[f++]) { case "m": r = u[f++] * e + t, a = u[f++] * e + i, g.moveTo(r, a); break; case "l": r = u[f++] * e + t, a = u[f++] * e + i, g.lineTo(r, a); break; case "q": s = u[f++] * e + t, l = u[f++] * e + i, c = u[f++] * e + t, h = u[f++] * e + i, g.quadraticCurveTo(c, h, s, l); break; case "b": s = u[f++] * e + t, l = u[f++] * e + i, c = u[f++] * e + t, h = u[f++] * e + i, d = u[f++] * e + t, p = u[f++] * e + i, g.bezierCurveTo(c, h, d, p, s, l) } } return { offsetX: n.ha * e, path: g } } console.error('THREE.Font: character "' + A + '" does not exists in font family ' + o.familyName + ".") } function Xa(A) { Yr.call(this, A) } Wa.prototype = Object.assign(Object.create(Yr.prototype), { constructor: Wa, setOptions: function (A) { return this.options = A, this }, load: function (A, e, t, i) { void 0 === A && (A = ""), void 0 !== this.path && (A = this.path + A), A = this.manager.resolveURL(A); var o = this, n = qr.get(A); if (void 0 !== n) return o.manager.itemStart(A), setTimeout((function () { e && e(n), o.manager.itemEnd(A) }), 0), n; fetch(A).then((function (A) { return A.blob() })).then((function (A) { return void 0 === o.options ? createImageBitmap(A) : createImageBitmap(A, o.options) })).then((function (t) { qr.add(A, t), e && e(t), o.manager.itemEnd(A) })).catch((function (e) { i && i(e), o.manager.itemError(A), o.manager.itemEnd(A) })), o.manager.itemStart(A) } }), Object.assign(Ja.prototype, { moveTo: function (A, e) { return this.currentPath = new Ea, this.subPaths.push(this.currentPath), this.currentPath.moveTo(A, e), this }, lineTo: function (A, e) { return this.currentPath.lineTo(A, e), this }, quadraticCurveTo: function (A, e, t, i) { return this.currentPath.quadraticCurveTo(A, e, t, i), this }, bezierCurveTo: function (A, e, t, i, o, n) { return this.currentPath.bezierCurveTo(A, e, t, i, o, n), this }, splineThru: function (A) { return this.currentPath.splineThru(A), this }, toShapes: function (A, e) { function t(A) { for (var e = [], t = 0, i = A.length; i > t; t++) { var o = A[t], n = new Ba; n.curves = o.curves, e.push(n) } return e } function i(A, e) { for (var t = e.length, i = !1, o = t - 1, n = 0; t > n; o = n++) { var r = e[o], a = e[n], s = a.x - r.x, l = a.y - r.y; if (Math.abs(l) > Number.EPSILON) { if (0 > l && (r = e[n], s = -s, a = e[o], l = -l), r.y > A.y || A.y > a.y) continue; if (A.y === r.y) { if (A.x === r.x) return !0 } else { var c = l * (A.x - r.x) - s * (A.y - r.y); if (0 === c) return !0; if (0 > c) continue; i = !i } } else { if (A.y !== r.y) continue; if (A.x >= a.x && r.x >= A.x || A.x >= r.x && a.x >= A.x) return !0 } } return i } var o = Hn.isClockWise, n = this.subPaths; if (0 === n.length) return []; if (!0 === e) return t(n); var r, a, s, l = []; if (1 === n.length) return a = n[0], (s = new Ba).curves = a.curves, l.push(s), l; var c = !o(n[0].getPoints()); c = A ? !c : c; var h, d, p = [], g = [], u = [], f = 0; g[f] = void 0, u[f] = []; for (var m = 0, C = n.length; C > m; m++) r = o(h = (a = n[m]).getPoints()), (r = A ? !r : r) ? (!c && g[f] && f++, g[f] = { s: new Ba, p: h }, g[f].s.curves = a.curves, c && f++, u[f] = []) : u[f].push({ h: a, p: h[0] }); if (!g[0]) return t(n); if (g.length > 1) { for (var y = !1, v = [], I = 0, E = g.length; E > I; I++) p[I] = []; for (I = 0, E = g.length; E > I; I++) for (var B = u[I], x = 0; B.length > x; x++) { for (var S = B[x], w = !0, M = 0; g.length > M; M++) i(S.p, g[M].p) && (I !== M && v.push({ froms: I, tos: M, hole: x }), w ? (w = !1, p[M].push(S)) : y = !0); w && p[I].push(S) } v.length > 0 && (y || (u = p)) } m = 0; for (var b = g.length; b > m; m++) { l.push(s = g[m].s); for (var U = 0, F = (d = u[m]).length; F > U; U++) s.holes.push(d[U].h) } return l } }), Object.assign(za.prototype, { isFont: !0, generateShapes: function (A, e) { void 0 === e && (e = 100); for (var t = [], i = function (A, e, t) { for (var i = Array.from ? Array.from(A) : String(A).split(""), o = e / t.resolution, n = (t.boundingBox.yMax - t.boundingBox.yMin + t.underlineThickness) * o, r = [], a = 0, s = 0, l = 0; i.length > l; l++) { var c = i[l]; if ("\n" === c) a = 0, s -= n; else { var h = Za(c, o, a, s, t); a += h.offsetX, r.push(h.path) } } return r }(A, e, this.data), o = 0, n = i.length; n > o; o++) Array.prototype.push.apply(t, i[o].toShapes()); return t } }), Xa.prototype = Object.assign(Object.create(Yr.prototype), { constructor: Xa, load: function (A, e, t, i) { var o = this, n = new Jr(this.manager); n.setPath(this.path), n.load(A, (function (A) { var t; try { t = JSON.parse(A) } catch (e) { console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."), t = JSON.parse(A.substring(65, A.length - 2)) } var i = o.parse(t); e && e(i) }), t, i) }, parse: function (A) { return new za(A) } }); var _a = { getContext: function () { return void 0 === qa && (qa = new(window.AudioContext || window.webkitAudioContext)), qa }, setContext: function (A) { qa = A } }; function $a(A) { Yr.call(this, A) } function As() { this.coefficients = []; for (var A = 0; 9 > A; A++) this.coefficients.push(new y) } function es(A, e) { xa.call(this, void 0, e), this.sh = void 0 !== A ? A : new As } function ts(A, e, t) { es.call(this, void 0, t); var i = (new LA).set(A), o = (new LA).set(e), n = new y(i.r, i.g, i.b), r = new y(o.r, o.g, o.b), a = Math.sqrt(Math.PI), s = a * Math.sqrt(.75); this.sh.coefficients[0].copy(n).add(r).multiplyScalar(a), this.sh.coefficients[1].copy(n).sub(r).multiplyScalar(s) } function is(A, e) { es.call(this, void 0, e); var t = (new LA).set(A); this.sh.coefficients[0].set(t.r, t.g, t.b).multiplyScalar(2 * Math.sqrt(Math.PI)) } $a.prototype = Object.assign(Object.create(Yr.prototype), { constructor: $a, load: function (A, e, t, i) { var o = new Jr(this.manager); o.setResponseType("arraybuffer"), o.setPath(this.path), o.load(A, (function (A) { var t = A.slice(0); _a.getContext().decodeAudioData(t, (function (A) { e(A) })) }), t, i) } }), Object.assign(As.prototype, { isSphericalHarmonics3: !0, set: function (A) { for (var e = 0; 9 > e; e++) this.coefficients[e].copy(A[e]); return this }, zero: function () { for (var A = 0; 9 > A; A++) this.coefficients[A].set(0, 0, 0); return this }, getAt: function (A, e) { var t = A.x, i = A.y, o = A.z, n = this.coefficients; return e.copy(n[0]).multiplyScalar(.282095), e.addScaledVector(n[1], .488603 * i), e.addScaledVector(n[2], .488603 * o), e.addScaledVector(n[3], .488603 * t), e.addScaledVector(n[4], t * i * 1.092548), e.addScaledVector(n[5], i * o * 1.092548), e.addScaledVector(n[6], .315392 * (3 * o * o - 1)), e.addScaledVector(n[7], t * o * 1.092548), e.addScaledVector(n[8], .546274 * (t * t - i * i)), e }, getIrradianceAt: function (A, e) { var t = A.x, i = A.y, o = A.z, n = this.coefficients; return e.copy(n[0]).multiplyScalar(.886227), e.addScaledVector(n[1], 1.023328 * i), e.addScaledVector(n[2], 1.023328 * o), e.addScaledVector(n[3], 1.023328 * t), e.addScaledVector(n[4], .858086 * t * i), e.addScaledVector(n[5], .858086 * i * o), e.addScaledVector(n[6], .743125 * o * o - .247708), e.addScaledVector(n[7], .858086 * t * o), e.addScaledVector(n[8], .429043 * (t * t - i * i)), e }, add: function (A) { for (var e = 0; 9 > e; e++) this.coefficients[e].add(A.coefficients[e]); return this }, addScaledSH: function (A, e) { for (var t = 0; 9 > t; t++) this.coefficients[t].addScaledVector(A.coefficients[t], e); return this }, scale: function (A) { for (var e = 0; 9 > e; e++) this.coefficients[e].multiplyScalar(A); return this }, lerp: function (A, e) { for (var t = 0; 9 > t; t++) this.coefficients[t].lerp(A.coefficients[t], e); return this }, equals: function (A) { for (var e = 0; 9 > e; e++) if (!this.coefficients[e].equals(A.coefficients[e])) return !1; return !0 }, copy: function (A) { return this.set(A.coefficients) }, clone: function () { return (new this.constructor).copy(this) }, fromArray: function (A, e) { void 0 === e && (e = 0); for (var t = this.coefficients, i = 0; 9 > i; i++) t[i].fromArray(A, e + 3 * i); return this }, toArray: function (A, e) { void 0 === A && (A = []), void 0 === e && (e = 0); for (var t = this.coefficients, i = 0; 9 > i; i++) t[i].toArray(A, e + 3 * i); return A } }), Object.assign(As, { getBasisAt: function (A, e) { var t = A.x, i = A.y, o = A.z; e[0] = .282095, e[1] = .488603 * i, e[2] = .488603 * o, e[3] = .488603 * t, e[4] = 1.092548 * t * i, e[5] = 1.092548 * i * o, e[6] = .315392 * (3 * o * o - 1), e[7] = 1.092548 * t * o, e[8] = .546274 * (t * t - i * i) } }), es.prototype = Object.assign(Object.create(xa.prototype), { constructor: es, isLightProbe: !0, copy: function (A) { return xa.prototype.copy.call(this, A), this.sh.copy(A.sh), this.intensity = A.intensity, this }, toJSON: function (A) { return xa.prototype.toJSON.call(this, A) } }), ts.prototype = Object.assign(Object.create(es.prototype), { constructor: ts, isHemisphereLightProbe: !0, copy: function (A) { return es.prototype.copy.call(this, A), this }, toJSON: function (A) { return es.prototype.toJSON.call(this, A) } }), is.prototype = Object.assign(Object.create(es.prototype), { constructor: is, isAmbientLightProbe: !0, copy: function (A) { return es.prototype.copy.call(this, A), this }, toJSON: function (A) { return es.prototype.toJSON.call(this, A) } }); var os = new M, ns = new M; function rs() { this.type = "StereoCamera", this.aspect = 1, this.eyeSep = .064, this.cameraL = new je, this.cameraL.layers.enable(1), this.cameraL.matrixAutoUpdate = !1, this.cameraR = new je, 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 } } function as(A) { this.autoStart = void 0 === A || A, this.startTime = 0, this.oldTime = 0, this.elapsedTime = 0, this.running = !1 } Object.assign(rs.prototype, { update: function (A) { var e = this._cache; if (e.focus !== A.focus || e.fov !== A.fov || e.aspect !== A.aspect * this.aspect || e.near !== A.near || e.far !== A.far || e.zoom !== A.zoom || e.eyeSep !== this.eyeSep) { e.focus = A.focus, e.fov = A.fov, e.aspect = A.aspect * this.aspect, e.near = A.near, e.far = A.far, e.zoom = A.zoom, e.eyeSep = this.eyeSep; var t, i, o = A.projectionMatrix.clone(), n = e.eyeSep / 2, r = n * e.near / e.focus, s = e.near * Math.tan(a.DEG2RAD * e.fov * .5) / e.zoom; ns.elements[12] = -n, os.elements[12] = n, o.elements[0] = 2 * e.near / ((i = s * e.aspect + r) - (t = -s * e.aspect + r)), o.elements[8] = (i + t) / (i - t), this.cameraL.projectionMatrix.copy(o), o.elements[0] = 2 * e.near / ((i = s * e.aspect - r) - (t = -s * e.aspect - r)), o.elements[8] = (i + t) / (i - t), this.cameraR.projectionMatrix.copy(o) } this.cameraL.matrixWorld.copy(A.matrixWorld).multiply(ns), this.cameraR.matrixWorld.copy(A.matrixWorld).multiply(os) } }), Object.assign(as.prototype, { start: function () { this.startTime = ("undefined" == typeof performance ? Date : performance).now(), this.oldTime = this.startTime, this.elapsedTime = 0, this.running = !0 }, stop: function () { this.getElapsedTime(), this.running = !1, this.autoStart = !1 }, getElapsedTime: function () { return this.getDelta(), this.elapsedTime }, getDelta: function () { var A = 0; if (this.autoStart && !this.running) return this.start(), 0; if (this.running) { var e = ("undefined" == typeof performance ? Date : performance).now(); A = (e - this.oldTime) / 1e3, this.oldTime = e, this.elapsedTime += A } return A } }); var ss = new y, ls = new f, cs = new y, hs = new y; function ds() { H.call(this), this.type = "AudioListener", this.context = _a.getContext(), this.gain = this.context.createGain(), this.gain.connect(this.context.destination), this.filter = null, this.timeDelta = 0, this._clock = new as } function ps(A) { H.call(this), this.type = "Audio", this.listener = A, this.context = A.context, this.gain = this.context.createGain(), this.gain.connect(A.getInput()), this.autoplay = !1, this.buffer = null, this.detune = 0, this.loop = !1, this.loopStart = 0, this.loopEnd = 0, this.offset = 0, this.duration = void 0, this.playbackRate = 1, this.isPlaying = !1, this.hasPlaybackControl = !0, this.sourceType = "empty", this._startedAt = 0, this._pausedAt = 0, this.filters = [] } ds.prototype = Object.assign(Object.create(H.prototype), { constructor: ds, getInput: function () { return this.gain }, 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 }, getFilter: function () { return this.filter }, setFilter: function (A) { return null !== this.filter ? (this.gain.disconnect(this.filter), this.filter.disconnect(this.context.destination)) : this.gain.disconnect(this.context.destination), this.filter = A, this.gain.connect(this.filter), this.filter.connect(this.context.destination), this }, getMasterVolume: function () { return this.gain.gain.value }, setMasterVolume: function (A) { return this.gain.gain.setTargetAtTime(A, this.context.currentTime, .01), this }, updateMatrixWorld: function (A) { H.prototype.updateMatrixWorld.call(this, A); var e = this.context.listener, t = this.up; if (this.timeDelta = this._clock.getDelta(), this.matrixWorld.decompose(ss, ls, cs), hs.set(0, 0, -1).applyQuaternion(ls), e.positionX) { var i = this.context.currentTime + this.timeDelta; e.positionX.linearRampToValueAtTime(ss.x, i), e.positionY.linearRampToValueAtTime(ss.y, i), e.positionZ.linearRampToValueAtTime(ss.z, i), e.forwardX.linearRampToValueAtTime(hs.x, i), e.forwardY.linearRampToValueAtTime(hs.y, i), e.forwardZ.linearRampToValueAtTime(hs.z, i), e.upX.linearRampToValueAtTime(t.x, i), e.upY.linearRampToValueAtTime(t.y, i), e.upZ.linearRampToValueAtTime(t.z, i) } else e.setPosition(ss.x, ss.y, ss.z), e.setOrientation(hs.x, hs.y, hs.z, t.x, t.y, t.z) } }), ps.prototype = Object.assign(Object.create(H.prototype), { constructor: ps, getOutput: function () { return this.gain }, setNodeSource: function (A) { return this.hasPlaybackControl = !1, this.sourceType = "audioNode", this.source = A, this.connect(), this }, setMediaElementSource: function (A) { return this.hasPlaybackControl = !1, this.sourceType = "mediaNode", this.source = this.context.createMediaElementSource(A), this.connect(), this }, setMediaStreamSource: function (A) { return this.hasPlaybackControl = !1, this.sourceType = "mediaStreamNode", this.source = this.context.createMediaStreamSource(A), this.connect(), this }, setBuffer: function (A) { return this.buffer = A, this.sourceType = "buffer", this.autoplay && this.play(), this }, play: function (A) { if (void 0 === A && (A = 0), !0 !== this.isPlaying) { if (!1 !== this.hasPlaybackControl) { this._startedAt = this.context.currentTime + A; var e = this.context.createBufferSource(); return e.buffer = this.buffer, e.loop = this.loop, e.loopStart = this.loopStart, e.loopEnd = this.loopEnd, e.onended = this.onEnded.bind(this), e.start(this._startedAt, this._pausedAt + this.offset, this.duration), this.isPlaying = !0, this.source = e, 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.") }, pause: function () { if (!1 !== this.hasPlaybackControl) return !0 === this.isPlaying && (this._pausedAt += Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate, this.source.stop(), this.source.onended = null, this.isPlaying = !1), this; console.warn("THREE.Audio: this Audio has no playback control.") }, stop: function () { if (!1 !== this.hasPlaybackControl) return this._pausedAt = 0, this.source.stop(), this.source.onended = null, this.isPlaying = !1, this; console.warn("THREE.Audio: this Audio has no playback control.") }, connect: function () { if (this.filters.length > 0) { this.source.connect(this.filters[0]); for (var A = 1, e = this.filters.length; e > A; A++) this.filters[A - 1].connect(this.filters[A]); this.filters[this.filters.length - 1].connect(this.getOutput()) } else this.source.connect(this.getOutput()); return this }, disconnect: function () { if (this.filters.length > 0) { this.source.disconnect(this.filters[0]); for (var A = 1, e = this.filters.length; e > A; A++) this.filters[A - 1].disconnect(this.filters[A]); this.filters[this.filters.length - 1].disconnect(this.getOutput()) } else this.source.disconnect(this.getOutput()); return this }, getFilters: function () { return this.filters }, setFilters: function (A) { return A || (A = []), !0 === this.isPlaying ? (this.disconnect(), this.filters = A, this.connect()) : this.filters = A, this }, setDetune: function (A) { if (this.detune = A, void 0 !== this.source.detune) return !0 === this.isPlaying && this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, .01), this }, getDetune: function () { return this.detune }, getFilter: function () { return this.getFilters()[0] }, setFilter: function (A) { return this.setFilters(A ? [A] : []) }, setPlaybackRate: function (A) { if (!1 !== this.hasPlaybackControl) return this.playbackRate = A, !0 === this.isPlaying && this.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, .01), this; console.warn("THREE.Audio: this Audio has no playback control.") }, getPlaybackRate: function () { return this.playbackRate }, onEnded: function () { this.isPlaying = !1 }, getLoop: function () { return !1 === this.hasPlaybackControl ? (console.warn("THREE.Audio: this Audio has no playback control."), !1) : this.loop }, setLoop: function (A) { if (!1 !== this.hasPlaybackControl) return this.loop = A, !0 === this.isPlaying && (this.source.loop = this.loop), this; console.warn("THREE.Audio: this Audio has no playback control.") }, setLoopStart: function (A) { return this.loopStart = A, this }, setLoopEnd: function (A) { return this.loopEnd = A, this }, getVolume: function () { return this.gain.gain.value }, setVolume: function (A) { return this.gain.gain.setTargetAtTime(A, this.context.currentTime, .01), this } }); var gs = new y, us = new f, fs = new y, ms = new y; function Cs(A) { ps.call(this, A), this.panner = this.context.createPanner(), this.panner.panningModel = "HRTF", this.panner.connect(this.gain) } function ys(A, e) { this.analyser = A.context.createAnalyser(), this.analyser.fftSize = void 0 !== e ? e : 2048, this.data = new Uint8Array(this.analyser.frequencyBinCount), A.getOutput().connect(this.analyser) } function vs(A, e, t) { this.binding = A, this.valueSize = t; var i, o = Float64Array; switch (e) { case "quaternion": i = this._slerp; break; case "string": case "bool": o = Array, i = this._select; break; default: i = this._lerp } this.buffer = new o(4 * t), this._mixBufferRegion = i, this.cumulativeWeight = 0, this.useCount = 0, this.referenceCount = 0 } Cs.prototype = Object.assign(Object.create(ps.prototype), { constructor: Cs, getOutput: function () { return this.panner }, getRefDistance: function () { return this.panner.refDistance }, setRefDistance: function (A) { return this.panner.refDistance = A, this }, getRolloffFactor: function () { return this.panner.rolloffFactor }, setRolloffFactor: function (A) { return this.panner.rolloffFactor = A, this }, getDistanceModel: function () { return this.panner.distanceModel }, setDistanceModel: function (A) { return this.panner.distanceModel = A, this }, getMaxDistance: function () { return this.panner.maxDistance }, setMaxDistance: function (A) { return this.panner.maxDistance = A, this }, setDirectionalCone: function (A, e, t) { return this.panner.coneInnerAngle = A, this.panner.coneOuterAngle = e, this.panner.coneOuterGain = t, this }, updateMatrixWorld: function (A) { if (H.prototype.updateMatrixWorld.call(this, A), !0 !== this.hasPlaybackControl || !1 !== this.isPlaying) { this.matrixWorld.decompose(gs, us, fs), ms.set(0, 0, 1).applyQuaternion(us); var e = this.panner; if (e.positionX) { var t = this.context.currentTime + this.listener.timeDelta; e.positionX.linearRampToValueAtTime(gs.x, t), e.positionY.linearRampToValueAtTime(gs.y, t), e.positionZ.linearRampToValueAtTime(gs.z, t), e.orientationX.linearRampToValueAtTime(ms.x, t), e.orientationY.linearRampToValueAtTime(ms.y, t), e.orientationZ.linearRampToValueAtTime(ms.z, t) } else e.setPosition(gs.x, gs.y, gs.z), e.setOrientation(ms.x, ms.y, ms.z) } } }), Object.assign(ys.prototype, { getFrequencyData: function () { return this.analyser.getByteFrequencyData(this.data), this.data }, getAverageFrequency: function () { for (var A = 0, e = this.getFrequencyData(), t = 0; e.length > t; t++) A += e[t]; return A / e.length } }), Object.assign(vs.prototype, { accumulate: function (A, e) { var t = this.buffer, i = this.valueSize, o = A * i + i, n = this.cumulativeWeight; if (0 === n) { for (var r = 0; r !== i; ++r) t[o + r] = t[r]; n = e } else { this._mixBufferRegion(t, o, 0, e / (n += e), i) } this.cumulativeWeight = n }, apply: function (A) { var e = this.valueSize, t = this.buffer, i = A * e + e, o = this.cumulativeWeight, n = this.binding; (this.cumulativeWeight = 0, 1 > o) && this._mixBufferRegion(t, i, 3 * e, 1 - o, e); for (var r = e, a = e + e; r !== a; ++r) if (t[r] !== t[r + e]) { n.setValue(t, i); break } }, saveOriginalState: function () { var A = this.buffer, e = this.valueSize, t = 3 * e; this.binding.getValue(A, t); for (var i = e, o = t; i !== o; ++i) A[i] = A[t + i % e]; this.cumulativeWeight = 0 }, restoreOriginalState: function () { this.binding.setValue(this.buffer, 3 * this.valueSize) }, _select: function (A, e, t, i, o) { if (i >= .5) for (var n = 0; n !== o; ++n) A[e + n] = A[t + n] }, _slerp: function (A, e, t, i) { f.slerpFlat(A, e, A, e, A, t, i) }, _lerp: function (A, e, t, i, o) { for (var n = 1 - i, r = 0; r !== o; ++r) { var a = e + r; A[a] = A[a] * n + A[t + r] * i } } }); var Is = new RegExp("[\\[\\]\\.:\\/]", "g"), Es = "[^" + "\\[\\]\\.:\\/".replace("\\.", "") + "]", Bs = /((?:WC+[\/:])*)/.source.replace("WC", "[^\\[\\]\\.:\\/]"), xs = /(WCOD+)?/.source.replace("WCOD", Es), Ss = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC", "[^\\[\\]\\.:\\/]"), ws = /\.(WC+)(?:\[(.+)\])?/.source.replace("WC", "[^\\[\\]\\.:\\/]"), Ms = new RegExp("^" + Bs + xs + Ss + ws + "$"), bs = ["material", "materials", "bones"]; function Us(A, e, t) { var i = t || Fs.parseTrackName(e); this._targetGroup = A, this._bindings = A.subscribe_(e, i) } function Fs(A, e, t) { this.path = e, this.parsedPath = t || Fs.parseTrackName(e), this.node = Fs.findNode(A, this.parsedPath.nodeName) || A, this.rootNode = A } function Ks() { this.uuid = a.generateUUID(), this._objects = Array.prototype.slice.call(arguments), this.nCachedObjects_ = 0; var A = {}; this._indicesByUUID = A; for (var e = 0, t = arguments.length; e !== t; ++e) A[arguments[e].uuid] = e; this._paths = [], this._parsedPaths = [], this._bindings = [], this._bindingsIndicesByPath = {}; var i = this; this.stats = { objects: { get total() { return i._objects.length }, get inUse() { return this.total - i.nCachedObjects_ } }, get bindingsPerObject() { return i._bindings.length } } } function Qs(A, e, t) { this._mixer = A, this._clip = e, this._localRoot = t || null; for (var i = e.tracks, o = i.length, n = new Array(o), r = { endingStart: 2400, endingEnd: 2400 }, a = 0; a !== o; ++a) { var s = i[a].createInterpolant(null); n[a] = s, s.settings = r } this._interpolantSettings = r, this._interpolants = n, this._propertyBindings = new Array(o), this._cacheIndex = null, this._byClipCacheIndex = null, this._timeScaleInterpolant = null, this._weightInterpolant = null, this.loop = 2201, this._loopCount = -1, this._startTime = null, this.time = 0, this.timeScale = 1, this._effectiveTimeScale = 1, this.weight = 1, this._effectiveWeight = 1, this.repetitions = 1 / 0, this.paused = !1, this.enabled = !0, this.clampWhenFinished = !1, this.zeroSlopeAtStart = !0, this.zeroSlopeAtEnd = !0 } function Rs(A) { this._root = A, this._initMemoryManager(), this._accuIndex = 0, this.time = 0, this.timeScale = 1 } function Ts(A) { "string" == typeof A && (console.warn("THREE.Uniform: Type parameter is no longer needed."), A = arguments[1]), this.value = A } function ks(A, e, t) { to.call(this, A, e), this.meshPerAttribute = t || 1 } function Ds(A, e, t, i) { this.ray = new CA(A, e), this.near = t || 0, this.far = i || 1 / 0, this.camera = null, this.layers = new K, 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 Ls(A, e) { return A.distance - e.distance } function Ns(A, e, t, i) { if (A.layers.test(e.layers) && A.raycast(e, t), !0 === i) for (var o = A.children, n = 0, r = o.length; r > n; n++) Ns(o[n], e, t, !0) } function Os(A, e, t) { return this.radius = void 0 !== A ? A : 1, this.phi = void 0 !== e ? e : 0, this.theta = void 0 !== t ? t : 0, this } function Vs(A, e, t) { return this.radius = void 0 !== A ? A : 1, this.theta = void 0 !== e ? e : 0, this.y = void 0 !== t ? t : 0, this } Object.assign(Us.prototype, { getValue: function (A, e) { this.bind(); var t = this._bindings[this._targetGroup.nCachedObjects_]; void 0 !== t && t.getValue(A, e) }, setValue: function (A, e) { for (var t = this._bindings, i = this._targetGroup.nCachedObjects_, o = t.length; i !== o; ++i) t[i].setValue(A, e) }, bind: function () { for (var A = this._bindings, e = this._targetGroup.nCachedObjects_, t = A.length; e !== t; ++e) A[e].bind() }, unbind: function () { for (var A = this._bindings, e = this._targetGroup.nCachedObjects_, t = A.length; e !== t; ++e) A[e].unbind() } }), Object.assign(Fs, { Composite: Us, create: function (A, e, t) { return A && A.isAnimationObjectGroup ? new Fs.Composite(A, e, t) : new Fs(A, e, t) }, sanitizeNodeName: function (A) { return A.replace(/\s/g, "_").replace(Is, "") }, parseTrackName: function (A) { var e = Ms.exec(A); if (!e) throw new Error("PropertyBinding: Cannot parse trackName: " + A); var t = { nodeName: e[2], objectName: e[3], objectIndex: e[4], propertyName: e[5], propertyIndex: e[6] }, i = t.nodeName && t.nodeName.lastIndexOf("."); if (void 0 !== i && -1 !== i) { var o = t.nodeName.substring(i + 1); - 1 !== bs.indexOf(o) && (t.nodeName = t.nodeName.substring(0, i), t.objectName = o) } if (null === t.propertyName || 0 === t.propertyName.length) throw new Error("PropertyBinding: can not parse propertyName from trackName: " + A); return t }, findNode: function (A, e) { if (!e || "" === e || "." === e || -1 === e || e === A.name || e === A.uuid) return A; if (A.skeleton) { var t = A.skeleton.getBoneByName(e); if (void 0 !== t) return t } if (A.children) { var i = function (A) { for (var t = 0; A.length > t; t++) { var o = A[t]; if (o.name === e || o.uuid === e) return o; var n = i(o.children); if (n) return n } return null }, o = i(A.children); if (o) return o } return null } }), Object.assign(Fs.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 (A, e) { A[e] = this.node[this.propertyName] }, function (A, e) { for (var t = this.resolvedProperty, i = 0, o = t.length; i !== o; ++i) A[e++] = t[i] }, function (A, e) { A[e] = this.resolvedProperty[this.propertyIndex] }, function (A, e) { this.resolvedProperty.toArray(A, e) }], SetterByBindingTypeAndVersioning: [ [function (A, e) { this.targetObject[this.propertyName] = A[e] }, function (A, e) { this.targetObject[this.propertyName] = A[e], this.targetObject.needsUpdate = !0 }, function (A, e) { this.targetObject[this.propertyName] = A[e], this.targetObject.matrixWorldNeedsUpdate = !0 }], [function (A, e) { for (var t = this.resolvedProperty, i = 0, o = t.length; i !== o; ++i) t[i] = A[e++] }, function (A, e) { for (var t = this.resolvedProperty, i = 0, o = t.length; i !== o; ++i) t[i] = A[e++]; this.targetObject.needsUpdate = !0 }, function (A, e) { for (var t = this.resolvedProperty, i = 0, o = t.length; i !== o; ++i) t[i] = A[e++]; this.targetObject.matrixWorldNeedsUpdate = !0 }], [function (A, e) { this.resolvedProperty[this.propertyIndex] = A[e] }, function (A, e) { this.resolvedProperty[this.propertyIndex] = A[e], this.targetObject.needsUpdate = !0 }, function (A, e) { this.resolvedProperty[this.propertyIndex] = A[e], this.targetObject.matrixWorldNeedsUpdate = !0 }], [function (A, e) { this.resolvedProperty.fromArray(A, e) }, function (A, e) { this.resolvedProperty.fromArray(A, e), this.targetObject.needsUpdate = !0 }, function (A, e) { this.resolvedProperty.fromArray(A, e), this.targetObject.matrixWorldNeedsUpdate = !0 }] ], getValue: function (A, e) { this.bind(), this.getValue(A, e) }, setValue: function (A, e) { this.bind(), this.setValue(A, e) }, bind: function () { var A = this.node, e = this.parsedPath, t = e.objectName, i = e.propertyName, o = e.propertyIndex; if (A || (A = Fs.findNode(this.rootNode, e.nodeName) || this.rootNode, this.node = A), this.getValue = this._getValue_unavailable, this.setValue = this._setValue_unavailable, A) { if (t) { var n = e.objectIndex; switch (t) { case "materials": if (!A.material) return void console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); if (!A.material.materials) return void console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.", this); A = A.material.materials; break; case "bones": if (!A.skeleton) return void console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.", this); A = A.skeleton.bones; for (var r = 0; A.length > r; r++) if (A[r].name === n) { n = r; break } break; default: if (void 0 === A[t]) return void console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.", this); A = A[t] } if (void 0 !== n) { if (void 0 === A[n]) return void console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.", this, A); A = A[n] } } var a = A[i]; if (void 0 !== a) { var s = this.Versioning.None; this.targetObject = A, void 0 !== A.needsUpdate ? s = this.Versioning.NeedsUpdate : void 0 !== A.matrixWorldNeedsUpdate && (s = this.Versioning.MatrixWorldNeedsUpdate); var l = this.BindingType.Direct; if (void 0 !== o) { if ("morphTargetInfluences" === i) { if (!A.geometry) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.", this); if (A.geometry.isBufferGeometry) { if (!A.geometry.morphAttributes) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.", this); for (r = 0; this.node.geometry.morphAttributes.position.length > r; r++) if (A.geometry.morphAttributes.position[r].name === o) { o = r; break } } else { if (!A.geometry.morphTargets) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.", this); for (r = 0; this.node.geometry.morphTargets.length > r; r++) if (A.geometry.morphTargets[r].name === o) { o = r; break } } } l = this.BindingType.ArrayElement, this.resolvedProperty = a, this.propertyIndex = o } else void 0 !== a.fromArray && void 0 !== a.toArray ? (l = this.BindingType.HasFromToArray, this.resolvedProperty = a) : Array.isArray(a) ? (l = this.BindingType.EntireArray, this.resolvedProperty = a) : this.propertyName = i; this.getValue = this.GetterByBindingType[l], this.setValue = this.SetterByBindingTypeAndVersioning[l][s] } else { console.error("THREE.PropertyBinding: Trying to update property for track: " + e.nodeName + "." + i + " but it wasn't found.", A) } } 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(Fs.prototype, { _getValue_unbound: Fs.prototype.getValue, _setValue_unbound: Fs.prototype.setValue }), Object.assign(Ks.prototype, { isAnimationObjectGroup: !0, add: function () { for (var A = this._objects, e = A.length, t = this.nCachedObjects_, i = this._indicesByUUID, o = this._paths, n = this._parsedPaths, r = this._bindings, a = r.length, s = void 0, l = 0, c = arguments.length; l !== c; ++l) { var h = arguments[l], d = h.uuid, p = i[d]; if (void 0 === p) { p = e++, i[d] = p, A.push(h); for (var g = 0, u = a; g !== u; ++g) r[g].push(new Fs(h, o[g], n[g])) } else if (t > p) { s = A[p]; var f = --t, m = A[f]; i[m.uuid] = p, A[p] = m, i[d] = f, A[f] = h; for (g = 0, u = a; g !== u; ++g) { var C = r[g], y = C[f], v = C[p]; C[p] = y, void 0 === v && (v = new Fs(h, o[g], n[g])), C[f] = v } } else A[p] !== s && console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.") } this.nCachedObjects_ = t }, remove: function () { for (var A = this._objects, e = this.nCachedObjects_, t = this._indicesByUUID, i = this._bindings, o = i.length, n = 0, r = arguments.length; n !== r; ++n) { var a = arguments[n], s = a.uuid, l = t[s]; if (void 0 !== l && l >= e) { var c = e++, h = A[c]; t[h.uuid] = l, A[l] = h, t[s] = c, A[c] = a; for (var d = 0, p = o; d !== p; ++d) { var g = i[d], u = g[c], f = g[l]; g[l] = u, g[c] = f } } } this.nCachedObjects_ = e }, uncache: function () { for (var A = this._objects, e = A.length, t = this.nCachedObjects_, i = this._indicesByUUID, o = this._bindings, n = o.length, r = 0, a = arguments.length; r !== a; ++r) { var s = arguments[r], l = s.uuid, c = i[l]; if (void 0 !== c) if (delete i[l], t > c) { var h = --t, d = A[h], p = A[C = --e]; i[d.uuid] = c, A[c] = d, i[p.uuid] = h, A[h] = p, A.pop(); for (var g = 0, u = n; g !== u; ++g) { var f = (y = o[g])[h], m = y[C]; y[c] = f, y[h] = m, y.pop() } } else { var C; i[(p = A[C = --e]).uuid] = c, A[c] = p, A.pop(); for (g = 0, u = n; g !== u; ++g) { var y; (y = o[g])[c] = y[C], y.pop() } } } this.nCachedObjects_ = t }, subscribe_: function (A, e) { var t = this._bindingsIndicesByPath, i = t[A], o = this._bindings; if (void 0 !== i) return o[i]; var n = this._paths, r = this._parsedPaths, a = this._objects, s = this.nCachedObjects_, l = new Array(a.length); t[A] = i = o.length, n.push(A), r.push(e), o.push(l); for (var c = s, h = a.length; c !== h; ++c) { l[c] = new Fs(a[c], A, e) } return l }, unsubscribe_: function (A) { var e = this._bindingsIndicesByPath, t = e[A]; if (void 0 !== t) { var i = this._paths, o = this._parsedPaths, n = this._bindings, r = n.length - 1, a = n[r]; e[A[r]] = t, n[t] = a, n.pop(), o[t] = o[r], o.pop(), i[t] = i[r], i.pop() } } }), Object.assign(Qs.prototype, { play: function () { return this._mixer._activateAction(this), this }, stop: function () { return this._mixer._deactivateAction(this), this.reset() }, reset: function () { return this.paused = !1, this.enabled = !0, this.time = 0, this._loopCount = -1, this._startTime = null, this.stopFading().stopWarping() }, isRunning: function () { return this.enabled && !this.paused && 0 !== this.timeScale && null === this._startTime && this._mixer._isActiveAction(this) }, isScheduled: function () { return this._mixer._isActiveAction(this) }, startAt: function (A) { return this._startTime = A, this }, setLoop: function (A, e) { return this.loop = A, this.repetitions = e, this }, setEffectiveWeight: function (A) { return this.weight = A, this._effectiveWeight = this.enabled ? A : 0, this.stopFading() }, getEffectiveWeight: function () { return this._effectiveWeight }, fadeIn: function (A) { return this._scheduleFading(A, 0, 1) }, fadeOut: function (A) { return this._scheduleFading(A, 1, 0) }, crossFadeFrom: function (A, e, t) { if (A.fadeOut(e), this.fadeIn(e), t) { var i = this._clip.duration, o = A._clip.duration, n = i / o; A.warp(1, o / i, e), this.warp(n, 1, e) } return this }, crossFadeTo: function (A, e, t) { return A.crossFadeFrom(this, e, t) }, stopFading: function () { var A = this._weightInterpolant; return null !== A && (this._weightInterpolant = null, this._mixer._takeBackControlInterpolant(A)), this }, setEffectiveTimeScale: function (A) { return this.timeScale = A, this._effectiveTimeScale = this.paused ? 0 : A, this.stopWarping() }, getEffectiveTimeScale: function () { return this._effectiveTimeScale }, setDuration: function (A) { return this.timeScale = this._clip.duration / A, this.stopWarping() }, syncWith: function (A) { return this.time = A.time, this.timeScale = A.timeScale, this.stopWarping() }, halt: function (A) { return this.warp(this._effectiveTimeScale, 0, A) }, warp: function (A, e, t) { var i = this._mixer, o = i.time, n = this._timeScaleInterpolant, r = this.timeScale; null === n && (n = i._lendControlInterpolant(), this._timeScaleInterpolant = n); var a = n.parameterPositions, s = n.sampleValues; return a[0] = o, a[1] = o + t, s[0] = A / r, s[1] = e / r, this }, stopWarping: function () { var A = this._timeScaleInterpolant; return null !== A && (this._timeScaleInterpolant = null, this._mixer._takeBackControlInterpolant(A)), this }, getMixer: function () { return this._mixer }, getClip: function () { return this._clip }, getRoot: function () { return this._localRoot || this._mixer._root }, _update: function (A, e, t, i) { if (this.enabled) { var o = this._startTime; if (null !== o) { var n = (A - o) * t; if (0 > n || 0 === t) return; this._startTime = null, e = t * n } e *= this._updateTimeScale(A); var r = this._updateTime(e), a = this._updateWeight(A); if (a > 0) for (var s = this._interpolants, l = this._propertyBindings, c = 0, h = s.length; c !== h; ++c) s[c].evaluate(r), l[c].accumulate(i, a) } else this._updateWeight(A) }, _updateWeight: function (A) { var e = 0; if (this.enabled) { e = this.weight; var t = this._weightInterpolant; if (null !== t) { var i = t.evaluate(A)[0]; e *= i, A > t.parameterPositions[1] && (this.stopFading(), 0 === i && (this.enabled = !1)) } } return this._effectiveWeight = e, e }, _updateTimeScale: function (A) { var e = 0; if (!this.paused) { e = this.timeScale; var t = this._timeScaleInterpolant; if (null !== t) e *= t.evaluate(A)[0], A > t.parameterPositions[1] && (this.stopWarping(), 0 === e ? this.paused = !0 : this.timeScale = e) } return this._effectiveTimeScale = e, e }, _updateTime: function (A) { var e = this.time + A, t = this._clip.duration, i = this.loop, o = this._loopCount, n = 2202 === i; if (0 === A) return -1 === o ? e : n && 1 == (1 & o) ? t - e : e; if (2200 === i) { -1 === o && (this._loopCount = 0, this._setEndings(!0, !0, !1)); A: { if (e < t) { if (e >= 0) { this.time = e; break A } e = 0 } else e = t; this.clampWhenFinished ? this.paused = !0 : this.enabled = !1, this.time = e, this._mixer.dispatchEvent({ type: "finished", action: this, direction: 0 > A ? -1 : 1 }) } } else { if (-1 === o && (0 > A ? this._setEndings(0 === this.repetitions, !0, n) : (o = 0, this._setEndings(!0, 0 === this.repetitions, n))), e >= t || 0 > e) { var r = Math.floor(e / t); e -= t * r, o += Math.abs(r); var a = this.repetitions - o; if (0 < a) { if (1 === a) { var s = 0 > A; this._setEndings(s, !s, n) } else this._setEndings(!1, !1, n); this._loopCount = o, this.time = e, this._mixer.dispatchEvent({ type: "loop", action: this, loopDelta: r }) } else this.clampWhenFinished ? this.paused = !0 : this.enabled = !1, this.time = e = A > 0 ? t : 0, this._mixer.dispatchEvent({ type: "finished", action: this, direction: A > 0 ? 1 : -1 }) } else this.time = e; if (n && 1 == (1 & o)) return t - e } return e }, _setEndings: function (A, e, t) { var i = this._interpolantSettings; t ? (i.endingStart = 2401, i.endingEnd = 2401) : (i.endingStart = A ? this.zeroSlopeAtStart ? 2401 : 2400 : 2402, i.endingEnd = e ? this.zeroSlopeAtEnd ? 2401 : 2400 : 2402) }, _scheduleFading: function (A, e, t) { var i = this._mixer, o = i.time, n = this._weightInterpolant; null === n && (n = i._lendControlInterpolant(), this._weightInterpolant = n); var r = n.parameterPositions, a = n.sampleValues; return r[0] = o, a[0] = e, r[1] = o + A, a[1] = t, this } }), Rs.prototype = Object.assign(Object.create(i.prototype), { constructor: Rs, _bindAction: function (A, e) { var t = A._localRoot || this._root, i = A._clip.tracks, o = i.length, n = A._propertyBindings, r = A._interpolants, a = t.uuid, s = this._bindingsByRootAndName, l = s[a]; void 0 === l && (s[a] = l = {}); for (var c = 0; c !== o; ++c) { var h = i[c], d = h.name, p = l[d]; if (void 0 !== p) n[c] = p; else { if (void 0 !== (p = n[c])) { null === p._cacheIndex && (++p.referenceCount, this._addInactiveBinding(p, a, d)); continue } ++(p = new vs(Fs.create(t, d, e && e._propertyBindings[c].binding.parsedPath), h.ValueTypeName, h.getValueSize())).referenceCount, this._addInactiveBinding(p, a, d), n[c] = p } r[c].resultBuffer = p.buffer } }, _activateAction: function (A) { if (!this._isActiveAction(A)) { if (null === A._cacheIndex) { var e = (A._localRoot || this._root).uuid, t = A._clip.uuid, i = this._actionsByClip[t]; this._bindAction(A, i && i.knownActions[0]), this._addInactiveAction(A, t, e) } for (var o = A._propertyBindings, n = 0, r = o.length; n !== r; ++n) { var a = o[n]; 0 == a.useCount++ && (this._lendBinding(a), a.saveOriginalState()) } this._lendAction(A) } }, _deactivateAction: function (A) { if (this._isActiveAction(A)) { for (var e = A._propertyBindings, t = 0, i = e.length; t !== i; ++t) { var o = e[t]; 0 == --o.useCount && (o.restoreOriginalState(), this._takeBackBinding(o)) } this._takeBackAction(A) } }, _initMemoryManager: function () { this._actions = [], this._nActiveActions = 0, this._actionsByClip = {}, this._bindings = [], this._nActiveBindings = 0, this._bindingsByRootAndName = {}, this._controlInterpolants = [], this._nActiveControlInterpolants = 0; var A = this; this.stats = { actions: { get total() { return A._actions.length }, get inUse() { return A._nActiveActions } }, bindings: { get total() { return A._bindings.length }, get inUse() { return A._nActiveBindings } }, controlInterpolants: { get total() { return A._controlInterpolants.length }, get inUse() { return A._nActiveControlInterpolants } } } }, _isActiveAction: function (A) { var e = A._cacheIndex; return null !== e && this._nActiveActions > e }, _addInactiveAction: function (A, e, t) { var i = this._actions, o = this._actionsByClip, n = o[e]; if (void 0 === n) n = { knownActions: [A], actionByRoot: {} }, A._byClipCacheIndex = 0, o[e] = n; else { var r = n.knownActions; A._byClipCacheIndex = r.length, r.push(A) } A._cacheIndex = i.length, i.push(A), n.actionByRoot[t] = A }, _removeInactiveAction: function (A) { var e = this._actions, t = e[e.length - 1], i = A._cacheIndex; t._cacheIndex = i, e[i] = t, e.pop(), A._cacheIndex = null; var o = A._clip.uuid, n = this._actionsByClip, r = n[o], a = r.knownActions, s = a[a.length - 1], l = A._byClipCacheIndex; s._byClipCacheIndex = l, a[l] = s, a.pop(), A._byClipCacheIndex = null, delete r.actionByRoot[(A._localRoot || this._root).uuid], 0 === a.length && delete n[o], this._removeInactiveBindingsForAction(A) }, _removeInactiveBindingsForAction: function (A) { for (var e = A._propertyBindings, t = 0, i = e.length; t !== i; ++t) { var o = e[t]; 0 == --o.referenceCount && this._removeInactiveBinding(o) } }, _lendAction: function (A) { var e = this._actions, t = A._cacheIndex, i = this._nActiveActions++, o = e[i]; A._cacheIndex = i, e[i] = A, o._cacheIndex = t, e[t] = o }, _takeBackAction: function (A) { var e = this._actions, t = A._cacheIndex, i = --this._nActiveActions, o = e[i]; A._cacheIndex = i, e[i] = A, o._cacheIndex = t, e[t] = o }, _addInactiveBinding: function (A, e, t) { var i = this._bindingsByRootAndName, o = i[e], n = this._bindings; void 0 === o && (i[e] = o = {}), o[t] = A, A._cacheIndex = n.length, n.push(A) }, _removeInactiveBinding: function (A) { var e = this._bindings, t = A.binding, i = t.rootNode.uuid, o = t.path, n = this._bindingsByRootAndName, r = n[i], a = e[e.length - 1], s = A._cacheIndex; a._cacheIndex = s, e[s] = a, e.pop(), delete r[o], 0 === Object.keys(r).length && delete n[i] }, _lendBinding: function (A) { var e = this._bindings, t = A._cacheIndex, i = this._nActiveBindings++, o = e[i]; A._cacheIndex = i, e[i] = A, o._cacheIndex = t, e[t] = o }, _takeBackBinding: function (A) { var e = this._bindings, t = A._cacheIndex, i = --this._nActiveBindings, o = e[i]; A._cacheIndex = i, e[i] = A, o._cacheIndex = t, e[t] = o }, _lendControlInterpolant: function () { var A = this._controlInterpolants, e = this._nActiveControlInterpolants++, t = A[e]; return void 0 === t && ((t = new Kr(new Float32Array(2), new Float32Array(2), 1, this._controlInterpolantsResultBuffer)).__cacheIndex = e, A[e] = t), t }, _takeBackControlInterpolant: function (A) { var e = this._controlInterpolants, t = A.__cacheIndex, i = --this._nActiveControlInterpolants, o = e[i]; A.__cacheIndex = i, e[i] = A, o.__cacheIndex = t, e[t] = o }, _controlInterpolantsResultBuffer: new Float32Array(1), clipAction: function (A, e) { var t = e || this._root, i = t.uuid, o = "string" == typeof A ? Gr.findByName(t, A) : A, n = null !== o ? o.uuid : A, r = this._actionsByClip[n], a = null; if (void 0 !== r) { var s = r.actionByRoot[i]; if (void 0 !== s) return s; a = r.knownActions[0], null === o && (o = a._clip) } if (null === o) return null; var l = new Qs(this, o, e); return this._bindAction(l, a), this._addInactiveAction(l, n, i), l }, existingAction: function (A, e) { var t = e || this._root, i = t.uuid, o = "string" == typeof A ? Gr.findByName(t, A) : A, n = this._actionsByClip[o ? o.uuid : A]; return void 0 !== n && n.actionByRoot[i] || null }, stopAllAction: function () { var A = this._actions, e = this._nActiveActions, t = this._bindings, i = this._nActiveBindings; this._nActiveActions = 0, this._nActiveBindings = 0; for (var o = 0; o !== e; ++o) A[o].reset(); for (o = 0; o !== i; ++o) t[o].useCount = 0; return this }, update: function (A) { for (var e = this._actions, t = this._nActiveActions, i = this.time += A *= this.timeScale, o = Math.sign(A), n = this._accuIndex ^= 1, r = 0; r !== t; ++r) { e[r]._update(i, A, o, n) } var a = this._bindings, s = this._nActiveBindings; for (r = 0; r !== s; ++r) a[r].apply(n); return this }, setTime: function (A) { this.time = 0; for (var e = 0; this._actions.length > e; e++) this._actions[e].time = 0; return this.update(A) }, getRoot: function () { return this._root }, uncacheClip: function (A) { var e = this._actions, t = A.uuid, i = this._actionsByClip, o = i[t]; if (void 0 !== o) { for (var n = o.knownActions, r = 0, a = n.length; r !== a; ++r) { var s = n[r]; this._deactivateAction(s); var l = s._cacheIndex, c = e[e.length - 1]; s._cacheIndex = null, s._byClipCacheIndex = null, c._cacheIndex = l, e[l] = c, e.pop(), this._removeInactiveBindingsForAction(s) } delete i[t] } }, uncacheRoot: function (A) { var e = A.uuid, t = this._actionsByClip; for (var i in t) { var o = t[i].actionByRoot[e]; void 0 !== o && (this._deactivateAction(o), this._removeInactiveAction(o)) } var n = this._bindingsByRootAndName[e]; if (void 0 !== n) for (var r in n) { var a = n[r]; a.restoreOriginalState(), this._removeInactiveBinding(a) } }, uncacheAction: function (A, e) { var t = this.existingAction(A, e); null !== t && (this._deactivateAction(t), this._removeInactiveAction(t)) } }), Ts.prototype.clone = function () { return new Ts(void 0 === this.value.clone ? this.value : this.value.clone()) }, ks.prototype = Object.assign(Object.create(to.prototype), { constructor: ks, isInstancedInterleavedBuffer: !0, copy: function (A) { return to.prototype.copy.call(this, A), this.meshPerAttribute = A.meshPerAttribute, this } }), Object.assign(Ds.prototype, { set: function (A, e) { this.ray.set(A, e) }, setFromCamera: function (A, e) { e && e.isPerspectiveCamera ? (this.ray.origin.setFromMatrixPosition(e.matrixWorld), this.ray.direction.set(A.x, A.y, .5).unproject(e).sub(this.ray.origin).normalize(), this.camera = e) : e && e.isOrthographicCamera ? (this.ray.origin.set(A.x, A.y, (e.near + e.far) / (e.near - e.far)).unproject(e), this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld), this.camera = e) : console.error("THREE.Raycaster: Unsupported camera type.") }, intersectObject: function (A, e, t) { var i = t || []; return Ns(A, this, i, e), i.sort(Ls), i }, intersectObjects: function (A, e, t) { var i = t || []; if (!1 === Array.isArray(A)) return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."), i; for (var o = 0, n = A.length; n > o; o++) Ns(A[o], this, i, e); return i.sort(Ls), i } }), Object.assign(Os.prototype, { set: function (A, e, t) { return this.radius = A, this.phi = e, this.theta = t, this }, clone: function () { return (new this.constructor).copy(this) }, copy: function (A) { return this.radius = A.radius, this.phi = A.phi, this.theta = A.theta, this }, makeSafe: function () { return this.phi = Math.max(1e-6, Math.min(Math.PI - 1e-6, this.phi)), this }, setFromVector3: function (A) { return this.setFromCartesianCoords(A.x, A.y, A.z) }, setFromCartesianCoords: function (A, e, t) { return this.radius = Math.sqrt(A * A + e * e + t * t), 0 === this.radius ? (this.theta = 0, this.phi = 0) : (this.theta = Math.atan2(A, t), this.phi = Math.acos(a.clamp(e / this.radius, -1, 1))), this } }), Object.assign(Vs.prototype, { set: function (A, e, t) { return this.radius = A, this.theta = e, this.y = t, this }, clone: function () { return (new this.constructor).copy(this) }, copy: function (A) { return this.radius = A.radius, this.theta = A.theta, this.y = A.y, this }, setFromVector3: function (A) { return this.setFromCartesianCoords(A.x, A.y, A.z) }, setFromCartesianCoords: function (A, e, t) { return this.radius = Math.sqrt(A * A + t * t), this.theta = Math.atan2(A, t), this.y = e, this } }); var Gs = new s; function Ps(A, e) { this.min = void 0 !== A ? A : new s(1 / 0, 1 / 0), this.max = void 0 !== e ? e : new s(-1 / 0, -1 / 0) } Object.assign(Ps.prototype, { set: function (A, e) { return this.min.copy(A), this.max.copy(e), this }, setFromPoints: function (A) { this.makeEmpty(); for (var e = 0, t = A.length; t > e; e++) this.expandByPoint(A[e]); return this }, setFromCenterAndSize: function (A, e) { var t = Gs.copy(e).multiplyScalar(.5); return this.min.copy(A).sub(t), this.max.copy(A).add(t), this }, clone: function () { return (new this.constructor).copy(this) }, copy: function (A) { return this.min.copy(A.min), this.max.copy(A.max), this }, makeEmpty: function () { return this.min.x = this.min.y = 1 / 0, this.max.x = this.max.y = -1 / 0, this }, isEmpty: function () { return this.min.x > this.max.x || this.min.y > this.max.y }, getCenter: function (A) { return void 0 === A && (console.warn("THREE.Box2: .getCenter() target is now required"), A = new s), this.isEmpty() ? A.set(0, 0) : A.addVectors(this.min, this.max).multiplyScalar(.5) }, getSize: function (A) { return void 0 === A && (console.warn("THREE.Box2: .getSize() target is now required"), A = new s), this.isEmpty() ? A.set(0, 0) : A.subVectors(this.max, this.min) }, expandByPoint: function (A) { return this.min.min(A), this.max.max(A), this }, expandByVector: function (A) { return this.min.sub(A), this.max.add(A), this }, expandByScalar: function (A) { return this.min.addScalar(-A), this.max.addScalar(A), this }, containsPoint: function (A) { return !(this.min.x > A.x || A.x > this.max.x || this.min.y > A.y || A.y > this.max.y) }, containsBox: function (A) { return !(this.min.x > A.min.x || A.max.x > this.max.x || this.min.y > A.min.y || A.max.y > this.max.y) }, getParameter: function (A, e) { return void 0 === e && (console.warn("THREE.Box2: .getParameter() target is now required"), e = new s), e.set((A.x - this.min.x) / (this.max.x - this.min.x), (A.y - this.min.y) / (this.max.y - this.min.y)) }, intersectsBox: function (A) { return !(this.min.x > A.max.x || A.min.x > this.max.x || this.min.y > A.max.y || A.min.y > this.max.y) }, clampPoint: function (A, e) { return void 0 === e && (console.warn("THREE.Box2: .clampPoint() target is now required"), e = new s), e.copy(A).clamp(this.min, this.max) }, distanceToPoint: function (A) { return Gs.copy(A).clamp(this.min, this.max).sub(A).length() }, intersect: function (A) { return this.min.max(A.min), this.max.min(A.max), this }, union: function (A) { return this.min.min(A.min), this.max.max(A.max), this }, translate: function (A) { return this.min.add(A), this.max.add(A), this }, equals: function (A) { return A.min.equals(this.min) && A.max.equals(this.max) } }); var qs = new y, js = new y; function Hs(A, e) { this.start = void 0 !== A ? A : new y, this.end = void 0 !== e ? e : new y } function Ys(A) { H.call(this), this.material = A, this.render = function () {} } Object.assign(Hs.prototype, { set: function (A, e) { return this.start.copy(A), this.end.copy(e), this }, clone: function () { return (new this.constructor).copy(this) }, copy: function (A) { return this.start.copy(A.start), this.end.copy(A.end), this }, getCenter: function (A) { return void 0 === A && (console.warn("THREE.Line3: .getCenter() target is now required"), A = new y), A.addVectors(this.start, this.end).multiplyScalar(.5) }, delta: function (A) { return void 0 === A && (console.warn("THREE.Line3: .delta() target is now required"), A = new y), A.subVectors(this.end, this.start) }, distanceSq: function () { return this.start.distanceToSquared(this.end) }, distance: function () { return this.start.distanceTo(this.end) }, at: function (A, e) { return void 0 === e && (console.warn("THREE.Line3: .at() target is now required"), e = new y), this.delta(e).multiplyScalar(A).add(this.start) }, closestPointToPointParameter: function (A, e) { qs.subVectors(A, this.start), js.subVectors(this.end, this.start); var t = js.dot(js), i = js.dot(qs) / t; return e && (i = a.clamp(i, 0, 1)), i }, closestPointToPoint: function (A, e, t) { var i = this.closestPointToPointParameter(A, e); return void 0 === t && (console.warn("THREE.Line3: .closestPointToPoint() target is now required"), t = new y), this.delta(t).multiplyScalar(i).add(this.start) }, applyMatrix4: function (A) { return this.start.applyMatrix4(A), this.end.applyMatrix4(A), this }, equals: function (A) { return A.start.equals(this.start) && A.end.equals(this.end) } }), (Ys.prototype = Object.create(H.prototype)).constructor = Ys, Ys.prototype.isImmediateRenderObject = !0; var Ws = new y; function Js(A, e) { H.call(this), this.light = A, this.light.updateMatrixWorld(), this.matrix = A.matrixWorld, this.matrixAutoUpdate = !1, this.color = e; for (var t = new he, i = [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, -1, 1], o = 0, n = 1; 32 > o; o++, n++) { var r = o / 32 * Math.PI * 2, a = n / 32 * Math.PI * 2; i.push(Math.cos(r), Math.sin(r), 1, Math.cos(a), Math.sin(a), 1) } t.setAttribute("position", new Ae(i, 3)); var s = new ko({ fog: !1, toneMapped: !1 }); this.cone = new jo(t, s), this.add(this.cone), this.update() } (Js.prototype = Object.create(H.prototype)).constructor = Js, Js.prototype.dispose = function () { this.cone.geometry.dispose(), this.cone.material.dispose() }, Js.prototype.update = function () { this.light.updateMatrixWorld(); var A = this.light.distance ? this.light.distance : 1e3, e = A * Math.tan(this.light.angle); this.cone.scale.set(e, e, A), Ws.setFromMatrixPosition(this.light.target.matrixWorld), this.cone.lookAt(Ws), void 0 !== this.color ? this.cone.material.color.set(this.color) : this.cone.material.color.copy(this.light.color) }; var zs = new y, Zs = new M, Xs = new M; function _s(A) { for (var e = function A(e) { var t = []; e && e.isBone && t.push(e); for (var i = 0; e.children.length > i; i++) t.push.apply(t, A(e.children[i])); return t }(A), t = new he, i = [], o = [], n = new LA(0, 0, 1), r = new LA(0, 1, 0), a = 0; e.length > a; a++) { var s = e[a]; s.parent && s.parent.isBone && (i.push(0, 0, 0), i.push(0, 0, 0), o.push(n.r, n.g, n.b), o.push(r.r, r.g, r.b)) } t.setAttribute("position", new Ae(i, 3)), t.setAttribute("color", new Ae(o, 3)); var l = new ko({ vertexColors: !0, depthTest: !1, depthWrite: !1, toneMapped: !1, transparent: !0 }); jo.call(this, t, l), this.root = A, this.bones = e, this.matrix = A.matrixWorld, this.matrixAutoUpdate = !1 } function $s(A, e, t) { this.light = A, this.light.updateMatrixWorld(), this.color = t; var i = new er(e, 4, 2), o = new jA({ wireframe: !0, fog: !1, toneMapped: !1 }); Ue.call(this, i, o), this.matrix = this.light.matrixWorld, this.matrixAutoUpdate = !1, this.update() } (_s.prototype = Object.create(jo.prototype)).constructor = _s, _s.prototype.isSkeletonHelper = !0, _s.prototype.updateMatrixWorld = function (A) { var e = this.bones, t = this.geometry, i = t.getAttribute("position"); Xs.getInverse(this.root.matrixWorld); for (var o = 0, n = 0; e.length > o; o++) { var r = e[o]; r.parent && r.parent.isBone && (Zs.multiplyMatrices(Xs, r.matrixWorld), zs.setFromMatrixPosition(Zs), i.setXYZ(n, zs.x, zs.y, zs.z), Zs.multiplyMatrices(Xs, r.parent.matrixWorld), zs.setFromMatrixPosition(Zs), i.setXYZ(n + 1, zs.x, zs.y, zs.z), n += 2) } t.getAttribute("position").needsUpdate = !0, H.prototype.updateMatrixWorld.call(this, A) }, ($s.prototype = Object.create(Ue.prototype)).constructor = $s, $s.prototype.dispose = function () { this.geometry.dispose(), this.material.dispose() }, $s.prototype.update = function () { void 0 !== this.color ? this.material.color.set(this.color) : this.material.color.copy(this.light.color) }; var Al = new y, el = new LA, tl = new LA; function il(A, e, t) { H.call(this), this.light = A, this.light.updateMatrixWorld(), this.matrix = A.matrixWorld, this.matrixAutoUpdate = !1, this.color = t; var i = new dn(e); i.rotateY(.5 * Math.PI), this.material = new jA({ wireframe: !0, fog: !1, toneMapped: !1 }), void 0 === this.color && (this.material.vertexColors = !0); var o = i.getAttribute("position"), n = new Float32Array(3 * o.count); i.setAttribute("color", new YA(n, 3)), this.add(new Ue(i, this.material)), this.update() } function ol(A, e, t, i) { A = A || 10, e = e || 10, t = new LA(void 0 !== t ? t : 4473924), i = new LA(void 0 !== i ? i : 8947848); for (var o = e / 2, n = A / e, r = A / 2, a = [], s = [], l = 0, c = 0, h = -r; e >= l; l++, h += n) { a.push(-r, 0, h, r, 0, h), a.push(h, 0, -r, h, 0, r); var d = l === o ? t : i; d.toArray(s, c), d.toArray(s, c += 3), d.toArray(s, c += 3), d.toArray(s, c += 3), c += 3 } var p = new he; p.setAttribute("position", new Ae(a, 3)), p.setAttribute("color", new Ae(s, 3)); var g = new ko({ vertexColors: !0, toneMapped: !1 }); jo.call(this, p, g) } function nl(A, e, t, i, o, n) { A = A || 10, e = e || 16, t = t || 8, i = i || 64, o = new LA(void 0 !== o ? o : 4473924), n = new LA(void 0 !== n ? n : 8947848); var r, a, s, l, c, h, d, p = [], g = []; for (l = 0; e >= l; l++) s = l / e * (2 * Math.PI), r = Math.sin(s) * A, a = Math.cos(s) * A, p.push(0, 0, 0), p.push(r, 0, a), g.push((d = 1 & l ? o : n).r, d.g, d.b), g.push(d.r, d.g, d.b); for (l = 0; t >= l; l++) for (d = 1 & l ? o : n, h = A - A / t * l, c = 0; i > c; c++) s = c / i * (2 * Math.PI), r = Math.sin(s) * h, a = Math.cos(s) * h, p.push(r, 0, a), g.push(d.r, d.g, d.b), s = (c + 1) / i * (2 * Math.PI), r = Math.sin(s) * h, a = Math.cos(s) * h, p.push(r, 0, a), g.push(d.r, d.g, d.b); var u = new he; u.setAttribute("position", new Ae(p, 3)), u.setAttribute("color", new Ae(g, 3)); var f = new ko({ vertexColors: !0, toneMapped: !1 }); jo.call(this, u, f) } (il.prototype = Object.create(H.prototype)).constructor = il, il.prototype.dispose = function () { this.children[0].geometry.dispose(), this.children[0].material.dispose() }, il.prototype.update = function () { var A = this.children[0]; if (void 0 !== this.color) this.material.color.set(this.color); else { var e = A.geometry.getAttribute("color"); el.copy(this.light.color), tl.copy(this.light.groundColor); for (var t = 0, i = e.count; i > t; t++) { var o = i / 2 > t ? el : tl; e.setXYZ(t, o.r, o.g, o.b) } e.needsUpdate = !0 } A.lookAt(Al.setFromMatrixPosition(this.light.matrixWorld).negate()) }, ol.prototype = Object.assign(Object.create(jo.prototype), { constructor: ol, copy: function (A) { return jo.prototype.copy.call(this, A), this.geometry.copy(A.geometry), this.material.copy(A.material), this }, clone: function () { return (new this.constructor).copy(this) } }), (nl.prototype = Object.create(jo.prototype)).constructor = nl; var rl = new y, al = new y, sl = new y; function ll(A, e, t) { H.call(this), this.light = A, this.light.updateMatrixWorld(), this.matrix = A.matrixWorld, this.matrixAutoUpdate = !1, this.color = t, void 0 === e && (e = 1); var i = new he; i.setAttribute("position", new Ae([-e, e, 0, e, e, 0, e, -e, 0, -e, -e, 0, -e, e, 0], 3)); var o = new ko({ fog: !1, toneMapped: !1 }); this.lightPlane = new Go(i, o), this.add(this.lightPlane), (i = new he).setAttribute("position", new Ae([0, 0, 0, 0, 0, 1], 3)), this.targetLine = new Go(i, o), this.add(this.targetLine), this.update() } (ll.prototype = Object.create(H.prototype)).constructor = ll, ll.prototype.dispose = function () { this.lightPlane.geometry.dispose(), this.lightPlane.material.dispose(), this.targetLine.geometry.dispose(), this.targetLine.material.dispose() }, ll.prototype.update = function () { rl.setFromMatrixPosition(this.light.matrixWorld), al.setFromMatrixPosition(this.light.target.matrixWorld), sl.subVectors(al, rl), this.lightPlane.lookAt(al), 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(al), this.targetLine.scale.z = sl.length() }; var cl = new y, hl = new qe; function dl(A) { var e = new he, t = new ko({ color: 16777215, vertexColors: !0, toneMapped: !1 }), i = [], o = [], n = {}, r = new LA(16755200), a = new LA(16711680), s = new LA(43775), l = new LA(16777215), c = new LA(3355443); function h(A, e, t) { d(A, t), d(e, t) } function d(A, e) { i.push(0, 0, 0), o.push(e.r, e.g, e.b), void 0 === n[A] && (n[A] = []), n[A].push(i.length / 3 - 1) } h("n1", "n2", r), h("n2", "n4", r), h("n4", "n3", r), h("n3", "n1", r), h("f1", "f2", r), h("f2", "f4", r), h("f4", "f3", r), h("f3", "f1", r), h("n1", "f1", r), h("n2", "f2", r), h("n3", "f3", r), h("n4", "f4", r), h("p", "n1", a), h("p", "n2", a), h("p", "n3", a), h("p", "n4", a), h("u1", "u2", s), h("u2", "u3", s), h("u3", "u1", s), h("c", "t", l), h("p", "c", c), h("cn1", "cn2", c), h("cn3", "cn4", c), h("cf1", "cf2", c), h("cf3", "cf4", c), e.setAttribute("position", new Ae(i, 3)), e.setAttribute("color", new Ae(o, 3)), jo.call(this, e, t), this.camera = A, this.camera.updateProjectionMatrix && this.camera.updateProjectionMatrix(), this.matrix = A.matrixWorld, this.matrixAutoUpdate = !1, this.pointMap = n, this.update() } function pl(A, e, t, i, o, n, r) { cl.set(o, n, r).unproject(i); var a = e[A]; if (void 0 !== a) for (var s = t.getAttribute("position"), l = 0, c = a.length; c > l; l++) s.setXYZ(a[l], cl.x, cl.y, cl.z) } (dl.prototype = Object.create(jo.prototype)).constructor = dl, dl.prototype.update = function () { var A = this.geometry, e = this.pointMap; hl.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse), pl("c", e, A, hl, 0, 0, -1), pl("t", e, A, hl, 0, 0, 1), pl("n1", e, A, hl, -1, -1, -1), pl("n2", e, A, hl, 1, -1, -1), pl("n3", e, A, hl, -1, 1, -1), pl("n4", e, A, hl, 1, 1, -1), pl("f1", e, A, hl, -1, -1, 1), pl("f2", e, A, hl, 1, -1, 1), pl("f3", e, A, hl, -1, 1, 1), pl("f4", e, A, hl, 1, 1, 1), pl("u1", e, A, hl, .7, 1.1, -1), pl("u2", e, A, hl, -.7, 1.1, -1), pl("u3", e, A, hl, 0, 2, -1), pl("cf1", e, A, hl, -1, 0, 1), pl("cf2", e, A, hl, 1, 0, 1), pl("cf3", e, A, hl, 0, -1, 1), pl("cf4", e, A, hl, 0, 1, 1), pl("cn1", e, A, hl, -1, 0, -1), pl("cn2", e, A, hl, 1, 0, -1), pl("cn3", e, A, hl, 0, -1, -1), pl("cn4", e, A, hl, 0, 1, -1), A.getAttribute("position").needsUpdate = !0 }; var gl = new aA; function ul(A, e) { this.object = A, void 0 === e && (e = 16776960); var t = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]), i = new Float32Array(24), o = new he; o.setIndex(new YA(t, 1)), o.setAttribute("position", new YA(i, 3)), jo.call(this, o, new ko({ color: e, toneMapped: !1 })), this.matrixAutoUpdate = !1, this.update() } function fl(A, e) { this.type = "Box3Helper", this.box = A, e = e || 16776960; var t = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]), i = new he; i.setIndex(new YA(t, 1)), i.setAttribute("position", new Ae([1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1], 3)), jo.call(this, i, new ko({ color: e, toneMapped: !1 })), this.geometry.computeBoundingSphere() } function ml(A, e, t) { this.type = "PlaneHelper", this.plane = A, this.size = void 0 === e ? 1 : e; var i = void 0 !== t ? t : 16776960, o = new he; o.setAttribute("position", new Ae([1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0], 3)), o.computeBoundingSphere(), Go.call(this, o, new ko({ color: i, toneMapped: !1 })); var n = new he; n.setAttribute("position", new Ae([1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1], 3)), n.computeBoundingSphere(), this.add(new Ue(n, new jA({ color: i, opacity: .2, transparent: !0, depthWrite: !1, toneMapped: !1 }))) } (ul.prototype = Object.create(jo.prototype)).constructor = ul, ul.prototype.update = function (A) { if (void 0 !== A && console.warn("THREE.BoxHelper: .update() has no longer arguments."), void 0 !== this.object && gl.setFromObject(this.object), !gl.isEmpty()) { var e = gl.min, t = gl.max, i = this.geometry.attributes.position, o = i.array; o[0] = t.x, o[1] = t.y, o[2] = t.z, o[3] = e.x, o[4] = t.y, o[5] = t.z, o[6] = e.x, o[7] = e.y, o[8] = t.z, o[9] = t.x, o[10] = e.y, o[11] = t.z, o[12] = t.x, o[13] = t.y, o[14] = e.z, o[15] = e.x, o[16] = t.y, o[17] = e.z, o[18] = e.x, o[19] = e.y, o[20] = e.z, o[21] = t.x, o[22] = e.y, o[23] = e.z, i.needsUpdate = !0, this.geometry.computeBoundingSphere() } }, ul.prototype.setFromObject = function (A) { return this.object = A, this.update(), this }, ul.prototype.copy = function (A) { return jo.prototype.copy.call(this, A), this.object = A.object, this }, ul.prototype.clone = function () { return (new this.constructor).copy(this) }, (fl.prototype = Object.create(jo.prototype)).constructor = fl, fl.prototype.updateMatrixWorld = function (A) { var e = this.box; e.isEmpty() || (e.getCenter(this.position), e.getSize(this.scale), this.scale.multiplyScalar(.5), H.prototype.updateMatrixWorld.call(this, A)) }, (ml.prototype = Object.create(Go.prototype)).constructor = ml, ml.prototype.updateMatrixWorld = function (A) { var e = -this.plane.constant; 1e-8 > Math.abs(e) && (e = 1e-8), this.scale.set(.5 * this.size, .5 * this.size, e), this.children[0].material.side = 0 > e ? 1 : 0, this.lookAt(this.plane.normal), H.prototype.updateMatrixWorld.call(this, A) }; var Cl, yl, vl = new y; function Il(A, e, t, i, o, n) { H.call(this), void 0 === A && (A = new y(0, 0, 1)), void 0 === e && (e = new y(0, 0, 0)), void 0 === t && (t = 1), void 0 === i && (i = 16776960), void 0 === o && (o = .2 * t), void 0 === n && (n = .2 * o), void 0 === Cl && ((Cl = new he).setAttribute("position", new Ae([0, 0, 0, 0, 1, 0], 3)), (yl = new hr(0, .5, 1, 5, 1)).translate(0, -.5, 0)), this.position.copy(e), this.line = new Go(Cl, new ko({ color: i, toneMapped: !1 })), this.line.matrixAutoUpdate = !1, this.add(this.line), this.cone = new Ue(yl, new jA({ color: i, toneMapped: !1 })), this.cone.matrixAutoUpdate = !1, this.add(this.cone), this.setDirection(A), this.setLength(t, o, n) } function El(A) { var e = [0, 0, 0, A = A || 1, 0, 0, 0, 0, 0, 0, A, 0, 0, 0, 0, 0, 0, A], t = new he; t.setAttribute("position", new Ae(e, 3)), t.setAttribute("color", new Ae([1, 0, 0, 1, .6, 0, 0, 1, 0, .6, 1, 0, 0, 0, 1, 0, .6, 1], 3)); var i = new ko({ vertexColors: !0, toneMapped: !1 }); jo.call(this, t, i) } (Il.prototype = Object.create(H.prototype)).constructor = Il, Il.prototype.setDirection = function (A) { if (A.y > .99999) this.quaternion.set(0, 0, 0, 1); else if (-.99999 > A.y) this.quaternion.set(1, 0, 0, 0); else { vl.set(A.z, 0, -A.x).normalize(); var e = Math.acos(A.y); this.quaternion.setFromAxisAngle(vl, e) } }, Il.prototype.setLength = function (A, e, t) { void 0 === e && (e = .2 * A), void 0 === t && (t = .2 * e), this.line.scale.set(1, Math.max(1e-4, A - e), 1), this.line.updateMatrix(), this.cone.scale.set(t, e, t), this.cone.position.y = A, this.cone.updateMatrix() }, Il.prototype.setColor = function (A) { this.line.material.color.set(A), this.cone.material.color.set(A) }, Il.prototype.copy = function (A) { return H.prototype.copy.call(this, A, !1), this.line.copy(A.line), this.cone.copy(A.cone), this }, Il.prototype.clone = function () { return (new this.constructor).copy(this) }, (El.prototype = Object.create(jo.prototype)).constructor = El; var Bl, xl, Sl, wl, Ml = Math.pow(2, 8), bl = [.125, .215, .35, .446, .526, .582], Ul = 5 + bl.length, Fl = { 3e3: 0, 3001: 1, 3002: 2, 3004: 3, 3005: 4, 3006: 5, 3007: 6 }, Kl = new Ka, Ql = (Bl = 20, xl = new Float32Array(Bl), Sl = new y(0, 1, 0), (wl = new Cr({ defines: { n: Bl }, uniforms: { envMap: { value: null }, samples: { value: 1 }, weights: { value: xl }, latitudinal: { value: !1 }, dTheta: { value: 0 }, mipInt: { value: 0 }, poleAxis: { value: Sl }, inputEncoding: { value: Fl[3e3] }, outputEncoding: { value: Fl[3e3] } }, vertexShader: ec(), fragmentShader: `\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform int samples;\nuniform float weights[n];\nuniform bool latitudinal;\nuniform float dTheta;\nuniform float mipInt;\nuniform vec3 poleAxis;\n\n${tc()}\n\n#define ENVMAP_TYPE_CUBE_UV\n#include \n\nvec3 getSample(float theta, vec3 axis) {\n\tfloat cosTheta = cos(theta);\n\t// Rodrigues' axis-angle rotation\n\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t+ cross(axis, vOutputDirection) * sin(theta)\n\t\t+ axis * dot(axis, vOutputDirection) * (1.0 - cosTheta);\n\treturn bilinearCubeUV(envMap, sampleDirection, mipInt);\n}\n\nvoid main() {\n\tvec3 axis = latitudinal ? poleAxis : cross(poleAxis, vOutputDirection);\n\tif (all(equal(axis, vec3(0.0))))\n\t\taxis = vec3(vOutputDirection.z, 0.0, - vOutputDirection.x);\n\taxis = normalize(axis);\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb += weights[0] * getSample(0.0, axis);\n\tfor (int i = 1; i < n; i++) {\n\t\tif (i >= samples)\n\t\t\tbreak;\n\t\tfloat theta = dTheta * float(i);\n\t\tgl_FragColor.rgb += weights[i] * getSample(-1.0 * theta, axis);\n\t\tgl_FragColor.rgb += weights[i] * getSample(theta, axis);\n\t}\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t`, blending: 0, depthTest: !1, depthWrite: !1 })).type = "SphericalGaussianBlur", wl), Rl = null, Tl = null, { _lodPlanes: kl, _sizeLods: Dl, _sigmas: Ll } = function () { for (var A = [], e = [], t = [], i = 8, o = 0; Ul > o; o++) { var n = Math.pow(2, i); e.push(n); var r = 1 / n; o > 4 ? r = bl[o - 8 + 4 - 1] : 0 == o && (r = 0), t.push(r); for (var a = 1 / (n - 1), s = -a / 2, l = 1 + a / 2, c = [s, s, l, s, l, l, s, s, l, l, s, l], h = new Float32Array(108), d = new Float32Array(72), p = new Float32Array(36), g = 0; 6 > g; g++) { var u = g % 3 * 2 / 3 - 1, f = g > 2 ? 0 : -1; h.set([u, f, 0, u + 2 / 3, f, 0, u + 2 / 3, f + 1, 0, u, f, 0, u + 2 / 3, f + 1, 0, u, f + 1, 0], 18 * g), d.set(c, 12 * g), p.set([g, g, g, g, g, g], 6 * g) } var m = new he; m.setAttribute("position", new YA(h, 3)), m.setAttribute("uv", new YA(d, 2)), m.setAttribute("faceIndex", new YA(p, 1)), A.push(m), i > 4 && i-- } return { _lodPlanes: A, _sizeLods: e, _sigmas: t } }(), Nl = null, Ol = null, Vl = null, Gl = (1 + Math.sqrt(5)) / 2, Pl = 1 / Gl, ql = [new y(1, 1, 1), new y(-1, 1, 1), new y(1, 1, -1), new y(-1, 1, -1), new y(0, Gl, Pl), new y(0, Gl, -Pl), new y(Pl, 0, Gl), new y(-Pl, 0, Gl), new y(Gl, Pl, 0), new y(-Gl, Pl, 0)]; function jl(A) { Ol = A, Wl(Ql) } function Hl(A) { var e = { magFilter: 1003, minFilter: 1003, generateMipmaps: !1, type: A ? A.type : 1009, format: A ? A.format : 1023, encoding: A ? A.encoding : 3002, depthBuffer: !1, stencilBuffer: !1 }, t = Jl(e); return t.depthBuffer = !A, Nl = Jl(e), t } function Yl(A) { Nl.dispose(), Ol.setRenderTarget(Vl), A.scissorTest = !1, A.setSize(A.width, A.height) } function Wl(A) { var e = new Y; e.add(new Ue(kl[0], A)), Ol.compile(e, Kl) } function Jl(A) { var e = new g(3 * Ml, 3 * Ml, A); return e.texture.mapping = 306, e.texture.name = "PMREM.cubeUv", e.scissorTest = !0, e } function zl(A, e, t, i, o) { A.viewport.set(e, t, i, o), A.scissor.set(e, t, i, o) } function Zl(A) { var e = Ol.autoClear; Ol.autoClear = !1; for (var t = 1; Ul > t; t++) { Xl(A, t - 1, t, Math.sqrt(Ll[t] * Ll[t] - Ll[t - 1] * Ll[t - 1]), ql[(t - 1) % ql.length]) } Ol.autoClear = e } function Xl(A, e, t, i, o) { _l(A, Nl, e, t, i, "latitudinal", o), _l(Nl, A, t, t, i, "longitudinal", o) } function _l(A, e, t, i, o, n, r) { "latitudinal" !== n && "longitudinal" !== n && console.error("blur direction must be either latitudinal or longitudinal!"); var a = new Y; a.add(new Ue(kl[i], Ql)); var s = Ql.uniforms, l = Dl[t] - 1, c = isFinite(o) ? Math.PI / (2 * l) : 2 * Math.PI / 39, h = o / c, d = isFinite(o) ? 1 + Math.floor(3 * h) : 20; d > 20 && console.warn(`sigmaRadians, ${o}, is too large and will clip, as it requested ${d} samples when the maximum is set to 20`); for (var p = [], g = 0, u = 0; 20 > u; ++u) { var f = u / h, m = Math.exp(-f * f / 2); p.push(m), 0 == u ? g += m : d > u && (g += 2 * m) } for (u = 0; p.length > u; u++) p[u] = p[u] / g; s.envMap.value = A.texture, s.samples.value = d, s.weights.value = p, s.latitudinal.value = "latitudinal" === n, r && (s.poleAxis.value = r), s.dTheta.value = c, s.mipInt.value = 8 - t, s.inputEncoding.value = Fl[A.texture.encoding], s.outputEncoding.value = Fl[A.texture.encoding]; var C = Dl[i]; zl(e, f = 3 * Math.max(0, Ml - 2 * C), (0 === i ? 0 : 2 * Ml) + 2 * C * (i > 4 ? i - 8 + 4 : 0), 3 * C, 2 * C), Ol.setRenderTarget(e), Ol.render(a, Kl) } function $l() { var A = new Cr({ uniforms: { envMap: { value: null }, texelSize: { value: new s(1, 1) }, inputEncoding: { value: Fl[3e3] }, outputEncoding: { value: Fl[3e3] } }, vertexShader: ec(), fragmentShader: `\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform vec2 texelSize;\n\n${tc()}\n\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tvec3 outputDirection = normalize(vOutputDirection);\n\tvec2 uv;\n\tuv.y = asin(clamp(outputDirection.y, -1.0, 1.0)) * RECIPROCAL_PI + 0.5;\n\tuv.x = atan(outputDirection.z, outputDirection.x) * RECIPROCAL_PI2 + 0.5;\n\tvec2 f = fract(uv / texelSize - 0.5);\n\tuv -= f * texelSize;\n\tvec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x += texelSize.x;\n\tvec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.y += texelSize.y;\n\tvec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x -= texelSize.x;\n\tvec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tvec3 tm = mix(tl, tr, f.x);\n\tvec3 bm = mix(bl, br, f.x);\n\tgl_FragColor.rgb = mix(tm, bm, f.y);\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t`, blending: 0, depthTest: !1, depthWrite: !1 }); return A.type = "EquirectangularToCubeUV", A } function Ac() { var A = new Cr({ uniforms: { envMap: { value: null }, inputEncoding: { value: Fl[3e3] }, outputEncoding: { value: Fl[3e3] } }, vertexShader: ec(), fragmentShader: `\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform samplerCube envMap;\n\n${tc()}\n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb = envMapTexelToLinear(textureCube(envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ))).rgb;\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t`, blending: 0, depthTest: !1, depthWrite: !1 }); return A.type = "CubemapToCubeUV", A } function ec() { return "\nprecision mediump float;\nprecision mediump int;\nattribute vec3 position;\nattribute vec2 uv;\nattribute float faceIndex;\nvarying vec3 vOutputDirection;\nvec3 getDirection(vec2 uv, float face) {\n\tuv = 2.0 * uv - 1.0;\n\tvec3 direction = vec3(uv, 1.0);\n\tif (face == 0.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.z *= -1.0;\n\t} else if (face == 1.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.z *= -1.0;\n\t} else if (face == 3.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.x *= -1.0;\n\t} else if (face == 4.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.y *= -1.0;\n\t} else if (face == 5.0) {\n\t\tdirection.xz *= -1.0;\n\t}\n\treturn direction;\n}\nvoid main() {\n\tvOutputDirection = getDirection(uv, faceIndex);\n\tgl_Position = vec4( position, 1.0 );\n}\n\t" } function tc() { return "\nuniform int inputEncoding;\nuniform int outputEncoding;\n\n#include \n\nvec4 inputTexelToLinear(vec4 value){\n\tif(inputEncoding == 0){\n\t\treturn value;\n\t}else if(inputEncoding == 1){\n\t\treturn sRGBToLinear(value);\n\t}else if(inputEncoding == 2){\n\t\treturn RGBEToLinear(value);\n\t}else if(inputEncoding == 3){\n\t\treturn RGBMToLinear(value, 7.0);\n\t}else if(inputEncoding == 4){\n\t\treturn RGBMToLinear(value, 16.0);\n\t}else if(inputEncoding == 5){\n\t\treturn RGBDToLinear(value, 256.0);\n\t}else{\n\t\treturn GammaToLinear(value, 2.2);\n\t}\n}\n\nvec4 linearToOutputTexel(vec4 value){\n\tif(outputEncoding == 0){\n\t\treturn value;\n\t}else if(outputEncoding == 1){\n\t\treturn LinearTosRGB(value);\n\t}else if(outputEncoding == 2){\n\t\treturn LinearToRGBE(value);\n\t}else if(outputEncoding == 3){\n\t\treturn LinearToRGBM(value, 7.0);\n\t}else if(outputEncoding == 4){\n\t\treturn LinearToRGBM(value, 16.0);\n\t}else if(outputEncoding == 5){\n\t\treturn LinearToRGBD(value, 256.0);\n\t}else{\n\t\treturn LinearToGamma(value, 2.2);\n\t}\n}\n\nvec4 envMapTexelToLinear(vec4 color) {\n\treturn inputTexelToLinear(color);\n}\n\t" } jl.prototype = { constructor: jl, fromScene: function (A, e = 0, t = .1, i = 100) { Vl = Ol.getRenderTarget(); var o = Hl(); return function (A, e, t, i) { var o = new je(90, 1, e, t), n = [1, 1, 1, 1, -1, 1], r = [1, 1, -1, -1, -1, 1], a = Ol.outputEncoding, s = Ol.toneMapping, l = Ol.toneMappingExposure, c = Ol.getClearColor(), h = Ol.getClearAlpha(); Ol.toneMapping = 1, Ol.toneMappingExposure = 1, Ol.outputEncoding = 3e3, A.scale.z *= -1; var d = A.background; if (d && d.isColor) { d.convertSRGBToLinear(); var p = Math.max(d.r, d.g, d.b), g = Math.min(Math.max(Math.ceil(Math.log2(p)), -128), 127); d = d.multiplyScalar(Math.pow(2, -g)), Ol.setClearColor(d, (g + 128) / 255), A.background = null } for (var u = 0; 6 > u; u++) { var f = u % 3; 0 == f ? (o.up.set(0, n[u], 0), o.lookAt(r[u], 0, 0)) : 1 == f ? (o.up.set(0, 0, n[u]), o.lookAt(0, r[u], 0)) : (o.up.set(0, n[u], 0), o.lookAt(0, 0, r[u])), zl(i, f * Ml, u > 2 ? Ml : 0, Ml, Ml), Ol.setRenderTarget(i), Ol.render(A, o) } Ol.toneMapping = s, Ol.toneMappingExposure = l, Ol.outputEncoding = a, Ol.setClearColor(c, h), A.scale.z *= -1 }(A, t, i, o), e > 0 && Xl(o, 0, 0, e), Zl(o), Yl(o), o }, fromEquirectangular: function (A) { return A.magFilter = 1003, A.minFilter = 1003, A.generateMipmaps = !1, this.fromCubemap(A) }, fromCubemap: function (A) { Vl = Ol.getRenderTarget(); var e = Hl(A); return function (A, e) { var t = new Y; A.isCubeTexture ? null == Tl && (Tl = Ac()) : null == Rl && (Rl = $l()); var i = A.isCubeTexture ? Tl : Rl; t.add(new Ue(kl[0], i)); var o = i.uniforms; o.envMap.value = A, A.isCubeTexture || o.texelSize.value.set(1 / A.image.width, 1 / A.image.height); o.inputEncoding.value = Fl[A.encoding], o.outputEncoding.value = Fl[A.encoding], zl(e, 0, 0, 3 * Ml, 2 * Ml), Ol.setRenderTarget(e), Ol.render(t, Kl) }(A, e), Zl(e), Yl(e), e }, compileCubemapShader: function () { null == Tl && Wl(Tl = Ac()) }, compileEquirectangularShader: function () { null == Rl && Wl(Rl = $l()) }, dispose: function () { Ql.dispose(), null != Tl && Tl.dispose(), null != Rl && Rl.dispose(); for (var A = 0; kl.length > A; A++) kl[A].dispose() } }; function ic(A) { console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."), la.call(this, A), this.type = "catmullrom", this.closed = !0 } function oc(A) { console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."), la.call(this, A), this.type = "catmullrom" } function nc(A) { console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead."), la.call(this, A), this.type = "catmullrom" } ea.create = function (A, e) { return console.log("THREE.Curve.create() has been deprecated"), A.prototype = Object.create(ea.prototype), A.prototype.constructor = A, A.prototype.getPoint = e, A }, Object.assign(Ia.prototype, { createPointsGeometry: function (A) { console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead."); var e = this.getPoints(A); return this.createGeometry(e) }, createSpacedPointsGeometry: function (A) { console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead."); var e = this.getSpacedPoints(A); return this.createGeometry(e) }, createGeometry: function (A) { console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead."); for (var e = new De, t = 0, i = A.length; i > t; t++) { var o = A[t]; e.vertices.push(new y(o.x, o.y, o.z || 0)) } return e } }), Object.assign(Ea.prototype, { fromPoints: function (A) { return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."), this.setFromPoints(A) } }), ic.prototype = Object.create(la.prototype), oc.prototype = Object.create(la.prototype), nc.prototype = Object.create(la.prototype), Object.assign(nc.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.") } }), ol.prototype.setColors = function () { console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.") }, _s.prototype.update = function () { console.error("THREE.SkeletonHelper: update() no longer needs to be called.") }, Object.assign(Yr.prototype, { extractUrlBase: function (A) { return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."), La.extractUrlBase(A) } }), Yr.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(Pa.prototype, { setTexturePath: function (A) { return console.warn("THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath()."), this.setResourcePath(A) } }), Object.assign(Ps.prototype, { center: function (A) { return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."), this.getCenter(A) }, empty: function () { return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."), this.isEmpty() }, isIntersectionBox: function (A) { return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(A) }, size: function (A) { return console.warn("THREE.Box2: .size() has been renamed to .getSize()."), this.getSize(A) } }), Object.assign(aA.prototype, { center: function (A) { return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."), this.getCenter(A) }, empty: function () { return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."), this.isEmpty() }, isIntersectionBox: function (A) { return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(A) }, isIntersectionSphere: function (A) { return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."), this.intersectsSphere(A) }, size: function (A) { return console.warn("THREE.Box3: .size() has been renamed to .getSize()."), this.getSize(A) } }), Ze.prototype.setFromMatrix = function (A) { return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."), this.setFromProjectionMatrix(A) }, Hs.prototype.center = function (A) { return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."), this.getCenter(A) }, Object.assign(a, { random16: function () { return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."), Math.random() }, nearestPowerOfTwo: function (A) { return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."), a.floorPowerOfTwo(A) }, nextPowerOfTwo: function (A) { return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."), a.ceilPowerOfTwo(A) } }), Object.assign(l.prototype, { flattenToArrayOffset: function (A, e) { return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."), this.toArray(A, e) }, multiplyVector3: function (A) { return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."), A.applyMatrix3(this) }, multiplyVector3Array: function () { console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.") }, applyToBufferAttribute: function (A) { return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."), A.applyMatrix3(this) }, applyToVector3Array: function () { console.error("THREE.Matrix3: .applyToVector3Array() has been removed.") } }), Object.assign(M.prototype, { extractPosition: function (A) { return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."), this.copyPosition(A) }, flattenToArrayOffset: function (A, e) { return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."), this.toArray(A, e) }, getPosition: function () { return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."), (new y).setFromMatrixColumn(this, 3) }, setRotationFromQuaternion: function (A) { return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."), this.makeRotationFromQuaternion(A) }, multiplyToArray: function () { console.warn("THREE.Matrix4: .multiplyToArray() has been removed.") }, multiplyVector3: function (A) { return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."), A.applyMatrix4(this) }, multiplyVector4: function (A) { return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."), A.applyMatrix4(this) }, multiplyVector3Array: function () { console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.") }, rotateAxis: function (A) { console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."), A.transformDirection(this) }, crossVector: function (A) { return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."), A.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 (A) { return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."), A.applyMatrix4(this) }, applyToVector3Array: function () { console.error("THREE.Matrix4: .applyToVector3Array() has been removed.") }, makeFrustum: function (A, e, t, i, o, n) { return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."), this.makePerspective(A, e, i, t, o, n) } }), EA.prototype.isIntersectionLine = function (A) { return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."), this.intersectsLine(A) }, f.prototype.multiplyVector3 = function (A) { return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."), A.applyQuaternion(this) }, Object.assign(CA.prototype, { isIntersectionBox: function (A) { return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(A) }, isIntersectionPlane: function (A) { return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."), this.intersectsPlane(A) }, isIntersectionSphere: function (A) { return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."), this.intersectsSphere(A) } }), Object.assign(RA.prototype, { area: function () { return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."), this.getArea() }, barycoordFromPoint: function (A, e) { return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."), this.getBarycoord(A, e) }, midpoint: function (A) { return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."), this.getMidpoint(A) }, normal: function (A) { return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."), this.getNormal(A) }, plane: function (A) { return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."), this.getPlane(A) } }), Object.assign(RA, { barycoordFromPoint: function (A, e, t, i, o) { return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."), RA.getBarycoord(A, e, t, i, o) }, normal: function (A, e, t, i) { return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."), RA.getNormal(A, e, t, i) } }), Object.assign(Ba.prototype, { extractAllPoints: function (A) { return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."), this.extractPoints(A) }, extrude: function (A) { return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."), new Jn(this, A) }, makeGeometry: function (A) { return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."), new rr(this, A) } }), Object.assign(s.prototype, { fromAttribute: function (A, e, t) { return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(A, e, t) }, distanceToManhattan: function (A) { return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."), this.manhattanDistanceTo(A) }, lengthManhattan: function () { return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength() } }), Object.assign(y.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 (A) { return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."), this.setFromMatrixPosition(A) }, getScaleFromMatrix: function (A) { return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."), this.setFromMatrixScale(A) }, getColumnFromMatrix: function (A, e) { return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."), this.setFromMatrixColumn(e, A) }, applyProjection: function (A) { return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."), this.applyMatrix4(A) }, fromAttribute: function (A, e, t) { return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(A, e, t) }, distanceToManhattan: function (A) { return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."), this.manhattanDistanceTo(A) }, lengthManhattan: function () { return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength() } }), Object.assign(p.prototype, { fromAttribute: function (A, e, t) { return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(A, e, t) }, lengthManhattan: function () { return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength() } }), Object.assign(De.prototype, { computeTangents: function () { console.error("THREE.Geometry: .computeTangents() has been removed.") }, computeLineDistances: function () { console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.") }, applyMatrix: function (A) { return console.warn("THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4()."), this.applyMatrix4(A) } }), Object.assign(H.prototype, { getChildByName: function (A) { return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."), this.getObjectByName(A) }, renderDepth: function () { console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.") }, translate: function (A, e) { return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."), this.translateOnAxis(e, A) }, getWorldRotation: function () { console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.") }, applyMatrix: function (A) { return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."), this.applyMatrix4(A) } }), Object.defineProperties(H.prototype, { eulerOrder: { get: function () { return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."), this.rotation.order }, set: function (A) { console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."), this.rotation.order = A } }, 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(Ue.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(Ue.prototype, { drawMode: { get: function () { return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."), 0 }, set: function () { console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.") } } }), Object.defineProperties(xo.prototype, { objects: { get: function () { return console.warn("THREE.LOD: .objects has been renamed to .levels."), this.levels } } }), Object.defineProperty(bo.prototype, "useVertexTexture", { get: function () { console.warn("THREE.Skeleton: useVertexTexture has been removed.") }, set: function () { console.warn("THREE.Skeleton: useVertexTexture has been removed.") } }), So.prototype.initBones = function () { console.error("THREE.SkinnedMesh: initBones() has been removed.") }, Object.defineProperty(ea.prototype, "__arcLengthDivisions", { get: function () { return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."), this.arcLengthDivisions }, set: function (A) { console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."), this.arcLengthDivisions = A } }), je.prototype.setLens = function (A, e) { console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."), void 0 !== e && (this.filmGauge = e), this.setFocalLength(A) }, Object.defineProperties(xa.prototype, { onlyShadow: { set: function () { console.warn("THREE.Light: .onlyShadow has been removed.") } }, shadowCameraFov: { set: function (A) { console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."), this.shadow.camera.fov = A } }, shadowCameraLeft: { set: function (A) { console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."), this.shadow.camera.left = A } }, shadowCameraRight: { set: function (A) { console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."), this.shadow.camera.right = A } }, shadowCameraTop: { set: function (A) { console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."), this.shadow.camera.top = A } }, shadowCameraBottom: { set: function (A) { console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."), this.shadow.camera.bottom = A } }, shadowCameraNear: { set: function (A) { console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."), this.shadow.camera.near = A } }, shadowCameraFar: { set: function (A) { console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."), this.shadow.camera.far = A } }, shadowCameraVisible: { set: function () { console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.") } }, shadowBias: { set: function (A) { console.warn("THREE.Light: .shadowBias is now .shadow.bias."), this.shadow.bias = A } }, shadowDarkness: { set: function () { console.warn("THREE.Light: .shadowDarkness has been removed.") } }, shadowMapWidth: { set: function (A) { console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."), this.shadow.mapSize.width = A } }, shadowMapHeight: { set: function (A) { console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."), this.shadow.mapSize.height = A } } }), Object.defineProperties(YA.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."), 35048 === this.usage }, set: function () { console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."), this.setUsage(35048) } } }), Object.assign(YA.prototype, { setDynamic: function (A) { return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."), this.setUsage(!0 === A ? 35048 : 35044), 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(he.prototype, { addIndex: function (A) { console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."), this.setIndex(A) }, addAttribute: function (A, e) { return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."), e && e.isBufferAttribute || e && e.isInterleavedBufferAttribute ? "index" === A ? (console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."), this.setIndex(e), this) : this.setAttribute(A, e) : (console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."), this.setAttribute(A, new YA(arguments[1], arguments[2]))) }, addDrawCall: function (A, e, t) { void 0 !== t && console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."), console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."), this.addGroup(A, e) }, clearDrawCalls: function () { console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."), this.clearGroups() }, computeTangents: function () { console.warn("THREE.BufferGeometry: .computeTangents() has been removed.") }, computeOffsets: function () { console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.") }, removeAttribute: function (A) { return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."), this.deleteAttribute(A) }, applyMatrix: function (A) { return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."), this.applyMatrix4(A) } }), Object.defineProperties(he.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(Ds.prototype, { linePrecision: { get: function () { return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."), this.params.Line.threshold }, set: function (A) { console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."), this.params.Line.threshold = A } } }), Object.defineProperties(to.prototype, { dynamic: { get: function () { return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."), 35048 === this.usage }, set: function (A) { console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."), this.setUsage(A) } } }), Object.assign(to.prototype, { setDynamic: function (A) { return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."), this.setUsage(!0 === A ? 35048 : 35044), this }, setArray: function () { console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers") } }), Object.assign(zn.prototype, { getArrays: function () { console.error("THREE.ExtrudeBufferGeometry: .getArrays() has been removed.") }, addShapeList: function () { console.error("THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.") }, addShape: function () { console.error("THREE.ExtrudeBufferGeometry: .addShape() has been removed.") } }), Object.defineProperties(Ts.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(qA.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 LA } }, shading: { get: function () { console.error("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead.") }, set: function (A) { console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."), this.flatShading = 1 === A } }, stencilMask: { get: function () { return console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."), this.stencilFuncMask }, set: function (A) { console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."), this.stencilFuncMask = A } } }), Object.defineProperties(Ir.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(Pe.prototype, { derivatives: { get: function () { return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."), this.extensions.derivatives }, set: function (A) { console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."), this.extensions.derivatives = A } } }), Object.assign($i.prototype, { clearTarget: function (A, e, t, i) { console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."), this.setRenderTarget(A), this.clear(e, t, i) }, animate: function (A) { console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."), this.setAnimationLoop(A) }, 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 (A) { console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."), this.setScissorTest(A) }, 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.") }, setTexture2D: function () { console.warn("THREE.WebGLRenderer: .setTexture2D() 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($i.prototype, { shadowMapEnabled: { get: function () { return this.shadowMap.enabled }, set: function (A) { console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."), this.shadowMap.enabled = A } }, shadowMapType: { get: function () { return this.shadowMap.type }, set: function (A) { console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."), this.shadowMap.type = A } }, 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 (A) { console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."), this.outputEncoding = !0 === A ? 3001 : 3e3 } } }), Object.defineProperties(Yi.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(g.prototype, { wrapS: { get: function () { return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."), this.texture.wrapS }, set: function (A) { console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."), this.texture.wrapS = A } }, wrapT: { get: function () { return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."), this.texture.wrapT }, set: function (A) { console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."), this.texture.wrapT = A } }, magFilter: { get: function () { return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."), this.texture.magFilter }, set: function (A) { console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."), this.texture.magFilter = A } }, minFilter: { get: function () { return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."), this.texture.minFilter }, set: function (A) { console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."), this.texture.minFilter = A } }, anisotropy: { get: function () { return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."), this.texture.anisotropy }, set: function (A) { console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."), this.texture.anisotropy = A } }, offset: { get: function () { return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."), this.texture.offset }, set: function (A) { console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."), this.texture.offset = A } }, repeat: { get: function () { return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."), this.texture.repeat }, set: function (A) { console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."), this.texture.repeat = A } }, format: { get: function () { return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."), this.texture.format }, set: function (A) { console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."), this.texture.format = A } }, type: { get: function () { return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."), this.texture.type }, set: function (A) { console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."), this.texture.type = A } }, generateMipmaps: { get: function () { return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."), this.texture.generateMipmaps }, set: function (A) { console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."), this.texture.generateMipmaps = A } } }), Object.defineProperties(ps.prototype, { load: { value: function (A) { console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead."); var e = this; return (new $a).load(A, (function (A) { e.setBuffer(A) })), this } }, startTime: { set: function () { console.warn("THREE.Audio: .startTime is now .play( delay ).") } } }), ys.prototype.getData = function () { return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."), this.getFrequencyData() }, He.prototype.updateCubeMap = function (A, e) { return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."), this.update(A, e) }; var rc = { merge: function (A, e, t) { var i; console.warn("THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead."), e.isMesh && (e.matrixAutoUpdate && e.updateMatrix(), i = e.matrix, e = e.geometry), A.merge(e, i, t) }, center: function (A) { return console.warn("THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead."), A.center() } }; c.crossOrigin = void 0, c.loadTexture = function (A, e, t, i) { console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead."); var o = new Aa; o.setCrossOrigin(this.crossOrigin); var n = o.load(A, t, void 0, i); return e && (n.mapping = e), n }, c.loadTextureCube = function (A, e, t, i) { console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead."); var o = new $r; o.setCrossOrigin(this.crossOrigin); var n = o.load(A, t, void 0, i); return e && (n.mapping = e), n }, c.loadCompressedTexture = function () { console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.") }, c.loadCompressedTextureCube = function () { console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.") }; var ac = { createMultiMaterialObject: function () { console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js") }, detach: function () { console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js") }, attach: function () { console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js") } }; "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", { detail: { revision: "115" } })); var sc = Object.freeze({ ACESFilmicToneMapping: 5, AddEquation: 100, AddOperation: 2, AdditiveBlending: 2, AlphaFormat: 1021, AlwaysDepth: 1, AlwaysStencilFunc: 519, AmbientLight: Ta, AmbientLightProbe: is, AnimationClip: Gr, AnimationLoader: zr, AnimationMixer: Rs, AnimationObjectGroup: Ks, AnimationUtils: br, ArcCurve: ia, ArrayCamera: Zi, ArrowHelper: Il, Audio: ps, AudioAnalyser: ys, AudioContext: _a, AudioListener: ds, AudioLoader: $a, AxesHelper: El, AxisHelper: function (A) { return console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper."), new El(A) }, BackSide: 1, BasicDepthPacking: 3200, BasicShadowMap: 0, BinaryTextureLoader: function (A) { return console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader."), new Xr(A) }, Bone: Uo, BooleanKeyframeTrack: Tr, BoundingBoxHelper: function (A, e) { return console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."), new ul(A, e) }, Box2: Ps, Box3: aA, Box3Helper: fl, BoxBufferGeometry: Ne, BoxGeometry: Le, BoxHelper: ul, BufferAttribute: YA, BufferGeometry: he, BufferGeometryLoader: Va, ByteType: 1010, Cache: qr, Camera: qe, CameraHelper: dl, CanvasRenderer: function () { console.error("THREE.CanvasRenderer has been removed") }, CanvasTexture: en, CatmullRomCurve3: la, CineonToneMapping: 4, CircleBufferGeometry: ur, CircleGeometry: gr, ClampToEdgeWrapping: 1001, Clock: as, ClosedSplineCurve3: ic, Color: LA, ColorKeyframeTrack: kr, CompressedTexture: An, CompressedTextureLoader: Zr, ConeBufferGeometry: pr, ConeGeometry: dr, CubeCamera: He, CubeGeometry: Le, CubeReflectionMapping: 301, CubeRefractionMapping: 302, CubeTexture: ut, CubeTextureLoader: $r, CubeUVReflectionMapping: 306, CubeUVRefractionMapping: 307, CubicBezierCurve: pa, CubicBezierCurve3: ga, CubicInterpolant: Fr, CullFaceBack: 1, CullFaceFront: 2, CullFaceFrontBack: 3, CullFaceNone: 0, Curve: ea, CurvePath: Ia, CustomBlending: 5, CylinderBufferGeometry: hr, CylinderGeometry: cr, Cylindrical: Vs, DataTexture: We, DataTexture2DArray: ft, DataTexture3D: mt, DataTextureLoader: Xr, DecrementStencilOp: 7683, DecrementWrapStencilOp: 34056, DefaultLoadingManager: Hr, DepthFormat: 1026, DepthStencilFormat: 1027, DepthTexture: tn, DirectionalLight: Ra, DirectionalLightHelper: ll, DirectionalLightShadow: Qa, DiscreteInterpolant: Qr, DodecahedronBufferGeometry: fn, DodecahedronGeometry: un, DoubleSide: 2, DstAlphaFactor: 206, DstColorFactor: 208, DynamicBufferAttribute: function (A, e) { return console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead."), new YA(A, e).setUsage(35048) }, DynamicCopyUsage: 35050, DynamicDrawUsage: 35048, DynamicReadUsage: 35049, EdgesGeometry: lr, EdgesHelper: function (A, e) { return console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."), new jo(new lr(A.geometry), new ko({ color: void 0 !== e ? e : 16777215 })) }, EllipseCurve: ta, EqualDepth: 4, EqualStencilFunc: 514, EquirectangularReflectionMapping: 303, EquirectangularRefractionMapping: 304, Euler: F, EventDispatcher: i, ExtrudeBufferGeometry: zn, ExtrudeGeometry: Jn, Face3: GA, Face4: function (A, e, t, i, o, n, r) { return console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead."), new GA(A, e, t, o, n, r) }, FaceColors: 1, FileLoader: Jr, FlatShading: 1, Float32Attribute: function (A, e) { return console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."), new Ae(A, e) }, Float32BufferAttribute: Ae, Float64Attribute: function (A, e) { return console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."), new ee(A, e) }, Float64BufferAttribute: ee, FloatType: 1015, Fog: eo, FogExp2: Ao, Font: za, FontLoader: Xa, FrontFaceDirectionCCW: 1, FrontFaceDirectionCW: 0, FrontSide: 0, Frustum: Ze, GammaEncoding: 3007, Geometry: De, GeometryUtils: rc, GreaterDepth: 6, GreaterEqualDepth: 5, GreaterEqualStencilFunc: 518, GreaterStencilFunc: 516, GridHelper: ol, Group: Xi, HalfFloatType: 1016, HemisphereLight: Sa, HemisphereLightHelper: il, HemisphereLightProbe: ts, IcosahedronBufferGeometry: gn, IcosahedronGeometry: pn, ImageBitmapLoader: Wa, ImageLoader: _r, ImageUtils: c, ImmediateRenderObject: Ys, IncrementStencilOp: 7682, IncrementWrapStencilOp: 34055, InstancedBufferAttribute: Oa, InstancedBufferGeometry: Na, InstancedInterleavedBuffer: ks, InstancedMesh: To, Int16Attribute: function (A, e) { return console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead."), new ZA(A, e) }, Int16BufferAttribute: ZA, Int32Attribute: function (A, e) { return console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead."), new _A(A, e) }, Int32BufferAttribute: _A, Int8Attribute: function (A, e) { return console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead."), new WA(A, e) }, Int8BufferAttribute: WA, IntType: 1013, InterleavedBuffer: to, InterleavedBufferAttribute: no, Interpolant: Ur, InterpolateDiscrete: 2300, InterpolateLinear: 2301, InterpolateSmooth: 2302, InvertStencilOp: 5386, JSONLoader: function () { console.error("THREE.JSONLoader has been removed.") }, KeepStencilOp: 7680, KeyframeTrack: Rr, LOD: xo, LatheBufferGeometry: nr, LatheGeometry: or, Layers: K, LensFlare: function () { console.error("THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js") }, LessDepth: 2, LessEqualDepth: 3, LessEqualStencilFunc: 515, LessStencilFunc: 513, Light: xa, LightProbe: es, LightShadow: wa, Line: Go, Line3: Hs, LineBasicMaterial: ko, LineCurve: ua, LineCurve3: fa, LineDashedMaterial: wr, LineLoop: Ho, LinePieces: 1, LineSegments: jo, LineStrip: 0, LinearEncoding: 3e3, LinearFilter: 1006, LinearInterpolant: Kr, LinearMipMapLinearFilter: 1008, LinearMipMapNearestFilter: 1007, LinearMipmapLinearFilter: 1008, LinearMipmapNearestFilter: 1007, LinearToneMapping: 1, Loader: Yr, LoaderUtils: La, LoadingManager: jr, LogLuvEncoding: 3003, LoopOnce: 2200, LoopPingPong: 2202, LoopRepeat: 2201, LuminanceAlphaFormat: 1025, LuminanceFormat: 1024, MOUSE: t, Material: qA, MaterialLoader: Da, Math: a, MathUtils: a, Matrix3: l, Matrix4: M, MaxEquation: 104, Mesh: Ue, MeshBasicMaterial: jA, MeshDepthMaterial: ji, MeshDistanceMaterial: Hi, MeshFaceMaterial: function (A) { return console.warn("THREE.MeshFaceMaterial has been removed. Use an Array instead."), A }, MeshLambertMaterial: xr, MeshMatcapMaterial: Sr, MeshNormalMaterial: Br, MeshPhongMaterial: Ir, MeshPhysicalMaterial: vr, MeshStandardMaterial: yr, MeshToonMaterial: Er, MinEquation: 103, MirroredRepeatWrapping: 1002, MixOperation: 1, MultiMaterial: function (A) { return void 0 === A && (A = []), console.warn("THREE.MultiMaterial has been removed. Use an Array instead."), A.isMultiMaterial = !0, A.materials = A, A.clone = function () { return A.slice() }, A }, MultiplyBlending: 4, MultiplyOperation: 0, NearestFilter: 1003, NearestMipMapLinearFilter: 1005, NearestMipMapNearestFilter: 1004, NearestMipmapLinearFilter: 1005, NearestMipmapNearestFilter: 1004, NeverDepth: 0, NeverStencilFunc: 512, NoBlending: 0, NoColors: 0, NoToneMapping: 0, NormalBlending: 1, NotEqualDepth: 7, NotEqualStencilFunc: 517, NumberKeyframeTrack: Dr, Object3D: H, ObjectLoader: Pa, ObjectSpaceNormalMap: 1, OctahedronBufferGeometry: dn, OctahedronGeometry: hn, OneFactor: 201, OneMinusDstAlphaFactor: 207, OneMinusDstColorFactor: 209, OneMinusSrcAlphaFactor: 205, OneMinusSrcColorFactor: 203, OrthographicCamera: Ka, PCFShadowMap: 1, PCFSoftShadowMap: 2, PMREMGenerator: jl, ParametricBufferGeometry: rn, ParametricGeometry: nn, Particle: function (A) { return console.warn("THREE.Particle has been renamed to THREE.Sprite."), new vo(A) }, ParticleBasicMaterial: function (A) { return console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial."), new Yo(A) }, ParticleSystem: function (A, e) { return console.warn("THREE.ParticleSystem has been renamed to THREE.Points."), new Xo(A, e) }, ParticleSystemMaterial: function (A) { return console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial."), new Yo(A) }, Path: Ea, PerspectiveCamera: je, Plane: EA, PlaneBufferGeometry: et, PlaneGeometry: At, PlaneHelper: ml, PointCloud: function (A, e) { return console.warn("THREE.PointCloud has been renamed to THREE.Points."), new Xo(A, e) }, PointCloudMaterial: function (A) { return console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial."), new Yo(A) }, PointLight: Fa, PointLightHelper: $s, Points: Xo, PointsMaterial: Yo, PolarGridHelper: nl, PolyhedronBufferGeometry: sn, PolyhedronGeometry: an, PositionalAudio: Cs, PropertyBinding: Fs, PropertyMixer: vs, QuadraticBezierCurve: ma, QuadraticBezierCurve3: Ca, Quaternion: f, QuaternionKeyframeTrack: Nr, QuaternionLinearInterpolant: Lr, REVISION: "115", RGBADepthPacking: 3201, RGBAFormat: 1023, RGBAIntegerFormat: 1033, RGBA_ASTC_10x10_Format: 37819, RGBA_ASTC_10x5_Format: 37816, RGBA_ASTC_10x6_Format: 37817, RGBA_ASTC_10x8_Format: 37818, RGBA_ASTC_12x10_Format: 37820, RGBA_ASTC_12x12_Format: 37821, RGBA_ASTC_4x4_Format: 37808, RGBA_ASTC_5x4_Format: 37809, RGBA_ASTC_5x5_Format: 37810, RGBA_ASTC_6x5_Format: 37811, RGBA_ASTC_6x6_Format: 37812, RGBA_ASTC_8x5_Format: 37813, RGBA_ASTC_8x6_Format: 37814, RGBA_ASTC_8x8_Format: 37815, RGBA_BPTC_Format: 36492, RGBA_ETC2_EAC_Format: 37496, RGBA_PVRTC_2BPPV1_Format: 35843, RGBA_PVRTC_4BPPV1_Format: 35842, RGBA_S3TC_DXT1_Format: 33777, RGBA_S3TC_DXT3_Format: 33778, RGBA_S3TC_DXT5_Format: 33779, RGBDEncoding: 3006, RGBEEncoding: 3002, RGBEFormat: 1023, RGBFormat: 1022, RGBIntegerFormat: 1032, RGBM16Encoding: 3005, RGBM7Encoding: 3004, RGB_ETC1_Format: 36196, RGB_ETC2_Format: 37492, RGB_PVRTC_2BPPV1_Format: 35841, RGB_PVRTC_4BPPV1_Format: 35840, RGB_S3TC_DXT1_Format: 33776, RGFormat: 1030, RGIntegerFormat: 1031, RawShaderMaterial: Cr, Ray: CA, Raycaster: Ds, RectAreaLight: ka, RedFormat: 1028, RedIntegerFormat: 1029, ReinhardToneMapping: 2, RepeatWrapping: 1e3, ReplaceStencilOp: 7681, ReverseSubtractEquation: 102, RingBufferGeometry: ir, RingGeometry: tr, SRGB8_ALPHA8_ASTC_10x10_Format: 37851, SRGB8_ALPHA8_ASTC_10x5_Format: 37848, SRGB8_ALPHA8_ASTC_10x6_Format: 37849, SRGB8_ALPHA8_ASTC_10x8_Format: 37850, SRGB8_ALPHA8_ASTC_12x10_Format: 37852, SRGB8_ALPHA8_ASTC_12x12_Format: 37853, SRGB8_ALPHA8_ASTC_4x4_Format: 37840, SRGB8_ALPHA8_ASTC_5x4_Format: 37841, SRGB8_ALPHA8_ASTC_5x5_Format: 37842, SRGB8_ALPHA8_ASTC_6x5_Format: 37843, SRGB8_ALPHA8_ASTC_6x6_Format: 37844, SRGB8_ALPHA8_ASTC_8x5_Format: 37845, SRGB8_ALPHA8_ASTC_8x6_Format: 37846, SRGB8_ALPHA8_ASTC_8x8_Format: 37847, Scene: Y, SceneUtils: ac, ShaderChunk: tt, ShaderLib: it, ShaderMaterial: Pe, ShadowMaterial: mr, Shape: Ba, ShapeBufferGeometry: ar, ShapeGeometry: rr, ShapePath: Ja, ShapeUtils: Hn, ShortType: 1011, Skeleton: bo, SkeletonHelper: _s, SkinnedMesh: So, SmoothShading: 2, Sphere: cA, SphereBufferGeometry: er, SphereGeometry: Ar, Spherical: Os, SphericalHarmonics3: As, SphericalReflectionMapping: 305, Spline: nc, SplineCurve: ya, SplineCurve3: oc, SpotLight: ba, SpotLightHelper: Js, SpotLightShadow: Ma, Sprite: vo, SpriteMaterial: ro, SrcAlphaFactor: 204, SrcAlphaSaturateFactor: 210, SrcColorFactor: 202, StaticCopyUsage: 35046, StaticDrawUsage: 35044, StaticReadUsage: 35045, StereoCamera: rs, StreamCopyUsage: 35042, StreamDrawUsage: 35040, StreamReadUsage: 35041, StringKeyframeTrack: Or, SubtractEquation: 101, SubtractiveBlending: 3, TOUCH: { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 }, TangentSpaceNormalMap: 0, TetrahedronBufferGeometry: cn, TetrahedronGeometry: ln, TextBufferGeometry: $n, TextGeometry: _n, Texture: d, TextureLoader: Aa, TorusBufferGeometry: En, TorusGeometry: In, TorusKnotBufferGeometry: vn, TorusKnotGeometry: yn, Triangle: RA, TriangleFanDrawMode: 2, TriangleStripDrawMode: 1, TrianglesDrawMode: 0, TubeBufferGeometry: Cn, TubeGeometry: mn, UVMapping: 300, Uint16Attribute: function (A, e) { return console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead."), new XA(A, e) }, Uint16BufferAttribute: XA, Uint32Attribute: function (A, e) { return console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead."), new $A(A, e) }, Uint32BufferAttribute: $A, Uint8Attribute: function (A, e) { return console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead."), new JA(A, e) }, Uint8BufferAttribute: JA, Uint8ClampedAttribute: function (A, e) { return console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead."), new zA(A, e) }, Uint8ClampedBufferAttribute: zA, Uncharted2ToneMapping: 3, Uniform: Ts, UniformsLib: Xe, UniformsUtils: Ge, UnsignedByteType: 1009, UnsignedInt248Type: 1020, UnsignedIntType: 1014, UnsignedShort4444Type: 1017, UnsignedShort5551Type: 1018, UnsignedShort565Type: 1019, UnsignedShortType: 1012, VSMShadowMap: 3, Vector2: s, Vector3: y, Vector4: p, VectorKeyframeTrack: Vr, Vertex: function (A, e, t) { return console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead."), new y(A, e, t) }, VertexColors: 2, VideoTexture: $o, WebGLCubeRenderTarget: Ye, WebGLMultisampleRenderTarget: u, WebGLRenderTarget: g, WebGLRenderTargetCube: function (A, e, t) { return console.warn("THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options )."), new Ye(A, t) }, WebGLRenderer: $i, WebGLUtils: zi, WireframeGeometry: on, WireframeHelper: function (A, e) { return console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead."), new jo(new on(A.geometry), new ko({ color: void 0 !== e ? e : 16777215 })) }, WrapAroundEnding: 2402, XHRLoader: function (A) { return console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader."), new Jr(A) }, ZeroCurvatureEnding: 2400, ZeroFactor: 200, ZeroSlopeEnding: 2401, ZeroStencilOp: 0, sRGBEncoding: 3001 }); function lc(A) { return (lc = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (A) { return typeof A } : function (A) { return A && "function" == typeof Symbol && A.constructor === Symbol && A !== Symbol.prototype ? "symbol" : typeof A } )(A) } function cc(A, e) { if (!(A instanceof e)) throw new TypeError("Cannot call a class as a function") } function hc(A, e) { for (var t = 0; e.length > t; t++) { var i = e[t]; i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(A, i.key, i) } } function dc(A, e, t) { return e && hc(A.prototype, e), t && hc(A, t), A } function pc(A, e, t) { return e in A ? Object.defineProperty(A, e, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : A[e] = t, A } function gc(A) { for (var e = 1; arguments.length > e; e++) { var t = null != arguments[e] ? Object(arguments[e]) : {}, i = Object.keys(t); "function" == typeof Object.getOwnPropertySymbols && (i = i.concat(Object.getOwnPropertySymbols(t).filter((function (A) { return Object.getOwnPropertyDescriptor(t, A).enumerable })))), i.forEach((function (e) { pc(A, e, t[e]) })) } return A } function uc(A, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); A.prototype = Object.create(e && e.prototype, { constructor: { value: A, writable: !0, configurable: !0 } }), e && mc(A, e) } function fc(A) { return (fc = Object.setPrototypeOf ? Object.getPrototypeOf : function (A) { return A.__proto__ || Object.getPrototypeOf(A) })(A) } function mc(A, e) { return (mc = Object.setPrototypeOf || function (A, e) { return A.__proto__ = e, A })(A, e) } function Cc(A, e) { return !e || "object" != typeof e && "function" != typeof e ? function (A) { if (void 0 === A) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return A }(A) : e } function yc(A) { return function (A) { if (Array.isArray(A)) { for (var e = 0, t = new Array(A.length); A.length > e; e++) t[e] = A[e]; return t } }(A) || function (A) { if (Symbol.iterator in Object(A) || "[object Arguments]" === Object.prototype.toString.call(A)) return Array.from(A) }(A) || function () { throw new TypeError("Invalid attempt to spread non-iterable instance") }() } var vc = { SceneSize: 1e3, getDataFromIndexedDB: !0, TextureResRoot: "images/", UserControlView: !1, FillCavity: !1, EnableClippingCaps: !0, EnableBoxClippingCaps: !1, EnableTextureMapping: !0, EnableTextureLoading: !0, EnableLightmap: !1, EnableTransformAoMap: !0, LightmapIntensity: 1, ClippingCaps: !1, SelectionColor: { color: 2205669, side: 2, opacity: .8, transparent: !0 }, DisableAntialias: !1, EnableDemolishByDClick: !1, IsMobile: !1, UseWorker: !1, ZipResourcePostfix: "", HasLayerData: !1, Renderer: 1, Instance: !0, MergeComponent: !1, AutoMergeComponent: !0, AutoMergeComponentCount: 1e4, MaxMergeCount: 1e3, MergedTriangleNumberThreshold: 2e7, MaxMergedTriangleNumber: 2e7, IncrementRender: !1, EnableRenderPass: !1, LimitFrameTime: 250, maxObjectNumInPool: 1e3, maxDrawCacheNum: 4e4, OctantDepth: 15, MaximumDepth: 0, TargetDistance: 1e4, ConcurrencyRequestCount: 16, ShowOctant: !1, EnableOctant: !1, EnableViewController: !0, DirectionalLight: !0, LightPreset: 2, IBL: !1, ToneMapping: 4, LightIntensityFactor: 1, Hover: !1, OcclusionTranslucentEnabled: !1, OcclusionOpacity: .5, OcclusionDistanceToCamera: 1e3, LineSelectRange: 30, DrawingStyle: 0, DrawingBoardlineEnabled: !0, InitWireframeData: !1, EnableHitDetection: !1, TranslucentDepthDisabled: !1, SharedMeshInstanceEnable: !1, DataProvider: 0, EnableSelectionOutline: !0, EnableSelectionByTranslucent: !1, EnableSelectionBoundingBox: !1, EnableShadow: !1, EnableAnimation: !0, UseLods: !1, AutoPrepare: !0, DEBUG: !1, WalkingWithGravity: !1, WalkingWithViewLock: !1, RendererWhenLoad: !1, language: "zh-cn", LoadComponentOnDemand: !1, logarithmicDepthBuffer: !1, InfluencedByLight: !0, geometricErrorThresholdValue: 80, MaximumAvailableMemory: 500, DataReduction: !1, ConstraintZoom: !1, stepLoad: !1, useGzip: !1, notDepthWriteByTransparent: !1, PickingEffect: !0, PickingLineWidthEnabled: !0, loadBatch: !0, MiniMapSize: 1024, alphaTest: .5, EnableCreateMiniMap: !1, MultipleSelectComponents: !0 }, Ic = F.RotationOrders, Ec = { ORTHOGRAPHIC: "orth", PERSPECTIVE: "persp" }, Bc = { elements: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }, xc = { elements: [1, 0, 0, 0, 1, 0, 0, 0, 1] }, Sc = { IfcOpeningElement: !0, IfcSpace: !0, OST_Rooms: !0, "房间": !0 }; Object.defineProperties(Sc, { "房间": { get: function () { return Sc.OST_Rooms }, set: function (A) { Sc.OST_Rooms = A } } }); var wc, Mc, bc = new(Proxy || function (A) { return A })(Sc, { deleteProperty: function (A, e) { e in A && ("房间" === e && delete A.OST_Rooms, delete A[e]) } }), Uc = { Keep: 0, Home: 135, Top: 1, Bottom: 2, Front: 3, Back: 4, Right: 5, Left: 6, TopFrontRight: 135, TopFrontLeft: 136, TopBackRight: 145, TopBackLeft: 146, BottomFrontRight: 235, BottomFrontLeft: 236, BottomBackRight: 245, BottomBackLeft: 246, TopFront: 13, TopBack: 14, TopRight: 15, TopLeft: 16, BottomFront: 23, BottomBack: 24, BottomRight: 25, BottomLeft: 26, FrontRight: 35, FrontLeft: 36, BackRight: 45, BackLeft: 46, TopToRight: 105, TopToLeft: 106, TopToFront: 103, TopToBack: 104, BottomToRight: 205, BottomToLeft: 206, BottomToFront: 203, BottomToBack: 204, FrontToTop: 301, FrontToBottom: 302, FrontToRight: 305, FrontToLeft: 306, BackToTop: 401, BackToBottom: 402, BackToRight: 405, BackToLeft: 406, RightToTop: 501, RightToBottom: 502, RightToFront: 503, RightToBack: 504, LeftToTop: 601, LeftTopBottom: 602, LeftTopFront: 603, LeftTopBack: 604 }, Fc = { DirectionalLight: "directional", AmbientLight: "ambient", PointLight: "point", SpotLight: "spot" }, Kc = { Clear: 0, Add: 1, Remove: 2 }, Qc = { Geometry: 1, Marker3d: 2, Room: 3, ExternalComponent: 4, UnPickable: 0 }, Rc = { ON_LOAD_START: "ON_LOAD_START", ON_LOAD_PROGRESS: "ON_LOAD_PROGRESS", ON_LOAD_COMPLETE: "ON_LOAD_COMPLETE", ON_DEMAND_LOAD_COMPLETE: "ON_DEMAND_LOAD_COMPLETE", ON_LOAD_EMPTY_SCENE: "ON_LOAD_EMPTY_SCENE", ON_LOAD_CONFIG_FINISH: "ON_LOAD_CONFIG_FINISH", ON_LOAD_INVALID_SCENE: "ON_LOAD_INVALID_SCENE", ON_LOAD_INVALID_DATA: "ON_LOAD_INVALID_DATA", ON_NETWORK_ERROR: "ON_NETWORK_ERROR", ACCOUNT_NO_EXIST: "ACCOUNT_NO_EXIST", NO_PERMISSION: "NO_PERMISSION", ON_LOAD_ERROR: "ON_LOAD_ERROR", ON_SELECTION_CHANGED: "ON_SELECTION_CHANGED", ON_RECTPICK_ADD: "ON_RECTPICK_ADD", ON_RECTPICK_REMOVE: "ON_RECTPICK_REMOVE", ON_CLICK_PICK: "ON_CLICK_PICK", ON_HOVER_PICK: "ON_HOVER_PICK", ON_MEASURE_PICK: "ON_MEASURE_PICK", ON_SELECTION_FAILED: "ON_SELECTION_FAILED", ON_CLIP_HOVER: "ON_CLIP_HOVER", ON_HOVER_SNAP: "ON_HOVER_SNAP", ON_CLIP_MOUSE_MOVE: "ON_CLIP_MOUSE_MOVE", ON_CLIP_MOUSE_DOWN: "ON_CLIP_MOUSE_DOWN", ON_VERSION_NO_MATCH: "ON_VERSION_NO_MATCH", ON_VIEWER_RESTORED: "ON_VIEWER_RESTORED", ON_CAMERA_HEIGHT_CHANGED: "ON_CAMERA_HEIGHT_CHANGED", ON_CAMERA_CHANGED_AND_RENDERED: "ON_CAMERA_CHANGED_AND_RENDERED", ON_DATABASE_OPEN: "ON_DATABASE_OPEN", ON_DATABASE_CLOSE: "ON_DATABASE_CLOSE", ON_DATABASE_ADD: "ON_DATABASE_ADD", ON_DATABASE_DELETE: "ON_DATABASE_DELETE", ON_DATABASE_CLERA: "ON_DATABASE_CLERA", ON_DATABASE_EEEOR: "ON_DATABASE_EEEOR", BEFORE_RESETSCENE: "BEFORE_RESETSCENE", AFTER_RESETSCENE: "AFTER_RESETSCENE", ON_CAMERA_CHANGE: "ON_CAMERA_CHANGE", ON_CONTROL_ENTER: "ON_CONTROL_ENTER", ON_CONTROL_EXIST: "ON_CONTROL_EXIST", ON_POINTERLOCK_EXIST: "ON_POINTERLOCK_EXIST", ON_CONTROL_BEGIN: "ON_CONTROL_BEGIN", ON_CONTROL_END: "ON_CONTROL_END", ON_CONTROL_ZOOM: "ON_CONTROL_ZOOM", ON_CONTROL_UPDATEUI: "ON_CONTROL_UPDATEUI", ON_CONTROL_KEYDOWN: "ON_CONTROL_KEYDOWN", ON_CONTROL_KEYUP: "ON_CONTROL_KEYUP", ON_CAMERA_ANIMATION_UPDATE: "ON_CAMERA_ANIMATION_UPDATE", ON_MOUSE_DRAGGED: "ON_MOUSE_DRAGGED" }, Tc = { LOAD_COMPONENT_ERROR: "LOAD_COMPONENT_ERROR", LOAD_MATERIAL_ERROR: "LOAD_MATERIAL_ERROR", LOAD_GEOMETRY_ERROR: "LOAD_GEOMETRY_ERROR", LOAD_COMPONENTNODE_ERROR: "LOAD_COMPONENTNODE_ERROR", LOAD_TEXTURE_ERROR: "LOAD_TEXTURE_ERROR", LOAD_AXISNET_ERROR: "LOAD_AXISNET_ERROR", LOAD_FLOORINFO_ERROR: "LOAD_FLOORINFO_ERROR", PARSEFAILE: "PARSEFAILE", PARSING: "PARSING", IS2D: "IS2D", LOAD_ERROR: "LOAD_ERROR", SCENE_NOT_CLOSE: "SCENE_NOT_CLOSE", SCENE_NOTHING_TO_LOAD: "SCENE_NOTHING_TO_LOAD", LOAD_SCENE_ERROR: "LOAD_SCENE_ERROR", LOAD_SYMBOL_ERROR: "LOAD_SYMBOL_ERROR", LOAD_OCTREEINNER_ERROR: "LOAD_OCTREEINNER_ERROR", LOAD_OCTREEOUTER_ERROR: "LOAD_OCTREEOUTER_ERROR", LOAD_USERID_ERROR: "LOAD_USERID_ERROR", LOAD_USERDATA_ERROR: "LOAD_USERDATA_ERROR", LOAD_CAMERA_ERROR: "LOAD_CAMERA_ERROR", LOAD_MPK_ERROR: "LOAD_MPK_ERROR", LOAD_IBLCONFIG_ERROR: "LOAD_IBLCONFIG_ERROR" }, kc = { MOUSEPOINT: 0, SELECTION: 1, CENTER: 2, CAMERA: 3 }, Dc = { FILE_VISIBLE: 0, FILE_HIDDEN: 1, SELECTED: 2, VISIBLE: 3, HIDDEN: 4, TRANSLUCENT: 5, TRANSLUCENT_OTHERS: 6, WIREFRAME: 7, COLORFUL: 8 }, Lc = { Visible: 1, HideByIsolate: 2, Transparent: 4, TransparentByIsolate: 8 }, Nc = { HIDDEN: 0, HIDDEN_OTHERS: 1, TRANSLUCENT: 2, TRANSLUCENT_OTHERS: 3 }, Oc = { TRANSLUCENT: "TRANSLUCENT", OPAQUE: "OPAQUE" }, Vc = { DISABLED: 0, TRANSLUCENT: 1, HIDDEN: 2 }, Gc = { ORBIT: "orbit", PICK: "pick", PAN: "pan", ZOOM: "zoom", FLY: "fly", WALK: "walk" }, Pc = { PICK_BY_RECT: "pickByRect", ZOOM_BY_RECT: "zoomByRect", CLIP_BY_BOX: "clipByBox", CLIP_FILL: "fillClip", PICK_BY_MEASURE: "pickByMeasure", COMPONENT_TRANSFORM: "componentTransform" }, qc = { NONE: 0, UP: 1, DOWN: 2, LEFT: 4, RIGHT: 8, FORWARD: 16, BACK: 32 }, jc = { SHADING: 0, BOARDLINE: 1, SHADINGWITHLINE: 2 }, Hc = { HIDDEN: -1, NONE: 0, HOVER: 1, SELECTED: 2, OVERRIDED: 3, TRANSPARENT: 4, BLINK: 5 }, Yc = { NONE: 0, BLINK: 1, SELECT: 2 }, Wc = { AUTO: 0, DEFAULT: 1, MERGED: 2, LAYER: 3, LAYER_SCENE: 4 }, Jc = { MATCH_RETURN_TRUE: 0, MATCH_RETURN_FALSE: 1, NOMATCH_RETURN_TRUE: 2, NOMATCH_RETURN_FALSE: 3 }, zc = { CLIPPING: -2, HIDDEN: -1, NONE: 0, SELECTED: 1, BLINK: 2, HOVER: 3, TRANSPARENT: 4, OVERRIDED: 5 }, Zc = { RVT: "RVT", IFC: "IFC", I_MODEL: "I-MODEL", THREE_DS: "3DS", MERGE: "MERGE", DAE: "DAE", DWG: "DWG", OBJ: "OBJ", FBX: "FBX" }, Xc = {}; function _c(A, e, t, i) { this._x = A || 0, this._y = e || 0, this._z = t || 0, this._w = void 0 !== i ? i : 1 } function $c(A, e, t) { this.x = A || 0, this.y = e || 0, this.z = t || 0 } Xc.clamp = function (A, e, t) { return Math.max(e, Math.min(t, A)) }, Xc.euclideanModulo = function (A, e) { return (A % e + e) % e }, Object.assign(_c, { slerp: function (A, e, t, i) { return t.copy(A).slerp(e, i) }, slerpFlat: function (A, e, t, i, o, n, r) { var a = t[i + 0], s = t[i + 1], l = t[i + 2], c = t[i + 3], h = o[n + 0], d = o[n + 1], p = o[n + 2], g = o[n + 3]; if (c !== g || a !== h || s !== d || l !== p) { var u = 1 - r, f = a * h + s * d + l * p + c * g, m = 0 > f ? -1 : 1, C = 1 - f * f; if (C > Number.EPSILON) { var y = Math.sqrt(C), v = Math.atan2(y, f * m); u = Math.sin(u * v) / y, r = Math.sin(r * v) / y } var I = r * m; if (a = a * u + h * I, s = s * u + d * I, l = l * u + p * I, c = c * u + g * I, u === 1 - r) { var E = 1 / Math.sqrt(a * a + s * s + l * l + c * c); a *= E, s *= E, l *= E, c *= E } } A[e] = a, A[e + 1] = s, A[e + 2] = l, A[e + 3] = c } }), Object.defineProperties(_c.prototype, { x: { get: function () { return this._x }, set: function (A) { this._x = A, this._onChangeCallback() } }, y: { get: function () { return this._y }, set: function (A) { this._y = A, this._onChangeCallback() } }, z: { get: function () { return this._z }, set: function (A) { this._z = A, this._onChangeCallback() } }, w: { get: function () { return this._w }, set: function (A) { this._w = A, this._onChangeCallback() } } }), Object.assign(_c.prototype, { isQuaternion: !0, set: function (A, e, t, i) { return this._x = A, this._y = e, this._z = t, this._w = i, this._onChangeCallback(), this }, clone: function () { return new this.constructor(this._x, this._y, this._z, this._w) }, copy: function (A) { return this._x = A.x, this._y = A.y, this._z = A.z, this._w = A.w, this._onChangeCallback(), this }, setFromEuler: function (A, e) { if (!A || !A.isEuler) throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order."); var t = A._x, i = A._y, o = A._z, n = A.order, r = Math.cos, a = Math.sin, s = r(t / 2), l = r(i / 2), c = r(o / 2), h = a(t / 2), d = a(i / 2), p = a(o / 2); return "XYZ" === n ? (this._x = h * l * c + s * d * p, this._y = s * d * c - h * l * p, this._z = s * l * p + h * d * c, this._w = s * l * c - h * d * p) : "YXZ" === n ? (this._x = h * l * c + s * d * p, this._y = s * d * c - h * l * p, this._z = s * l * p - h * d * c, this._w = s * l * c + h * d * p) : "ZXY" === n ? (this._x = h * l * c - s * d * p, this._y = s * d * c + h * l * p, this._z = s * l * p + h * d * c, this._w = s * l * c - h * d * p) : "ZYX" === n ? (this._x = h * l * c - s * d * p, this._y = s * d * c + h * l * p, this._z = s * l * p - h * d * c, this._w = s * l * c + h * d * p) : "YZX" === n ? (this._x = h * l * c + s * d * p, this._y = s * d * c + h * l * p, this._z = s * l * p - h * d * c, this._w = s * l * c - h * d * p) : "XZY" === n && (this._x = h * l * c - s * d * p, this._y = s * d * c - h * l * p, this._z = s * l * p + h * d * c, this._w = s * l * c + h * d * p), !1 !== e && this._onChangeCallback(), this }, setFromAxisAngle: function (A, e) { var t = e / 2, i = Math.sin(t); return this._x = A.x * i, this._y = A.y * i, this._z = A.z * i, this._w = Math.cos(t), this._onChangeCallback(), this }, setFromRotationMatrix: function (A) { var e, t = A.elements, i = t[0], o = t[4], n = t[8], r = t[1], a = t[5], s = t[9], l = t[2], c = t[6], h = t[10], d = i + a + h; return d > 0 ? (e = .5 / Math.sqrt(d + 1), this._w = .25 / e, this._x = (c - s) * e, this._y = (n - l) * e, this._z = (r - o) * e) : i > a && i > h ? (e = 2 * Math.sqrt(1 + i - a - h), this._w = (c - s) / e, this._x = .25 * e, this._y = (o + r) / e, this._z = (n + l) / e) : a > h ? (e = 2 * Math.sqrt(1 + a - i - h), this._w = (n - l) / e, this._x = (o + r) / e, this._y = .25 * e, this._z = (s + c) / e) : (e = 2 * Math.sqrt(1 + h - i - a), this._w = (r - o) / e, this._x = (n + l) / e, this._y = (s + c) / e, this._z = .25 * e), this._onChangeCallback(), this }, setFromUnitVectors: function (A, e) { var t = A.dot(e) + 1; return 1e-6 > t ? (t = 0, Math.abs(A.x) > Math.abs(A.z) ? (this._x = -A.y, this._y = A.x, this._z = 0, this._w = t) : (this._x = 0, this._y = -A.z, this._z = A.y, this._w = t)) : (this._x = A.y * e.z - A.z * e.y, this._y = A.z * e.x - A.x * e.z, this._z = A.x * e.y - A.y * e.x, this._w = t), this.normalize() }, angleTo: function (A) { return 2 * Math.acos(Math.abs(Xc.clamp(this.dot(A), -1, 1))) }, rotateTowards: function (A, e) { var t = this.angleTo(A); if (0 === t) return this; var i = Math.min(1, e / t); return this.slerp(A, i), this }, inverse: function () { return this.conjugate() }, conjugate: function () { return this._x *= -1, this._y *= -1, this._z *= -1, this._onChangeCallback(), this }, dot: function (A) { return this._x * A._x + this._y * A._y + this._z * A._z + this._w * A._w }, lengthSq: function () { return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w }, length: function () { return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w) }, normalize: function () { var A = this.length(); return 0 === A ? (this._x = 0, this._y = 0, this._z = 0, this._w = 1) : (this._x = this._x * (A = 1 / A), this._y = this._y * A, this._z = this._z * A, this._w = this._w * A), this._onChangeCallback(), this }, multiply: function (A, e) { return void 0 !== e ? (console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), this.multiplyQuaternions(A, e)) : this.multiplyQuaternions(this, A) }, premultiply: function (A) { return this.multiplyQuaternions(A, this) }, multiplyQuaternions: function (A, e) { var t = A._x, i = A._y, o = A._z, n = A._w, r = e._x, a = e._y, s = e._z, l = e._w; return this._x = t * l + n * r + i * s - o * a, this._y = i * l + n * a + o * r - t * s, this._z = o * l + n * s + t * a - i * r, this._w = n * l - t * r - i * a - o * s, this._onChangeCallback(), this }, slerp: function (A, e) { if (0 === e) return this; if (1 === e) return this.copy(A); var t = this._x, i = this._y, o = this._z, n = this._w, r = n * A._w + t * A._x + i * A._y + o * A._z; if (0 > r ? (this._w = -A._w, this._x = -A._x, this._y = -A._y, this._z = -A._z, r = -r) : this.copy(A), r >= 1) return this._w = n, this._x = t, this._y = i, this._z = o, this; var a = 1 - r * r; if (Number.EPSILON >= a) { var s = 1 - e; return this._w = s * n + e * this._w, this._x = s * t + e * this._x, this._y = s * i + e * this._y, this._z = s * o + e * this._z, this.normalize(), this._onChangeCallback(), this } var l = Math.sqrt(a), c = Math.atan2(l, r), h = Math.sin((1 - e) * c) / l, d = Math.sin(e * c) / l; return this._w = n * h + this._w * d, this._x = t * h + this._x * d, this._y = i * h + this._y * d, this._z = o * h + this._z * d, this._onChangeCallback(), this }, equals: function (A) { return A._x === this._x && A._y === this._y && A._z === this._z && A._w === this._w }, fromArray: function (A, e) { return void 0 === e && (e = 0), this._x = A[e], this._y = A[e + 1], this._z = A[e + 2], this._w = A[e + 3], this._onChangeCallback(), this }, toArray: function (A, e) { return void 0 === A && (A = []), void 0 === e && (e = 0), A[e] = this._x, A[e + 1] = this._y, A[e + 2] = this._z, A[e + 3] = this._w, A }, _onChange: function (A) { return this._onChangeCallback = A, this }, _onChangeCallback: function () {} }), Object.assign($c.prototype, { isVector3: !0, set: function (A, e, t) { return this.x = A, this.y = e, this.z = t, this }, setScalar: function (A) { return this.x = A, this.y = A, this.z = A, this }, setX: function (A) { return this.x = A, this }, setY: function (A) { return this.y = A, this }, setZ: function (A) { return this.z = A, this }, setComponent: function (A, e) { switch (A) { case 0: this.x = e; break; case 1: this.y = e; break; case 2: this.z = e; break; default: throw new Error("index is out of range: " + A) } return this }, getComponent: function (A) { switch (A) { case 0: return this.x; case 1: return this.y; case 2: return this.z; default: throw new Error("index is out of range: " + A) } }, clone: function () { return new this.constructor(this.x, this.y, this.z) }, copy: function (A) { return this.x = A.x, this.y = A.y, this.z = A.z, this }, add: function (A, e) { return void 0 !== e ? (console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(A, e)) : (this.x += A.x, this.y += A.y, this.z += A.z, this) }, addScalar: function (A) { return this.x += A, this.y += A, this.z += A, this }, addVectors: function (A, e) { return this.x = A.x + e.x, this.y = A.y + e.y, this.z = A.z + e.z, this }, addScaledVector: function (A, e) { return this.x += A.x * e, this.y += A.y * e, this.z += A.z * e, this }, sub: function (A, e) { return void 0 !== e ? (console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(A, e)) : (this.x -= A.x, this.y -= A.y, this.z -= A.z, this) }, subScalar: function (A) { return this.x -= A, this.y -= A, this.z -= A, this }, subVectors: function (A, e) { return this.x = A.x - e.x, this.y = A.y - e.y, this.z = A.z - e.z, this }, multiply: function (A, e) { return void 0 !== e ? (console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), this.multiplyVectors(A, e)) : (this.x *= A.x, this.y *= A.y, this.z *= A.z, this) }, multiplyScalar: function (A) { return this.x *= A, this.y *= A, this.z *= A, this }, multiplyVectors: function (A, e) { return this.x = A.x * e.x, this.y = A.y * e.y, this.z = A.z * e.z, this }, applyEuler: (Mc = new _c, function (A) { return A && A.isEuler || console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."), this.applyQuaternion(Mc.setFromEuler(A)) } ), applyAxisAngle: function () { var A = new _c; return function (e, t) { return this.applyQuaternion(A.setFromAxisAngle(e, t)) } }(), applyMatrix3: function (A) { var e = this.x, t = this.y, i = this.z, o = A.elements; return this.x = o[0] * e + o[3] * t + o[6] * i, this.y = o[1] * e + o[4] * t + o[7] * i, this.z = o[2] * e + o[5] * t + o[8] * i, this }, applyMatrix4: function (A) { var e = this.x, t = this.y, i = this.z, o = A.elements, n = 1 / (o[3] * e + o[7] * t + o[11] * i + o[15]); return this.x = (o[0] * e + o[4] * t + o[8] * i + o[12]) * n, this.y = (o[1] * e + o[5] * t + o[9] * i + o[13]) * n, this.z = (o[2] * e + o[6] * t + o[10] * i + o[14]) * n, this }, applyQuaternion: function (A) { var e = this.x, t = this.y, i = this.z, o = A.x, n = A.y, r = A.z, a = A.w, s = a * e + n * i - r * t, l = a * t + r * e - o * i, c = a * i + o * t - n * e, h = -o * e - n * t - r * i; return this.x = s * a + h * -o + l * -r - c * -n, this.y = l * a + h * -n + c * -o - s * -r, this.z = c * a + h * -r + s * -n - l * -o, this }, project: function (A) { return this.applyMatrix4(A.matrixWorldInverse).applyMatrix4(A.projectionMatrix) }, unproject: function (A) { return this.applyMatrix4(A.projectionMatrixInverse).applyMatrix4(A.matrixWorld) }, transformDirection: function (A) { var e = this.x, t = this.y, i = this.z, o = A.elements; return this.x = o[0] * e + o[4] * t + o[8] * i, this.y = o[1] * e + o[5] * t + o[9] * i, this.z = o[2] * e + o[6] * t + o[10] * i, this.normalize() }, divide: function (A) { return this.x /= A.x, this.y /= A.y, this.z /= A.z, this }, divideScalar: function (A) { return this.multiplyScalar(1 / A) }, min: function (A) { return this.x = Math.min(this.x, A.x), this.y = Math.min(this.y, A.y), this.z = Math.min(this.z, A.z), this }, max: function (A) { return this.x = Math.max(this.x, A.x), this.y = Math.max(this.y, A.y), this.z = Math.max(this.z, A.z), this }, clamp: function (A, e) { return this.x = Math.max(A.x, Math.min(e.x, this.x)), this.y = Math.max(A.y, Math.min(e.y, this.y)), this.z = Math.max(A.z, Math.min(e.z, this.z)), this }, clampScalar: function (A, e) { return this.x = Math.max(A, Math.min(e, this.x)), this.y = Math.max(A, Math.min(e, this.y)), this.z = Math.max(A, Math.min(e, this.z)), this }, clampLength: function (A, e) { var t = this.length(); return this.divideScalar(t || 1).multiplyScalar(Math.max(A, Math.min(e, t))) }, floor: function () { return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this }, ceil: function () { return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this }, round: function () { return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this }, roundToZero: function () { return this.x = 0 > this.x ? Math.ceil(this.x) : Math.floor(this.x), this.y = 0 > this.y ? Math.ceil(this.y) : Math.floor(this.y), this.z = 0 > this.z ? Math.ceil(this.z) : Math.floor(this.z), this }, negate: function () { return this.x = -this.x, this.y = -this.y, this.z = -this.z, this }, dot: function (A) { return this.x * A.x + this.y * A.y + this.z * A.z }, lengthSq: function () { return this.x * this.x + this.y * this.y + this.z * this.z }, length: function () { return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) }, manhattanLength: function () { return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) }, normalize: function () { return this.divideScalar(this.length() || 1) }, setLength: function (A) { return this.normalize().multiplyScalar(A) }, lerp: function (A, e) { return this.x += (A.x - this.x) * e, this.y += (A.y - this.y) * e, this.z += (A.z - this.z) * e, this }, lerpVectors: function (A, e, t) { return this.subVectors(e, A).multiplyScalar(t).add(A) }, cross: function (A, e) { return void 0 !== e ? (console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."), this.crossVectors(A, e)) : this.crossVectors(this, A) }, crossVectors: function (A, e) { var t = A.x, i = A.y, o = A.z, n = e.x, r = e.y, a = e.z; return this.x = i * a - o * r, this.y = o * n - t * a, this.z = t * r - i * n, this }, projectOnVector: function (A) { var e = A.dot(this) / A.lengthSq(); return this.copy(A).multiplyScalar(e) }, projectOnPlane: (wc = new $c, function (A) { return wc.copy(this).projectOnVector(A), this.sub(wc) } ), reflect: function () { var A = new $c; return function (e) { return this.sub(A.copy(e).multiplyScalar(2 * this.dot(e))) } }(), angleTo: function (A) { var e = this.dot(A) / Math.sqrt(this.lengthSq() * A.lengthSq()); return Math.acos(Xc.clamp(e, -1, 1)) }, distanceTo: function (A) { return Math.sqrt(this.distanceToSquared(A)) }, distanceToSquared: function (A) { var e = this.x - A.x, t = this.y - A.y, i = this.z - A.z; return e * e + t * t + i * i }, manhattanDistanceTo: function (A) { return Math.abs(this.x - A.x) + Math.abs(this.y - A.y) + Math.abs(this.z - A.z) }, setFromSpherical: function (A) { return this.setFromSphericalCoords(A.radius, A.phi, A.theta) }, setFromSphericalCoords: function (A, e, t) { var i = Math.sin(e) * A; return this.x = i * Math.sin(t), this.y = Math.cos(e) * A, this.z = i * Math.cos(t), this }, setFromCylindrical: function (A) { return this.setFromCylindricalCoords(A.radius, A.theta, A.y) }, setFromCylindricalCoords: function (A, e, t) { return this.x = A * Math.sin(e), this.y = t, this.z = A * Math.cos(e), this }, setFromMatrixPosition: function (A) { var e = A.elements; return this.x = e[12], this.y = e[13], this.z = e[14], this }, setFromMatrixScale: function (A) { var e = this.setFromMatrixColumn(A, 0).length(), t = this.setFromMatrixColumn(A, 1).length(), i = this.setFromMatrixColumn(A, 2).length(); return this.x = e, this.y = t, this.z = i, this }, setFromMatrixColumn: function (A, e) { return this.fromArray(A.elements, 4 * e) }, equals: function (A) { return A.x === this.x && A.y === this.y && A.z === this.z }, fromArray: function (A, e) { return void 0 === e && (e = 0), this.x = A[e], this.y = A[e + 1], this.z = A[e + 2], this }, toArray: function (A, e) { return void 0 === A && (A = []), void 0 === e && (e = 0), A[e] = this.x, A[e + 1] = this.y, A[e + 2] = this.z, A }, fromBufferAttribute: function (A, e, t) { return void 0 !== t && console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."), this.x = A.getX(e), this.y = A.getY(e), this.z = A.getZ(e), this } }); var Ah = [new $c, new $c, new $c, new $c, new $c, new $c, new $c, new $c], eh = new $c, th = new $c, ih = new $c, oh = new $c, nh = new $c, rh = new $c, ah = new $c, sh = new $c, lh = new $c, ch = new $c, hh = new $c; function dh(A, e, t, i, o) { var n, r = 0; for (r = 0, n = A.length - 3; n >= r; r += 3) { hh.fromArray(A, r); var a = o.x * Math.abs(hh.x) + o.y * Math.abs(hh.y) + o.z * Math.abs(hh.z), s = e.dot(hh), l = t.dot(hh), c = i.dot(hh); if (Math.max(-Math.max(s, l, c), Math.min(s, l, c)) > a) return !1 } return !0 } function ph(A, e) { this.min = void 0 !== A ? A : new $c(1 / 0, 1 / 0, 1 / 0), this.max = void 0 !== e ? e : new $c(-1 / 0, -1 / 0, -1 / 0) } var gh = new ph; Object.assign(ph.prototype, { isBox3: !0, set: function (A, e) { return this.min.copy(A), this.max.copy(e), this }, setFromArray: function (A) { for (var e = 1 / 0, t = 1 / 0, i = 1 / 0, o = -1 / 0, n = -1 / 0, r = -1 / 0, a = 0, s = A.length; s > a; a += 3) { var l = A[a], c = A[a + 1], h = A[a + 2]; e > l && (e = l), t > c && (t = c), i > h && (i = h), l > o && (o = l), c > n && (n = c), h > r && (r = h) } return this.min.set(e, t, i), this.max.set(o, n, r), this }, toArray: function (A) { return void 0 === A && (A = []), this.min.toArray(A), this.max.toArray(A, 3), A }, setFromBufferAttribute: function (A) { for (var e = 1 / 0, t = 1 / 0, i = 1 / 0, o = -1 / 0, n = -1 / 0, r = -1 / 0, a = 0, s = A.count; s > a; a += 1) { var l = A.getX(a), c = A.getY(a), h = A.getZ(a); e > l && (e = l), t > c && (t = c), i > h && (i = h), l > o && (o = l), c > n && (n = c), h > r && (r = h) } return this.min.set(e, t, i), this.max.set(o, n, r), this }, setFromPoints: function (A) { this.makeEmpty(); for (var e = 0, t = A.length; t > e; e += 1) this.expandByPoint(A[e]); return this }, setFromCenterAndSize: function (A, e) { var t = eh.copy(e).multiplyScalar(.5); return this.min.copy(A).sub(t), this.max.copy(A).add(t), this }, setFromObject: function (A) { return this.makeEmpty(), this.expandByObject(A) }, clone: function () { return (new this.constructor).copy(this) }, copy: function (A) { return this.min.copy(A.min), this.max.copy(A.max), this }, 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 }, isEmpty: function () { return this.min.x > this.max.x || this.min.y > this.max.y || this.min.z > this.max.z }, getCenter: function (A) { return void 0 === A && (console.warn("THREE.Box3: .getCenter() target is now required"), A = new $c), this.isEmpty() ? A.set(0, 0, 0) : A.addVectors(this.min, this.max).multiplyScalar(.5) }, getSize: function (A) { return void 0 === A && (console.warn("THREE.Box3: .getSize() target is now required"), A = new $c), this.isEmpty() ? A.set(0, 0, 0) : A.subVectors(this.max, this.min) }, expandByPoint: function (A) { return this.min.min(A), this.max.max(A), this }, expandByVector: function (A) { return this.min.sub(A), this.max.add(A), this }, expandByScalar: function (A) { return this.min.addScalar(-A), this.max.addScalar(A), this }, expandByObject: function (A) { A.updateWorldMatrix(!1, !1); var e = A.geometry; void 0 !== e && (null === e.boundingBox && e.computeBoundingBox(), gh.copy(e.boundingBox), gh.applyMatrix4(A.matrixWorld), this.union(gh)); for (var t = A.children, i = 0, o = t.length; o > i; i += 1) this.expandByObject(t[i]); return this }, containsPoint: function (A) { return !(this.min.x > A.x || A.x > this.max.x || this.min.y > A.y || A.y > this.max.y || this.min.z > A.z || A.z > this.max.z) }, containsBox: function (A) { return !(this.min.x > A.min.x || A.max.x > this.max.x || this.min.y > A.min.y || A.max.y > this.max.y || this.min.z > A.min.z || A.max.z > this.max.z) }, getParameter: function (A, e) { return void 0 === e && (console.warn("THREE.Box3: .getParameter() target is now required"), e = new $c), e.set((A.x - this.min.x) / (this.max.x - this.min.x), (A.y - this.min.y) / (this.max.y - this.min.y), (A.z - this.min.z) / (this.max.z - this.min.z)) }, intersectsBox: function (A) { return !(this.min.x > A.max.x || A.min.x > this.max.x || this.min.y > A.max.y || A.min.y > this.max.y || this.min.z > A.max.z || A.min.z > this.max.z) }, intersectsSphere: function (A) { return this.clampPoint(A.center, eh), eh.distanceToSquared(A.center) <= A.radius * A.radius }, intersectsPlane: function (A) { var e = null, t = null; return A.normal.x > 0 ? (e = A.normal.x * this.min.x, t = A.normal.x * this.max.x) : (e = A.normal.x * this.max.x, t = A.normal.x * this.min.x), A.normal.y > 0 ? (e += A.normal.y * this.min.y, t += A.normal.y * this.max.y) : (e += A.normal.y * this.max.y, t += A.normal.y * this.min.y), A.normal.z > 0 ? (e += A.normal.z * this.min.z, t += A.normal.z * this.max.z) : (e += A.normal.z * this.max.z, t += A.normal.z * this.min.z), -A.constant >= e && t >= -A.constant }, intersectsTriangle: function (A) { if (this.isEmpty()) return !1; this.getCenter(sh), lh.subVectors(this.max, sh), th.subVectors(A.a, sh), ih.subVectors(A.b, sh), oh.subVectors(A.c, sh), nh.subVectors(ih, th), rh.subVectors(oh, ih), ah.subVectors(th, oh); var e = [0, -nh.z, nh.y, 0, -rh.z, rh.y, 0, -ah.z, ah.y, nh.z, 0, -nh.x, rh.z, 0, -rh.x, ah.z, 0, -ah.x, -nh.y, nh.x, 0, -rh.y, rh.x, 0, -ah.y, ah.x, 0]; return !!dh(e, th, ih, oh, lh) && (!!dh(e = [1, 0, 0, 0, 1, 0, 0, 0, 1], th, ih, oh, lh) && (ch.crossVectors(nh, rh), dh(e = [ch.x, ch.y, ch.z], th, ih, oh, lh))) }, clampPoint: function (A, e) { return void 0 === e && (console.warn("THREE.Box3: .clampPoint() target is now required"), e = new $c), e.copy(A).clamp(this.min, this.max) }, distanceToPoint: function (A) { return eh.copy(A).clamp(this.min, this.max).sub(A).length() }, getBoundingSphere: function (A) { return void 0 === A && console.error("THREE.Box3: .getBoundingSphere() target is now required"), this.getCenter(A.center), A.radius = .5 * this.getSize(eh).length(), A }, intersect: function (A) { return this.min.max(A.min), this.max.min(A.max), this.isEmpty() && this.makeEmpty(), this }, union: function (A) { return this.min.min(A.min), this.max.max(A.max), this }, applyMatrix4: function (A) { return this.isEmpty() || (Ah[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(A), Ah[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(A), Ah[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(A), Ah[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(A), Ah[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(A), Ah[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(A), Ah[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(A), Ah[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(A), this.setFromPoints(Ah)), this }, translate: function (A) { return this.min.add(A), this.max.add(A), this }, equals: function (A) { return A.min.equals(this.min) && A.max.equals(this.max) } }); var uh = { MinusEpsilon: -1e-6, byteArr2Int: function (A) { return (255 & A[0]) << 24 | (255 & A[1]) << 16 | (255 & A[2]) << 8 | (255 & A[3]) << 0 }, int2ByteArr: function (A) { var e = []; return e[0] = A >> 24, e[1] = A >> 16, e[2] = A >> 8, e[3] = A >> 0, e }, isPlainObject: function (A) { var e, t; return !(!A || "[object Object]" !== Object.prototype.toString.call(A)) && (!(e = Object.getPrototypeOf(A)) || "function" == typeof (t = Object.hasOwnProperty.call(e, "constructor") && e.constructor) && Object.hasOwnProperty.toString.call(t) === Object.hasOwnProperty.toString.call(Object)) }, extend: function () { var A = null, e = null, t = null, i = null, o = null, n = null, r = arguments[0] || {}, a = 1, s = arguments.length, l = !1; for ("boolean" == typeof r && (l = r, r = arguments[a] || {}, a += 1), "object" !== lc(r) && "function" === !lc(r) && (r = {}), a === s && (r = this, a -= 1); s > a; a += 1) if (null !== (A = arguments[a]) && void 0 !== (A = arguments[a])) for (e in A) t = r[e], r !== (i = A[e]) && (l && i && (uh.isPlainObject(i) || (o = Array.isArray(i))) ? (o ? (o = !1, n = t && Array.isArray(t) ? t : []) : n = t && uh.isPlainObject(t) ? t : {}, r[e] = uh.extend(l, n, i)) : null != i && (r[e] = i)); return r }, supportWorker: function () { return "undefined" != typeof Worker || (console.log("Web Worker is not supported."), !1) }, box3FromArray: function (A, e) { if (Array.isArray(A)) { var t = e || new ph; return t.min.fromArray(A, 0), t.max.fromArray(A, 3), t } return null }, box3FromArrayRange: function (A, e, t) { for (var i = new ph, o = Number(1 / 0), n = Number(1 / 0), r = Number(1 / 0), a = -1 / 0, s = -1 / 0, l = -1 / 0, c = e, h = t; h > c; c += 3) { var d = A[c], p = A[c + 1], g = A[c + 2]; o > d && (o = d), n > p && (n = p), r > g && (r = g), d > a && (a = d), p > s && (s = p), g > l && (l = g) } return i.min.set(o, n, r), i.max.set(a, s, l), i }, box3FromObject: function (A, e, t) { if (void 0 !== A && void 0 !== e && void 0 !== A.x && void 0 !== A.y && void 0 !== A.z && void 0 !== e.x && void 0 !== e.y && void 0 !== e.z) { var i = t || new ph; return i.min.set(A.x, A.y, A.z), i.max.set(e.x, e.y, e.z), i } return null }, computeBBox: function (A) { for (var e = new ph, t = new $c, i = 0, o = A.length; o > i; i += 1) t.fromArray(A[i], 0), e.expandByPoint(t); return e }, mergeBBox: function (A) { if (1 > A.length) return null; for (var e = new ph, t = new $c, i = new $c, o = new ph, n = 0, r = A.length; r > n; n += 1) t.set(A[n].max.x, A[n].max.y, A[n].max.z), i.set(A[n].min.x, A[n].min.y, A[n].min.z), o.set(i, t), e.union(o); return e }, parseTransform: function (A, e, t) { var i = !1; if (e.rotation && (A.rotation.fromArray(e.rotation), i = !0), e.position && (A.position.fromArray(e.position), i = !0), e.scale && (A.scale.fromArray(e.scale), i = !0), e.quaternion && (A.quaternion.fromArray(e.quaternion), i = !0), i && A.updateMatrix(), e.matrix && A.matrix.fromArray(e.matrix), t) { var o = A.matrix.clone(); o.multiplyMatrices(t, A.matrix), A.matrix = o } A.matrixAutoUpdate = !1, void 0 !== A.boundingBox && (A.boundingBox = uh.box3FromArray(e.bbox)) }, isEmptyObject: function (A) { if (!A) return !0; if (A.length > 0) return !1; if (0 === A.length) return !0; for (var e in A) if (A.hasOwnProperty(e)) return !1; return !0 }, isEmptyObjectSimple: function (A) { for (var e in A) return !1; return !0 }, isOwnEmptyObject: function (A) { for (var e in A) if (A.hasOwnProperty(e)) return !1; return !0 }, hexStrToRgb: function (A) { var e = A.replace("#", ""), t = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e); return t ? { r: parseInt(t[1], 16) / 255, g: parseInt(t[2], 16) / 255, b: parseInt(t[3], 16) / 255 } : null }, hexToRgb: function (A) { var e = {}; return e.r = (A >> 16 & 255) / 255, e.g = (A >> 8 & 255) / 255, e.b = (255 & A) / 255, e }, getMin: function (A) { for (var e = A.length, t = 1 / 0; (e -= 1) >= 0;) t = t > A[e] ? A[e] : t; return t }, getMax: function (A) { for (var e = A.length, t = -1 / 0; (e -= 1) >= 0;) t = A[e] > t ? A[e] : t; return t }, findRange: function (A, e) { if (e < Math.min.apply(null, A)) return 0; if (e > Math.max.apply(null, A)) return A.length - 1; for (var t = 0, i = 0, o = A.length; o > i; i += 1) if (A[i] > e) { t = i - 1; break } return t }, stringToByte: function (A) { for (var e = [], t = A.length, i = null, o = 0; t > o; o += 1) 65536 > (i = A.charCodeAt(o)) || i > 1114111 ? 2048 > i || i > 65535 ? 128 > i || i > 2047 ? e.push(255 & i) : (e.push(i >> 6 & 31 | 192), e.push(63 & i | 128)) : (e.push(i >> 12 & 15 | 224), e.push(i >> 6 & 63 | 128), e.push(63 & i | 128)) : (e.push(i >> 18 & 7 | 240), e.push(i >> 12 & 63 | 128), e.push(i >> 6 & 63 | 128), e.push(63 & i | 128)); return e }, byteToString: function (A) { if ("string" == typeof A) return A; for (var e = "", t = A, i = 0; t.length > i; i += 1) { var o = t[i].toString(2), n = o.match(/^1+?(?=0)/); if (n && 8 === o.length) { for (var r = n[0].length, a = t[i].toString(2).slice(7 - r), s = 1; r > s; s += 1) a += t[s + i].toString(2).slice(2); e += String.fromCharCode(parseInt(a, 2)), i += r - 1 } else e += String.fromCharCode(t[i]) } return e }, strToBinary: function (A) { for (var e = [], t = A.split(""), i = 0; t.length > i; i += 1) { 0 !== i && e.push(" "); var o = t[i].charCodeAt().toString(2); e.push(o) } return e.join("") }, binaryToStr: function (A) { for (var e = [], t = A.split(" "), i = 0; t.length > i; i += 1) { var o = parseInt(t[i], 2), n = String.fromCharCode(o); e.push(n) } return e.join("") }, isMirror: function (A) { var e = new $c(A[0], A[1], A[2]), t = new $c(A[4], A[5], A[6]), i = new $c(A[8], A[9], A[10]); return 0 > (new $c).crossVectors(e, t).dot(i) }, decodeUTF8: function (A) { for (var e = "", t = 0; A.length > t; t += 1) e += String.fromCharCode(A[t]); return decodeURIComponent(escape(e)) }, unique: function (A) { for (var e, t = [], i = {}, o = 0; null !== (e = A[o]) && void 0 !== (e = A[o]); o += 1) i[e] || (t.push(e), i[e] = !0); return i = null, t }, getValue: function (A, e) { var t = e.split("."), i = A; return t.map((function (A, e) { i = i[A] })), i }, sortByName: function (A, e, t) { t = t || "asc"; var i = !1; e ? e.indexOf(".") > -1 && (i = !0) : e = "name", A = A.sort((function (A, o) { if (i) { var n = uh.getValue(A, e), r = uh.getValue(o, e); return "asc" === t ? n.localeCompare(r) : r.localeCompare(n) } return "asc" === t ? A[e].localeCompare(o[e]) : o[e].localeCompare(A[e]) })); var o = [], n = [], r = [], a = []; return A.map((function (A, t) { var s = null; s = i ? uh.getValue(A, e) : A[e], /^[a-zA-Z]*$/.test(s.slice(0, 1)) ? o.push(A) : /^[\u4e00-\u9fa5]*$/.test(s.slice(0, 1)) ? n.push(A) : /^\d+(\.\d+)?$/.test(s.slice(0, 1)) ? r.push(A) : a.push(A) })), a.concat(r, o, n) }, PointToLineDistance: function (A, e, t, i, o, n) { var r = void 0, a = void 0, s = void 0, l = void 0, c = Math.sqrt((t - A) * (t - A) + (i - e) * (i - e)); if (0 === c) return [0, { x: t, y: i }]; var h = Math.sqrt((o - A) * (o - A) + (n - e) * (n - e)); if (0 === h) return [0, { x: o, y: n }]; var d = Math.sqrt((t - o) * (t - o) + (i - n) * (i - n)); if (0 === d) return [c, { x: t, y: i }]; if (h > c) { if (i === n ? r = o > t ? 0 : Math.PI : ((l = (o - t) / d) - 1 > 1e-5 && (l = 1), r = Math.acos(l), i > n && (r = 2 * Math.PI - r)), (l = (A - t) / c) - 1 > 1e-5 && (l = 1), a = Math.acos(l), i > e && (a = 2 * Math.PI - a), 0 > (s = a - r) && (s = -s), s > Math.PI && (s = 2 * Math.PI - s), s > Math.PI / 2) return [c, { x: t, y: i }]; if (t === o) return [h * Math.sin(s), { x: t, y: e }]; if (i === n) return [h * Math.sin(s), { x: A, y: i }]; var p, g, u = (n - i) / o - t, f = -1 / u, m = e - A * f; return g = f * (p = (n - o * u - m) / (f - u)) + m, [c * Math.sin(s), { x: p, y: g }] } if (i === n ? r = o > t ? Math.PI : 0 : ((l = (t - o) / d) - 1 > 1e-5 && (l = 1), r = Math.acos(l), n > i && (r = 2 * Math.PI - r)), (l = (A - o) / h) - 1 > 1e-5 && (l = 1), a = Math.acos(l), n > e && (a = 2 * Math.PI - a), 0 > (s = a - r) && (s = -s), s > Math.PI && (s = 2 * Math.PI - s), s > Math.PI / 2) return [h, { x: o, y: n }]; if (t === o) return [h * Math.sin(s), { x: t, y: e }]; if (i === n) return [h * Math.sin(s), { x: A, y: i }]; var C, y, v = (n - i) / o - t, I = -1 / v, E = e - A * I; return y = I * (C = (n - o * v - E) / (I - v)) + E, [h * Math.sin(s), { x: C, y: y }] }, freezeObject: function (A) { return Object.freeze ? Object.freeze(A) : A }, getEncodedId: function (A) { return A }, arrayToMap: function (A, e) { e = e || {}; for (var t = 0, i = A.length; i > t; t += 1) e[A[t]] = !0; return e }, getDifferentialIdxs: function (A, e) { var t = null, i = {}, o = {}, n = {}; if (e) if (this.isEmptyObject(A)) o = e; else { for (t in e) A[t] && (n[t] = !0); if (this.isEmptyObject(n)) i = A, o = e; else { for (t in e) n[t] || (o[t] = !0); for (t in A) n[t] || (i[t] = !0) } } else this.isEmptyObject(A) || (i = A); return { objCurrUsedIdxs: A, addIdxs: Object.keys(i), removeIdxs: Object.keys(o) } }, getCombinedKeyString: function (A, e) { return A.join(e = e || "&") }, splitCombinedKeyString: function (A, e) { return A.split(e = e || "&") }, getModelKeyFromComponentKey: function (A) { return A.split("_")[0] }, isGroupObject: function (A) { return !(!A.children || !A.children.length) }, isMeshObject: function (A) { return !!(A.isMesh || A.isLine || A.isPoints) }, asyncProcess: function (A, e, t, i, o) { requestAnimationFrame(function n(r) { var a = r; return function () { var r = null, s = null; for (s = a + t > e ? e : a + t, r = a; s > r; r += 1) { i && i(A, r), r === s - 1 && (s !== e ? requestAnimationFrame(n(r + 1)) : o && o(A)) } } }(0)) }, hasSimilarProperty: function (A, e) { if (!(A instanceof Object && e instanceof Object)) return !1; for (var t in A) if (A.hasOwnProperty(t) && !e.hasOwnProperty(t)) return !1; return !0 }, equalsWithEpsilon: function (A, e) { var t = Math.abs(A.x - e.x), i = Math.abs(A.y - e.y), o = Math.abs(A.z - e.z); return 1e-7 >= t && 1e-7 >= i && 1e-7 >= o }, arrayMax: function (A) { if (0 === A.length) return -1 / 0; for (var e = A[0], t = 1, i = A.length; i > t; t += 1) A[t] > e && (e = A[t]); return e }, arrayMin: function (A) { if (0 === A.length) return 1 / 0; for (var e = A[0], t = 1, i = A.length; i > t; t += 1) e > A[t] && (e = A[t]); return e }, ab2str: function (A) { return (new TextDecoder).decode(new Uint8Array(A)) }, str2ab: function (A) { return (new TextEncoder).encode(A).buffer } }; uh.createUUID = function () { for (var A = [], e = 0; 36 > e; e += 1) A[e] = "0123456789abcdef".substr(Math.floor(16 * Math.random()), 1); return A[14] = "4", A[19] = "0123456789abcdef".substr(3 & A[19] | 8, 1), A[8] = A[13] = A[18] = A[23] = "-", A.join("") }; var fh = { "zh-cn": { YourGraphicsCardDoesNotSeemToSupportWebGL: "您的显卡似乎不支持WebGL", YourBrowserDoesNotSeemToSupportWebGL: "您的浏览器似乎不支持WebGL", FindOutHowToGetItHere: "您可以在这里查看相关信息", SectionBoxLockHint: "请在使用此方法之前调用enableSectionBox。", APIAxisLockHint: "The API supports AxisOption.Z only for now." }, en: { YourGraphicsCardDoesNotSeemToSupportWebGL: "Your graphics card does not seem to support WebGL", YourBrowserDoesNotSeemToSupportWebGL: "Your browser does not seem to support WebGL", FindOutHowToGetItHere: "Find out how to get it here", SectionBoxLockHint: "Please call enableSectionBox before using this method.", APIAxisLockHint: "The API supports AxisOption.Z only for now." } }, mh = { getAndroidVersion: function (A) { var e = (A = A || navigator.userAgent).match(/Android\s([0-9.]*)/); return !!e && e[1] }, isTouchDevice: function () { return "undefined" != typeof window && "ontouchstart" in window }, isBrowser: function () { return "undefined" != typeof navigator }, isIE11: function () { return mh.isBrowser() && Boolean(navigator.userAgent.match(/Edge|Trident\/7\./)) }, isIOSDevice: function () { return !!mh.isBrowser() && /ip(ad|hone|od)/.test(navigator.userAgent.toLowerCase()) }, isAndroidDevice: function () { return !!mh.isBrowser() && -1 !== navigator.userAgent.toLowerCase().indexOf("android") }, isMobileDevice: function () { return !!mh.isBrowser() && (mh.isIOSDevice() || mh.isAndroidDevice()) }, isSafari: function () { if (!mh.isBrowser()) return !1; var A = navigator.userAgent.toLowerCase(); return -1 !== A.indexOf("safari") && -1 === A.indexOf("chrome") }, isFirefox: function () { return !!mh.isBrowser() && -1 !== navigator.userAgent.toLowerCase().indexOf("firefox") }, isChrome: function () { return !!mh.isBrowser() && -1 !== navigator.userAgent.toLowerCase().indexOf("chrome") }, isMac: function () { return !!mh.isBrowser() && -1 !== navigator.userAgent.toLowerCase().indexOf("mac os") }, isLinux: function () { return !!mh.isBrowser() && -1 !== navigator.userAgent.toLowerCase().indexOf("linux x86_64") }, isWindows: function () { if (!mh.isBrowser()) return !1; var A = navigator.userAgent.toLowerCase(); return -1 !== A.indexOf("win32") || -1 !== A.indexOf("windows") }, isWindowsPhone: function () { var A = navigator.userAgent.toLowerCase(); return /(?:Windows Phone)/.test(A) }, isSymbian: function () { var A = navigator.userAgent.toLowerCase(); return /(?:SymbianOS)/.test(A) || mh.isWindowsPhone() }, isTablet: function () { var A = navigator.userAgent.toLowerCase(); return /(?:iPad|PlayBook)/.test(A) || mh.isAndroidDevice() && !/(?:Mobile)/.test(A) || mh.isFirefox() && /(?:Tablet)/.test(A) }, isPc: function () { return !mh.isMobileDevice() && !mh.isTablet() && !mh.isSymbian() }, isOpera: function () { return navigator.userAgent.indexOf("Opera") > -1 } }; mh.isSafari(); mh.detectWebGL = function () { if (window.WebGLRenderingContext) { for (var A = document.createElement("canvas"), e = ["webgl", "experimental-webgl"], t = !1, i = 0; e.length > i; i += 1) try { if ((t = A.getContext(e[i])) && "function" == typeof t.getParameter) return 1 } catch (A) {} return 0 } return -1 }, mh.detectWebGL2 = function () { if (window.WebGL2RenderingContext) { for (var A = document.createElement("canvas"), e = ["webgl2"], t = !1, i = 0; e.length > i; i += 1) try { if ((t = A.getContext(e[i])) && "function" == typeof t.getParameter) return 1 } catch (A) {} return 0 } return -1 }, mh.showWebGLMessage = function (A, e, t) { var i, o = null, n = null; o = void 0 !== (t = t || {}).parent ? t.parent : document.body, i = void 0 !== t.id ? t.id : "oldie", (n = mh.getWebGLErrorMessage(A, e)).id = i, o.appendChild(n) }, mh.language = function () { return (navigator.browserLanguage || navigator.language).toLowerCase() }, mh.getWebGLErrorMessage = function (A, e) { var t = document.createElement("div"); t.id = "webgl-error-message", t.style.fontSize = "16px", t.style.fontWeight = "normal", t.style.textAlign = "center", t.style.background = "#f4c8c8", t.style.color = "#000", t.style.padding = "1.5em", t.style.width = "400px", t.style.position = "absolute", t.style.left = document.body.clientWidth / 2 - 224 + "px"; var i = document.body.clientHeight / 2 - 45; return 0 > i && (i = 0), t.style.top = i + "px", e || (e = "zh-cn"), 0 === A ? t.innerHTML = [' ' + fh[e].YourGraphicsCardDoesNotSeemToSupportWebGL + ".
", ' ' + fh[e].FindOutHowToGetItHere + "."].join("\n") : -1 === A && (t.innerHTML = ['' + fh[e].YourBrowserDoesNotSeemToSupportWebGL + ".
", '' + fh[e].FindOutHowToGetItHere + "."].join("\n")), t }, mh.isSupportIndexedDB = function () { return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB }, mh.isSupportWorker = function () { return window.Worker }; var Ch = { DEBUG: 6, PERFORMANCE: 5, LOG: 4, INFO: 3, WARNING: 2, ERROR: 1, NONE: 0 }, yh = {}, vh = function (A) { yh[A] ? console.warn("Timer '" + A + "' already exists") : yh[A] = Date.now() }, Ih = function (A) { yh[A] ? (console.warn(A + ":", Date.now() - yh[A], "ms"), delete yh[A]) : console.warn("Timer '" + A + "' does not exist") }; function Eh() { this.level = -1, this.setLevel(Ch.LOG) } Eh.prototype.setLevel = function (A) { if (this.level !== A) { this.level = A; var e = function () {}, t = Ch, i = this; this.debug = t.DEBUG > A ? e : console.debug.bind(console), this.trace = t.DEBUG > A ? e : console.trace.bind(console), this.assert = t.DEBUG > A ? e : console.assert.bind(console), this.count = t.DEBUG > A ? e : console.count.bind(console), this.dir = t.DEBUG > A ? e : console.dir.bind(console), this.time = t.PERFORMANCE > A ? e : vh, this.timeEnd = t.PERFORMANCE > A ? e : Ih, this.log = t.LOG > A ? e : console.log.bind(console), this.info = t.INFO > A ? e : console.info.bind(console), this.warn = t.WARNING > A ? e : console.warn.bind(console), this.error = t.ERROR > A ? e : function () { if (i.callback) { var A = Array.prototype.slice.call(arguments).join(" "); i.callback({ category: "error", message: A }, { adp: !1 }) } console.error.apply(console, arguments) } } }; var Bh = new Eh, xh = { splitStr: function (A) { return A.trim().split(/\s+/g) }, getClientHeight: function () { return document.body.clientHeight && document.documentElement.clientHeight ? document.body.clientHeight < document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight : document.body.clientHeight > document.documentElement.clientHeight ? document.body.clientHeight : document.documentElement.clientHeight }, getClientWidth: function () { return document.body.clientWidth && document.documentElement.clientWidth ? document.body.clientWidth < document.documentElement.clientWidth ? document.body.clientWidth : document.documentElement.clientWidth : document.body.clientWidth > document.documentElement.clientWidth ? document.body.clientWidth : document.documentElement.clientWidth }, getDomOffsetToClient: function (A) { var e, t = null; if (A !== document) { var i = (e = A).getBoundingClientRect ? function (A) { var e = A.getBoundingClientRect(), t = document.body, i = document.documentElement, o = e.left - (i.clientLeft || t.clientLeft); return { top: Math.round(e.top - (i.clientTop || t.clientTop)), left: Math.round(o) } }(e) : function (A) { for (var e = 0, t = 0; A;) e += A.offsetTop, t += A.offsetLeft, A = A.offsetParent; var i = document.body, o = document.documentElement; return { top: e -= window.pageYOffset || o.scrollTop || i.scrollTop, left: t -= window.pageXOffset || o.scrollLeft || i.scrollLeft } }(e); t = { width: A.offsetWidth, height: A.offsetHeight, left: i.left, top: i.top } } else t = { width: window.innerWidth, height: window.innerHeight, left: 0, top: 0 }; return t }, setClassName: function (A, e) { var t = document.getElementById(A); t && (t.className = e) }, addClassName: function (A, e) { var t = null, i = null, o = null, n = null, r = null, a = document.getElementById(A); if (a && (i = a, e && "string" == typeof e && (t = e.split(/\s+/), 1 === i.nodeType))) if (i.className || 1 !== t.length) { for (o = " " + i.className + " ", n = 0, r = t.length; r > n; n += 1) 0 > o.indexOf(" " + t[n] + " ") && (o += t[0] + " "); i.className = String.trim(o) } else i.className = e }, removeClassName: function (A, e) { var t = null, i = null, o = null, n = null, r = null, a = document.getElementById(A); if (a && (o = a, e && "string" == typeof e && (t = (e || "").split(/\s+/), 1 === o.nodeType && o.className))) { for (i = (" " + o.className + " ").replace(0, " "), n = 0, r = t.length; r > n; n += 1) for (; i.indexOf(" " + t[n] + " ") >= 0;) i = i.replace(" " + t[n] + " ", " "); o.className = e ? String.trim(i) : "" } }, showOrHideElement: function (A, e) { var t = document.getElementById(A); t && (t.style.display = e ? "" : "none") }, getStyleString: function (A) { var e = []; for (var t in A) { var i = A[t]; e.push(t), e.push(":"), e.push(i), e.push("; ") } return e.join("") }, cloneStyle: function (A) { var e = {}; for (var t in A) e[t] = A[t]; return e }, removeStyleAttribute: function (A, e) { Array.isArray(e) || (e = [e]), e.forEach((function (e) { e in A && delete A[e] })) }, trimRight: function (A) { if (0 === A.length) return ""; for (var e = A.length - 1, t = e; t >= 0; t -= 1) if (" " !== A.charAt(t)) { e = t; break } return A.substr(0, e + 1) }, trimLeft: function (A) { if (0 === A.length) return ""; for (var e = 0, t = 0; A.length > t; t += 1) if (" " !== A.charAt(t)) { e = t; break } return A.substr(e) }, trim: function (A) { return A.replace(/(^\s*)|(\s*$)/g, "") }, matchesSelector: function (A, e) { if (A.matches) return A.matches(e); if (A.matchesSelector) return A.matchesSelector(e); if (A.webkitMatchesSelector) return A.webkitMatchesSelector(e); if (A.msMatchesSelector) return A.msMatchesSelector(e); if (A.mozMatchesSelector) return A.mozMatchesSelector(e); if (A.oMatchesSelector) return A.oMatchesSelector(e); if (A.querySelectorAll) { for (var t = (A.document || A.ownerDocument).querySelectorAll(e), i = 0; t[i] && void 0 !== t[i];) i += 1; return !!t[i] } return !1 }, toTranslate3d: function (A, e) { return "translate3d(" + A + "px," + e + "px,0)" }, setCursorStyle: function (A, e) { var t = null; switch (e) { case "n": case "s": t = "ns-resize"; break; case "w": case "e": t = "ew-resize"; break; case "ne": case "sw": t = "nesw-resize"; break; case "nw": case "se": t = "nwse-resize" } A.style.cursor = t }, css: function (A, e) { for (var t = A.getAttribute("style") || "", i = Object.keys(e), o = t.split(";"), n = [], r = 0, a = o.length; a > r; r += 1) { "" !== (s = o[r]) ? n.push(s.replace(/:.+/, "")): o.splice(r, 1) } for (r = 0, a = i.length; a > r; r += 1) { var s = i[r], l = -1; o.map((function (A, e) { return A.indexOf(s) > -1 && (l = e), null })), l > -1 ? o[l] = s + ":" + e[s] : o.push(s + ":" + e[s]) } var c = o.join(";"); A.setAttribute("style", c + ";") }, append: function (A, e) { if ("string" == typeof e) { var t = document.createElement("div"); t.innerHTML = e; for (var i = document.createDocumentFragment(); t.firstChild;) i.appendChild(t.firstChild); A.appendChild(i) } else A.appendChild(e) }, scrollTop: function (A, e) { var t = A.scrollTop; if (t > e) var i = setInterval((function () { var t = A.scrollTop, o = Math.floor(-t / 6); A.scrollTop = t = o + t, A.scrollTop > e || (A.scrollTop = A.scrollTop = e, clearTimeout(i)) }), 20); else if (0 === t) var o = setInterval((function () { var i = A.scrollTop, n = Math.floor(70); A.scrollTop = i = n + i, t > A.scrollTop && (A.scrollTop = e, clearTimeout(o)) }), 20); else if (e > t) var n = setInterval((function () { var i = A.scrollTop, o = Math.floor(i / 6); A.scrollTop = i = o + i, t > A.scrollTop && (A.scrollTop = e, clearTimeout(n)) }), 20); else if (e === t) return !1 }, closest: function (A, e) { if (!A) return null; for (var t = A.matches || A.webkitMatchesSelector || A.mozMatchesSelector || A.msMatchesSelector; A && !t.call(A, e);) A = A.parentElement; return A }, addEventListener: function (A, e, t) { if (A) if (A.length) for (var i = 0; A.length > i; i += 1) A[i].addEventListener(e, (function (A) { t && "function" == typeof t && t(A) })); else A.addEventListener(e, (function (A) { t && "function" == typeof t && t(A) })) }, remove: function (A) { if (A) if (A.removeNode = [], void 0 !== A.length) { for (var e = A.length, t = 0; e > t; t += 1) A.removeNode.push({ parent: A[t].parentNode, inner: A[t].outerHTML, next: A[t].nextSibling }); for (t = 0; e > t; t += 1) A[0].parentNode.removeChild(A[0]) } else A.removeNode.push({ parent: A.parentNode, inner: A.outerHTML, next: A.nextSibling }), A.parentNode.removeChild(A) }, getStyleValue: function (A, e) { var t = A.ownerDocument.defaultView; return t && t.opener || (t = window), A.currentStyle ? A.currentStyle[e] : t.getComputedStyle(A)[e] }, isShow: function (A) { return "none" !== this.getStyleValue(A, "display") }, getHeight: function (A) { if (null != A) { if (this.isShow(A)) { if (null != A.style.height && A.style.height.length > 0) return parseFloat(A.style.height); if (parseFloat(this.getStyleValue(A, "height")) > 0) return parseFloat(this.getStyleValue(A, "height")); if (A.offsetHeight > 0) { var e = this.getStyleValue(A, "borderTopWidth"), t = this.getStyleValue(A, "borderBottomWidth"), i = this.getStyleValue(A, "paddingTop"), o = this.getStyleValue(A, "paddingBottom"), n = parseFloat(A.offsetHeight) - parseFloat(e) - parseFloat(t) - parseFloat(i) - parseFloat(o); return parseFloat(n) } return 0 } var r = A.getAttribute("style") || ""; A.setAttribute("style", r + "visibility:hidden;display:block !important;"); var a = this.getHeight(A); return A.setAttribute("style", r), Math.ceil(a) } }, getWidth: function (A) { if (null != A) { if (this.isShow(A)) { if (null != A.style.width && A.style.width.length > 0) return parseFloat(A.style.width); if (parseFloat(this.getStyleValue(A, "width")) > 0) return parseFloat(this.getStyleValue(A, "width")); if (A.offsetWidth > 0) { var e = this.getStyleValue(A, "borderLeftWidth"), t = this.getStyleValue(A, "borderRightWidth"), i = this.getStyleValue(A, "paddingLeft"), o = this.getStyleValue(A, "paddingRight"), n = parseFloat(A.offsetWidth) - parseFloat(e) - parseFloat(t) - parseFloat(i) - parseFloat(o); return parseFloat(n) } return 0 } var r = A.getAttribute("style") || ""; A.setAttribute("style", r + "visibility:hidden;display:inline-block !important;"); var a = this.getWidth(A); return A.setAttribute("style", r), Math.ceil(a) } }, outerHeight: function (A, e) { var t = A.offsetHeight; if (e) { var i = A.currentStyle || getComputedStyle(A); t += parseInt(i.marginTop, 0) + parseInt(i.marginBottom, 0) } return t }, outerWidth: function (A, e) { var t = A.offsetWidth; if (e) { var i = A.currentStyle || getComputedStyle(A); t += parseInt(i.marginLeft, 0) + parseInt(i.marginRight, 0) } return t }, isEmptyObject: function (A) { var e = null; for (e in A) return !1; return !0 }, hasClass: function (A, e) { if (A) { var t = A.className.match && A.className.match(new RegExp("(\\s|^)" + e + "(\\s|$)")); return Boolean(t) } return !1 }, addClass: function (A, e) { A && (this.hasClass(A, e) || (A.className += " " + e)) }, removeClass: function (A, e) { if (this.hasClass(A, e)) { var t = new RegExp("(\\s|^)" + e + "(\\s|$)"); A.className = A.className.replace(t, " ") } }, toggleClass: function (A, e) { this.hasClass(A, e) ? this.removeClass(A, e) : this.addClass(A, e) }, simulateEvent: function (A, e) { var t = document.createEvent("Event"); t.initEvent(e, !0, !0); A.dispatchEvent(t) }, bind: function (A, e, t) { A && (A.addEventListener ? A.addEventListener(e, t, !1) : A.attachEvent ? A.attachEvent("on" + e, t) : A["on" + e] = t) }, delegate: function (A, e, t, i) { if (A) if (A.length) for (var o = 0; A.length > o; o += 1) this.delegateFn(A[o], e, t, i); else this.delegateFn(A, e, t, i) }, delegateFn: function (A, e, t, i) { var o = this; function n(A) { var n = (A = A || window.event).target || A.srcElement; o.matchSelector(n, e) && i && ("mouseenter" === t || "mouseleave" === t ? o.fixedMouse(A, n) && i.call(n, A) : i.call(n, A)) } t = t.toLowerCase(), A.addEventListener ? A.addEventListener("mouseenter" === t ? "mouseover" : "mouseleave" === t ? "mouseout" : t, n) : A.attachEvent("mouseenter" === t ? "onmouseover" : "mouseleave" === t ? "onmouseout" : "on" + t, n) }, matchSelector: function (A, e) { return "#" === e.charAt(0) ? A.id === e.slice(1) : "." === e.charAt(0) ? -1 !== (" " + A.className + " ").indexOf(" " + e.slice(1) + " ") : A.tagName.toLowerCase() === e.toLowerCase() }, contains: function (A, e) { return A.contains ? A !== e && A.contains(e) : Boolean(16 & A.compareDocumentPosition(e)) }, fixedMouse: function (A, e) { var t = null, i = A.type.toLowerCase(); if ("mouseover" === i) t = A.relatedTarget || A.fromElement; else { if ("mouseout" !== i) return !0; t = A.relatedTarget || A.toElement } return t && "xul" !== t.prefix && !this.contains(e, t) && t !== e }, fireEvent: function (A, e) { var t = null; if (A.ownerDocument) t = A.ownerDocument; else { if (9 !== A.nodeType) throw new Error("Invalid node passed to fireEvent: " + A.id); t = A } if (A.dispatchEvent) { var i = ""; switch (e) { case "click": case "mousedown": case "mouseup": i = "MouseEvents"; break; case "focus": case "change": case "blur": case "select": i = "HTMLEvents"; break; default: Bh.error("fireEvent: Couldn't find an event class for event '" + e + "'.") } (o = t.createEvent(i)).initEvent(e, "change" !== e, !0), o.synthetic = !0, A.dispatchEvent(o, !0) } else if (A.fireEvent) { var o; (o = t.createEventObject()).synthetic = !0, A.fireEvent("on" + e, o) } } }; xh.create = function (A, e) { var t = document.createElement(A); return t.setAttribute("class", e), t }; xh.createNS = function (A, e) { var t = document.createElementNS("http://www.w3.org/2000/svg", A); return t.setAttribute("class", e), t }; xh.select = function (A) { return A.indexof("#") ? document.getElementById(A.replace("#", "")) : A.indexof(".") ? document.getElementsByClassName(A.replace(".", "")) : document.getElementsByTagName(A) }; var Sh = function (A) { if ("" === A) return 0; if ("string" == typeof A) { if (-1 === A.indexOf("px")) { var e = Number(A); return isNaN(e) ? 0 : e } var t = A.split("px"), i = Number(t[0]); return isNaN(i) ? 0 : i } return 0 }; xh.drag = function (A) { var e = mh.isPc(), t = Object.assign({ element: null, handle: null, axis: "all", cursor: "move", distance: 0, start: null, move: null, stop: null }, A), i = t.element; if (!i) return !1; var o = t.handle || i, n = void 0, r = !1, a = function (A) { if (e) var o = { x: A.clientX, y: A.clientY }; else o = { x: A.touches[0].clientX, y: A.touches[0].clientY }; var a = { x: o.x - n.x, y: o.y - n.y }; r ? (t.move && t.move(n, o, a), n = o, function (A) { var e = i.offsetLeft, o = i.offsetTop, n = Sh(getComputedStyle(i).marginLeft), r = Sh(getComputedStyle(i).marginTop), a = 0 > (e -= n) + A.x ? 0 : e + A.x, s = 0 > (o -= r) + A.y ? 0 : o + A.y; switch (t.axis) { case "x": i.style.left = a + "px"; break; case "y": i.style.top = s + "px"; break; case "all": default: i.style.left = a + "px", i.style.top = s + "px" } }(a)) : r = function (A) { return Math.pow(A.x, 2) + Math.pow(A.y, 2) > Math.pow(t.distance, 2) && (t.start && t.start(n), !0) }(a) }, s = function (A) { var i, r, s = A; if (e) { if (i = s.button, !((r = navigator.userAgent).indexOf("compatible") > -1 && r.indexOf("MSIE") > -1 && !mh.isOpera() ? 1 === i : 0 === i)) return; n = { x: s.clientX, y: s.clientY }, document.addEventListener("mousemove", a) } else n = { x: s.touches[0].clientX, y: s.touches[0].clientY }, o.addEventListener("touchmove", a); t.start && t.start(n) }, l = function () { r && t.end && t.end(n), r = !1, document.removeEventListener("mousemove", a), o.removeEventListener("touchmove", a) }; e ? (o.style.cursor = t.cursor, o.style.userSelect = "none", o.addEventListener("mousedown", s), document.addEventListener("mouseup", l)) : (o.addEventListener("touchend", l), o.addEventListener("touchstart", s)) }; xh.sizable = function (A) { var e = Object.assign({ element: null, axis: "all", minWidth: 100, minHeight: 100, distance: 0, start: null, sizable: null, stop: null }, A), t = e.element; if (!t) return !1; var i = void 0, o = !1, n = xh.create("div", "yj-resize"), r = void 0, a = void 0, s = function (A) { var n = { x: A.clientX, y: A.clientY }, s = { x: n.x - i.x, y: n.y - i.y }; o ? (e.sizable && e.sizable(i, n, s), function (A) { var i = t.offsetLeft, o = t.offsetTop, n = e.minWidth > r + A.x ? e.minWidth : r + A.x, s = e.minHeight > a + A.y ? e.minHeight : a + A.y; switch (e.resize && e.resize(n, s), t.style.left = i + "px", t.style.top = o + "px", e.axis) { case "x": t.style.width = n + "px"; break; case "y": t.style.height = s + "px"; break; case "all": default: t.style.width = n + "px", t.style.height = s + "px" } }(s)) : o = function (A) { return Math.pow(A.x, 2) + Math.pow(A.y, 2) > Math.pow(e.distance, 2) && (e.start && e.start(i), !0) }(s) }, l = function (A) { r = t.clientWidth, a = t.clientHeight; var e, o, n = A; (e = n.button, (o = navigator.userAgent).indexOf("compatible") > -1 && o.indexOf("MSIE") > -1 && !mh.isOpera() ? 1 === e : 0 === e) && (i = { x: n.clientX, y: n.clientY }, document.addEventListener("mousemove", s), document.addEventListener("touchmove", s)) }, c = function () { o && e.end && e.end(i), o = !1, document.removeEventListener("mousemove", s), document.removeEventListener("touchmove", s) }; xh.addClass(t, "yj-sizable"), t.appendChild(n), n.addEventListener("mousedown", l), n.addEventListener("touchstart", l), document.addEventListener("mouseup", c), document.addEventListener("touchend", c) }; var wh = function (A) { var e = this, t = Object.assign({ element: null, min: 0, max: 100, cur: 50, step: 1, isShowProgress: !0, input: null, change: null, currentColor: "#11dab7", defaultColor: "#999" }, A); this._opt = t; var i = xh.create("div", "yj-range"), o = xh.create("input", "yj-input-range"); e.input = o, o.setAttribute("type", "range"), o.setAttribute("step", t.step), o.setAttribute("min", t.min), o.setAttribute("max", t.max), o.setAttribute("value", t.cur); var n = xh.create("span", "yj-range-min"); n.innerText = t.min; var r = xh.create("span", "yj-range-cur"); e.cur = r, r.innerText = t.cur; var a = xh.create("span", "yj-range-max"); a.innerText = t.max; var s = xh.create("span", "yj-range-progress"); i.appendChild(o), t.isShowProgress && (i.appendChild(n), i.appendChild(r), i.appendChild(a)), i.appendChild(s), t.element.appendChild(i), e.setProgress(t.cur), o.addEventListener("input", (function () { e.setProgress(this.value), t.input && t.input(this.value) })), o.addEventListener("change", (function () { e.setProgress(this.value), t.change && t.change(this.value) })) }; wh.prototype.setProgress = function (A) { var e = this._opt, t = this.input, i = this.cur, o = (A - e.min) / (e.max - e.min) * 100; t.value = A, t.style.background = "linear-gradient(to right," + e.currentColor + " 0%," + e.currentColor + " " + o + "%," + e.defaultColor + " " + o + "%, " + e.defaultColor + " 100%)", i.innerText = A }, wh.prototype.reset = function () { this.setProgress(this._opt.cur) }, xh.range = wh; var Mh = function (A) { this._opt = Object.assign({ element: null, min: 0, max: 100, from: null, to: null, step: 1, currentColor: "#11dab7", defaultColor: "#999", change: null }, A), this._opt.from = this._opt.from || this._opt.min, this._opt.to = this._opt.to || this._opt.max, this.init() }; Mh.prototype = { init: function () { var A = xh.create("div", "yj-multiple-range"), e = xh.create("div", "yj-range-track"), t = xh.create("span", "yj-slider yj-slider-min"); t.id = "minSlider", t.type = "minimum"; var i = xh.create("span", "yj-slider yj-slider-max"); i.id = "maxSlider", i.type = "maximum", this._state = { from: this._opt.from, to: this._opt.to }, e.style.backgroundColor = this._opt.currentColor, A.style.backgroundColor = this._opt.defaultColor, A.appendChild(e), A.appendChild(t), A.appendChild(i), this._opt.element.appendChild(A), this._track = e, this._sliders = { min: t, max: i }, this._element = A, this.bindEvent(), this.update(!1) }, bindEvent: function () { var A = this, e = !1, t = null, i = null, o = function (A) { A = A || event; i = A.screenX, t = this, e = !0 }; this._sliders.min.addEventListener("mousedown", o), this._sliders.max.addEventListener("mousedown", o), document.addEventListener("mousemove", (function (o) { if (e) { o = o || event; var n = Math.round((o.screenX - i) / A._pix / A._opt.step) * A._opt.step; 0 !== n && (i = n * A._pix + i, "minimum" === t.type ? A._state.from += n : A._state.to += n, A.recalculate(t), A.update(!0)) } })), document.addEventListener("mouseup", (function () { t = null, e = !1 })) }, update: function (A) { var e = this._sliders.min.offsetWidth, t = this._sliders.max.offsetWidth; this._pix || (this._pix = (this._element.offsetWidth - e - t) / (this._opt.max - this._opt.min)); var i = (this._state.from - this._opt.min) * this._pix, o = (this._state.to - this._opt.min) * this._pix + e + t; this._track.style.left = i + e / 2 + "px", this._track.style.width = o - i - e / 2 - t / 2 + "px", this._sliders.min.style.left = i + "px", this._sliders.max.style.left = o + "px", this._opt.change && A && this._opt.change(this._state) }, recalculate: function (A) { this._opt.max > this._state.to || (this._state.to = this._opt.max), this._state.from > this._opt.min || (this._state.from = this._opt.min), A && ("maximum" === A.type && (this._state.to > this._state.from || (this._state.to = this._state.from)), "minimum" === A.type && (this._state.to > this._state.from || (this._state.from = this._state.to))) }, getProgress: function () { return this._state }, setProgress: function (A) { this._state = A, this.recalculate(), this.update(!1) } }, xh.multipleRange = Mh; var bh = function () { var A = this; Math.randomString = function (A) { for (var e = "", t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", i = 0; A > i; i += 1) e += t.charAt(Math.floor(Math.random() * t.length)); return e }, A.viewport = document.body, A.counter = 0, A.prompt = function (A, e) { return new t(A, e) }, A.confirm = function (A) { return new i(A) }, A.progress = function (A) { return new n(A) }, A.error = {}, A.success = {}, A.warning = {}, A.info = {}, A.alert = function (A, e) { if (["success", "error", "warning", "info"].indexOf(A) > -1) return new o(A, e) }, A.window = function (A) { return new r("window", A) }; var e = { $type: null, $el: null, $options: null, debug: function () { this.$options.debug && window.console.debug.apply(window.console, arguments) }, _processInput: function (e) { if (Array.isArray(e.buttons)) { for (var t = {}, i = 0; e.buttons.length > i; i += 1) t[e.buttons[i]] = A.base.OPTIONS.buttons[e.buttons[i]]; e.buttons = t } for (var i in e.customBtnClass = e.customBtnClass ? e.customBtnClass : A.base.DEFAULTS.customBtnClass, e.buttons) if (e.buttons.hasOwnProperty(i)) { var o = e.buttons[i]; (o = uh.extend(!0, {}, A.base.OPTIONS.buttons[i], o)).class || (o.class = e.customBtnClass), e.buttons[i] = o } return void 0 === (e = uh.extend(!0, {}, A.base.DEFAULTS, e)).showClass && (e.showClass = A.base.OPTIONS.showClass), void 0 === e.hideClass && (e.hideClass = A.base.OPTIONS.hideClass), void 0 === e.baseClass && (e.baseClass = A.base.OPTIONS.baseClass), void 0 === e.delayToRemove && (e.delayToRemove = A.base.OPTIONS.delayToRemove), e.iconClass || (e.iconClass = A.base.OPTIONS.icons[e.iconSource][this.$type]), e }, _init: function () { var A = this; A._createMarkup(), A.setTitle(A.$options.title), A.$options.draggable && (A.$el.classList.add("draggable"), A._enableDrag()), A.$options.closeButton && A._addCloseButton(), A.$options.closeOnEsc && document.addEventListener("keyup.lobibox", (function (e) { 27 === e.which && A.destroy() })), A.$options.baseClass && A.$el.classList.add(A.$options.baseClass), A.$options.showClass && (A.$el.classList.remove(A.$options.hideClass), A.$el.classList.add(A.$options.showClass)), A.$options.id && A.$el.setAttribute("id", A.$options.id), A.$el.dataset.lobibox = A }, _calculatePosition: function (A) { var e; return e = "top" === A ? 30 : "bottom" === A ? window.outerHeight - xh.outerHeight(this.$el) - 30 : (window.outerHeight - xh.outerHeight(this.$el)) / 2, "left:" + (window.outerWidth - xh.outerWidth(this.$el)) / 2 + "px;top:" + e + "px;" }, _createButton: function (A, e) { var t = this, i = document.createElement("button"), o = []; return e && e.class && (o = e.class.split(" ")), o.map((function (A, e) { i.classList.add(A) })), i.dataset.type = A, i.innerHTML = e.text, t.$options.callback && "function" == typeof t.$options.callback && i.addEventListener("click", (function (e) { t._onButtonClick(t.$options.buttons[A], A), t.$options.callback(t, this.dataset.type, e) })), i }, _onButtonClick: function (A, e) { ("ok" === e && "prompt" === this.$type && this.isValid() || "prompt" !== this.$type || "ok" !== e) && A && A.closeOnClick && this.destroy() }, _generateButtons: function () { var A = []; for (var e in this.$options.buttons) if (this.$options.buttons.hasOwnProperty(e)) { var t = this._createButton(e, this.$options.buttons[e]); A.push(t) } return A }, _createMarkup: function () { var e = this, t = document.createElement("div"); t.className = "lobibox", t.dataset.isModal = e.$options.modal, t.dataset.backdrop = !!e.$options.backdrop; var i = document.createElement("div"); i.className = "lobibox-header", t.appendChild(i); var o = document.createElement("span"); o.className = "lobibox-title", i.appendChild(o); var n = document.createElement("div"); if (n.className = "lobibox-body", t.appendChild(n), e.$options.buttons && !uh.isEmptyObject(e.$options.buttons)) { var r = document.createElement("div"); r.className = "lobibox-footer", e._generateButtons().map((function (A, e) { r.appendChild(A) })), t.appendChild(r), A.base.OPTIONS.buttonsAlign.indexOf(e.$options.buttonsAlign) > -1 && r.classList.add("text-" + e.$options.buttonsAlign) } t.classList.add(A.base.OPTIONS.modalClasses[e.$type]), e.$el = t }, _setSize: function () { var A = this; A.setWidth(A.$options.width), A.setHeight("auto" === A.$options.height ? xh.outerHeight(A.$el) : A.$options.height) }, _calculateBodyHeight: function (A) { var e = this.$el.querySelector(".lobibox-header").outerHeight, t = this.$el.querySelector(".lobibox-footer").outerHeight; return A - (e || 0) - (t || 0) }, _addBackdrop: function () { if (0 === document.querySelectorAll(".lobibox-backdrop").length) { var e = document.createElement("div"); e.className = "lobibox-backdrop", A.viewport.appendChild(e) } }, _removeBackdrop: function () { for (var A = document.querySelectorAll(".lobibox-backdrop"), e = 0; A.length > e; e += 1) A[e].remove() }, _triggerEvent: function (A) { this.$options[A] && "function" == typeof this.$options[A] && this.$options[A](this) }, _calculateWidth: function (A) { return (A = Math.min(Math.max(A, this.$options.width), window.outerWidth)) === window.outerWidth && (A -= 2 * this.$options.horizontalOffset), A }, _calculateHeight: function (A) { return (A = Math.min(Math.max(A, this.$options.height), window.outerHeight)) === window.outerHeight && (A -= 2 * this.$options.verticalOffset), A }, _addCloseButton: function () { var A = this, e = document.createElement("span"); e.className = "btn-close", e.innerHTML = "×", A.$el.querySelector(".lobibox-header").appendChild(e), e.addEventListener("mousedown", (function (A) { A.stopPropagation() })), e.addEventListener("click", (function () { A.destroy() })) }, _position: function () { this._setSize(); var A = this._calculatePosition(); this.setPosition(A.left, A.top) }, _isMobileScreen: function () { return 768 > window.outerHeight }, _enableDrag: function () { var A = this.$el, e = A.querySelector(".lobibox-header"); e.addEventListener("mousedown", (function (e) { e.preventDefault(), A.setAttribute("offset-left", e.offsetX), A.setAttribute("offset-top", e.offsetY), A.setAttribute("allow-drag", "true") })), document.addEventListener("mouseup", (function () { A.setAttribute("allow-drag", "false") })), document.addEventListener("mousemove", (function (e) { if ("true" === A.getAttribute("allow-drag")) { var t = e.clientX, i = e.clientY; 0 > i && (i = 5), i > document.body.clientHeight && (i = document.body.clientHeight - 10), 0 > t && (t = 5), t > document.body.clientWidth - A.offsetWidth && (t = document.body.clientWidth - A.offsetWidth), A.style.cssText += "left:" + t + "px;top:" + i + "px;" } })), e.addEventListener("touchstart", (function (e) { var t = A.style.top, i = e.originalEvent.targetTouches[0].clientY; A.setAttribute("offset-left", e.originalEvent.targetTouches[0].clientX - A.style.left), A.setAttribute("offset-top", i - t), A.setAttribute("allow-drag", "true") })), document.addEventListener("touchend", (function () { A.setAttribute("allow-drag", "false") })), document.addEventListener("touchmove", (function (e) { if ("true" === A.getAttribute("allow-drag")) { var t = e.originalEvent.targetTouches[0].clientX, i = e.originalEvent.targetTouches[0].clientY; 0 > i && (i = 5), i > document.body.clientHeight && (i = document.body.clientHeight - 10), 0 > t && (t = 5), t > document.body.clientWidth - A.offsetWidth && (t = document.body.clientWidth - A.offsetWidth), A.style.cssText += "left:" + t + "px;top:" + i + "px;" } })) }, _setContent: function (A) { return A && ("string" == typeof A && A.constructor == String ? this.$el.querySelector(".lobibox-body").innerHTML = A : this.$el.querySelector(".lobibox-body").appendChild(A)), this }, _beforeShow: function () { this._triggerEvent("onShow") }, _afterShow: function () { var e = this; A.counter++, e.$el.setAttribute("data-nth", A.counter), e.$options.draggable || window.addEventListener("resize.lobibox-" + e.$el.getAttribute("data-nth"), (function () { e.refreshWidth(), e.refreshHeight(), e.$el.style.cssText += "left:50%;top:50%;margin-left:" + -e.$el.width / 2 + "px;margin-top:" + -e.$el.height / 2 + "px;" })), e._triggerEvent("shown") }, _beforeClose: function () { this._triggerEvent("beforeClose") }, _afterClose: function () { this.$options.draggable || window.removeEventListener("resize.lobibox-" + this.$el.getAttribute("data-nth")), this._triggerEvent("closed") }, _beforeHide: function () { this._triggerEvent("beforeHide") }, _afterHide: function () { this._triggerEvent("afterHide") }, hide: function () { var e = this; function t() { e.$el.classList.add("lobibox-hidden"); for (var t = document.querySelectorAll(".lobibox"), i = [].slice.call(t), o = 0; i.length > o; o += 1) !0 !== i[o].dataset.isModal && i.splice(o, 1); for (o = 0; i.length > o; o += 1) i[o].classList.contains("lobibox-hidden") && i.splice(o, 1); if (0 === i.length) { var n = document.querySelectorAll(".lobibox-backdrop"); for (o = 0; n.length > o; o += 1) A.viewport.removeChild(n[o]); A.viewport.classList.remove(A.base.OPTIONS.bodyClass) } e._afterHide() } return e._beforeHide(), e.$options.hideClass ? (e.$el.classList.remove(e.$options.showClass), e.$el.classList.add(e.$options.hideClass), setTimeout((function () { t() }), e.$options.delayToRemove)) : t(), this }, destroy: function () { var e = this; function t() { e.$el.remove(); for (var t = document.querySelectorAll(".lobibox"), i = [].slice.call(t), o = 0; i.length > o; o += 1) "true" !== i[o].dataset.isModal && i.splice(o, 1); if (0 === i.length) { var n = document.querySelectorAll(".lobibox-backdrop"); for (o = 0; n.length > o; o += 1) A.viewport.removeChild(n[o]); A.viewport.classList.remove(A.base.OPTIONS.bodyClass) } var r = !1; for (o = 0; i.length > o; o += 1) if ("true" === i[o].dataset.backdrop) { r = !0; break } r || e._removeBackdrop(), e._afterClose() } return e._beforeClose(), e.$options.hideClass ? (xh.removeClass(e.$el, e.$options.showClass), xh.addClass(e.$el, e.$options.hideClass), setTimeout((function () { t() }), e.$options.delayToRemove)) : t(), this }, setWidth: function (A) { return this.$el.style.cssText += "width:" + this._calculateWidth(A) + "px;", this }, refreshWidth: function () { this.setWidth(this.$el.style.width) }, refreshHeight: function () { this.setHeight(this.$el.style.height) }, setHeight: function (A) { var e = this; return e.$el.style.cssText += "height:" + e._calculateHeight(A) + "px", e.$el.querySelector(".lobibox-body").style.cssText += "height:" + (e.$options.height - 41) + "px", e }, setSize: function (A, e) { return this.setWidth(A), this.setHeight(e), this }, setPosition: function (A, e) { var t; return "number" == typeof A && "number" == typeof e ? t = "left:" + A + "px;top:" + e + "px;" : "string" == typeof A ? t = this._calculatePosition(A) : "object" === lc(A) && (t = "left:" + A.left + "px;top:" + A.top + "px;right:" + A.right + "px;bottom:" + A.bottom + "px;"), this.$el.style.cssText += t, this }, setTitle: function (A) { return this.$el.querySelector(".lobibox-title").innerHTML = A }, getTitle: function () { return this.$el.querySelector(".lobibox-title").innerHTML }, show: function () { var e = this, t = A.viewport; (e._beforeShow(), e.$el.classList.remove("lobibox-hidden"), t.appendChild(e.$el), e.$options.buttons) && e.$el.querySelector(".lobibox-footer").children[0].focus(); return (e.$options.modal || e.$options.backdrop) && (t.classList.add(A.base.OPTIONS.bodyClass), e._addBackdrop()), !1 !== e.$options.delay && setTimeout((function () { e.destroy() }), e.$options.delay), e._afterShow(), e } }; function t(e, t) { this.$input = null, this.$type = "prompt", "object" == lc(e) ? t = e : this.$promptType = e, t = uh.extend(!0, {}, A.prompt.DEFAULT_OPTIONS, t), this.$options = this._processInput(t), this._init(), this.debug(this) } function i(A) { this.$type = "confirm", this.$options = this._processInput(A), this._init(), this.debug(this) } function o(A, e) { this.$type = A, this.$options = this._processInput(e), this._init(), this.debug(this) } function n(A) { this.$type = "progress", this.$progressBarElement = null, this.$options = this._processInput(A), this.$progress = 0, this._init(), this.debug(this) } function r(A, e) { this.$type = A, this.$options = this._processInput(e), this._init(), this.debug(this) } A.base = {}, A.base.OPTIONS = { bodyClass: "lobibox-open", modalClasses: { error: "lobibox-error", success: "lobibox-success", info: "lobibox-info", warning: "lobibox-warning", confirm: "lobibox-confirm", progress: "lobibox-progress", prompt: "lobibox-prompt", default: "lobibox-default", window: "lobibox-window" }, buttonsAlign: ["left", "center", "right"], buttons: { ok: { class: "lobibox-btn lobibox-btn-default", text: "OK", closeOnClick: !0 }, cancel: { class: "lobibox-btn lobibox-btn-cancel", text: "Cancel", closeOnClick: !0 }, yes: { class: "lobibox-btn lobibox-btn-yes", text: "确定", closeOnClick: !0 }, no: { class: "lobibox-btn lobibox-btn-no", text: "取消", closeOnClick: !0 } }, icons: { bootstrap: { confirm: "glyphicon glyphicon-question-sign", success: "glyphicon glyphicon-ok-sign", error: "glyphicon glyphicon-remove-sign", warning: "glyphicon glyphicon-exclamation-sign", info: "glyphicon glyphicon-info-sign" }, fontAwesome: { confirm: "fa fa-question-circle", success: "fa fa-check-circle", error: "fa fa-times-circle", warning: "fa fa-exclamation-circle", info: "fa fa-info-circle" } } }, A.base.DEFAULTS = { horizontalOffset: 5, verticalOffset: 5, width: 600, height: "auto", closeButton: !0, draggable: !0, customBtnClass: "lobibox-btn lobibox-btn-default", modal: !1, debug: !1, buttonsAlign: "center", closeOnEsc: !0, delayToRemove: 200, delay: !1, baseClass: "animated-super-fast", showClass: "zoomIn", hideClass: "zoomOut", iconSource: "bootstrap", onShow: null, shown: null, beforeClose: null, closed: null }, t.prototype = uh.extend(!0, {}, e, { constructor: t, _processInput: function (i) { var o = e._processInput.call(this, i); return o.buttons = { ok: A.base.OPTIONS.buttons.ok, cancel: A.base.OPTIONS.buttons.cancel }, i = uh.extend(!0, {}, o, t.DEFAULT_OPTIONS, i) }, _init: function () { e._init.call(this), this._setContent(this.$options.content), this.show() }, _afterShow: function () { var A = this; A._setContent(A._createInput())._position(), A.$input && A.$input.focus(); var t = (window.innerHeight - xh.outerHeight(A.$el)) / 2, i = (window.innerWidth - xh.outerWidth(A.$el)) / 2; A.setPosition(i, t), e._afterShow.call(A) }, _createInput: function () { var A, e = this; if (e.$options.multiline) e.$input = document.createElement("textarea"), e.$input.setAttribute("rows", e.$options.lines); else { if (!e.$promptType) return; e.$input = document.createElement("input"), e.$input.setAttribute("type", "' + me.$promptType + '") } if (e.$input.classList.add("lobibox-input"), "[object Object]" === Object.prototype.toString.call(e.$options.attrs)) for (var t in e.$options.attrs) e.$input.setAttribute(t, e.$options.attrs[t]); e.$options.value && e.setValue(e.$options.value), e.$options.label && ((A = document.createElement("label")).innerHTML = e.$options.label); var i = document.createElement("div"); return e.$options.label && i.appendChild(A), i.appendChild(e.$input), i }, setValue: function (A) { return this.$input.value = A, this }, getValue: function () { return this.$input.value }, isValid: function () { var A = this, e = A.$el.querySelectorAll(".lobibox-input-error-message"); if (A.$options.required && !A.getValue()) { if (A.$input.classList.add("invalid"), 0 === e.length) { var t = document.createElement("p"); t.className = "lobibox-input-error-message", t.innerHTML = A.$options.errorMessage, A.$el.querySelector(".lobibox-body").appendChild(t), A._position(), A.$input.focus() } return !1 } A.$input.classList.remove("invalid"); for (var i = 0; e.length > i; i += 1) e[i].remove(); return A._position(), A.$input.focus(), A._removeBackdrop(), !0 }, _beforePromptShow: function () { this._triggerEvent("beforeWindowShow") }, _beforePromptHide: function () { this._triggerEvent("beforeWindowHide") }, _afterPromptShow: function () { this._triggerEvent("afterWindowShow") }, _afterPromptHide: function () { this._triggerEvent("afterWindowHide") }, promptHide: function () { return this._beforePromptHide(), this.$el.classList.add("hide"), this._afterPromptHide(), this }, promptShow: function () { return this._beforePromptShow(), this.$el.classList.remove("hide"), this._afterPromptShow(), this.$el.style.zIndex = (new Date).getTime() - A.window.startTime, this } }), t.DEFAULT_OPTIONS = { width: 400, attrs: {}, value: "", multiline: !1, lines: 3, type: "text", label: "", required: !0, errorMessage: "The field is required" }, i.prototype = uh.extend(!0, {}, e, { constructor: i, _processInput: function (t) { var i = e._processInput.call(this, t); return i.buttons = { yes: A.base.OPTIONS.buttons.yes, no: A.base.OPTIONS.buttons.no }, t = uh.extend(!0, {}, i, A.confirm.DEFAULTS, t) }, _init: function () { e._init.call(this), this.show() }, _afterShow: function () { var A = this, t = document.createElement("div"); if (A.$options.iconClass) { var i = document.createElement("div"); i.className = "lobibox-icon-wrapper", t.appendChild(i); var o = document.createElement("i"); o.className = "lobibox-icon" + A.$options.iconClass, t.appendChild(o) } var n = document.createElement("div"); n.className = "lobibox-body-text-wrapper", t.appendChild(n); var r = document.createElement("span"); r.className = "lobibox-body-text", r.innerHTML = A.$options.msg, n.appendChild(r), A._setContent(t.innerHTML), A._position(), e._afterShow.call(A) }, _beforeConfirmShow: function () { this._triggerEvent("beforeWindowShow") }, _beforeConfirmHide: function () { this._triggerEvent("beforeWindowHide") }, _afterConfirmShow: function () { this._triggerEvent("afterWindowShow") }, _afterConfirmHide: function () { this._triggerEvent("afterWindowHide") }, confirmHide: function () { return this._beforeConfirmHide(), this.$el.classList.add("hide"), this._afterConfirmHide(), this }, confirmShow: function () { return this._beforeConfirmShow(), this.$el.classList.remove("hide"), this._afterConfirmShow(), this.$el.style.zIndex = (new Date).getTime() - A.window.startTime, this } }), A.confirm.DEFAULTS = { title: "Question", width: 500 }, o.prototype = uh.extend(!0, {}, e, { constructor: o, _processInput: function (t) { var i = e._processInput.call(this, t); return i.buttons = {}, t = uh.extend(!0, {}, i, A.alert.OPTIONS[this.$type], A.alert.DEFAULTS, t) }, _init: function () { e._init.call(this), this.show() }, _afterShow: function () { var A = this, t = document.createElement("div"); if (A.$options.iconClass) { var i = document.createElement("div"); i.className = "lobibox-icon-wrapper", t.appendChild(i); var o = document.createElement("i"); o.className = "lobibox-icon" + A.$options.iconClass, t.appendChild(o) } var n = document.createElement("div"); n.className = "lobibox-body-text-wrapper", t.appendChild(n); var r = document.createElement("span"); r.className = "lobibox-body-text", r.innerHTML = A.$options.msg, n.appendChild(r), A._setContent(t.innerHTML), A._setSize(); var a = (window.innerHeight - xh.outerHeight(A.$el)) / 2, s = (window.innerWidth - xh.outerWidth(A.$el)) / 2; A.setPosition(s, a), e._afterShow.call(A) } }), A.alert.OPTIONS = { warning: { title: "Warning" }, info: { title: "Information" }, success: { title: "Success" }, error: { title: "Error" } }, A.alert.DEFAULTS = {}, n.prototype = uh.extend(!0, {}, e, { constructor: n, _processInput: function (t) { var i = e._processInput.call(this, t); return t = uh.extend(!0, {}, i, A.progress.DEFAULTS, t) }, _init: function () { e._init.call(this), this.show() }, _afterShow: function () { var A, t = this; t.$progressBarElement = t.$options.progressTpl ? t.$options.progressTpl : t._createProgressbar(), t.$options.label && ((A = document.createElement("label")).innerHTML = t.$options.label); var i = document.createElement("div").appendChild(A); i.appendChild(t.$progressBarElement), t._setContent(i), t._position(), e._afterShow.call(t) }, _createProgressbar: function () { var A = document.createElement("div"); A.classList.add("lobibox-progress-bar-wrapper"), A.classList.add("lobibox-progress-outer"); var e = document.createElement("div"); if (e.classList.add("lobibox-progress-bar"), e.classList.add("lobibox-progress-element"), A.appendChild(e), this.$options.showProgressLabel) { var t = document.createElement("span"); t.className = "lobibox-progress-text", t.dataset.role = "progress-text", A.appendChild(t) } return A }, setProgress: function (A) { var e = this; if (100 !== e.$progress) return A = Math.min(100, Math.max(0, A)), e.$progress = A, e._triggerEvent("progressUpdated"), 100 === e.$progress && e._triggerEvent("progressCompleted"), e.$el.querySelector(".lobibox-progress-element").style.cssText += "width" + A.toFixed(1) + "%", e.$el.querySelector(".lobibox-progress-text").innerHTML = A.toFixed(1) + "%", e }, getProgress: function () { return this.$progress } }), A.progress.DEFAULTS = { width: 500, showProgressLabel: !0, label: "", progressTpl: !1, progressUpdated: null, progressCompleted: null }, r.prototype = uh.extend(!0, {}, e, { constructor: r, _processInput: function (t) { var i = e._processInput.call(this, t); return t.content && "function" == typeof t.content && (t.content = t.content()), t = uh.extend(!0, {}, i, A.window.DEFAULTS, t) }, _init: function () { var A = this; e._init.call(A), A.setContent(A.$options.content), A.$options.url && A.$options.autoload ? (A.$options.showAfterLoad || A.show(), A.load((function () { A.$options.showAfterLoad && A.show() }))) : A.show() }, _afterShow: function () { this._position(), e._afterShow.call(this) }, _addCloseButton: function () { var A = this, e = document.createElement("span"); e.className = "btn-close", e.innerHTML = "×", A.$el.querySelector(".lobibox-header").appendChild(e), e.addEventListener("mousedown", (function (A) { A.stopPropagation() })), e.addEventListener("click", (function () { A.windowHide() })) }, _beforeWindowShow: function () { this._triggerEvent("beforeWindowShow") }, _beforeWindowHide: function () { this._triggerEvent("beforeWindowHide") }, _afterWindowShow: function () { this._triggerEvent("afterWindowShow") }, _afterWindowHide: function () { this._triggerEvent("afterWindowHide") }, windowHide: function () { return this._beforeWindowHide(), this.$el.classList.add("hide"), this._afterWindowHide(), this }, windowShow: function () { return this._beforeWindowShow(), this.$el.classList.remove("hide"), this._afterWindowShow(), this.$el.style.zIndex = (new Date).getTime() - A.window.startTime, this }, setParams: function (A) { return this.$options.params = A, this }, getParams: function () { return this.$options.params }, setLoadMethod: function (A) { return this.$options.loadMethod = A, this }, getLoadMethod: function () { return this.$options.loadMethod }, setContent: function (A) { return this.$options.content = A, this.$el.querySelector(".lobibox-body").innerHTML = "", xh.append(this.$el.querySelector(".lobibox-body"), A), this }, getContent: function () { return this.$options.content }, setUrl: function (A) { return this.$options.url = A, this }, getUrl: function () { return this.$options.url }, load: function (A) { var e = this; return e.$options.url ? ($.ajax(e.$options.url, { method: e.$options.loadMethod, data: e.$options.params }).done((function (t) { e.setContent(t), A && "function" == typeof A && A(t) })), e) : e } }), A.window.DEFAULTS = { width: 480, height: 600, content: "", url: "", draggable: !0, autoload: !0, loadMethod: "GET", showAfterLoad: !0, params: {} }, A.window.startTime = (new Date).getTime(); var a = function (e, t) { this.$type = null, this.$options = null, this.$el = null; var i = this, o = function (A) { for (var e = xh.closest(A, ".lb-notify-tabs").childNodes, t = 0; e.length > t; t += 1) "li" == e[t].nodeType && e[t].classList.remove("active"); A.classList.add("active"); var i = A.querySelector("a").getAttribute("href"), o = xh.closest(i, ".lb-notify-wrapper").querySelectorAll(".lb-tab-pane"); for (t = 0; o.length > t; t += 1) o[t].classList.remove("active"); i.addClass("active") }, n = function (e) { var t = document.createElement("li"); t.className = A.notify.OPTIONS[i.$type].class; var o = document.createElement("a"); o.setAttribute("href", "#" + e), t.appendChild(o); var n = document.createElement("i"); return n.className = "tab-control-icon" + i.$options.icon, o.appendChild(n), t }, r = function () { var A = document.createElement("div"); return A.className = "lb-tab-pane", A.id = Math.randomString(10), A }, a = function (A) { if (i.$options.closable) { var e = document.createElement("span"); e.className = "lobibox-close", e.innerHTML = "×", A.appendChild(e), e.addEventListener("click", (function () { i.remove() })) } }, s = function (A) { i.$options.closeOnClick && A.click((function () { i.remove() })) }, l = function (A) { if (i.$options.delay) { if (i.$options.delayIndicator) { var e = document.createElement("div"); e.className = "lobibox-delay-indicator"; var t = document.createElement("div"); e.appendChild(t), A.appendChild(e) } var o = 0, n = 1e3 / 30, r = (new Date).getTime(), a = setInterval((function () { i.$options.continueDelayOnInactiveTab ? o = (new Date).getTime() - r : o += n; var A = 100 * o / i.$options.delay; if (100 > A || (A = 100, i.remove(), a = clearInterval(a)), i.$options.delayIndicator) for (var t = e.querySelectorAll("div"), s = 0; t.length > s; s += 1) t[s].style.cssText += "width:" + A + "%" }), n); i.$options.pauseDelayOnHover && (A.addEventListener("mouseenter.lobibox", (function () { n = 0 })), A.addEventListener("mouseleave.lobibox", (function () { n = 1e3 / 30 }))) } }, c = function (A) { return A = Math.min(window.outerWidth, A) }; this.remove = function () { i.$el.classList.remove(i.$options.showClass), i.$el.classList.add(i.$options.hideClass); var e = i.$el.parentNode, t = xh.closest(e, ".lobibox-notify-wrapper-large") || xh.closest(e, ".lobibox-notify-wrapper"); if (e) { for (var n = "#" + e.getAttribute("id"), r = t.querySelectorAll(".lb-notify-tabs li"), a = 0; r.length > a; a += 1) r[a].querySelector("a").getAttribute("href") !== n && r.splice(1, a); if (r.length > 0) for (a = 0; r.length > a; a += 1) r[a].classList.remove(A.notify.OPTIONS.class), r[a].classList.add(i.$options.hideClass); return setTimeout((function () { if ("normal" === i.$options.size || "mini" === i.$options.size) i.$el.parentElement.removeChild(i.$el); else if ("large" === i.$options.size) { var t = function (A) { var e = A.prev(); return 0 === e.length && (e = A.next()), 0 === e.length ? null : e }(r); t && o(t), r.parentElement.removeChild(r), e.parentElement.removeChild(e) } var n = A.notify.list, a = n.indexOf(i); n.splice(a, 1); var s = n[a]; s && s.$options.showAfterPrevious && s._init() }), 500), i } }, i._init = function () { var e = function () { var e, t, o, n, r, h = A.notify.OPTIONS, d = document.createElement("div"); if (d.classList.add("lobibox-notify"), d.classList.add(h[i.$type].class), d.classList.add(h.class), d.classList.add(i.$options.showClass), (o = document.createElement("div")).className = "lobibox-notify-icon-wrapper", d.appendChild(o), (e = document.createElement("div")).className = "lobibox-notify-icon", o.appendChild(e), t = document.createElement("div"), e.appendChild(t), i.$options.img) { var p = document.createElement("img"); p.src = i.$options.img, t.appendChild(p) } else if (i.$options.icon) { var g = document.createElement("div"); g.className = "icon-el"; var u = document.createElement("i"); u.className = i.$options.icon, g.appendChild(u), t.appendChild(g) } else d.classList.add("without-icon"); if ((r = document.createElement("div")).className = "lobibox-notify-msg", r.innerHTML = i.$options.msg, !1 !== i.$options.messageHeight && (r.style.cssText += "max-height:" + i.$options.messageHeight + "px;"), (n = document.createElement("div")).className = "lobibox-notify-body", n.appendChild(r), d.appendChild(n), i.$options.title) { var f = document.createElement("div"); f.className = "lobibox-notify-title", f.innerHTML = i.$options.title, n.insertBefore(f, r) } return a(d), "normal" !== i.$options.size && "mini" !== i.$options.size || (s(d), l(d)), i.$options.width && (d.style.cssText += "width:" + c(i.$options.width) + "px"), d }(); if ("mini" === i.$options.size && e.classList.add("notify-mini"), "string" == typeof i.$options.position) { var t = function () { var e, t = ("large" === i.$options.size ? ".lobibox-notify-wrapper-large" : ".lobibox-notify-wrapper") + "." + i.$options.position.replace(/\s/gi, "."); if (0 !== (e = document.querySelectorAll(t)).length) return e[0]; e = document.createElement("div"); for (var o = t.split("."), n = 1; o.length > n; n += 1) e.classList.add(o[n]); if (A.viewport.appendChild(e), "large" === i.$options.size) { var r = document.createElement("ul"); r.className = "lb-notify-tabs"; var a = document.createElement("div"); a.className = "lb-notify-wrapper", e.appendChild(r), e.appendChild(a) } return e }(); ! function (A, e) { if ("normal" === i.$options.size) e.classList.contains("bottom") ? e.insertBefore(A, e.firstChild) : e.appendChild(A); else if ("mini" === i.$options.size) e.classList.contains("bottom") ? e.insertBefore(A, e.firstChild) : e.appendChild(A); else if ("large" === i.$options.size) { var t = r().appendChild(A), a = n(t.getAttribute("id")); e.querySelector(".lb-notify-wrapper").appendChild(t), e.querySelector(".lb-notify-tabs").appendChild(a), o(a); for (var s = a.querySelectorAll("a"), l = 0; s.length > l; l += 1) s[l].click((function () { o(a) })) } }(e, t), t.classList.contains("center") && (t.style.cssText += "margin-left:" + -t.offsetWidth / 2 + "px") } else A.viewport.appendChild(e), e.style.cssText += "position:fixed;left:" + i.$options.position.left + "px;top:" + i.$options.position.top + "px;"; (i.$el = e, i.$options.sound) && new Audio(i.$options.sound).play(); i.$options.rounded && i.$el.classList.add("rounded"), i.$el.addEventListener("click", (function (A) { i.$options.onClickUrl && (window.location.href = i.$options.onClickUrl), i.$options.onClick && "function" == typeof i.$options.onClick && i.$options.onClick.call(i, A) })), i.$el.dataset.lobibox = i }, this.$type = e, this.$options = function (e) { return "mini" !== e.size && "large" !== e.size || (e = uh.extend(!0, {}, A.notify.OPTIONS[e.size], e)), "mini" !== (e = uh.extend(!0, {}, A.notify.OPTIONS[i.$type], A.notify.DEFAULTS, e)).size && !0 === e.title ? e.title = A.notify.OPTIONS[i.$type].title : "mini" === e.size && !0 === e.title && (e.title = !1), !0 === e.icon && (e.icon = A.notify.OPTIONS.icons[e.iconSource][i.$type]), !0 === e.sound && (e.sound = A.notify.OPTIONS[i.$type].sound), e.sound && (e.sound = e.soundPath + e.sound + e.soundExt), e }(t), i.$options.showAfterPrevious && 0 !== A.notify.list.length || this._init() }; A.notify = function (e, t) { if (["default", "info", "warning", "error", "success"].indexOf(e) > -1) { var i = new a(e, t); return A.notify.list.push(i), i } }, A.notify.list = [], A.notify.closeAll = function () { var e = A.notify.list; for (var t in e) { e[t].parentNode.removeChild(e[t]) } }, A.notify.DEFAULTS = { title: !0, size: "normal", soundPath: "sounds/", soundExt: ".ogg", showClass: "fadeInDown", hideClass: "zoomOut", icon: !0, msg: "", img: null, closable: !0, hideCloseButton: !1, delay: 5e3, delayIndicator: !0, closeOnClick: !0, width: 400, sound: !0, position: "bottom right", iconSource: "bootstrap", rounded: !1, messageHeight: 60, pauseDelayOnHover: !0, onClickUrl: null, showAfterPrevious: !1, continueDelayOnInactiveTab: !0, onClick: null }, A.notify.OPTIONS = { class: "animated-fast", large: { width: 500, messageHeight: 96 }, mini: { class: "notify-mini", messageHeight: 32 }, default: { class: "lobibox-notify-default", title: "Default", sound: !1 }, success: { class: "lobibox-notify-success", title: "Success", sound: "sound2" }, error: { class: "lobibox-notify-error", title: "Error", sound: "sound4" }, warning: { class: "lobibox-notify-warning", title: "Warning", sound: "sound5" }, info: { class: "lobibox-notify-info", title: "Information", sound: "sound6" }, icons: { bootstrap: { success: "glyphicon glyphicon-ok-sign", error: "glyphicon glyphicon-remove-sign", warning: "glyphicon glyphicon-exclamation-sign", info: "glyphicon glyphicon-info-sign" }, fontAwesome: { success: "fa fa-check-circle", error: "fa fa-times-circle", warning: "fa fa-exclamation-circle", info: "fa fa-info-circle" } } } }, Uh = 37, Fh = 38, Kh = 39, Qh = 40, Rh = 65, Th = 68, kh = 69, Dh = 81, Lh = 83, Nh = 87, Oh = 90, Vh = 187, Gh = 189, Ph = 48, qh = 27, jh = { ReverseWheelDirection: !1, MovementSpeedRate: 1, WalkSpeedRate: 1, RotatePivotMode: kc.MOUSEPOINT, NoPan: !1, NoRotate: !1, NoZoom: !1, NoKey: !1, LockAxisZ: !1, LockAxisZRange: null }, Hh = function (A, e) { this.defaultSetting = { colorRects: !0, picker: !0, colorCode: !0, hasOpacity: !0 }, this.color = { hex: void 0, rgb: void 0, rgba: void 0, hsl: void 0 }, this.colorInputDom = A, this.element = this.create(e) }; Hh.prototype = { constructor: Hh, create: function (A) { var e = this.defaultSetting; A && (e = uh.extend(!0, this.defaultSetting, A)); var t = document.createElement("div"); return t.style.cssText += "width:190px;position:absolute;", e.colorRects && t.appendChild(this.createRects(!!e.hasOpacity)), e.picker && t.appendChild(this.createPicker(!!e.hasOpacity)), e.colorCode && t.appendChild(this.createColorCode()), t.appendChild(this.createBtn()), this.element = t, t }, createBtn: function () { var A = this, e = document.createElement("div"), t = document.createElement("button"); t.className = "btn-yes", t.innerHTML = "确定", t.style.cssText += "display:inline-block;margin:10px;color:#000;background-color: #FFFFFF;border: 2px solid #FFFFFF;border-radius: 4px; width: 73px;height: 32px;", t.addEventListener("click", (function () { A.element.style.display = "none" })); var i = document.createElement("button"); return i.className = "btn-no", i.innerHTML = "取消", i.style.cssText += "display:inline-block;margin:10px;color:#000;background-color: #FFFFFF;border: 2px solid #FFFFFF;border-radius: 4px; width: 73px;height: 32px;", i.addEventListener("click", (function () { A.element.style.display = "none" })), e.appendChild(t), e.appendChild(i), e }, createRects: function (A) { var e = this, t = document.createElement("div"); t.className = "rectFather", t.style.cssText += "width:180px;height:180px;margin-top:10px;margin-left:10px;display:flex;flex-wrap:wrap;align-items:flex-start;"; for (var i = [], o = ["00", "55", "AA", "FF"], n = 0, r = 0, a = 0, s = "", l = 0; 64 > l;) s = "#" + o[n] + o[r] + o[a], i[l] = document.createElement("span"), i[l].className = "spans" + l, i[l].style.cssText += "width:15px;height:15px;margin:1px 2px;border:1px solid #FFFFFF;background-color:" + s + ";", i[l].setAttribute("color", s), t.appendChild(i[l]), (l += 1) % 16 == 0 ? n += 1 : l % 4 == 0 ? (r += 1) > 3 && (r = 0) : (a += 1) > 3 && (a = 0); var c = t.querySelectorAll("span"); return xh.addEventListener(c, "click", (function (t) { for (var i = 0; c.length > i; i += 1) c[i].style.cssText += "border:1px solid #FFFFFF;"; var o = t.target; o.style.cssText += "border:2px solid #000000;"; var n = o.getAttribute("color"); A ? e.setColor(n, 1) : e.setColor(n), t.stopPropagation ? t.stopPropagation() : t.cancelBubble = !0 })), t }, createPicker: function (A) { var e = this, t = document.createElement("div"); t.style.cssText += "width:180px;margin-left:10px;"; var i = document.createElement("span"); i.className = "colorShow", i.style.cssText += "display:block;width:170px;height:30px;border-radius:5px;margin-top:10px;margin-bottom:10px;background-color:#FFFFFF;", t.appendChild(i); var o = document.createElement("span"); o.innerHTML = "红 : ", o.style.color = "#FF0000"; var n = document.createElement("input"); n.type = "range", n.className = "redRange", n.style.cssText += "background:linear-gradient(#FFFFFF, #FFFFFF) no-repeat, #FF0000;", n.setAttribute("step", "1"), n.setAttribute("min", "0"), n.setAttribute("max", "255"), n.setAttribute("value", "255"); var r = document.createElement("div"); r.appendChild(o), r.appendChild(n), t.appendChild(r); var a = document.createElement("span"); a.innerHTML = "绿 : ", a.style.color = "#00FF00"; var s = document.createElement("input"); s.type = "range", s.className = "greenRange", s.style.cssText += "background:linear-gradient(#FFFFFF, #FFFFFF) no-repeat, #00FF00;", s.setAttribute("step", "1"), s.setAttribute("min", "0"), s.setAttribute("max", "255"), s.setAttribute("value", "255"); var l = document.createElement("div"); l.appendChild(a), l.appendChild(s), t.appendChild(l); var c = document.createElement("span"); c.innerHTML = "蓝 : ", c.style.color = "#0000FF"; var h = document.createElement("input"); h.type = "range", h.className = "blueRange", h.style.cssText += "background:linear-gradient(#FFFFFF, #FFFFFF) no-repeat, #0000FF;", h.setAttribute("step", "1"), h.setAttribute("min", "0"), h.setAttribute("max", "255"), h.setAttribute("value", "255"); var d = document.createElement("div"); d.appendChild(c), d.appendChild(h), t.appendChild(d); var p = t.querySelector(".redRange"), g = t.querySelector(".greenRange"), u = t.querySelector(".blueRange"), f = null; if (p.addEventListener("input", (function () { var t = "#" + ((1 << 24) + (Number(p.value) << 16) + (Number(g.value) << 8) + Number(u.value)).toString(16).slice(1); if (A) { var i = Number(f.value); e.setColor(t, i) } else e.setColor(t) })), g.addEventListener("input", (function () { var t = "#" + ((1 << 24) + (Number(p.value) << 16) + (Number(g.value) << 8) + Number(u.value)).toString(16).slice(1); if (A) { var i = Number(f.value); e.setColor(t, i) } else e.setColor(t) })), u.addEventListener("input", (function () { var t = "#" + ((1 << 24) + (Number(p.value) << 16) + (Number(g.value) << 8) + Number(u.value)).toString(16).slice(1); if (A) { var i = Number(f.value); e.setColor(t, i) } else e.setColor(t) })), A) { var m = document.createElement("span"); m.innerHTML = "透明度 : ", m.style.color = "#FFFFFF"; var C = document.createElement("input"); C.type = "range", C.className = "opacityRange", C.style.cssText += "width:97px;background:linear-gradient(#FFFFFF, #FFFFFF) no-repeat, #FFFFFF;", C.setAttribute("step", "0.01"), C.setAttribute("min", "0"), C.setAttribute("max", "1"), C.setAttribute("value", "1"); var y = document.createElement("div"); y.appendChild(m), y.appendChild(C), t.appendChild(y), (f = t.querySelector(".opacityRange")).addEventListener("input", (function () { var A = "#" + ((1 << 24) + (Number(p.value) << 16) + (Number(g.value) << 8) + Number(u.value)).toString(16).slice(1), t = Number(f.value); e.setColor(A, t) })) } return t }, createColorCode: function () { var A = this, e = document.createElement("div"); e.style.cssText += "width:180px;margin-left:10px;"; var t = document.createElement("input"); t.className = "colorCode", t.type = "text", t.style.cssText += "display:block;float:left;width:110px;margin:10px 10px 10px 0;padding-left:3px;", t.value = "#ffffff", e.appendChild(t); var i = document.createElement("span"); return i.className = "colorCodeBtn", i.style.cssText += "display:block;float:left;width:38px;height:21px;border-radius:5px;margin-top:10px;background-color:#FFFFFF;font-size:13px;text-align:center;line-height:21px;cursor:default;", i.innerHTML = "HEX", i.addEventListener("click", (function (e) { var t = e.target.textContent, i = A.element.querySelector(".colorCode").value; if (A.element.querySelector(".opacityRange")) var o = Number(A.element.querySelector(".opacityRange").value); "HEX" === t ? e.target.innerHTML = "RGB" : "RGB" === t && (e.target.innerHTML = "HEX"), A.setColor(i, o) })), e.appendChild(i), e }, colorRgbToHex: function (A) { if (A) { var e = (A = A.toLowerCase()).replace(/rgba?\(/, "").replace(/\)/, "").replace(/[\s+]/g, "").split(","), t = parseFloat(e[3] || 1), i = Math.floor(t * parseInt(e[0], 0) + 255 * (1 - t)), o = Math.floor(t * parseInt(e[1], 0) + 255 * (1 - t)), n = Math.floor(t * parseInt(e[2], 0) + 255 * (1 - t)); return "#" + ("0" + i.toString(16)).slice(-2) + ("0" + o.toString(16)).slice(-2) + ("0" + n.toString(16)).slice(-2) } return A }, colorHexToRgb: function (A, e) { var t = A.toLowerCase(); if (t && /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(t)) { if (4 === t.length) { for (var i = "#", o = 1; 4 > o; o += 1) i += t.slice(o, o + 1).concat(t.slice(o, o + 1)); t = i } for (var n = [], r = 1; 7 > r; r += 2) n.push(parseInt("0x" + t.slice(r, r + 2), 0)); if (!isNaN(e)) { var a = Number(e); return 0 > a || a > 1 ? t : "rgba(" + n.join(",") + "," + a + ")" } return "rgb(" + n.join(",") + ")" } return t }, checkColor: function (A) { var e = {}; if (A) { var t = A.toLowerCase(); t && /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(t) ? (e.color = !0, e.hex = !0, e.rgb = !1, e.hsl = !1, e.hexLength = 4 === t.length ? 3 : 6) : t && /^rgb/.test(t) ? (e.color = !0, e.hex = !1, e.rgb = !0, e.hsl = !1) : t && /^hsl/.test(t) ? (e.color = !0, e.hex = !1, e.rgb = !1, e.hsl = !0) : (e.color = !1, e.hex = !1, e.rgb = !1, e.hsl = !1) } else e.color = !1, e.hex = !1, e.rgb = !1, e.hsl = !1; return e }, setColor: function (A, e) { var t = this.defaultSetting; if (t.picker || t.colorCode) { var i = this.checkColor(A); if (i.color) { var o = "", n = "", r = A.toLowerCase(); if (i.hex) { if (3 === i.hexLength) { for (var a = "#", s = 1; 4 > s; s += 1) a += r.slice(s, s + 1).concat(r.slice(s, s + 1)); r = a } n = r, o = this.colorHexToRgb(A, e) } else i.rgb && (n = this.colorRgbToHex(A), o = r); if (o) { if (t.picker) { xh.css(this.element.querySelector(".colorShow"), { "background-color": o }); var l = this.getRgbNumber(n); 3 === l.length && (this.element.querySelector(".redRange").value = l[0], this.element.querySelector(".greenRange").value = l[1], this.element.querySelector(".blueRange").value = l[2], e && (this.element.querySelector(".opacityRange").value = e)) } if (t.colorCode) { var c = this.element.querySelector(".colorCode"); c.value = n; var h = this.element.querySelector(".colorCodeBtn").textContent; "HEX" === h ? c.value = n : "RGB" === h && (c.value = o) } this.colorInputDom.value = o, xh.simulateEvent(this.colorInputDom, "change") } } } }, getRgbNumber: function (A) { var e = [], t = this.checkColor(A); if (t.color) { var i = A.toLowerCase(); if (t.hex) { if (3 === t.hexLength) { for (var o = "#", n = 1; 4 > n; n += 1) o += i.slice(n, n + 1).concat(i.slice(n, n + 1)); i = o } for (var r = 1; 7 > r; r += 2) e.push(parseInt("0x" + i.slice(r, r + 2), 0)) } } return e } }; var Yh = {}; Yh.fullScreen = function (A) { if (!A) return !1; if (A.requestFullscreen) A.requestFullscreen(); else if (A.mozRequestFullScreen) A.mozRequestFullScreen(); else if (A.webkitRequestFullscreen) A.webkitRequestFullscreen(); else { if (!A.msRequestFullscreen) return !1; A.msRequestFullscreen() } }, Yh.exitFullScreen = function () { document.exitFullscreen ? document.exitFullscreen() : document.mozCancelFullScreen ? document.mozCancelFullScreen() : document.webkitCancelFullScreen ? document.webkitCancelFullScreen() : document.msExitFullscreen && document.msExitFullscreen() }, Yh.onFullScreenChanged = function (A) { var e = function () { A && A() }; document.onfullscreenchange = e, document.onwebkitfullscreenchange = e, document.documentElement.onwebkitfullscreenchange = e, document.onmozfullscreenchange = e, document.onmsfullscreenchange = e }, Yh.inFullScreen = function () { return "webkitIsFullScreen" in document ? Boolean(document.webkitIsFullScreen) : "fullscreenElement" in document ? Boolean(document.fullscreenElement) : "mozFullScreenElement" in document ? Boolean(document.mozFullScreenElement) : "msFullscreenElement" in document ? Boolean(document.msFullscreenElement) : Boolean(document.querySelector(".viewer-fill-browser")) }, Yh.findFullScreenElement = function () { return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement }, Yh.isFullScreenAvailable = function (A) { return A.requestFullscreen || A.mozRequestFullScreen || A.webkitRequestFullscreen || A.msRequestFullscreen }; var Wh = Yh, Jh = { 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 }; function zh(A, e, t) { return 0 > t && (t += 1), t > 1 && (t -= 1), 1 / 6 > t ? A + 6 * (e - A) * t : .5 > t ? e : 2 / 3 > t ? A + 6 * (e - A) * (2 / 3 - t) : A } var Zh, Xh = function (A, e, t, i) { return void 0 === i && void 0 === t ? this.set(A, e) : this.setRGB(A, e, t, i) }; Object.assign(Xh.prototype, { isColor: !0, r: 1, g: 1, b: 1, a: 1, set: function (A, e) { return "number" == typeof A ? this.setHex(A) : "string" == typeof A && this.setStyle(A), void 0 !== e && this.setAlpha(e), this }, setHex: function (A, e) { return A = Math.floor(A), this.r = (A >> 16 & 255) / 255, this.g = (A >> 8 & 255) / 255, this.b = (255 & A) / 255, this.setAlpha(e), this }, setAlpha: function (A) { return "number" == typeof A ? (A > 1 && (A = 1), 0 > A && (A = 0), this.a = A) : isNaN(parseFloat(A)) ? this.a = 1 : ((A = parseFloat(A)) > 1 && (A = 1), 0 > A && (A = 0), this.a = A), this }, setRGB: function (A, e, t, i) { return this.r = A > 1 ? Math.min(255, parseInt(A, 10)) / 255 : A, this.g = e > 1 ? Math.min(255, parseInt(e, 10)) / 255 : e, this.b = t > 1 ? Math.min(255, parseInt(t, 10)) / 255 : t, this.setAlpha(i), this }, setHSL: function (A, e, t, i) { if (A = Xc.euclideanModulo(A, 1), e = Xc.clamp(e, 0, 1), t = Xc.clamp(t, 0, 1), 0 === e) this.r = this.g = this.b = t; else { var o = t > .5 ? t + e - t * e : t * (1 + e), n = 2 * t - o; this.r = zh(n, o, A + 1 / 3), this.g = zh(n, o, A), this.b = zh(n, o, A - 1 / 3) } return this.a = i, this }, setStyle: function (A) { var e = null; if (e = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(A)) { var t = null, i = e[2]; switch (e[1]) { case "rgb": case "rgba": if (t = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(i)) return this.r = Math.min(255, parseInt(t[1], 10)) / 255, this.g = Math.min(255, parseInt(t[2], 10)) / 255, this.b = Math.min(255, parseInt(t[3], 10)) / 255, this.setAlpha(t[5]), this; if (t = /^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(i)) return this.r = Math.min(100, parseInt(t[1], 10)) / 100, this.g = Math.min(100, parseInt(t[2], 10)) / 100, this.b = Math.min(100, parseInt(t[3], 10)) / 100, this.setAlpha(t[5]), this; break; case "hsl": case "hsla": if (t = /^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(i)) { var o = parseFloat(t[1]) / 360, n = parseInt(t[2], 10) / 100, r = parseInt(t[3], 10) / 100; return this.setAlpha(t[5]), this.setHSL(o, n, r) } } } else if (e = /^\#([A-Fa-f0-9]+)$/.exec(A)) { var a, s = (a = e[1]).length; if (3 === s) return this.r = parseInt(a.charAt(0) + a.charAt(0), 16) / 255, this.g = parseInt(a.charAt(1) + a.charAt(1), 16) / 255, this.b = parseInt(a.charAt(2) + a.charAt(2), 16) / 255, this; if (6 === s) return this.r = parseInt(a.charAt(0) + a.charAt(1), 16) / 255, this.g = parseInt(a.charAt(2) + a.charAt(3), 16) / 255, this.b = parseInt(a.charAt(4) + a.charAt(5), 16) / 255, this } A && A.length > 0 && (void 0 !== (a = Jh[A]) ? this.setHex(a) : Bh.warn("Color: Unknown color " + A)); return this }, getHex: function () { return 255 * this.r << 16 ^ 255 * this.g << 8 ^ 255 * this.b << 0 }, getHexString: function () { return ("000000" + this.getHex().toString(16)).slice(-6) }, getHSL: function () { var A = { h: 0, s: 0, l: 0, a: 1 }, e = this.r, t = this.g, i = this.b, o = Math.max(e, t, i), n = Math.min(e, t, i), r = 0, a = 0, s = (n + o) / 2; if (n === o) r = 0, a = 0; else { var l = o - n; switch (a = s > .5 ? l / (2 - o - n) : l / (o + n), o) { case e: r = (t - i) / l + (i > t ? 6 : 0); break; case t: r = (i - e) / l + 2; break; case i: r = (e - t) / l + 4 } r /= 6 } return A.h = r, A.s = a, A.l = s, A.a = this.a, A }, getRGB: function () { return "rgb(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + ")" }, getRGBA: function () { return "rgba(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + "," + this.a + ")" }, getAlpha: function () { return this.a }, getStyle: function () { return "rgb(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + ")" }, offsetHSL: (Zh = {}, function (A, e, t) { return this.getHSL(Zh), Zh.h += A, Zh.s += e, Zh.l += t, this.setHSL(Zh.h, Zh.s, Zh.l), this } ), fromArray: function (A, e) { return void 0 === e && (e = 0), this.r = A[e], this.g = A[e + 1], this.b = A[e + 2], this.a = A[e + 3] || 1, this }, toArray: function (A, e) { return void 0 === A && (A = []), void 0 === e && (e = 0), A[e] = this.r, A[e + 1] = this.g, A[e + 2] = this.b, A[e + 3] = this.a, A }, toRGBArray: function (A, e) { return void 0 === A && (A = []), void 0 === e && (e = 0), A[e] = 255 * this.r, A[e + 1] = 255 * this.g, A[e + 2] = 255 * this.b, A[e + 3] = 255 * this.a, A }, toJSON: function () { return this.getHex() } }), Object.defineProperties(Xh.prototype, { red: { get: function () { return this.r }, set: function (A) { this.r = A } }, green: { get: function () { return this.g }, set: function (A) { this.g = A } }, blue: { get: function () { return this.b }, set: function (A) { this.b = A } }, alpha: { get: function () { return this.a }, set: function (A) { this.a = A } }, opacity: { get: function () { return this.a }, set: function (A) { this.a = A } } }); var _h = ["uniform bool receiveShadow;", "uniform vec3 ambientLightColor;", "uniform vec3 lightProbe[ 9 ];", "vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {", " float x = normal.x, y = normal.y, z = normal.z;", " vec3 result = shCoefficients[ 0 ] * 0.886227;", " result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;", " result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;", " result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;", " result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;", " result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;", " result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );", " result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;", " result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );", " return result;", "}", "vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {", " vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );", " vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );", " return irradiance;", "}", "vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {", " vec3 irradiance = ambientLightColor;", " #ifndef PHYSICALLY_CORRECT_LIGHTS", " irradiance *= PI;", " #endif", " return irradiance;", "}", "#if NUM_DIR_LIGHTS > 0", " struct DirectionalLight {", " vec3 direction;", " vec3 color;", " };", " uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];", " #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0", " struct DirectionalLightShadow {", " float shadowBias;", " float shadowRadius;", " vec2 shadowMapSize;", " };", " uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];", " #endif", " void getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {", " directLight.color = directionalLight.color;", " directLight.direction = directionalLight.direction;", " directLight.visible = true;", " }", "#endif", "#if NUM_POINT_LIGHTS > 0", " struct PointLight {", " vec3 position;", " vec3 color;", " float distance;", " float decay;", " };", " uniform PointLight pointLights[ NUM_POINT_LIGHTS ];", " #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0", " struct PointLightShadow {", " float shadowBias;", " float shadowRadius;", " vec2 shadowMapSize;", " float shadowCameraNear;", " float shadowCameraFar;", " };", " uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];", " #endif", " void getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {", " vec3 lVector = pointLight.position - geometry.position;", " directLight.direction = normalize( lVector );", " float lightDistance = length( lVector );", " directLight.color = pointLight.color;", " directLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );", " directLight.visible = ( directLight.color != vec3( 0.0 ) );", " }", "#endif", "#if NUM_SPOT_LIGHTS > 0", " struct SpotLight {", " vec3 position;", " vec3 direction;", " vec3 color;", " float distance;", " float decay;", " float coneCos;", " float penumbraCos;", " };", " uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];", " #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0", " struct SpotLightShadow {", " float shadowBias;", " float shadowRadius;", " vec2 shadowMapSize;", " };", " uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];", " #endif", " void getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {", " vec3 lVector = spotLight.position - geometry.position;", " directLight.direction = normalize( lVector );", " float lightDistance = length( lVector );", " float angleCos = dot( directLight.direction, spotLight.direction );", " if ( angleCos > spotLight.coneCos ) {", " float spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );", " directLight.color = spotLight.color;", " directLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );", " directLight.visible = true;", " } else {", " directLight.color = vec3( 0.0 );", " directLight.visible = false;", " }", " }", "#endif", "#if NUM_RECT_AREA_LIGHTS > 0", " struct RectAreaLight {", " vec3 color;", " vec3 position;", " vec3 halfWidth;", " vec3 halfHeight;", " };", " uniform sampler2D ltcMat; uniform sampler2D ltcMag;", " uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];", "#endif", "#if NUM_HEMI_LIGHTS > 0", " struct HemisphereLight {", " vec3 direction;", " vec3 skyColor;", " vec3 groundColor;", " };", " uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];", " vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {", " float dotNL = dot( geometry.normal, hemiLight.direction );", " float hemiDiffuseWeight = 0.5 * dotNL + 0.5;", " vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );", " #ifndef PHYSICALLY_CORRECT_LIGHTS", " irradiance *= PI;", " #endif", " return irradiance;", " }", "#endif", "#if defined( USE_ENVMAP ) && defined( PHYSICAL )", " vec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {", " vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );", " #ifdef ENVMAP_TYPE_CUBE", " vec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );", " #ifdef TEXTURE_LOD_EXT", " vec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );", " #else", " vec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );", " #endif", " envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;", " #elif defined( ENVMAP_TYPE_CUBE_UV )", " vec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );", " vec4 envMapColor = textureCubeUV( queryVec, 1.0 );", " #else", " vec4 envMapColor = vec4( 0.0 );", " #endif", " return PI * envMapColor.rgb * envMapIntensity;", " }", " float getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {", " float maxMIPLevelScalar = float( maxMIPLevel );", " float desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );", " return clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );", " }", " vec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {", " #ifdef ENVMAP_MODE_REFLECTION", " vec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );", " #else", " vec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );", " #endif", " reflectVec = inverseTransformDirection( reflectVec, viewMatrix );", " float specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );", " #ifdef ENVMAP_TYPE_CUBE", " vec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );", " #ifdef TEXTURE_LOD_EXT", " vec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );", " #else", " vec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );", " #endif", " envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;", " #elif defined( ENVMAP_TYPE_CUBE_UV )", " vec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );", " vec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));", " #elif defined( ENVMAP_TYPE_EQUIREC )", " vec2 sampleUV;", " sampleUV.y = saturate( reflectVec.y * 0.5 + 0.5 );", " sampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;", " #ifdef TEXTURE_LOD_EXT", " vec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );", " #else", " vec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );", " #endif", " envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;", " #elif defined( ENVMAP_TYPE_SPHERE )", " vec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );", " #ifdef TEXTURE_LOD_EXT", " vec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );", " #else", " vec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );", " #endif", " envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;", " #endif", " return envMapColor.rgb * envMapIntensity;", " }", "#endif"].join("\n"), $h = ["", "GeometricContext geometry;", "geometry.position = - vViewPosition;", "geometry.normal = normal;", "geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );", "#ifdef CLEARCOAT", "geometry.clearcoatNormal = clearcoatNormal;", "#endif", "IncidentLight directLight;", "#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )", "PointLight pointLight;", "#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0", "PointLightShadow pointLightShadow;", "#endif", "#pragma unroll_loop_start", "for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {", "pointLight = pointLights[ i ];", "getPointDirectLightIrradiance( pointLight, geometry, directLight );", "#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )", "pointLightShadow = pointLightShadows[ i ];", "directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;", "#endif", "RE_Direct( directLight, geometry, material, reflectedLight );", "}", "#endif", "#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )", "SpotLight spotLight;", "#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0", "SpotLightShadow spotLightShadow;", "#endif", "#pragma unroll_loop_start", "for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {", "spotLight = spotLights[ i ];", "getSpotDirectLightIrradiance( spotLight, geometry, directLight );", "#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )", "spotLightShadow = spotLightShadows[ i ];", "directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;", "#endif", "RE_Direct( directLight, geometry, material, reflectedLight );", "}", "#pragma unroll_loop_end", "#endif", "#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )", "DirectionalLight directionalLight;", "#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0", "DirectionalLightShadow directionalLightShadow;", "#endif", "#pragma unroll_loop_start", "for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {", "directionalLight = directionalLights[ i ];", "getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );", "#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )", "directionalLightShadow = directionalLightShadows[ i ];", "directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;", "#endif", "RE_Direct( directLight, geometry, material, reflectedLight );", "}", "#pragma unroll_loop_end", "#endif", "#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )", "RectAreaLight rectAreaLight;", "#pragma unroll_loop_start", "for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {", "rectAreaLight = rectAreaLights[ i ];", "RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );", "}", "#pragma unroll_loop_end", "#endif", "#if defined( RE_IndirectDiffuse )", "vec3 iblIrradiance = vec3( 0.0 );", "vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );", "irradiance += getLightProbeIrradiance( lightProbe, geometry );", "#if ( NUM_HEMI_LIGHTS > 0 )", "#pragma unroll_loop_start", "for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {", "irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );", "}", "#pragma unroll_loop_end", "#endif", "#endif", "#if defined( RE_IndirectSpecular )", "vec3 radiance = vec3( 0.0 );", "vec3 clearcoatRadiance = vec3( 0.0 );", "#endif"].join("\n"), Ad = ["#ifdef DOUBLE_SIDED", " float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );", "#else", " float flipNormal = 1.0;", "#endif\n"].join("\n"), ed = ["#ifdef FLAT_SHADED", " vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );", " vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );", " vec3 normal = normalize( cross( fdx, fdy ) );", "#else", " vec3 normal = normalize( vNormal ) * flipNormal;", "#endif", "#ifdef USE_NORMALMAP", " normal = perturbNormal2Arb( -vViewPosition, normal );", "#elif defined( USE_BUMPMAP )", " normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );", "#endif", "vec3 geometryNormal = normal;"].join("\n"), td = ["GeometricContext geometry;", "geometry.position = - vViewPosition;", "#if NUM_CLIPPING_PLANES == 1", " if (gl_FrontFacing) geometry.normal = normal;", " else if (fillFaceClipDistance < 0.0) geometry.normal = -clippingPlanes[0].xyz;", " else geometry.normal = -normal;", "#else", " geometry.normal = normal;", "#endif", "geometry.viewDir = normalize( vViewPosition );", "IncidentLight directLight;", "#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )", " PointLight pointLight;", " for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {", " pointLight = pointLights[ i ];", " getPointDirectLightIrradiance( pointLight, geometry, directLight );", " #ifdef USE_SHADOWMAP", " directLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ,pointLight.shadowCameraNear, pointLight.shadowCameraFar) : 1.0;", " #endif", " RE_Direct( directLight, geometry, material, reflectedLight );", " }", "#endif", "#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )", " SpotLight spotLight;", " for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {", " spotLight = spotLights[ i ];", " getSpotDirectLightIrradiance( spotLight, geometry, directLight );", " #ifdef USE_SHADOWMAP", " directLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;", " #endif", " RE_Direct( directLight, geometry, material, reflectedLight );", " }", "#endif", "#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )", " DirectionalLight directionalLight;", " for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {", " directionalLight = directionalLights[ i ];", " getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );", " #ifdef USE_SHADOWMAP", " directLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;", " #endif", " RE_Direct( directLight, geometry, material, reflectedLight );", " }", "#endif", "#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )", " RectAreaLight rectAreaLight;", " for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {", " rectAreaLight = rectAreaLights[ i ];", " RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );", " }", "#endif", "#if defined( RE_IndirectDiffuse )", " vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );", " #ifdef USE_LIGHTMAP", " vec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;", " #ifndef PHYSICALLY_CORRECT_LIGHTS", " lightMapIrradiance *= PI; // factor of PI should not be present; included here to prevent breakage", " #endif", " irradiance += lightMapIrradiance;", " #endif", " #if ( NUM_HEMI_LIGHTS > 0 )", " for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {", " irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );", " }", " #endif", " #if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )", " irradiance += getLightProbeIndirectIrradiance( /*lightProbe,*/ geometry, 8 );", " #endif", " RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );", "#endif", "#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )", " vec3 radiance = getLightProbeIndirectRadiance( /*specularLightProbe,*/ geometry, Material_BlinnShininessExponent( material ), 8 );", " #ifndef STANDARD", " vec3 clearCoatRadiance = getLightProbeIndirectRadiance( /*specularLightProbe,*/ geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );", " #else", " vec3 clearCoatRadiance = vec3( 0.0 );", " #endif", " RE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );", "#endif"].join("\n"), id = ["#define PHONG", "uniform vec3 diffuse;", "uniform vec3 emissive;", "uniform vec3 specular;", "uniform float shininess;", "uniform float opacity;", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "void main() {", " #include ", " vec4 diffuseColor = vec4( diffuse, opacity );", " ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );", " vec3 totalEmissiveRadiance = emissive;", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " float fillFaceClipDistance = 0.0;", " #if NUM_CLIPPING_PLANES == 1", " vec4 plane = clippingPlanes[ 0 ];", " fillFaceClipDistance = dot( vViewPosition, plane.xyz ) - plane.w;", " #endif", " #include ", " #include ", " #include ", " vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;", " #include ", " gl_FragColor = vec4( outgoingLight, diffuseColor.a );", " #include ", " #include ", " #include ", " #include ", " #include ", "}"].join("\n"), od = ["#define PHONG", "varying vec3 vViewPosition;", "#ifndef FLAT_SHADED", "varying vec3 vNormal;", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "void main() {", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#ifndef FLAT_SHADED", "vNormal = normalize( transformedNormal );", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "vViewPosition = - mvPosition.xyz;", "#include ", "#include ", "#include ", "#include ", "}"].join("\n"), nd = ["#define PHYSICAL", "varying vec3 vViewPosition;", "#ifndef FLAT_SHADED", "varying vec3 vNormal;", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "void main() {", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#ifndef FLAT_SHADED", "vNormal = normalize( transformedNormal );", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "vViewPosition = - mvPosition.xyz;", "#include ", "#include ", "#include ", "}"].join("\n"), rd = ["#define PHYSICAL", "uniform vec3 diffuse;", "uniform vec3 emissive;", "uniform float roughness;", "uniform float metalness;", "uniform float opacity;", "#ifndef STANDARD", "uniform float clearCoat;", "uniform float clearCoatRoughness;", "#endif", "varying vec3 vViewPosition;", "#ifndef FLAT_SHADED", "varying vec3 vNormal;", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "void main() {", "#include ", "vec4 diffuseColor = vec4( diffuse, opacity );", "vec3 totalEmissiveRadiance = emissive;", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "const mat4 diffuseMatrix = mat4(-0.07425443828105927, -0.05652861297130585, 0.12247831374406815, 0.2297295778989792,", " -0.05652860924601555, 0.034799136221408844, -0.08437120914459229, -0.13896968960762024,", " 0.12247832119464874, -0.08437121659517288, 0.021763987839221954, 0.12510454654693604,", " 0.2297295778989792, -0.13896968960762024, 0.12510454654693604, 0.6190560460090637);", "const vec3 sunDir = vec3(-0.6632131338119507, 0.5486575961112976, -0.509041428565979);", "vec3 viewDir = normalize( vViewPosition );", "vec4 diffuseDir = diffuseMatrix * vec4(normal, 1.0);", "float diffuseTerm = dot(vec4(normal, 1.0), diffuseDir);", "float nv = max(dot(normal, -viewDir), 0.0);", "float vl = max(dot(viewDir, sunDir), 0.0);", "diffuseTerm = diffuseTerm + (nv * (1.0 - vl)) * 0.8;", "vec3 H = -normalize(sunDir + viewDir);", "float nh = max(dot(normal, H), 0.0);", "float specularTerm = pow(nh, 100.0);", "vec3 color = 1.05 * vec3(0.5, 0.497, 0.49) * (diffuse * diffuseTerm + vec3(specularTerm)) + diffuse * 0.5;", "vec3 outgoingLight = color + totalEmissiveRadiance;", "gl_FragColor = vec4( outgoingLight, diffuseColor.a );", "#include ", "#include ", "#include ", "#include ", "#include ", "}"].join("\n"), ad = ["#define EIMMODELPHYSICAL", "mat3 transpose2( const in mat3 v ) {\n mat3 tmp;\n tmp[0] = vec3(v[0].x, v[1].x, v[2].x);\n tmp[1] = vec3(v[0].y, v[1].y, v[2].y);\n tmp[2] = vec3(v[0].z, v[1].z, v[2].z);\n return tmp;\n}\n", "varying vec3 vViewPosition;", "varying vec3 vWorldPosition;", "#ifndef FLAT_SHADED", " varying vec3 vNormal;", " #ifdef USE_TANGENT", " varying vec3 vTangent;", " varying vec3 vBitangent;", " #endif", "#endif", "#ifdef USE_INSTANCE", " attribute float vState;", " attribute float vState2;", " varying float fState;", " attribute float vMirror;", " attribute vec4 aColor;", " varying vec4 vaColor;", " attribute vec3 mcol0;", " attribute vec3 mcol1;", " attribute vec3 mcol2;", " attribute vec3 mcol3;", "#ifdef INSTANCE_STATE_TERTIARY", " attribute float vState3;", "#endif", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "mat3 inverse_mat3(in mat3 m)", "{", " float determinant =", " m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])", " - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])", " + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);", " mat3 inverse;", " inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]);", " inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]);", " inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]);", " inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]);", " inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]);", " inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]);", " inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]);", " inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]);", " inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]);", " inverse /= determinant;", " return inverse;", "}", "void main() {", " #include ", " #ifdef USE_TRANSFORM_AOMAP", " #if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )", " vUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;", " #endif", " #endif ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", "#ifdef USE_INSTANCE", " vaColor = aColor;", " #ifdef INSTANCE_STATE_SECONDARY", " fState = vState2;", " #else", " fState = vState;", " #endif", " #ifdef INSTANCE_STATE_TERTIARY", " fState = vState3;", " #endif", " transformed = vec3(mat4(vec4(mcol0, 0.0),", " vec4(mcol1, 0.0),", " vec4(mcol2, 0.0),", " vec4(mcol3, 1.0)) * vec4(transformed, 1.0));", " #ifdef USE_INSTANCE_NORMAL", " mat3 normalMat = mat3(mcol0, mcol1, mcol2);", " normalMat = inverse_mat3(normalMat);", " normalMat = transpose2(normalMat);", " transformedNormal = normalMat * objectNormal;", " transformedNormal = normalMatrix * transformedNormal;", " #ifdef FLIP_SIDED", " transformedNormal = - transformedNormal;", " #endif", " transformedNormal = normalize( transformedNormal );", " #endif", "#endif", "#ifndef FLAT_SHADED", " vNormal = normalize( transformedNormal );", " #ifdef USE_TANGENT", " vTangent = normalize( transformedTangent );", " vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );", " #endif", "#endif", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " vViewPosition = - mvPosition.xyz;", " // 热力图", " #if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )|| defined(HEATMAPPOINTSCOUNT)", " vec4 worldPosition = vec4( transformed, 1.0 );", " #ifdef USE_INSTANCING", " worldPosition = instanceMatrix * worldPosition;", " #endif", " worldPosition = modelMatrix * worldPosition;", " vWorldPosition = vec3(worldPosition.xyz);", " #endif", " #include ", " #include ", "#ifdef USE_INSTANCE", " if (vMirror <= - 0.01){", " vNormal = vNormal * - 1.0;}", "#endif", "}"].join("\n"), sd = ["#define EIMMODELPHYSICAL", "#ifdef PHYSICAL", " #define REFLECTIVITY", " #define CLEARCOAT", " #define TRANSPARENCY", "#endif", "uniform vec3 diffuse;", "uniform vec3 emissive;", "uniform float roughness;", "uniform float metalness;", "uniform float opacity;", "#ifdef TRANSPARENCY", " uniform float transparency;", "#endif", "#ifdef REFLECTIVITY", " uniform float reflectivity;", "#endif", "#ifdef CLEARCOAT", " uniform float clearcoat;", " uniform float clearcoatRoughness;", "#endif", "#ifdef USE_SHEEN", " uniform vec3 sheen;", "#endif", "uniform float imageFade;", "varying vec3 vViewPosition;", "varying vec3 vWorldPosition;", "#ifndef FLAT_SHADED", " varying vec3 vNormal;", " #ifdef USE_TANGENT", " varying vec3 vTangent;", " varying vec3 vBitangent;", " #endif", "#endif", "#ifdef USE_INSTANCE", " varying vec4 vaColor;", " varying float fState;", "#endif", "uniform float shift;", "uniform float A;", "uniform float B;", "uniform float C;", "uniform float D;", "uniform float E;", "uniform float F;", "uniform float scale;", "uniform vec4 blinkColor;", "uniform float colorState;", "#ifdef HEATMAPPOINTSCOUNT", " uniform float heatmapPoints[HEATMAPPOINTSCOUNT];", " uniform sampler2D heatmapTexture;", "#endif", "vec3 toneMapCanonFilmic(vec3 color)", "{", " color *= (1.0 / shift);", " return (((color * (A * color + C * B)) / (color * (A * color + B) + D * F))) * (1.0 / scale);", "}", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "vec3 hdrDecode(in vec4 rgbm) {", "const float rgbmScale = 2.82842712;", "vec3 r = rgbm.rgb * (rgbmScale * (1.0 - rgbm.a));", "return r * r;", "}", "vec3 linearToGammaUnreal(in vec3 rgb) {", " return rgb / (rgb + 0.187) * 1.035 * (0.5 / shift);", "}", "bool floatEqual(in float x, in float y) {", " return (x >= y - 0.01) && (x <= y + 0.01);", "}", "bool floatNotEqual(in float x, in float y) {", " return (x <= y - 0.01) || (x >= y + 0.01);", "}", "void main() {", " #include ", " vec4 diffuseColor = vec4( diffuse, opacity );", " #ifdef USE_INSTANCE", " if (floatEqual(fState, -1.0)) ", " discard;", " if (floatNotEqual(fState, 0.0)) ", " diffuseColor = vaColor;", " #endif", " vec4 selectedColor = diffuseColor;", " ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );", " vec3 totalEmissiveRadiance = emissive;", " #include ", " #ifdef USE_MAP", " vec4 texelColor = texture2D( map, vUv );", " texelColor = mapTexelToLinear( texelColor );", " diffuseColor = vec4( mix(diffuseColor.rgb , texelColor.rgb, imageFade),opacity);", " #ifdef USE_INSTANCE", " if (floatNotEqual(fState, 0.0)) ", " diffuseColor = vaColor;", " #endif", " #endif", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", "float flipNormal = 1.0;", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", "vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;", "#ifdef USE_COLORWITHOUTLIGHT", " gl_FragColor = diffuseColor;", "#else", " #ifdef TRANSPARENCY", " diffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );", " #endif", " gl_FragColor = vec4( outgoingLight, diffuseColor.a );", "#endif", "#ifdef USE_INSTANCE", " #ifdef NOTAFFECTEDBYLIGHT", " if (floatEqual(fState, 2.0))", " gl_FragColor = selectedColor;", " #endif", " #ifdef USE_MAP", " if (floatEqual(fState, 3.0))", " gl_FragColor = vaColor;", " #endif", "#endif", "#if defined( TONE_MAPPING )", " #if defined(USE_LIGHTMAP)", " gl_FragColor.rgb = linearToGammaUnreal(gl_FragColor.rgb );", " #else", " gl_FragColor.rgb = toneMapCanonFilmic( gl_FragColor.rgb );", " #endif", "#endif", "#ifdef USE_INSTANCE", " if (floatEqual(fState, 5.0) && floatEqual(colorState, 1.0))", " gl_FragColor = blinkColor;", "#else", " if (floatEqual(colorState, 1.0))", " gl_FragColor = blinkColor;", " #ifdef NOTAFFECTEDBYLIGHT", " if (floatEqual(colorState, 2.0))", " gl_FragColor = selectedColor;", " #endif", "#endif", "#include ", "#include ", "#include ", "#include ", "#ifdef HEATMAPPOINTSCOUNT", " float heatvalue = 0.0;", " for ( int i = 0; i < HEATMAPPOINTSCOUNT; i += 5 ) {", " float heatpointX = heatmapPoints[i];", " float heatpointY = heatmapPoints[i + 1];", " float heatpointZ = heatmapPoints[i + 2];", " // heatpointIndex保存的是当前热力点的热力值比上(最大热力和最小热力差)", " // 也就是在热力区间中的百分比位置,为0的时候表示最小热力值,1的时候表示最大热力值", " // 可以理解为就是热力点中心的热力值,只不过范围是0-1", " // 热力最大值和最小值分别是所有热力点中热力最大和最小的值", " float heatpointIndex = heatmapPoints[i + 3];", " float heatpointRadius = heatmapPoints[i + 4];", " float dis = distance(vWorldPosition, vec3(heatpointX, heatpointY, heatpointZ));", " if(dis < heatpointRadius) {", " float step = dis / heatpointRadius;", " // 根据距离计算当前片元在当前热力点下的热力值", " // step表示距离,范围0-1,越小表示距离热力点越近,热力越大,将距离区间0-1和热力区间heatpointIndex-0对应起来", " float currentvalue = (1.0 - step) * heatpointIndex;", " // 这里用到了一个颜色叠加的公式,把每个热点对当前片元产生的热力进行叠加,", " // 没有特殊逻辑,也可以简单相加", " heatvalue = heatvalue + currentvalue - heatvalue * currentvalue;", " if (heatvalue > 1.0) {", " heatvalue = 1.0;", " break;", " }", " }", " }", " if (heatvalue > 0.0) {", " vec4 color = texture2D(heatmapTexture, vec2(heatvalue, 0.5));", " heatvalue = 0.5*heatvalue + 0.5;//使下列因子范围为1-0.5", " color = vec4( mix(gl_FragColor.rgb, color.rgb, heatvalue),gl_FragColor.a);", " gl_FragColor = color;", " }", "#endif", "}"].join("\n"); tt.lights_pars = _h, tt.lights_template = $h, tt.normal_flip = Ad, tt.normal_fragment = ed, tt.meshphong_id_vert = od, tt.lights_fillFace_template = td, tt.fillFaceFragment = id, tt.standardVertex = ad, tt.bos3dStandardFragment = sd, tt.newStyleVertex = nd, tt.newStyleFragment = rd, it.fillFacePhong = { uniforms: Ge.merge([Xe.common, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.gradientmap, Xe.fog, Xe.lights, { emissive: { value: new LA(0) }, specular: { value: new LA(1118481) }, shininess: { value: 30 } }]), vertexShader: tt.meshphong_id_vert, fragmentShader: tt.fillFaceFragment }, it.newStyle = { vertexShader: tt.newStyleVertex, fragmentShader: tt.newStyleFragment }, it.bos3dStandard = { vertexShader: tt.standardVertex, fragmentShader: tt.bos3dStandardFragment }; var ld = function (A) { yr.call(this), this.type = "bos3dStandard", this.roughness = 1, this.metalness = 0, this.originRoughness = 1, this.originMetalness = 0, this.pureColor = 0, this.textureColor = 0, this.imageFade = 1, this.transparentEx = !1, this.shift = .5, this.A = .64, this.B = .03, this.C = .02, this.D = .54, this.E = 0, this.F = .81, this.scale = .92, this.shininess = 30, this.specular = new LA(0); var e = (new LA).setHex(3330982), t = [e.r, e.g, e.b, 1]; this.colorState = Yc.NONE, this.blinkColor = (new p).fromArray(t), this.uniforms = Ge.merge([Xe.common, Xe.specularmap, Xe.envmap, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.roughnessmap, Xe.metalnessmap, Xe.fog, Xe.lights, { emissive: { value: new LA(0) }, specular: { value: new LA(0) }, roughness: { value: .5 }, metalness: { value: .5 }, envMapIntensity: { value: 1 } }, { shift: { value: .5 }, A: { value: .64 }, B: { value: .03 }, C: { value: .02 }, D: { value: .54 }, E: { value: 0 }, F: { value: .81 }, scale: { value: .92 }, colorState: { value: 0 }, blinkColor: { value: (new p).fromArray(t) }, imageFade: { value: 1 }, heatmapPoints: { value: [] }, heatmapTexture: { value: null } }]), this.vertexShader = tt.standardVertex, this.fragmentShader = tt.bos3dStandardFragment, this.defaultAttributeValues = { color: [1, 1, 1], uv: [0, 0], uv2: [0, 0] }, void 0 !== A && (void 0 !== A.attributes && Bh.error("IBLMaterial: attributes should now be defined in THREE.BufferGeometry instead."), this.setValues(A)), this.lights && (this.uniforms = Ge.merge([this.uniforms, Xe.lights])), this.refreshUniforms && this.refreshUniforms() }; function cd(A, e) { var t = (65535 & A) + (65535 & e); return (A >> 16) + (e >> 16) + (t >> 16) << 16 | 65535 & t } function hd(A, e, t, i, o, n) { return cd((r = cd(cd(e, A), cd(i, n))) << (a = o) | r >>> 32 - a, t); var r, a } function dd(A, e, t, i, o, n, r) { return hd(e & t | ~e & i, A, e, o, n, r) } function pd(A, e, t, i, o, n, r) { return hd(e & i | t & ~i, A, e, o, n, r) } function gd(A, e, t, i, o, n, r) { return hd(e ^ t ^ i, A, e, o, n, r) } function ud(A, e, t, i, o, n, r) { return hd(t ^ (e | ~i), A, e, o, n, r) } function fd(A, e) { var t, i, o, n, r; A[e >> 5] |= 128 << e % 32, A[14 + (e + 64 >>> 9 << 4)] = e; var a = 1732584193, s = -271733879, l = -1732584194, c = 271733878; for (t = 0; A.length > t; t += 16) i = a, o = s, n = l, r = c, a = dd(a, s, l, c, A[t], 7, -680876936), c = dd(c, a, s, l, A[t + 1], 12, -389564586), l = dd(l, c, a, s, A[t + 2], 17, 606105819), s = dd(s, l, c, a, A[t + 3], 22, -1044525330), a = dd(a, s, l, c, A[t + 4], 7, -176418897), c = dd(c, a, s, l, A[t + 5], 12, 1200080426), l = dd(l, c, a, s, A[t + 6], 17, -1473231341), s = dd(s, l, c, a, A[t + 7], 22, -45705983), a = dd(a, s, l, c, A[t + 8], 7, 1770035416), c = dd(c, a, s, l, A[t + 9], 12, -1958414417), l = dd(l, c, a, s, A[t + 10], 17, -42063), s = dd(s, l, c, a, A[t + 11], 22, -1990404162), a = dd(a, s, l, c, A[t + 12], 7, 1804603682), c = dd(c, a, s, l, A[t + 13], 12, -40341101), l = dd(l, c, a, s, A[t + 14], 17, -1502002290), a = pd(a, s = dd(s, l, c, a, A[t + 15], 22, 1236535329), l, c, A[t + 1], 5, -165796510), c = pd(c, a, s, l, A[t + 6], 9, -1069501632), l = pd(l, c, a, s, A[t + 11], 14, 643717713), s = pd(s, l, c, a, A[t], 20, -373897302), a = pd(a, s, l, c, A[t + 5], 5, -701558691), c = pd(c, a, s, l, A[t + 10], 9, 38016083), l = pd(l, c, a, s, A[t + 15], 14, -660478335), s = pd(s, l, c, a, A[t + 4], 20, -405537848), a = pd(a, s, l, c, A[t + 9], 5, 568446438), c = pd(c, a, s, l, A[t + 14], 9, -1019803690), l = pd(l, c, a, s, A[t + 3], 14, -187363961), s = pd(s, l, c, a, A[t + 8], 20, 1163531501), a = pd(a, s, l, c, A[t + 13], 5, -1444681467), c = pd(c, a, s, l, A[t + 2], 9, -51403784), l = pd(l, c, a, s, A[t + 7], 14, 1735328473), a = gd(a, s = pd(s, l, c, a, A[t + 12], 20, -1926607734), l, c, A[t + 5], 4, -378558), c = gd(c, a, s, l, A[t + 8], 11, -2022574463), l = gd(l, c, a, s, A[t + 11], 16, 1839030562), s = gd(s, l, c, a, A[t + 14], 23, -35309556), a = gd(a, s, l, c, A[t + 1], 4, -1530992060), c = gd(c, a, s, l, A[t + 4], 11, 1272893353), l = gd(l, c, a, s, A[t + 7], 16, -155497632), s = gd(s, l, c, a, A[t + 10], 23, -1094730640), a = gd(a, s, l, c, A[t + 13], 4, 681279174), c = gd(c, a, s, l, A[t], 11, -358537222), l = gd(l, c, a, s, A[t + 3], 16, -722521979), s = gd(s, l, c, a, A[t + 6], 23, 76029189), a = gd(a, s, l, c, A[t + 9], 4, -640364487), c = gd(c, a, s, l, A[t + 12], 11, -421815835), l = gd(l, c, a, s, A[t + 15], 16, 530742520), a = ud(a, s = gd(s, l, c, a, A[t + 2], 23, -995338651), l, c, A[t], 6, -198630844), c = ud(c, a, s, l, A[t + 7], 10, 1126891415), l = ud(l, c, a, s, A[t + 14], 15, -1416354905), s = ud(s, l, c, a, A[t + 5], 21, -57434055), a = ud(a, s, l, c, A[t + 12], 6, 1700485571), c = ud(c, a, s, l, A[t + 3], 10, -1894986606), l = ud(l, c, a, s, A[t + 10], 15, -1051523), s = ud(s, l, c, a, A[t + 1], 21, -2054922799), a = ud(a, s, l, c, A[t + 8], 6, 1873313359), c = ud(c, a, s, l, A[t + 15], 10, -30611744), l = ud(l, c, a, s, A[t + 6], 15, -1560198380), s = ud(s, l, c, a, A[t + 13], 21, 1309151649), a = ud(a, s, l, c, A[t + 4], 6, -145523070), c = ud(c, a, s, l, A[t + 11], 10, -1120210379), l = ud(l, c, a, s, A[t + 2], 15, 718787259), s = ud(s, l, c, a, A[t + 9], 21, -343485551), a = cd(a, i), s = cd(s, o), l = cd(l, n), c = cd(c, r); return [a, s, l, c] } function md(A) { var e, t = "", i = 32 * A.length; for (e = 0; i > e; e += 8) t += String.fromCharCode(A[e >> 5] >>> e % 32 & 255); return t } function Cd(A) { var e, t = []; for (t[(A.length >> 2) - 1] = void 0, e = 0; t.length > e; e += 1) t[e] = 0; var i = 8 * A.length; for (e = 0; i > e; e += 8) t[e >> 5] |= (255 & A.charCodeAt(e / 8)) << e % 32; return t } function yd(A) { var e, t, i = ""; for (t = 0; A.length > t; t += 1) e = A.charCodeAt(t), i += "0123456789abcdef".charAt(e >>> 4 & 15) + "0123456789abcdef".charAt(15 & e); return i } function vd(A) { return unescape(encodeURIComponent(A)) } function Id(A) { return function (A) { return md(fd(Cd(A), 8 * A.length)) }(vd(A)) } function Ed(A, e) { return function (A, e) { var t, i, o = Cd(A), n = [], r = []; for (n[15] = r[15] = void 0, o.length > 16 && (o = fd(o, 8 * A.length)), t = 0; 16 > t; t += 1) n[t] = 909522486 ^ o[t], r[t] = 1549556828 ^ o[t]; return i = fd(n.concat(Cd(e)), 512 + 8 * e.length), md(fd(r.concat(i), 640)) }(vd(A), vd(e)) } function Bd(A, e, t) { return e ? t ? Ed(e, A) : yd(Ed(e, A)) : t ? Id(A) : yd(Id(A)) } (ld.prototype = Object.create(yr.prototype)).constructor = ld, ld.prototype.destroy = function () { yr.prototype.dispose.call(this), this.blinkColor = null, this.uniforms = null, this.defaultAttributeValues = null, this.lights = null }, ld.prototype.copy = function (A) { return yr.prototype.copy.call(this, A), this.shift = A.shift, this.A = A.A, this.B = A.B, this.C = A.C, this.D = A.D, this.E = A.E, this.F = A.F, this.scale = A.scale, this.colorState = A.colorState, this.blinkColor.copy(A.blinkColor), this.imageFade = A.imageFade, Object.assign(this.defines, A.defines), this }, ld.prototype.refreshUniforms = function () { this.uniforms.shift.value = this.shift, this.uniforms.A.value = this.A, this.uniforms.B.value = this.B, this.uniforms.C.value = this.C, this.uniforms.D.value = this.D, this.uniforms.E.value = this.E, this.uniforms.F.value = this.F, this.uniforms.scale.value = this.scale, this.uniforms.blinkColor.value.copy(this.blinkColor), this.uniforms.colorState.value = this.colorState, this.uniforms.imageFade.value = this.imageFade }, ld.prototype.setBlinkColor = function (A) { this.blinkColor.fromArray(A.toArray()), this.uniforms.blinkColor.value.copy(this.blinkColor), this.uniforms.colorState.value = Yc.BLINK }, ld.prototype.updateBlinkUniformValue = function (A, e) { this.uniforms.colorState.value = A, this.uniforms.blinkColor.value.copy(e) }, ld.prototype.resetBlinkUniformValue = function () { this.uniforms.colorState.value = this.colorState, this.uniforms.blinkColor.value.copy(this.blinkColor) }, Object.defineProperties(ld.prototype, { transparent: { set: function (A) { this.transparentEx = A, vc.notDepthWriteByTransparent && (this.depthWrite = !A) }, get: function () { return this.transparentEx } } }); var xd = { REGULAR: 0, FRACTAL: 1, DISORDER: 2 }, Sd = { type: xd.REGULAR, color1: new Xh(0, 0, 0, 1), color2: new Xh(255, 255, 255, 1), size: 10, level: 1, phase: 1, width: 32, height: 32, thresholdLow: 0, thresholdHigh: 1 }; function wd() { this.m = 2147483647, this.a = 16807, this.q = 127773, this.r = 2836, this.seed = 1, this.setSeed = function (A) { A > 0 || (A = -A % (this.m - 1) + 1), A > this.m - 1 && (A = this.m - 1), this.seed = A }, this.nextLong = function () { var A = this.a * (this.seed % this.q) - this.r * Math.floor(this.seed / this.q); return A > 0 || (A += this.m), this.seed = A, A }, this.next = function () { return this.nextLong() / this.m } } function Md(A, e, t) { this.width = A, this.height = e, this.randseed = t, this.gradients = new Array(A * e * 2); var i = new wd; i.setSeed(t); for (var o = 0; this.gradients.length > o; o += 2) { var n, r, a = i.next() * Math.PI * 2; n = Math.sin(a), r = Math.cos(a), this.gradients[o] = n, this.gradients[o + 1] = r } this.dot = function (A, e, t, i) { var o = 2 * (A + e * this.width); return this.gradients[o] * t + this.gradients[o + 1] * i }, this.lerp = function (A, e, t) { return A + t * (e - A) }, this.sCurve = function (A) { return A * A * (3 - 2 * A) }, this.getValue = function (A, e, t, i) { var o = Math.floor(A), n = Math.floor(e), r = A - o, a = e - n, s = o, l = n, c = o === this.width - 1 ? 0 : o + 1, h = n === this.height - 1 ? 0 : n + 1, d = this.dot(s, l, r, a), p = this.dot(c, l, r - 1, a), g = this.dot(s, h, r, a - 1), u = this.dot(c, h, r - 1, a - 1), f = this.lerp(d, p, this.sCurve(r)), m = this.lerp(g, u, this.sCurve(r)); return this.lerp(f, m, this.sCurve(a)) } } var bd, Ud, Fd = function (A) { var e = Object.assign({}, Sd, A); switch (e.type) { case xd.REGULAR: return function (A) { var e = 10 * A.width, t = 10 * A.height; if (!(A.color1 instanceof Xh)) return Bh.warn("color1 不合法"), null; if (!(A.color2 instanceof Xh)) return Bh.warn("color2 不合法"), null; var i = A.color1.toRGBArray(), o = A.color2.toRGBArray(), n = A.thresholdLow, r = A.thresholdHigh, a = 10 * A.size, s = A.phase; 1 === a && (a = 1.1); for (var l = new Array(e * t * 4), c = new Md(Math.ceil(e / a), Math.ceil(t / a), s), h = 0, d = 0, p = 0, g = 0, u = 0, f = 0, m = 0; t > m; m += 1) for (var C = 0; e > C; C += 1) { var y = (c.getValue(C / a, m / a) + 1) / 2; if (y > r) h = o[0], d = o[1], p = o[2]; else if (n > y) h = i[0], d = i[1], p = i[2]; else if (y >= n && r >= y || n === r) { var v = (y - n) / (r - n || 1); g = o[0] * v, u = o[1] * v, f = o[2] * v, h = i[0] * (v = 1 - v) + g, d = i[1] * v + u, p = i[2] * v + f } var I = 4 * (m * e + C); l[I] = h, l[I + 1] = d, l[I + 2] = p, l[I + 3] = 255 } var E = document.createElement("canvas"); E.width = e, E.height = t; for (var B = E.getContext("2d"), x = B.createImageData(e, t), S = 0, w = e * t * 4; w > S; S += 1) x.data[S] = l[S]; return B.putImageData(x, 0, 0), E.toDataURL() }(e); case xd.FRACTAL: return function (A) { var e = 10 * A.width, t = 10 * A.height; if (!(A.color1 instanceof Xh)) return Bh.warn("color1 不合法"), null; if (!(A.color2 instanceof Xh)) return Bh.warn("color2 不合法"), null; var i = A.color1.toRGBArray(), o = A.color2.toRGBArray(), n = A.thresholdLow, r = A.thresholdHigh, a = 10 * A.size, s = A.phase, l = A.level; 1 === a && (a = 1.1); for (var c = new Array(e * t * 4), h = [], d = a, p = 0, g = l; g > p; p += 1) { var u = new Md(Math.ceil(e / d), Math.ceil(t / d), s); d /= 2, h.push(u) } for (var f = 0, m = 0, C = 0, y = 0, v = 0, I = 0, E = 0; t > E; E += 1) for (var B = 0; e > B; B += 1) { for (var x = 0, S = a, w = 0, M = l; M > w; w += 1) x += h[w].getValue(B / S, E / S, s) * (l - w), S /= 2; var b = ((x /= l) + 1) / 2; if (b > r) f = o[0], m = o[1], C = o[2]; else if (n > b) f = i[0], m = i[1], C = i[2]; else if (b >= n && r >= b || n === r) { var U = (b - n) / (r - n || 1); y = o[0] * U, v = o[1] * U, I = o[2] * U, f = i[0] * (U = 1 - U) + y, m = i[1] * U + v, C = i[2] * U + I } var F = 4 * (E * e + B); c[F] = f, c[F + 1] = m, c[F + 2] = C, c[F + 3] = 255 } var K = document.createElement("canvas"); K.width = e, K.height = t; for (var Q = K.getContext("2d"), R = Q.createImageData(e, t), T = 0, k = e * t * 4; k > T; T += 1) R.data[T] = c[T]; return Q.putImageData(R, 0, 0), K.toDataURL() }(e); case xd.DISORDER: return function (A) { var e = 10 * A.width, t = 10 * A.height; if (!(A.color1 instanceof Xh)) return Bh.warn("color1 不合法"), null; if (!(A.color2 instanceof Xh)) return Bh.warn("color2 不合法"), null; var i = A.color1.toRGBArray(), o = A.color2.toRGBArray(), n = A.thresholdLow, r = A.thresholdHigh, a = 10 * A.size, s = A.phase, l = A.level; 1 === a && (a = 1.1); for (var c = new Array(e * t * 4), h = [], d = a, p = 0, g = l; g > p; p += 1) { var u = new Md(Math.ceil(e / d), Math.ceil(t / d), s); d /= 2, h.push(u) } for (var f = 0, m = 0, C = 0, y = 0, v = 0, I = 0, E = 0; t > E; E += 1) for (var B = 0; e > B; B += 1) { for (var x = 0, S = a, w = 0, M = l; M > w; w += 1) x += h[w].getValue(B / S, E / S, s) * (l - w), S /= 2; x /= l; var b = Math.abs(x) + .05; if (b > r) f = o[0], m = o[1], C = o[2]; else if (n > b) f = i[0], m = i[1], C = i[2]; else if (b >= n && r >= b || n === r) { var U = (b - n) / (r - n || 1); y = o[0] * U, v = o[1] * U, I = o[2] * U, f = i[0] * (U = 1 - U) + y, m = i[1] * U + v, C = i[2] * U + I } var F = 4 * (E * e + B); c[F] = f, c[F + 1] = m, c[F + 2] = C, c[F + 3] = 255 } var K = document.createElement("canvas"); K.width = e, K.height = t; for (var Q = K.getContext("2d"), R = Q.createImageData(e, t), T = 0, k = e * t * 4; k > T; T += 1) R.data[T] = c[T]; return Q.putImageData(R, 0, 0), K.toDataURL() }(e); default: return Bh.warn("不支持的噪波类型"), null } }, Kd = { DefaultMaterial: new Ir({ color: 255, side: 2 }), DefaultWireframeColor: { color: new LA(0, 0, 0), opacity: .4 }, getDefaultStandardMaterial: (bd = null, function () { return bd || (bd = new ld({ color: 0, side: 2 })), bd } ), createInstancePhongMaterial: function (A) { return A.clone() }, updateBasicMaterial: function (A, e) { A.needsUpdate = !0 }, setMatrixUniform: function (A) {}, createPhongMaterial: function (A) { var e = new Ir(A); return e.type = "FillFacePhong", e.uniforms = Ge.merge([it.fillFacePhong.uniforms]), e.vertexShader = it.fillFacePhong.vertexShader, e.fragmentShader = it.fillFacePhong.fragmentShader, e.side = 2, e }, createStandardMaterial: function (A) { var e = new ld(A); return vc.EnableTransformAoMap && (e.defines.USE_TRANSFORM_AOMAP = ""), e }, createInstanceMaterial: function (A, e) { var t = Kd.createStandardMaterial(A); return t.defines.USE_INSTANCE = "", e && (t.defines.USE_INSTANCE_NORMAL = ""), t.colorState = Yc.BLINK, vc.InfluencedByLight || (t.defines.NOTAFFECTEDBYLIGHT = ""), t.refreshUniforms(), t }, createMaterialByMaterialBufferAndTexture: function (A, e) { var t, i, o, n, r, a, l, c, h = Kd.createStandardMaterial(); if ((h.name = A.name || A.id, h.key = A.id, A.emissive && h.emissive && (1 === A.emissive[0] && 1 === A.emissive[1] && 1 === A.emissive[2] || h.emissive.setRGB(A.emissive[0], A.emissive[1], A.emissive[2])), A.specular && h.specular && h.specular.setRGB(A.specular[0], A.specular[1], A.specular[2]), A.color ? h.color.setRGB(A.color[0], A.color[1], A.color[2]) : A.emissive && h.emissive ? h.color.setRGB(0, 0, 0) : h.color.setRGB(.72, .72, .72), A.tint && (h.imageFade = void 0 === A.imageFade || 0 > A.imageFade || A.imageFade > 10 ? .5 : A.imageFade, h.color.setRGB(A.tint[0], A.tint[1], A.tint[2])), A.map && vc.EnableTextureLoading) && ("string" == typeof A.map ? void 0 !== A.mapOffsetY && 0 !== A.mapOffsetY || void 0 !== A.mapOffsetX && 0 !== A.mapOfsfetX || void 0 !== A.mapScaleX && 1 !== A.mapScaleX || void 0 !== A.mapScaleY && 1 !== A.mapScaleY || void 0 !== A.mapWAngle && 0 !== A.mapWAngle ? t = A.mapOffsetX + "_" + A.mapOffsetY + "_" + A.mapScaleX + "_" + A.mapScaleY + "_" + A.mapWAngle + "_" + A.map : e[A.map] ? h.map = e[A.map] : Bh.warn(h.name, " 中map贴图未找到:", A.map) : t = Bd(JSON.stringify(A.map)), t)) if (e[t]) h.map = e[t]; else { var p = new d; if (p.wrapS = p.wrapT = 1e3, "string" == typeof A.map) p.image = e[A.map] && e[A.map].image ? e[A.map].image : null; else { var g = A.map, u = document.createElement("img"), f = Fd({ type: Number(g.noise_Type), color1: (new Xh).fromArray(g.noise_Color1), color2: (new Xh).fromArray(g.noise_Color2), size: g.noise_Size, level: g.noise_Levels, phase: g.noise_Phase, width: 32, height: 32, thresholdLow: g.noise_ThresholdLow, thresholdHigh: g.noise_ThresholdHigh }); f && (u.src = f, p.image = u) } p.needsUpdate = !0, p.image && (p.offset.x = A.mapOffsetX ? A.mapOffsetX : 0, p.offset.y = A.mapOffsetY ? A.mapOffsetY : 0, p.repeat.x = A.mapScaleX ? A.mapScaleX : 1, p.repeat.y = A.mapScaleY ? A.mapScaleY : 1, p.rotation = A.mapWAngle ? A.mapWAngle : 0, e[t] = p, h.map = p) } if (A.bumpMap && vc.EnableTextureLoading && ("string" == typeof A.bumpMap ? void 0 !== A.bumpMapOffsetY && 0 !== A.bumpMapOffsetY || void 0 !== A.bumpMapOffsetX && 0 !== A.bumpMapOfsfetX || void 0 !== A.bumpMapScaleX && 1 !== A.bumpMapScaleX || void 0 !== A.bumpMapScaleY && 1 !== A.bumpMapScaleY || void 0 !== A.bumpMapWAngle && 0 !== A.bumpMapWAngle ? i = A.bumpMapOffsetX + "_" + A.bumpMapOffsetY + "_" + A.bumpMapScaleX + "_" + A.bumpMapScaleY + "_" + A.bumpMapWAngle + "_" + A.bumpMap : e[A.bumpMap] ? h.bumpMap = e[A.bumpMap] : Bh.warn(h.name, " 中bumpMap贴图未找到:", A.bumpMap) : i = Bd(JSON.stringify(A.bumpMap)), i)) if (e[i]) h.bumpMap = e[i]; else { var m = new d; if (m.wrapS = m.wrapT = 1e3, "string" == typeof A.bumpMap) m.image = e[A.bumpMap] && e[A.bumpMap].image ? e[A.bumpMap].image : null; else { var C = A.bumpMap, y = document.createElement("img"), v = Fd({ type: Number(C.noise_Type), color1: (new Xh).fromArray(C.noise_Color1), color2: (new Xh).fromArray(C.noise_Color2), size: C.noise_Size, level: C.noise_Levels, phase: C.noise_Phase, width: 32, height: 32, thresholdLow: C.noise_ThresholdLow, thresholdHigh: C.noise_ThresholdHigh }); v && (y.src = v, m.image = y) } m.needsUpdate = !0, m.image && (m.offset.x = A.bumpMapOffsetX ? A.bumpMapOffsetX : 0, m.offset.y = A.bumpMapOffsetY ? A.bumpMapOffsetY : 0, m.repeat.x = A.bumpMapScaleX ? A.bumpMapScaleX : 1, m.repeat.y = A.bumpMapScaleY ? A.bumpMapScaleY : 1, m.rotation = A.bumpMapWAngle ? A.bumpMapWAngle : 0, e[i] = m, h.bumpMap = m) } if ((void 0 !== A.bumpScale && (h.bumpScale = A.bumpScale), A.aoMap && vc.EnableTextureLoading) && ("string" == typeof A.aoMap ? void 0 !== A.aoMapOffsetY && 0 !== A.aoMapOffsetY || void 0 !== A.aoMapOffsetX && 0 !== A.aoMapOfsfetX || void 0 !== A.aoMapScaleX && 1 !== A.aoMapScaleX || void 0 !== A.aoMapScaleY && 1 !== A.aoMapScaleY || void 0 !== A.aoMapWAngle && 0 !== A.aoMapWAngle ? o = A.aoMapOffsetX + "_" + A.aoMapOffsetY + "_" + A.aoMapScaleX + "_" + A.aoMapScaleY + "_" + A.aoMapWAngle + "_" + A.aoMap : e[A.aoMap] ? h.aoMap = e[A.aoMap] : Bh.warn(h.name, " 中aoMap贴图未找到:", A.aoMap) : o = Bd(JSON.stringify(A.aoMap)), o)) if (e[o]) h.aoMap = e[o]; else { var I = new d; if (I.wrapS = I.wrapT = 1e3, "string" == typeof A.aoMap) I.image = e[A.aoMap] && e[A.aoMap].image ? e[A.aoMap].image : null; else { var E = A.aoMap, B = document.createElement("img"), x = Fd({ type: Number(E.noise_Type), color1: (new Xh).fromArray(E.noise_Color1), color2: (new Xh).fromArray(E.noise_Color2), size: E.noise_Size, level: E.noise_Levels, phase: E.noise_Phase, width: 32, height: 32, thresholdLow: E.noise_ThresholdLow, thresholdHigh: E.noise_ThresholdHigh }); x && (B.src = x, I.image = B) } I.needsUpdate = !0, I.image && (I.offset.x = A.aoMapOffsetX ? A.aoMapOffsetX : 0, I.offset.y = A.aoMapOffsetY ? A.aoMapOffsetY : 0, I.repeat.x = A.aoMapScaleX ? A.aoMapScaleX : 1, I.repeat.y = A.aoMapScaleY ? A.aoMapScaleY : 1, I.rotation = A.aoMapWAngle ? A.aoMapWAngle : 0, e[o] = I, h.aoMap = I) } if ((void 0 !== A.aoMapIntensity && (h.aoMapIntensity = A.aoMapIntensity), A.normalMap && vc.EnableTextureLoading) && ("string" == typeof A.normalMap ? void 0 !== A.normalMapOffsetY && 0 !== A.normalMapOffsetY || void 0 !== A.normalMapOffsetX && 0 !== A.normalMapOfsfetX || void 0 !== A.normalMapScaleX && 1 !== A.normalMapScaleX || void 0 !== A.normalMapScaleY && 1 !== A.normalMapScaleY || void 0 !== A.normalMapWAngle && 0 !== A.normalMapWAngle ? n = A.normalMapOffsetX + "_" + A.normalMapOffsetY + "_" + A.normalMapScaleX + "_" + A.normalMapScaleY + "_" + A.normalMapWAngle + "_" + A.normalMap : e[A.normalMap] ? h.normalMap = e[A.normalMap] : Bh.warn(h.name, " 中normalMap贴图未找到:", A.normalMap) : n = Bd(JSON.stringify(A.normalMap)), n)) if (e[n]) h.normalMap = e[n]; else { var S = new d; if (S.wrapS = S.wrapT = 1e3, "string" == typeof A.normalMap) S.image = e[A.normalMap] && e[A.normalMap].image ? e[A.normalMap].image : null; else { var w = A.normalMap, M = document.createElement("img"), b = Fd({ type: Number(w.noise_Type), color1: (new Xh).fromArray(w.noise_Color1), color2: (new Xh).fromArray(w.noise_Color2), size: w.noise_Size, level: w.noise_Levels, phase: w.noise_Phase, width: 32, height: 32, thresholdLow: w.noise_ThresholdLow, thresholdHigh: w.noise_ThresholdHigh }); b && (M.src = b, S.image = M) } S.needsUpdate = !0, S.image && (S.offset.x = A.normalMapOffsetX ? A.normalMapOffsetX : 0, S.offset.y = A.normalMapOffsetY ? A.normalMapOffsetY : 0, S.repeat.x = A.normalMapScaleX ? A.normalMapScaleX : 1, S.repeat.y = A.normalMapScaleY ? A.normalMapScaleY : 1, S.rotation = A.normalMapWAngle ? A.normalMapWAngle : 0, e[n] = S, h.normalMap = S) } if (void 0 !== A.normalScale && (h.normalScale = (new s).fromArray(A.normalScale)), A.alphaMap && vc.EnableTextureLoading) { var U; if ("string" == typeof A.alphaMap ? void 0 !== A.alphaMapOffsetY && 0 !== A.alphaMapOffsetY || void 0 !== A.alphaMapOffsetX && 0 !== A.alphaMapOfsfetX || void 0 !== A.alphaMapScaleX && 1 !== A.alphaMapScaleX || void 0 !== A.alphaMapScaleY && 1 !== A.alphaMapScaleY || void 0 !== A.alphaMapWAngle && 0 !== A.alphaMapWAngle ? U = A.alphaMapOffsetX + "_" + A.alphaMapOffsetY + "_" + A.alphaMapScaleX + "_" + A.alphaMapScaleY + "_" + A.alphaMapWAngle + "_" + A.alphaMap : e[A.alphaMap] ? h.alphaMap = e[A.alphaMap] : Bh.warn(h.name, " 中alphaMap贴图未找到:", A.alphaMap) : U = Bd(JSON.stringify(A.alphaMap)), U) if (e[U]) h.alphaMap = e[U]; else { var F = new d; if (F.wrapS = F.wrapT = 1e3, "string" == typeof A.alphaMap) F.image = e[A.alphaMap] && e[A.alphaMap].image ? e[A.alphaMap].image : null; else { var K = A.alphaMap, Q = document.createElement("img"), R = Fd({ type: Number(K.noise_Type), color1: (new Xh).fromArray(K.noise_Color1), color2: (new Xh).fromArray(K.noise_Color2), size: K.noise_Size, level: K.noise_Levels, phase: K.noise_Phase, width: 32, height: 32, thresholdLow: K.noise_ThresholdLow, thresholdHigh: K.noise_ThresholdHigh }); R && (Q.src = R, F.image = Q) } F.needsUpdate = !0, F.image && (F.offset.x = A.alphaMapOffsetX ? A.alphaMapOffsetX : 0, F.offset.y = A.alphaMapOffsetY ? A.alphaMapOffsetY : 0, F.repeat.x = A.alphaMapScaleX ? A.alphaMapScaleX : 1, F.repeat.y = A.alphaMapScaleY ? A.alphaMapScaleY : 1, F.rotation = A.alphaMapWAngle ? A.alphaMapWAngle : 0, e[U] = F, h.alphaMap = F) } h.transparent = !0, h.alphaTest = Number.isNaN(vc.alphaTest) ? .5 : vc.alphaTest } if (A.envMap && vc.EnableTextureLoading && ("string" == typeof A.envMap ? void 0 !== A.envMapOffsetY && 0 !== A.envMapOffsetY || void 0 !== A.envMapOffsetX && 0 !== A.envMapOfsfetX || void 0 !== A.envMapScaleX && 1 !== A.envMapScaleX || void 0 !== A.envMapScaleY && 1 !== A.envMapScaleY || void 0 !== A.envMapWAngle && 0 !== A.envMapWAngle ? r = A.envMapOffsetX + "_" + A.envMapOffsetY + "_" + A.envMapScaleX + "_" + A.envMapScaleY + "_" + A.envMapWAngle + "_" + A.envMap : e[A.envMap] ? h.envMap = e[A.envMap] : Bh.warn(h.name, " 中envMap贴图未找到:", A.envMap) : r = Bd(JSON.stringify(A.envMap)), r)) if (e[r]) h.envMap = e[r]; else { var T = new d; if (T.wrapS = T.wrapT = 1e3, "string" == typeof A.envMap) T.image = e[A.envMap] && e[A.envMap].image ? e[A.envMap].image : null; else { var k = A.envMap, D = document.createElement("img"), L = Fd({ type: Number(k.noise_Type), color1: (new Xh).fromArray(k.noise_Color1), color2: (new Xh).fromArray(k.noise_Color2), size: k.noise_Size, level: k.noise_Levels, phase: k.noise_Phase, width: 32, height: 32, thresholdLow: k.noise_ThresholdLow, thresholdHigh: k.noise_ThresholdHigh }); L && (D.src = L, T.image = D) } T.needsUpdate = !0, T.image && (T.offset.x = A.envMapOffsetX ? A.envMapOffsetX : 0, T.offset.y = A.envMapOffsetY ? A.envMapOffsetY : 0, T.repeat.x = A.envMapScaleX ? A.envMapScaleX : 1, T.repeat.y = A.envMapScaleY ? A.envMapScaleY : 1, T.rotation = A.envMapWAngle ? A.envMapWAngle : 0, e[r] = T, h.envMap = T) } if (A.lightMap && vc.EnableTextureLoading && ("string" == typeof A.lightMap ? void 0 !== A.lightMapOffsetY && 0 !== A.lightMapOffsetY || void 0 !== A.lightMapOffsetX && 0 !== A.lightMapOfsfetX || void 0 !== A.lightMapScaleX && 1 !== A.lightMapScaleX || void 0 !== A.lightMapScaleY && 1 !== A.lightMapScaleY || void 0 !== A.lightMapWAngle && 0 !== A.lightMapWAngle ? a = A.lightMapOffsetX + "_" + A.lightMapOffsetY + "_" + A.lightMapScaleX + "_" + A.lightMapScaleY + "_" + A.lightMapWAngle + "_" + A.lightMap : e[A.lightMap] ? h.lightMap = e[A.lightMap] : Bh.warn(h.name, " 中lightMap贴图未找到:", A.lightMap) : a = Bd(JSON.stringify(A.lightMap)), a)) if (e[a]) h.lightMap = e[a]; else { var N = new d; if (N.wrapS = N.wrapT = 1e3, "string" == typeof A.lightMap) N.image = e[A.lightMap] && e[A.lightMap].image ? e[A.lightMap].image : null; else { var O = A.lightMap, V = document.createElement("img"), G = Fd({ type: Number(O.noise_Type), color1: (new Xh).fromArray(O.noise_Color1), color2: (new Xh).fromArray(O.noise_Color2), size: O.noise_Size, level: O.noise_Levels, phase: O.noise_Phase, width: 32, height: 32, thresholdLow: O.noise_ThresholdLow, thresholdHigh: O.noise_ThresholdHigh }); G && (V.src = G, N.image = V) } N.needsUpdate = !0, N.image && (N.offset.x = A.lightMapOffsetX ? A.lightMapOffsetX : 0, N.offset.y = A.lightMapOffsetY ? A.lightMapOffsetY : 0, N.repeat.x = A.lightMapScaleX ? A.lightMapScaleX : 1, N.repeat.y = A.lightMapScaleY ? A.lightMapScaleY : 1, N.rotation = A.lightMapWAngle ? A.lightMapWAngle : 0, e[a] = N, h.lightMap = N) } if ((void 0 !== A.lightMapIntensity && (h.lightMapIntensity = A.lightMapIntensity), A.emissiveMap && vc.EnableTextureLoading) && ("string" == typeof A.emissiveMap ? void 0 !== A.emissiveMapOffsetY && 0 !== A.emissiveMapOffsetY || void 0 !== A.emissiveMapOffsetX && 0 !== A.emissiveMapOfsfetX || void 0 !== A.emissiveMapScaleX && 1 !== A.emissiveMapScaleX || void 0 !== A.emissiveMapScaleY && 1 !== A.emissiveMapScaleY || void 0 !== A.emissiveMapWAngle && 0 !== A.emissiveMapWAngle ? l = A.emissiveMapOffsetX + "_" + A.emissiveMapOffsetY + "_" + A.emissiveMapScaleX + "_" + A.emissiveMapScaleY + "_" + A.emissiveMapWAngle + "_" + A.emissiveMap : e[A.emissiveMap] ? h.emissiveMap = e[A.emissiveMap] : Bh.warn(h.name, " 中emissiveMap贴图未找到:", A.emissiveMap) : l = Bd(JSON.stringify(A.emissiveMap)), l)) if (e[l]) h.emissiveMap = e[l]; else { var P = new d; if (P.wrapS = P.wrapT = 1e3, "string" == typeof A.emissiveMap) P.image = e[A.emissiveMap] && e[A.emissiveMap].image ? e[A.emissiveMap].image : null; else { var q = A.emissiveMap, j = document.createElement("img"), H = Fd({ type: Number(q.noise_Type), color1: (new Xh).fromArray(q.noise_Color1), color2: (new Xh).fromArray(q.noise_Color2), size: q.noise_Size, level: q.noise_Levels, phase: q.noise_Phase, width: 32, height: 32, thresholdLow: q.noise_ThresholdLow, thresholdHigh: q.noise_ThresholdHigh }); H && (j.src = H, P.image = j) } P.needsUpdate = !0, P.image && (P.offset.x = A.emissiveMapOffsetX ? A.emissiveMapOffsetX : 0, P.offset.y = A.emissiveMapOffsetY ? A.emissiveMapOffsetY : 0, P.repeat.x = A.emissiveMapScaleX ? A.emissiveMapScaleX : 1, P.repeat.y = A.emissiveMapScaleY ? A.emissiveMapScaleY : 1, P.rotation = A.emissiveMapWAngle ? A.emissiveMapWAngle : 0, e[l] = P, h.emissiveMap = P) } if ((void 0 !== A.emissiveIntensity && (h.emissiveIntensity = A.emissiveIntensity), A.specularMap && vc.EnableTextureLoading) && ("string" == typeof A.specularMap ? void 0 !== A.specularMapOffsetY && 0 !== A.specularMapOffsetY || void 0 !== A.specularMapOffsetX && 0 !== A.specularMapOfsfetX || void 0 !== A.specularMapScaleX && 1 !== A.specularMapScaleX || void 0 !== A.specularMapScaleY && 1 !== A.specularMapScaleY || void 0 !== A.specularMapWAngle && 0 !== A.specularMapWAngle ? c = A.specularMapOffsetX + "_" + A.specularMapOffsetY + "_" + A.specularMapScaleX + "_" + A.specularMapScaleY + "_" + A.specularMapWAngle + "_" + A.specularMap : e[A.specularMap] ? h.specularMap = e[A.specularMap] : Bh.warn(h.name, " 中specularMap贴图未找到:", A.specularMap) : c = Bd(JSON.stringify(A.specularMap)), c)) if (e[c]) h.specularMap = e[c]; else { var Y = new d; if (Y.wrapS = Y.wrapT = 1e3, "string" == typeof A.specularMap) Y.image = e[A.specularMap] && e[A.specularMap].image ? e[A.specularMap].image : null; else { var W = A.specularMap, J = document.createElement("img"), z = Fd({ type: Number(W.noise_Type), color1: (new Xh).fromArray(W.noise_Color1), color2: (new Xh).fromArray(W.noise_Color2), size: W.noise_Size, level: W.noise_Levels, phase: W.noise_Phase, width: 32, height: 32, thresholdLow: W.noise_ThresholdLow, thresholdHigh: W.noise_ThresholdHigh }); z && (J.src = z, Y.image = J) } Y.needsUpdate = !0, Y.image && (Y.offset.x = A.specularMapOffsetX ? A.specularMapOffsetX : 0, Y.offset.y = A.specularMapOffsetY ? A.specularMapOffsetY : 0, Y.repeat.x = A.specularMapScaleX ? A.specularMapScaleX : 1, Y.repeat.y = A.specularMapScaleY ? A.specularMapScaleY : 1, Y.rotation = A.specularMapWAngle ? A.specularMapWAngle : 0, e[c] = Y, h.specularMap = Y) } return void 0 !== A.shininess && (h.shininess = A.shininess), void 0 !== A.opacity && (h.opacity = A.opacity, 1 > A.opacity && (h.transparent = !0), A.opacity > 0 || (h.opacity = .1)), h.side = 2, h.refreshUniforms && h.refreshUniforms(), h }, createNewStyleMaterial: function (A) { var e = new yr(A); return e.type = "NewStyle", e.uniforms = Ge.merge([it.standard.uniforms]), e.vertexShader = it.newStyle.vertexShader, e.fragmentShader = it.newStyle.fragmentShader, e.metalness = 0, e }, createHighlightMaterial: function () { var A = this.createStandardMaterial(vc.SelectionColor); return vc.InfluencedByLight || (A.defines.NOTAFFECTEDBYLIGHT = ""), A }, getBlinkMaterial: function (A, e) { var t = Kd.getMaterialParameters(A), i = Kd.createStandardMaterial(t); return i.blinkColor.copy(e), i.colorState = Yc.BLINK, i.refreshUniforms(), i }, getMaterialParameters: function (A) { var e = {}; return A.hasOwnProperty("color") && (e.color = A.color), e.opacity = 1, e.transparent = !1, A.hasOwnProperty("opacity") && (e.opacity = A.opacity, 1 > A.opacity && (e.transparent = !0)), A.hasOwnProperty("side") && (e.side = A.side), A.hasOwnProperty("name") && (e.name = A.name || ""), A.hasOwnProperty("emissive") && (e.emissive = A.emissive), A.hasOwnProperty("emissiveIntensity") && (e.emissive = A.emissiveIntensity), A.hasOwnProperty("specular") && (e.specular = A.specular), A.hasOwnProperty("shininess") && (e.shininess = A.shininess), A.hasOwnProperty("map") && (e.map = A.map), A.hasOwnProperty("aoMap") && (e.aoMap = A.aoMap), A.hasOwnProperty("aoMapIntensity") && (e.aoMapIntensity = A.aoMapIntensity), A.hasOwnProperty("bumpMap") && (e.bumpMap = A.bumpMap), A.hasOwnProperty("bumpScale") && (e.bumpScale = A.bumpScale), A.hasOwnProperty("normalMap") && (e.normalMap = A.normalMap), A.hasOwnProperty("normalScale") && (e.normalScale = A.normalScale), A.hasOwnProperty("alphaMap") && (e.alphaMap = A.alphaMap), A.hasOwnProperty("alphaTest") && (e.alphaTest = A.alphaTest), A.hasOwnProperty("transparent") && (e.transparent = A.transparent), A.hasOwnProperty("emissiveMap") && (e.emissiveMap = A.emissiveMap), A.hasOwnProperty("envMap") && (e.envMap = A.envMap), A.hasOwnProperty("envMapIntensity") && (e.envMapIntensity = A.envMapIntensity), A.hasOwnProperty("roughness") && (e.roughness = A.roughness), A.hasOwnProperty("metalness") && (e.metalness = A.metalness), A.hasOwnProperty("originRoughness") && (e.originRoughness = A.originRoughness), A.hasOwnProperty("originMetalness") && (e.originMetalness = A.originMetalness), A.hasOwnProperty("iblProbe") && (e.iblProbe = A.iblProbe), A.hasOwnProperty("shift") && (e.shift = A.shift), A.hasOwnProperty("wireframe") && (e.wireframe = A.wireframe), A.hasOwnProperty("pureColor") && (e.pureColor = A.pureColor), A.hasOwnProperty("textureColor") && (e.textureColor = A.textureColor), A.hasOwnProperty("imageFade") && (e.imageFade = A.imageFade), "bos3d" === A.type && A.hasOwnProperty("lights") && (e.lights = A.lights), A.hasOwnProperty("lightMap") && (e.lightMap = A.lightMap), A.hasOwnProperty("lightMapIntensity") && (e.lightMapIntensity = A.lightMapIntensity), A.hasOwnProperty("viewportSize") && (e.viewportSize = A.viewportSize), A.hasOwnProperty("fillMap") && (e.fillMap = A.fillMap), e }, nextHighestPowerOfTwo: function (A) { A -= 1; for (var e = 1; 32 > e; e <<= 1) A |= A >> e; return A + 1 }, ensurePowerOfTwo: function (A) { if (0 === A.width || 0 === A.height) return A; if (!a.isPowerOfTwo(A.width) || !a.isPowerOfTwo(A.height)) { var e = document.createElement("canvas"); return e.width = Kd.nextHighestPowerOfTwo(A.width), e.height = Kd.nextHighestPowerOfTwo(A.height), e.getContext("2d").drawImage(A, 0, 0, A.width, A.height, 0, 0, e.width, e.height), e } return A }, ensureQuadrate: function (A) { var e = A.width, t = A.height; if (0 === e || 0 === t || a.isPowerOfTwo(e) && a.isPowerOfTwo(t) && e === t) return A; a.isPowerOfTwo(e) || (e = Kd.nextHighestPowerOfTwo(e)), a.isPowerOfTwo(t) || (t = Kd.nextHighestPowerOfTwo(t)); var i = 0, o = 0; t > e ? i = .5 * (t - e) : o = .5 * (e - t); var n = document.createElement("canvas"); return n.width = n.height = Math.max(e, t), n.getContext("2d").drawImage(A, 0, 0, A.width, A.height, i, o, e, t), n }, getRGBAFromColorArray: function (A) { var e = A[0], t = A[1], i = A[2], o = A[3]; return void 0 !== o ? "rgba(" + e + "," + t + "," + i + "," + o + ")" : "rgb(" + e + "," + t + "," + i + ")" }, getRGBAFromArray: function (A) { var e = 255 * A[0], t = 255 * A[1], i = 255 * A[2], o = 255 * A[3]; return void 0 !== o ? "rgba(" + e + "," + t + "," + i + "," + o + ")" : "rgb(" + e + "," + t + "," + i + ")" }, getArrayFromRGBA: function (A) { var e = A.split(","), t = parseInt(e[0].split("(")[1], 0) / 255, i = parseInt(e[1], 0) / 255, o = parseInt(e[2].split(")")[0], 0) / 255; return void 0 !== e[3] ? [t, i, o, parseFloat(e[3].split(")")[0])] : [t, i, o] }, getColorArrayFromRGBA: function (A) { var e = A.split(","), t = parseInt(e[0].split("(")[1], 0), i = parseInt(e[1], 0), o = parseInt(e[2].split(")")[0], 0); return void 0 !== e[3] ? [t, i, o, parseFloat(e[3].split(")")[0])] : [t, i, o] }, getHexStringFromRGB: function (A) { return "#" + ("000000" + Kd.getHex(Kd.getArrayFromRGBA(A)).toString(16)).slice(-6) }, getArrayFromColorArray: function (A) { return [A[0] / 255, A[1] / 255, A[2] / 255] }, getHexStringFromColorArray: function (A) { return "#" + ("000000" + Kd.getHex(Kd.getArrayFromColorArray(A)).toString(16)).slice(-6) }, getHexStringFromArray: function (A) { return "#" + ("000000" + Kd.getHex(A).toString(16)).slice(-6) }, getHex: function (A) { return 255 * A[0] << 16 ^ 255 * A[1] << 8 ^ 255 * A[2] << 0 }, getColorParamsByMaterial: function (A) { return { rgbaColor: [A.color.r, A.color.g, A.color.b, A.opacity], transparent: A.transparent, wireframe: A.wireframe } }, getHoverColorByColor: function (A) { var e = {}; return e.r = A.r, e.g = A.g, e.b = A.b, e.a = Kd.getHoverOpacity(A.a), e }, getHoverOpacity: function (A) { return .4 > A ? A + .3 : A - .3 }, cloneMaterialBaseOnColor: function (A, e) { if (!A.color && !A.diffuse) return A; var t = A.clone(); return t.wireframe = e.wireframe, t.opacity = e.opacity, t.transparent = e.transparent, t.color && t.color.isColor && e.color && e.color.isColor && t.color.copy(e.color), t.diffuse && t.diffuse.isColor && e.diffuse && e.diffuse.isColor && t.diffuse.copy(e.diffuse), t } }, Qd = function (A, e, t, i, o, n, r, a) { this.name = A, this.position = e, this.target = t, this.up = i, this.fov = o, this.frustumWidth = r, this.frustumHeight = a, this.version = n }, Rd = { createCameraInfo: function (A) { var e = A.camera, t = new Qd(A.getCameraName(), e.position, e.target, e.up); return JSON.stringify(t) }, transformCamera: function (A, e) { var t = new y, i = function (A) { return [parseFloat(A[0]), parseFloat(A[1]), parseFloat(A[2])] }; t.fromArray(i(A.position.split(","))); var o = new y; o.fromArray(i(A.direction.split(","))); var n = new y; n.fromArray(i(A.up.split(","))); var r = new y; r.addVectors(t, o), t.applyMatrix4(e.rootNode.matrix), r.applyMatrix4(e.rootNode.matrix); var a = new M; return a.makeRotationFromEuler(e.rootNode.rotation), n.applyMatrix4(a), n.normalize(), new Qd(A.name, t, r, n) }, parseCameraInfo: function (A) { if (!A) return null; var e = JSON.parse(A); if (!e.hasOwnProperty("position") || !e.hasOwnProperty("target") || !e.hasOwnProperty("up")) return null; var t = e.name || Ec.PERSPECTIVE, i = new y; i.x = e.position.x, i.y = e.position.y, i.z = e.position.z; var o = new y; o.x = e.target.x, o.y = e.target.y, o.z = e.target.z; var n = new y; return n.x = e.up.x, n.y = e.up.y, n.z = e.up.z, new Qd(t, i, o, n, void 0, void 0 === e.version ? 0 : e.version, e.frustumWidth, e.frustumHeight) }, canvasToNormalized: function (A, e, t) { var i = { x: 0, y: 0, z: 0 }; return i.x = A.x / e * 2 - 1, i.y = -A.y / t * 2 + 1, i.z = A.z || 0, i }, normalizedToCanvas: function (A, e, t) { var i = { x: 0, y: 0, z: 0 }; return i.x = Math.floor(.5 * (A.x + 1) * e + .5), i.y = Math.floor(-.5 * (A.y - 1) * t + .5), i.z = A.z || 0, i }, drawingToCanvas: function (A, e, t, i) { var o = new y(e.x, e.y, e.z); return o.project(A), this.normalizedToCanvas(o, t, i) }, drawingPointsToCanvas: function (A, e, t, i, o) { var n = {}, r = (new M).getInverse(A.matrixWorld), a = new y(e.x, e.y, e.z); a.applyMatrix4(r); var s = new y(t.x, t.y, t.z); if (s.applyMatrix4(r), a.z > 0 && s.z > 0) return null; var l = a.clone().sub(s); if (l.normalize(), a.z > 0) a.sub(l.multiplyScalar((a.z + A.near) / l.z)); else if (s.z > 0) { s.sub(l.multiplyScalar((s.z + A.near) / l.z)) } return a.applyMatrix4(A.projectionMatrix), s.applyMatrix4(A.projectionMatrix), n.start = this.normalizedToCanvas(a, i, o), n.end = this.normalizedToCanvas(s, i, o), n }, lineIntersectWithRect: function (A, e) { if (A && A.start.x === A.end.x && A.start.y === A.end.y) return Bh.log("Invalid line."), null; var t, i = 0; A.start.x !== A.end.x && (i = (A.start.y - A.end.y) / (A.start.x - A.end.x)); var o = [], n = e.min, r = e.max; return n.y > i * n.x + (t = A.start.y - i * A.start.x) || i * n.x + t > r.y || o.push(new s(n.x, i * n.x + t)), n.y > i * r.x + t || i * r.x + t > r.y || o.push(new s(r.x, i * r.x + t)), 0 === i && (o.push(new s(n.x, t)), o.push(new s(r.x, t))), (n.y - t) / i > n.x && r.x > (n.y - t) / i && o.push(new s((n.y - t) / i, n.y)), (r.y - t) / i > n.x && r.x > (r.y - t) / i && o.push(new s((r.y - t) / i, r.y)), o }, canvasToDrawing: function (A, e, t, i) { var o = this.canvasToNormalized(e, t, i), n = new y(o.x, o.y, o.z); return n.unproject(A), { x: n.x, y: n.y, z: n.z } }, intersectBoxByRay: function (A, e) { var t = 0, i = 0, o = 0, n = 0, r = 0, a = 0, s = 1 / A.direction.x, l = 1 / A.direction.y, c = 1 / A.direction.z, h = A.origin; return 0 > s ? (t = (e.max.x - h.x) * s, i = (e.min.x - h.x) * s) : (t = (e.min.x - h.x) * s, i = (e.max.x - h.x) * s), 0 > l ? (o = (e.max.y - h.y) * l, n = (e.min.y - h.y) * l) : (o = (e.min.y - h.y) * l, n = (e.max.y - h.y) * l), t > n || o > i ? null : ((o > t || isNaN(t)) && (t = o), (i > n || isNaN(i)) && (i = n), 0 > c ? (r = (e.max.z - h.z) * c, a = (e.min.z - h.z) * c) : (r = (e.min.z - h.z) * c, a = (e.max.z - h.z) * c), t > a || r > i ? null : ((r > t || isNaN(t)) && (t = r), (i > a || isNaN(i)) && (i = a), 0 > i ? null : 0 > t ? i : t)) }, intersectObject: function (A, e, t, i) { if (A.visible) { A.raycast(e, t); if (!0 === i && A.children) for (var o = A.children, n = 0, r = o.length; r > n; n += 1) Rd.intersectObject(o[n], e, t, !0) } }, intersectObjectWithFrustum: (Ud = new aA, function (A, e) { if (!A.boundingBox || A instanceof Ue) { var t = A.geometry; null === t.boundingBox && t.computeBoundingBox(), Ud.copy(t.boundingBox) } else Ud.copy(A.boundingBox); return Ud.applyMatrix4(A.matrixWorld), e.intersectsBox(Ud) } ) }, Td = function (A, e, t, i) { je.call(this, A, e, t, i), this.projectOnWidth = !1 }; (Td.prototype = Object.create(je.prototype)).constructor = Td, Td.prototype.updateProjectionMatrixByFrustum = function (A, e) { var t = this.near, i = null, o = null, n = null, r = null; this.projectOnWidth ? (o = -.5 * (n = A), i = .5 * (r = this.aspect * n)) : (i = .5 * (r = e), o = -.5 * (n = this.aspect * r)); var a = this.view; if (null !== a) { var s = a.fullWidth, l = a.fullHeight; o += a.offsetX * n / s, i -= a.offsetY * r / l, n *= a.width / s, r *= a.height / l } var c = this.filmOffset; 0 !== c && (o += t * c / this.getFilmWidth()), this.projectionMatrix.makePerspective(o, o + n, i, i - r, t, this.far) }, Td.prototype.setProjectOnWidth = function (A) { this.projectOnWidth = A }; var kd = function (A, e) { qe.call(this), this.target = new y, this.name = A || "", this.fov = e.fov, this.near = e.near, this.far = e.far, A === Ec.PERSPECTIVE ? (this.aspect = e.width / e.height, this.fov = e.fov, this.left = -e.width / 2, this.right = e.width / 2, this.top = e.height / 2, this.bottom = -e.height / 2, this.perspectiveCamera = new Td(this.fov, this.aspect, this.near, this.far), this.orthoCamera = null, this.toPerspective()) : (this.left = e.left, this.right = e.right, this.top = e.top, this.bottom = e.bottom, this.fov = 45, this.aspect = (this.right - this.left) / (this.top - this.bottom), this.orthoCamera = new Ka(this.left, this.right, this.top, this.bottom, this.near, this.far), this.perspectiveCamera = null, this.orthoCamera.updateProjectionMatrix(), this.projectionMatrix = this.orthoCamera.projectionMatrix, this.isPerspective = !1), this.zoom = e.zoom || 1, this.updateProjectionMatrixByFrustum = !1 }; (kd.prototype = Object.create(qe.prototype)).constructor = kd, kd.prototype.toPerspective = function () { null !== this.perspectiveCamera ? this.updateProjectionMatrixByFrustum || (this.perspectiveCamera.aspect = this.aspect, this.perspectiveCamera.near = this.near, this.perspectiveCamera.far = this.far, this.perspectiveCamera.fov = this.fov, this.perspectiveCamera.updateProjectionMatrix(), this.projectionMatrix = this.perspectiveCamera.projectionMatrix, this.projectionMatrixInverse = this.perspectiveCamera.projectionMatrixInverse, this.isPerspective = !0, this.dirty = !0) : Bh.log("Can not convert to perspective camera because the camera original type is orthographic.") }, kd.prototype.toOrthographic = function () { null === this.orthoCamera && (this.orthoCamera = new Ka(this.left, this.right, this.top, this.bottom, this.near, this.far)); var A = this.fov, e = this.target.clone().sub(this.position).length(), t = Math.tan(A * Math.PI / 180 / 2) * e, i = t * this.aspect; t /= this.zoom, this.left = this.orthoCamera.left = -(i /= this.zoom), this.right = this.orthoCamera.right = i, this.top = this.orthoCamera.top = t, this.bottom = this.orthoCamera.bottom = -t, this.orthoCamera.near = this.near, this.orthoCamera.far = this.far, this.orthoCamera.updateProjectionMatrix(), this.projectionMatrix = this.orthoCamera.projectionMatrix, this.projectionMatrixInverse = this.orthoCamera.projectionMatrixInverse, this.isPerspective = !1, this.dirty = !0 }, kd.prototype.setSize = function (A, e) { this.perspectiveCamera.aspect = A / e, this.left = -A / 2, this.right = A / 2, this.top = e / 2, this.bottom = -e / 2, this.aspect = A / e, this.dirty = !0 }, kd.prototype.setSizeByFrustum = function (A, e) { var t = 2 * this.right, i = 2 * this.top; this.aspect = t / i; var o = null; A / e > t / i ? (o = i / t, this.perspectiveCamera.setProjectOnWidth(!0)) : (o = t / i, this.perspectiveCamera.setProjectOnWidth(!1)), this.dirty = !0, this.isPerspective && (this.perspectiveCamera.aspect = o, this.perspectiveCamera.near = this.near, this.perspectiveCamera.far = this.far, this.perspectiveCamera.fov = this.fov, this.perspectiveCamera.updateProjectionMatrixByFrustum(A, e), this.projectionMatrix = this.perspectiveCamera.projectionMatrix, this.isPerspective = !0, this.dirty = !0) }, kd.prototype.setFov = function (A) { this.fov = A, this.dirty = !0, this.updateProjectionMatrix() }, kd.prototype.setNearFar = function (A, e) { this.near = A, this.far = e, this.dirty = !0, this.updateProjectionMatrix() }, kd.prototype.updateProjectionMatrix = function () { this.isPerspective ? this.toPerspective() : this.toOrthographic() }, kd.prototype.setLens = function (A, e) { void 0 === e && (e = 24); var t = 2 * a.radToDeg(Math.atan(e / (2 * A))); return this.setFov(t), this.dirty = !0, t }, kd.prototype.setZoom = function (A) { this.zoom = A, this.dirty = !0, this.updateProjectionMatrix() }, kd.prototype.copy = function (A) { qe.prototype.copy.call(this, A), this.target.copy(A.target), this.aspect = A.aspect, this.fov = A.fov, this.near = A.near, this.far = A.far, this.left = A.left, this.right = A.right, this.top = A.top, this.bottom = A.bottom, this.zoom = A.zoom, this.isPerspective = A.isPerspective, A.orthoCamera && (this.orthoCamera ? this.orthoCamera.copy(A.orthoCamera) : this.orthoCamera = A.orthoCamera.clone()), A.perspectiveCamera && (this.perspectiveCamera ? this.perspectiveCamera.copy(A.perspectiveCamera) : this.perspectiveCamera = A.perspectiveCamera.clone()) }, kd.prototype.isDirty = function () { return this.dirty }, kd.prototype.toFrontView = function () { this.rotation.x = 0, this.rotation.y = 0, this.rotation.z = 0 }, kd.prototype.toBackView = function () { this.rotation.x = 0, this.rotation.y = Math.PI, this.rotation.z = 0 }, kd.prototype.toLeftView = function () { this.rotation.x = 0, this.rotation.y = -Math.PI / 2, this.rotation.z = 0 }, kd.prototype.toRightView = function () { this.rotation.x = 0, this.rotation.y = Math.PI / 2, this.rotation.z = 0 }, kd.prototype.toTopView = function () { this.rotation.x = -Math.PI / 2, this.rotation.y = 0, this.rotation.z = 0 }, kd.prototype.toBottomView = function () { this.rotation.x = Math.PI / 2, this.rotation.y = 0, this.rotation.z = 0 }; var Dd = function (A, e, t, i) { this.ray = new CA(A, e), this.near = t || 0, this.far = i || 1 / 0, this.params = { Sprite: {}, Mesh: {}, Points: { threshold: 1 }, LOD: {}, Line: {} } }; Dd.prototype = { constructor: Dd, precision: 1e-4, linePrecision: 1, descSort: function (A, e) { return A.distance - e.distance }, set: function (A, e) { this.ray.set(A, e) }, setFromCamera: function (A, e) { e instanceof kd ? e.isPerspective ? (this.ray.origin.copy(e.position), this.ray.direction.set(A.x, A.y, .5).unproject(e).sub(e.position).normalize()) : (this.ray.origin.set(A.x, A.y, -1).unproject(e), this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld)) : e instanceof je ? (this.ray.origin.copy(e.position), this.ray.direction.set(A.x, A.y, .5).unproject(e).sub(e.position).normalize()) : e instanceof Ka ? (this.ray.origin.set(A.x, A.y, -1).unproject(e), this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld)) : Bh.error("Raycaster: Unsupported camera type.") }, intersectObject: function (A, e) { var t = []; return Rd.intersectObject(A, this, t, e), t.sort(this.descSort), t.length > 0 ? t[0] : null }, intersectObjects: function (A, e) { for (var t = [], i = 0, o = A.length; o > i; i += 1) Rd.intersectObject(A[i], this, t, e); return t.sort(this.descSort), t.length > 0 ? t[0] : null }, intersectOctantForNode: function (A, e) { var t = this, i = new aA; ! function A(o) { var n = null, r = null; if (i.set(o.min, o.max), t.ray.intersectBox(i) && (e.push(o), o.childOctants)) for (n = 0, r = o.childOctants.length; r > n; n += 1) A(o.childOctants[n]) }(A) } }, CA.prototype.intersectBoxWithDistance = function (A) { var e = null, t = null, i = null, o = null, n = null, r = null, a = 1 / this.direction.x, s = 1 / this.direction.y, l = 1 / this.direction.z, c = this.origin; if (0 > a ? (t = (A.max.x - c.x) * a, e = (A.min.x - c.x) * a) : (t = (A.min.x - c.x) * a, e = (A.max.x - c.x) * a), 0 > s ? (o = (A.max.y - c.y) * s, i = (A.min.y - c.y) * s) : (o = (A.min.y - c.y) * s, i = (A.max.y - c.y) * s), t > i || o > e) return -1; if ((o > t || isNaN(t)) && (t = o), (e > i || isNaN(e)) && (e = i), 0 > l ? (r = (A.max.z - c.z) * l, n = (A.min.z - c.z) * l) : (r = (A.min.z - c.z) * l, n = (A.max.z - c.z) * l), t > n || r > e) return -1; if ((r > t || isNaN(t)) && (t = r), (e > n || isNaN(e)) && (e = n), 0 > e) return -1; if (0 > t) return 0; var h = new y; this.at(0 > t ? e : t, h); var d = h.x - c.x, p = h.y - c.y, g = h.z - c.z; return Math.sqrt(d * d + p * p + g * g) }; var Ld = function () {}, Nd = function () {}; Nd.prototype = uh.extend(!0, {}, Ld.prototype = { constructor: Ld, apply: function (A) { A.addEventListener = Ld.prototype.addEventListener, A.hasEventListener = Ld.prototype.hasEventListener, A.removeEventListener = Ld.prototype.removeEventListener, A.fireEvent = Ld.prototype.dispatchEvent, A.dispatchEvent = Ld.prototype.dispatchEvent }, addEventListener: function (A, e) { A && (void 0 === this._listeners && (this._listeners = {}), void 0 === this._listeners[A] && (this._listeners[A] = []), this._listeners[A].push(e)) }, hasEventListener: function (A, e) { if (!A) return !1; if (void 0 === this._listeners) return !1; var t = this._listeners; return void 0 !== t[A] && -1 !== t[A].indexOf(e) }, removeEventListener: function (A, e) { if (A && (void 0 === this._listeners && (this._listeners = {}), Array.isArray(this._listeners[A]))) for (var t = this._listeners[A], i = 0, o = t.length; o > i; i += 1) if (t[i] === e) { t.splice(i, 1); break } }, removeAllEventListenerByType: function (A) { A && (void 0 === this._listeners && (this._listeners = {}), Array.isArray(this._listeners[A]) && this._listeners[A] && (this._listeners[A] = void 0)) }, removeAllEventListener: function () { for (var A in void 0 === this._listeners && (this._listeners = {}), this._listeners) if (this._listeners.hasOwnProperty(A)) for (var e = this._listeners[A], t = 0, i = e.length; i > t; t += 1) e.splice(t, 1); this._listeners = {} }, dispatchEvent: function (A) { if (void 0 === this._listeners && (this._listeners = {}), "string" == typeof A && (A = { type: A }), !A.target) try { A.target = this } catch (A) {} if (null == A.type) throw Bh.trace("事件类型未知."), new Error("事件类型未知."); if (Array.isArray(this._listeners[A.type])) for (var e = this._listeners[A.type].slice(), t = 0; e.length > t; t += 1) e[t].call(this, A) }, fireEvent: function (A) { this.dispatchEvent(A) } }, { init: function (A) { this.marks = {}, this.allOids = [], this.components = {}, this.SelectedMark = {}, this.mouse = new s, this.lastX = 0, this.lastY = 0, this.active = !0, this.viewer = A }, addObjectToScene: function (A, e) { A && A.id && e && (this.viewer.addExternalObject(A.id, e), this.components[A.id] = e, this.allOids.push(A.id), this.marks[A.id] = A) }, enabled: function () { this.mousedown = this.viewer.domElement.addEventListener("mousedown", this.onMouseDown.bind(this), !1), this.mouseup = this.viewer.domElement.addEventListener("mouseup", this.onMouseUp.bind(this), !1) }, disabled: function () { this.mousedown = this.viewer.domElement.removeEventListener("mousedown", this.onMouseDown.bind(this), !1), this.mouseup = this.viewer.domElement.removeEventListener("mouseup", this.onMouseUp.bind(this), !1) }, touchEnabled: function () { this.touchstart = document.getElementById(this.viewer.uuid).addEventListener("touchstart", this.onTouchStart.bind(this), !1), this.touchend = document.getElementById(this.viewer.uuid).addEventListener("touchend", this.onTouchEnd.bind(this), !1) }, touchDisabled: function () { this.touchstart = this.viewer.domElement.removeEventListener("touchstart", this.onTouchStart.bind(this), !1), this.touchend = this.viewer.domElement.removeEventListener("touchend", this.onTouchEnd.bind(this), !1) }, onMouseDown: function (A) { this.mouse.x = this.lastX = A.clientX, this.mouse.y = this.lastY = A.clientY }, onMouseUp: function (A) { var e = [A.clientX, A.clientY]; (e[0] > this.lastX ? 5 > e[0] - this.lastX : 5 > this.lastX - e[0]) && (e[1] > this.lastY ? 5 > e[1] - this.lastY : 5 > this.lastY - e[1]) && (this.mouse.x = this.lastX = e[0], this.mouse.y = this.lastY = e[1], this.pick("pick")) }, onTouchStart: function (A) { this.mouse.x = this.lastX = A.changedTouches[0].clientX, this.mouse.y = this.lastY = A.changedTouches[0].clientY }, onTouchEnd: function (A) { (A.changedTouches[0].clientX > this.lastX ? 5 > A.changedTouches[0].clientX - this.lastX : 5 > this.lastX - A.changedTouches[0].clientX) && (A.changedTouches[0].clientY > this.lastY ? 5 > A.changedTouches[0].clientY - this.lastY : 5 > this.lastY - A.changedTouches[0].clientY) && (this.mouse.x = this.lastX = A.changedTouches[0].clientX, this.mouse.y = this.lastY = A.changedTouches[0].clientY, this.pick("pick")) }, pick: function () { var A = this.viewer.cameraControl.getIntersectContext(this.mouse), e = new Dd; e.setFromCamera(A.mouse, A.camera), e.camera = A.camera, e._camera = A.camera, e.viewportSize = A.viewportSize; var t = Object.values(this.components), i = e.intersectObjects(t); i ? this.SelectedMark !== i.object ? (this.SelectedMark = i.object, this.dispatchEvent({ type: "updated", added: { objects: this.SelectedMark } })) : (this.dispatchEvent({ type: "updated", removed: { objects: this.SelectedMark } }), this.SelectedMark = {}) : (this.SelectedMark = {}, this.dispatchEvent({ type: "updated", removed: { objects: this.SelectedMark } })) }, getClickCoordsWithinElement: function (A) { var e = [0, 0]; if (A) { for (var t = A.target, i = 0, o = 0; t.offsetParent;) i += t.offsetLeft, o += t.offsetTop, t = t.offsetParent; e[0] = A.pageX - i, e[1] = A.pageY - o } else A = window.event, e.x = A.x, e.y = A.y; return e }, listentoSelectMarks: function (A) { var e = this; this.addEventListener("updated", (function (t) { t.added && e.SelectedMark !== {} ? A(e.SelectedMark.key, e.SelectedMark) : A(null, null) })) }, hasTheSameId: function (A) { if ("" !== A.id) for (var e = 0; this.allOids.length > e; e += 1) if (A.id === this.allOids[e]) return { data: "标签id重复" } }, findMark: function (A) { return this.components[A] }, idsToArray: function (A) { return null == A ? { data: "未选中mark" } : (Array.isArray(A) || (A = [A]), A) }, removeIdAndInfo: function (A) { var e = this.allOids.indexOf(A); this.allOids.splice(e, 1), delete this.marks[A], delete this.components[A] }, remove: function (A) { if (A = this.idsToArray(A), !Array.isArray(A)) return A; for (var e = 0; A.length > e; e += 1) this.removeIdAndInfo(A[e]), this.viewer.removeExternalObjectByName(A[e]); this.viewer.render() }, hide: function (A) { if (A = this.idsToArray(A), !Array.isArray(A)) return A; for (var e = 0; A.length > e; e += 1) { var t = this.findMark(A[e]); t && (t.visible = !1) } this.viewer.render() }, show: function (A) { var e = null; if (A) { A = this.idsToArray(A); for (var t = 0; A.length > t; t += 1) (e = this.findMark(A[t])) && (e.visible = !0) } else for (var i in this.components) (e = this.components[i]) && (e.visible = !0); this.viewer.render() }, isolation: function (A) { if (this.allOids.length > 0) { A = this.idsToArray(A); this.show(); for (var e = this.allOids.concat(), t = 0; A.length > t; t += 1) { var i = A[t]; if (-1 === this.allOids.indexOf(i)) return { data: "mark不存在" }; for (var o = 0; e.length > o; o += 1) if (i === e[o]) { e.splice(o, 1); break } } var n = null; for (o = 0; e.length > o; o += 1) (n = this.findMark(e[o])) && (n.visible = !1); this.viewer.render() } } }); var Od = function (A) { this.defaultSettings = { id: "", mode: "absolute", startPosition: [0, 0, 0], endPosition: [0, 0], color: [255, 0, 0], colorLine: [0, 0, 0], offset: [0, 0], draggable: !0, componentId: "", domElement: null, title: "标签", showPoint: !0, showLine: !0 }, this.initStartPos = {}; var e = A; "function" == typeof A.getViewerImpl && (e = A.getViewerImpl()), this.dragging = !1, this.init(e), this.markState = {}; var t = this; this.showPoint = !0, this.showLine = !0, e.cameraControl.addEventListener(Rc.ON_CAMERA_CHANGE, (function () { t._update() })) }; Od.prototype = uh.extend(!0, {}, Nd.prototype, { constructor: Od, add: function (A, e) { var t = document.createElement("div"), i = Object.assign({}, this.defaultSettings, A), o = this.hasTheSameId(i); if (o) return o; "" === i.id && (i.id = a.generateUUID()), t.id = "label" + i.id, this.marks[i.id] = Object.assign({}, i); var n = this.viewer.getScreenCoordFromSceneCoord(i.startPosition), r = i.offset, s = i.endPosition.concat(), l = []; ("relativeute" === i.mode ? (s = [n[0] + r[0], n[1] + r[1]], i.endPosition = [0, 0]) : i.offset = [0, 0], Array.isArray(i.colorLine)) && (i.colorLine = "rgb(" + i.colorLine[0] + "," + i.colorLine[1] + "," + i.colorLine[2] + ")"); var c = document.createElement("div"); (c.id = "labelStart" + i.id, c.className = "labelStart", c.style.cssText = "border:2px solid red; border-radius:5px; -moz-border-radius:5px; height: 4px;width: 4px;position: absolute;margin-left: -3px;margin-top: -3px;top:" + n[1] + "px;left:" + n[0] + "px; background-color: red;", t.appendChild(c), this.showPoint && i.showPoint || (c.style.display = "none"), Array.isArray(i.color)) && (i.color = "rgb(" + i.color[0] + "," + i.color[1] + "," + i.color[2] + ")"); var h = document.createElement("div"); h.id = i.id, h.className = "labelingDiv", h.style.cssText = "border:2px solid " + i.colorLine + ";text-align:center;border-radius:5px;-moz-border-radius:5px;min-width: 66px;position: absolute;width:-webkit-fit-content;width: -moz-fit-content;background-color:" + i.color + ";", t.appendChild(h); var d = document.createElement("span"); d.id = "labelTitle" + i.id, d.className = "labelTitle", d.onmouseover = function () { d.style.cursor = "move" }, d.onmouseout = function () { d.style.cursor = "auto" }, d.style.cssText = "display:block;padding:2%;text-align:center;color: #000000;white-space:nowrap", d.innerText = i.title, h.appendChild(d), 0 > s[0] && (s[0] = 5), 0 > s[1] && (s[1] = 5), s[0] > this.viewer.domElement.offsetWidth - h.offsetWidth && (s[0] = this.viewer.domElement.offsetWidth - h.offsetWidth), s[1] > this.viewer.domElement.offsetHeight - h.offsetHeight && (s[1] = this.viewer.domElement.offsetHeight - h.offsetHeight), h.style.cssText += "left:" + s[0] + "px; top:" + s[1] + "px", i.domElement && h.appendChild(i.domElement), s[0] > n[0] ? s[1] > n[1] ? (l[0] = s[0], l[1] = s[1]) : (l[0] = s[0], l[1] = s[1] + h.offsetHeight) : s[1] > n[1] ? (l[0] = s[0] + h.offsetWidth, l[1] = s[1]) : (l[0] = s[0] + h.offsetWidth, l[1] = s[1] + h.offsetHeight); var p = n[0] - l[0], g = n[1] - l[1], u = Math.sqrt(p * p + g * g), f = Math.atan(g / p) / Math.PI * 180; p > 0 || (g > 0 ? f += 180 : f -= 180); var m = document.createElement("div"); m.id = "labelLine" + i.id, m.className = "labelLine", m.style.cssText = " height: 2px;position: absolute;transform-origin: left center;width:" + u + "px;-ms-transform:rotateZ(" + f + "deg);-moz-transform:rotateZ(" + f + "deg);-webkit-transform:rotateZ(" + f + "deg);-o-transform:rotateZ(" + f + "deg);transform:rotateZ(" + f + "deg);left:" + l[0] + "px;top:" + l[1] + "px;background-color:" + i.colorLine + ";", t.appendChild(m), this.showLine && i.showLine || (m.style.display = "none"), this.viewer.domElement.appendChild(t), i.draggable && this._enableDrag(h), this.allOids.push(i.id), this.markState[i.id] = { userHide: !1, outOfBoundary: !1 }, "function" == typeof e && e(i.id) }, enablePoint: function (A) { this.showPoint = A, this._update() }, enableLine: function (A) { this.showLine = A, this._update() }, _update: function () { for (var A in this.marks) { var e = this.viewer.getScreenCoordFromSceneCoord(this.marks[A].startPosition), t = this.marks[A].endPosition.concat(), i = this.marks[A].offset; "relativeute" === this.marks[A].mode && (0 !== t[0] || 0 !== t[1] ? (i = [t[0] - e[0], t[1] - e[1]], this.marks[A].endPosition = [0, 0], this.marks[A].offset = i) : t = [e[0] + i[0], e[1] + i[1]]); var o = [0, 0], n = document.getElementById(A); t[0] > e[0] ? t[1] > e[1] ? (o[0] = t[0], o[1] = t[1]) : (o[0] = t[0], o[1] = t[1] + n.offsetHeight) : t[1] > e[1] ? (o[0] = t[0] + n.offsetWidth, o[1] = t[1]) : (o[0] = t[0] + n.offsetWidth, o[1] = t[1] + n.offsetHeight); var r = e[0] - o[0], a = e[1] - o[1], s = Math.sqrt(r * r + a * a), l = Math.atan(a / r) / Math.PI * 180; r > 0 || (a > 0 ? l += 180 : l -= 180); var c = getComputedStyle(this.viewer.domElement), h = parseInt(c.width, 10), d = parseInt(c.height, 10); 0 > e[1] || e[1] > d || 0 > e[0] || e[0] > h ? (this.markState[A].outOfBoundary = !0, document.getElementById("labelStart" + A).setCss({ display: "none" }), document.getElementById("labelLine" + A).setCss({ display: "none" }), document.getElementById(A).setCss({ display: "none" })) : (this.markState[A].outOfBoundary = !1, this.dragging || "relativeute" !== this.marks[A].mode || (document.getElementById(A).style.left = t[0] + "px", document.getElementById(A).style.top = t[1] + "px"), this.markState[A].userHide || (document.getElementById(A).setCss({ display: "block" }), this.showPoint && this.marks[A].showPoint ? document.getElementById("labelStart" + A).style.cssText += ";display:block;top:" + e[1] + "px; left:" + e[0] + "px" : document.getElementById("labelStart" + A).setCss({ display: "none" }), this.showLine && this.marks[A].showLine ? document.getElementById("labelLine" + A).style.cssText += ";display:block;width:" + s + "px;transform-origin: left center;-ms-transform:rotateZ(" + l + "deg);-moz-transform:rotateZ(" + l + "deg);-webkit-transform:rotateZ(" + l + "deg);-o-transform:rotateZ(" + l + "deg);transform:rotateZ(" + l + "deg);left:" + o[0] + "px; top:" + o[1] + "px" : document.getElementById("labelLine" + A).setCss({ display: "none" }))) } }, _enableDrag: function (A) { var e = this, t = A, i = A.id, o = t.querySelector("#labelTitle" + i), n = this.viewer.domElement, r = n.offsetLeft, a = n.offsetTop, s = this; o.addEventListener("mousedown", (function (e) { e.preventDefault(), s.dragging = !0, t.setAttribute("offset-left", e.offsetX), t.setAttribute("offset-top", e.offsetY), t.setAttribute("allow-drag", "true"), [A.style.left, A.style.top] })), document.addEventListener("mousemove", function (A) { if ("true" === t.getAttribute("allow-drag")) { A.preventDefault(); var e = A.clientX - parseInt(t.getAttribute("offset-left"), 10) - parseInt(t.style.borderWidth, 10) - r, o = A.clientY - parseInt(t.getAttribute("offset-top"), 10) - parseInt(t.style.borderWidth, 10) - a; 0 > o && (o = 5), o > n.offsetHeight - t.offsetHeight && (o = n.offsetHeight - t.offsetHeight), 0 > e && (e = 5), e > n.offsetWidth - t.offsetWidth && (e = n.offsetWidth - t.offsetWidth), t.style.cssText += ";left:" + e + "px;top:" + o + "px", this.marks[i].endPosition = [e, o], this._update() } } .bind(this)), document.addEventListener("mouseup", (function (A) { "true" === t.getAttribute("allow-drag") && (A.preventDefault(), t.setAttribute("allow-drag", "false"), s.dragging = !1) })), o.addEventListener("touchstart", (function (e) { e.preventDefault(); var i = parseInt(t.style.left, 10), o = parseInt(t.style.top, 10), n = e.targetTouches[0].clientY; t.setAttribute("offset-left", e.targetTouches[0].clientX - i), t.setAttribute("offset-top", n - o), t.setAttribute("allow-drag", "true"), [A.style.left, A.style.top] })), document.addEventListener("touchmove", (function (A) { if ("true" === t.getAttribute("allow-drag")) { A.preventDefault(); var o = A.targetTouches[0].clientX - parseInt(t.getAttribute("offset-left"), 10) - parseInt(t.style.borderWidth, 10) - r, n = A.targetTouches[0].clientY - parseInt(t.getAttribute("offset-top"), 10) - parseInt(t.style.borderWidth, 10) - a; 0 > n && (n = 5), n > e.viewer.domElement.offsetHeight - t.offsetHeight && (n = e.viewer.domElement.offsetHeight - t.offsetHeight), 0 > o && (o = 5), o > e.viewer.domElement.offsetWidth - t.offsetWidth && (o = e.viewer.domElement.offsetWidth - t.offsetWidth), t.style.cssText += ";left:" + o + "px;top:" + n + "px", e.marks[i].endPosition = [o, n], e._update() } })), document.addEventListener("touchend", (function (A) { "true" === t.getAttribute("allow-drag") && (A.preventDefault(), t.setAttribute("allow-drag", "false")) })) }, updateMark: function (A, e) { if (!this.marks[A]) return { id: A, data: "该标签不存在" }; var t = Object.assign({}, this.marks[A], e); this.marks[A] = Object.assign({}, t); var i = this.viewer.getScreenCoordFromSceneCoord(t.startPosition), o = t.offset, n = t.endPosition.concat(), r = []; "relativeute" === t.mode ? (n = [i[0] + o[0], i[1] + o[1]], t.endPosition = [0, 0]) : t.offset = [0, 0], Array.isArray(t.colorLine) && (t.colorLine = "rgb(" + t.colorLine[0] + "," + t.colorLine[1] + "," + t.colorLine[2] + ")"); var a = document.getElementById("labelStart" + A); a.style.cssText = "border:2px solid red; border-radius:5px; -moz-border-radius:5px; height: 4px;width: 4px;position: absolute;margin-left: -3px;margin-top: -3px;top:" + i[1] + "px;left:" + i[0] + "px;background-color:" + t.colorLine + ";", this.showPoint && t.showPoint || (a.style.display = "none"), Array.isArray(t.color) && (t.color = "rgb(" + t.color[0] + "," + t.color[1] + "," + t.color[2] + ")"); var s = document.getElementById(A); s.style.cssText = "border:2px solid " + t.colorLine + ";text-align:center;border-radius:5px;-moz-border-radius:5px;min-width: 66px;position: absolute;width:-webkit-fit-content;width: -moz-fit-content;background-color:" + t.color + ";"; var l = document.getElementById("labelTitle" + A); l.innerText = t.title, 0 > n[0] && (n[0] += 5), 0 > n[1] && (n[1] += 5), n[0] > this.viewer.domElement.offsetWidth - s.offsetWidth && (n[0] = this.viewer.domElement.offsetWidth - s.offsetWidth), n[1] > this.viewer.domElement.offsetHeight - s.offsetHeight && (n[1] = this.viewer.domElement.offsetHeight - s.offsetHeight), s.style.cssText += "left:" + n[0] + "px; top:" + n[1] + "px"; var c = l.nextElementSibling || l.nextSibling; c && s.removeChild(c), t.domElement && s.appendChild(t.domElement), t.draggable && this._enableDrag(s), n[0] > i[0] ? n[1] > i[1] ? (r[0] = n[0], r[1] = n[1]) : (r[0] = n[0], r[1] = n[1] + s.offsetHeight) : n[1] > i[1] ? (r[0] = n[0] + s.offsetWidth, r[1] = n[1]) : (r[0] = n[0] + s.offsetWidth, r[1] = n[1] + s.offsetHeight); var h = i[0] - r[0], d = i[1] - r[1], p = Math.sqrt(h * h + d * d), g = Math.atan(d / h) / Math.PI * 180; h > 0 || (d > 0 ? g += 180 : g -= 180); var u = document.getElementById("labelLine" + A); u.style.cssText = "height: 2px;position: absolute;transform-origin: left center;width:" + p + "px;-ms-transform:rotateZ(" + g + "deg);-moz-transform:rotateZ(" + g + "deg);-webkit-transform:rotateZ(" + g + "deg);-o-transform:rotateZ(" + g + "deg);transform:rotateZ(" + g + "deg);left:" + r[0] + "px;top:" + r[1] + "px;background-color:" + t.colorLine + ";", this.showLine && t.showLine || (u.style.display = "none") }, updateColor: function (A, e) { Array.isArray(A) || (A = [A]); for (var t = 0; A.length > t; t += 1) { var i = A[t]; if (!this.marks[i]) return { id: i, data: "该标签不存在" }; Array.isArray(e) ? document.getElementById(i).style.cssText += ";background-color:rgb(" + e[0] + "," + e[1] + "," + e[2] + ")" : document.getElementById(i).style.cssText += ";background-color:" + e, this.marks[i].color = e } }, updateTitle: function (A, e) { Array.isArray(A) || (A = [A]); for (var t = 0; A.length > t; t += 1) { var i = A[t]; if (!this.marks[i]) return { id: i, data: "该标签不存在" }; document.getElementById("labelTitle" + i).innerText = e, this.marks[i].title = e } }, updateDomElement: function (A, e) { if (this.marks[A]) { var t = document.getElementById(A), i = t.querySelector(".labelTitle"), o = i.nextElementSibling || i.nextSibling; return o && t.removeChild(o), e && t.appendChild(e), this.marks[A].domElement = e, !0 } return { id: A, data: "该标签不存在" } }, remove: function (A) { A = this.idsToArray(A); for (var e = 0; A.length > e; e += 1) { var t = A[e]; if (!this.marks[t]) return { id: t, data: "该标签不存在" }; this.viewer.domElement.removeChild(document.getElementById("label" + t)), delete this.marks[t], delete this.markState[t]; var i = this.allOids.indexOf(t); this.allOids.splice(i, 1) } }, hide: function (A) { A = this.idsToArray(A); for (var e = 0; A.length > e; e += 1) { var t = A[e]; if (!this.marks[t]) return { id: t, data: "该标签不存在" }; this.markState[t].userHide = !0, this.markState[t].outOfBoundary || (document.getElementById("labelLine" + t).style.display = "none", document.getElementById("labelStart" + t).style.display = "none", document.getElementById(t).style.display = "none") } }, show: function (A) { if (A) { A = this.idsToArray(A); for (var e = 0; A.length > e; e += 1) { if (!this.marks[o = A[e]]) return { id: o, data: "该标签不存在" }; this.markState[o].userHide = !1, this.markState[o].outOfBoundary || (this.showPoint && this.marks[o].showPoint && (document.getElementById("labelStart" + o).style.display = "block"), this.showLine && this.marks[o].showLine && (document.getElementById("labelLine" + o).style.display = "block"), document.getElementById(o).style.display = "block") } } else for (var t = this.allOids.concat(), i = 0; t.length > i; i += 1) { var o; this.markState[o = t[i]].userHide = !1, this.markState[o].outOfBoundary || (this.showPoint && this.marks[o].showPoint && (document.getElementById("labelStart" + o).style.display = "block"), this.showLine && this.marks[o].showLine && (document.getElementById("labelLine" + o).style.display = "block"), document.getElementById(o).style.display = "block") } }, isolation: function (A) { if (this.allOids.length > 0) { A = this.idsToArray(A), this.show(); for (var e = this.allOids.concat(), t = 0; A.length > t; t += 1) { var i = A[t]; if (!this.marks[i]) return { data: "mark不存在" }; for (var o = 0; e.length > o; o += 1) if (i === e[o]) { e.splice(o, 1); break } } for (var n = 0; e.length > n; n += 1) document.getElementById("labelLine" + e[n]).style.display = "none", document.getElementById("labelStart" + e[n]).style.display = "none", document.getElementById(e[n]).style.display = "none" } }, addEventListener: function (A, e, t) { document.getElementById(A).addEventListener(e, t) }, removeEventListener: function (A, e, t) { document.getElementById(A).removeEventListener(e, t) } }); var Vd = function (A) { this.defaultSettings = { id: "", URL: "", side: 2, scale: 1, width: 1, height: 1, opacity: 1, transparent: !1, alwaysVisible: !1, useImageSize: !0, faceToCamera: !1, color: [1, 1, 1], emissive: [0, 0, 0], position: [0, 0, 0], face: "z", useFaceMatrix: !0, matrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }, this.faceMatrix = { x: [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1], y: [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1], z: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }; var e = A; "function" == typeof A.getViewerImpl && (e = A.getViewerImpl()), this.init(e), this.enabled() }; Vd.prototype = uh.extend(!0, {}, Nd.prototype, { constructor: Vd, add: function (A, e) { var t = this, i = gc({}, this.defaultSettings, A), o = this.hasTheSameId(i); if (o) return o; var n = 1, r = 1, a = (new Aa).load(i.URL, (function (A) { t.viewer.render() }), (function () {}), (function (A) { t.dispatchEvent({ type: Tc.LOAD_TEXTURE_ERROR, data: "加载材质出错" }) })); !0 === i.alwaysVisible && (i.transparent = !0); var s = new xr({ color: new LA(i.color[0], i.color[1], i.color[2]), emissive: new LA(i.emissive[0], i.emissive[1], i.emissive[2]), map: a, depthTest: !i.alwaysVisible, side: i.side, opacity: i.opacity, transparent: i.transparent }); n = i.width ? i.width : s.map.image.width, r = i.height ? i.height : s.map.image.height; var l = new Ue(new et(1, 1, 1, 1), s), c = new M; if (i.matrix && (3 === i.matrix.length ? (c.elements[12] = i.matrix[0], c.elements[13] = i.matrix[1], c.elements[14] = i.matrix[2]) : c.fromArray(i.matrix)), l.applyMatrix4(c), i.faceToCamera) { var h = new y, d = new y, p = new f; l.onBeforeRender = function () { t.viewer.camera.matrixWorld.decompose(h, p, d), l.quaternion.copy(p), l.updateMatrixWorld(!0) } } return l.scale.set(i.scale * n, i.scale * r, 1), l.updateMatrixWorld(!0), "" !== i.id ? l.key = i.id : (l.key = l.uuid, i.id = l.uuid), t.addObjectToScene(i, l), "function" == typeof e && e(l.key), l.componentKey = i.componentKey && Array.isArray(i.componentKey) ? i.componentKey : i.componentKey ? [i.componentKey] : [], l }, updateMark: function (A, e) { var t = this, i = this.findMark(A); if (i) { i.applyMatrix4((new M).getInverse(i.matrix)); var o = gc({}, t.marks[A], e), n = new M; if (o.matrix && (3 === o.matrix.length ? (n.elements[12] = o.matrix[0], n.elements[13] = o.matrix[1], n.elements[14] = o.matrix[2]) : n.fromArray(o.matrix)), i.applyMatrix4(n), o.faceToCamera) { var r = new y, a = new y, s = new f; i.onBeforeRender = function () { t.viewer.camera.matrixWorld.decompose(r, s, a), i.quaternion.copy(s), i.updateMatrixWorld(!0) } } else delete i.onBeforeRender; if (i.scale.set(o.scale * o.width, o.scale * o.height, 1), i.updateMatrixWorld(!0), i.componentKey = o.componentKey && Array.isArray(o.componentKey) ? o.componentKey : o.componentKey ? [o.componentKey] : [], t.marks[A] = o, e.URL) (new Aa).load(o.URL, (function (A) { !0 === o.alwaysVisible && (o.transparent = !0); var e = new xr({ color: new LA(o.color[0], o.color[1], o.color[2]), emissive: new LA(o.emissive[0], o.emissive[1], o.emissive[2]), map: A, depthTest: !o.alwaysVisible, side: o.side, opacity: o.opacity, transparent: o.transparent }); i.material = e })); else !0 === o.alwaysVisible && (o.transparent = !0), i.material.depthTest = !o.alwaysVisible, i.material.transparent = o.transparent, i.material.opacity = o.opacity, i.material.side = o.side, i.material.emissive = new LA(o.emissive[0], o.emissive[1], o.emissive[2]) } this.viewer.render() } }); var Gd = function (A) { this.defaultSettings = { id: "", url: "", width: 1, height: 1, scale: 1, alwaysVisible: !1, position: [0, 0, 0], componentId: "", useImageSize: !0 }; var e = A; "function" == typeof A.getViewerImpl && (e = A.getViewerImpl()), this.init(e), this.enabled() }; Gd.prototype = uh.extend(!0, {}, Nd.prototype, { constructor: Gd, add: function (A, e) { var t = this; !A.url && A.URL && (A.url = A.URL); var i = Object.assign({}, this.defaultSettings, A), o = this.hasTheSameId(i); if (o) return o; var n = 1, r = 1; (new Aa).load(i.URL || i.url, (function (A) { var o = new ro({ map: A, color: 16777215, depthTest: !i.alwaysVisible, transparent: i.alwaysVisible }); n = i.useImageSize && o.map && o.map.image && o.map.image.width ? o.map.image.width : i.width, r = i.useImageSize && o.map && o.map.image && o.map.image.width ? o.map.image.height : i.height; var a = new vo(o); a.scale.set(i.scale * n, i.scale * r, 1), i.position.isVector3 ? a.position.copy(i.position) : a.position.set(i.position[0], i.position[1], i.position[2]), a.updateMatrixWorld(!0), "" !== i.id ? a.key = i.id : (a.key = a.uuid, i.id = a.uuid), t.addObjectToScene(i, a), "function" == typeof e && e(a.key) }), (function () {}), (function (A) { t.dispatchEvent({ type: Tc.LOAD_TEXTURE_ERROR, data: "加载材质出错" }) })) }, updateMark: function (A, e, t) { var i = this, o = this.findMark(A); if (o) { var n = Object.assign({}, i.marks[A], e), r = 1, a = 1; (new Aa).load(n.URL || n.url, (function (e) { var s = new ro({ map: e, color: 16777215, depthTest: !n.alwaysVisible }); r = n.useImageSize && s.map && s.map.image && s.map.image.width ? s.map.image.width : n.width, a = n.useImageSize && s.map && s.map.image && s.map.image.width ? s.map.image.height : n.height, o.material = s, o.scale.set(n.scale * r, n.scale * a, 1), n.position.isVector3 ? o.position.copy(n.position) : o.position.set(n.position[0], n.position[1], n.position[2]), o.updateMatrixWorld(), i.viewer.render(), i.marks[A] = n, "function" == typeof t && t(A) }), (function () {}), (function (A) { i.dispatchEvent({ type: Tc.LOAD_TEXTURE_ERROR, data: "加载材质出错" }) })) } }, resize: function (A, e, t) { if (null == A) return { data: "未选中mark" }; if (!e || !t) return { data: "未指定尺寸" }; Array.isArray(A) || (A = [A]); for (var i = null, o = 0; A.length > o; o += 1) (i = this.findMark(A[o])) && (i.scale.set(e, t, 1), i.updateMatrixWorld(), this.viewer.render()) } }); var Pd = { front: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAA8UExURf/////UgCsAAABVqgArgAAAK4DU/wAAAKpVANT//1Wq////1IArAFUAAP//qqr//wAAVdSAK/+qVSuA1JRKhuAAAAEWSURBVHja7ZnbEoIgEEAtK4iu0P//a7dRcYVJZ1jL5pxHd8Y9yAK1VBUAAAAAAAAAAMBUgtnsxz4tzvlknrhcQFcimIbrRcZ8G0vYFcO2SWoRWa2zIYUJeLDd9QKHY5tfdxJ8Jk/3XJiVJhqpS34ZjQKI3j6RYakigAACsFxsfqLl5t+ci2UPpU8CtjuJEUDgzwXc8McRAgiwDBFAgH0AAVYBAgiwD8z75/SXBJrOzdcEQqY/YM08Am3rSgh4oy0Q9au7VpgfLs+y1wbxFxDJXiON7isabmoCIZEo0Ut0agL90b6bkXJeil+cxAL9ZE7UntLFRW8V2ESPLqhWgBDwiV6wqELFm7sRHe26AgAAAAAAAABYFne2vz8kSdzJgQAAAABJRU5ErkJggg==", back: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA/UExURf///1Wq/6pVAAAAVf//qtSAKwBVqgAAACuA1FUAAKr//wAAK4DU/wArgNT///+qVf/UgIArACsAAP//1CtVqjYJRWAAAAEgSURBVHja7ZnpCsIwEAZrNaae8Xr/ZxWRpFGEJrDppzjzr1LouFfJtusAAAAAAAAAAAAAoIb9znsfdM8/HvwLm9XMAoOfIMyQgHLM4/OegNkFBq8VqEyAuUBtAlr1SIVH8ybdLsUCU6GZfUxFFggg0ERgqueatyECCCAgF2ASIvAVAiUHA/dFApfTvwqkI1RQCziRQJracoFeJJDOSOdrI4FP/2ydhX3dekMxJTC0WhlVCziRQJxE5kVQKpDawLoISgXGVUHQCKQL6xwUC6QiMH4fFQuMGz2nmIR5EdiWYbFAdqfTCIw5MA1BuUC2s+slAvmtQSKQcmDaiBUCsS1tJ1GNwDMEvWgUxx9Ur+MYAuH3vQe3UwcAAAAAAADwE9wBUPU3ZdIk2/EAAAAASUVORK5CYII=", left: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA8UExURf//////1IArANT//ysAAKr//wAAVQAAAP/UgABVqgArgNSAK1UAAP//qoDU/wAAK6pVAF6q/yuA1P+qVQ6MhkQAAAEuSURBVHja7ZjJEoIwEAXjCogLwf//Vy1B4sFEQzF5pdV95UDXzCNMxjkAAAAAAAAAAAD4FzaH6k4revv5Ug2sVxqB3X4UOJ5EJWhGgW0tEuhHgeqqDkHnxCFQpbBECJ6vyGQ5IwQQQEAu8PVhKPshTSVSTSW+Eg8Fw1CmLEGvLsEUQ1kJGnUJprlIXwKjsyDk/COdWsBmPM4RMMlhjoBJE7IELJqQJ2DQhDwBgyZkCthfFN9fyPpy01DkRhiGN+ubYkQg/BWtL8uxO7EPMWglAi9NsI1BVODlczEdDeJriTAZmAYxsRfxRUqQWsz0JWKY3Aw1BVKYFBiDaHoWpXdjw9PWyQQen4LoHAgGC3agmbEX8Et2YI6A87VYQLgpRQAB2a4MAAAAAAAAAODnuAFrzi75vcAeswAAAABJRU5ErkJggg==", right: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA/UExURQAAAP//qlUAAAAAVapVAABVqtSAK////wArgNT//6r//4ArAP//1P+qVSuA1FWq/4DU///UgCsAAKpVK1VVAIkZng4AAAE4SURBVHja7dbZEoIwDIXhqEBdwe39n9VlpOiIo6nFo+Pfe8k3zTGpBfExAAAAAAAAAAAAAAAAAAAAAAAAAABSf7gys1oJKOxyGg1gNL7Un8w1gFV7AaWoBbEDaw0gdmA60wCq9gJqzb9gucgUwVcA8bad50UbAAAAfgDwcA29PYXTAN2FNEECKHLt4URAbMDbezgN0DWgDgpA3IKZEugGxGdApgR6AV0AyqAAbLaW7R2SAnCMREdCLCGAGoCn/iCAwrQAV/0BAL76+QHO+rkBrvwNAOipXz4Z1VkBffPno4Dq6pm3VwCuN0AhbcFxA0kAbdXTRzWAqvumBnAOQXkzkD4LOIWgDkLAcRA1QQkIu3XQAu6XEgDJoxQAAABfBWAS/i9ggAMAAAAAAAAAAAAAAAAAAAAAAHAAYMKWUHJ5EqMAAAAASUVORK5CYII=", top: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAYUExURf///wAAANSAKwAAVar///+qVSuA1ABVqmCk4p4AAABFSURBVGje7dOxDQAQFEBBkRjg72IgI9i/olSpJCLuBnjdSwkAgLfkmKqAgIDAqcCiC/wb8IKAgIDAzUCJjSbwSwAA4H0D+R0wJ+LbGcwAAAAASUVORK5CYII=", bottom: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA5UExURf///6pVAAAAVar/////1FWq//+qVQAAAABVqoArADwAAP/UgNT/////qgArgIDU/wAAKyuA1NSAKz7z6MUAAADNSURBVHja7dZZEoIwEEVRWg2JOLP/xTqmtBF/LOs1hfdsgGsnJmkaAAAAAAAAAMDkpfyllgACCJhLwGelfmq9ijmiCCDgnwNOFhqwXORsgQH3o9HCAupnLSbgOv5aEBEwfjPpAkoODXgZ/+26VS9BGv5qcYAff68+B/z4u436JPTj73bqu8CP39SX0XD3y2/D8r782oDtfvzM0e2BZ4EFPUjqLmjDXkSHo19+/ZPsUvD490e9CZPxKiaAAAIIIIAAAgiYXgAAAAAAAPiJM0UCIODiZq/rAAAAAElFTkSuQmCC", add: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcQAAAG/CAMAAADxZFcvAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABRUExURf////3Xw/vKtf3i1oqPlGms5f/6+EdQWf/IlOPk5faQa0dTlMbIy4pQWcb8/2lweP//y//27P/o5PixlZmPo+Px/2msy4pweOPIlIqs5fSEXoY3FXkAAAXBSURBVHja7dxdcxM3GIDRaNUK2LZQSYW2+f8/tLuZaYbgOLEdb7yvOM+V4YIJOtGXveO7O0nhKr33SZu2jPBmfq2nXFpKKWvTlhG+Kzn1dHXAqbbUarEWvdOK11rOdboe5DIFF0B+N5BMy4SsV/iXas+pGdBbtexfPb/1l2Fq2Ry87XzMecpvmoXVJNzDdMwXz8ZlIUW4m1X1sr2xTw4zezrkXDAZ62wv3Fc1nzsZS7eS7m9NPWsylp6qMdvhZJzOmFrdUrrTnfHkyVVn03DH55vKcICNsTL8GRQZBlBsrhbhe+0DiZKNUXTFMhmhCL1066/d+ERXLLM7fpTDTbUhDrAtZovpqAtqubeYBur5Zy5qMjKRevbBm9m4BFtQDw83zakm/tnGRIw/FU3EgLtiNRHDV354AMPRdID1tLsjRrwrpids3qwJ2dwca8Y62piIUY82EMc62jibxkecPOEWtO+Op/dGI+olo7glDnA+LYevFHZT9KDiAIie+h5gOVX846lzzQCIHnMLfMf4/4UHvwcIIkRBFERBhCiIgiiIEAVREAURoiAKoiBCFERBFESIgiiIgghREAVRECEKoiAKIkRBFERBhCiIgiiIEAVREAVRECEKoiBqLMS29vvpfV6DCBHizRE/QTQTIUKEeNjHtQ+n9+saRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQ4yHWpb/Wftmmv9fOQPxtbaOf5eH/+XUJIkSIryJ+2Q7xG0QzESLEzfpz6Y+1D+P38AvyeQkiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECHEoxLW29mmb/lk7Y6C/rW30s3x9568EgwgRIkSIECHeAHHLdvVF7uXu3YcU4gBBhAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChLgLxC+n9+8aRIgQIUKEOCDizx5EiIIoiIIIURAFURAhCqIgCiJEQRREQYQoiIIoiBAFURAFEaIgCqIgQhREQRREiIIoiIIIURAFURAhCqIgCqIgQhREQRREiIIoiIIIURAFURAhCqIgCiJEQRREHas92kEMW2I3EmI2GFGbHhGTwYhar4+vLKxhD6XV8RSibl79Tq4ZjujnmuW14Yh+rlnWU8MxAKJNMWTtiZubYviJaD0dAvHpnxSj/MMu+NGQRJ+ITy8cCnLTP1g/HW3CT8TlbwxKsMohYjIVgzU9cxj1QX/0HfFB1sDE3hGPTU/t9o545D7hbBPoVHNk9yuTBTXOqeboR8DJh8NBSi+8T+qJqRi1l64S2bYY+GT6uNTaFiNsiK/c6RPF/Ru+akRx94YnnFwoxjekOIIhxREM16uk0dplpZ/xWdPkwak9lttZLK36jHiH18Oz1S2pe1tKz39TtORuMu5qGtZL3tiuebYz7qTWL356pjYHnD1U+5seCy559tUatz6TzlN540eEJc2eDr/hcWaac7nC+Jfld8HzjDcSnK73dV/lLt33ZH98z31w6nPa4gvbFsk+JW3c1Pu9W7oUrv8AKiG7XScCG+oAAAAASUVORK5CYII=", plus: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcQAAAG/BAMAAAA0lLouAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAwUExURf///0dQWYqPlP/6+P3Xw/3i1vvKtePk5faQa0ePy/7x6vm2nfelhopQWYqs5dGJeGZxbd4AAAQxSURBVHja7dhBS9t3GAfwPyQGSbzsuOtewMhhytCLoJVhLwF1K7qDYFdGt8NuuxaEHtZXsNsf1G1UD4O2MNoeCp07dLvsjew1TBPTqEmMgwn9f/t5DklIcvDj8/ye5/ekKERuLLy4V7F4sf1ffM2na+vLGxWL5c7s7cXrAv+YX92rYuXNb2x+ey3k0a3VdlWPV219/fnkbx2ul1XuIc3lZ5O+MnfQrnafrG1MMB4+rv4wuNp4tJkw8PavOI+tr9oJxNpWZ+xRPY4QnkC2xrXMhbIIieaY47iwmnP//Gl0qT5r5xBrI9P1S1kExfyIrlr7IWtVOhzO2KdlFrE5lMbmbtrGO5TGhTKNWL8sms374eLWpWaznUdsXZyNR0VgHF9I4m4i8cJiWOskEuvnVYdFEV6pmXV6oVKbi5nExqBSp4vQGFziDlKJg+n/IJXY6l/ipjqpxEaZfhSL2trZi/1Y4tt+8zqXuN/uPb/KJU73DmOzk0s86zczucL+fpFMLN70do5kYq+l3k8mLmVf305jL30snrTU7mB8kkyc6U6N7WRib9co8ws1OuqnxFY7njgdTWwW8cQCERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERHxfSf+/P2NxnfvAPGLfOLfH9xofPgjIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIuI7RPzoZuPjfxAR/w9iNQIRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERHxfSc2u7poYj2/RnvETjKx1SUu5hNfRzfT8vRxN5k4k0/c6z5OJRN3uo+NZOKb3onMJ84EXwCmzmzBg7FV9p4fpM+Mfr1Gxlo/m+ndpn+Pi9wWn/dfxfabfrcpilepxIW3xOVU4v347X9wFItiO3kfvpzQqPj8HHEmUlhbOp/RyEodjIzTWE0k3i7HHcyYfrp0ca/6Nb1Oi+JeHvHupcqsxzWcxpBoJY34zVB7SUtj48nweyvpSUxL46gknkzKpLvb05GDvhH0M9VmOfr9x4sxZTpWspVSpn+OvY/O/h5yr9kb/9lBxHH8cumqTxOMRztXfz57XPkc7kxaDD95WOnVsfb12uS/v31nqbrCuYe1a/0j6o8q+jvH3G+L1y/Bz/66u1yxWHn5qBCx8S/INvmwxH9NtQAAAABJRU5ErkJggg==", E: "data:image/png;base64,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", Q: "data:image/png;base64,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", downArrow: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAh9JREFUSA21lb0uRUEUhffxEzo3cXkJDyAhUdCT0CkkCk+l0yv0KBQSUXsJf6EgRHHsb86ssc09VyjsZO6eWbPW2rPnnJzbtG07aV20nhofyhkuKeJxLoIw5YRP5d0Iqghbf5nDJb5pJhyQOVlDZAnIRB/+o14d1GJEimgAphOSNRdOJoqeAjVJhokZfuAp+jTsCS/ceEV9YhUja8ATPmLoe8ISTx2wiBuax5wE/IRQISBx47xRBxAVEPtCZjWXdY0VvR6yTJutCzvx3cHijO0cLtt9YX6dUFwVtIMrW7h9t2PnPp2s2WbWJB4dKHSSQdva6u2bne1f24I2PcdTFvNdzJ2LxjkDHxgzEj8WSBtzU7btkxvfXXp8tVNO52QFnBJ7lzb/grlz0dC1byZjz3DbJn8qABNARvj8YecSzk3b+tGKPSDwQYxwFmdtw6/0jj0f4lnsQEUMMwSciiIU806GWcydD+sDBHOnpSIUauiAIiwUpbp3MmI0M2lNuvN8LaG7ET1ALCDjWCydNhoioiu6G3Mt3/S9z6DzwKqL9BrmhwmCeT45rzGGHK7ODnUd/Or/wF/H4Uv3rhtvWn7oyST/1EUSXHcgQbyu387j1RQNDzhWZq61ikVh31x8abVOen0qWEQxJIUEwuAJ0xxur15f0z6xCihHg9p4rD5eUTSSQCcla8ATrkLjirfqAJHIcS5MBhjHUCEwceP8//8PPgE7CQFG2pHOlwAAAABJRU5ErkJggg==", upArrow: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAhVJREFUSA2VlTFuFEEQRXswFmQODL4EB0AixEdwTsapyMjhBnYGEgfwJYwdODPC0lCvd15tbc/IQEm9Xf37/1/VPbO70zzPR20Xc0xTDOcFzqniNZcg5tzx58tuBS3C1v/kcIkDzbMANGd2SFbATGzhT+o9wShGZFQDMDtkNhdnJlJPgZGkYWeWD3jGloY98eTWK9oSW4zZAU98ZRh7Yp3nCVjUDfM6dwEfJSwEJLfmkyeAaEDcCs1GLusRS70PWdOxiyR+/NFe3/xqXwDOXrSLT2/bz0irjq2VfoovGqdYbQSWHXfzh3YZwJvF5frsZTuPIreVx16ERbu+Ftht741Zz9U8lNcdjELkJ8ft/ed3vYimy/a+yNh9do35h+/t1c3SuYaYknOa+9/tigbg4hxxoAeggOEm6wkhBhhhyJVEt3d0TG4RGqCR0Bzo8WD4FvVFAASdn9bOx/vmAdci5SRdj4djPEG/87Hz5Y1BbEw84FpkOclpEGw2T0CSx+NV9Fq478W8cuAS8+okj+3rbmt9gjQI9f00tW90x52HgL0ayQ1wf5LQoA2MBuD0wWvKH45gpD1YE5r9Sw7XSH19yICOSv5bjsZGVnp/KqhcjSAa1QBMM2ZzcWYi9f6aCihgHqNi8uBs5cmtV6RhFdTuyW1EXG4aDgVnT4C55JqLaWABOISFyOXWPL/JVagZxBqajVzWI5a6P0EACOseq1UCAAAAAElFTkSuQmCC", mouseLeft: "data:image/jpeg;base64,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", sxzy: "data:image/png;base64,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", wasd: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABcQAAAT7BAMAAABCvK5xAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAkUExURUxpcf7y3//49f///0ZPWPWviGBRb1KIw63e9vvZuZaBeceOW6MjsukAAAADdFJOUwD8fvXCNlQAACAASURBVHja7N1PaxvpHcDxbPMGdmpiiE7t7hvodBBE+CokX7e2DsHHisHkaoooPS2ioB63xgb12kDBvrXuofabq+U/iTXPoz+WY2fmyedz2MMms5ug7zx+NJr56dUrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ7br4pG+7VXkLQT/94ryCpbjU78N15A0k7cKs6aG5WDwbRxBv+TOOsl3hkcN3MNf3vwd68gK/y2KE6Om7tR6fzbS8hyP3beN/uainWcpX54+1PRcC6Ns2QjnkDh1427ckhsD55dKzoJFF4Ub365/kc++wuJnc978Fkb+bRIwsn9xf3fe2G536LcRDEoEvGTxKn47uaK23EqiXcyiRPuU/KsSMab27M198ryYJ9yUiTkvcSp7lPaxyklfrvpkjh3tj6te8mYSpzPfkhuEb9bxiXO5514Yov47TIucT4V3jlOLfHZ30jizAr/8dPWNbllXOLcXU0p8r30Er9+dyFxrr2++am+lV7ixZ7EuU88f59g4cVbifMp8eMUE79+w+nl5TbxTpGkPXNVuEv8lzQTfytx7hLfSzPxjsS5TfzNVpqJF8cS5ybxt4kWXkwlzizxfC/VxNsSJ+3EO997fblOPNmteFH8wevLLPFC4qS9UUk3cZtxrhNPdysucZJP3PtNZhuVdN9t2owzSzzhd5sSJ/nEj73AvO6knPiW95u8Trlwl1R49eq7vaQT/51XWOJpJ27+Mq+TTrwjcV4fJ524h/BJO/HCQ/hInNQT30q68P94hSWe9iK+5xWWuMSRuMSRuMSRuMSRuMSRuMSRuMSROBKXOBKXOBKXOBKXOBKXOBKXOBJH4hJH4hJH4hJH4hJH4hJH4hJH4hJH4khc4khc4khc4khc4khc4khc4kgciUsciUsciUsciUsciUsciUsciSNxiSNxiSNxiSNxiSNxiSNxiSNxiSNxJC5xJC5xJC5xJC5xJC5xJC5xJI7EV8hbZxH/Gq088B+x4yaT5Qd1Isf8U+LUMvGWxGlI4ufnH7tVvXK86sD9bsRoxanRjhzzR4nzvIlfXkqcb24V70ocq7jEafJevCdx0lnFz2xUSDjxoj0YxGpdmfjFBonnrcgxRxLnmRP/r8RJOvEDqzhpJ/4+mviK8PJsGEt8uHwPn29LnK+wUTmROEknfvIFV/GexKld4nmWbRBeZxpNfMUevnO6ya5f4jxL4u8kThqJX9uJhHc4GS/fwccLX776t8MtUVlKHIlLHIkjcYnz7SbefnTieetsk8R3Lh5945bE+UqJXy5K/J3EsYpLnJdNvFOGqfZHR0s/piwXJL7s1MhaHyWOxCWOxJG4xJH4w2AfnXh7f0Hh3d1liW8Pg6viq+ZnSZxGJ97rSRyruMR5auLF1WMT37lYlPiy48JnLySOxCWOxJH4KoPYU5iHj7v6t1Hij75kKHEkjsRD0zLyJObu4sSnp8NFifd6h4v3Q8H25tHbFIkjcST+rIl3S4mT9io+lDhWcYnzwolnsSn6/cdcGnl4aiz8vwQnUk/ivFDi5xLHKi5xmpt4ZJe8NPGriyWJ99ff8fc3+KNKnEYlPpY4VnGJYxVH4qvuw4q8f+wtfNI4L4ebJD5Y/7dKnFonPpY4dUs8iwyNWJx4u7tMb7LguMH61xcljsSR+FMT70ocq7jEkbjEqUXisZH4u5sl3o0nnmVn4UkkcV4s8TOJI3GJ09jEo9/AtmBeRJ615qdRlMHkiKNo4uUjbhGQOLVJvDuUOFZxidOgxDvT0/nEP6yV+HQqcSQucSQucSSOxGPvIYex4bTxs2F//kT4y1pjDQeDxwwjkjg1TrwsJY5VXOK8bOJFcbHu1J+d+YeTw8Tjx11dhdMPJY7EJc6XSnx/3YfpW/PT4fqjP61zXHYW3IU12uSCisR5/sTPN0v8UuIkvYqfW8Wxiksce3GJs2nip+WaiZ/Oz8Lqj/4c3E4bSzz4TRKnyYmPJU7dEo8NC+rFnsLcrz7h+XNQb+TbH8LPNsvJWOJIXOI0NvGexLGKSxyJI/E17VytmfhFdX7tz2dXq78VWeI0OfEziZN24pcSxyoucaziEscqLnE2Tjw2SaUbVJhn1eeYj2LPrI1GwXNtwX97tNmfU+JIHInHh1xFvi82uBmwHcyKOIrNjwgSD+fndycSp46Jn5xInGYmnmcfN1rFx7PR4cNgIFZlhxMONCwlTi0TP5A4VnGJU8fEo/OwqgOr8lblGvhNy1nk7Bivuiy+4QUVifPMiV9eSpykEz+3itPYxPdXJ945rTz+cHd1MDz0SOI0IfGhxEk78Z7ESSjx7XCaT7c/n2p7P/4x5orEsy/34abEqUviY4lTu8Q/WMVJOvHW5dWqxHcu4tMkwh8Ah5O5xIMxFKXEefnEwyn3ayf+QeI0YRW/tIqTdOJn51ZxUk68Hfn21/nEs+1hPPFwG7/7MOFpcKNhf9PL4hLnCYkfbJ54sI2XODVM/H1kQvLhwyeUp6fD+NdIhD8A5hoOfzxInK+R+MnmiR9InGau4l2rOGm/3bSKk1DieXhtb/a28UHig+oH9bsLfwDMNRzOEtqdSJxGJX4icdJOfHAicaziEsdeXOLUdaMiceqfeBEbkdx/MBArP/tYuZfq8PPZMVx8n1UezNjvHUqcWiZ+UX1Af83ELyWOVVzivEDig+WJl8OFvxbO0nqQePDARP+okDgSlzhfPPFpOQwezzn8fBPLkvzDh/BHC4+TOBKXOBJH4hJH4hLnG0s8W5r4zrIP90/LtRMvy8OxxKlL4r0vn/j1f1PifJ3Ei6vw21D6nz7BbC176G27DL6Sbbzg1LCKI3GJI3EkvtEn+PsLE+9MT5ddFtkJbuG6T7x6anRHo80vqEicl0z8ncSxikucWiUeDAN6OPFqf1ni7eAuxfuQq6dGdzIZSxyJSxyJI3GJI/HKJ/itj8Hkzsn9+8nKNfPduVA7wZj8+8Srp0ZP4qSS+DuJYxWXOC+aePCdbJ+eM8635+9C7FU+hc+Db0gu7yZJBHv4J/0BJU4DEn8ncdJOfCxxrOIS53kSb4c3qYyiv9APbjRZMH42q4yJsxcntcTPJY5VXOJYxSWOVRyJr1a9cPKIxBd8f2wwuGJX4khc4jxb4q3zi9ij9Hn15pXD4EaTYFrcbeLVf/1gvJbE+RqJV7fOEiepxMMnH+4S3x6uSjx4X9m7OXKw4AZEidO8xC8kThMT71nFsYpbxbEXlzh1TfxmrFXwqWck1HDm5+zIK4kjcYnzconn2XZsIErwqMR4nYGIo6MseFLiKc8mSxyJI3GJI3GJk3Di4feWzBKv3qLSKyOhxk6OLCsXfT+KxKlx4l2J09zEgy87Lg8nf6tMrO2PotPiwiOn1Tlwoyf+6SSOxJG4xJG4xJG4xJG4xKlj4p0yTPyv+93VicdOjsGgK3Hqnnhv48R7EqeGiedlONaqmvjuZK3Eu7uVxMty8n/27ue1bTQB43hss4dlL1FMyiZz8Q9y6K2KMET0apywp0ldD3jnajRhr4Fx6Rx9cZnLZIxD1b2GLXiPm1nY5J9byUmaX5YsyU7i99H3gR4Lkd6PHr+vfkKcKBPvQZyIt3gL4uTFic96/+av5w9n57MPjodHx/7lJRMVAnGIE4hDnECcQDxpZrxF+eP928X3Zz9Fb08eHh37k/sP/fQXPS0OcfI0xH9JSHzyiPgFxImRLT6YTfyCFie0OMTJSxOf8S78n3tJiDuP7kh52OLDIcSJGPELiJOVI/74M4IPiR9EPEXv+72HL6f17r+qHOJkJYifQ5zkqsVbmYk3IU5ocYgT5uIQJ0slPuNd+A8fyYwgblm92P+4v/jfBnGy2sQHECcrQPzxW5QTf8vknBYnEIc4gTjECcQJxBc4a/jKy0o8/uA4gDiBOMQJxAnEFyW+fREHtTWMPrt96sWcGW8dQZysCPEJxAktDnFCi0OcQBzi5AWIO41O1gs4r+KI7x9DnEAc4mSlib+NuxEX4gTiECcQJxBfPHbs0zsHsQdHzCX8gwHECcQhTiBOIL54omfULS/uAo7rn6Z/qhniZKWItyBOBIhHTzf2+8exU5ztLLeZQ5xAHOIE4gTiECcQhzjJB/Ho+77350h9C3ECcYgTiEOcQJxAfIFEP71zMIy/RtmIvLg5HECcQBzi5HmIRz/acDRHqutFHB0QJxCHODGCeAvihBaHOIE4xMlTEo9+QG3eyW17cjH76Ogv5Q+DOHly4ntziZ9BnKw8cdc/7WVrcacTcXQMIU5EiP8BcUKLQ5zQ4hAntDiBeObY1vbZzPcEeYNsxD0P4sQA4s1eAuLj9zMPDogTWhzi5NmIr2wgTiBOIA5xAnGIE4hDnEAc4gTiECcQhziBOIE4xAnEIU4gDnECcYgTiEOcQBziBOIE4hAnEIc4gTjECcQhTiAOcQJxiBOIQ5xAnEAc4gTiECcQhziBOMQJxCFOIA5xAnECcYgTiEOcQBziBOIQJxCHOIE4xAnECcQhTiAOcQJxiBOIQ5xAHOIE4hAnEIc4gTiBOMQJxCFOIA5xAnGIE4hDnGQmXpYm/h9GGOIjWpxA3OAwwhCXJm5DnJTaysRdiJMCxAkTFXPTgDgp2crE30KclFxl4lsQJ6VNZeIjiBNt4m2IE+25OMTJWskRPqVilyFOSrbwifEGF/BJ0OInECfaxIXXmycQJwFx4fVm29lghCHu2LLrTbu8UWGEIe7orjcbNsJJQNzZUiVu7TK+JCQuu95sMxMna2sFR3Yy7paZp5C1tWL4g656Jy3ESZBaWXWmcghxcm1cc6ZiOxAn13OVsuRMpQFx8s245EzlcKPG0JLrVAWv/uwCnNypcb2rP1zYJPdiyS04uepD7tf4oVqJM6bkfnbKWsTXGVIiXePMxIl4jXOLIRE/qfI7A0oepSp0UsX9nvEkj1LalJmq2G1Wm+RxCvahivExN4qTWZNxxxY5q7LV5v4rMpO4synx1iDrkFsMSQRxZ1PgrlorvKUM4uRWdu2GQ9WyLN904/bvtdpGlZsMSST4Hd/oNSc3X5G52fHNnJDbtVrVpr1JgtS61omBTR7qZgZOkk1WXndHrm+ZFa7Yk1RFXnY7vln5jVEjKZEbNk9hjkIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEPNTN/rN2hUGcDkpCn83+oq4+0fHtPxvacSnw/ujcTugc7jEt4sH++Cfxu2AH0eJiJdD30a+Xdsed5czvkXH7Rr5/U13PFrSZ8FrO10zP+LVKc/9cHSx7IzN/bzquLuE8S1udY39SIQdDN7iu6C4Y+5n69zuPOJVsz/KZ79bvMAMPsSnQ7yxqPHi2OjvwIRfB7ajN666afT4Oot/+L1q+veT7e6Cs7Vi13ACbswHGYvVseHju/Byq7pp/A6wuwt97ado/rd1A+MRM5Vi3ezf6BvjtUqehU97vJZxHxRrNYWvRwfGH0zXCtMd4ziWgnDHObHWs+gOfsAsgV+xqfH5Z84iiLsa30dvWI4dfv3oG/TC7RxGIt3djCfDRY5xx7UyEi+MRQjcrCnvE7e3RDYvGOH0P9P18P+1HaURzkD8T2WVPXBSvvdLdkV8LLN5zmYlS4nrHOOO4wf/3qQnLnOMP5ysTYnrVFiQd1lKXOgYn05V0hOvCRFojB4R94U2z3EzlLjUMR5OVVITL46U9kD3LvFSOMBSm+f8lvJ0SljiUjsgGOHUi+7XUjvAvbseqauVeOoaL6uVePhDvZvrEr8ifYe4WImnvK22qFfiGU6d/llsB4Sm7xD31QbYTUlcrcSDGk97z2FdbQ/4d4nLlXi6+7GKIQi5lNfTX/xSq/Fb4r7eALspOqwQeNDbA1u7+S7xcMl9S7ytt3nOYSVFgbmCxN1RiqO8tiNIoHFLXHGAHXs9RYt3BXeA4+8mN15VbDl79I24rzjA9vcpiCsOcFBiyW8sfq3Ycs74hnhZcoBTXP4puZI7wA5PImzk8bLPt4N8/eYmYcnNS3EBu9TV3APTX+fcLjbDXJ9XK/qam5f8hEJd82fs6kxoBeKyA2wnJr5VFt0D7cTERfdA42rrd0Q3L/HVvWJDdAc4iYkXRXfA9YuTZAc46VnDQlt1D2wmJV5Q3QPvRN4qsOBkvC5LvJGUeF11D2xod1hS4qa/HSjmd3qUd+LTyXhddoATTsZ1p+LTyXglx1Px61uVdpy8E7d198Ao78Sd8Br3pu7mJVtvltq6e6CRjHhBdw8E683iie7m7eZ8tZmYeF13D1gB8XbeiZd1FyPha/xyTjxYbxZGwgOciLjwajNcb1bye21zSnxD+YRKwqUWxIVXm8HvmPJqMyFxV3kPjPJO3Glr/0yv5/tsghM+kwpx6Q57k/NzhglfNVGAOMS1iZekp2pr0j/TuxBPQrwuPVVba+ee+Eh5D7i5J+5AvFSGuPTvmDbxJNd+pCeiEIe4OvFEb5koQ1ya+F8gDnGTlxoJvlImTjzBesSBOMS1WxziEDc5FYhDHOIQhzjEIW7uGRWIQxziLDchDvHVDScN2zkfXnnidgXiEBefqVQgDvGcG4c4xA3PG4jrBuIQhzjEIQ5xiEMc4hCHOMQhDnGIQxziEIc4xCEOcYhDHOIQhzjEIQ5xiEMc4hCHOMQhLkfcsjp/nzTnpOX99GE4hDjE1YkPIA5xUeJNWhziRhK3Oj94zRQJyvx4D+IQ1yUelPnxAOIQF27xHi0OcfkWN28u3uhMkuRr//Pnz0OrDHEZ4tblZTN99vuyxL9++jSEOMT3+3umEX+bdjtbXn84GBhJ3Pru8iLyIB5CXLTFMxD/OhzsQdxo4rbV6XjNJi0+M3/zPpra4p33MdvVhzgtfqfFHYjT4rLEb0R8GELcVOL+l0kzY/LQ4hDPOXFaHOK0uAbx6bWuo6FRxC/P4zZmOIQ4Lf4gP0PcROKNTvYhp8UNJt6COC0+u/sGtDgtDnGIrxDx2L1Ai5tMfF559fsQp8VnX+0cqhDfgzgtrk08Dy3e6Sw23LQ4xOWJ56/Fm6YQn7elrdZS1xW0uA7xJZ6MeFHingdxWjzqKqcE8Vy0eGfRsc5pi4cFSIvnhXguW3xpS86nJO6ezn0GoH8McVo8ogBbEDeBuO97tLhuizfeNyG+DOL5bPFlPVHw4sQHEKfFo4kPaPHVJm5Zk0mTFqfFpYlfNGnxnBOnxWnxp73F4wmJ29tn81fNR0NanBZXJu5pE0907d776c5L8P7Vo8WXPFehxV+ceOsfH+cQ34M4LU6LQ/wFiLunvWdZS60w8TkvW+73PwxnnFGyfH9Ci5tAPMEJleU+3iFLPM8tvrhxiNPiEIc4LQ5xiM9cjPiel/mUr+t/OaPFr3bUMcQliW9tn9HiK03ctl71Em0BxGfvvxNaHOLiLf5FrMXvS7Uta2vcmXUd4PHjj0cDiK8m8ZjXyCSanwUKLv/r9VRaPCvx3qoSb3TeP9OK2UTizVTENVv8r0lbvAVxWtwQ4oP7G/cpGfEWLb6yxGMWXQdJp2eu/+WrZIvfUu/8MI/5/jHEdYnbJwFxxRYXIP728vzxRn6czHx33QDiMafHaXGjiF/kiLi1PVnK83y2pUJ8ED0bmzyd8ecl/sskV8T/DfFEG+1u6RCnxTMQ35Nv8WDBYSBx+5XXSzYXb9LieW/xMP7kLPb5x4EpxC/yRPxV5OX7p9xiA1tcivgE4jkm7kAc4vltccf67jLuEd/jlSM+82bx4a+XT3Cz5KoS96PePf0MXw4wr8UhrkS8l1fitHhuWryVU+L/Z+9+ettG7jCOa5M3EEbwYu29uGv00NsyhAAJuQqU0VNSr4KmZ4E2fDVgub4FxAJqT2sYG1Q5B/GCvvRg9GC9uUpK7Dj2jDQUh9bMb76DnAIEETkfPpwZzh9SPBTiKSmuLv1aZhvWQzyOFDthTWv2V9VFpOlBHhRxUlwA8c74vXLjMs0M6t5RUMRJcYiT4qQ4xElxgSme9N9oPyXsQpwU9z/FIU6KS0/xBctdVzdSD3HlqrYp8TjKBhB/hCOOPE1xycRziJPipDjESXFS3BfitZ//4muK6wcO05VHDUlxiDuU4hCHeLAp3nWL+LRyB5qHWL2BUH2HWkHcsxSPdKt/Vs5BiK9j1U/tB9X5m+IQhzgp7jDxHOKk+MrtO7eIK3YJunmIlfqFEt+6Xttupf6muGDiuUDiBcRJcdkpDvFVPulqNvRdeS+VGogrB79vNlaIti6V3YnRSBzxJeeWDYfBEc9FEx/cEi8gHipxMSmunEpzW6Ga0yPqqnCIk+IQh7hbKd4ZZ54SbwdHfNGhhPXvrO5tivtLPIF46MSNR+Q05yOR4hAXkeIeEFdf3/D2NfRes1urOOJxlGXLj00dhUM8gXh4xHv7IREnxUNM8eMTUvxB6VvdndY68Vg5wS67/bQTR1uakxPEEZ/W1ZLW+Jf1EXkgxHOIh0l8PxjiQlJcPWKS3flA33rMeUkQJ8Uhvm7ix6T4vaJZxA5xB4lHyzucVbcWlpjiEJdH/PgkCOLGt0054RriHhPv1d0c9y3FC4j7QtywNT5vq2Qj8cSNk6G4cph4rF7ycNdvR51s9VSxL8S7IRCXkeId5drMbwa94+L68WLcmxQfkOJfy+TKd+JFOMSjqOialmz/Zjpm4CkugPg1xDXEa9prgxQnxZ0gnu7XtdbNtxRXDlms+vWAFHcrxWmLO0+8pf5xI4MumEjis091Wde89E7q2G6DFHeFeA5x0cRJcVKcFCfFPSSejMfK7smi7Q5zUtxZ4tHWx+W7aWvqPKsjvyDuY4ord6eFuCTiobfF1cRT74mnQolP37tvslLGs2xIiltb5GqZ+Pj9QLk9wP2x4o+PtV2Ql8QHmeW2iowUH/hE/BLii2fWkuKkuOyGSiqTeEgpHhjx2War5Xqcs8Nnc1LcxRRXThF7uG/f423d6SvxY4nERaQ4xC0R3yfFSXGfiE8r7UPRLVl6R6Q4Ke4P8TOIy0hx9R4vDx9f9SWk6Ugs8U2Iy0jxasTrWITuCvEkjiaTssatvdZIcVLcWeI5Ke5WiqtnyT4cG9CdnT2EOCnudoqbE7+E+HLix8KIk+IQJ8UXESfF3SY+r7mi7LCKpe/4MlI8I8UFEj8WRdz7FI+jKFu+HuJz0RwC3bVSoYKI75PiEPeJ+Ow9V3Kyip0DJFiBD3GIO5XiEIc4Kb4W4i31/ii7I+XjoOlvHgknnkQb/VJ7B3V7R6S4KzvTQrwm4jkpDnFSnBSHOMRJ8cq9zS3VqG/6cD3El6vQfM3LhRP/PO5bZvZ4byiFuO8p3nmvSift7xqrs2wX4nKJ5xCHOCnuNvEBxEsoN/6Yn2ajXAZx48tQLgEmxT0jfhYg8QTiIRHfNJ+SRYo7Qlx5PkR3V1c9kfrcNhtDZF4Qn92CyeR/Rt/zKw+lepbi6iXAHhIvIG5MvC2CeB4Y8ctLiJPipDjEJRE3TXH1DpC7K3ZJbBGP1EegLFh7qP7cnx7YPQ7FZeLJbCLDhsn02lVr19MUhzjESfE1EO9rduLUP7lj9aqInt3NOyHuYYrrwm/NxH+3RfwkJOLzF+DGm2XKV+1peZribhJ/S4pDvNYU75LiECfFaYu7SXzWIv/xqtZFyl6luGa5zMrDybaIT5TTChatqI80VwJxscTzasTbEIe4iBRv9bukOMQlp7ijxKNM3WM6PS30Rb1Kd2D1OBQviCezvZPGCxct75Liayf+SUf89ELzR008TSEulbjIFJ9J1hpXEyfFA0/xlxO7d6D+FL/QNFNI8Qf3cFDXbipepbizxHUpPhWuzHBdWzzQFA+CuNcp3u9aLEOIk+IQF0g8ib7PSHHNgYTd9ADiEJeR4q4Sn0Ac4lZSPCo+Wr4BbhLPIR5qiodCPMwU1330CCzFr0jxQIm3SfF1Eu9kNomnFlcok+KepXjf+jw0F4lnoRKPdREWUIpriKcQl0L8ihQPIcVTUjzUFNc11XrD1R9xO8RbXavF4qoIr4hrjkeotDjXrxSHOMRJcYhD3OMU13y8r7YdmBXi0ZZd4ln1cxEg7mOKQxzipPiaiI/fdy0XiIeY4mPdjPlKQ6YQh7gzKb6IOCkunXilHBOQ4jkpLp+4gE8/pDjEg07xVj/TttKqcLBCXFsxq4+MH/lPPNoqSs9ECDnFHSYeRcu2x15h2PBgBPGgUjyaXNU0kxjipLgTKQ5xiJPiEHeO+PdZVnbq+yTY+eJOE+/3u/bLLsRDSnF9V3M2Ka/a2APE6yQ+gLhZikPcV+Ill+l1tN8+SHGIQ5wUr4/4ZFID8d5QCvFjiC9O8SXnjk4jIoe408TNv9Uu2vBtNxeb4s4Tj6Msq4F419JG+o4QzyHub4rXRDyVRZwUV9+Fs9//USybkVf1x5DiEF8j8c2NcImLSvFZ/Z4svR59X1Pu6cljUjwk4pvCiaeHdw/s+5SZTfuoPuxQmbh+c5eT/xiU8bio7dpIcaeIZ/eIf/Kf+D//ZVICIT7fOkN/SfGPC4deexW/friY4p8OJaT43w3K26CI5wETX9e+aHUSNwnxX8NJ8TTwFJdInLa4okFa/DEajaLmbWc9isYfPi3ree1W/PoB8QpFt0WX+dY2Y03XuvJXLTeJX/zx79HoXTO/If7DDxCHuCjipyekuLlwGz/GBeKpsoJTkcTTCxoqARIPKcXXs6sMxCHuOvF2kMTtjDi4SzyFeOgp7gZx3cYfPeNaiS4vP9ayoIkUh7gjxItriC+ZbJcHmOLWTl8lxSHuJvFUEPFCc2QwxEnx9RPXH/e7a14rfc1jAnFrK7UhvnLR7YpQan7zePx+UMdqLoj7TDyzdkg8xCHuJPFjiENcMvGevfOzIe488dTCn+yybwAAB85JREFUPtQQhzjEIV7uUnplBkOiaOtj1ZFHiEMc4n4Sr7r23kvi+6M8gXgwxNMAiR9DnBSXTTxzh7i2EnfL/caXV7U1Qz0nnh1YqW2IQ9xV4ml4xK0d1gdxUhziEIf4YxNPs5H1eqhEXDeTtmzFtH7RrjwPmXhvaGt02J8UhzjESXGIiyLehvh6iU+u7KwYj3UYqn/H9ZZ4mu0fWfspXhBPs6HVwcKaibchXpV4GhrxroPEo2xgad8P3S2p/t7yOsXbbVIc4g4Tn516vTLy4YnN6naeeF28IQ5xiEMc4iET72td5qUxaLcQgbhc4mmWHV7UZ7s+4l2Ify36g14WjSwMLf8KR4n/9fDwsDgdjbwjTorfKWcQX57iuZvE4ygqrA1m649gHnpOfHNzJeJtv4k7VdwnnntN/HNr5UOh65nf171/Usd7G+K2ibdtEk9CIp5CnIYKKQ7xRyLeGY9tTizRHR5cdRmfE8Q/P8Xjcb8oMl16Z8cX9Y2eQRziayfe2z88rW9oAeIOE08DIZ59Op0Sb0PcIeKtfl+38ccqjcm+bmR8eBQG8Sw7Hb0jxb0gnkJ8SYnulWbt/yPEVwmlraKovhHW3WrPAiL+Q/Tuzp8c4m4Sv76G+IrE42+EvyPFvUvxNsQdKxBf5d/90u3aTPEk0Q2pHOQQh7hk4hnEIU6KQxzipDjEIU6KQxzipDjEIU6KQxzipDjEvSDuS4E4xCEOcYhDHOIQhzjEIQ5xiEMc4hCHOMQhDnGIQxziEIc4xCEOcYhDHOIQhzjEIQ5xiEMc4hCHOMQhDnGIQxziEIc4xCEOcYhDHOIQhzjEIQ5xiEMc4hCHOMQhDnGIQxziEIc4xCEOcYhDHOIQhzjEIQ5xiEMc4hCHOMQhDnGIQxziEIc4xCEOcYhDHOIQhzjEIQ5xiEMc4hCHOMQhDnGIQxziEIc4xCEOcYhDHOIQhzjEIQ5xiEMc4hCHOMQhDnGIQxziEIc4xCEOcYhDHOIQhzjEIQ5xiEMc4hCHOMQhDnGIQxziEIc4xCEOcYhDHOIQh7ijJYY4xCH+VHQFx8ETfwlx2cQ7EJdN/IUJ8SbEZRs4D574OcRlG0ggLrqzFTzx54045KGEOfE9iEsuvzU6EBffUHm25BaI7o28arQkX9528A2VpklzTfQd+C/En4p+j52b3IU92QbiZujERT/keyZ97ieCDXS2G4ngR9jky49w4ufLW+LT8ifB/e2GaOIvjIhLfo9NG2GxwavsiWgDyVnoxBPBva2W4U3YEXsHnk+JC35PPzMjLrmpNq/jkIm/mhJ/GXZvc0o8Cr0p3mh8J9lAEp+HTlzwe2zP8CaIbYx35h9vxb6njVqhU+Jy5zDM4suIeEOygUTue9qM+HeCH/KW6atM7Df83+bExb6njVqhjSc7idT6naeXGXGp/c3tOfG4KfjyjNqhYh/yvdCJd740woS+p+OGYWlKfchn12XWWpNK/MUX4pshN8Vnn69joQ95q5k83w6a+Kwp3vipKfU9bUz8idSH/MxYuFTir75MMxMaYn8zJd7YkfmQx83YVHjjLzJfY89uppmJDLH4uTlxmQ95q/nM+Bb8WWR35Oznm9nCIkOsVYK4zIf8tXGHe5pzEh/yeO9n0SH29ifj+n2aSBxT6TTNH/LGzobI19gt8UTg9b3YNq9fmR84N5ISt2BH4lSl18lX4gKvr0T1zogLfMhfvyhxC3YEzuNoNe8QT8Qt0S1TvTPi8tpqreZ2KeIb4tpqZ1/ncOzMwYcb4vPZ0uJivFSIzwy8ltYXSb4hLu36SlXvnLi0GC8X4tMet7iYO79HvCWrNb5dmri0GC8X4jPiwmLum33Adm7/JswQ/0w8FlXDG83yT7moGI/PHhAXVcOvViAuqr8V7z1f4RZ0RD3jD4hLquGN/7d3B8lpwwAUQD05QYTHC+3APYGiVY8BmS58LNPxgtsWMiQpbaYJNl1IvHcDf31J1jAWzZyKV7RRpymt73sjOz/KZcXztpaOp92VFX+4iKWKJeyxueuNLJ1PVn9UvJZVLI1P8ypezQiHbW7mbWRDW8scv6z46yUaXahjArdzK15Jx4+70dPMiqc6tvL4nC8r/j7CFXQ8xTbPrniqYRVL01e/zP4ggipe1sLbQzz+fjFpe7pOJIYaGp5X1w7wJpwcE6ig42lqr/1d4D2CELpD8QnEXf/qrxz6tvSOh3h6sGa2Pg2FX2Map3a1KIF+U3bH0/6Tu9S7UHLJQ7dulunzEAse4nSYct8szaDoWb7/9P8C0rbUlTzFsFva8NNO1o1jW2oCcZsWN/yYQRjLneZfuRuqG9MYyjOmab+84S8JDD9jgQHE8fuPq74E+UfHh1BvxV+O1mk4FDe+h+EW69f5ZSVPh7HABHK+VQQPm4orXu4FjuumufMBXt0ugqbmin8r9aTV3FLfh/tOoOaKAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wS/FNpgMK11uGgAAAABJRU5ErkJggg==", fire: "data:image/png;base64,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", in: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAtUExURUxpcRv7KSD/MBr6KRv6Kxn6KBn6KRr6KRr6KBj3KBr7KRj3KBr6KRr6Khr6KbH1JwQAAAAOdFJOUwCPEO8wd7/PWCCvQN+ffgtVrQAABJxJREFUaN6lWd1LFFEUHwctvwIrCnyRkRIhLCJSKmOwTAr6QNPIyGSp7MOHfdiKPhAxTBBEWYiCoAeJfFQMEgtKAh96kwi0N2Fbd01d79/Q7r2zO3dm7j33zMx50rlzfvs75545555zNU0q+oWOlfsDP/unl79qAUSfe0QKkpma9as+wqlTmWrxo183SDySqcbrfzKJSB5g6V8nEknEMfoVewkJg6AD+oRsKhH0YQJKQgUwz72cfLGve+zL6LUVHuEErF9rv9nUFbejImo/fw7plxb2L91lOFbmbIh2wAGr+ZeeeOKurKeALQd4mzf+o2j1ex7huDQCliz9aoWDZEZ0Wvo3ZL9QYgGk4B94KLfxsPVKROjBGbb4DNqmS4AfD7G1RgMMlF72VkywxLYwOQRHWjFz9Lp3pUjpAAfRiIRbylB+rr1iL5SgDKDRwihUuR4PYz41Jlfoq/9cvjGxBPLvEufXUg8HuVNe05ePOZ7V4AlkKXjdWIr3QE4WPJ8Us2AIC8A2Ys1tQUJDy4QrGpkFH/AA5S7G1IKMgQfQl5z7QC1o9lN9aTBtF/KlqUi2stzUwv/nx4Ks0Po/af1zQBDbqFDY4D/QKn8A5ZwT9JwLknF/ADp1Qtx2gShT6+2qvPKL/tmQ+/OkKHsBRUw7YjthQrKJ2TwfkQMU2bwPnsuKIUyfaYUTMqCbZmQliCsDcVX+TiucAG3+jLwKUqnMLR9VJl85hVJ3UhFnPjkFHSj0OAo5Gze1EBRy8ZPUQlCg2zAbgkKlOg3BFHbxOSUIhVJVIKgolOXW/mrBKeiqSFJSMBGpFKQQVYWiikKNKhRVFHopQMduWKJyChN0wSQoiUgA1rEAaQlABgsgorBAP0csQFq8Q3iAdSMkQExsAtoHAgIUAL0LMek24gJJRMAKJNzJOiYPZYW0ygnQ6rgdggAtDIkQBLQldUIBCej8QS0IgWI1AEiAHc5+BCfAjoqR4ARYaasKToDl26HgBGggJo3gBGgcpUMQoEfsVAgCJaomIQoT0HZ421fN2w3LCbBNgHZRHwQJsPM+PSK9y4mYAkCA+nAdPu4PQgS4NkXacNQDBFintqFoeX6rWp5JOzH4brpM7phZY/dPaKEdzyZ/Zl3zB0Abzy3+yJnxBxDlj6k6Cdh8zzr6J182tDrafxYJfmygYc59SRVEmR9Fk7t2V4eWwgPQKEpzcdpAlN2Hd/y8BQ6GEPWiytNlJluQozDTbUHeBuQw7r1gGMdswFGwxqpDovlaM94DCfHQGjMSNYUjUWsqjIgFNkDfNoRdoKoPtKfjMVkhybTgBtOCbLmTIIzQO+X3JLp1PfYYApgnQMW0huNkj1y/1jpZ34aG3kDBq7P0EwY49JYi5PXl2e98HkF4yXLGVN9VzeQR+jwk7TvAdFyVbGnN6HKutN0pXKBdhbbpst2jnLpp/3rbH/v5XTjSvvGXpNPdY58vjo7sX+QeNhqYfAm0j8oibN+3CfURKad4NZx+Vnpk+k3IrKuNi/X78IeQN4J2NNnlp/qWjbsgkn1n/R0gNP0ld32e8a1OZfTWvYHF00/7l18BwfMfTNVTTzWqIHcAAAAASUVORK5CYII=", info: "data:image/png;base64,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", wall: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABOUExURUxpcf2oAP+oAP2oAP6mAP6oAP+pAP+nAP+tAP2oAP2oAP+vAP+oAP2nAP+nAP2nAP6oAP+pAP+nAP6oAP+qAP+oAP+yAP+uAP+rAP+wAGKXuTAAAAAVdFJOUwCPScm8hTVXCd2aDx/4e5RqFWPuQojXR7cAAAHpSURBVHja7ZrZboMwEEUBsxoaJ0CM/f8/2qosyZO5do2sVPc8R5MTFuvOTLKMENI++kuABebuEsoWFSj0cgFa4AL2eQELBT5RwMQhXOArDqECi6ijcDehAmWcg7VYb0LIFWijCDQUoAAFKEABClAgVMBGygPzKmBF5n0FitlF0WAovdJhAWpAU7HpVI5RrXQTwleOpmLvOyQ0kKAXrdArsJS91/e3AiprcwrgAp7HhIcANB/Qh0AL0Qt3WfMSACckQq6oCkO4y00vgfaB0Oe/v8hqNWCclJP2EACp9Pos3OKc2CpYoIojIClAAQpQgAIUoIC3wG3N+TZSHsj1ITDcEcZyG4aXI8ZJvXI5BBptAfTeOqI94uQua95juUHys3drxs6IrZm3gDl5C9CG5GjNoJdLHgJmKp1IsCWT68dFVyKIOz4lw5rS9udYCVtexxrTcWtGAQpQgAIUoEBygSL11qyw27/pMk8BM0nlorphyH0e7i63IZu3UKqdiBlaw831Fk6FhpB4LGdr9p8FUrfn2NZs/7ffXGBM7qd/eQkMFfSK7yOafXv2N5QwiYdUlU48psspQAEKUIACFKBAaoHwPJA6kDyxKfgpnQkVMDYKb1szT4G4UOCzBMwF6OQCEhaox+YCxjojJDXf4uSKYGN3ygkAAAAASUVORK5CYII=", window: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAVUExURUxpcSyV3S2U3SyV3C2U3C2U3S+Z4+9tYbwAAAAGdFJOUwDEcEWk8vaFTOAAAAHnSURBVGje7ZnLVsIwEIaD4QG42K4LR7oOVFyjgmsvNPtKM+//COZCrBsmYwMePeZfkCwyH38n0/Z0wlhSkhav4sSWECXFsmiA8nPpR0mI86NxsN9aSbi24z2ocUgZNC4oN4CRy+YTCDteQRPM/ADe3aT8AsgT4KyAYP0ucYCqg8IBhErEAQRJPAfzkBapkP4MgM/N76roDVjDRlNk2xfAJTwbiuoLWIN2oCl9HejQRhjKqCdAh04tpecuuNATBigAG3rKAAWQYwZoAMQABbDADJCSWCAGyKV8ygC5lJuouxExQC7lqOcBZoBeyhEA1AC5lOMAIxRwCF5CE/lU5oLFObj4i+WQAPCWHCQH53CQAAmQAAmQAAnwg4BtSDscQOkjYQClCISLOgAVm4NUSAnwSwCEpmzkzaRwgIy9GyH2eRDOweycu7DrAMUR0H7r49vvCPc9jwEBMPRrntTn+qFPzJ2nYwd0oMRxNIHWegmy6XqxIUlnd6DzpQNe/eZNXfumCANK03BlPDcfXyXARKxypetHPVQ3krAJ9oL3gu9M41fPJdS6+Fr931B3NYIr12v14tYdslltuCthJRjNgg2yG28DdSLc2eUjI2nmk2b671ldT8zkNoMXYrxePB53a6ujbV4J9v/0Aa21qAtzThtwAAAAAElFTkSuQmCC", kitchen: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAqUExURUxpcfTqKvXrKu/vMPXqKfTqKfTqKvTqK/LqKvPnKO/nKPTrK/TqKvTqKgvPVicAAAANdFJOUwCfrxB3x+8wWUAgj9+fNmOEAAADXElEQVRo3u1YzWsTQRRP3ZTdND1YqN4K2oN6ERbBaNFCSls/GxA/EDQLRStWaKBQ9KTgoYKggRx6VMhFEEQQ/ECQgBcPCgumbbb24/0vzm6aNDM7M29eQ724v1NmZt8v8/He772ZVCpBggT/AKcWvw1eqOza3JosQYjb1d3ZjxyBbTTGd2N/pgQ7OEq3z3jQiQ/k9deahvdu+M0fT4kEL0OjrYsL7OdiNJfGPMk+Hf37QrNhT4WtdRJBgVnMuO3mM+oisuKcQ8JVwg4OAQTjYg/kjWyXPhfnfrCvb/L9DvOKreLc1UHEsU8fbDmf6L6PWh5xTGf/ru19t8Qhuz1Urxp471b8o/YUYFN5+Dve/ys+ujMF1XlEO33n/IL19sVhVza/4U/Px4oRwxUpwRs2ct3FjmnJk21xNEU/dnZS2CHDfckA26SfRm7msH8K4qFlefKJKRz9e6z3BMBHQqg1Yp01QrBk2BT2x/sIqvUaYE3o6oWGS9IbcQ1leEARnOMxffHMor2FUfEcHFimauYfrqNHaKO640Od6+iHuzTZr0HAtZ/AIRoB24QK71vEzNMv+I0XuDSCrHAMfoOY+hyA6c62WucU6ANY4ZqrRAILYKNTZYhuwFDism2GTuBzJg55CQKBTSfgCwaLGEvRKWx0RWDzx8hWRPTEtJCeakAsaPcJslqOqSyCnKBpo9yWGKAMUOWjs04j8ARZdgRCg2DkPccq0TahF0QNrNEq0UKs6MvJMrY6OZZAlDAHKLqck9RJHpirGqsl4JrY+V7Sp8JjVqJUZDnfUNozPsgEqACGNY71RV54h5WPibBZr1TFangn2ESDMjPJPgvyqsoHveA1L3Oz8sGHBtezIe0FLFyEPk33hV8EyousFTKsYAVecEnzwRROoL9Is5D4jRCspBIClGAaIdjYWwJ7YiKP5FRiBkoI9oRg7X8gGLk8IIO7rYkoAfeK14GqIYHwikcnOAfdEWRKXRKcDF/xhmVoEayj1dOMq81MegJW7mmLLZTAQV79UII0oroWRtCjeqUyJch2S5BGZB0NJgcptBxMkSzQH2MOWWJUA83qIw15bjrLXHl5QIED4TOci79yaYHWogWEAH0ws32t/Qx+Qe3R2RuV487YsApf51MJEiTYI/wFfnAD3ltxHQAAAAAASUVORK5CYII=", livingRoom: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIEAAACABAMAAADe0hfGAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAnUExURUxpcRQgeBMiehQiexIgeRAggBIieRIiehMjehMiehMjeRMheRMieiZedJ0AAAAMdFJOUwBA748mEHTYYKlQvyvHdt4AAAL1SURBVGje7ZjNaxNBGMY32k3SrYcEQaH0ICJGZQ+lUiu0Bz+IQchBUCJqDoIUkeZQelACe8jNiwdtsRLMwYs3D6JUQbxkYxNj5o9yPnZ2Zmc3OzMbEIrzXHaf3Znfzryzw7wzlmVkZPTvdO+O4K/p1b+1A0C7w3zjS9RLddIFSMvU3xS8VHdJBTAKWp4PvP8hpdKp7y+g3uB7uwcCDZP9S1S2vZn4VdzO0yAU9jXm3yJ/O2hRJC70K6MSo9FSom9Q/4cD5FmZvXf4Urmy5QYeXyv7zzzsu2sh0OcGuAAETeDLouBznljqMSM0hVc+fveAeRy1eZHwmhGWUAi63TDml8jjDeovCP5i9z3qyxlG+ERilOfajJRzo37OY//JfIwwYBGdlMII4yqTzSTviQQyNM66V9nnQuxsxf23Ku1SlPBLd/IagiEYgiEcKQKo7JXUqz9c33FjBJ38IMgnGIGuZ75ilhLmFzRTslfoWjRQAsx5wtrGrY9gW4Vwg5XvCMshXI5UmsDlE32WPPjtNXFBn6ZHuPzXXZZCoEaNPsIVDXVP4bdoobbCla8Rdhuu+f4qujkOn4ylANulg1YLMiH0ZMjo0tQVdfocufVI4NCTA/JkQSUQBVaoTr5YYCmVHc0qklVnXS0S2Amu8z2FULZYGmiTXKoehgG/7SsQwq94eDCWuNQSzrDfMkKP6ymZ4a84ZpNrTwrhM9eeQ33Cz/+DIJsYticjyCYGmgQSwqCcpsVeOuEYUNLydMKCGqEzneAoAdjuKE5AQyXX0Eoh3NcKQxLBeirvww8rlWDlyhJVLQlBS4ZgCIZgCIZwhAj9rIQNShhnBKB8hhDAajYAOo49DHaK/tksCnaMTTCTthNOWPUEdwe5mQB409qahYD3rEU3OyA4f3WewCRxfFlT8F8YXK3Ocv7QE08PhjMTfE2AEzttBufLOlpciRKamf9HzYx8emoaP9NXUyk60fUVOXOpZSEcRAZnVx/wXBjf62VNVS0jowT9BdaXVla6cjkQAAAAAElFTkSuQmCC", skyBoxLeft: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAECBAP/xAAVEAEBAAAAAAAAAAAAAAAAAAAAAf/EABcBAQEBAQAAAAAAAAAAAAAAAAABAgP/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwDDbIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAAACiACAgICAgIACAAAAAAAAAICgAAAAAAAAAAAgAoAAAAAAAICgAooCgoAAIACAAAAIAAoAAACgAAAAAAAAAIAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAy6sAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAgAAAAoAAAAAAAAAKAAAAAAAAAAAAAKIAICAgICAgAIAAAAAAAAAgKAAAAAAAAAACACgAAAKCAAAAAACigKCgAAgAIAAAAgCgAAAKAAAAAAAAAAgAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAgAAAAAAAAMurAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAACgCACAgICAgIACAAAAAAAAAICgAAAAAAAAAAgAoAAAAAAAAAAAKKAoKACAAAgAACAAKAAAAoAAAAAAAAACAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAACAAAAAAAAy6sAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAgAAAAoAAAAAAAAAKAAAAAAAAAAAAKAIAICAgICAgAIAAAAAAAAgAKAAAAAAAAAACACgAAAAAAAAAAAoqgAoAIAACAAAIAAoAAACgAAAAAAAAIAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAIAAAAAAADLqwAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAACAAAACgAAAAAAAAAoAAAAAAAAAAAAoAgAgICAgICAAgAAAAAAACAAoAAAAAAAAAAIAKAAAAAAAAAAACiqACgAgAIAAAAgACgAAKAAAAAAAAAAgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAACgAgAAAAAAAAKAAAAAAAAAAAAACAAAAAoAMOrAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAACgCCAAgICAgIAACAAAAAAAIACgAAAAAAAAAAgAoAAAAAAAAAAKAKoAKCAAAgAACAAKAAAAoAAAAAAAACAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAADDqwAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAACAAAACgAAAAAAAAAoAAAAAAAAAAAAoAggAICAgICAAAgAAAAAAACAoAAAAAAAAAAIKAAAAAAAAAAACigKAAAAACAAAIAAoAACgAAAAAAAAAIAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAMOrAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAACgCCAAgICAgIAACAAAAAAAAAAAAAAAAAAAAIKAAAAAAAAAAACiqAAAAACAAAAIAAoAACgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAMOrAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAACgCCAAgICAgIAAAACAAAAAAAAAAAAAAAAAAIKAAAAAAAAAACgCqAAAAACAAAAIAAoACgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAMurACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAACAAAACgAAAAAAAAAoAAAAAAAAAAAAoAggAICAgICAAAAAAAgAAAAAAAAAAAAAACACgAAAAAAAAAAoAqgAAAAAgAACAAAKAAoAAAAAAACAoIAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAMurAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAACAAACgAAAAAAAAAoAAAAAAAAAAKCCgCCAAgICAgIAAAAAAACAAAAAAAAAAAAAAIAKAAAAAAAAACgAooCgAgAIAAAAgACgAAKAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAy6sAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAIAAKAAAAAAAAACgAAAAAAAAAoAIKAIIACAgICAgAAAAAAAIAAAAAAAAAAAAAgAAoAAAAAAAAAKACiqAACAAgAAACAAKAAoAAAAAAAACAAAAAAAAAAAAAAAAAAAACAAAoAAKAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAICOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAgAAoAAAAAAAAAKAAAAAAAACgAAgoAggAICAgIACAAAAAAAAgAAAAAAAAAAAACACgAAAAAAAAoAKAKoAAIACAAAAIAAoACgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAIAAACgAoAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAy6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAICgAAAAAAAAAAAAACgAAAAAAAIAKAAAAAAAAACgAAAAAAAAoAAIKAIIACAgICAAgAAAAAAAIAAAAAAAAAAAAgAoAAAAAAAAAKACgooAACAAgAACAAAKAoAAAAAAAACAAAAAAAAAAAAAAAAAAAACAAAAoAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAMurAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAoAAAAAAAAAAAAAAoAAAAAAACACgAAAAAAAAAoAAAAAAAAKAAAKgCCAAgICAgAIAAAAAAACAAAAAAAAAAAAIAKAAAAAAAACgAoKAKAAAgAIAAAgACgAKAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAgAAKAACgAAAAAAAAAAAAgAAAAAKAAACAoAAAAAAAAAAAAAAAAAAAAAAAMurAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAoIACgAAAAAAAAAAAACgAAAAAAAIAKAAAAAAAAACgAAAAAAAAoAAAqAIIACAgICAAgAAAAAAIAAAAAAAAAAAAAgAoAAAAAAAAKACgoqgAgAIACAAAIAAoACgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAMOrAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAgAAKAAAAAAAAAAAAAKAAAAAAAAAgoAAAAAAAAAKAAAAAAAACgAACoAgAgICAgIACAAAAAAAgAAAAAAAAAAAACACgAAAAAAAAoKCgCqAACAgAIAAAgACgKAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAw6sAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAAoAAAAAAAAAAAAAoAAAAAAAACCgAAAAAAAAAoAAAAAAAAKAAAKgCACAgICAgAIAAAAAACAAAAAAAAAoAIAAgoAAAAAAAAKACgoKKAAAgIACAAIAAoACgAAAAAAAIAAAAAAAAAAAAAAKACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAw6sAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAAAAAoAAAAAAAAAAAoAAAAAAAAACCgAAAAAAAAAoAAAAAAAAKAAAKgACCAgICAAgAIAAAAAACAAAAAAAAoAAIAgoAAAAAAAAKCgAoqgAAAgIACAAIAAoACgAAAAAAAIAAAAAAAAAAAAAKAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAw6sAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAAAAoAAAAAAAAAAAAoAAAAAAAAAAKgAAAAAAAAAoAAAAAAAAKAAAKgACCAgICAAgAIAAAAAACAAAAAAAAoAAAIgoAAAAAAAAKCgoAqgAAgAIACAAIAAoCgAAAAAAAAIAAAAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAw6sAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAAAoAAAAAAAAAAAoAAAAAAAAAAKgAAAAAAAAAoAAAAAAAAKAAAKAgCCAAgICAgAIAAAAAAACAAAAAAoAAAACAAAAAAAACgAoKCigAAICAAgACAAAKAoAAAAAAKAggAAAAAAAAAAAAKAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAw6sAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAAAAoAAAAAAAAAAoAAAAAAAAAAKgAAAAAAAAoAAAAAAAAAKAAAAKgCCAAgICAgAAIAAAAAACAAAAAAoAAAACAAAAAAAACgAoKCigAIACAAgACAAAKoAAAAAAKAgAAgAAAAAAAAAAKAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAw6sAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAAAAoAAAAAAAAAAoAAAAAAAAAAKgAAAAAAAAoAAAAAAAAAKAAAAKgCACAgICAAgAIAAAAAACAAAAAAoAAACAAAAAAAAACgoAKKoAAIACAAgACAACigAAAAAKAAgAAAgAAAAAAAAAKAAACAAAAgAKAAAAAAAAACgAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDqwAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAIAAAAACgAAAAAAAAACgAAAAAAAAAAqAAAAAAAACgAAAAAAAAAoAAAAqAIAICAgAICAAgAAAAAAIAAAAACgAAAIAAAAAAAAAKCgoAqgAgAIACAAIAAAKKAAAAAAoCAAAACAAAAAAAAAoAAAAIAACAAAoAAAAAAAAAKAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMOrAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAgAAAAAKAAAAAAAAAAKAAAAAAAAAACoAAAAAAAAKAAAAAAAAACgAAACgIgAgAICAgIAACAAAAAAAgAAAAKAAAAgAAAAAAAAoAKCgCqACAAgAIAAgAAAooAAAACgAIAAAAAIAAAAAAACgAAAAgAAIAACgAAAAAAAAAAoAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw6sAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoACAAAAAAoAAAAAAAAAAoAAAAAAAAAKgAAAAAAAAAoAAAAAAAAAKAAAAKAiACAAgICAgAAIAAAAAACAAAAAoACAAAAAAAAAACgAoKKoAAIACAAgACAACgCgAAAAKgAAAAAAAAgAAAAAAKAAAACAAAAgAKAAAAAAAAAACgAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDqwAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAIAAAACgAAAAAAAAACgAAAAAAAAAqAAAAAAAAACgAAAAAAAAoAAAAAoCIAAICAgICAAAAgAAAAAIAAAACgAIAAAAAAAAAAKCgoAqgAAgAIACAIAAAKKAAAAAAqAAAAAAAACAAAAAAoAAAAAIAAAAAAAAAAAAAAACgAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAy6sAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAAAAAoAAAAAAAAAAoAAAAAAAAAKgAAAAAAAAAoAAAAAAAAKAAAAAKAiAACAgICAAgAAIAAAAACAICgACoCggAAAAAAAAAoAKCgCqAACAAgAIAgAAoAoAAAACgIAAAAAAAAAIAAAACgAAAAAgAAAAAAAAAAAAAAKAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADLqwAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAIAAACgAAAAAAAACgAAAAAAAAAAIKAAAAAAAACgAAAAAAAAoAAAAAoCIAAICAgIACAAAAgAAAAIAgKAAKgKACAAAAAAAACgAoKCigAIACAAAAiAACgCgAAAAKAgAAAAAAAAAgAAAAKAAAAAACAAAAAAAAAAAAAoAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMurAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAgAAAKAAAAAAAAAKAAAAAAAAAACoAAAAAAAAKAAAAAAAAACgAAAACgCCAAgIACAgIAAACAAAAAgCAoICioCgAgAAAAAAAAoKACiqAACAAgAAAIgAoAAoAAAACgIAAAAAAAAAIAAAACgAAAAAAgAAAAAAAAAAAKAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAADLqwAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAIAAAACgAAAAAAACgAAAAAAAAAAqAAAAAAAACgAAAAAAAAAoAAAAAoAggAIACAgIACAAAgAAAAAIAgAKKgAAAAAAAAAAoAKCgCqAACAAgAACAAAAAKAAAAAoCAAAAAAAAAACAAAAoAAAAAAAIAAAAAAAAACgAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAy6sAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAACAAAAoAAAAAAAAoAAAAAAAAAAKgAAAAAAAAoAAAAAAAAAKAAAAAKAIIAACAgICAAgAAAIAAAACAIACioAAAAAAAAAAKACgoAqgAAgAIAAAgAAAACgAAAKAgAAAAAAAAAAAgAAKAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAADLqwAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAACgAAAAAACgAAAAAAAAAAqAAAAAAAACgAAAAAAAAAoAAAAoAACIAAICAgIACAAAAgAACACKCAAoqAAAAAAAAAACgAoKCigAAIACAAAIAAAAoAAAACgIAAAAAAAAAAAAIACgAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAy6sAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAACAAAAAAoAAAAAAoAAAAAAAAAAKAgAAAAAAAoAAAAAAAAAKAAAAKgACAAACAgIACAgAAIAAAAgAiggAAoAAAAAAAAAAKACgoqgAAAgAIAAAgAAACgAAAKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAy6sAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAACAAAAAoAAAAAAAoAAAAAAAAAAKAgAAAAAAAoAAAAAAAAAAAAAoAAAgAAgAICAAgIAACAAAAIAIoIAAAKAAAAAAAACgAoKAKoAAAIACAAIAAAAAoAACgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADLqwAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAIAAACgAAAAAACgAAAAAAAAAAoACAAAAAACgAAAAAAAAAAAACgACAACAAAgICAAgAAIAAAAAggAAAAKAAAAAAAACgAoKCigAAAIACAAIAAAAAoACgAAAIAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAMurAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgAAAAKAAAAAAKAAAAAAAAAACgAIAAAAAAKAAAAAAAAAAAAKAAAIIAAACAgAICAAAgAAACAoIIAAACgAAAAAAAAAoAKCgooAAACAAgACAAAAAKAoAAAACACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAADLqwAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAIAAACgAAAAACgAAAAAAAAAAAoCAAAAAAACgAAAAAAAAAAACgIAgAAAAgAIACAgAAIAAAAgKCCAAAAoAAAAAAAAAKCgAoqgAAAAgAIAgAAAAACgKAAAAAAggAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAy6sAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAACAAAoAAAAAAoAAAAAAAAAAAKAgAAAAAAAoAAAAAAAAAAAoACIAAAAIAACAAgIAACAAIAAAAIAAACgAAAAAAAAoAKCgooCggAIACAAIAAAAAAqgAAAAAIIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAjqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAgKCAoAAAAAAoAAAAAAAAAAAKAAgAAAAAAoAAAAAAAAAAAoACIAAAAAIACAAgAIAACAIAAAAIAAACgAAAAAAAAoAKCgooCggAIACAAIAAAAAoCgAAAAAAiAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAACAAAoAAAAAAIAAAAAAAAAAAAAAAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAIAAAAAAKAAAAAAAAAAAAKAIIAAAAACAAgAIACAAAiAAAAACAAoAAAAAAAAAKCgAoKKoAIACAAgCAAAAAAKoAAAAAAAIgAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAgAAAAAKAAAACAAAAAgAAAKAAAAAAAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAAIAAAAKAAAAAAAAAAAAAKAIAAAAAIACAAgAIACAAIIAAAACAAoAAAAAAAAKACgoKKAoAIACAgACAAAAAAKoAAAAAAIAgAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAgAAAAAAKAAAACAAAAgAAAAAAAKAAAAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAACgAAIAAAAAKAAAAAAAAACgAAgAoAgAAAAAgAAICAAgAIACAIAAAIACgAAAAAAAAoAKCgoqgAAgAICAIAAAAAAKKAAAAAAAgCAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAACAAAAAAAAAoAAIAAAACAAAAAAAAAAAAoAAAAI6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAgAAAAAoAAAAAAAAKAAAAAAKIAAAAIAACAAgIACAgAIAgAAAgAAKAAAAAAACgAoKCiqAACAgAIAgAAAAACqAAAAAAACIAAAAAAAAKAAAAAAACAAAoAAAAAAAAIAAAAAACgAAAAAAAAAAAAgAAAAAAAAAKACAAAAAgAAAAAAAAAAAAKAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAACgAAIAAAAAKAAAAAAAACgAAAAACiAAAAACAAAgIACAgAIACAIAAAIACgAAAAAAoAKCgAoqgAgAIACIAAAAAAKKAAAAAAAgCAAAAAAAACgAAAAAgAAAAAKAAAAAAAACAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAI6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAgAAAAAoAAAAAAAAKAAAAAAKIAAAAAAIACAAgICAAgAIAgAAAgKAAAAAAACgAoKCgCqACAAgIAgAAAAAoAoAAAAAACAIAAAAAAAAKAAAAACAAAAAAAoAAAAAAAIAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAjqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAoAACAAAAACgAAAAAAAoAAAAAAAogAAAAAAgAIACAgIACAAgCAAAAAAAAAAAACgAoKCgCqACAgAIAgAAAAAooAAAAAAACAIAAAAAAAKAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAI6sAAAAAAAAAAAACAoIKAAACAKAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAgAAAAAoAAAAAAAKAAAAAAAKIAAAAAAIACAAgIACAgAIAgAAAAAAAAAAAoAKACgooCggAIACAIAAAAKAKAAAAAAAAiAAAAAAAACgAAAAAgAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAACOrAAAAAAAAAAgAAAAoAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAAKIKAACAAAAgAICAgAICAAgCAAAAAAAAAAACgAoKACigAAAIACIAAAAAKAKAAAAAAAAgCAAAAAACgAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAACAOrAAAAAAAAAAgAAAoAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAAKqAAACAAAAgAICAAgICAAgCAAAAAAAAAAACgAoKACigAAIAACIAAAAKAKAAAAAAAAAgCAAAAACgAAAAAAAgAAAICgAAAAAAoAIAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAgDqwAAAAAAAAAICggAoAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAgAAAAoAAAAAAAAKAAAAAAAKqAAACAAAAgAICAAgICAAgCAAAAAAAAAACgAAoKCgCgAAIACAIAAAAKAKAAAAAAAAAgCAAAACgAAAAAAAAgAAAAICgAAAAAAAAAAAAAAoAAAAAAAIAAAAACAoAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAgDqwAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAIAAAAKAAAAAAAACgAAAAAACqAgAAAgAAIACAAgICAAgIAgAAAAAAAAAAoAKACgoAoAACAAgCAAACgACgAAAAAAAACCAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgDqwAAAAAAAAAAIAAAKAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAIAAAAKAAAAAAACgAAAAAAAoogAAAAgAAIACAAgIACAgAIgAAAAAAAAAAoAKCgoAKKAgAIACIAAAAKAAKAAAAAAAAIAAIACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOrAAAAAAAAAAAAAgKCCgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAAAAAAAAoAACAAAAACgAAAAAAAoAAAAAAAKKAIAAAIAACAAgAICAAgIACIAAAAAAAAAKAACgoKCgCgIACAAiAAAACgCgAAAAAAAACAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI6sAAAAAAAAAAAACAAAACgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAACAAAAACgAAAAAAAoAAAAAAAKAKIAAAIAACAAAgIACAgIACIAAAAAAAAAKACgoAKCgCgIACAAiAAACgACgAAAAAAAACAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI6sAAAAAAAAAAAAACAoIAAACgAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAACgCiAAACAAAAgAICAAgICAAiAAAAAAAAACgAoKCgAoAoCAAgCACAAoAAAoAAAAAAAAAgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOrAAAAAAAAAAAAAAAAAAgAAKAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAACgCiAAAACAAAgAIACAgICAAgCAAAAAAAACgAoKCgoAoACAAgCACAAoAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjqwAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAACAAAAACgAAAAAAAoAAAAAAAKAKIAAAAIAACAAgAICAgIACAIAAAAAAAKACgAoKCgCgAIACAIAICgAACgAAAKACAAAAAIAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI6sAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAgAAAAoAAAAAAAKAAAAAAAACgCiAAAACAAAgAIACAgICAAgCAAAAAAACgAoKACgoAoACAgACAAAAAAKAAAoAAIAAAgKCAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAIAAAAKAAAAAAACgAAAAAAAAoAoAgAAAgAAIACAAgICAgAIAgAAAAAAAoAKCgoAKAKAgAIAgAAAAACgAAKAAACAAIAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI6sAACAAoAAIACgAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAIAAAAAKAAAAAAACgAAAAAAAAoAAogAAAAgAIACAAgICAgAIgAAAAAAAAoAKCgoKAAKAgAIAgAAAAACgAAKAAACAAIAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA6MAACgAgAAAKAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAACgAACiAAAACAAgAIACAgICAAiAAAAAAAACgoAKCgoAoACAAgCAAAAAKAAAoAAAAIAAgAAAAAAAAAAAAAAAAAAAgAAACggAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAOjAAAAAAAAoAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAACAAAAAACgAAAAAAAoAAAAAAAKAAAKIAAAAIACAAgICAAgIACIAAAAAAAKACgAoKCgCgIACAIAAAAAAoAACgAAAAgACAAAAAAAAAAAAAAAACAAAAAKAAACAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAgAAAADowAAAAAAAAAAKAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAKAgAAAAAAAAoAAAAAAAKAAAAAAACgAAAIoAAACAAgIACAgIACAAiAAAAAAACgAoKCgAoAoCAAgCAAAAAAKAAoAAAAAIAAAAgAAAAAKCAAAAAACAAKAAAAACAoIAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAACAAAAAAOjAAAAAAAAAAoAAICgAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgIAAAAAAAAAKAAAAAAACgAAAAAAAoAAACKAAAAgAICAgAICAgAIAgAAAAAAAoAKCgoAKKAAgAIAgAAAAACgAKAAAAACAAAAAAAIACgAAAAAACAAAAAAAAAAIAAAKAAAAAAACAAAAAgAAAAKAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAIAAAAAAA6MAAAAAAAAAAAAACgAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAgKCCgAKCAAAAAAACgAAAAAAAAoAAAAAAAKAAAAigAAAICAAgICAgAIACAIAAAAAAAKACgoKACigIAACIAAAAAAoAACgAAAAAAgAAAAAAACAoAAAAAgAAAAAAAAAAAACCgAAAAAAAgAAAAIoAAIAAAKAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAIAAAAAAAA6MAAAAAAAAAAAACgAgKAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAACAACgAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAAIoAAACAgAICAgIACAAiAAAAAAACgAAoKCgAooCAAgCAAAAAAKAAoAAAAAAAIAAAAAAAAAAAAAACAAAAgAKAAAAAAgAAAoAAAAAIAAAogAAAACAACgAAAAAAAAAAAAAAAAAoAAAIAAAAAAACAAAAAAAAAAOjAAAAAAAAAAAAoIACgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAgKCACgAAAAAAAAAAoAAAAAAAAAKAAAAAAACgAAAIoAAACAgAICAgICAAAiAAAAAAACgAoAKCgAooCAAgCAAAAAAKAAoAAAAAAAAIAAAAAAAAAAAAACAAAgAAKAAAAAAgKCAACgAAAgAACiAAAAAAIAAKAAAAAAAAAAAAAAAAACgAAgAAAAAIAAAAAAAAAAAAA6MAAAAAAAAAAKAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAoAAAAAAAAAAAKAAAAAAAACgAAAAAAAAoAAACKAAAAgIACAgICAAgAIgAAAAAAAoAKACgoAoAAACAIAAAAAAoACgAAAAAAAAgAAAAAAAAAAAAAIAACAAAoAAAAKCAAIAAKAACAAKAIAAAAAAAgAAoAAAAAAAAAAAAAAAAAKACAAAAAgAAAAAAAAAAAAAKCOjAAAAAAAACgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAIAAKAAAAAAAAAAACgAAAAAAAAAoAAAAAAAAKAAAAigAAAIACAgICAgIAACIAAAAAAKAACgAoKAKAAAAiAAAAAAKAAAoAAAAAAAAIAAAAAAAAAAAAACAAAAgKAAAACgAgACAACgAAgCgACAAAAAAAIAKAAAAAAAAAAAAAAAAAACggAAAAIAAAAAAAAAAAAACgAjqwIAAAAAAKAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAoAAAAAAAAAAAKAAAAAAAAACgAAAAAAAoAAAAogAAAAgAICAgICAgACCAAAAAAAoAAKACgoAoAAACIAAAAAoAACgAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAACgAAgACAoqAAACAKAIAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAOjAAAACAoAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAACAAACgAAAAAAAAAAAoAAAAAAAAAKAAAAAAACgAAACiAAAACAAgICAgICAAIIAAAAACgAAAoAKCgCgAAAIgAAAACgAAKAAAAAAAAACAAAAAAAAgAKAAAACAAAAAAAoAAAIAAgAoAAAIAoAgAAAAACACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAA6MAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAACAACgAAAAAAAAAAAoAAAAAAAAAAKAAAAAAACgAAAIoAAAACAAgICAgICAAIIAAAAACgAAAoAKACigAACCAAAAACgAAKAAAAAAAAACAAAAAAAgAAKAAAACAAAAAAoAAAAIAAgAAoAAIAoAAgAAACCgAAAAAoAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAADowAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAIAAKAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAKAAAAigAAAAAICAgICAgIAAgAgAAAKAAAACgAoAqgAAAiAAAAAKAAAAoAAAAAAAAAIAAAAAACAAoAAAAAAAIACgAAAAAAgAACAACgAgACgACAAqAAAAACgAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAOjAAAAAAAAAAAAAAAAAAAoICgAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAACAACgAAAAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAAAIoAAAAACAgICAgICAIAAIAACgAAAAAoAKAKoAAAIgAAAACgAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAKAAAAACAAAAAgAAAAAAKAAAAAAAAAA6MAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAACAACgAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAACgCAAAAACAgICAgICIAAAIACgAAAAAAoAKAKoAAAIgAAACgAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAACAAAAAAAAAAAAAACgAAAAAAAAgAAAAAKAAAAAAACAAAAAgAAAKAAAAAAAAAAAA6MAAAAAAAAAAAAAAAAAAAAAACggKAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAIKAAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAAKAAAAAigAAAAAICAgICAgIgAAAAAAAAAAAAoAKAKoAACCAAAAACgAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAACAAAAAAAAAAAAACgAAAAAAAAAAgAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAOjAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAoAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAoAAAAogAAAAAAgICUEBARBAAAAAAAAAAAAAUAFFUAAABBAAAABQAAAFAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAAAAAAAAAAABQAAAAAAAAAAAAQFAAAAAAAAAAAABAAAAAAAAAAAUAAAAEAAAdGAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAABABQAAAAAAAAAAAAAAAUAAAAAAAFAAAAAAABQAAABQBAAAAAABASglBmggIgAAgKAAAAAAAACgAoAqgAAAiAAAAKAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAIAAA6MAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAACAACgAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAACiAAAAAAACAlBmglBARABAAAUAAAAAAAFABQBVAAABEAAAAUAAAABQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAQAAAAFABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAFAAAAAAAABAAAAHRgAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAQAAUAAAAAAAAAAAAAAAFAAAAAAAABQAAAAAAAUAAAAUQAAUEAABAAZoJQZoIgAgAAAKAAAAAAACgAoKKAAAIIAAAAAKAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAICggKAAACAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAADowAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAIAAAKAAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAKAAAAAKIAAKACAAgJQSglBmgiCAAAAAoAAAAAAAKACgooAAAggAAAAAoAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAA6MAAAAAAAAAAAAAAAAAAAAAAAAACgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAACAACgAAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAACgAAACgCAACgAgAICUEoM0EoIggAAAAKAAAAAACgAoAKKAAAIIAAAAKAAAoAAAAAAAAAAAIICgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAA6MAAAAAAAAAAAAAAAAAAAAAAAAAAKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAACAAACgAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAACgCACgAAgAICUEoM0EoMoAAAAAKAAAAAACgAoAqgAAIAIAAAAKAAAoAAAAAAAAAAiAAAACgAgKAAAAAAAAAAAAAAAAgAAAAAAAAAAAAACAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAICujAAAAAAAAAAAAAAAAAAAAAAAACgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAoAAAAogAAoAAIACAlBmglBmgiAAAAACgAAAAAAoAKAKoAACACAAAACgAKAAAAAAAAAAAIgAAAAAAoAAAAAAAAAAAAAAACAAAAAAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAiitsAAAAAAAAAAAAAAAAAAAAKAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAACAACgAAAAAAAAAAAAAAAAoAAAAAAAAAKAAAAAACgAAAACiAACgAAgAICUGaCUGaCIAAAAAKAAAAAACgAoAqgAAIAIAAAAKAAoAAAAAAAAAAIIAAAAACgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACKK2wAAAAAAAAAAAAAAAAAoAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAIAKAAAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAAKAAAAAKAIKAAACAAgJQZoJQZqCAAAAAAoAAAAAAKACgCqAAAgAgAAAAoCgAAAAAAAAAAAggAAAAAKAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAggCgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAKICtsAAAAAAAAAAAAAKAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACACgAAAAAAAAAAAAAAAAoAAAAAAAAAKAAAAAAACgAAACgCACgAAAAgICUGaCUGaggAAAAAKAAAAACgAAoKKAAAIAIAAAKAAoAAAAAAAAAAAIIAAAAACgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAIIAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAACiArbAAAAAAAAAACgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAoAAAAAoAgAoAAAAICAlBmglBmoIAAAACgAAAAAAoAKACigACAACAAACgKAAAAAAAAAAAACACAAAAoAAAAAAAAAAAAAAAAAAACAAoAAAAIAAIIAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAACg2wAAAAAAAoAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAIAKAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAKAAAAAKAIKAAAAACAgJQZoJQZQQAAAAFAAAAAABQAUAFFAAEAAEAAFAUAAAAAAAAAAAAAAEAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAQABEVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAB0YAAAUAAAAAAAAAAAAAAAAAAAAAAAABQQFAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAQAUAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAUAAAAUAAQUAAAAAEBASgzQZoJUEAAAABQAAAAAAUAFAFUAABAAABBQAFAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAABAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAEFAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAFAEFAAAAABASglBmgzQSoICAoAAKAAAAACgAAoAqgAAIAAIAKAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAICgggAAAACgAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAgAAAAAAKAAAAAAAACAAAArowAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAoAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAACACgAAAAAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAACgAAAACgAKgAAAAAAgJQSgzQZoJUEBAAUAFAAAAABQAAUAVQAEAAAEFAAUAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAEBREAAAAAABQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABQAAAAAAAAQAAFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAQFAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAQAAUAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAUAAAAAUAQUAAAAAAEBKDNBKDNBEEBAAUAAFAAAABQAUAFFAAEAAAEFAUAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAQFBEAAAAABQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAQAFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQQAFBAUAAAAAAAAUAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAFAAAAAAABQAAAAABQAFQAAAAAAQEoM0EoM0GUAEABQAAUAAAFAABQBVAAAQAAQAUBQAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABAEAAAABQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAQFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQABQAAEBQAAAAAAAAAAAAAAAAAAQUAAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAUAAAAAUABUAAAAAAAEBKDNBmglBlBAAAUAAFAAABQAAUAVQAAEAAEFAUAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFBAAAAAAAAAAAAAAAAAAAUEAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAQFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAUEAAAABQAAAAAAAAAAAAAAAQUAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAUAAAAAAUBUAAAAAAAEBKDNBmglBlBAAAUAAFAABQAAUAFFAAEAAAAVAUAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAFBAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAEBXRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAFAAAAAAAAAAAABBQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAABQAAAAABQFAQAAAAAAAQGaCUGaDNBEEAABQAUAAAFAABQAUUAAQAABQAAAAAAAAAAAAAAEAAAABQAAQAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAEBXRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAFAAAAAAAAAABBQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAABQAAAAABQFAQAAAAAAAQGaCUGaDNBEEAABQAUAAAFAABQAUUAAQAABQAAAAAAAAAAAAAEAAAABQAAAAAQAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAEABXRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAFAAAAAABBQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAABVAQAAAAAAAAQGaCUGaDNBEEAABQAUAAFAABQAUUAAAQAAABQAAAAAAAAAAAEAAAAABQAAAAAAQAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV0YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABQAAQFBBQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAABQAAAAAABVAAQAAAAAAAQGaCUGaDNBEEAABQAUAAFAABQAUUABQRAAAFAAAAAAAAAAAAQAAAAAFAAAAAAABAAAUAAEAAAAAAQFBAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV0YAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAQUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAUAAAAAAUBQEAAAAAAAAEoM0EoM0GaCIIAACgAoAKAACgAoAoCgIIAAAAKAAAAAAAAAAAgAAAAKAAAAAAAAACAAoAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6MAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAooAAgAAAAAAgJQSgzQSgzUEBAAUAFAABQAAUAFAFAUBBAAABQAAAAAAAAAAAEAAABQAAAAAAAAAAQAFAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAEAAABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdGAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAABQAAAAAABVAAQAAAAAAAQEoJQZoM0EqCAgAKACgAAoAAKACgCqAAggAAAAoAAAAAAAAACAAAoAAAAAAAAAAAAIAACgAAAAgAAACAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACujAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAAKKAAAIAAAAAAICUGaCUGaCIICAoAAKACgAAoAKAKAoACACAAACgAAAAAAAAAIACgAAAAAAAAAAAAAAgAKAAAAACAAIAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6MAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAooAAgAAAAAAAgJQZoM0EoIggAoIAoAAKAACgAoAqgAAIAIAAAKAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6MAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAoAoAAgAAAAAAAgM0EoM0EoMoAoAIAoAKAAACgAoKKAAIAAIAAAAAKAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAACAAAAAAIAAKAAACAAAAAAAAgAAAKAAAAAAAAAACAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAADTowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAKKAAAIAAAKCAAAlBmglBmgzQRAFAABFABQAAUAFABRQABAABAAAABQAAAAAAAAAAAAAEAAAAABQAAAAAAAAAAAAAAAAQAAAAABAABQAAAQAAAAAAAAAAAAAAAAAAAAAEAAAAABAAAAUAAAAAAAAAAAAAAAAAAAAAAAEABt0YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAFAAAEAAFAABAASgzQZoJQZoIgCgAKIAoAAAKACgooAAAgAAgAAAoICgAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAgAAAAACACgAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAIAAADbowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAoAAAAAAAKAKAAIAAAKAACAAzQSgzQZoJQRAFAAUQBQAAUAFABRQAABAABAAABQQFAAAAAAAAAAAAAAAQAFAAAAAAAAAAAAAAAAABAAAAAAAEAFAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAAAEAABQAAAAAAAAAAAAAAAAAAAAAAQAAAG3RgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAUAAUAAAQAUAAAEBASglBmgzQQEQBQAFAEUAAFABQAUUAAQAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAEFAAAAAAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAejowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAKAKAAAIAAKAAACAgJQSgzQZoICIIKoAKAIoAKAACgoAoAAgAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIKAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACA9HRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAUAAUAAAQAUAAAAEBASgzQSgzQQEQBQAFBQBAFABQAUUBQARAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABBAFAAFAAVAAAAAAAAAAAAAAAAABAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAejoyACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAACgCgAAACACgAAAAgICUGaCUGaCAiAKAAoKAIAoAKACigKACIAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAIAAAoAAoCoAAAAAAAAAAAAAAAAAAIAAAAAACAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAACAAAAA26MgAAAAgAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAoAAoAAAAgoAAAAAICAlBKDNBmgiCACgAKCgCKAACgAooCgiAAACACgAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAAIAAAoAAoCgIAAAAAAAAAAAAAAAAAAIAAAAACAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAACAAAAA26MgAAAAAAgAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAoAAAoAAAgAoAAAAAIADNBKDNBmgiCACgKACgCKACgAoAoCgiAAACACgAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAAAIAAoAoACgAIAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAACAAAA26MgAAAAAAAAgAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAoAAAoAAAgoAAAAAAAIDNBKDNBmgiCACgKACgAogCgAooACgiAAACACgAAAAIAACgAAAAAAoIAAAAAAAAAAAAAAAAAACAAAgAAAgCgACgAKAAAgKCAAAAAAAAAAAAAAACAAAAgAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAgAANujIACgAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAKAAAKAAAAIKAAAAAAACAlBmgzQSgyggAoCgAoKAIAoAKKAAAIAAIAKAAAAAAgAAKAAAAAACgAAgAAAAAAAKAAAACAAAAgAIAAAACiAoAACgAAIACggAAAAAAAAAAAAAAAgAAIAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAID0dGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAABQAABQAABBQAAAAAAAAQEoM0EoM0EQQEFAUAFBQBFABQBQFBEAAAEAFAAAAAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAAAFAAAABQAAAEBQAQAAAAAAAAAAAAAAQABRAAAQBBQAAAAAAAAAUAEAAAAAAAAAAAAAAAAAAAAAABt0ZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAFAAAAFAAAEFAAAAAAAABASgzQSgzQSoICCgKACgoAigAooCgAiAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACAAAAAoAAAKAAAAAAAAgAAAAAAAAAAAAAAgCgCAAAgAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA26MgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAACgAACgAAAKgAAAAAAAAAgJQSgzQZoIggIAKoKACgoAKACgAAiAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACAAAAAoAAAKAAAAAAAAAgAAAAAAAAAAAAAAgCgCAAAgAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA26MgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAACgAACgAACCgAAAAAAAAAgJQSgzQZoJUEBAUUBQUAFBQAUAABABAAAQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAQAAAAFAABQAAAAAAAAAEBQAQAAAAAAAAAAAQBQBAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG3RkAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAAAAAAAAUAAAAUAAAQUAAAAAAFBAAQEoJQZoM0EqCAgKKAoKCgAoKAAAAggAAAIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAAAAACgAAoAAAAAAAAAAACAAAAAAAAAAAACAAKAIAAgAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAADboyAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAKAAAAKAAAqAAAAAACgAgAICUEoM0GaCVBAABQFBQUFBQAAAAEEAAAABBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAAAAAAUAFAAAAAAAAAAAAQFBAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAABQAAAAAUAEAAABt0ZAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAFAAAAFAAAAVAAAAAABQAAQEBKCUGaDNBKggAAoCgoKCgoAAACACAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAgAAAAKAACgAAAAAAAAAAAAAAIAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAKAAAACgAAAAgANujIAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAoAAAAoAACgIAAAAAKAAACAAzQSgzQSgzUEAAFUFBQUFABQAQBABAAAAAAQAUAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAQAAAFAAABQAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAAAAQAAAAAFAAABQAAAAAAAadGQAAAAAAAAAAAAAQAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAABQAAFAQAAAAAUAAAEABKDNBmglBmoIAAKoKCgoKACgAgCACAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAACAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAIAAACgAAAAoAAAAAAANOjIAAAAAAAAAAAAAIAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAoACgIAAAAAAKAAACAAlBmglBmgzUEAABRVBQUFABQQBAABAAAAAAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAEABQAAAAUAAAAAAAAGnRkAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAUAAAAAUAABQEAAAAAFAAAAABAQGaCUGaCVBAQAFBRVBQUAABAAABAAAAAAAAQAAAAUAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAUAAAAAAAAAAAAAAAABAUEEAAAAAAAAAAAAAAAAAAAABAAAAUAAEAAAAAAAAAAAAABQAAAAAAAAadGQAAAAAAAAAAAFAAEAAAAAABQQAAAAAAAAAAFABAUEAAAAAAAAUUEBQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAUABQAEAAAAAFAAAAABAQEoM0GaglBAQAFBRVABQUABAABAAAAAAAAAAQAAAAAAAAUEAABQAAAAAAAAAAAAAEAAAAAAAAAABQAAAAAAAAAAAAAAAAAAQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAUAAAAAAAAGnRkAAAAAABQAAAAABAAUAAAAAAAAAAAEBQAAAAAAAAAAAQAAFUAAAQFBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAABQAFAAQAAAAUAAAAAAEBASgzQZqCUEBAAUAVQUFAQAAAAAAAAAAAAAAAAQAAAAAAAAAAUAAAAAAAAAAAAAABAAAAAAUAAAAAAAAAAAAAAAAAAAAABAURAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAG3RkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAABQAFAAAQAAAAUAAAAAAEBKCUGaDNQSggIAACiqCgAqAAAAAAAAAAAAAAAAAAAAAACAoIAAAAKAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAA26MgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAKAAoACAAAACgAAAAAAAgJQSgzQZqCUEBAAAUVQAVABQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAAAAAAAABAAUAAAAAEAAABQAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAUAAEAABQAAAbdGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAFAUAABAAAABQAAAAAAAQEoJQZoM1BKDIAAAKKoCCgAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAgAAAAAKDboyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAKCAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAACgKAAAgAAAoAAAAAAAAICUGaCUGaglBkAAAFFAVBQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAQAAAAAFAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAB6OjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAACgKAAAAgAAAoAAAAAAAAICUGaCVBmglBkAAAFFUBABQAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAFAAAAAAAAAAAAAAAAQAAAAAAFAAAAAAAAAAAAAAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAABQbdGQAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAEBQQAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAUABQAAEAAAFAAAAAAAAABASgzQSoM0EoMgAAAoqoAKAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgoAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAgAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADboyAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAoCgAAAIAAAKAAAAAAAAACAlBmglQZoJQQEABQBVQAUAAAAFAAAAAAAAAAAAAAAABAAAUAAAAAAAAAAVAAAAAAAAAAAAAAAQAAAAAAFAAAAAAAAAAAAAAAABAAAAAAEAAAAAAFAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbdGQAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABQAQAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAUABQAAAEAAFAAAAAAAAAABASgzQSoM0EoICAAoAqoAKAAAACgAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAKgAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAgAAAAAACAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANujIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAACgKAAAAgAAAoAAAAAKAACAAgJQZoJUGaCUEBAAUUBUFAAAAAABQAAAAAAAAAAAAAAAQAAAFAAAAAAAAAAFAQAAAAAAAAAAAAEAAAAAABQAAAAAAAAAAAAAAAQAAAAAAABAAAAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHo6MgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAACAAAoAAIAAAAAooAIACgAAAgKCAAAAAAAAAAAAAAAKAAAAAAAAAKAAoAAACAACgAAAAAoAAAIACAlBmglQZoJQQEABRQFQUAAFAAAAAAAAAAAAAAAAAAABAAAAUAAAAAAAAAAAVAAAAAAAAAAAAAAQAAAAFAAAAAABAAAAAAAAAAAAAAAAAAEAAAAAFAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAejoyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAIAooAAAAAAAAAAAAICggAAAAAAAAAAAACgAAAAAAAAACgKAAAAgAAAoAAAAAKAAACAAgJQZoJUGaCUEBAAUUBUFAABQAAAAAAAAAUAAAAEAAAAABAAAUAAAAAAAAAAAVAAAAAAAAAAAAAAAQAAAFAAAAABAAAAAAAAAAAAAAAAAAAEAAAAAFAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAejoyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAACAoIAAAAAAAAAAAoAAAAAAAAAAoACgAAAIAAKAAAAAACgAAAgAICUGaDNQSgzQAQAFFAVBQAUAAAAAAAAAFAAAAAABAAAAAQAFAAAAAAAAAAAAAFQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6OjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAKAAAAAAAAAAAAKAoAAACAAACgAAAAAAoAAAIACAlBmoM0EoMggAAKAiqCgAoAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAACgIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAIAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9HRkAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAFAAAAAAAAAAAAFAAUAAABAABQAAAAAAAUAAAEABAZoJUGaCUGQQAAFARVBQAUAAAAAAAFAAAAAAAAAABAAAAAAAAAAAAAAAAAABQAEAAAABQAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAABQAQABAAAAAABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHo6MgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAAAAAAAAAAAoCgAAAIAAAKAAAAAAACgAAAgAIDNBKgzQZoICAAAoCKoKACgAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAKAAgAKAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAACAAAIAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9HRkAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQFBAUEAAAAAAAAABQFAAAAAQAAUAAAAAAAAFAAABAAQGaCVBmgzQQEAABQBVQUAFAAAAAABQAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAFAAAAABAAAAEAAAAFAAABAAAAAAAAAQAAAFAAAAAAAAAAAAAAAAABAAeroyAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAIAAAAAAAACgKAAAAAgAoAAAAAAAAKAAAACAAgM0EqDNBmggIAACgCqgoAKAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAoAACAAAAoAAAAAAIAAAAACAAAAAAAAAAAAoAAAAAAAIAAAgAAAAoAAIAAAAAAAACAAAAAoAAAAAAAAAAAAAAIAAAAD2dGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAEAAAAABQAFAAAAAQAAUAAAAAAAAFAAAABAASgzQSoM0GaCAgAAKCiiCgAoAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACgIAAAAAACgAAAAgAAAAAIAAAAAAAAACgAAAAAAAAAgAAAACAAAAAoAAAIAAICgAgAAAAAKAAAAAAAAAAACAAAAAAA9nRkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAABAAAUBQAAAAAEAFAAAAAAAAABQAAAAQAEBmglQZoM0EABAAUVQEFABQAAAUAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABBQAAAAAAFAAABAAAAAAQAAAAAAAAFAAAAAAAAAABAAAAAAAAAAAAAQABAAAAAAAAABQAAAAAAAAAAQAAAAAAAAHs6MgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAIAKAAAAAAAACgAAAAAgAIDNBKgzQZoIACAoAqgIKACgAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAACgAAAAAAAKACAAAAAAgAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAgAAACAAAACggAAAKAAAAAAAAAACAAAAAAAAgPd0ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAUAAAAABABQAAAAAAAAAUAAAAAEABKDNBKgzQZoIACAoAqgIKACgAAoAAAAAAAAAAAAAAAAAAIAACgAAAAAgAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAACAAAAAAAAgAAAAAACAAACgAgAAKAAAAAAAAAACAAAAAAAgAPd0ZAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABABQAAAAAAAAAUAAAAAAEBKDNBKgzQZoIAAAAKoKgAAoAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAIAAACgIAAAKAACAAoAAAAAAAAAAAIAAAAACAA93RkAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAQAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAEAFAAAAAAAAABQAAAAAAQAEoM1BKDNBmggAAAAqgqAACgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAgAAAAAIAACAAAAAAqAACgAAAAAAAAAAAAAAAAAgAAAAAIAD3dGQAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAEAAFAAAAAAAAABQAAAAAAQAEoM1BmglBmggAAAqgAqACgAAAAAoAAAAAAAAAAAAAAIACgAAAAAAAAAgAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAACAAAAAAgAAIAAAACoAAAKAAAAAAAAAAAAAAAAACAAAAAgAAPd0ZAAAAAAAAAAAAAAAAUAAAAAAAABAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAABABQAAAAAAAAAUAAAAAAAEABKDNQZoJQZoIAAAKoCCgAoAAAAAAKAAAAAAAAAAAACAAAAoAAAAAAAAIAAAAAAAACAAAAACgAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAgAAAAAIAACAAAAIKAACgAAAAAAAAAAAAAAAAAAgAAAAIAAD3dGQAFAAAABAUAAAAAAAAAAAAAABAAAAUEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAEAAFAAAAAAAAABQAAAAAAAQAGaCVBmglBmggAAAqgIKACgAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAgAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAgKCAogCAoICiAAAAAAAIAAKAAAAAAAAAAAAAAAAAACAAAAAgAAAOhtkAAUAAAAAAAAAAAAAAAAAAAEAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAEAFAAAAAAAABQAAAAAAAAQAGaCVBmglBkEAAAFUBBQAUAAAAAAAFAAAAAAAAAAAABAAAAAUAAAAAAEAAAAAAAAAABAAABQAAAAAAAAAAAAAAAAAAAAAAAAEAABQAAEAAAEAAAAABFAAABAAABQAAAAAAAAAAAAAAAAAAQAAAAEAAABAdLbIAAAAAoAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAIAKAAAAAAAAACgAAAAAAAAgAM1BKDNBKDIIAAAKoCCgAoAAAICgAAAoAAAAAAAAAAAIAAAACgAAAAAAAgAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAACAAAAoAAAAAAAAAAAAAAAIAAAAAAAACAAAAgAOltkAAAAAAAAUAAAAAAAAEAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAEFAAAAAAAAABQAAAAAAAAAQAGaglBmglBkEAAAFUBBQUAAAEAABQAAUAAAAAAAAAAAAEAABQAAAAAAAAQAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABRAEAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAQABR0tMgAAAAAAAAAAACgAgKCAAAAAAAAAAAAAAoIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAIAKAAAAAAAACgAAAAAAAAAAgAM1BKDNBmggIAAAKoCCgoAAAIAACgAAoAAAAAAAAAAAAAIACgAAAAAAAAgAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgCAAIAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACAAAgAACjpaZAAAAAAAAAAAAAAAAAAAAAUAAEAAAAAAAAAAUAAAEAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAEFAAAAAAAAABQAAAAAAAAAAQAGaglBmgzQQEAAAFUBBQAUAAEAABQAAUAAAAAAAAAAAAAAEBQAAAAAAAAQAAAAAAAAAEAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAEABQBAAAAEAAAAFBAAAAAAAAUAAAEAAAABAAAAAAAAAAAAQAAAAEAB0tsgAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAKCAAAAoAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAIKAAAAAAAACgAAAAAAAAAAAgIglBKDNBmggIAAAKAqACgAAAAAAoAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAgAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAKAAAAAAAAAAAAAACAAAAgAAAAAAAAAAAAIAAAAADobZAAAAAAAAAAAAAAUAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAABBQAAAAAAAUAAAAAAAAAAAAEAQZoJQZoM0EBAAQAFFEFABQAAAAAAUAAFAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAQAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAEAAAFAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAEAAB0NsgAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAgoAAAAAAAAKAAAAAAAAAAAAACIM0EoM0GaCAgIAAAKqACgAAAoAAAKAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAKAAAAAAAAAAAAAAAAAAAAAIACggAAKIAAACAoCAACgAAAAAAAAAAAAAAAgAAAIAAAAAAAAAAAAAAAAAD3bZAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAABQAAAQBQAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAEFAAAAAAABQAAAAAAAAAAAAAARBmglBmgzQQEBAAAABRBQAUAAFAABQAAAUAAEBQAAAAAAAAAAAAQFAAAAAAAABAAAAAAAAQAAAAAUAAAAAAAAABAAAAAUAAAABAAAAAABFAAAEBQEAAFAAAAAABAAUAAAAAAEAAAAABAAAAAAAAUAAAAAEAB0NsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAAAAAAoAAAAAAAAAAKCAAAiDNBKDNBKDIICAAgAKKAIKACgAAoAKAAAAAAAAACgAAAAAAAAAAgKAAAAAAAAAACAAAAAAgAAAAAAoAAAAAACAAAAAAAAAAoAACAAAAACKAAAAACAACgAAAAAgAAAAKAAAACAAAAAAAAgAAAAAKAAAAAAAD3bZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQAAAAAAAUAAAAAAAAAAAFBAAARBmglBmglBmggIACAAAoogoAKAACgAoAAAAAAAAAAKAAAAAAAAACAAoAAAAAAAAAAIAAAAACAAAAACgAAAAAAIAAAAAAAAAAACoCggAAAAgCgAAAgAAAoAAAAIAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAPdtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAABQAAAAAAAAAAUAAEABEGaCUGaCUGaCAgAIAAAKqCgAoAKAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAACAAAACgAAAAAIAAAAAAAAAAAAACgIAAAAAIAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAA922QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQQAAAAAFAABAAAAUAAAAAAAAAAAAAAAAAAAVAAAAAAAABQAAAAAAAAAAAUAAEABEGaCUGaCUGaCAgIAAAAKqCgAoAKAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAACgAAAAAIAAAAAAAAAAAAAAACoACgAggAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAD3bZAAAAAAAAAAAAAUAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAEFAAAAAAAAABQAAAAAAAAAAUAAAEABEGaCUGaDNBKCAgIAAAAKqCgAoAKACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACACgAAAAAIAAAAAAAAAAAAAAAAAgoAAAIAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAA922QAAAAAAAAFAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABABQAAAAAAAAAAUAAAAAAAAAAFAAABAARBmglBmgzQSggICAAAAAqKoAKACgAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAgoAAAAAACAAAAAAAAAAAAAAAAAAqACAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA6G2QAAAAAFAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAABAABQAAAAAAAAAAUAAAAAAAAAAFAAAABAEEoM0EoM0GaCUEBAQAAAAFFVABQAUAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAQAAAAAAEFAAAAAAAQAAAAAAAAAAAAAAAAABAAAAAAAAABQAAAAQAAAAEAABQAAAAAAAAAAAAAAQAAAAAAAAAHQ2yAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAACggAAAAoAAAAAAAAAAAAKAAAAAAAAAACgAAAAgCCUGaDNBKDNBKCAgIAAACgCqgAoKAACgAAAAAAAAAAAAAAAAAAAAoAAAAIAACgAAAAAAAAAAgAAAAAoCAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAACgAAAAgAAAAIAAACgAAAAAAAAAAAAAgAAAAAAAAIDqbZAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAUAAAAAEBEEoJQZoM0EoM0EABAAAUAVUAFABQAUAAAAAAAAAAAAAAAAAAAAAAFAABAAAAAUAAAAAAAAAAEAAAAFAQAAAAAAAEBQAAAAQAAAAAAAAAAABAAAAAAAAABQAAQAAAAAEAAAABQAAAAAAAAAAAAAQAAAAEAAAB1NsgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAKAAAAACAiCUEoM0GaDNBAQAEBQABVBUAFAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAEAAAFAQAAAAAAAAAAAAAAAAEAAAAAAAAQAAAAAAAAAAAAAAAAAAAQAAAAAFAAAAAAAAAAAAABAAAAQAAAHU2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAIggJQZoM0EoM0EBAAAAAUVUAFABQAAAAAAAAUAAAEAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAQAUAABAAAAAAAAAAAAAAAAAQAAAAAAABAAAAAAAAAAAAAAAAAAABAAAAAAUAAAAAAAAAAAAAEAABAAAAdTbIAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAAAKAAAAAAACIICUGaDNBmglBkAAAAFFVBQAUAAFAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAEAFAAAAQAAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAAQAAAAAFAAAAAAAAAAAABAAAQAAAHU2yAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAgCCUGaCUGaDNBmggAICgAqKoKCgAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAoAAAACAAAAAAAAAAICgAAAgigAAAgKCAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAIAACAAA6m2QFAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAEQASgzQZoM0GaCUEBAAUFFEGgUAFAAAAAAAAAAAAAAAAABAAAAAAQFAAAAAAAAAAAAAAAAABQAAAAAQAUAAAAABAAAAAAAAAEABQQAFBBFABAAAAAAAAAAAAAAAAABQAAQAAAAEAAAAABQAAAAAAAAAAAAQAAEAAB1tsgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAAiADNBKDNBmgzQSggIACgoqoKCgoAAAAAAAAAAAAAAAAAAAIAAACAAoAAAAAAAAAAAAAAAAAAKAAAACACgACAoAAAgAAAAAAAAAAACAoIIoAAAAIAAAAAAAAAAAAAAKAAACAAAAAgAAAAKAAAAAAAAAAAACAAAAgAOttkAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAAEQAZoJQZoM0GaCAgIACgoqoKCgoAAKCAAAAAAAAAAAAAAAgAAAAIACgAAAAAAAAAAAAAAAAAAAoAAAIKICggAKAAAAIAAAAAAAAAAAAgKIgKAAAACAAAAAAAAAAAAACgAAAgAAAAAIAAACgAAAAAAAAAAAAgAAAIADrbZAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAABEAGaCUGaDNBmggICAAoKKqCgoKAACgAgAAAAAAAAAAAAAIAAAACAAoAAAAAAAAAAAAAAAAAAAAKAAggooICggKAAAAAIAAAAAAAAAAAACAAAAAAAIAAAAAAAAAAAAKAAACAAAAAAgAAAKAAAAAAAAAAACAAAAgAKDqbZBQAAAAAQAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAAQQAGaCUGaDNBmgyACAAoKiqCgoKAACgAAgAAAAAAAAAAAAIAAAACAAAoAAAAAAAAAAAAAAAAAAAAAACKKACAoAAAAAAgAAAAAAAAAAAAAIAAAAAAAgAAAAAAAAAAAoAAAAIAAAAACAAAoAAAAAAAAAAIAAACAAAoOptAAAFBAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAABBAQEoM0GaDNBKDIAIACiqgsBQUFAABQAAAQAAAAAAAAAAAEAAAABAAAUAAAAAAAAAAAAAAAAAAAAAABAFAAFAAAAAAAEAAAAAAAAAAAABAAAAAAQAFQAAAAAAAAAAUAAAAEAAAAABAAAUAAAAAAAAAEAAABFABABQdbaAAAAAIAAIAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAAIICCpRGaDNBmglBkAEABRVQWAoKCgAAoAAAAIAAAAAAAAAACAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAgCgCgAAAAAAAAACAAAAAAAAAAAAAgAAAAIAAAgoAAAAAAAAAKAAACAAAAAgAAAKAAAAAAACAAAAAKIAAgAA7G0AAAAAAQAAQAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAAAQQEoqURmgzQZoM0EBAAAUVUFgKCgoAKAAAAAACAAAAAAAAAAgAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAICqAICgAAAAAAAACAAAAAAAAAAAAAgAAAAIAAgAoAAAAAAAAKAACAAAAAAgAAAKAAAAAACAAAAAAKIAAAgA7G0AAAAAAQAAQAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAQQEoqURmgzQZoM0EBAAAUVUFgKCgoAKAAAAAACAAAAAAAAAAgAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAIoAoAAAAAAAAAAAAgAAAAAAAAAAAIAAAAACAAAqAAAAAAAAAAAAAAAAACAAAAoAAAAAIAAAAAAAogACAADsbQAAAAAABABAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAABBBUojNBmgzQSgzQQEAABRVBUFgKCgAoAAAAAAIAAAAAAAACAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAgAAAAAAAAAAAIAAAAACAAAAIKAAAAAAAAAAAAAACAAAoAAAAAAIAAAAAAACKACAADsbQAAAAAAABABAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAAAEQAZoJQZoM0GaCUEBAAAUUBpBQUFABQAAAAAAQAAAAAAAEAAAAAABAAAAAAUAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAAAAAAAAAAAAQAAAAAAEAQFBBQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAAAB2NoAAAAAAAAAgAgAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAggICUGaDNBmglBmggAAAAqg1EFgKCgAoAAAAAAAIAAAAACAAAAAAAAAgAAAKAAAAAAAAAAAAAAACggAAACKKAAAAAAAAAAAAAAAIAAAAAAAAAAAACAAAAAAgAAACCgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAOttAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAEEBKCUGaDNBmgzQQEABAUAVUGgWAoKACgAAAAAAAgAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAIAAAAACAAAIKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA620EBQAAAAAAAAAAAABBAAUEAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAEAEBKDNBmgzQZoJQZABAAUAVUGoCwFBQAUAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAAABAAAAAAQAAFAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAHW0goAAAAAAAAAAAAAAAAAgAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAgAgJQZoM0GaDNBmggIAACgCqg1AWAoKACgAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAOtpABQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAUAAAAAAABBAAZoJQYoM0EoM0EBAAAUAVYg1AWAoKACgAAAAAAAAgAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAOxpEAAAUAAAAAAAAAAAAAAAAAQAAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAQQEBKDNBmgzQZoJQQEAABRQFiDUBYCgoAKAAAAAAAACAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA7GkAAQABQAAAAAAAAAAAAAAAABABAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAUAAAAAAAABBAQEoM0GaDNBmggICAAAoAqxBqAsBQUAFAAAAAAAAABAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAQAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAdjSAAAIAAoAAAAAAAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAggJQSgzQZoM0GaDIAIAACgCtRBYCgoKACgAAAAAAAAAgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAICiICgAAAAAAACAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADsaQAAABAAFAAAAAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAEEBKDNBKDFBmglBkAEAABQBWkFgKCgoKAAAAAAAAAACAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAgAAAgCgAAAAAAACAAAAAAAAAAAAgAACACgAAAAAAAAAAAAAAAgAAAAAAAAAAAOxpAAAAAEAUAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAQAQEoM0GaDNBmglBkAEAABQUUQaBYCgoKAAAAAAAAAAACAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAgAAKAAAIAAAAAAAACAAAAAAAAAgAAAACACgAAAAAAAAAAAAAAgAAAAAAAAAAAOxpAAAAAAEAUAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAAQAQEoM0GaDNBmgzQQAEAABQUUQagLAUFBQAAAAAAAAAAAQAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAQAAAAFAAAAAAAAAQAAAAAAAFAAAEAAAAAAAABAAAAAAQAAAABAABQAAAAAAAAAAAAAAQAAAAAFAAAAB1tIAAAAAAAAigAAAAAAAAAAAAAAAAAAAAIAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAIgAzQSgzQZoM0GaCAAgAKACiiDUBYCgoKAAAAAAAAAAACAAAAAAAAgAAAAAAIACgAAAAAAAAAAACgAAAAAAIAAAAAAACgAAAAAAAIAAAAAACgAAAACAAAAAAAAAgAAAAIAAAAAAgAAoAAAAAAAAAAAAAAIAACgAAAAAA62kAAAAAAAAAFAEAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAEQAZoM0GaCUGaDIIAAAAAKqADUBYCgoKAAAAAAAAAAACAAAAAAAAAgAAAAIAACgAAAAAAAAACgAAAAAIAAAAAAAAAAAACgAAAAAAAIAAAACggKAAAAIAAAAAAACAAAAAgAAAAACAACgAAAAAAAAAAAAAAAAAAAAAAAA62kAAAAAAAAAAFAAAEAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAEQQEoM0GaDNBKDIIAAAAAKqCgsBQUFBQAAAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAFAAAAAAQAAAAAAAAAAAAAAAAFAAAAQAAAAAAAFBAUAAAQAAAAAAAEAAAABAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAB1tIAAAAAAAAAAAKAAAAIAAAAAAAAAAAAAAAAAIgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAIgAzQSgzQZoM0GQAQAAABFUFBQUFBQUAAAAAAAAAAAEAAAAAAAAABAAAAAAAAAAAAAAABQAAAAAEAAAAAAABAUAAAAAAAAAFAAQAAAAAAAAAAAAFAAAEAAAAAABAAAAAQAAAAABAAABQAAAAAAAAAAAAAAAAAAAAAdbSAAAAAAAAAAAAACgAACAAAAAAAAAAAAAAAAggAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAggM0EoM0GaDNBAQEAAAFEFBQWAoKCgoAAAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAACgAAAAIAAAAAAACAAAAoAAAAAAAAKgAAAAAgAAAAKAAoAAAAAgAAAAAAIAAAACAAAAAAIAAAKAAAAAAAAAAAAAAAAAAAADraQAAAAAAAAAAAAAAAUEBREBQAAAAAAAAAAAEAQAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAABBASgzQZoM0GaCUEBAAABVQAUFBQUFBQAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAAFAAAAQAAAAAAAAAEAAABQAAAAAAAAEFAAAABAAAAAAUABQAAABAAAAAAAEEAUAAAQAAAABAAAABQAAAAAAAAAAAAAAAAAAAdjSIAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAgCAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAIICUGaDNBmgzQSggIAAAKqACgoKCgoKAAAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAoAACAAAAAAAAAAgAAAAKAAAAAAAAAgAoAAIAAAAAAACgAKAAAIAAAAAAAggACgAACAAAAAIAAAKAAAAAAAAAAAAAAAAAAADsaQBAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAEAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAABBASgzQZoM0GaCUEBAAABVQAUFBoFABQAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAFAAAQAAAAAAAAAAEAAAABQAAAAAAAAEAAAAAAAAAAAAAABQAAAAAAAAAAQARQQFAAAEAAAAQAAAUAAAAAAAAAAAAAAAAAAAHY0gACAAAAAAAAAAAAAAAAAgCgAAAAAAAAAIAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAACCCpQZojNBmgzQSggIAAAKqACgoNAoAKAAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAoCAAAAAAAAAAAAAAgAAKAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAACCAKAAAAAIAAAgAoAAAAAAAAAAAAAAAAAAAAAOxpAAAEAAAAAAAAAAAAAAAABFAAAAAAAAAQBAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAEEFSgzQZojNBmglBAQAAAVUAFBQaBQAUAAAAAAAAAAAEAAAAAAAAAAAAAAAABAAAAABQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAFAAAAAAAAAAAAAAAEQFAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAB2NIAAAAgAAAAAAAAAAAAAAAIoAAAAAAAACAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAggqUGaDNEZoM0EoICAAACqgAoKDQKACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAKAAgAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAADsaQAAAAAABAAAAAAAAAAAAQBQAAAAAAAAEAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAABABBUoM0GaIzQZoJQQEAAFAVABQUGgUAFAAAAAAAAAABAAAAAAAAAAAAAAAAAAQAAAAUAABAAAAAQAFAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAdjSAAAAAAAAIAAAAAAAAAACKAAAAAAAAAgACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAIAIKlBmgzQZojNBKCAgAAoCoAKCg0CgAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAACACgAAAAIAAACAAAAoAAAAAAAAAAAAAAAAAACAoIAAAAAAACgAACAAAoAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAA7GkAAAAAAAAQAAAAAAAAAAEUAAAAAAABAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAQBUBKDNBmgzRGaCUEFQQFAAEFBQagKCgAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAKAgAAAAAAIAAACAAAAoAAAAAAAAAAAAAAAAAAACAoIAAAAAAACgACAAAAoAAAAAAAAIAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAA7GkAAAAAAAAQAAAAAAAAAAEUAAAAAAABAUEAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAABABBUoM0GaDNBmiJQQVAAAAAVBQagLAUAFAAAAAAAAAABAAAAAAAAAAAAAAAAABQEAAAAAABAAAAQAAFAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAFAAEAAAABQAAAAQAAAAAAAAAAAAABBVABBAAAAAAAAAAAAAAAAAAAAdjSAAAAAAAAIAAAAAAAAACAKAAAAAAAAAgACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAAAIoCAlBmgzQZoM0EoICAAAAAqCwGgUFABQAAAAAAAAAAQAAAAAAAAAAAAAAAAAUABAAAAAAQAAAAAAAAAAAAAAAFAAABAAAAAAEBQQFBAAAAAAAUAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAQAQAAAAAAAAAAAAAAAAAAHY0gAAAAAACAAAAAAAAAAAigAAAAAAAAAIAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAACKAgJQZoM0GaDNBKCAgAAAKAgoNQFBQAUAUAAAAEAAAAQAAAAAAAAAAAAAAAAAUAABAAAAAAQAAAAAAAAAAAAAAFAAABAAAAAAAAAEAAABQQAAAFAAAAAAAAAEAAAAAAAAAAAAAAAAABUBQAQQAAAAAAAAAAAAAAAAAAHY0gAAAAACAAAAAAAAAAAAigAAAAAAAAAIAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAACKAgJQZoM0GaDNBKCAgAAAKAg0CwFBQAUUAAAAAAEAAQAAAAAAAAAAAAAAAAAVBAVQQAAAAAAEAAAAAAAAAAAAAABQAAAQAAAAABAUEBQAAAAAAQFAAAAAAABAUEEUAAAAAAAAAAAAAAAAAUBAAABAAAAAAAAAAAAAAAAAAdjSAAAAAAIAAAAAAAAAAACKAAAAAAAAAAgKCAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAigICUGaDNBmgzQZoIAAAACgINAoKCgCqAAAAAAAAAIgAAAAAAAAAAAAAAoAACAAoIAAAAAACAAAAAAAAAAAAAAAAoAAIAAAAAAAAAgAKAAAAAAAAAAAAACAAACKAAAAAAAAAAAAAAAKgKCAAAACAAAAAAAAAAAAAAAAA7GkAAAAAQAAAAAAAAAAAAEUAAAAAAAAAABAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAQBQEBKDNBmgzQZoM0EAAAABQEGoCgoKKAoAAAAAAAAIAIAAAAAAAAAAAAAACgAAAAAIAAAAAACAAAAAAAAAAAAAAAAoIAAAAAAAgKACAAoAAAAAAAAAAAIAAAAAIAoAAAAAAAAAAAAAIKAoIAAAAAIAAAAAAAAAAAAAAADsaQAAAABAAAAAAAAAAAAFEAAAAAAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAABAFAQGaCUGaDNBmgyCAAAAAqADUBQUFFAUAAAAAAAAEAAAEBQQAFABAUEBQAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQAAAAAAAAAAAAQAAAAAAFEAAAAAAAAAAAAAQAUBQQAAAAAAAAQAAAAAAAAAAAAHY0gAAACAAAAAAAAAAAAAigAAAAAAAAAAAAIAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAAAAACAKAgM0EoMUGaCUGQQAAAAFQUFBQUFFAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQAAEAAAAAAAEUAAAAAAAAAAAAEAFAAAAAAAAAAABAAAAAAAAAAAAdjSAAAAIAAAAAAAAAAAACKAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAAAAAIAoCAzQZoM0GaCUGQQAAAAFQUFBYCgooCgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAgAAAAAAKAAAACAoAgAAAAACACgAAAAAAAAAAAAgAAAAAAAAAAOxpAAAEAAAAAAAAAAAAAAUQAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAEAUBAZoM0GaDNBKDIIAAAACoKCgoKKoAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAqAAAAAAAAoICggAAKAIAAAAgKCACgAAAAAAAAAAAgAAAAAAAAAAOxpAAAEAAAAAAAAAAAAAAUQAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAAAEAUABKDNBmgzQZoJQZABAAAAVBQUFBRVABQAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAFQAAAAAAAAFBAAAUAAAQAAABAAABQAAAAAAAAAAAQAAAAAAAAAHY0gAAACAAAAAAAAAAAAAKIAAAAAAAAAAAAACCAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAACAKAgFBmgzQZoM0EoMgAgAAAKgoLAUFFUAFAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAVAAAAAAAAAAAAAAUAQAAABAAAAAABQAAAAAAAQAAAAAAAAAAHY0gAAACAAAAAAAAAAAAAKIAAAAAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAACAAKgJQSgzQZoM0GaCAgAAAAKgoLAUFFUAFAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAEAAAAAAAAAABQAAAAQAAAAAAAAAAAAAAAEAAAAAEBQAAABBQAAAAAAAAAAAFAAAEAAAQAAAAAAAAUAAAAAEAAAAAAAAAAB2NIAAAAgAAAAAAAAAAAACiAAAAAAAAAAAAACIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAgACoCUEoM0GaDNBmggIAAAACoKCwFBRVABQAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAEAAABAAAQAFAAAABQAAAAAAQAAAAAAAAAAAAAEAAAABBAAFFAAAEFAAAAAAAAAAAAAUAAAQBAAAAAAAAAAABQAAQAAAAAAAAAAAHY0gAAACAAAAAAAAAAAAAigAAAAAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAAAACAAKgJQZoM0GaDNBKCAgAICgAqCgsBQUVQAUAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABAAAQAAEAAABQAAAUAAAAAAEAAAAAAAAAAAAAABAAAAQQABQBQABABQAAAAAAAAAAAAFAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAdjSAAAAIAAAAAAAAAAAAogAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAIoACAlBmgzQZoM0EoMgAgAAKCoKCwFBRVABQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAABAAAQAAAFAAABQAAAAAAQAAAAAAAAABAUAAAQAAAAEEBVEBQABABQAAAAAAAAAAAFAAAABABAAAAAAAAAAAAAAAAAAAAAAAAAdjSAAAAIAAAAAAAAAAACKAAAAAAAAAAAAAAgCAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAIoACAlBmgzQZoM0GaCAgAAAKCoLAWA0AKoAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAIAACAAAAoAAAKAAAAAACAAAAAAAAAAICgAACAAAAAACAoAAAgAoAAAAAAAAAAAACgAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAOxpAAAEAAAAAAAAAAAUAQAAAAAAAAAAAAAAQBAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAAABRAABAZoJQZoM0GaDNBAQAAAFBUFgLAaAFUAFAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAQBBQAAEAABQAAAUAAAAAAEAAABAAAUAAAAABAABAFAAAAAAABAABQAAAAAAAAAAAAFBAUEAAAAEAAAAAAAAAAAAAAAAAAAAAAB2NIAAAgAAAAAAAAAACiAAAAAAAAAAAAAAACAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAKIAAIDNBmgzQZoM0EoICAAAAoLEFgNAoKKAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAACAIKAAAAAAAAAoAAAAAAIAACAAAAoAAAAAACAACAAKAAAAACAACgAAAAAAAAAAAAAAKCAAAAACAAAAAAAAAAAAAAAAAAAAAA7GkAAQAAAAAAAAAABQBAAAAAAAAAAAAAAABAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFEAEABmgzQZoM0GaCUGQAAAAUFiCwFgNAooACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAICggKgAAAAAAAAAKAAAAAACAAAgAAAAKAAAAAgKCAACAAKAAACAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKCAAAAAAA7GkAQAAAAAAAAAAABRAAAAAAAAAAAAAAAABAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFEAEBKCUGaDNBmgzQZoIACAoAKCoLAWA0AKoAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAgAAAKAgAAAAAAAAKAAAAACAAAAgAAAAKAAAAgAKACAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAgAAAAOxpAEAAAAAAAAAAAAUQAAAAAAAAAAAAAAAAAQABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAAAAAAAAABQBABASglBmgxQZoM0EoICAAAoKCxBYCgsBRVABQAAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAEAABQAEAAAAAAABQAAAAAAQAAEAAAAABQAAAAAAEBQQAAQAAAAAAFAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAUAAAEAAAAB2NIgAAAAAAAAAAACgCAAAAAAAAAAAAAAAACAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAKAIAICUGaDNBmgzQZoJQQEAABQAVBqAsBYCiqAACgAAAAAAAAAAAgAAAAAAAAAAAAAIAAAAIAAAACgAAIAAAAAACgAAAAAAgAAIAAAAACgAAAAAAIAAAAAAAAIAACgAAAAgAAKACAAAAoAAAAAAIAAAAAAAAAAAAACgAAAAgAAAOtpAAAAAAAAAAAABRAAAAAAAAAAAAAAAAABAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFAEAEBKDNBmgzQYoJQZABAAAAUFQWA1AWAoKKAAoAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAACAAoAAACAAAAAAAAoAAAAAIAAACAAAAoAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAACgAAAAAgAAOtpAAAAAAAAAAAABRAAAAAAAAAAAAAAAAABAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFEAAEBmgzQZoM0GaDNBAQAAAAFBUFgNQFgKCigAKAAAAAAAAAAAACAAAAAAAAAAAAgAAgKCAAAAAAoAACAAAAAAAAAoAAAAIAAACAAAAoAAAAAAAAAAACAAAAAAAACAAAAAAAAAAAKACAAACggAAAAAAAAAAAAAAAKAAAAACAAA62kAAAAAAAAAAAAFEAAAAAAAAAAAAAAAAAEAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAUQAQEoJQZoM0GKDNBKCAgAAAAKCoLAagLAUFFAAUAAAAAAAAAAAAEAAAAAAAAAAABAABAUEAAAAAABQAEAAAAAAAAABQAAAQAAAAEABQAAAAAAAAAAAAEAAAAAAAEAAAAAAAAAAAUAAEAAAAAAAAAAAAAAAAAAAAAAFAAABAAAdbSAAAAAAAAAAAACiAAAAAAAAAAAAAAAAACAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAigICUGaDNBmgzQZoJQQEAAAABQVBYDUBYCgooACgAAAAAAAAAAAAAAgAAAAAAAAAIAAAAAAIAAAACgAAIAAAAAAAAACgAAgAAAAIACgAAAAAAAAAAAAAIAAAAAIAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAOxpEAAAAAAAAAAAAUAQAAAAAAAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAABRABAZoJQZoMUGaCUGQQAAAAAFBUFgNQFgKCigAKACAAAoAAAAAAAAAAAAAAIAAAAACAAAAACAoIAACgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAoOtpEAAAAAAAAAAAAABFAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAABQBBAQEoM0GaDNBmgzQQEAAAAABQVBYDUBYCgooACggAAAAKAAAAAAAAAAAAACAAAAAAgAAgAKCAoICgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAoOtpEAAAAAAAAAAAAAAUQAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAABQBBASglBmgzQYoJQZoICAAAAAAoKgsBqAsBQUUAAAAAAABQAAAAAAAAAAAAAAQAAAAEAAAEBQQFBAAAUAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAEAAAAAAAAUEAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAUHU0gAAAAAAAAAAAAAAogAAAAAAAAAAAAAAgAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAACgIglBmgzQZoM0GaCAgIAAAACgIKDUBYCwFBRQAAAAAAAAFAAAAAAAAAAAAABAAAAAQAAAAAQFBAAAAUAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAFAAAAAAQAAQAABQAQFAABAAUAAAAAEAAAAAAAAAAAAAAAAAAAEAABQAAAdbSAAAAAAAAAAAAAACiAAAAAAAAAAAAAACAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAKAiCUGaDNBmgzQZoICAgAAAAKAgoNQFgKCgooAAAAAAAACgAAAAAAAAAAAAAgAAAAIAAAICggAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAgAAAAAAAACAAAoAAAAIAAAAAAAAAAAAAAAAAAIAAAACgAA62kAAAAAAAAAAAAAAFEAAAAAAAAAAAAAAEAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAFAQBBmgzQZoM0GaCUEBAQAAAAFBUFBYCwGgAUUAAAAAAAABQAAAAAAAAQAFAABAAAAAAQAAAAAAQAFAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAEAAAAABQAAAAAAAAAAQAAAAABAAAAAUAAAEAAAAAAAAAAAAAAAAAAEAAAAABQAdbSAAAAAAAAAAAACiAAAAAAAAAAAAAAAACAoIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAKAgJUEoM0GaDNBmglBAQAEAABQAVBQWA1AUFAFAAAAAAAAAUAAAAAAAEAAAABQQAAAAAEAAAAAEABQFAABAAAAAQAAAAAAEABQAAAAAAAAAAAQAAAAAAFAAAAAAAAAAABAAAAEAAAAAAABQQAAAAAAAAAAAAAAAAAAAAQAAAAFAB1tIAAAAAAAAKAIAAAAAAAAAAAAAAAAAAIAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAKgJUEoM0GaDNBmglBAQAAAAABBQWA1AWAoKKAAoIAAAAAACgAAAAAAAgAAAAAAAAAAAIAAAAICgAAKAAACAAAAAAgAAAIAAAACgAAAAAAAAAAgAAAAKAAAAAAAAAAAAAACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgA62kAAAAAAFEAAAAAAAAAAAAAAAAAAAEAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAFQEqDNBKDFBmglBkAEAAAAABUFBYCwFgKCigKACAAAAAAAoAAAAAAIAAAAAAAAAAAAACAAAAAAAoAAAAIAAAAAACAAAAgAAAKAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAIAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKADraQAAAAUQAAAAAAAAAAAAAAAAAAQAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAERUoM0GaDNBmglBkAEAAAABUAFBQUFBQUUBQAQAAAAAAAFAAAAABAAAAAAAAAAAAAAQAAAFEBQAAAAEAAAAAAABAAAAQQAAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAUAAAAEAAAAAAAAAAAAAAB1tIAAAKIAAAAAAAAAAAAAAAAAIAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACIqUGaDNBmgzQSgyAAAAAAgAAoKCgoKCigKACAAAAAAAAoAAAAAIAAAAIACgAAAAAAIAICgKAAICgIAAAAAAAAAACAAAggAAKAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAACAAA7GkAAFEAAAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABEGaKlBmgzQZoM0EAAAAAQAAUAFBQUFFUAFAABAAAAAAAUAAAAAEAAAEAAAABQAAAAAEAABQAAAAQAAAAAAAAAAEAABABAAUABQAAAUEAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAFAAAAAAAABAAAAAAAAAQAAAHY0gACKAAAAAAAAAAAAAAAAAgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAgzRUoMUEoM0GQAQAAABBQAAUAFBQUVQAUAAEAAAAABQAAAAAAQAAEEAAAUAAAUAAEAQUEBVAAABAAAAAAAAAAAAAQAAEEABQAFAAABQAQAAAAAAAAAAAAAAAAAAAAAAAAEQAUAAAAAAAAAAAAAAAAAAAAAEAAAAAAABAAAAAdjSACiAAAAAAAAAAAAAAAACAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgIglFZoM0GaCUGQAQAAFQAAAAUFABQUVQAUAAEAAAAABQAAAAAAQAARAAAAAUAAUAEAAQAAVQAAAQAAAAAAAAAAAAEAABBAAUBQAAAUAAAEAAAAAAAAAAAAAAAAAAAAAAABEAFAAAAAAAAAAAAAAAAAAAAABAAAAAAAQAAAAAH/2Q==", skyBoxRight: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAECA//EABUQAQEAAAAAAAAAAAAAAAAAAAAB/8QAFwEBAQEBAAAAAAAAAAAAAAAAAAECA//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ADKgAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgACAAAACKCqKACggAICCIogAIAAAAAAAAAAAAAAIAAAAAACggKoAKDQKCgoAKAACgAAAKgACAAAAAAAAgAAAACgCAAAAAAAAgAAAAAAAIAAAAAAAACAAAAACAoAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAAAAigAqigAAAgIIgIoAAgAAAAAAAAAAAAAgAAAAAAKAAoAKDQKCgoAKAACgAAAKgACAAAAAAAAgAAAACgCAAAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAKAAIAAAIoAKooAAAICCICKAAIAAAAAAAAAAAAAIAAAAACgAAKACgoNAoKACgAAoAAAgoAAgAAAAAAAIAAAAAoAgAAAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgACAAAACKCqAKAACAgiAKIAACAAAAAAAAAAAAACAAAAAoAACgAoKDQKCgAoAAKAAAIKAAIAAAAAAACAAAAAKAIAAAAAAACAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAIAAAAIoCigoAAIACCIogAAIAAAAAAAAAAAAAIAAAACgAAKACgoNAoAKCgAAoAAAgoAAgAAAAAAAIAAAAoAAgAAAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAAAigAqgCgAAgIIgCiAAAgAAAAAAAAAAAAgAAAAKAAAoAKCg0CgAoKAACgAACCgACAAAAAAAAgAAACgACAAAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigACAAAACKCqAKAACAggCKIAACAAAAAAAAAAAACAAAAAoAACgAoKDQKACgoAAKAAAIKAAIAAAAAAACAAAAKAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAIAAAIoAKooAAAICCIoAgAAIAAAAAAAAAAAIAAAACgAAKACgoNAoAKCgAAoAACoAAAgAAAAAAAIAAAAoAAgAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAgAAAigAqigAAAAgiAiiAAAgAAAAAAAAAAAgAAAKAAAAoAKCg0CgAoKAACgAAKgAACAAAAAAAAgAAACgACAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigACAAAACKCqKACgAgIIgIoAgAAIAAAAAAAAAAAAIACgAAAKACgoNAoAKCgAAoAACoAAAgAAAAAAIAAAAAoAAgAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAigAACAAACKCgKKCgAAgIIiiAgAAIAAAAAAAAAAAAICgAgKAAoAKCgoNAAoKAACgAAKgAACAAAAAAAgAAAACgACAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAIAAACiAKooKAAACCIDKgCAAgAAAAAAAAAAAAAAgAKAAoAKCgoNAAoKAACgAAKgAACAAAAAAAgAAAACgCAAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAIAAACiAKCqKCgAgIIlBFEBAAQAAAAAAAAAAAAAAQFAAAUAFBQUGgAUFAABQAAFQAABAAAAAAAQAAAABQBAAAAAAAAQAAAAAAEAAAAAAAAABAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAHVybAAAAAAAAAAAAAAAAAAAAAUAAAAAEAAAAAAAAAAAAAAAAAAAAAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAAUAAQAAFAEUFUUFAABAZoiKICAAAgAAAAAAAAAAAAAgKAAAoAKCgoKCgoKAACgAAKgAACAAAAAAAgAAACgACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAAAKIoKooKAACAlESgyoAgAIAAAAAAAAAAAAAICgAAKACgoKCgoKCgAAoAACgIAAgAAAAAAIAAAAoAAgAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAKAAIAACiKCgqigAAgJREoIogIACAAAAAAAAAAAAAAAAAAoAKCgoKCgoKAACgAAKAgACAAAAAAAgAAAACgCAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAAKAIoKooKAACCM0EUQEABAAAAAAAAAAAAAAAAAAUAFBQUFBQUFAABQAAFAQABAAAAAAAQAAAABQBAAAAAAAQAAAAAAEAAAAAAAAABAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAHVybAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAEAAAAAAAAAAAAAAAAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAUAQAAFAEUFUUFAABASiM0EUQAEAAAAAAAAAAAAAAAAABQAUFBQUFBQUAAFAAAUBAAEAAAAAABAAAAAFAEAAAAAABAAAAAAAQAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAdXJsAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAQAAAAAAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQABAAUARQVRQUAAEBKIlBlQBAAQAAAAAAAAAAAAAAAAFABQUFBQUFBQAAUAABQEAAQAAAAAAEAAAAAUAQAAAAAAEAAAAAABAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAB1cmwAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAABAAAAAAAAAAAAAAAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAEBQBFBQVQBQAQEoiUEUQEABAAAAAAAAAAAAAAAAAUAFBQUFBQUFAABQAAFAQABAAAAAAAQAAAABQBAAAAAAAQAAAAAAEAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAHVybAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAEAAAAAAAAAAAAAAABQAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAQAFAEUFUUFABAAZoiKICAAgAAAAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAAIAAAAAogAAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAKAACAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAKAIoKooKAACAgjNBFEAABAAAAAAAAAAAAAAAAUAFBQUFBQUFAABQAAFAQABAAAAAAAQAAAABRAAAAAAAQAAAAAAAEAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAABAUAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAdXJsAAAAAAAAAAABQAAAQAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAUAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAFAAAEBQBFBQVQBQAQEESgiiAgAIAAAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAAACAAAAAAKIAAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAACgAAgAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACKAAAICgACKCqKAAACAgiKICAAgAAAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAICgCKCqAKAACAgiAiiAAAgAAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACKAAAICgCAKCqKAACACIDKgCAAgAAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAigqgCgAAgIIgIogAIAAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAAACAAAAAKAIAAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAgKAIoAKooAAICCICKIAACAAAAAAAAAAAAAAoAKCgoKCgoKAACgAAKAgACAAAAAAgAAAACgCAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAigqgCgAgAiAiiAgAIAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAAACAAAAAKAIAAAAAACAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAAACKAooKAACAgiKICAAgAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAoAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAAIoCigoAAICCIogIAACAAAAAAAAAAAAAoAKCgoKCgoKAACgAAKAgACAAAAAAgAAAACgCAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAACAKCqAKACAgiKICAAAgAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAoAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAigqgCgAgIIiiAgAAIAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAAACAAAAAKAIAAAAAACAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAAACKAooAKCAgiKIACAAgAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAoAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAIAqigAAAgiKICAAAgAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAoAgAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAIAqigAAAgiAiiAAgAAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAoAgAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAAAAIqgCgAgAiAiiAAgAAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAoAgAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAIAqgAACCAIogAIAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAIKAAIAAAAACAAAAAKAIAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAAAIAKKAACCIAogAIAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAIKAAIAAAAACAAAAAKIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAIAKAAAAIIKIACAAAAAAAAAAAAAAoAKCgoKCgoKAACgAACCgACAAAAAAgAAAACiAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIDs5NgAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAIoAAAACCgAAACCCiAAgAAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAogAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAA6uTagAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAigAAAIAKAAIAIAigACAAAAAAAAAAAAAoAKCgoKCgoKAACgAACCgACAAAAAAgAAACgCAAAAAAAgAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIADq5NqAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAoAAAIAAAAAAAAAAAAACgAAAgAAAAAAAAAAIoAAACACgAACACIoAAgAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAoAgAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAA6uTagAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAKAAAAACAAAAAAAAAAAoAAAAIAAAAAAAAAAAAogAAAAgoAAAgAiKAAIAAAAAAAAAAAACgAoKCgoKCgoAAKAAAIKAAIAAAAACAAAAKAIAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAOzk2AAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAKAAAAAAACAAAAAAAAAAoAAIAAAAAAAAAAAAAAogAAAAgoAAAAggCKAIAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAACAAAAAKAIAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAOzk2AAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAKACAAAAAAAAAAAAAAAAKIAAAIAKAAAAiAigACAAAAAAAAAAAAoAKCgoKCgoKAACgAAKAgACAAAAAgAAAACgCAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAADs5NgAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAogAAAgAoAAAAggogAIAAAAAAAAAAACgAoKCgoKCgAoAKAAAoCAAIAAAACAAAAAKAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAOzk2AAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAACgCAAACCgCggAIIKIACAAAAAAAAAAAAoAKCgoKCgoAKACgAAKAgACAAAAAgAAAACgCAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAADs5NgAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAogAAAgCqAAIAIgIoAAgAAAAAAAAAAKACgoKCgoKACgAoAACgIAAgAAAAIAAAAAogAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAA7OTYAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAIAAAAAAogAAAgCqAAIACCIoAAgAAAAAAAAAAKACgoKCgoKACgAoAACgIAAgAAAAIAAAAAogAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAA7OTYAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAIAAAAAoAgAAgAooAIACCCiAAgAAAAAAAAAAKACgoKCgoKACgAoAACgIAgAAAAAIAAAAAogAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAA7OTYAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAIAAAAAoAgAAAgoAoIACCCiAAgAAAAAAAAAAKACgoKCgoKACgAoAACgIAgAAAAAIAAAAAogAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAA7OTYAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAogAAAgAoAAAggogAIAAAAAAAAAACgAoKCgoKCgAoAKAAAoCAIAAAAACAAAAAKIAAAAACAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAOzk2AAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAKAAACAAAAAKAIAAIAKAAAIAIigCAAAAAAAAAAAoAKCgoKCgoAKACgAKAAgCAAAAAAgAAAACiAAAAAAgAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAADs5NgAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAACgAAgAAAACgCAACACgAACACIoAAgAAAAAAAAAKACgoKCgoKACgAAoCgAIAgAAAAAIAAAAAogAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAA7OTYAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAogAAAgoAAAgAiKAAIAAAAAAAAACgAoKCgoKCgAoAAKAoACAIAAAAACAAAAAKIAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAOzk2AAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAKAIAAIAKAAIAIKIACAAAAAAAAAAoAKCgoKCgoAKAACgAKAgCAAAAAgAAAAACiAAAAAAgAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADs5NgAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAACgCAAACCgACAAKiAAgAAAAAAAAAKACgoKCgoKACgAAoACgIAgAAAAIAAAAAAogAAAAIAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAA7OTYAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAoAgAAAgoAAgACogAAIAAAAAAAACgAoKCgoKCgAoAAKAoACAIAAAACAAAAAAigAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAOzk2AAAAAAAAAAAAgAAAAAAAAAAAKAAAAACgAgAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAoAgAAAgoAgAAiKAAIAAAAAAAACgAoKCgoKCgAoAAKAoACAIAAAACAAAAAKIAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAOzk2AAAAAAAAAAAAAgAAAAAAAAAAKAAAAACgAAgAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAACgAAAgAAACgCAAACCgCAACIoAAgAAAAAAAAKACgoKCgoKACgAAoCgAIAgAAAAIAAAAAogAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAOrk2AAAAAAAAAAAAAAgAAAAAAAAAKAAAAACgAAgAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAACgAAAgAACgCAAACCgACAAKiAAgAAAAAAAAKACgoKCgoKACgAAoCgAIgAAAAAIAAAAACKAAAAAIAAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAIAAAAAACgAAAAAoAIAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAoAAAIAAAAoAgAAAgoAgACogAAIAAAAAAAACgoKCgoKCgAoAAKAoACIAAAAACAAAAAAigAAAACAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAACgAAgAAACgCAAACCgACACCiAAgAAAAAAAAKCgoKCgoKACgAAoCgAIgAAAAAIAAAAAogAAAAAIAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAACiAAACCgACAAKiAAAgAAAAAAAKCgoKCgoKACgAAoCgAIgAAAAAIAAAAAogAAAAAIAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq5NgIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAoAgAAAgoAAgCoAgAIAAAAAAACgoKCgoKCgAoAAKAoACIAAAAACAAAAAKIAAAACAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAACgCAAACCgAACCCiAAAgAAAAAKACgoKCgoKACgAAqgAAIgAAAAAIAAAAAogAAAAIAAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAKAIAAAIKAAAAiKAIACAAAAAAoAKCgoKCgoAKAACqAAAiAAAAAAgAAAAIoAAAAAgAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAKAIAAIAKAAAIqAIACAAAAAAoAKCgoKCgoAKAACqAAAiAAAAAAgAAACiAAAAAAgAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAgAA6ObYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAACgCAAACCgAAAIiiAAAgAAAAKACgoKCgoKACgAAqgAAIgAAAAAIAAAAogAAAAAIAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAIAKAADbm2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAoAgAAAgoAAACIogAAIAAAACgAoKCgoKCgAoAAKoAACIAAAAACAAAAKIAAAAACAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoACACgAAoArTm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAoAgAAgoAAAggogAAIAAAACgAoKCgoKCgAoAAKoAACIAAAAACAAAAAigAAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoACACgAoAoACgrm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAgAAgAoAAggogAAIAAAACgAoKCgoKCgAoAAKoAACIAAAAACAAAAAigAAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAACCgAAooCgAAArm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAgAAAgoAgACogAAIAAAACgAoKCgoKCgAoAAKoACAIAAAACAAAAAKIAAAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoACCgAAoAqgAAoAADm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAgAAgogAAAiKAAAIAAACgAoKCgoKCgAoAAKAoCAIAAAACAAAAAKIAAAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAACCgAoAoCgAoAAAKCObQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCAACCiAAACIoAAAgAAAKACgoKCgoKACgAAKKACCAAAAAIAAAAAogAAAAAIAAAAACAAAAAAAgAAAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAIKAACgCqACgAAAoAAI5tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAKAIAAIAigAAIigAAACAAAoAKCgoKCgoAKAAAooAIIAAAAAgAAAACiAAAAAAgAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAgoAAKAAKoAKAAACgAAAjm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAoAgAAAiKAAAiKAAAAIAACgAoKCgoKACgoAACigAggAAAACAAAAAigAAAACAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAACCgAAoAAqgAAoAAAAKAAACObQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAACgCAACIoAAAioAAAAgAAKACgoKCgoAKCgAAKKACCAAAAAIAAAACKAAAAAIAAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAqAAACgACqAACgAAAAAoAAAI5tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAKAIAAIgCgACKgAAAACAAoAKCgoKCgAoKAAAooAIIAAAAAgAAAAIoAAAAAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAACoAAAKAAKoAAAKAAAAAAAAAAA5tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAKAIAACCCgACCCgAAACAoAAKCgoKCgAoKAAAooAIIAAAAAgAAAAIoAAAAAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAgoAAKAACigAAAKAAAAAAAAAAAA5tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAKIAAAIigAAIigAAAAAAACgoKCgoAKCgAAKKACCAAAAAIAAAACKAAAAAIAAAAAACAAAAAAgAAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAqAACgAAAooAAACgAAAAAAAAAAAAjm0oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAKAIAAIigAAIigAAAAAAACgoKCgoAKCgAAKKACCAAAAAIAAAACKAAAAAIAAAAACAAAAAAAgAAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAqAACgAAAooAAACgAAAAAAAAAAAAAjm0AoAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAogAAiAKAAIqAAAAAAAAKCgoKCgAoKAAAooAIIAAAAAgAAAAIoAAAAAgAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAACgAAAooAAAAAAAACgAAAAAAAAAjm0AAoAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAogAAAiKAACogAAAAAAAKCgoKCgAoKAAAoAACAAAAAIAAAACKAAAAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAoAAAKKAAAAAAAAAAAoAAAAAAAI5tAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAKAIAAIigAAqIAAAAAAACgoKCgoAKCgAAKAAAgAAACAAAAAAigAAAACAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAKAAAACgCgAAAAAAAAAAAAAAAAADm0AAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAKAIAAIigAAIigAAAAAACgoKCgoAKCgAAKAAAgAAACAAAAAgCgAAACAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgIAAAKAAAAAACigAAAAAAAAAAAAAAADm0AAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAKIAAIAigAAqIAAAAAACgoKCgoAKACgAKAAAgAAACAAAAAgCgAAACAAAAAAAgAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAAKAAAAAAAAKAAoAAAAAAAAAAADm0AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAKAIAAIigAAqIAAAAAACgoKCgoAKACgAKAAAgAAACAAAAAgCgAAACAAAAAAAgAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAAAAKAAAAAAAKAAAAAAAAAAAArm0AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAKAIAAIKIAAqIAAAAAACgoKCgoAKACgAKAAAgAAACAAAAAgCgAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAKgAAAAAAAoAAAAAAAoAAAAAAAAACubQCgAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAACgACACCiAACIoAAAAAAoKCgoAKCgAoACgAAIAAAAgAAAAIAAoAAAgAAAAAIAAAAAACAAAAAAAAAAgAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAgoAAAAAAAAAKAAAAKAAAAAAAArm0oAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAoAgAAiKAACogAAAAAKCgoAKCgoAKAAoAACAAAAIAAAACAKAAAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAIKAAAAAAAAAAAAAAAAAACigNObQAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAKAAIAIKIAAqIAAAAACgoKACgoKACgAKAAAgAAACAAAAAgCgAAACAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAACAACgAAAAAAAAAAAAAAAAA25tgAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAoAAgAgogACogAAAAAKCgoAKCgoAKAAoAACAAAAIAAAACAKAAAIAAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAIAAAAAAKAAAAAAAAAADbm2AAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgACgACACACiACCiAAAAAoKCgAoKCgAoACgAAIAAAAgAAAAIAoAAAgAAAAAAIAAAAACAAAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAgAAAAAAoAAAAANubYAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAKAAIAIKIAAqIAAAACgoKCgAoKACgAKAAAgAAACAAAAAgCgAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAACAAACgAAA25tgAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAoAAgAgogACogAAAAKCgoKACgoAKAAoAACAAAAIAAAACAKAAAIAAAAACAAAAAAAgAAAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAIAAAAAKDbm2AAAAgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAKAAAIIKAIAqIAAAACgoKCgAoKACgAKAAAgAAACAAAAgACgAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAACAAAADbm2AAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAoAAgAgogAgogAAKACgoKACgoAKAoAAACAAAAIAAACAAKAAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAANubYAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAgAgogACogAAKACgoKACgoAKAAoAACAAAAIAAACAAKAAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAANubYAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAggoAgCogAAKACgoKACgoAKAAoAACAAAAIAAACAAKAAAIAAAAACAAAAAAgAAAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAICjbk2AAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAIIAKIAIKIACgAoKCgAoKACgAKAAAgAAACAAAAgACgAACAAAAAAgAAAAAIAAAAAAAAACAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAANuTYAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAIAIKIAIKIACgAoKCgoAKACgAKAAAgAAACAAAAgACgAACAAAAAAgAAAAAIAAAAAAAAACAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAIAIKIAIKAAAAKCgoKACgAoACgAAIAAAgAAAAIAAoAAAgAAAAIAAAAAACAAAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACCCiAAKgAAACgoKCgAoAKAAAoACAAAIAAAACAAAKAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAACgACCACiACCgACgAoKCgAoAKAAAoACAAAIAAAACAAAKAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAACgCACCiACCgACgAoKCgAoAKAAoAAACAAIAAAACAAKAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAOjk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAKAIAIKIAAqAAKACgoKACgAoACgAAAIAAgAAAAIAAoAAgAAAAAIAAAAAACAAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAoAAggoAgCoAAoAKCgoAKAACgKAAAAgACAAAAAgACgACAAAAAAgAAAAAAIAAAAAAAACAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAKAIIAKIAIKAKACgoKACgAAoCgAAIAAAgAAAAIAAoAAgAAAAAIAAAAAACAAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAACgACCCgCAKigAoAKCgAoAAKAoAAACAAIAAAACAAAKAIAAAAACAAAAAAAgAAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAoAAggoAACCgCgAoKACgAAoCgAAAIAAgAAAAIAAAoAgAAAAIAAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAACgAAIigAAAIKKCgAoAKAACgKAAAAgACAAAAgAAACgCAAAAAgAAAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAKAAgCKAAAKIKKACgAoAAKAoAAACAAIAAACAAAKAAIAAAACAAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAoAACCgAAAAqKACgAoAAKAoAAACAAIAAACAAAKAAIAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAoAACCgAAACgKgCgAoAAKAoAAACAAIAAACAAAKAAIAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAoAACACgAACgKgCgAoAAKAoAAACAAIAAACAAAAKIAAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAoAACACgACgAqoAAoAAKAoAAAACIAAAACAAAAKIAAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAoAACACgACgAqoAAoAAKAoAAAACIAAAACAAAKAIAAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAACgAAAIAAKKAACqgCgAAoACgAAAIgAAAAIAAAoAgAAAAAIAAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAKAAAAgAooAAKqAKAACgAKAAAgCAAAAAgAAACiAAAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAoAAAACACigAqoAoAAKAAoAACAIAAAACAAAAKIAAAAACAAAAAAAAgAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAKAACAAKAAAAAgooAKqAKAACgAKAAAgCAAAAAgAAACiAAAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAACgAAAAgAACgAAAIAKKAoogCgAoACgAAIAgAAAAIAAAAogAAAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAACgAAAIKKACqgCgAoACgAAAIgAAAAIAAAAogAAAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgACgAAAIKKACqgCgAoAACgAIAgAAAAIAAAACKAAAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgACgAAAIKAKAqKCgAAoCgAAAIgAAAIAAAAACKAAAAIAAAAAAACAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgACgAAIKAKAqKCgAAoCgAAAIgAAAIAAAAACKAAAAIAAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAADq5NgIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAKAAAgoAoCooAKACgKAAAiAAAAAgAAAAAIoAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAOrk2gAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAACgAAIAKACooAKACgAKAAIIAAAAgAAAAAIoAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAOrk2gAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAACgAAIAKACooKAACgAKAAIIAAAAgAAAAIAAoAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAOrk2gAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAACgAAIAKAKIKKAACgAKAAiAAAAAgAAAAIAAoAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOrk2gAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAACgAAIAKAKIKKAACgAKAAiAAAAAgAAAAIAAoAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAIAAAAAoAACACgCgKgCgAoACgCACAAAAIAAAACAKAAAAIAAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAIACgKAAIIAKAAKqAKACgAKAIIAAAAAgAAAAIAoAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAoAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAAAoAAgAgoAAqoAoAAKAoAggAAAACAAAAAgACgAACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAACgAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAoAAAAAAACgACACCgAAqKCgAAoCgCCAAAAAIAAAACAAKAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAKAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACgAAAAAAKAAAIAIAiigKigAoAKAoAggAAAACAAAAAgACgAACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAACgAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAoAAAAAACgAACACIAooCooAKACgKAIAIAAAAgAAAAIAAoAAAgAAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAKAAAAAAAoAAAgAiAKAKIqgCgAoCgCCAAAAAIAAAACAAKAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACgAAAoAIAoAAAAgAiAKAKIKKCgAoCgCACAAAAIAAAACAAKAAAIAAAAAACAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACgAAAoAIoAAAAAgAiAKAKIKKCgAoCgCACAAAAIAAAACAKAAAAIAAAAAACAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAoAAAKAoAgAAAAICCACgAIqigoAAKoAgAgAAACAAAAAgACgAACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAKAACgKAAIAAAACAggAoACKooKAACqAIAIAAAAgAAAAIAAoAAAgAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACgAAoCgACAAAAAgIIAiigCKooKAACgKIAIAAAAgAAAAIAoAAAAgAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAICgAAAAAAAAAAAAAAoAAIAAAAAAACgAAAAoAAKoAAAgAAAIACCAIoAoiqKACgAoCiACAAAAIAAAACAKAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAoAAAAAAAAAAAKAAAAACAAAAAAoAAAKAAACqAAAIAAAACAggCKAKIqigAoAKAoggAAAACAAAAAgCgAACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAKAAAAAAAAAACgAAAAAAgAAAAKAAACgAAAKKAAACAAAAgIIAigCiKooAKAACqIAIAAAAgAAAAIAoAAAgAAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAOjk2AAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAACgAAAAAAAAAoAAAAAAAIAAACgAAAoAAACigAAAgAAAICCAIoAoiqKACgAAqiACAAAAIAAACAAAKAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADo5NgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAoAAAAAAAAAKAAAAAAACAAAAoAAAKAAAACqAAAIAAACAggCKAKIqigAoAAKogAgAACAAAAAgAACgACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6OTYAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAIAAACgAAAAoAACgCgAAgAAAICCAIoAoiqKACgAAKAAgAACAAAAAgAACgACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6OTYAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAIAACgAAAAAoAACgACgAgAAIACCAIoAoiqKACgAAKAgAAACAAAAAgAACgACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6OTYAAAAACgAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAAAAAAgAAKAAAAACgAAKAAKACAAAgAIIAigCiKooAKAAAoACAAAIAAAACAAAAKAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAKAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAACAAAoAAAAAKAAAoAAoIAAACAAggCAqgCqigAoAACgAIAAAgAAAAIAAAAoAgAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAoAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAIACgAAAAAAoAACgACggAAAAICCAACgCiKoAoAACgAIAAAgAAAAIAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAAAAoAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAIACgAAAAAAoAACgACgAgAAAICCAACgCiKooAAAACgIAAAgAAAAIAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAACAoAAAAAAKAAAAoAAoAIAAACACIAAooAiqKAAAAAoCAAAIAAAACAAAAAAgCgAAAACAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAADbk2oAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAgAAKAAAAACgAAAKAKAACAAAAgAIIAqgCiCigAAAKAAgAACAAAAAgAAAAAIoICgAAACAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAKAAAAACgAAAKAKAAACAAAgAAgAoAogooAAACgAIAAAgAAAAIAAAAACAKAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAOjk2AAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAoAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAoAAAAKAAAAoAoAAAIAACAACACgCiCigAAAKAAgAACAAAAAgAAAAAIAoAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAA6OTYAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAoAAAAKAAAAAooAAAIAACAACACgCiCigAAAAKAgAACAAAAAgAAAAAIAoAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA6OTYAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAoAAAKAAAAAooAAAIAACAACACgCiCigAAAAKAgAACAAAAAgAAAAAIAoAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAA6OTYAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAoAAAKAAAAAoAoAAIAACAAggCqAKIKKAAAAAoCAAAIAAAACAAAAAAgACgAAACAAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAADo5NgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAACgAAAoAAAACgCgAAgAAICACACigCKooAAAACgIAAAgAAAAIAAAAACAAKAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAOjk2AAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAKAAAACgAAAKAKACAAAgAIAIAKAKIqigAAAAKAgAACAAAAAgAAAAAIAoAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAA6OTYAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAoAAAAKAAAAoAAAAAAgAIIgAKoAoiqAKAAAAoCAAAIAAAACAAAAAAigAAAAAACAAAAAAAgAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADo5NgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAoAAAACgAAAACAgAiAAKKCiCigoAAACoAAAAgAAAAIAAAAACKAAAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAOjk2AAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAACgAAAAKAAAAIACAggCAqgCiKooKAAAAqAAAAIAAAACAAAAAAKIAAAAAAACAAAAAAAgAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDo5NgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAoAAACgAAACAAgiAgACigoiqKCgAAKAgAAACAAAAAgAAAACgCAAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbk2AAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAACgAAAAKAAAICAgiAAAKKCiKooKAAAoCAAAAIAAAAACAAAAKAIAAAAAAACAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAKAAAAAoAAAgICCICAKAKCwRqKKACgAKAgAAACAAAAAAgAAACgCAAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbk2AoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAoAAAACgACAAgjIIAAoAoLBGoooAKAAoCAAAAAIAAAACAAAAKAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAKAAAAoAAAgICURAQEAUUFBYIsUaABQAFAQAAAABAAAAAQAAABQABAAAAAAAAQAAAAAAEAAAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtybAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAABAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABQAAAAFAAAEBBEoICAgCgCwGoIsUaABQAFAQAAAABAAAAAAQAABQABAAAAAAAAQAAAAAAEAAAAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtybAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAABAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABQAAAAFAAAEBBEoM0EAUQFBYDUEWKNAAoACgIAAAAAAgAAAAIAAAAoAgAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA25NqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAoAAAACgAAACAlEZoJQQEUAUFgjUBYo0ACgAKAgAAAAACAAAAAgAAACgACAAAAAAAgAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAoAAAACgAAACAlEZoJQQEUAUFgjUUWA0ACgAKAgAAAAACAAAAAAgAACgACAAAAAAAgAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAoAAAACgAAAACAzREoM0EAUAAagjUUWA0ACgAKAgAAAAACAAAAAAgAACgACAAAAAAAAgAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAKKAgKACAAoAAAAgAM0RKDNBFEABQagixRqA1AUAABQEAAAAAAAQAAAAEAAAUAAQAAAAAAAEAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHJsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAABRQAAAAEABQAAABAQEoiUGaCKIACiNRRYDUBqAoAACgIAAAAAAAgAAAAIAAAAoAAgAAAAAAIAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACigAAAAAAAAAAAgICURKDNBFEABYI1FFgNQGgUAABQEAAAAAAQAAAAAEAAAAAUAQAAAAAAAEAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHJsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAFFAAAAAAAAAAAABASglESgzQRRAAWCLFGoDUBoFAAAUBAAAAAEAAAAABAAAAAAFAEAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAEBQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAFAFAAAAAAAAAAAABASglESgzQRRAAWCLFGoDUBoFAAAVAAAAAEAAAAAABAAAAAAARQAAAAAAAABAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAUAABQABQAAAAAAAAAAAAQEoJRGaCUEUQAFgixRqA1AaBQAAFQAAABAAAAAAAQAAEAAAAAUAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAUAAAAAAAAAAAAEBASiM0EoIogALBFijUBqA0CgAAKgAACAAAAAAAAgAIAAAAAAAoAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAoAAAoAAAAAAAAAAAAICUEojNBKDKgACwRYo1AagKCgoACoAAgAAAAAAAIACAAgAAAKAAAoAAAAAAAAgAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAoAAAoAAAAAAAAAAACAogJQSiM0EoMqAALBFijUBqAoKCgAKgCAAAAAAAAgAIACAAgKAACgAKAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAKAAAAKAAAAAAAAAgAAAKICAlEZoJQZUAAWCLFGoDUBQUFABBBQBAAAAAAAAQAEFQAAAQBQAUABQAAAAAABAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAABQAAAAAAAEAAABQBASglEZoJQZUAAWCNRRYDUBQUFBAABEUAQAFAAAABAQEFRAAAUUQBQUABQAAAAAABAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUAABQAAABQAAAAAAAAEAFABFAEBKCURmglBFEABYDUVFgNQFBQAAAQEEFAAAAAAAEBBUQAQAFAUURQAUBQAAAAAAABAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAUAAAAAAABAABQAQBRASglEZoJQRRAAWA1FRYDUBQUAAEBAARQEAUAAAEABEVAQAAAFUUQBQUBQAAAAAAABAAAAAAAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAUAAAAAUAAAAAABAUEAFABAFEBKCURmglBFEABQaiosBqAoAKCAAgIAAoCAAAAAIKiCAgAAKCqAigoAKAoAAAAAAAgAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAKAAAAAKAAAAAAAgAAAoAIAogJQSiM0EoIogALAagixRqAoAAAICAAgACgIoAIAKiCAgAAAKAooigoAAKAoAAAAAAgAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAKAAAAAAKAAAAAAAgAAAqgCAAgJQSiM0EoMgKAKCwRqKKCgAAAgAIAAAAoCAoCIICAAgAKACqKIoAKAAAAooAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAACgAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAoAAAAAAoAAAAACAoICgCgAgAICURKDNBKDICgCgsEWAqigAAAAgAIAAAAAACAgAIAACgAqiiAKAAACgAKAAKACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAAAAAAAAAAoAAAAAAAAgAKCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAoAAAAAAoAAAAAAACAoAoAIACAlESgzQZoIoAAoKCiKAoAAAAgAAAAAAIACAAgAAAAKCgKKIAAAAoAKAAoAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAOjk2AAAAoAAAAIAAAAAAAACgAAAAAACAAAAoAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACgAAAAACgAAAAAAAAAoAAIACAlEZoJQZoIAoAAoKCgCCgAACAAAAAAAgAIACAAAAoKACgAAAKAigAoAKAoAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAOjk2AAAoAAAAAIAAAAAAAAACgAAAAAACAAAAoAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACgAAAAACgAAAAAAAAAoAAIACAlEZoJQZoIAoAAoKACgggAoAgAAAAAAIACAAAAAAoAAKAAAAACgKigoAKoAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAOjk2AoAAAAAAAIAAAAAAAAAACgAAAACAoIAAACgAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAKAAAAAAKAAAAAAAAACgAAgAICCM0EoM0EAUAAUAFAABBAEUAAAAAAAAQAEAAABQAAUAAAAAAFABVRQUAFUAAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAHVybAAQAAAFABAAAAAAAAAAAAAUAAAAQFBAAAAUAAAAABQAAAAAAAAAQAAAAAAAAAAAAAAAAFAABAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABQAAAAABQAAAAAAAAAAUAEABASiJQZoJQZAUAAUAAAAEAEAFEBQAAQAAEAAAAAAABQAAAAQFAABQUFVFBQAVQAAAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAdXJsBAAAAAAAAAAAAAAAAAAAAUAAAAAAAABQAQAAAUAAAAAAAAAAAEAAAAAAAAAAAAAAABQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAUAAAAAAAUAAAAAAAAAAFABAAQEoiUGaCUEBFAAFAAABAAQQAAUAAAAAQAAEQAAFFAAAAAAAAABQAUFBVRQUFUAAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAHVybQAAAAAAAAAAAAAAAAAAAAAFAAAAAAAUAAAAEFAAAAAAAAAAAABAAAAAAAAAAAAAAAAUAAEAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAFAAAAAAAFAAAAAAAAAABQQAAEBKIlBmggICKAAKAAACAgAAiAKKAACAAAiAAKACAAAAAAAAAAAKCqANAoKqKACqAAAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAKAAAAAAoAAAAAoCAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACgAAAAAAACgAAAAAAAAAAAAAAgIIlBmglBARQABQAAQAEABABABQAAAAQQUAAAAAEAAAAAAAAAAUFUWAoKqKCgAqgAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAACgAAAAAKAAAAAKAgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAoAAAAAAAAAoAAAAAAAAAAAAAAICCJQSgzQQBRAAUAEAABAAQAAQAUAEAEFAAAAQFAAAEAAQUAABRAAFBVFBoFVAFAAAUAAUAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAAFAAAAAAUAUAAABAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABQAAAAAAAABQAAAAAAAAAAAAAAAQEESglBmggIoAAAAAAgAAIAAIAAAACoAACAAAAAAAAAAAAAAoAigqigoKqKAACgAKAAKAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAACgAAAAAAKKAAAAAAgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAoAAAAAAAAAAoAAAAAAAAAAAAAAAICCJQSgzQQEUAAAAAAQAEAAAAEABQEAAABAAAAAAAAAAAAAAAUQBQVRQUFEFFAABQFAFAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAdHJsAAAAAAAAAAAAAAAAAAAABQAAAAAAAVQAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAUAAAAUAAEAAABQAAAAAAAAAAAAAAAQRASglBmgiiAgAAAAAAAAIAAAAAACAAAAAgAAAAAAAAAAAAAAKIoAKooKACqgCgAoCigAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAOjk2AAAAAAAAAAAAAAAAAAAAoAAAAAAAAKAAoIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgKAAAKAAAAACAoAAAAAAAAAAAAAAAAIIgJQZoJQZUQAAAAAAAAAAQABAABQAEAAAABAAAAAAAAAAAAAAUQBQAVRQUAFVAFBQFFAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAdHJsBQQAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAUAAAAUAAAAAAAAAAAAAAAAAAAAAAAEESglBmgzQRRAAQAFAAAAEAAAAAAQUABAAAAAAAAQAAAAAAAAAAAFEAUAFUUAFBVRQUBRQAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAHRybAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUBQAABQAAAAAAAAAAAAAAAAAAAAAAAAQRKDNBKDNBFEBAAAAUAARVAAAEAQAAQUBAAAAAAAAQAAAAAAAAAAAAFEAUAFUUFBVRQUAFUAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAHRybAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABQAABQAAAAAAAAAAAAAAAAAAAAAAAAQRKDNBmglBFEBAAAUAFEFAAAAABBAAQUABAAAAAAAAQAAAAAAAAAAAAFEAUFBVFBVFEUAFUAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAHRybAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAABAAAAAQAQABRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAUAAUAAAAAAAAAAAAAAAAAAAAAAAAAEESgzQZoJQZUAQAFABQFRQAAAAAQBBAAQUBAAAAAAAAAQAAAAAAAAAAAFEAUAFUUGgVUUAFUAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAHRybAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAABAAAAAQQAAABRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAUAUAAAAAAAAAAAAAAAAAAAAAAAAAEEZoJQZoJQZUAQFABQBFUUAAAAEABEEABBQEAAAAAAAAABAAAAAAAAAAAAUQBQVRQaBVQBQVQAAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtybAAAAAAAAAAAAAAAAUAAAAAAAEABQAAAAAAUEAAAAABABAAAAFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABRQAAAAAAAAAAAAAAAAAAAAAAAAAAQRmglBmglBFEAABQUFEFFAAABAAQEQAQEAFQAAAAAAAAAAEAAAAAAAAAABRAFBVFBQVUUFAUUAAAAAAAAEAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnJsBQAAAAAAAAAAAAAAUAAAAAAEAAABQAAAAAAAAAAAAQQAAAABRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAUUAAAAAAAAAAAAAAAAAAAAAAAAAAEEZoJQZoJQRRAAUFBRFUAUAAEABAQBBAQEAFQAAAAAAAAAAAEAAAAAAAAABRAFBVFBQVUUAFAUUAAAAAAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnJsABQAAAAAAAAAAAAUAAAAAAEAAAABQAAAAAAAAAAAQAQAUAEAFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABQABQAAAAAAAAAAAAAAAAAAAAAAAAAQRmglBmggIAoAoKCiKAoAoIACAAgICIIACCgIAAAAAAAAAACAAAAAAAAAAoAigqigAoiqKACgAqgAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTk2AAAoAAAAAAAAAAAKAAAAACAAAAAAoAAAAAAAAAAAIAIAKAACKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAoAqAoAAAAAAAAAAAAAAAAAAAAAAAAgjNBKDNBAQBQBQUFEUFUAAAQAEBAQEQAQEAAAFAAQAAAAAAAEAAAAAAAABQBFABVFBQBFUUAFAAUUAAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnJsAABQAAAAAAUAAAAAAAAAEAAAAAABQAAAAAQAAAFABABAABQBUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAFAFQAAFBAUAAAAAAAAAAAAAAAAAAAAQGaIlBmggIAoAoNACKCqAAAIACAgIACAgCACAAAACgAIAAAACAAAAAAAAAoAgCgqgCgoAKqKACgAqgAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTk2AAAoAAAAAKAAAAAAAAACAAAAAAAAoAAAIAAAAAAAAAIAAAKqgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAKAAAAAAAAAAAAAACAoAAgM0RKDNBAQBQBQUFEUBQAAABAAQAEABAAAQABBAABQEAAAABAAAAAAAAAUAARQAVQBQAUFVFABQFFAAAAABAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpybAAUAAAAAFAAAAAAAAABAAAAAAAAUAAAAEAAEABQAFBABAAAUUVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAUAAAAQFAAAAAAAAFBAAAAUAEABQQFAAEBmiJQZoICAKAKCgoAiqAAAAIAACAAgAAIAACAIAIAKgAAAAIAAAAAAAACgACAKAAooKACgqooKAAooAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAANOTagAAAAAAAoAAAAAAAAAIAAAAAACgAAAAAgAAgAAKoAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAKAIACgAAAAAAAAAAAAAAAAAAAACgACAzREoM0EBAFAFABQUQUUAAAEAAABAAAQAAEABAEEABBQAAAEAAAAAAAAABQABAFAABVFABRFUUFAAUUAAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAG3JsAAAAAABQAAAAAAAAAAQAAAAAFAAAAAABABAAAFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAFAEBQAAQFAAAAAAAAAAAAAAAAAAAFAEBmiJQZoJQQEUUAFBQUQUUAAAAEAAAABAAAQAEBAEEABBQAAAEAAAAAAAAABQAABAAFABVFBQVUUAFAAUUAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAG3JsAAAAABQAAAAAAAAAAAAQAAAAFAAAAAABAABFAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAARQAAAAABQQFAAAAAAUAAAEAAAABQAARQBAZoiUGaCUEBFAFBQUARVAFAABAAAAAAAQAAEBAQBBABUAAAABAAAAAAAAAAAUAAAQABQAVRQUFVFABQFFAAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABtybAAAAAUAAAAAAAAAAAAAAEAAAABQAAAQAAARQABQAAAAAEAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAARQAAAAAABQQAAAAFAUAAAEAAAABQAARQBASiM0GaCUEUQAFABQURVAAAAAAAAAAEAAABAQEAQQAVAAAAAQAAAAAAAAAAAAFAEAAAUFAUUFEVRQUABRQAAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAbcmwAAAFAAAAAAAAAAAAAAAABAAAAAAAAABAAFAFAAAAAAQAABQQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAEUAAAAAAAAAAAAAAAVQAAAQAAAFAAABAFEESgzQZoJQRRAAAUFBRAFUAAAAQAAAAAAAEABAQBBAQUAAABAAAAAAAAAAAAAAAAUQAABQUFUUFEFFBQFAFAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAEAAAAAAAEBQQBQABQAAAAEEAFAUABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQBAAAAAAAAAAAAAAAFAAAFQAAAFAAABAFRASgzQZoJQZUAAAUAFEUABQAAAQQBQAAAAABAARBAAQUAAABAAAAAAAAAAAAAAAAAUQABQAVRQUFVFBQAFFAAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAUAUAAAABBABQAAFAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAQAAAAAAAAAAAAABQAABUAAABQAAAQBUQEoM0GaCUEBFAAAFBQBAFABAAAAQAABQAAABAEEABBQAAAEAAAAAAAAAAAAAAAAAEUAAFBQVRQURVAFAUUAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAABQBQAAAEAEFEABQABVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAFAAAEAAAAAAAAAAAAAAAUAAAVABAUEUUEBQARFEBKDNBmglBARRAUAAFAEUAAAEAABAAAAUBQBAEAEBBQAAAAEAAAAAAAAAAAAAAAAABRAAFABVFBQVUUFAUUAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAQAAAQAAAAABRQAAAEAAERQABQABVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAFAAAAEAAAAAAAAAAAAAAAUUEABUEAAAUAAUEARRASgzQSgzQQEUAAAAUAAQAAABBQAAQAAAAAABABUAAAABAAAAAAAAAAAAAAAAAAAAUARQAUFUUFVFBQFFAAAABAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAAAEAAEAAAAAUUAAABAAABEUAAUAUQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQABAUEAAAAAAAAAAAAAAAAUUEBUEABQRQAAAARRASgzQSgzQQEUAAAAUAAAQABBQAEAAAEAAUAEAFAQAAAAEAAAAAAAAAAAAAAAAAAABQBAFBQVRQVUUFAUUAAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAAQAAQAAAAFUAAAEAAAAEQFUAAEVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAEAAAAAAAAAAAAAAAAAAUUBBAUAAEUAAAAEUQEoM0EoM0EBFAAAFAAAAAEBUAABAAAAABAAAUBAAAAAAQAAAAAAAAAAAAAAAAAAAFAAEUFBVFBVRQUBRQAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAdHJsAAAAAAAAAAAAAAAAAAAAAABAABAAAAAAUAAAAAAAEAAABVAAAAAAAAABAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQBAAAAAAAAAAAAAABQQAAAUAUBABAUAEUUEBQQBFEBKDNBKDNBAFAAAAAAAAAARBQEAAAAAAAAABAAAAAAQAAAAAAAAAAAAAAAAAAAAFAAEUFBVFgKqKCgKKAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAADo5NgAAAAIAAAAACgAAAAAAAAAAAgAgAAAAAAKAAAAAAAACAAqgAAAAAAAAAgAAAKAAAAAAAAAAAAAAAACgAAAAAAAAACAoIoAAAAAAAAAAAAAACgAgAAoAoACAAAACKKCAoAIiiAlBmglBmgAigAACgAAgAAgCCgIAAACAAoAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAigoKosBVRQUBRQAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAdHJsAAABAAAAAAAUAAAAAAAAAAEAEAAAAAAAABQAAAAAAAAFAAAAAAAAABAAAAAUAAAAAAAAAAAAAAAFAAAAAAAEBQQAAABQAAAAAAAAAAAFAAAABAABQABQEAAEBQFAAAAVEBASgzQSggICKAAKAAACAAAgAAIAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAIoKCqLAVUUFABVAAAAAAAAEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAHRybAAAQAAAAAAAFAAAAAAAAABAABAABQAQAAAAABQAAAAAFAAAAAAAAAABAAAAAUAAAAAAAAAAAAAAFAAAAAAAEBQQAAAABQAAAAAAAAAAAAFAAABBQABQAAAEAAABQAABBRAQEoM0EoICAigACgAAAgAAIACAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgACKCgqiwFVFBQAVQAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAB0cmwAEAAAAAAAABQAAAAAAAAAQAAAQVQBEFURAEAAAABQBQAFAAAAAAAAAABAAAAAAUAAAAAAAAAAAFAAAAAAAAAAAAEAAAAAUAAAAAAAAAAABQAAABUAAAUAAABAAAUAAAAQUQEBKDNBKDNBAFAAAFAABAAAQAEAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAFAAEUFBVFBVRQUAFUAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAdHJsBAAAAAAAAAAUAAAAAAAAAEAAAUAAAAERAAAFAABBQBQFAAAAAAAAAABAAAAAAUAAAAAAAAAAFAAAAAAAAAAAAEAAAAAUAAAAAAAAAABQQFAAAFAAQBQAAAAEAABQAAABBRAQEoM0EoM0EAUBAAFAAAFQQBBQEABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAFAAEUFBVFBVRQUAFUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAdHJtAAAAAAAAAAUAAAAAAAAAAEAAUAAAEAAEEAFAAAAFQBQFAAAAAAAAAABAAAAAAUAAAAAAAAAFAAAAAAAAAAAAAEAAAAAUAAAAAAAAAAABQAAABQEAAUEABQAEAAUVAAAEAFEBASgzQSgzQQBQEAAUAAAAEBABUAABAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAEUFBVFBVRQUAFUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAdHJtAAAAAAAAAUAAAAAAAAAAAAEUAAAEAAAEEFAAAAAFARVAAAAAAAAAABAAAAAAAUAAAAAAAAFAAAAAAAAAAAAAAAEAAAUAAAAAAAAAAABQAAAABQEAAAAAUABABBVVAUAEQUAQEBKDNBKDNBAFAARQAUAAEABAQAVAAAAAAAQAAAAAEAAAAAABQAAQAAAAAAAAAAAAAFAAEUFBVFBVRQUAFUAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAdHJtAAAAAAAAUAAAAAAAAAAAAAAAEAAAAAABBBQAAABQEFFAAAAAAAAAAQAAAAAFAAAAAAAABQAAAAAAAAAAAAAABAAAFAAAAAAAAAAAAAUAAAAUABAAAAFAAQABQBQAAEQUAQEBKDNBKCAgIoACKCgAoAIACAgIAKgAAAAAAAIAAACAAAAAAoAAAAAIAAAAAAAAAAACgACKCgqigqooKACqAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAOjk2AgAAAAKAAAAAAAAAAAAAAAAAoIAAIAAAAIigAACgAIKKAAAAAAAAAAAgAAAAKAAAAAAAACgAAAAAAAAAAAAAAACAAKAAAAAAAAAAAAAoAAAAoAACAAAKACIKAKAKAAAAIAgICUGaCUEBAQBRQUQBQAAAAQEBAQEFAAAAAAAAQAAEAAAAABQAAAAAQAAAAAAAAAAAFAAEUFUUFBVRQUAFUAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAdHJsAAAAAAAAAAAAAAAAAABAAAUAAAAAAEAAEFAEBQAAEAVQAAAAAAAAAAQAAAFAAAAAAAABQAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAUAAAUAABAAAAAAFQQFAFFAAAAAEQEBKCUGaCAgACgCiKACgAAgICAgIACCgAgAAAKAAgAAIAAAACgAAAAAgAAAAAAAAAAKAAAIoKooKCqigoAKoAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA6OTYAAAAAAAAAAAAAAAAACAAAKKgAAAAAAAgAgAoAAAAIoAACgAAAAAAAAAgAKAAAAAAAACgAAAAAAAAAAAAAAAAAAogAAAAAAAAAAAAAAoAoAAACAoIAAAAIAKCCqAoAAAAgCAgJQSgzQQEAAUAUFEUAAAAEBAQEBAAAQFABAABQEAABAAAAAUAAAAAEAAAAAAAAAABQAABFBVFBQVUUFABVAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbcmwAAAAAAAAAAAAAAAAAEAAABQAAAAAAAAQQAAUAAAEUAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAEAAAAAAAAAAAAFAAFAAAAQFBAAAAABAABRQABQAABAEBASglBmggIAAAooKIoAAAAICAgICAAAgAAAAAAoCAAgAAAAAKAAAACAAAAAAAAAAAoAAgCgqigoKqKCgAqgAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAANuTYAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAiAAACgAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAACAoCgACAAAAAAAAAAAACgCgAAAAAICggAAAgAAooAAoAAgCAAgJQSgzQQEAAAUUARQUAAAEBAQEBAAAQAAAAAUBAAAQAAAAAFAAAABAAAAAAAAAAUAAARQAVRQUFVFBQAVQAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAG3JsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAEAAAUAUEAAAAAAAAAAAAAFFAAAAAAQFABAAABAABRQBQAABAEABASglBKDIAIAAoAoigAAoIACAgIACAAgAAoAAACAAAgAAAAAAAAAAAAAAAAAAAKAAAAIoAKooKCqigoAKoAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAADbk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAAACAAAAKAAAAAAAAAAAAAAoAAoAAAAAAAACAAACAAKoACgAAACIACAlBKCAgICAAAKAigAoAAIACAgAIACAACgAIAAAAACAAAAAAAAAAAAAAAAAAoAAAAAigAqigoKqKCgoCgAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAANuTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAICggAACgAAAAAAAAAAAAAKAAKAAAAAAAAAgAAAgAACqAoAAAAgCAgJQSggICAgAACgAIoAAAAAIACAgAIACCgAAAAAAAIAAAAAAAAAAAAAAAAACgAAAACKCgKKCgqooKCgKAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA05NqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAKAAAAAAAAAAAAAAAIAAAAAoAAAAAAAAAAAACgACgAAAAAAAAAIAAAIAKKAAKAAAIAAgICAgICAgIAACAqgIAoAAAAIACAgAIAKgAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAogCgKKCgqooKCgKAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA05NgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAIAAAAAAoAAAAAAAAAAACgAACgAAAAAAIACggCggKgAAgqqAAAAIAAgICAgICAgIAAAAoCAKAAAAACAAgICAACoAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAKIAoCigoKqKCgoCgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAANOTYAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAgAAAAACgAAAAAAAAKAAAAAAKAAAAAAAAgAKCAKCAoCKAAKAAAAAIAgICAgICAgAIAAAoACKAAAAAACAgAICACgIAAAAAAAAACAAAAAAAAAAAAAAoAAAAAKIAoCigoKqKCgAoCgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAANOTYAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAICgAKAAAAAAAAAAAAAIAAAAAAoAAAAAAAAACgAAACgAAAAAAAAICgAgCggKAigACgAAAACAICAgICAgIAACAAKAKIAAoAAIACAAgIACAAAAgoAAAAAACAAAAAAAAAAAAAAAoAAAAKIAoCigoKooigAoCgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAANOTYAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgACgAACgAIAAAAAAAAAAAAAAAAgAAAKoAAAAAAAAAAAgAAAAAAACgAAAAAAKAAAAAAKAAAAAAAAAAAAgCggKAgAACigAAAACAICAgICAgAIAACAqgAIoAAAAAIACAgAIACAAAACoAAAAACAAAAAAAAAAAAAAAoAAAAKIAoCigoKoogCgoCgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAANOTYAAAAAAAACgAAAAAAAAAAAAAAAAAAAgACgAAAACgAIAAAAAAAAAAAAAAgAKCAqgAAAAAAAAAACAAAIACgAAAoAAAAAACgAAAACgAAAAAAAAAAAIAAoIACoAAoAoAAAAAgCAgICAgIACAAAAKAKIAAoAIAACAAgIACAAgAAAAIKAAAAgAAAAAAAAAAAAAAKAAAACiAKAooKCqAigoKAoAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADTk2AAAAAAAAAoAAAAAAAAAAAAAAAAAAAIAAoAAAAAAoCAAAAAAAAAAAAAAAAAAIooAAAAAAAAAIAAAAgAKAACgAAAAAAKAAAAAKAAAAAAAAAAAAAAAgCgiCgAACigAICgAIAgICAgICAAgAAAKoAogAAAAoAgCCAAgICAAAgAAAIKAAAAgAAAAAAAAAAAAAAKAAACgCKACqAKCqAigoAKoAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADTk2AAAAgCigIAKAAAAAAAAAAAAAAAAAACACAACgKAAAAoCAAAAAAAAAAAAAAAICgAKAAAACggAAAAgAACAAAoAAKAAAAAAAoAAAAAoAAAAAAAAAAAAAAoAgCIKCAooAoAAAAAgCAgICAgIAACAAoCigCKAAoAgAAIAggICAAgAAIAACACgAIAAAAAAAAAAAAAAACgAAAoAigKKCgAqgIoKACqAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAA/9k=", skyBoxBack: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAECAwT/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AMqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAACAAAAAAAoAAAAAAAAAAAAKAAAACggAAAAAAAAAAKAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAACAAAAAAAAoAAAAAAAAAAAAKAAAACggAAAAAAAAAAAKAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAACAAAAAAAoAAAAAAAAAAAAAKAAACgAgAAAAAAAAAAAKACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAACAAAAAAAoAAAAAAAAAAAAAAKAAACgAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAoAAAAKCAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAKAAAAACggAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAAACgAAAoAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACAAAAAAAAoAAAKAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAIAAAAAACgAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAACgAAAoAAAAAAIAAAACgAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAACAAAAAoAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAAAAAAACgAAAoAAAAAAAAIAAACgAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAACAoAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAIAAACgAAAAAoAAAAAAAIAAACgAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAgAAAKAAAAAAAAACgAgAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAgAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAgAAAKACAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAgAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAIAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAoAAAIAAAAAAACgAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAIAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAACgAAAAgAAAAAAKAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAgAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAKAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAKAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAKAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAKAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAgAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAIAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAKAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAKAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAKAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAKAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAKAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAoIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAACgAAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAACgAAAAAAAAAAAAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACgAAAAAAAAAAAAAAAAAAAgKCACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACggKAAAAAAAAAAAAAAAAAAAAACAoIAAAKAACAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKCAoAAAAAAAAAAAAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAACAAAAAAAAAAoIAAAACgAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAACAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAACAAAAoAAAAIAAACgAAAAAAAgKACAoAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAACAAAAAAAAoIACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAoAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIICggAAAAAAAAKAAAAAAAAAAACAAAAAAAAAoAAAAIooAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAICggAAAAAAAAAAAAAAAACgAACgAAiAAAAAAAAAAAAAAAAAAAAoAAAAAoAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAIAAAKAACAAKAAAAAAAACAAAoAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAoIAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAoICggAAAAAAAAAKAACAAAAAAAAAAAAAAAoICgAAAAAAAAAgAKAAAAAAACAoAICggKCAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAIAAAAoAAAoAAAACAoIAAAAAAAAAAACgAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAIAAAAAKAAAAAAAAAAAAACAAAAAAoAAAAAAAACgAAAAAAAAAAAAAACAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAoAAAAAICgAAAAAAAAAAgAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACoAAAAAAAAAAKAAAAAACAAKAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAA0AAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAoAAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAADYAIAACgAAAAAAAAAAAAAAAgAAAAAAAAKCAAAAAAAgAAAAAAAAAAAAAAAAAAAAKACAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAKAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAANAAAAAAAAAAAoAAAAAAIAAACAAAAAAAAAAAAACIAAoAAIAAAAAAAAAAoAAAIAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAACgAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAoAAAANAAAAAAAAAAAAoAAAAAIAACAAAAAAAAAAACIAoAAAAAgAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAoAAAAAAAAIAAAAAAAAAgAAAACqCAAAoAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAoAAAAAAKAAAACgoAIAAAACgAAAAAAAAAAAgAAAAIIAAAoIAAAAoAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAKAAAAAAAAAAgAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAIAAAAAAAAAAAACgAAAAoAAAAAKAAAACgAAAAAAAAAAAAAAAAAAAAggAAAAAAoAAAAgAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAACAAAAAAIAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAICgAgKAACAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAoAAAAAAKAAAAIAAAAAAAAAAAAAAAAAAAgAAACgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAIAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACgAAAAAAAoIIAAAAAAAAAAAAAKACAAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAgAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAioAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACggAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAIAAAAAAAKAAAAAAAAAACAAoAIoAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICggKCAAAKAAAAAAAoAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgKCAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAACAAAAAACAAAAAoAAAAAAAAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAIAIAAACgAAAAAAAAAAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKACCKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAIAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAKAAAAAAAAAAAgigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICggAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAACAoAAAIAACggAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAACAoIAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAoAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAoAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAoIAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAACggAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoIACgKIgKAKggAAAAKAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ACgAAgAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAKAAACAAAAAAAAA6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACAAoICggAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAKAAAAAAACAAAAAAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAoAAAAAAAAAIAAAAAAADuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAIAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAoACgACAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAO4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAoAIAAAAAAAAAAAAAAAAAAAIAAAAACAAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAoACgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAgAAAAAAAAIAAACAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAACAAACgKAAAAAAAIAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAACAA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAoICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAIAAAACAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAACAAAAACgAAAAAAAAigAAAAAAAAAAAAAAAAgAAAAAKAAACAAAAAAAAAA7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAgAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAICgAAAAAAAAAAAAAAAAAAAAAAAIAAAAgAAAAAAgAAAAAAIAAAAAACAAAAAAAAAAAAAAAAAgAAAIAAAKAAoAAAgAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAD0AAAAAAAAAAAAAAAAAAAAAAAgAACgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAACAAIAAAAAAAIAAAAACAAAAAAAAAAAAAAAAAAAgAAIAAAAAKAAACKAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAADuAAAAAAAAAAAAAAAAAAAAAAAIAKoIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgACAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAIAAAAAAAAAACgAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAA7AAAAAAAAAAAAAAAAACAAAACgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoACAAAAAAAAAAAAAIAAAAAAAAIAAAACAAAAAAAAAAAoAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAOogAAAAAAAAAAAoAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACgAAAAAAAAAAAAAIgAAAAgAAKAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAOioAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACgAACCAAAAAAAoAAAAAAAKoAAAAAAAIAAIAAAAAAAAAAAAAAAAAAAAADaoAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACgAAAACAAoAAAAoAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAADSoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACgAAAAKAAAAICggAKCAAAoAAAAAAAAAAAAAAAAAAAAAAAAAgAAqoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAACiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKCAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAKAAAAAAAAAAAAIAAAAAAAAAAAgAKCAAAAAAAAoAAAAAIACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgKCAAAoAIAACgAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggKAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAoAAAAAAAIAAAAAoAAAAAAAAAIAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAoAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAICgAgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAACAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAACAoAAIACgAAgKAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAoAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACggAAAKCAAoICgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAACAAAAoIAAAAAAAAAAAAAAKAAAAAAAAAoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACggAAAAAAKCAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAgAKAACAAAAAAAAAAAACgAAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAIAAAAAAAAAAAAgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAACgigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAACAoIACgAAAAAAAAAAgAAAAACAAAAAAAAAAAAAACggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACggAKAAAAAAgAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICggAAAAAACAAAAACgAAAAgAAAAAAAAAKCAAoIAAAAACggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICggAACAAAAAAAACggAAAKACAoAIAAAAAAAAACgAgKACAAoICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoIgAAAAAAAAAAAAAAAAoIACggAKCAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAICgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAgAAAAAAAAAAAAAAAAAKCAAoIACggAAAAAAAKAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAoAAAAICggAAAAAAAKCAoAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAIACggAKCAAAAAAoICgAAAAAgKACAAAAAAAAIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAgCAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACACAoAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAICggKCAoAAAAAAAAAAAAAAAACAACAoAAIACggAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAICgAAAAAAAAAAAAAAAIAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAACAoAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAgKAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAICgAAIAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAgAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAIAIACgAAAAAAAAAAAgAAAAAAAAKCAAoIACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAgAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAIAAAAACgAAAAAAAAAAgAAAAAKAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAIAACgAAAAAAAAAAAgAAAKAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAICgAAAAAAAAAAAgKCAAoAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACggAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAMgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADIAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAyAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAMgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKDIAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAyAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAADIAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAKAAAAAAAAgAAAAKAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAADIAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAKAAAAAAgAAAAAAAAAAAAAKAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAADIAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAKAAAAAAgAAAoAAAAAAAAAIAAAAAAAAoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAMgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAACgAAAAIAAAKAAAAAAAAAAAAAAAAAACAAAAAAKAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADIAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAIAAAAAAAAAACgAAAAAAAAAAAAAoAAAACAAAACgAAACgAgAAAAAAAAAAAAAAACAAAKAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAADIAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAgAAAAoAAAoAAAICggAKCAAAAAAAAAAAAIAAAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAMgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAACAAAACgACgAAAAAAAAgKCAqgCIAAAAAAAACAAAAKAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKADIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAgAAAAoAoAAAAAAAAACgAACAoAIgAAAAAAAIAAAoAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAIAAAAqgAAAAAAAAAAoAAgKAACAIAAAAAAAACAAKAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAIAAAoACgAAAAAAAAAoAAAAAAAAgACAAAAAAgAACgAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAACAAAAKAAAoAAAAAAAAKAAAAAAAAAAAIgAAAAIAAAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAgAACgAAAKAAAAAAACgAAAAAAAAAAACIAAAACAAAKAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAIAAAoAACgAAAAAAAoAAAAAAAAAAAAIIAAAAAAgACgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAACAAAKAAAoAAAAAKAAAAAAAAAAAAAAIgAAAAAAIAAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAgAACgAKAAAAACgAAAAAAAAAAAAAAgAgAAAAACAKAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAIAAoACgAAAAoAAAAAAAAAAAAAAAAAIIAAAAAgACgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAACAAKAAoAAAKAAAAAAAAAAAAAAAAAAACCAAAAAIoAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAgACgKAAAACgAAAAAAAAAAAAAAAAAAACIAAAACAKAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAIAoACgAAAoAAAAAAAAAAAAAAAAAAAAAgCAAAAgCgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoACAKAAoAAAAKAAAAAAAAAAAAAAAAAAAAAIAgAAAIAoAAAAgAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAD//2Q==", skyBoxFront: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAGQABAQEBAQEAAAAAAAAAAAAAAAECBAUD/8QAFhABAQEAAAAAAAAAAAAAAAAAABEB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8Aw2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAKAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAoCAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAKAKAAAAAAAAoAAAAAAAAAAKAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAACgAAAAADhaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAFAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAVAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAAFAFAAAAAAAAUAAAAAAAAAAAFAAAAAAQAAUAAAAAAAAAAAAAAAAAAABQAAAAAABwtMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAIAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAACgAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAKAgAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAACgCgAAAAAAAKAAAAAAAAAACgAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAoAAAgAAOJpkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAUAAAABQAAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAABQEAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAUAAUAAAAAABQAAAAAAAAAAUAAAAAAABAUEAFUAEAAAAEAAAAAABQAAFAEAAAAABxNMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAIAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAACggKAAAAoAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAAAoACAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAKAKAAAAAAAAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAOJpkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAABAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAUAAAABQAAAAAAAAAAAAAAUAAAAAAAAFAAAAAAAABQAAAEAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAUAAAAABQAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHE0yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAgAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAKAAAoAAAAAAAAAAAAAAAKAAAAAAACgAAAAAAAAAoAAACAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAKAAAAAAoAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADiaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFAAUAAAAAAAAAAAAAAFAAAAAAABQAAAAAAAAAAUAAAABAAAABQAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAFAAAAAUAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxNMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAACgKAAAAAAAAAAAAAACgAAAAAAoAAAAAAAAAAAKAAAAAgAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAACggKoAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADiaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABRQAAAAAAAAAAAAAAFAAAAAABQAAAAAAAAAAUAAAAAABAAAAABQAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAFUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxNMgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAooICgAAAAAAAAAAAKAAAAAACgAAAAAAAAAAAoAAAAAAAACAoIAKAAAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAKAKAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOJpkAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAABAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAFAAAAAAAAAAAAUAAAAAAFAAAAAAAAAABQAAAAAAAAAAAAAEFAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAFAFAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHE0yAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgACggKAAAAAAAAAAoAAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAoCAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAKKAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOJpkAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAFAAAAAAAAAUAAAAAAAAFAAAAAAAAAABQAAAAAAAAAAAAAAUBAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAFAFAAAAAAAAABFAAAAAFAABAAUAAAAAAAAAAAAAAAAAAAABxNMgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAoAAAAAAACgAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAACgIAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAoAoAAAAAAAAIAAAAAAAoAAAAAAAAoAAAAAAAAAAAAAAAADiaZAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAABQAAAAAAFAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAAAAFAQAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAABRQAAAAAAAAQAAAAAAAAAABQAAABQAAAAAAAAAAAAAAAAAHE0yAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAACgAAAAAAKAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAAAAAAKAgAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAACigAAAAAAgAAAAAAAAAAAAACgAAAAAAAAAACgAAgAAKACArjaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAABAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAFAAAAAAAUAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAUBAAAAAAAAAAAABQAAAAAAAAAAAUAAAAAAAAAAFAFAAABAAAAAAAAAAAAAAAAAFAAAAAAAAAAFABAAAAAAUEcbSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAACgAAAAAKAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAKAgAAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAONpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAABQAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAFAQAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHG0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAIAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAoAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAACgIAAAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAADjaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAEAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAUAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAABQAEAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFABxtIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAKAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAoAAACAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAEAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAUAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAEAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAIAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAoAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAIAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAQAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAABQQFAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAABAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAACAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAKAAAoAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAACAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAUBQAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAEAAAAAAAAAFAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAoCgAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAIAAAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAQAAAAAAUAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAcjSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAooAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAgAAAAAAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAA5GkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAUEAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAFAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAEAAAAAFAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAIAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKKCAoAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAgAAAAAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAA5GkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQABQAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAABAAABQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAByNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAACAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgACgAAAAgKACAoAAAACgAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAAoAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAA5GkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAABAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAABQQAAAAAAAFBAUABQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAQAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAcjSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAgAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAoACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAgAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAA5GkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAABQAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAABAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAByNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAACAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAACgAKAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAACACgAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAADkaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAFAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAAAAEFAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAKoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAIKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAVQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABQAEAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAcjSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKKAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAIAAAAAAAAACggAKCAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAUAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAVQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAEAAAAAAAABQAQFABAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAACgAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgKAAAAACgAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAooAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAgAAAAAAAAKAAAAACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAFAABQAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAUAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAQAAAAAAAFAAAAABAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAHI0gAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAACACgAAKAAIoAKAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACigAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAACAAAAAoIAACgAAAAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAADlaQAAAAABAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAQAUBEAAAFAUAUFEAUAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFFAAAAAAAAAAABFFAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAFAABAUEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAcrSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAIAAIACACogAAgAAKACgKKCiAKAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgCgAAAAAAAAAgKAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAIACggAAAAKAACAoIAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAA5WkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAEQAAAQAEFQBBAAAQAFABQUBRQUQBQAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAQFABAAUAEBQQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAABytIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoACACAAAAgIAKiCAAgAAAAAKCgoCiiKACgAAoAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAooAAAAAAAAAAAAIooAICgAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAICggKCAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAOVpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAQAAQAAAEBBUAQQEABAEAAFAUUFBQVQEUAFAABQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFUQFAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAEBQQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABytIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCAAAACAAAAgAIKgCCAgIAgAAAAoCigoKCqAKIAoAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKKAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAA5WkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABAABAAAAAAAQAEFRBAQAEAQQAAAFBVFABQUFUAUFEAAUAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAABVAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABytIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACCAAAAAAAAgAICCiCAgAICIAAAAKACqKCgAoKAooKIAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAACqAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADlaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAEABQQQAAAAAEAABABUQQAEBAEEAAAAABQAVRQUAFBQVQEUFAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAVQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcrSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgAAgAAAIAAACAAgqIAICAAiAACAAoAAKCgKKCgAoKooKIAoAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAACqAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADlaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAEBQQAQAAEABAAAQUBEAEBAARABAAABQRQAUAFAUUFBQUFUUQBQAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHK0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAIAAAAIACAAgAIKAiACAAgAIgAgAAoAAACiAKACgAqigoKooKIAoAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAooAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAgKACAoIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAA5WkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAUEAEABAAQEFEEABAAQEAQAQAAUAAAABQBAFABQFFBQaBVARQAAAUAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAQFBAUEAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcrSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAIACAgqIIACAAgCCAAACgAAAAAAKAIAoAKCqKCgqigogAAAACgAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACigAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACAoICggAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADlaQAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQQAQAEABARFQEBAQABBAAABQAAAAAAAFAAEAUAFBVFBQVRRFAAAABQAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQBQAAAAAAAQFBAAUBQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAABytIAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAgAICIrIAICAIIAAAAKgKAAAAAAACgACAKCgqigoKooAigAAAoAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAoAAAAAAAIACgiigAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAICggAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAADlaQAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQQAAQAEABARFZBAQAEQAAAQUABQAAAAAAAAUAARQUBRoFBQFFEUAAAFAAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAFAAAAAABAAUBQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAQAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABytIAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAgAIDKKgICAIIAACACgAKAAAAAAAACgACKACqKCgoKooAigAoAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAoICgAAAgAKAAoAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAIAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAA5VQUAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAQEBBUQQEBAEEAABBQAFAAAAAAAAAABQBAFBQVRQUFUUARQAUAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAUEABQQAAFAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAEAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAciooACgACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIACAAgIioCAgICIAAAAAAoAAAAAAAAAAAIoAKCgKKDQKAooigAoAAAAAAAKAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAoAICggKCAoCgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAgAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAADkVAFAAUAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUEAAEABAQEFRBAQEAQQAAAAAUAAAAAAAAAAAEAUAFABVFBQUFUURQAUAAAAAAAAFAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAUEABQAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAHGqKACgAKAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAACAAACAgAICIqAgICIAIAAAAAAAKAAAAAAAAACAKAACgoKooKCgKKIoAAAAAAAKAACgAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAKCAoACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAADjVAFABQAFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAQEABkVEEBAQBBAAAAAAAABQAAAAAAAAAQABQAUAFUUFBQUBRRAAAAAAFAABQAUAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAABVAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAHGqAKACgAAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKACAAAAAAACAAgIKzqCAgIAggAAAAAAAAAoICggKAAACAAAAKACgAqigoKACqAFAAAABQBFBQAUAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAABQFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAHEoogCgoAAKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAICAgqaggMgAiCAAAAAAAAAAAAAAAAAAAAAAAoAKACqKCgAtAoFAAABQFFBRFABQAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAFUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAcSigCKACgAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAoAAAAIAACAAgM6ipoICAgCACAAAAAAAAAAAAAAAAAAAAAAoAKACqAKBQUAAAAFBQVRRAFBQAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAcQCiiKACgAoCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAoACggAAAAAAgAAICAgqaggICAgCAAAAAAAACAAAAAAAAAAAAAAAoAAKACqAAKAACgoAKo0IAoKAACgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAoIooAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAOEFBVARQUAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABAAUEAAAAAAAAAAEAABAQEFRBAQEABAAEBQAQAAAAQAAAAAAAAAAAAAAFAABQAAVQBQAUFBVGhFABQAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABRQAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAcIAKCqKIAoAKAAAoAAICgAAAAAAAAAAAAAAAAAAAAAAACgAAAAAIAAAAAAAAAAAAAAAIACAAgIKiCAgIAAAAAAACIAAAIAAAAAAAAAAAAAAACgAAoAKoAoKCg0ooigAoAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAooAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAACAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAOAFABQVRRAFABQAAAAAAAFAAAAAAAFQAAAAAAAFAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAQAEBBUQQEAABAAAAAARAAAABAAAAAAAAAAAAAAAUAAFABVFBQUGlFBRAFAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAFAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAB56CqKACgqiiAKACgAAAAAAAKCAoqAAAAAAAAAAoAAAICgAAAAAAAgAAAAAAAAAAAAAAAAAAAgAIACAgqIIACAAAAgAAAIgAAAAAgAAAAAAAAAAAAAKACgAqigoKCg0oCKCgAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgACgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAA89ABVAFBQVQEUAFAABQAAAAAAAUAAAAAAAAAAAAAAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAQAEABAQUBEEABAAAAQAAEQAAAAQAAAAAAAAAAAAAFABQAVRQUFBQVRRFBQAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQBQAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAecgAoCigoAKCqKIAAoAAAKAAAAAAAAAAAAACgAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAACAAAgIAKgIgAgIAACAAAiAAAACAAAAAAAAAAAAAAoAKACqKCgoKCqKIoAKAACgAAAAAAAAAAoAAAAAAAAAAAAAAAAKAKAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAADzUFABQFFABaC0AFUBFAAABQAUAAAAAAAAAAAAAAAAFAAAAAUEAAAAAAAAAAAAAAAAAAAAAAAAAAEABAAQEFRABAQAAEABEAAAEAAAAAAAAAAAAAABQAUFAUUFBQUFUUARQUAAFAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAUAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAHmooIAoAKAooALQWgUAFAUBFABQAAAUAAAAAAAAAAAAAAFAAAAUEAAAAAAAAAAAAAAAAAAAAAAAAAAEABAAQEFRBAAQAEABEAAAEAAAAAAAAAAAAABQAUAFBVAFBQUFAUURQAUAAFAAAAAAABQAAAAAAAAAAAAAAAAUAAAUAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAHmooAAIAoAKAooFBaABQWgAoCiiAAAKAAAAAAAAAACgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACAgIKAiCAgAIACIAAIAAAAAAAAAAAAACgAAoKAooKACgoKAooAigAoAAKAAAAAACgAAAAAAAAAAAAAAAoAAAoAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAPMRQAFAAAEUAFAAUUAAFABQAWgUCqFEKBQKBQAWgAAAoAAKAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAgqIICAAgAIgAgAAAAAAAAAAAAAKAACgAqigAoKACgAqgCgogCgAAoAAAAAKAAAAAAAAAAAAAAACgAACgAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAIAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAA8xFAAAAAUAARQAAUAAFUAWgUCgtAoFAoFAoFAoFAoLQFRQAUAFAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEABAQVEEABAQEAQQAAAAAAAAAAAAAFAABQAUBRQAUFABQAUBRQBFBQAAUAAAAFAAAAAAAAAAAAAAABQAAABQAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAEAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeYigAAAAAAKAIAoAAAKAAooFAoFAoFAoFBaBQKBQWgAoCooAKCgAAoAAAAAAAKAAAAAAAAAAAAAACAAAAAAAgAIACAgqIIACAgIAggAAAAAAAAAAKAAAAACgAqgCgAoKACgAoCigCKCgAoAAAAKAAAAAAAAAAAAAAACgAAACgAAAAAAAAAKAAAAAAAAAAAACgAIAAAAAAAAAAAACgAAAAAAAAgAKCAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPMRQAAAAAAAFAAAEUAAAAFAAAAAAUEABRQAAUFABQVUAUFABQAAAAUAAAAAAAAAAAAAAAEAAAAAAABAAQAEBABUQQAEBAQBBAAAAAAAUAAAAAAAFAAAABVFABQUAFABQFFBRAFABQAAAUAAAAAAAAAAAAAAAFAAAAAFAAAAAAAAAUAAAAAAAAAAAFAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5iKAAAAAAAAAoAAAgACgAAAAAAAAAAAoAAKoAoKCgCKooKACgAAAoAAAAAAAAAAIAAAAAAAAACAAAgAAIACCiCAgAICAiCAAAAAAAoAAAAAAAKAAAAACqAKCgoAKCgKKCiAKACgAAAoAAAAAAAAAAAAAAKAAAAAAAKAAAAAAAAoAAAAAAAAAAKAgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzEUAAAAAAAAABQAABAAAAAAAAAAAFAAABQAUBRQUFABVRQUAFAABQAAAAAAAAQAAAAAAAAAEAABAAQAAAEAFEEABAQEBEEAAAAAABQAAAAAAUAAAAAAFAUUFBQUFAUUFAEUAFAAABQAAAAAAAAAAAAAAUAAAAAAAAUAAAAAABQAAAAAAAAAAUBAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmIoAAAAAAAAAACgAACAAAAAAAAAAAAKAACgAoCigoKACqigoAKAACgAAAAAAgAAAAAIAAAACAAgAAIAKAAAAIIACAgICIIAAAAAACgAAAAAAAoAAAAAKoAoKCgoKCqKIAoAKAAACgAAAAAAAAAAAAAoAAAAAAAAAoAAAAACgAAAAAAAAAAAoCAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPMRQAAAAAAAAAAAFAAEAAAAAAAAAAAAUAAAFABQUBRQUFAEVRQAUAFAAAAABAAAAQAAAEAAABAAQAERQAAFAUAAEEBAQEBEEAAAAAAABQAAAAAAUAAAAFUAUFBQUFBVFEUAFAAABQAAAAAAAAAAAAAUAAAAAAAUEBQAAAAAAFAAAAAAAAAAAABQEAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeYigAAAAAAAAAAAAKAIAAAAAAAAAAAoAAAKAACgAoKoAoKIqigAoAKAAAAACAAgAAIAACAAAAgCCCgIAACgAoCgAAggJoIDICCAAAAAAAAAAoAAAAKAACqAKCgoKCgqigogCgAAAoAAAAAAAAAAAAAKAAAAAAAKAAAAAAAAoAAAAAAAAAAAAAKAgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg8tFAAAAAAAAAAAAUQAAAAAAAAAABQAAAAUAAFAABQFFBQUFEFFBQAUAAAAAEABAAQAEAABAEAEFAQAAAAAFBQFFEBUQQE0E0EBEEAAAAAAAAAAABQAAUAFUAUFBQUFBVFBRAFAAABQAAAAAAAAAAAAUAAAAAAUAAAAAAAABQAAAAAAAAAAAAAAUBAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAB5aKAAAAAAAAAAogAAAAAAAAACgAAAAAoAAAKAACgAqgCgoigqgCgAoAAAAAIACAAgIAACIAAIKAgAAIACgAoKAoogCCiCaDOggIggAAAAAAAAAAAKACgAoCigoKCgoKooKIAoAAKAAAAAAAAAAAAACgAAACggKAAAAAAAAAoAAAAAAAAAAAAAAAKAAgAAAAAAAoAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAADy0UAAAAAAAAEUAAAAAAFAAAAAAAAABQAAUAAFABVAFABQUQBVFABQAAAAAAQAEABAAQABBAABUABAAAAAUAFBVAQAFRBAZ0EBEAEAAAAAAAAAABQAUFAUUFBQUFBVFBRAFAABQAAAAAAAAAAAAAUAAAAAAUAAAAAAABQAAAAAAAAAAAAAAAAUABAUEAAAAAAFAAAAABQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAeWigAAAAAAgCgAAAAAoAAAAAAAAAKAAACgAoAKoAoAKACiAKooAKAAAAAAAACAAgAIACAAAIIAKgAAIACgAoKoACAqIAMggIAggAAAAAAAIACgAAoAKCqKCgoKCqKIoAKAACgAAAAAAAAAAAAAoAAAAAAAAoAAAAACgAAAAAAAAAAAAAAAAoACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAADy0UAAAAAAEUAAAAAFAAAAAAAAABQAAUAAFABVFABQAUQBQFFABQAAAUAAAEAAABAAQAEAAABAEEAFAQFAABVAAQAFRBAQEBAARAAAAAAAAAAAABQUFUUFBQUFUURQAUAAFAAAAAAAAAAAAABQAAAAAAAAABQAAAAFAAAAAAAAAAAAAAABQAEAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAHlooAAAAAIoAAAAAKAAAAAAAACgAAAAoAKCqAKCgAogCgKKACgAAAoAAAAAAAIAACAAAgAAAIACAAIEFAFAFEAAQUQQEBAQEABEAAAFABAAAAAAUFBVFwFwFBQVRRFABQAUAAAAAAAAAAAAAAFAAAAAAAAAAAAFAAAUAAAAAAAAAAAAAAAFAAAQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAeWigAAAAKIAAAAAoAAAAAKAAAAAAACgAoKAooKAIoKAooAKAAACgAAAAAAAAAAAgAAIAACAAAAgAAEAgAKACAAgqIICAgIAAggKAAAAAAAAAAACguKNYC4C4CqKIoKAACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAoACgAAAAAAAAAAAAAAoACAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAADzEUABAAUQAAAABQAAAAAUAAAAAAFAABQAVRQUAFEUFUAUAAAFAAAAAAAAAAAAAABAAAQAAEAAAAAAAABQQAEBEVNBNBAQEABEAFAAAAAAAAAABQFGsBcBrAXAVUUFAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAUBQAAAAAAAAAAAAAVAUEAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmIoAAAIAAAAAoAAAAAKAAAAAACgAAoAKooAKCiKACqKAACgAAAAAAAAAAAAAAAAAgAIAACAAoAAAAAAAAIADOoqaCaDIIACIAAKAAACgAAAAgKACqLgNYC4DWKKIoAKAAAAAAAAAAAACgAAAAAAAAAAAAAAAACqAAAAAAAAAAAAAgoAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPMRQAQAAAABQAAEAAAFUAAAAAUAAFABQAVQBQUFEAVQBQAUAAAAAAAAAAAAAAAAAAEABAAQAFAABQAAAAAAQE0GdRU0GdBAQBBAAAAUAAFAAAAAAAUUFwGsBrAXFFEUFAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUUAAAAAAAAAAQAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmoAIAAAACgAIAAAAKAAoAAAAoAKACgAqgCgoAigoCigAoAAAAAAAAAAAAAAAAAAAIACAAgKAACgAoAAAAICAmgmorOgmgyCAIIAAACgAoAAAAAAACig1gLgNYCqKIoKAAAAAAACgAAAAAAAAAAAAAAAAAAoAoAAAAAAAAAAgAoAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPNQAAAAAAEAAAAAFAAUAAAUAAFABQAVRQAUARQUAFUAAUAAAAAFAAABAAAUAEAAAABAAQAAAAFABQAAAAAQEBNBNRWdBNBkAEQQAAAFABQAAAAAAAUFUXAXAawFwFVFABQAAAAUAAAAAAAAAAAAAAAAAAFFAAAAAAAAAAAEAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5qAAAAAAAgAAAAAqgAAACgAAoAKACqAKCgogCgAqgACgAAAAoAAAAAAAAAAAAIAACAAAgAKAACgAAoAIAACAzoJqKmgzoICAiAAAAAACgAAAAAAAoKouAuAuA0CqAKIAoAAAKAAAAAAAAAAAAAAKAAoAAAAAAAAAACAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAADzkAEAAAAAAAAAABQAAUAAFAABQAVQBQUAFEUFAUAUAAAAAFAAAAAAAAAAAAAABAAAQAAAAFAABQAAAAQAEBNBNQZ0VNBAQEBEAAAAFAABQAAQAAFAUUGsBQUFBQFFABRAAFAAAAAAAFAAAAAAAUAAAAAAAAAABAAABQAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFBAAAAAAUAeegAAAgAAAAAAAKAACgAoAKAACgAKKACgoKIAoKoAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAgAICAiCaKgICAgIgAgAKACgAAAAgAAKACqKCgoKCgAoKooAigAAAACgAAAAAAKAAAAAAAAAAAgAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAACAAAAAAAAAAABQKBQAAAAAAAAAcIAAIACAAAAAAoAAKACgoKBAICxQAAABQAUFEUBRQAAUAAAAAAAAAAAAAAAAAAAAAAEAAAABQAAAAAAAAQAEBEEFQEBAQEBEAAAFAAAAABAAAAUAFUUFBQUFBQUBRQUAAAAAAAAAFAAAAAAAAAAAAQAAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACggFQKBQKBQKBQKBQKBQKCUCgUCgUCgUCilBaBQKBQKBQKDjEAQAEABAAAAUAAFBQAUFBYoQFgAAAAAAAKCgogCqAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAgIggqAgICAiCAAoAAAAAAIAAACgAoCigoKCgoKCgqigAAAAAAoAAAAAAAAAACAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgFAoJQKBUCgUCgUEoFAoFAoFAoFAoFAoFFSgUCgUCgUCgtAoFAoFAoFBzCAIACAgAAAAAKACgAoKooKCgAQAAAEABQAUFAEVRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEQQVATQZBAQBAAAAAAAABAAAAAUAFBVFBQUFwFBQUFUAAAAUAAAAABAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAASgUCgUCgUCgUEoFQKCUCgUEoFAoFAopQSgUCgUCgUCgUCgUCgUEoFAoFAoFBaBQKBQKBQKBQfEQBAAQEABAAUAFABQAUFUUFBQAAAAAQAAAFBQBFBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABAAAAAQBBBU0GdBNBAQEQAAAAAAAAQAAAAFABQVQBQawFwFBQUAFAUAUAABAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFABAAAAAAAAAAAAAAAAAAAAAAAAAQACgAUCglAoJQKBQKBQKBUCglAoJQKBQSilAoFAoFAoJQKBQKBQKBQKBQKBQKBQSgUCgtAoFAoFAoFAoFBhUARABAQEAABQAUAFABVFBQUFAAAAABAAAAAUAFEUBQAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAQAAAAEQQE0VNBNBnQQBBAAAAAAAAQAAAAFABQAVRQUFBQaABQUAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAoFAoFAoJQKBQKBQKBQSgVAoJQKBQSgUCgUCgUEoFAoJRSgUEoFAoFAoFAoFAoFAoFAoFAoJQKBQKBQKBQKBQKBQKBQWgUCglAVAEBEEABAAAAUFABQFFBQUFABQAAAQAAEABQAUAFEAFAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAARAFZ0E0E0GdBAEEAAABQQAAEAAAABQAAUFUUFBQUFBQUAFAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAQCgUCgUCglAoFAoFAoFBKBQKBQKBUEoFBKBQKCUCgUUoFAoJQKBQKCUCgUCglAoFAoFAAAAAAAAAAAAAAAAAAAAAAAAABpUQAEBEEABAUAFBQFFABQUAFBQAAAAAAQAAAAFABQBAAAAAFAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAQEFQE0E0GdBEAEAFAUQABAAAQAAAUEUAFABVFBQUFBQUAFBQAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAACggFAoFAoJQKBQKBQKCUCgUEoFAoFAoFAoJQKBUCgUCglAoJQKKUEoFAoFAoFAoJQKBQKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAANKgACAiCAgAAKCgKKCgAoAKACgAAAoIAAACAAAoAAKAAAAAAAAIAAAAACggKCAAAoIACgAAAAAAAAAAAAAIAAAACAgJoJoM6CIAIAKoAgACAAAgAAoAACiAAKCgqigoKCgoAKACgAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAIABQKBQKBQKBQSgUCgUCglAoFAoJQKBQKBQSgUCglAoFAoFBKBUCgUCilAoFBKBQKCUCgUCglAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAoNqiAAgIggIACgAoKooAKAACgAAoAAAAAAAAICgAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAAAAAUCgUAAAAEBAQE0EQQEAAFUAQABAAQAAVAAAUAARQAUFABpRQUAFBQAUAFAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAEAAAAoFAoFBKBQKBQKBQSgVAoFAqhQKCUCgUCglAoFAoJQKBQKglAoFBKKUCglAoFAoFAoFAoFAoFABAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQAbVAEBEEBAAQFBQAVRQAUAAAFAABQAAAAAAQAAAAFAAAAAAAAAAAAAAAAAAAAAAAABAAAKBQSgUCgUCgUCgUCgUCgUCgUEBAQEQQAEAAFUAAQBAAQAVAAAAAUAAFEAUFBQFFBaC0CgtAoLQKCgAAoAAAAAAAAAAKAAAAAACAAAoAAAAAAAAAAFAAAoFBKBQKBQKBQSoFAoFAoJQKKUCgUCglAoFAoFAoJQKBQKCUCgUCgUEoFAoJQKBQSgUCgUCgUCgAAUAAAAEAAAAABAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAABQAAbVAEQQEBAAQFBQUAFUUAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAQAAAAAAAAAEAoFAoJQKBQKBQKBQKBQSgUCgUCgUCgUEBEAEBAABQAFABBAEAFQAAAAAAFAABQBFBQUBRQKC0CgtAoLQKC0CgUCgtAoFAoFAoFAoFAoLQAAAQCgUCgUCgUCgUCgUCgUCgUCgUCgUCoFAopQSgUCgUCglAoFAoJQKBQKBQKBQSgUCgUCgUCglAoFAoAIAAACAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAKAgAA2qAICAgIACAoKACgoAKAAAoAAAAAAAAAAAAAAAAAAUAAAAAAFABAAAAUAAEAAABAAKBQSgUCglAAAoFAoFQKoUCgVAqhQEAEBAAQAEFAUAAAAAEBAAAQAFAABQAAUAFEAUABRaBQKC0CgtBaBQKC0CgUCgUCgUCgUCgtAoFAoFAoFAoFAoFAoFAoFQKKUEoFAoLQKBQSgUCgUCgUEoFAoFAoJQKBQKCUCgUCgUCgUCgUCgUEAAAAAAAABAAAAAQAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAFAQAAAAbVAEBAQEBAAUAFBQUAAAAAAAAAAABQAAQAASgUCgAAAoAAAAAAAAAAAKAAAACAAAgCgCIAAIAAAAAAAAAAAAAACAAAgAIAKAAoAAAIACAAgAAKAACgAAoAAKAIAAAUFoFBaBVFoFAoLQKBUCgUCgUCgUCgtAoFBaKUEoFAoFAoFAoFAoFAoFAoFAoFAoFBKBQKBQKBQSgUCgUCglAoFAoFBKBQKBQKBQAAAAAAAAAAAAAAAAAAQAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAUAAAAAFAAAAAAAAAAAAAAABQAAEFAAAAABpUAQEBBQEABQAURQAUAAAAAAAAAEAAABAAAAAAAAABVAAAAAAABQAAAAABAAAEBAAAQAAAEAAAAAAAAAAAAAABAAAQAUAAABQAQAAEABAAAUAFAABQAAAAAAAAAAUQBaBQKKtAoFAoFAoFAoFBaBQKBQWgUCgUCglAoFAoFAoFAoAAAAFAAoFAoFBKBQKBQKBQSgUCgUCgAgAAAAAAAAAKAAAAAAAAAACgAAgAAAIAACAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAACgAAAoAAAAAAIAAACgAAAqAAAAAAADSiAAgIAggAKoAoAKAIAAAAAAAAAgAAAIAAAAAAKAAoAAAAAAKAAAAACgAAAAgAiAgAAIAAAAAACAAAAAAAAAAAAAgAoAAAAAAAAACAAAAAAAoAAKAAAAAAAAAAAAACgAAAoAAAAAAAKAACgAAAAgAAAAAAAAAAAAAAAIAAAAACAAIACgAACAAAAAAAIKAAAAACgAAAAoAAAAAAACiAAAgAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAIKAAACgAAgAAAAAAAAKAAAAAAACgKIAggAAIACgAqgAAAAAAAAAAAACCAAIAAAAKAoAACAAAACgAAAAAoAAKoAAAgIACACIAAAAACAAAAAAAAAAAACgAIAAAAgAqgACAAAAgAAAKAAACgAAAAAAAgAAAKAAAACgAAAAAoAAAAAKAAAAAAAAAgAAAKCAAAACAAAAAgAAAAAIAAAAAAAAAAAAAACgAAAAoAAAKAACgAAoIAAACAQCKIAACAAAAAAAAAAAAAAAAAAAAgAAAKAACoAAAKAAAAAAAAAAAAAAAAAAAACgAAgAIAAAAAAAACgAKAAAACAoAgAAAIAIAACgAAACAAACgAAAAAAoAAAKACgAigCAgAIAAAIAAgAAAAAIACgACqAgAgAAAAAAAAACgACAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAgoAAAAAKAAAAAAAAAAAAAAAAAAACAAAAgAAAIAAAAAAAAAAAAAAAACgAAoAAAKAACgAoAAKCAAAAQEAgEBIBAICAAKAAAAAAAACAAAAAAACAAAAoAAAKAACgAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAACAAKIAAAAACoAAAAAAAAAKAAAACgAoAAAIoAgAIAAAAAggAAACgCCAKKIAKAAAAACAAAAoAAAAAIAAoIAAAAKAAAAAAAAACAKCCgAAAAAAAoAAAAAKAAAACgAAAAAAAAAAgAAAAAAAAAIAAACAAAAgAAAAAAAAAAAAAKAACgAAoAAKAACgAoAAAAAAAAIBAICQCAQEgEAgEAAgEAAAAAAAAAgEAgEAgEAgAEAgKAACgAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAACAAAAgAAAACggAAAoAAAAAAAAAAKAACgAAAAgAIAAAAAACAAAAAAAAAAoAKAAACAAAAAAoAAAAIAABAAAAAUAAAAAAAAAAAACAAAAAAQFAAAAABQAAABQFAAAAAAAAEAQAAAAAAAAAAEAABAAAAQAAAAAAAEAABQAAAAUAFAABQAAAUAAFABQAAAAAAAAQAAEgAEAgJAIBAIBAAAAIBAWAQCAQEgEAgEAgEAgEBYBAAAUAAAAAAAAAAAAAAAAAAEAABQAAfMAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAUAAAAAFAAAAAAAABAAAAAAAAAAQAAAAFAABQAAUEAAAAABQAAAAAIBASAQCAsAgAEAgAAAAAAEAgEAgEAgAEBQIBAIBAIBAABVAAAAAAABQAAAAAAAQAAAQAFBAAAAAAEAABAIBAQCAQAAACAAAgLAAAAAAUAFAABQAAAAAUAFAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAKAD5AAAAAAAAAAAAAAAAAAAAgAAAAAIAAAAAAAAAAAAAAACgAAAAAAoAAAAAAAAAIAAAAAAAAAAAAACgAoAAAAAAAEBQAAAAAAAAAIBAABQAAAAAAAACCEAgAAAqgAAAAAAAAAoAAAAAAAAAAKAAAACAAAAAAAAAAAAAAgAgBASAQCAQEgEAgEAgEAgEAgAEAgAKAACgAoAAAAAAAKAAACgAAAAAACgIAAIAAAAAAAAAAACggKAAACAAoIAAAAACgKAAIAAAAAAAgAAAAAAAAAAAAAKK+QgAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAoAAAKACAoAAAAAAAAAAAAoAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIgAAAAEAgJAIABAIAACgQAAAFAABQAAAAAAAAUAAAUAAAAAAAAAAABAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAFAAfIQAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAACAQCAQCAQCAoAAAKAAAAACgAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAACAAAAAAAAAAAKAAAAAAAAAACgACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAIgAAAAAAAAAAAAoAAAAD5iAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAABAAAIBAIBAIABAAAAUAAAAAAAAAAAFAgEAgAAAAAEAgEAgAAKAAAAAAAAKoAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAIACgAAAAAAKAAAAAAAAAICggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAgCACggAKAAACAoAAAAADAgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAICgiCgAAAAAAAAAAAAAMiAAAIAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAACgAKCAoAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAICggCCggAAKAAAAAAAAAAggACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAAAAAAoAAAAAoICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAIgAoICgAAAAAAAAAAAIIAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAoAAAAKAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACCAAAoICgAAAAAAAAAAgACAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAoAAKKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAICgAAgCAACggKCAoAAAAAAAAgCAAIoAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAKAAAAACgAooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAIAAAAgAAAoAAAAAAAAAAgACAIAoAAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAACAAAAAoAAAAAAAAKAAAACgCgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAIAAgAAAoAAAAAAACgiAAAAIgCgAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAACgCgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAoAAAAAAAAAgKAAACAAAIAKAAAAAAoAAAIgAAAAggqiIKAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAKAAKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAICgAAgAAAAKAAAAAAAAAyAgAAAAKAAgAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAoCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAyAAgAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAoAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAACgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKCAoAAAAAADICAoAAIAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAIACgAgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAoAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAMgIgAKACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAgAAAAAAAAAAAAAKCAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAMogAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAICggAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAIAAKoAAAMogAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACAoAAIAAAAAAAAAAAAAAAAAgAKKAAAAAAAAAAAAAAAAAAAACAoIAAAAAAAgAAAAAAAAoiAAAAAAAIoAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAKAIAAgKACAoAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAIAAAAAAAAAAAAAAAAgAAAoIAoAoAAAAAAAAAAAAAAAICgAgAAAAACAAAAAAAAAAAIAAAAACggAKAAAAAAAAAAAAAAoIAAAACgAAAAIAAAAAAAgAAACAAoAAAAAoAAAAoAAAAAAAIAAAAAAACgAAAgAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAogAAAAAACAAAAAAAAAAAAAAAAAAACgAAAAAAAAKAAAAIAAAAAAAAgAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAACgAAAgAKAAAAAAAAAAgAAKAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAICggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAACAoAAAICggACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAoAAAAIAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAgKAAAAAAAACAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgKCAAAAAAKAACAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAKAAACAoAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKIAAACgAAAgKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAoAAAAIAAKAAACAAIAACgAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAACAAAAAAAAoAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAgACgAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAACgAAAIAAIAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAoAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAACgAAAAIAIAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAoAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAACAAAAoAAAAAAIAAACAAAAoAAAAAAAAgAAKCAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAACgAAAAAAAIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAKAAAAAIAAAAAAAACgACAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAgAAAAAKAAAAAAAAIAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAKAAAAACIAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAoAAAAIAAAACgAAIAAACoAgAAKAAKIAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAACAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAIAAAAAAACgAAAAAAACAAAAAAAAKAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAKAAACAoAAIAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAACgAAgAAAAACCgAAAAgAgoAAAIAoAAAAAACgAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAgAAAAAAAAAACgAAAAAAgAAAKACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAACAAACgAAAACIAAAoIAoAAAAAAAACgAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAACAAAAAAAAAAoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAoIAAAgAAAAoAAiACgAgAAKAAAAAAAAAAAAoAAACgAAAAAgAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAACAAAAAAAAAoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggACgAAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAgAAAAoiACqAAAIgoAAICgAAAAAAAAAAAAAKAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAIAAAAAAAAAAAACgAAAgAAAAAAAAAKAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAACAAAIAAooAIgAoAAAICgAAAAAAAAAAAAAAAAKACAAAAAAAAAAoAAAAAAAAAAAAACAAAoAAAIAAAAAACgAAAAAAAAAAAAAgAAAAAAAKAACAAAAAAAAAAAAAAoAAIAAAAAAAACgAAAAAAACAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAACgAAAgAAAKCAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAIIoAIAAAAoAoAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAACgAAgAAAAAAAAAAAAAKAACAAAAAAAAAoAAAAAAAAgAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAoAAAAAIAAAAAAAgKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAoAAAIAAAAACgAAAAgKAAACAAAAAAAAoAAAAAAAAAgCAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAoAAAAAAAAAoICgAAAAAAAgAACCgAgCgAAAAAAgAAAAAAAAAAAAAAAAAAAAAACAoIAAoIAAAAAAAKCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAKAACAAAAAAoAAAAAAAAAIAAAAAAAACgAAAAAAAACAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAACgAAAAgAAAAAAAAKAAAAAKCAAoAAAAICgAAgAAAKgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACggAAAAAAAAAoICgAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAoAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAKAAAAAAAAAIgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAKAAAAAACAoAAIACgAAIAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACggAAAKACAoAgAAAAAAAAAAAAAAAAAAAKgAKAoAAAAAAAACAAAAAAAAAAAAAAgAKAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAKAACAAAAAAAAAAAAoAAAAAAAAAIIAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAoAAAAAICgAAAAAAAAIAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACggAAAAAAAKIAAAAAAAAAAAAAAAAAAAAgKAqgAAAAAAAAgAAAIAAAAACgAAAgAAAAKAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAACAAAAAAAKAAAACAAAAAoAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAoAAAAICggKAAAAAAAAgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKCAAAAAAAAACKAAAAAAAAAAAAAAACAoIAAACqAAoAAAAIAAAACAAAAAAAoAAAIAAAAAAAACgAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAgAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgACgAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAAAAAAAAAAAIAAAAAACqAAAAAAAAAAAAgAAAAAAAAKAACAAAAAAAAAAAoAAAAAKAACAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAgAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAoAAAAAAAAAoACgAAAACAoICgAAIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoICgAgKACAoIAAAAAAACqAAAAAAAAAAAAgAAAAAAAAKAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAIAAAAAAAAAAAgAAAAAKACAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAACAAAAAoAAAAAAAAAAoAICggAACgAACoAAAAAIAAAAAAAAAAAAAAAAICgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAooAAAAAAAAAAAAgAAAAAAAKAAACAAAAAAAgKAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAIAAACggAAACAAAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAAAAAAACAAAAAAAoAAAAAAAAoICggAAAAAAAKAAAAAACAACAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACggAAAAAAAAAoAAAAAAoAAAAAAAAAgAAAAAAAKAAACAAAAAgAAAAAKAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAICggAACAAAgAAAAKAAAAAAAAACgAAAAAAoAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAgAKAAAAAAAAKAAAAACAACAAoAAAAAAAAAAAAAAAAAAAgACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAAAAAAoAAAAAAAAAgAAAAAAAKAACAAAAAAgAAAAAAAKAAAACgAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAgAAIAAAAAAACgAAAAAAAoAAAAAKAAAAAAAAAAAAACAAAAAAAAoAAAAAAIAAAAAAAACgAAACgAAAACIAAKAAAAAAAAAAAAAACAoAAAAgACAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAoAAAAAAAAAAoAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCAAAAgAAAAAAAKAAAAAAACgAAAAAoAAAAAAAAAAAAIAAAAAAAAACgAAAgAAAAAAAAAAAKAAAKAAAAAIgAAAAAAoAAAAAAAAAIAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAoAAAAAAAAgAAAAAAAAAAAAAAIAAAACAoAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAIAAACAAAAAAAoAAAAAAAAKAAAAAACgAAAAAAAgAAAAAAAAAAAAAAKCAAAAAAAAgAAAKAAKAoAAAAAACIAAAAAAAAKCAAoIAAAAAAAIAAAAAAAACgAAACgAAgAAAAAAAAAAAAAKCAAAAAIACgAAAgAoAAAAAAAACAAoAAAAAACgAAAACAAAAAAAAAAAAAAAgAAAAAIACgAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAIAAAAACgAAAoAAAIAACgAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAKCAoIgAAAAAqgAAAoAAAAACIAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAKCAAAoAIAAAAAAAAACgAAgAAACAAAAAACgAAAAAAAAAIAAAACgAAAAAAKAAAIAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAAAAAAAAAAAAKAAAAAACAAAAoAAAAAAAAAAAAAAIAAAAACgAAAAAAAAACgAAiAAAAACgKAAACgAAAAIgAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAoAAAICggAAAAAAAAAAKCAAAIAAAAAAAKAAAAAAAAAAgAAAAAAKAAAAAAAoAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIAAAAAAAAAAAoAAAAAAIAAAAACgAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAKACAIAAAAKAoAAAAKAAACIgAAAAAAAAAAACgAAAgAAAAoIAAAAAAoAAoAAAAAAAIAAAAAAAAAAAAAAgAAAAAAoAAAAAAAACAAAAAAAAAAAoAAAAIAoAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACAAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACAAAAAAAqgACAAAAAAAIAAAAAACgAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAKACIAAAAKAoAAAAAKCAAIgAAAAAAAAAAAAAAAAAAAKAACAAAAAKAKAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAKAAAgAAAAAAAAAAAAAAAAAKACAAKAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIAAAAACqAAAICggAAAACAAAAAAAAoAAAAAAAAIAACAAAAoAAAAKAAAAAAAAKAAAAgAAAKAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAoAAIAAAAAAooAAAAAAAAAAAAIAAAAAAAAAAAgAAAAAAoAACAAAAAAAAAAAAAAAAAAAAAAAKAAIAACgAAAAAAAgAAAAAAAAAAAAAAKAAAAAAgKAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAIAAAIAACqAAAAAAAAIAAAgAAAAAAAAKAAAAAAACAAAgAAAAKAAAAAAAACgAAAoqAAAAAAAAAAoAAAAIAAiAAAAAAAAAAAAAAAAAAAAoIAACgAgACgCgAAAAAAAAAAAgAAAAAAAAAACAAAACgAAAIAAAAAAAAAAAAAAAAAAAAAAAAoAgAAAAKAAAAAAACAAAAAAAAAAAAAoAAAACAAAAAoAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAIAAgAAAAAAAAKAAAAAAACAAAgAAAAKAAAAAAAAACgAAooACAAAAAoAAAAAAAIAAiAAAAAAAAAAAAAoAAAAIAACgAAgAAAACigAAIAAAAAAAAAIAAAAAAAoAAIAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAAoAAAAAAAIAAAAAAAAAAAACgAAIAAAAAAAACgAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAgACAAAAAAAoAAoAAAAIAgAAAIAAACgAAAAAAAAAoAAKKAAAAAAAAAAAAAAAgACIAAAAAAAAAAAACgAAAgAAAAAAAAAAAAKAAAAACAoICggAAAAAAAAAAAAAKAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAAoAAAAAAAAIAAACAAAoAAAAKAAgAAAAAAAAAAAKAAAACAoAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAgAAAAKAAAAAAAAAAAAAAAAAIgAAAKAAKAAAAAACIAAACAAAAAAAAAAAAoAAKAAKoAAAAAAAAAAAAAAIAAiAAAAAAAAAAAAoAICggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAoAAAACAAAoAgAAIAAACgAAAoCAACgAgAAAAAAACgAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAiAAAAgAAAAAAAAAAKAACgAACqAAAAAAAAAAAAACAAIgAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAoIAAAAAgAAKAAAAAAAAAAAKAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAoAAAAACAAAAAogAAIAAACgAAAoCAAAAAAAAAAAAAoAAAAAAAAAAAAAAICgAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAIIAAAAgAAAAAAAAAKAAAACgACgAKAAAAAAAAAACAAAIgAAAAAAAAAAAKAAAAAACAAAAAAAAAAAoIAAAAgAAAAAAKAAAAAAAAKAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAKIAAACAoAAAAKgAAAAAAAAAAAAKAAIAACgAAAAAAAAAAICgAAAAAAACgAAAAgAAAAAAAAAAAAAgKAAAAAAAAoAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAggAAAACAAAAAAoAAAAAAAKAAKAAAAoAAAAAAAAIAAAiAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAKAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAgCgAAAAAACgIAAAAAAAAAAAIoAAAAAAAAAoAAAACAoICgAAAAAAAAAACgAAgAAAAAAAAAAAAIACgAAAAAAoAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAgAgAAAACAAAAAoAAAAAAAAAKAAKAAAAAoAAAAAAIAAAiAAAAAAAAAAAoAAAAAICgAgAAAAAAAAAAAACAAAAAAAAAAoAAAAqAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAAAACCgAAAAAAAAAgAACgAAACAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAKAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAIAIAAAAAAgAAKAAAAKCAAAAAAAqgAAAAAAoAAAAAAIAAiAoIAAAAAAACgAAAAAgKAAACAAAAAAIAAACgAAgAAAAAAAKAAKAAAgAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAgAoAAAAAAAAIAAAAAAAogAAAAAKAACoAAAAACgACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAIIAAAAAAAAACgAAAAAAAAAAAAKAAAAAAACgAAAAAgCAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAKKCAAIAAAAACgCgAAAAAIACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAIAoAAAAqAAACgAAAAKAIAAAAAACgAAIAAAACgAAAAAAAAAAAAAAAAAAAgAKKgKAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAgAKAAAAAAAAAoAAIAAAAAAACgAAAAAAAoAAAAAIgAAAAAAAAAAAAAAAAAACAAAAAAAIAAAACgCgAAgCAAAooAAAAAAACAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAACAAAAAAAoAAAKAAAAoAgAAAAAAAAKgAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAgAAAAAAKAAAAAAACgAAAAiAAAAAAAAAAAAIACgAgAAAAAAAACAAAAAoAoAICggKCAoAAAAAAAAACAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAACAAoAAAAAAAACgAAAAAAAAAAgoAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAIAAAAAAAACgAAAAoAAAAIgAAAAAAAAAAAACAoIAAAAAAAAAgAAAAKAAKAAAAAAAAAAAAAAAAgAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACACgAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAgAAAAAAAAAAKAAAACgAAAiAAAAAAAAAAAAIACggAAAAAAACAAAAAoAoAAAAAAAAAAAAAACAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAKAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgCggAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAACgAAAoAAAIgAAAAAAAAAAAAACAAAAAAAAAIAAAAKoAAgKAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAACgCAAAAAqAAAAACgAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAKAAACIAAAAAAAAAAAAgAAAAAAAAAACAACgAiigAAAAAAAAAIAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAAAqAAAAACgAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAgAAgAAKoAAAAAAAAAAAAAAAAAAAAAAAKAAAACgAAiAAACAAoAAAAAgAAAAAAAAAAACACggKAAoAAAAAAAIAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAAAIKAAACgAAAAAAAAKAAAAAAAAAICgAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAACAACAAAAAAqgAAAAAAAAAAAAAAAAAAAAAAoAAAAAKADKAAICgAgAAACgAAAAAAAAAAAAgAAAAAoAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAgAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAgoAAAAKAAAAAAAAoAAAAAAgAAAAAAKAAAAAAggKAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAAAAAAAgCAAAAAoAoCgAAAAAAAAAAAAAAAAAAAAoAAAAAAAKDKAIAAAAAAAAAAoAAAAAAAIAAAAAAAAKAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAIAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAIAKAAAAAACgAAAAAKAAAAIAAAAAAAAAAAAAAAAAgAAAAKCACgAAAAAAAAAKAAAAAAAAIAAAAAIAAgAAAAAAAAKKAoAAAAAAAAAAAAAAAAAAAKAAAAAAAACIAAgAAAAAAAAAACgAgAAAAAAAAoICgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACggAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAKAAAAAoAAAgAAAAIAAACgAAAAAAAAAIAACgAAgAoAAAAAAAAgKAKAAAAAAIAAAACCAAAAAAAAAAAKKAAoAAAAAAAAAAAAAAAAAKAAAAAAAAACIAAAgAAAAAAAAAAAAAAAAAKACAoAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACoACgAAACAAAgAAAAgAACigAAAAAAACAoAAAIAKAAAAAIAACgACgAAAACAAAAAggAAAACAAAoAAAqgAAoAAAAAAAAAAAAAAAAAKAAAAAAAAACIAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIKAAoAAgAAAIAAAIAAAAAAAooAAAAAgKAAACAACgACAAAAAAAoAoAAAgAAAAAIIAAAAgAAAKAAACigAKAAAAAAAAAAAAAAAACgAAAAAAAAAAiAAAAIAAAAAAAAAAAACggKAAAAAAAAAgAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAoACACgAAKIAAACAACAIAACgAAAAoAoAAAgAKAAACACiAoIAAAACgAAACiAAAAAAACIKAAAACAAAAAAAqgAoAAAAAAAAAAAAAAAAAKAAAAAAAAAACIAAAAAAAgKCAAAoICgAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAgCgAAACoAAKAAAogAAAIAACCAAAAKAAACgCgAAAAAAACAACiAoAAAAAAICgCggggqgAAAAAAIAAAAAAIAACgAKACgAAAAoIAAAAAAAAAACgAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAoAAAAAAIAAoAAIKAAACgAAigAACAAAggAAACgAAoAAoAAAAAAAAAgCAKAKAAAAAAAACAqAKAAAAAAAAAIAAAAAAAACgAAoAAAKAACAAAAAAAAAAAoAAAAACAoICgCIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIACgAAAAAAgAAAAKAAACgAgACgACAAACIAAACgAAoAoAAAAAAAAAAiAAAKKAgAAKAAAAAAAoAAAAAgAAAAIAAAAAAACgAAoAAKAAACAAAAAAAAAAAAoAAAAAAACAoiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoIAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAoAAAAAAIAAAACgAAAoAIAAAoAAgAAIIAAAoAAKKAAAAAAAAgKAIIAAAAoAAAAACgAAAAAKAAAAAAIAAACAAAAAAAoAAKAACgAAAgAAAAAAAAAAAAKAAAAAgAAKIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAKAIAAAIgAKAAAKAoAAAAAIAAAAIqAAAKAAAAAAAoAAAAACgAAAAgAAAigACAAAAAoAAKAAACgAAAgAAAAAIACgAAAAAoAACAAAAoiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAogAAAAiCqIACgAAAAAAAAAAAgCoAAoAAAAAAACgAAAAAAAKCAAICgAIAoAAAgAKAAACgAAAoAAIAAAAACAAAAAoAAAAKAAAgAKCCAAAAAAAgAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAAKAAAAAAAAAAAACgAAAgAAAAAAKACAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiAAAACAoAAAAAAAAAAAAAIAqAAKAAAAAAAAoAAAAAACggAAACAoACKAAAAAAAAKAAAACgAAgAAAAIAAAAAACgAAAAoAACAACAAAAAgAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAACgAAAAAAgAKCAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAACgAAAAgAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKIAAAAAAAAAAAAAAAAAAIAIKAKAAAAAAAAoAAAAAAAAAAAAAgKCACqgAgKAAAAoAAAAAAAAAAAAAIAAAAAACgAAAAoAAAAAIgAAAAgAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAoAAAIAAAAAAogAAAACACgAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAogAAAAAAAAAAAAAAAAAggoAoAAAAAACgAAAAAAAAAAAAAACAoIAAKAoCAAAoAAAAAAAAAAAAAAIAAAACgAAAAAAoAAAAAIgAAAgAAAAAAKAAAAAAAAAAAAACAAAAAgAKAAAACAAAAAAAAAAoAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAACgAAgAAAAIoAAAAAAAIAKAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAACiAAAAAAAAAAAAAAAAAqAICgAAKAAAAAAAAAAAAAICgAAAgAAAKCAACqAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAACgAAAAiAAACAAAAAAAoAAAAAAAAAAAAAIAAACAAAAAoAAIAAAAAAAACgAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAKACAAAAAAigACAAAAoCACgAAAAAAAAAAAAAAAgACgAAAAAAgAAAoAAAAAAAACiAAAAAAAAAAAAAAAqAAAACgAAAAAAAAAAAAAAAAAAAACAAAoAICioCgAAAIAACgAAAAICggKAAAAAAAAAAAAAAAKAAAACIAAIAAAAAAACgAAAAAAAAAAAAAgAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAgAAAKAgAoAAAAAAAAAAAAAAIAoAAAgAAKAAgAAAoAAAAAAAACiAAAAAAAAAAAAAqAAAAACgAAAAAAAAAAAAAACAAAAoIACggAKCAAoAoAAAgAAAAAKAAAgAAAKAAAAAAAAAAAAAAKAAAACIAIAAAAAAACgAAAAAAAAAAAAAAAgAAIAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAKIACAAAAoCACgAAAAAAAAAAAAAgCgACAAAAAAoACAACgAAAAAAAAAigAAAAgqgAAAgAAAAAAAoAAAAAAAAAAAAAAAAgKAACAAAAAAoAAAAAAogAAAAAAAKAAAgAAAAKAAAAAAAAAAAAAAKAADKAAAAAAAACgAAAAAAAAAAAAAAAAgAAAIAAAAAAACgAAAAAAAAAAAAAAAAAoIAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAICgAKAAAAAACAAACKAAIAACgIAKAAAAAAAAAAAACAKAIAAAAAAAACgIAKAAAAAAAAAAACKACCgAAAAAAAAAAAAAAoAAAAAAAAAAAIIKAAAAqoAAgAAKCAoICgAAACiAAAAAAAAoACAAAAAAAAAAoAAAAAAAAAAAAAgACAAAAACgAAAAAAAAAAAAAAAAAgAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAACAAoAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAigACAoCAACgAAAAAAAAAAAAgCiAAAAAAAAAAoCACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAqAAAAAoACoAgAAAAKAAAAAAigAAAACgAAAIAAAAAAAAAAACgAAAAAAAAAACAAAIAAKAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAKAAAACgAAAAgAAAKAAACAAAAAAAAAAAAAAAoAAAAAAAAIAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAigAgAAAoAAAAAAAAAAAAIAAogAAAAAAAAKAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAKgCAAACqAAACoAAgAAKAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAoIACgAgAAAigAAgAoAAAAAAAAAICgAAAAAAAAAgAAAAIAAAAACgAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAgAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAKAAAACCggAAIAAAAACgAAAAAAAAAAAAgACiAAAAAAAAoACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAoggAAAAAKAoAAKgCAoAICgAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAigAAAgoAAAAAAAAAIACgAAAAAAAAgAAAAIAAAACgAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAgAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAIAAoAAAIKCAAAAgAAAAKAAAAAAAAAAAACAAKIAAAAACgAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAIAqAAIAAAACigKAAAgAoAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAioCgACCgAAAAAAAAAAAAAAAAAAAAgAAAAAIAACgAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAgAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAIAoAAAIAAAAIAAACgAAAAAAAAAAAAAgAAIAoAAoACAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAACAKAgCAAgAAKACigKAAAgAoAAAAAAAAAAACggKCAAAAAAAAAAAAAAAAAAAAAAACgAyqAAogAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKACAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAIACgAAAAAAAAAAAAAAgAAAIoAoACAAAACgAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAiAAAgAAAAKACigKAAgAoAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAoAAMqgAigAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAACggAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAACIACAAAAAAAoAKKAoACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAMiAAoAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAKACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAACACAIAACAAAAoAKCigKACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADIgKAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAACgAACgAIAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAKCAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACgAACAACAAIACAAAAAoAKKoKAAgoAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAoAAAAAMgAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgoAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAoAAgAAAAAiAAAgAAAAAKCgooCgIKAAACAAAAoAAAAAIAAAAACgAAAAAAAAAAAAoAAAAAMgAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAAAKAAgAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAgAACiAAAAAAAACIAACAAAgKACgoAqgoACCgAgAAAAAKAAACAAAAAAAAoAAAAAAAAAAAKAAAAADIAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAKAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAACgAAgAAAAAAAAIoAAAIKAACAAAKIAAAAAAACACAAAAIAAAACgCqCgoACAAAAAAAAACgAAAgAAAAAAKAAAAAAAAAAAACgAAAAgAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACgAAAAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAoAAAAIAAAAAAACKAAAACAAAAogAAAAAAAAIAIAAAAgAAAAKCgAooCgAIAAAAAAAAKAAACAAAAKCACgAAAAAAAAAAAAAAoAAIAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAKACAAAAAAAAAoAAAIAAAAAAACAKAAAAAAAIAAAAAAAACAACAAAAAAICgAAoAqgAoAAACAAAAAACgAAAgAAAAAAAKAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAgAAAAAAKAAAAAAAAAAAAAACAAAKAACACgAAAAoIAAAAAAAAAAAAAAAAAAAAAACKAAAAAIAAAAAAAAAACAAAACAAAAAAKACigAAKAAAAAgAAAAoAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAKIAACgIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAKAAIAAAAAAAAAAACAAAAAAAoAAAKAAAAAAAAACgIAAAKAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAKAAAAIAAAACoAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoCAACgAAgAAAACggAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAIAAoAAAAgAAAAAAKgAAoAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAgAAAIoAAAAAAAAAAAAAAAAoAAAAAAAAIIAAACqACgIAAKCAAAAAKAAACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAgACgCAAAAAAAAAAAqAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAACAAAAAgCgAAAAAAAAAACgAAAAoIAACACAAAAAqgAoCAAAAAAAAoAAAAIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAACAKAIAACAAAoAAAACCgAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAgAAAAAIAoAAAAAAAAoACAACgKCCKAAIIAgAKAKAoAKgAAAAAAigAACgAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAKACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAIAoAgIAAIAAACqAACoAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAIAAAACAKAAAAAKgAAAAoAAAAIAogAgCAAoAoCgAqAAAACAKAAAAKAAgAoAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAgACiAgAiAAoAAKKAIKAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAKACAAAAAgAAAAIAAACAAAAoAAAAAKAAAAACAAKIAAIgqiAoCgAAqAACAKAAAAAKAAgAoAAAAAAAAAAAKADIAAAKAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAIAogIAIgAAKACigKgAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAACgAgAAAAAIAAAACAAAAAAAAAAAAAoAAAAAAIAAogAAAAAAKAAAAAAAAAAACgAIAKAAAAAAAAAAACgAgIACgAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCiAAggCAAoAKKAqAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAACAAAAAAAAAAAoAAAAAAAIAACKAAAAAAKAAAAAAAAAAACgIAKAAAAAAAAAAACgAgAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAACAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAogIAAIAAAoogoAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAACAKAAAAAKAAAAAAAAAACgIAKAAAAAAAAAAACgAgAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACKAAAICiAoCoAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAKAAAAAAAAAAAAKAACgIAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAIAAACgAAAAAAAAAAAoAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAigAgAoAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACKAAAAAAAAAAAAAKAACgIAKAAAAAAAAAAAAAAACgAAgAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAoAAAAAAIAAAAAAAAAAAACAAAAAAAAigAAAAAAAAAAAACgAAoAKgAAAAAAAAAAAAAAAoAAIAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAoAAAAAAAIAAAAAAAAAACAAAAAAAAAAKIAAAAAAAAAAAAACgAoCCgAAAAAAAAAAAiigIKAACAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAIAAAoAAIAAAAACgAACAAAAAggAKoAKACgAIKAAAAAAAAAACKAKAgAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAIAAoAAAAIKAAACAAAAKAIAACCAAAqgAoAKAAgoAAAAAIAAAAoAAoCAAAAAAACAoAAAAAIAAAAAACgAAAAAAAAAAgAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAIAoAAAAoCAAAAAACAAAAigACCAKKAAoAKAAAgoAAIAAAAACKKAACoAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAgAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAACAAAoAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAKAACAAAAACggAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAgCgAAACgAIKAACAAAAgAAIoAAAAAAoAAKAAAgAAAAAAAAiigAIAKAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAACAAAAAoAAAAAAAAAKAACAAAAAAAAAAAAgCgCgAgAAAAAKAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAACAKAAKAACoAAAAIAAACAAAKIAACgAAAAoAACAAAAAAAACAoAAAAKAAAAAAAAAAAAAAAAAAACAAAoAAAAAIAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAoAAAAAAAAAAAAoCAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAgCgACgAAoCAAAACAAAAAgACgAAAAACgAAAIAAAAIAACgAAAAAAAoAAAAAAAAAAAAAAAAAIAAAACgAAAAgAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAgAACgAAAAAAACAAAoAAKAgKAAIAAAAAAgoAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAigACgAAqAAAAACAAAAAAAAAAKAAAAAAACAAAACAAAoAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAoAAAIAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAogAAAAAAAAAAAAKAAAAAAAACAoAACCgAAAAAAAAAAAAAAAAAAAAoAAAIAAAAACAKKAAAgAoAAAAIAAAAAAAAAAAAAoAICggAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAACgAAAgAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAACAAAAAAAAAAAAAoAAAAKAAACAAAAAAAAAAAAAAgKAACAAKAAACAAAAAACgAAAAAAAAAAAAgAAAAAAIoAAAAAAAAAAAAAAoAAAAIAAAAACgAqAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAICgAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9k=", skyBoxUp: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAGQABAQADAQAAAAAAAAAAAAAAAAECBAUD/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/APJtkAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAQBQAAAFAAAAAABQAAAAAAAAAAAAAAAAAAAABEAAABAFAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAqAAKAAAAoAAAAAKAAAAAAAAAAAAAAAAAAAAAIAgAAIAoAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFQABQAAAFAAAABQAAAAAAAAAAAAAAAAAAAAABEAAABAFAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAqAAAKAAAoAAAAKAAAAAAAAAAAAAAAAAAAAAAIgAAAIAoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAQAABQAAFAABQAAAAAAAAAAAAAAAAAAAAAABEAAABAFAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoCAAKAAoAAKAAAAAAAAAAAAAAAAAAAAAAAIgAAAIAoAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFARQAAFAABQAAAAAAAAAAAAAAAAAAAAAABEAAABAFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAqKAAAoAAAKAAAAAAAAAAAAAAAAAAAAACCAAAAIAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAVUAAAFAAABQAAAAAAAAAAAAAAAAAAAAAQQAABAAFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAACiCgAAAoAAAAKAAAAAAAAAAAAAAAAAAAACACAAIAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAUAAQUAAAAFAAAABQAAAAAAAAAAAAAAAAAAAQAQABAFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFBgAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAoAAAgoAAAAAKAAACgAAAAAAAAAAAAAAAAAAgAAgCAAKAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKDAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAABQAAABABQAAAAUAAAFAAAAAAAAAAAAAAAAAABABAAEAAUAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAUGAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACgAAAAACCgAAAAoAAAKAAAAAAAAAAAAAAAAACAACAIAAAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoMAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFAAAAAAAAAEFAAABQAAAUAAAAAAAAAAAAAAAAEAAAEAQAABQAABAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAoAICggAKAIKAAACgAAAoAAAAAAAAAAAAAAAIAAAIAAgAACgAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAADEAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUQFBAAAUABUAAAAFAAAABQAAAAAAAAAAAAAQAAAAQABAAAFAAEAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCggAKAAIKAAAACgAAAAAoAAAAAAAAAAAIAAAAAIAAgAACgACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAADEAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBAAAAAAAAAUEABQQFBFFABAUAAQUAAAAFAAAAAABQAAAAAAAAAQAAAAAAAQBAAFAAAEAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAoAAIACggAKCAoIooAAAAAgoAAAAKAAAAAAACgAAAAAAgAAAAAAAAAiAAKAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAEABQAAAQFAABAAUEBQAQFBFFAAAAAAEFAAAABQAAAAAAUAAAAAEAAAAAAAAAEQAABQAABAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAKAAACAoAICgAgKACAoIooAAAAAAgoAAAAKAAAAAACgAAAgAAAAAAAAAAIAIAKAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUEAAAAABQAQFAAABAAUAAAAAEBQAQFABAUBQAAAAAAEFAAABQAAAAAAUAAAEAAAAAAAAAABABABQAAAABAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABiAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAKACAAoAAAICgAAgKACAoAIACggKAoAAAAACACgAAAoAAAAAAKAACAAAAAAAAAAgAAgAAoAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAxAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABQAAAAAAAAAAAAAAFABAAAAAUAEABQAAAAAAAAAAQFABAAUEBQFEBQAAABABQAAAUAAAAAAFABAAAAAAAAAAQAAAQAAUAAAAAQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAYgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAACggAAAAKCAAAoAAAAAAICgAgAKACAAoICgiigAAAACCgAAAAoAAAAAAAAAAAAAAAAAIAAAIAAKAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAMQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAUAAAABQQAAAAAAAAAAAAAAAAAAAAAAFAABAUAEBQAQAFABAUEBQRQABQAABABQAAAAUAAAAAAAAAAAAAAAAAEAAEAAFAAAAAAEAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAGIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAACKKgAAAAAAAAAAAAAAAAAAAAAAAKAACAoAIACggAKCAAoIAAooIACgACACgAAAAoAAAAAAAAAAAAAAAAAIAAIAAKAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAMQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAFQQAAAAAAAAAAAFBFAABABQAAAAAAAAAAAAAAAAAAAAAFAABAUAEABQQFABAUEBQRQABQAAABABQAAAAUAAAAAAAAAAAAAAAAEAEAAAFAAAAAAEAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAGIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigACoAAAIoIAAAAAAAAACgAAAgAAoAAAAACggAAAAAAAAAAAAAKACAAoAICgAgKCAoAICgiigAAAAACACgAAAAoAAAAAAAAAAAAAAAAIAIAAKAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAMQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUEUAAEAAAAAAABQAAAAAAQAUAAAABQAQAAAAAAAAAAAAAFABAAAAAUEBQAAAQFBFFBAUAAAAAQAUAAAAFAAAAAAAAAAAAAAABAABABQAAAAAABAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABiAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAoAAAAIAAAAAACgAAAAAAgoAAAAAACgAgAAAAAAAAAAAAAKACAAoICgAAAAAAAAKAAAAAAAAAgoAAAAKAAAAAAAAAAAAAACAAACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAxAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAUAAAAAAEAAAABQAAAAAAQAAUAAAAAABQAQAAAAAAAAAAAAFAABAAUEBQAAAAAQFBAVQAAAAAAAAEFAAAAABQAAAAAAAAAAAAAQAAAQAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAGIAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAACgAAAAAAAAgAAKAAAAAACAAAAACgAAAAAKACAAAAAAAAoAIACgAAgAKCAoAAAAAAAACgAAAAAAAAIAKAAAAACgAAAAAAAAAAAAgAAAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAMQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAFAAAAAAAABAAAUAAAAAEAAAAAAAAFAAAAAUEAAAAAAABQAAAAAAAQAFBAUAAAAAAAABQAAAAAAAAEAFAAAAABQAAAAAAAAAAAAQAAQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAGIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAAAAAAICgAiigAAAAAAIACgAgKAAAAAAAAoAAAAAAAAACIoAoAAAACgAAAAAAAAAAAgAAAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAUAAAAEBQAAAAAAAAAAAAAAAAAAAAAAQAAAAAUAAAEBQAAAQFBFAFAAAAAAAQAFBAUAAAAAAAABRAUEBQAAAABEAUUAAAAAABQAAAAAAAAQAAAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAKAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAKACAAAoAIACgigCgAAAAAIACggAKAAAAAAAAoAAAAAAAAAggAoAoAAAAAAAAAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAFQAAFAAAAEABQAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAUAEAAABQRQQFAFAAAAAAQAFBAAUAEBQAAAARRQQFBAUAAAAAAEEFAFAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIKAAAAAoAAAAgAKAAAAAAAAAAAAAAAAACAAoAAAAIAAAAAKACAAAoIoICgACgAAAAAICgAgKAACAoICggKAogKCAoICgAAAACAIoAoAAAAAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABBQAAAAAAFAAAAEBQAAAAAAAAAAAAAAAAAAAQFAAAAABAAAAAAAAAAUEABQBQAEBQAAQFABAUAAEBQAAAARRQQFBAUEBQAAAAAQQAUUAAAAAAAAEAAAAFAAAAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAIAAAIKAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAACAAAoAIAACggAKAAKACAoAAAAAAAACAoAAAAACiAoICgAAAAAACIAAAACgAAAKAIAKAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKDzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAEUAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAUEABQAABQQAFBAUAEBQAAEBQAQFBAUEUUEBQQFBAUAAAAAARAUAAAAAUEBQAEAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAigAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACggAAKAAKCAAoIACggAKAAgKAAAAAAAoAAAAAAAAAAgAAAiggAKAAKAAgAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAADzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAEUAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUAAAAAAAAAAAUABAUAAAAEBQRRQQFBAUAAAAEBQQAAARQQUEUAUABAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAUAAAAAHmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAIAAoAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAoIACgICgAAAAAAAKAAAAAAAAAICggAAiggoCiAoCAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAPMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAQAABQAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVBFFAAAAAQFBFFBAUAAAAEBQQAAAAARRUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAigAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqCKKAAAAAgKAAoAAAAAAAAAgKCAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAPMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAFEAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQBQAAAAEBQQFUQFAAEQVQQFBAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAHmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACiAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAoIACgAICgAKAAAgKCAqAoIAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAA8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAUAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFAAAAAFAQRRQQUABQQAFQRRUBQQAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAB5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAKgigCggqoIoICggKCCgAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAADzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUAAAAAAAAAABQAAAAFQRRUAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAKAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAgKAAAoAgKCAoIKCKKgAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAADzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAEAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUAAEBQAAFAEBQQFABAUAVAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAHmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAIAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAgKCAoAIKCAoAAACgAgAAKCAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAPMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAQABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABAUEABQAQFBBQRQBQAEABQAQAAFABAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAHmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAgKAAAKAgKAACAAAoAIAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAA8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAUABAAUAAEAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAgAACgAAAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAICgAACgIACgAAgAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAADAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUAEAAAAAQAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAABAUAAAEFAUAAAEAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAQFAAAAAFAAAAAAAAAAAAAAAAAAABgAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAIAKogKAAgAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAACAoAAAAAoAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABAAUAAAVBFAFQAQVQAQFBAUAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAUAEBQABQAAAAAAAAAAEABQQAFBAUAAEGCgAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAICgAAgAKACCggoCggAAAAAKAAAAAAACAoICgAAAAAACgAAAAAAAAAAAAAAAAICgAgKAKgKAAAAAAAACAAAAAAAAAAoIAAMFAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAEAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAQAFABBQRVEAAAAAAAAAFAAAAABAAAAAAUAAAAUAAAAAAAAAAAAAAAAAAABAUEFAUEBQAAAAAAQAAAAAAAAAAAAAAYKAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAIAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAgKAACAoCiAAAAAAAAAAAACgAAAgKCAoIACggKCCgKCAoICgAgKCAAoAAAAAAAAIACioAAACgAAAAAgAAAAAAAAAAAAAAAxUAAAAAAAAAQAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAEAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFEABQQAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAFAAAAABAAUVAAAAAAAUEBQQAAAAAAAAAAAAAAAAYgAAAAAAAAAAAAAgACgAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAACAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAACAoIAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAACggAAoAAAAAACggAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAIAAAAACAAKAAAAIAAAAAAAAAAAAAAAAACAAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAIAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAoiAAAAAKAAAAACAAAIAAAACAAKAAIAAAAAAAAAAAAAAAACAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAIAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAgAAAAIAAIgACgACAAAAAAAAAAAAAAAgAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAACAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAooAAAAAAAAAACAAAAgAAAIAACCACgCAAAAAAAAACggACAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAIAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIUAAAAAAAABAAAAQAAAEAABAAAQAQUAQAUAAAAAAEBQQBBQQAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBRVAAAABAAAAAQAAAAEAABAAAQAAEAEFUBAAAAAAAAAABEFBAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAABAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGQoAAAAAACAAAAgAAAIAAACAAgAAIAAoAgAAAAAAAAAIICgAgAAAgAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAgAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAADIUAAAAAABAAAQAAAAEAAABAAQAAEAAAUQAAAAAAAAAEAAAEAAAEAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAEAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAZCgAAAAAIAACAAAAgAAAAIAACAAAgACgCAAAAAAAAAAgAAAgAAgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAgCgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAADIUAAABAAAAQAAAEAAAABAAAAQAAEAAUQAAAAAAAAAAEAAAEAAEAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAUUAAAAAABAAAAQAAAAAEAABAAAQAABRAAAAAAAAAAAQAAAQAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAARQAAAAAABQAAAQAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAFFAAAAAAAQAAAEAAAABAAAAQAAEAAAUAQAAAAAAAAAEAAAEAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAEUAAAAAAUEBQAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAFFAAAAAAQAAAAAEAAABAAAAQAAAEAAAUQAAAAAAAAAEAAAQFQAAQABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAARQAAABQQFAAAAAAAAAAAUAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUUAAAAABAAAAAAAQAAAEAABAAAAQAABQBAAAAAAAAAQAABAAVABAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUQAAAAFAAAAAAAAAAUAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUUAAAAABAAAAAAAQAAAEAAABAAAAQAABQBAAAAAAAAAQABAAAVBAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAQAFAAAAAAAAAAUAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAABAAAAAAAQAAAEAAABAAAAAQAAABRAAAAAAAAQABAAAAEAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAEABQAAAAAAAAAAFAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFFAAAAQAAAAAAAEAAAABAAAAQAAAAAEAAAAUQAAAAAAAEAQAAAABAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAEAAAABAAAAAQAAAAAAEAAABFAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAABAAAAAAQAAAAEAAAAAAAABAAAARQAAAAAABAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAUQAAABAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABAAAAAAQAAAAAEAAAAAAAAABAAAAARQAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAABAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAQAAAAAEAAAAAAAAAABAAAAQBQAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQAAAAAAAAAAAEAAAAAAABAAAAAAAAAAAQAAAEAUAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAEBQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQAAAAAAAAAAAEAAAAAAAAAAAAAABAAAAAQAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFAAAAAAAAAAAAAQAAAAAAAAAAAAAAEAAABAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUAAAAAAAAAAAABAAAAAAAAAAAAAAAQAAAAEAAABAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAYigAAAAAAAAAAAAAIAAAAAAAAAAAAAACAAAAAgAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAADAUABQAAAAAAAAAAAQAAAAAAAAAAAAAAEAAAABAAAAQAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAGAAAoAAACgAAAAAgAAAAAAAAAAAAAAAAAIAAACAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAICgAKAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAACgAAAAAAAAAAAwAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAQAAAFUAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAAKoAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAKAAAAAAAAAAAAAAAAAADzBQAABQAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAEAAAAUAUAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAABAAAABAAAAAAAFAAAAAAAAAAAAAAAAAAAAB5gAAoAAoAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAACAAAKAKAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAgAACgAAAAAAAAAAAAAAAAAAAAAA8wAAAAUUAAAAAAAAAAAAAAAAAAAAAAAAAABAAAQAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAABAAFAFAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAHmoIAAAAqgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgACgACgAAAAAAAAAAigAAAAAACgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAPNQAQAABQAFAAAAAAAAAAAAAAAAAAAAAAAAABAAAQAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAAAAAAAAABAAFAAFAAAAAAAAAABFAAAAAAAAAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAEBQQAAAAAAAAAAAAAAAAAAAAAB5KKAAAgACgAKAAAAAAAAAAAAAAAAAAAAAAAACAAAgAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAACAAKAAKAAAAAAAAAAogAAAAAAAAAAKoAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAADyUAAUABAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAEAABAAAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAEAAAUAAUAAAAAAAABRAAAAAAAAAAAAVQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAB5KAAAAKAgACgAAAAAAAAAAKAAAAAAAAAAAAAACAAAgAAAIAAAAAAAAAACAAAoAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAICggACgAAAAACgAAAAiiggAAAAAAAAAACigAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAA8lAAAAAAFQABQAAAAAAAAAAAFAAAAAAAAAAAABAAAAQAAEAAAAAAAAABAAAAUAAAAAAAAEAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAEAAAAUAAAAAAAUABQBAAAAAAAAAAAAAFFAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAB5KAAAAAAAAKgCgAAAAAAAAAAAAKAAAAAAAAAAACAAAAgAAIAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAACAAAAAAKAAAAAAAAACiggAAAAAAAAAAAACgCgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAoAAAAPFQAAAAAAAAAARQAAAAAAFAAAAAABQAAAAAAAAAQAAAEAAABAAAAAAAAAQAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAQAAAAAABQAAAAAAAAAUUAEAAAAAAAAAAAUAUAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUAEAUAUEAAAAAAAeCgAACgAAAAAACgAACAAAAAACgAAAAAAoAAAAAAIAAAACAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAACAAAAAAAAAKAAAAAAAAACigAAAgAAAAAAAACgACgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAACAAAAPBQAAAAAABQAAAABQAAABAAAAAABQAAAAAAAAAAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAQAAAAAAAAABQAAAAAAAAABVAAAAEAAAAAAAAUAAUAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAQB4KAAAAAAAAAAAAAAoIAAooAgAAAAAAoAAAAAAAAAAAAAAIAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAgKAAoAAAgKCAAAAAAAAAKAAAAAKAAAAAoAAAAAgAAAAAACgCgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAADwVAAAAAAAAAAAAAAAAAAAUABQEAAAAAAFAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAEBQAFAAAEBQQAAAAAAAABQAAAABQAAAAFAAAAAEAABQQABQBQAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAQAAAAAAFAAAAAAAAAAAAAAAAAAAAAB4KgAAAAAAAAAAAAAAAAAAAKAAAIKAAAAAAAAAAAACgAAgAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAACAoACgAAACAAAAAAAAAKAAAAAKAAAAAAoAAAAAAAgKAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FQAAAAAAAAAAAAAAAAAAAAFAAAEAAFAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAQFAAAUAAAAAQAAAAAAABQAAAABQAAAAAFAAAAAEBQQFAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeCoAAAAAAAAAAAAAAAAAAACgAAAACAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAICqAAAAAIAAAAAAAAAoAAAAoAAAAACgAAACAAAoICqAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBUAAAAAAAAAAAAAAAAAABQAAAAAABAAAAAAAAAABQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAABAUEAAAAAAAUAAAAUAAAAABQAAAABAAAAVQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4KgAAAAAAAAAAAAAAAAAAKAAAAAAAIAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAICgAAgAAAAAAACgAAAACgAAAAKAAAAAAAIAAooAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBUAAAAAAAAAAAAAAAAAAAABQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAQAAAAAAABQAAAAABQAAAFAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4KgAAAAAAAAAAAAAAAAAAAAKAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgACAAAAAAAAAAKAAAAAAAAKAAoAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKDXVAAAAAAAAAAAAAAAAAAAAUAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAEAAAAAAAAAUAAAAAAAAAFFAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAGuqAAAAAAAAAAAAAAAAAAAAoAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAIAAAAAAAAAAoAAAAAAAAAKAAAKAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAA11QAAAAAAAAAAAAAAAAAAAFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAABAAAAAAAAFAAAAAAAAABQAAAABQAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAABAAAAAAAAAUAAAAAAAAAAAAAAAAAAAGuqAAAAAAAAAAAAAAAAAAAAAoAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAIAAAAAAAAAoAAAAAAAAAKAAAAAAKAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAA11QAAAAAAAAAAAAAAAAAAAAAAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQABAAAAAAAAAFAAAAAAAAABQAAAAAABVAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrqgAAAAAAAAAAAAAAAAAAAAAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACiAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAooAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADXVAAAAAAAAAAAAAAAAAAAAABFABAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUQAAAAAAAAAAABQAAAAAAAAAUAAAAAAAAVQAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa6oAAAAAAAAAAAAAAAAAAAAIoAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAICgAgKAAAAAAAAAAAAAAoAgAAAAAAAAAACgAAAAAAAAAAoAAAAAAAKKAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA11QAAAAAAAAAAAAAAAAAAAFEAAAAAQAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAQAFBAUAAAAAAAAAAAAAABQABAAAAAAAAAAFAAAAAAAAAABQAAAAAABQFAAAAAAABQAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrqgAAAAAAAAAAAAAAAAAAAAigAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAogKACAAAAAoICgAAAAAAAAAAAAKAAIAAAAAAAAAoAAAAAAAAAAAKAAAAAAAKoAAAAAAAKAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANdUAAAAAAAAAAAAAAAAAAAABRAAAAAAEBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAEAAAAAAABQQFAAAAAAAAAAUAAAQAAAAAAABQAAAAAAAAAAAUAAAAAAAAVQAAAAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa6oAAAAAAAAAAAAAAAAAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAACAoIAAAAAAACgAAAAAAAAAAKAAAIAAAAAAAAAoAAAAAAAAAAKAAAAAAAACigAAAAAAAKAAAAAACgAAAAIKCAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAADWVAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAQFABAAAAAAAAAAUAAAAAAABQAAABAAAAAAAAFAAAAAAAAAAABQAAAAAAAAUUAAAAAABQAAAAAAUAAABBQAAARQAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAEBQAAAAAAAAAAAAAAayoAAAAAAAAAAAAAAAAAAAAAAIAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACAoIAAAAAAACggKAAAAAAoAAAAgAAAAAAACgAAAAAAAAAAAoAAAAAAAAKAKAAAAAAAoAAAAAKAAAACoAAAAIoAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWVAAAAAAAAAAAAAAAAAAAAAABAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAFAAAAAAUAAAAQAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAFAAAAAAAUAAAAAFAAAAQUAAAEUAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrKgAAAAAAAAAAAAAAAAAAAAAAgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAICgAgKAAAACAoIAAAAAACgAAAAAKAAAAIAAAAAAAAoAAAAAAAAAAAAKAAAAAAAACgACgAAAAAAKAAAAACgAAAAIKAogAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1lQAAAAAAAAAAAAAAAAAAAAAAQABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAEABQQAAAFBAUAAABQAAAABAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAUAAUAAAAAABQAAAAAUAAAAABAUAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrKgAAAAAAAAAAAAAAAAAAAAAgAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAICggKACAoIACgAAKAAAAAAIAAAAAAAoAAAAAAAAAAAKAAAAAAAAACgAACgAAAAAAKAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAANZUAAAAAAAAAAAAAAAAAAAAAAEAAAAUAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAEBQAAAAAAAAAQFABAUAEBQQFAUAAAAAAQAAAAAABQAAAAAAAAAAAUAAAAAAAAAAFAAFAAAAAAAUAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAayoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAACAoAAAAAAAAAAAAICgAgKCAoCgAAAAAACAAAAAAKAAAAAAAAAAACgAAAAAAAAAAoAAoAAAAAAACgAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAADWVAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAQFAAAAAAAAAAAAAAAAABAUBQAAAAAAABAAAAAFAAAAAAAAAAABQAAAAAAAAAAUAAAUAAAAAABQAAAAAAUAAAAAAAAAFAAABAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAQAAAAAFAAAAAAAAAAAAAAAAAAABqqgAAAAAAAAAAAAAAAAAAAgAKCAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAgKAAAAAAAAAAAAAAAAACAoIooAAAAAAIAAAAAAoAAAAAAAAAAAKAAAAAAAAAACgAACgAAAAAAKAAAAAAACgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1VQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAEBQAAAAAAAAAAAAAQFBFFAAAAAABAAAAAAFAAAAAAAAAAABQAAAAAAAAAAUAAAUAAAAAABQAAAAAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGqqAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAgAKAAAAAAAAAAAAACAoIooAAAAAIAAAAAAAAoAAAAAAAAAAKAAAAAAAAAACgAACgAAAAAAKAAAAAAAACgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1VQAAAAAAAAAAAAAAAAAAAAAAAAQAAAFBAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAQFAAAAAAAAAAAAAABAUEUUAEAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAABQAAABQAAAAAAFAAAAAAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaqoAAAAAAAAAAAAAAAAAAAAAAAAAAIAACggAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAICgAAAgKAAAAAAAAAAACKKACAoIAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAACgACgAAAAAAKAAAAAAAAAACgAAAAAAAAoAAACAoAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVVAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAQFAAAAAABAUBQABAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAAUAUAAAAAAABQAAAAAAAAAAAUAAAAAAAAFAAAAAAQAFAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUBAUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAGqqAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAICggAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAKAKAAAAAAAAoAAAAAAAAAAAKAAAAAAAACgAAAAAIAAKAAoAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAgAAAAAAKIAAAAAAAAAAAAACgAAAAAAAgAAAANVUAAAAAAAAAAAAAAAAAAAAAAAAAAEBQAQAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAABRAUEBQQAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAVQAAAAAAAAAUAAAAAAAAAAFAAAAAAAAABQAAAAAEAFAAAAAUAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAQAAAAAAAAAFAAEABQAAAAAAAAAAAAAAAAAAAAAaioAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAgAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAACAAAAAAAAAAAAKAAAAAAAAAACgAAAAAAACgKAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAKAAAAAAAgoAAAAAAACgAAAAAAAAAgoAACgAAAAAAgKCAAAAAAACgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAANRUAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAQAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAUBQAAAAAAAAUAAAAAAAAAAFAAAAAAAAABQAAAAAAAVAAAAAAAAAAAAUAAAEFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAGoqAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoIAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAgAAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAoCgAAAAAAAAAoAAAAAAAAAKAAAAAAAAACgAAAAAAAAoCAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAACgAgAKAAAAAAAAAAAAAAAAAANRUAAAAAAAAAAAAAAAAAAAAAEAAAABQQAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAABQRRQAAAAAAAAFAAAAAAAAABQAAAAAAAAAUAAAAAAAAFAAQAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAAAAQAAAAAAAAABQAAAAAAAAAAAAAAAABqKgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAACAAAAAAAAAAKAAAAAAAAAAACgAAAAAACggKoAAAAAAAAAKAAAAAAAAACgAAAAAAAAAoAAAAAAAAKAAAgAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAACgAAAAAAAAAAAAAADUVAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAUEAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAQAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAVQAAAAAAAAAUAAAAAAAAAFAAAAAAAABQAAAAAAAAAUAAABAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABAAAAAAAAAFAAAAAAAAAAAAGoqAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAIAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAKAoAAAAAAAAKAAAAAAAAACgAAAAAAAAoAAAAAAAAAKAAAAAgAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAACgAAAADUVAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAEAAAAAAAAAAUAAAAAAUAEAAAUAAAAAAUAABQAAAAAAAAUAAAAAAAAAFAAAAAAAABQAAAAAAAAAUAAAABABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABptIAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAACgAAACAoAAAICgAAAAAAAAAAAAAAAAAAAAAKAAAAAIAAAAAAAAAAoAAAAAAoAAIAAoAAAAAAAAoACgAAAAAAAoAAAAAAAAAKAAAAAAAACgAAAAAAAAoAAAAAACACgAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAANNpAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAUAAAAQFAABAAUAAAAAAAAAAAAAAAAAAAAAABQAAAAABAAAAAAAAAAFAAAAAAAFAAAUQAAAAAAAAFAUAAAAAAAFAAAAAAAAABQAAAAAAAAUAAAAAAAAFAAAAAAAQAUAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABptIAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACgAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAACgAAAAACAAAAAAAAAAKAAAAAAAAKAAAogAAAAAAAKAoAAAAAAAKAAAAAAAAACgAAAAAAAAoAAAAAAAKAAAAAAAgAAoAAAAKAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAoAAAAAAAIAgAAAAAAAAAAAAAAAAAAAAAAAAANNpAAAAAAAAAAAAAAAAAAABAUAAAEAAAAAAAAAAAAAAAAAAUAAAAAAAAAABQAAAAAAAABAAUAAAAAAAAAAAAAAAAAAAAAAAABQAAAABAAAAAAAAAAFAAAAAAAAAFAAUAAQAAAAAAFAUAAAAAAAFAAAAAAAABQAAAAAAAAUAAAAAAAFAAQAAAAAAAUAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAUAAAAAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAAAAGm0gAAAAAAAAAAAAAAAAAAAgAAKAACAAAAAAAAAAAAAAAAKAAAAAAAAAoAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAgAAAAAAAAAACgAAAAAAACgAAKAIAAAAAACgKAAAAAAAACgAAAAAAAAoAAAAAAAKAAAAAAACgIAAAAAAAAKAAAAACgAAAAoAAAAAAAAAAAAAAAoCgAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAgAAAAAAAAAAAAAAAAAANNpAAAAAAAAAAAAAAAAAAAABAAAAUAAEAAAAAAAAAAAAAUAAAAAAAABQAAABAUAAAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAEAAAAAAAAAAAUAAAAAAAAAUABQABAAAAAAAUBQAAAAAAAUAAAAAAAAFAAAAAAABQAAAAAAAUBAAAAAAABQAAAAAAUAAAAFAAAAAFAABAAAAAVQAAAAAAAAAAAAAAAAAAAAAAAAUAAEAAAAAAAAAAAEAAAAQAAAAAAAAAAAAAGm0gAAAAAAAAAAAAAAAAAAAAAAgAAAAKCAAKAACAAAAAAoAAAAAAACgAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACAAAAAAAAAAAAAKAAAAAAAAAAKoAgAAAAAAAAKoAAAAAAAAKAAAAAAAACgAAAAAAoAAAAAAAKAAgAAAAAAoAAAAAAKAAAACgAAAACgKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAgAAAAACAAAAAAAAA02kAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAUEAAAAAAAABQAAAAAAFAAAAAAAEABQAAQAAAFAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAQAAAAAAAAAABQAAAAAAAAAAAUUEAAAAAAABQFAAAAAAAABQAAAAAAAUAAAAAAAFAAAAAABQAEAAAAAAFAAAAAABQAAAAAUAAAAUBQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAEAAAAAAAAAQAAAGm0gAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACgAAAAAAKAAACAoAAAAAAAgKAACAAAoAAAAAAAAAAAAAAAAAAAAAAAACgAAAAACAAAAAAAAAAAKAAAAAAAAAAACgACgAgAAKAAAoAAAAAAAAKAAAAAAAACgAAAAAAoAAAAAAAKAAgAAAAoAAAAAAAKAAAAACgAAAACqAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAgAAAAAAAAAACA02kAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAUAAAAEAAUAUAAAAAAAAAAAAAAAEABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAEAAAAAAAAAAAUAAAAAAAAAAAAFAAAAFAAAAAAUAAAAAAAAFAAAAAAABQAAAAAAAUAAAAAFAAAAQAAAAUAAAAAAFAAAAABQAAAABVAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAAAABpNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAIAAAACqAAAAAIACgAAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAgAAAAAAAAAACgAAAAAAAAAAAAoAAAoAAAAAACgAAAAAAAAoAAAAAAAAKAAAAAACgAAAAAoAAAACAAACgAAAAAoAAAAAAKAAAAAKAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAIAAAAIAAAAAAAAAA0mkAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAEAAABQFAAAAEAAABQQFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAQAAAAAAAAAABQAAAAAAAAAAAAUAAAAUAAAAABQAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAUAAABAAABQAAAAAUAAAAAAFAAAAAFAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAQAAAAAAAAAAAAAAAEAEAAAAAAAAAAaTSAAAAAAAAAKAAACAAAAAAAAAAAAIAoAIAAAAACqAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAIAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAKAAAAAoAAAAAAAAAKAAAAAAACgAAAAAAoAAAAAKAAAAgAAoAAAAAAAKAAAAACgAAAACgKAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAIAgAAAAAAAANJpAAAAAAFAAAAAAAAABAAAAAAAAAAEAAAAAFAFAAAAABAAAAAAAUAAAAAAAAAAAAAAAAAAAAEBQAAAAAAAAAAAAFAAAAAAEAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAFAAAAAAUAAAAAAAAFAAAAAAAABQAAAAAAUAAAAFAAAAAQAUAAAAAAAFAAAAABQAAAABVAAAAAABQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAEAAQAAAAAAAGm0gAAAAAAAAAAAAAAAAAAAAAAACAAAAqAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAgKCAAAAAAAAAAKAAAAAAAAAAAACgAAAACgAAAAAKAAAAAAAACgAAAAAAAoAAAAAAKAAAAACgAAAAIKAAAAAAACgAAAAAoAAAAAKKAAAAAAoAAAKAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAIAAAAgAAAAANNpAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABAAAAAUAAAAAABQAAAAABAUEAAAAAAAAAAUAAAAAAAAAAAAFAAAAAFAAAAAAUAAAAAAAAFAAAAAAAABQAAAAAAUAAAAFAAAAABUAAAAAAAFAAAAABQAAAAAUUAAAAABQAAAAUBAAAAAAUAAAEAAAAAABQAAAAAABQAAAAAQAAAAAAAAAAAAAEAAAAAAAEAAAAQAAAAGm0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAACgAgKAAAAAAAAAAAAAAAAAACAAAKAAAAAAAAKAAAAAACAoIAAAAAAAAAAoAAAAAAAAAAAAAqgAACAAoAAAAACgAAAAAAAoAAAAAAAAKAAAAAACgAAAAAoAAAACCgAAAAAAoAAAAAKAAAAACigAAAAAKAAAAACgIAAAAAAAAAAKAAAAAAAAAAAAoIAAAAAACgCAAAAAAAAAAAAAAgAAAAAgAAAAAACAA02kAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAUAAEBQAAAAAAAAAAAAAAAAAAAQBQAAAAAAAABQAQFAAAAABAAAAAAAAAAFAAAAAAAAAAAAFAUAAAAAAAAAAAFAAAAAAAABQAAAAAAAAUAAAAAAFAAAAABQAAAAVAAAAABQAAAAAAUAAAAAVQAAAAAAUAAAAAFAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAABQABAAAAAAAAAAAAAAQAAAQAAAAAAAABpNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAoIACgAAAAAAAAAAAAAAAAAAAgCgAAAAAAAAAAACgAAAAAAAgAAAAAAAACgAAAAAAAAAAAACqAAAAAAAAAACgAAAAAAAAoAAAAAAAAAKAAAAAACgAAAAAoAAAAKgAAAAoAAAAAAAKAAAAKoAAAAAAKAAAAAACgAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAgAAAAAAAAAAAAIAAIAAAAAAAA0mkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUAAEBQAAQAFAAAAAAAAAAABAFAAAAAAAAAAAAAFAAAAABAAAAAAAAAFAAAAAAAAAAAAABRQAAAAAAAAAAFAAAAAAAABQAAAAAAAAUAAAAAAAFAAAABQAAAAAVAAAABQAAAAAAUAAAAVQAAAAAAUAAAAAAFAAAQAUAAAAAAAAAAAAAAAAAAAAAAAAFABAAAAAFAAAAAAEAAAAAAAAAABAABAAAAAAAGk0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACggAAKACAAAoAAICgAAAAAAgCgAAAAAAAAAAAACgAAAAAgAAAAAAAACgAAAAAAAAAAAAACqAAAAAAAAAACgAAAAAAAAAoAAAAAAAAKAAAAAACgAAAAAoAAAAKgAAAAoAAAAAAKAAAKAAoAAAAAKAAAAAACgAAAIKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAACgAAAAAACAAAAAAAAAAAgAAAgAAADSaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAABQAQAAAFAABAUEBQAQFABAFAAAAAAAAAAAAAAFAAABAAAAAAAAAFAAAAAAAAAAAAAABQABQAAAAAAAAFAAAAAAAABQAAAAAAAAUAAAAAAAFAAAAABQAAAAVAAAABQAAAAAUAAAUABQAAAAAUAAAAAAFAAAAQAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAFAAAAAAAAEAAAAAAAAABAAABAAGk0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAACgAAgKACAoIACggACgAAAAAAAAAAAACggKACAAAAAAAAAKAAAAAAAAAAAAAAACgCgAAAAAAAAKAAAAAAAAACgAAAAAAAAoAAAAAAKAAAAAACgAAAAqAAAACgAAAAoAAAoACgAAAAAoAAAAAKAAAAAgAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAKAAAAAAAAIAAAAAAAACAACANJpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAABQQAAAAAAAAABQAAAAAAAAAAAAAAAUAUAAAAAAAAABQAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAUAAAABBQAAAAUAAAAFAAFAAUAAAAAFAAAAABQAAAEAAFAAAABQAAAAAAAAAAUAAAAEAAAAAAAAAAAAAAAAAABAAAAFAAAAAAAAEAAAAAAABABGk0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAoIAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAKCAoAAAAACgAAAAAAAAAoAAAAAAAAAKAAAAACgAAAAAAoAAAACCgAAAAoAAAKAAKAAoAAAAAKAAAAACgAAIAAKAAAAACgAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAACAAAAKAAAAAAAIAAAAAAAADRaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAUAAAAAABQAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAUAAAABABQAAAAUAAAFAAFAAUAAAAFAAAAABQAAEAAFAAAAABQAAAAAUAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAFAAAAAAAAEAAAAAABotMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAKAAAAAAAAoAAAAAAAAAKAAAAAAAACgAAAAAoAAAAAAKAAAAAgoAAAAKAAAACgACgAKAAACgAAAAAoAACACgAAAAAAoAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAACgAAAAAACAAAAAA0WmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUEABQQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAABQAAAAAFAAAAAAAAABQAAAAAAAAAUAAAAAFAAAAABQAAAAAEFAAAABQAAAAUAAUBQAAAAUAAAAAFAAQAAUAAAAAFAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAUEBQAAAAABAAAAAaLTIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKCAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAKAAAAAoAAAAAAAAAAKAAAAAAAACgAAAAAoAAAAAAKAAAAAgAoAAAAKAAACgAACgKAAACgAAAAAoAACACgAAAAAoAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAACgAAAAAACA0WmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAFAAAAAUAAAAAAAAAFAAAAAAAAABQAAAAAUAAAAAAFAAAAAQAUAAAAFAAABQAAABVAAABQAAAAAUABABQAAAAAUAAAAAFAAAAAAAABQAAAAAAAQAAAFABAAAAAAAAAAAAAAQAAAAAAAAAEAAAAUAAAAAAaDTIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAACgAAKAAAAAAAAAACgAAAAAAAAoAAAAAAKAAAAAACgAAAAIKAAAACgAAAAoAAAAKKAAAAoAAAKAAAgAoAAAAKAAAAACgAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAgAAACgAAADQaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAUAAABQAAAAAAAAAUAAAAAAAAAFAAAAAABQAAAAAAUAAAABBQAAAAUAAAAFAAAABRQAAFAAAABQAAEAFAAABQAAAAAUAAAAAAAAFAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAUaDTIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAoAACggAAAAAKCAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAAAAAoACgAAAAAAAAAAoAAAAAAAAAKAAAAAACgAAAAAAoAAAACCgAAAAoAAAKAAAAACgCgAKAAAACgAAAqAAAACgAAAAoAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAIAAADQbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAUEAABQAQAFBAAUEAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAABQFAAAAAAAAABQAAAAAAAAAUAAAAAAFAAAAAAABQAAAEAFAAAABQAAAUAAAAFAAFAAUAAAFAAAABUAAAFAAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAAAAAAAAAAAAQAGg2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCAAoIAACgAAAAAAAAgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAKAoAAAAAAAAAAKAAAAAAAAACgAAAAAAoAAAAAAAKAAAAgAoAAAAKAAACgAAAAoAAAoCgAAAoAAAKAgAAAoAAAAKAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAACA0G2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAABRQAAAAAAAAAFAAAAAAAAAABQAAAAAAUAAAAAAAFAAAQAUAAAAFAAAABQAAAAUAAAAVQAAAUAAAFAQAAUAAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAQFBAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFFAAAAAAAAAUAAAAAAAAAAFAAAAAAABQAAAAAAUAAAABBQAAAAUAAAAFAAAABQAAAUUAABQAAAUBAAABQAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFFAAAAAAAAAUAAAAAAAAAAFAAAAAABQAAAAAAAUAAAABBQAAAAUAAAAFAAABQAAAAUUAABQAAAUBAABQAAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABAAAUEAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAUAAAAAAABQAAAAAAAAAAUAAAAAAAFAAAAAAABQAAAEAFAAAABQAAAAUAAAFAAABQABQAFAAABQEAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAUAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAAABQAAAEAFAAAABQAAAAUAAAFAAABQABQFAAABQEAAAFAAAABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAUAAAAAAABQAAAAAAAAUAAAAAAAAFAAAAAAABQAAAEAFAAAAABQAAAAUAAAFAAABQABQFAAABQEAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAUAAAAABQAAAAAAAAUAAAAAAAAFAAAAAAABQAAAEAAFAAAAABQAAAUAAAAFAAABQAABVAAABQEAAFAAAABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAABQAAAAFAAAAAAAAABQAAAAAAAUAAAAAAAFAAAAQAAAUAAAAAFAAABQAAAAUAAAFAAFUAAAFAQAAAUAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFABAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAFAAAAAAUAAAAAAAAFAAAAAAAABQAAAAAAUAAABAAABQAAAAAUAAAAFAAABQAAAAUAUBQAAAUBAAABQAAAUAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAQAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUAEAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAUAAAAABQAAAAAAAAUAAAAAAAFAAAAAAABQAAEAAAFAAAAABQAAAAUAAAAFAAABQBQAFAAABQEAAFAAAABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAUAAAAABQAAAAAAAAAUAAAAAAAFAAAAAABQAAAEAAAFAAAABQAAAAAUAAAAFAAAFUAAAFAAABUAAAFAAAABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABQQAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAABQAAAAAFAAAAAAAAABQAAAAAAAUAAAAAAFAAAAQAAAUAAAAFAAAABQAAAAUAAAUBQAAAUAABBQAAAUAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAHObZAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAUAEAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAUAAAABQAAAAAAAAAUAAAAAAAFAAAAAABQAAAEAAFAAAAABQAAAAUAAAAFAAFAAUAAFAAAQAUAAAFAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABzm2QAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAFABAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAFAAAAAAAUAAAAAAAAAFAAAAAAABQAAAAAAUAAABAABQAAAAAUAAAAFAAAABQABQAFAAABQEAFAAAABQAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAc5tkAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABQAQAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAABQAAAAFAAAAAAAAAABQAAAAAAAUAAAAAAAFAAAAQAUAAAAAFAAAABQAAAAUAAUABQAAUABABQAAAAUAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAHObZAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAUAAAEAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAUAAAABQAAAAAAAAAAUAAAAAAAFAAAAAAABQAAAAEFAAAAABQAAAAUAAAAAFAFAAUAAAFAQAUAAAAFAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABzm2QAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAABQAAAAAFAAAAAAAAABQAAAAAAAAUAAAAAAAFAAAAAQUAAAAAFAAAABQAAAAAUAUABQAAAUABABQAAAUAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAHObZAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUEAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAUAAABQAAAAAAAAAAUAAAAAAAAFAAAAAAABQAAAAAVAAAAABQAAAAAUAAAAFAFAAAUAAAFAQAUAAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABzm2QAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAABQAAAFAAAAAAAAAABQAAAAAAAAUAAAAAAAFAAAAABUAAAAAFAAAAABQAAAAAUAUABQAAAUABABQAAAUAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAHObZAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAFAAAAAUAAAAAAAAAAFAAAAAAAABQAAAAAAAUAAAAAFQAAAAAAUAAAAFAAAAABQBQAFAAAABQAEFAAABQAAAAUAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAc5tkAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAFAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAAUAABQAAAAAAAAAAAUAAAAAAAAFAAAAAAABQAAAAAVAAAAAABQAAAAAUAAAAAFAFAAUAAAFAAAQUAAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAFAAAUAAAAAAAAAAAFAAAAAAAABQAAAAAAAUAAAAABBQAAAAAAUAAAAAFAAAABQBQAAFAAABQAAEFAAABQAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAABQAFAAAAAAAAAAAABQAAAAAAAAAUAAAAAAFAAAAAABUAAAAAAFAAAAABQAAAAAUAUABQAAAAUAAFQAAAUAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAUABQAAAAAAAAAAAAUAAAAAAAAAFAAAAAABQAAAAAEFAAAAAAABQAAAAAUAAAAFAFAAAUAAAFAAABUAAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAFAAUAAAAAAAAAAAFAAAAAAAAAABQAAAAAAUAAAAABBQAAAAAAAUAAAAAFAAAAABRQAAFAAAABQAAVAAABQAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAEAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAABQAFAAAAAAAAAAABQAAAAAAAAAAUAAAAAAFAAAAAABUAAAAAAAFAAAAAABQAAAAUUAAABQAAAUAAAFQAAUAAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAABAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAUBQAAAAAAAAAAAUAAAAAAAAAAAFAAAAAABQAAAAAAUBAAAAAAABQAAAAAUAAAAFFAAAAUAAAAFAABUAAAFAAAABQAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAQAAAAFBAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAUABQAAAAAAAAAAAUAAAAAAAAAAAFAAAAAABQAAAAAAAUBAAAAAABQAAAAAUAAAAFFAAAAUAAAAFAABUAAAFAAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAQFBAAUEBQQAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAFBAUBQAAAAAAAAAAUAAAAAAAAAAAFAAAAAAABQAAAAAAAUAABAAAABQAAAAAUAAAAFFAAAAUAAAAFAAAQUAAAFAAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAQFBAAAAUVAAAAAAAAAAAAAAAAAABQAAAAAAAAABQAAFAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAFAAAAAAABQAAEAAAAFAAAAABQAAAABVAAAABQAAAUAAAFQAAAAUAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAAUEABQQFFQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAUAABQAAAAAAAAAUAAAAAAAAAAAAFAAAAAAABQAAAAAAAUAAABAAABQAAAAUAAAAAAFFAAAAUAAAFAAAABUAAAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAQFABAUEFAAAAAAAAAAAAAAAAAABQAAAAAAAAAABQAFAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAFAAAAAAABQAAAEAAAFAAAABQAAAAAAUUAAABQAAAAUAAAFAQAAAUAAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAUEABQQUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAFAAAUAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAUAAAAAAAFAAAAQAAAUAAAAAFAAAAABRQAAAFAAAABQAAAAUBAAABQAAAAUAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAEABQQUBQQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAUABQAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAABQAAAAAAUAAABAAAABQAAAAAUAAAAAAFFAAAAUAAAAFAAAABQEAAAFAAABQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAQAFBABVBAAAAAAAAAAAAAAAAAABQAAAAAAAAAAABQFAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAEAAAFAAAAABQAAAAAAUUAAABQAAAAUAAAAFAAQAAUAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABAUAEAFUEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFAAUAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAUAAAAAAAFAAAAAQAAAUAAAAAFAAAAAABQBQAAAFAAAABQAAAAUBAABQAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQBUABQQFBAAAAAAAAAAAAAABQAAAAAAAAAAAABQFAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAEAAAFAAAAAABQAAAAAAUAUAABQAAAAUAAAAFAAQAUAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAQFBAUEAAAAAAAAAAAAFAAAAAAAAAAAAAAFUAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAUAAAAAAFAAAAAAQAAAUAAAAAAFAAAAAABQBQAAAFAAAABQAAAUABAABQAAAAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAEAAAFAAAAAABQAAAAAAAUAUAABQAAAAUAAAFAAQAAUAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAQFBAAAAAAAAAABQAAAAAAAAAAAAAAAUAAUAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAEAAAFAAAAAAABQAAAAAAUAAUABQAAAAUAAAAFAQAAUAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAQFBAAAAAAABQAAAAAAAAAAAAAAAUAAUEBQAAAAAAAFAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAQAAUAAAAAAAFAAAAAAABQBQAAFAAABQAAAAUBAAAABQAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAABAUEAAAAAAAFAAAAAAAAAAAAAAAABQAABQAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAQAAUAAAAAAAAFAAAAAABQABQAFAAABQAAAAUBAAAAAABQAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAABAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAUAAAAAABQAAAAAAAAAAAUAAAAAAAAAFAAAAAABQAAAAAAEAAFAAAAAAAABQAAAAAAUAAUABQAAAUAAAAFAAQAAAAAAUAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAQAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAFAAAAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAAAUAAAAAABAABQAAAAAAAAUAAAAAAFAAAFAUAAAFAAAAABQAEAAAAAAAFAAAAAABQAAAAAAAAAAAAAAUAAEAAABQAAAAAAQAAAAAAAAAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAQAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAFAAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAAAUAAAAAABAABQAAAAAAAAUAAAAAAAFAAFAUAAAFAAAAAABQAAEAAAAAAFAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc9tkAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABAUEAAFAAAAAAAAAAAAAAAABQAAAAAAAAAABQAAFAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAAQAAUAAAAAAAAAFAAAAAABQAABQFAAABQAAAAAAAUAAABAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHPbZAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAQAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAFAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAAAAUAAAAAAABABQAAAAAAAAAUAAAAAAFAAAFAUAAAFAAAAAAAAABQAAEAAAFAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc9tkAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAABAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAUABQAAAAAAAAAAAUAAAAAAAAAFAAAAAAABQAAAAAAAAEFAAAAAAAAABQAAAAAAUAAAUBQAAAAUAAAAAAAAAFAAAQAAAUAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABz22QAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAEAFAAAAAAAAAAAAAAAABQAAAAAAAAAAABQFAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAAAAAQUAAAAAAAAFAAAAAABQAABQFAAAAABQAAAAAAAAAUAABAAABQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHPbZAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFAAUAAAAAAAAAAAAFAAAAAAAAABQAAAAAAAUAAAAAAAAABBQAAAAAAAAUAAAAAAFAAAFAUAAAAAAFAAAAAAAAABQAAAEAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaDbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAAAAAAAAAAAAAAACgAAAAAAAAAAAACgKAAAAAAAAAAAACgAAAAAAAAoAAAAAAAAKAAAAAAAAAAgoAAAAAAAAAKAAAAACgAACgKAAAAAAACgAAAAAAAAAoAAACAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANBtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAUEAAAAAAAAAAAAAAAFAAAAAAAAAAAAAFUAAAAAAAAAAAAFAAAAAAAAABQAAAAAAAAUAAAAAAAAAAFQAAAAAAAAAUAAAAAFAAAAFAUAAAAAAAFAAAAAAAAABQAAAEAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaDbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAoIAAAAAAAAAAAAAAAKAAAAAAAAAAAAAKAoAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAAoAAAAAAAAAAKgAAAAAAAAAoAAAAAKAAAAAKAoAAAAAAAAKAAAAAAAACgAAAIAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAADQbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAUBQAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAABQAAAAAAAAAAUBAAAAAAAABQAAAAAUAAAAAAUBQAAAAAAAAUAAAAAAAAFAAAAQAAAAAAUAAAAAAAAFAAAABAAAAAUAAAAAAAAAAEAAAAAAAABQaDbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAoIAAAAAAAAAAAAAKAAAAAAAAAAAAAAKoAAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAAAoAAAAAAAAAAKAgAAAAAAoAAAAAKAAAAAAAAACigAAAAAAAKAAAAAAAACgAAAAIAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAANFtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABAAUEAAAAAAAAAAAAAAFAAAAAAAAAAAAAFBFFAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAAABQAAAAAAAAAAUBAAAAAABQAAAAAUAAAAAAAAAAFAFAAAAAAAUAAAAAAAAFAAAAAAQFBAAUEFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABotsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAIAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAKogKAAAAAAAAAAAAoAAAAAAAAAKAAAAAAAAACgAAAAAAAAAAAoACAAAACgAAAAAoAAAAAAAAAAAKAAKAAAAAAAoAAAAAAAKAAAAAAAAAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANFtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAUEBQAAAAAAAAAAFAAAAAAAAABQAAAAAAAAAUAAAAAAAAAAAFAAQAAAAUAAAAAAFAAAAAAAAAAABQABQAAAAAAFAAAAAAAABQAAAAAAAAAEFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABotsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKKAgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAKCAoAAAAAAAAAACgAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAACgAIAAAAKAAAAAACgAAAAAAAAAAAoAAAoAAAAAACgAAAAAAAAoAAAAAAAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0W2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFFAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAFAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAAAUABAAAABQAAAAAAUAAAAAAAAAAAAFAAAFAAAAAAAUAAAAAAAAFAAAAAAAAAQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGi2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAACAAooCAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAoAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAACgIAAAAAKAAAAAACgAAAAAAAAAAAAAoAAoAAAAAAACgAAAAAAAAoAAAAAAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0W2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFFQAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAFAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAUBAAAABQAAAAAAAAUAAAAAAAAAAAAAFAAFAAAAAAAAUAAAAAAAAFAAAAAAAAQAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGi2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAKAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAoACAAAACgAAAAAAAAoAAAAAAAAAAAAAKAAKAAAAAAAAoAAAAAAAAAKAAAAAAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANFtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAUAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAABQEAAAAAFAAAAAAAAAABQAAAAAAAAAAAAUAAUAAAAAAABQAAAAAAAAUAAAAAAABABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/2Q==", skyBoxDown: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAEC/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ADKgAAAAAAAAAAIAAAAACgAgAAAAAAIAAACAAAAAAoAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAACAAAAAAAgAAAIAAAAACgAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAIAAAACgAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAIAAAACgAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAIAACgAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAACgAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAKAAAACgAAgAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAgAAKAAAACgAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAIACgAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAIACgAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAACgAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACggAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAACAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAIAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAgAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAgAAKAACAAAAAAAAoAAAAIAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAgAAKAAAAACAAAAAAoAAAIAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAgAKAAAAAAAACAAAAAoAIAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAIAAACgAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAACAoAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAIAAAAACgAAAAAAAAAAgAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAICAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAIAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAMgAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAADIAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAICgAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAADIAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAKAACAAAAAyAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAADIAKAAAAAAAAACAAAoAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAyCgAAAAAAAAAgAAAAKAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAAAKAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACAAAoAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAgAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAgAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAgAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAACgAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAACAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAACAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAACAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAKAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAIAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAKAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAIAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACAgAAAAKAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAoAAAAAAAAMgAAoAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAACgAAAAAAAyCgAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAIAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAoAAAAAAMgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAKAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAKAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAKAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAgAAKAAAAAAAAAAACAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAgAAAAAKACAAAAAAAAAAAoAAAAAAIAAAAAAACgAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAIAAAAACgAAAAAAAAAgAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAIAAAAAACgAAAgAAAAAAAAAKAAAAACAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAACgAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAIAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAgAAAAAKAAAAAAAAAAAAAAACAAAAAAoAAAIAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAIAAAAACgAAAAAgAAAAKAAAAAAAAAAAAAAACAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAACAAAAAAAAoAAAAIAAACgAAAAAgAKAAAAAAAACAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAIAACgAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAACAAAoAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAIAAACgAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAgAAKAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAgAKAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAgAAAKAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAIAAACgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAgAAAAAKAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAIAAAACgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAgAAAKAAAAACgAAAAAAgAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIACgAgAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAgKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAACgAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAKAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAoAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAACgAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAKAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAIAAAAAAACgAAgAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAACAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAoAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAoAAAAAAAAAAKAAAAAACAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAKAAAAAAAAAACgAAAAAAgAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAgAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAACAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAoAAAIAAAACAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAoAAAAIAAAACAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAACgAAAAAAoAAAAAIAAACAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAKAAAAACAAAAAgAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAoAAAAAIAAAACAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAgAAAAAAKAAACAAAAAgAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQIAAAAAAAAAAAAAACAAAAAAgKAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ACAAAAAAAAAAAAgAAAAIAAAACgAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAgAAAAAAAAAAIAAACAAAAKACACgAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAADQIAAAAAAAAAACAAAAgAAAAAAAAKAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAACAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAgAAKAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAIAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAACAAAoAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAACAAAoAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAACAAAoAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAICgAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAKACAAAAAAoAAAIAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAKCAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAACAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAACAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAgAAAAAKACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAIAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCigIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAKAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAoCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAIAAAACgAAAAAAAAgAAAAKAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAKAgAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAACKKAAgAAAAAAAAAAAAAAAAAAgAAACgAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAACggAAAAAAAAAAAAAAIAAACKAKAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAoAAAAIAAAAAAAAAAACAAAAgCgCgAIAKACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAACAAAAAAAAKCAACgAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAIAAAAAAAAAAAACgAAoAAAAAAAAIAACgAAgAAAAAAAKAACAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAACAAAAAAAAAAAAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAAAAAKAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAACAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAAAKAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAIAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAoAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAoAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAKCAAAAAAAAAAoIACgAgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAADIKAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAKAACAoIAAAAAAACgAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAKIAACgIAAKAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAKCAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAKACAoIAAAAAAAAACgAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAoAAAAIAAogAAAAKgAoAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAoIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAoAICggAAAAAAAAAAKAAAACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAogAAAAKAgAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAoIAAAAAAAAAACAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAKAACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAoAgAAAKAgAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAKAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAKAAAACACgAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAACgCAAAoACAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIoAAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAACgAACAAAoACAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAoICgAACAAAAoACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAACgAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAACgAAAAACAAAAAoAACAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAACgAAoAAAAIAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKCAAoAAAAAAAAAAgAAAAKAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAoAAKAAAAAAACAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAACgACAAAAAoAAAAAAAIAAAACgAAIAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAKAACgAAAAAAAAgAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAACgAACAAAAAAAoAAAAAAAIAACgAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAKAAACgAAAAAAAgAAAAAAAIAAAoAAIAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAoAAgAAAAAAAKAAAAAAAAAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAoAAAAKAAAAAAACAAAAAAAgACgCAAAqAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAKAAAAAAIAAACgAAAAAAAAAAAAAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAKAAAAACgAAAAAAgAAAAAAAIAoAgAAAKgAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAIAAAAAACAKAAKAgKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAIoAgAAAAKgAoAAAAAAAAIAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAgAAAAAIAoAAAAAoACAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAKAAAAAAAAAAAAAAAAAAAAAAACAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAigCAAAAAqACgAAAAAAAAAgAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAACAAAAAigAAAAAAACoAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAoAAAAAAAAAAAAAIAACgAgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAIoAgAAAAKAgAoAAAAAAAAAAIAAACAAAoAAAAAKAAAACAAAAAAAAAAAoAAAAAAAIAAAACAAAAAigAAAAAAAgoAAAAAAAACgACAAoAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgCgAAAAAAAAAAAAgAAAAAAAAAAAAAAAoAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAogAIAAACgIAKAAAAAAAAAAACAAAAgAKAAAACgAAAAAAgAAAAAAAAKAAAAAAAACAAAAAAgAACiAAAAAAAAIKAAAAAAAAAoAgAAAKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAACgAAAAAAAAAAAAAAAAAAAigAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAKIAACAAAoAKgAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAACAAAAAAAAoAAAAAAAAIAAAAACAAAKIAAACAoAACCgAAAAAAAKAAAIAACgAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAoAAAAAAAAAAAAAAAAAAAIAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACggAAAKCACgAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAKAIAAAAAACoAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAgAAAAAKAAAAAAAAACAAAAAAgACgCAAAAgKAAACoAAAAAAACgAAAAAAAAAgAAAAAAAAAAKCAoAIAAAAAACgAAAAAAgAAoAAAAAAAAAAAAAAAAAAAIAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgCgACAAAAAoCAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAAKAAIAAAAAAACoAAAAKACAKAAAAAAAAACAAAAAAAAAAoAAIAAAAAAAAAACgAAAAAgAoAAAAAAAAAAAAAAAAAAAIAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACoAAAAAAAAAAAAAAAAAKAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAKAAAAAACAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACAKAAIAAAAAACoAAAAAKACAKAAAAAAAACAAAAAAAAAAAoAAIAAAAAAAAACgAAAAAAAgoAAAAAAAAAAAAAAAAAAAIAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAACgIAAAAAAAAAAAAAAAAAAKAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAgCgACAAAAAoCAAAAAACggACgAAAAAAAgAAAAAAAKAAAAACAAAAAAAAAAAAoAAAAIAKAAAAAAAAAAAAAAAAAAACAKAAAAAAACAAAAAAAAAAAAAAAAAAAACgAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAigAACAAAoCAAAAAAAAAAAoAAAAAIAAAAAACgAAAAAAAAAgAAAAAAAAAAAAKACACgAAAAAAAAAAAAAAAAAAAAgCgAACAAoAACAAAAAAAAAAAAAAAAACgAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAICgAAAAAAAAAAAAAAgAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAIoAAAAAIAAAAAAAAAAACgAAAgAAAAAAAKAIACgAAAAIAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAAIACgAAIAAAKACAAAAAAAAAAoAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAIAAAAAAAAAAACAKAACAAAAAAAAAAAAAAAACgAAgAAAAACgCAAAoAAACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACgAAAAAAAAgAAoAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAoAgAAKAAAgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAoAAAAAAAAIAAKAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAoAgAKAAAAAAgAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAAAAAAAIAAAKAAAAACAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAgKAAAAACAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAgAAAACgAAAAAAAAAAAgAAAAAAAAoAAAAAIAAAoAAAAIAAKAAAAAAAACAKAAAAAAAAACAAACgAAAAAAgAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAAAoAAAAAIAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAACAAAAAKAAAAAAAAAAAACAAAAAAACgAAAgAACgAAAAgAAAAoAAAAAAAIAoICgAAAAAAgAAAAoAAAAAAIAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgAAKAAAAAACAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAgAAAACgAAAAAAAAAAAAgKCAAAAAAAAAAAoAAAAAAAAAIAKAoAAIAAIAAoIAAAAAAAAAAAAKAAAAACAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAACgAAAAAAAAgKCAoAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAACgAAAAIAIAAAAAACgAAAAAAAAAAAAAAgAAAAAKAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoAAACAoAAAAAAAAAgAAAAAAAKAAAAAAAAAAAKAAAAAgAiggAAAAAoAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAKAgAAKCAoAAAAAAgKCAAAAAAAAAoAAAAAAAAoAAAAAACAogCAAAACgAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoCAAAAoAAAAAgKAAAAAAACAAAAoAAAAAAoAAAAAAAACAoiAAAAACgAAAAAAAAAAAAAAAAAAAKCAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAICgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAqAAAAoAAAAAgAKAAAAAACAAAAoAAAAAqAoAAAAAAAAIIoIAAAAKAAAAAAAAAAAAAACgAgAAACgAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAoAAAAAAAAIAACgAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAoCAoiCqAAIAAACgAAAAAAAgAAAAKCAoqAAAAAAAAAoAIIAAAAACgAAAAAAAAAAAAoAAAAAAIAoAAIAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAgAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKCIACgAAAAACgAAAAAAAAgAAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAACAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAoIAAAAAAAAACgAAAAAAAAAgAAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAoAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKCAAAAAAAAAoICgCAAAoAACAAAAAAACgAAAAAAAAAAAAAgAAAKAAAAAAAAAACgAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAA0AAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKAACAoIAAAAAAACgACAAoAAACAAAAACgAAAAAAAAAAAAAAgAAKAAAAAAAAAAACgAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAA0AAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAKAAAAACAAAAAAAoAAgAAKAAAgAAAAoAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAoAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAACgAAAAAAAgAAAAAKAAAIAACgAAIAAAKAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAACAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKIAAAAAAAgAAAAAKAAAAIACgAAIAAAAKAAAAAAAAAAAoIAIoIKAAAAAACgAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAIAAAAAgAAAAAAAKAAAAAAAAACAAACgAAAAAAAAKCAoAIAAAAAAAAKAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAgAAACACgAAAgACgAAAAAAAAAgAAAoAAAAAACgAgKAAAACAAAAACgAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAKAAAAAAAAAAAACAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAACAAKAAAAAAAACAAACgAAAAAAAKAAAAAACAAAAACgAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAgCgAAAAAAAgAAAoAAAAAAAAACgAAAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAigAAAgAAAAAAoAAAAAAAAAACgAAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAKCAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAACgAgAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAKAAAAAACAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAKAACAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCoAAAAAAAAAIAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAKACAAAAAAAAAAAAAKAAAKgAAAAAAAAAgAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKoAIAAAIAAAAAAAACqAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAIACgAAgAAAAAAAAAAKACKAAAKgAAAAAAAAAAgAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAACAAAAAAAAAAAAAAAoAAAAAAAAIAAAAACgAAKACAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAigAAAgoAAAAAAAAAIAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAIAAAACgAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAACAAoAAAKACKAAACCgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAgCggoAAKAACAKCCgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAIAACgAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAACKAAKgAAoAAAICgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACggAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAKAAACAAAAAAAAAoAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAACiAAqAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAoIAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAoAAIAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAIAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAACgAAAAgAAAAAAAAKAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAICgAAAAAoAAAAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAiAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoIAAAAAAAAAAAAAACAAAAAAoAAAAKAAAACAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACCAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAoAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAIAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAoAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAIAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAgAAAAAAKAAAAAAAAAACAoAAAAAAIAAAAAACgAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAICgAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAACAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAIAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAKAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAICgAAAAAAAAAAAAAAoAAAAAAAAIACgAAAAAAAAAAAAAAAAAgAAAAAAKAAAAACAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAIAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAgAAAICgAAAAAAAAAAAAAAoAAAAAAAIAACggAAAKAAAAAAAAAAAAAACAAAAAAAoAAAIAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACKCAACgAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgKAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAACAAAoAAAAAAAAIAAAAAAAAAAAAACKAAACACgAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAACAAAAoAAAAKAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAIAAAAAAAACgAAAAAgAAAKCAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAIAAAACgAAAAAAAgAAIAoAAAAoACACKAAAAACACgAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAACAAAAAqgAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAIAAAAAACgAAAAAgAAAKACAAAAAAAAoAAAAAAAAAAAIAAAAAAAAACggAAAAAAAAAAKACAAAAAAAAAAgAAAAAKAAAAAACAAigAAAAAAAAAAAACAAoACACgAAgAAKAAAAAACgAAAAAAAAAAAgAAAAAIAAoAAoAAACAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAgAAAAAKAAAAAACAAAA/9k=" }, qd = new bh, jd = function () { var A = "Success", e = "", t = "", i = !1, o = 0, n = null; return function (r, a, s) { return 5 === r ? document.querySelector(".loading").classList.add("hide") : A = r, "error" === r && (i = !1), void 0 !== a && (e = a, void 0 !== s && (i = s)), 5e3 > (new Date).getTime() - o ? e !== t && (n = qd.notify(A, { size: "mini", rounded: !0, position: "center top", sound: !1, delay: i, msg: e }), o = (new Date).getTime(), n.$el.childNodes[1].childNodes[0].title = e) : (n = qd.notify(A, { size: "mini", rounded: !0, position: "center top", sound: !1, delay: i, msg: e }), o = (new Date).getTime(), n.$el.childNodes[1].childNodes[0].title = e), t = e, n } }(), Hd = function (A, e) { var t = A.toolId, i = A.Flag, o = A.viewer, n = e.toolbarTop, r = function (A) { var e = o.viewerImpl.getBoundingBoxByIds([A]); return e.max.distanceTo(e.min) / 10 }, a = this; this.deleteListener = null, this.addListener = null, this.updateListener = null, this.imageSize = 100; var s = qd.window({ title: "标签", id: "markWindow" + t, width: 356, height: 848, closeOnEsc: !1, closeButton: !0, afterWindowHide: function () { var A = document.getElementById("mark" + t); i.mark = !1, A && (A.style.backgroundColor = "", A.querySelector(".yj-icon").className = "yj-icon label-icon"), document.getElementById("markColorModal" + t) && (document.getElementById("markColorModal" + t).style.display = "none"), o.viewerImpl.cameraControl.dispatchEvent(Rc.ON_CAMERA_CHANGE) }, content: '
标签类型:
标签样式:
标题:
背景色:
标签位置(点击模型获取):
构件:
备注栏数:
' }); s.$el.addClass("markWindow"); var l = function (A) { if (A.intersectInfo) { var e = "", i = function A(e) { if (e.intersectInfo) { o.viewerImpl.modelManager.removeEventListener(Rc.ON_CLICK_PICK, A); var t = o.viewerImpl.camera, i = e.intersectInfo.point.clone(), n = t.position.clone(), r = i.clone().sub(n), a = r.length(), s = o.viewerImpl.getBoundingBoxByIds([e.intersectInfo.selectedObjectId]), l = new CA(n, i.sub(n).normalize()).intersectBox(s), c = Math.min(s.max.x - l.x, l.x - s.min.x), h = Math.min(s.max.y - l.y, l.y - s.min.y), d = Math.min(s.max.z - l.z, l.z - s.min.z), p = Math.min(c, h, d); return { point: e.intersectInfo.point, distance: a, face: p === c ? "x" : p === h ? "y" : "z", eye: r, box: s } } }(A), n = document.getElementById("updateMark" + t); xh.hasClass(n, "hide") ? (e = s.$el.querySelector(".mark .first-floor select").value, s.$el.querySelector(".mark ." + e + " .startX ").value = A.intersectInfo.point.x, s.$el.querySelector(".mark ." + e + " .startY ").value = A.intersectInfo.point.y, s.$el.querySelector(".mark ." + e + " .startZ ").value = A.intersectInfo.point.z, s.$el.querySelector(".mark ." + e + " .component ").value = A.intersectInfo.selectedObjectId, "plane" === e && (s.$el.querySelector(".mark ." + e + " .face ").value = i.face)) : (e = "block" === n.querySelector(".dom").style.display ? "dom" : "block" === n.querySelector(".sprite").style.display ? "sprite" : "plane", n.querySelector("." + e + " .startX ").value = A.intersectInfo.point.x, n.querySelector("." + e + " .startY ").value = A.intersectInfo.point.y, n.querySelector("." + e + " .startZ ").value = A.intersectInfo.point.z, n.querySelector("." + e + " .component ").value = A.intersectInfo.selectedObjectId, "plane" === e && (n.querySelector("." + e + " .face ").value = i.face)) } }, c = new Od(o.viewerImpl), h = new Gd(o.viewerImpl), d = new Vd(o.viewerImpl), p = s.$el.querySelector(".mark .dom .markColorInput"), g = new Hh(p, { hasOpacity: !1 }); p.value = "rgb(255,0,0)"; var u = g.element; u.id = "markColorModal" + t, u.className = "markColorModal", document.getElementById("mark" + t).parentNode.appendChild(u); var f = qd.prompt({ title: "修改标签", id: "updateMark" + t, width: 356, height: 400, closeOnEsc: !1, closeButton: !1, buttons: { ok: { class: "lobibox-btn lobibox-btn-default", text: "确定", closeOnClick: !0 }, cancel: { class: "lobibox-btn lobibox-btn-cancel", text: "取消", closeOnClick: !0 } }, content: '
标签id:
标题:
背景色:
标签位置(点击模型获取):
构件:
备注栏数:
标签id:
图标选择:
标签大小:
标签位置(点击模型获取):
X:
Y:
Z:
构件:
标签id:
图标选择:
标签大小:
标签位置(点击模型获取):
X:
Y:
Z:
构件:
标签所在面:
' }); f.setPosition({ left: o.viewportDiv.offsetWidth - f.width - 5, top: 60 }), f.promptHide(), f.$el.addClass("updateMark"), u.querySelector(".btn-yes").addEventListener("click", (function () { var A = document.getElementById("updateMark" + t); xh.hasClass(A, "hide") ? s.$el.querySelector(".mark .dom .colorRect").style.backgroundColor = p.value : f.$el.querySelector(".updateMarkPrompt .dom .colorRect").style.backgroundColor = p.value })); var m = qd.confirm({ title: "请再次确认:", id: "confirm-mark" + t, width: 356, height: 87, closeOnEsc: !1, closeButton: !1, iconClass: !1, msg: "是否要删除此标签?" }); m.setPosition({ left: (qd.viewport.offsetWidth - m.$options.width) / 2, top: 5 }), m.confirmHide(), xh.addEventListener(n.querySelector("#mark" + t), "click", (function () { i.mark ? (s.windowHide(), o.viewerImpl.modelManager.removeEventListener(Rc.ON_CLICK_PICK, l), f.promptHide(), u.style.display = "none") : (document.getElementById("mark" + t).querySelector(".yj-icon").className = "yj-icon label-icon active", i.mark = !i.mark, s.windowShow(), o.viewerImpl.modelManager.addEventListener(Rc.ON_CLICK_PICK, l)) })); for (var C = s.$el.querySelectorAll(".lobibox .lobibox-body .showColorModal"), v = 0; C.length > v; v += 1) C[v].addEventListener("click", (function () { u.style.display = "none" === u.style.display ? "block" : "none" })); for (var I = f.$el.querySelectorAll(".lobibox .lobibox-body .showColorModal"), E = 0; I.length > E; E += 1) I[E].addEventListener("click", (function () { u.style.display = "none" === u.style.display ? "block" : "none" })); for (var B = s.$el.querySelectorAll(".lobibox .lobibox-body .picture .chosed-pic"), x = 0; B.length > x; x += 1) B[x].addEventListener("click", (function () { var A = this.parentElement.lastChild; A.style.display = "none" === A.style.display ? "block" : "none" })); for (var S = s.$el.querySelectorAll(".lobibox .lobibox-body .picture .file-choose span"), w = 0; S.length > w; w += 1) S[w].addEventListener("click", (function () { this.parentElement.querySelector("input").click() })); for (var M = s.$el.querySelectorAll(".lobibox .lobibox-body .picture .pic-list li"), b = 0; M.length > b; b += 1) M[b].addEventListener("click", (function () { var A = this.parentElement.parentElement.querySelector(".chosed-pic"), e = this.querySelector("img").getAttribute("src"); A.dataset.chosedUrl = e, A.querySelector("img").setAttribute("src", e), A.parentElement.lastChild.style.display = "none" })); s.$el.querySelector(".mark .first-floor select").addEventListener("change", (function () { for (var A = this.value, e = s.$el.querySelectorAll(".mark .second-floor"), t = 0; e.length > t; t += 1) e[t].style.display = "none"; s.$el.querySelector(".mark ." + A).style.display = "block", u.style.display = "none" })), s.$el.querySelector(".mark .third-floor .showList").addEventListener("click", (function () { var A = s.$el.querySelector(".mark .forth-floor"); "none" === A.style.display ? (A.style.display = "block", this.innerHTML = "隐藏标签列表") : (A.style.display = "none", this.innerHTML = "展示标签列表") })), s.$el.querySelector(".mark .third-floor .addMark").addEventListener("click", (function () { u.style.display = "none"; var A = s.$el.querySelector(".mark .first-floor select").value, e = [], t = null; if ("dom" === A) { var i = s.$el.querySelector(".mark .dom .title ").value; "" === i && (i = "标签"); var n = Kd.getColorArrayFromRGBA(s.$el.querySelector(".mark .dom .colorRect").style.backgroundColor), l = parseInt(s.$el.querySelector(".mark .dom .text-tab ").value, 0), c = null; if (l > 10) return void jd("warning", "备注栏不可超过10个", 5e3); if (l > 0) { c = document.createElement("div"); for (var h = 0; l > h; h += 1) c.innerHTML += '' } var d = s.$el.querySelector(".mark .dom .component ").value; if (e[0] = Number(s.$el.querySelector(".mark .dom .startX ").value), e[1] = Number(s.$el.querySelector(".mark .dom .startY ").value), e[2] = Number(s.$el.querySelector(".mark .dom .startZ ").value), isNaN(e[0]) || isNaN(e[1]) || isNaN(e[2])) return void jd("warning", "标签位置错误,无法新建标签", 5e3); var p = o.getScreenCoordFromSceneCoord(e); t = { title: i, color: n, startPosition: [e[0], e[1], e[2]], endPosition: [p[0] + 100, p[1] - 200], domElement: c, componentId: d } } else if ("sprite" === A) { try { var g = s.$el.querySelector(".mark .sprite .chosed-pic").dataset.chosedUrl } catch (A) { return void jd("warning", "未选择标签图标", 5e3) } var f = Number(s.$el.querySelector(".mark .sprite .size ").value); f && f >= 0 || (f = 1); var m = s.$el.querySelector(".mark .sprite .component ").value; if (m && (a.imageSize = r(m)), e[0] = Number(s.$el.querySelector(".mark .sprite .startX ").value), e[1] = Number(s.$el.querySelector(".mark .sprite .startY ").value), e[2] = Number(s.$el.querySelector(".mark .sprite .startZ ").value), isNaN(e[0]) || isNaN(e[1]) || isNaN(e[2])) return void jd("warning", "标签位置错误,无法新建标签", 5e3); t = { url: g, scale: f, useImageSize: !1, width: a.imageSize, height: a.imageSize, position: e, alwaysVisible: !0, componentId: m } } else { try { g = s.$el.querySelector(".mark .plane .chosed-pic").dataset.chosedUrl } catch (A) { return void a.message("warning", "未选择标签图标", 5e3) } var C = Number(s.$el.querySelector(".mark .plane .size ").value); C && C >= 0 || (C = 1); var y = s.$el.querySelector(".mark .plane .component ").value; if (y && (a.imageSize = r(y)), e[0] = Number(s.$el.querySelector(".mark .plane .startX ").value), e[1] = Number(s.$el.querySelector(".mark .plane .startY ").value), e[2] = Number(s.$el.querySelector(".mark .plane .startZ ").value), isNaN(e[0]) || isNaN(e[1]) || isNaN(e[2])) return void a.message("warning", "标签位置错误,无法新建标签", 5e3); var v = s.$el.querySelector(".mark .plane .face").value; v || (v = "x"), t = { URL: g, scale: C, useImageSize: !1, width: a.imageSize, height: a.imageSize, position: e, alwaysVisible: !0, componentId: y, transparent: !0, face: v, useFaceMatrix: !0 } } "function" == typeof a.addListener ? a.addListener(A, t, (function (e, i) { e && a.add(A, i || t) })) : a.add(A, t) })), s.$el.querySelector(".forth-floor").addEventListener("click", (function (A) { switch (A.target.className) { case "deleteMark": a.markDelete(A); break; case "updateMark": a.markUpdate(A); break; case "info": if ("聚焦" === A.target.innerText) { var e = "", i = xh.closest(A.target, "tr"), n = i.querySelector(".id").innerHTML, r = xh.closest(i, "table").className; if ("dom" === r ? e = c.marks[n].componentId : "sprite" === r ? e = h.marks[n].componentId : "plane" === r && (e = d.marks[n].componentId), !e) return void jd("warning", "该标签没有关联构件!", 5e3); for (var s = document.querySelectorAll("#markWindow" + t + " .forth-floor .info"), l = 0; s.length > l; l += 1) s[l].innerText = "聚焦"; A.target.innerText = "失焦", function (A) { var e = o.viewerImpl.getBoundingBoxByIds([A]); if (e.min.x !== -1 / 0 && e.min.x !== 1 / 0) { var t = e.getCenter(new y), i = o.viewerImpl.camera.getWorldDirection(), n = e.max.distanceTo(e.min), r = new y; r.copy(i), r.setLength(n); var a = new y; a.subVectors(t, r), o.flyTo({ position: a, target: t, up: o.viewerImpl.camera.up }, (function () { o.viewerImpl.cameraControl.dispatchEvent(Rc.ON_CAMERA_CHANGE) })), o.highlightComponentsByKey([A]), o.closeTransparentComponentsByKey([A]), o.transparentOtherComponentsByKey([A]) } else jd("warning", "该构件不存在!", 5e3) }(e) } else A.target.innerText = "聚焦", o.clearTransparentList(), o.clearHighlightList(); break; default: if (xh.hasClass(A.target, "hideOrShow")) { var p = xh.closest(A.target, "tr"), g = p.querySelector(".id").innerHTML, u = xh.closest(p, "table").className, f = null; f = "dom" === u ? c : "sprite" === u ? h : c, xh.hasClass(A.target, "hideMark") ? (f.hide(g), A.target.classList.remove("hideMark"), A.target.classList.add("showMark"), A.target.innerHTML = "显示") : (f.show(g), A.target.classList.remove("showMark"), A.target.classList.add("hideMark"), A.target.innerHTML = "隐藏") } } })), s.setPosition({ left: "", right: 5, top: 60 }), s.windowHide(), this.add = function (A, e) { switch (A) { case "dom": this.addDOMMark(e); break; case "sprite": this.addSpriteMark(e); break; case "plane": this.addPlaneMark(e) } }, this.addDOMMark = function (A) { c.add(A, (function (e) { s.$el.querySelector(".mark .forth-floor .dom tbody").innerHTML += "' + e + '' + A.title + '' })) }, this.addSpriteMark = function (A) { h.add(A, (function (e) { s.$el.querySelector(".mark .forth-floor .sprite tbody").innerHTML += "' + e + '' })) }, this.addPlaneMark = function (A) { d.add(A, (function (e) { s.$el.querySelector(".mark .forth-floor .plane tbody").innerHTML += "' + e + '' })) }, this.markDelete = function (A) { var e = xh.closest(A.target, "tr"), i = e.querySelector(".id").innerHTML, o = xh.closest(e, "table").className; m.confirmShow(); var n = ""; "dom" === o ? n = "文字标签" : "sprite" === o ? n = "精灵标签" : "plane" === o && (n = "平面标签"), document.querySelector("#confirm-mark" + t + " .lobibox-body-text").innerHTML = "是否要删除编号为[" + i + "]的" + n + "?", document.querySelector("#confirm-mark" + t + " .lobibox-btn-yes").onclick = function () { "function" == typeof a.deleteListener ? a.deleteListener(o, i, (function (A) { A && a.delete(o, i) })) : a.delete(o, i), m.confirmHide() }, document.querySelector("#confirm-mark" + t + " .lobibox-btn-no").onclick = function () { m.confirmHide() } }, this.delete = function (A, e) { var t = null; if ("dom" === A) { if (t = c) { t.remove(e); var i = s.$el.querySelector(".mark .forth-floor .dom tbody"), o = document.querySelector("tr[markId='" + e + "']"); i.removeChild(o) } } else if ("sprite" === A) { if (t = h) { t.remove(e); var n = s.$el.querySelector(".mark .forth-floor .sprite tbody"), r = document.querySelector("tr[markId='" + e + "']"); n.removeChild(r) } } else if ("plane" === A && (t = d)) { t.remove(e); var a = s.$el.querySelector(".mark .forth-floor .plane tbody"), l = document.querySelector("tr[markId='" + e + "']"); a.removeChild(l) } }, this.markUpdate = function (A) { var e = xh.closest(A.target, "tr"), i = e.querySelector(".id").innerHTML, o = xh.closest(e, "table").className; f.promptShow(); var n = document.getElementById("updateMark" + t); if (n.style.cssText += "z-index:" + (Number(document.getElementById("markWindow" + t).style.zIndex) + 1), "dom" === o) { for (var l = n.querySelectorAll(".sprite , .plane"), p = 0; l.length > p; p += 1) l[p].style.display = "none"; n.querySelector(".dom ").style.display = "block", n.querySelector(".dom .markId").value = i, n.querySelector(".dom .title").value = c.marks[i].title, n.querySelector(".dom .startX").value = c.marks[i].startPosition[0], n.querySelector(".dom .startY").value = c.marks[i].startPosition[1], n.querySelector(".dom .startZ").value = c.marks[i].startPosition[2], n.querySelector(".dom .component").value = c.marks[i].componentId, c.marks[i].domElement && (n.querySelector(".dom .text-tab").value = c.marks[i].domElement.querySelectorAll("input").length), n.querySelector(".dom .colorRect").style.backgroundColor = Kd.getRGBAFromColorArray(c.marks[i].color), n.querySelector(".lobibox-btn-default").onclick = function () { var A = n.querySelector(".dom .title").value; "" === A && (A = "标签"); var e = Kd.getColorArrayFromRGBA(n.querySelector(".dom .colorRect").style.backgroundColor), t = []; if (t[0] = n.querySelector(".dom .startX").value, t[1] = n.querySelector(".dom .startY").value, t[2] = n.querySelector(".dom .startZ").value, isNaN(t[0]) || isNaN(t[1]) || isNaN(t[2])) jd("warning", "标签位置无效,无法更新标签", 5e3); else { var r = parseInt(n.querySelector(".dom .text-tab ").value, 0), s = null; if (10 < r) jd("warning", "备注栏不可超过10个", 5e3); else { if (r > 0) { s = document.createElement("div"); for (var l = 0; r > l; l += 1) s.innerHTML += '' } var c = { title: A, color: e, startPosition: t, domElement: s, componentId: n.querySelector(".dom .component").value }; "function" == typeof a.updateListener ? a.updateListener(o, i, c, (function (A, e) { A && a.update(o, i, e || c) })) : a.update(o, i, c), f.promptHide(), u.style.display = "none" } } } } else if ("sprite" === o) { for (var g = n.querySelectorAll(".dom , .plane"), m = 0; g.length > m; m += 1) g[m].style.display = "none"; n.querySelector(".sprite ").style.display = "block", n.querySelector(".sprite .markId").value = i, n.querySelector(".sprite .picture .chosed-pic").dataset.chosedUrl = h.marks[i].url, n.querySelector(".sprite .picture .chosed-pic img").setAttribute("src", h.marks[i].url), n.querySelector(".sprite .size").value = h.marks[i].scale, n.querySelector(".sprite .startX").value = h.marks[i].position[0], n.querySelector(".sprite .startY").value = h.marks[i].position[1], n.querySelector(".sprite .startZ").value = h.marks[i].position[2], n.querySelector(".sprite .component").value = h.marks[i].componentId, n.querySelector(".lobibox-btn-default").onclick = function () { try { var A = n.querySelector(".sprite .picture .chosed-pic").dataset.chosedUrl } catch (A) { return void jd("warning", "未选择标签图标", 5e3) } var e = n.querySelector(".sprite .size").value; e && e >= 0 || (e = 1); var t = []; if (t[0] = Number(n.querySelector(".sprite .startX ").value), t[1] = Number(n.querySelector(".sprite .startY ").value), t[2] = Number(n.querySelector(" .sprite .startZ ").value), isNaN(t[0]) || isNaN(t[1]) || isNaN(t[2])) jd("warning", "标签位置无效,无法更新标签", 5e3); else { var s = n.querySelector(".sprite .component").value; s && (a.imageSize = r(s)); var l = { url: A, scale: e, position: t, useImageSize: !1, width: a.imageSize, height: a.imageSize, alwaysVisible: !0, componentId: s }; "function" == typeof a.updateListener ? a.updateListener(o, i, l, (function (A, e) { A && a.update(o, i, e || l) })) : a.update(o, i, l), f.promptHide() } } } else if ("plane" === o) { for (var C = n.querySelectorAll(".dom , .sprite"), y = 0; C.length > y; y += 1) C[y].style.display = "none"; n.querySelector(".plane ").style.display = "block", n.querySelector(".plane .markId").value = i, n.querySelector(".plane .picture .chosed-pic").dataset.chosedUrl = d.marks[i].URL, n.querySelector(".plane .picture .chosed-pic img").setAttribute("src", d.marks[i].URL), n.querySelector(".plane .size").value = d.marks[i].scale, n.querySelector(".plane .startX").value = d.marks[i].position[0], n.querySelector(".plane .startY").value = d.marks[i].position[1], n.querySelector(".plane .startZ").value = d.marks[i].position[2], n.querySelector(".plane .component").value = d.marks[i].componentId, n.querySelector(".plane .face").value = d.marks[i].face, n.querySelector(".lobibox-btn-default").onclick = function () { try { var A = n.querySelector(".plane .picture .chosed-pic").dataset.chosedUrl } catch (A) { return void jd("warning", "未选择标签图标", 5e3) } var e = n.querySelector(".plane .size").value; e && e >= 0 || (e = 1); var t = []; if (t[0] = Number(n.querySelector(".plane .startX ").value), t[1] = Number(n.querySelector(".plane .startY ").value), t[2] = Number(n.querySelector(" .plane .startZ ").value), isNaN(t[0]) || isNaN(t[1]) || isNaN(t[2])) jd("warning", "标签位置无效,无法更新标签", 5e3); else { var l = n.querySelector(".plane .component").value; l && (a.imageSize = r(l)); var c = s.$el.querySelector(".updateMarkPrompt .plane .face").value; c || (c = "x"); var h = { URL: A, scale: e, position: t, useImageSize: !1, width: a.imageSize, height: a.imageSize, alwaysVisible: !0, face: c, componentId: l }; "function" == typeof a.updateListener ? a.updateListener(o, i, h, (function (A, e) { A && a.update(o, i, e || h) })) : a.update(o, i, h), f.promptHide() } } } n.querySelector(".lobibox-btn-cancel").onclick = function () { f.promptHide(), u.style.display = "none" } }, this.update = function (A, e, t) { "dom" === A ? a.updateDOMMark(e, t) : "sprite" === A ? a.updateSpriteMark(e, t) : "plane" === A && a.updatePlaneMark(e, t) }, this.hide = function (A, e) { var t = document.querySelector("tr[markId='" + e + "']"); if (t) { var i = t.querySelector(".hideOrShow"); i.classList.remove("hideMark"), i.classList.add("showMark"), i.innerHTML = "显示" } "dom" === A ? c.hide(e) : "sprite" === A && h.hide(e) }, this.show = function (A, e) { var t = document.querySelector("tr[markId='" + e + "']"); if (t) { var i = t.querySelector(".hideOrShow"); i.classList.remove("showMark"), i.classList.add("hideMark"), i.innerHTML = "显示" } "dom" === A ? c.show(e) : "sprite" === A && h.show(e) }, this.updateDOMMark = function (A, e) { var t = document.querySelector("tr[markId='" + A + "']"); t && (t.querySelector(".markTitle").innerHTML = e.title, t.querySelector(".markTitle").setAttribute("title", e.title)), c.updateMark(A, e) }, this.updateSpriteMark = function (A, e) { var t = document.querySelector("tr[markId='" + A + "']"); t && t.querySelector(".markImg").setAttribute("src", e.url), h.updateMark(A, e) }, this.updatePlaneMark = function (A, e) { var t = document.querySelector("tr[markId='" + A + "']"); t && t.querySelector(".markImg").setAttribute("src", e.URL), d.updateMark(A, e) }, this.getDOMMark = function () { return c }, this.getSpriteMark = function () { return h }, this.getPlaneMark = function () { return d } }, Yd = function (A, e, t, i, o) { var n = A.toolId, r = A.Flag, s = A.viewer; function l(A, e) { A.length > e && s.flyTo(A[e], (function () { l(A, e += 1) })) } o.querySelector("#collision" + n).addEventListener("click", (function (A) { "walk" === s.viewerImpl.controlManager.control.name && (vc.EnableHitDetection = !vc.EnableHitDetection), s.viewerImpl.controlManager.setFocuse() })), o.querySelector("#gravity" + n).addEventListener("click", (function () { "walk" === s.viewerImpl.controlManager.control.name && (vc.WalkingWithGravity = !vc.WalkingWithGravity), s.viewerImpl.controlManager.setFocuse() })); var c = {}, h = [], d = qd.window({ title: "漫游路径", id: "pathRoam" + n, width: 356, height: 848, closeOnEsc: !1, closeButton: !0, afterWindowHide: function () { var A = document.getElementById("roam" + n); r.roam = !1, A && (A.style.backgroundColor = "", A.querySelector(".yj-icon").className = "yj-icon roam-icon") }, content: '
路径列表:
' }); d.$el.addClass("pathRoam"); var p = null; t.addEventListener("click", (function () { if (r.roam) return p && p.destroy(), document.getElementById("instructions" + n) && s.viewerImpl.domElement.removeChild(document.getElementById("instructions" + n)), o.style.display = "none", this.style.backgroundColor = "", this.querySelector(".yj-icon").className = "yj-icon roam-icon", r.roam = !1, s.viewerImpl.controlManager.setControlMode(s.viewerImpl, "pick"), void(d && d.windowHide && d.windowHide()); r.measurement && (document.getElementById("measurement" + n).style.backgroundColor = "", document.getElementById("measurement" + n).querySelector(".yj-icon").className = "yj-icon measurement-icon", jd("info", "漫游模式下将关闭测量功能", 2e3), e.exitMeasure && e.exitMeasure()), r.sectioning && (document.getElementById("sectioning" + n).style.backgroundColor = "", document.getElementById("sectioning" + n).querySelector(".yj-icon").className = "yj-icon sectioning-icon", jd("info", "漫游模式下将关闭剖切功能", 2e3), s.viewerImpl.controlManager.disableTool(Pc.CLIP_BY_BOX), r.sectioning = !1), r.multiple && (document.getElementById("multiple" + n).style.backgroundColor = "", document.getElementById("multiple" + n).querySelector(".yj-icon").className = "yj-icon multiple-icon", jd("info", "漫游模式下将关闭框选功能", 2e3), s.viewerImpl.controlManager.disableTool(Pc.PICK_BY_RECT), r.multiple = !1), s.render(), this.style.backgroundColor = "#1f89de", this.querySelector(".yj-icon").className = "yj-icon roam-icon active", r.roam = !r.roam, p = qd.prompt({ title: "漫游", id: "roamChoose" + n, width: 356, height: 87, closeOnEsc: !1, closeButton: !1, afterWindowHide: function () { var A = document.getElementById("roam" + n); r.roam = !1, A && (A.style.backgroundColor = ""), p.destroy(), p = null }, buttons: { ok: { class: "lobibox-btn lobibox-btn-default", text: "自由漫游", closeOnClick: !0 }, cancel: { class: "lobibox-btn lobibox-btn-cancel", text: "路径漫游", closeOnClick: !0 } } }); var A = document.getElementById("roamChoose" + n); A.querySelector(".lobibox-body").style.display = "none", A.querySelector(".lobibox-btn-default").addEventListener("click", (function () { p.destroy(), p = null; var A = document.createElement("div"); A.id = "instructions" + n, A.style.cssText += "position:absolute;left:0;top:0;width:100%;height:100%;background:rgba(80,80,80,0.3);margin:0;padding:0;", A.innerHTML = '
点击进入沉浸式浏览
移动方向
高度
视角
速度
' + A + '', h = [], d.$el.querySelector(".path-roaming .second-floor .viewList .name").value = "", d.$el.querySelector(".path-roaming .second-floor .viewList table tbody").innerHTML = "" } })), d.$el.querySelector(".path-roaming .second-floor .saveView").addEventListener("click", (function () { var A = {}; A.position = s.viewerImpl.camera.position.clone(), A.target = s.viewerImpl.camera.target.clone(), A.up = { x: 0, y: 0, z: 1 }, h.push(A); var e = h.length; d.$el.querySelector(".path-roaming .second-floor .viewList table tbody").innerHTML += "视角' + e + '' })); var g = qd.confirm({ title: "请再次确认:", id: "confirm-path" + n, width: 356, height: 87, closeOnEsc: !1, closeButton: !1, iconClass: !1, msg: "是否要删除此视角?" }); return g.setPosition({ left: (qd.viewport.offsetWidth - g.$options.width) / 2, top: 5 }), g.confirmHide(), d.$el.addEventListener("click", (function (A) { if ("deleteView" === A.target.className) { var e = (r = xh.closest(A.target, "tr")).dataset.index; g.confirmShow(), document.querySelector("#confirm-path" + n + " .lobibox-body-text").innerHTML = "是否要删除编号为[" + (Number(e) + 1) + "]的视角?", document.querySelector("#confirm-path" + n + " .lobibox-btn-yes").onclick = function () { h.splice(e, 1), d.$el.querySelector(".path-roaming .second-floor .viewList tbody").removeChild(r); for (var A = d.$el.querySelectorAll(".path-roaming .second-floor .viewList tbody tr"), t = 0; A.length > t; t += 1) A[t].dataset.index = t, A[t].querySelector(".name").innerHTML = "视角" + (t + 1); g.confirmHide() }, document.querySelector("#confirm-path" + n + " .lobibox-btn-no").onclick = function () { g.confirmHide() } } else if ("updateView" === A.target.className) { var t = xh.closest(A.target, "tr").dataset.index; g.confirmShow(), document.querySelector("#confirm-path" + n + " .lobibox-body-text").innerHTML = "是否要修改编号为[" + (Number(t) + 1) + "]的视角为当前视角?", document.querySelector("#confirm-path" + n + " .lobibox-btn-yes").onclick = function () { var A = {}; A.position = s.viewerImpl.camera.position.clone(), A.target = s.viewerImpl.camera.target.clone(), A.up = { x: 0, y: 0, z: 1 }, h[t] = A, g.confirmHide() }, document.querySelector("#confirm-path" + n + " .lobibox-btn-no").onclick = function () { g.confirmHide() } } else if ("checkView" === A.target.className) { var i = xh.closest(A.target, "tr").dataset.index; s.flyTo(h[i]) } else if ("roamPath" === A.target.className) { var o = xh.closest(A.target, "tr").dataset.key; l(c[o].camera, 0) } else if ("deletePath" === A.target.className) { var r, a = (r = xh.closest(A.target, "tr")).dataset.key; g.confirmShow(), document.querySelector("#confirm-path" + n + " .lobibox-body-text").innerHTML = "是否要删除名称为[" + c[a].name + "]的路径?", document.querySelector("#confirm-path" + n + " .lobibox-btn-yes").onclick = function () { d.$el.querySelector(".path-roaming .pathList tbody").removeChild(r), delete c[a], g.confirmHide() }, document.querySelector("#confirm-path" + n + " .lobibox-btn-no").onclick = function () { g.confirmHide() } } })), d }, Wd = function (A, e, t) { var i = this; this.lobibox = new bh, A ? (this.element = document.getElementById(A), this.lobibox.viewport = document.querySelector("#" + A)) : this.element = document, this.change = !1; var o = function () { this.storage = null }; o.prototype = { init: function () { this.storage = function () { var A = !1; return "object" === lc(window.localStorage) ? A = localStorage : "object" === lc(window.globalStorage) && (A = window.globalStorage), A }() }, getStorage: function () { return this.storage }, save: function (A, e) { var t = this.storage, i = !1; return !1 !== t && (i = t.setItem(A, e)), i }, load: function (A) { var e = this.storage, t = !1; return !1 !== e && (t = e.getItem(A)), t } }, i.model = i.model || {}, i.model.StorageModel = o; ! function () { var A, e, t, o, n, r, a; (n = function () { this.name = "Mouse", this.option = {}, this.mouseShape = null, this.init = function (A, e) { this.setOption({ lineWidth: 1, strokeStyle: A.strokeStyle, radius: Math.ceil(A.lineWidth / 2), opacity: 100 }), this.setPoints(e), this.setMouseShape(new i.model.shapeModel.CircleStroke), this.initMouseShape(), this.setImage() }, this.paint = function (A) { this.getMouseShape().paint(A) } }).prototype = { getName: function () { return this.name }, setOption: function (A) { return "object" === lc(A) ? (uh.extend(!0, this.option, A), this.getOption()) : null }, getOption: function () { return uh.extend(!0, {}, this.option) }, getMouseShape: function () { return this.mouseShape }, setMouseShape: function (A) { return this.mouseShape = A, A }, setPoints: function (A) { this.setOption(A) }, initMouseShape: function () { this.getMouseShape().init(this.getOption()) }, setImage: function () { var A = this.getName(); return [].map.call(document.querySelectorAll("#canvas-mouse"), (function (e, t) { e.setAttribute("data-mouse", A) })), !0 } }, (A = function () { this.name = "Cross", this.init = function (A, e) { var t = this.getName(); this.setOption({ length: 10, lineHeight: 1, opacity: 100, strokeStyle: A.strokeStyle, lineJoin: A.lineJoin, lineCap: A.lineCap, shadowOffsetX: A.shadowOffsetX, shadowOffsetY: A.shadowOffsetY, shadowBlur: A.shadowBlur, shadowColor: A.shadowColor }), this.setPoints(e), this.setMouseShape(new i.model.shapeModel[t]), this.initMouseShape(), this.setImage() }, this.paint = function (A) { this.getMouseShape().paint(A) } }).prototype = new n, (r = function () { this.name = "Pen" }).prototype = new n, (e = function () { this.name = "Eraser", this.init = function (A, e) { this.setOption({ strokeStyle: "#000", opacity: A.opacity, radius: Math.ceil(A.lineWidth / 2, 10), lineJoin: A.lineJoin, lineCap: A.lineCap, shadowOffsetX: A.shadowOffsetX, shadowOffsetY: A.shadowOffsetY, shadowBlur: A.shadowBlur, shadowColor: A.shadowColor }), this.setPoints(e), this.setMouseShape(new i.model.shapeModel.CircleStroke), this.initMouseShape(), this.setImage() }, this.paint = function (A) { this.getMouseShape().paint(A) } }).prototype = new n, (a = function () { this.name = "Text", this.init = function (A, e) { this.setImage() }, this.paint = function (A) {} }).prototype = new n, (o = function () { this.name = "FloodFill", this.init = function (A, e) { this.setOption({ strokeStyle: "#000", opacity: 90, radius: Math.ceil(A.lineWidth / 2, 10) }), this.setPoints(e), this.setMouseShape(new i.model.shapeModel.CircleStroke), this.initMouseShape(), this.setImage() }, this.paint = function (A) { this.getMouseShape().paint(A) } }).prototype = new n, (t = function () { this.name = "EyeDropper", this.init = function (A, e) { this.setOption({ strokeStyle: "#000", opacity: 90, radius: Math.ceil(A.lineWidth / 2, 10) }), this.setPoints(e), this.setMouseShape(new i.model.shapeModel.CircleStroke), this.initMouseShape(), this.setImage() }, this.paint = function (A) { this.getMouseShape().paint(A) } }).prototype = new n, i.model = i.model || {}, i.model.mouseModel = i.model.mouseModel || {}, i.model.mouseModel.Mouse = n, i.model.mouseModel.Cross = A, i.model.mouseModel.Pen = r, i.model.mouseModel.Eraser = e, i.model.mouseModel.Text = a, i.model.mouseModel.FloodFill = o, i.model.mouseModel.EyeDropper = t }(); var n = { list: [], add: function (A) { return this.list.push({ x: Math.round(A.x), y: Math.round(A.y) }), this.list }, getStart: function () { return this.list[0] }, getEnd: function () { return this.list[this.list.length - 1] }, getList: function () { return this.list }, init: function () { return this.list = [], this.list } }; i.model = i.model || {}, i.model.PointList = n; (function () { var A, e, t, o, n, r, a, s, l, c, h, d, p, g, u, f, m, C, y, v; function I(A, e, t, i, o) { var n = i / .75 / 2, r = o / 2; return A.beginPath(), A.moveTo(e, t - r), A.bezierCurveTo(e + n, t - r, e + n, t + r, e, t + r), A.bezierCurveTo(e - n, t + r, e - n, t - r, e, t - r), A.closePath(), A } (m = function () { this.name = "Shape", this.option = {} }).prototype = { init: function (A) { this.initOption(A) }, getName: function () { return this.name }, initOption: function (A) { this.option = {}, this.setOption(A) }, setOption: function (A) { return uh.extend(!0, this.option, A), this.option }, getOption: function () { return this.option }, repaint: function (A) { this.paint(A) }, setAttributes: function (A) {} }, (c = function () { this.name = "FillStroke", this.setAttributes = function (A) { var e = this.getOption(); A.strokeStyle = e.strokeStyle, A.fillStyle = e.fillStyle, A.lineWidth = e.lineWidth, A.globalAlpha = e.opacity / 100, A.lineJoin = e.lineJoin, A.lineCap = e.lineCap, A.shadowOffsetX = e.shadowOffsetX, A.shadowOffsetY = e.shadowOffsetY, A.shadowBlur = e.shadowBlur, A.shadowColor = e.shadowColor } }).prototype = new m, (p = function () { this.name = "Line", this.paint = function (A) { var e = this.getOption(); A.save(), this.setAttributes(A), A.beginPath(), A.moveTo(e.startX, e.startY), A.lineTo(e.endX, e.endY), A.closePath(), A.stroke(), A.restore() } }).prototype = new c, (o = function () { this.name = "CurveClosed", this.paint = function (A) { var e = this.getOption().list, t = e[0], i = e.length, o = 0; for (A.save(), this.setAttributes(A), A.beginPath(), A.moveTo(t.x, t.y); i > o; o += 1) A.lineTo(e[o].x, e[o].y); A.closePath(), A.fill(), A.stroke(), A.restore() } }).prototype = new c, (u = function () { this.name = "Rect", this.paint = function (A) { var e = this.getOption(); A.save(), this.setAttributes(A), A.fillRect(e.left, e.top, e.width, e.height), A.strokeRect(e.left, e.top, e.width, e.height), A.restore() } }).prototype = new c, (A = function () { this.name = "Circle", this.paint = function (A) { var e = this.getOption(); A.save(), this.setAttributes(A), A.beginPath(), A.arc(e.x, e.y, e.radius, 0, 2 * Math.PI, !0), A.closePath(), A.fill(), A.stroke(), A.restore() } }).prototype = new c, (r = function () { this.name = "Ellipes", this.paint = function (A) { var e = this.getOption(), t = e.x, i = e.y, o = e.width, n = e.height; A.save(), this.setAttributes(A), I(A, t, i, o, n), A.fill(), A.stroke(), A.restore() } }).prototype = new c, (C = function () { this.name = "Stroke", this.setAttributes = function (A) { var e = this.getOption(); A.strokeStyle = e.strokeStyle, A.lineWidth = e.lineWidth, A.globalAlpha = e.opacity / 100, A.lineJoin = e.lineJoin, A.lineCap = e.lineCap, A.shadowOffsetX = e.shadowOffsetX, A.shadowOffsetY = e.shadowOffsetY, A.shadowBlur = e.shadowBlur, A.shadowColor = e.shadowColor } }).prototype = new m, (g = function () { this.name = "Pen", this.paint = function (A) { var e = this.getOption().list, t = e[0], i = e.length, o = 0; for (A.save(), this.setAttributes(A), A.beginPath(), A.moveTo(t.x, t.y); i > o; o += 1) A.lineTo(e[o].x, e[o].y); A.stroke(), A.restore() } }).prototype = new C, (n = function () { this.name = "CurveClosedStroke", this.paint = function (A) { var e = this.getOption().list, t = e[0], i = e.length, o = 0; for (A.save(), this.setAttributes(A), A.beginPath(), A.moveTo(t.x, t.y); i > o; o += 1) A.lineTo(e[o].x, e[o].y); A.closePath(), A.stroke(), A.restore() } }).prototype = new C, (f = function () { this.name = "RectStroke", this.paint = function (A) { var e = this.getOption(); A.save(), this.setAttributes(A), A.strokeRect(e.left, e.top, e.width, e.height), A.restore() } }).prototype = new C, (e = function () { this.name = "CircleStroke", this.paint = function (A) { var e = this.getOption(); A.save(), this.setAttributes(A), A.beginPath(), A.arc(e.x, e.y, e.radius, 0, 2 * Math.PI, !0), A.closePath(), A.stroke(), A.restore() } }).prototype = new C, (a = function () { this.name = "EllipesStroke", this.paint = function (A) { var e = this.getOption(), t = e.x, i = e.y, o = e.width, n = e.height; A.save(), this.setAttributes(A), I(A, t, i, o, n), A.stroke(), A.restore() } }).prototype = new C, (s = function () { this.name = "Eraser", this.paint = function (A) { var e = this.getOption(), t = e.list, i = t[0], o = t.length, n = 0; for (A.save(), A.strokeStyle = e.color, A.lineWidth = e.lineWidth, A.shadowOffsetX = e.shadowOffsetX, A.shadowOffsetY = e.shadowOffsetY, A.shadowBlur = e.shadowBlur, A.shadowColor = e.shadowColor, A.lineJoin = e.lineJoin, A.lineCap = e.lineCap, A.globalAlpha = e.opacity / 100, A.beginPath(), A.moveTo(i.x, i.y); o > n; n += 1) A.lineTo(t[n].x, t[n].y); A.stroke(), A.restore() } }).prototype = new m, (h = function () { this.name = "FloodFill", this.paint = function (A) { var e = this.getOption(), t = e.allowance, i = e.fillStyle ? e.fillStyle : "rgba(0,0,0,1)", o = i.indexOf("(") + 1, n = i.slice(o, -1).split(","), r = { r: parseInt(n[0], 10), g: parseInt(n[1], 10), b: parseInt(n[2], 10), a: Math.ceil(255 * (n[3] || 1)) }, a = e.x, s = e.y, l = e.width, c = e.height, h = A.getImageData(0, 0, l, c), d = h.data, p = 4 * (l * s + a), g = d[p], u = d[p + 1], f = d[p + 2], m = d[p + 3] / 255, C = [{ x: a, y: s }]; try { ! function (A, e) { var o = null, n = null, r = null, h = null, p = null, y = null, v = {}; for (Bh.time("floodFill"); 0 !== C.length;) y = C.pop(), v[o = 4 * (l * y.y + y.x)] = !0, r = d[o + 1], h = d[o + 2], p = d[o + 3] / 255, ((n = d[o]) !== e.r || r !== e.g || h !== e.b || 255 * p !== e.a) && Math.abs(n - g) < t && Math.abs(r - u) < t && Math.abs(h - f) < t && Math.abs(p - m) < t / 256 && (d[o] = e.r, d[o + 1] = e.g, d[o + 2] = e.b, d[o + 3] = e.a, !v[o - 4] && a > 0 && C.push({ x: y.x - 1, y: y.y }), !v[o + 4] && l > a && C.push({ x: y.x + 1, y: y.y }), !v[o - 4 * l] && s > 0 && C.push({ x: y.x, y: y.y - 1 }), !v[o + 4 * l] && c > s && C.push({ x: y.x, y: y.y + 1 })); Bh.timeEnd("floodFill"), y = null, o = null, n = null, r = null, h = null, p = null, i = null }(0, r) } catch (A) { window.console.log(A.message) } d = null, A.save(), A.putImageData(h, 0, 0), A.restore() } }).prototype = new m, (l = function () { this.name = "EyeDropper", this.paint = function (A) { var e = this.getOption(), t = document.querySelector("#tool-wrap .tool .color"), i = A.getImageData(e.x, e.y, 1, 1).data, o = "rgba(".concat(i[0], ",", i[1], ",", i[2], ",", i[3] / 255, ")"); t.value = o, xh.css(document.querySelector("#tool-wrap #colorOperatorDiv"), { "background-color": o }) }, this.repaint = function () {} }).prototype = new m, (t = function () { this.name = "Cross", this.paint = function (A) { var e = this.getOption(), t = e.x, i = e.y, o = e.length, n = t - o, r = i, a = t + o, s = i, l = t, c = i - o, h = t, d = i + o; A.save(), A.strokeStyle = e.strokeStyle, A.lineWidth = e.lineWidth, A.shadowOffsetX = e.shadowOffsetX, A.shadowOffsetY = e.shadowOffsetY, A.shadowBlur = e.shadowBlur, A.shadowColor = e.shadowColor, A.lineJoin = e.lineJoin, A.lineCap = e.lineCap, A.globalAlpha = e.opacity / 100, A.beginPath(), A.moveTo(n, r), A.lineTo(a, s), A.moveTo(l, c), A.lineTo(h, d), A.closePath(), A.stroke(), A.restore() } }).prototype = new m, (y = function () { this.name = "Text", this.setAttributes = function (A) { var e = this.getOption(); A.shadowOffsetX = e.shadowOffsetX, A.shadowOffsetY = e.shadowOffsetY, A.shadowBlur = e.shadowBlur, A.shadowColor = e.shadowColor, A.strokeStyle = e.strokeStyle, A.fillStyle = e.fillStyle, A.globalAlpha = e.opacity / 100, A.font = e.italic + " " + e.bold + " " + e.size + "px " + e.family, A.lineWidth = e.border, A.textAlign = e.textAlign }, this.paint = function (A) { var e = this.getOption(), t = e.x, i = e.y, o = e.text; A.save(), this.setAttributes(A), "string" == typeof o && (o = o.match(/[\n\r]/) ? o.split(/\r\n|\r|\n/g) : [o]); for (var n = 0; o.length > n; n += 1) A.fillText(o[n], t, i + e.size * n), A.strokeText(o[n], t, i + e.size * n); A.restore() } }).prototype = new m, (v = function () { this.name = "TextStroke", this.paint = function (A) { var e = this.getOption(), t = e.x, i = e.y, o = e.text; A.save(), this.setAttributes(A), A.strokeText(o, t, i), A.restore() } }).prototype = new y, (d = function () { this.name = "ImageShape", this.paint = function (A) { var e = this.getOption(), t = e.x, i = e.y, o = e.src, n = e.width, r = e.height, a = new Image, s = this; a.src = o, a.onload = function () { A.save(), s.setAttributes(A), A.drawImage(a, t, i, n, r), A.restore() } } }).prototype = new m, (i = i || {}).model = i.model || {}, i.model.shapeModel = i.model.shapeModel || {}, i.model.shapeModel.Line = p, i.model.shapeModel.CurveClosed = o, i.model.shapeModel.Rect = u, i.model.shapeModel.Circle = A, i.model.shapeModel.Pen = g, i.model.shapeModel.CurveClosedStroke = n, i.model.shapeModel.RectStroke = f, i.model.shapeModel.CircleStroke = e, i.model.shapeModel.Eraser = s, i.model.shapeModel.FloodFill = h, i.model.shapeModel.EyeDropper = l, i.model.shapeModel.Cross = t, i.model.shapeModel.Ellipes = r, i.model.shapeModel.EllipesStroke = a, i.model.shapeModel.Text = y, i.model.shapeModel.TextStroke = v, i.model.shapeModel.ImageShape = d })(), function () { var A, e, t, o, n, r, a, s, l, c, h, d, p, g, u, f, m, C, y; (y = function (A) { this.name = "Tool", this.className = "shape", this.mouse = "Mouse", this.option = { strokeStyle: "#000", fillStyle: "#000", lineWidth: 1 }, void 0 !== A && uh.extend(!0, this.option, A) }).prototype = { getClassName: function () { return this.className }, getName: function () { return this.name }, setOption: function (A) { return "object" === lc(A) ? (uh.extend(!0, this.option, A), this.getOption()) : null }, getOption: function () { return uh.extend(!0, {}, this.option) }, getMouse: function () { return this.mouse } }, (u = function () { this.name = "Shape", this.mouse = "Cross", this.initAttributes = function () { for (var A = document.querySelector("#tool-shape-attribute-panel"), e = A.querySelector(".width").value, t = A.querySelector(".opacity").value, i = document.querySelector("#tool-wrap .tool .color").value, o = A.querySelector(".shadow-offsetx").value, n = A.querySelector(".shadow-offsety").value, r = A.querySelector(".shadow-blur").value, a = A.querySelector(".shadow-color").value, s = A.getElementsByTagName("radio"), l = void 0, c = void 0, h = 0; s.length > h; h += 1) "line-join" === s[h].name && (l = s[h].value), "line-cap" === s[h].name && (c = s[h].value); return this.setOption({ lineWidth: e, opacity: t, strokeStyle: i, fillStyle: i, lineJoin: l, lineCap: c, shadowOffsetX: o, shadowOffsetY: n, shadowBlur: r, shadowColor: a }) } }).prototype = new y, (h = function () { this.name = "Line", this.init = function () { this.initAttributes() }, this.setPoint = function (A) { var e = A.getStart(), t = A.getEnd(); return this.setOption({ startX: e.x, startY: e.y, endX: t.x, endY: t.y }) } }).prototype = new u, (o = function () { this.name = "CurveClosed", this.init = function () { this.initAttributes() }, this.setPoint = function (A) { var e = A.getList(); return this.option.list = [], this.setOption({ list: e }) } }).prototype = new u, (p = function () { this.name = "Rect", this.init = function () { this.initAttributes() }, this.setPoint = function (A) { var e = A.getStart(), t = A.getEnd(), i = e.x, o = e.y; return this.setOption({ left: i, top: o, width: t.x - i, height: t.y - o }) } }).prototype = new u, (A = function () { this.name = "Circle", this.init = function () { this.initAttributes() }, this.setPoint = function (A) { var e = A.getStart(), t = A.getEnd(), i = (e.x + t.x) / 2, o = (e.y + t.y) / 2, n = Math.abs(Math.sqrt(Math.pow(e.x, 2) + Math.pow(e.y, 2)) - Math.sqrt(Math.pow(t.x, 2) + Math.pow(t.y, 2))) / 2; return this.setOption({ x: i, y: o, radius: n }) } }).prototype = new u, (r = function () { this.name = "Ellipes", this.init = function () { this.initAttributes() }, this.setPoint = function (A) { var e = A.getStart(), t = A.getEnd(), i = (e.x + t.x) / 2, o = (e.y + t.y) / 2, n = Math.abs(e.x - t.x), r = Math.abs(e.y - t.y); return this.setOption({ x: i, y: o, width: n, height: r }) } }).prototype = new u, (f = function () { this.name = "Stroke", this.mouse = "Cross", this.initAttributes = function () { for (var A = document.querySelector("#tool-stroke-attribute-panel"), e = A.querySelector(".width").value, t = A.querySelector(".opacity").value, i = document.querySelector("#tool-wrap .tool .color").value, o = A.querySelector(".shadow-offsetx").value, n = A.querySelector(".shadow-offsety").value, r = A.querySelector(".shadow-blur").value, a = A.querySelector(".shadow-color").value, s = A.getElementsByTagName("radio"), l = void 0, c = void 0, h = 0; s.length > h; h += 1) "line-join" === s[h].name && (l = s[h].value), "line-cap" === s[h].name && (c = s[h].value); return this.setOption({ lineWidth: e, opacity: t, strokeStyle: i, lineJoin: l, lineCap: c, shadowOffsetX: o, shadowOffsetY: n, shadowBlur: r, shadowColor: a }) } }).prototype = new y, (d = function () { this.name = "Pen", this.mouse = "Pen", this.init = function () { this.initAttributes() }, this.setPoint = function (A) { var e = A.getList(); return this.option.list = [], this.setOption({ list: e }) } }).prototype = new f, (n = function () { this.name = "CurveClosedStroke", this.mouse = "Cross" }).prototype = new d, (g = function () { this.name = "RectStroke", this.init = function () { this.initAttributes() }, this.setPoint = function (A) { var e = A.getStart(), t = A.getEnd(), i = e.x, o = e.y; return this.setOption({ left: i, top: o, width: t.x - i, height: t.y - o }) } }).prototype = new f, (e = function () { this.name = "CircleStroke", this.init = function () { this.initAttributes() }, this.setPoint = function (A) { var e = A.getStart(), t = A.getEnd(), i = (e.x + t.x) / 2, o = (e.y + t.y) / 2, n = Math.abs(Math.sqrt(Math.pow(e.x, 2) + Math.pow(e.y, 2)) - Math.sqrt(Math.pow(t.x, 2) + Math.pow(t.y, 2))) / 2; return this.setOption({ x: i, y: o, radius: n }) } }).prototype = new f, (a = function () { this.name = "EllipesStroke", this.init = function () { this.initAttributes() }, this.setPoint = function (A) { var e = A.getStart(), t = A.getEnd(), i = (e.x + t.x) / 2, o = (e.y + t.y) / 2, n = Math.abs(e.x - t.x), r = Math.abs(e.y - t.y); return this.setOption({ x: i, y: o, width: n, height: r }) } }).prototype = new f, (s = function () { this.name = "Eraser", this.mouse = "Eraser", this.init = function () { for (var A = document.querySelector("#tool-eraser-attribute-panel"), e = A.querySelector(".size") ? A.querySelector(".size").value : void 0, t = A.querySelector(".opacity") ? A.querySelector(".opacity").value : void 0, i = A.querySelector(".shadow-offsetx") ? A.querySelector(".shadow-offsetx").value : void 0, o = A.querySelector(".shadow-offsety") ? A.querySelector(".shadow-offsety").value : void 0, n = A.querySelector(".shadow-blur") ? A.querySelector(".shadow-blur").value : void 0, r = A.querySelector(".shadow-color") ? A.querySelector(".shadow-color").value : void 0, a = A.getElementsByTagName("radio"), s = void 0, l = void 0, c = 0; a.length > c; c += 1) "line-join" === a[c].name && (s = a[c].value), "line-cap" === a[c].name && (l = a[c].value); return this.setOption({ opacity: t, lineWidth: e, color: "#fff", shadowOffsetX: i, shadowOffsetY: o, shadowBlur: n, shadowColor: r, lineJoin: s, lineCap: l }) }, this.setPoint = function (A) { var e = A.getList(); return this.option.list = [], this.setOption({ list: e }) } }).prototype = new y, (c = function () { this.name = "FloodFill", this.mouse = "FloodFill", this.init = function () { var A = document.querySelector("#tool-flood-fill-attribute-panel"), e = document.querySelector("#tool-wrap .tool .color").value, t = parseInt(A.querySelector(".allowance").value, 10), o = i.canvas.currentCanvasContainer.getCanvas(), n = o.getWidth(), r = o.getHeight(); return this.setOption({ fillStyle: e, width: n, height: r, allowance: t }) }, this.setPoint = function (A) { var e = A.getEnd(); return this.setOption({ x: e.x, y: e.y }) } }).prototype = new y, (l = function () { this.name = "EyeDropper", this.mouse = "EyeDropper", this.init = function () { return this.setOption({}) }, this.setPoint = function (A) { var e = A.getEnd(); return this.setOption({ x: e.x, y: e.y }) } }).prototype = new y, (t = function () { this.name = "Cross", this.init = function () { return this.setOption({ lineWidth: 1, strokeStyle: "#000000", length: 10 }) }, this.setPoint = function (A) { var e = A.getEnd(); return this.setOption({ x: e.x, y: e.y }) } }).prototype = new y, (m = function () { this.name = "Text", this.mouse = "Text", this.init = function () { this.initAttributes() }, this.initAttributes = function () { var A = document.querySelector("#tool-text-attribute-panel"), e = A.querySelector(".opacity").value, t = A.querySelector(".text").value, i = A.querySelector(".size").value, o = A.querySelector(".border").value, n = A.querySelector(".font").value, r = document.querySelector("#tool-wrap .tool .color").value, a = A.querySelector(".shadow-offsetx").value, s = A.querySelector(".shadow-offsety").value, l = A.querySelector(".shadow-blur").value, c = A.querySelector(".shadow-color").value, h = "checked" === A.querySelector(".bold").getAttribute("checked") ? "bold" : "", d = "checked" === A.querySelector(".italic").getAttribute("checked") ? "italic" : ""; return this.setOption({ strokeStyle: r, opacity: e, fillStyle: r, text: t, size: i, border: o, family: n, bold: h, italic: d, shadowOffsetX: a, shadowOffsetY: s, shadowBlur: l, shadowColor: c }) }, this.setPoint = function (A) { var e = A.getStart(), t = A.getEnd(), i = e.x; return this.setOption({ x: i, y: e.y, textAlign: i > t.x ? "right" : "left" }) } }).prototype = new y, (C = function () { this.name = "TextStroke" }).prototype = new m, (i = i || {}).model = i.model || {}, i.model.toolModel = i.model.toolModel || {}, i.model.toolModel.Line = h, i.model.toolModel.CurveClosed = o, i.model.toolModel.Rect = p, i.model.toolModel.Circle = A, i.model.toolModel.Pen = d, i.model.toolModel.CurveClosedStroke = n, i.model.toolModel.RectStroke = g, i.model.toolModel.CircleStroke = e, i.model.toolModel.Eraser = s, i.model.toolModel.FloodFill = c, i.model.toolModel.EyeDropper = l, i.model.toolModel.Cross = t, i.model.toolModel.Ellipes = r, i.model.toolModel.EllipesStroke = a, i.model.toolModel.Text = m, i.model.toolModel.TextStroke = C }(); this.init = function () { i.initImgDiv(), i.initCanvas(), i.initTitleDiv(), i.initTool(), i.initTopTool(), i.Index.init(), i.Nav.init(), i.Tool.init(), i.Canvas.init() }, this.initTool = function () { xh.append(i.element, '
\n
\n
\n
\n \n \n \n \n \n \n
\n
\n
\n 属性\n \n \n
\n
\n 阴影\n \n \n \n \n
\n
\n
\n
\n
\n \n \n \n \n \n \n
\n
\n
\n 属性\n \n \n
\n
\n 阴影\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n 属性\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n 属性\n \n
\n
\n
\n
\n
\n \n \n
\n
\n \n
\n 属性\n \n \n \n \n \n \n
\n
\n 阴影\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n \n
\n
\n
\n
\n \n \n \n
\n
\n \n
\n
\n
') }, this.initCanvas = function () { xh.append(i.element, '
\n \n \n \n \n
') }, this.initTopTool = function () { xh.append(i.element, '
\n
\n \n \n \n \n
\n
'), xh.addEventListener(document.querySelectorAll("#edit-exit"), "click", i.exit) }, this.initTitleDiv = function () { xh.append(i.element, '
\n
文件编号-文件名-版本
\n
') }, this.initImgDiv = function () { xh.append(i.element, ' '); var A = document.querySelector("#myModal"); xh.addEventListener(A.querySelector(".close"), "click", (function () { xh.addClass(A, "hide"), xh.remove(document.querySelector(".modal-backdrop")) })), xh.addEventListener(A.querySelector(".btn"), "click", (function () { xh.addClass(A, "hide"), xh.remove(document.querySelector(".modal-backdrop")) })); xh.append(i.element, ' '); var e = document.querySelector("#image-modal"); xh.addEventListener(e.querySelector(".close"), "click", (function () { xh.addClass(e, "hide"), xh.remove(document.querySelector(".modal-backdrop")) })), xh.addEventListener(e.querySelector(".but-cancel"), "click", (function () { xh.addClass(e, "hide"), xh.remove(document.querySelector(".modal-backdrop")) })), xh.addEventListener(e.querySelector(".btn-primary"), "click", (function () { xh.addClass(e, "hide"), xh.remove(document.querySelector(".modal-backdrop")) })) }, this.setTitle = function (A) { [].map.call(document.querySelectorAll(".titleText"), (function (e, t) { e.textContent = A })) }, this.getTitle = function () { return document.querySelector(".titleText").textContent }, this.exit = function () { i.hide(), e.postilExit() }, this.hide = function () { i.element.style.display = "none" }, this.show = function () { i.element.style.display = "block" }, this.clear = function () { i.canvas.mouseCanvasContainer.getCanvas().clear(), i.canvas.bufferCanvasContainer.getCanvas().clear(), i.canvas.currentCanvasContainer.getCanvas().clear(), i.canvas.negativeCanvasContainer.getCanvas().clear(), i.change = !1 }, this.updateSize = function (A, e) { i.canvas.currentCanvasContainer.getCanvas().updateSize(A, e), i.canvas.bufferCanvasContainer.getCanvas().updateSize(A, e), i.canvas.mouseCanvasContainer.getCanvas().updateSize(A, e), i.canvas.negativeCanvasContainer.getCanvas().updateSize(A, e) }, this.bindEvent = function () {}, this.getCoordsWithinElement = function (A) { var e = [0, 0]; if (A) { for (var t = A.target, i = 0, o = 0; t.offsetParent;) i += t.offsetLeft - t.scrollLeft, o += t.offsetTop - t.scrollTop, t = t.offsetParent; e[0] = Math.round(A.pageX - i), e[1] = Math.round(A.pageY - o) } else A = window.event, e[0] = Math.round(A.x), e[0] = Math.round(A.y); return e }, this.Index = { init: function () { this.bindEvent() }, bindEvent: function () { var A = i.element, e = null, t = null; xh.bind(A, "keydown", (function (A) { A.ctrlKey && 90 === A.keyCode && (xh.simulateEvent(document.querySelector("#nav-edit-undo"), "click"), A.preventDefault()) })), xh.bind(A, "keydown", (function (A) { A.ctrlKey && 83 === A.keyCode && (xh.simulateEvent(document.querySelector("#nav-file-save"), "click"), A.preventDefault()) })), xh.bind(A, "keydown", (function (A) { A.ctrlKey && 68 === A.keyCode && (xh.simulateEvent(document.querySelector("#nav-edit-clear"), "click"), A.preventDefault()) })), xh.bind(A, "keydown", (function (A) { A.ctrlKey && 69 === A.keyCode && (xh.simulateEvent(document.querySelector("#nav-file-export"), "click"), A.preventDefault()) })), xh.bind(document, "resize", (function (A) { var e = i.canvas, t = e.currentCanvasContainer.getCanvas(), o = e.bufferCanvasContainer.getCanvas(), n = e.mouseCanvasContainer.getCanvas(), r = i.canvas.negativeCanvasContainer.getCanvas(); t.updateSize(), o.updateSize(), n.updateSize(), r.updateSize() })), xh.delegate(i.element, "#negative-modal-file", "change", (function (A) { var t = A.target.files, i = new FileReader; i.readAsDataURL(t[0]), i.onload = function () { var A = document.querySelector("#negative-modal").querySelector("#negative-modal-view"); e = i.result, A.setAttribute("src", i.result), xh.bind(A, "load", (function () { var A = document.querySelector("#negative-modal"), e = A.querySelector("#negative-modal-width"), t = A.querySelector("#negative-modal-height"); e.value = parseInt(xh.getStyleValue(this, "width"), 0), t.value = parseInt(xh.getStyleValue(this, "height"), 0) })) } })), xh.delegate(i.element, "#negative-modal-ok", "click", (function (A) { var t = i.canvas.negativeCanvasContainer.getCanvas(), o = new i.model.shapeModel.ImageShape, n = document.querySelector("#negative-modal"), r = n.querySelector("#negative-modal-x").value, a = n.querySelector("#negative-modal-y").value, s = parseInt(n.querySelector("#negative-modal-width").value, 0), l = parseInt(n.querySelector("#negative-modal-height").value, 0); o.init({ x: r, y: a, width: s, height: l, src: e }), t.paint(o) })), xh.delegate(i.element, "#image-modal-file", "change", (function (A) { var e = A.target.files, i = new FileReader; i.readAsDataURL(e[0]), i.onload = function () { var A = document.querySelector("#image-modal").querySelector("#image-modal-view"); t = i.result, A.setAttribute("src", i.result), xh.bind(A, "load", (function () { var A = document.querySelector("#image-modal"), e = A.querySelector("#image-modal-width"), t = A.querySelector("#image-modal-height"); e.value = parseInt(xh.getStyleValue(this, "width"), 0), t.value = parseInt(xh.getStyleValue(this, "height"), 0) })) } })), xh.delegate(i.element, "#image-modal-ok", "click", (function (A) { var e = i.canvas.currentCanvasContainer.getCanvas(), o = new i.model.shapeModel.ImageShape, n = document.querySelector("#image-modal"), r = n.querySelector("#image-modal-x").value, a = n.querySelector("#image-modal-y").value, s = parseInt(n.querySelector("#image-modal-width").value, 0), l = parseInt(n.querySelector("#image-modal-height").value, 0); o.init({ x: r, y: a, width: s, height: l, src: t }), e.paint(o) })) } }, this.Canvas = { clickStatus: !1, pointList: Object.create(n), getPointList: function () { return this.pointList }, getClickStatus: function () { return this.clickStatus }, setClickStatus: function (A) { return this.clickStatus = A = A || !1, A }, init: function () { var A = document.querySelectorAll(".canvas-negative")[0], e = new s, t = Object.create(a), o = document.querySelectorAll(".canvas-layer")[0], n = new s, r = Object.create(a), l = document.querySelectorAll(".canvas-buffer")[0], c = new s, h = Object.create(a), d = document.querySelectorAll(".canvas-mouse")[0], p = new s, g = Object.create(a); e.init(A, "negativeCanvas"), t.init(e), i.canvas = i.canvas || {}, i.canvas.negativeCanvasContainer = t, n.init(o, "currentCanvas"), r.init(n), i.canvas = i.canvas || {}, i.canvas.currentCanvasContainer = r, c.init(l, "bufferCanvas"), h.init(c), i.canvas = i.canvas || {}, i.canvas.bufferCanvasContainer = h, p.init(d, "mouseCanvas"), g.init(p), i.canvas = i.canvas || {}, i.canvas.mouseCanvasContainer = g, this.bindEvent() }, bindEvent: function () { var A = i.element, e = i.canvas.mouseCanvasContainer.getCanvas(), t = i.canvas.bufferCanvasContainer.getCanvas(), o = i.canvas.currentCanvasContainer.getCanvas(), n = e.getLeft(), r = e.getTop(), a = this, s = i.tool.currentToolContainer.getTool(); xh.delegate(A, "#canvas-mouse", "mousemove", (function (A) { var o = i.getCoordsWithinElement(A), n = null, r = null, l = "", c = null, h = null, d = a.getClickStatus(), p = "", g = null, u = null; "shape" === s.getClassName() && (n = { x: o[0], y: o[1] }, p = s.getMouse(), g = s.getOption(), (u = new i.model.mouseModel[p]).init(g, n), e.clear(), e.paint(u), d && (l = s.getName(), (r = a.getPointList()).add(n), h = s.setPoint(r), "FloodFill" !== (c = new i.model.shapeModel[l]).getName() && (c.init(h), t.clear(), t.paint(c)))) })), xh.delegate(A, "#canvas-mouse", "mousedown", (function (A) { var e = i.getCoordsWithinElement(A), t = { x: e[0], y: e[1] }; a.getPointList(); a.getPointList().init(), a.getPointList().add(t), a.setClickStatus(!0) })), xh.delegate(A, "#canvas-mouse", "mouseup", (function (A) { var e = i.getCoordsWithinElement(A), n = { x: e[0], y: e[1] }, r = a.getPointList(), l = s.getName(), c = null, h = null; "shape" === s.getClassName() && (a.getPointList().add(n), a.setClickStatus(!1), c = new i.model.shapeModel[l], h = s.setPoint(r), c.init(h), o.paint(c), t.clear()) })), xh.delegate(A, "#canvas-mouse", "mouseleave", (function (A) { e.clear() })), xh.delegate(A, "#canvas-mouse", "mouseenter", (function (A) { e.clear(), s = i.tool.currentToolContainer.getTool() })), document.getElementById("canvas-mouse").addEventListener("touchmove", (function (A) { var o = null, l = null, c = "", h = null, d = null, p = a.getClickStatus(), g = "", u = null, f = null, m = s.getClassName(), C = A.changedTouches[0]; A.preventDefault(), "shape" === m && (o = { x: C.pageX - n, y: C.pageY - r }, g = s.getMouse(), u = s.getOption(), (f = new i.model.mouseModel[g]).init(u, o), e.clear(), e.paint(f), p && (c = s.getName(), (l = a.getPointList()).add(o), d = s.setPoint(l), (h = new i.model.shapeModel[c]).init(d), t.clear(), t.paint(h))) }), !1), document.getElementById("canvas-mouse").addEventListener("touchstart", (function (A) { var e = A.touches[0], t = { x: e.pageX - n, y: e.pageY - r }; a.getPointList(); A.preventDefault(), a.getPointList().init(), a.getPointList().add(t), a.setClickStatus(!0) }), !1), document.getElementById("canvas-mouse").addEventListener("touchend", (function (A) { var e = A.changedTouches[0], l = { x: e.pageX - n, y: e.pageY - r }, c = a.getPointList(), h = s.getName(), d = null, p = null, g = s.getClassName(); A.preventDefault(), "shape" === g && (a.getPointList().add(l), a.setClickStatus(!1), d = new i.model.shapeModel[h], p = s.setPoint(c), d.init(p), o.paint(d), t.clear()) }), !1) } }, this.Nav = { init: function () { this.bindEvent() }, bindEvent: function () { var A = i.element; xh.delegate(A, "#nav-file-export", "click", (function (e) { var t = i.canvas.currentCanvasContainer.getCanvas(), o = i.canvas.negativeCanvasContainer.getCanvas(), n = document.createElement("canvas"); n.width = t.width, n.height = t.height; var r = n.getContext("2d"); r.drawImage(o.getCanvas(), 0, 0), r.drawImage(t.getCanvas(), 0, 0), document.querySelectorAll("#save-image")[0].src = n.toDataURL(), xh.append(A, ""), [].map.call(document.querySelectorAll("#myModal"), (function (A, e) { xh.removeClass(A, "hide") })) })), xh.delegate(A, "#nav-file-saveAs", "click", (function (e) { var t = i.canvas.currentCanvasContainer.getCanvas(), o = i.canvas.negativeCanvasContainer.getCanvas(), n = document.createElement("canvas"); n.width = t.width, n.height = t.height; var r = n.getContext("2d"); r.drawImage(o.getCanvas(), 0, 0), r.drawImage(t.getCanvas(), 0, 0), document.querySelectorAll("#save-image")[0].src = n.toDataURL(), xh.append(A, ""), [].map.call(document.querySelectorAll("#myModal"), (function (A, e) { xh.removeClass(A, "hide") })) })), xh.delegate(A, "#nav-file-save", "click", (function (A) { var t = i.canvas.currentCanvasContainer.getCanvas(), o = i.canvas.negativeCanvasContainer.getCanvas(); t.save(), o.save(); var n = i.lobibox.alert("success", { msg: "保存成功", title: "保存", backdrop: !0, buttons: { yes: { closeOnClick: !1, text: "关闭" } }, callback: function (A, t) { A.destroy(), e.postilSave() } }), r = (new Date).getTime() - i.lobibox.alert.startTime; n.$el.style.zIndex = r + 2 })), xh.delegate(A, "#nav-file-open", "click", (function (e) { xh.append(A, ""), [].map.call(document.querySelectorAll("#image-modal"), (function (A, e) { xh.removeClass(A, "hide") })) })), xh.delegate(A, "#nav-file-import-img", "click", (function (e) { xh.append(A, ""), [].map.call(document.querySelectorAll("#image-modal"), (function (A, e) { xh.removeClass(A, "hide") })) })), xh.delegate(A, "#nav-edit-undo", "click", (function (A) { i.canvas.currentCanvasContainer.getCanvas().undo(), e.undo() })), xh.delegate(A, "#nav-edit-clear", "click", (function (A) { i.canvas.currentCanvasContainer.getCanvas().clear() })), xh.delegate(A, "#nav-edit-clear-negative", "click", (function (A) { i.canvas.negativeCanvasContainer.getCanvas().clear() })), xh.delegate(A, "#nav-edit-convert", "click", (function (A) { i.canvas.currentCanvasContainer.getCanvas().convert() })), xh.delegate(A, "#nav-edit-flipx", "click", (function (A) { i.canvas.currentCanvasContainer.getCanvas().flipX() })), xh.delegate(A, "#nav-edit-flipy", "click", (function (A) { i.canvas.currentCanvasContainer.getCanvas().flipY() })) } }; var r; (r = function () { this.currentOpenAttributePanel = null, this.colorPicker = void 0, this.attributePanelWindow = void 0 }).prototype = { init: function () { this.bindEvent(), this.initAttributePanel(), this.initColor(), i.tool = i.tool || {}, i.tool.currentToolContainer = Object.create(i.model.ToolContainerModel), i.tool.currentToolContainer.init(new i.model.toolModel.Line) }, initAttributePanel: function () { document.querySelector("#tool-wrap"); var A = document.querySelector("#tool-shape-attribute-panel"), e = document.createElement("div"); e.className = "tool-attribute-panel-content", this.attributePanelWindow = i.lobibox.window({ title: "属性面板", width: 334, height: 415, closeOnEsc: !1, closeButton: !0, afterWindowHide: function (A) {}, content: e }), this.attributePanelWindow.setPosition({ left: "", right: 35, bottom: 120 }), this.attributePanelWindow.windowHide(); var t = document.querySelectorAll(".tool-attribute-panel"); [].map.call(t, (function (A, t) { A.style.display = "none", e.appendChild(A) })), this.setCurrentAttributePanel(A), this.openAttributePanel(A) }, initColor: function () { var A = document.querySelector("#tool-wrap .tool .color"); this.colorPicker = new Hh(A), A.style.display = "none"; var e = A.parentNode; xh.append(e, '
'); var t = e.querySelector("#colorOperatorDiv"), i = this.colorPicker.element; i.id = "toolColorModal", i.className = "colorModal", i.style.cssText += "margin-left:" + t.offsetLeft + "px;bottom:50px", t.addEventListener("click", (function (A) { i.focus(), i.style.display = "block" === i.style.display ? "none" : "block", A.stopPropagation ? A.stopPropagation() : A.cancelBubble = !0 })), document.addEventListener("click", (function (A) {})), xh.addEventListener(A, "change", (function (e) { xh.css(t, { "background-color": A.value }) })), A.parentNode.parentNode.appendChild(i) }, openAttributePanel: function (A) { document.querySelector("#tool-wrap"), document.querySelector(".tool-attribute-panel-content"); var e = document.querySelectorAll(".tool-attribute-panel"), t = A || this.getCurrentAttributePanel(); t && ([].map.call(e, (function (A, e) { A.style.display = A.id == t.id ? "block" : "none" })), this.attributePanelWindow.windowShow()) }, getCurrentAttributePanel: function () { return this.currentOpenAttributePanel }, setCurrentAttributePanel: function (A) { return void 0 !== A && (this.currentOpenAttributePanel = A, !0) }, bindEvent: function () { var A = document.querySelector("#tool-wrap"), e = this; xh.delegate(A.querySelector(".tool"), "button", "click", (function (A) { if ("nav-file-import-img" === this.id) e.attributePanelWindow.$el.style.zIndex = 888; else { var t = document.querySelector("#tool-wrap"), o = this.getAttribute("data-tool-panel"), n = t.querySelector(".tool-panel ." + o), r = t.querySelectorAll(".tool-panel .wrap"), a = document.querySelector("#tool-" + o + "-attribute-panel"), s = this.getAttribute("data-current-tool"); [].map.call(t.querySelectorAll(".tool button.active"), (function (A, e) { xh.removeClass(A, "active") })), xh.addClass(this, "active"); for (var l = 0; r.length > l; l += 1) r[l].style.display = "none"; if (n && (n.style.display = "block"), a) { var c = a.getAttribute("title") ? a.getAttribute("title") : "属性面板"; i.Tool.attributePanelWindow.setTitle(c) } if (e.setCurrentAttributePanel(a), e.openAttributePanel(a), !s) return; - 1 === s.indexOf("Arrow") ? i.tool.currentToolContainer.init(new i.model.toolModel[s]) : console.log("currentTool: 箭头没有原型类实现") } })), xh.delegate(A.querySelectorAll(".tool-panel .wrap"), "button", "click", (function (A) { var e = this.getAttribute("data-tool"), t = this.getAttribute("data-tool-class"), i = document.querySelector("#tool-wrap .tool button[data-tool-panel='" + e + "']"); i.setAttribute("data-current-tool", t), xh.simulateEvent(i, "click") })), xh.delegate(A, ".color", "change", (function (A) { var e = this.value; i.tool.currentToolContainer.getTool().setOption({ fillStyle: e, strokeStyle: e }) })), xh.delegate(document.querySelectorAll(".tool-attribute-panel"), "select", "change", (function (A) { var e = A.target, t = e.getAttribute("data-attr"), o = e.value, n = i.tool.currentToolContainer.getTool(), r = {}; r[t] = o, n.setOption(r) })), [].map.call(i.element.querySelectorAll("input"), (function (A, e) { var t = A.getAttribute("type"); "checkbox" !== t && "radio" !== t && xh.addEventListener(A, "change", (function (A) { var e = A.target, t = e.getAttribute("data-attr"), o = e.value, n = i.tool.currentToolContainer.getTool(), r = {}, a = e.parentNode.querySelector("span"); a && (a.textContent = o), r[t] = o, n.setOption(r) })) })), [].map.call(i.element.querySelectorAll(".tool-attribute-panel input"), (function (A, e) { "checkbox" === A.getAttribute("type") && xh.addEventListener(A, "change", (function (A) { var e = A.target, t = e.getAttribute("data-attr"), o = e.value, n = e.getAttribute("checked"), r = i.tool.currentToolContainer.getTool(), a = {}; a[t] = !0 === n ? o : "", r.setOption(a), window.console.log(n) })) })), [].map.call(i.element.querySelectorAll(".tool-attribute-panel input"), (function (A, e) { "radio" === A.getAttribute("type") && xh.addEventListener(A, "change", (function (A) { var e = A.target, t = e.attr("data-attr"), o = e.val(), n = i.tool.currentToolContainer.getTool(), r = {}; r[t] = o, n.setOption(r) })) })) } }, this.Tool = new r; var a = { canvas: null, init: function (A) { this.setCanvas(A) }, setCanvas: function (A) { return this.canvas = A, !0 }, getCanvas: function () { return this.canvas } }; i.model = i.model || {}, i.model.CanvasContainerModel = a; var s = function () { this.canvas = null, this.documentName = "", this.pictureName = "", this.name = "Canvas", this.shapeList = [], this.convertStatus = "source-over", this.flipXStatus = !1, this.flipYStatus = !1, this.width = 1e3, this.height = 400, this.context2D = null, this.top = 0, this.left = 0 }; s.prototype = { init: function (A, e) { this.initCanvas(A), this.initHeight(), this.initWidth(), this.initLeft(), this.initTop(), this.initContext2D(), this.initName(e), this.load() }, initName: function (A) { this.setName(A) }, setName: function (A) { this.name = A }, setDocumentName: function (A) { this.documentName = A }, setPictureName: function (A) { this.pictureName = A }, getDocumentName: function () { return this.documentName }, getPictureName: function () { return this.pictureName }, getName: function () { return this.name }, initCanvas: function (A) { this.setCanvas(A) }, setCanvas: function (A) { return null != A && (this.canvas = A, !0) }, getCanvas: function () { return this.canvas }, initContext2D: function () { this.setContext2D() }, getContext2D: function () { return this.context2D }, setContext2D: function (A) { A = A || this.getCanvas().getContext("2d"), this.context2D = A }, clearContext: function () { var A = this.getHeight(), e = this.getWidth(), t = this.getContext2D(); return t.clearRect(0, 0, e, A), t }, initLeft: function () { this.updateLeft() }, updateLeft: function () { var A; return A = function (A) { for (var e = A.offsetLeft, t = A.offsetParent; null !== t;) e += t.offsetLeft, t = t.offsetParent; return e }(this.getCanvas()), this.left = A, A }, getLeft: function () { return this.left }, initTop: function () { this.updateTop() }, updateTop: function () { var A; return A = function (A) { for (var e = A.offsetTop, t = A.offsetParent; null !== t;) e += t.offsetTop, t = t.offsetParent; return e }(this.getCanvas()), this.top = A, A }, getTop: function () { return this.top }, updateSize: function (A, e) { this.updateHeight(e), this.updateWidth(A), this.repaint() }, initHeight: function () { this.updateHeight() }, updateHeight: function (A) { var e = this.getCanvas(), t = parseInt(xh.getStyleValue(e.parentNode, "height")); return A && (t = A), e.setAttribute("height", t), this.setHeight(t) }, setHeight: function (A) { return this.height = A = A || 600, A }, getHeight: function () { return this.height }, initWidth: function () { this.updateWidth() }, updateWidth: function (A) { var e = this.getCanvas(), t = parseInt(xh.getStyleValue(e.parentNode, "width")); return A && (t = A), e.setAttribute("width", t), this.setWidth(t) }, setWidth: function (A) { return this.width = A = A || 600, this.width }, getWidth: function () { return this.width }, initShapeList: function () { this.clearShapeList() }, getShapeList: function () { return uh.extend(!0, [], this.shapeList) }, setShapeList: function (A) { return this.clearShapeList(), uh.extend(!0, this.shapeList, A), A }, addShape: function (A) { this.shapeList.push(A) }, deleteShape: function () { this.shapeList.pop() }, clearShapeList: function () { this.shapeList = [] }, paint: function (A) { this.addShape(A), A.paint(this.getContext2D()), "negativeCanvas" != this.name && "currentCanvas" != this.name || (i.change = !0) }, repaint: function () { var A, e = this.shapeList, t = e.length, o = 0; for (A = this.clearContext(); t > o; o += 1) e[o].paint(A); t > 0 && ("negativeCanvas" != this.name && "currentCanvas" != this.name || (i.change = !0)) }, undo: function () { this.deleteShape(), this.repaint() }, clear: function () { this.clearContext(), this.clearShapeList() }, convert: function () { var A = this.getContext2D(), e = A.globalCompositeOperation, t = "source-over" === this.convertStatus ? "destination-over" : "source-over"; this.convertStatus = t, A.globalCompositeOperation = t, this.repaint(), A.globalCompositeOperation = e }, save: function (A) { var e = new i.model.StorageModel, t = [], o = this.shapeList, n = o.length, r = 0, a = this.getName(), s = ""; if (a = a + "-" + this.getDocumentName() + "-" + this.getPictureName(), null != A && (a = A), e.init(), !1 !== e.getStorage()) { for (; n > r; r += 1) t[r] = { name: o[r].getName(), option: o[r].getOption() }; s = window.JSON.stringify(t), e.save(a, s) } }, load: function (A) { var e, t, o = new i.model.StorageModel, n = [], r = 0, a = this.getName(), s = this.getDocumentName(), l = this.getPictureName(), c = this.shapeList; if (a = a + "-" + s + "-" + l, null != A && (a = A), o.init(), !1 !== o.getStorage()) { for (t = o.load(a) || "[]", e = (n = window.JSON.parse(t)).length; e > r; r += 1) c[r] = new i.model.shapeModel[n[r].name], c[r].init(n[r].option); this.repaint() } }, autoSave: function (A) { var e = this; window.setInterval((function () { e.save() }), A) }, flipX: function () { var A = this.getContext2D(), e = this.getWidth(); A.save(), this.flipXStatus ? this.flipXStatus = !1 : (this.flipXStatus = !0, A.translate(e, 0), A.scale(-1, 1)), this.repaint(), A.restore() }, flipY: function () { var A = this.getContext2D(), e = this.getHeight(); A.save(), this.flipYStatus ? this.flipYStatus = !1 : (this.flipYStatus = !0, A.translate(0, e), A.scale(1, -1)), this.repaint(), A.restore() } }, i.model = i.model || {}, i.model.CanvasModel = s; (i = i || {}).model = i.model || {}, i.model.ToolContainerModel = { tool: null, init: function (A) { A.init(), this.setTool(A) }, setTool: function (A) { return this.tool = A, !0 }, getTool: function () { return this.tool } } }, Jd = function (A, e) { var t = A.toolId, i = A.Flag, o = A.viewer, n = e.toolbarTop, r = this; r.viewer = o, r.postilInfo = {}, this.editingPostilObj = void 0, this.editingNodeDom = void 0, this.postilDelConf = !0, this.eventDispatcher = new Ld; var a = 0; this.deleteListener = null, this.addListener = null, this.renameListener = null, this.updateListener = null, this.exitListener = null, this.saveListener = null, this.openListener = null, this.restoreToPostilListener = null; var s = document.createElement("div"); s.className = "postil-content", xh.append(s, '
'), r.postilWindow = qd.window({ title: "批注", width: 334, height: 688, closeOnEsc: !1, closeButton: !0, afterWindowHide: function () { var A = document.getElementById("postil" + t); i.postil = !1, A && (A.style.backgroundColor = "", A.querySelector(".yj-icon").className = "yj-icon postil-icon") }, content: s }), r.postilWindow.setPosition({ left: "", right: 5, top: 60 }), r.postilWindow.windowHide(), xh.addEventListener(n.querySelector("#postil" + t), "click", (function (A) { if (i.postil) A.target.parentNode.style.backgroundColor = "", A.target.className = "yj-icon postil-icon active", r.postilWindow.windowHide(); else { r.load([]), i.postil = !i.postil, r.postilWindow.windowShow(); var e = o.viewerImpl.modelManager.sceneState; A.target.parentNode.style.backgroundColor = "#1f89de", A.target.className = "yj-icon postil-icon active", e.getSelection() } })), xh.append(document.querySelector("body"), '
'), document.querySelector("#postilEdit" + t).style.display = "none", this.edit = new Wd("postilEdit" + t, this, o, t), r.edit.init(), xh.addEventListener(r.postilWindow.$el.querySelector(".postil-body"), "click", (function (A) { switch (A.target.className) { case "postil-node-delete": r.postilDelete(A); break; case "postil-node-img": r.postilflyto(A); break; case "postil-node-button-update": r.postilUpdate(A); break; case "postil-node-button-edit": r.postilEdit(A) } })), xh.addEventListener(r.postilWindow.$el.querySelector(".postil-body"), "dblclick", (function (A) { switch (A.target.className) { case "postil-node-name": r.postilRename(A) } })), this.makePostils = function () { var A, e, t, i, n, r = o.viewerImpl.modelManager.getModelSnapshotPhoto(); A = r.imgURL; var s = r.width, l = r.height, c = o.viewerImpl.getSceneState(); e = c.camera, t = c.state, i = c.selection.concat(), n = c.modelSelection.concat(); var h = a; return a += 1, { cameraState: e, componentState: t, highlightComponentsKeys: i, highlightModelsKeys: n, imageURL: A, width: s, height: l, num: h, code: (new Date).getTime().toString(), name: "批注" + h } }, this.clear = function () { [].map.call(r.postilWindow.$el.querySelectorAll(".postil .postil-body"), (function (A, e) { A.innerHTML = "" })), r.postilInfo = {}, r.postilDelConf = !0 }, this.load = function (A) { Array.isArray(A) && A.forEach((function (A) { r.add(A) })) }, xh.addEventListener(r.postilWindow.$el.querySelector("#postilAdd" + t), "click", (function (A) { var e = r.makePostils(); "function" == typeof r.addListener ? r.addListener(e, (function (A, t) { A && r.add(t || e) })) : r.add(e) })), this.add = function (A) { var e = A.imageURL, t = A.width, i = A.height, o = A.code, n = A.name, a = A.num; if (A.cameraState && A.componentState && e && o && t && i) { for (var s = r.postilWindow.$el.querySelectorAll(".postil-node"), l = 0; s.length > l; l += 1) xh.css(s[l], { border: "2px" }); var c = '
' + n + '×
'; [].map.call(r.postilWindow.$el.querySelectorAll(".postil-body"), (function (A, e) { xh.append(A, c) })), r.postilInfo[o] = A } }, this.postilEdit = function (A) { var e = document.querySelector("#postilEdit" + t); e.style.display = "block", e.style.height = r.viewer.viewerImpl.getDomElement().style.height, e.style.width = r.viewer.viewerImpl.getDomElement().style.width; var i = A.target.parentNode.parentNode.parentNode.getAttribute("imgid"); "function" == typeof r.openListener ? r.openListener(i, (function (A) { A && r.open(i) })) : r.open(i) }, this.open = function (A) { document.querySelector("#postilEdit" + t).style.display = "block"; var e = r.postilWindow.$el.querySelector("div[imgid='" + A + "']"); if (e) { this.editingNodeDom = e; var i = e.querySelector(".postil-node-name").textContent; r.editingPostilObj = r.postilInfo[A], r.edit.setTitle(i), xh.showOrHideElement(o.viewport, !1), r.edit.canvas.currentCanvasContainer.getCanvas().setDocumentName(A), r.edit.canvas.currentCanvasContainer.getCanvas().setPictureName(A), r.edit.canvas.negativeCanvasContainer.getCanvas().setDocumentName(A), r.edit.canvas.negativeCanvasContainer.getCanvas().setPictureName(A); var n = r.edit.canvas.negativeCanvasContainer.getCanvas(), a = new r.edit.model.shapeModel.ImageShape, s = e.children[1].children[0].naturalWidth, l = e.children[1].children[0].naturalHeight; a.init({ x: 0, y: 0, width: s, height: l, src: e.children[1].children[0].src }), r.edit.clear(), n.paint(a), r.edit.updateSize(s, l) } }, this.postilUpdate = function (A) { var e = A.target.parentNode.parentNode.parentNode.getAttribute("imgid"), t = r.makePostils(); "function" == typeof r.updateListener ? r.updateListener(e, t, (function (A, i, o) { A && r.update(i || e, o || t) })) : r.update(e, t) }, this.update = function (A, e) { var t = r.postilInfo[A]; t && (t.cameraState = e.cameraState, t.componentState = e.componentState, t.highlightComponentsKeys = e.highlightComponentsKeys, t.highlightModelsKeys = e.highlightModelsKeys, t.imageURL = e.imageURL); var i = r.postilWindow.$el.querySelector("div[imgid='" + A + "']"); if (i) { var o = i.querySelector(".postil-node-img"); o && (o.src = e.imageURL) } }, this.postilDelete = function (A) { var e = A.target.parentNode.parentNode.getAttribute("imgid"); if (r.postilDelConf) { var t = qd.alert("info", { msg: "删除不可恢复,确认删除?", title: "删除确认", backdrop: !0, buttons: { yes: { closeOnClick: !1, text: "删除并不再提示" }, no: { closeOnClick: !1, text: "删除" } }, callback: function (A, t) { "no" !== t && "yes" !== t || ("yes" === t && (r.postilDelConf = !1), "function" == typeof r.deleteListener ? r.deleteListener(e, (function (A) { A && r.delete(e) })) : r.delete(e)), A.destroy() } }), i = (new Date).getTime() - qd.window.startTime; [].map.call(r.postilWindow.$el.querySelectorAll(".lobibox-backdrop"), (function (A, e) { xh.css(A, { "z-index": i }) })), t.$el.style.zIndex = i + 2 } else "function" == typeof r.deleteListener ? r.deleteListener(e, (function (A) { A && r.delete(e) })) : r.delete(e) }, this.delete = function (A) { var e = r.postilWindow.$el.querySelector("div[imgid='" + A + "']"); e && e.remove(), delete r.postilInfo[A] }, this.postilRename = function (A) { o.viewerImpl.cameraControl.enabled = !1; var e = A.target, t = e.parentNode.parentNode.getAttribute("imgid"), i = e.innerText, n = document.createElement("input"); n.type = "text", n.value = i, e.innerText = "", xh.append(e, n), n.focus(), n.select(), n.addEventListener("blur", (function (A) { var e = A.target; e.removeEventListener("blur", (function () {})), e.value !== i && "" !== xh.trim(e.value) ? "function" == typeof r.renameListener ? r.renameListener(t, e.value, (function (A, o) { A ? r.rename(t, o || e.value) : e.parentNode.innerText = i })) : r.rename(t, e.value) : e.parentNode.innerText = i, n.remove(), o.viewerImpl.cameraControl.enabled = !0 })) }, this.rename = function (A, e) { var t = r.postilWindow.$el.querySelector("div[imgid='" + A + "']"); if (t) { var i = t.querySelector(".postil-node-name"); i && (i.innerText = e) } r.postilInfo[A].name = e }, this.postilflyto = function (A) { for (var e = r.postilWindow.$el.querySelectorAll(".postil-node"), t = 0; e.length > t; t += 1) xh.css(e[t], { border: "2px" }); var i = A.target.parentNode.parentNode.getAttribute("code"); "function" == typeof r.restoreToPostilListener ? r.restoreToPostilListener(i, (function (A) { r.restoreToPostil(i) })) : r.restoreToPostil(i) }, this.restoreToPostil = function (A) { var e = r.postilInfo[A]; if (e) { o.viewerImpl.setSceneState({ camera: e.cameraState, state: e.componentState, selection: e.highlightComponentsKeys, modelSelection: e.highlightModelsKeys }); var t = r.postilWindow.$el.querySelector("div[imgid='" + A + "']"); t && xh.css(t, { border: "2px solid #002553" }) } }, this.postilSave = function () { "function" == typeof r.saveListener ? r.saveListener(this.editingPostilObj.code, (function (A) { A && r.save() })) : r.save() }, this.save = function () { r.edit.canvas.currentCanvasContainer.getCanvas().save(), r.edit.canvas.negativeCanvasContainer.getCanvas().save(); var A = r.edit.canvas.currentCanvasContainer.getCanvas(), e = r.edit.canvas.negativeCanvasContainer.getCanvas(), t = document.createElement("canvas"); t.width = A.width, t.height = A.height; var i = t.getContext("2d"); i.drawImage(e.getCanvas(), 0, 0), i.drawImage(A.getCanvas(), 0, 0); var o = t.toDataURL(); r.editingPostilObj.imageURL = o, this.editingNodeDom.children[1].children[0].setAttribute("src", o), r.eventDispatcher.dispatchEvent({ type: "POSTIL-EDIT-SAVE", event: event, data: r.editingPostilObj }) }, this.undo = function () { r.eventDispatcher.dispatchEvent({ type: "POSTIL-EDIT-UNDO", event: event }) }, this.postilExit = function () { "function" == typeof r.exitListener ? r.exitListener(this.editingPostilObj.code, (function (A) { A && r.exit() })) : r.exit() }, this.exit = function () { r.edit.canvas.currentCanvasContainer.getCanvas().clear(), r.edit.canvas.negativeCanvasContainer.getCanvas().clear(), r.edit.canvas.currentCanvasContainer.getCanvas().setDocumentName(""), r.edit.canvas.currentCanvasContainer.getCanvas().setPictureName(""), r.edit.canvas.negativeCanvasContainer.getCanvas().setDocumentName(""), r.edit.canvas.negativeCanvasContainer.getCanvas().setPictureName(""), r.clearPostilStorage(), r.edit.hide(), r.editingPostilObj = void 0, document.querySelector("#" + o.viewport).style.display = "block", r.eventDispatcher.dispatchEvent({ type: "POSTIL-EDIT-CLOSE" }) }, this.clearPostilStorage = function () { for (var A = localStorage.length, e = [], t = 0; A > t; t += 1) { var i = localStorage.key(t); - 1 === i.indexOf("currentCanvas-") && -1 === i.indexOf("negativeCanvas-") || e.push(i) } e.map((function (A, e) { return localStorage.removeItem(A) })) }, this.clearPostilStorage(), this.getPostilByKey = function (A) { return r.postilInfo ? r.postilInfo[A] : null }, this.getAllPostil = function () { return r.postilInfo ? r.postilInfo : null } }, zd = function (A, e) { var t = document.getElementById("svgBar" + e), i = this; if (!t) { this.svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"), this.svg.setAttribute("id", "svgBar" + e), this.svg.setAttribute("style", "width: 100%; height: 10px; position:absolute; left: 0; top:0;"), A.appendChild(this.svg); var o = Number(2).toString(), n = A.clientWidth.toString(), r = (A.clientWidth - 2).toString(); this.backBar = document.createElementNS("http://www.w3.org/2000/svg", "line"), this.backBar.setAttribute("id", "backBar" + e), this.backBar.setAttribute("class", "progressBar"), this.backBar.setAttribute("x1", o), this.backBar.setAttribute("y1", "1"), this.backBar.setAttribute("x2", n), this.backBar.setAttribute("y2", "1"), this.backBar.setAttribute("stroke", "#CFF9FE"), this.backBar.setAttribute("stroke-width", "7"), this.backBar.setAttribute("stroke-linecap", "round"), this.frontBar = document.createElementNS("http://www.w3.org/2000/svg", "line"), this.frontBar.setAttribute("id", "frontBar" + e), this.frontBar.setAttribute("class", "progressBar"), this.frontBar.setAttribute("x1", o), this.frontBar.setAttribute("y1", "1"), this.frontBar.setAttribute("x2", n), this.frontBar.setAttribute("y2", "1"), this.frontBar.setAttribute("stroke", "#58BDFD"), this.frontBar.setAttribute("stroke-dasharray", r), this.frontBar.setAttribute("stroke-dashoffset", r), this.frontBar.setAttribute("stroke-width", "7"), this.frontBar.setAttribute("stroke-linecap", "round"), this.svg.appendChild(this.backBar), this.svg.appendChild(this.frontBar) } this.setProgressBar = function (A, e) { var t = A / e, o = r - r * t; i.svg.style.display = "", i.frontBar.setAttribute("stroke-dashoffset", o.toString()), 1 > t || setTimeout((function () { i.deleteProgressBar() }), 500) }, this.deleteProgressBar = function () { document.getElementsByClassName("progressBar"); i.svg.style.display = "none" } }, Zd = function (A, e) { var t = A.toolId, i = A.Flag, o = A.viewer, n = e.toolbarTop, r = this, a = 0; this.snapshotInfo = {}, this.snapshotDelConf = !0, this.deleteListener = null, this.addListener = null, this.renameListener = null, this.updateListener = null, this.annotationListener = null, this.restoreToSnapshotListener = null; var s = document.createElement("div"); s.className = "snapshot-content", xh.append(s, '
'), this.snapshotWindow = qd.window({ title: "快照", width: 334, height: 688, closeOnEsc: !1, closeButton: !0, afterWindowHide: function () { var A = document.getElementById("snapshot" + t); i.snapshot = !1, A && (A.style.backgroundColor = "", A.querySelector(".yj-icon").className = "yj-icon snapshot-icon") }, content: s }), r.snapshotWindow.setPosition({ left: "", right: 5, top: 60 }), r.snapshotWindow.windowHide(), xh.addEventListener(n.querySelector("#snapshot" + t), "click", (function (A) { if (i.snapshot) r.snapshotInfo = void 0, A.target.parentNode.style.backgroundColor = "", A.target.className = "yj-icon snapshot-icon", r.snapshotWindow.windowHide(); else { r.load([]), i.snapshot = !i.snapshot, r.snapshotWindow.windowShow(); var e = o.viewerImpl.modelManager.sceneState; A.target.parentNode.style.backgroundColor = "#1f89de", A.target.className = "yj-icon snapshot-icon active", e.getSelection() } })), xh.addEventListener(r.snapshotWindow.$el.querySelector("#add" + t), "click", (function (A) { var e = r.makeSnapshots(); "function" == typeof r.addListener ? r.addListener(e, (function (A, t) { A && r.add(t || e) })) : r.add(e) })), this.clear = function () { [].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot .snapshot-body"), (function (A, e) { A.innerHTML = "" })), r.snapshotInfo = {}, r.snapshotDelConf = !0 }, this.load = function (A) { Array.isArray(A) && A.forEach((function (A) { r.add(A) })) }, this.makeSnapshots = function () { var A, e, t, i, n, r = o.viewerImpl.modelManager.getModelSnapshotPhoto(); A = r.imgURL; var s = r.width, l = r.height, c = o.viewerImpl.getSceneState(); e = c.camera, t = c.state, i = c.selection.concat(), n = c.modelSelection.concat(); var h = a; return a += 1, { cameraState: e, componentState: t, highlightComponentsKeys: i, highlightModelsKeys: n, imageURL: A, width: s, height: l, num: h, code: (new Date).getTime().toString(), name: "快照" + h, description: "无注释" } }, xh.addEventListener(r.snapshotWindow.$el.querySelector(".snapshot-body"), "click", (function (A) { switch (A.target.className) { case "snapshot-node-delete": r.snapshotsDelete(A); break; case "snapshot-node-img": r.snapshotsflyto(A); break; case "snapshot-node-annotation": r.snapshotsAnnotation(A); break; case "snapshot-node-button-update": r.snapshotUpdate(A) } })), xh.addEventListener(r.snapshotWindow.$el.querySelector(".snapshot-body"), "dblclick", (function (A) { switch (A.target.className) { case "snapshot-node-name": r.snapshotsRename(A) } })), this.add = function (A) { var e = A.imageURL, t = A.width, i = A.height, o = A.code, n = A.name, a = A.num, s = A.description; if (A.cameraState && A.componentState && e && o && t && i) { for (var l = r.snapshotWindow.$el.querySelectorAll(".snapshot-node"), c = 0; l.length > c; c += 1) xh.css(l[c], { border: "2px" }); var h = '
' + n + '×
'; [].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot-body"), (function (A, e) { xh.append(A, h) })), r.snapshotInfo[o] = A } }, this.snapshotsflyto = function (A) { for (var e = r.snapshotWindow.$el.querySelectorAll(".snapshot-node"), t = 0; e.length > t; t += 1) xh.css(e[t], { border: "2px" }); var i = A.target.parentNode.parentNode.getAttribute("code"); "function" == typeof r.restoreToSnapshotListener ? r.restoreToSnapshotListener(i, (function (A) { r.restoreToSnapshot(i) })) : r.restoreToSnapshot(i) }, this.restoreToSnapshot = function (A) { var e = r.snapshotInfo[A]; if (e) { o.viewerImpl.setSceneState({ camera: e.cameraState, state: e.componentState, selection: e.highlightComponentsKeys, modelSelection: e.highlightModelsKeys }); var t = r.snapshotWindow.$el.querySelector("div[imgid='" + A + "']"); t && xh.css(t, { border: "2px solid #002553" }) } }, this.snapshotsPlay = function () { var A = null; function e(t) { var i = r.snapshotWindow.$el.querySelectorAll(".snapshot-node"); if (0 !== i.length) { var n, a = i[t].getAttribute("imgid"); if (void 0 === r.snapshotInfo[a]) i.length > t && e(t + 1); else { for (var s = 0; i.length > s; s += 1) xh.css(i[s], { border: "2px" }); xh.css(i[t], { border: "2px solid #002553" }), o.viewerImpl.setSceneState({ camera: r.snapshotInfo[a].cameraState, state: r.snapshotInfo[a].componentState, selection: r.snapshotInfo[a].highlightComponentsKeys, modelSelection: r.snapshotInfo[a].highlightModelsKeys }), i.length - 1 > t ? A = setTimeout((n = t + 1, function () { e(n) } ), 1e3) : [].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot-play"), (function (A, e) { A.innerHTML = "播放模型快照" })) } i.length > t || [].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot-play"), (function (A, e) { A.innerText = "播放模型快照" })) } else [].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot-play"), (function (A, e) { A.innerText = "播放模型快照" })) } return function (t) { if ("播放模型快照" === t.target.innerText) { t.target.innerText = "停止播放"; e(0) } else "停止播放" === t.target.innerText && (t.target.innerText = "播放模型快照", A && clearTimeout(A)) } }(), xh.addEventListener(r.snapshotWindow.$el.querySelector(".snapshot-play"), "click", (function (A) { r.snapshotsPlay(A) })), this.snapshotsDelete = function (A) { var e = A.target.parentNode.parentNode.getAttribute("imgid"); if (r.snapshotDelConf) { var t = qd.alert("info", { msg: "删除不可恢复,确认删除?", title: "删除确认", backdrop: !0, buttons: { yes: { closeOnClick: !1, text: "删除并不再提示" }, no: { closeOnClick: !1, text: "删除" } }, callback: function (A, t) { "no" !== t && "yes" !== t || ("yes" === t && (r.snapshotDelConf = !1), "function" == typeof r.deleteListener ? r.deleteListener(e, (function (A) { A && r.delete(e) })) : r.delete(e)), A.destroy() } }), i = (new Date).getTime() - qd.window.startTime; [].map.call(r.snapshotWindow.$el.querySelectorAll(".lobibox-backdrop"), (function (A, e) { xh.css(A, { "z-index": i }) })), t.$el.style.zIndex = i + 2 } else "function" == typeof r.deleteListener ? r.deleteListener(e, (function (A) { A && r.delete(e) })) : r.delete(e) }, this.delete = function (A) { var e = r.snapshotWindow.$el.querySelector("div[imgid='" + A + "']"); e && e.remove(), delete r.snapshotInfo[A] }, this.snapshotsRename = function (A) { o.viewerImpl.cameraControl.enabled = !1; var e = A.target, t = e.parentNode.parentNode.getAttribute("imgid"), i = e.innerText, n = document.createElement("input"); n.type = "text", n.value = i, e.innerText = "", xh.append(e, n), n.focus(), n.select(), n.addEventListener("blur", (function (A) { var e = A.target; e.removeEventListener("blur", (function () {})), e.value !== i && "" !== xh.trim(e.value) ? "function" == typeof r.renameListener ? r.renameListener(t, e.value, (function (A, o) { A ? r.rename(t, o || e.value) : e.parentNode.innerText = i })) : r.rename(t, e.value) : e.parentNode.innerText = i, n.remove(), o.viewerImpl.cameraControl.enabled = !0 })) }, this.rename = function (A, e) { var t = r.snapshotWindow.$el.querySelector("div[imgid='" + A + "']"); if (t) { var i = t.querySelector(".snapshot-node-name"); i && (i.innerText = e) } r.snapshotInfo[A].name = e }, this.snapshotUpdate = function (A) { var e = A.target.parentNode.parentNode.getAttribute("imgid"), t = r.makeSnapshots(); "function" == typeof r.updateListener ? r.updateListener(e, t, (function (A, i, o) { A && r.update(i || e, o || t) })) : r.update(e, t) }, this.update = function (A, e) { var t = r.snapshotInfo[A]; t && (t.cameraState = e.cameraState, t.componentState = e.componentState, t.highlightComponentsKeys = e.highlightComponentsKeys, t.highlightModelsKeys = e.highlightModelsKeys, t.imageURL = e.imageURL); var i = r.snapshotWindow.$el.querySelector("div[imgid='" + A + "']"); if (i) { var o = i.querySelector(".snapshot-node-img"); o && (o.src = e.imageURL) } }, this.snapshotsAnnotation = function (A) { var e = A.target, t = e.parentNode.parentNode.getAttribute("imgid"), i = e.innerHTML, o = qd.prompt("text", { title: "添加/修改-注释/说明", value: e.innerHTML, multiline: !0, modal: !0, backdrop: !0, lines: 6, attrs: { placeholder: "无注释" }, buttons: { ok: { class: "btn btn-info", closeOnClick: !1, text: "确定" }, cancel: { class: "btn btn-danger", closeOnClick: !1, text: "取消" } }, callback: function (A, n) { if ("ok" === n) { var a = o.getValue(); a !== i && "" !== xh.trim(a) ? "function" == typeof r.annotationListener ? r.annotationListener(t, a, (function (A, e, i) { A && r.annotation(e || t, i || a) })) : r.annotation(t, a) : e.innerHTML = i, A.destroy() } else "cancel" === n && A.destroy() } }), n = (new Date).getTime() - qd.window.startTime; [].map.call(r.snapshotWindow.$el.querySelectorAll(".lobibox-backdrop"), (function (A, e) { xh.css(A, { "z-index": n }) })), o.$el.style.zIndex = n + 2 }, this.annotation = function (A, e) { var t = r.snapshotWindow.$el.querySelector("div[imgid='" + A + "']"); if (t) { var i = t.querySelector(".snapshot-node-annotation"); i && (i.innerText = e) } r.snapshotInfo[A].description = e }, this.getSnapshotByKey = function (A) { return r.snapshotInfo ? r.snapshotInfo[A] : null }, this.getAllSnapshot = function () { return r.snapshotInfo ? r.snapshotInfo : null } }, Xd = function (A, e) { var t = this; qd.viewport = document.querySelector("#" + A.viewport), A.getViewerImpl().getModelManager().addEventListener(Rc.ON_LOAD_ERROR, (function (A) { jd("error", A.message || "加载出现错误", !1) })), A.getViewerImpl().getModelManager().addEventListener(Rc.ON_LOAD_INVALID_SCENE, (function (A) { jd("error", "key为 " + A.modelKey + " 的模型信息不合法", !1) })), A.getViewerImpl().getModelManager().addEventListener(Rc.ON_NETWORK_ERROR, (function (A) { jd("error", A.message || "网络连接错误", !1) })), A.getViewerImpl().getModelManager().addEventListener(Rc.NO_PERMISSION, (function (A) { jd("error", A.message || "权限不足", !1) })), A.getViewerImpl().getModelManager().addEventListener(Rc.ACCOUNT_NO_EXIST, (function (A) { jd("error", A.message || "无法获取账户", !1) })), A.getViewerImpl().getModelManager().addEventListener(Rc.ON_LOAD_EMPTY_SCENE, (function (A) { jd("error", "key为 " + A.modelKey + " 的模型场景为空,请生成场景", !1) })), A.getViewerImpl().getModelManager().addEventListener(Tc.PARSEFAILE, (function (A) { jd("error", "key为 " + A.modelKey + " 的模型解析失败", !1) })), A.getViewerImpl().getModelManager().addEventListener(Tc.PARSING, (function (A) { jd("error", "key为 " + A.modelKey + " 的模型解析中", !1) })), A.getViewerImpl().getModelManager().addEventListener(Tc.SCENE_NOTHING_TO_LOAD, (function (A) { jd("error", "key为 " + A.modelKey + " 的模型没有可加载的内容", !1) })); var i = A.viewerImpl.uuid, o = { roam: !1, sectioning: !1, multiple: !1, fullScreen: !1, attribute: !1, search: !1, measurement: !1, modelTree: !1, treeDataLoad: !1, snapshot: !1, postil: !1, mark: !1 }, n = { home: !0, fit: !0, restore: !0, roam: !0, multiple: !0, transparent: !1, hide: !0, isolation: !0, sectioning: !0, modelPartition: !0, wireframe: !0, color: !0, setting: !0, modelTree: !1, attribute: !0, search: !1, measurement: !0, snapshot: !0, postil: !0, mark: !0 }, r = { Flag: o, lobibox: qd, toolId: i, viewer: A }; this.progressBar = new zd(A.viewerImpl.domElement, i); var a = {}; A.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_PROGRESS, (function (A) { a[A.progress.modelKey] = [A.progress.total, A.progress.loaded]; var e = 0, i = 0; for (var o in a) if (a.hasOwnProperty(o)) { var n = a[o]; e += n[0], i += n[1] } t.progressBar.setProgressBar(i, e) })), A.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_COMPLETE, (function (A) { delete a[A.modelKey], 0 === Object.keys(a).length && t.progressBar.setProgressBar(1, 1) })); A.viewerImpl.getScene(); this.undoList = [], this.redoList = [], this.maxUndoListLength = 10; var s, l, c, h, d = 0; function p(e) { var i = t.undoList[e - 1]; if (i) switch (i.type) { case "隐藏": A.showComponentsByKey(i.data); break; case "隔离": A.closeIsolateComponentsByKey(i.data); break; case "修改颜色": A.closeColorfulComponentsByKey(i.data.key); break; case "框选添加": A.closeHighlightComponentsByKey(i.data); break; case "框选移除": A.highlightComponentsByKey(i.data); break; case "修改线框": A.closeWireFrameComponentsByKey(i.data) } } function g(e) { var i = t.redoList[e]; if (i) switch (i.type) { case "隐藏": A.hideComponentsByKey(i.data); break; case "隔离": A.isolateComponentsByKey(i.data); break; case "修改颜色": A.colorfulComponentsByKey(i.data.key, i.data.color, i.data.opacity); break; case "框选添加": A.highlightComponentsByKey(i.data); break; case "框选移除": A.closeHighlightComponentsByKey(i.data); break; case "修改线框": A.wireFrameComponentsByKey(i.data) } } function u(A) { if (void 0 !== A.target.undoNum) { var e = Number(A.target.undoNum); 1 === e && jd("info", "无法再撤销、重做。请使用ctrl+z或ctrl+shift+z", 3e3), isNaN(e) || t.undoOrRedo(e) } } this.className = "Tool", this.getToolId = function () { return i }, this.getFlag = function () { return o }, this.createTool = function (e) { t.options = uh.extend(!0, {}, n, e); var a = document.createElement("div"); a.id = "my-tool" + i, a.className = "yj-tool", A.viewerImpl.domElement.appendChild(a), this.toolbarTop = a, t.toolbar = a; var s = document.createElement("div"); s.className = "yj-group", a.appendChild(s); var l = document.createElement("div"); l.className = "homeViewer-div", l.id = "homeViewerDiv" + i, l.style.display = "flex"; var c = document.createElement("button"); c.className = "yj-but", c.title = "视图操作", c.id = "homeViewer" + i; var h = document.createElement("div"); h.classList.add("yj-icon"), h.classList.add("homeViewer-icon"), c.appendChild(h); var p = document.createElement("div"); p.className = "viewerModal", p.id = "viewerModal" + i, l.appendChild(c), l.appendChild(p), t.options.home && s.appendChild(l), c.addEventListener("click", (function (A) { "" === p.style.display || "none" === p.style.display ? (DA(), p.style.display = "flex") : p.style.display = "none" })); var g = document.createElement("button"); g.className = "yj-but", g.title = "初始化", g.id = "home" + i; var u = document.createElement("div"); u.classList.add("yj-icon"), u.classList.add("home-icon"), g.appendChild(u), t.options.home && p.appendChild(g); var f = document.createElement("button"); f.className = "yj-but", f.title = "聚焦", f.id = "fit" + i; var m = document.createElement("div"); m.classList.add("yj-icon"), m.classList.add("fit-icon"), f.appendChild(m), t.options.fit && p.appendChild(f); var C = document.createElement("button"); C.className = "yj-but", C.title = "复位", C.id = "restore" + i; var y = document.createElement("div"); y.classList.add("yj-icon"), y.classList.add("restore-icon"), C.appendChild(y); var v = document.createElement("ul"); v.className = "restoreModal", v.style.cssText += "display: none;", v.id = "restoreModal" + i; for (var I = 0; 6 > I; I += 1) { var E = document.createElement("li"); E.className = "input-group-addon", v.appendChild(E); var B = document.createElement("input"); B.type = "checkbox", B.className = 5 === I ? "checkAll" : "check", E.appendChild(B); var x = document.createElement("label"); switch (E.appendChild(x), I) { case 0: B.id = "showSet" + i, x.setAttribute("for", "showSet" + i), x.innerHTML = "复位构件可见设置"; break; case 1: B.id = "highlightSet" + i, x.setAttribute("for", "highlightSet" + i), x.innerHTML = "复位构件高亮设置"; break; case 2: B.id = "viewSet" + i, x.setAttribute("for", "viewSet" + i), x.innerHTML = "复位模型视角设置"; break; case 3: B.id = "wireframeSet" + i, x.setAttribute("for", "wireframeSet" + i), x.innerHTML = "复位构件线框设置"; break; case 4: B.id = "colorSet" + i, x.setAttribute("for", "colorSet" + i), x.innerHTML = "复位构件颜色设置"; break; case 5: B.id = "checkAll" + i, x.setAttribute("for", "checkAll" + i), x.innerHTML = "全选"; var S = document.createElement("input"); S.type = "button", S.id = "reset" + i, S.className = "reset", S.value = "复位选中项", E.appendChild(S) } } var w = document.createElement("ul"); w.className = "history", w.id = "history" + i, w.style.cssText += "display: none;"; var M = document.createElement("span"); M.innerText = "历史记录", M.style.cssText += "color:white", w.appendChild(M), t.options.restore && (s.appendChild(C), s.appendChild(v), s.appendChild(w), v.style.cssText += "margin-left:" + C.style.left - v.style.width / 2 + "px"); var b = document.createElement("button"); b.className = "yj-but", b.title = "漫游", b.id = "roam" + i; var U = document.createElement("div"); U.classList.add("yj-icon"), U.classList.add("roam-icon"), b.appendChild(U); var F = document.createElement("div"); F.classList.add("roamModal"), F.classList.add("clearfix"), F.id = "roamModal" + i, F.innerHTML = '
提示信息
-
+
提示信息
-
+
'; var K = document.createElement("div"); K.className = "roamOnOff", K.innerHTML = '
碰撞:
重力:
', t.options.roam && (s.appendChild(b), s.appendChild(F), s.appendChild(K), F.style.cssText += "margin-left:" + b.style.left - F.style.width / 2 + "px"); var Q = document.createElement("div"); Q.className = "yj-group", a.appendChild(Q); var R = null; t.options.multiple && (R = function (A, e) { var t = A.toolId, i = A.Flag, o = A.viewer, n = document.createElement("button"); n.className = "yj-but", n.title = "框选", n.id = "multiple" + t; var r = document.createElement("div"); r.classList.add("yj-icon"), r.classList.add("multiple-icon"), n.appendChild(r); var a = null; return n.addEventListener("click", (function () { if (i.multiple) return this.style.backgroundColor = "", this.querySelector(".yj-icon").className = "yj-icon multiple-icon", i.multiple = !1, a && a.remove(), a = null, void o.viewerImpl.controlManager.disableTool(Pc.PICK_BY_RECT); i.roam && (document.getElementById("roam" + t).style.backgroundColor = "", document.getElementById("roam" + t).querySelector(".yj-icon").className = "yj-icon roam-icon", jd("info", "框选模式下将关闭漫游功能", 2e3), e.exitRoam()), i.measurement && (document.getElementById("measurement" + t).style.backgroundColor = "", document.getElementById("measurement" + t).querySelector(".yj-icon").className = "yj-icon measurement-icon", jd("info", "框选模式下将关闭测量功能", 2e3), e.exitMeasure && e.exitMeasure()), i.sectioning && (document.getElementById("sectioning" + t).style.backgroundColor = "", document.getElementById("sectioning" + t).querySelector(".yj-icon").className = "yj-icon sectioning-icon", jd("info", "框选模式下将关闭剖切功能", 2e3), o.viewerImpl.controlManager.disableTool(Pc.CLIP_BY_BOX), i.sectioning = !1), o.render(), a = jd("info", "按住'Ctrl'键,框选模式为增选;按住'Alt'键,框选模式为减选", 5e3), this.style.backgroundColor = "#1f89de", this.querySelector(".yj-icon").className = "yj-icon multiple-icon active", i.multiple = !i.multiple, o.viewerImpl.controlManager.enableTool(o.viewerImpl, Pc.PICK_BY_RECT) })), n }(r, this), Q.appendChild(R)); var T = document.createElement("button"); T.className = "yj-but", T.title = "构件透明化", T.id = "transparent" + i; var k = document.createElement("div"); k.classList.add("yj-icon"), k.classList.add("transparent-icon"), T.appendChild(k); var D = document.createElement("div"); D.classList.add("transparentModal"), D.classList.add("clearfix"), D.id = "transparentModal" + i; var L = document.createElement("div"); D.appendChild(L); var N = document.createElement("span"); N.innerHTML = "提示信息", N.className = "transparent-info", L.appendChild(N), (uA = document.createElement("div")).className = "subtract", uA.innerHTML = "-", D.appendChild(uA); var O = document.createElement("div"); O.className = "transparentRangeParent", D.appendChild(O); var V = document.createElement("input"); V.type = "range", V.className = "transparentRange", V.setAttribute("step", "0.01"), V.setAttribute("min", "0"), V.setAttribute("max", "1"), O.appendChild(V), (CA = document.createElement("div")).className = "add", CA.innerHTML = "+", D.appendChild(CA), t.options.transparent && (Q.appendChild(T), Q.appendChild(D), D.style.cssText += "margin-left:" + T.style.left - D.style.width / 2 + "px"); var G = document.createElement("div"); G.className = "toolComponentDiv", G.id = "toolComponentDiv" + i, G.style.display = "flex"; var P = document.createElement("button"); P.className = "yj-but", P.title = "构件操作", P.id = "toolComponent" + i; var q = document.createElement("div"); q.classList.add("yj-icon"), q.classList.add("toolComponent-icon"), P.appendChild(q); var j = document.createElement("div"); j.className = "toolComponentModal", j.id = "toolComponentModal" + i, G.appendChild(P), G.appendChild(j), Q.appendChild(G), P.addEventListener("click", (function (A) { "" === j.style.display || "none" === j.style.display ? (DA(), j.style.display = "flex") : j.style.display = "none" })); var H = document.createElement("button"); H.className = "yj-but", H.title = "构件隐藏", H.id = "hide" + i; var Y = document.createElement("div"); Y.classList.add("yj-icon"), Y.classList.add("hide-icon"), H.appendChild(Y), t.options.hide && j.appendChild(H); var W = document.createElement("button"); W.className = "yj-but", W.title = "构件隔离", W.id = "insulate" + i; var J = document.createElement("div"); J.classList.add("yj-icon"), J.classList.add("insulate-icon"), W.appendChild(J), t.options.isolation && j.appendChild(W); var z = document.createElement("button"); z.className = "yj-but", z.title = "构件属性", z.id = "attribute" + i; var Z = document.createElement("div"); Z.classList.add("yj-icon"), Z.classList.add("attribute-icon"), z.appendChild(Z), t.options.attribute && (j.appendChild(z), this.attributeWindow = function (A) { var e = A.lobibox, t = A.toolId, i = A.Flag, o = document.createElement("div"); o.className = "tab-body", o.id = "tab-properties" + t; var n = document.createElement("table"); n.classList.add("sx-table"), n.classList.add("table-no-top"), o.appendChild(n); var r = document.createElement("thead"); n.appendChild(r); var a = document.createElement("tbody"); n.appendChild(a); var s = document.createElement("tr"); s.className = "noprop", a.appendChild(s); var l = document.createElement("td"); return l.innerText = "尚未选择构件", s.appendChild(l), e.window({ title: "属性", width: 334, height: 688, closeOnEsc: !1, closeButton: !0, afterWindowHide: function () { var A = document.getElementById("attribute" + t); i.attribute = !1, A && (A.style.backgroundColor = "", A.querySelector(".yj-icon").className = "yj-icon attribute-icon") }, content: o }) }(r), t.attributeWindow.setPosition({ left: "", right: 5, top: 60 }), t.attributeWindow.windowHide(), z.addEventListener("click", (function () { if (o.attribute) this.style.backgroundColor = "", t.attributeWindow.windowHide(); else { o.attribute = !o.attribute, this.style.backgroundColor = "#1f89de", this.querySelector(".yj-icon").className = "yj-icon attribute-icon active", t.attributeWindow.windowShow(); var e = A.viewerImpl.modelManager.sceneState; e.getSelection() && t.showComponentAttribute(e.getSelection()[0]) } }))); var X = document.createElement("button"); X.className = "yj-but", X.title = "构件线框化", X.id = "wireframe" + i; var _ = document.createElement("div"); _.classList.add("yj-icon"), _.classList.add("wireframe-icon"), X.appendChild(_), t.options.wireframe && j.appendChild(X); var $ = document.createElement("button"); $.className = "yj-but", $.title = "构件变色", $.id = "color" + i, $.style.borderRadius = "0 6px 6px 0"; var AA = document.createElement("div"); AA.classList.add("yj-icon"), AA.classList.add("color-icon"), $.appendChild(AA); var eA = document.createElement("input"); eA.style.cssText += "display:none;", eA.className = "toolColorInput", $.appendChild(eA); var tA = new Hh(eA, { hasOpacity: !0 }).element; tA.id = "colorModal" + i, tA.className = "colorModal", t.options.color && (j.appendChild($), Q.appendChild(tA), tA.style.cssText += "margin-left:" + $.offsetLeft + "px"), tA.querySelector(".btn-yes").addEventListener("click", (function () { var e = A.getHighlightComponentsKey(), i = Kd.getHexStringFromRGB(eA.value), o = Kd.getColorArrayFromRGBA(eA.value)[3]; t.push({ type: "修改颜色", data: { key: e, color: i, opacity: o } }), A.colorfulComponentsByKey(e, i, o) })); var iA = document.createElement("button"); iA.className = "yj-but", iA.title = "模型测量", iA.id = "measurement" + i; var oA = document.createElement("div"); oA.classList.add("yj-icon"), oA.classList.add("measurement-icon"), iA.appendChild(oA), t.options.measurement && (Q.appendChild(iA), iA.addEventListener("click", (function (e) { o.measurement ? (o.measurement = !1, this.style.backgroundColor = "", this.querySelector(".yj-icon").className = "yj-icon measurement-icon", A.viewerImpl.controlManager.disableTool(Pc.PICK_BY_MEASURE)) : (o.measurement = !0, this.style.backgroundColor = "#1f89de", this.querySelector(".yj-icon").className = "yj-icon measurement-icon active", A.viewerImpl.controlManager.enableTool(A.viewerImpl, Pc.PICK_BY_MEASURE)) }))); var nA = document.createElement("div"); nA.className = "toolModelDiv", nA.id = "toolModelDiv" + i, nA.style.display = "flex"; var rA = document.createElement("button"); rA.className = "yj-but", rA.title = "模型操作", rA.id = "toolModel" + i; var aA = document.createElement("div"); aA.classList.add("yj-icon"), aA.classList.add("toolModel-icon"), rA.appendChild(aA); var sA = document.createElement("div"); sA.className = "toolModelModal", sA.id = "toolModelModal" + i, nA.appendChild(rA), nA.appendChild(sA), Q.appendChild(nA), rA.addEventListener("click", (function (A) { "" === sA.style.display || "none" === sA.style.display ? (DA(), sA.style.display = "flex") : sA.style.display = "none" })); var lA = document.createElement("button"); lA.className = "yj-but", lA.title = "模型剖切", lA.id = "sectioning" + i; var cA = document.createElement("div"); cA.classList.add("yj-icon"), cA.classList.add("sectioning-icon"), lA.appendChild(cA), t.options.sectioning && sA.appendChild(lA); var hA = document.createElement("button"); hA.className = "yj-but", hA.title = "模型分解", hA.id = "modelPartition" + i; var dA = document.createElement("div"); dA.classList.add("yj-icon"), dA.classList.add("modelPartition-icon"), hA.appendChild(dA); var pA = document.createElement("div"); pA.classList.add("modelPartitionModal"), pA.id = "modelPartitionModal" + i, pA.style.cssText += "display: none;"; var gA = document.createElement("div"); pA.appendChild(gA); var uA, fA = document.createElement("span"); fA.innerHTML = "提示信息", fA.className = "modelPartition-info", gA.appendChild(fA), (uA = document.createElement("div")).className = "subtract", uA.innerHTML = "-", pA.appendChild(uA); var mA = document.createElement("div"); mA.className = "modelPartitionRangeParent", pA.appendChild(mA); var CA, yA = document.createElement("input"); yA.type = "range", yA.className = "modelPartitionRange", yA.setAttribute("value", "1"), yA.setAttribute("name", "points"), yA.setAttribute("step", "0.01"), yA.setAttribute("min", "1"), yA.setAttribute("max", "3"), mA.appendChild(yA), (CA = document.createElement("div")).className = "add", CA.innerHTML = "+", pA.appendChild(CA), t.options.modelPartition && (sA.appendChild(hA), Q.appendChild(pA), D.style.cssText += "margin-left:" + hA.style.left - pA.style.width / 2 + "px"); var vA = document.createElement("div"); vA.className = "toolPostilDiv", vA.id = "toolPostilDiv" + i, vA.style.display = "flex", (wA = document.createElement("button")).className = "yj-but", wA.title = "批注操作", wA.id = "toolPostil" + i; var IA = document.createElement("div"); IA.classList.add("yj-icon"), IA.classList.add("toolPostil-icon"), wA.appendChild(IA); var EA = document.createElement("div"); EA.className = "toolPostilModal", EA.id = "toolPostilModal" + i, vA.appendChild(wA), vA.appendChild(EA), Q.appendChild(vA), wA.addEventListener("click", (function (A) { "" === EA.style.display || "none" === EA.style.display ? (DA(), EA.style.display = "flex") : EA.style.display = "none" })); var BA = document.createElement("button"); BA.className = "yj-but", BA.title = "添加标签", BA.id = "mark" + i; var xA = document.createElement("div"); if (xA.classList.add("yj-icon"), xA.classList.add("label-icon"), BA.appendChild(xA), t.options.mark && (EA.appendChild(BA), t.mark = new Hd(r, this)), t.options.snapshot) { xh.append(EA, ''); var SA = document.getElementById("snapshot" + i); SA.addEventListener("mouseover", (function (A) { this.style.backgroundColor = "#1f89de" })), SA.addEventListener("mouseout", (function (A) { o[this.id.split(i)[0]] || (this.style.backgroundColor = "") })), t.snapshot = new Zd(r, this) } if (t.options.postil) { var wA; xh.append(EA, wA = ''); var MA = document.getElementById("postil" + i); MA.addEventListener("mouseover", (function (A) { this.style.backgroundColor = "#1f89de" })), MA.addEventListener("mouseout", (function (A) { o[this.id.split(i)[0]] || (this.style.backgroundColor = "") })), t.postil = new Jd(r, this) } var bA = document.createElement("div"); bA.className = "yj-group", bA.style.display = "flex", bA.style.width = "160px", a.appendChild(bA); var UA = document.createElement("button"); UA.className = "yj-but", UA.title = "设置", UA.id = "set" + i, UA.style.borderRadius = "6px"; var FA = document.createElement("div"); FA.classList.add("yj-icon"), FA.classList.add("set-icon"), UA.appendChild(FA); var KA = document.createElement("div"); KA.className = "setModal", KA.id = "setModal" + i; var QA = document.createElement("div"); QA.className = "sceneColorDiv", QA.title = "选择背景颜色", KA.appendChild(QA); var RA = document.createElement("button"); RA.id = "sceneColorSet" + i, RA.classList.add("yj-icon"), RA.classList.add("sceneColorSet"), QA.appendChild(RA); var TA = document.createElement("input"); TA.style.cssText += "display:none;", TA.className = "sceneColorInput", QA.appendChild(TA); var kA = new Hh(TA, { hasOpacity: !0 }).element; function DA() { v && (v.style.display = "none"), D && (D.style.display = "none"), pA && (pA.style.display = "none"), tA && (tA.style.display = "none"), p && (p.style.display = "none"), j && (j.style.display = "none"), sA && (sA.style.display = "none"), EA && (EA.style.display = "none"), KA && (KA.style.display = "none"), w && (w.style.display = "none") } kA.id = "sceneColorModal" + i, kA.className = "sceneColorModal", kA.querySelector(".btn-yes").addEventListener("click", (function () { DA(); var e = Kd.getHexStringFromRGB(TA.value), t = Kd.getColorArrayFromRGBA(TA.value)[3]; A.setSceneBackGroundColor(e, t) })), kA.querySelector(".btn-no").addEventListener("click", (function () { DA() })); var LA = document.createElement("div"); LA.className = "fullScreenDiv", LA.title = "全屏显示", KA.appendChild(LA); var NA = document.createElement("button"); function OA(A) { A.stopPropagation ? A.stopPropagation() : A.cancelBubble = !0 } NA.classList.add("yj-icon"), NA.classList.add("fullScreen"), NA.id = "Fullscreen" + i, LA.appendChild(NA), t.options.setting && (bA.appendChild(UA), bA.appendChild(KA), KA.appendChild(kA), kA.style.cssText += "margin-left:" + (UA.offsetWidth + 5) + "px;"), document.addEventListener("click", (function (A) {})), document.addEventListener("keydown", (function (A) { 27 === (A.keyCode ? A.keyCode : A.which) && (o.roam && b.click(), o.measurement && document.querySelector("#measurement" + i).click(), o.multiple && R && R.click(), o.sectioning && lA.click()), (A.keyCode ? A.keyCode : A.which) === Oh && (!0 === A.ctrlKey && !0 === A.shiftKey && t.undoOrRedo(d + 1), !0 === A.ctrlKey && !1 === A.shiftKey && t.undoOrRedo(d - 1)) })), g.addEventListener("click", (function () { t.clearUndoList(), A.resetScene() })), f.addEventListener("click", (function () { A.adaptiveSize() })), C.addEventListener("click", (function (A) { "none" === v.style.display && DA(), v.addEventListener("click", (function (A) { OA(A) })), w.addEventListener("click", (function (A) { OA(A) })), v.style.display = "none" === v.style.display ? "block" : "none", w.style.display = "none" === w.style.display ? "block" : "none", OA(A) })), document.getElementById("reset" + i).addEventListener("click", (function () { var e = document.getElementById("showSet" + i).checked, t = document.getElementById("highlightSet" + i).checked, o = document.getElementById("viewSet" + i).checked, n = document.getElementById("wireframeSet" + i).checked, r = document.getElementById("colorSet" + i).checked, a = {}; a.visible = e, a.selected = t, a.wireframed = n, a.colorfully = r, a.view = o, A.resetScene(a) })); var VA = document.querySelectorAll("input[type=checkbox].check"); document.querySelector("input[type=checkbox].checkAll").addEventListener("click", (function () { for (var A = 0; VA.length > A; A += 1) VA[A].checked = this.checked })); for (var GA = 0; VA.length > GA; GA += 1) VA[GA].addEventListener("click", (function () { document.querySelector("input[type=checkbox].checkAll").checked = VA.length === document.querySelectorAll("input[type=checkbox].check:checked").length })); this.pathRoam = Yd(r, this, b, 0, K), t.pathRoam.setPosition({ left: "", right: 5, top: 60 }), t.pathRoam.windowHide(); var PA = D.querySelector(".subtract"), qA = D.querySelector(".add"), jA = D.querySelector(".transparentRange"); T.addEventListener("click", (function (e) { if ("none" === D.style.display && DA(), D.addEventListener("click", (function (A) { OA(A) })), D.style.display = "none" === D.style.display ? "block" : "none", 1 > A.getHighlightComponentsKey().length) jd("warning", "未选中构件", 2e3), D.style.display = "none"; else { jA.value = 1, document.querySelector(".transparent-info").innerText = "透明度: " + 100..toFixed(0) + "%" } OA(e) })); var HA = mh.isIE11(); jA.addEventListener(HA ? "change" : "input", (function (e) { var t = A.getHighlightComponentsKey(); document.querySelector(".transparent-info").innerHTML = "透明度: " + (100 * Number(jA.value)).toFixed(0) + "%", A.transparentComponentsByKey(t, Number(jA.value), !1) })), PA.addEventListener("click", (function () { var e = Number(jA.value), t = Number(jA.getAttribute("step")); jA.value = e - t; var i = A.getHighlightComponentsKey(); document.querySelector(".transparent-info").innerHTML = "透明度: " + (100 * Number(jA.value)).toFixed(0) + "%", A.transparentComponentsByKey(i, Number(jA.value), !1) })), qA.addEventListener("click", (function () { var e = Number(jA.value), t = Number(jA.getAttribute("step")); jA.value = e + t; var i = A.getHighlightComponentsKey(); document.querySelector(".transparent-info").innerHTML = "透明度: " + (100 * Number(jA.value)).toFixed(0) + "%", A.transparentComponentsByKey(i, Number(jA.value), !1) })), H.addEventListener("click", (function () { var e = A.getHighlightComponentsKey(); 1 > e.length ? jd("warning", "未选中构件", 2e3) : (t.push({ type: "隐藏", data: e }), A.hideComponentsByKey(e)) })), W.addEventListener("click", (function () { var e = A.getHighlightComponentsKey(); 1 > e.length ? jd("warning", "未选中构件", 2e3) : (t.push({ type: "隔离", data: e }), A.isolateComponentsByKey(e)) })); var YA = document.createElement("div"); YA.className = "section-body"; var WA = document.createElement("div"); WA.style.cssText += "color: #ff6700;top: 10px;height: 60px;text-align: center;font-size: 16px;", YA.appendChild(WA); var JA = document.createElement("span"); JA.innerHTML = "是否显示剖切框", WA.appendChild(JA); var zA = document.createElement("input"); zA.type = "radio", zA.name = "UIControl", zA.value = 1, zA.checked = "checked", WA.appendChild(zA); var ZA = document.createElement("span"); ZA.innerHTML = "显示", WA.appendChild(ZA); var XA = document.createElement("input"); XA.type = "radio", XA.name = "UIControl", XA.value = 0, XA.checked = "", WA.appendChild(XA); var _A = document.createElement("span"); _A.innerHTML = "不显示", WA.appendChild(_A); var $A = document.createElement("button"); $A.innerHTML = "确定", $A.type = "button", $A.style.cssText += "width:80px;height:30px;border-radius:10px;display:block;margin:0 auto;", YA.appendChild($A), this.sectionWindow = qd.window({ title: "剖切", id: "sectionWindow", width: 334, height: 405, closeOnEsc: !1, closeButton: !0, afterWindowHide: function () { o.sectioning = !1, document.getElementById("sectioning" + i).style.backgroundColor = "", zA.checked = "checked", XA.checked = "", A.viewerImpl.controlManager.disableTool(Pc.CLIP_BY_BOX), A.render() }, content: YA }), t.sectionWindow.setPosition({ left: "", right: 5, top: 60 }), t.sectionWindow.windowHide(), lA.addEventListener("click", (function () { if (o.sectioning) return this.style.backgroundColor = "", this.querySelector(".yj-icon").className = "yj-icon sectioning-icon", t.sectionWindow.windowHide(), o.sectioning = !1, void A.disableSectionBox(); o.multiple && (document.getElementById("multiple" + i).style.backgroundColor = "", document.getElementById("multiple" + i).querySelector(".yj-icon").className = "yj-icon multiple-icon", jd("info", "剖切模式下将关闭框选功能", 2e3), A.viewerImpl.controlManager.disableTool(Pc.PICK_BY_RECT), o.multiple = !1), o.roam && (document.getElementById("roam" + i).style.backgroundColor = "", document.getElementById("roam" + i).querySelector(".yj-icon").className = "yj-icon roam-icon", jd("info", "剖切模式下将关闭漫游功能", 2e3), t.exitRoam()), o.measurement && (document.getElementById("measurement" + i).style.backgroundColor = "", document.getElementById("measurement" + i).querySelector(".yj-icon").className = "yj-icon measurement-icon", jd("info", "剖切模式下将关闭测量功能", 2e3), t.exitMeasure && t.exitMeasure()), A.render(), this.style.backgroundColor = "#1f89de", this.querySelector(".yj-icon").className = "yj-icon sectioning-icon active", t.sectionWindow.windowShow(), o.sectioning = !o.sectioning, A.enableSectionBox(), $A.addEventListener("click", (function () { document.querySelector("#sectionWindow input[type=radio]:checked").value > 0 ? A.showSectionBox() : A.hideSectionBox() })) })); var Ae = pA.querySelector(".subtract"), ee = pA.querySelector(".add"), te = pA.querySelector(".modelPartitionRange"); hA.addEventListener("click", (function (e) { o.roam && (document.getElementById("roam" + i).style.backgroundColor = "", jd("info", "模型分解模式下将关闭漫游功能", 2e3), t.exitRoam()), A.render(), pA.addEventListener("click", (function (A) { OA(A) })), "none" === pA.style.display ? (DA(), pA.style.display = "block") : pA.style.display = "none", fA.innerText = "离散系数: " + te.value, OA(e) })), te.addEventListener("change", (function (e) { document.querySelector(".modelPartition-info").innerText = "离散系数: " + te.value; var t = A.getViewerImpl().modelManager.getModelKeys(), i = Number(te.value); isNaN(i) || A.modelsExplosion({ modelKey: t, coefficientX: i, coefficientY: i, coefficientZ: i }) })), Ae.addEventListener("click", (function () { var e = te.value, t = Number(te.getAttribute("step")); te.value = Number(e) - t, document.querySelector(".modelPartition-info").innerText = "离散系数: " + te.value; var i = A.getViewerImpl().modelManager.getModelKeys(), o = Number(te.value); isNaN(o) || A.modelsExplosion({ modelKey: i, coefficientX: o, coefficientY: o, coefficientZ: o }) })), ee.addEventListener("click", (function () { var e = te.value, t = Number(te.getAttribute("step")); te.value = Number(e) + t, document.querySelector(".modelPartition-info").innerText = "离散系数: " + te.value; var i = A.getViewerImpl().modelManager.getModelKeys(), o = Number(te.value); isNaN(o) || A.modelsExplosion({ modelKey: i, coefficientX: o, coefficientY: o, coefficientZ: o }) })), X.addEventListener("click", (function () { var e = A.getHighlightComponentsKey(); 1 > e.length ? jd("warning", "未选中构件", 2e3) : (t.push({ type: "修改线框", data: e }), A.wireFrameComponentsByKey(e, !0)) })), $.addEventListener("click", (function (e) { "none" === tA.style.display && DA(), tA.addEventListener("click", (function (A) { OA(A) })), tA.style.display = "none" === tA.style.display ? "block" : "none", 1 > A.getHighlightComponentsKey().length && (jd("warning", "未选中构件", 2e3), tA.style.display = "none"), OA(e) })), UA.addEventListener("click", (function (A) { KA.addEventListener("click", (function (A) { OA(A) })), "" === KA.style.display || "none" === KA.style.display ? (DA(), KA.style.display = "flex") : KA.style.display = "none", kA.style.display = "none", OA(A) })), RA.addEventListener("click", (function (A) { kA.addEventListener("click", (function (A) { OA(A) })), kA.style.display = "none" === kA.style.display ? "block" : "none", OA(A) })), NA.addEventListener("click", (function (e) { DA(); var t = document.getElementById("Fullscreen" + i); o.fullScreen ? (o.fullScreen = !1, Wh.exitFullScreen(), t.className = "fullScreen", t.title = "全屏显示") : (o.fullScreen = !0, Wh.fullScreen(A.viewportDiv), t.className = "cancelFullScreen", t.title = "取消全屏") })), A.viewportDiv.focus() }, this.createTool2 = function () { var e = document.createElement("div"); e.id = "my-tool2" + i, e.className = "yj-tool2", A.viewerImpl.domElement.appendChild(e), this.toolbarTop = e; var n = document.createElement("div"); n.className = "yj-group", e.appendChild(n); var a = document.createElement("button"); a.className = "yj-but", a.title = "模型树", a.id = "modelTree" + i; var s = document.createElement("div"); s.classList.add("yj-icon"), s.classList.add("modelTree-icon"), a.appendChild(s), t.options.modelTree && n.appendChild(a); var l = document.createElement("button"); l.className = "yj-but", l.title = "查询", l.id = "search" + i; var c = document.createElement("div"); c.classList.add("yj-icon"), c.classList.add("search-icon"), l.appendChild(c); var h = document.createElement("div"); h.className = "yj-group", e.appendChild(h); var d = document.createElement("button"); d.className = "yj-but", d.title = "添加标签", d.id = "mark" + i; var p = document.createElement("div"); p.classList.add("yj-icon"), p.classList.add("label-icon"), d.appendChild(p), t.options.mark && (h.appendChild(d), t.mark = new Hd(r, this)); for (var g = document.querySelectorAll("button"), u = 0; g.length > u; u += 1) g[u].addEventListener("mouseover", (function (A) { this.style.backgroundColor = "#1f89de" })), g[u].addEventListener("mouseout", (function (A) { this.id.split(i).length > 1 && (o[this.id.split(i)[0]] || (this.style.backgroundColor = "")) })); if (A.viewerImpl.modelManager.addEventListener(Rc.ON_CLICK_PICK, (function (e) { o.attribute && (e.intersectInfo ? t.showComponentAttribute(A.viewerImpl.modelManager.sceneState.getSelection()[0]) : t.showComponentAttribute()) })), t.options.snapshot) { xh.append(h, ''); var f = document.getElementById("snapshot" + i); f.addEventListener("mouseover", (function (A) { this.style.backgroundColor = "#1f89de" })), f.addEventListener("mouseout", (function (A) { o[this.id.split(i)[0]] || (this.style.backgroundColor = "") })), t.snapshot = new Zd(r, this) } if (t.options.postil) { xh.append(h, ''); var m = document.getElementById("postil" + i); m.addEventListener("mouseover", (function (A) { this.style.backgroundColor = "#1f89de" })), m.addEventListener("mouseout", (function (A) { o[this.id.split(i)[0]] || (this.style.backgroundColor = "") })), t.postil = new Jd(r, this) } A.viewportDiv.focus() }, this.showComponentAttribute = (s = "", l = document.getElementById("tab-properties" + i), c = function (A, e, t) { var i = document.createElement("tr"); t.parentNode.appendChild(i), i.appendChild(document.createElement("td")), i.querySelector("td").innerHTML = A; var o = document.createElement("td"), n = null === e ? "" : e, r = document.createElement("span"); r.classList.add("value"), r.classList.add("nonEditable"), r.innerHTML = n, o.appendChild(r), i.appendChild(o) }, h = function (A, e) { var t = document.createElement("tr"); t.className = "sx-active", l.querySelector("table tbody").appendChild(t); var i = document.createElement("td"); for (var o in i.colSpan = 2, i.style.fontSize = "14px", t.appendChild(i), i.appendChild(document.createElement("b")), i.firstElementChild.innerHTML = A, e) c(o, e[o], t) }, function (e) { if (l = document.querySelector("#tab-properties" + i), e !== s) { if (void 0 === e) { var o = l.querySelectorAll("table tbody tr"); l.querySelector("table tbody").removeChild(o[0]), l.querySelector("table tbody").innerHTML = ""; var n = document.createElement("tr"); n.className = "noprop"; var r = document.createElement("td"); return r.setAttribute("colspan", "2"), r.innerHTML = "未选中构件", n.appendChild(r), l.querySelector("table tbody").appendChild(n), void(s = e) } s = e, l.querySelector("table tbody").innerHTML = ""; var a = A.viewerImpl.getModelByComponentKey(s), d = ""; a && (d = a.projectKey), t.getComponentAttribute({ key: s, projectKey: d }, (function (A) { if (l.querySelector("table tbody").innerHTML = "", null === A) { var e = document.createElement("tr"); e.className = "noprop"; var t = document.createElement("td"); return t.innerHTML = "没有属性", e.appendChild(t), void l.querySelector("table tbody").appendChild(e) } if (void 0 === A) { var i = document.createElement("tr"); i.className = "noprop"; var o = document.createElement("td"); return o.innerHTML = "属性加载失败", i.appendChild(o), void l.querySelector("table tbody").appendChild(i) } var n = document.createElement("tr"); n.className = "noprop"; var r = document.createElement("th"); n.appendChild(r); var a = document.createElement("span"); a.classList.add("value"), a.classList.add("nonEditable"), a.innerHTML = "名称", r.appendChild(a); var s = document.createElement("th"); n.appendChild(s); var d = document.createElement("span"); d.classList.add("value"), d.classList.add("nonEditable"), d.innerHTML = "值", s.appendChild(d), l.querySelector("table tbody").appendChild(n); var p = A; for (var g in p) "object" === lc(p[g]) ? h(g, p[g]) : "string" == typeof p[g] && c(g, p[g], n) })) } } ), this.undoOrRedo = function (A) { t.maxUndoListLength > A || (A = t.maxUndoListLength), 0 > A && (A = 0); var e = document.querySelectorAll(".history_li"); if (d > A) for (var i = d; i >= A; i -= 1) { p(i + 1); var o = e[i]; o && (o.classList.remove("history_redo"), o.classList.add("history_undo")) } if (A > d) for (var n = d; A > n; n += 1) { g(n); var r = e[n]; r && (r.classList.remove("history_undo"), r.classList.add("history_redo")) } d = A }, this.clearUndoList = function () { d = 0, t.undoList = [], t.redoList = []; var A = document.querySelector(".history"); if (A) { A.innerHTML = ""; var e = document.createElement("span"); e.innerText = "历史记录", e.style.cssText += "color:white", A.appendChild(e) } }, this.push = function (A) { if (t.undoList.length > d && (t.undoList.splice(d, t.maxUndoListLength), t.redoList.splice(d, t.maxUndoListLength)), t.maxUndoListLength > t.undoList.length || (t.undoList.shift(), t.redoList.shift(), d -= 1), t.maxUndoListLength - (d += 1), t.undoList.push(A), t.redoList.push(A), t.options.restore) { var e = document.querySelector(".history"); if (e) { e.innerHTML = ""; var i = document.createElement("span"); i.innerText = "历史记录", i.style.cssText += "color:white", e.appendChild(i); for (var o = 0; d > o; o += 1) { var n = document.createElement("li"); n.innerHTML = t.undoList[o].type, n.undoNum = o + 1, n.title = "点击执行撤销或重做", n.className = "history_li history_redo", n.addEventListener("click", u), e.appendChild(n) } } } }, A.getViewerImpl().getModelManager().addEventListener(Rc.ON_RECTPICK_ADD, (function (A) { A.list && t.push({ type: "框选添加", data: A.list }) })), A.getViewerImpl().getModelManager().addEventListener(Rc.ON_RECTPICK_REMOVE, (function (A) { A.list && t.push({ type: "框选移除", data: A.list }) })), this.getComponentAttribute = function (e, t) { A.getComponentsAttributeByKey(e.key, (function (A) { A && t(A.attribute) })) }, this.exitMeasure = function () { if (o.measurement) { var A = document.getElementById("measurement" + i); A && xh.fireEvent(A, "click") } }, this.exitRoam = function () { if (o.roam) { var A = document.getElementById("roam" + i); A && (xh.fireEvent(A, "click"), o.roam = !1) } } }, _d = function (A) { return new Promise((function (e, t) { var i = Object.assign({ type: "get", cache: !0, headers: { "Content-type": "application/x-www-form-urlencoded" }, data: null, async: !0, success: null, error: null, beforeSend: null, requestQueue: void 0 }, A), o = null; for (var n in (o = window.XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject("Microsoft.XMLHTTP")).onreadystatechange = function () { if (4 === o.readyState || "4" === o.readyState) { var A = o.status; A >= 200 && 300 > A || 0 === A ? (i.success && i.success(o.response || o.responseText, "" === o.responseType || "document" === o.responseType && o.responseXML), e(o.response || o.responseText, "" === o.responseType || "document" === o.responseType && o.responseXML)) : (i.error && i.error(A, o.response || o.responseText, "" === o.responseType || "document" === o.responseType && o.responseXML), t(A, o.response || o.responseText, "" === o.responseType || "document" === o.responseType && o.responseXML)) } }, o.open(i.type, i.url, i.async), i.headers) o.setRequestHeader(n, i.headers[n]); i.responseType && (o.responseType = i.responseType), i.requestQueue ? i.requestQueue.addRequest(o, i.data) : i.beforeSend ? i.beforeSend(o, (function () { o.send(i.data) })) : o.send(i.data) })) }, $d = function () { var A = 0, e = document.createElement("div"); function t(A) { return e.appendChild(A.dom), A } function i(t) { for (var i = 0; e.children.length > i; i++) e.children[i].style.display = i === t ? "block" : "none"; A = t } e.style.cssText = "position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000", e.addEventListener("click", (function (t) { t.preventDefault(), i(++A % e.children.length) }), !1); var o = (performance || Date).now(), n = o, r = 0, a = t(new $d.Panel("FPS", "#0ff", "#002")), s = t(new $d.Panel("MS", "#0f0", "#020")); if (self.performance && self.performance.memory) var l = t(new $d.Panel("MB", "#f08", "#201")); return i(0), { REVISION: 16, dom: e, addPanel: t, showPanel: i, begin: function () { o = (performance || Date).now() }, end: function () { r++; var A = (performance || Date).now(); if (s.update(A - o, 200), A >= n + 1e3 && (a.update(1e3 * r / (A - n), 100), n = A, r = 0, l)) { var e = performance.memory; l.update(e.usedJSHeapSize / 1048576, e.jsHeapSizeLimit / 1048576) } return A }, update: function () { o = this.end() }, domElement: e, setMode: i } }; $d.Panel = function (A, e, t) { var i = 1 / 0, o = 0, n = Math.round, r = n(window.devicePixelRatio || 1), a = 80 * r, s = 48 * r, l = 3 * r, c = 2 * r, h = 3 * r, d = 15 * r, p = 74 * r, g = 30 * r, u = document.createElement("canvas"); u.width = a, u.height = s, u.style.cssText = "width:80px;height:48px"; var f = u.getContext("2d"); return f.font = "bold " + 9 * r + "px Helvetica,Arial,sans-serif", f.textBaseline = "top", f.fillStyle = t, f.fillRect(0, 0, a, s), f.fillStyle = e, f.fillText(A, l, c), f.fillRect(h, d, p, g), f.fillStyle = t, f.globalAlpha = .9, f.fillRect(h, d, p, g), { dom: u, update: function (s, m) { i = Math.min(i, s), o = Math.max(o, s), f.fillStyle = t, f.globalAlpha = 1, f.fillRect(0, 0, a, d), f.fillStyle = e, f.fillText(n(s) + " " + A + " (" + n(i) + "-" + n(o) + ")", l, c), f.drawImage(u, h + r, d, p - r, g, h, d, p - r, g), f.fillRect(h + p - r, d, r, g), f.fillStyle = t, f.globalAlpha = .9, f.fillRect(h + p - r, d, r, n((1 - s / m) * g)) } } }; var Ap = function (A) { this.viewer = A }; Ap.prototype = { construtor: Ap, destroy: function () { this.viewer = null }, update: function (A) { var e = this.getControl(); e && (e.update(A), this.viewer.render()) }, getControl: function () { for (var A = this.viewer.controlManager.tools, e = 0; A.length > e; e += 1) if (A[e].getName() === Pc.CLIP_BY_BOX) return A[e]; return null }, setSectionBox: function (A, e) { this.getControl().setSectionBox(A, e) }, toggle: function (A, e) { this.getControl().toggle(A, e) }, setVisible: function (A) { this.getControl().visible(A) }, setRotatable: function (A) { this.getControl().rotatable(A) }, enablePick: function (A) { this.getControl().enablePick = A }, saveState: function () { return this.getControl().store() }, loadState: function (A) { this.getControl().restore(A) }, reset: function () { this.viewer.getScene().resetClipPlanes() }, recalculate: function () { return this.viewer.getFilter().getVisibleComponentsBbox() }, setProcess: function (A, e) { this.getControl().setProcess(A, e) }, getProcess: function (A) { return this.getControl().getProcess(A) } }; var ep = function (A, e) { H.call(this); var t = { priority: 5, pickableType: Qc.UnPickable, globalSpace: !1, hoverEnabled: !1 }; this.name = A; var i = uh.extend({}, t, e); this.priority = i.priority, this.pickableType = i.pickableType, this.globalSpace = i.globalSpace, this.boundingBox = null, this.hoverEnabled = i.hoverEnabled }; (ep.prototype = Object.create(H.prototype)).constructor = ep, Object.assign(ep, Ld), ep.prototype.removeByName = function (A) { for (var e = this.children, t = 0, i = e.length; i > t; t += 1) if (e[t].name === A) { e.splice(t, 1); break } }, ep.prototype.clear = function () { this.children.length = 0 }, ep.prototype.isGlobalSpace = function () { return this.globalSpace }, ep.prototype.hasChild = function (A) { for (var e = 0, t = this.children.length; t > e; e += 1) if (this.children[e].name === A) return !0; return !1 }, ep.prototype.isPickable = function () { return this.pickableType !== Qc.UnPickable }; var tp = function (A) { this.viewer = A, this.viewportDIV = A.viewerImpl.getRenderer().domElement.parentElement, this.creatSVG = function () { document.getElementById("svgid" + this.viewer.getViewerImpl().uuid) || (this.svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"), this.svg.setAttribute("id", "svgid" + this.viewer.getViewerImpl().uuid), this.svg.setAttribute("style", "width: 100%; height: 100%; position:absolute; left: 0; top:0;"), this.viewportDIV.appendChild(this.svg)) }, this.creatRect = function (A) { var e = A.data.left, t = A.data.top, i = A.data.width, o = A.data.height, n = A.data.visible; this.deleteRect(), n && (this.rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"), this.rect.setAttribute("id", "rectid" + this.viewer.getViewerImpl().uuid), this.rect.setAttribute("x", e), this.rect.setAttribute("y", t), this.rect.setAttribute("width", i), this.rect.setAttribute("height", o), this.rect.setAttribute("style", "fill:#0DFFB2;stroke-width:2;stroke:rgb(0,255,0);fill-opacity:0.1;stroke-opacity:0.9"), this.svg.appendChild(this.rect)) }, this.deleteRect = function () { var A = document.getElementById("rectid" + this.viewer.getViewerImpl().uuid); A && this.svg.removeChild(A) }, this.deleteSVG = function () { if (this.svg) { var A = document.getElementById("rectid" + this.viewer.getViewerImpl().uuid); A && this.svg.removeChild(A), this.viewportDIV.removeChild(this.svg) } }, this.creatMoveCircle = function (A) { var e = A.x, t = A.y; this.circleMov = document.createElementNS("http://www.w3.org/2000/svg", "circle"), this.circleMov.setAttribute("id", "circleMove" + this.viewer.getViewerImpl().uuid), this.circleMov.setAttribute("cx", e), this.circleMov.setAttribute("cy", t), this.circleMov.setAttribute("r", "5"), this.circleMov.setAttribute("style", "fill:#500A11;stroke-width:2;stroke:rgb(0,255,0);fill-opacity:0.9;stroke-opacity:0.9"), this.svg.appendChild(this.circleMov) }, this.changeMoveCircleStyle = function (A) { var e = document.getElementById("circleMove" + this.viewer.getViewerImpl().uuid); e.setAttribute("cx", A[0]), e.setAttribute("cy", A[1]), e.setAttribute("style", "fill:#00ff00;stroke-width:1;stroke:rgb(60,240,240);fill-opacity:0.9;stroke-opacity:0.9") }, this.deleteCircle = function () { var A = document.getElementById("circleMove" + this.viewer.getViewerImpl().uuid); A && this.svg.removeChild(A) }, this.createMoveLine = function (A, e) { var t = A.x, i = A.y, o = e.x, n = e.y; this.deleteMoveLine(), this.moveline = document.createElementNS("http://www.w3.org/2000/svg", "line"), this.moveline.setAttribute("id", "moveLine" + this.viewer.getViewerImpl().uuid), this.moveline.setAttribute("class", "moveLine"), this.moveline.setAttribute("x1", t), this.moveline.setAttribute("y1", i), this.moveline.setAttribute("x2", o), this.moveline.setAttribute("y2", n), this.moveline.setAttribute("stroke", "#0AEA06"), this.moveline.setAttribute("stroke-width", "2"), this.svg.appendChild(this.moveline) }, this.deleteMoveLine = function () { var A = document.getElementById("moveLine" + this.viewer.getViewerImpl().uuid); A && this.svg.removeChild(A) }, this.creatPickCircle = function (A, e) { var t = A.x, i = A.y; this.circlePic = document.createElementNS("http://www.w3.org/2000/svg", "circle"), this.circlePic.setAttribute("id", "circlePick" + this.viewer.getViewerImpl().uuid + e), this.circlePic.setAttribute("class", "circlePick"), this.circlePic.setAttribute("cx", t), this.circlePic.setAttribute("cy", i), this.circlePic.setAttribute("r", "5"), this.circlePic.setAttribute("style", "fill:#00ff00;stroke-width:1;stroke:rgb(60,240,240);fill-opacity:0.9;stroke-opacity:0.9"), this.svg.appendChild(this.circlePic) }, this.creatLine = function (A, e, t, i) { var o = A.x, n = A.y, r = e.x, a = e.y; this.line = document.createElementNS("http://www.w3.org/2000/svg", "line"), this.line.setAttribute("id", "pickline" + this.viewer.getViewerImpl().uuid + i), this.line.setAttribute("class", "pickline"), this.line.setAttribute("x1", o), this.line.setAttribute("y1", n), this.line.setAttribute("x2", r), this.line.setAttribute("y2", a), this.line.setAttribute("stroke", t), this.line.setAttribute("stroke-width", "2"), this.svg.appendChild(this.line) }, this.deleteLineAndCircle = function () { for (var A = this.svg.getElementsByClassName("pickline"), e = this.svg.getElementsByClassName("circlePick"); A.length;) this.svg.removeChild(A[A.length - 1]); for (; e.length;) this.svg.removeChild(e[e.length - 1]) } }; function ip(A, e) { var t = A || 0, i = e || 0; return t === i ? 0 : t > i ? 1 : -1 } function op(A, e) { var t = A.split(".").map((function (A) { return Number(A) || 0 })), i = e.split(".").map((function (A) { return Number(A) || 0 })); return 0 === (ip(t[0], i[0]) || ip(t[1], i[1]) || ip(t[2], i[2])) } function np(A, e) { var t = A.split(".").map((function (A) { return Number(A) || 0 })), i = e.split(".").map((function (A) { return Number(A) || 0 })); return (ip(t[0], i[0]) || ip(t[1], i[1]) || ip(t[2], i[2])) >= 0 } function rp(A, e) { var t = A.split(".").map((function (A) { return Number(A) || 0 })), i = e.split(".").map((function (A) { return Number(A) || 0 })); return (ip(t[0], i[0]) || ip(t[1], i[1]) || ip(t[2], i[2])) > 0 } function ap(A, e) { return !np(A, e) } function sp(A, e) { return !rp(A, e) } var lp = function (A, e) { var i = this; this.viewer = A, this.preRotationHandle = e, this.mouseButtons = { LEFT: t.LEFT, RIGHT: t.RIGHT }, this.visible = !0, this.isAnimationFinish = !0, this.pickedColor = 16763094, this.width = 0, this.height = 0, this.isDisable = !1; var o = null, n = null, r = 0, a = 1, l = 2, c = 220, h = 150, d = 80, p = 1, g = 2, u = 5, f = 6, m = 3, C = 4, v = "Home", I = "Bottom", E = "Top", B = "Left", x = "Right", S = "Front", w = "Back", M = "Bottom_Front", b = "Bottom_Back", U = "Bottom_Right", F = "Bottom_Left", K = "Top_Front", Q = "Top_Back", R = "Top_Right", T = "Top_Left", k = "LeftFront", D = "LeftBack", L = "RightFront", N = "RightBack", O = "Bottom_FrontRight", V = "Bottom_FrontLeft", G = "Bottom_BackLeft", P = "Bottom_BackRight", q = "Top_FrontRight", j = "Top_FrontLeft", H = "Top_BackLeft", W = "Top_BackRight", J = new Y, z = new Ka(-h / 2, h / 2, h / 2, -h / 2, -h / 2, h / 2), Z = new Dd, X = new Xi, _ = new Xi, $ = new Xi; X.add(_), X.add($), this._cube = X; var AA = !1, eA = !1, tA = new s, iA = new s, oA = new s, nA = new s, rA = !1, aA = "", sA = null, lA = -1, cA = !1; this.uninit = function () { this.removeDomEventListeners(), o && (o.removeChild(n.domElement), o = null) }, this.enable = function () { o && n && !n.domElement.parentNode && (o.appendChild(n.domElement), this.addDomEventListeners()) }, this.disable = function () { o && n && n.domElement.parentNode && (this.removeDomEventListeners(), o.removeChild(n.domElement)) }; ! function () { var A = new ko({ color: 0, side: 1 }), e = new De; e.vertices.push(new y(-40, 40, 40), new y(40, 40, 40)); var t = new Go(e, A); $.add(t); var i = new De; i.vertices.push(new y(40, 40, 40), new y(40, 40, -40)); var o = new Go(i, A); $.add(o); var n = new De; n.vertices.push(new y(40, 40, -40), new y(-40, 40, -40)); var r = new Go(n, A); $.add(r); var a = new De; a.vertices.push(new y(-40, 40, -40), new y(-40, 40, 40)); var s = new Go(a, A); $.add(s); var l = new De; l.vertices.push(new y(-40, 40, -40), new y(-40, -40, -40)); var c = new Go(l, A); $.add(c); var h = new De; h.vertices.push(new y(40, 40, -40), new y(40, -40, -40)); var d = new Go(h, A); $.add(d); var p = new De; p.vertices.push(new y(40, 40, 40), new y(40, -40, 40)); var g = new Go(p, A); $.add(g); var u = new De; u.vertices.push(new y(-40, 40, 40), new y(-40, -40, 40)); var f = new Go(u, A); $.add(f); var m = new De; m.vertices.push(new y(-40, -40, 40), new y(40, -40, 40)); var C = new Go(m, A); $.add(C); var v = new De; v.vertices.push(new y(40, -40, 40), new y(40, -40, -40)); var I = new Go(v, A); $.add(I); var E = new De; E.vertices.push(new y(40, -40, -40), new y(-40, -40, -40)); var B = new Go(E, A); $.add(B); var x = new De; x.vertices.push(new y(-40, -40, -40), new y(-40, -40, 40)); var S = new Go(x, A); $.add(S); var w = new Aa; w.load(Pd.back, (function (A) { var e = new Ue(new et(60, 60), new jA({ map: A, color: 16777215, side: 2 })); e.position.set(0, 40, 0), e.rotation.x = .5 * Math.PI, e.name = "Back", _.add(e) })), w.load(Pd.front, (function (A) { var e = new Ue(new et(60, 60), new jA({ map: A, color: 16777215, side: 2 })); e.position.set(0, -40, 0), e.rotation.x = .5 * Math.PI, e.name = "Front", _.add(e) })), w.load(Pd.left, (function (A) { var e = new Ue(new et(60, 60), new jA({ map: A, color: 16777215, side: 2 })); e.position.set(-40, 0, 0), e.rotation.y = .5 * Math.PI, e.rotation.x = .5 * Math.PI, e.name = "Left", _.add(e) })), w.load(Pd.right, (function (A) { var e = new Ue(new et(60, 60), new jA({ map: A, color: 16777215, side: 2 })); e.position.set(40, 0, 0), e.rotation.y = .5 * Math.PI, e.rotation.x = .5 * Math.PI, e.name = "Right", _.add(e) })), w.load(Pd.top, (function (A) { var e = new Ue(new et(60, 60), new jA({ map: A, color: 16777215, side: 2 })); e.position.set(0, 0, 40), e.name = "Top", _.add(e) })), w.load(Pd.bottom, (function (A) { var e = new Ue(new et(60, 60), new jA({ map: A, color: 16777215, side: 2 })); e.position.set(0, 0, -40), e.name = "Bottom", _.add(e) })); var M = new Ne(10, 60, 10), b = new Ue(M, new jA({ color: 16777215 })); b.position.set(35, 0, 35), b.name = "Top_Front", _.add(b); var U = new Ue(M, new jA({ color: 16777215 })); U.position.set(35, 0, -35), U.name = "Bottom_Front", _.add(U); var F = new Ue(M, new jA({ color: 16777215 })); F.position.set(-35, 0, 35), F.name = "Top_Back", _.add(F); var K = new Ue(M, new jA({ color: 16777215 })); K.position.set(-35, 0, -35), K.name = "Bottom_Back", _.add(K); var Q = new Ne(60, 10, 10), R = new Ue(Q, new jA({ color: 16777215 })); R.position.set(0, -35, 35), R.name = "Top_Left", _.add(R); var T = new Ue(Q, new jA({ color: 16777215 })); T.position.set(0, -35, -35), T.name = "Bottom_Left", _.add(T); var k = new Ue(Q, new jA({ color: 16777215 })); k.position.set(0, 35, 35), k.name = "Top_Right", _.add(k); var D = new Ue(Q, new jA({ color: 16777215 })); D.position.set(0, 35, -35), D.name = "Bottom_Right", _.add(D); var L = new Ne(10, 10, 60), N = new Ue(L, new jA({ color: 16777215 })); N.position.set(35, -35, 0), N.name = "LeftFront", _.add(N); var O = new Ue(L, new jA({ color: 16777215 })); O.position.set(35, 35, 0), O.name = "RightFront", _.add(O); var V = new Ue(L, new jA({ color: 16777215 })); V.position.set(-35, -35, 0), V.name = "LeftBack", _.add(V); var G = new Ue(L, new jA({ color: 16777215 })); G.position.set(-35, 35, 0), G.name = "RightBack", _.add(G); var P = new Ne(10, 10, 10), q = new Ue(P, new jA({ color: 16777215 })); q.position.set(35, -35, 35), q.name = "Top_FrontLeft", _.add(q); var j = new Ue(P, new jA({ color: 16777215 })); j.position.set(35, -35, -35), j.name = "Bottom_FrontLeft", _.add(j); var H = new Ue(P, new jA({ color: 16777215 })); H.position.set(35, 35, 35), H.name = "Top_FrontRight", _.add(H); var Y = new Ue(P, new jA({ color: 16777215 })); Y.position.set(35, 35, -35), Y.name = "Bottom_FrontRight", _.add(Y); var W = new Ue(P, new jA({ color: 16777215 })); W.position.set(-35, -35, 35), W.name = "Top_BackLeft", _.add(W); var J = new Ue(P, new jA({ color: 16777215 })); J.position.set(-35, -35, -35), J.name = "Bottom_BackLeft", _.add(J); var z = new Ue(P, new jA({ color: 16777215 })); z.position.set(-35, 35, 35), z.name = "Top_BackRight", _.add(z); var Z = new Ue(P, new jA({ color: 16777215 })); Z.name = "Bottom_BackRight", Z.position.set(-35, 35, -35), _.add(Z) }(), J.add(X); var hA = function (A) { eA = A; for (var e = A ? .8 : 1, t = X.children, i = 0; t.length > i; i += 1) for (var o = t[i].children, n = 0; o.length > n; n += 1) o[n].material.transparent = A, o[n].material.opacity = e }; hA(!1); var dA = function () { sA && sA.material.color.set(sA.currentColor), sA = null }, pA = function (A) { if (void 0 !== o) { var e = xh.getDomOffsetToClient(o), t = new s; if (t.x = A.x - e.left, t.y = A.y - e.top, t.x > 0 && i.width > t.x && t.y > 0 && i.height > t.y) return nA.x = t.x / i.width * 2 - 1, nA.y = -t.y / i.height * 2 + 1, !0 } return !1 }, gA = function () { var A = new y(nA.x, nA.y, .5); Z.setFromCamera(A, z); var e, t = Z.intersectObjects(X.children[0].children); t ? sA !== (e = t.object) && (sA && sA.material.color.set(sA.currentColor), (sA = e).currentColor = sA.material.color.clone(), "" !== sA.name && sA.material.color.set(i.pickedColor)) : dA() }; this.mouseUp = function (A) { A.stopPropagation(); var t = new s(A.clientX, A.clientY), o = pA(t); return AA ? (AA = !1, iA.set(t.x, t.y), oA.subVectors(iA, tA), this.preRotationHandle && !this.preRotationHandle() || (this.viewer.viewerImpl.rotateCamera(oA), tA.copy(iA))) : o && A.button === i.mouseButtons.LEFT && sA && (lA = -1, function (A) { var e = -1; switch (A) { case v: e = Uc.Home; break; case E: e = Uc.Top; break; case I: e = Uc.Bottom; break; case M: e = Uc.BottomFront; break; case b: e = Uc.BottomBack; break; case U: e = Uc.BottomRight; break; case F: e = Uc.BottomLeft; break; case O: e = Uc.BottomFrontRight; break; case V: e = Uc.BottomFrontLeft; break; case G: e = Uc.BottomBackLeft; break; case P: e = Uc.BottomBackRight; break; case K: e = Uc.TopFront; break; case Q: e = Uc.TopBack; break; case R: e = Uc.TopRight; break; case T: e = Uc.TopLeft; break; case q: e = Uc.TopFrontRight; break; case j: e = Uc.TopFrontLeft; break; case H: e = Uc.TopBackLeft; break; case W: e = Uc.TopBackRight; break; case S: e = Uc.Front; break; case w: e = Uc.Back; break; case B: e = Uc.Left; break; case x: e = Uc.Right; break; case k: e = Uc.FrontLeft; break; case D: e = Uc.BackLeft; break; case L: e = Uc.FrontRight; break; case N: e = Uc.BackRight } lA = e }(sA.name), -1 !== lA && (e(lA), null != lA && i.viewer.viewerImpl.rotateCameraByViewCubeSide(lA))), o }, this.mouseMove = function (A) { A.stopPropagation(); var e = !1, t = new s(A.clientX, A.clientY), i = pA(t); if (AA) iA.set(t.x, t.y), oA.subVectors(iA, tA), this.preRotationHandle && !this.preRotationHandle() || (this.viewer.viewerImpl.rotateCamera(oA), tA.copy(iA)); else if (i) { if (eA && (hA(!1), e = !0), gA(), sA) { if ("" !== sA.name) { var o = sA.name; aA !== o && (aA = o, rA = !0, e = !0) } } else "" !== aA && (aA = "", rA = !1, e = !0); e && this.render(), cA = !0 } else cA && (cA = !1, rA && (dA(), rA = !1, e = !0), e && this.render()); return i }, this.mouseDown = function (A) { A.preventDefault(), A.stopPropagation(); var e = new s(A.clientX, A.clientY), t = pA(e); return t && A.button === i.mouseButtons.LEFT && (AA = !1), t }, this.onMouseDownBinded = this.mouseDown.bind(this), this.onMouseMoveBinded = this.mouseMove.bind(this), this.onMouseUpBinded = this.mouseUp.bind(this), this.addDomEventListeners = function () { o && (o.addEventListener("contextmenu", (function (A) { A.preventDefault() }), !1), o.addEventListener("mousedown", this.onMouseDownBinded, !1), window.addEventListener("mousemove", this.onMouseMoveBinded, !1), o.addEventListener("mouseup", this.onMouseUpBinded, !1)) }, this.removeDomEventListeners = function () { o && (o.removeEventListener("contextmenu", (function (A) { A.preventDefault() }), !1), o.removeEventListener("mousedown", this.onMouseDownBinded, !1), window.removeEventListener("mousemove", this.onMouseMoveBinded, !1), window.removeEventListener("mouseup", this.onMouseUpBinded, !1)) }; var uA = function (A) { switch (A) { case r: i.width = c, i.height = c; break; case a: i.width = h, i.height = h; break; case l: default: i.width = d, i.height = d } o.style.width = i.width + "px", o.style.height = i.height + "px" }; this.resize = function (A, e, t) { uA(200 > A || t ? l : a), n.setSize(this.width, this.height) }; this.init = function (A) { (function (A) { A.style.position = "absolute", A.style.display = "block", A.style.outline = "0", A.style.right = "52px", A.style.top = "0px", A.style.opacity = ".6", A.style.display = "flex", A.style.webkitTransition = "opacity .2s ease", A.style.mozTransition = "opacity .2s ease", A.style.msTransform = "opacity .2s ease", A.style.oTransform = "opacity .2s ease", A.style.transition = "opacity .2s ease" })(o = document.createElement("div")), A.appendChild(o), n = new $i({ antialias: !0, alpha: !0, preserveDrawingBuffer: !0 }), o.appendChild(n.domElement), this.resize(A.offsetWidth, A.offsetHeight, this.viewer.viewerImpl.isMobile), this.addDomEventListeners() }; var fA = function (A, e, t) { return A > e ? t >= A - e : t >= e - A }; this.render = function () { if (this.visible && !this.isDisable && n) { var A = this.viewer.viewerImpl.getActiveCameraInfo(), e = A.quaternion.clone().inverse(); this._cube.quaternion.copy(e), -1 === lA && (lA = function (A, e) { var t = A.clone(); t.normalize(); var i = e.clone(); if (i.normalize(), fA(t.x, 0, 1e-4) && fA(t.y, -1, 1e-4) && fA(t.z, 0, 1e-4) && fA(i.x, 0, 1e-4) && fA(i.y, 0, 1e-4) && fA(i.z, -1, 1e-4)) return p; if (fA(t.x, 0, 1e-4) && fA(t.y, 1, 1e-4) && fA(t.z, 0, 1e-4)) { if (fA(i.x, 0, 1e-4) && fA(i.y, 0, 1e-4) && fA(i.z, 1, 1e-4)) return g; if (fA(i.x, 1, 1e-4) && fA(i.y, 0, 1e-4) && fA(i.z, 0, 1e-4)) return g } return fA(t.x, 0, 1e-4) && fA(t.y, 0, 1e-4) && fA(t.z, -1, 1e-4) && fA(i.x, 0, 1e-4) && fA(i.y, 1, 1e-4) && fA(i.z, 0, 1e-4) ? u : fA(t.x, 0, 1e-4) && fA(t.y, 0, 1e-4) && fA(t.z, 1, 1e-4) && fA(i.x, 0, 1e-4) && fA(i.y, 1, 1e-4) && fA(i.z, 0, 1e-4) ? f : fA(t.x, -1, 1e-4) && fA(t.y, 0, 1e-4) && fA(t.z, 0, 1e-4) && fA(i.x, 0, 1e-4) && fA(i.y, 1, 1e-4) && fA(i.z, 0, 1e-4) ? m : fA(t.x, 1, 1e-4) && fA(t.y, 0, 1e-4) && fA(t.z, 0, 1e-4) && fA(i.x, 0, 1e-4) && fA(i.y, 1, 1e-4) && fA(i.z, 0, 1e-4) ? C : -1 }(A.dir, z.up)), n.autoClear = !0, n.render(J, z) } }, this.destroy = function () { n.dispose(), this.disable() } }, cp = function (A, e, t, i, o) { kd.call(this, Ec.PERSPECTIVE, { width: e, height: t, fov: A, near: i, far: o }), this.realUp = this.up.clone(), this.target = new y, this.dirty = !1, this.orthoScale = 1, this.positionPlane = new EA, this.projScreenMatrix = new M, this.viewProjInverse = new M, this.tempVector3 = new y, this.frustum = new Ze }; (cp.prototype = Object.create(kd.prototype)).constructor = cp, cp.prototype._updatePositionPlane = function () { this.positionPlane.setFromNormalAndCoplanarPoint(this.getWorldDirection(new y), this.position) }, cp.prototype._updateFrustum = function () { this.frustum.setFromProjectionMatrix(this.projScreenMatrix) }, cp.prototype.updateMVP = function () { this.dirty && (null === this.parent && this.updateMatrixWorld(), this.matrixWorldInverse.getInverse(this.matrixWorld), this.projScreenMatrix.multiplyMatrices(this.projectionMatrix, this.matrixWorldInverse), this.viewProjInverse.getInverse(this.projScreenMatrix), this._updateFrustum(), this._updatePositionPlane(), this.dirty = !1) }, cp.prototype.getFrustum = function () { return this.dirty && this.updateMVP(), this.frustum }, cp.prototype.lookAtEx = function (A, e, t, i) { var o = new y; o.copy(e), void 0 !== i && "number" == typeof i && o.setLength(i), this.position.subVectors(A, o), this.up.copy(t), this.lookAt(A), this.realUp.copy(t), this.target.copy(A), this.dirty = !0 }, cp.prototype.lookAtEXForTargetPositionUp = function (A, e, t) { this.position.copy(e), this.up = t, this.lookAt(A), this.realUp = t.clone(), this.target = A.clone(), this.dirty = !0 }, cp.prototype.clone = function () { var A = new cp(2 * this.right, 2 * this.top, this.fov, this.near, this.far); return A.position.copy(this.position), A.quaternion.copy(this.quaternion), A.scale.copy(this.scale), A.up.copy(this.up), A.realUp.copy(this.realUp), A.target.copy(this.target), A.aspect = this.aspect, A.fov = this.fov, A.near = this.near, A.far = this.far, A.left = this.left, A.right = this.right, A.top = this.top, A.bottom = this.bottom, A.zoom = this.zoom, A.isPerspective = this.isPerspective, A.updateProjectionMatrix(), A.updateMVP(), A }, cp.prototype.copy = function (A) { return kd.prototype.copy.call(this, A), this.realUp.copy(A.realUp), this.orthoScale = A.orthoScale, this.dirty = A.dirty, this.updateProjectionMatrix(), this.updateMVP(), this }, cp.prototype.setStandardView = function (A, e) { var t = null, i = null; e ? (t = e.getCenter(new y), i = e.getSize(new y)) : t = new y(0, 0, 0); var o = vc.SceneSize, n = o / 2; switch (i || (i = n), A) { case Uc.ISO: var r = new y(-o, o, o), a = new y, s = new y(0, 0, 0); a.subVectors(s, r), this.lookAtEx(t, a, H.DefaultUp); break; case Uc.Top: this.lookAtEx(t, new y(0, 0, -1), new y(0, 1, 0), i ? i.x : n); break; case Uc.Bottom: this.lookAtEx(t, new y(0, 0, 1), new y(0, 1, 0), i ? i.x : n); break; case Uc.Front: this.lookAtEx(t, new y(0, 1, 0), new y(0, 0, 1), i ? i.z : n); break; case Uc.Back: this.lookAtEx(t, new y(0, -1, 0), new y(0, 0, 1), i ? i.z : n); break; case Uc.Right: this.lookAtEx(t, new y(-1, 0, 0), new y(0, 0, 1), i ? i.y : n); break; case Uc.Left: this.lookAtEx(t, new y(1, 0, 0), new y(0, 0, 1), i ? i.y : n); break; case Uc.FrontRight: this.lookAtEx(t, new y(-1, 1, 0), new y(0, 0, 1), i ? i.x + i.y : n); break; case Uc.FrontLeft: this.lookAtEx(t, new y(1, 1, 0), new y(0, 0, 1), i ? i.x + i.y : n); break; case Uc.BackLeft: this.lookAtEx(t, new y(1, -1, 0), new y(0, 0, 1), i ? i.x + i.y : n); break; case Uc.BackRight: this.lookAtEx(t, new y(-1, -1, 0), new y(0, 0, 1), i ? i.x + i.y : n); break; case Uc.BottomFront: this.lookAtEx(t, new y(0, 1, 1), new y(0, 0, 1), i ? i.x + i.z : n); break; case Uc.BottomBack: this.lookAtEx(t, new y(0, -1, 1), new y(0, 0, 1), i ? i.x + i.z : n); break; case Uc.BottomRight: this.lookAtEx(t, new y(-1, 0, 1), new y(0, 0, 1), i ? i.y + i.z : n); break; case Uc.BottomLeft: this.lookAtEx(t, new y(1, 0, 1), new y(0, 0, 1), i ? i.y + i.z : n); break; case Uc.BottomFrontRight: this.lookAtEx(t, new y(-1, 1, 1), new y(0, 0, 1), i ? i.x + i.y + i.z : n); break; case Uc.BottomFrontLeft: this.lookAtEx(t, new y(1, 1, 1), new y(0, 0, 1), i ? i.x + i.y + i.z : n); break; case Uc.BottomBackLeft: this.lookAtEx(t, new y(1, -1, 1), new y(0, 0, 1), i ? i.x + i.y + i.z : n); break; case Uc.BottomBackRight: this.lookAtEx(t, new y(-1, -1, 1), new y(0, 0, 1), i ? i.x + i.y + i.z : n); break; case Uc.TopFront: this.lookAtEx(t, new y(0, 1, -1), new y(0, 0, 1), i ? i.x + i.z : n); break; case Uc.TopBack: this.lookAtEx(t, new y(0, -1, -1), new y(0, 0, 1), i ? i.x + i.z : n); break; case Uc.TopRight: this.lookAtEx(t, new y(-1, 0, -1), new y(0, 0, 1), i ? i.y + i.z : n); break; case Uc.TopLeft: this.lookAtEx(t, new y(1, 0, -1), new y(0, 0, 1), i ? i.y + i.z : n); break; case Uc.TopFrontRight: this.lookAtEx(t, new y(-1, 1, -1), new y(0, 0, 1), i ? i.x + i.y + i.z : n); break; case Uc.TopFrontLeft: this.lookAtEx(t, new y(1, 1, -1), new y(0, 0, 1), i ? i.x + i.y + i.z : n); break; case Uc.TopBackLeft: this.lookAtEx(t, new y(1, -1, -1), new y(0, 0, 1), i ? i.x + i.y + i.z : n); break; case Uc.TopBackRight: this.lookAtEx(t, new y(-1, -1, -1), new y(0, 0, 1), i ? i.x + i.y + i.z : n); break; case Uc.TopToRight: this.lookAtEx(t, new y(0, 1, 0), new y(-1, 0, 0), n); break; case Uc.TopToBack: this.lookAtEx(t, new y(0, 1, 0), new y(0, 0, 1), n); break; case Uc.TopToLeft: this.lookAtEx(t, new y(0, 1, 0), new y(1, 0, 0), n); break; case Uc.TopToFront: this.lookAtEx(t, new y(0, 1, 0), new y(0, 0, -1), n); break; case Uc.BottomToRight: this.lookAtEx(t, new y(0, -1, 0), new y(-1, 0, 0), n); break; case Uc.BottomToBack: this.lookAtEx(t, new y(0, -1, 0), new y(0, 0, -1), n); break; case Uc.BottomToFront: this.lookAtEx(t, new y(0, -1, 0), new y(0, 0, 1), n); break; case Uc.BottomToLeft: this.lookAtEx(t, new y(0, -1, 0), new y(1, 0, 0), n); break; case Uc.FrontToTop: this.lookAtEx(t, new y(0, 0, -1), new y(0, -1, 0), n); break; case Uc.FrontToBottom: this.lookAtEx(t, new y(0, 0, -1), new y(0, 1, 0), n); break; case Uc.FrontToLeft: this.lookAtEx(t, new y(0, 0, -1), new y(1, 0, 0), n); break; case Uc.FrontToRight: this.lookAtEx(t, new y(0, 0, -1), new y(-1, 0, 0), n); break; case Uc.RightToTop: this.lookAtEx(t, new y(-1, 0, 0), new y(0, -1, 0), n); break; case Uc.RightToBottom: this.lookAtEx(t, new y(-1, 0, 0), new y(0, 1, 0), n); break; case Uc.RightToFront: this.lookAtEx(t, new y(-1, 0, 0), new y(0, 0, -1), n); break; case Uc.RightToBack: this.lookAtEx(t, new y(-1, 0, 0), new y(0, 0, 1), n); break; case Uc.BackToTop: this.lookAtEx(t, new y(0, 0, 1), new y(0, -1, 0), n); break; case Uc.BackToBottom: this.lookAtEx(t, new y(0, 0, 1), new y(0, 1, 0), n); break; case Uc.BackToLeft: this.lookAtEx(t, new y(0, 0, 1), new y(-1, 0, 0), n); break; case Uc.BackToRight: this.lookAtEx(t, new y(0, 0, 1), new y(1, 0, 0), n); break; case Uc.LeftToTop: this.lookAtEx(t, new y(1, 0, 0), new y(0, 0, -1), n); break; case Uc.LeftTopBottom: this.lookAtEx(t, new y(1, 0, 0), new y(0, 1, 0), n); break; case Uc.LeftTopBack: this.lookAtEx(t, new y(1, 0, 0), new y(0, 0, 1), n); break; case Uc.LeftTopFront: this.lookAtEx(t, new y(1, 0, 0), new y(0, 0, -1), n); break; case Uc.Keep: break; default: this.lookAtEx(t, new y(-1, -1, -1), new y(0, 0, 1), n) } return this.updateProjectionMatrix(), t }, cp.prototype.zoomToBox = function (A, e, t, i) { t = t || 1, e = -1 > (e = e || 0) ? -1 : e; var o = new aA; if (o.copy(A), 0 !== e) { var n = .5 * A.getSize(new y).length(), r = new y; r.subVectors(o.max, o.min).normalize(), r.multiplyScalar(n * e), o.expandByVector(r) } var s = i || this.getWorldDirection(new y), l = this.up, c = this.aspect, h = a.degToRad(.5 * this.fov), d = o.getSize(new y), p = o.getCenter(new y), g = .5 * d.length() / Math.sin(h) * t, u = new y; u.copy(s), u.setLength(g); var f = new y; f.subVectors(p, u); var m = new y; m.crossVectors(s, l), m.normalize(); var C = new y; C.crossVectors(s, m), C.normalize(); var v = new EA; v.setFromNormalAndCoplanarPoint(m, f); var I = new EA; I.setFromNormalAndCoplanarPoint(C, f); var E = 0, B = 0, x = 0, S = 0, w = 0, M = [new y, new y, new y, new y, new y, new y, new y, new y]; M[0].set(o.min.x, o.min.y, o.min.z), M[1].set(o.min.x, o.min.y, o.max.z), M[2].set(o.min.x, o.max.y, o.min.z), M[3].set(o.min.x, o.max.y, o.max.z), M[4].set(o.max.x, o.min.y, o.min.z), M[5].set(o.max.x, o.min.y, o.max.z), M[6].set(o.max.x, o.max.y, o.min.z), M[7].set(o.max.x, o.max.y, o.max.z); for (var b = 0; 8 > b; b += 1) { var U = new y; U.subVectors(M[b], f); var F = Math.abs(U.dot(s)), K = Math.abs(I.distanceToPoint(M[b])), Q = K * c, R = Math.abs(v.distanceToPoint(M[b])), T = Math.max(K, R / c), k = Math.max(Q, R); T > E && (E = T), B && x && B * F / x >= T || (B = T, x = F), S && w && S * F / w >= k || (S = k, w = F) } var D = S / Math.tan(h) + (g - w), L = B / Math.tan(h) + (g - x), N = 0; if (N = 1 > c ? Math.max(D, L) : Math.min(D, L), this.near > N) { this.near = (N * N + .001 * N) / 16777.216 } if (u.copy(s).normalize().setLength(N), f.subVectors(p, u), this.position.copy(f), this.lookAt(p), this.target.copy(p), !this.isPerspective) { var O = Math.tan(this.fov * Math.PI / 180 / 2) * N; this.orthoScale = O / E, this.zoom = this.orthoScale } return this.updateProjectionMatrix(), this.dirty = !0, p }, cp.prototype.computeRay = function (A, e, t) { var i = new s; if (void 0 === t) i.x = window.innerWidth, i.y = window.innerHeight; else { var o = t === document ? t.body : t; i.x = o.offsetWidth, i.y = o.offsetHeight } var n = new s; n.x = A / i.x * 2 - 1, n.y = -e / i.y * 2 + 1; var r = new CA; return this.isPerspective ? (r.origin.copy(this.position), r.direction.set(n.x, n.y, .5).unproject(this).sub(this.position).normalize()) : (r.origin.set(n.x, n.y, -1).unproject(this), r.direction.set(0, 0, -1).transformDirection(this.matrixWorld)), r }, cp.prototype.screenToWorld = function (A, e, t, i) { var o = this.computeRay(A, e, t), n = this.getWorldDirection(new y).normalize(), r = new EA(n); return r.setFromNormalAndCoplanarPoint(n, i), o.intersectPlane(r, i) }, cp.prototype.getWorldFrustum = function (A) { var e = new M, t = new Ze, i = this.clone(), o = this.target, n = o.clone().sub(this.position).length(), r = new M; r.getInverse(A); var a = new M; a.extractRotation(A); var s = new f; s.setFromRotationMatrix(a), s.inverse(), i.position.applyMatrix4(r); var l = o.clone(); l.applyMatrix4(r); var c = l.clone().sub(i.position), h = c.length(); return c.normalize(), i.far = this.far * (h / n), i.up.applyQuaternion(s).normalize(), i.realUp.applyQuaternion(s).normalize(), i.updateProjectionMatrix(), i.updateMatrixWorld(), e.getInverse(i.matrixWorld), t.setFromMatrix((new M).multiplyMatrices(i.projectionMatrix, e)), i = null, t }, cp.prototype.distanceFromWorldToDrawing = function (A, e) { var t = this.position.clone(), i = this.target.clone(); i.subVectors(this.target, this.position), i.normalize(); var o = new M; return o.getInverse(A), i.add(t).applyMatrix4(o), t.applyMatrix4(o), i.sub(t), i.normalize().multiplyScalar(e), i.add(t).applyMatrix4(A), i.sub(this.position), i.length() }, cp.drawingToWorld = function (A, e) { var t = A.position.clone(), i = A.target.clone(), o = A.up.clone(), n = new M; return n.getInverse(e), o.add(t), o.applyMatrix4(n), t.applyMatrix4(n), i.applyMatrix4(n), o.sub(t), o.normalize(), { position: t, target: i, up: o } }, cp.worldToDrawing = function (A, e) { var t = A.position.clone(), i = A.target.clone(), o = A.up.clone(); return o.add(t), o.applyMatrix4(e), t.applyMatrix4(e), i.applyMatrix4(e), o.sub(t), o.normalize(), { position: t, target: i, up: o } }; var hp = function () { var A = this, e = null, t = {}, i = {}, o = 1e3, n = null, r = null, a = null, s = !1, l = null, c = null, h = null; this.from = function (A) { for (var i in e = A) e.hasOwnProperty(i) && (t[i] = e[i]); return this }, this.to = function (A, e) { return void 0 !== e && (o = e), i = A, this }, this.onStart = function (A) { return l = A, this }, this.onUpdate = function (A) { return c = A, this }, this.onComplete = function (A) { return h = A, this }, this.start = function (A, d) { s = !1, r && cancelAnimationFrame(r), n = Date.now(), a = d ? this.linearInterpolateForTargetPostionUp : this.interpolate, r = requestAnimationFrame((function d() { var p = t, g = i, u = Date.now(); !1 === s && (null !== l && l(e), s = !0); var f = (u - n) / o; e = a(p, g, f = f > 1 ? 1 : f), 1 === f ? (cancelAnimationFrame(r), null !== h && h(e)) : (r = requestAnimationFrame(d, A), null !== c && c(e, f)) }), A) }, this.isAngleGreaterThanPi = function (A, e, t) { var i = new y; return i.crossVectors(A, e), 0 > i.dot(t) }, this.conicInterpolate = function (A, e, t, i) { var o = -e.angleTo(A) * i, n = new y; n.crossVectors(e, A).normalize(); var r = new f; r.setFromAxisAngle(n, o), t.copy(A), t.applyQuaternion(r) }, this.quaternionInterpolate = function (A, e, t, i, o) { var n = new f(A.x, A.y, A.z, 1).normalize(), r = new f(e.x, e.y, e.z, 1).normalize(), a = new f(0, 0, 0, 1), s = new f(0, 0, 0, 1), l = new y; l.crossVectors(A, t).normalize(), a.set(l.x, l.y, l.z, 1).normalize(); .5 > o ? (f.slerp(n, a, s, 2 * o), i.set(s.x, s.y, s.z)) : (f.slerp(a, r, s, 2 * (o - .5)), i.set(s.x, s.y, s.z)) }, this.slerpInterpolate = function (A, e, t, i, o, n) { var r = A.dot(e); r > n ? i.copy(e) : n < Math.abs(r) ? this.quaternionInterpolate(A, e, t, i, o) : this.conicInterpolate(A, e, i, o), i.normalize() }, this.linearInterpolate = function (A, e, t, i, o) { if (A.equals(e)) t.copy(e); else { var n = new y(1, 0, 0), r = new y(0, 0, 1), a = new y, s = A.dot(e); s > o ? t.copy(e) : -s > o ? (o > Math.abs(A.dot(r)) ? a.crossVectors(A, r).normalize() : a.crossVectors(A, n).normalize(), .5 > i ? t.lerpVectors(A, a, 2 * i) : t.lerpVectors(a, e, 2 * (i - .5))) : t.lerpVectors(A, e, i), t.normalize() } }, this.linearInterpolatePosition = function (A, e, t, i) { t.lerpVectors(A, e, i) }, this.sphericalInterpolate = function (A, e, t, i, o, n) { var r = A.clone().sub(e), a = t.clone().sub(i), s = new Os; s.setFromVector3(r); var l = new Os; l.setFromVector3(a); var c = s.theta + (l.theta - s.theta) * n, h = s.phi + (l.phi - s.phi) * n, d = r.length(), p = new Os; p.set(d, h, c); var g = new y; g.setFromSpherical(p), o.copy(g).multiplyScalar(-1) }, this.interpolate = function (e, t, i) { var o = new y, n = new y, r = new y, a = new y, s = e.animTarget, l = e.animUp, c = e.animFocal, h = t.animTarget, d = t.animUp, p = t.animFocal; return A.sphericalInterpolate(e.animPos, s, t.animPos, h, o, i), A.linearInterpolate(l, d, n, i, .9995), A.linearInterpolatePosition(s, h, r, i), A.linearInterpolatePosition(c, p, a, i), { animDir: o, animUp: n, animFocal: a, animTarget: r } }, this.linearInterpolateForTargetPostionUp = function (e, t, i) { var o = new y, n = new y, r = new y, a = e.animTarget, s = e.animPosition, l = t.animTarget, c = t.animPosition; return A.linearInterpolate(e.animUp, t.animUp, n, i, .9995), A.linearInterpolatePosition(a, l, r, i), A.linearInterpolatePosition(s, c, o, i), { animPosition: o, animUp: n, animTarget: r } } }, dp = function () { var A = 800, e = 14, t = new hp; this.setDuration = function (e) { A = e }, this.getDuration = function () { return A }, this.setFrameTime = function (A) { e = A }, this.setStandardView = function (i, o, n, r, a, s) { var l = o.camera, c = l.position.clone(), h = l.target.clone(), d = l.getWorldDirection(new y); d.normalize(); var p = new y; p.copy(l.realUp || l.up), p.normalize(); var g = new y(l.position.clone().sub(h).length(), 0, 0), u = l.setStandardView(i, n); u = o.camera.zoomToBox(n, r); var f = l.position.clone(), m = l.getWorldDirection(new y); m.normalize(); var C = new y; C.copy(l.realUp || l.up), C.normalize(); var v = new y(l.position.clone().sub(u).length(), 0, 0); d.equals(m) && p.equals(C) && h.equals(u) && g.equals(v) ? s && s() : (o.getControlManager().setInteractiveState(!1), t.from({ animPos: c, animDir: d, animUp: p, animTarget: h, animFocal: g }).to({ animPos: f, animDir: m, animUp: C, animTarget: u, animFocal: v }, A).onUpdate((function (A) { o.camera.lookAtEx(A.animTarget, A.animDir, A.animUp, A.animFocal.x), o.cameraControl.update(!0, !0), o.controlManager.dispatchEvent({ type: Rc.ON_CAMERA_ANIMATION_UPDATE }), a && a() })).onComplete((function () { o.camera.lookAtEx(u, m, C, v.x), o.cameraControl.update(!0, !0), s && s(), o.getControlManager().setInteractiveState(!0) })).start(e)) }, this.active = function (i, o, n, r, a) { var s = n.camera, l = new y(i.position.x, i.position.y, i.position.z), c = new y(i.target.x, i.target.y, i.target.z), h = new y(c.distanceTo(l), 0, 0), d = c.clone().sub(l).normalize(), p = new y(i.up.x, i.up.y, i.up.z); p.normalize(); var g = new y(o.position.x, o.position.y, o.position.z), u = new y(o.target.x, o.target.y, o.target.z), f = new y(u.distanceTo(g), 0, 0), m = u.clone().sub(g).normalize(), C = new y(o.up.x, o.up.y, o.up.z); C.normalize(), d.equals(m) && p.equals(C) && c.equals(u) && h.equals(f) ? a && a() : (n.getControlManager().setInteractiveState(!1), t.from({ animPos: l, animDir: d, animUp: p, animTarget: c, animFocal: h }).to({ animPos: g, animDir: m, animUp: C, animTarget: u, animFocal: f }, A).onUpdate((function (A) { var e = A.animTarget; s.lookAtEx(e, A.animDir, A.animUp, A.animFocal.x), r && r(e) })).onComplete((function () { s.lookAtEx(u, m, C, f.x), r && r(u), a && a(), n.getControlManager().setInteractiveState(!0) })).start(e)) }, this.slerpFlyTo = function (i, o, n, r) { var a = o.camera, s = a.position.clone(), l = a.getWorldDirection(new y), c = new y; c.copy(a.realUp || a.up), c.normalize(); var h = a.target.clone(), d = new y(a.position.clone().sub(h).length(), 0, 0), p = (new y).set(i.position.x, i.position.y, i.position.z), g = (new y).set(i.target.x, i.target.y, i.target.z), u = (new y).set(i.up.x, i.up.y, i.up.z), f = g.clone().sub(p), m = new y(f.length(), 0, 0); f.normalize(); var C = u.normalize(); l.equals(f) && c.equals(C) && h.equals(g) && d.equals(m) ? r && r() : t.from({ animPos: s, animDir: l, animUp: c, animTarget: h, animFocal: d }).to({ animPos: p, animDir: f, animUp: C, animTarget: g, animFocal: m }, A).onUpdate((function (A) { var e = A.animTarget; a.lookAtEx(e, A.animDir, A.animUp, A.animFocal.x), n && n(e) })).onComplete((function () { a.lookAtEx(g, f, C, m.x), n && n(g), r && r(), o.getControlManager().setInteractiveState(!0) })).start(e) }, this.flyTo = this.slerpFlyTo, this.linearFlyTo = function (i, o, n, r) { var a = o.camera, s = new y; s.copy(a.realUp || a.up), s.normalize(); var l = a.target.clone(), c = a.position.clone(), h = (new y).set(i.position.x, i.position.y, i.position.z), d = (new y).set(i.target.x, i.target.y, i.target.z), p = (new y).set(i.up.x, i.up.y, i.up.z).normalize(); c.equals(h) && s.equals(p) && l.equals(d) ? r && r() : t.from({ animPosition: c, animUp: s, animTarget: l }).to({ animPosition: h, animUp: p, animTarget: d }, A).onUpdate((function (A) { var e = A.animTarget; a.lookAtEXForTargetPositionUp(e, A.animPosition, A.animUp), n && n(e) })).onComplete((function () { a.lookAtEXForTargetPositionUp(d, h, p), n && n(d), r && r(), o.getControlManager().setInteractiveState(!0) })).start(e, !0) }, this.linearActive = function (i, o, n, r, a) { var s = n.camera, l = (new y).set(i.position.x, i.position.y, i.position.z), c = (new y).set(i.target.x, i.target.y, i.target.z), h = (new y).set(i.up.x, i.up.y, i.up.z); h.normalize(); var d = (new y).set(o.position.x, o.position.y, o.position.z), p = (new y).set(o.target.x, o.target.y, o.target.z), g = (new y).set(o.up.x, o.up.y, o.up.z).normalize(); l.equals(d) && h.equals(g) && c.equals(p) ? a && a() : t.from({ animPosition: l, animUp: h, animTarget: c }).to({ animPosition: d, animUp: g, animTarget: p }, A).onUpdate((function (A) { var e = A.animTarget; s.lookAtEXForTargetPositionUp(e, A.animPosition, A.animUp), r && r(e) })).onComplete((function () { s.lookAtEXForTargetPositionUp(p, d, g), r && r(p), a && a(), n.getControlManager().setInteractiveState(!0) })).start(e, !0) } }, pp = function () { this.condition = [{ type: "IfcWall" }, { type: "IfcRoof" }, { type: "IfcWallStandardCase" }, { type: "IfcDoor" }, { type: "墙" }, { type: "门" }], this.distance = 150, this.factor = 1 }; pp.prototype.setCondition = function (A) { Array.isArray(A) && (this.condition = A) }, pp.prototype.getCondition = function () { return this.condition }, pp.prototype.getDistance = function () { return this.distance }, pp.prototype.getFactor = function () { return this.factor }, pp.prototype.setDistance = function (A) { "number" == typeof A && (this.distance = A) }, pp.prototype.setFactor = function (A) { "number" == typeof A && (this.factor = A) }, pp.prototype.matchConditions = function (A) { var e = this.condition; if (0 === e.length) return !1; for (var t = !0, i = 0, o = e.length; o > i; i += 1) { var n = e[i]; for (var r in n) if (!A.hasOwnProperty(r) || A[r] !== n[r]) { t = !1; break } if (!0 === t) break; e.length - 1 > i && (t = !0) } return t }, pp.prototype.hasCollision = function (A, e) { return !!A && (this.matchConditions(A) && this.distance * this.factor >= e) }; var gp = { MODEL: "Model", GEOMETRY: "Geometry", LINESEGMENTS: "LineSegments", INSTANCEGEOMETRY: "InstanceGeometry", INSTANCEWIREFRAMEGEOMETRY: "InstanceWireframeGeometry", WIREFRAME: "Wireframe", MARKER3D: "Marker3D", CLIPPLANE: "ClipPlane", FILLCLIPPLANE: "FillClipPlane", IBLCUBE: "IBLCube", CUSTOMPLANE: "CustomPlane", PIVOTBALL: "PivotBall", MEASUREPICKPOINT: "MeasurePickPoint", MEASUREPICKLINE: "MeasurePickLine", MEASUREPLANE: "MeasurePlane", MEASURELINE: "MeasureLine", OCTREENODE: "OctreeNode", AREANODE: "AreaNode", AXISNET: "AxisNet", AXISGRIDMANAGER: "AxisGridManager", EXTRUDEBODYMANAGER: "ExtrudeBodyManager", EXTERNALSCENEMANAGER: "ExternalSceneManager", EXTERNALCOMPONENTMANAGER: "ExternalComponentManager", TRANSFORM: "TRANSFORM", RECEIVESHADOWPLANE: "ReceiveShadowPlane" }, up = function () { this.scene = null, this.camera = null, this.octreeRoots = null, this.octantMap = null, this.mouse = new s }, fp = function (A) { this.raycaster = new Dd, this.viewer = A, this.filter = A.getFilter(), this.recursive = !0, this.lastIntersect = null, this.highPriorities = [gp.EXTRUDEBODYMANAGER] }; fp.prototype.destroy = function () { this.viewer = null, this.filter = null, this.raycaster = null, this.lastIntersect = null, this.highPriorities = null }, fp.prototype.intersectExternalComponent = function (A, e, t, i, o) { if (A.visible || o) { for (var n = this.raycaster, r = this.filter, a = function A(e) { var t = e, i = []; if (t.isGroup) for (var o = 0, a = t.children.length; a > o; o += 1) { var s = A(t.children[o]); i = i.concat(s) } else r._isPickable({ userId: t.key }) && t.raycast(n, i); return i }, s = {}, l = 0, c = A.children.length; c > l; l += 1) { var h = A.children[l], d = a(h); if (d.length > 0) { d.sort((function (A, e) { return A.distance - e.distance })), d[0].userId = h.key; var p = s[h.key]; p ? p.distance > d[0].distance && (s[h.key] = d[0]) : s[h.key] = d[0] } } var g = [], u = Object.values(s); if (u.length > 0) for (var f = 0; u.length > f; f += 1) u[f].distance > t.far || t.near > u[f].distance || this.viewer.clipPoint(u[f].point) || g.push(u[f]); return i ? g : (g.sort((function (A, e) { return A.distance - e.distance })), g.length > 0 ? g[0] : null) } }, fp.prototype.defaultIntersect = function (A, e, t, i, o) { if (A.visible || o) { var n = [], r = this.raycaster; ! function A(e) { for (var t = 0, i = e.children.length; i > t; t += 1) { var o = e.children[t]; o.isGroup ? A(o) : o.raycast(r, n) } }(A); var a = []; if (n.length > 0) for (var s = 0; n.length > s; s += 1) n[s].distance > t.far || t.near > n[s].distance || this.viewer.clipPoint(n[s].point) || a.push(n[s]); return i ? a : (a.sort((function (A, e) { return A.distance - e.distance })), a.length > 0 ? a[0] : null) } }, fp.prototype.intersectMeshesWithDistance = function (A, e, t, i, o, n, r, a) { if (!e || !e.mesh) return null; var s = 0, l = uh.MinusEpsilon, c = this.raycaster, h = [], d = this.filter, p = d._hasVisibleFilter(), g = d._hasPickableFilter(), u = this.viewer.modelManager, f = function (A, e) { var t = u.isHiddenSourceObjectUserId(A.userId); if (e) { if (p && !d._isVisible(A) || g && !d._isPickable(A) || t) return !0 } else if (p && !d._isVisible(A) || t) return !0; return !1 }; !0 === this.byGravity ? i.near = 0 : i.near += l; var m = e.info, C = e.mesh, y = []; if (Bh.time("kdNode Pick"), o && n && !n.explosioning) { var v = [], I = new M; I.getInverse(n.getModelMatrix()); var E = c.ray.clone().applyMatrix4(I); if (Array.isArray(o)) for (var B = new M, x = 0; o.length > x; x += 1) { var S = o[x], w = S.modelKey, b = E; if (w) B.getInverse(n.subModel[w]), b = E.clone().applyMatrix4(B); S.intersect(b, v) } else o.intersect(E, v); y = uh.unique(v) } else y = n.getComponentlist(); Bh.timeEnd("kdNode Pick"); var U = Object.keys(n.manager.explosionList); if (n && n.manager && U.length > 0 && (y = y.concat(U), y = uh.unique(y)), Object.keys(u.transformComponent).length > 0) { for (var F in u.transformComponent) y.push(F); y = uh.unique(y) } var K = this.viewer.modelManager.getMatrixWorldGlobal(); Bh.time("Box Pick"); for (var Q = 0, R = y.length; R > Q; Q += 1) { var T = m[y[Q]]; if (T) { var k = T[0]; if (k) { var D = k.boundingBox.clone(); if (D.applyMatrix4(n.getModelMatrix()).applyMatrix4(K), (s = c.ray.intersectBoxWithDistance(D)) >= i.near && i.far >= s) for (var L = 0, N = T.length; N > L; L += 1) { var O = T[L]; if (!f(O, t)) { var V = C[this.viewer.modelManager.getMeshIdFromOctantMap(O)]; if (V) for (var G = 0, P = V.length; P > G; G += 1) h.push({ object: V[G], distance: s, nodeInfo: O }) } } } } } Bh.timeEnd("Box Pick"), Bh.time("Ending Pick"), h.sort((function (A, e) { return A.distance - e.distance })); for (var q = [], j = 0; h.length > j; j += 1) h[j].distance > i.far || i.near > h[j].distance || h[j].object.raycast(c, h[j].nodeInfo, i, this.viewer, q, a); return q.sort((function (A, e) { return A.distance - e.distance })), a ? q : (Bh.timeEnd("Ending Pick"), q.length > 0 ? q[0] : null) }, fp.prototype.intersect = function (A, e, t, i) { var o = this.raycaster; null === e ? o.setFromCamera(A.mouse, A.camera) : o.set(e.origin, e.direction); Bh.time("intersect time"), o.camera = A.camera, o._camera = A.camera, o.viewportSize = A.viewportSize; var n = new y; A.camera.getWorldDirection(n); for (var r = n.dot(o.ray.direction), a = { near: A.camera.near / Math.abs(r), far: A.camera.far / Math.abs(r) }, s = null, l = [], c = A.scene.getGroups(), h = 0; c.length > h; h += 1) if (c[h].isPickable() && 0 !== c[h].children.length) { var d = A.scene.getGroupType(c[h].name), p = d.groupType, g = d.modelKey; if (-1 < this.highPriorities.indexOf(d.groupType)) (s = this.defaultIntersect(c[h], t, a, void 0, !0)) && (s.objectType = c[h].pickableType, s.hoverEnabled = c[h].hoverEnabled, l.push(s)); else if (this.filter._isModelPickable(g)) { switch (p) { case gp.MODEL: var u = this.viewer.modelManager.getModel(g); s = u && u.isDataReady() && u.isVisible() ? this.intersectMeshesWithDistance([], A.octantMap[g], t, a, u.kdTreeNode, u) : null; break; case gp.GEOMETRY: s = vc.MergeComponent ? null : this.intersectMeshesWithDistance(A.octantMap[g], A.octantMap, t, a); break; case gp.EXTERNALCOMPONENTMANAGER: s = this.intersectExternalComponent(c[h], t, a); break; default: s = this.defaultIntersect(c[h], t, a) } s && (s.objectType = c[h].pickableType, s.hoverEnabled = c[h].hoverEnabled, l.push(s)) } } l.sort((function (A, e) { return A.distance - e.distance })), Bh.timeEnd("intersect time"); var f = l.length; if (f > 0) { l.sort((function (A, e) { return A.distance - e.distance })); for (var m = 0; f > m; m += 1) { var C = (s = l[m]).object; if (C.geometry) return s.userId = s.userId || C.key, s.modelKey = C.modelKey, this.lastIntersect = s, s } } return this.lastIntersect = { intersect: s, pickable: t }, null }, fp.prototype.getObjectsByClientCoordinates = function (A) { var e = this.viewer.cameraControl.getIntersectContext(A), t = this.raycaster; return t.setFromCamera(e.mouse, e.camera), t.camera = e.camera, t.viewportSize = e.viewportSize, this.getObjectsByRaycaster(e, t) }, fp.prototype.getObjectsByRaycaster = function (A, e, t) { this.raycaster = e; for (var i = { near: t ? 0 : A.camera.near, far: t ? 1 / 0 : A.camera.far }, o = [], n = A.scene.getGroups(), r = 0; n.length > r; r += 1) if (n[r].isPickable() && 0 !== n[r].children.length) { var a = [], s = A.scene.getGroupType(n[r].name); switch (s.groupType) { case gp.MODEL: var l = s.modelKey, c = this.viewer.modelManager.getModel(l); c && c.isDataReady() && c.isVisible() && (a = this.intersectMeshesWithDistance([], A.octantMap[l], !1, i, c.kdTreeNode, c), o = o.concat(a)); break; case gp.GEOMETRY: break; default: a = this.defaultIntersect(n[r], !1, i, !0), o = o.concat(a) } } return o.sort((function (A, e) { return A.distance - e.distance })), o }, fp.prototype.hitTest = function (A) { var e = this.intersect(A, null, !1); return null !== e ? e.point : null }, fp.prototype.pick = function (A, e) { var t = this.intersect(A, null, !0); return e && e(t), t }, fp.prototype.getIntersectByRay = function (A, e) { return this.intersect(A, e, !0) }; var mp = function (A, e, t, i) { this.viewer = A, this.camera = e, this.domElement = t, this.scene = A.getScene(), this.intersector = new fp(A), this.enabled = !0, this.tempVector3 = new y, this.pivot = null, this.movementSpeed = 8e-4 * vc.SceneSize, this.defaultMovementSpeed = this.movementSpeed, this.minMovementSpeed = .01, this.noZoom = !1, this.minDistance = .1, this.maxDistance = e.far - 2 * vc.SceneSize, this.defaultThroughOutDistance = .1, this.noRotate = !1, this.rotateSpeed = 1, this.noPan = !1, this.keyPanSpeed = 2, this.defaultKeyPanSpeed = this.keyPanSpeed, this.minKeyPanSpeed = .01, this.autoRotate = !0, this.autoRotateSpeed = 2, this.minDistance = 0, this.maxDistance = 1 / 0, this.minZoom = 0, this.maxZoom = 1 / 0, this.enablePolar = !1, this.minPolarAngle = 0, this.maxPolarAngle = Math.PI, this.minAzimuthAngle = -1 / 0, this.maxAzimuthAngle = 1 / 0, this.enableDamping = !1, this.dampingFactor = .25, this.enableZoom = !0, this.zoomSpeed = 1, this.enableRotate = !0, this.rotateSpeed = 1, this.enablePan = !0, this.enablePassThrough = !0, this.isDisableRotate = !1, this.noKeys = !1, this._realManHeight = 1650; var o, n, r, l, c, h, d, p = this, g = 1e-6, u = new y(0, 0, 1), m = new y, C = new f, v = null, I = !1; function E(A, e, t) { if (null == t) return !0; var i = t[0], o = t[1]; if (i >= o) return !1; var n = p.camera, r = n.position; e || (e = r.clone()); var a = n.getWorldDirection(new y), s = n.realUp || n.up, l = a.clone().cross(s).normalize(), c = (new f).setFromAxisAngle(l, A); r.clone().sub(e).normalize(); var h = a.clone().negate(), d = Math.PI - h.angleTo(u.clone()), g = h.clone().projectOnPlane(u.clone()), m = g.angleTo(u.clone()); 0 > g.x && (m = 2 * Math.PI - m), a.applyQuaternion(c).normalize(); var C = a.clone().negate(), v = Math.PI - C.angleTo(u.clone()), I = C.clone().projectOnPlane(u.clone()), E = I.angleTo(u.clone()); if (0 > I.x && (E = 2 * Math.PI - E), Math.abs(E - m) > .001) return !1; if (d > i && o > d) { if (v > o || i > v) return !1 } else if ((d > o ? v - d : d - v) > 0) return !1; return !0 } function B() { var A = p.viewer.modelManager.sceneState; if (A.hasSelection()) { var e = p.viewer.getFilter(), t = p.viewer, i = e.getVisibleComponentSet(A.getSelectionSet()), o = t.getBoundingBoxByIds(i); if (o && !o.isEmpty()) return o.getCenter() } return p.pivot ? p.pivot : p.scene.getBoundingBox().getCenter(new y) } function x(A, e, t, i) { var o = new M; o.getInverse(e); var n = new y(A.position.x, A.position.y, A.position.z), r = n.clone(); r.applyMatrix4(o); var a = new y(t.x, t.y, t.z); return a.add(n), a.applyMatrix4(o), a.sub(r).normalize().multiplyScalar(i), a.add(r), a.applyMatrix4(e), a.sub(n), a } this.collisionManager = new pp, this.pivotBallGroup = null, this.minDollyDistance = 10, this.gravity = 0, this.farFactor = 11.4514, this.sceneLengthUnitFactor = 1, this.destroy = function () { this.viewer = null, this.camera = null, this.domElement = null, this.scene = null, this.intersector.destroy(), this.intersector = null, this.collisionManager = null, this.pivotBallGroup = null }, this.isCameraChanging = function () { return I }, this.setCameraChanging = function (A) { I = A }, this.setCamera = function (A) { this.camera = A }, this.getCamera = function () { return this.camera.updateMVP(), this.camera }, this.dirtyCamera = function (A) { this.camera.dirty = A }, this.getFrustum = function () { return this.camera.getFrustum() }, this.lockAxisZ = function (A) { jh.LockAxisZ = A }, this.isLockedAxisZ = function () { return jh.LockAxisZ }, this.setLockAxisZRange = function (A) { jh.LockAxisZRange = A }, this.getLockAxisZRange = function () { return jh.LockAxisZRange }, this.getClientSize = function () { var A = p.domElement === document ? p.domElement.body : p.domElement; return new s(A.clientWidth, A.clientHeight) }, this.delayHandle = function () { this.timeoutId && clearTimeout(this.timeoutId), this.timeoutId = setTimeout((function () { p.update(!0, !0) }), 200), this.needUpdateRenderList(!1) }, this.processRotate = function (A, e) { var t = this.getClientSize(), i = -2 * Math.PI * A.x / t.x, o = -2 * Math.PI * A.y / t.y; p.handleRotation(i, o, e) }, this.handleRotation = function (A, e, t) { var i = this.camera, o = i.position, n = i.target.clone(), r = i.getWorldDirection(n), a = n.clone().sub(o).length(), s = null, l = function (A) { var e = null, n = null, s = null, l = new y; t ? (n = (e = o.clone().sub(t)).length(), e.normalize(), s = e.clone().applyQuaternion(A).normalize(), i.position.copy(t).add(s.multiplyScalar(n)), r.applyQuaternion(A).normalize(), l.copy(o).add(r.multiplyScalar(a)), i.target.copy(l)) : (r.applyQuaternion(A).normalize(), l.copy(o).add(r.multiplyScalar(a)), i.target.copy(l)) }, c = i.realUp || i.up, h = r.clone().cross(c).normalize().clone().cross(r).normalize(); i.realUp.copy(h); var d = null; if (jh.LockAxisZ) { if (Math.abs(A) > Math.abs(e)) d = u, l(s = (new f).setFromAxisAngle(d, A)), i.realUp.applyQuaternion(s).normalize(); else if (null != jh.LockAxisZRange && Math.abs(e) > 1e-4) { E(e, t, jh.LockAxisZRange) && (d = r.clone().cross(c).normalize(), l(s = (new f).setFromAxisAngle(d, e)), i.realUp.applyQuaternion(s).normalize(), this.adjustCameraUp()) } } else Math.abs(A) < Math.abs(e) ? Math.abs(e) > 1e-4 && (d = r.clone().cross(c).normalize(), l(s = (new f).setFromAxisAngle(d, e)), i.realUp.applyQuaternion(s).normalize(), this.adjustCameraUp()) : (d = i.up.clone().normalize(), l(s = (new f).setFromAxisAngle(d, A)), i.realUp.applyQuaternion(s).normalize()); this.dirtyCamera(!0), this.setCameraChanging(!0) }, this.enabledPolar = function (A) { jh.LockAxisZ = A }, this.setMinPolarAngle = function (A) { "number" == typeof A && (Array.isArray(jh.LockAxisZRange) || (jh.LockAxisZRange = []), jh.LockAxisZRange[0] = A) }, this.setMaxPolarAngle = function (A) { "number" == typeof A && (Array.isArray(jh.LockAxisZRange) || (jh.LockAxisZRange = []), jh.LockAxisZRange[1] = A) }, this.getMinPolarAngle = function () { return jh.LockAxisZRange ? jh.LockAxisZRange[0] : null }, this.getMaxPolarAngle = function () { return jh.LockAxisZRange ? jh.LockAxisZRange[1] : null }, this.adjustCameraForPan = function (A) { var e = this.camera; e.target.add(A), e.position.add(A), this.dirtyCamera(!0), this.setCameraChanging(!0) }, this.updateCamera = function () { var A = this.camera; A.dirty && (A.lookAt(A.target), A.updateMVP(), this.adjustCameraUp(), this.dispatchEvent({ type: Rc.ON_CAMERA_CHANGE, camera: this.camera })) }, this.update = function (A, e) { this.updateCamera(), this.dispatchEvent({ type: Rc.ON_CAMERA_CHANGE, camera: this.camera }); var t = this.camera; A ? (void 0 !== e && this.needUpdateRenderList(e), i(), m.copy(t.position), C.copy(t.quaternion)) : (m.distanceToSquared(t.position) > g || 8 * (1 - C.dot(t.quaternion)) > g) && (i(), m.copy(t.position), C.copy(t.quaternion)) }, this.updateView = function (A) { void 0 !== A && this.needUpdateRenderList(A), this.dispatchEvent({ type: Rc.ON_CAMERA_CHANGE, camera: this.camera }), i() }, this.updateHighlight = function () { this.dispatchEvent({ type: Rc.ON_CAMERA_CHANGE, camera: this.camera }), i(!0) }, this.needUpdateRenderList = function (A) { this.viewer.controlManager.isUpdateRenderList = A }, this.pan = function (A, e) { var t = p.domElement === document ? p.domElement.body : p.domElement, i = new y; function o(A) { var e = p.camera.matrix.elements; i.set(e[0], e[1], e[2]), i.multiplyScalar(-A), p.camera.target.add(i), p.camera.position.add(i) } function n(A) { var e = p.camera.matrix.elements; i.set(e[4], e[5], e[6]), i.multiplyScalar(A), p.camera.target.add(i), p.camera.position.add(i) } if (p.camera.isPerspective) { var r = p.camera.position.clone().sub(p.camera.target).length(); o(2 * A * (r *= Math.tan(p.camera.fov / 2 * Math.PI / 180)) / t.clientHeight), n(2 * e * r / t.clientHeight) } else void 0 !== p.camera.top ? (o(A * (p.camera.right - p.camera.left) / t.clientWidth), n(e * (p.camera.top - p.camera.bottom) / t.clientHeight)) : Bh.warn("WARNING: CloudPickEditor.js encountered an unknown camera type - pan disabled."); this.dirtyCamera(!0), this.setCameraChanging(!0) }, this.panOnWorld = (o = new y, n = new y, r = new y, function (A, e, t, i) { var a = p.getContainerDimensions(), s = A.x - a.left, l = A.y - a.top; o.x = s / a.width, o.y = l / a.height, l = e.y - a.top, n.x = (s = e.x - a.left) / a.width, n.y = l / a.height, r.subVectors(n, o); var c = -r.x * i.x, h = r.y * i.y, d = p.getWorldRight().multiplyScalar(c), g = p.getWorldUp().multiplyScalar(h); t.addVectors(d, g), p.dirtyCamera(!0), p.setCameraChanging(!0) } ), this.adjustCameraForDolly = function (A, e) { var t = A - 1; if (t *= this.zoomSpeed, Math.abs(t) < g) return !1; var i = this.camera, o = i.position, n = this.getWorldEye(), r = new y; e ? r.subVectors(e, o) : r.copy(n), r.multiplyScalar(t); var a = r.length(); i.isPerspective ? this.minDollyDistance > a && r.normalize().multiplyScalar(this.minDollyDistance) : (i.orthoScale *= A, i.setZoom(i.orthoScale)); var s = new y; s.addVectors(o, r), this._goingToDolly(i, s, t) ? (i.position.copy(s), i.target.copy(n.add(s)), this.dirtyCamera(!0), this.setCameraChanging(!0)) : this.resetCameraToMaximumRange() }, this._goingToDolly = function (A, e, t) { if (!A.isPerspective || !vc.ConstraintZoom) return !0; var i = this.scene.getBoundingBox(); if (t > 0) return !!A.getFrustum().intersectsBox(i); var o = i.getSize(this.tempVector3).length(), n = i.getCenter(this.tempVector3), r = .5 * o / Math.tan(a.degToRad(.5 * A.fov)) * this.farFactor; return e.distanceTo(n) < r }, this.dolly = function (A, e, t) { var i = new s(A, e), o = this.getIntersectContext(i), n = this.intersector.hitTest(o); this.adjustCameraForDolly(t, null !== n ? n : null) }, this.dollyByPoint = function (A, e, t) { var i = this.getTrackingPoint(A, e); this.adjustCameraForDolly(t, i) }, this.endOperation = function () { this.intersector.lastIntersect = null }, this.zoom = function (A, e, t) { var i; i = 1 + A, void 0 === e || void 0 === t ? this.adjustCameraForDolly(i, null) : this.dollyByPoint(e, t, i), this.update() }, this.getContainerDimensions = function () { return xh.getDomOffsetToClient(this.domElement) }, this.computeFrustum = (l = new M, c = new M, function (A, e, t, i, o, n) { var r = this.camera, s = r.near * Math.tan(a.degToRad(.5 * r.fov)), h = s * r.aspect; l.makePerspective(((A - n.left) / n.width * 2 - 1) * h, ((e - n.left) / n.width * 2 - 1) * h, (-(t - n.top) / n.height * 2 + 1) * s, (-(i - n.top) / n.height * 2 + 1) * s, r.near, r.far), r.updateMatrixWorld(), r.matrixWorldInverse.getInverse(r.matrixWorld), c.multiplyMatrices(l, r.matrixWorldInverse), o.setFromProjectionMatrix(c) } ), this.screenToCanvas = function (A, e) { var t = this.getContainerDimensions(); return { x: A - t.left, y: e - t.top } }, this.mapScreenToLocal = function (A, e, t) { var i = this.getContainerDimensions(); t.set(A - i.left, i.height - (e - i.top)) }, this.mapWindowToViewport = function (A, e, t) { var i = this.getContainerDimensions(), o = t || new s; return o.x = (A - i.left) / i.width * 2 - 1, o.y = -(e - i.top) / i.height * 2 + 1, o }, this.getCameraName = function () { return this.camera === this.viewer.defaultCamera ? this.camera.isPerspective ? Ec.PERSPECTIVE : Ec.ORTHOGRAPHIC : this.camera.name }, this.getCameraInfo = function () { var A = new Qd(this.getCameraName(), this.camera.position, this.camera.target, this.camera.up); return JSON.stringify(A) }, this.isKeepZoom = function (A, e, t) { this.dirtyCamera(!0), this.setCameraChanging(!0), void 0 === e && (e = this.minDistance), void 0 === t && (t = this.maxDistance); var i = this.camera.position, o = this.camera.target, n = new y; n.copy(i).sub(o); var r = n.length() * (2 - A); return !(e > r || r > t) }, this.computeRotation = function () { var A = new M; A.lookAt(this.camera.position, this.camera.target, this.camera.up); var e = new f; e.setFromRotationMatrix(A); var t = new F; return t.setFromQuaternion(e, void 0, !1), t }, this.adjustCameraUp = function () { this.camera.realUp.z > 0 ? this.camera.up = new y(0, 0, 1) : 0 > this.camera.realUp.z ? this.camera.up = new y(0, 0, -1) : this.camera.realUp.x > 0 ? this.camera.up = new y(1, 0, 0) : 0 > this.camera.realUp.x ? this.camera.up = new y(-1, 0, 0) : this.camera.realUp.y > 0 ? this.camera.up = new y(0, 1, 0) : 0 > this.camera.realUp.y && (this.camera.up = new y(0, -1, 0)) }, this.getWorldEye = function () { return this.camera.target.clone().sub(this.camera.position) }, this.getWorldRight = function () { var A = new y, e = this.camera.up, t = this.getWorldEye(); return A.crossVectors(t, e), 0 === A.lengthSq() && (e.z > e.y ? t.y -= 1e-4 : t.z += 1e-4, A.crossVectors(t, e)), A.normalize() }, this.getWorldRightByRealUp = function () { var A = new y, e = this.camera.realUp, t = this.getWorldEye(); return A.crossVectors(t, e), 0 === A.lengthSq() && (e.z > e.y ? t.y -= 1e-4 : t.z += 1e-4, A.crossVectors(t, e)), A.normalize() }, this.getWorldUp = function () { var A = this.getWorldRight(), e = this.getWorldEye(); return A.cross(e).normalize() }, this.getWorldDimension = function (A, e) { var t = this.camera.position, i = this.getWorldEye().normalize(), o = this.getTrackingPoint(A, e).clone().sub(t), n = Math.abs(i.dot(o)), r = this.getContainerDimensions(), l = r.width / r.height, c = 2 * n * Math.tan(a.degToRad(.5 * this.camera.fov)); return new s(c * l, c) }, this.getWorldPointFromNearPlane = function (A, e) { var t = new y(A, e, 0); return t.unproject(this.camera), t }, this.getTrackingPoint = function (A, e) { var t = new s(A, e), i = this.getIntersectContext(t), o = this.intersector.hitTest(i), n = this.camera.position; if (!o) { var r = i.mouse, a = this.getWorldEye(), l = a.clone().normalize(), c = this.getWorldPointFromNearPlane(r.x, r.y), h = new CA; if (this.camera.isPerspective) h.origin.copy(n), h.direction.copy(c.clone().sub(n).normalize()); else { var d = c.clone(); d.sub(a), h.origin.copy(d), h.direction.copy(l) } if (v) { var p = new EA; if (p.setFromNormalAndCoplanarPoint(l, v), o = h.intersectPlane(p, new y)) { var u = o.distanceTo(n); g > u && (o = this.getTrackingPointFromBoundingBox(l, h)) } else o = this.getTrackingPointFromBoundingBox(l, h) } else o = this.getTrackingPointFromBoundingBox(l, h); o || (Bh.log("tracking point is default!"), o = c) } return n.equals(o) && (o = null), v = o && o.clone(), o }, this.getTrackingPointFromBoundingBox = function (A, e) { return this.viewer.getScene().getTrackingPointFromBoundingBox(A, e) }, this.setCameraPosition = function (A) { var e = this.camera, t = this.getWorldEye(), i = t.length(), o = t.clone(); o.normalize(), o.setLength(i), e.position.copy(A), e.target.addVectors(e.position, o), this.dirtyCamera(!0), this.setCameraChanging(!0) }, this.moveStraight = function (A, e) { var t = this.camera.position, i = this.camera.target; if (e) { var o = new y(i.x - t.x, 0, i.z - t.z), n = A / o.length(), r = new y(o.x * n, 0, o.z * n); t.add(r), i.add(r) } else { var a = i.clone().sub(t); this.camera.translateZ(-A), i.addVectors(t, a) } this.dirtyCamera(!0), this.setCameraChanging(!0) }, this.getIntersectContext = function (A) { var e = new up; return e.scene = p.viewer.getScene(), e.camera = this.camera, null !== A && this.mapWindowToViewport(A.x, A.y, e.mouse), e.viewportSize = p.viewer.getRenderer().getSize(new s), e.octantMap = p.viewer.modelManager.octantToObjectMap, e }, this.getLastIntersect = function () { return this.intersector.lastIntersect }, this.calculatePivot = function (A, e) { var t = this, i = this.viewer, o = i.getFilter(), n = i.getScene(), r = null; function a(A) { var e = t.getIntersectContext(A), i = t.intersector.hitTest(e); if (i) return i; var o = n.getBoundingBox(); if (n.hasClipPlanes() && n.getClipPlanes().isEnabled()) { var r = n.getClipPlanes().getClipBoundingBox(); o.intersect(r) } else if (n.hasFillClipPlanes() && n.getFillClipPlane().isEnabled()) { var a = n.getFillClipPlane().getFillClipBoundingBox(); o.intersect(a) } return o.getCenter(new y) } var s = null, l = null; switch (A) { case kc.SELECTION: if (n.hasClipPlanes() && n.getClipPlanes().isEnabled() && (s = n.getClipPlanes().getClipBoundingBox()) && !s.isEmpty() && n.getClipPlanes().isVisible()) { r = s.getCenter(); break } n.hasFillClipPlanes() && n.getFillClipPlane().isEnabled() && (l = n.getFillClipPlane().getFillClipBoundingBox()); var c = o.getVisibleComponentSet(i.modelManager.sceneState.getSelectionSet(), i), h = i.getBoundingBoxByIds(c); mh.isMobileDevice() || !h || h.isEmpty() ? r = a(e) : (s ? h.intersect(s) : l && h.intersect(l), r = h.getCenter(new y)); break; case kc.CENTER: r = n.getBoundingBoxWorld().getCenter(new y); break; case kc.CAMERA: r = null; break; default: r = a(e) } return this.dirtyCamera(!0), this.setCameraChanging(!0), this.pivot = r, r }, this.touchUpdateRotationInPersonView = function (A, e) { this.dirtyCamera(!0), this.setCameraChanging(!0); var t = this, i = this.camera.position, o = this.camera.target.clone().sub(i).length(), n = this.camera.getWorldDirection(new y), r = this.camera.realUp || this.camera.up, a = n.clone().cross(r).normalize(), s = a.clone().cross(n).normalize(); this.camera.realUp.copy(s); var l = jh.LockAxisZRange, c = null, h = null; if (Math.abs(A) > Math.abs(e)) c = u, h = A; else { if (jh.LockAxisZ && !E(e, this.camera.target, l)) return; c = a; var d = new y(0, 0, 1).clone().cross(r), p = d.dot(a), m = Math.asin(d.length()); 0 > p && (m = -m), m + e > Math.PI / 4 - g ? e = Math.PI / 4 - g - m : m + e < -Math.PI / 4 + g && (e = -Math.PI / 4 + g - m), h = e } var C, v, I = (new f).setFromAxisAngle(c, h); C = I, v = new y, n.applyQuaternion(C).normalize(), v.copy(i).add(n.multiplyScalar(o)), t.camera.target.copy(v), this.camera.realUp.applyQuaternion(I).normalize() }, this.touchUpdateRotationInModelView = function (A, e, t) { this.dirtyCamera(!0), this.setCameraChanging(!0); var i = t || this.scene.getBoundingBox().getCenter(new y), o = this.camera.position, n = this.camera.target.clone().sub(o).length(), r = o.clone().sub(i), a = r.length(), s = null, l = this.camera.getWorldDirection(new y); r.normalize(); var c = function (A) { var e = new y, t = r.clone().applyQuaternion(A).normalize(); o.copy(i).add(t.multiplyScalar(a)), l.applyQuaternion(A).normalize(), e.copy(o).add(l.multiplyScalar(n)), p.camera.target.copy(e) }, h = this.camera.realUp || this.camera.up, d = l.clone().cross(h).normalize(), m = d.clone().cross(l).normalize(); this.camera.realUp.copy(m); var C = null; if (jh.LockAxisZ) { if (Math.abs(A) > Math.abs(e)) C = u, c(s = (new f).setFromAxisAngle(C, A)), this.camera.realUp.applyQuaternion(s).normalize(); else if (null != jh.LockAxisZRange && Math.abs(e) > 1e-4) { E(e, i, jh.LockAxisZRange) && (C = l.clone().cross(h).normalize(), c(s = (new f).setFromAxisAngle(C, e)), this.camera.realUp.applyQuaternion(s).normalize(), this.adjustCameraUp()) } } else if (Math.abs(A) > Math.abs(e)) C = this.camera.up.clone().normalize(), c(s = (new f).setFromAxisAngle(C, A)), this.camera.realUp.applyQuaternion(s).normalize(); else if (Math.abs(e) > .01) { C = l.clone().cross(h).normalize(); var v = new y(0, 1, 0).clone().cross(h), I = v.dot(d), x = Math.asin(v.length()); 0 > I && (x = -x), x + e > Math.PI / 2 - g ? e = Math.PI / 2 - g - x : x + e < -Math.PI / 2 + g && (e = -Math.PI / 2 + g - x), c(s = (new f).setFromAxisAngle(C, e)), this.camera.realUp.applyQuaternion(s).normalize(), this.adjustCameraUp() } this.pivotBallGroup || function () { p.pivotBallGroup = p.scene.getOrCreateGroup(gp.PIVOTBALL, { priority: 10, globalSpace: !1 }); var A = new er(15, 64, 64), e = new Ue(A, new Ir({ color: 16777215, depthTest: !1, opacity: .5, transparent: !0, side: 2 })), t = new Ue(A = new er(1, 64, 64), new Ir({ color: 16711680, depthTest: !1, opacity: .5, transparent: !0, side: 2 })); p.pivotBallGroup.add(e), p.pivotBallGroup.add(t) }(), this.pivotBallGroup.visible = !0; for (var S = function () { var A = p.camera, e = A.position, t = p.camera.target.clone().sub(e); t.normalize(); var i = new EA; i.setFromNormalAndCoplanarPoint(t.clone().negate(), B()), i.normalize(); var o = i.distanceToPoint(e) * Math.tan(.5 * A.fov), n = p.getContainerDimensions(); return 2 * o / (n.height - n.top) }(), w = B(), M = 0; this.pivotBallGroup.children.length > M; M += 1) { var b = this.pivotBallGroup.children[M]; b.position.copy(w), b.scale.set(S, S, S), b.updateMatrixWorld() } }, this.touchUpdateRotation = function (A, e) { var t = this.camera.position; this.scene.getBoundingBox().containsPoint(t) ? this.touchUpdateRotationInPersonView(A, e) : this.touchUpdateRotationInModelView(A, e, B()) }, this.clearTouchRotateState = function () { this.pivotBallGroup && (this.pivotBallGroup.visible = !1) }, this.touchEndHandler = function () { this.viewer.controlManager.cameraChange = !1, this.clearTouchRotateState(), this.touchUpdate() }, this._adjustCameraForDolly = function (A, e) { var t = e - 1; if (Math.abs(t) < g) return !1; var i = this.camera, o = i.position, n = this.getWorldEye(), r = new y; A ? r.subVectors(A, o) : r.copy(n), r.multiplyScalar(t); var a = r.length(); i.isPerspective && this.minDollyDistance > a && r.normalize().multiplyScalar(this.minDollyDistance); var s = new y; return s.addVectors(o, r), i.isPerspective || (i.orthoScale *= e, i.setZoom(i.orthoScale)), i.position.copy(s), i.target.copy(n.add(s)), this.dirtyCamera(!0), this.setCameraChanging(!0), !0 }, this.touchDolly = function (A, e, t) { var i = new s(A, e), o = this.getIntersectContext(i), n = this.intersector.hitTest(o); this._adjustCameraForDolly(null !== n ? n : null, t) }, this.touchUpdate = (h = new y, d = new f, function () { var A = new y; A.copy(p.camera.up), p.camera.up.copy(p.camera.realUp), p.camera.lookAt(p.camera.target), p.camera.up.copy(A), p.camera.updateMVP(), (h.distanceToSquared(p.camera.position) > g || 8 * (1 - d.dot(this.camera.quaternion)) > g) && (this.dispatchEvent({ type: Rc.ON_CAMERA_CHANGE, camera: this.camera }), i(), p.dirtyCamera(!1), h.copy(p.camera.position), d.copy(p.camera.quaternion)) } ), this.goTurnForWalk = function (A) { var e = this.getCamera(), t = e.position, i = e.target, o = new y(i.x - t.x, i.y - t.y, 0), n = Math.cos(A), r = Math.sin(A), a = new y(o.x * n - o.y * r, o.x * r + o.y * n, 0); i.x = t.x + a.x, i.y = t.y + a.y, this.dirtyCamera(!0), this.setCameraChanging(!0) }, this.goPitchForWalk = function (A) { var e = this.getCamera(), t = e.position, i = e.target, o = i.x - t.x, n = i.y - t.y, r = new y(Math.sqrt(o * o + n * n), 0, i.z - t.z), a = Math.cos(A), s = Math.sin(A), l = new y(r.x * a - r.z * s, 0, r.x * s + r.z * a); i.z = t.z + l.z, this.dirtyCamera(!0), this.setCameraChanging(!0) }, this.goUpDownForWalk = function (A) { var e = this.getCamera(), t = e.position, i = e.target, o = new y(0, 0, 1), n = x(e, this.scene.getMatrixGlobal(), o, A); t.z += n.z, i.z += n.z, this.dirtyCamera(!0), this.setCameraChanging(!0) }, this.stepCameraForWalk = function (A, e) { var t = this.getCamera(), i = t.position, o = t.target, n = new y(o.x - i.x, o.y - i.y, 0).normalize(), r = new y(0, 0, 1), a = n.clone().cross(r), s = this.scene.getMatrixGlobal(), l = null; switch (A) { case qc.FORWARD: (l = x(t, s, n, e)).z = 0; break; case qc.BACK: n.multiplyScalar(-1), (l = x(t, s, n, e)).z = 0; break; case qc.LEFT: a.multiplyScalar(-1), (l = x(t, s, a, e)).z = 0; break; case qc.RIGHT: (l = x(t, s, a, e)).z = 0 } i.add(l), o.add(l), this.dirtyCamera(!0), this.setCameraChanging(!0) }, this.hitTestWithGround = function () { var A = this.getCamera(), e = A.up.clone().multiplyScalar(-1), t = new CA(A.position.clone(), e), i = this.getIntersectContext(null), o = this.intersector.byGravity; this.intersector.byGravity = !0; var n = this.intersector.intersect(i, t, !1); return this.intersector.byGravity = o, n }, this.projectPositionToBottom = function (A) { var e = void 0; if (A instanceof Array) e = new y(A[0], A[1], A[2]); else { if (!(A instanceof y)) return; e = A } this.getCamera(); var t = new CA(e, new y(0, 0, -e.z).normalize()), i = this.getIntersectContext(null), o = this.intersector.byGravity; this.intersector.byGravity = !0; var n = this.intersector.intersect(i, t, !1); if (this.intersector.byGravity = o, n) return n.point }, this.hitTestForward = function (A) { var e = this.getCamera(), t = this.getWorldEye(); t.normalize(), t = t.multiplyScalar(A); var i = new CA(e.position.clone(), t), o = this.getIntersectContext(null); return o.camera.near = -1, this.intersector.intersect(o, i, !1) }, this.hitTestRight = function (A) { var e = this.getCamera(), t = this.getWorldEye(); t.normalize(); var i = t.cross(e.up).normalize(); i = i.multiplyScalar(A); var o = new CA(e.position.clone(), i), n = this.getIntersectContext(null); return n.camera.near = -1, this.intersector.intersect(n, o, !1) }, this.computeGravity = function () { this.gravity = 0; var A = this.hitTestWithGround(); if (null === A) { var e = this.scene.getMatrixGlobal(), t = new M; t.getInverse(e); var i = this.camera.position.clone(); i.applyMatrix4(t), i.z = this.scene.getBoundingBoxWorld().min.z || 0, i.applyMatrix4(e), this.distanceToGround = Math.abs(this.camera.position.z - i.z) } if (void 0 === this.manHeight) this.computeManHeight(); else { var o = A ? A.distance - this.manHeight : this.distanceToGround - this.manHeight; if (o /= this.scene.getGlobalScaleFactor(), .1 > Math.abs(o)) return 0; this.gravity = o } }, this.computeManHeight = function () { if (!this.manHeight) { var A = this.hitTestWithGround(), e = this.scene.getMatrixGlobal(), t = new M; if (t.getInverse(e), null != A) { var i = A.point.clone(); i.applyMatrix4(t), i.z += this._realManHeight * this.sceneLengthUnitFactor, i.applyMatrix4(e), this.manHeight = Math.abs(A.point.z - i.z) } else { var o = this.camera.position.clone(); o.applyMatrix4(t), o.z = 0; var n = o.clone(); n.z += this._realManHeight * this.sceneLengthUnitFactor, o.applyMatrix4(e), n.applyMatrix4(e), this.manHeight = Math.abs(n.z - o.z) } } }, this.setRealManHeight = function (A) { A !== this._realManHeight && (this._realManHeight = A, this.manHeight = void 0) }, this.getRealManHeight = function () { return this._realManHeight }, this.walkWithParallelEye = function () { var A = this.camera, e = this.getWorldEye().length(), t = this.scene.getBoundingBox().getCenter(new y), i = new y; i.subVectors(t, A.position); var o = i.length(); i.z = 0, i.normalize(), i.multiplyScalar(o), A.position.subVectors(t, i), A.target.addVectors(A.position, i.normalize().multiplyScalar(e)); var n = new y(0, 0, 1); A.up.copy(n), A.realUp.copy(n), this.dirtyCamera(!0), this.setCameraChanging(!0), this.update(!0) }, this.updateFlyMove = function (A, e) { var t = this.camera; this.dirtyCamera(!0), this.setCameraChanging(!0); var i = qc; A & i.FORWARD && t.translateZ(-e), A & i.BACK && t.translateZ(e), A & i.LEFT && t.translateX(-e), A & i.RIGHT && t.translateX(e), A & i.UP && t.translateY(e), A & i.DOWN && t.translateY(-e), this.flyOnWorld() }, this.flyOnWorld = function () { var A = this.camera, e = A.up.clone(); A.realUp && A.up.copy(A.realUp), A.lookAt(A.target), A.realUp && A.up.copy(e), this.updateCamera(), this.adjustCameraUp(), i(), this.dirtyCamera(!1), m.copy(A.position), C.copy(A.quaternion) }, this.rotateForFly = function (A, e, t, i) { var o = this.camera, n = o.position, r = o.target, a = r.clone().sub(n), s = new y(0, 1, 0), l = o.realUp || o.up, c = a.clone().cross(l).normalize(); if (this.dirtyCamera(!0), this.setCameraChanging(!0), jh.LockAxisZ && (e = 0), 0 !== e) { var h = (new f).setFromAxisAngle(c, -e), d = a.clone(); d.applyQuaternion(h); var p = d.angleTo(s); t > (p -= .5 * Math.PI) || p > i || a.applyQuaternion(h) } if (0 !== A) { var g = (new f).setFromAxisAngle(s, -A); a.applyQuaternion(g) } r.addVectors(n, a), this.flyOnWorld() }, this.fitAndRotateBySelection = function () { var A = this.viewer; A.setPointRotateMode(kc.SELECTION), A.zoomToSelection() }, this.flyToPointWithParallelEye = function (A) { var e = this.getWorldEye(), t = e.length(), i = e.clone(); i.y = 0, i.normalize(), i.setLength(t); var o = new y(0, 0, 1); this.camera.up = o, this.camera.realUp = o.clone(), this.camera.position.copy(A), this.camera.target.addVectors(this.camera.position, i), this.update(!0) }, this.flyToPoint = function (A) { var e = this.getWorldEye(); this.camera.position.copy(A), this.camera.target.addVectors(this.camera.position, e), this.update(!0) }, this.setRoamingWalkAbsoluteHeight = function (A) {}, this.setCameraHeight = function (A, e) { this.cameraAbsoluteHeightEnabled = !1, this.cameraRelativeHeight = e, void 0 === this.cameraConstraintHeights ? this.cameraConstraintHeights = [] : this.cameraConstraintHeights.length = 0; for (var t = 0, i = A.length; i > t; t += 1) this.cameraConstraintHeights[t] = A[t] }, this.setCameraAbsoluteHeight = function (A) { this.cameraAbsoluteHeightEnabled = !0, this.cameraAbsoluteHeight = A }, this.updateCameraHeight = function () { var A = this.scene, e = this.getCamera(), t = A.drawingToWorld(e.position), i = t.z, o = null, n = null; if (this.cameraAbsoluteHeightEnabled) void 0 === this.cameraAbsoluteHeight && (this.cameraAbsoluteHeight = i), o = this.cameraAbsoluteHeight; else if (void 0 === this.cameraConstraintHeights) o = i; else { var r = uh.findRange(this.cameraConstraintHeights, i); if (o = this.cameraConstraintHeights[r], o += this.cameraRelativeHeight, this.cameraConstraintHeights.length - 1 > r) { var a = this.cameraConstraintHeights[r + 1]; o > a && (o = a) } } o !== i && (n = A.worldToDrawing({ x: t.x, y: t.y, z: o }), this.setCameraPosition(n)) }, this.getRaycaster = function (A, e) { var t = new Dd, i = new s; return this.mapWindowToViewport(A, e, i), t.setFromCamera(i, this.camera), t }, this.translateCameraForWalk = function (A, e) { var t = this.collisionManager; if (0 !== A.x) if (!1 === vc.EnableHitDetection) this.stepCameraForWalk(qc.RIGHT, A.x * e); else { var i = 1; 0 > A.x && (i = -1); var o = this.hitTestRight(i); if (o) { var n = this.viewer.modelManager.getNodeInfosByUserId(o.userId); if (!t.hasCollision({ type: n ? n[0].type : null }, o.distance)) { var r = e; Math.abs(e) > o.distance && (r = e > 0 ? o.distance - t.distance * t.factor - .1 * this.sceneLengthUnitFactor : t.distance * t.factor - o.distance + .1 * this.sceneLengthUnitFactor), this.stepCameraForWalk(qc.RIGHT, A.x * r) } } else this.stepCameraForWalk(qc.RIGHT, A.x * e) } if (0 !== A.y) if (!1 === vc.EnableHitDetection) this.stepCameraForWalk(qc.BACK, A.y * e); else { var a = 1; A.y > 0 && (a = -1); var s = this.hitTestForward(a); if (s) { var l = this.viewer.modelManager.getNodeInfosByUserId(s.userId); if (!t.hasCollision({ type: l ? l[0].type : null }, s.distance)) { var c = e; Math.abs(e) > s.distance && (c = e > 0 ? s.distance - t.distance * t.factor - .1 * this.sceneLengthUnitFactor : t.distance * t.factor - s.distance + .1 * this.sceneLengthUnitFactor), this.stepCameraForWalk(qc.BACK, A.y * c) } } else this.stepCameraForWalk(qc.BACK, A.y * e) } if (0 !== A.z) this.goUpDownForWalk(A.z * e * .5); else { var h = e; if (0 !== this.gravity) { var d = Math.abs(this.gravity); h = d > h ? .2 * d : d } this.gravity > 0 ? this.goUpDownForWalk(-h) : 0 > this.gravity && this.goUpDownForWalk(h) } }, this.rotateCameraForWalk = function (A, e) { 0 !== A.x && (this.goPitchForWalk(A.x * Math.PI), A.x = 0), 0 !== A.z && (this.goTurnForWalk(-A.z * Math.PI * e), A.z = 0) }, this.zoomCameraForWalk = function (A) { this.adjustCameraForDolly(A, null) }, this.movePlane = function (A, e, t, i, o) { if (void 0 === o) { var n = new EA; n.setComponents(A.x, A.y, A.z, A.w), o = new y, n.coplanarPoint(o) } var r = new y(A.x, A.y, A.z), a = this.camera.getWorldDirection(new y), s = new EA; s.setFromNormalAndCoplanarPoint(a, o); var l = this.getRaycaster(e.clientX, e.clientY), c = new y, h = this.getRaycaster(t.x, t.y), d = new y; if (l.ray.intersectPlane(s, c) && h.ray.intersectPlane(s, d)) { c.subVectors(c, d), c.projectOnVector(r); var p = c.length(); if (0 > c.dot(r) && (p = -p), 0 !== p) return i && (r.multiplyScalar(p), p = r.x + r.y + r.z), p } return null }, this.getZenith = function () { var A = this.camera.position, e = p.viewer.getBoundingBox().getCenter(); return A.clone().sub(e.clone()).clone().angleTo(u.clone()) }, this.getAzimuth = function () { var A = this.camera.position, e = p.viewer.getBoundingBox().getCenter(), t = A.clone().sub(e.clone()).clone().projectOnPlane(u.clone()), i = t.angleTo(u.clone()); return 0 > t.x && (i = 360 - i), i }, this.getCurrentRangeofCamera = function () { var A = this.camera, e = this.viewer.getBoundingBox(), t = e.getCenter(), i = A.position, o = .5 * e.getSize().length() / Math.tan(a.degToRad(.5 * A.fov)); return t.distanceTo(i) / o }, this.setMaximalRangeofCamera = function (A) { this.farFactor = A || 2 }, this.getMaximalRangeofCamera = function () { return this.farFactor }, this.cameraWithinMaximumRange = function (A) { var e = A || this.farFactor; return this.getCurrentRangeofCamera() <= e }, this.resetCameraToMaximumRange = function (A) { var e = this.camera, t = this.viewer.getBoundingBox(), i = t.getCenter(), o = e.position, n = this.farFactor; "number" == typeof A && (n = A); var r = (new y).subVectors(i, o), s = .5 * t.getSize().length() / Math.tan(a.degToRad(.5 * e.fov)); r.setLength(n * s); var l = i.clone().sub(r), c = this.getWorldEye(); this.camera.position.copy(l), this.camera.target.copy(c.add(l)), this.updateView(!0) }, this.setZoomSpeed = function (A) { "number" == typeof A && A > 0 && (this.zoomSpeed = A) }, this.getZoomSpeed = function () { return this.zoomSpeed }, this.setZoomOutLimitRate = function (A) { "number" == typeof A && A > 0 && (this.farFactor = A) }, this.getZoomOutLimitRate = function () { return this.farFactor }, this.setSceneUnit = function (A) { var e = 1; switch (A) { case "m": e = .001; break; case "mm": e = 1; break; case "km": e = 1e-6; break; default: e = 1 } this.collisionManager.setFactor(e), this.sceneLengthUnitFactor = e } }; Object.assign(mp.prototype, Ld.prototype); var Cp = function () { this.duration = 500, this._state = null }; Cp.prototype.rotateCameraByViewCubeSide = function (A, e, t, i) { var o = A.target.clone(), n = e.getCenter(new y), r = A.quaternion.clone(), a = A.position.clone(), s = this._calculateDistanceAndEuler(t, e), l = (new f).setFromEuler(s.euler).inverse(), c = new M; c.makeRotationFromQuaternion(l); var h = c.elements, d = new y(-h[8], -h[9], -h[10]).normalize(); d.setLength(s.distance); var p = n.clone().sub(d); if (!a.equals(p) || !r.equals(l)) { var g = this._calculatePositionRotateInfo(r, l, a, p); this._state && this._state.timerID && (cancelAnimationFrame(this._state.timerID), this._state.timerID = void 0), this._state = { startTime: Date.now(), startQuaternion: r, endQuaternion: l, startPosition: a, endPosition: p, startTarget: o, endTarget: n, positionRotateInfo: g, onUpdate: i }, this._state.timerID = requestAnimationFrame(this._animate.bind(this)) } }, Cp.prototype.cancelAnimation = function () { this._state && this._state.timerID && (cancelAnimationFrame(this._state.timerID), this._state = void 0) }, Cp.prototype._animate = function () { if (this._state) { var A = Date.now(), e = this._state, t = e.startTarget, i = e.endTarget, o = e.startQuaternion, n = e.endQuaternion, r = e.startPosition, a = e.endPosition, s = e.positionRotateInfo, l = Math.min((A - e.startTime) / this.duration, 1); l = this._easyOut(l); var c = n.clone(); o.equals(n) || f.slerp(o, n, c, l); var h = a; r.equals(a) || (h = s ? this._rotatePositionAroundCenter(s, r, a, l) : r.clone().lerp(a, l)); var d = i.clone(); t.equals(i) || (d = d.lerpVectors(t, i, l)), "function" == typeof this._state.onUpdate && this._state.onUpdate(l, c, h, d), 1 === l ? (cancelAnimationFrame(this._state.timerID), this._state = null) : this._state.timerID = requestAnimationFrame(this._animate.bind(this)) } }, Cp.prototype._calculateDistanceAndEuler = function (A, e) { var t = -45, i = 0, o = -135, n = 0, r = e ? e.getSize(new y) : { x: 0, y: 0, z: 0 }; switch (A) { case Uc.Home: break; case Uc.Front: t = -90, i = 0, o = 0; break; case Uc.Right: t = -90, i = 0, o = -90; break; case Uc.Back: t = -90, i = 0, o = -180; break; case Uc.Left: t = -90, i = 0, o = -270; break; case Uc.Top: t = 0, i = 0, o = 0; break; case Uc.Bottom: t = -180, i = 0, o = -180; break; case Uc.TopFront: t = -45, i = 0, o = -90; break; case Uc.TopRight: t = -45, i = 0, o = -180; break; case Uc.TopBack: t = -45, i = 0, o = 90; break; case Uc.TopLeft: t = -45, i = 0, o = 0; break; case Uc.BottomFront: t = -135, i = 0, o = 270; break; case Uc.BottomRight: t = -135, i = 0, o = -180; break; case Uc.BottomBack: t = -135, i = 0, o = 90; break; case Uc.BottomLeft: t = -135, i = 0, o = 0; break; case Uc.FrontRight: t = -90, i = 0, o = -135; break; case Uc.BackRight: t = -90, i = 0, o = -225; break; case Uc.BackLeft: t = -90, i = 0, o = 45; break; case Uc.FrontLeft: t = -90, i = 0, o = -45; break; case Uc.TopFrontRight: t = -45, i = -0, o = -135; break; case Uc.TopBackRight: t = -45, i = 0, o = -225; break; case Uc.TopBackLeft: t = -45, i = 0, o = -315; break; case Uc.TopFrontLeft: t = -45, i = 0, o = -45; break; case Uc.BottomFrontRight: t = -135, i = 0, o = -135; break; case Uc.BottomBackRight: t = -135, i = 0, o = -225; break; case Uc.BottomBackLeft: t = -135, i = 0, o = 45; break; case Uc.BottomFrontLeft: t = -135, i = 0, o = -45 } var a = Math.PI / 180, s = new F(t * a, i * a, o * a); return 0 === (n = r.x + r.y + r.z) && (n = vc.SceneSize / 2), { euler: s, distance: n } }, Cp.prototype._easyOut = function (A) { return A * (2 - A) }, Cp.prototype._calculatePositionRotateInfo = function (A, e, t, i) { var o = (new f).multiplyQuaternions(e, A.clone().inverse()); o.normalize(); var n = new y(o.x, o.y, o.z).normalize(), r = 2 * Math.acos(o.w); if (0 !== r) { var a = null; if (r === Math.PI) a = (new y).addVectors(t, i).divideScalar(2); else { var s = (new y).addVectors(t, i), l = (new y).subVectors(i, t), c = n.clone().cross(l).normalize(), h = .5 * l.length() / Math.tan(r / 2); c.setLength(h), a = (new y).addVectors(s.multiplyScalar(.5), c) } var d = null, p = null, g = (new y).subVectors(t, a), u = g.length(), m = (new y).subVectors(i, t); if (r === Math.PI) p = -1, d = (new y).crossVectors(m, n); else { var C = (new y).subVectors(i, a); p = Math.cos(r), p = Math.max(-1, Math.min(1, p)), d = C.clone().sub(g.clone().multiplyScalar(p)) } return { center: a, dot: p, vec: d, start: g, radiusLength: u } } }, Cp.prototype._rotatePositionAroundCenter = function (A, e, t, i) { if (0 === i) return e; if (i >= 1) return t; var o = Math.acos(A.dot) * i, n = A.start.clone(), r = A.vec.clone().normalize(), a = n.multiplyScalar(Math.cos(o)), s = r.multiplyScalar(Math.sin(o) * A.radiusLength), l = a.add(s); return l.add(A.center), l }; var yp = function (A) { this.name = A, this._mousePressed = !1 }; yp.prototype.getName = function () { return this.name }, yp.prototype.onExit = function () {}, yp.prototype.destroy = function () {}, yp.prototype.processMouseDown = function (A) { return !1 }, yp.prototype.processMouseMove = function (A) { return !1 }, yp.prototype.processMouseUp = function (A) { return !1 }, yp.prototype.processMouseWheel = function (A) { return !1 }, yp.prototype.processMouseDoubleClick = function (A) { return !1 }, yp.prototype.processKeyDown = function (A) { return !1 }, yp.prototype.processKeyUp = function (A) { switch (A.keyCode) { case qh: this._mousePressed = !1 } return !1 }, yp.prototype.processTouchstart = function (A) { return !1 }, yp.prototype.processTouchmove = function (A) { return !1 }, yp.prototype.processTouchend = function (A) { return !1 }, yp.prototype.processHover = function (A) { return !1 }, yp.prototype.onEvent = function (A) { var e = !1; switch (A.type) { case "touchmove": e = this.processTouchmove(A); break; case "touchstart": e = this.processTouchstart(A); break; case "touchend": e = this.processTouchend(A); break; case "keydown": e = this.processKeyDown(A); break; case "keyup": e = this.processKeyUp(A); break; case "mousewheel": case "DOMMouseScroll": e = this.processMouseWheel(A); break; case "mousedown": this._mousePressed = !0, e = this.processMouseDown(A); break; case "mousemove": e = this._mousePressed ? this.processMouseMove(A) : this.processHover(A); break; case "mouseup": this._mousePressed = !1, e = this.processMouseUp(A); break; case "dblclick": e = this.processMouseDoubleClick(A) } return e }; var vp = function (A) { yp.call(this, Pc.CLIP_BY_BOX), this.viewer = A, this.scene = A.getScene(), this.enablePick = !1, this.cameraControl = A.cameraControl, this.clipStartPoint = new y, this.startPt = new s, this.onClipBox = !1, this.mapLockedBoxFaces = {}, this.mapBoxFaceIndex = { 0: "right", 1: "left", 2: "top", 3: "bottom", 4: "front", 5: "back" }; for (var e = [], t = 0; 6 > t; t += 1) e.push(new EA); var i = this.scene.getClipPlanes(!0); i.updateClippingParams = function (t) { if (0 === t.iClipPlane.value) A.getRenderer().clippingPlanes = Object.freeze([]); else { for (var i = 0, o = t.iClipPlane.value; o > i; i += 1) { var n = t.vClipPlane.value[i], r = e[i]; r.setComponents(-n.x, -n.y, -n.z, -n.w), r.normalize() } A.getRenderer().clippingPlanes = e, this.calculateClipBoundingBox(e) } }, i.init(), this.selectIndex = null, this.planeDistance = 0, this.offsetSpeed = .02, this.toggle = function (A, e) { i.enable(A, e) }, this.visible = function (A) { i.visible = A }, this.rotatable = function (A) { i.rotatable = A }, this.store = function () { return i.store() }, this.restore = function (A) { i.restore(A) }, this.reset = function () { i.reset() }, this.pointToScreen = function (A) { var e = this.cameraControl.camera, t = new M; t.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse); var i = new p(A.x, A.y, A.z, 1); i.applyMatrix4(t); var o = new s; o.x = (i.x / i.w + 1) / 2, o.y = 1 - (i.y / i.w + 1) / 2; var n = this.cameraControl.getContainerDimensions(); return o.x = o.x * n.width + n.left, o.y = o.y * n.height + n.top, o }, this.getPlaneDistanceInScreen = function () { if (null === this.selectIndex) return null; if (2 > this.selectIndex) { var A = i.center.clone(), e = i.center.clone(); A.x -= i.cubeSize.x, e.x += i.cubeSize.x; var t = this.pointToScreen(A), o = this.pointToScreen(e); return t.x - o.x } var n = i.center.clone(), r = i.center.clone(); r.y -= i.cubeSize.y, n.y += i.cubeSize.y; var a = this.pointToScreen(r), s = this.pointToScreen(n); return a.y - s.y }, this.getPickPoint = function (A, e) { var t = this.cameraControl.camera, i = this.cameraControl.getContainerDimensions(), o = (A - i.left) / i.width * 2 - 1, n = (i.height - (e - i.top)) / i.height * 2 - 1, r = new Dd; return r.setFromCamera(new s(o, n), t), r.ray.intersectPlane(this.plane) }, this.getSelectIndex = function () { return i.selectIndex }, this._isVisible = function () { return i.visible }, this.isRotate = function () { return i.rotatable }, this.offset = function (A) { var e = Math.floor(this.selectIndex / 2); i.offset(this.selectIndex, this.selectIndex > 3 ? this.selectIndex % 2 == 1 ? -A * i.cubeSize.getComponent(e) * 2 : A * i.cubeSize.getComponent(e) * 2 : -A * i.cubeSize.getComponent(e) * 2) }, this.setSectionBox = function (A, e) { var t = new aA(new y(A.x, A.y, A.z), new y(e.x, e.y, e.z)); t.applyMatrix4(this.scene.getMatrixGlobal()), i.setSectionBox(t.min, t.max) }, this.calculateOffsetByBox = function (A, e) { var t = new aA(new y(A.x, A.y, A.z), new y(e.x, e.y, e.z)); t.applyMatrix4(this.scene.getMatrixGlobal()), t.setFromCenterAndSize(t.getCenter(), t.getSize().multiplyScalar(this.scene.getExpandScalar())), i.calculateOffsetByBox(t.min, t.max) }, this.moveSectionPlane = function (A, e) { i.moveSectionPlane(A, e) }, this.rotateSectionBox = function (A, e) { i.rotateSectionBox(A, e) }, this.rotate = function (A, e) { 2 === this.selectIndex || 3 === this.selectIndex ? i.rotX(e / 180 * Math.PI * .1) : i.rotY(A / 180 * Math.PI * .1) }, this.update = function (A) { i.update(A) }, this.cancelHighLight = function () { i.cancelHighLight() }, this.highLight = function () { i.highLight() }, this.lockBoxFaces = function (A) { var e = !0; try { for (var t, i = A[Symbol.iterator](); !(e = (t = i.next()).done); e = !0) { this.mapLockedBoxFaces[t.value] = !0 } } catch (A) {} finally { try { !e && i.return && i.return() } catch (A) {} } }, this.unlockBox = function () { this.mapLockedBoxFaces = {} }, this.setProcess = function (A, e) { this.mapLockedBoxFaces[A] || i.setProcess(A, e) }, this.getProcess = function (A) { return i.getProcess(A) } }; (vp.prototype = Object.create(yp.prototype)).constructor = vp, vp.prototype.destroy = function () { this.cameraControl = null, this.intersectPoint = null, this.selectIndex = null, this.normal = null, this.plane = null, this.pickHelper = null, this.scene = null, this.viewer = null }, vp.prototype.onExit = function () { this.toggle(!1, !1) }, vp.prototype.processMouseDown = function (A) { if (this.startPt.set(A.clientX, A.clientY), !this.enablePick && A.button === t.LEFT) { var e = this.cameraControl.getRaycaster(A.clientX, A.clientY), i = this.scene.getClipPlanes().hitTest(e), o = this.cameraControl.getIntersectContext(new s(A.clientX, A.clientY)), n = this.cameraControl.intersector.intersect(o, null, !0); if (null !== n && i.distance >= n.distance) return yp.prototype.processMouseDown(this, A); if (this.selectIndex = this.getSelectIndex(), this.planeDistance = this.getPlaneDistanceInScreen(), null !== this.selectIndex) return this.highLight(), this.cameraControl.needUpdateRenderList(!0), this.cameraControl.update(!0), this.enablePick = !0, this.clipStartPoint = e.ray.at(i.distance, this.clipStartPoint), !0 } return yp.prototype.processMouseDown(this, A) }, vp.prototype.processHover = function (A) { if (!this.enablePick) { var e = !1, t = this.cameraControl.getRaycaster(A.clientX, A.clientY), i = this.scene.getClipPlanes(), o = this.getSelectIndex(); null !== o && this.cancelHighLight(); i.hitTest(t); if (this.selectIndex = this.getSelectIndex(), null !== this.selectIndex) { if (this.highLight(), !this.onClipBox) this.onClipBox = !0, this.cameraControl.viewer.modelManager.dispatchEvent({ type: Rc.ON_CLIP_HOVER, onClipBox: !0, event: A }); e = !0 } else if (this.onClipBox) { this.onClipBox = !1, this.cameraControl.viewer.modelManager.dispatchEvent({ type: Rc.ON_CLIP_HOVER, onClipBox: !1, event: A }) } return this.selectIndex !== o && (this.cameraControl.needUpdateRenderList(!0), this.cameraControl.update(!0)), e } return yp.prototype.processHover(this, A) }, vp.prototype.processMouseUp = function (A) { if (A.button === t.LEFT) { var e = this.cameraControl.getRaycaster(A.clientX, A.clientY), i = this.scene.getClipPlanes(); null !== this.getSelectIndex() && (this.cancelHighLight(), this.cameraControl.needUpdateRenderList(!0), this.cameraControl.update(!0)); i.hitTest(e); if (this.selectIndex = this.getSelectIndex(), vc.ClippingCaps = !0, null !== this.selectIndex) { if (this.highLight(), this.cameraControl.needUpdateRenderList(!0), this.cameraControl.update(!0), !this.onClipBox) this.onClipBox = !0, this.cameraControl.viewer.modelManager.dispatchEvent({ type: Rc.ON_CLIP_HOVER, onClipBox: !0, event: A }) } else if (this.onClipBox) { this.onClipBox = !1, this.cameraControl.viewer.modelManager.dispatchEvent({ type: Rc.ON_CLIP_HOVER, onClipBox: !1, event: A }) } if (this.enablePick) return this.planeDistance = 0, this.enablePick = !1, !0 } return yp.prototype.processMouseUp(this, A) }, vp.prototype.processMouseMove = function (A) { if (this.enablePick) { if (this.isRotate()) this.rotate(A.clientX - this.startPt.x, A.clientY - this.startPt.y), this.startPt.set(A.clientX, A.clientY); else { var e = this.mapBoxFaceIndex[this.selectIndex]; if (this.mapLockedBoxFaces[e]) return !0; if (!(A.clientX === this.startPt.x && A.clientY === this.startPt.y)) { vc.ClippingCaps = !1; var t = this.scene.getClipPlanes(), i = this.cameraControl.movePlane(t.clipplanes[this.selectIndex], A, this.startPt, !0, this.clipStartPoint); null !== i && t.offset(this.selectIndex, i), this.startPt.set(A.clientX, A.clientY) } this.cameraControl.viewer.modelManager.dispatchEvent({ type: Rc.ON_CLIP_MOUSE_MOVE, draggedFaceName: e }) } return this.cameraControl.update(!0), !0 } return yp.prototype.processMouseMove(this, A) }, vp.prototype.processTouchstart = function (A) { if (this.startPt.set(A.touches[0].clientX, A.touches[0].clientY), this.enablePick) return yp.prototype.processTouchstart(this, A); var e = this.cameraControl.getRaycaster(A.touches[0].clientX, A.touches[0].clientY); return this.scene.getClipPlanes().hitTest(e), this.selectIndex = this.getSelectIndex(), this.planeDistance = this.getPlaneDistanceInScreen(), null !== this.selectIndex ? (this.highLight(), this.cameraControl.needUpdateRenderList(!0), this.cameraControl.update(!0), this.update(), !0) : void 0 }, vp.prototype.processTouchmove = function (A) { if (null !== this.selectIndex) { if (this.isRotate()) this.rotate(A.touches[0].clientX - this.startPt.x, A.touches[0].clientY - this.startPt.y), this.startPt.set(A.touches[0].clientX, A.touches[0].clientY); else { this.offset((2 > this.selectIndex ? A.touches[0].clientX - this.startPt.x : A.touches[0].clientY - this.startPt.y) / this.planeDistance), this.startPt.set(A.touches[0].clientX, A.touches[0].clientY) } return this.cameraControl.update(!0), this.update(), !0 } return yp.prototype.processTouchmove(this, A) }, vp.prototype.processTouchend = function (A) { return this.selectIndex = null, this.planeDistance = 0, this.enablePick && (this.onUpdateUI({ visible: !1 }), this.startPt.x === A.touches[0].clientX && this.startPt.y === A.touches[0].clientY && this.pickHelper.click(A)), this.cameraControl.needUpdateRenderList(!0), this.cancelHighLight(), this.cameraControl.update(!0), this.update(), yp.prototype.processTouchend(this, A) }; var Ip = function (A, e, t) { yp.call(this, Pc.COMPONENT_TRANSFORM), this._callbackWrapper = void 0, this._objectCallbackWrapper = void 0, this._cancelCallback = void 0, this.transformControl = new Ep(A, e, t), this.bindingComponentKey = void 0 }; (Ip.prototype = Object.create(yp.prototype)).constructor = Ip, Ip.prototype.destroy = function () { this.transformControl.destory() }, Ip.prototype.update = function () { this.transformControl.updateMatrixWorld() }, Ip.prototype.transformComponent = function (A, e, t, i, o) { if (A) { var n = this.transformControl; n.object && A !== n.object && this.cancelTransformComponent(!1), this._callbackWrapper && (this.transformControl.removeEventListener("change", this._callbackWrapper), this._callbackWrapper = void 0), this._objectCallbackWrapper && (this.transformControl.removeEventListener("objectChange", this._objectCallbackWrapper), this._objectCallbackWrapper = void 0), this._cancelCallback && (this._cancelCallback = void 0), this._pauseCallbackWrapper && (this.transformControl.removeEventListener("mouseUp", this._pauseCallbackWrapper), this._pauseCallbackWrapper = void 0), e && (this._callbackWrapper = function (A) { e(A) }, this.transformControl.addEventListener("change", this._callbackWrapper)), t && (this._objectCallbackWrapper = function (A) { t(A) }, this.transformControl.addEventListener("objectChange", this._objectCallbackWrapper)), i && (this._cancelCallback = i), o && (this._pauseCallbackWrapper = function (A) { o(A) }, this.transformControl.addEventListener("mouseUp", this._pauseCallbackWrapper)), this._saveComponentOriginalTransformState(A), !0 !== n.showX && (n.showX = !0), !0 !== n.showY && (n.showY = !0), !0 !== n.showZ && (n.showZ = !0), !0 !== n.enabled && (n.enabled = !0), n.attach(A) } }, Ip.prototype.cancelTransformComponent = function () { var A = this.transformControl.object; if (A) return this.transformControl.detach(), this._callbackWrapper && (this.transformControl.removeEventListener("change", this._callbackWrapper), this._callbackWrapper = void 0), this._objectCallbackWrapper && (this.transformControl.removeEventListener("objectChange", this._objectCallbackWrapper), this._objectCallbackWrapper = void 0), this._cancelCallback && (this._cancelCallback(), this._cancelCallback = void 0), this.bindingComponentKey = void 0, A }, Ip.prototype.switchToTranslateMode = function () { this.transformControl.setMode("translate") }, Ip.prototype.switchToRotateMode = function () { this.transformControl.setMode("rotate") }, Ip.prototype.switchToScaleMode = function () { this.transformControl.setMode("scale") }, Ip.prototype._saveComponentOriginalTransformState = function (A) { var e; if (A instanceof Array) e = A; else { if (!(A instanceof H)) return; e = [A] } for (var t = 0, i = e.length; i > t; t += 1) { var o = e[t]; if (!o.userData._originalTransformState) { var n = o.position.clone(), r = o.quaternion.clone(), a = o.scale.clone(), s = o.matrix.clone(), l = o.matrixWorld.clone(); o.userData._originalTransformState = { position: n, quaternion: r, scale: a, matrix: s, matrixWorld: l } } } }, Ip.prototype.restoreComponentOriginalTransformState = function () { if (!this.transformControl.object) return !1; var A, e = this.transformControl.object; if (e instanceof Array) A = e; else { if (!(e instanceof H)) return !1; A = [e] } for (var t = !1, i = 0, o = A.length; o > i; i += 1) { var n = A[i], r = n.userData._originalTransformState; r && (n.position.copy(r.position), n.quaternion.copy(r.quaternion), n.scale.copy(r.scale), n.matrix.copy(r.matrix), n.matrixWorld.copy(r.matrixWorld), this.transformControl.updateMatrixWorld(), this.transformControl.dispatchEvent({ type: "objectChange" }), t = !0) } return t }, Ip.prototype.increaseTransformControlSize = function () { var A = this.transformControl; if (A.object && A.visible) { var e = A.size; if (3 > e) return A.setSize(e + .1), !0 } return !1 }, Ip.prototype.decreaseTransformControlSize = function () { var A = this.transformControl; if (A.object && A.visible) { var e = A.size; if (e > .5) return A.setSize(e - .1), !0 } return !1 }, Ip.prototype.setTransformSpaceToLocalSpace = function () { console.log("不再支持") }, Ip.prototype.setTransformSpaceToWorldSpace = function () { console.log("不再支持") }, Ip.prototype.switchTransformSpace = function () { console.log("不再支持") }, Ip.prototype.showTransformOnAxis = function (A) { var e = this.transformControl; if (e.object && e.visible) { var t = !1; switch (A) { case "x": case "X": !0 !== e.showX && (t = !0, e.showX = !0); break; case "y": case "Y": !0 !== e.showY && (t = !0, e.showY = !0); break; case "z": case "Z": !0 !== e.showZ && (t = !0, e.showZ = !0) } return t } return !1 }, Ip.prototype.hideTransformOnAxis = function (A) { var e = this.transformControl; if (e.object && e.visible) { var t = !1; switch (A) { case "x": case "X": !1 !== e.showX && (t = !0, e.showX = !1); break; case "y": case "Y": !1 !== e.showY && (t = !0, e.showY = !1); break; case "z": case "Z": !1 !== e.showZ && (t = !0, e.showZ = !1) } return t } return !1 }, Ip.prototype.disableTransform = function () { var A = this.transformControl; return !(!A.object || !A.visible || !1 === A.enabled) && (A.enabled = !1, !0) }, Ip.prototype.enableTransform = function () { var A = this.transformControl; return !(!A.object || !A.visible || !0 === A.enabled) && (A.enabled = !0, !0) }, Ip.prototype.processMouseDown = function (A) { return !!this.transformControl.enabled && (!!this.transformControl.mouseHover(A) && this.transformControl.mouseDown(A)) }, Ip.prototype.processMouseMove = function (A) { return !!this.transformControl.enabled && this.transformControl.mouseMove(A) }, Ip.prototype.processMouseUp = function (A) { return !!this.transformControl.enabled && this.transformControl.mouseUp(A) }, Ip.prototype.processHover = function (A) { return !!this.transformControl.enabled && this.transformControl.mouseHover(A) }, Ip.onExit = function () { this.destroy() }; var Ep = function (A, e, t) { H.call(this), t = void 0 !== t ? t : document, this.scene = A, this.visible = !1; var i = new Bp; this.add(i); var o = new xp; this.add(o); var n = this; N("camera", e), N("object", void 0), N("enabled", !0), N("axis", null), N("mode", "translate"), N("translationSnap", null), N("rotationSnap", null), N("space", "world"), N("size", 1), N("dragging", !1), N("showX", !0), N("showY", !0), N("showZ", !0); var r = { type: "change" }, a = { type: "mouseDown" }, s = { type: "mouseUp", mode: n.mode }, l = { type: "objectChange" }, c = new Dd, h = new y, d = new y, p = new f, g = { X: new y(1, 0, 0), Y: new y(0, 1, 0), Z: new y(0, 0, 1) }, u = new y, m = new y, C = new y, v = new y, I = new y, E = new y, B = 0, x = new y, S = new f, w = new y, b = new y, U = new f, F = new f, K = new y(1, 1, 1), Q = new y, R = new y, T = new f, k = new f, D = new y, L = new y; function N(A, e) { var t = e; Object.defineProperty(n, A, { get: function () { return void 0 !== t ? t : e }, set: function (e) { t !== e && (t = e, o[A] = e, i[A] = e, n.dispatchEvent({ type: A + "-changed", value: e }), n.dispatchEvent(r)) } }), n[A] = e, o[A] = e, i[A] = e } function O(A) { var e = A.changedTouches ? A.changedTouches[0] : A, i = t.getBoundingClientRect(); return { x: (e.clientX - i.left) / i.width * 2 - 1, y: -(e.clientY - i.top) / i.height * 2 + 1, button: A.button } } N("worldPosition", R), N("worldPositionStart", Q), N("worldQuaternion", T), N("cameraPosition", x), N("cameraQuaternion", S), N("pointStart", u), N("pointEnd", m), N("rotationAxis", v), N("rotationAngle", B), N("eye", L), this.attach = function (e) { e && (this.object !== e && (this.scene.add(this), A.componentTransformControl = this, this.object = e, r.object = e, l.object = e, this.updateMatrixWorld()), this.visible = !0) }, this.detach = function () { this.object && (this.object = void 0, r.object = void 0), this.parent && this.parent.remove(this), this.scene.componentTransformControl = void 0 }, this.destory = function () { this.scene.componentTransformControl = void 0, this.scene = void 0, this.axis = void 0, this.camera = void 0 }, this.updateMatrixWorld = function () { if (void 0 !== this.object) { var A, e = new aA; if (this.object instanceof Array) A = this.object; else { if (!(this.object instanceof H)) return; A = [this.object] } for (var t = 0, i = A.length; i > t; t += 1) { var o = A[t]; if (o.geometry) e.expandByObject(A[t]); else { var n = new y; o.getWorldPosition(n), e.expandByPoint(n) } } A[0].parent && A[0].parent.matrixWorld.decompose(b, U, K), A[0].matrixWorld.decompose(R, T, D), e.getCenter(R), F.copy(U).inverse(), k.copy(T).inverse() } this.camera.updateMatrixWorld(), this.camera.matrixWorld.decompose(x, S, w), this.camera instanceof je ? L.copy(x).sub(R).normalize() : this.camera instanceof Ka ? L.copy(x).normalize() : this.camera instanceof kd && (this.camera.isPerspective ? L.copy(x).sub(R).normalize() : L.copy(x).normalize()), H.prototype.updateMatrixWorld.call(this) }, this.mouseHover = function (A) { var e = O(A); if (void 0 === this.object || !0 === this.dragging || void 0 !== e.button && 0 !== e.button) return !1; c.setFromCamera(e, this.camera); var t, o = c.intersectObjects(i.picker[this.mode].children, !0) || !1; return o ? (this.axis = o.object.name, t = !0) : (this.axis = null, t = !1), this.updateMatrixWorld(), t }, this.mouseDown = function (A) { var e = O(A); if (void 0 === this.object || !0 === this.dragging || void 0 !== e.button && 0 !== e.button) return !1; if ((0 === e.button || void 0 === e.button) && null !== this.axis) { c.setFromCamera(e, this.camera); var t = c.intersectObjects([o], !0) || !1; return !1 !== t && (t && (Q.copy(R), u.copy(t.point).sub(Q)), this.dragging = !0, a.mode = this.mode, this.dispatchEvent(a), !0) } }, this.mouseMove = function (A) { var e = O(A), t = this.axis, i = this.mode, n = void 0; if (void 0 === this.object || null === t || !1 === this.dragging || void 0 !== e.button && 0 !== e.button) return !1; c.setFromCamera(e, this.camera); var a = c.intersectObjects([o], !0) || !1; if (!1 === a) return !1; if (m.copy(a.point).sub(Q), "translate" === i) C.copy(m).sub(u), -1 === t.indexOf("X") && (C.x = 0), -1 === t.indexOf("Y") && (C.y = 0), -1 === t.indexOf("Z") && (C.z = 0), C.applyQuaternion(F).divide(K), 0 === C.x && 0 === C.y && 0 === C.z || (n = this._translateCurrentObject(C)); else if ("scale" === i) { if (-1 !== t.search("XYZ")) { var s = m.length() / u.length(); 0 > m.dot(u) && (s *= -1), d.set(s, s, s) } else h.copy(u), d.copy(m), h.applyQuaternion(k), d.applyQuaternion(k), d.divide(h), -1 === t.search("X") && (d.x = 1), -1 === t.search("Y") && (d.y = 1), -1 === t.search("Z") && (d.z = 1); 1 === d.x && 1 === d.y && 1 === d.z || (n = this._scaleCurrentObject(d)) } else if ("rotate" === i) { C.copy(m).sub(u); var y = 20 / R.distanceTo(h.setFromMatrixPosition(this.camera.matrixWorld)); if ("E" === t ? (v.copy(L), B = m.angleTo(u), I.copy(u).normalize(), E.copy(m).normalize(), B *= 0 > E.cross(I).dot(L) ? 1 : -1) : "XYZE" === t ? (v.copy(C).cross(L).normalize(), B = C.dot(h.copy(v).cross(this.eye)) * y) : "X" !== t && "Y" !== t && "Z" !== t || (v.copy(g[t]), h.copy(g[t]), B = C.dot(h.cross(L).normalize()) * y), this.rotationAngle = B, 0 !== B) { var x = new f; v.applyQuaternion(F), x.copy(p.setFromAxisAngle(v, B)), x.normalize(), n = this._rotateCurrentObject(x) } } return n ? (this.updateMatrixWorld(), this.dispatchEvent(r), l.matrix = n.clone(), this.dispatchEvent(l), u.copy(m), !0) : void 0 }, this.mouseUp = function (A) { var e = O(A); return (void 0 === e.button || 0 === e.button) && (this.dragging && null !== this.axis && (s.mode = this.mode, this.dispatchEvent(s)), this.dragging = !1, void 0 === e.button && (this.axis = null), !0) }, this.getMode = function () { return n.mode }, this.setMode = function (A) { n.mode = A, this.updateMatrixWorld() }, this.setTranslationSnap = function (A) { n.translationSnap = A }, this.setRotationSnap = function (A) { n.rotationSnap = A }, this.setSize = function (A) { n.size = A }, this.setSpace = function (A) { n.space = A }, this.getBoundingBox = function () { return i.getBoundingBox() }, this._scaleCurrentObject = function () { var A = new M, e = new M, t = new M, i = new M, o = new y; return function (n) { var r; if (this.object instanceof Array) r = this.object; else { if (!(this.object instanceof H)) return; r = [this.object] } for (var a = 0, s = r.length; s > a; a += 1) { var l = r[a]; l.geometry ? (l.geometry.boundingBox || l.geometry.computeBoundingBox(), l.geometry.boundingBox.getCenter(o), o.applyMatrix4(l.matrix)) : o.copy(l.position), e.makeTranslation(-o.x, -o.y, -o.z), t.makeScale(n.x, n.y, n.z), i.makeTranslation(o.x, o.y, o.z), A.identity(), A.multiply(i), A.multiply(t), A.multiply(e); var c = l.matrixAutoUpdate; l.matrixAutoUpdate = !1, l.applyMatrix4(A), l.updateMatrixWorld(!0), l.matrixAutoUpdate = c } return A } }(), this._rotateCurrentObject = function () { var A = new M, e = new M, t = new M, i = new M, o = new y; return function (n) { var r; if (this.object instanceof Array) r = this.object; else { if (!(this.object instanceof H)) return; r = [this.object] } for (var a = 0, s = r.length; s > a; a += 1) { var l = r[a]; l.geometry ? (l.geometry.boundingBox || l.geometry.computeBoundingBox(), l.geometry.boundingBox.getCenter(o), o.applyMatrix4(l.matrix)) : o.copy(l.position), A.makeTranslation(-o.x, -o.y, -o.z), e.makeRotationFromQuaternion(n), t.makeTranslation(o.x, o.y, o.z), i.identity(), i.multiply(t), i.multiply(e), i.multiply(A); var c = l.matrixAutoUpdate; l.matrixAutoUpdate = !1, l.applyMatrix4(i), l.matrixAutoUpdate = c, l.updateMatrixWorld(!0) } return i } }(), this._translateCurrentObject = function () { var A = new M; return function (e) { var t; if (this.object instanceof Array) t = this.object; else { if (!(this.object instanceof H)) return; t = [this.object] } A.makeTranslation(e.x, e.y, e.z); for (var i = 0, o = t.length; o > i; i += 1) { var n = t[i], r = n.matrixAutoUpdate; n.matrixAutoUpdate = !1, n.applyMatrix4(A), n.matrixAutoUpdate = r, n.updateMatrixWorld(!0) } return A } }() }; Ep.prototype = Object.assign(Object.create(H.prototype), { constructor: Ep, isTransformControls: !0 }); var Bp = function () { H.call(this), this.type = "TransformControlsGizmo"; var A = new jA({ depthTest: !1, depthWrite: !1, transparent: !0, side: 2, fog: !1 }), e = new ko({ depthTest: !1, depthWrite: !1, transparent: !0, linewidth: 1, fog: !1 }), t = A.clone(); t.opacity = .15; var i = A.clone(); i.opacity = .33; var o = A.clone(); o.color.set(16711680); var n = A.clone(); n.color.set(65280); var r = A.clone(); r.color.set(255); var a = A.clone(); a.opacity = .25; var s = a.clone(); s.color.set(16776960); var l = a.clone(); l.color.set(65535); var c = a.clone(); c.color.set(16711935), A.clone().color.set(16776960); var h = e.clone(); h.color.set(16711680); var d = e.clone(); d.color.set(65280); var p = e.clone(); p.color.set(255); var g = e.clone(); g.color.set(65535); var u = e.clone(); u.color.set(16711935); var m = e.clone(); m.color.set(16776960); var C = e.clone(); C.color.set(7895160); var v = m.clone(); v.opacity = .25; var I = new hr(0, .05, .2, 12, 1, !1), E = new Ne(.125, .125, .125), B = new he; B.setAttribute("position", new Ae([0, 0, 0, 1, 0, 0], 3)); var x, S = function (A, e) { for (var t = new he, i = [], o = 0; 64 * e >= o; ++o) i.push(0, Math.cos(o / 32 * Math.PI) * A, Math.sin(o / 32 * Math.PI) * A); return t.setAttribute("position", new Ae(i, 3)), t }, w = { X: [ [new Ue(I, o), [1, 0, 0], [0, 0, -Math.PI / 2], null, "fwd" ], [new Ue(I, o), [1, 0, 0], [0, 0, Math.PI / 2], null, "bwd" ], [new Go(B, h)] ], Y: [ [new Ue(I, n), [0, 1, 0], null, null, "fwd"], [new Ue(I, n), [0, 1, 0], [Math.PI, 0, 0], null, "bwd" ], [new Go(B, d), null, [0, 0, Math.PI / 2]] ], Z: [ [new Ue(I, r), [0, 0, 1], [Math.PI / 2, 0, 0], null, "fwd" ], [new Ue(I, r), [0, 0, 1], [-Math.PI / 2, 0, 0], null, "bwd" ], [new Go(B, p), null, [0, -Math.PI / 2, 0]] ], XYZ: [ [new Ue(new dn(.1, 0), a), [0, 0, 0], [0, 0, 0] ] ], XY: [ [new Ue(new et(.295, .295), s), [.15, .15, 0]], [new Go(B, m), [.18, .3, 0], null, [.125, 1, 1]], [new Go(B, m), [.3, .18, 0], [0, 0, Math.PI / 2], [.125, 1, 1] ] ], YZ: [ [new Ue(new et(.295, .295), l), [0, .15, .15], [0, Math.PI / 2, 0] ], [new Go(B, g), [0, .18, .3], [0, 0, Math.PI / 2], [.125, 1, 1] ], [new Go(B, g), [0, .3, .18], [0, -Math.PI / 2, 0], [.125, 1, 1] ] ], XZ: [ [new Ue(new et(.295, .295), c), [.15, 0, .15], [-Math.PI / 2, 0, 0] ], [new Go(B, u), [.18, 0, .3], null, [.125, 1, 1]], [new Go(B, u), [.3, 0, .18], [0, -Math.PI / 2, 0], [.125, 1, 1] ] ] }, b = { X: [ [new Ue(new hr(.2, 0, 1, 4, 1, !1), t), [.6, 0, 0], [0, 0, -Math.PI / 2] ] ], Y: [ [new Ue(new hr(.2, 0, 1, 4, 1, !1), t), [0, .6, 0]] ], Z: [ [new Ue(new hr(.2, 0, 1, 4, 1, !1), t), [0, 0, .6], [Math.PI / 2, 0, 0] ] ], XYZ: [ [new Ue(new dn(.2, 0), t)] ], XY: [ [new Ue(new et(.4, .4), t), [.2, .2, 0]] ], YZ: [ [new Ue(new et(.4, .4), t), [0, .2, .2], [0, Math.PI / 2, 0] ] ], XZ: [ [new Ue(new et(.4, .4), t), [.2, 0, .2], [-Math.PI / 2, 0, 0] ] ] }, U = { START: [ [new Ue(new dn(.01, 2), i), null, null, null, "helper"] ], END: [ [new Ue(new dn(.01, 2), i), null, null, null, "helper"] ], DELTA: [ [new Go((x = new he, x.setAttribute("position", new Ae([0, 0, 0, 1, 1, 1], 3)), x), i), null, null, null, "helper"] ], X: [ [new Go(B, i.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"] ], Y: [ [new Go(B, i.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], "helper" ] ], Z: [ [new Go(B, i.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], "helper" ] ] }, K = { X: [ [new Go(S(1, .5), h)], [new Ue(new dn(.04, 0), o), [0, 0, .99], null, [1, 3, 1]] ], Y: [ [new Go(S(1, .5), d), null, [0, 0, -Math.PI / 2]], [new Ue(new dn(.04, 0), n), [0, 0, .99], null, [3, 1, 1]] ], Z: [ [new Go(S(1, .5), p), null, [0, Math.PI / 2, 0]], [new Ue(new dn(.04, 0), r), [.99, 0, 0], null, [1, 3, 1]] ], E: [ [new Go(S(1.25, 1), v), null, [0, Math.PI / 2, 0]], [new Ue(new hr(.03, 0, .15, 4, 1, !1), v), [1.17, 0, 0], [0, 0, -Math.PI / 2], [1, 1, .001] ], [new Ue(new hr(.03, 0, .15, 4, 1, !1), v), [-1.17, 0, 0], [0, 0, Math.PI / 2], [1, 1, .001] ], [new Ue(new hr(.03, 0, .15, 4, 1, !1), v), [0, -1.17, 0], [Math.PI, 0, 0], [1, 1, .001] ], [new Ue(new hr(.03, 0, .15, 4, 1, !1), v), [0, 1.17, 0], [0, 0, 0], [1, 1, .001] ] ], XYZE: [ [new Go(S(1, 1), C), null, [0, Math.PI / 2, 0]] ] }, Q = { AXIS: [ [new Go(B, i.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"] ] }, R = { X: [ [new Ue(new En(1, .1, 4, 24), t), [0, 0, 0], [0, -Math.PI / 2, -Math.PI / 2] ] ], Y: [ [new Ue(new En(1, .1, 4, 24), t), [0, 0, 0], [Math.PI / 2, 0, 0] ] ], Z: [ [new Ue(new En(1, .1, 4, 24), t), [0, 0, 0], [0, 0, -Math.PI / 2] ] ], E: [ [new Ue(new En(1.25, .1, 2, 24), t)] ], XYZE: [ [new Ue(new er(.7, 10, 8), t)] ] }, T = { X: [ [new Ue(E, o), [.8, 0, 0], [0, 0, -Math.PI / 2] ], [new Go(B, h), null, null, [.8, 1, 1]] ], Y: [ [new Ue(E, n), [0, .8, 0]], [new Go(B, d), null, [0, 0, Math.PI / 2], [.8, 1, 1] ] ], Z: [ [new Ue(E, r), [0, 0, .8], [Math.PI / 2, 0, 0] ], [new Go(B, p), null, [0, -Math.PI / 2, 0], [.8, 1, 1] ] ], XY: [ [new Ue(E, s), [.85, .85, 0], null, [2, 2, .2]], [new Go(B, m), [.855, .98, 0], null, [.125, 1, 1]], [new Go(B, m), [.98, .855, 0], [0, 0, Math.PI / 2], [.125, 1, 1] ] ], YZ: [ [new Ue(E, l), [0, .85, .85], null, [.2, 2, 2]], [new Go(B, g), [0, .855, .98], [0, 0, Math.PI / 2], [.125, 1, 1] ], [new Go(B, g), [0, .98, .855], [0, -Math.PI / 2, 0], [.125, 1, 1] ] ], XZ: [ [new Ue(E, c), [.85, 0, .85], null, [2, .2, 2]], [new Go(B, u), [.855, 0, .98], null, [.125, 1, 1]], [new Go(B, u), [.98, 0, .855], [0, -Math.PI / 2, 0], [.125, 1, 1] ] ], XYZX: [ [new Ue(new Ne(.125, .125, .125), a), [1.1, 0, 0]] ], XYZY: [ [new Ue(new Ne(.125, .125, .125), a), [0, 1.1, 0]] ], XYZZ: [ [new Ue(new Ne(.125, .125, .125), a), [0, 0, 1.1]] ] }, k = { X: [ [new Ue(new hr(.2, 0, .8, 4, 1, !1), t), [.5, 0, 0], [0, 0, -Math.PI / 2] ] ], Y: [ [new Ue(new hr(.2, 0, .8, 4, 1, !1), t), [0, .5, 0]] ], Z: [ [new Ue(new hr(.2, 0, .8, 4, 1, !1), t), [0, 0, .5], [Math.PI / 2, 0, 0] ] ], XY: [ [new Ue(E, t), [.85, .85, 0], null, [3, 3, .2]] ], YZ: [ [new Ue(E, t), [0, .85, .85], null, [.2, 3, 3]] ], XZ: [ [new Ue(E, t), [.85, 0, .85], null, [3, .2, 3]] ], XYZX: [ [new Ue(new Ne(.2, .2, .2), t), [1.1, 0, 0]] ], XYZY: [ [new Ue(new Ne(.2, .2, .2), t), [0, 1.1, 0]] ], XYZZ: [ [new Ue(new Ne(.2, .2, .2), t), [0, 0, 1.1]] ] }, D = { X: [ [new Go(B, i.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"] ], Y: [ [new Go(B, i.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], "helper" ] ], Z: [ [new Go(B, i.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], "helper" ] ] }, L = function (A) { var e = new H; for (var t in A) for (var i = A[t].length; i--;) { var o = A[t][i][0].clone(), n = A[t][i][1], r = A[t][i][2], a = A[t][i][3], s = A[t][i][4]; o.name = t, o.tag = s, n && o.position.set(n[0], n[1], n[2]), r && o.rotation.set(r[0], r[1], r[2]), a && o.scale.set(a[0], a[1], a[2]), o.updateMatrix(); var l = o.geometry.clone(); l.applyMatrix4(o.matrix), o.geometry = l, o.renderOrder = 1 / 0, o.position.set(0, 0, 0), o.rotation.set(0, 0, 0), o.scale.set(1, 1, 1), e.add(o) } return e }, N = new F, O = new y(0, 1, 0), V = new y(0, 0, 0), G = new M, P = new f, q = new f, j = new f, Y = new y(1, 0, 0), W = new y(0, 1, 0), J = new y(0, 0, 1); this.gizmo = {}, this.picker = {}, this.helper = {}, this.add(this.gizmo.translate = L(w)), this.add(this.gizmo.rotate = L(K)), this.add(this.gizmo.scale = L(T)), this.add(this.picker.translate = L(b)), this.add(this.picker.rotate = L(R)), this.add(this.picker.scale = L(k)), this.add(this.helper.translate = L(U)), this.add(this.helper.rotate = L(Q)), this.add(this.helper.scale = L(D)), this.picker.translate.visible = !1, this.picker.rotate.visible = !1, this.picker.scale.visible = !1, this.updateMatrixWorld = function () { var A = this.space; "scale" === this.mode && (A = "local"); var e = "local" === A ? this.worldQuaternion : j; this.gizmo.translate.visible = "translate" === this.mode, this.gizmo.rotate.visible = "rotate" === this.mode, this.gizmo.scale.visible = "scale" === this.mode, this.helper.translate.visible = "translate" === this.mode, this.helper.rotate.visible = "rotate" === this.mode, this.helper.scale.visible = "scale" === this.mode; var t = []; t = (t = (t = t.concat(this.picker[this.mode].children)).concat(this.gizmo[this.mode].children)).concat(this.helper[this.mode].children); for (var i = this.boundingBox ? this.boundingBox.makeEmpty() : new aA, o = 0; t.length > o; o++) { var n = t[o]; n.visible = !0, n.rotation.set(0, 0, 0), n.position.copy(this.worldPosition); var r = this.worldPosition.distanceTo(this.cameraPosition); if (n.scale.set(1, 1, 1).multiplyScalar(r * this.size / 7), "helper" !== n.tag) { if (n.quaternion.copy(e), "translate" === this.mode || "scale" === this.mode) { "X" !== n.name && "XYZX" !== n.name || Math.abs(O.copy(Y).applyQuaternion(e).dot(this.eye)) > .99 && (n.scale.set(1e-10, 1e-10, 1e-10), n.visible = !1), "Y" !== n.name && "XYZY" !== n.name || Math.abs(O.copy(W).applyQuaternion(e).dot(this.eye)) > .99 && (n.scale.set(1e-10, 1e-10, 1e-10), n.visible = !1), "Z" !== n.name && "XYZZ" !== n.name || Math.abs(O.copy(J).applyQuaternion(e).dot(this.eye)) > .99 && (n.scale.set(1e-10, 1e-10, 1e-10), n.visible = !1), "XY" === n.name && .2 > Math.abs(O.copy(J).applyQuaternion(e).dot(this.eye)) && (n.scale.set(1e-10, 1e-10, 1e-10), n.visible = !1), "YZ" === n.name && .2 > Math.abs(O.copy(Y).applyQuaternion(e).dot(this.eye)) && (n.scale.set(1e-10, 1e-10, 1e-10), n.visible = !1), "XZ" === n.name && .2 > Math.abs(O.copy(W).applyQuaternion(e).dot(this.eye)) && (n.scale.set(1e-10, 1e-10, 1e-10), n.visible = !1), -1 !== n.name.search("X") && (0 > O.copy(Y).applyQuaternion(e).dot(this.eye) ? "fwd" === n.tag ? n.visible = !1 : n.scale.x *= -1 : "bwd" === n.tag && (n.visible = !1)), -1 !== n.name.search("Y") && (0 > O.copy(W).applyQuaternion(e).dot(this.eye) ? "fwd" === n.tag ? n.visible = !1 : n.scale.y *= -1 : "bwd" === n.tag && (n.visible = !1)), -1 !== n.name.search("Z") && (0 > O.copy(J).applyQuaternion(e).dot(this.eye) ? "fwd" === n.tag ? n.visible = !1 : n.scale.z *= -1 : "bwd" === n.tag && (n.visible = !1)) } else "rotate" === this.mode && (q.copy(e), O.copy(this.eye).applyQuaternion(P.copy(e).inverse()), -1 !== n.name.search("E") && n.quaternion.setFromRotationMatrix(G.lookAt(this.eye, V, W)), "X" === n.name && (P.setFromAxisAngle(Y, Math.atan2(-O.y, O.z)), P.multiplyQuaternions(q, P), n.quaternion.copy(P)), "Y" === n.name && (P.setFromAxisAngle(W, Math.atan2(O.x, O.z)), P.multiplyQuaternions(q, P), n.quaternion.copy(P)), "Z" === n.name && (P.setFromAxisAngle(J, Math.atan2(O.y, O.x)), P.multiplyQuaternions(q, P), n.quaternion.copy(P))); n.visible = n.visible && (-1 === n.name.indexOf("X") || this.showX), n.visible = n.visible && (-1 === n.name.indexOf("Y") || this.showY), n.visible = n.visible && (-1 === n.name.indexOf("Z") || this.showZ), n.visible = n.visible && (-1 === n.name.indexOf("E") || this.showX && this.showY && this.showZ), n.material._opacity = n.material._opacity || n.material.opacity, n.material._color = n.material._color || n.material.color.clone(), n.material.color.copy(n.material._color), n.material.opacity = n.material._opacity, this.enabled ? this.axis && (n.name === this.axis || this.axis.split("").some((function (A) { return n.name === A })) ? (n.material.opacity = 1, n.material.color.lerp(new LA(1, 1, 1), .5)) : (n.material.opacity *= .25, n.material.color.lerp(new LA(1, 1, 1), .5))) : (n.material.opacity *= .5, n.material.color.lerp(new LA(1, 1, 1), .5)), i.expandByObject(n) } else if (n.visible = !1, "AXIS" === n.name) n.position.copy(this.worldPositionStart), n.visible = !!this.axis, "X" === this.axis && (P.setFromEuler(N.set(0, 0, 0)), n.quaternion.copy(e).multiply(P), Math.abs(O.copy(Y).applyQuaternion(e).dot(this.eye)) > .9 && (n.visible = !1)), "Y" === this.axis && (P.setFromEuler(N.set(0, 0, Math.PI / 2)), n.quaternion.copy(e).multiply(P), Math.abs(O.copy(W).applyQuaternion(e).dot(this.eye)) > .9 && (n.visible = !1)), "Z" === this.axis && (P.setFromEuler(N.set(0, Math.PI / 2, 0)), n.quaternion.copy(e).multiply(P), Math.abs(O.copy(J).applyQuaternion(e).dot(this.eye)) > .9 && (n.visible = !1)), "XYZE" === this.axis && (P.setFromEuler(N.set(0, Math.PI / 2, 0)), O.copy(this.rotationAxis), n.quaternion.setFromRotationMatrix(G.lookAt(V, O, W)), n.quaternion.multiply(P), n.visible = this.dragging), "E" === this.axis && (n.visible = !1); else if ("START" === n.name) n.position.copy(this.worldPositionStart), n.visible = this.dragging; else if ("END" === n.name) n.position.copy(this.worldPosition), n.visible = this.dragging; else if ("DELTA" === n.name) { n.position.set(0, 0, 0), n.scale.set(1, 1, 1); var a = n.geometry.getAttribute("position"); a.setXYZ(0, this.worldPositionStart.x, this.worldPositionStart.y, this.worldPositionStart.z), a.setXYZ(1, this.worldPosition.x, this.worldPosition.y, this.worldPosition.z), a.needsUpdate = !0, n.visible = this.dragging } else n.quaternion.copy(e), n.position.copy(this.dragging ? this.worldPositionStart : this.worldPosition), this.axis && (n.visible = -1 !== this.axis.search(n.name)) } this.boundingBox = i, H.prototype.updateMatrixWorld.call(this) }, this.getBoundingBox = function () { return this.boundingBox || this.updateMatrixWorld(), this.boundingBox } }; Bp.prototype = Object.assign(Object.create(H.prototype), { constructor: Bp, isTransformControlsGizmo: !0 }); var xp = function () { Ue.call(this, new et(4, 4, 2, 2), new jA({ visible: !1, wireframe: !0, side: 2, transparent: !0, opacity: .1 })), this.type = "TransformControlsPlane"; var A = new y(1, 0, 0), e = new y(0, 1, 0), t = new y(0, 0, 1), i = new y, o = new y, n = new y, r = new M, a = new f; this.updateMatrixWorld = function () { var s = this.space; switch (this.position.copy(this.worldPosition), "scale" === this.mode && (s = "local"), A.set(1, 0, 0).applyQuaternion("local" === s ? this.worldQuaternion : a), e.set(0, 1, 0).applyQuaternion("local" === s ? this.worldQuaternion : a), t.set(0, 0, 1).applyQuaternion("local" === s ? this.worldQuaternion : a), n.copy(e), this.mode) { case "translate": case "scale": switch (this.axis) { case "X": n.copy(this.eye).cross(A), o.copy(A).cross(n); break; case "Y": n.copy(this.eye).cross(e), o.copy(e).cross(n); break; case "Z": n.copy(this.eye).cross(t), o.copy(t).cross(n); break; case "XY": o.copy(t); break; case "YZ": o.copy(A); break; case "XZ": n.copy(t), o.copy(e); break; case "XYZ": case "E": o.set(0, 0, 0) } break; case "rotate": default: o.set(0, 0, 0) } 0 === o.length() ? this.quaternion.copy(this.cameraQuaternion) : (r.lookAt(i.set(0, 0, 0), o, n), this.quaternion.setFromRotationMatrix(r)); var l = this.worldPosition.distanceTo(this.cameraPosition); this.scale.set(1, 1, 1).multiplyScalar(l * this.size / 7), H.prototype.updateMatrixWorld.call(this) } }; xp.prototype = Object.assign(Object.create(Ue.prototype), { constructor: xp, isTransformControlsPlane: !0 }); var Sp = function (A) { yp.call(this, Pc.CLIP_FILL), this.viewer = A, this.scene = A.getScene(), this.enablePick = !1, this.rotX = !0, this.onClipPlane = !1, this.cameraControl = A.cameraControl, this.startPt = new s, this.endPt = new s, this.frustum = new Ze, this.modelManager = this.cameraControl.viewer.modelManager; var e = this.scene.getFillClipPlane(); e.updateClippingParams = function (e) { if (0 === e.iClipPlane.value) A.getRenderer().clippingPlanes = Object.freeze([]); else { var t = [new EA], i = e.vClipPlane.value[0], o = t[0]; o.setComponents(-i.x, -i.y, -i.z, -i.w), o.normalize(), A.getRenderer().clippingPlanes = t, this.renderClipPlane = new EA, this.renderClipPlane.setComponents(i.x, i.y, i.z, -i.w), this.renderClipPlane.normalize(), this.calculateFillClipBoundingBox(o.coplanarPoint(new y)) } }, e.init(), this.planeDistance = 0, this.offsetSpeed = .02, this.toggle = function (A, t) { e.enable(A, t), e.update() }, this.visible = function (A) { e.visible = A, e.update() }, this.rotatable = function (A) { e.rotatable = A, e.update() }, this.hit = function () { return e.hit }, this.pointToScreen = function (A) { var e = this.cameraControl.camera, t = new M; t.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse); var i = new p(A.x, A.y, A.z, 1); i.applyMatrix4(t); var o = new s; o.x = (i.x / i.w + 1) / 2, o.y = 1 - (i.y / i.w + 1) / 2; var n = this.cameraControl.getContainerDimensions(); return o.x = o.x * n.width + n.left, o.y = o.y * n.height + n.top, o }, this.getPlaneDistanceInScreen = function () { if (null === this.selectIndex) return null; if (2 > this.selectIndex) { var A = e.clipPlanes.center.clone(), t = e.clipPlanes.center.clone(); A.x -= e.clipPlanes.cubeSize.x, t.x += e.clipPlanes.cubeSize.x; var i = this.pointToScreen(A), o = this.pointToScreen(t); return i.x - o.x } var n = e.clipPlanes.center.clone(), r = e.clipPlanes.center.clone(); r.y -= e.clipPlanes.cubeSize.y, n.y += e.clipPlanes.cubeSize.y; var a = this.pointToScreen(r), s = this.pointToScreen(n); return a.y - s.y }, this.getPickPoint = function (A, e) { var t = this.cameraControl.camera, i = this.cameraControl.getContainerDimensions(), o = (A - i.left) / i.width * 2 - 1, n = (i.height - (e - i.top)) / i.height * 2 - 1, r = new Dd; return r.setFromCamera(new s(o, n), t), r.ray.intersectPlane(this.plane) }, this._isVisible = function () { return e.visible }, this.isRotate = function () { return e.rotatable }, this.offset = function (A) { e.offset(A) }, this.setOffset = function (A) { e.setOffset(A) }, this.rotate = function (A, t) { this.rotX ? e.rotX(t / 180 * Math.PI * .1) : e.rotY(A / 180 * Math.PI * .1) }, this.rotateAngleOffset = function (A, t) { e.rotateAngleOffset(A, t) }, this.setRotateAngle = function (A, t) { e.setRotateAngle(A, t) }, this.getRotateAngle = function () { return e.getRotateAngle() }, this.changeNormal = function (A) { e.changeNormal(A) }, this.update = function (A) { e.update(A) }, this.cancelHighLight = function () { e.cancelHighLight() }, this.highLight = function () { e.highLight() }, this.store = function () { return e.store() }, this.restore = function (A) { e.restore(A) }, this.setProcess = function (A) { e.setProcess(A) }, this.getProcess = function () { return e.getProcess() } }; (Sp.prototype = Object.create(yp.prototype)).constructor = Sp, Sp.prototype.destroy = function () { this.cameraControl = null, this.normal = null, this.plane = null, this.pickHelper = null, this.scene = null, this.viewer = null }, Sp.prototype.onExit = function () { this.toggle(!1, !1) }, Sp.prototype.processMouseDown = function (A) { if (this.startPt.set(A.clientX, A.clientY), !this.enablePick && A.button === t.LEFT) { var e = this.cameraControl.getRaycaster(A.clientX, A.clientY); if (this.scene.getFillClipPlane().hitTest(e), this.hit()) return this.highLight(), this.cameraControl.needUpdateRenderList(!0), this.cameraControl.update(!0), !0 } return yp.prototype.processMouseDown(this, A) }, Sp.prototype.processMouseUp = function (A) { this.planeDistance = 0; var e = !1; if (this.enablePick && A.button === t.LEFT) if (this.startPt.x === A.clientX && this.startPt.y === A.clientY) this.pickHelper.click(A); else if (A.shiftKey || A.ctrlKey || A.altKey) { this.endPt.set(A.clientX, A.clientY); var i = Kc.Clear; A.ctrlKey ? i = Kc.Add : A.altKey && (i = Kc.Remove); var o = this; this.scene.pickByRect(this.frustum, i, (function () { o.pickHelper.notifySelectionChanged(null, 0, A) })), this.cameraControl.updateView(!0), e = !0 } var n = this.cameraControl.getRaycaster(A.clientX, A.clientY); return this.scene.getFillClipPlane().hitTest(n), this.hit() ? (this.highLight(), this.cameraControl.needUpdateRenderList(!0), this.cameraControl.update(!0), this.onClipPlane || (this.onClipPlane = !0, this.modelManager.dispatchEvent({ type: Rc.ON_CLIP_HOVER, onClipPlane: !0, event: A })), e = !0) : (this.cancelHighLight(), this.cameraControl.needUpdateRenderList(!0), this.cameraControl.update(!0), this.onClipPlane && (this.onClipPlane = !1, this.modelManager.dispatchEvent({ type: Rc.ON_CLIP_HOVER, onClipPlane: !1, event: A }))), e }, Sp.prototype.processMouseMove = function (A) { return this.modelManager.dispatchEvent({ type: Rc.ON_CLIP_MOUSE_MOVE, event: A }), yp.prototype.processMouseMove(this, A) }, Sp.prototype.processTouchstart = function (A) { if (this.startPt.set(A.touches[0].clientX, A.touches[0].clientY), !this.enablePick) { var e = this.cameraControl.getRaycaster(A.touches[0].clientX, A.touches[0].clientY); this.scene.getFillClipPlane().hitTest(e) } return this.hit() ? (this.highLight(), this.cameraControl.needUpdateRenderList(!0), this.cameraControl.update(!0), !0) : yp.prototype.processTouchstart(this, A) }, Sp.prototype.processTouchmove = function (A) { if (this.hit()) { if (this.isRotate()) this.rotate(A.touches[0].clientX - this.startPt.x, A.touches[0].clientY - this.startPt.y), this.startPt.set(A.touches[0].clientX, A.touches[0].clientY); else { this.offset(Number(A.touches[0].clientX - this.startPt.x)), this.startPt.set(A.touches[0].clientX, A.touches[0].clientY) } return this.cameraControl.update(!0), !0 } return yp.prototype.processTouchmove(this, A) }, Sp.prototype.processTouchend = function (A) { return this.enablePick && (this.onUpdateUI({ visible: !1 }), this.startPt.x === A.touches[0].clientX && this.startPt.y === A.touches[0].clientY && this.pickHelper.click(A)), this.cameraControl.needUpdateRenderList(!0), this.cancelHighLight(), this.cameraControl.update(!0), yp.prototype.processTouchmove(this, A) }, Sp.prototype.processHover = function (A) { if (!this.enablePick) { var e = !1, t = this.cameraControl.getRaycaster(A.clientX, A.clientY); return this.scene.getFillClipPlane().hitTest(t), this.hit() ? (this.onClipPlane || (this.highLight(), this.cameraControl.needUpdateRenderList(!0), this.cameraControl.update(!0), this.onClipPlane = !0, this.modelManager.dispatchEvent({ type: Rc.ON_CLIP_HOVER, onClipPlane: !0, event: A })), e = !0) : this.onClipPlane ? (this.cancelHighLight(), this.cameraControl.needUpdateRenderList(!0), this.cameraControl.update(!0), this.onClipPlane = !1, this.modelManager.dispatchEvent({ type: Rc.ON_CLIP_HOVER, onClipPlane: !1, event: A })) : this.modelManager.dispatchEvent({ type: Rc.ON_CLIP_HOVER, onClipPlane: !1, event: A }), e } return yp.prototype.processHover(this, A) }; var wp = function () { this.vertexIndex = new Array(2), this.faceIndex = new Array(2) }, Mp = function (A, e) { var t = A.length / 3, i = new Array(t), o = new Array(t); function n(A, e) { var t = i[A], o = i[e]; return t.x !== o.x ? t.x - o.x : t.y !== o.y ? t.y - o.y : t.z - o.z } for (var r = 0; t > r; r += 1) i[r] = new y(A[3 * r], A[3 * r + 1], A[3 * r + 2]), o[r] = r; o.sort((function (A, e) { var t = n(A, e); return 0 === t ? A - e : t })); var a = {}, s = o[0]; for (r = 1; t > r; r += 1) 0 === n(s, o[r]) ? a[o[r]] = s : s = o[r]; var l = new Array(e.length); for (r = 0; e.length > r; r += 1) l[r] = a.hasOwnProperty(e[r]) ? a[e[r]] : e[r]; return l }, bp = function (A, e) { function t(A, e) { return A - e } var i = Mp(A, e); i.sort(t); var o = [], n = i[0]; o.push(n); for (var r = 1; i.length > r; r += 1) i[r] !== n && o.push(n = i[r]); return o.sort(t) }, Up = function (A, e, t) { t = void 0 === t ? Math.PI / 4 : t; var i = Mp(A, e), o = i.length, n = A.length / 3, r = new Array(n + o), a = n, s = i.length / 3; parseInt(s, 0) !== s && (Bh.error("triangleCount 不是整数"), s = parseInt(s, 0)); for (var l = 0; n > l; l += 1) r[l] = -1; var c = new Array(o), h = 0; for (l = 0; s > l; l += 1) for (var d = i[3 * l + 2], p = 0; 3 > p; p += 1) { var g = !1, u = i[3 * l + p]; if (d > u) { g = !0; var f = d; d = u, u = f } var m = new wp; m.vertexIndex[0] = d, m.vertexIndex[1] = u, m.faceIndex[0] = l, m.faceIndex[1] = l; var C = r[d]; if (-1 === C) r[d] = h, c[h] = m, r[a + h] = -1, h += 1; else for (;;) { if ((E = c[C]).vertexIndex[1] === u) { E.faceIndex[1] = l; break } var v = r[a + C]; if (-1 === v) { r[a + C] = h, c[h] = m, r[a + h] = -1, h += 1; break } C = v } g || (d = u) } var I = []; for (l = 0; h > l; l += 1) { var E; if ((E = c[l]).faceIndex[0] === E.faceIndex[1]) I.push(E.vertexIndex[0]), I.push(E.vertexIndex[1]); else { var B = E.faceIndex[0], x = i[3 * B], S = i[3 * B + 1], w = i[3 * B + 2], M = new y(A[3 * x], A[3 * x + 1], A[3 * x + 2]), b = new y(A[3 * S], A[3 * S + 1], A[3 * S + 2]), U = new y(A[3 * w], A[3 * w + 1], A[3 * w + 2]), F = M.sub(b), K = b.sub(U), Q = F.cross(K); Q.normalize(); var R = E.faceIndex[1]; S = i[3 * R + 1], w = i[3 * R + 2], M = new y(A[3 * (x = i[3 * R])], A[3 * x + 1], A[3 * x + 2]), b = new y(A[3 * S], A[3 * S + 1], A[3 * S + 2]), U = new y(A[3 * w], A[3 * w + 1], A[3 * w + 2]), F = M.sub(b), K = b.sub(U); var T = F.cross(K); T.normalize(), Math.abs(Q.dot(T)) < t && (I.push(E.vertexIndex[0]), I.push(E.vertexIndex[1])) } } return I }, Fp = function (A, e, t, i, o) { for (var n = t.length / 3, r = [], a = 0; n > a; a += 1) { var s = t[3 * a], l = new y(e[3 * s], e[3 * s + 1], e[3 * s + 2]), c = l.dot(o); if (.001 > Math.abs(c - 1)) { var h = -new y(A[3 * s], A[3 * s + 1], A[3 * s + 2]).dot(l), d = Math.abs(i.dot(l) + h); 3 > Math.abs(d) && r.push(t[3 * a], t[3 * a + 1], t[3 * a + 2]) } } return r }, Kp = new y, Qp = new y, Rp = new y, Tp = new y, kp = function (A) { this.cameraControl = A, this.scene = A.scene, this.timerId = null, this.lastIntersected = null, this.edgeDataMap = null }; kp.prototype = { constructor: kp, destroy: function () { this.cameraControl = null, this.scene = null, this.lastIntersected = null, this.timerId && (clearTimeout(this.timerId), this.timerId = null) }, click: function (A, e) { var i = this; function o() { e && !1 === e.pickable && (e = null), i.handleMousePick(A, !1, e) } A.button !== t.RIGHT ? (this.timerId && clearTimeout(this.timerId), this.timerId = setTimeout(o, 500)) : o() }, doubleClick: function (A) { A.preventDefault(), this.timerId && clearTimeout(this.timerId), this.handleMousePick(A, !0, null) }, handleMousePick: function (A, e, i) { var o = this.cameraControl, n = o.viewer.modelManager.sceneState, r = new s(A.clientX, A.clientY), a = o.screenToCanvas(A.clientX, A.clientY), l = o.viewer.modelManager; function c(t, i) { var o = null; if (t && t.objectType === Qc.Room) { var n = t.face.contourIndex, r = t.object.geometry.contour; o = n ? { startPoint: r[n.st], endPoint: r[n.ed] } : null } l.dispatchEvent({ type: Rc.ON_CLICK_PICK, event: A, doubleClick: e, canvasPos: { x: a.x, y: a.y }, intersectInfo: t ? { selectedObjectId: t.userId, modelKey: t.modelKey, objectType: t.objectType, selectable: i, worldPosition: t.worldPosition, worldBoundingBox: t.worldBoundingBox, point: t.point, index: t.index, innnerDebugging: t.innnerDebugging, object: t.object, normal: t.face ? t.face.normal : null, boundaryPoints: o } : null }) } var h = null; if (A.button !== t.RIGHT) { if (i) i.pickable && (h = i.intersect); else { var d = o.getIntersectContext(r); h = o.intersector.pick(d, null) } if (!h) { var p = n.getSelection(); if (A.ctrlKey) return; return p.length > 0 && (n.clearSelection(), o.updateView(!0)), this.setSelectedIdsForOutline(n.getSelection()), void(i && !i.pickable ? ((h = i.intersect).cx = r.x, h.cy = r.y, c(h, !1)) : c(null)) } var g = h.userId; if (mh.isMobileDevice() && (o.pivot = h.point), this.scene.intersectToWorld(h, o.viewer), h.innnerDebugging = A.altKey, h.cx = r.x, h.cy = r.y, this.lastPickedUserId = g, h.face && h.face.normal) { var u = h.face.normal; for (var f in u) u[f] = u[f] === -u[f] ? Math.abs(u[f]) : u[f] } if (A.button !== t.RIGHT) if (e) vc.EnableDemolishByDClick ? (n.setSelection([g]), c(h, !0), o.updateView(!0)) : (n.setSelection([g]), o.fitAndRotateBySelection(), c(h, !0)); else { var m = n.getSelection(); if (!!vc.MultipleSelectComponents && A.ctrlKey) { var C = m.indexOf(g); - 1 === C ? n.addSelection([g]) : (m.splice(C, 1), n.setSelection(m)) } else -1 === m.indexOf(g) ? n.setSelection([g]) : n.clearSelection(); this.setSelectedIdsForOutline(n.getSelection()), c(h, !0), o.updateView(!0) } else c(h, !1) } else c(h, !1) }, handleShiftMeasure: function (A, e, t) { var i = null, o = this.cameraControl, n = new s(A.clientX, A.clientY), r = o.getIntersectContext(n); function a(t, n, r, a, s, l) { var c = o.viewer.modelManager; if (null !== t) { var h = o.scene.drawingToWorld(t); t.copy(h) } if (null !== r) { var d = o.scene.drawingToWorld(r[0]), p = o.scene.drawingToWorld(r[1]); r[0].copy(d), r[1].copy(p) } c.dispatchEvent(i = { type: Rc.ON_MEASURE_PICK, event: A, pick: e, pickPoint: t, isAbsorbPoint: n, pickLine: r, pickPlane: a, userId: s, measureUnit: l }) } return o.intersector.pick(r, (function (A) { if (A) { var i = "", n = A.object.modelKey; if (n) { var r = o.viewer.modelManager.getModel(n); r && r.originalLengthUnit && (i = r.originalLengthUnit) } var s = new y; s.subVectors(A.point, t), s.normalize(); var l = new y(1, 0, 0), c = new y(0, 1, 0), h = new y(0, 0, 1), d = l.dot(s), p = c.dot(s), g = h.dot(s), u = new y; u.copy(t); .707 > Math.abs(p) ? Math.abs(g) < Math.abs(d) ? u.x = A.point.x : u.z = A.point.z : u.y = A.point.y, e && t.copy(u), a(u, !1, null, !1, A.userId, i) } else a(null, !1, null, !1) })), i }, handleMouseMeasure: function (A, e, t, i) { var o = null, n = this.cameraControl, r = n.scene, a = i || Rc.ON_MEASURE_PICK, s = this.pickToPoint({ x: A.clientX, y: A.clientY }, 5); function l(t, i, r, s, l, c, h) { var d = n.viewer.modelManager; if (null !== t) { var p = n.scene.drawingToWorld(t); t.copy(p) } if (null !== r) { var g = n.scene.drawingToWorld(r[0]), u = n.scene.drawingToWorld(r[1]); r[0].copy(g), r[1].copy(u) } (s || e || r || t) && d.dispatchEvent(o = { type: a, event: A, pick: e, pickPoint: t, isAbsorbPoint: i, pickLine: r, pickPlane: s, normal: l, userId: c, measureUnit: h }) } return null !== s ? (e && t.copy(s.pickPoint), l(s.pickPoint, s.isAbsorbPoint, s.pickLine, s.pickPlane, s.face.normal, s.userId, s.measureUnit)) : (r.hasGroup(gp.MEASUREPICKPLANE) && r.removeGroupByName(gp.MEASUREPICKPLANE), l(null, !1, null, !1)), o }, handleMouseHover: function (A) { var e = this, t = this.cameraControl, i = t.viewer.modelManager.sceneState; if (function () { if (!1 === e.scene.hasGroup(gp.AXISGRIDMANAGER)) return !1; var A = e.scene.getAxisGridManager(); return 0 !== A.getElements().length && !1 !== A.getIsEnableHover() }()) { var o = this.scene.getMatrixGlobal(), n = new s(A.clientX, A.clientY), r = t.getRaycaster(n.x, n.y), a = this.scene.getAxisGridManager(), l = a.getIntersectPoints(r, o), c = a.snapOnFloors(l); t.viewer.modelManager.dispatchEvent({ type: Rc.ON_AXIS_GRID_HOVER, snaps: c }) } if (vc.Hover) { var h = t.screenToCanvas(A.clientX, A.clientY), d = new s(A.clientX, A.clientY), p = t.getIntersectContext(d); t.intersector.pick(p, (function (A) { function o(A) { switch (A.objectType) { case Qc.Marker3d: A.object.setAttributeSize(A.index, A.currentSize); break; default: i.clearHover() } } if (A) { var n = vc.Hover || A.hoverEnabled; e.lastIntersected && (e.lastIntersected.userId !== A.userId && o(e.lastIntersected), e.lastIntersected.hoverEnabled && g(null)), n ? (e.lastIntersected && e.lastIntersected.userId === A.userId || (! function (A) { switch (A.objectType) { case Qc.Marker3d: var e = A.object; A.currentSize = e.getAttributeSize(A.index), e.setAttributeSize(A.index, Math.floor(1.5 * A.currentSize)); break; default: i.setHoverId(vc.EnableRenderPass ? A.object.originalId : A.userId) } }(A), e.lastIntersected = A), g(A, !0)) : e.lastIntersected = A, t.updateHighlight() } else e.lastIntersected && (o(e.lastIntersected), e.lastIntersected = null, g(null), t.updateHighlight()) })) } function g(i, o) { var n = t.viewer.modelManager; null !== i && e.scene.intersectToWorld(i, t.viewer), n.dispatchEvent({ type: Rc.ON_HOVER_PICK, event: A, canvasPos: { x: h.x, y: h.y }, intersectInfo: i ? { selectedObjectId: i.userId, objectType: i.objectType, selectable: o, modelKey: i.modelKey, worldPosition: i.worldPosition, worldBoundingBox: i.worldBoundingBox, point: i.point, innnerDebugging: i.innnerDebugging, object: i.object } : null }) } }, _canPick: function () { return this.cameraControl.viewer.modelManager.hasModelDataReady() }, setSelectedIdsForOutline: function (A) { this.cameraControl.viewer.rendererManager.composer && this.cameraControl.viewer.rendererManager.composer.setSelectedIds(A) }, pickToPoint: function (A, e) { var t = 0; t = void 0 === e ? 25 : e * e; var i = this.cameraControl, o = i.scene, n = new s(A.x, A.y), r = i.getIntersectContext(n), a = i.intersector.pick(r); if (a) { var l = "", c = a.object.modelKey, h = null; c && (h = i.viewer.modelManager.getModel(c)) && h.originalLengthUnit && (l = h.originalLengthUnit); var d = a.point, p = a.object.geometry, g = ((new M).extractRotation(a.object.matrix.clone()), a.object.matrixWorld.clone()), u = i.camera.projScreenMatrix, f = r.mouse, m = r.viewportSize, C = null; if (null != a.indexInfo && (C = a.indexInfo), !p.attributes && !p._bufferGeometry) return null; var v = p.attributes ? p : p._bufferGeometry; if (!v.index || void 0 === v.attributes.normal) return null; var I = v.attributes.position.array, E = v.attributes.normal.array, B = []; C || h && h.merged && g.multiply(a.matrix); var x = 1 / 0, S = (A = new y, []), w = new y, b = new y, U = w.set(I[3 * a.face.a], I[3 * a.face.a + 1], I[3 * a.face.a + 2]); U.applyMatrix4(g); var F = b.copy(U); F.applyMatrix4(u); var K = .5 * (F.x - f.x) * m.width, Q = .5 * (F.y - f.y) * m.height, R = K * K + Q * Q; x > R && (x = R, A.copy(U)), (U = w.set(I[3 * a.face.b], I[3 * a.face.b + 1], I[3 * a.face.b + 2])).applyMatrix4(g), (F = b.copy(U)).applyMatrix4(u), x > (R = (K = .5 * (F.x - f.x) * m.width) * K + (Q = .5 * (F.y - f.y) * m.height) * Q) && (x = R, A.copy(U)), (U = w.set(I[3 * a.face.c], I[3 * a.face.c + 1], I[3 * a.face.c + 2])).applyMatrix4(g), (F = b.copy(U)).applyMatrix4(u), x > (R = (K = .5 * (F.x - f.x) * m.width) * K + (Q = .5 * (F.y - f.y) * m.height) * Q) && (x = R, A.copy(U)); var T = d.clone(), k = !1, D = null, L = !1; if (t > x) o.hasGroup(gp.MEASUREPICKPLANE) && o.removeGroupByName(gp.MEASUREPICKPLANE), T = A.clone(), k = !0; else { x = 1 / 0; var N = new y, O = new y; A = new y; var V, G = this._getEegeData(a); if (!G) return Bh.error("no edge data"), null; S = G.positionsArray, V = G.edgeIndex; for (var P = 0; V.length > P; P += 2) { Rp.set(S[3 * V[P]], S[3 * V[P] + 1], S[3 * V[P] + 2]), Rp.applyMatrix4(g), Tp.set(S[3 * V[P + 1]], S[3 * V[P + 1] + 1], S[3 * V[P + 1] + 2]), Tp.applyMatrix4(g); var q = this._pointToLine(Rp, Tp, d); (F = q.clone()).applyMatrix4(u), x > (R = (K = .5 * (F.x - f.x) * m.width) * K + (Q = .5 * (F.y - f.y) * m.height) * Q) && (x = R, N.copy(Rp), O.copy(Tp), A.copy(q)) } if (S = null, t > x) o.hasGroup(gp.MEASUREPICKPLANE) && o.removeGroupByName(gp.MEASUREPICKPLANE), (D = []).push(N), D.push(O), T = A.clone(); else { if (vc.MeasureHighlightPlane) { B = v.index.array; var j = new M; j.getInverse(g); var H = new y(d.x, d.y, d.z); H.applyMatrix4(j); var Y = Fp(I, E, B, H, a.face.normal), W = new he; W.setIndex(Y), W.setAttribute("position", p.attributes.position, 3), W.setAttribute("normal", p.attributes.normal, 3); var J = Up(I, Y), z = new he; z.setIndex(J), z.setAttribute("position", p.attributes.position, 3), o.hasGroup(gp.MEASUREPICKPLANE) && o.removeGroupByName(gp.MEASUREPICKPLANE); var Z = o.getOrCreateGroup(gp.MEASUREPICKPLANE, { priority: 1, globalSpace: !0 }), X = new Ue(W, new jA({ color: 1170103, opacity: .1, transparent: !0 })); X.applyMatrix4(a.object.matrix), Z.add(X); var _ = new jo(z, new ko({ color: 1170103 })); _.applyMatrix4(a.object.matrix), Z.add(_), Z.updateMatrixWorld(!0), i.updateHighlight() } L = !0 } } var $ = {}; return $.pickPoint = T, $.isAbsorbPoint = k, $.measureUnit = l, $.pickLine = D, $.pickPlane = L, $.face = a.face, $.userId = a.userId, $ } return null }, _getEegeData: function (A) { var e = A.object.geometry; this.edgeDataMap || (this.edgeDataMap = {}); var t = null; null != A.indexInfo && (t = A.indexInfo); var i = e.attributes ? e : e._bufferGeometry, o = A.nodeId || A.userId; return this.edgeDataMap[i.id] ? this.edgeDataMap[i.id].version !== i.attributes.position.version ? (delete this.edgeDataMap[i.id].data, this.edgeDataMap[i.id].data[o] = this._getPositionArrayAndEdgeIndex(i, t)) : this.edgeDataMap[i.id].data[o] || (this.edgeDataMap[i.id].data[o] = this._getPositionArrayAndEdgeIndex(i, t)) : (this.edgeDataMap[i.id] = {}, this.edgeDataMap[i.id].version = i.attributes.position.version, this.edgeDataMap[i.id].data = {}, this.edgeDataMap[i.id].data[o] = this._getPositionArrayAndEdgeIndex(i, t)), this.edgeDataMap[i.id].data[o] }, _getPositionArrayAndEdgeIndex: function (A, e) { var t = [], i = 0, o = 0, n = [], r = [], a = A.attributes.position.array, s = []; if (e) { e.positionStart / 3; for (var l = uh.getMin((t = A.index.array).slice(i = e.indexStart, o = e.indexStart + e.indexCount)), c = i; o > c; c += 1) r.push(t[c] - l); n = a.slice(e.positionStart, e.positionStart + e.positionCount), s = Up(n, r) } else o = (t = bp(A.attributes.position.array, A.index.array)).length, n = a, s = Up(A.attributes.position.array, A.index.array); return { positionsArray: n, edgeIndex: s } }, _pointToLine: function (A, e, t) { Kp.subVectors(e, A), Qp.subVectors(t, A); var i = Kp.dot(Qp); if (0 > i) return A; var o = Kp.dot(Kp); if (i > o) return e; i /= o; var n = A.clone(); return n.addScaledVector(Kp, i), n } }; var Dp = "http://www.w3.org/2000/svg", Lp = function () { var A = document.createElementNS(Dp, "svg"), e = function (A, e, t, i) { var o = document.createElementNS(Dp, "defs"), n = document.createElementNS(Dp, "filter"); n.id = A, n.setAttributeNS(null, "x", "-30%"), n.setAttributeNS(null, "y", "-30%"), n.setAttributeNS(null, "width", "200%"), n.setAttributeNS(null, "height", "200%"); var r = document.createElementNS(Dp, "feGaussianBlur"); r.setAttributeNS(null, "in", "SourceAlpha"), r.setAttributeNS(null, "stdDeviation", "4"); var a = document.createElementNS(Dp, "feOffset"); a.setAttributeNS(null, "result", "offsetblur"); var s = document.createElementNS(Dp, "feMerge"), l = document.createElementNS(Dp, "feMergeNode"), c = document.createElementNS(Dp, "feMergeNode"); return c.setAttributeNS(null, "in", "SourceGraphic"), s.appendChild(l), s.appendChild(c), n.appendChild(r), n.appendChild(a), n.appendChild(s), o.appendChild(n), o }("drop-shadow"); return A.appendChild(e), A }, Np = function () { return document.createElementNS(Dp, "line") }, Op = function () { return document.createElementNS(Dp, "path") }, Vp = function (A) { var e = document.createElementNS(Dp, "circle"); return e.setAttributeNS(null, "r", A || 0), e.setAttributeNS(null, "fill", "none"), e }, Gp = function () { return document.createElementNS(Dp, "text") }, Pp = function () { return document.createElementNS(Dp, "g") }, qp = function (A, e) { var t = Math.pow(A[0] - e[0], 2), i = Math.pow(A[1] - e[1], 2), o = 0; return 3 === A.length && 3 === e.length && (o = Math.pow(A[2] - e[2], 2)), Math.sqrt(t + i + o) }, jp = function (A) { var e = Math.pow(A[0], 2), t = Math.pow(A[1], 2), i = 0; A.length > 2 && (i = Math.pow(A[2], 2)); var o = Math.sqrt(e + t + i), n = [A[0] / o, A[1] / o]; return A.length > 2 && n.push(A[2] / o), n }, Hp = function (A, e) { var t = 0; return A.length > 2 && e.length > 2 && (t = A[2] * e[2]), A[0] * e[0] + A[1] * e[1] + t }, Yp = function (A, e) { var t = A[0], i = A[1], o = A[2], n = e[0], r = e[1], a = e[2]; return [i * a - o * r, o * n - t * a, t * r - i * n] }, Wp = function (A) { return "mm" === A ? 1 : "cm" === A ? 10 : "m" === A ? 1e3 : 1 }, Jp = function (A, e, t, i) { var o = Wp(A); 2 === i ? o *= o : 3 === i && (o *= o * o); var n = Wp(e); return 2 === i ? n *= n : 3 === i && (n *= n * n), t * o / n }, zp = function (A, e) { return !(e.x > A.x + A.width || A.x > e.x + e.width || e.y > A.y + A.height || A.y > e.y + e.height) }, Zp = function () { return "undefined" != typeof window && "ontouchstart" in window }, Xp = function (A) { this.svg = A, this.maxPointsNeed = 0, this.pickedPoints = [], this.svgGroup = Pp(), this.svg.appendChild(this.svgGroup), this.unitOfModel = void 0, this.unitOnUI = void 0, this.precision = 3, this.adjustOption = void 0, this.is3DMode = !1, this.isSelected = !1, this.onclickCallback = void 0 }; Xp.prototype.addPickedPoint = function (A, e, t) { return !this.isDone() && (!!A && (this.pickedPoints.push(A), e && (this.unitOfModel = this.unitOfModel && this.unitOfModel !== e ? void 0 : e), !0)) }, Xp.prototype.getAllPickedPoint = function () { return this.pickedPoints }, Xp.prototype.draw = function (A, e) {}, Xp.prototype.adjustWithOption = function (A) { this.adjustOption = A, A && this.updateTexts() }, Xp.prototype.unAdjustWithOption = function (A) { this.adjustOption = void 0, this.updateTexts() }, Xp.prototype.changeUnit = function (A) { A && (this.unitOnUI = A, this.updateTexts()) }, Xp.prototype.changePrecision = function (A) { this.precision = A, A && this.updateTexts() }, Xp.prototype.updateTexts = function () {}, Xp.prototype.isVisible = function () { return !!(this.svg && this.svgGroup && this.svgGroup.parentNode) }, Xp.prototype.remove = function () { this.svg && this.svgGroup && this.svgGroup.parentNode && (this.svg.removeChild(this.svgGroup), this.onclickCallback = void 0) }, Xp.prototype.add = function () { this.svg && this.svgGroup && this.svg.appendChild(this.svgGroup) }, Xp.prototype.isDone = function () { return this.pickedPoints.length === this.maxPointsNeed }, Xp.prototype.setClickCallback = function (A) { this.onclickCallback = A }, Xp.prototype.measureResult = function () {}, Xp.prototype.createCircle = function () { var A = Vp(5); return A.setAttributeNS(null, "fill", "#ff9800"), A.setAttributeNS(null, "stroke", "#ffffff"), A.setAttributeNS(null, "stroke-width", 2), A.style.display = "none", A }, Xp.prototype.createLine = function () { var A = Np(); return A.setAttributeNS(null, "stroke-width", 2), A.setAttributeNS(null, "stroke", "#ffff00"), A.style.display = "none", A }, Xp.prototype.createText = function () { var A = Gp(); return A.style.fontSize = "14", A.style.display = "none", A.style.textAnchor = "middle", A.setAttributeNS(null, "fill", "#ffffff"), A }, Xp.prototype.createPath = function () { var A = Op(); return A.style.display = "none", A.setAttributeNS(null, "fill", "none"), A.setAttributeNS(null, "stroke", "#0aea06"), A }, Xp.prototype.resultToDisplayOfLength = function (A) { var e = A, t = this.unitOfModel; return this.adjustOption && (e = this.adjustOption.adjustLength(A), t = this.adjustOption.unit), this.unitOnUI && (t && (e = Jp(t, this.unitOnUI, e, 0)), t = this.unitOnUI), t || (t = ""), e = e.toFixed(this.precision), { value: Number(e), unit: t, text: e + t } }, Xp.prototype.setSelected = function (A) { return this.isSelected !== A && (this.isSelected = A, !0) }; var _p = function () { this.group = Pp(), this.group.style.display = "none"; var A = Op(); this.textBackground = A, this.group.appendChild(A), A = Op(), this.prefixTextBackground = A, this.prefixTextBackground.style.display = "none", this.group.appendChild(A); var e = Gp(); e.style.fontSize = "12", e.style.textAnchor = "middle", e.style.dominantBaseline = "central", e.style.cursor = "default", e.setAttributeNS(null, "fill", "#ffffff"), this.group.appendChild(e), this.text = e, (e = Gp()).style.fontSize = "12", e.style.textAnchor = "middle", e.style.dominantBaseline = "central", e.style.display = "none", e.setAttributeNS(null, "fill", "#ffffff"), this.group.appendChild(e), this.prefixText = e, this.textColor = "#ffffff", this.prefixTextColor = "#ffffff", this.textBackgroundColor = "#ffffff", this.prefixTextBackgroundColor = "blue", this.textContent = void 0, this.prefixTextContent = void 0, this.textPosition = { x: 0, y: 0 }, this.isShowShadow = !1, this.onclickCallback = void 0, this._onMouseDown = this._onMouseDown.bind(this), this._onMouseMove = this._onMouseMove.bind(this), this._onMouseUp = this._onMouseUp.bind(this) }; _p.prototype.draw = function (A) { if (this.textContent && this.textContent.length) { this.group.style.display = "", this.text.textContent = this.textContent; var e = null; this.prefixTextContent ? (this.prefixText.textContent = this.prefixTextContent, this.prefixText.style.display = "", e = this.prefixText.getBBox()) : (this.prefixText.style.display = "none", e = { width: 0, height: 0 }); var t = this.text.getBBox(), i = 5 + t.width + 5; this.prefixTextContent && this.prefixTextContent.length > 0 && (i = i + 5 + e.width + 5), A && (i = Math.max(A, i)); var o = this.textPosition.x - i / 2, n = this.textPosition.y - (5 + t.height + 5) / 2, r = function (A, e, t, i, o) { return "M" + A + "," + (e + o) + "a" + o + "," + o + " 0 0 1 " + o + "," + -o + "h" + (t - 2 * o) + "a" + o + "," + o + " 0 0 1 " + o + "," + o + "v" + (i - 2 * o) + "a" + o + "," + o + " 0 0 1 " + -o + "," + o + "h" + (2 * o - t) + "a" + o + "," + o + " 0 0 1 " + -o + "," + -o + "v" + (2 * o - i) + "z" }(o, n, i, t.height + 10, 5); this.textBackground.setAttributeNS(null, "d", r), this.textBackground.setAttributeNS(null, "fill", this.textBackgroundColor), this.isShowShadow ? this.group.setAttributeNS(null, "filter", "url(#drop-shadow)") : this.group.removeAttributeNS(null, "filter"), this.prefixTextContent && this.prefixTextContent.length > 0 ? (r = function (A, e, t, i, o) { return "M" + A + "," + (e + o) + "a" + o + "," + o + " 0 0 1 " + o + "," + -o + "h" + (t - o) + "v" + i + "h" + (o - t) + "a" + o + "," + o + " 0 0 1 " + -o + "," + -o + "v" + (2 * o - i) + "z" }(o, n, e.width + 10, e.height + 10, 5), this.prefixTextBackground.setAttributeNS(null, "d", r), this.prefixTextBackground.setAttributeNS(null, "fill", this.prefixTextBackgroundColor), this.prefixTextBackground.style.display = "", this.prefixText.setAttributeNS(null, "x", o + 5 + e.width / 2), this.prefixText.setAttributeNS(null, "y", n + 5 + e.height / 2), o = o + (10 + e.width) / 2 + i / 2) : o += i / 2, this.text.setAttributeNS(null, "x", o), this.text.setAttributeNS(null, "y", n + 5 + t.height / 2), this.text.setAttributeNS(null, "fill", this.textColor), this.prefixText.setAttributeNS(null, "fill", this.prefixTextColor) } }, _p.prototype.setText = function (A, e) { this.textContent = A, this.prefixTextContent = e }, _p.prototype.setPosition = function (A, e) { this.textPosition = { x: A, y: e } }, _p.prototype.hide = function () { this.group.style.display = "none" }, _p.prototype.show = function () { this.group.style.display = "" }, _p.prototype.setClickCallback = function (A) { this.onclickCallback = A, A ? (this.group.style.cursor = "pointer", this.text.style.cursor = "pointer", Zp() ? (this.group.addEventListener("touchstart", this._onMouseDown), this.group.addEventListener("touchend", this._onMouseUp), this.group.addEventListener("touchmove", this._onMouseMove)) : (this.group.addEventListener("mousedown", this._onMouseDown), this.group.addEventListener("mouseup", this._onMouseUp), this.group.addEventListener("mousemove", this._onMouseMove))) : (this.group.style.cursor = "default", this.text.style.cursor = "default", Zp() ? (this.group.removeEventListener("touchstart", this._onMouseDown), this.group.removeEventListener("touchend", this._onMouseUp), this.group.removeEventListener("touchmove", this._onMouseMove)) : (this.group.removeEventListener("mousedown", this._onMouseDown), this.group.removeEventListener("mouseup", this._onMouseUp), this.group.removeEventListener("mousemove", this._onMouseMove))) }, _p.prototype._onMouseMove = function (A) { A.stopPropagation(), A.preventDefault() }, _p.prototype._onMouseDown = function (A) { A.stopPropagation(), A.preventDefault() }, _p.prototype._onMouseUp = function (A) { A.stopPropagation(), A.preventDefault(), this.onclickCallback && this.onclickCallback() }; var $p = function (A) { Xp.call(this, A), this.maxPointsNeed = 2, this.startCircle = this.createCircle(), this.startCircle.setAttributeNS(null, "fill", "#ffffff"), this.endCircle = this.createCircle(), this.endCircle.setAttributeNS(null, "fill", "#ffffff"), this.svgGroup.appendChild(this.startCircle), this.svgGroup.appendChild(this.endCircle), this.line = this.createLine(), this.line.setAttributeNS(null, "stroke", "#ffffff"), this.line.setAttributeNS(null, "strokd-width", 2), this.svgGroup.appendChild(this.line), this.text = new _p, this.text.textBackgroundColor = "#ffffff", this.text.textColor = "#000000", this.svgGroup.appendChild(this.text.group), this._distance = void 0 }; ($p.prototype = Object.assign(Object.create(Xp.prototype), { constructor: $p })).addPickedPoint = function (A, e, t) { Xp.prototype.addPickedPoint.call(this, A, e, t) && this.isDone() && (this._enableSelect(), this._distance = qp(this.pickedPoints[0], this.pickedPoints[1])) }, $p.prototype.draw = function (A, e) { if (this.svgGroup.parentNode) { var t = this.pickedPoints; if (t.length > 0) { A && !this.isDone() && (t = t.concat([A])); var i = t; if (e) { for (var o = [], n = 0, r = t.length; r > n; n += 1) o[n] = e(t[n]); i = o } var a = i[0], s = i.length > 1 ? i[1] : a; if (this.startCircle.setAttributeNS(null, "cx", a[0]), this.startCircle.setAttributeNS(null, "cy", a[1]), this.startCircle.style.display = "", this.line.setAttributeNS(null, "x1", a[0]), this.line.setAttributeNS(null, "y1", a[1]), this.line.setAttributeNS(null, "x2", s[0]), this.line.setAttributeNS(null, "y2", s[1]), this.line.style.display = "", this.text.setPosition((a[0] + s[0]) / 2, (a[1] + s[1]) / 2), t.length > 1) { var l = qp(t[0], t[1]); this._distance = l } 2 === this.pickedPoints.length ? (this.endCircle.setAttributeNS(null, "cx", s[0]), this.endCircle.setAttributeNS(null, "cy", s[1]), this.endCircle.style.display = "") : this.endCircle.style.display = "none", this._updateText() } } }, $p.prototype.measureResult = function () { if (this.isDone()) { var A = {}; if (A.distance = this._distance, this.adjustOption) { var e = this.resultToDisplayOfLength(this._distance); A.unit = e.unit, A.value = e.value } return A } }, $p.prototype.adjustWithOption = function (A) { Xp.prototype.adjustWithOption.call(this, A), this._updateText(), this._disableSelect() }, $p.prototype.changeUnit = function (A) { Xp.prototype.changeUnit.call(this, A), A && this._updateText() }, $p.prototype.changePrecision = function (A) { Xp.prototype.changePrecision.call(this, A), A && this._updateText() }, $p.prototype._enableSelect = function () { var A = this; this.startCircle.onmousedown = function (e) { A.isDone() && (A.pickedPoints = A.pickedPoints.slice(1), e.stopPropagation(), A._disableSelect()) }, this.endCircle.onmousedown = function (e) { A.isDone() && (A.pickedPoints = A.pickedPoints.slice(0, 1), e.stopPropagation(), A._disableSelect()) } }, $p.prototype._disableSelect = function () { this.startCircle.onmousedown = void 0, this.endCircle.onmousedown = void 0 }, $p.prototype._updateText = function () { this.isDone() && this._distance && this.adjustOption && (this.text.setText(this.resultToDisplayOfLength(this._distance).text), this.text.draw()) }; var Ag = function () { this.unit = void 0, this.valueBeforeAdjust = void 0, this.valueAfterAdjust = void 0 }; Ag.prototype.adjustLength = function (A) { return this.valueAfterAdjust && this.valueBeforeAdjust ? A * this.valueAfterAdjust / this.valueBeforeAdjust : A }, Ag.prototype.adjustArea = function (A) { return this.valueAfterAdjust && this.valueBeforeAdjust ? A * Math.pow(this.valueAfterAdjust / this.valueBeforeAdjust, 2) : A }, Ag.prototype.adjustVolume = function (A) { return this.valueAfterAdjust && this.valueBeforeAdjust ? A * Math.pow(this.valueAfterAdjust / this.valueBeforeAdjust, 3) : A }; var eg = function (A) { Xp.call(this, A), this.maxPointsNeed = 3, this._angle = void 0, this.circle1 = this.createCircle(), this.circle2 = this.createCircle(), this.circle3 = this.createCircle(), this.svgGroup.appendChild(this.circle1), this.svgGroup.appendChild(this.circle2), this.svgGroup.appendChild(this.circle3), this.line1 = this.createLine(), this.line1.setAttributeNS(null, "stroke-width", 2), this.svgGroup.appendChild(this.line1), this.line2 = this.createLine(), this.line2.setAttributeNS(null, "stroke-width", 2), this.svgGroup.appendChild(this.line2), this.arc = this.createPath(), this.svgGroup.appendChild(this.arc), this.angleText = new _p, this.angleText.textBackgroundColor = "#009bff", this.svgGroup.appendChild(this.angleText.group); var e = this; this.angleText.setClickCallback((function () { e.onclickCallback && e.onclickCallback(e) })) }; (eg.prototype = Object.assign(Object.create(Xp.prototype), { constructor: eg })).addPickedPoint = function (A, e, t) { if (Xp.prototype.addPickedPoint.call(this, A, e, t) && this.isDone()) { var i = this.pickedPoints[0], o = this.pickedPoints[1], n = this.pickedPoints[2], r = (a = [n[0] - o[0], n[1] - o[1], n[2] - o[2]], s = jp([i[0] - o[0], i[1] - o[1], i[2] - o[2]]), l = jp(a), c = Hp(s, l), Math.acos(c) / Math.PI * 180); this._angle = r } var a, s, l, c }, eg.prototype.draw = function (A, e) { if (this.svgGroup.parentNode) { var t = this.pickedPoints; if (t.length > 0) { A && !this.isDone() && (t = t.concat([A])); var i = t, o = !0; if (e) { for (var n = !0, r = [], a = 0, s = t.length; s > a; a += 1) r[a] = e(t[a]), o && r[a][0] > 0 && r[a][0] < parseInt(this.svg.style.width, 10) && r[a][1] > 0 && r[a][1] < parseInt(this.svg.style.height, 10) && (o = !1), void 0 !== r[a][2] && 0 !== r[a][2] || (n = !1); i = r, n && (o = !0) } if (this.pickedPoints.length >= 1) { var l = i[0], c = i[1]; this.circle1.setAttributeNS(null, "cx", l[0]), this.circle1.setAttributeNS(null, "cy", l[1]), this.circle1.style.display = "", (A || this.pickedPoints.length > 1) && (this.line1.setAttributeNS(null, "x1", l[0]), this.line1.setAttributeNS(null, "y1", l[1]), this.line1.setAttributeNS(null, "x2", c[0]), this.line1.setAttributeNS(null, "y2", c[1]), this.line1.style.display = "") } if (this.pickedPoints.length >= 2) { var h = i[1], d = i[2]; this.circle2.setAttributeNS(null, "cx", h[0]), this.circle2.setAttributeNS(null, "cy", h[1]), this.circle2.style.display = "", (A || this.pickedPoints.length > 2) && (this.line2.setAttributeNS(null, "x1", h[0]), this.line2.setAttributeNS(null, "y1", h[1]), this.line2.setAttributeNS(null, "x2", d[0]), this.line2.setAttributeNS(null, "y2", d[1]), this.line2.style.display = "") } if (3 === this.pickedPoints.length) { if (o) return void(this.svgGroup.style.display = "none"); this.svgGroup.style.display = ""; var p = i[2]; this.circle3.setAttributeNS(null, "cx", p[0]), this.circle3.setAttributeNS(null, "cy", p[1]), this.circle3.style.display = ""; var g = i[0].slice(0, 2), u = i[1].slice(0, 2), f = i[2].slice(0, 2), m = qp(g, u), C = qp(u, f), y = Math.min(Math.min(m, C), 30), v = jp([g[0] - u[0], g[1] - u[1]]), I = [u[0] + v[0] * y, u[1] + v[1] * y], E = jp([f[0] - u[0], f[1] - u[1]]), B = [u[0] + E[0] * y, u[1] + E[1] * y], x = [(I[0] + B[0]) / 2, (I[1] + B[1]) / 2], S = [x[0] - u[0], x[1] - u[1]], w = [u[0] + (S = [1.5 * S[0], 1.5 * S[1]])[0], u[1] + S[1]], M = "M" + I[0] + "," + I[1]; M += "Q" + w[0] + "," + w[1], this.arc.setAttributeNS(null, "d", M += " " + B[0] + "," + B[1]), this.arc.style.display = "", this.angleText.setText(this._angle.toFixed(this.precision) + "°"), this.angleText.setPosition(w[0], w[1]), this.angleText.draw() } } } }, eg.prototype.setSelected = function (A) { Xp.prototype.setSelected.call(this, A) && (A ? (this.angleText.isShowShadow = !0, this.angleText.textBackgroundColor = "#ffffff", this.angleText.textColor = "#009bff", this.angleText.draw()) : (this.angleText.isShowShadow = !1, this.angleText.textBackgroundColor = "#009bff", this.angleText.textColor = "#ffffff", this.angleText.draw())) }, eg.prototype.measureResult = function () { return this._angle }; var tg = function (A) { Xp.call(this, A), this.path = Op(), this.path.setAttributeNS(null, "fill", "none"), this.path.setAttributeNS(null, "stroke", "rgb(69,195,69)"), this.svgGroup.appendChild(this.path), this._isDone = !1, this._circles = [], this._area = -1, this.resultText = new _p, this.resultText.textBackgroundColor = "#009bff", this.svgGroup.appendChild(this.resultText.group); var e = this; this.resultText.setClickCallback((function () { e.onclickCallback && e.onclickCallback(e) })) }; (tg.prototype = Object.assign(Object.create(Xp.prototype), { constructor: tg })).addPickedPoint = function (A, e, t) { if (this._pointCanClosePath(A, t)) this._isDone = !0, this._area = this.is3DMode ? this._calculateArea3D() : this._calculateArea2D(); else if (Xp.prototype.addPickedPoint.call(this, A, e, t)) { var i = this.createCircle(); this.svgGroup.appendChild(i), this._circles.push(i) } }, tg.prototype.isDone = function () { return this._isDone }, tg.prototype.draw = function (A, e) { if (this.svgGroup.parentNode) { var t = this.pickedPoints; if (t.length > 0) { if (A && !this.isDone()) { if (this._pointCanClosePath(A, e)) { var i = this.pickedPoints[0]; A = [i[0], i[1], i[2]] } t = t.concat([A]) } var o = t, n = !0; if (e) { for (var r = !0, a = [], s = 0, l = t.length; l > s; s += 1) a[s] = e(t[s]), n && a[s][0] > 0 && a[s][0] < parseInt(this.svg.style.width, 10) && a[s][1] > 0 && a[s][1] < parseInt(this.svg.style.height, 10) && (n = !1), void 0 !== a[s][2] && 0 !== a[s][2] || (r = !1); o = a, r && (n = !0) } var c = this._pathString(o); if (this.path.setAttributeNS(null, "d", c), this.isDone()) { if (n) return void(this.svgGroup.style.display = "none"); this.svgGroup.style.display = "", this.path.setAttributeNS(null, "fill", "rgba(69,195,69,0.5)"); var h = this._getPointsCenter(this.pickedPoints); e && (h = e(h)), this.resultText.setPosition(h[0], h[1]), this.updateTexts() } for (var d = 0, p = this._circles.length; p > d; d += 1) { var g = this._circles[d], u = o[d]; g.setAttributeNS(null, "cx", u[0]), g.setAttributeNS(null, "cy", u[1]), g.style.display = "" } } } }, tg.prototype.measureResult = function () { return this._area }, tg.prototype.updateTexts = function () { this.isDone() && (this.resultText.setText(this.resultToDisplayOfArea(this._area).text), this.resultText.draw()) }, tg.prototype.setSelected = function (A) { Xp.prototype.setSelected.call(this, A) && (A ? (this.resultText.isShowShadow = !0, this.resultText.textBackgroundColor = "#ffffff", this.resultText.textColor = "#009bff", this.resultText.draw()) : (this.resultText.isShowShadow = !1, this.resultText.textBackgroundColor = "#009bff", this.resultText.textColor = "#ffffff", this.resultText.draw())) }, tg.prototype.resultToDisplayOfArea = function (A) { var e = A, t = this.unitOfModel; return this.adjustOption && (e = this.adjustOption.adjustArea(A), t = this.adjustOption.unit), this.unitOnUI && (t && (e = Jp(t, this.unitOnUI, e, 2)), t = this.unitOnUI), t || (t = ""), e = e.toFixed(this.precision), "mm" === t ? t = "mm²" : "m" === t ? t = "m²" : "cm" === t && (t = "cm²"), { value: Number(e), unit: t, text: e + t } }, tg.prototype._pointCanClosePath = function (A, e) { if (this.pickedPoints.length > 0) { var t = this.pickedPoints[0]; e && (t = e(t), A = e(A)); var i = A[0] - t[0], o = A[1] - t[1]; if (200 >= i * i + o * o + 0) return !0 } return !1 }, tg.prototype._pathString = function (A) { if (!A || 0 === A.length) return ""; for (var e = "M" + A[0][0] + " " + A[0][1], t = 1, i = A.length; i > t; t += 1) e = e + "L" + A[t][0] + " " + A[t][1]; return this.isDone() && (e += "Z"), e }, tg.prototype._calculateArea2D = function () { if (this.isDone() && this.pickedPoints.length >= 3) { for (var A = this.pickedPoints, e = this.pickedPoints[0], t = [], i = 1, o = A.length; o > i; i += 1) t.push([A[i][0] - e[0], A[i][1] - e[1]]); for (var n = 0, r = 0, a = t.length; a - 1 > r; r += 1) { var s = t[r], l = t[r + 1]; n += s[0] * l[1] - s[1] * l[0] } return Math.abs(n / 2) } return 0 }, tg.prototype._calculateArea3D = function () { if (this.isDone() && this.pickedPoints.length >= 3) { for (var A = this.pickedPoints, e = this.pickedPoints[0], t = jp(Yp([this.pickedPoints[1][0] - e[0], this.pickedPoints[1][1] - e[1], this.pickedPoints[1][2] - e[2]], [this.pickedPoints[2][0] - e[0], this.pickedPoints[2][1] - e[1], this.pickedPoints[2][2] - e[2]])), i = 0, o = 1, n = A.length; n > o; o += 1) { i += Hp(Yp([this.pickedPoints[o - 1][0] - e[0], this.pickedPoints[o - 1][1] - e[1], this.pickedPoints[o - 1][2] - e[2]], [this.pickedPoints[o][0] - e[0], this.pickedPoints[o][1] - e[1], this.pickedPoints[o][2] - e[2]]), t) } return Math.abs(i / 2) } return 0 }, tg.prototype._getPointsCenter = function (A) { var e = A.length; return [A.reduce((function (A, e) { return A + e[0] }), 0) / e, A.reduce((function (A, e) { return A + e[1] }), 0) / e, A.reduce((function (A, e) { return A + e[2] }), 0) / e] }, tg.prototype._crossProduct = function (A, e) { var t = A[0], i = A[1], o = A[2], n = e[0], r = e[1], a = e[2]; return [i * a - o * r, o * n - t * a, t * r - i * n] }; var ig = function (A, e, t) { Xp.call(this, A), this.maxPointsNeed = 2, this.isMobile = e, this.number = t, this._drawPoints = [], this.startCircle = this.createCircle(), this.endCircle = this.createCircle(), this.svgGroup.appendChild(this.startCircle), this.svgGroup.appendChild(this.endCircle), this.distanceLine = this.createLine(), this.svgGroup.appendChild(this.distanceLine), this.deltaXLine = this.createLine(), this.deltaXLine.setAttributeNS(null, "stroke", "#ec4545"), this.deltaXLine.setAttributeNS(null, "stroke-dasharray", "6,4"), this.isMobile || this.svgGroup.appendChild(this.deltaXLine), this.deltaYLine = this.createLine(), this.deltaYLine.setAttributeNS(null, "stroke", "#45c345"), this.deltaYLine.setAttributeNS(null, "stroke-dasharray", "6,4"), this.isMobile || this.svgGroup.appendChild(this.deltaYLine), this.deltaZLine = this.createLine(), this.deltaZLine.setAttributeNS(null, "stroke", "#5757da"), this.deltaZLine.setAttributeNS(null, "stroke-dasharray", "6,4"), this.isMobile || this.svgGroup.appendChild(this.deltaZLine), this.deltaXText = new _p, this.deltaXText.textColor = "#ec4545", this.deltaXText.prefixTextBackgroundColor = "#ec4545", this.svgGroup.appendChild(this.deltaXText.group), this.deltaYText = new _p, this.deltaYText.textColor = "#45c345", this.deltaYText.prefixTextBackgroundColor = "#45c345", this.svgGroup.appendChild(this.deltaYText.group), this.deltaZText = new _p, this.deltaZText.textColor = "#5757da", this.deltaZText.prefixTextBackgroundColor = "#5757da", this.svgGroup.appendChild(this.deltaZText.group), this.distanceText = new _p, this.distanceText.textBackgroundColor = "#009bff"; var i = this; this.distanceText.setClickCallback((function () { i.onclickCallback && i.onclickCallback(i) })), this.svgGroup.appendChild(this.distanceText.group), this._distance = void 0, this._deltaXDistance = void 0, this._deltaYDistance = void 0, this._deltaZDistance = void 0 }; (ig.prototype = Object.assign(Object.create(Xp.prototype), { constructor: ig })).addPickedPoint = function (A, e, t) { if (Xp.prototype.addPickedPoint.call(this, A, e, t) && (this._drawPoints.push(A), this.isDone())) { if (3 === A.length) { var i = []; i[0] = this.pickedPoints[1][0], i[1] = this.pickedPoints[0][1], i[2] = this.pickedPoints[1][2]; var o = []; o[0] = this.pickedPoints[1][0], o[1] = this.pickedPoints[0][1], o[2] = this.pickedPoints[0][2], this._drawPoints.push(i), this._drawPoints.push(o) } this._distance = qp(this._drawPoints[0], this._drawPoints[1]), this._deltaYDistance = qp(this._drawPoints[1], this._drawPoints[2]), this._deltaZDistance = qp(this._drawPoints[2], this._drawPoints[3]), this._deltaXDistance = qp(this._drawPoints[3], this._drawPoints[0]), this.updateTexts() } }, ig.prototype.draw = function (A, e) { if (this.svgGroup.parentNode) { var t = this._drawPoints; if (t.length > 0) { A && !this.isDone() && (t = t.concat([A])); var i = t, o = !0; if (e) { for (var n = !0, r = [], a = 0, s = t.length; s > a; a += 1) r[a] = e(t[a]), o && r[a][0] > 0 && r[a][0] < parseInt(this.svg.style.width, 10) && r[a][1] > 0 && r[a][1] < parseInt(this.svg.style.height, 10) && (o = !1), void 0 !== r[a][2] && 0 !== r[a][2] || (n = !1); i = r, n && (o = !0) } var l = i[0], c = i.length > 1 ? i[1] : l; if (this.startCircle.setAttributeNS(null, "cx", l[0]), this.startCircle.setAttributeNS(null, "cy", l[1]), this.startCircle.style.display = "", this.distanceLine.setAttributeNS(null, "x1", l[0]), this.distanceLine.setAttributeNS(null, "y1", l[1]), this.distanceLine.setAttributeNS(null, "x2", c[0]), this.distanceLine.setAttributeNS(null, "y2", c[1]), this.distanceLine.style.display = "", 2 > t.length) return; if (this.distanceText.setPosition((l[0] + c[0]) / 2, (l[1] + c[1]) / 2), !this.isDone()) { var h = qp(t[0], t[1]); this._distance = h } if (4 === t.length) { if (o) return void(this.svgGroup.style.display = "none"); this.svgGroup.style.display = "", this.isSelected ? (this.distanceText.isShowShadow = !0, this.distanceText.textBackgroundColor = "#ffffff", this.distanceText.textColor = "#009bff") : (this.distanceText.isShowShadow = !1, this.distanceText.textBackgroundColor = "#009bff", this.distanceText.textColor = "#ffffff"), this.distanceText.draw(), this.endCircle.style.display = "", this.deltaYLine.style.display = "", this.deltaXLine.style.display = "", this.deltaZLine.style.display = "", this.endCircle.setAttributeNS(null, "cx", c[0]), this.endCircle.setAttributeNS(null, "cy", c[1]); var d = i[2], p = i[3]; this.deltaYLine.setAttributeNS(null, "x1", c[0]), this.deltaYLine.setAttributeNS(null, "y1", c[1]), this.deltaYLine.setAttributeNS(null, "x2", d[0]), this.deltaYLine.setAttributeNS(null, "y2", d[1]), this.deltaYText.setPosition((d[0] + c[0]) / 2, (d[1] + c[1]) / 2), this.deltaZLine.setAttributeNS(null, "x1", d[0]), this.deltaZLine.setAttributeNS(null, "y1", d[1]), this.deltaZLine.setAttributeNS(null, "x2", p[0]), this.deltaZLine.setAttributeNS(null, "y2", p[1]), this.deltaZText.setPosition((d[0] + p[0]) / 2, (d[1] + p[1]) / 2), this.deltaXLine.setAttributeNS(null, "x1", p[0]), this.deltaXLine.setAttributeNS(null, "y1", p[1]), this.deltaXLine.setAttributeNS(null, "x2", l[0]), this.deltaXLine.setAttributeNS(null, "y2", l[1]), this.deltaXText.setPosition((p[0] + l[0]) / 2, (p[1] + l[1]) / 2), this.isSelected && (this.isMobile || (this.deltaXText.draw(), this.deltaYText.draw(), this.deltaZText.draw()), this.layoutResultText()) } } } }, ig.prototype.layoutResultText = function () { for (var A = this.distanceText.group.getBBox(), e = this.deltaXText.group.getBBox(), t = this.deltaYText.group.getBBox(), i = this.deltaZText.group.getBBox(), o = [e, t, i], n = !1, r = 0; o.length > r; r += 1) if (zp(A, o[r])) { n = !0; break } if (n || (n = zp(e, t)), n || (n = zp(e, i)), n || (n = zp(t, i)), n) { var a = Math.max(A.width, e.width, t.width, i.width), s = A.x + A.width / 2, l = A.y + A.height + 8; return this.deltaXText.setPosition(s, l + e.height / 2), this.deltaYText.setPosition(s, (l += e.height) + t.height / 2), this.deltaZText.setPosition(s, (l += t.height) + i.height / 2), this.isMobile || (this.deltaXText.draw(a), this.deltaYText.draw(a), this.deltaZText.draw(a)), this.distanceText.draw(a), n } }, ig.prototype.measureResult = function () { if (this._distance) return [this._distance, this._deltaXDistance, this._deltaYDistance, this._deltaZDistance] }, ig.prototype.updateTexts = function () { this._distance && (this.distanceText.setText(this.isMobile ? "线段" + this.number + ": " + this.resultToDisplayOfLength(this._distance).text : this.resultToDisplayOfLength(this._distance).text, void 0), this.distanceText.draw(), this.isDone() && (0 !== this._deltaXDistance && this.deltaXText.setText(this.resultToDisplayOfLength(this._deltaXDistance).text, "X"), 0 !== this._deltaYDistance && this.deltaYText.setText(this.resultToDisplayOfLength(this._deltaYDistance).text, "Y"), 0 !== this._deltaZDistance && this.deltaZText.setText(this.resultToDisplayOfLength(this._deltaZDistance).text, "Z"), this.isSelected && !this.isMobile && (this.deltaXText.draw(), this.deltaYText.draw(), this.deltaZText.draw()))) }, ig.prototype.setSelected = function (A) { Xp.prototype.setSelected.call(this, A) && (A ? (this.distanceText.isShowShadow = !0, this.distanceText.textBackgroundColor = "#ffffff", this.distanceText.textColor = "#009bff", this.isMobile || (this.deltaXText.draw(), this.deltaYText.draw(), this.deltaZText.draw()), this.distanceText.draw(), this.layoutResultText()) : (this.deltaXText.hide(), this.deltaYText.hide(), this.deltaZText.hide(), this.distanceText.isShowShadow = !1, this.distanceText.textBackgroundColor = "#009bff", this.distanceText.textColor = "#ffffff", this.distanceText.draw())) }; var og = function (A) { Xp.call(this, A), this.maxPointsNeed = 2, this.startCircle = this.createCircle(), this.endCircle = this.createCircle(), this.svgGroup.appendChild(this.startCircle), this.svgGroup.appendChild(this.endCircle), this.distanceLine = this.createLine(), this.svgGroup.appendChild(this.distanceLine), this.distanceText = new _p, this.distanceText.textBackgroundColor = "#009bff", this.svgGroup.appendChild(this.distanceText.group); var e = this; this.distanceText.setClickCallback((function () { e.onclickCallback && e.onclickCallback(e) })), this.pickedComponentKeys = [], this._distance = void 0 }; (og.prototype = Object.assign(Object.create(Xp.prototype), { constructor: og })).setData = function (A, e, t) { this.pickedPoints = A, this._distance = e, t && (this.unitOfModel = this.unitOfModel && this.unitOfModel !== t ? void 0 : t) }, og.prototype.draw = function (A, e) { if (this.svgGroup.parentNode && this.isDone()) { var t = this.pickedPoints; if (e) { for (var i = [], o = 0, n = t.length; n > o; o += 1) i[o] = e(t[o]); t = i } var r = t[0], a = t[1]; this.startCircle.setAttributeNS(null, "cx", r[0]), this.startCircle.setAttributeNS(null, "cy", r[1]), this.startCircle.style.display = "", this.endCircle.setAttributeNS(null, "cx", a[0]), this.endCircle.setAttributeNS(null, "cy", a[1]), this.endCircle.style.display = "", this.distanceLine.setAttributeNS(null, "x1", r[0]), this.distanceLine.setAttributeNS(null, "y1", r[1]), this.distanceLine.setAttributeNS(null, "x2", a[0]), this.distanceLine.setAttributeNS(null, "y2", a[1]), this.distanceLine.style.display = "", this.distanceText.setPosition((r[0] + a[0]) / 2, (r[1] + a[1]) / 2), this.updateTexts() } }, og.prototype.measureResult = function () { if (void 0 !== this._distance) return this._distance }, og.prototype.updateTexts = function () { void 0 !== this._distance && (this.distanceText.setText(this.resultToDisplayOfLength(this._distance).text, void 0), this.distanceText.draw()) }, og.prototype.setSelected = function (A) { Xp.prototype.setSelected.call(this, A) && (A ? (this.distanceText.isShowShadow = !0, this.distanceText.textBackgroundColor = "#ffffff", this.distanceText.textColor = "#009bff", this.distanceText.draw()) : (this.distanceText.isShowShadow = !1, this.distanceText.textBackgroundColor = "#009bff", this.distanceText.textColor = "#ffffff", this.distanceText.draw())) }; var ng = function (A) { Xp.call(this, A), this.maxPointsNeed = 2; var e = Np(); e.setAttributeNS(null, "stroke-width", "2"), e.setAttributeNS(null, "stroke", "#0aea06"), this.svgGroup.appendChild(e), this._line = e, this.distanceText = new _p, this.distanceText.textBackgroundColor = "#009bff", this.svgGroup.appendChild(this.distanceText.group) }; (ng.prototype = Object.assign(Object.create(Xp.prototype), { constructor: ng })).setData = function (A, e) { A && e && (this._points = [A, e]) }, ng.prototype.draw = function (A, e) { if (2 === this._points.length) { var t = e(this._points[0]), i = e(this._points[1]); this._line.setAttributeNS(null, "x1", t[0]), this._line.setAttributeNS(null, "y1", t[1]), this._line.setAttributeNS(null, "x2", i[0]), this._line.setAttributeNS(null, "y2", i[1]), this.distanceText.setPosition((t[0] + i[0]) / 2, (t[1] + i[1]) / 2); var o = qp(this._points[0], this._points[1]); this.distanceText.setText(this.resultToDisplayOfLength(o).text, void 0), this.distanceText.draw() } }; var rg, ag, sg = function (A, e) { this.x = A || 0, this.y = e || 0 }; Object.defineProperties(sg.prototype, { width: { get: function () { return this.x }, set: function (A) { this.x = A } }, height: { get: function () { return this.y }, set: function (A) { this.y = A } } }), Object.assign(sg.prototype, { isVector2: !0, set: function (A, e) { return this.x = A, this.y = e, this }, setScalar: function (A) { return this.x = A, this.y = A, this }, setX: function (A) { return this.x = A, this }, setY: function (A) { return this.y = A, this }, setComponent: function (A, e) { switch (A) { case 0: this.x = e; break; case 1: this.y = e; break; default: throw new Error("index is out of range: " + A) } return this }, getComponent: function (A) { switch (A) { case 0: return this.x; case 1: return this.y; default: throw new Error("index is out of range: " + A) } }, clone: function () { return new this.constructor(this.x, this.y) }, copy: function (A) { return this.x = A.x, this.y = A.y, this }, add: function (A, e) { return void 0 !== e ? (console.warn("Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(A, e)) : (this.x += A.x, this.y += A.y, this) }, addScalar: function (A) { return this.x += A, this.y += A, this }, addVectors: function (A, e) { return this.x = A.x + e.x, this.y = A.y + e.y, this }, addScaledVector: function (A, e) { return this.x += A.x * e, this.y += A.y * e, this }, sub: function (A, e) { return void 0 !== e ? (console.warn("Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(A, e)) : (this.x -= A.x, this.y -= A.y, this) }, subScalar: function (A) { return this.x -= A, this.y -= A, this }, subVectors: function (A, e) { return this.x = A.x - e.x, this.y = A.y - e.y, this }, multiply: function (A) { return this.x *= A.x, this.y *= A.y, this }, multiplyScalar: function (A) { return this.x *= A, this.y *= A, this }, divide: function (A) { return this.x /= A.x, this.y /= A.y, this }, divideScalar: function (A) { return this.multiplyScalar(1 / A) }, applyMatrix3: function (A) { var e = this.x, t = this.y, i = A.elements; return this.x = i[0] * e + i[3] * t + i[6], this.y = i[1] * e + i[4] * t + i[7], this }, min: function (A) { return this.x > A.x && (this.x = A.x), this.y > A.y && (this.y = A.y), this }, max: function (A) { return A.x > this.x && (this.x = A.x), A.y > this.y && (this.y = A.y), this }, clamp: function (A, e) { return this.x = Math.max(A.x, Math.min(e.x, this.x)), this.y = Math.max(A.y, Math.min(e.y, this.y)), this }, clampScalar: (rg = new sg, ag = new sg, function (A, e) { return rg.set(A, A), ag.set(e, e), this.clamp(rg, ag) } ), clampLength: function (A, e) { var t = this.length(); return this.divideScalar(t || 1).multiplyScalar(Math.max(A, Math.min(e, t))) }, floor: function () { return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this }, ceil: function () { return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this }, round: function () { return this.x = Math.round(this.x), this.y = Math.round(this.y), this }, roundToZero: function () { return this.x = 0 > this.x ? Math.ceil(this.x) : Math.floor(this.x), this.y = 0 > this.y ? Math.ceil(this.y) : Math.floor(this.y), this }, negate: function () { return this.x = -this.x, this.y = -this.y, this }, dot: function (A) { return this.x * A.x + this.y * A.y }, cross: function (A) { return this.x * A.y - this.y * A.x }, lengthSq: function () { return this.x * this.x + this.y * this.y }, length: function () { return Math.sqrt(this.x * this.x + this.y * this.y) }, manhattanLength: function () { return Math.abs(this.x) + Math.abs(this.y) }, normalize: function () { return this.divideScalar(this.length() || 1) }, angle: function () { var A = Math.atan2(this.y, this.x); return 0 > A && (A += 2 * Math.PI), A }, distanceTo: function (A) { return Math.sqrt(this.distanceToSquared(A)) }, distanceToSquared: function (A) { var e = this.x - A.x, t = this.y - A.y; return e * e + t * t }, manhattanDistanceTo: function (A) { return Math.abs(this.x - A.x) + Math.abs(this.y - A.y) }, setLength: function (A) { return this.normalize().multiplyScalar(A) }, lerp: function (A, e) { return this.x += (A.x - this.x) * e, this.y += (A.y - this.y) * e, this }, lerpVectors: function (A, e, t) { return this.subVectors(e, A).multiplyScalar(t).add(A) }, equals: function (A) { return A.x === this.x && A.y === this.y }, fromArray: function (A, e) { return void 0 === e && (e = 0), this.x = A[e], this.y = A[e + 1], this }, toArray: function (A, e) { return void 0 === A && (A = []), void 0 === e && (e = 0), A[e] = this.x, A[e + 1] = this.y, A }, rotateAround: function (A, e) { var t = Math.cos(e), i = Math.sin(e), o = this.x - A.x, n = this.y - A.y; return this.x = o * t - n * i + A.x, this.y = o * i + n * t + A.y, this } }); var lg = function () { this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1] }; function cg(A, e) { this.normal = void 0 !== A ? A : new $c(1, 0, 0), this.constant = void 0 !== e ? e : 0 } lg.prototype.clear = function () { return this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1], this }, lg.prototype.set = function (A, e, t, i, o, n, r, a, s) { var l = this.elements; return l[0] = A, l[1] = i, l[2] = r, l[3] = e, l[4] = o, l[5] = a, l[6] = t, l[7] = n, l[8] = s, this }, lg.prototype.clone = function () { return (new this.constructor).fromArray(this.elements) }, lg.prototype.fromArray = function (A, e) { void 0 === e && (e = 0); for (var t = 0; 9 > t; t += 1) this.elements[t] = A[t + e]; return this }, lg.prototype.multiply = function (A) { return this.multiplyMatrices(this, A) }, lg.prototype.multiplyMatrices = function (A, e) { var t = A.elements, i = e.elements, o = this.elements, n = t[0], r = t[3], a = t[6], s = t[1], l = t[4], c = t[7], h = t[2], d = t[5], p = t[8], g = i[0], u = i[3], f = i[6], m = i[1], C = i[4], y = i[7], v = i[2], I = i[5], E = i[8]; return o[0] = n * g + r * m + a * v, o[3] = n * u + r * C + a * I, o[6] = n * f + r * y + a * E, o[1] = s * g + l * m + c * v, o[4] = s * u + l * C + c * I, o[7] = s * f + l * y + c * E, o[2] = h * g + d * m + p * v, o[5] = h * u + d * C + p * I, o[8] = h * f + d * y + p * E, this }, lg.prototype.scale = function (A, e) { var t = this.elements; return t[0] *= A, t[3] *= A, t[6] *= A, t[1] *= e, t[4] *= e, t[7] *= e, this }, lg.prototype.rotate = function (A) { var e = Math.cos(A), t = Math.sin(A), i = this.elements, o = i[0], n = i[3], r = i[6], a = i[1], s = i[4], l = i[7]; return i[0] = e * o + t * a, i[3] = e * n + t * s, i[6] = e * r + t * l, i[1] = -t * o + e * a, i[4] = -t * n + e * s, i[7] = -t * r + e * l, this }, lg.prototype.makeRotate = function (A) { var e = Math.cos(A), t = Math.sin(A); return this.set(e, -t, 0, t, e, 0, 0, 0, 1), this }, lg.prototype.translate = function (A, e) { var t = this.elements; return t[0] += A * t[2], t[3] += A * t[5], t[6] += A * t[8], t[1] += e * t[2], t[4] += e * t[5], t[7] += e * t[8], this }, lg.prototype.makeShear = function (A, e) { return this.set(1, e, 0, A, 1, 0, 0, 0, 1), this }, lg.prototype.fromCanvasTransform = function (A, e, t, i, o, n) { return this.set(A, t, o, e, i, n, 0, 0, 1), this }, lg.prototype.toCanvasTransform = function () { var A = this.elements; return [A[0], A[3], A[1], A[4], A[6], A[7]] }, lg.prototype.getInverse = function (A, e) { A && A.isMatrix4 && console.error("THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument."); var t = A.elements, i = this.elements, o = t[0], n = t[1], r = t[2], a = t[3], s = t[4], l = t[5], c = t[6], h = t[7], d = t[8], p = d * s - l * h, g = l * c - d * a, u = h * a - s * c, f = o * p + n * g + r * u; if (0 === f) { var m = "THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0"; if (!0 === e) throw new Error(m); return console.warn(m), this.identity() } var C = 1 / f; return i[0] = p * C, i[1] = (r * h - d * n) * C, i[2] = (l * n - r * s) * C, i[3] = g * C, i[4] = (d * o - r * c) * C, i[5] = (r * a - l * o) * C, i[6] = u * C, i[7] = (n * c - h * o) * C, i[8] = (s * o - n * a) * C, this }, Object.assign(cg.prototype, { isPlane: !0, set: function (A, e) { return this.normal.copy(A), this.constant = e, this }, setComponents: function (A, e, t, i) { return this.normal.set(A, e, t), this.constant = i, this }, setFromNormalAndCoplanarPoint: function (A, e) { return this.normal.copy(A), this.constant = -e.dot(this.normal), this }, setFromCoplanarPoints: function () { var A = new $c, e = new $c; return function (t, i, o) { var n = A.subVectors(o, i).cross(e.subVectors(t, i)).normalize(); return this.setFromNormalAndCoplanarPoint(n, t), this } }(), clone: function () { return (new this.constructor).copy(this) }, copy: function (A) { return this.normal.copy(A.normal), this.constant = A.constant, this }, normalize: function () { var A = 1 / this.normal.length(); return this.normal.multiplyScalar(A), this.constant *= A, this }, negate: function () { return this.constant *= -1, this.normal.negate(), this }, distanceToPoint: function (A) { return this.normal.dot(A) + this.constant }, distanceToSphere: function (A) { return this.distanceToPoint(A.center) - A.radius }, projectPoint: function (A, e) { return void 0 === e && (console.warn("THREE.Plane: .projectPoint() target is now required"), e = new $c), e.copy(this.normal).multiplyScalar(-this.distanceToPoint(A)).add(A) }, intersectLine: function () { var A = new $c; return function (e, t) { void 0 === t && (console.warn("THREE.Plane: .intersectLine() target is now required"), t = new $c); var i = e.delta(A), o = this.normal.dot(i); if (0 === o) return 0 === this.distanceToPoint(e.start) ? t.copy(e.start) : void 0; var n = -(e.start.dot(this.normal) + this.constant) / o; return 0 > n || n > 1 ? void 0 : t.copy(i).multiplyScalar(n).add(e.start) } }(), intersectsLine: function (A) { var e = this.distanceToPoint(A.start), t = this.distanceToPoint(A.end); return 0 > e && t > 0 || 0 > t && e > 0 }, intersectsBox: function (A) { return A.intersectsPlane(this) }, intersectsSphere: function (A) { return A.intersectsPlane(this) }, coplanarPoint: function (A) { return void 0 === A && (console.warn("THREE.Plane: .coplanarPoint() target is now required"), A = new $c), A.copy(this.normal).multiplyScalar(-this.constant) }, applyMatrix4: function () { var A = new $c, e = new lg; return function (t, i) { var o = i || e.getNormalMatrix(t), n = this.coplanarPoint(A).applyMatrix4(t), r = this.normal.applyMatrix3(o).normalize(); return this.constant = -n.dot(r), this } }(), translate: function (A) { return this.constant -= A.dot(this.normal), this }, equals: function (A) { return A.normal.equals(this.normal) && A.constant === this.constant } }); var hg = function (A, e) { this._point = void 0, this._normal = void 0, this.viewer = e, this.svg = A; var t = document.createElementNS(Dp, "polygon"); t.setAttribute("fill", "rgba(10,234,6,0.2)"), t.setAttribute("stroke", "#0aea06"), t.setAttribute("stroke-width", 1), t.style.pointerEvents = "none", this._panel = t, this.hoverPanelSize = { width: 20, height: 20 } }; hg.prototype.setupWithPoint = function (A, e) { this._point = A, this._normal = e }, hg.prototype.remove = function () { this.svg && this._panel.parentNode && this.svg.removeChild(this._panel) }, hg.prototype.add = function () { this.svg && this._panel && this.svg.appendChild(this._panel) }, hg.prototype.isVisible = function () { return !!this._panel.parentNode }, hg.prototype.stretchOnDirection = function (A, e, t) { var i = A.clone().add(e).multiplyScalar(.5), o = e.clone().sub(A).normalize(); return [i.clone().sub(o.clone().multiplyScalar(t / 2)), i.clone().add(o.clone().multiplyScalar(t / 2))] }, hg.prototype.draw = function () { var A = this.viewer.getScene().worldToDrawing(this._normal); A.normalize(); var e = this.viewer.worldToClient(this._point), t = this.viewer.getScene().worldToDrawing(this._point), i = this.viewer.cameraControl, o = new cg; o.setFromNormalAndCoplanarPoint(A, t); var n = new sg(e.x - 10, e.y - 10), r = new sg(e.x + 10, e.y - 10), a = t, s = i.getRaycaster(n.x, n.y), l = new $c, c = new $c; if (s.ray.intersectPlane(o, l), (s = i.getRaycaster(r.x, r.y)).ray.intersectPlane(o, c), null !== l && null !== c) { var h = new $c(1, 0, 0), d = new $c(0, 0, 1), p = new $c(0, 1, 0), g = .0025 >= Math.abs(A.clone().dot(h)), u = .0025 >= Math.abs(A.clone().dot(p)); if (g && u) var f = h.clone(), m = p.clone(); else f = d.clone().cross(A).normalize(), m = A.clone().cross(f).normalize(); var C = l.distanceTo(c) / 2, y = f.clone().multiplyScalar(C), v = m.clone().multiplyScalar(C), I = a.clone().sub(y).add(v), E = a.clone().add(y).add(v), B = a.clone().sub(y).sub(v), x = a.clone().add(y).sub(v), S = []; S.push(I, E, x, B); for (var w = [], M = i.getContainerDimensions(), b = 0; S.length > b; b += 1) { var U = new $c(S[b].x, S[b].y, S[b].z); U.project(i.camera); var F = { x: 0, y: 0, z: 0 }; F.x = Math.floor(.5 * (U.x + 1) * M.width + .5), F.y = Math.floor(-.5 * (U.y - 1) * M.height + .5), F.z = U.z || 0, w.push(new $c(F.x, F.y, 0)) } var K = this.hoverPanelSize, Q = w[0].distanceTo(w[1]), R = w[0].distanceTo(w[3]) / K.height; if (1 !== Q / K.width) { var T = this.stretchOnDirection(w[0], w[1], K.width), k = this.stretchOnDirection(w[2], w[3], K.width); w = T.concat(k) } if (1 !== R) { T = this.stretchOnDirection(w[0], w[3], K.height), k = this.stretchOnDirection(w[1], w[2], K.height); w = [T[0], k[0], k[1], T[1]] } for (var D = "", L = 0; w.length > L; L += 1) D += w[L].x + ",", D += w[L].y + " "; this._panel.setAttribute("points", D) } }; var dg = function (A) { this._point = void 0, this.svg = A; var e = Vp(5); e.setAttributeNS(null, "fill", "#00ff00"), this._circle = e }; dg.prototype.setupWithPoint = function (A) { A && (this._point = A) }, dg.prototype.remove = function () { this.svg && this._circle.parentNode && this.svg.removeChild(this._circle) }, dg.prototype.add = function () { this.svg && this._circle && this.svg.appendChild(this._circle) }, dg.prototype.isVisible = function () { return !!this._circle.parentNode }, dg.prototype.draw = function (A) { if (this._point) { var e = A(this._point); this._circle.setAttributeNS(null, "cx", e[0]), this._circle.setAttributeNS(null, "cy", e[1]) } }; var pg = function (A) { Xp.call(this, A), this.volumeText = new _p, this.volumeText.textBackgroundColor = "#009bff", this.svgGroup.appendChild(this.volumeText.group); var e = this; this.volumeText.setClickCallback((function () { e.onclickCallback && e.onclickCallback(e) })), this.pickedComponentKeys = [], this._position = void 0, this._volume = void 0 }; (pg.prototype = Object.assign(Object.create(Xp.prototype), { constructor: pg })).setData = function (A, e, t) { this._position = A, this._volume = e, t && (this.unitOfModel = this.unitOfModel && this.unitOfModel !== t ? void 0 : t) }, pg.prototype.isDone = function () { return this.pickedComponentKeys[0] && this._position }, pg.prototype.draw = function (A, e) { if (this.svgGroup.parentNode && this.isDone()) { var t = this._position; e && (t = e(t)), this.volumeText.setPosition(t[0], t[1]), this.updateTexts() } }, pg.prototype.measureResult = function () { if (this._volume) return this._volume }, pg.prototype.resultToDisplayOfVolume = function (A) { var e = A, t = this.unitOfModel; return this.adjustOption && (e = this.adjustOption.adjustVolume(A), t = this.adjustOption.unit), this.unitOnUI && (t && (e = Jp(t, this.unitOnUI, e, 3)), t = this.unitOnUI), t || (t = ""), e = e.toFixed(this.precision), "mm" === t ? t = "mm³" : "m" === t ? t = "m³" : "cm" === t && (t = "cm³"), { value: Number(e), unit: t, text: e + t } }, pg.prototype.updateTexts = function () { this._volume && (this.volumeText.setText(this.resultToDisplayOfVolume(this._volume).text, void 0), this.volumeText.draw()) }, pg.prototype.setSelected = function (A) { Xp.prototype.setSelected.call(this, A) && (A ? (this.volumeText.isShowShadow = !0, this.volumeText.textBackgroundColor = "#ffffff", this.volumeText.textColor = "#009bff", this.volumeText.draw()) : (this.volumeText.isShowShadow = !1, this.volumeText.textBackgroundColor = "#009bff", this.volumeText.textColor = "#ffffff", this.volumeText.draw())) }; var gg = function () { this.pointTransformer = void 0, this.parentDom = void 0, this.viewer = void 0, this.is3DMode = !1, this.isMobile = !1 }, ug = "Distance", fg = "Angle", mg = "Adjust", Cg = "Area", yg = "MinDistance", vg = "Volume", Ig = function (A) { this.config = A, this.config.viewer.measure = this, this.svg = this._createSVG(A.parentDom.clientWidth, A.parentDom.clientHeight), A.parentDom.appendChild(this.svg), this._resize = this._resize.bind(this), this.config.viewer.addEventListener("resize", this._resize), this.setCurrentMode(ug), this.isOpen = !1, this.didEndMeasureCallback = void 0, this._items = [], this._adjustItem = void 0, this._adjustOption = void 0, this._precision = 3, this._unitSetByUser = "mm", this._pickedLine = void 0, this._pickedPoint = void 0, this._pickedPanel = void 0, this._selectedItem = void 0, this.open() }; Ig.prototype.supportUnits = function () { return [{ unit: "mm", title: "毫米" }, { unit: "cm", title: "厘米" }, { unit: "m", title: "米" }] }, Ig.prototype.open = function () { this.isOpen || (this.isOpen = !0, this._handleKeyUp = this._handleKeyUp.bind(this), document.addEventListener("keyup", this._handleKeyUp)) }, Ig.prototype.close = function () { this.svg.parentNode.removeChild(this.svg), this.isOpen = !1, this.config.is3DMode && (this.config.viewer.clearSelection(), this.config.viewer.render()), this.config.viewer.measure = void 0, document.removeEventListener("keyup", this._handleKeyUp), this.config.viewer.removeEventListener("resize", this._resize) }, Ig.prototype.setCurrentMode = function (A) { if (this.config.is3DMode || A !== vg && A !== yg) if (this._currentMode !== A && (this._currentMode = A, this._currentMeasureItem && (this._currentMeasureItem instanceof og && this.config.is3DMode && (this.config.viewer.clearSelection(), this.config.viewer.render()), this._currentMeasureItem.remove(), this._currentMeasureItem = void 0)), this._currentMode === mg) { var e = this._adjustItem ? this._adjustItem : this._currentMeasureItem; (e || e instanceof $p) && e.isDone() && (e.add(), e.draw(void 0, this.config.pointTransformer), this.didEndMeasureCallback && this.didEndMeasureCallback(e.measureResult())) } else this._adjustItem && this._adjustItem.remove() }, Ig.prototype.getCurrentMode = function () { return this._currentMode }, Ig.prototype.getCurrentUnit = function () { return this._unitSetByUser }, Ig.prototype.setUnit = function (A) { if (A && this._unitSetByUser !== A) { this._unitSetByUser = A; for (var e = 0, t = this._items.length; t > e; e += 1) { this._items[e].changeUnit(A) } this._adjustOption && (this._adjustOption.valueAfterAdjust = Jp(this._adjustOption.unit, A, this._adjustOption.valueAfterAdjust, 0), this._adjustOption.unit = A) } }, Ig.prototype.getCurrentPrecision = function () { return this._precision }, Ig.prototype.setPrecision = function (A) { if (A && this._precision !== A) { this._precision = A; for (var e = 0, t = this._items.length; t > e; e += 1) { this._items[e].changePrecision(A) } this._adjustItem && this._adjustItem.changePrecision(A) } }, Ig.prototype.clearAllMeasure = function () { for (var A = 0, e = this._items.length; e > A; A += 1) { this._items[A].remove() } this._items = [], this._selectedItem = void 0 }, Ig.prototype.removeSelectedMeasure = function () { if (this._selectedItem) { for (var A = 0, e = this._items.length; e > A; A += 1) if (this._items[A] === this._selectedItem) { this._selectedItem.remove(), this._items.splice(A, 1); break } (this._selectedItem instanceof pg || this._selectedItem instanceof og) && this.config.is3DMode && (this.config.viewer.clearSelection(), this.config.viewer.render()), this._selectedItem = void 0, this._items.length > 0 && (this._selectedItem = this._items[this._items.length - 1], this._selectedItem.setSelected(!0)) } }, Ig.prototype.setAdjustForCurrentAdjustItem = function (A, e) { if (A && e && this._currentMode === mg && (this._currentMeasureItem && this._currentMeasureItem instanceof $p && this._currentMeasureItem.isDone() && (this._adjustItem && this._adjustItem.remove(), this._adjustItem = this._currentMeasureItem, this._currentMeasureItem = void 0), this._adjustItem && this._adjustItem.isDone())) { var t = new Ag; t.unit = A, t.valueBeforeAdjust = this._adjustItem.measureResult().distance, t.valueAfterAdjust = e, this._adjustOption = t; for (var i = 0, o = this._items.length; o > i; i += 1) { this._items[i].adjustWithOption(this._adjustOption) } this._adjustItem.adjustWithOption(this._adjustOption) } }, Ig.prototype.cancelCurrentAdjust = function () { if (this._adjustItem && (this._adjustItem.remove(), this._adjustItem = void 0), this._currentMeasureItem instanceof $p && (this._currentMeasureItem.remove(), this._currentMeasureItem = void 0), this._adjustOption) { for (var A = 0, e = this._items.length; e > A; A += 1) { this._items[A].unAdjustWithOption(this._adjustOption) } this._adjustOption = void 0 } }, Ig.prototype.cancelCurrentMeasure = function () { !this._currentMeasureItem || this._currentMeasureItem instanceof $p || (this._currentMeasureItem.remove(), this._currentMeasureItem = void 0) }, Ig.prototype.processIntersect = function (A) { if (this.isOpen) { if (!A) return this._hidePickedLine(), void this._hidePickedPoint(); if (A.pickPoint) { var e = [A.pickPoint.x, A.pickPoint.y, void 0 === A.pickPoint.z ? 0 : A.pickPoint.z], t = e; if (A.pick) { if (this._currentMode === mg && this._currentMeasureItem && this._currentMeasureItem.isDone() && (this._currentMeasureItem.remove(), this._currentMeasureItem = void 0), this._currentMeasureItem || this._createNewItem(), !this._currentMeasureItem) return; if (this._currentMeasureItem instanceof og) { var i = this._currentMeasureItem.pickedComponentKeys; if (i.push(A.userId), 2 === i.length) { var o = this.config.viewer.calculateMinDistance(i[0], i[1]); if (o && o.start && o.end) this._currentMeasureItem.setData([ [o.start.x, o.start.y, o.start.z], [o.end.x, o.end.y, o.end.z] ], o.minDistance, A.measureUnit), this._currentMeasureItem.draw(void 0, this.config.pointTransformer); else this._currentMeasureItem = void 0 } this.config.viewer.addToSelection(i), this.config.viewer.render() } else if (this._currentMeasureItem instanceof pg) { var n = this._currentMeasureItem.pickedComponentKeys; if (0 === n.length) { n.push(A.userId); var r = this.config.viewer.calculateComponentVolume(n[0]); r && (this._currentMeasureItem.setData(r.position, r.volume, A.measureUnit), this._currentMeasureItem.draw(void 0, this.config.pointTransformer)), this.config.viewer.addToSelection(n), this.config.viewer.render() } } else t = void 0, this._currentMeasureItem.addPickedPoint(e, A.measureUnit, this.config.pointTransformer), this._currentMeasureItem.draw(t, this.config.pointTransformer); if (this._currentMeasureItem && this._currentMeasureItem.isDone()) { this._currentMeasureItem instanceof $p || !this._adjustOption || this._currentMeasureItem.adjustWithOption(this._adjustOption); var a = this._currentMeasureItem.measureResult(); this._currentMeasureItem instanceof $p || (this._items.push(this._currentMeasureItem), this._selectedItem && (this._selectedItem.setSelected(!1), this._selectedItem = void 0), this._selectedItem = this._currentMeasureItem, this._selectedItem.setSelected(!0), this._currentMeasureItem = void 0), this.didEndMeasureCallback && this.didEndMeasureCallback(a) } } else this._currentMeasureItem && this._currentMeasureItem.draw(t, this.config.pointTransformer) } this._currentMode !== yg && this._currentMode !== vg && (A.pickPoint && A.isAbsorbPoint ? this._showPickedPoint(A.pickPoint) : this._hidePickedPoint(), A.pickPlane ? this._showPickedPanel(A.pickPoint, A.normal) : this._hidePickedPanel(), A.pickLine ? this._showPickedLine(A.pickLine[0], A.pickLine[1], A.measureUnit) : this._hidePickedLine()) } }, Ig.prototype.update = function () { if (this.isOpen) { for (var A = 0, e = this._items.length; e > A; A += 1) { this._items[A].draw(void 0, this.config.pointTransformer) } this._currentMeasureItem && this._currentMeasureItem.draw(void 0, this.config.pointTransformer), this._adjustItem && this._adjustItem.draw(void 0, this.config.pointTransformer), this._pickedLine && this._pickedLine.isVisible() && this._pickedLine.draw(void 0, this.config.pointTransformer), this._pickedPanel && this._pickedPanel.isVisible() && this._pickedPanel.draw(this.config.pointTransformer) } }, Ig.prototype.changeSelect = function () { for (var A = 0, e = this._items.length; e > A; A += 1) { var t = this._items[A]; t.setSelected(this._selectedItem === t) } }, Ig.prototype._resize = function () { this.svg.style.width = this.config.parentDom.clientWidth, this.svg.style.height = this.config.parentDom.clientHeight }, Ig.prototype._createNewItem = function () { switch (this._currentMode) { case ug: this._currentMeasureItem = new ig(this.svg, this.config.isMobile, this._items.length + 1); break; case fg: this._currentMeasureItem = new eg(this.svg); break; case mg: this._currentMeasureItem = new $p(this.svg); break; case Cg: this._currentMeasureItem = new tg(this.svg); break; case yg: this._currentMeasureItem = new og(this.svg); break; case vg: this._currentMeasureItem = new pg(this.svg) } if (this._currentMeasureItem) { this._currentMeasureItem.is3DMode = this.config.is3DMode, this._currentMeasureItem instanceof $p || (this._adjustOption && this._currentMeasureItem.adjustWithOption(this._adjustOption), this._unitSetByUser && this._currentMeasureItem.changeUnit(this._unitSetByUser)), this._currentMeasureItem.changePrecision(this._precision); var A = this; this._currentMeasureItem.setClickCallback((function (e) { e.isDone() && (A._selectedItem = e, A.changeSelect()) })) } }, Ig.prototype._showPickedLine = function (A, e, t) { var i = [A.x, A.y, void 0 === A.z ? 0 : A.z], o = [e.x, e.y, void 0 === e.z ? 0 : e.z]; this._pickedLine || (this._pickedLine = new ng(this.svg), this._pickedLine.unitOfModel = t), this._adjustOption && this._pickedLine.adjustWithOption(this._adjustOption), this._pickedLine.changeUnit(this._unitSetByUser ? this._unitSetByUser : t), this._pickedLine.changePrecision(this._precision), this._pickedLine.add(), this._pickedLine.setData(i, o), this._pickedLine.draw(void 0, this.config.pointTransformer) }, Ig.prototype._hidePickedLine = function () { this._pickedLine && this._pickedLine.remove() }, Ig.prototype._showPickedPoint = function (A) { this._pickedPoint || (this._pickedPoint = new dg(this.svg)), this._pickedPoint.add(), this._pickedPoint.setupWithPoint(A), this._pickedPoint.draw(this.config.pointTransformer) }, Ig.prototype._hidePickedPoint = function () { this._pickedPoint && this._pickedPoint.remove() }, Ig.prototype._showPickedPanel = function (A, e) { this._pickedPanel || (this._pickedPanel = new hg(this.svg, this.config.viewer)), this._pickedPanel.add(), this._pickedPanel.setupWithPoint(A, e), this._pickedPanel.draw(this.config.pointTransformer) }, Ig.prototype._hidePickedPanel = function () { this._pickedPanel && this._pickedPanel.remove() }, Ig.prototype._createSVG = function (A, e) { var t = Lp(); return t.style.width = A + "px", t.style.height = e + "px", t.style.position = "absolute", t.style.left = "0", t.style.top = "0", t }, Ig.prototype._handleKeyUp = function (A) { var e = A.keyCode; 27 === e ? this.cancelCurrentMeasure() : 46 === e && this.removeSelectedMeasure() }; var Eg = function (A) { yp.call(this, Pc.PICK_BY_MEASURE), this.controlManager = A.controlManager, this.pickHelper = new kp(A.cameraControl), this.mouseDown = new s, this.lastEvent = null, this.pick = !1, this.pickPoint = new y; var e = A.getRenderer().domElement.parentElement, t = new gg; t.parentDom = e, t.pointTransformer = A.getScreenCoordFromSceneCoord.bind(A), t.viewer = A, t.is3DMode = !0, this.measure = new Ig(t); var i = this; A.cameraControl.addEventListener(Rc.ON_CAMERA_CHANGE, (function () { i.measure.update() })), A.clearSelection() }; (Eg.prototype = Object.create(yp.prototype)).constructor = Eg, Eg.prototype.destroy = function () { yp.prototype.destroy.call(this), this.editorManager = null, this.mouseDown = null, this.lastEvent = null, this.pickPoint = null, this.pickHelper.destroy(), this.pickHelper = null }, Eg.prototype.processMouseDown = function (A) { return !!mh.isMobileDevice() || (A.button === t.LEFT ? (this.mouseDown.x = A.clientX, this.mouseDown.y = A.clientY, !1) : yp.prototype.processMouseDown.call(this, A)) }, Eg.prototype.processMouseMove = function (A) { return !1 }, Eg.prototype.processMouseUp = function (A) { if (mh.isMobileDevice()) return !0; if (A.button === t.LEFT) { if (2 >= new s(A.clientX, A.clientY).distanceTo(this.mouseDown)) { var e = this.pickPoint.clone(), i = void 0; return i = A.shiftKey ? this.pickHelper.handleShiftMeasure(A, !0, e) : this.pickHelper.handleMouseMeasure(A, !0, e), this.measure.processIntersect(i), e.equals(this.pickPoint) || (this.pick = !this.pick, this.pickPoint.copy(e)), this.controlManager.isUpdateRenderList = !0, !0 } return !0 } return yp.prototype.processMouseUp.call(this, A) }, Eg.prototype.processKeyDown = function (A) { return 16 === A.keyCode || yp.prototype.processKeyDown.call(this, A) }, Eg.prototype.processHover = function (A) { if (mh.isMobileDevice()) return !0; var e = void 0; return e = A.shiftKey ? this.pickHelper.handleShiftMeasure(A, !1, this.pickPoint) : this.pickHelper.handleMouseMeasure(A, !1, this.pickPoint), this.measure.processIntersect(e), !0 }, Eg.prototype.processTouchstart = function (A) { return this.mouseDown.x = A.touches[0].clientX, this.mouseDown.y = A.touches[0].clientY, A.clientX = A.touches[0].clientX, A.clientY = A.touches[0].clientY, this.lastEvent = A, yp.prototype.processTouchstart.call(this, A) }, Eg.prototype.processTouchmove = function (A) { return this.lastEvent = null, yp.prototype.processTouchmove.call(this, A) }, Eg.prototype.processTouchend = function (A) { if (null !== this.lastEvent) { var e = this.pickHelper.handleMouseMeasure(this.lastEvent, !0, this.pickPoint); this.measure.processIntersect(e), this.controlManager.isUpdateRenderList = !0 } return yp.prototype.processTouchend.call(this, A) }, Eg.prototype.touchPointMove = function (A) { this.measure.processIntersect(this.pickHelper.handleMouseMeasure(A, !1, this.pickPoint)) }, Eg.prototype.touchPointEnd = function (A) { var e = this.pickPoint.clone(), t = this.pickHelper.handleMouseMeasure(A, !0, e); return this.measure.processIntersect(t), e.equals(this.pickPoint) || (this.pick = !this.pick, this.pickPoint.copy(e)), this.controlManager.isUpdateRenderList = !0, !0 }, Eg.prototype.onExit = function (A) { this.measure.close(); var e = this.pickHelper.scene; e.hasGroup(gp.MEASUREPICKPLANE) && e.removeGroupByName(gp.MEASUREPICKPLANE) }; var Bg, xg, Sg, wg = { pickByRect: function (A, e, t, i, o, n) { var r = [], a = i.octantToObjectMap, s = (A.getMatrixGlobal(), i.sceneState), l = new aA; function c(A, t, i) { A && A.frustumIntersect(e, t, i) } var h = i.filter, d = h._hasVisibleFilter(), p = h._hasPickableFilter(); if (t !== Kc.Clear) { var g, u, f = null, m = []; for (var C in a) if (a.hasOwnProperty(C)) { var y = i.getModel(C); (f = a[C]).mesh; var v = y && y.kdTreeNode, I = []; if (Array.isArray(v)) for (var E = 0, B = v.length; B > E; E += 1) { var x = v[E], S = x.modelKey, w = (new M).copy(y.getModelMatrix()); S && w.multiply(y.subModel[S]), c(x, I, w) } else c(v, I, y.getModelMatrix()); var b = Object.keys(y.manager.explosionList); y && y.manager && b.length > 0 && (I = I.concat(b)); for (var U = 0, F = (m = uh.unique(I)).length; F > U; U += 1) { var K = f.info[m[U]]; if (K) for (var Q = 0, R = K.length; R > Q; Q += 1) { var T = K[Q]; (u = void 0, u = i.isHiddenSourceObjectUserId((g = T).userId), d && !h._isVisible(g) || p && !h._isPickable(g) || u) || (l.copy(T.boundingBox), l.applyMatrix4(y.getModelMatrix()), this._intersectBox(e, l, n) && !this._clipBox(o, l) && r.push(T.userId)) } } } return (r = r.concat(this.pickNonModelObjectsByRect(o, i, e, n))).length > 0 && (Kc.Remove === t ? (s.removeSelection(r), i.dispatchEvent({ type: Rc.ON_RECTPICK_REMOVE, list: r })) : Kc.Add === t && (s.addSelection(r), i.dispatchEvent({ type: Rc.ON_RECTPICK_ADD, list: r }))), r } s.clearSelection() }, getObjectsInBox: function (A, e, t, i, o) { var n = {}, r = t.octantToObjectMap, a = (A.getMatrixGlobal(), new aA); function s(A) { for (var e = new y, t = 0; 8 > t; t += 1) if (e.x = 4 > t ? A.min.x : A.max.x, e.y = 2 > t / 2 ? A.min.y : A.max.y, e.z = t % 2 == 0 ? A.min.z : A.max.z, !i.clipPoint(e)) return !1; return !0 } function l(A) { return o ? !(e.min.x > A.min.x || A.max.x > e.max.x || e.min.y > A.min.y || A.max.y > e.max.y || e.min.z > A.min.z || A.max.z > e.max.z) : !(e.min.x > A.max.x || A.min.x > e.max.x || e.min.y > A.max.y || A.min.y > e.max.y || e.min.z > A.max.z || A.min.z > e.max.z) } function c(A) { return Boolean(!(e.max.x > A.max.x || A.min.x > e.min.x || e.max.y > A.max.y || A.min.y > e.min.y || e.max.z > A.max.z || A.min.z > e.min.z)) } var h = t.filter, d = h._hasVisibleFilter(), p = h._hasPickableFilter(); var g, u, f = null; for (var m in r) if (r.hasOwnProperty(m)) { var C = t.getModel(m); for (var v in (f = r[m]).info) if (f.info.hasOwnProperty(v)) { var I = f.info[v]; if (!I) continue; for (var E = 0, B = I.length; B > E; E += 1) { var x = I[E]; (u = void 0, u = t.isHiddenSourceObjectUserId((g = x).userId), d && !h._isVisible(g) || p && !h._isPickable(g) || u) || (a.copy(x.boundingBox), a.applyMatrix4(C.getModelMatrix()), !l(a) || c(a) || s(a) || (n[x.userId] = !0)) } } } var S = []; for (var w in n) S.push(w); return S }, pickNonModelObjectsByRect: function (A, e, t, i) { var o = [], n = e.getNodeInfosInPlugins(), r = new aA; for (var a in n) if (n.hasOwnProperty(a)) { var s = n[a]; for (var a in s) if (s.hasOwnProperty(a)) { var l = s[a][0].mesh; if (l) { l instanceof Array || (l = [l]), r.empty(); for (var c = 0, h = l.length; h > c; c += 1) { var d = l[c]; d instanceof H && r.expandByObject(d) } this._intersectBox(t, r, i) && !this._clipBox(A, r) && o.push(a) } } } return o }, _intersectBox: (xg = new y, Sg = new y, function (A, e, t) { for (var i = 0, o = A.planes, n = 0; 6 > n; n += 1) { var r = o[n]; xg.x = r.normal.x > 0 ? e.min.x : e.max.x, Sg.x = r.normal.x > 0 ? e.max.x : e.min.x, xg.y = r.normal.y > 0 ? e.min.y : e.max.y, Sg.y = r.normal.y > 0 ? e.max.y : e.min.y, xg.z = r.normal.z > 0 ? e.min.z : e.max.z, Sg.z = r.normal.z > 0 ? e.max.z : e.min.z; var a = r.distanceToPoint(xg), s = r.distanceToPoint(Sg); if (0 > a && 0 > s) return !1; 0 > a * s || (i += 1) } return t ? i >= 2 : 6 === i } ), _clipBox: (Bg = new y, function (A, e) { for (var t = 0; 8 > t; t += 1) if (Bg.x = 4 > t ? e.min.x : e.max.x, Bg.y = 2 > t / 2 ? e.min.y : e.max.y, Bg.z = t % 2 == 0 ? e.min.z : e.max.z, !A.clipPoint(Bg)) return !1; return !0 } ) }, Mg = function (A, e, t) { yp.call(this, A), this.cameraControl = e, this.frustum = new Ze, this.startPt = new s, this.endPt = new s, this.eventDispatcher = t }; (Mg.prototype = Object.create(yp.prototype)).constructor = Mg, Mg.prototype.destroy = function (A) { yp.prototype.destroy.call(this), this.cameraControl = null, this.frustum = null, this.startPt = null, this.endPt = null, this.eventDispatcher = null }, Mg.prototype.onUpdateUI = function (A) { this.eventDispatcher.dispatchEvent({ type: Rc.ON_CONTROL_UPDATEUI, data: A, editor: this.name }) }, Mg.prototype.updateFrustum = function (A, e) { var t = this.startPt.x, i = this.endPt.x, o = this.startPt.y, n = this.endPt.y; if (t > i) { var r = t; t = i, i = r } if (o > n) { var a = o; o = n, n = a } if (i - t == 0 || n - o == 0) return !1; var s = this.cameraControl, l = s.getContainerDimensions(); return A && s.computeFrustum(t, i, o, n, this.frustum, l), e && this.onUpdateUI({ visible: !0, dir: this.endPt.x > this.startPt.x, left: t - l.left, top: o - l.top, width: i - t, height: n - o }), !0 }; var bg = function (A) { Mg.call(this, Pc.PICK_BY_RECT, A.cameraControl, A.modelManager), this.viewer = A, this.scene = A.getScene(), this.pickHelper = new kp(this.cameraControl), this.activatePick = !1, this.pressKey = "", this.pickPoint = new y, this.snapIsEnabled = !1 }; (bg.prototype = Object.create(Mg.prototype)).constructor = bg, bg.prototype.destroy = function () { Mg.prototype.destroy.call(this), this.pickHelper.destroy(), this.pickHelper = null, this.viewer = null, this.scene = null, this.pickPoint = null }, bg.prototype.setPressKey = function (A) { this.pressKey = A }, bg.prototype.processMouseDown = function (A) { return A.preventDefault(), this.activatePick = A.ctrlKey || A.altKey, this.activatePick && A.button === t.LEFT ? (this.startPt.set(A.clientX, A.clientY), !0) : Mg.prototype.processMouseDown(this, A) }, bg.prototype.processMouseMove = function (A) { return this.activatePick && A.button === t.LEFT ? (this.endPt.set(A.clientX, A.clientY), this.updateFrustum(!1, !0), !0) : Mg.prototype.processMouseMove(this, A) }, bg.prototype.processMouseUp = function (A) { if (this.onUpdateUI({ visible: !1 }), this.activatePick && A.button === t.LEFT) { if (this.activatePick = !1, 2 > Math.abs(this.startPt.x - A.clientX) && 2 > Math.abs(this.startPt.y - A.clientY)) return this.pickHelper.click(A, null), !0; if (this.endPt.set(A.clientX, A.clientY), !this.updateFrustum(!0, !1)) return this.pickHelper.click(A), !0; var e = Kc.Clear, i = this.pressKey || A.ctrlKey && "ctrl" || A.altKey && "alt" || ""; return "ctrl" === i ? e = Kc.Add : "alt" === i && (e = Kc.Remove), wg.pickByRect(this.scene, this.frustum, e, this.cameraControl.viewer.modelManager, this.viewer, this.startPt.x > this.endPt.x), this.pickHelper.lastPickedUserId = "", this.cameraControl.updateView(!0), !0 } return Mg.prototype.processMouseUp(this, A) }, bg.prototype.processTouchstart = function (A) { return A.preventDefault(), this.pressKey ? (this.startPt.set(A.changedTouches[0].pageX, A.changedTouches[0].pageY), !0) : Mg.prototype.processTouchstart(this, A) }, bg.prototype.processTouchmove = function (A) { return this.pressKey ? (this.endPt.set(A.changedTouches[0].pageX, A.changedTouches[0].pageY), this.updateFrustum(!1, !0), !0) : Mg.prototype.processMouseMove(this, A) }, bg.prototype.processTouchend = function (A) { this.onUpdateUI({ visible: !1 }); var e = A.changedTouches[0].pageX, t = A.changedTouches[0].pageY; if (this.pressKey) { if (2 > Math.abs(this.startPt.x - e) && 2 > Math.abs(this.startPt.y - t)) return this.pickHelper.click(A, null), !0; if (this.endPt.set(e, t), !this.updateFrustum(!0, !1)) return this.pickHelper.click(A), !0; var i = Kc.Clear, o = this.pressKey; return "ctrl" === o ? i = Kc.Add : "alt" === o && (i = Kc.Remove), wg.pickByRect(this.scene, this.frustum, i, this.cameraControl.viewer.modelManager, this.viewer, this.startPt.x > this.endPt.x), this.pickHelper.lastPickedUserId = "", this.cameraControl.updateView(!0), !0 } return Mg.prototype.processTouchend(this, A) }, bg.prototype.processHover = function (A) { if (this.snapIsEnabled) return vc.IsMobile || this.pickHelper.handleMouseMeasure(A, !1, this.pickPoint, Rc.ON_HOVER_SNAP), !0 }, bg.prototype.enableSnap = function (A) { this.snapIsEnabled = A }; var Ug = function (A) { Mg.call(this, Pc.ZOOM_BY_RECT, A.cameraControl, A.modelManager), this.scene = A.getScene(), this.activateZoom = !1 }; (Ug.prototype = Object.create(Mg.prototype)).constructor = Ug, Ug.prototype.destroy = function () { Mg.prototype.destroy.call(this), this.scene = null }, Ug.prototype.processMouseDown = function (A) { return A.button === t.LEFT ? (this.startPt.set(A.clientX, A.clientY), this.activateZoom = !0, !0) : Mg.prototype.processMouseDown.call(this, A) }, Ug.prototype.processMouseMove = function (A) { return this.activateZoom ? (this.endPt.set(A.clientX, A.clientY), this.updateFrustum(!1, !0), !0) : Mg.prototype.processMouseMove.call(this, A) }, Ug.prototype.processMouseUp = function (A) { return this.activateZoom ? (this.activateZoom = !1, this.onUpdateUI({ visible: !1 }), this.endPt.set(A.clientX, A.clientY), this.updateFrustum(!0, !1) && this.zoomToRectangle(), !0) : Mg.prototype.processMouseUp.call(this, A) }, Ug.prototype.zoomToRectangle = function () { var A = this.cameraControl.camera, e = this.cameraControl.camera.target, t = this.cameraControl.getContainerDimensions(), i = this.startPt.x, o = this.startPt.y, n = this.endPt.x, r = this.endPt.y, a = Math.abs(n - i), l = Math.abs(o - r); if (0 !== a && 0 !== l) { var c = new s((i + n) / 2, (o + r) / 2), h = A.position.clone(), d = e.clone().sub(h), p = d.length(), g = 0, u = this.cameraControl.getIntersectContext(c), f = this.cameraControl.intersector.hitTest(u); if (f) { var m = a / l > t.width / t.height ? a / t.width : l / t.height, C = f.distanceTo(h) * m; d.normalize(), g = d.clone().negate().multiplyScalar(C) } else { var v = {}; v.left = Math.min(i, n), v.top = Math.min(o, r), v.right = Math.max(i, n), v.bottom = Math.max(o, r); var I = this.scene.getNearDepthByRect(this.frustum, A); if (I === 1 / 0) return; var E = new y((i + n) / 2, (o + r) / 2, I), B = new y(v.left, v.top, I), x = this.clientToWorld(E), S = this.clientToWorld(B), w = x.clone().sub(S).length(); f = x.clone(), d.normalize(), g = d.clone().negate().multiplyScalar(w) } h = f.clone().add(g), A.position.copy(h), e.copy(h).sub(g.clone().normalize().multiplyScalar(p)), this.cameraControl.updateView(!0) } }, Ug.prototype.worldToClient = function (A) { var e = this.cameraControl.camera, t = new y(A.x, A.y, A.z); return t.project(e), t }, Ug.prototype.clientToWorld = function (A) { var e = this.cameraControl.getContainerDimensions(), t = this.cameraControl.camera, i = new y; return i.x = A.x / e.width * 2 - 1, i.y = -A.y / e.height * 2 + 1, i.z = A.z, i.unproject(t), i }; var Fg = function (A, e) { this.name = A, this.cameraControl = e, this.mouseButtons = { ORBIT: t.LEFT, PAN2: t.MIDDLE, PAN: t.RIGHT }, this.StateType = { NONE: -1, ROTATE: 0, DOLLY: 1, PAN: 2 }, this.state = this.StateType.NONE, this.zoomSpeed = Math.pow(.95, .2), this.defaultMovementSpeed = .005 * vc.SceneSize, this.movementSpeed = this.defaultMovementSpeed, this.minMovementSpeed = .001, this.defaultKeyPanSpeed = 2, this.keyPanSpeed = this.defaultKeyPanSpeed, this.minKeyPanSpeed = .01, this.wheelZoomFactor = 45e-5, this.pointerLock = !1 }; Fg.prototype.getName = function () { return this.name }, Fg.prototype.destroy = function () { this.scene = null, this.domElement = null, this.cameraControl = null, this.mouseButtons = null, this.StateType = null }, Fg.prototype.onExit = function () {}, Fg.prototype.onEnter = function () {}, Fg.prototype.processMouseDown = function (A) {}, Fg.processMouseMove = function (A) {}, Fg.prototype.processMouseUp = function (A) {}, Fg.prototype.processMouseWheel = function (A) {}, Fg.prototype.processMouseDoubleClick = function (A) {}, Fg.prototype.processKeyDown = function (A) {}, Fg.prototype.processKeyUp = function (A) {}, Fg.prototype.processTouchstart = function (A) {}, Fg.prototype.processTouchmove = function (A) {}, Fg.prototype.processTouchend = function (A) {}, Fg.prototype.processHover = function (A) {}, Fg.prototype.processMovement = function (A) {}, Fg.prototype.processPointerLockEnter = function (A) {}, Fg.prototype.processPointerLockExit = function (A) {}, Fg.prototype.moveTo = function (A, e, t) {}, Fg.prototype.rotateTo = function (A) {}, Fg.prototype.dispatchEvent = function (A) { this.cameraControl.viewer.getControlManager().dispatchEvent(A) }, Fg.prototype.getDomElement = function () { return this.domElement }, Fg.prototype.getRendererDomElement = function () { return this.rendererDomElement }, Fg.prototype.updateButtons = function (A) { void 0 !== A.ORBIT && (this.mouseButtons.ORBIT = A.ORBIT), void 0 !== A.PAN && (this.mouseButtons.PAN = A.PAN), void 0 !== A.PAN2 && (this.mouseButtons.PAN2 = A.PAN2), void 0 !== A.ZOOM && (this.mouseButtons.ZOOM = A.ZOOM) }; var Kg = function (A) { Fg.call(this, Gc.FLY, A), this.lookSpeed = .001, this.constrainPitch = !0, this.pitchMin = a.degToRad(5) - .5 * Math.PI, this.pitchMax = .5 * Math.PI - this.pitchMin, this.pitchDeltaTotal = 0, this.moveState = qc.NONE, this.rotateStart = new s, this.rotateEnd = new s, this.rotateDelta = new s, this._panStart = new s, this._panEnd = new s, this._panDelta = new s, this._pan = new y, this._worldDimension = new s, this.lastMousePoint = new s, this.isLockHeight = !1, this.lockedHeight = 0, this.pickHelper = new kp(A), this.intersectOfMouseDown = null }; (Kg.prototype = Object.create(Fg.prototype)).constructor = Kg, Kg.prototype.destroy = function () { Fg.prototype.destroy.call(this), this.cameraControl = null, this.scene = null, this.rotateStart = null, this.rotateEnd = null, this.rotateDelta = null, this._panStart = null, this._panEnd = null, this._panDelta = null, this._pan = null, this._worldDimension = null, this.lastMousePoint = null, this.intersectOfMouseDown = null, this.pickHelper.destroy(), this.pickHelper = null }, Kg.prototype.processMouseDown = function (A) { A.preventDefault(), A.stopPropagation(), this.lastMousePoint.set(A.clientX, A.clientY); var e = this.cameraControl; if (this.intersectOfMouseDown = null, A.button === this.mouseButtons.ORBIT) { if (jh.NoRotate) return; this.rotateStart.set(A.clientX, A.clientY), this.state = this.StateType.ROTATE, this.dispatchEvent({ type: Rc.ON_CONTROL_BEGIN, name: "look", control: this.name }) } else if (A.button === this.mouseButtons.PAN || A.button === this.mouseButtons.PAN2) { if (jh.NoPan) return; this._panStart.set(A.clientX, A.clientY), this._worldDimension = e.getWorldDimension(A.clientX, A.clientY), this.intersectOfMouseDown = e.getLastIntersect(), this.state = this.StateType.PAN, this.isLockHeight && (this.lockedHeight = A.clientY) } }, Kg.prototype.doPan = function (A, e) { var t = this.cameraControl; this._panEnd.set(A, this.isLockHeight ? this.lockedHeight : e), this._panDelta.subVectors(this._panEnd, this._panStart), 0 === this._panDelta.x && 0 === this._panDelta.y || (t.panOnWorld(this._panStart, this._panEnd, this._pan, this._worldDimension), t.adjustCameraForPan(this._pan), this._panStart.copy(this._panEnd), t.update(!0)) }, Kg.prototype.processMouseMove = function (A) { var e = this.cameraControl; (A.preventDefault(), this.state === this.StateType.ROTATE) ? (this.rotateEnd.set(A.clientX, A.clientY), this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart), this.rotateStart.copy(this.rotateEnd), (0 !== this.rotateDelta.x || 0 !== this.rotateDelta.y) && e.rotateForFly(this.rotateDelta.x * this.lookSpeed, this.rotateDelta.y * this.lookSpeed, this.pitchMin, this.pitchMax)) : this.state === this.StateType.PAN && this.doPan(A.clientX, A.clientY) }, Kg.prototype.processMouseUp = function (A) { if (A.preventDefault(), A.stopPropagation(), A.button !== t.LEFT || this.lastMousePoint.x !== A.clientX || this.lastMousePoint.y !== A.clientY) { this.intersectOfMouseDown = null; var e = this.cameraControl; switch (this.state) { case this.StateType.ROTATE: this.rotateDelta.set(0, 0); e.rotateForFly(0, 0, this.pitchMin, this.pitchMax), this.dispatchEvent({ type: Rc.ON_CONTROL_END, name: "look", control: this.name }); break; case this.StateType.PAN: this.doPan(A.clientX, A.clientY) } e.endOperation(), this.state = this.StateType.NONE } else this.pickHelper.click(A, this.intersectOfMouseDown) }, Kg.prototype.processHover = function (A) { this.pickHelper.handleMouseHover(A) }, Kg.prototype.processMouseWheel = function (A) { A.preventDefault(), A.stopPropagation(); var e = this.cameraControl; if (!jh.NoZoom) { var t = A.wheelDelta || A.detail; t = Math.abs(t) > 10 ? t : 40 * -t, t *= 5e-4, jh.ReverseWheelDirection && (t *= -1), this.cameraControl.delayHandle(); var i = e.getContainerDimensions(); e.zoom(t, i.left + .5 * i.width, i.top + .5 * i.height) } }, Kg.prototype.processKeyDown = function (A) { if (!jh.NoKey && !A.altKey) { var e = qc, t = e.NONE; switch (A.keyCode) { case Ph: this.movementSpeed = this.defaultMovementSpeed; break; case Vh: this.movementSpeed *= 1.1; break; case Gh: this.movementSpeed *= .9, this.minMovementSpeed > this.movementSpeed && (this.movementSpeed = this.minMovementSpeed); break; case Fh: case Nh: t = e.FORWARD; break; case Qh: case Lh: t = e.BACK; break; case Uh: case Rh: t = e.LEFT; break; case Kh: case Th: t = e.RIGHT; break; case Dh: t = e.UP; break; case kh: t = e.DOWN } t !== e.NONE && (this.moveState |= t, this.dispatchEvent({ type: Rc.ON_CONTROL_KEYDOWN, event: A, state: t, direction: e, control: this.name }), this.cameraControl.delayHandle(), this.cameraControl.updateFlyMove(this.moveState, this.movementSpeed * jh.MovementSpeedRate)) } }, Kg.prototype.processKeyUp = function (A) { if (!jh.NoKey) { var e = qc, t = e.NONE; switch (A.keyCode) { case Fh: case Nh: t = e.FORWARD; break; case Qh: case Lh: t = e.BACK; break; case Uh: case Rh: t = e.LEFT; break; case Kh: case Th: t = e.RIGHT; break; case Dh: t = e.UP; break; case kh: t = e.DOWN } t !== e.NONE && (this.dispatchEvent({ type: Rc.ON_CONTROL_KEYUP, event: A, state: t, direction: e, control: this.name }), this.moveState &= ~t) } }, Kg.prototype.moveTo = function (A) { this.cameraControl.updateFlyMove(A, this.movementSpeed * jh.MovementSpeedRate) }; var Qg = function (A, e) { Fg.call(this, A, e), this.oldMouseX = -1, this.oldMouseY = -1, this.rotatePivot = null, this._rotateStart = new s, this._rotateEnd = new s, this._rotateDelta = new s, this._lastTrackingPoint = null, this.rotateSpeed = 1, this._dollyStart = new s, this._dollyEnd = new s, this._dollyDelta = new s, this._dollyCenter = new s, this.zoomSpeed = Math.pow(.95, .2), this.modelManager = e.viewer.modelManager, this._panStart = new s, this._panEnd = new s, this._panDelta = new s, this._pan = new y, this._worldDimension = new s, this.pickHelper = new kp(e), this.intersectOfMouseDown = null, this.timeId = null, this.longTapFlag = !1, this.selectPad = (mh.isMobileDevice(), null), this.startPt = new s; var t = this; this.longTap = function () { t.longTapFlag = !0, Bh.log("long tap"), t.selectPad && t.selectPad.showOverlay(t.startPt) }, this._reqid = 0, this._animateBinded = this._animate.bind(this), this._clock = new as, this._moving = !1 }; (Qg.prototype = Object.create(Fg.prototype)).constructor = Qg, Qg.prototype.destroy = function () { Fg.prototype.destroy.call(this), this.modelManager = null, this.intersectOfMouseDown = null, this.rotatePivot = null, this._rotateStart = null, this._rotateEnd = null, this._rotateDelta = null, this._lastTrackingPoint = null, this._dollyStart = null, this._dollyEnd = null, this._dollyDelta = null, this._dollyCenter = null, this._panStart = null, this._panEnd = null, this._panDelta = null, this._pan = null, this._worldDimension = null, this.startPt = null, this._animateBinded = null, this._clock = null, this.timeId && (clearTimeout(this.timeId), this.timeId = null), this.pickHelper.destroy(), this.pickHelper = null, this.selectPad && (this.selectPad.destroy(), this.selectPad = null) }, Qg.prototype.beginPan = function (A, e) { this._panStart.set(A, e), this._worldDimension = this.getWorldDimension(A, e) }, Qg.prototype.processMouseDown = function (A) { this.oldMouseX = A.clientX, this.oldMouseY = A.clientY; var e = this.cameraControl; this.intersectOfMouseDown = null, A.preventDefault(); var t = ""; if (A.button === this.mouseButtons.ORBIT) { if (jh.NoRotate) return; this.rotatePivot = e.calculatePivot(jh.RotatePivotMode, { x: A.clientX, y: A.clientY }), this.state = this.StateType.ROTATE, this._rotateStart.set(A.clientX, A.clientY), this._lastTrackingPoint = null, t = Gc.ORBIT } else if (A.button === this.mouseButtons.ZOOM) { if (jh.NoZoom) return; this.state = this.StateType.DOLLY, this._dollyStart.set(A.clientX, A.clientY), t = Gc.ZOOM } else if (A.button === this.mouseButtons.PAN || A.button === this.mouseButtons.PAN2) { if (jh.NoPan) return; this._panStart.set(A.clientX, A.clientY), this._worldDimension = e.getWorldDimension(A.clientX, A.clientY), this.state = this.StateType.PAN, t = Gc.PAN } this.dispatchEvent({ type: Rc.ON_CONTROL_BEGIN, name: t, control: this.name }) }, Qg.prototype.processMouseMove = function (A) { var e = this.cameraControl; switch (A.preventDefault(), this.state) { case this.StateType.ROTATE: if (this._rotateEnd.set(A.clientX, A.clientY), this._rotateDelta.subVectors(this._rotateEnd, this._rotateStart), 0 === this._rotateDelta.x && 0 === this._rotateDelta.y) return; this._rotateStart.copy(this._rotateEnd), e.processRotate(this._rotateDelta, this.rotatePivot); break; case this.StateType.DOLLY: if (this._dollyEnd.set(A.clientX, A.clientY), this._dollyDelta.subVectors(this._dollyEnd, this._dollyStart), 0 === this._dollyDelta.x && 0 === this._dollyDelta.y) return; this.cameraControl.adjustCameraForDolly(this._dollyDelta.y > 0 ? this.zoomSpeed : 1 / this.zoomSpeed, null), this._dollyStart.copy(this._dollyEnd); break; case this.StateType.PAN: if (this._panEnd.set(A.clientX, A.clientY), this._panDelta.subVectors(this._panEnd, this._panStart), 0 === this._panDelta.x && 0 === this._panDelta.y) return; this.cameraControl.panOnWorld(this._panStart, this._panEnd, this._pan, this._worldDimension), this.cameraControl.adjustCameraForPan(this._pan), this._panStart.copy(this._panEnd) } this.state !== this.StateType.NONE && this.cameraControl.update(!0) }, Qg.prototype.processMouseUp = function (A) { if (this.state === this.StateType.NONE) return !1; this.intersectOfMouseDown = null; var e = this.cameraControl; this.oldMouseX === A.clientX && this.oldMouseY === A.clientY || e.update(!0), this.state = this.StateType.NONE, this.rotatePivot = null, e.endOperation(); var t = ""; return A.button === this.mouseButtons.ORBIT ? t = Gc.ORBIT : A.button === this.mouseButtons.ZOOM ? t = Gc.ZOOM : A.button !== this.mouseButtons.PAN && A.button !== this.mouseButtons.PAN2 || (t = Gc.PAN), this.dispatchEvent({ type: Rc.ON_CONTROL_END, name: t, control: this.name }), !0 }, Qg.prototype.processMouseWheel = function (A) { var e = this.cameraControl; if (!jh.NoZoom) { A.preventDefault(), A.stopPropagation(); var t = 0; A.wheelDelta ? t = A.wheelDelta : A.deltaY && (t = 40 * -A.deltaY), Math.abs(t) > 720 && (t = t > 0 ? 720 : -720), t *= this.wheelZoomFactor, jh.ReverseWheelDirection && (t *= -1), e.zoom(t, A.clientX, A.clientY), e.delayHandle(), this.dispatchEvent({ type: Rc.ON_CONTROL_ZOOM }) } }, Qg.prototype.processKeyDown = function (A) { if (!jh.NoKey && !jh.NoPan) { var e = this.cameraControl, t = null; vc.MergeComponent ? (this.animationStarted || (this.animationStarted = !0, this._start()), t = !1) : (t = !0, e.delayHandle()), this._moving = !0; var i = !1, o = this.movementSpeed * jh.MovementSpeedRate, n = this.keyPanSpeed * jh.MovementSpeedRate; switch (A.keyCode) { case Ph: this.keyPanSpeed = e.defaultKeyPanSpeed, this.movementSpeed = e.defaultMovementSpeed; break; case Vh: this.keyPanSpeed *= 1.1, this.movementSpeed *= 1.1; break; case Gh: this.keyPanSpeed *= .9, this.minKeyPanSpeed > this.keyPanSpeed && (this.keyPanSpeed = this.minKeyPanSpeed), this.movementSpeed *= .9, this.minMovementSpeed > this.movementSpeed && (this.movementSpeed = this.minMovementSpeed); break; case Dh: e.pan(0, n), i = !0; break; case kh: e.pan(0, -n), i = !0; break; case Uh: e.processRotate({ x: -10, y: 0 }, this.rotatePivot), i = !0; break; case Rh: e.pan(n, 0), i = !0; break; case Kh: e.processRotate({ x: 10, y: 0 }, this.rotatePivot), i = !0; break; case Th: e.pan(-n, 0), i = !0; break; case Fh: e.processRotate({ x: 0, y: -10 }, this.rotatePivot), i = !0; break; case Nh: e.moveStraight(o, !A.shiftKey), i = !0; break; case Qh: e.processRotate({ x: 0, y: 10 }, this.rotatePivot), i = !0; break; case Lh: e.moveStraight(-o, !A.shiftKey), i = !0 } i && t && e.update(!0) } }, Qg.prototype.processKeyUp = function (A) { if (!jh.NoKey && !jh.NoPan) switch (A.keyCode) { case qh: this.cameraControl.viewer.modelManager.sceneState.clearSelection(), this.pickHelper.lastPickedUserId = void 0, this.cameraControl.updateView(!0) } }, Qg.prototype.processTouchstart = function (A) { this.startPt.set(A.touches[0].clientX, A.touches[0].clientY), this.timeId && clearTimeout(this.timeId); var e = this.cameraControl; switch (this.timeId = setTimeout(this.longTap, 400), this.selectPad && this.selectPad.hideOverlay(), A.touches.length) { case 1: if (jh.NoRotate) return; this.rotatePivot = e.calculatePivot(jh.RotatePivotMode, { x: A.touches[0].clientX, y: A.touches[0].clientY }), this._rotateStart.set(A.touches[0].clientX, A.touches[0].clientY), this.state = this.StateType.ROTATE; break; case 2: if (!jh.NoZoom) { var t = A.touches[0].clientX - A.touches[1].clientX, i = A.touches[0].clientY - A.touches[1].clientY; this._dollyStart.set(0, Math.sqrt(t * t + i * i)) } if (!jh.NoPan) this._panStart.set(.5 * (A.touches[0].clientX + A.touches[1].clientX), .5 * (A.touches[0].clientY + A.touches[1].clientY)); break; default: this.state = this.StateType.NONE } }, Qg.prototype.processTouchmove = function (A) { var e = this.cameraControl; switch (A.preventDefault(), A.touches.length) { case 1: if (jh.NoRotate) return; this._rotateEnd.set(A.touches[0].clientX, A.touches[0].clientY), this._rotateDelta.subVectors(this._rotateStart, this._rotateEnd); var t = this.cameraControl.getClientSize(), i = 2 * Math.PI * this._rotateDelta.x / t.x * this.rotateSpeed, o = 2 * Math.PI * this._rotateDelta.y / t.y * this.rotateSpeed; e.handleRotation(i, o, this.rotatePivot), this._rotateStart.copy(this._rotateEnd); break; case 2: if (e.clearTouchRotateState(), !jh.NoZoom) { var n = A.touches[0].clientX - A.touches[1].clientX, r = A.touches[0].clientY - A.touches[1].clientY, a = Math.sqrt(n * n + r * r); if (this._dollyEnd.set(0, a), this._dollyDelta.subVectors(this._dollyEnd, this._dollyStart), Math.abs(this._dollyDelta.y) > 3) { var s = 0; this._dollyDelta.y > 0 ? s = 1 / Math.pow(this.zoomSpeed, .5 * this._dollyDelta.y) : 0 > this._dollyDelta.y && (s = Math.pow(this.zoomSpeed, .5 * -this._dollyDelta.y)), this._dollyStart.copy(this._dollyEnd), e.touchDolly(.5 * (A.touches[0].clientX + A.touches[1].clientX), .5 * (A.touches[0].clientY + A.touches[1].clientY), s), this.state = this.StateType.DOLLY } } if (!jh.NoPan) { var l = .5 * (A.touches[0].clientX + A.touches[1].clientX), c = .5 * (A.touches[0].clientY + A.touches[1].clientY); if (this._panEnd.set(l, c), this._panDelta.subVectors(this._panEnd, this._panStart), 3 > Math.abs(this._panDelta.x) && 3 > Math.abs(this._panDelta.y)) return; this._worldDimension = e.getWorldDimension(l, c), e.panOnWorld(this._panStart, this._panEnd, this._pan, this._worldDimension), e.adjustCameraForPan(this._pan), this._panStart.copy(this._panEnd), this.state = this.StateType.PAN } } e.touchUpdate() }, Qg.prototype.processTouchend = function (A) { this.timeId && clearTimeout(this.timeId), this.longTapFlag && (this.longTapFlag = !1, A.preventDefault()); var e = this.cameraControl; switch (A.touches.length) { case 0: this.state = this.StateType.NONE, e.touchEndHandler(A); break; case 1: if (jh.NoRotate) return; this._rotateStart.set(A.touches[0].clientX, A.touches[0].clientY), this.state = this.StateType.ROTATE } }, Qg.prototype.processHover = function (A) { this.pickHelper.handleMouseHover(A) }, Qg.prototype.moveTo = function (A) { if (void 0 !== A) { var e = this.cameraControl; if (!jh.NoKey && !jh.NoPan) { var t = this.movementSpeed * jh.MovementSpeedRate, i = this.keyPanSpeed * jh.MovementSpeedRate, o = qc; switch (A) { case o.FORWARD: e.moveForward(t, !0); break; case o.BACK: e.moveBackward(t, !0); break; case o.LEFT: e.pan(i, 0); break; case o.RIGHT: e.pan(-i, 0); break; case o.UP: e.pan(0, i); break; case o.DOWN: e.pan(0, -i); break; default: A = o.NONE } A !== o.NONE && e.update(!0, !0) } } }, Qg.prototype._updateMove = function () { this._moving && (this._moving = !1, this.cameraControl.update(!0)) }, Qg.prototype._animate = function () { this._reqid = requestAnimationFrame(this._animateBinded), this._updateMove() }, Qg.prototype._start = function () { this._animate() }, Qg.prototype._stop = function () { cancelAnimationFrame(this._reqid) }, Qg.prototype.onExit = function () { vc.MergeComponent && this.animationStarted && (this._stop(), this.animationStarted = !1) }; var Rg = function (A) { Qg.call(this, Gc.ORBIT, A), this.mouseButtons = { ORBIT: t.LEFT, PAN2: t.MIDDLE, PAN: t.RIGHT } }; (Rg.prototype = Object.create(Qg.prototype)).constructor = Rg; var Tg = function (A) { Qg.call(this, Gc.PAN, A), this.mouseButtons = { ORBIT: t.RIGHT, PAN2: t.MIDDLE, PAN: t.LEFT } }; (Tg.prototype = Object.create(Qg.prototype)).constructor = Tg; var kg = function (A) { Rg.call(this, A, Gc.PICK) }; (kg.prototype = Object.create(Rg.prototype)).constructor = kg, kg.prototype.processMouseUp = function (A) { A.preventDefault(); var e = 1 >= Math.abs(this.oldMouseX - A.clientX) && 1 >= Math.abs(this.oldMouseY - A.clientY); A.button !== t.LEFT && A.button !== t.RIGHT || e && (this.pickHelper.click(A, this.intersectOfMouseDown), this.intersectOfMouseDown = null), e || A.button !== this.mouseButtons.ORBIT && A.button !== this.mouseButtons.PAN || this.cameraControl.update(!0), this.intersectOfMouseDown = null, this.state = this.StateType.NONE; var i = ""; A.button === this.mouseButtons.ORBIT ? i = Gc.ORBIT : A.button === this.mouseButtons.ZOOM ? i = Gc.ZOOM : A.button !== this.mouseButtons.PAN && A.button !== this.mouseButtons.PAN2 || (i = Gc.PAN, e || this.dispatchEvent({ type: Rc.ON_MOUSE_DRAGGED, event: A })), this.dispatchEvent({ type: Rc.ON_CONTROL_END, name: i, Control: this.name }) }, kg.prototype.processMouseDoubleClick = function (A) { A.button === t.LEFT && this.pickHelper.doubleClick(A) }; var Dg = function (A) { this.control = A, this.cameraControl = A.cameraControl, this.dim = this.cameraControl.getContainerDimensions(), this.pad = null, this.padSize = 96, this.startPt = new s, this.position = new s, this.callback = null, this.intersect = null, this.destroy = function () { this.control = null, this.cameraControl = null, this.dim = null, this.pad = null, this.startPt = null, this.position = null, this.callback = null, this.intersect = null }, this.init = function () { window.addEventListener("resize", this.padInitBind, !1), this.pad = document.createElement("div"), this.padInit(), this.cameraControl.domElement.appendChild(this.pad), this.addEventListener() }, this.addEventListener = function () { this.pad.addEventListener("touchstart", this.padOnTouchStartBind, !1), this.pad.addEventListener("touchmove", this.padOnTouchMoveBind, !1), this.pad.addEventListener("touchend", this.padOnTouchEndBind, !1) }, this.padInit = function () { null !== this.pad && (this.pad.style.backgroundImage = "url(images/selectPad.png)", this.pad.style.backgroundSize = "100%", this.pad.style.position = "absolute", this.pad.style.width = this.padSize.toString() + "px", this.pad.style.height = this.padSize.toString() + "px", this.pad.style.zIndex = "10", this.pad.style.display = "none") }, this.showOverlay = function (A) { this.position = A, this.pad.style.left = this.position.x.toString() + "px", this.pad.style.top = (this.position.y - this.dim.top).toString() + "px", this.pad.style.display = "" }, this.hideOverlay = function () { this.pad.style.display = "none" }, this.pick = function () { var A = this.position.x, e = this.position.y, t = this.cameraControl, i = t.viewer.modelManager.sceneState, o = this, n = new s(A, e), r = t.getIntersectContext(n); t.intersector.pick(r, (function (A) { if (i.clearSelection(), !A) return t.updateView(!0), void(o.intersect = null); var e = A.userId; t.viewer.getScene().intersectToWorld(A, t.viewer), i.addSelection([e]), o.intersect = A, t.updateView(!0) })), null !== o.intersect && (o.intersect.cx = A, o.intersect.cy = e) }, this.onTouchStart = function (A) { 1 === A.touches.length && (A.stopPropagation(), A.preventDefault(), this.startPt.set(A.touches[0].clientX, A.touches[0].clientY)) }, this.onTouchMove = function (A) { if (1 === A.touches.length) { A.stopPropagation(), A.preventDefault(); var e = A.touches[0].clientY - this.startPt.y; this.position.x += A.touches[0].clientX - this.startPt.x, this.position.y += e, this.pad.style.left = this.position.x.toString() + "px", this.pad.style.top = (this.position.y - this.dim.top).toString() + "px", this.startPt.set(A.touches[0].clientX, A.touches[0].clientY), this.pick(A) } }, this.onTouchEnd = function (A) { A.stopPropagation(), null !== this.callback ? this.callback(this.intersect) : console.log("selectPad click", this.intersect) }, this.padInitBind = this.padInit.bind(this), this.padOnTouchStartBind = this.onTouchStart.bind(this), this.padOnTouchEndBind = this.onTouchEnd.bind(this), this.padOnTouchMoveBind = this.onTouchMove.bind(this), this.init() }, Lg = function (A) { Fg.call(this, Gc.WALK, A), this.mouseButtons = { ORBIT: t.LEFT, PAN2: t.MIDDLE, PAN: t.RIGHT }, this.pickHelper = new kp(A), this.lastMousePoint = new s, this._reqid = 0, this._animateBinded = this._animate.bind(this), this._clock = new as, this.moveState = { up: 0, down: 0, left: 0, right: 0, forward: 0, back: 0, pitchUp: 0, pitchDown: 0, yawLeft: 0, yawRight: 0, rollLeft: 0, rollRight: 0 }, this.startPt = new s, this.timeId = null, this.rotateSpeed = 1, this._rotateStart = new s, this._rotateEnd = new s, this._rotateDelta = new s, this._dollyStart = new s, this._dollyEnd = new s, this._dollyDelta = new s, this._dollyCenter = new s, this.zoomSpeed = Math.pow(.95, .2), this._panStart = new s, this._panEnd = new s, this._panDelta = new s, this._pan = new y, this.selectPad = mh.isMobileDevice() ? new Dg(this) : null, this.moveVector = new y(0, 0, 0), this.rotationVector = new y(0, 0, 0), this.zoomDelta = 0, this.rotateStart = new s, this.rotateEnd = new s, this.rotateDelta = new s, this.firstRotate = !0, this.dragLook = !0, this.lockHeightEnabled = !1, this.isLockHeight = !1, this.lockedHeight = 0, this.pickEnabled = !0, this.mouseType = null; var e = A.viewer.getScene().getBoundingBoxWorld(); this.defaultMovementSpeed = e ? e.getSize(new y(0, 0, 0)).length() / 10 : 1500, this.movementSpeed = this.defaultMovementSpeed, this.shiftSpeedup = !1, this.setFocuse = function () { var A = document.querySelector(".main-canvas"); A && A.focus && A.focus() } }; (Lg.prototype = Object.create(Fg.prototype)).constructor = Lg, Lg.prototype.destroy = function () { Fg.prototype.destroy.call(this), this.pickHelper.destroy(), this.pickHelper = null, this.selectPad && (this.selectPad.destroy(), this.selectPad = null), this.timeId && (clearTimeout(this.timeId), this.timeId = null), this._clock = null, this._animateBinded = null, this.mouseButtons = null, this.moveState = null, this.startPt = null, this.lastMousePoint = null, this.rotateStart = null, this.rotateEnd = null, this.rotateDelta = null, this._rotateStart = null, this._rotateEnd = null, this._rotateDelta = null, this._dollyStart = null, this._dollyEnd = null, this._dollyDelta = null, this._dollyCenter = null, this._panStart = null, this._panEnd = null, this._panDelta = null, this._pan = null, this.moveVector = null, this.rotationVector = null, this.rotateStart = null, this.rotateEnd = null, this.rotateDelta = null }, Lg.prototype._animate = function () { this._reqid = requestAnimationFrame(this._animateBinded), this.updateWalkMove() }, Lg.prototype._start = function () { this.moveState = { up: 0, down: 0, left: 0, right: 0, forward: 0, back: 0, pitchUp: 0, pitchDown: 0, yawLeft: 0, yawRight: 0, rollLeft: 0, rollRight: 0 }, this._animate() }, Lg.prototype._stop = function () { cancelAnimationFrame(this._reqid) }, Lg.prototype._updateMovement = function () { this.moveVector.x = -this.moveState.left + this.moveState.right, this.moveVector.z = this.isLockHeight ? 0 : -this.moveState.down + this.moveState.up, this.moveVector.y = -this.moveState.forward + this.moveState.back }, Lg.prototype._updateRotation = function () { this.rotationVector.x = jh.LockAxisZ ? 0 : -this.moveState.pitchDown + this.moveState.pitchUp, this.rotationVector.z = -this.moveState.yawRight + this.moveState.yawLeft, this.rotationVector.y = -this.moveState.rollRight + this.moveState.rollLeft }, Lg.prototype._doRotate = function (A) { vc.WalkingWithViewLock && (A.y = 0); var e = this.cameraControl.getClientSize(), t = e.y / 2; this.moveState.yawLeft = A.x / (e.x / 2), this.moveState.pitchDown = A.y / t, this._updateRotation() }, Lg.prototype.processMouseDown = function (A) { this.oldMouseX = A.clientX, this.oldMouseY = A.clientY; var e = this.cameraControl; if (A.button === this.mouseButtons.ORBIT) { if (A.preventDefault(), A.stopPropagation(), this.mouseType = A.button, this.lastMousePoint.set(A.clientX, A.clientY), this.firstRotate = !1, A.button === this.mouseButtons.ORBIT) { if (jh.NoRotate) return; this.rotateStart.set(A.clientX, A.clientY), this.state = this.StateType.ROTATE, this.dispatchEvent({ type: Rc.ON_CONTROL_BEGIN, name: "look", control: this.name }) } } else if (A.button === this.mouseButtons.PAN || A.button === this.mouseButtons.PAN2) { if (jh.NoPan) return; this._panStart.set(A.clientX, A.clientY), this._worldDimension = e.getWorldDimension(A.clientX, A.clientY), this.state = this.StateType.PAN, this.dispatchEvent({ type: Rc.ON_CONTROL_BEGIN, name: Gc.PAN, control: this.name }) } }, Lg.prototype.processMouseUp = function (A) { return A.preventDefault(), A.stopPropagation(), A.button === this.mouseButtons.PAN && this.setFocuse(), this.mouseType = null, this.pickEnabled && (A.button === t.LEFT || A.button === t.RIGHT) && 2 > Math.abs(this.lastMousePoint.x - A.clientX) && 2 > Math.abs(this.lastMousePoint.y - A.clientY) ? (this.state = this.StateType.NONE, void this.pickHelper.click(A)) : (this.state === this.StateType.ROTATE && (this.moveState.yawLeft = this.moveState.pitchDown = 0, this.dispatchEvent({ type: Rc.ON_CONTROL_END, name: "look", control: this.name })), this.state = this.StateType.NONE, !0) }, Lg.prototype.processMouseMove = function (A) { if (A.preventDefault(), this.dragLook && this.state === this.StateType.ROTATE && 0 === this.mouseType) { if (this.rotateEnd.set(A.clientX, A.clientY), this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart), 0 === this.rotateDelta.x && 0 === this.rotateDelta.y) return; this.rotateStart.copy(this.rotateEnd), this._doRotate(this.rotateDelta) } else { switch (this.state) { case this.StateType.DOLLY: if (this._dollyEnd.set(A.clientX, A.clientY), this._dollyDelta.subVectors(this._dollyEnd, this._dollyStart), 0 === this._dollyDelta.x && 0 === this._dollyDelta.y) return; this.cameraControl.adjustCameraForDolly(this._dollyDelta.y > 0 ? this.zoomSpeed : 1 / this.zoomSpeed, null), this._dollyStart.copy(this._dollyEnd); break; case this.StateType.PAN: if (this._panEnd.set(A.clientX, A.clientY), this._panDelta.subVectors(this._panEnd, this._panStart), 0 === this._panDelta.x && 0 === this._panDelta.y) return; this.cameraControl.panOnWorld(this._panStart, this._panEnd, this._pan, this._worldDimension), this.cameraControl.adjustCameraForPan(this._pan), this._panStart.copy(this._panEnd) } this.state !== this.StateType.NONE && this.cameraControl.update(!0) } }, Lg.prototype.processTouchstart = function (A) { this.startPt.set(A.touches[0].clientX, A.touches[0].clientY), this.timeId && clearTimeout(this.timeId); switch (this.timeId = setTimeout(this.longTap, 400), this.selectPad && this.selectPad.hideOverlay(), A.touches.length) { case 1: if (jh.NoRotate) return; this._rotateStart.set(A.touches[0].clientX, A.touches[0].clientY), this.state = this.StateType.ROTATE; break; case 2: if (!jh.NoZoom) { var e = A.touches[0].clientX - A.touches[1].clientX, t = A.touches[0].clientY - A.touches[1].clientY; this._dollyStart.set(0, Math.sqrt(e * e + t * t)) } if (!jh.NoPan) this._panStart.set(.5 * (A.touches[0].clientX + A.touches[1].clientX), .5 * (A.touches[0].clientY + A.touches[1].clientY)); break; default: this.state = this.StateType.NONE } }, Lg.prototype.processTouchmove = function (A) { this.timeId && clearTimeout(this.timeId); var e = this.cameraControl; switch (A.preventDefault(), A.touches.length) { case 1: this.dragLook && this.state === this.StateType.ROTATE && (this._rotateEnd.set(A.touches[0].clientX, A.touches[0].clientY), this._rotateDelta.subVectors(this._rotateEnd, this._rotateStart), this._rotateStart.copy(this._rotateEnd), this._doRotate(this._rotateDelta)); break; case 2: if (e.clearTouchRotateState(), !jh.NoZoom) { var t, i = A.touches[0].clientX - A.touches[1].clientX, o = A.touches[0].clientY - A.touches[1].clientY, n = Math.sqrt(i * i + o * o); if (this._dollyEnd.set(0, n), this._dollyDelta.subVectors(this._dollyEnd, this._dollyStart), Math.abs(this._dollyDelta.y) > 3) this._dollyDelta.y > 0 ? t = 1 / Math.pow(this.zoomSpeed, .5 * this._dollyDelta.y) : 0 > this._dollyDelta.y && (t = Math.pow(this.zoomSpeed, .5 * -this._dollyDelta.y)), this._dollyStart.copy(this._dollyEnd), e.touchDolly(.5 * (A.touches[0].clientX + A.touches[1].clientX), .5 * (A.touches[0].clientY + A.touches[1].clientY), t), this.state = this.StateType.DOLLY } if (!jh.NoPan) { var r = .5 * (A.touches[0].clientX + A.touches[1].clientX), a = .5 * (A.touches[0].clientY + A.touches[1].clientY); if (this._panEnd.set(r, a), this._panDelta.subVectors(this._panEnd, this._panStart), 3 > Math.abs(this._panDelta.x) && 3 > Math.abs(this._panDelta.y)) return; this._worldDimension = e.getWorldDimension(r, a), e.panOnWorld(this._panStart, this._panEnd, this._pan, this._worldDimension), e.adjustCameraForPan(this._pan), this._panStart.copy(this._panEnd), this.state = this.StateType.PAN } } e.touchUpdate() }, Lg.prototype.processTouchend = function (A) { this.timeId && clearTimeout(this.timeId), this.longTapFlag && (this.longTapFlag = !1, A.preventDefault()); var e = this.cameraControl; switch (A.touches.length) { case 0: this.state = this.StateType.NONE, e.touchEndHandler(A); break; case 1: if (jh.NoRotate) return; this._rotateStart.set(A.touches[0].clientX, A.touches[0].clientY), this.state = this.StateType.ROTATE } }, Lg.prototype.processHover = function (A) { this.dragLook || (this.firstRotate && (this.firstRotate = !1, this.rotateStart.set(A.clientX, A.clientY)), this.rotateEnd.set(A.clientX, A.clientY), this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart), this.rotateStart.copy(this.rotateEnd), this._doRotate(this.rotateDelta)) }, Lg.prototype.processMouseWheel = function (A) { var e = this.cameraControl; if (A.preventDefault(), A.stopPropagation(), !jh.NoZoom) { var t = 0; A.wheelDelta ? t = A.wheelDelta : A.deltaY && (t = 40 * -A.deltaY), Math.abs(t) > 720 && (t = t > 0 ? 720 : -720), t *= this.wheelZoomFactor, jh.ReverseWheelDirection && (t *= -1), e.zoom(t, A.clientX, A.clientY), e.delayHandle(), this.dispatchEvent({ type: Rc.ON_CONTROL_ZOOM }) } }, Lg.prototype.processKeyDown = function (A) { if (!jh.NoKey && !A.altKey) { var e = qc.NONE; switch (A.key) { case "0": this.movementSpeed = this.defaultMovementSpeed; break; case "=": case "+": this.movementSpeed *= 1.1; break; case "-": case "——": this.movementSpeed *= .9, this.minMovementSpeed > this.movementSpeed && (this.movementSpeed = this.minMovementSpeed); break; case "ArrowUp": case "w": case "W": e = qc.FORWARD, this.moveState.forward = 1; break; case "ArrowDown": case "s": case "S": e = qc.BACK, this.moveState.back = 1; break; case "ArrowLeft": case "a": case "A": e = qc.LEFT, this.moveState.left = 1; break; case "ArrowRight": case "d": case "D": e = qc.RIGHT, this.moveState.right = 1; break; case "q": case "Q": e = qc.UP, this.moveState.up = 1; break; case "e": case "E": e = qc.DOWN, this.moveState.down = 1; break; case "Shift": this.shiftSpeedup || (this.movementSpeed += this.defaultMovementSpeed, this.shiftSpeedup = !0); break; case "Tab": return this.moveVector.set(0, 0, 0), this.moveState.forward = 0, this.moveState.back = 0, this.moveState.left = 0, this.moveState.right = 0, this.moveState.up = 0, void(this.moveState.down = 0) } this._updateMovement(), this._updateRotation(), e !== qc.NONE && this.dispatchEvent({ type: Rc.ON_CONTROL_KEYDOWN, event: A, direction: e, control: this.name }) } }, Lg.prototype.processKeyUp = function (A) { if (!jh.NoKey) { var e = qc.NONE; switch (A.key) { case "ArrowUp": case "W": case "w": e = qc.FORWARD, this.moveState.forward = 0; break; case "ArrowDown": case "s": case "S": e = qc.BACK, this.moveState.back = 0; break; case "ArrowLeft": case "a": case "A": e = qc.LEFT, this.moveState.left = 0; break; case "ArrowRight": case "d": case "D": e = qc.RIGHT, this.moveState.right = 0; break; case "q": case "Q": e = qc.UP, this.moveState.up = 0; break; case "e": case "E": e = qc.DOWN, this.moveState.down = 0; break; case "Shift": this.shiftSpeedup && (this.movementSpeed -= this.defaultMovementSpeed, this.shiftSpeedup = !1); break; default: e = qc.NONE } this._updateMovement(), this._updateRotation(), e !== qc.NONE && this.dispatchEvent({ type: Rc.ON_CONTROL_KEYUP, event: A, direction: e, control: this.name }) } }, Lg.prototype.updateWalkMove = function () { var A = this._clock.getDelta(), e = this.cameraControl, t = e.camera.position.z; if (0 !== this.moveVector.x || 0 !== this.moveVector.y || 0 !== this.moveVector.z || 0 !== this.rotationVector.x || 0 !== this.rotationVector.y || 0 !== this.rotationVector.z || 0 !== this.zoomDelta) { var i = this.movementSpeed * jh.WalkSpeedRate * A; if (!0 === vc.WalkingWithGravity && (this.moveVector.z = 0, e.computeManHeight(), e.computeGravity()), e.dirtyCamera(!0), 0 !== this.zoomDelta) e.zoomCameraForWalk(1 + this.zoomDelta * A), this.zoomDelta = 0; 0 !== i && e.translateCameraForWalk(this.moveVector, i), e.rotateCameraForWalk(this.rotationVector, this.dragLook ? 1 : 2), e.flyOnWorld(!1), this.moveState.pitchUp = 0, this.moveState.pitchDown = 0, this.moveState.yawLeft = 0, this.moveState.yawRight = 0, this.moveState.rollLeft = 0, this.moveState.rollRight = 0, t !== e.camera.position.z && e.viewer.modelManager.dispatchEvent({ type: Rc.ON_CAMERA_HEIGHT_CHANGED, cameraPosition: e.camera.position.clone() }) } }, Lg.prototype.onEnter = function () { var A = this.cameraControl.getCamera(); A.isPerspective || (console.log("Current camera is Orthographic"), A.toPerspective()), this._start() }, Lg.prototype.onExit = function () { this._stop() }, Lg.prototype.rotateTo = function (A) { this._doRotate(A) }, Lg.prototype.moveTo = function (A, e, t) { if (void 0 === t && (t = !0), void 0 === e && (e = 1), t) switch (A) { case qc.FORWARD: this.moveState.forward = e; break; case qc.BACK: this.moveState.back = e; break; case qc.LEFT: this.moveState.left = e; break; case qc.RIGHT: this.moveState.right = e; break; case qc.UP: this.moveState.up = e; break; case qc.DOWN: this.moveState.down = e } else switch (A) { case qc.FORWARD: this.moveState.forward = 0; break; case qc.BACK: this.moveState.back = 0; break; case qc.LEFT: this.moveState.left = 0; break; case qc.RIGHT: this.moveState.right = 0; break; case qc.UP: this.moveState.up = 0; break; case qc.DOWN: this.moveState.down = 0 } this._updateMovement() }, Lg.prototype.setHeightLocked = function (A) { this.lockHeightEnabled && this.isLockHeight !== A && (this.isLockHeight = A) }, Lg.prototype.setDragLook = function (A) { this.dragLook !== A && (this.firstRotate = !0, this.dragLook = A) }, Lg.prototype.processPointerLockEnter = function () { this.pointerLock = !0 }, Lg.prototype.processPointerLockExit = function () { this.pointerLock = !1 }, Lg.prototype.processMovement = function (A) { this.rotateDelta.set(A.movementX || A.mozMovementX || A.webkitMovementX || 0, A.movementY || A.mozMovementY || A.webkitMovementY || 0), this._doRotate(this.rotateDelta) }; var Ng = function (A) { Qg.call(this, Gc.ZOOM, A), this.mouseButtons = { ZOOM: t.LEFT, PAN2: t.MIDDLE, PAN: t.RIGHT } }; (Ng.prototype = Object.create(Qg.prototype)).constructor = Ng; var Og = function () { this.control = null, this.controls = {}, this.tools = [], this.domElement = null, this.enabled = !0, this.isUpdateRenderList = !0; var A = !1, e = this; function t(t) { if (e.enabled) { for (var i = e.tools, o = i.length - 1; o >= 0; o -= 1) if (i[o].onEvent(t)) { switch (t.type) { case "mouseup": A = !1 } return } switch (t.type) { case "touchmove": e.control.processTouchmove(t); break; case "touchstart": e.control.processTouchstart(t); break; case "touchend": e.control.processTouchend(t); break; case "keydown": e.control.processKeyDown(t); break; case "keyup": e.control.processKeyUp(t); break; case "wheel": case "mousewheel": case "DOMMouseScroll": e.cameraChange = !0, e.control.processMouseWheel(t); break; case "mousedown": ! function (t) { e.setFocuse(), A = !0, e.isUpdateRenderList = !1, e.control ? e.control.processMouseDown(t) : Bh.warn("control is null") }(t); break; case "mousemove": ! function (t) { e.pointerLock ? e.control.processMovement(t) : A ? (e.isUpdateRenderList = !1, e.cameraChange = !0, e.control.processMouseMove(t)) : e.control.processHover(t) }(t); break; case "mouseup": ! function (t) { e.isUpdateRenderList = !0, A && (e.control.processMouseUp(t), A = !1) }(t); break; case "dblclick": e.control.processMouseDoubleClick(t) } } else e.cameraChange = !1 } function i(A) { A.preventDefault() } function o(A) { document.pointerLockElement === e.domElement || document.mozPointerLockElement === e.domElement || document.webkitPointerLockElement === e.domElement ? (e.pointerLock = !0, e.control.processPointerLockEnter(A)) : (e.pointerLock = !1, e.control.processPointerLockExit(A), e.domElement.focus(), e.control.dispatchEvent({ type: Rc.ON_POINTERLOCK_EXIST, name: e.control.getName() })) } function n(A) { e.pointerLock = !1, e.control.processPointerLockExit(A), e.control.dispatchEvent({ type: Rc.ON_POINTERLOCK_EXIST, name: e.control.getName() }) } this.setFocuse = function () { if (e.domElement) { var A = e.domElement.querySelector(".main-canvas"); A && A.focus && A.focus() } }, this.setFocus = this.setFocuse, this.getCameraControl = function () { return this.cameraControl }, this.registerDomEventListeners = function (A) { this.domElement = A, A.addEventListener("contextmenu", i, !1), A.addEventListener("mousedown", t, !1), A.addEventListener("mousewheel", t, !1), A.addEventListener("DOMMouseScroll", t, !1), A.addEventListener("wheel", t, !1), A.addEventListener("dblclick", t, !1), window.addEventListener("mousemove", t, !1), window.addEventListener("mouseup", t, !1), A.addEventListener("touchstart", t, !1), A.addEventListener("touchend", t, !1), A.addEventListener("touchmove", t, !1), window.addEventListener("touchmove", (function (A) {}), !1), A.addEventListener("keydown", t, !1), window.addEventListener("keyup", t, !1), document.addEventListener("pointerlockchange", o, !1), document.addEventListener("mozpointerlockchange", o, !1), document.addEventListener("webkitpointerlockchange", o, !1), document.addEventListener("pointerlockerror", n, !1), document.addEventListener("mozpointerlockerror", n, !1), document.addEventListener("webkitpointerlockerror", n, !1), this.setFocuse() }, this.unregisterDomEventListeners = function (A) { A.removeEventListener("contextmenu", i, !1), A.removeEventListener("mousedown", t, !1), A.removeEventListener("mousewheel", t, !1), A.removeEventListener("DOMMouseScroll", t, !1), A.removeEventListener("dblclick", t, !1), window.removeEventListener("mousemove", t, !1), window.removeEventListener("mouseup", t, !1), A.removeEventListener("touchstart", t, !1), A.removeEventListener("touchend", t, !1), A.removeEventListener("touchmove", t, !1), A.removeEventListener("keydown", t, !1), window.removeEventListener("keyup", t, !1), document.removeEventListener("pointerlockchange", o, !1), document.removeEventListener("mozpointerlockchange", o, !1), document.removeEventListener("webkitpointerlockchange", o, !1), document.removeEventListener("pointerlockerror", n, !1), document.removeEventListener("mozpointerlockerror", n, !1), document.removeEventListener("webkitpointerlockerror", n, !1) } }; Og.prototype = { constructor: Og, destroy: function () { for (var A in this.control = null, this.controls) { this.controls[A].destroy() } this.controls = {}; for (var e = 0, t = this.tools.length; t > e; e += 1) this.tools[e].destroy(); this.tools = null, this.unregisterDomEventListeners(this.domElement), this.domElement = null }, getCurrentControlName: function () { return this.control ? this.control.name : "" }, _getControlByName: function (A, e) { var t = this.controls[e]; if (t) return t; var i = Gc; this.viewer = A, this.cameraControl = A.cameraControl; var o = A.cameraControl; switch (e) { case i.ORBIT: t = new Rg(o); break; case i.PICK: t = new kg(o); break; case i.PAN: t = new Tg(o); break; case i.FLY: t = new Kg(o); break; case i.WALK: t = new Lg(o); break; case i.ZOOM: t = new Ng(o); break; default: t = null, Bh.error("invalid control name") } return t && (t.name = e, this.controls[e] = t), t }, getCurrentControlMode: function () { return this.control }, getCurrentControl: function () { return this.control }, setControlMode: function (A, e) { var t = this._getControlByName(A, e); t && this.control !== t && (null !== this.control && (this.control.dispatchEvent({ type: Rc.ON_CONTROL_EXIST, name: this.control.getName() }), this.control.onExit()), this.control = t, this.control.onEnter(), this.control.dispatchEvent({ type: Rc.ON_CONTROL_ENTER, name: this.control.getName() })) }, getToolByName: function (A) { for (var e = this.tools.length, t = 0; e > t; t += 1) if (this.tools[t].name === A) return this.tools[t] }, enableTool: function (A, e) { for (var t = Pc, i = this.tools, o = 0, n = i.length; n > o; o += 1) if (i[o].name === e) return; var r = null; switch (e) { case t.PICK_BY_RECT: r = new bg(A); break; case t.ZOOM_BY_RECT: r = new Ug(A); break; case t.CLIP_BY_BOX: r = new vp(A); break; case t.CLIP_FILL: r = new Sp(A); break; case t.PICK_BY_MEASURE: r = new Eg(A); break; case t.COMPONENT_TRANSFORM: r = new Ip(A.getScene(), A.camera, A.domElement) } r && i.push(r) }, disableTool: function (A) { for (var e = this.tools, t = 0, i = e.length; i > t; t += 1) if (e[t].name === A) { e[t].onExit(), this.dispatchEvent({ type: Rc.ON_CONTROL_EXIST, name: A }), e.splice(t, 1); break } }, setInteractiveState: function (A) { this.enabled = A }, requestPointerLock: function () { this.control instanceof Lg && (this.domElement.requestPointerLock = this.domElement.requestPointerLock || this.domElement.mozRequestPointerLock || this.domElement.webkitRequestPointerLock, this.domElement.requestPointerLock()) } }, Object.assign(Og.prototype, Ld.prototype); var Vg = function () { this.className = "FilterAction" }; Vg.prototype.getClassName = function () { return this.className }, Vg.prototype.applyFilter = function (A) {}; var Gg = function () { Vg.call(this), this.className = "IdsFilterAction", this.ids = [] }; (Gg.prototype = Object.create(Vg.prototype)).arrayToMap = function (A) { for (var e = {}, t = 0; A.length > t; t += 1) { var i = A[t]; e[i] = i } return e }, Gg.prototype.constructor = Gg, Gg.prototype.setIds = function (A) { this.ids = A }; var Pg = function (A, e) { Gg.call(this), this.className = "VisibleIdsFA", this.flag = A, this.isVisible = e }; (Pg.prototype = Object.create(Gg.prototype)).constructor = Pg, Pg.prototype.applyFilter = function (A) { console.log('applyFilter :>> '); Array.isArray(this.ids) ? (A.setVisible(this.ids, this.isVisible, this.flag), A.calculateVisibleComponentsBbox()) : Bh.warn("Ids should be type of array.") }; var qg = function (A, e) { Gg.call(this), this.className = "OverrideIdsFA", this.flag = A, this.material = e }; (qg.prototype = Object.create(Gg.prototype)).constructor = qg, qg.prototype.applyFilter = function (A) { console.log('applyFilter :sss>> '); Array.isArray(this.ids) ? A.setMaterial(this.ids, this.material, this.flag) : Bh.warn("Ids should be type of array.") }; var jg = function (A, e) { Gg.call(this), this.className = "WireframeIdsFA", this.flag = A, this.material = e }; (jg.prototype = Object.create(Gg.prototype)).constructor = jg, jg.prototype.applyFilter = function (A) { Array.isArray(this.ids) ? A.setMaterial(this.ids, this.material, this.flag) : Bh.warn("Ids should be type of array.") }; var Hg = function (A) { Gg.call(this), this.className = "IsolateIdsFA", this.isolateHide = A }; (Hg.prototype = Object.create(Gg.prototype)).constructor = Hg, Hg.prototype.applyFilter = function (A) { console.log('applyFilter :>dddd> '); Array.isArray(this.ids) ? (A.clearIsolates(), this.isolateHide ? (A.setIsolateHide(this.ids, !0, !1), A.calculateVisibleComponentsBbox()) : A.setIsolateTransparent(this.ids, !0, !1)) : Bh.warn("Ids should be type of array.") }; var Yg = function (A, e) { Gg.call(this), this.className = "TransparentIdsFA", this.flag = A, this.isOpaque = e }; (Yg.prototype = Object.create(Gg.prototype)).constructor = Yg, Yg.prototype.applyFilter = function (A) { console.log('applyFilter :>dddd> '); Array.isArray(this.ids) ? A.setTransparent(this.ids, !this.isOpaque, this.flag) : Bh.warn("Ids should be type of array.") }; var Wg = function () { Vg.call(this), this.className = "ConditionFilterAction", this.conditions = null }; (Wg.prototype = Object.create(Vg.prototype)).constructor = Wg; var Jg = function (A, e) { Wg.call(this), this.className = "VisibleConditionFA", this.flag = A, this.isVisible = e }; (Jg.prototype = Object.create(Wg.prototype)).constructor = Jg, Jg.prototype.applyFilter = function (A) { console.log('applyFilter :>sdfdf> '); var e = this; Array.isArray(this.conditions) ? (A.matchConditions(this.conditions, (function (t, i) { e.flag === i && (A.setVisible(t, e.isVisible), t = null) })), A.calculateVisibleComponentsBbox()) : Bh.warn("Conditions should be type of array.") }; var zg = function (A, e) { Wg.call(this), this.className = "OverrideConditionFA", this.flag = A, this.material = e }; (zg.prototype = Object.create(Wg.prototype)).constructor = zg, zg.prototype.applyFilter = function (A, e) { console.log('applyFilter :>ddddddd> '); var t = this; Array.isArray(this.conditions) ? A.matchConditions(this.conditions, (function (e, i) { t.flag === i && (A.setMaterial(e, t.material), e = null) })) : Bh.warn("Conditions should be type of array.") }; var Zg = function (A, e) { Wg.call(this), this.className = "TransparentConditionFA", this.flag = A, this.isOpaque = e }; (Zg.prototype = Object.create(Wg.prototype)).constructor = Zg, Zg.prototype.applyFilter = function (A) { console.log('applyFilter :>erqwqer> '); var e = this; Array.isArray(this.conditions) ? A.matchConditions(this.conditions, (function (t, i) { e.flag === i && (A.setTransparent(t, !e.isOpaque), t = null) })) : Bh.warn("Conditions should be type of array.") }; var Xg = function (A) { Wg.call(this), this.className = "IsolateConditionFA", this.isolateHide = A }; (Xg.prototype = Object.create(Wg.prototype)).constructor = Xg, Xg.prototype.applyFilter = function (A) { console.log('applyFilter :dfasf>> '); A.clearIsolates(); var e = this.isolateHide; Array.isArray(this.conditions) ? A.matchConditions(this.conditions, (function (t, i) { !0 !== i ? (e ? (A.setIsolateHide(t, !i), A.calculateVisibleComponentsBbox()) : A.setIsolateTransparent(t, !i), t = null) : t = null })) : Bh.warn("Conditions should be type of array.") }; var _g = function (A) { this._activeFilterList = [], this._filterResultModes = {}, this._defaultReturnValue = A, this._filterPriority = null }; _g.prototype.setFilterMode = function (A) { this._filterResultModes = A }, _g.prototype.setFilterPriority = function (A) { this._filterPriority = A }, _g.prototype.addBaseFilter = function (A) { var e = this._activeFilterList, t = e.indexOf(A); if (null === this._filterPriority) - 1 === t ? e.push(A) : t !== e.length - 1 && (e.splice(t, 1), e.push(A)); else if (0 === e.length) e.push(A); else { -1 !== t && t !== e.length - 1 && e.splice(t, 1); for (var i = this._filterPriority[A.getType()], o = 0, n = e.length; n > o; o += 1) if (this._filterPriority[e[o].getType()] > i) { e.splice(o, 0, A); break } o === n && e.push(A) } }, _g.prototype.removeBaseFilter = function (A) { var e = this._activeFilterList.indexOf(A); - 1 !== e && this._activeFilterList.splice(e, 1) }, _g.prototype.isEmpty = function () { return 0 === this._activeFilterList.length }, _g.prototype.hasFilterNotIn = function (A) { for (var e = this._activeFilterList, t = e.length - 1; t >= 0; t -= 1) { if (void 0 === A._filterResultModes[e[t].getType()]) return !0 } return !1 }, _g.prototype.apply = function (A) { for (var e = Jc, t = null, i = this._activeFilterList.length - 1; i >= 0; i -= 1) switch (this._filterResultModes[(t = this._activeFilterList[i]).getType()]) { case e.MATCH_RETURN_TRUE: if (t.match(A)) return !0; break; case e.MATCH_RETURN_FALSE: if (t.match(A)) return !1; break; case e.NOMATCH_RETURN_TRUE: if (!t.match(A)) return !0; break; case e.NOMATCH_RETURN_FALSE: if (!t.match(A)) return !1; break; default: return !1 } return this._defaultReturnValue }, _g.prototype.getApplyFilterId = function (A) { for (var e = Jc, t = null, i = this._activeFilterList.length - 1; i >= 0; i -= 1) switch (this._filterResultModes[(t = this._activeFilterList[i]).getType()]) { case e.MATCH_RETURN_TRUE: case e.MATCH_RETURN_FALSE: if (t.match(A)) return t.getType(); break; case e.NOMATCH_RETURN_TRUE: case e.NOMATCH_RETURN_FALSE: if (!t.match(A)) return t.getType(); break; default: return -1 } return -1 }, Math.log2 = Math.log2 || function (A) { return Math.log(A) / Math.LN2 }, "function" != typeof String.prototype.startsWith && (String.prototype.startsWith = function (A) { return this.slice(0, A.length) === A }), Array.prototype.remove || Object.defineProperty(Array.prototype, "remove", { enumerable: !1, value: function (A) { var e = this.indexOf(A); e > -1 && this.splice(e, 1) } }), "undefined" != typeof window && mh.isIE11() && function () { function A(A, e) { e = e || { bubbles: !1, cancelable: !1, detail: void 0 }; var t = document.createEvent("CustomEvent"); return t.initCustomEvent(A, e.bubbles, e.cancelable, e.detail), t } A.prototype = window.CustomEvent.prototype, window.CustomEvent = A }(), "function" != typeof String.prototype.startsWith && (String.prototype.startsWith = function (A) { return this.slice(0, A.length) === A }), "function" != typeof String.prototype.endsWith && (String.prototype.endsWith = function (A) { return -1 !== this.indexOf(A, this.length - A.length) }), "undefined" != typeof window && (window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder), Number.isInteger = Number.isInteger || function (A) { return "number" == typeof A && isFinite(A) && Math.floor(A) === A }, String.prototype.repeat = String.prototype.repeat || function (A) { if (1 > A) return ""; for (var e = "", t = this.valueOf(); A > 1;) 1 & A && (e += t), A >>= 1, t += t; return e + t }, Array.prototype.fill || Object.defineProperty(Array.prototype, "fill", { enumerable: !1, value: function (A, e, t) { t = void 0 === t ? this.length : t; for (var i = e = void 0 === e ? 0 : e; t > i; i += 1) this[i] = A } }), Array.prototype.find || Object.defineProperty(Array.prototype, "find", { enumerable: !1, value: function (A, e) { for (var t = this.length, i = 0; t > i; i += 1) { var o = this[i]; if (A.call(e, o, i, this)) return o } } }), Array.prototype.hasValue || Object.defineProperty(Array.prototype, "hasValue", { enumerable: !1, value: function (A) { return this.indexOf(A) > -1 } }), "function" != typeof Object.assign && Object.defineProperty(Object, "assign", { value: function (A, e) { if (null == A) throw new TypeError("Cannot convert undefined or null to object"); for (var t = Object(A), i = 1; arguments.length > i; i += 1) { var o = arguments[i]; if (null != o) for (var n in o) Object.prototype.hasOwnProperty.call(o, n) && (t[n] = o[n]) } return t }, writable: !0, configurable: !0 }), ArrayBuffer.prototype.slice || (ArrayBuffer.prototype.slice = function (A, e) { if (!e || e > this.byteLength ? e = this.byteLength : 0 > e && 0 > (e = this.byteLength + e) && (e = 0), 0 > A && 0 > (A = this.byteLength + A) && (A = 0), A >= e) return new ArrayBuffer; for (var t = e - A, i = new Uint8Array(this, A, t), o = new Uint8Array(t), n = 0; t > n; n += 1) o[n] = i[n]; return o.buffer }), Float32Array.prototype.slice || (Float32Array.prototype.slice = Float32Array.prototype.subarray), Uint32Array.prototype.slice || (Uint32Array.prototype.slice = Uint32Array.prototype.subarray), Int32Array.prototype.slice || (Int32Array.prototype.slice = Int32Array.prototype.subarray), Int16Array.prototype.slice || (Int16Array.prototype.slice = Int16Array.prototype.subarray); var $g, Au = "function" == typeof Symbol && "symbol" === lc(Symbol.iterator) ? function (A) { return lc(A) } : function (A) { return A && "function" == typeof Symbol && A.constructor === Symbol && A !== Symbol.prototype ? "symbol" : lc(A) }, eu = function () { function A(A, e) { for (var t = 0; e.length > t; t += 1) { var i = e[t]; i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(A, i.key, i) } } return function (e, t, i) { return t && A(e.prototype, t), i && A(e, i), e } }(); HTMLElement.prototype.tap = function (A) { var e = 0; this.addEventListener("touchstart", (function (A) { e = Date.now() })), this.addEventListener("touchend", (function (t) { 200 > Date.now() - e && A(t) })) }, (Boolean(window.ActiveXObject) || "ActiveXObject" in window) && (HTMLElement.prototype.remove = function () { var A = this.parentNode || this.parentElement; A && A.removeChild(this) }, window.Element && (($g = Element.prototype).matches = $g.matches || $g.matchesSelector || $g.webkitMatchesSelector || $g.msMatchesSelector || function (A) { for (var e = (this.parentNode || this.document).querySelectorAll(A), t = -1; e[t += 1] && e[t] !== this;) ; return Boolean(e[t]) }), window.Element && function (A) { A.closest = A.closest || function (A) { for (var e = this; e.matches && !e.matches(A);) e = e.parentNode; return e.matches ? e : null } }(Element.prototype)), SVGElement.prototype.getClass = HTMLElement.prototype.getClass = function (A) { return this.getAttribute("class") }, SVGElement.prototype.hasClass = HTMLElement.prototype.hasClass = function (A) { var e = this.getClass(); return !!e && (e && e.split(" ")).indexOf(A) > -1 }, SVGElement.prototype.addClass = HTMLElement.prototype.addClass = function (A) { var e = this.getClass(), t = e && e.split(" "); return e ? -1 === t.indexOf(A) && (t.push(A), e = t.join(" "), this.setAttribute("class", String(e))) : this.setAttribute("class", String(A)), this }, SVGElement.prototype.removeClass = HTMLElement.prototype.removeClass = function (A) { if (!this.hasClass(A)) return this; var e = this.getClass().replace(A, "").trim(); return e ? this.setAttribute("class", String(e)) : this.removeAttribute("class"), this }, SVGElement.prototype.toggleClass = HTMLElement.prototype.toggleClass = function (A, e) { this.getClass(); var t = this.hasClass(A); return null != e ? (e && !t && this.addClass(A), e || this.removeClass(A)) : t ? this.removeClass(A) : this.addClass(A), !t }, Array.prototype.getObjectByAttribute || Object.defineProperty(Array.prototype, "getObjectByAttribute", { enumerable: !1, value: function (A, e) { for (var t = this.length, i = 0; t > i; i += 1) if (this[i][A] === e) return this[i]; return !1 } }), Array.prototype.removeObjectByAttribute || Object.defineProperty(Array.prototype, "removeObjectByAttribute", { enumerable: !1, value: function (A, e) { for (var t = this, i = t.length, o = 0; i > o; o += 1) if (t[o][A] === e) return t = t.splice(o, 1); return !1 } }), Array.prototype.getAllObjectByAttribute || Object.defineProperty(Array.prototype, "getAllObjectByAttribute", { enumerable: !1, value: function (A, e) { for (var t = this.length, i = 0, o = []; t > i; i += 1) this[i][A] === e && o.push(this[i]); return o } }), Array.prototype.removeByValue || Object.defineProperty(Array.prototype, "removeByValue", { enumerable: !1, value: function (A) { for (var e = this.length - 1; e >= 0; e -= 1) this[e] === A && this.splice(e, 1); return this } }), Array.prototype.insert || Object.defineProperty(Array.prototype, "insert", { enumerable: !1, value: function (A, e) { return this.splice(A, 0, e), this } }), SVGElement.prototype.setCss = HTMLElement.prototype.setCss = function (A) { if (A) for (var e in A) this.style[e] = A[e] }, SVGElement.prototype.getCss = HTMLElement.prototype.getCss = function () { return this.style }; var tu = function (A, e) { this._type = A, this._name = e, this._enabled = !1, this._items = {}, this._relatedCompoundFilterList = [] }; tu.prototype.getType = function () { return this._type }, tu.prototype.getName = function () { return this._name }, tu.prototype.get = function () { return this._items }, tu.prototype.getAll = function () { return this._items }, tu.prototype.clearAll = function () { this._items = {}, this._enabled && (this._enabled = !1, this.enableStateChanged()) }, tu.prototype.clear = function () { this.clearAll() }, tu.prototype.isEmpty = function () { return !this._enabled }, tu.prototype.forceEnable = function () { this._enabled || (this._enabled = !0, this.enableStateChanged()) }, tu.prototype.setByData = function (A) { ! function (A) { if (null === A) return !0; if ("object" !== (void 0 === A ? "undefined" : Au(A))) return !0; for (var e in A) if (A.hasOwnProperty(e)) return !1; return !0 }(A) ? (this._items = A, this._enabled || (this._enabled = !0, this.enableStateChanged())) : (this._items = {}, this._enabled && (this._enabled = !1, this.enableStateChanged())) }, tu.prototype.match = function (A) { return !1 }, tu.prototype.registerToCompoundFilter = function (A) { this._relatedCompoundFilterList.push(A) }, tu.prototype.enableStateChanged = function () { for (var A = 0, e = this._relatedCompoundFilterList.length; e > A; A += 1) this._enabled ? this._relatedCompoundFilterList[A].addBaseFilter(this) : this._relatedCompoundFilterList[A].removeBaseFilter(this) }; var iu = function (A, e) { tu.call(this, A, e) }; (iu.prototype = Object.create(tu.prototype)).constructor = iu, iu.prototype.match = function (A) { var e = A.userData; return !e || function (A, e) { for (var t = !1, i = 0, o = A.length; o > i; i += 1) { t = !0; var n = A[i]; for (var r in n) { if (!Array.isArray(n[r]) && e[r] !== n[r]) { t = !1; break } if (Array.isArray(n[r]) && -1 === n[r].indexOf(e[r])) { t = !1; break } } if (t) return !0 } return !1 }(this._items, e) }; var ou = function (A, e) { tu.call(this, A, e) }; (ou.prototype = Object.create(tu.prototype)).constructor = ou, ou.prototype.add = function (A) { var e = this._items; if (A && A.length > 0) { for (var t = 0, i = A.length; i > t; t += 1) e[A[t]] = !0; this._enabled || (this._enabled = !0, this.enableStateChanged()) } }, ou.prototype.remove = function (A) { var e = this._items; if (A && A.length > 0) { for (var t = 0, i = A.length; i > t; t += 1) { var o = A[t]; e.hasOwnProperty(o) && delete e[o] } 0 === Object.keys(e).length && this._enabled && (this._enabled = !1, this.enableStateChanged()) } }; var nu = function (A, e) { ou.call(this, A, e) }; (nu.prototype = Object.create(ou.prototype)).constructor = nu, nu.prototype.match = function (A) { var e = A.name; if (e) { var t = e.indexOf("."); if (-1 !== t) { var i = e.substring(0, t); return !!this._items[i] } } var o = A.userData; if (o && (i = o.sceneId)) return !!this._items[i]; return !1 }; var ru = function (A, e) { ou.call(this, A, e) }; (ru.prototype = Object.create(ou.prototype)).constructor = ru, ru.prototype.match = function (A) { return !!this._items[A.name] }; var au = function () { this.defaultWireframeColor = { color: new LA(0, 0, 0), opacity: .4 }, this.wireframeMaterial = new jA(this.defaultWireframeColor), !1 === vc.TranslucentDepthDisabled && (this.wireframeMaterial.transparent = !0), this.instanceWireframeMaterial = Kd.createInstanceMaterial(Kd.getMaterialParameters(this.wireframeMaterial)), !1 === vc.TranslucentDepthDisabled && (this.instanceWireframeMaterial.transparent = !0), this.wireframeGeometryMap = {} }; au.prototype.destroy = function () { this.wireframeMaterial.dispose(), this.wireframeMaterial = null, this.instanceWireframeMaterial.destroy(), this.instanceWireframeMaterial = null, this.wireframeGeometryMap = null, this.defaultWireframeColor.color = null, this.defaultWireframeColor = null }, au.prototype.setWireframeColor = function (A, e) { this.wireframeMaterial.color = A, this.wireframeMaterial.opacity = e, this.wireframeMaterial.transparent = 1 !== e, this.instanceWireframeMaterial.color = A, this.instanceWireframeMaterial.opacity = e, this.instanceWireframeMaterial.transparent = 1 !== e }, au.prototype.getWireframeColor = function () { var A = this.wireframeMaterial.color.clone(); return A.opacity = this.wireframeMaterial.opacity, A }, au.prototype.restoreWireframeColor = function () { var A = this.defaultWireframeColor; this.setWireframeColor(A.color, A.opacity) }; var su = function () { new au; var A = [{ name: "scene", param: { name: "scene", color: 8947848, opacity: .4, transparent: !0, side: 2 } }, { name: "darkRed", param: { name: "darkRed", color: 10496040, opacity: 1, transparent: !1, side: 2 } }, { name: "lightBlue", param: { name: "lightBlue", color: 1275840, opacity: 1, transparent: !1, side: 2 } }, { name: "black", param: { name: "black", color: 0, opacity: .3, transparent: !0, side: 2 } }, { name: "add", param: { name: "add", color: 65280, opacity: 1, transparent: !0, side: 2 } }, { name: "delete", param: { name: "delete", color: 16711680, opacity: .5, transparent: !0, side: 2 } }, { name: "beforeEdit", param: { name: "beforeEdit", color: 16432389, opacity: .5, transparent: !0, side: 2 } }, { name: "afterEdit", param: { name: "afterEdit", color: 16432389, opacity: 1, transparent: !0, side: 2 } }], e = {}; e.selection = Kd.createHighlightMaterial(), e.selection.name = "selection"; for (var t = 0, i = A.length; i > t; t += 1) { var o = A[t], n = o.name; e[n] = Kd.createStandardMaterial(o.param), e[n].createByBos = !0 } e.red = e.delete, e.green = e.add, e.yellow = e.beforeEdit, e.blue = e.selection; var r = { color: 8947848, opacity: .2, transparent: !0, side: 2 }, a = Kd.createStandardMaterial(r); a.name = "isolate"; var s = { color: 8947848, opacity: .2, transparent: !0, side: 2 }, l = Kd.createStandardMaterial(s); l.name = "looming"; var c = { color: 0, opacity: 1, transparent: !1, wireframe: !0, side: 2 }, h = Kd.createStandardMaterial(c); h.name = "wireframe", e.wireframe = h; var d = { color: 15293, side: 2 }, p = Kd.createStandardMaterial(d); for (var g in p.name = "selected", this.getDefaultMaterialName = function () { return "lightBlue" }, this.get = function (A) { return e[A] }, this.getAll = function () { return e }, this.add = function (A) { var t, i = null, o = {}; return A && A.hasOwnProperty("color") && (o.color = A.color, o.side = 2, A.hasOwnProperty("opacity") && (o.opacity = A.opacity, o.transparent = 1 !== A.opacity)), t = this._getMaterialName(A), (i = e[t]) || (o.name = t, i = Kd.createStandardMaterial(o), e[t] = i, e[t].createByBos = !0), t }, this.remove = function (A) { var t; t = this._getMaterialName(A), e[t] && delete e[t] }, this.has = function (A) { return Boolean(e[A]) }, this.getMaterialNameByColor = function (A) { var t; return t = this._getMaterialName(A), e[t] ? t : this.add(A) }, this.getMaterialNameByWireframe = function (A) { var t; return (t = this._getMaterialName(A)) && !e[t] ? this.add(A) : t }, this.addOverrideMaterial = function (A) { if (A) { var t = A.name; e[t] || (e[t] = A) } }, this.updateOverrideMaterial = function (A) { A && (e[A.name] = A) }, this.getMaterialParamsFromName = function (A) { var e = {}, t = A.split("_"); return "mat" === t[0] ? (e.color = parseInt(t[1], 0), e.opacity = 1) : (e.color = parseInt(t[0], 0), e.opacity = parseFloat(t[1], 0)), e }, this._getMaterialName = function (A) { var e = null; return A && A.hasOwnProperty("color") ? e = A.hasOwnProperty("opacity") ? A.color + "_" + A.opacity : "mat_" + A.color : A && A.hasOwnProperty("wireframe") ? A.wireframe && (e = "wireframe") : e = "mat_" + A, e }, this.setWireframeMaterial = function (A) { e.wireframe.color.setHex(void 0 !== A.color ? A.color : c.color), e.wireframe.opacity = void 0 !== A.opacity ? A.opacity : c.opacity, e.wireframe.transparent = void 0 !== A.transparent ? A.transparent : c.transparent, e.wireframe.side = void 0 !== A.side ? A.side : c.side, e.wireframe.needsUpdate = !0 }, this.getWireframeMaterial = function () { return e.wireframe }, this.setFrozonMaterial = function (A) { l.color.setHex(void 0 !== A.color ? A.color : s.color), l.opacity = void 0 !== A.opacity ? A.opacity : s.opacity, l.transparent = void 0 !== A.transparent ? A.transparent : s.transparent, l.side = void 0 !== A.side ? A.side : s.side, l.needsUpdate = !0 }, this.getFrozonMaterial = function () { return l }, this.setSelectedMaterial = function (A) { p.color.setHex(void 0 !== A.color ? A.color : d.color), p.opacity = void 0 !== A.opacity ? A.opacity : d.opacity, p.transparent = void 0 !== A.transparent ? A.transparent : d.transparent, p.side = void 0 !== A.side ? A.side : d.side, p.needsUpdate = !0 }, this.getSelectedMaterial = function () { return p }, this.setIsolateMaterial = function (A) { a.color.setHex(void 0 !== A.color ? A.color : r.color), a.opacity = void 0 !== A.opacity ? A.opacity : r.opacity, a.transparent = void 0 !== A.transparent ? A.transparent : r.transparent, a.side = void 0 !== A.side ? A.side : r.side, a.needsUpdate = !0 }, this.getIsolateMaterial = function () { return a }, this.resetIsolateMaterial = function () { a.color.setHex(r.color), a.opacity = r.opacity, a.transparent = r.transparent, a.side = r.side, a.needsUpdate = !0 }, e) e[g].createByBos = !0 }, lu = function (A, e) { tu.call(this, A, e) }; (lu.prototype = Object.create(tu.prototype)).constructor = lu, lu.prototype.match = function (A) { return null !== this.getMatchItem(A) }, lu.prototype.getMatchItem = function (A) { var e = this._items, t = A.userData, i = !1; if (t) for (var o = e.length, n = 0; o > n; n += 1) { var r = e[n], a = r.condition; for (var s in i = !0, a) if (a[s] !== t[s]) { i = !1; break } if (i) return r } return null }; var cu = function (A, e) { tu.call(this, A, e) }; (cu.prototype = Object.create(tu.prototype)).constructor = cu, cu.prototype.remove = function (A, e) { var t = this._items[A]; if (t && e && e.length > 0) { for (var i = 0, o = e.length; o > i; i += 1) { var n = e[i]; t.hasOwnProperty(n) && delete t[n] } uh.isEmptyObject(this._items) && this._enabled && (this._enabled = !1, this.enableStateChanged()) } }, cu.prototype.add = function (A, e, t) { var i = this._items, o = i[A]; if (e && e.length > 0) { void 0 === t && (t = !0), o || (o = i[A] = {}); for (var n = 0, r = e.length; r > n; n += 1) o[e[n]] = t; this._enabled || (this._enabled = !0, this.enableStateChanged()) } }, cu.prototype.clear = function (A) { var e = this._items; e.hasOwnProperty(A) && (delete e[A], uh.isEmptyObject(e) && this._enabled && (this._enabled = !1, this.enableStateChanged())) }; var hu = function (A, e) { tu.call(this, A, e) }; (hu.prototype = Object.create(cu.prototype)).constructor = hu, hu.prototype.match = function (A) { return null !== this.getMatchItem(A) }, hu.prototype.getMatchItem = function (A) { var e = this._items, t = A.name; for (var i in e) { var o = e[i]; if (o[t]) return o[t] } return null }; var du = function (A, e) { tu.call(this, A, e) }; (du.prototype = Object.create(cu.prototype)).constructor = du, du.prototype.match = function (A) { return null !== this.getMatchItem(A) }, du.prototype.getMatchItem = function (A) { var e = this._items, t = A.userData; if (t) for (var i in e) { var o = e[i], n = t[i]; if (n && void 0 !== o[n]) return o[n] } return null }; var pu = function () { var A = Jc, e = { IDFILTER_OFFSET: 0, FILE_VISIBLE: 0, FILE_HIDDEN: 1, VISIBLE: 2, HIDDEN: 3, TRANSLUCENT: 4, TRANSLUCENT_OTHERS: 5, WIREFRAME: 24, COLORFUL: 25, RENDER_PROMOTION: 6, IDFILTER_ENDOFFSET: 6, ISOLATEFILTER_OFFSET: 7, ISOLATE_HIDDEN: 7, ISOLATE_HIDDEN_OTHERS: 8, ISOLATE_TRANSLUCENT: 9, ISOLATE_TRANSLUCENT_OTHERS: 10, ISOLATEFILTER_ENDOFFSET: 10, USERFILTER_OFFSET: 11, USER_HIDDEN: 11, USER_OVERRIDE: 12, USER_WITH_BOARDLINE: 13, USERFILTER_ENDOFFSET: 13, CONDITIONFILTER_OFFSET: 14, CONDITION_HIDDEN_OTHERS: 14, CONDITION_TRANSLUCENT_OTHERS: 15, CONDITION_OVERRIDE: 16, CONDITION_BORDERLINE: 26, CONDITIONFILTER_ENDOFFSET: 16, ISOLATECONDITIONFILTER_OFFSET: 17, ISOLATE_CONDITION_HIDDEN: 17, ISOLATE_CONDITION_HIDDEN_OTHERS: 18, ISOLATE_CONDITION_TRANSLUCENT: 19, ISOLATE_CONDITION_TRANSLUCENT_OTHERS: 20, ISOLATECONDITIONFILTER_ENDOFFSET: 20, FROZENFILTER: 21, FROZENCONDITIONFILTER: 22, OVERRIDEFILTER: 23, BASICFILTER_COUNT: 23 }, t = new _g(!0), i = new _g(!0), o = new _g(!1), n = new _g(!0), r = new _g(!1), a = new _g(!1), s = new _g(!1), l = [], c = null, h = null, d = Vc.DISABLED, p = new su; ! function () { l[e.FILE_VISIBLE] = new nu(e.FILE_VISIBLE, "FILE_VISIBLE"), l[e.FILE_HIDDEN] = new nu(e.FILE_HIDDEN, "FILE_HIDDEN"), l[e.VISIBLE] = new ru(e.VISIBLE, "VISIBLE"), l[e.HIDDEN] = new ru(e.HIDDEN, "HIDDEN"), l[e.TRANSLUCENT] = new ru(e.TRANSLUCENT, "TRANSLUCENT"), l[e.TRANSLUCENT_OTHERS] = new ru(e.TRANSLUCENT_OTHERS, "TRANSLUCENT_OTHERS"), l[e.RENDER_PROMOTION] = new ru(e.RENDER_PROMOTION, "RENDER_PROMOTION"), l[e.WIREFRAME] = new ru(e.WIREFRAME, "WIREFRAME"), l[e.COLORFUL] = new ru(e.COLORFUL, "COLORFUL"), l[e.ISOLATE_HIDDEN] = new ru(e.ISOLATE_HIDDEN, "ISOLATE_HIDDEN"), l[e.ISOLATE_HIDDEN_OTHERS] = new ru(e.ISOLATE_HIDDEN_OTHERS, "ISOLATE_HIDDEN_OTHERS"), l[e.ISOLATE_TRANSLUCENT] = new ru(e.ISOLATE_TRANSLUCENT, "ISOLATE_TRANSLUCENT"), l[e.ISOLATE_TRANSLUCENT_OTHERS] = new ru(e.ISOLATE_TRANSLUCENT_OTHERS, "ISOLATE_TRANSLUCENT_OTHERS"), l[e.USER_HIDDEN] = new du(e.USER_HIDDEN, "USER_HIDDEN"), l[e.USER_OVERRIDE] = new du(e.USER_OVERRIDE, "USER_OVERRIDE"), l[e.CONDITION_BORDERLINE] = new iu(e.CONDITION_BORDERLINE, "CONDITION_BORDERLINE"), l[e.CONDITION_HIDDEN_OTHERS] = new iu(e.CONDITION_HIDDEN_OTHERS, "CONDITION_HIDDEN_OTHERS"), l[e.CONDITION_TRANSLUCENT_OTHERS] = new iu(e.CONDITION_TRANSLUCENT_OTHERS, "CONDITION_TRANSLUCENT_OTHERS"), l[e.CONDITION_OVERRIDE] = new lu(e.CONDITION_OVERRIDE, "CONDITION_OVERRIDE"), l[e.ISOLATE_CONDITION_HIDDEN] = new iu(e.ISOLATE_CONDITION_HIDDEN, "ISOLATE_CONDITION_HIDDEN"), l[e.ISOLATE_CONDITION_HIDDEN_OTHERS] = new iu(e.ISOLATE_CONDITION_HIDDEN_OTHERS, "ISOLATE_CONDITION_HIDDEN_OTHERS"), l[e.ISOLATE_CONDITION_TRANSLUCENT] = new iu(e.ISOLATE_CONDITION_TRANSLUCENT, "ISOLATE_CONDITION_TRANSLUCENT"), l[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS] = new iu(e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS, "ISOLATE_CONDITION_TRANSLUCENT_OTHERS"), h = new ru(e.FROZENFILTER, "FROZENFILTER"), l[e.FROZENCONDITIONFILTER] = new iu(e.FROZENCONDITIONFILTER, "FROZENCONDITIONFILTER"), l[e.FROZENFILTER] = h, c = new hu(e.OVERRIDEFILTER, "OVERRIDEFILTER"), l[e.OVERRIDEFILTER] = c; var d = null, p = {}; for (d in p[e.HIDDEN] = A.MATCH_RETURN_FALSE, p[e.VISIBLE] = A.NOMATCH_RETURN_FALSE, p[e.USER_HIDDEN] = A.MATCH_RETURN_FALSE, p[e.CONDITION_HIDDEN_OTHERS] = A.NOMATCH_RETURN_FALSE, p[e.ISOLATE_HIDDEN] = A.MATCH_RETURN_FALSE, p[e.ISOLATE_HIDDEN_OTHERS] = A.NOMATCH_RETURN_FALSE, p[e.ISOLATE_CONDITION_HIDDEN_OTHERS] = A.NOMATCH_RETURN_FALSE, t.setFilterMode(p), p) l[d].registerToCompoundFilter(t); var g = {}; for (d in g[e.FROZENFILTER] = A.MATCH_RETURN_FALSE, g[e.FROZENCONDITIONFILTER] = A.MATCH_RETURN_FALSE, g[e.TRANSLUCENT] = A.MATCH_RETURN_FALSE, g[e.TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_FALSE, g[e.CONDITION_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_FALSE, g[e.ISOLATE_TRANSLUCENT] = A.MATCH_RETURN_FALSE, g[e.ISOLATE_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_FALSE, g[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_FALSE, n.setFilterMode(g), g) l[d].registerToCompoundFilter(n); var u = {}; u[e.ISOLATE_TRANSLUCENT] = A.MATCH_RETURN_TRUE, u[e.ISOLATE_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_TRUE, u[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_TRUE, u[e.CONDITION_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_TRUE, u[e.TRANSLUCENT] = A.MATCH_RETURN_TRUE, u[e.TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_TRUE, u[e.OVERRIDEFILTER] = A.MATCH_RETURN_TRUE, u[e.USER_OVERRIDE] = A.MATCH_RETURN_TRUE, u[e.CONDITION_OVERRIDE] = A.MATCH_RETURN_TRUE, u[e.FROZENFILTER] = A.MATCH_RETURN_TRUE, u[e.FROZENCONDITIONFILTER] = A.MATCH_RETURN_TRUE; var f = {}; for (d in f[e.ISOLATE_TRANSLUCENT] = 5, f[e.ISOLATE_TRANSLUCENT_OTHERS] = 5, f[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS] = 5, f[e.CONDITION_TRANSLUCENT_OTHERS] = 5, f[e.TRANSLUCENT] = 5, f[e.TRANSLUCENT_OTHERS] = 5, f[e.OVERRIDEFILTER] = 0, f[e.USER_OVERRIDE] = 0, f[e.CONDITION_OVERRIDE] = 0, f[e.FROZENFILTER] = 3, f[e.FROZENCONDITIONFILTER] = 3, i.setFilterMode(u), i.setFilterPriority(f), u) l[d].registerToCompoundFilter(i); var m = {}; for (d in m[e.OVERRIDEFILTER] = A.MATCH_RETURN_TRUE, m[e.USER_OVERRIDE] = A.MATCH_RETURN_TRUE, m[e.CONDITION_OVERRIDE] = A.MATCH_RETURN_TRUE, m[e.CONDITION_TRANSLUCENT_OTHERS] = A.MATCH_RETURN_TRUE, o.setFilterMode(m), m) l[d].registerToCompoundFilter(o); var C = {}; for (d in C[e.FILE_VISIBLE] = A.NOMATCH_RETURN_TRUE, C[e.FILE_HIDDEN] = A.MATCH_RETURN_TRUE, r.setFilterMode(C), C) l[d].registerToCompoundFilter(r); var y = {}; for (d in y[e.RENDER_PROMOTION] = A.MATCH_RETURN_TRUE, y[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS] = A.MATCH_RETURN_TRUE, a.setFilterMode(y), y) l[d].registerToCompoundFilter(a); var v = {}; for (d in v[e.CONDITION_BORDERLINE] = A.MATCH_RETURN_TRUE, s.setFilterMode(v), v) l[d].registerToCompoundFilter(s) }(), this.getMaterialSelector = function () { return p }, this.getBasicFilterList = function () { return l }, this.getFilterType = function () { return e }, this.saveState = function () { for (var A = {}, e = null, t = 0, i = l.length; i > t; t += 1) A[(e = l[t]).getName()] = e.getAll(); return A.sceneState = this.getSceneState(), A.version = "1.0", A }, this.loadState = function (A) { if (this.clearAll(), A.hasOwnProperty("version")) { if ("1.0" === A.version) { for (var t = {}, i = 0, o = l.length; o > i; i += 1) t[l[i].getName()] = i; for (var n in A) "sceneState" !== n && "version" !== n && (t.hasOwnProperty(n) ? l[t[n]].setByData(A[n]) : Bh.warn("Warning: Not supported filter '" + n + "'")) } } else for (var r in A) "sceneState" !== r && (2 > r ? l[r].setByData(A[r]) : r > 2 ? e.BASICFILTER_COUNT + 2 > r && l[r - 1].setByData(A[r]) : 2 !== r && "2" !== r || Bh.warn("Warning: Old version filter data! The selection state is out of the filter, can not restore it.")); this.setSceneState(A.sceneState) }, this.clear = function () { for (var A = 0, t = l.length; t > A; A += 1) { var i = l[A].getType(); i !== e.FROZENFILTER && i !== e.CONDITION_BORDERLINE && l[A].clearAll() } this.setSceneState(Vc.DISABLED) }, this.clearAll = function () { for (var A = 0, e = l.length; e > A; A += 1) l[A].clearAll(); this.setSceneState(Vc.DISABLED) }, this.clearIsolate = function () { this.clearAllIsolateList(), this.clearAllIsolateConditions() }, this.clearFrozenList = function () { h.clearAll() }, this.addToFrozenList = function (A) { h.add(A) }, this.removeFromFrozenList = function (A) { h.remove(A) }, this.setFrozenList = function (A) { this.clearFrozenList(), this.addToFrozenList(A) }, this.setFrozenConditions = function (A) { l[e.FROZENCONDITIONFILTER].setByData(A) }, this.getFrozenConditions = function () { return l[e.FROZENCONDITIONFILTER].getAll() }, this.clearFrozenConditions = function () { l[e.FROZENCONDITIONFILTER].clear() }, this.clearFrozen = function () { this.clearFrozenList(), this.clearFrozenConditions() }, this.clearAllIdList = function () { var A = null; for (A = e.IDFILTER_OFFSET; e.IDFILTER_ENDOFFSET >= A; A += 1) l[A].clearAll() }, this.clearIdList = function (A) { var t = e.IDFILTER_OFFSET + A; e.IDFILTER_OFFSET > t || t > e.IDFILTER_ENDOFFSET || l[t].clear() }, this.addToIdList = function (A, t) { var i = e.IDFILTER_OFFSET + A; e.IDFILTER_OFFSET > i || i > e.IDFILTER_ENDOFFSET || l[i].add(t) }, this.removeFromIdList = function (A, t) { var i = e.IDFILTER_OFFSET + A; e.IDFILTER_OFFSET > i || i > e.IDFILTER_ENDOFFSET || l[i].remove(t) }, this.setIdList = function (A, e) { this.clearIdList(A), this.addToIdList(A, e) }, this.clearAllOverrideList = function () { c.clearAll() }, this.clearOverrideList = function (A) { c.clear(A) }, this.addToOverrideList = function (A, e, t) { e && e.length > 0 && (p.has(t) || (t = p.getDefaultMaterialName()), c.add(A, e, t)) }, this.removeFromOverrideList = function (A, e) { c.remove(A, e) }, this.setOverrideList = function (A, e, t) { this.clearOverrideList(A), this.addToOverrideList(A, e, t) }, this.addToOverrideListByColor = function (A, e, t) { var i = p.add(t); c.add(A, e, i) }, this.setOverrideListByColor = function (A, e, t) { this.clearOverrideList(A), this.addToOverrideListByColor(A, e, t) }, this.clearAllUserList = function () { var A = null; for (A = e.USERFILTER_OFFSET; e.USERFILTER_ENDOFFSET >= A; A += 1) l[A].clearAll() }, this.clearUserListByType = function (A) { var t = e.USERFILTER_OFFSET + A; e.USERFILTER_OFFSET > t || t > e.USERFILTER_ENDOFFSET || l[t].clearAll() }, this.clearUserList = function (A, t) { var i = e.USERFILTER_OFFSET + A; e.USERFILTER_OFFSET > i || i > e.USERFILTER_ENDOFFSET || l[i].clear(t) }, this.addToUserList = function (A, t, i, o) { var n = e.USERFILTER_OFFSET + A; e.USERFILTER_OFFSET > n || n > e.USERFILTER_ENDOFFSET || l[n].add(t, i, o) }, this.removeFromUserList = function (A, t, i) { var o = e.USERFILTER_OFFSET + A; e.USERFILTER_OFFSET > o || o > e.USERFILTER_ENDOFFSET || l[o].remove(t, i) }, this.setUserList = function (A, e, t, i) { this.clearUserList(A, e), this.addToUserList(A, e, t, i) }, this.isIsolate = function () { var A = null; for (A = e.ISOLATEFILTER_OFFSET; e.ISOLATEFILTER_ENDOFFSET >= A; A += 1) if (!l[A].isEmpty()) return !0; return !1 }, this.isFiltering = function () { return !!this.isIsolate() || !(l[e.HIDDEN].isEmpty() && l[e.VISIBLE].isEmpty() && l[e.TRANSLUCENT].isEmpty() && l[e.TRANSLUCENT_OTHERS].isEmpty() && this.getSceneState() === Vc.DISABLED) }, this.setFrozonMaterial = function (A) { p.setFrozonMaterial(A) }, this.getFrozonMaterial = function () { return p.getFrozonMaterial() }, this.setSelectedMaterial = function (A) { p.setSelectedMaterial(A) }, this.getSelectedMaterial = function () { return p.getSelectedMaterial() }, this.setIsolateMaterial = function (A) { p.setIsolateMaterial(A) }, this.getIsolateMaterial = function () { return p.getIsolateMaterial() }, this.resetIsolateMaterial = function () { p.resetIsolateMaterial() }, this.clearAllIsolateList = function () { var A = null; for (A = e.ISOLATEFILTER_OFFSET; e.ISOLATEFILTER_ENDOFFSET >= A; A += 1) l[A].clear() }, this.clearIsolateList = function (A) { var t = e.ISOLATEFILTER_OFFSET + A; e.ISOLATEFILTER_OFFSET > t || t > e.ISOLATEFILTER_ENDOFFSET || l[t].clear() }, this.addToIsolateList = function (A, t) { var i = e.ISOLATEFILTER_OFFSET + A; e.ISOLATEFILTER_OFFSET > i || i > e.ISOLATEFILTER_ENDOFFSET || l[i].add(t) }, this.removeFromIsolateList = function (A, t) { var i = e.ISOLATEFILTER_OFFSET + A; e.ISOLATEFILTER_OFFSET > i || i > e.ISOLATEFILTER_ENDOFFSET || l[i].remove(t) }, this.setIsolateList = function (A, e) { this.clearIsolateList(A), this.addToIsolateList(A, e) }, this.setIsolateConditions = function (A, t) { var i = e.ISOLATECONDITIONFILTER_OFFSET + t; e.ISOLATECONDITIONFILTER_OFFSET > i || i > e.ISOLATECONDITIONFILTER_ENDOFFSET || l[i].setByData(A) }, this.getIsolateConditions = function (A) { var t = null, i = e.ISOLATECONDITIONFILTER_OFFSET + A; return e.ISOLATECONDITIONFILTER_OFFSET > i || i > e.ISOLATECONDITIONFILTER_ENDOFFSET || (t = l[i].getAll()), t }, this.clearIsolateConditions = function (A) { var t = e.ISOLATECONDITIONFILTER_OFFSET + A; e.ISOLATECONDITIONFILTER_OFFSET > t || t > e.ISOLATECONDITIONFILTER_ENDOFFSET || l[t].clear() }, this.clearAllIsolateConditions = function () { var A = null; for (A = e.ISOLATECONDITIONFILTER_OFFSET; e.ISOLATECONDITIONFILTER_ENDOFFSET >= A; A += 1) l[A].clearAll() }, this.setConditions = function (A, t) { var i = e.CONDITIONFILTER_OFFSET + A; e.CONDITIONFILTER_OFFSET > i || i > e.CONDITIONFILTER_ENDOFFSET || l[i].setByData(t) }, this.getConditions = function (A) { var t = null, i = e.CONDITIONFILTER_OFFSET + A; return e.CONDITIONFILTER_OFFSET > i || i > e.CONDITIONFILTER_ENDOFFSET || (t = l[i].get()), t }, this.clearConditions = function (A) { var t = e.CONDITIONFILTER_OFFSET + A; e.CONDITIONFILTER_OFFSET > t || t > e.CONDITIONFILTER_ENDOFFSET || l[t].clearAll() }, this.clearAllConditions = function () { var A = null; for (A = e.CONDITIONFILTER_OFFSET; e.CONDITIONFILTER_ENDOFFSET >= A; A += 1) l[A].clear() }, this.makeSceneTranslucent = function () { this.setSceneState(Vc.TRANSLUCENT) }, this.cancelSceneTranslucent = function () { this.setSceneState(Vc.DISABLED) }, this.hideScene = function () { this.setSceneState(Vc.HIDDEN) }, this.showScene = function () { this.setSceneState(Vc.DISABLED) }, this.setSceneState = function (A) { d = A }, this.getSceneState = function () { return d }, this.cancelTranslucent = function () { this.clearIdList(Dc.TRANSLUCENT), this.clearIdList(Dc.TRANSLUCENT_OTHERS) }, this._addIdsToFilter = function (A, t) { var i = e.IDFILTER_OFFSET + A; e.IDFILTER_OFFSET > i || i > e.IDFILTER_ENDOFFSET || l[i].add(t) }, this.hideByIds = function (A) { this._addIdsToFilter(Dc.HIDDEN, A) }, this.showByIds = function (A) { this._addIdsToFilter(Dc.VISIBLE, A) }, this.makeTranslucentByIds = function (A) { this._addIdsToFilter(Dc.TRANSLUCENT, A) }, this.makeTranslucentOthersByIds = function (A) { this._addIdsToFilter(Dc.TRANSLUCENT_OTHERS, A) }, this._isVisible = function (A) { return this.getSceneState() !== Vc.HIDDEN && t.apply(A) }, this._isSelectable = function (A) { return this.getSceneState() !== Vc.TRANSLUCENT && n.apply(A, this.getSceneState()) }, this._isSelectableById = function (A) { return !h.get()[A] }, this.getMaterialNameByColor = function (A) { return p.getMaterialNameByColor(A) }, this.getMaterialNameByWireframe = function (A) { return p.getMaterialNameByWireframe(A) }, this.addOverrideMaterial = function (A) { p.addOverrideMaterial(A) }, this.updateOverrideMaterial = function (A) { p.updateOverrideMaterial(A) }, this.getMaterialByName = function (A) { return p.get(A) }, this._getOverrideMaterial = function (A) { if (this.getSceneState() === Vc.TRANSLUCENT) return p.get("scene"); var t = i.getApplyFilterId(A), o = null, n = ""; switch (t) { case e.ISOLATE_TRANSLUCENT: case e.ISOLATE_TRANSLUCENT_OTHERS: case e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS: o = this.getIsolateMaterial(); break; case e.CONDITION_TRANSLUCENT_OTHERS: case e.TRANSLUCENT: case e.TRANSLUCENT_OTHERS: o = p.get("scene"); break; case e.FROZENFILTER: case e.FROZENCONDITIONFILTER: break; case e.OVERRIDEFILTER: case e.USER_OVERRIDE: case e.CONDITION_OVERRIDE: var r = l[t].getMatchItem(A); n = r.hasOwnProperty("color") ? p.getMaterialNameByColor(r.color) : r.material ? r.material : r } return o || "" === n || (p.has(n) || (n = p.getDefaultMaterialName()), o = p.get(n)), o }, this._getMaterialName = function (A) { if (this.getSceneState() === Vc.TRANSLUCENT) return "scene"; var t = i.getApplyFilterId(A), o = ""; switch (t) { case e.ISOLATE_TRANSLUCENT: case e.ISOLATE_TRANSLUCENT_OTHERS: case e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS: o = this.getIsolateMaterial().name; break; case e.CONDITION_TRANSLUCENT_OTHERS: case e.TRANSLUCENT: case e.TRANSLUCENT_OTHERS: o = "scene"; break; case e.FROZENFILTER: case e.FROZENCONDITIONFILTER: break; case e.OVERRIDEFILTER: case e.USER_OVERRIDE: case e.CONDITION_OVERRIDE: var n = l[t].getMatchItem(A); o = n.hasOwnProperty("color") ? p.getMaterialNameByColor(n.color) : n.material ? n.material : n } return o }, this._getMaterialByName = function (A) { return A instanceof qA ? A : "isolate" === A ? p.getIsolateMaterial() : "looming" === A || "scene" === A ? p.getFrozonMaterial() : "selected" === A ? p.getSelectedMaterial() : p.get(A) }, this._hasHighPriorityOverrideMaterial = function (A) { return this.getSceneState() === Vc.TRANSLUCENT || o.apply(A) }, this._hasOverrideMaterial = function (A) { return this.getSceneState() === Vc.TRANSLUCENT || o.apply(A) || i.apply(A) }, this._isHiddenFileId = function (A) { return r.apply(A) }, this._hasHiddenFileIdFilter = function () { return !r.isEmpty() }, this._hasVisibleFilter = function () { return this.getSceneState() === Vc.HIDDEN || !t.isEmpty() }, this._hasPickableFilter = function () { return this.getSceneState() === Vc.TRANSLUCENT || !n.isEmpty() }, this._hasOverrideMaterialFilter = function () { return this.getSceneState() === Vc.TRANSLUCENT || !i.isEmpty() }, this._hasLowPriorityOverride = function () { return i.hasFilterNotIn(o) }, this._isRenderPromotion = function (A) { return a.apply(A) }, this._hasRenderPromotionFilter = function () { return !a.isEmpty() }, this._isRenderWithBoardline = function (A) { return s.apply(A) }, this._hasRenderWithBoardlineFilter = function () { return !s.isEmpty() }, this._getFilterObjectsKeys = function (A) { var e = l[A].get(), t = []; for (var i in e) t.push(i); return t } }, gu = function (A) { this.materialSelector = A; var e = function (A) { var e = []; for (var t in A) !0 === A[t] && e.push(t); return e }; this.saveState = function (A) { var e = A.getIsolateFilterAction(), t = A.getModelIsolateFilterAction(), i = A.getFilterActionList(), o = { isolateAction: e, modelIsolateAction: t, modelActions: A.getModelFilterActionList(), actions: i, sceneState: A.getSceneState(), version: "1.0" }; return JSON.stringify(o) }, this.createAction = function (A) { var e = A.className, t = null; switch (e) { case "IsolateIdsFA": (t = new Hg(A.isolateHide)).ids = A.ids; break; case "VisibleIdsFA": (t = new Pg(A.flag, A.isVisible)).ids = A.ids; break; case "OverrideIdsFA": if (o = A.material) { var i = this.materialSelector.getMaterialNameByColor({ opacity: A.material.opacity, color: A.material.color }); o = this.materialSelector.get(i) } (t = new qg(A.flag, o)).ids = A.ids; break; case "TransparentIdsFA": (t = new Yg(A.flag, A.isOpaque)).ids = A.ids; break; case "VisibleConditionFA": (t = new Jg(A.flag, A.isVisible)).conditions = A.conditions; break; case "OverrideConditionFA": var o; if (o = A.material) { i = this.materialSelector.getMaterialNameByColor({ opacity: o.opacity, color: o.color }); o = this.materialSelector.get(i) } (t = new zg(A.flag, o)).conditions = A.conditions; break; case "TransparentConditionFA": (t = new Zg(A.flag, A.isOpaque)).conditions = A.conditions; break; case "IsolateConditionFA": (t = new Xg(A.isolateHide)).conditions = A.conditions; break; default: Bh.warn("Warning: Not supported filterAction '" + e + "'") } return t }, this.createActionByOldFilter = function (A, t) { var i = []; switch (A) { case "CONDITION_OVERRIDE": for (var o = [], n = 0; t.length > n; n += 1) { var r = t[n]; o.push(r.condition) } var a = this.materialSelector.add(p = r.color), s = this.materialSelector.get(a); (g = new zg(!0, s)).conditions = o, i.push(g); break; case "CONDITION_TRANSLUCENT_OTHERS": (g = new Zg(!1, !1)).conditions = t, i.push(g); break; case "ISOLATE_CONDITION_HIDEEN_OTHERS": (g = new Xg(!0)).conditions = t, i.push(g); break; case "ISOLATE_CONDITION_TRANSLUCENT_OTHERS": (g = new Xg(!1)).conditions = t, i.push(g); break; case "ISOLATE_HIDDEN_OTHERS": (g = new Hg(!0)).ids = e(t), i.push(g); break; case "ISOLATE_TRANSLUCENT_OTHERS": (g = new Hg(!1)).ids = e(t), i.push(g); break; case "OVERRIDEFILTER": for (var l in t) if (t.hasOwnProperty(l)) { var c = [], h = t[l]; for (var d in h) c.push(d); var p = this.materialSelector.getMaterialParamsFromName(h[d]); a = this.materialSelector.add(p), s = this.materialSelector.get(a); (g = new qg(!0, s)).ids = c, i.push(g) } break; case "TRANSLUCENT": (g = new Yg(!0, !1)).ids = e(t), i.push(g); break; case "TRANSLUCTANT_OTHERS": (g = new Yg(!1, !1)).ids = e(t), i.push(g); break; case "VISIBLE": var g; (g = new Pg(!0, !0)).ids = e(t), i.push(g); break; default: Bh.warn("Warning: Not supported filter '" + A + "'") } return i }, this.loadState = function (A, e) { e.clearFilterActionList(), e.clearModelFilterActionList(), e.getObjectInfoManager().resetAll(), e.getModelInfoManager().resetAll(); var t = JSON.parse(A); if (t.hasOwnProperty("version") && "1.0" === t.version) { var i = t.isolateAction; if (i) { var o = this.createAction(i); e.pushBack(o) } for (var n = t.actions, r = 0; n.length > r; r += 1) { o = this.createAction(n[r]); e.pushBack(o) } var a = t.modelIsolateAction; if (a) { o = this.createAction(a); e.pushModelBack(o) } for (var s = t.modelActions, l = 0; s.length > l; l += 1) { o = this.createAction(s[l]); e.pushModelBack(o) } } e.setSceneState(t.sceneState) } }, uu = function () { var A = {}, e = [], t = !1, i = !1, o = !1, n = !1, r = !1, a = new aA; this.init = function (A) {}, this.clearData = function () {}, this.getObjectsMap = function () {}, this.add = function (t) { A[t] = { state: Lc.Visible, modelKey: t, material: null }, e = Object.keys(A) }, this.remove = function (t) { delete A[t], e = Object.keys(A) }, this.calculateVisibleComponentsBbox = function () {}, this.getVisibleComponentsBbox = function () { return a.isEmpty() && this.calculateVisibleComponentsBbox(), a }, this.arrayToMap = function (A) { for (var e = {}, t = 0; A.length > t; t += 1) { var i = A[t]; e[i] = i } return e }, this.isMatchConditions = function (A, e) { for (var t = !0, i = 0, o = e.length; o > i; i += 1) { var n = e[i]; for (var r in n) { if (!Array.isArray(n[r]) && A[r] !== n[r]) { t = !1; break } if (Array.isArray(n[r]) && -1 === n[r].indexOf(A[r])) { t = !1; break } } if (!0 === t) break; e.length - 1 > i && (t = !0) } return t }, this.matchConditions = function (A, e) {}, this.setVisible = function (t, o, n) { var r = function (A) { o ? A.state = Lc.Visible : (i = !0, A.state &= ~Lc.Visible) }; if (void 0 === n || !0 === n) for (var a = 0, s = t.length; s > a; a += 1) A.hasOwnProperty(t[a]) && r(A[t[a]]); else for (var l = this.arrayToMap(t), c = 0, h = e.length; h > c; c += 1) l.hasOwnProperty(e[c]) || r(A[e[c]]) }, this.isVisible = function (e) { if (A.hasOwnProperty(e)) return A[e].state & Lc.Visible > 0 }, this.clearVisible = function () { for (var e in i = !1, A) { if (A.hasOwnProperty(e)) A[e].state = Lc.Visible } }, this.hideAll = function () { for (var e in i = !0, A) { if (A.hasOwnProperty(e)) A[e].state &= ~Lc.Visible } }, this.setTransparent = function (i, o, r) { var a = function (A) { o ? (A.state |= Lc.Transparent, t = !0, n = !0) : A.state &= ~Lc.Transparent }; if (void 0 === r || !0 === r) for (var s = 0, l = i.length; l > s; s += 1) A.hasOwnProperty(i[s]) && a(A[i[s]]); else for (var c = this.arrayToMap(i), h = 0, d = e.length; d > h; h += 1) c.hasOwnProperty(e[h]) || a(A[e[h]]) }, this.isTransparent = function (e) { if (A.hasOwnProperty(e)) { var t = A[e], i = (t.state & Lc.Transparent) > 0; return i = i || (t.state & Lc.TransparentByIsolate) > 0 } }, this.clearTransparent = function () { for (var e in n = !1, A) { if (A.hasOwnProperty(e)) A[e].state &= ~Lc.Transparent } }, this.setMaterial = function (i, o, n) { if (void 0 === n || !0 === n) for (var r = 0, a = i.length; a > r; r += 1) { if (A.hasOwnProperty(i[r])) A[i[r]].material = o, t = !0 } else for (var s = this.arrayToMap(i), l = 0, c = e.length; c > l; l += 1) { if (!s.hasOwnProperty(e[l])) A[e[l]].material = o, t = !0 } }, this.getMaterial = function (e) { if (A.hasOwnProperty(e)) return A[e].material }, this.clearMaterial = function () { for (var e in A) { A[e].material = null } }, this.setIsolateHide = function (t, i, n) { var r = function (A) { i ? (o = !0, A.state |= Lc.HideByIsolate) : A.state &= ~Lc.HideByIsolate }; if (void 0 === n || !0 === n) for (var a = 0, s = t.length; s > a; a += 1) A.hasOwnProperty(t[a]) && r(A[t[a]]); else for (var l = this.arrayToMap(t), c = 0, h = e.length; h > c; c += 1) l.hasOwnProperty(e[c]) || r(A[e[c]]) }, this.isIsolateHide = function (e) { if (A.hasOwnProperty(e)) return (A[e].state & Lc.HideByIsolate) > 0 }, this.setIsolateTransparent = function (i, o, n) { var a = function (A) { o ? (A.state |= Lc.TransparentByIsolate, t = !0, r = !0) : A.state &= ~Lc.TransparentByIsolate }; if (void 0 === n || !0 === n) for (var s = 0, l = i.length; l > s; s += 1) A.hasOwnProperty(i[s]) && a(A[i[s]]); else for (var c = this.arrayToMap(i), h = 0, d = e.length; d > h; h += 1) c.hasOwnProperty(e[h]) || a(A[e[h]]) }, this.isIsolateTransparent = function (e) { if (A.hasOwnProperty(e)) return (A[e].state & Lc.TransparentByIsolate) > 0 }, this.clearIsolateHide = function () { o = !1; var e = Object.keys(A); e.length > 0 && this.setIsolateHide(e, !1) }, this.clearIsolates = function () { r = !1, o = !1; var e = Object.keys(A); e.length > 0 && (this.setIsolateHide(e, !1), this.setIsolateTransparent(e, !1)) }, this.clearTransparentByIsolate = function () { for (var e in r = !1, A) { if (A.hasOwnProperty(e)) A[e].state &= ~Lc.TransparentByIsolate } }, this.isHidden = function (e) { if (A.hasOwnProperty(e)) { var t = A[e], i = 0 == (t.state & Lc.Visible); return i = i || (t.state & Lc.HideByIsolate) > 0 } }, this.isFrozen = function (e) { if (A.hasOwnProperty(e)) { var t = A[e], i = (t.state & Lc.Transparent) > 0; return i = i || (t.state & Lc.TransparentByIsolate) > 0 } }, this.resetAll = function () { for (var e in A) A.hasOwnProperty(e) && (A[e].state = Lc.Visible, A[e].material = null); t = !1, i = o = !1, n = r = !1 }, this.hasOverrideMaterial = function (e) { return void 0 === e ? t : A.hasOwnProperty(e) ? null !== A[e].material || this.isTransparent(e) : void 0 }, this.hasObjectHidden = function () { return i || o }, this.hasObjectCantSelected = function () { return i || n || r }, this.hasObjectTransparent = function () { return n || r } }, fu = function () { var A = {}, e = {}; this.init = function (t) { for (var i in A = t) e.hasOwnProperty(i) && !uh.isEmptyObject(e[i]) || uh.isEmptyObject(A[i]) || (e[i] = Object.keys(A[i])) }, this.reinit = function (t) { for (var i in e = {}, A = t) e[i] = Object.keys(t[i]) }, this.clear = function () { A = {}, e = {} }, this.getObjectsMap = function () { return A }, this.getObjectIds = function (A) { return e.hasOwnProperty(A) ? e[A] : [] } }, mu = function () { var A = new fu, e = !1, t = !1, i = !1, o = !1, n = !1, r = !1, a = new aA, s = !1; this.inactivatedIdMap = {}, this.inactivatedIds = [], this.bIsInactivateAll = !1, this.init = function (e) { A.init(e) }, this.reinit = function (e) { A.reinit(e) }, this.clearData = function () { A.clear() }, this.getObjectsMap = function () { return A.getObjectsMap() }, this.calculateVisibleComponentsBbox = function () { a.makeEmpty(); var e = A.getObjectsMap(); for (var t in e) for (var i = e[t], o = A.getObjectIds(t), n = null, r = 0, l = o.length; l > r; r += 1) { var c = o[r]; if (!this.isHidden(c)) { var h = i[c][0]; if (h.boundingBox) { !n && h.model && (n = h.model.getModelMatrix()); var d = h.boundingBox.clone(); n && d.applyMatrix4(n), d.isEmpty() || (a.expandByPoint(d.min), a.expandByPoint(d.max)) } } } s = !1 }, this.getVisibleComponentsBbox = function () { return (s || a.isEmpty()) && this.calculateVisibleComponentsBbox(), a }, this.needUpdateBoxAfterExplode = function () { s = !0 }, this.arrayToMap = function (A) { for (var e = {}, t = 0; A.length > t; t += 1) { var i = A[t]; e[i] = i } return e }, this.isMatchConditions = function (A, e) { for (var t = !0, i = 0, o = e.length; o > i; i += 1) { var n = e[i]; for (var r in n) { if (!Array.isArray(n[r]) && A[r] !== n[r]) { t = !1; break } if (Array.isArray(n[r]) && -1 === n[r].indexOf(A[r])) { t = !1; break } } if (!0 === t) break; e.length - 1 > i && (t = !0) } return t }, this.matchConditions = function (e, t) { var i = A.getObjectsMap(); for (var o in i) for (var n = [], r = [], a = i[o], s = A.getObjectIds(o), l = 0, c = s.length; c > l; l += 1) { var h = s[l], d = a[h][0].userData || {}; d.elementId = a[h][0].userId, this.isMatchConditions(d, e) ? n.push(h) : r.push(h) } t && t(n, !0), t && t(r, !1) }, this.getMatchIds = function (e) { var t = A.getObjectsMap(), i = []; for (var o in t) for (var n = t[o], r = A.getObjectIds(o), a = 0, s = r.length; s > a; a += 1) { var l = r[a], c = n[l][0].userData || {}; c.elementId = n[l][0].userId, !0 === this.isMatchConditions(c, e) && i.push(l) } return i }, this.setVisible = function (e, t, o) { var n = function (A) { t ? A.state = Lc.Visible : (i = !0, A.state &= ~Lc.Visible) }, r = A.getObjectsMap(); for (var a in r) { var s = r[a]; if (void 0 === o || !0 === o) for (var l = 0, c = e.length; c > l; l += 1) { if (s.hasOwnProperty(f = e[l]) && this.isActive(f)) { var h = s[f][0]; n(h) } } else { for (var d = this.arrayToMap(e), p = A.getObjectIds(a), g = 0, u = p.length; u > g; g += 1) { var f; !d.hasOwnProperty(f = p[g]) && this.isActive(f) && n(h = s[f][0]) } d = null } } }, this.isVisible = function (e) { var t = A.getObjectsMap(); for (var i in t) { var o = t[i]; if (o.hasOwnProperty(e)) return o[e][0].state & Lc.Visible > 0 } }, this.clearVisible = function () { var e = A.getObjectsMap(); for (var t in i = !1, this.inactivatedIds.length > 0 && (i = !0), e) for (var o = e[t], n = A.getObjectIds(t), r = 0, a = n.length; a > r; r += 1) { var s = n[r], l = o[s][0]; this.isActive(s) && (l.state = Lc.Visible) } }, this.hideAll = function () { var e = A.getObjectsMap(); for (var t in i = !0, e) for (var o = e[t], n = A.getObjectIds(t), r = 0, a = n.length; a > r; r += 1) { o[n[r]][0].state &= ~Lc.Visible } }, this.setTransparent = function (t, i, o) { var r = function (A) { i ? (A.state |= Lc.Transparent, e = !0, n = !0) : A.state &= ~Lc.Transparent }, a = A.getObjectsMap(); for (var s in a) { var l = a[s]; if (void 0 === o || !0 === o) for (var c = 0, h = t.length; h > c; c += 1) { if (this.isActive(m = t[c]) && l.hasOwnProperty(m)) { var d = l[m][0]; r(d) } } else { for (var p = this.arrayToMap(t), g = A.getObjectIds(s), u = 0, f = g.length; f > u; u += 1) { var m; this.isActive(m = g[u]) && !p.hasOwnProperty(m) && r(d = l[m][0]) } p = null } } }, this.isTransparent = function (e) { var t = A.getObjectsMap(); for (var i in t) { var o = t[i]; if (o.hasOwnProperty(e) && this.isActive(e)) { var n = o[e][0], r = (n.state & Lc.Transparent) > 0; return r = r || (n.state & Lc.TransparentByIsolate) > 0 } } }, this.clearTransparent = function () { var e = A.getObjectsMap(); for (var t in n = !1, e) for (var i = e[t], o = A.getObjectIds(t), r = 0, a = o.length; a > r; r += 1) { var s = o[r]; if (this.isActive(s)) i[s][0].state &= ~Lc.Transparent } }, this.setMaterial = function (t, i, o) { var n = A.getObjectsMap(); for (var r in n) { var a = n[r]; if (void 0 === o || !0 === o) for (var s = 0, l = t.length; l > s; s += 1) { if (this.isActive(u = t[s]) && a.hasOwnProperty(u)) { var c = a[u][0]; c.material = i, e = !0 } } else { for (var h = this.arrayToMap(t), d = A.getObjectIds(r), p = 0, g = d.length; g > p; p += 1) { var u; this.isActive(u = d[p]) && !h.hasOwnProperty(u) && ((c = a[u][0]).material = i, e = !0) } h = null } } }, this.getMaterial = function (e) { var t = A.getObjectsMap(); for (var i in t) { var o = t[i]; if (o.hasOwnProperty(e)) return o[e][0].material } }, this.clearMaterial = function () { var e = A.getObjectsMap(); for (var t in e) { var i = e[t]; for (var o in i) this.isActive(o) && (i[o][0].material = null) } }, this.setWireFrameMaterial = function (e, i, o) { var n = A.getObjectsMap(); for (var r in n) { var a = n[r]; if (void 0 === o || !0 === o) for (var s = 0, l = e.length; l > s; s += 1) { if (a.hasOwnProperty(u = e[s])) { var c = a[u][0]; c.wireFrameMaterial = i, t = !0 } } else { for (var h = this.arrayToMap(e), d = A.getObjectIds(r), p = 0, g = d.length; g > p; p += 1) { var u; h.hasOwnProperty(u = d[p]) || ((c = a[u][0]).wireFrameMaterial = i, t = !0) } h = null } } }, this.getWireFrameMaterial = function (e) { var t = A.getObjectsMap(); for (var i in t) { var o = t[i]; if (o.hasOwnProperty(e)) return o[e][0].wireFrameMaterial } }, this.clearWireFrameMaterial = function () { var e = A.getObjectsMap(); for (var t in e) { var i = e[t]; for (var o in i) i[o][0].wireFrameMaterial = null } }, this.clearMaterialByKey = function (e) { var t = A.getObjectsMap(); for (var i in t) { var o = t[i]; for (var n in o) - 1 !== e.indexOf(n) && (o[n][0].material = null) } }, this.setIsolateHide = function (e, t, i) { var n = function (A) { t ? (o = !0, A.state |= Lc.HideByIsolate) : A.state &= ~Lc.HideByIsolate }, r = A.getObjectsMap(); for (var a in r) { var s = r[a]; if (void 0 === i || !0 === i) for (var l = 0, c = e.length; c > l; l += 1) { if (this.isActive(f = e[l]) && s.hasOwnProperty(f)) { var h = s[f][0]; n(h) } } else { for (var d = this.arrayToMap(e), p = A.getObjectIds(a), g = 0, u = p.length; u > g; g += 1) { var f; this.isActive(f = p[g]) && !d.hasOwnProperty(f) && n(h = s[f][0]) } d = null } } }, this.isIsolateHide = function (e) { var t = A.getObjectsMap(); for (var i in t) { var o = t[i]; if (o.hasOwnProperty(e)) return (o[e][0].state & Lc.HideByIsolate) > 0 } }, this.setIsolateTransparent = function (t, i, o) { var n = function (A) { i ? (A.state |= Lc.TransparentByIsolate, e = !0, r = !0) : A.state &= ~Lc.TransparentByIsolate }, a = A.getObjectsMap(); for (var s in a) { var l = a[s]; if (void 0 === o || !0 === o) for (var c = 0, h = t.length; h > c; c += 1) { if (l.hasOwnProperty(m = t[c])) { var d = l[m][0]; n(d) } } else { for (var p = this.arrayToMap(t), g = A.getObjectIds(s), u = 0, f = g.length; f > u; u += 1) { var m; !p.hasOwnProperty(m = g[u]) && this.isActive(m) && n(d = l[m][0]) } p = null } } }, this.isIsolateTransparent = function (e) { var t = A.getObjectsMap(); for (var i in t) { var o = t[i]; if (o.hasOwnProperty(e) && this.isActive(e)) return (o[e][0].state & Lc.TransparentByIsolate) > 0 } }, this.clearIsolateHide = function () { var e = A.getObjectsMap(); for (var t in o = !1, e) { var i = A.getObjectIds(t); i.length > 0 && this.setIsolateHide(i, !1) } }, this.clearIsolates = function () { var e = A.getObjectsMap(); for (var t in r = !1, o = !1, e) { var i = A.getObjectIds(t); i.length > 0 && (this.setIsolateHide(i, !1), this.setIsolateTransparent(i, !1)) } }, this.clearTransparentByIsolate = function () { var e = A.getObjectsMap(); for (var t in r = !1, e) for (var i = e[t], o = A.getObjectIds(t), n = 0, a = o.length; a > n; n += 1) { var s = o[n]; if (this.isActive(s)) i[s][0].state &= ~Lc.TransparentByIsolate } }, this.isHidden = function (e) { var t = A.getObjectsMap(); for (var i in t) { var o = t[i]; if (o.hasOwnProperty(e)) { var n = o[e][0], r = 0 == (n.state & Lc.Visible); return r = r || (n.state & Lc.HideByIsolate) > 0 } } }, this.isFrozen = function (e) { var t = A.getObjectsMap(); for (var i in t) { var o = t[i]; if (o.hasOwnProperty(e)) { var n = o[e][0], r = (n.state & Lc.Transparent) > 0; return r = r || (n.state & Lc.TransparentByIsolate) > 0 } } }, this.resetAll = function () { var t = A.getObjectsMap(); for (var a in t) for (var s = t[a], l = A.getObjectIds(a), c = 0, h = l.length; h > c; c += 1) { var d = l[c]; s[d][0].state = Lc.Visible, this.isActive(d) && (s[d][0].material = null) } e = !1, i = o = !1, n = r = !1, this.inactivatedIds.length > 0 && (i = !0) }, this.hasOverrideMaterial = function (t) { var i = A.getObjectsMap(); if (void 0 === t) return e; for (var o in i) { var n = i[o]; if (n.hasOwnProperty(t)) return null !== n[t][0].material || this.isTransparent(t) } }, this.hasOverrideMaterialForWireFrame = function (e) { var i = A.getObjectsMap(); if (null == e) return t; for (var o in i) { var n = i[o]; if (n.hasOwnProperty(e)) return null !== n[e][0].wireFrameMaterial } }, this.hasObjectInactivated = function () { return this.inactivatedIds.length > 0 }, this.hasObjectHidden = function () { return i || o }, this.hasObjectCantSelected = function () { return this.hasObjectHidden() || this.hasObjectTransparent() || this.hasObjectInactivated() }, this.hasObjectTransparent = function () { if (this.hasObjectInactivated()) { var A = !1, e = !0, t = !1, i = void 0; try { for (var o, a = this.inactivatedIds[Symbol.iterator](); !(e = (o = a.next()).done); e = !0) { if (this.isTransparent(o.value)) { A = !0; break } } } catch (A) { t = !0, i = A } finally { try { !e && a.return && a.return() } finally { if (t) throw i } } return A } return n || r }, this.deactivateByIds = function (e) { var t = !0, o = !1, n = void 0, r = A.getObjectsMap(); try { for (var a, s = e[Symbol.iterator](); !(t = (a = s.next()).done); t = !0) { var l = a.value; for (var c in r) { var h = r[c]; if (h.hasOwnProperty(l)) h[l][0].state &= ~Lc.Visible } this.inactivatedIdMap[l] = !0 } } catch (A) { o = !0, n = A } finally { try { !t && s.return && s.return() } finally { if (o) throw n } } i = !0, this.inactivatedIds = Object.keys(this.inactivatedIdMap) }, this.activateByIds = function (e) { for (var t = A.getObjectsMap(), o = 0, n = e.length; n > o; o += 1) { var r = e[o]; for (var a in delete this.inactivatedIdMap[r], t) { var s = t[a]; if (s.hasOwnProperty(r)) s[r][0].state = Lc.Visible } } this.inactivatedIds = Object.keys(this.inactivatedIdMap), this.inactivatedIds.length > 0 && (i = !0) }, this.clearInactivatedIdMap = function () { this.inactivatedIdMap = {}, this.inactivatedIds = [] }, this.isActive = function (A) { return !1 === this.bIsInactivateAll && !(!0 === this.inactivatedIdMap[A]) }, this.deactivateAll = function () { this.bIsInactivateAll = !0 }, this.activateAll = function () { this.bIsInactivateAll = !1 }, this.getInactivatedIdMap = function () { return this.inactivatedIdMap } }, Cu = function (A, e) { Wg.call(this), this.className = "OverrideConditionForWireFrameFA", this.flag = A, this.material = e }; (Cu.prototype = Object.create(Wg.prototype)).constructor = Cu, Cu.prototype.applyFilter = function (A, e) { console.log('applyFilter :>ddfdff> '); var t = this; this.conditions instanceof Array ? A.matchConditions(this.conditions, (function (e, i) { t.flag === i && (A.setWireFrameMaterial(e, t.material), e = null) })) : Bh.warn("Conditions should be type of array.") }; var yu = function (A, e) { Gg.call(this), this.className = "OverrideIdsForWireFrameFA", this.flag = A, this.material = e }; (yu.prototype = Object.create(Gg.prototype)).constructor = yu, yu.prototype.applyFilter = function (A) { console.log('applyFilter :dfasfsa>> '); this.ids instanceof Array ? A.setWireFrameMaterial(this.ids, this.material, this.flag) : Bh.warn("Ids should be type of array.") }; var vu = function () { function A(e, t) { cc(this, A), this.id = e, this.object = t } return dc(A, [{ key: "destroy", value: function () { this.object = null } }, { key: "_inDistanceRange", value: function (A, e) { return A >= e.near && e.far >= A } }, { key: "raycast", value: function (A, e, t, i, o) {} }]), A }(); vu.prototype.destroy = function () {}; var Iu = function (A) { function e(A, t) { return cc(this, e), Cc(this, fc(e).call(this, A, t)) } return uc(e, A), dc(e, [{ key: "raycast", value: function (A, e, t, i, o, n) { var r = []; if (this.object.raycast(A, r), r.length > 0) { r.sort((function (A, e) { return A.distance - e.distance })); for (var a = 0, s = r.length; s > a; a += 1) { var l = r[a]; if (this._inDistanceRange(l.distance, t) && !i.clipPoint(l.point)) { n || (t.far = l.distance - uh.MinusEpsilon), o.push(l); break } } } } }]), e }(vu), Eu = function (A) { function e(A, t) { return cc(this, e), Cc(this, fc(e).call(this, A, t)) } return uc(e, A), dc(e, [{ key: "raycast", value: function (A, e, t, i, o, n) { var r = this.object, a = r._indicesGroup; if (a) { var s = a[e.userId]; if (s) { for (var l, c = !1, h = 0, d = s.length; d > h; h += 1) if (s[h].nodeId === e.nodeId) { l = s[h], c = !0; break } if (c) { var p = []; if (r.raycastByIndices(A, p, l), p.length > 0) { p.sort((function (A, e) { return A.distance - e.distance })); for (var g = 0, u = p.length; u > g; g += 1) { var f = p[g]; if (this._inDistanceRange(f.distance, t) && !i.clipPoint(f.point)) { n || (t.far = f.distance - uh.MinusEpsilon), f.userId = l.userId, f.indexInfo = l, o.push(f); break } } } } } } } }]), e }(vu), Bu = function (A) { function e(A, t) { return cc(this, e), Cc(this, fc(e).call(this, A, t)) } return uc(e, A), dc(e, [{ key: "raycast", value: function (A, e, t, i, o, n) { var r = []; if (this.object.raycastByIndices(A, r, null, e.matrix), r.length > 0) { r.sort((function (A, e) { return A.distance - e.distance })); for (var a = 0, s = r.length; s > a; a += 1) { var l = r[a]; if (this._inDistanceRange(l.distance, t) && !i.clipPoint(l.point)) { n || (t.far = l.distance - uh.MinusEpsilon), l.userId = e.userId, l.matrix = e.matrix, o.push(l); break } } } } }]), e }(vu), xu = function () { this._filterImpl = new pu; var A = [], e = [], t = null, i = null, o = this._filterImpl.getMaterialSelector(), n = new mu, r = new uu, a = new gu(o); this.observerForSceneState = null, this.setObserverForSceneState = function (A) { this.observerForSceneState = A }, this.setSceneStateHelper = function (A) {}, this.getFilterActionList = function () { return A }, this.getModelFilterActionList = function () { return e }, this.addModel = function (A) { r.add(A) }, this.removeModel = function (A) { r.remove(A) }, this.clearFilterActionList = function () { A = [] }, this.clearModelFilterActionList = function () { e = [] }, this.initFilterManager = function (A) { n.init(A) }, this.reinitFilterManager = function (A) { n.reinit(A) }, this.clearFilterManager = function () { n.clearData() }; var s = !1; this.isStateChanged = function () { return s }, this.enableStateChanged = function () { s = !0 }, this.disableStateChanged = function () { s = !1 }, this.getIsolateFilterAction = function () { return t }, this.getModelIsolateFilterAction = function () { return i }, this.setIsolateAction = function (A) { (t = A).apply() }, this.getVisibleComponentsBbox = function () { return n.getVisibleComponentsBbox() }, this.pushBack = function (e) { var i = e.getClassName(); "IsolateIdsFA" === i || "IsolateConditionFA" === i ? t = e : A.push(e), s = !0, e.applyFilter(n) }, this.pushModelBack = function (A) { var t = A.getClassName(); "IsolateIdsFA" === t || "IsolateConditionFA" === t ? i = A : e.push(A), s = !0, A.applyFilter(r) }; var l = function (e) { for (var t = [], i = 0; A.length > i;) { var o = A[i]; e === o.getClassName() ? (t = t.concat(o.ids), A.splice(i, 1)) : i += 1 } return t }, c = function (A) { for (var t = 0; e.length > t;) { A === e[t].getClassName() ? e.splice(t, 1) : t += 1 } }; function h(A, e) { var t = e || ""; return A.map((function (A) { var e = A.clone(); for (var i in e.name += "_" + t, A) A.hasOwnProperty(i) && (A[i] instanceof d || A[i] instanceof ut) && (e[i] = A[i].clone(), e[i].needsUpdate = !0); return e })) } function p(A, e, t, i, o, n, r) { var a = Boolean(r || 0 === r), s = []; a && !Array.isArray(r) && (r = [r]); var l = !0, c = !1, h = void 0; try { for (var d, p = o[Symbol.iterator](); !(l = (d = p.next()).done); l = !0) { var g = d.value; A._filterImpl.getMaterialByName(g.name) || A._filterImpl.addOverrideMaterial(g) } } catch (A) { c = !0, h = A } finally { try { l || null == p.return || p.return() } finally { if (c) throw h } } var u = t[0], f = u.materialId; if (u.originMId === f && (u.originMId = [].concat(f)), null === u.material) for (var m = 0, C = f.length; C > m; m += 1) s[m] = e.models[u.model.modelKey].materialManager.getMaterialById(f[m]); else s = u.material; for (var y = null, v = null, I = 0, E = s.length; E > I; I += 1) { if (a) { if (!r[I]) break; y = r[I].compMatOrder, v = r[I].replMatOrder } else y = v = I; if (!o[v] || y >= o.length) { o[v] ? console.log('构件材质数组越界,越界位置:{"componentKey":'.concat(i, ',"order":').concat(y, "}")) : console.log('替换材质数组越界,越界位置:{"componentKey":'.concat(i, ',"order":').concat(v, "}")); break } s[y] = o[v], f[y] = o[v].name } var B = new qg(!0, s); B.ids = [u.componentKey], n[u.componentKey] = s, A.pushBack(B) } function g(A, e, t, i, o, n, r) { var a, s = []; (a = Boolean(r || 0 === r)) && !Array.isArray(r) && (r = [r]); var l = !0, c = !1, h = void 0; try { for (var d, p = o[Symbol.iterator](); !(l = (d = p.next()).done); l = !0) { A._filterImpl.updateOverrideMaterial(d.value) } } catch (A) { c = !0, h = A } finally { try { l || null == p.return || p.return() } finally { if (c) throw h } } for (var g = 0, u = t.length; u > g; g += 1) { var f = t[g], m = t[0].material; if (null === m) s[g] = e.models[f.model.modelKey].materialManager.getMaterialById(f.materialId), s[g].materialId = f.materialId; else if (Array.isArray(m)) { s[g] = m[g] } else s[g] = m } for (var C = null, y = null, v = 0, I = s.length; I > v; v += 1) { if (a) { if (!r[v]) break; C = r[v].compMatOrder, y = r[v].replMatOrder } else C = y = v; if (!o[y] || C >= t.length) { o[y] ? console.log('构件材质数组越界,越界位置:{"componentKey":'.concat(i, ',"order":').concat(C, "}")) : console.log('替换材质数组越界,越界位置:{"componentKey":'.concat(i, ',"order":').concat(y, "}")); break } var E = t[C].nodeId, B = s[C].mapNodeIdToOrigMatId && s[C].mapNodeIdToOrigMatId[E] ? s[C].mapNodeIdToOrigMatId[E] : s[C].materialId; t[C].mesh.geometry.getAttribute("uv") || null === o[y].map && null === o[y].aoMap ? (s[C] = o[y], s[C].mapNodeIdToOrigMatId || (s[C].mapNodeIdToOrigMatId = {}), s[C].materialId = o[y].name, s[C].mapNodeIdToOrigMatId[E] = B) : console.log('构件node缺少uv:{"componentKey":'.concat(i, ',"order":').concat(y, ",nodeId:").concat(t[C].nodeId, "}")) } var x = new qg(!0, s); x.ids = [i], n && (n[i] = s), A.pushBack(x) } function u(A, e, t) { var i = A.models[e], o = i._handler.defaultManager.meshManager, n = i._handler.instancedManager.meshManager, r = i.loader.getDescriptor(), a = n.getNodeIdxMapByUserId(t), s = i.group.children.find((function (A) { return "Geometry" === A.name })); s || ((s = new Xi).name = "Geometry", i.group.add(s)); var l = new Xi, c = []; s.add(l); var h = r.mapNodeInfoByComponentKey[t], d = function (r) { var s = a[r][0], d = n.getInstanceGeometries(r); d[0].attributes.vState.array[s] = -1, d[0].attributes.vState.needsUpdate = !0; var p = new he; d[0].removed || (d[0].removed = {}), d[0].removed[s] = !0; for (var g = d[0].attributes.position.array, u = [], f = new y, m = n.matrixInfoMapFromUserId[t][r][0].matrix, C = 0, v = g.length; v > C; C += 3) f.set(g[C], g[C + 1], g[C + 2]).applyMatrix4(m), u.push(f.x, f.y, f.z); d[0].attributes.uv && p.setAttribute("uv", d[0].attributes.uv.clone()), d[0].attributes.normal && p.setAttribute("normal", d[0].attributes.normal.clone()); var I = d[0].index.clone(); p.setAttribute("position", new YA(new Float32Array(u), 3)), p.setIndex(I); var E = n.getMaterialIdByMeshId(r), B = n.manager.model.materialManager.getInstanceMaterialById(E)[0], x = Kd.getMaterialParameters(B), S = Kd.createStandardMaterial(x), w = new Ue(p, S), M = r.split("&")[1], b = E + "_" + s + "_cm", U = "", F = !0, K = !1, Q = void 0; try { for (var R, T = h[Symbol.iterator](); !(F = (R = T.next()).done); F = !0) { var k = R.value; k.geometryId !== M && k.geometryId.toString() !== M || (U = k.nodeId, k.instanceOrNot = !1, k.isBatched = !1, k.mesh = w, k.instancedRenderOrder = s, k.RenderTypeChange = !0, k.materialId = b, k.uv = !0, c.push(k)) } } catch (A) { K = !0, Q = A } finally { try { F || null == T.return || T.return() } finally { if (K) throw Q } } var D = b + "&1&meshes"; l.add(w), w.geometry.computeBoundingBox(), w.modelKey = e; var L = pc({}, t, [{ boundingBox: w.geometry.boundingBox, indexCount: I.count, indexStart: 0, lightmapIdx: void 0, nodeId: U, positionCount: p.attributes.position.count, positionStart: 0, userId: t }]); o.mapMaterialIdToMergedNode[D] = [{ geometry: p, indices: L, mesh: w, RenderTypeChange: !0 }], w._indicesGroup = L, w.computeBoundingBox = function () { var A = this.matrixWorld, e = new aA; return e.copy(this.geometry.boundingBox), e.applyMatrix4(A), e }, w.intersectBoxWithDistanceByIndices = function (A) { return A.ray.intersectBoxWithDistance(this.computeBoundingBox()) }, w.raycastByIndices = function (A, e) { w.raycast(A, e) }, i.materialManager.materials[b] = S, A.addMeshToOctantMap(e, D, new Eu(D, w)) }; for (var p in a) d(p); return A.octantToObjectMap[e].info[t] = c, r.mapNodeInfoByCategory[1] || (r.mapNodeInfoByCategory[1] = {}), r.mapNodeInfoByCategory[1][t] = c, delete r.instancedComponent[t], delete r.mapNodeInfoByCategory[0][t], delete n.nodeIdxMapFromUserId[t], o.getPickingNodeGenerator().clearData(), l } this.showAll = function () { l("VisibleIdsFA"), l("VisibleConditionFA"), n.clearVisible(), n.calculateVisibleComponentsBbox(), this.enableStateChanged() }, this.showAllModel = function () { c("VisibleIdsFA"), r.clearVisible(), this.enableStateChanged() }, this.hideAll = function () { var A = new Pg(!1, !1); A.ids = [], this.pushBack(A) }, this.hideAllModel = function () { var A = new Pg(!1, !1); A.ids = [], this.pushModelBack(A) }, this.getObjectInfoManager = function () { return n }, this.getModelInfoManager = function () { return r }, this.getMatchIds = function (A) { return n.getMatchIds(A) }, this._isVisible = function (A) { return !n.isHidden(A.userId) }, this._isModelVisible = function (A) { return !r.isHidden(A) }, this._isTransparent = function (A) { return n.isTransparent(A.userId) }, this._isModelTransparent = function (A) { return r.isTransparent(A) }, this._isModelPickable = function (A) { return !r.isFrozen(A) || vc.EnableSelectionByTranslucent }, this._isSelectable = function (A) { if (vc.EnableSelectionByTranslucent) return !0; var e = A.userId; return !n.isFrozen(e) && this._filterImpl._isSelectableById(e) }, this._isPickable = function (A) { var e = A.userId; return this.isComponentActive(e) && this._filterImpl._isSelectableById(e) && (!n.isFrozen(e) || vc.EnableSelectionByTranslucent) }, this._isSelectableById = function (A) { return !!vc.EnableSelectionByTranslucent || !n.isFrozen(A) && this._filterImpl._isSelectableById(A) }, this._getOverrideMaterial = function (A) { var e = A.userId; return n.isFrozen(e) ? this._filterImpl.getFrozonMaterial() : n.getMaterial(e) }, this._getModelOverrideMaterial = function (A) { return r.isFrozen(A) ? this._filterImpl.getFrozonMaterial() : r.getMaterial(A) }, this._getMaterialName = function (A) { return this._filterImpl._getMaterialName(A) }, this._getMaterialByName = function (A) { return this._filterImpl._getMaterialByName(A) }, this._hasOverrideMaterial = function (A) { return n.hasOverrideMaterial(A.userId) }, this._hasModelOverrideMaterial = function (A) { return r.hasOverrideMaterial(A) }, this._hasHighPriorityOverrideMaterial = function (A) { return this._filterImpl._hasHighPriorityOverrideMaterial(A) }, this._isHiddenFileId = function (A) { return this._filterImpl._isHiddenFileId(A) }, this._isRenderPromotion = function (A) { return this._filterImpl._isRenderPromotion(A) }, this._isRenderWithBoardline = function (A) { return this._filterImpl._isRenderWithBoardline(A) }, this._hasHiddenFileIdFilter = function () { return this._filterImpl._hasHiddenFileIdFilter() }, this._hasVisibleFilter = function () { return n.hasObjectHidden() }, this._hasPickableFilter = function () { return n.hasObjectCantSelected() || this._filterImpl._hasPickableFilter() }, this._hasTransparentFilter = function () { return n.hasObjectTransparent() }, this._hasOverrideMaterialFilter = function () { return n.hasOverrideMaterial() }, this._hasModelVisibleFilter = function () { return r.hasObjectHidden() }, this._hasModelSelectableFilter = function () { return r.hasObjectCantSelected() }, this._hasModelTransparentFilter = function () { return r.hasObjectTransparent() }, this._hasModelOverrideMaterialFilter = function () { return r.hasOverrideMaterial() }, this._hasLowPriorityOverride = function () { return this._filterImpl._hasLowPriorityOverride() }, this._hasRenderPromotionFilter = function () { return this._filterImpl._hasRenderPromotionFilter() }, this._hasRenderWithBoardlineFilter = function () { return this._filterImpl._hasRenderWithBoardlineFilter() }, this.saveState = function () { return a.saveState(this) }, this.loadState = function (A) { a.loadState(A, this) }, this.clear = function () { n.resetAll(), s = !0 }, this.clearAll = function () { return this.enableStateChanged(), this._filterImpl.clearAll() }, this.clearIsolate = function () { n.clearIsolates() }, this.clearFrozenList = function () { return this.enableStateChanged(), this._filterImpl.clearFrozenList() }, this.addToFrozenList = function (A) { return this.enableStateChanged(), this._filterImpl.addToFrozenList(A) }, this.removeFromFrozenList = function (A) { return this.enableStateChanged(), this._filterImpl.removeFromFrozenList(A) }, this.setFrozenList = function (A) { return this.enableStateChanged(), this._filterImpl.setFrozenList(A) }, this.setFrozenConditions = function (A) { this.enableStateChanged(), this._filterImpl.setFrozenConditions(A) }, this.getFrozenConditions = function () { return this._filterImpl.getFrozenConditions() }, this.clearFrozenConditions = function () { this.enableStateChanged(), this._filterImpl.clearFrozenConditions() }, this.clearFrozen = function () { this.enableStateChanged(), this.clearFrozenList(), this.clearFrozenConditions() }, this.clearAllIdList = function () { return this.enableStateChanged(), this._filterImpl.clearAllIdList() }, this.clearIdList = function (A) { return this.enableStateChanged(), this._filterImpl.clearIdList(A) }, this.addToIdList = function (A, e) { return this.enableStateChanged(), this._filterImpl.addToIdList(A, e) }, this.removeFromIdList = function (A, e) { return this.enableStateChanged(), this._filterImpl.removeFromIdList(A, e) }, this.setIdList = function (A, e) { return this.enableStateChanged(), this._filterImpl.setIdList(A, e) }, this.clearAllOverrideList = function () { l("OverrideIdsFA"), l("OverrideConditionFA"), n.clearMaterial(); for (var e = 0, t = A.length; t > e; e += 1) { var i = A[e]; "WireframeIdsFA" === i.getClassName() && i.applyFilter(n) } this.enableStateChanged() }, this.clearModelAllOverrideList = function () { c("OverrideIdsFA"), r.clearMaterial(), this.enableStateChanged() }, this.clearOverrideList = function (A) { return this.enableStateChanged(), this._filterImpl.clearOverrideList(A) }, this.addToOverrideList = function (A, e, t) { return this.enableStateChanged(), this._filterImpl.addToOverrideList(A, e, t) }, this.removeFromOverrideList = function (A, e) { return this.enableStateChanged(), this._filterImpl.removeFromOverrideList(A, e) }, this.setOverrideList = function (A, e, t) { return this.enableStateChanged(), this._filterImpl.setOverrideList(A, e, t) }, this.addToOverrideListByColor = function (A, e) { var t = null; if (e) { var i = this._filterImpl.getMaterialNameByColor(e); t = this._filterImpl.getMaterialByName(i) } var o = new qg(!0, t); o.ids = A, this.pushBack(o) }, this.addToOverrideListByCustomerMaterial = function (A, e, t, i, o) { var n = this, r = {}; Array.isArray(t) || (t = [t]); var a = t; return e.forEach((function (e) { for (var s in e) i || (a = h(t, s)), e[s][0].isBatched || e[s][0].instanceOrNot || e[s][0].RenderTypeChange ? !e[s][0].instanceOrNot && e[s][0].isBatched || e[s][0].RenderTypeChange ? g(n, A, e[s], s, a, r, o) : e[s][0].instanceOrNot && e[s][0].isBatched && (u(A, e[s][0].model.modelKey, s), g(n, A, e[s], s, a, r, o)) : p(n, A, e[s], s, a, r, o) })), r }, this.addToModelOverrideListByColor = function (A, e) { var t = null; if (e) { var i = this._filterImpl.getMaterialNameByColor(e); t = this._filterImpl.getMaterialByName(i) } var o = new qg(!0, t); o.ids = A, this.pushModelBack(o) }, this.addToOverrideListByConditions = function (A, e) { var t = null; if (e) { var i = this._filterImpl.getMaterialNameByColor(e); t = this._filterImpl.getMaterialByName(i) } var o = new zg(!0, t); o.conditions = A, this.pushBack(o) }, this.addToOverrideListByConditions = function (A, e) { var t = null; if (e) { var i = this._filterImpl.getMaterialNameByColor(e); t = this._filterImpl.getMaterialByName(i) } var o = new zg(!0, t); o.conditions = A, this.pushBack(o) }, this.addToOverrideListByMaterial = function (A, e) { this._filterImpl.addOverrideMaterial(e); var t = new zg(!0, e); t.conditions = A, this.pushBack(t) }, this.setOverrideListByColor = function (A, e, t) { for (var i = 0; e.length > i; i += 1) { var o = this._filterImpl.getMaterialNameByColor(t), r = this._filterImpl.getMaterialByName(o); n.setMaterial(e[i], r) } }, this.getVisibleComponentSet = function (A) { for (var e = {}, t = Object.keys(A), i = 0; t.length > i; i += 1) this._isVisible({ userId: t[i] }) && (e[t[i]] = !0); return e }, this.clearAllWireframeList = function () { n.clearMaterialByKey(l("WireframeIdsFA")), this.enableStateChanged() }, this.addToWireframeByWireframe = function (A, e) { var t = null; if (e) { var i = this._filterImpl.getMaterialNameByWireframe(e); t = this._filterImpl.getMaterialByName(i) } var o = new jg(!0, t); o.ids = A, this.pushBack(o) }, this.clearAllUserList = function () { return this.enableStateChanged(), this._filterImpl.clearAllUserList() }, this.clearUserListByType = function (A) { return this.enableStateChanged(), this._filterImpl.clearUserListByType(A) }, this.clearUserList = function (A, e) { return this.enableStateChanged(), this._filterImpl.clearUserList(A, e) }, this.addToUserList = function (A, e, t, i) { return this.enableStateChanged(), this._filterImpl.addToUserList(A, e, t, i) }, this.removeFromUserList = function (A, e, t) { this.enableStateChanged(), this._filterImpl.removeFromUserList(A, e, t) }, this.setUserList = function (A, e, t, i) { this.enableStateChanged(), this._filterImpl.setUserList(A, e, t, i) }, this.isIsolate = function () { var A = n.getObjectsMap(); for (var e in A) { if (A.hasOwnProperty(e)) var t = A[e]; for (var i in t) { var o = n.isIsolateHide(i); if (o |= n.isIsolateTransparent(i)) return !0 } } return !1 }, this.isFiltering = function () { var A = this.filterActionList.length > 0; return this.isIsolate() || A }, this.getFrozonMaterial = function () { return this._filterImpl.getFrozonMaterial() }, this.setIsolateMaterial = function (A) { this.enableStateChanged(), this._filterImpl.setIsolateMaterial(A) }, this.getIsolateMaterial = function () { return this._filterImpl.getIsolateMaterial() }, this.resetIsolateMaterial = function () { this.enableStateChanged(), this._filterImpl.resetIsolateMaterial() }, this.clearAllIsolateList = function () { n.clearIsolates() }, this.clearIsolation = function () { n.clearIsolates(), t = null, s = !0 }, this.clearModelIsolation = function () { r.clearIsolates(), i = null, s = !0 }, this.addToIsolateList = function (A, e) { var t = new Hg("HideOthers" === e); t.ids = A.concat(), this.pushBack(t), this.clearFilterActionList() }, this.removeFromIsolateList = function (A) { t && Array.isArray(A) && (A.forEach((function (A) { t.ids.remove(A) })), 1 > t.ids.length ? (n.clearIsolates(), t = null) : t.applyFilter(n), this.enableStateChanged()) }, this.removeModelFromIsolateList = function (A) { i && Array.isArray(A) && (A.forEach((function (A) { i.ids.remove(A) })), 1 > i.ids.length ? (r.clearIsolates(), i = null) : i.applyFilter(r), this.enableStateChanged()) }, this.setIsolateList = function (A, e) { var t = new Hg(e); t.ids = A.concat(), this.pushBack(t) }, this.setModelIsolateList = function (A, e) { var t = new Hg(e); t.ids = A.concat(), this.pushModelBack(t) }, this.setIsolateConditions = function (A, e) { var t = new Xg(e === Nc.HIDDEN_OTHERS); t.conditions = A, this.pushBack(t), this.clearFilterActionList() }, this.getIsolateConditions = function (A) { return this._filterImpl.getIsolateConditions(A) }, this.clearIsolateConditions = function (A) { this.enableStateChanged(), this._filterImpl.clearIsolateConditions(A) }, this.clearAllIsolateConditions = function () { this.enableStateChanged(), this._filterImpl.clearAllIsolateConditions() }, this.setConditions = function (A, e) { if (0 === A) { n.hideAll(); var t = new Jg(!0, !0); t.conditions = e, this.pushBack(t) } 3 === A && this._filterImpl.setConditions(A, e) }, this.getConditions = function (A) { return this._filterImpl.getConditions(A) }, this.clearConditions = function (A) { this.enableStateChanged(), this._filterImpl.clearConditions(A) }, this.clearAllConditions = function () { this.enableStateChanged(), this._filterImpl.clearAllConditions() }, this.makeSceneTranslucent = function () { this.enableStateChanged(), this._filterImpl.makeSceneTranslucent() }, this.cancelSceneTranslucent = function () { this.enableStateChanged(), this._filterImpl.cancelSceneTranslucent() }, this.hideScene = function () { this.enableStateChanged(), this._filterImpl.hideScene() }, this.showScene = function () { this.enableStateChanged(), this._filterImpl.showScene() }, this.setSceneState = function (A) { this.enableStateChanged(), this._filterImpl.setSceneState(A) }, this.getSceneState = function () { return this._filterImpl.getSceneState() }, this.cancelHidden = function () { this.enableStateChanged(), this._filterImpl.cancelHidden() }, this.cancelTranslucent = function () { this.enableStateChanged(), this._filterImpl.cancelTranslucent() }, this.hideByIds = function (A) { var e = new Pg(!0, !1); e.ids = A, this.pushBack(e) }, this.hideModelByIds = function (A) { var e = new Pg(!0, !1); e.ids = A, this.pushModelBack(e) }, this.hideByConditions = function (A) { var e = new Jg(!0, !1); e.conditions = A, this.pushBack(e) }, this.hideOthersByConditions = function (A) { var e = new Jg(!1, !1); e.conditions = A, this.pushBack(e) }, this.showByIds = function (A) { var e = new Pg(!0, !0); e.ids = A, this.pushBack(e) }, this.showModelByIds = function (A) { var e = new Pg(!0, !0); e.ids = A, this.pushModelBack(e) }, this.showByConditions = function (A) { var e = new Jg(!0, !0); e.conditions = A, this.pushBack(e) }, this.makeTranslucentByIds = function (A) { var e = new Yg(!0, !1); e.ids = A, this.pushBack(e) }, this.makeModelTranslucentByIds = function (A) { var e = new Yg(!0, !1); e.ids = A, this.pushModelBack(e) }, this.makeTranslucentByConditions = function (A) { var e = new Zg(!0, !1); e.conditions = A, this.pushBack(e) }, this.opaqueByIds = function (A) { var e = new Yg(!0, !0); e.ids = A, this.pushBack(e) }, this.opaqueModelByIds = function (A) { var e = new Yg(!0, !0); e.ids = A, this.pushModelBack(e) }, this.opaqueByConditions = function (A) { var e = new Zg(!0, !0); e.conditions = A, this.pushBack(e) }, this.setFrozonMaterial = function (A) { this._filterImpl.setFrozonMaterial(A) }, this.makeTranslucentOthersByIds = function (A) { var e = new Yg(!1, !1); e.ids = A, this.pushBack(e) }, this.makeTranslucentOthersModelByIds = function (A) { var e = new Yg(!1, !1); e.ids = A, this.pushModelBack(e) }, this.opaqueAll = function () { l("TransparentIdsFA"), l("TransparentConditionFA"), n.clearTransparent(), this.enableStateChanged() }, this.opaqueAllModel = function () { c("TransparentIdsFA"), c("TransparentConditionFA"), r.clearTransparent(), this.enableStateChanged() }, this.deactivateByIds = function (A) { n.deactivateByIds(A), this.observerForSceneState && this.observerForSceneState(A), this.enableStateChanged() }, this.activateByIds = function (A) { n.activateByIds(A), this.enableStateChanged() }, this.clearInactivatedIdMap = function () { n.clearInactivatedIdMap() }, this.getInactivatedIdMap = function () { return n.getInactivatedIdMap() }, this.deactivateAll = function () { n.deactivateAll() }, this.activateAll = function () { n.activateAll() }, this.isComponentActive = function (A) { return n.isActive(A) }, this.getFilterType = function () { return this._filterImpl._getFilterType() }, this._hasOverrideMaterialForWireFrame = function (A) { return n.hasOverrideMaterialForWireFrame(A.name) }, this._hasOverrideMaterialFilterForWireFrame = function () { return n.hasOverrideMaterialForWireFrame() }, this._getOverrideMaterialForWireFrame = function (A) { return n.getWireFrameMaterial(A.name) }, this._getOverrideWireFrameMaterial = function (A) { return n.getWireFrameMaterial(A.name) }, this.addToOverrideListForWireFrameByColor = function (A, e) { var t = null; if (e) { var i = this._filterImpl.getMaterialNameByColor(e); t = this._filterImpl.getMaterialByName(i) } var o = new yu(!0, t); o.ids = A, this.pushBack(o) }, this.addToOverrideListForWireFrameByConditions = function (A, e) { var t = null; if (e) { var i = this._filterImpl.getMaterialNameByColor(e); t = this._filterImpl.getMaterialByName(i) } var o = new Cu(!0, t); o.conditions = A, this.pushBack(o) }, this._getFilterObjectsKeys = function (A) { return this._filterImpl._getFilterObjectsKeys(A) }, this.transparentComponentsByKey = function (A, e, t) {}, this.closeOrigMatModelTransparent = function (A, e) { var t = A.models[e].materialManager.materials; for (var i in t) { var o = t[i]; void 0 !== o._origTransparent && (o.transparent = o._origTransparent, o.needsUpdate = !0), void 0 !== o._origOpacity && (o.opacity = o._origOpacity, o.needsUpdate = !0) } var n = A.models[e].materialManager.instanceMaterials; for (var r in n) n[r].forEach((function (A) { void 0 !== A._origTransparent && (A.transparent = A._origTransparent, A.needsUpdate = !0), void 0 !== A._origOpacity && (A.opacity = A._origOpacity, A.needsUpdate = !0) })) }, this.transparentModelOrigMatByKey = function (A, e) { var t = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : .5, i = A.models[e].materialManager.materials; for (var o in i) { var n = i[o]; void 0 === n._origTransparent && (n._origTransparent = n.transparent), void 0 === n._origOpacity && (n._origOpacity = n.opacity), n.transparent = !0, n.opacity = t, n.needsUpdate = !0 } var r = A.models[e].materialManager.instanceMaterials; for (var a in r) r[a].forEach((function (A) { void 0 === A._origTransparent && (A._origTransparent = A.transparent), void 0 === A._origOpacity && (A._origOpacity = A.opacity), A.transparent = !0, A.opacity = t, A.needsUpdate = !0 })) } }; var Su = function (A) { ji.call(this), this.type = "InstancedDepthMaterial", this.uniforms = it.depth.uniforms, this.vertexShader = function (A) { return A.replace("#include ", "\n vec4 mvPosition = modelViewMatrix * vec4(getInstancePosition(transformed), 1.0);\n gl_Position = projectionMatrix * mvPosition;\n ") }(it.depth.vertexShader.replace("void main() {", "\n attribute float vState; \n attribute vec4 aColor; \n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3;\n #if defined(USE_MAP)\n attribute vec2 muvCol0;\n attribute vec2 muvCol1;\n attribute vec2 muvCol2;\n #endif\n \n varying float vfState;\n \n vec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n \n void main() {\n vfState = vState;\n ")), this.fragmentShader = it.depth.fragmentShader.replace("void main() {", "\n varying float vfState; \n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n \n "), void 0 !== A && this.setValues(A) }; function wu(A, e, t) { var i = this, o = !1, n = 0, r = 0, a = void 0, s = []; this.onStart = void 0, this.onLoad = A, this.onProgress = e, this.onError = t, this.itemStart = function (A) { r += 1, !1 === o && void 0 !== i.onStart && i.onStart(A, n, r), o = !0 }, this.itemEnd = function (A) { n += 1, void 0 !== i.onProgress && i.onProgress(A, n, r), n === r && (o = !1, void 0 !== i.onLoad && i.onLoad()) }, this.itemError = function (A) { void 0 !== i.onError && i.onError(A) }, this.resolveURL = function (A) { return a ? a(A) : A }, this.setURLModifier = function (A) { return a = A, this }, this.addHandler = function (A, e) { return s.push(A, e), this }, this.removeHandler = function (A) { var e = s.indexOf(A); return -1 !== e && s.splice(e, 2), this }, this.getHandler = function (A) { for (var e = 0, t = s.length; t > e; e += 2) { var i = s[e], o = s[e + 1]; if (i.global && (i.lastIndex = 0), i.test(A)) return o } return null } } (Su.prototype = Object.create(ji.prototype)).constructor = Su; var Mu = new wu, bu = function (A) { this.manager = null != A ? A : Mu, this.model = A.model, this.cacheViable = !0, this.modelKey = A.model.modelKey }; Object.assign(bu.prototype, { _load: function (A, e, t, i) { void 0 === A && (A = ""), null != this.path && (A = this.path + A); var o = this, n = A.match(/^data:(.*?)(;base64)?,(.*)$/); if (n) { var r = n[1], a = Boolean(n[2]), s = n[3]; s = window.decodeURIComponent(s), a && (s = window.atob(s)); try { var l = null, c = (this.responseType || "").toLowerCase(); switch (c) { case "arraybuffer": case "blob": l = new ArrayBuffer(s.length); for (var h = new Uint8Array(l), d = 0; s.length > d; d += 1) h[d] = s.charCodeAt(d); "blob" === c && (l = new Blob([l], { type: r })); break; case "document": var p = new DOMParser; l = p.parseFromString(s, r); break; case "json": l = JSON.parse(s); break; default: l = s } window.setTimeout((function () { e && e(l), o.manager.itemEnd(A) }), 0) } catch (e) { window.setTimeout((function () { i && i(e), o.manager.itemEnd(A), o.manager.itemError(A) }), 0) } } else { var g = new XMLHttpRequest; for (var u in g.open("GET", A, !0), g.addEventListener("load", (function (t) { var n = t.target.response; if (200 === this.status) { var r = o.model.getStorage(); if (null == n) return i && i(t), o.manager.itemEnd(A), o.manager.itemError(A), void Bh.error("response 为 null"); if (!(n instanceof ArrayBuffer || n instanceof Array || n instanceof Blob || n instanceof Object)) try { n = JSON.parse(n) } catch (A) {} if (n instanceof Blob && mh.isIOSDevice()) { var a = new FileReader; a.readAsDataURL(n), a.onloadend = function (t) { r && o.cacheViable && r.put(A, t.target.result, o.modelKey, (function () { o.manager.progress.loaded += 1 }), (function () { Bh.warn(A, "缓存失败"), o.manager.progress.failed += 1 })), e && e(t.target.result) } } else { if (r && o.cacheViable) if (n.byteLength && n.byteLength > 12e7) { for (var s = [], l = Math.floor(n.byteLength / 4e7), c = 0; l >= c; c += 1) { o.manager.progress.total += 1; var h = null; h = c === l ? n.slice(4e7 * c) : n.slice(4e7 * c, 4e7 * (c + 1)); var d = A + "_" + c; s.push(d), r.put(d, h, o.modelKey, (function () { o.manager.progress.loaded += 1 }), (function () { o.manager.progress.failed += 1 })) } r.put(A, { split: !0, list: s, length: n.byteLength }, o.modelKey, (function () {}), (function () { Bh.warn(A, "缓存失败") })) } else r.put(A, n, o.modelKey, (function () { o.manager.progress && (o.manager.progress.loaded += 1) }), (function () { o.manager.progress && (Bh.warn(A, "缓存失败"), o.manager.progress.failed += 1) })); e && e(n) } o.manager.itemEnd(A) } else 0 === this.status ? (Bh.warn("THREE.FileLoader: HTTP Status 0 received."), e && e(n), o.manager.itemEnd(A)) : (i && i(t), o.manager.itemEnd(A), o.manager.itemError(A)) }), !1), "function" == typeof t && g.addEventListener("progress", (function (A) { t(A) }), !1), g.addEventListener("error", (function (e) { i && i(e), o.manager.itemEnd(A), o.manager.itemError(A) }), !1), void 0 !== this.responseType && (g.responseType = this.responseType), void 0 !== this.withCredentials && (g.withCredentials = this.withCredentials), g.overrideMimeType && g.overrideMimeType(void 0 !== this.mimeType ? this.mimeType : "text/plain"), this.requestHeader) g.setRequestHeader(u, this.requestHeader[u]); g.send(null) } return o.manager.itemStart(A), g }, load: function (A, e, t, i) { void 0 === A && (A = ""), null != this.path && (A = this.path + A); return this._load.call(this, A, e, t, i) }, setPath: function (A) { return this.path = A, this }, setResponseType: function (A) { return this.responseType = A, this }, setWithCredentials: function (A) { return this.withCredentials = A, this }, setMimeType: function (A) { return this.mimeType = A, this }, setCacheViable: function (A) { return this.cacheViable = A, this }, setRequestHeader: function (A) { return this.requestHeader = A, this } }); var Uu = function (A) { this.compArr = [], this.compArr = A, Bh.debug(this.compArr) }; Uu.prototype = { constructor: Uu, getComponent: function (A) {} }; var Fu, Ku, Qu, Ru, Tu = { EmptyGeometry: new he, UnitCylinderInstance: new hr(1, 1, 1, 8, 1, !1), UnitBoxInstance: new Ne(1, 1, 1), UnitTextureCylinder: null, UnitTextureBox: null, initializeUnitInstances: function () { Tu.UnitCylinderInstance.boundingBox || Tu.UnitCylinderInstance.computeBoundingBox(), Tu.UnitBoxInstance.boundingBox || Tu.UnitBoxInstance.computeBoundingBox() }, destroyUnitInstances: function () { Tu.UnitCylinderInstance.dispose(), Tu.UnitBoxInstance.dispose() }, getBoxData: function (A) { for (var e = [ [], [], [], [], [], [] ], t = 0; 4 > t; t += 1) e[0].push(-1, 0, 0); for (t = 0; 4 > t; t += 1) e[1].push(0, -1, 0); for (t = 0; 4 > t; t += 1) e[2].push(0, 0, -1); for (t = 0; 4 > t; t += 1) e[3].push(0, 0, 1); for (t = 0; 4 > t; t += 1) e[4].push(0, 1, 0); for (t = 0; 4 > t; t += 1) e[5].push(1, 0, 0); var i = [ [], [], [], [], [], [] ]; return i[0] = i[2] = i[4] = [-.5, -.5, -.5, .5, .5, -.5, .5, .5], i[1] = i[3] = i[5] = [-.5, -.5, -.5, .5, .5, -.5, .5, .5], { vertex: [ [-.5, -.5, -.5, -.5, -.5, .5, -.5, .5, -.5, -.5, .5, .5], [-.5, -.5, -.5, -.5, -.5, .5, .5, -.5, -.5, .5, -.5, .5], [-.5, -.5, -.5, -.5, .5, -.5, .5, -.5, -.5, .5, .5, -.5], [-.5, -.5, .5, -.5, .5, .5, .5, -.5, .5, .5, .5, .5], [-.5, .5, -.5, -.5, .5, .5, .5, .5, -.5, .5, .5, .5], [.5, -.5, -.5, .5, -.5, .5, .5, .5, -.5, .5, .5, .5] ][A], normal: e[A], uv: i[A], index: [ [0, 1, 2, 3, 2, 1], [2, 1, 0, 1, 2, 3], [0, 1, 2, 3, 2, 1], [2, 1, 0, 1, 2, 3], [0, 1, 2, 3, 2, 1], [2, 1, 0, 1, 2, 3] ][A] } }, getPipeData2: (Fu = [.5, 0, .5, .353530875, .353530875, .5, 0, .5, .5, -.353530875, .353530875, .5, -.5, 0, .5, -.353530875, -.353530875, .5, 0, -.5, .5, .353530875, -.353530875, .5, .5, 0, .5, .5, 0, -.5, .353530875, .353530875, -.5, 0, .5, -.5, -.353530875, .353530875, -.5, -.5, 0, -.5, -.353530875, -.353530875, -.5, 0, -.5, -.5, .353530875, -.353530875, -.5, .5, 0, -.5, .5, 0, .5, .353530875, .353530875, .5, 0, .5, .5, -.353530875, .353530875, .5, -.5, 0, .5, -.353530875, -.353530875, .5, 0, -.5, .5, .353530875, -.353530875, .5, .5, 0, -.5, .353530875, .353530875, -.5, 0, .5, -.5, -.353530875, .353530875, -.5, -.5, 0, -.5, -.353530875, -.353530875, -.5, 0, -.5, -.5, .353530875, -.353530875, -.5], Ku = [0, 9, 1, 1, 9, 10, 1, 10, 2, 2, 10, 11, 2, 11, 3, 3, 11, 12, 3, 12, 4, 4, 12, 13, 4, 13, 5, 5, 13, 14, 5, 14, 6, 6, 14, 15, 6, 15, 7, 7, 15, 16, 7, 16, 8, 8, 16, 17, 18, 19, 20, 18, 20, 21, 18, 21, 22, 18, 22, 23, 18, 23, 24, 18, 24, 25, 26, 28, 27, 26, 29, 28, 26, 30, 29, 26, 31, 30, 26, 32, 31, 26, 33, 32], Qu = [1, 0, 0, .7, .7, 0, 0, 1, 0, -.7, .7, 0, -1, 0, 0, -.7, -.7, 0, 0, -1, 0, .7, -.7, 0, 1, 0, 0, 1, 0, 0, .7, .7, 0, 0, 1, 0, -.7, .7, 0, -1, 0, 0, -.7, -.7, 0, 0, -1, 0, .7, -.7, 0, 1, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1], Ru = [-.5, .5, -.375, .5, -.25, .5, -.125, .5, 0, .5, .125, .5, .25, .5, .375, .5, .5, .5, -.5, -.5, -.375, -.5, -.25, -.5, -.125, -.5, 0, -.5, .125, -.5, .25, -.5, .375, -.5, .5, -.5, .5, 0, .353530875, .353530875, 0, .5, -.353530875, .353530875, -.5, 0, -.353530875, -.353530875, 0, -.5, .353530875, -.353530875, .5, 0, .353530875, .353530875, 0, .5, -.353530875, .353530875, -.5, 0, -.353530875, -.353530875, 0, -.5, .353530875, -.353530875], function () { return { vertex: Fu, normal: Qu, uv: Ru, index: Ku } } ), getPipeData: function (A) { (void 0 === A || 8 > A) && (A = 8), A > 256 && (A = 256); var e = 4 * A + 2, t = 3 * (4 * A - 4), i = A + 1, o = 1 / A, n = 6.28318530714 / A, r = null, a = null, s = []; for (r = 0; A > r; r += 1) s.push(.5 * Math.cos(r * n)), s.push(.5 * Math.sin(r * n)); s.push(.5), s.push(0); var l = []; for (a = 2 * i, r = 0; a > r; r += 2) l.push(s[r]), l.push(s[r + 1]), l.push(.5); for (r = 0; a > r; r += 2) l.push(s[r]), l.push(s[r + 1]), l.push(-.5); for (a = 2 * A, r = 0; a > r; r += 2) l.push(s[r]), l.push(s[r + 1]), l.push(.5); for (r = a; r > 0; r -= 2) l.push(s[r]), l.push(s[r + 1]), l.push(-.5); var c = [], h = A + 1; for (r = 0; A > r; r += 1) c.push(r), c.push(r + h), c.push(r + 1), c.push(r + 1), c.push(r + h), c.push(r + h + 1); var d = 2 * i; for (r = 1; A - 1 > r; r += 1) c.push(d), c.push(d + r), c.push(d + r + 1); for (d += A, r = 1; A - 1 > r; r += 1) c.push(d), c.push(d + r), c.push(d + r + 1); var p = []; for (r = A; r >= 0; r -= 1) p.push(r * o - .5), p.push(-.5); for (r = A; r >= 0; r -= 1) p.push(r * o - .5), p.push(.5); for (a = 2 * A, r = 0; a > r; r += 2) p.push(s[r]), p.push(s[r + 1]); for (r = a; r > 0; r -= 2) p.push(s[r]), p.push(s[r + 1]); a = 3 * e; var g = []; for (r = 0; a > r; r += 1) g.push(0); var u = null, f = null, m = null, C = new y, v = new y, I = new y, E = new y, B = new y; for (r = 0; t > r; r += 3) f = 3 * c[r + 1], m = 3 * c[r + 2], C.fromArray(l, u = 3 * c[r]), v.fromArray(l, f), I.fromArray(l, m), E.subVectors(I, v), B.subVectors(C, v), E.cross(B), g[u] += E.x, g[u + 1] += E.y, g[u + 2] += E.z, g[f] += E.x, g[f + 1] += E.y, g[f + 2] += E.z, g[m] += E.x, g[m + 1] += E.y, g[m + 2] += E.z; var x = new y; for (a = 3 * e, r = 0; a > r; r += 3) x.fromArray(g, r), x.normalize(), g[r] = x.x, g[r + 1] = x.y, g[r + 2] = x.z; return { vertex: l, normal: g, uv: p, index: c, edges: A } }, getInstancePipeData: function (A, e) { var t = this.getPipeData(A); (void 0 === A || 8 > A) && (A = 8), A > 256 && (A = 256); var i = 2 * (A + 1), o = i + A, n = 4 * A + 2, r = [ [], [], [] ]; r[0] = t.vertex.slice(0, 3 * i), r[1] = t.vertex.slice(3 * i, 3 * o), r[2] = t.vertex.slice(3 * o, 3 * n); var a = [ [], [], [] ], s = A + 1, l = 0; for (l = 0; A > l; l += 1) a[0].push(l), a[0].push(l + s), a[0].push(l + 1), a[0].push(l + 1), a[0].push(l + s), a[0].push(l + s + 1); for (l = 1; A - 1 > l; l += 1) a[1].push(0), a[1].push(l), a[1].push(l + 1); for (l = 1; A - 1 > l; l += 1) a[2].push(0), a[2].push(l), a[2].push(l + 1); var c = [ [], [], [] ]; c[0] = t.uv.slice(0, 2 * i), c[1] = t.uv.slice(2 * i, 2 * o), c[2] = t.uv.slice(2 * o, 2 * n); var h = [ [], [], [] ]; return h[0] = t.normal.slice(0, 3 * i), h[1] = t.normal.slice(3 * i, 3 * o), h[2] = t.normal.slice(3 * o, 3 * n), { vertex: r[e], normal: h[e], uv: c[e], index: a[e] } }, getUnitTextureCylinder: function () { if (null === Tu.UnitTextureCylinder) { Tu.UnitTextureCylinder = new Array(3); for (var A = 0; 3 > A; A += 1) { var e = Tu.getInstancePipeData(32, A); Tu.UnitTextureCylinder[A] = new he, Tu.UnitTextureCylinder[A].setIndex(e.index), Tu.UnitTextureCylinder[A].addAttribute("position", new Ae(e.vertex, 3)), Tu.UnitTextureCylinder[A].addAttribute("normal", new Ae(e.normal, 3)), Tu.UnitTextureCylinder[A].addAttribute("uv", new Ae(e.uv, 2)) } } return Tu.UnitTextureCylinder }, getUnitTextureBox: function () { if (null === Tu.UnitTextureBox) { Tu.UnitTextureBox = new Array(6); for (var A = 0; 6 > A; A += 1) { var e = Tu.getBoxData(A); Tu.UnitTextureBox[A] = new he, Tu.UnitTextureBox[A].setIndex(e.index), Tu.UnitTextureBox[A].addAttribute("position", new Ae(e.vertex, 3)), Tu.UnitTextureBox[A].addAttribute("normal", new Ae(e.normal, 3)), Tu.UnitTextureBox[A].addAttribute("uv", new Ae(e.uv, 2)) } } return Tu.UnitTextureBox }, getBoxBufferGeometryWithUvMatrices: function (A) { for (var e = [], t = null, i = new l, o = new y, n = !!A, r = 0; 6 > r; r += 1) { t = new he; var a = Tu.getBoxData(r); if (n) { var s = []; i.set(A[6 * r], A[6 * r + 2], A[6 * r + 4], A[6 * r + 1], A[6 * r + 3], A[6 * r + 5], 0, 0, 1); for (var c = 0, h = a.uv.length; h > c; c += 2) o.set(a.uv[c], a.uv[c + 1], 1), o.applyMatrix3(i), s.push(o.x), s.push(o.y); t.addAttribute("uv", new Ae(s, 2)) } t.setIndex(new YA(Uint32Array.from(a.index), 1)), t.addAttribute("position", new Ae(a.vertex, 3)), t.addAttribute("normal", new Ae(a.normal, 3)), e.push(t) } return Tu.mergeBufferGeometries2(e) }, getPipeBufferGeometryWithUvMatrices: function (A) { var e = Tu.getPipeData(32), t = e.edges, i = !(!A || 18 !== A.length), o = new he; if (i) { for (var n = [], r = 0, a = A.length; a > r; r += 6) { var s = new l; s.set(A[6 * r], A[6 * r + 2], A[6 * r + 4], A[6 * r + 1], A[6 * r + 3], A[6 * r + 5], 0, 0, 1), n.push(s) } for (var c = [], h = new y, d = 4 * (t + 1), p = d + 2 * t, g = 0, u = e.uv.length; u > g; g += 2) h.set(e.uv[g], e.uv[g + 1], 1), h.applyMatrix3(d > g ? n[0] : p > g ? n[1] : n[2]), c.push(h.x), c.push(h.y); o.addAttribute("uv", new Ae(c, 2)) } return o.setIndex(new $A(e.index, 1)), o.addAttribute("position", new Ae(e.vertex, 3)), o.addAttribute("normal", new Ae(e.normal, 3)), o }, getGeometryFromBox3: function (A) { var e = new he, t = [], i = [], o = A.min, n = A.max, r = o.x, a = o.y, s = o.z, l = n.x, c = n.y, h = n.z; return t.push(r, a, s), t.push(l, a, s), t.push(r, a, h), t.push(l, a, h), t.push(r, c, s), t.push(l, c, s), t.push(r, c, h), t.push(l, c, h), i.push(0, 1, 3), i.push(0, 3, 2), i.push(1, 5, 7), i.push(1, 7, 3), i.push(5, 4, 6), i.push(5, 6, 7), i.push(4, 2, 6), i.push(4, 0, 2), i.push(0, 4, 5), i.push(0, 5, 1), i.push(2, 3, 7), i.push(2, 7, 6), e.setIndex(new YA(new Uint32Array(i), 1)), e.setAttribute("position", new YA(new Float32Array(t), 3)), e }, getWorldMatrixOfMesh: function (A) { for (var e = [], t = A.parent; t;) e.push(t.matrix), t = t.parent; var i = new M; if (e.length > 0) { i = e[e.length - 1]; for (var o = e.length - 2; o >= 0; o -= 1) i.multiply(e[o]) } var n = new M; return n.multiplyMatrices(i, A.matrix), n }, getWorldPositionOfMesh: function (A, e) { e || (e = new M); var t = new M; t.getInverse(e); var i = A.clone(); return i.applyMatrix4(t), i }, getBoundingBoxWorldOfMesh: function (A, e) { var t = A.boundingBox; t || (A.geometry.boundingBox || A.geometry.computeBoundingBox(), t = A.geometry.boundingBox); var i = t.clone(); i.applyMatrix4(A.matrixWorld); var o = new M; return o.getInverse(e), i.applyMatrix4(o), i }, getBoundingBoxByBuffer: function (A) { for (var e = 1 / 0, t = 1 / 0, i = 1 / 0, o = -1 / 0, n = -1 / 0, r = -1 / 0, a = new ph, s = 0, l = A.length; l > s; s += 3) { var c = A[s], h = A[s + 1], d = A[s + 2]; e > c && (e = c), t > h && (t = h), i > d && (i = d), c > o && (o = c), h > n && (n = h), d > r && (r = d) } return a.min.set(e, t, i), a.max.set(o, n, r), a }, mergeBufferGeometriesFromMeshs: function (A, e) { for (var t = null !== A[0].geometry.index, i = new Set(Object.keys(A[0].geometry.attributes)), o = new Set(Object.keys(A[0].geometry.morphAttributes)), n = {}, r = {}, a = new he, s = 0; A.length > s; s += 1) { var l = A[s].geometry; if (t !== (null !== l.index)) return null; for (var c in l.attributes) { if (!i.has(c)) return console.log("attributes not Used: ", c), null; void 0 === n[c] && (n[c] = []), n[c].push(l.attributes[c]) } for (var c in l.morphAttributes) { if (!o.has(c)) return null; void 0 === r[c] && (r[c] = []), r[c].push(l.morphAttributes[c]) } null != l.userData && (a.userData = a.userData || {}, a.userData.mergedUserData = a.userData.mergedUserData || [], a.userData.mergedUserData.push(l.userData)) } if (t) { var h = 0, d = [], p = 0, g = 0; for (s = 0; A.length > s; s += 1) { var u = A[s].geometry.index; if (h > 0) { u = u.clone(); for (var f = 0; u.count > f; f += 1) u.setX(f, u.getX(f) + h) } d.push(u), h += A[s].geometry.attributes.position.count, void 0 === e[A[s].userId] && (e[A[s].userId] = []), e[A[s].userId].push({ nodeId: A[s].nodeId, indexStart: p, indexCount: u.count, positionStart: g, positionCount: A[s].geometry.attributes.position.count }), g += A[s].geometry.attributes.position.count, p += u.count } var m = this.mergeBufferAttributes(d); if (!m) return null; a.index = m } for (var c in n) { var C = this.mergeBufferAttributes(n[c]); if (!C) return null; a.setAttribute(c, C) } for (var c in r) { var y = r[c][0].length; if (0 === y) break; a.morphAttributes = a.morphAttributes || {}, a.morphAttributes[c] = []; for (s = 0; y > s; s += 1) { var v = []; for (f = 0; r[c].length > f; f += 1) v.push(r[c][f][s]); var I = this.mergeBufferAttributes(v); if (!I) return null; a.morphAttributes[c].push(I) } } return a }, mergeBufferGeometries: function (A, e) { for (var t = null !== A[0].index, i = new Set(Object.keys(A[0].attributes)), o = {}, n = new he, r = 0; A.length > r; r += 1) { var a = A[r]; if (t !== (null !== a.index)) return null; for (var s in a.attributes) { if (!i.has(s)) return null; void 0 === o[s] && (o[s] = []), o[s].push(a.attributes[s]) } } if (t) { var l = 0, c = []; for (r = 0; A.length > r; r += 1) { var h = A[r].index; if (l > 0) { h = h.clone(); for (var d = 0; h.count > d; d += 1) h.setX(d, h.getX(d) + l) } c.push(h), l += A[r].attributes.position.count } var p = this.mergeBufferAttributes(c); if (!p) return null; n.index = p } for (var s in o) { var g = this.mergeBufferAttributes(o[s], e); if (!g) return null; n.setAttribute(s, g) } return n }, reducedGeometry: function (A, e) { for (var t = {}, i = 0, o = e.length; o > i; i += 1) { var n = e[i]; t[n] || (t[n] = []), t[n].push(i) } var r = 0, a = new Float32Array(3 * Object.keys(t).length); for (var s in t) { for (var l = t[s], c = 0, h = l.length; h > c; c += 1) e[l[c]] = r, a[3 * r] = A[3 * s], a[3 * r + 1] = A[3 * s + 1], a[3 * r + 2] = A[3 * s + 2]; r += 1 } return { buffer: a, index: e } }, mergeBufferAttributes: function (A, e) { for (var t = null, i = null, o = null, n = 0, r = 0; A.length > r; r += 1) { var a = A[r]; if (a.isInterleavedBufferAttribute) return null; if (null === t && (t = a.array.constructor), t !== a.array.constructor) return null; if (null === i && (i = a.itemSize), i !== a.itemSize) return null; if (null === o && (o = a.normalized), o !== a.normalized) return null; n += a.array.length } for (var s = new t(n), c = 0, h = !1, d = 0; A.length > d; d += 1) { if (e && !e[d].equals(Bc) && ("position" === A[d].name || "normal" === A[d].name)) { if ("position" === A[d].name && e[d].applyToBufferAttribute(A[d]), "normal" === A[d].name) (new l).getNormalMatrix(e[d]).applyToBufferAttribute(A[d]); h = !0 } if (s.set(A[d].array, c), c += A[d].array.length, h) { var p = (new M).getInverse(e[d]); if ("position" === A[d].name && p.applyToBufferAttribute(A[d]), "normal" === A[d].name) (new l).getNormalMatrix(p).applyToBufferAttribute(A[d]); h = !1 } } return new YA(s, i, o) }, applyMatrix3ToBuffer: function () { var A = new y; return function (e, t, i, o) { if (e.equals(xc)) return t; for (var n = i || 0, r = o || t.length; r > n; n += 3) A.x = t[n + 0], A.y = t[n + 1], A.z = t[n + 2], A.applyMatrix3(e), t[n + 0] = A.x, t[n + 1] = A.y, t[n + 2] = A.z; return t } }(), applyMatrix4ToBuffer: function () { var A = new y; return function (e, t, i, o) { if (e.equals(Bc)) return t; for (var n = i || 0, r = o || t.length; r > n; n += 3) A.x = t[n + 0], A.y = t[n + 1], A.z = t[n + 2], A.applyMatrix4(e), t[n + 0] = A.x, t[n + 1] = A.y, t[n + 2] = A.z; return t } }(), normalizeBuffer: function (A) { for (var e = null, t = null, i = null, o = null, n = 0, r = A.length; r > n; n += 3) e = A[n], t = A[n + 1], i = A[n + 2], o = 1 / Math.sqrt(e * e + t * t + i * i), A[n] = e * o, A[n + 1] = t * o, A[n + 2] = i * o }, disposeBufferFromGeometry: function (A, e) { for (var t = 0, i = e.length; i > t; t += 1) { var o = A.getAttribute(e[t]); o && (o.array = null) } }, disposeIndexBufferFromGeometry: function (A) { A.index && (A.index.array = null) }, copyMeshProperties: function (A, e) { A.name = e.name, A.up.copy(e.up), A.position.copy(e.position), A.quaternion.copy(e.quaternion), A.scale.copy(e.scale), A.matrix.copy(e.matrix), A.matrixWorld.copy(e.matrixWorld), A.matrixAutoUpdate = e.matrixAutoUpdate, A.matrixWorldNeedsUpdate = e.matrixWorldNeedsUpdate }, createBufferGeometryWithPosAndSkin: function (A) { var e = new he; if (A.isBufferGeometry || A._bufferGeometry) { var t = A.isBufferGeometry ? A : A._bufferGeometry; e.addAttribute("position", t.getAttribute("position")), t.getAttribute("skinIndex") && e.addAttribute("skinIndex", t.getAttribute("skinIndex")), t.getAttribute("skinWeight") && e.addAttribute("skinWeight", t.getAttribute("skinWeight")); var i = t.getIndex(); i && e.setIndex(i) } else if (A.isGeometry) { var o = new Ae(3 * A.vertices.length, 3); if (e.addAttribute("position", o.copyVector3sArray(A.vertices)), A.skinIndices.length > 0) { var n = new Ae(4 * A.skinIndices.length, 4); e.addAttribute("skinIndex", n.copyVector4sArray(A.skinIndices)) } if (A.skinWeights.length > 0) { var r = new Ae(4 * A.skinWeights.length, 4); this.addAttribute("skinWeight", r.copyVector4sArray(A.skinWeights)) } if (A.faces.length) { for (var a = A.faces, s = [], l = 0; a.length > l; l += 1) { var c = a[l]; s.push(c.a, c.b, c.c) } var h = new(uh.arrayMax(s) > 65535 ? Uint32Array : Uint16Array)(3 * s.length); e.setIndex(new YA(h, 1).copyIndicesArray(s)) } } return e }, calculateVolumeOfGeometry: function (A, e, t, i) { if (A && e) { var o = 0, n = new y, r = new y, a = new y; t || (t = 0), i || (i = e.length); for (var s = 0, l = 0, c = 0, h = t, d = t + i; d > h; h += 3) { l = e[h + 1], c = e[h + 2], n.set(A[3 * (s = e[h])], A[3 * s + 1], A[3 * s + 2]), r.set(A[3 * l], A[3 * l + 1], A[3 * l + 2]), a.set(A[3 * c], A[3 * c + 1], A[3 * c + 2]), o += n.clone().cross(r).dot(a) / 6 } return o } }, minDistanceBetweenTriToMesh: function (A, e, t, i) { function o(A, e) { return new y(A.x - e.x, A.y - e.y, A.z - e.z) } function n(A, e) { return new y(A.x + e.x, A.y + e.y, A.z + e.z) } function r(A, e, t) { return new y(A.x + e.x * t, A.y + e.y * t, A.z + e.z * t) } function a(A, e) { return A.x * e.x + A.y * e.y + A.z * e.z } function s(A, e) { return new y(A.y * e.z - A.z * e.y, A.z * e.x - A.x * e.z, A.x * e.y - A.y * e.x) } function l(A, e, t, i) { var l, c = a(e, i), h = a(e, e), d = a(i, i), p = o(t, A), g = a(e, p), u = a(i, p), f = null; 0 > (f = (g * d - u * c) / (h * d - c * c)) || isNaN(f) ? f = 0 : f > 1 && (f = 1); var m = null, C = null, y = null, v = null; return 0 >= (l = (f * c - u) / d) || isNaN(l) ? (C = t, 0 >= (f = g / h) || isNaN(f) ? (m = A, y = o(t, A)) : 1 > f ? (m = r(A, e, f), v = s(p, e), y = s(e, v)) : y = o(t, m = n(A, e))) : 1 > l ? (C = r(t, i, l), 0 >= f || isNaN(f) ? (m = A, v = s(p, i), y = s(i, v)) : 1 > f ? (m = r(A, e, f), 0 > a(y = s(e, i), p) && y.multiplyScalar(-1)) : (v = s(p = o(t, m = n(A, e)), i), y = s(i, v))) : (C = n(t, i), 0 >= (f = (c + g) / h) || isNaN(f) ? (m = A, y = o(C, A)) : 1 > f ? (m = r(A, e, f), v = s(p = o(C, A), e), y = s(e, v)) : y = o(C, m = n(A, e))), { vec: y, closestP: m, closestQ: C } } function c(A, e) { var t = null, i = null, n = [], c = [], h = null; n[0] = o(A[1], A[0]), n[1] = o(A[2], A[1]), n[2] = o(A[0], A[2]), c[0] = o(e[1], e[0]), c[1] = o(e[2], e[1]), c[2] = o(e[0], e[2]); for (var d = null, p = null, g = null, u = 0, f = A[0].distanceToSquared(e[0]) + 1, m = 0; 3 > m; m += 1) for (var C = 0; 3 > C; C += 1) { var y = l(A[m], n[m], e[C], c[C]); h = y.vec; var v = a(d = o(i = y.closestQ, t = y.closestP), d); if (f >= v) { p = t.clone(), g = i.clone(), f = v; var I = a(o(A[(m + 2) % 3], t), h), E = a(o(e[(C + 2) % 3], i), h); if (0 >= I && E >= 0) return { start: t.clone(), end: i.clone(), minDistance: Math.sqrt(v) }; 0 > I && (I = 0), E > 0 && (E = 0), a(d, h) - I + E > 0 && (u = 1) } } var B = s(n[0], n[1]), x = a(B, B); if (x > 1e-15) { var S = []; d = o(A[0], e[0]), S[0] = a(d, B), d = o(A[0], e[1]), S[1] = a(d, B), d = o(A[0], e[2]), S[2] = a(d, B); var w = -1; if (S[0] > 0 && S[1] > 0 && S[2] > 0 ? S[w = S[1] > S[0] ? 0 : 1] > S[2] && (w = 2) : 0 > S[0] && 0 > S[1] && 0 > S[2] && S[2] > S[w = S[0] > S[1] ? 0 : 1] && (w = 2), w >= 0 && (u = 1, a(d = o(e[w], A[0]), s(B, n[0])) > 0 && a(d = o(e[w], A[1]), s(B, n[1])) > 0 && a(d = o(e[w], A[2]), s(B, n[2])) > 0)) return t = r(e[w], B, S[w] / x), i = e[w].clone(), { start: t.clone(), end: i, minDistance: t.distanceTo(i) } } var M = s(c[0], c[1]), b = a(M, M); if (b > 1e-15) { var U = []; d = o(e[0], A[0]), U[0] = a(d, M), d = o(e[0], A[1]), U[1] = a(d, M), d = o(e[0], A[2]), U[2] = a(d, M); w = -1; if (U[0] > 0 && U[1] > 0 && U[2] > 0 ? U[w = U[1] > U[0] ? 0 : 1] > U[2] && (w = 2) : 0 > U[0] && 0 > U[1] && 0 > U[2] && U[2] > U[w = U[0] > U[1] ? 0 : 1] && (w = 2), w >= 0 && (u = 1, a(d = o(A[w], e[0]), s(M, c[0])) > 0 && a(d = o(A[w], e[1]), s(M, c[1])) > 0 && a(d = o(A[w], e[2]), s(M, c[2])) > 0)) return { start: t = A[w].clone(), end: (i = r(A[w], M, U[w] / b)).clone(), minDistance: t.distanceTo(i) } } return u ? (t = p, i = g, { start: p.clone(), end: g.clone(), minDistance: Math.sqrt(f) }) : { start: p.clone(), end: g.clone(), minDistance: 0 } } var h = new y, d = new y, p = new y; function g(A, e, t, i, o, n) { h.fromBufferAttribute(e, t), d.fromBufferAttribute(e, i), p.fromBufferAttribute(e, o), n && (h.applyMatrix4(n), d.applyMatrix4(n), p.applyMatrix4(n)), A.push(h), A.push(d), A.push(p) } for (var u = { start: null, end: null, minDistance: Number.POSITIVE_INFINITY }, f = e.geometry, m = f.attributes.position, C = t ? t.indexStart : 0, v = f.getIndex().array, I = C, E = t ? t.indexStart + t.indexCount : v.length; E > I; I += 3) { var B = []; g(B, m, v[I], v[I + 1], v[I + 2], i); var x = c(A, B); if (0 >= x.minDistance) return u.minDistance = 0, u.start = x.start.clone(), u.end = x.end.clone(), u; u.minDistance > x.minDistance && (u.minDistance = x.minDistance, u.start = x.start.clone(), u.end = x.end.clone()) } return u }, minDistanceBetweenTriToTri: function (A, e) { function t(A, e) { return new y(A.x - e.x, A.y - e.y, A.z - e.z) } function i(A, e) { return new y(A.x + e.x, A.y + e.y, A.z + e.z) } function o(A, e, t) { return new y(A.x + e.x * t, A.y + e.y * t, A.z + e.z * t) } function n(A, e) { return A.x * e.x + A.y * e.y + A.z * e.z } function r(A, e) { return new y(A.y * e.z - A.z * e.y, A.z * e.x - A.x * e.z, A.x * e.y - A.y * e.x) } function a(A, e, a, s) { var l, c = n(e, s), h = n(e, e), d = n(s, s), p = t(a, A), g = n(e, p), u = n(s, p), f = null; 0 > (f = (g * d - u * c) / (h * d - c * c)) || isNaN(f) ? f = 0 : f > 1 && (f = 1); var m = null, C = null, y = null, v = null; return 0 >= (l = (f * c - u) / d) || isNaN(l) ? (C = a, 0 >= (f = g / h) || isNaN(f) ? (m = A, y = t(a, A)) : 1 > f ? (m = o(A, e, f), v = r(p, e), y = r(e, v)) : y = t(a, m = i(A, e))) : 1 > l ? (C = o(a, s, l), 0 >= f || isNaN(f) ? (m = A, v = r(p, s), y = r(s, v)) : 1 > f ? (m = o(A, e, f), 0 > n(y = r(e, s), p) && y.multiplyScalar(-1)) : (v = r(p = t(a, m = i(A, e)), s), y = r(s, v))) : (C = i(a, s), 0 >= (f = (c + g) / h) || isNaN(f) ? (m = A, y = t(C, A)) : 1 > f ? (m = o(A, e, f), v = r(p = t(C, A), e), y = r(e, v)) : y = t(C, m = i(A, e))), { vec: y, closestP: m, closestQ: C } } function s(A, e) { var i = null, s = null, l = [], c = [], h = null; l[0] = t(A[1], A[0]), l[1] = t(A[2], A[1]), l[2] = t(A[0], A[2]), c[0] = t(e[1], e[0]), c[1] = t(e[2], e[1]), c[2] = t(e[0], e[2]); for (var d = null, p = null, g = null, u = 0, f = A[0].distanceToSquared(e[0]) + 1, m = 0; 3 > m; m += 1) for (var C = 0; 3 > C; C += 1) { var y = a(A[m], l[m], e[C], c[C]); h = y.vec; var v = n(d = t(s = y.closestQ, i = y.closestP), d); if (f >= v) { p = i.clone(), g = s.clone(), f = v; var I = n(t(A[(m + 2) % 3], i), h), E = n(t(e[(C + 2) % 3], s), h); if (0 >= I && E >= 0) return { start: i.clone(), end: s.clone(), minDistance: Math.sqrt(v) }; 0 > I && (I = 0), E > 0 && (E = 0), n(d, h) - I + E > 0 && (u = 1) } } var B = r(l[0], l[1]), x = n(B, B); if (x > 1e-15) { var S = []; d = t(A[0], e[0]), S[0] = n(d, B), d = t(A[0], e[1]), S[1] = n(d, B), d = t(A[0], e[2]), S[2] = n(d, B); var w = -1; if (S[0] > 0 && S[1] > 0 && S[2] > 0 ? S[w = S[1] > S[0] ? 0 : 1] > S[2] && (w = 2) : 0 > S[0] && 0 > S[1] && 0 > S[2] && S[2] > S[w = S[0] > S[1] ? 0 : 1] && (w = 2), w >= 0 && (u = 1, n(d = t(e[w], A[0]), r(B, l[0])) > 0 && n(d = t(e[w], A[1]), r(B, l[1])) > 0 && n(d = t(e[w], A[2]), r(B, l[2])) > 0)) return i = o(e[w], B, S[w] / x), s = e[w].clone(), { start: i.clone(), end: s, minDistance: i.distanceTo(s) } } var M = r(c[0], c[1]), b = n(M, M); if (b > 1e-15) { var U = []; d = t(e[0], A[0]), U[0] = n(d, M), d = t(e[0], A[1]), U[1] = n(d, M), d = t(e[0], A[2]), U[2] = n(d, M); w = -1; if (U[0] > 0 && U[1] > 0 && U[2] > 0 ? U[w = U[1] > U[0] ? 0 : 1] > U[2] && (w = 2) : 0 > U[0] && 0 > U[1] && 0 > U[2] && U[2] > U[w = U[0] > U[1] ? 0 : 1] && (w = 2), w >= 0 && (u = 1, n(d = t(A[w], e[0]), r(M, c[0])) > 0 && n(d = t(A[w], e[1]), r(M, c[1])) > 0 && n(d = t(A[w], e[2]), r(M, c[2])) > 0)) return { start: i = A[w].clone(), end: (s = o(A[w], M, U[w] / b)).clone(), minDistance: i.distanceTo(s) } } return u ? (i = p, s = g, { start: p.clone(), end: g.clone(), minDistance: Math.sqrt(f) }) : { start: p.clone(), end: g.clone(), minDistance: 0 } } for (var l = { start: null, end: null, minDistance: Number.POSITIVE_INFINITY }, c = 0, h = A.length; h > c; c += 1) for (var d = 0, p = e.length; p > d; d += 1) { var g = s(A[c], e[d]); if (0 >= g.minDistance) return l.minDistance = 0, l.start = g.start.clone(), l.end = g.end.clone(), l; l.minDistance > g.minDistance && (l.minDistance = g.minDistance, l.start = g.start.clone(), l.end = g.end.clone()) } return l }, calculateTheIntersectionOfGeometryAndPlane: function (A, e) { var t = A.getIndex().array, i = A.attributes.position, o = t.length, n = e.clone(), r = 0; - 1 === n.normal.x ? r = 0 : 1 === n.normal.x ? (n.normal.x = -1, n.constant *= -1, r = 1) : -1 === n.normal.y ? r = 2 : 1 === n.normal.y ? (n.normal.y = -1, n.constant *= -1, r = 3) : -1 === n.normal.z ? r = 4 : 1 === n.normal.z && (n.normal.z = -1, n.constant *= -1, r = 5); for (var a, s, l, c, h, d, p, g, u = [], f = new Hs, m = 0, C = o; C > m; m += 3) { var v = []; a = v, s = i, l = t[m], c = t[m + 1], h = t[m + 2], d = new y, p = new y, g = new y, d.fromBufferAttribute(s, l), p.fromBufferAttribute(s, c), g.fromBufferAttribute(s, h), a.push(d), a.push(p), a.push(g); var I = v[0], E = v[1], B = v[2], x = !1, S = !1, w = !1; switch (r) { case 0: case 1: x = n.constant > I.x, S = n.constant > E.x, w = n.constant > B.x; break; case 2: case 3: x = n.constant > I.y, S = n.constant > E.y, w = n.constant > B.y; break; case 4: case 5: x = n.constant > I.z, S = n.constant > E.z, w = n.constant > B.z } var M = null, b = null; x ? S ? w || (f.set(B, E), (M = n.intersectLine(f, new y)) && u.push(M), f.set(B, I), (b = n.intersectLine(f, new y)) && u.push(b)) : w ? (f.set(E, B), (M = n.intersectLine(f, new y)) && u.push(M), f.set(E, I), (b = n.intersectLine(f, new y)) && u.push(b)) : (f.set(E, I), (M = n.intersectLine(f, new y)) && u.push(M), f.set(B, I), (b = n.intersectLine(f, new y)) && u.push(b)) : S ? w ? (f.set(I, E), (M = n.intersectLine(f, new y)) && u.push(M), f.set(I, B), (b = n.intersectLine(f, new y)) && u.push(b)) : (f.set(I, E), (M = n.intersectLine(f, new y)) && u.push(M), f.set(B, E), (b = n.intersectLine(f, new y)) && u.push(b)) : w && (f.set(I, B), (M = n.intersectLine(f, new y)) && u.push(M), f.set(E, B), (b = n.intersectLine(f, new y)) && u.push(b)) } if (u.length >= 1) { for (var U = {}, F = [], K = [], Q = 0, R = u.length; R > Q; Q += 1) { var T = u[Q].toArray(F).toString(); U[T] || (U[T] = []), 2 > U[T].length || (T = T + "_" + Math.floor(U[T].length / 2 + .6), U[T] || (U[T] = [])), U[T].push(Q), K.push(T) } var k = [], D = K[0]; return k.push(u[0], u[1]), function A(e, t) { var i = U[K[e]], o = i[0] === e ? i[1] : i[0], n = o % 2 ? o - 1 : o + 1; if (t.push(u[n]), K[n] !== D) { if (isNaN(n)) return void(k = null); A(n, t) } }(1, k), k } }, getShapeGeometryFromGeometryAndPlane: function (A, e) { var t = Tu.calculateTheIntersectionOfGeometryAndPlane(A, e); if (t) { var i = 0; - 1 === e.normal.x ? i = 0 : 1 === e.normal.x ? i = 1 : -1 === e.normal.y ? i = 2 : 1 === e.normal.y ? i = 3 : -1 === e.normal.z ? i = 4 : 1 === e.normal.z && (i = 5); var o = [], n = [], r = [], a = [], l = []; A.boundingBox || A.computeBoundingBox(); for (var c = A.boundingBox.getSize(new y), h = e.normal.x * c.x * 1e-4, d = e.normal.y * c.y * 1e-4, p = e.normal.z * c.z * 1e-4, g = 0, u = t.length; u > g; g += 1) { var f = t[g], m = new s; switch (n.push(f.x + h, f.y + d, f.z + p), i) { case 0: case 1: r.push(1, 0, 0), a.push(f.y, f.z), m.set(f.y, f.z); break; case 2: case 3: r.push(0, 1, 0), a.push(f.x, f.z), m.set(f.x, f.z); break; case 4: case 5: r.push(0, 0, 1), a.push(f.x, f.y), m.set(f.x, f.y) } l.push(m) } for (var C = Hn.triangulateShape(l, []), v = 0, I = C.length; I > v; v += 1) { var E = C[v]; o.push(E[0], E[1], E[2]) } var B = new he; return B.setIndex(o), B.setAttribute("position", new Ae(n, 3)), B.setAttribute("normal", new Ae(r, 3)), B.setAttribute("uv", new Ae(a, 2)), B } } }; Tu.getBoxMBuffer = function () { for (var A = null, e = null, t = [], i = [], o = [], n = 0, r = 0; 6 > r; r += 1) { var a = Tu.getBoxData(r); for (A = 0, e = a.vertex.length; e > A; A += 1) t.push(a.vertex[A]); for (A = 0, e = a.index.length; e > A; A += 1) o.push(a.index[A] + n); for (n += a.vertex.length / 3, A = 0, e = a.normal.length; e > A; A += 1) i.push(a.normal[A]) } return function (A) { var e = null; if (A) { var n = new l, r = new y; e = []; for (var a = 0; 6 > a; a += 1) { var s = Tu.getBoxData(a); n.set(A[6 * a], A[6 * a + 2], A[6 * a + 4], A[6 * a + 1], A[6 * a + 3], A[6 * a + 5], 0, 0, 1); for (var c = 0, h = s.uv.length; h > c; c += 2) r.set(s.uv[c], s.uv[c + 1], 1), r.applyMatrix3(n), e.push(r.x), e.push(r.y) } } return { vertex: t, normal: i, uv: e, index: o } } }(), Tu.getPipeMBuffer = function () { var A = Tu.getPipeData(32), e = A.edges, t = A.vertex, i = A.normal, o = A.index; return function (A) { var n = null; if (!(!A || 18 !== A.length)) { n = []; for (var r = [], a = 0, s = A.length / 6; s > a; a += 1) { var c = new l; c.set(A[6 * a], A[6 * a + 2], A[6 * a + 4], A[6 * a + 1], A[6 * a + 3], A[6 * a + 5], 0, 0, 1), r.push(c) } for (var h = Tu.getPipeData(32), d = 4 * (e + 1), p = d + 2 * e, g = new y, u = 0, f = h.uv.length; f > u; u += 2) g.set(h.uv[u], h.uv[u + 1], 1), g.applyMatrix3(d > u ? r[0] : p > u ? r[1] : r[2]), n.push(g.x), n.push(g.y) } return { vertex: t, normal: i, uv: n, index: o } } }(); var ku = { geoHeader: function (A) { var e = new Int32Array(A); this.geoCount = e[0], this.headerBuffer = e.slice(1, 4 * this.geoCount + 1) }, GeometryReader: function (A, e) { Bh.time("GeometryReader"), this.geomMap = [], this.geoCount = new Uint32Array(A, 0, 1)[0]; var t = this.geoCount, i = [], o = 0, n = null, r = null, a = null, s = null, l = null, c = null, h = null, d = 0, p = null, g = 0, u = null, f = 0, m = null, C = 0, y = null, v = 0, I = null; if (np(e, "2")) for (var E = 0; t > E; E += 1) { if (i = {}, o = 4 * (1 + 7 * t), r = (n = new Uint32Array(A, 4 * (1 + 7 * E), 7))[0], a = n[2], s = n[3], l = n[4], c = n[5], h = n[6], d = o + n[1], p = new Float32Array(A.slice(d, 4 * a + d)), g = 4 * a + d, u = new Float32Array(A.slice(g, g + 4 * s)), f = g + 4 * s, m = new Uint32Array(A.slice(f, f + 4 * l)), C = f + 4 * l, y = new Float32Array(A.slice(C, C + 4 * c)), v = C + 4 * c, I = new Int16Array(A.slice(v, v + 2 * h)), vc.DataReduction) { var B = (new M).makeScale(.001, .001, .001); Tu.applyMatrix4ToBuffer(B, p) } i.position = p, i.normal = u, i.index = m, i.uv = y, i.materialIndex = I, i.geoId = r, this.geomMap.push(i) } else for (var x = 0; t > x; x += 1) i = {}, o = 4 * (1 + 6 * t), r = (n = new Uint32Array(A, 4 * (1 + 6 * x), 6))[0], a = n[2], s = n[3], l = n[4], c = n[5], d = o + n[1], p = new Float32Array(A.slice(d, 4 * a + d)), g = 4 * a + d, u = new Float32Array(A.slice(g, g + 4 * s)), f = g + 4 * s, m = new Uint32Array(A.slice(f, f + 4 * l)), C = f + 4 * l, y = new Float32Array(A.slice(C, C + 4 * c)), i.position = p, i.normal = u, i.index = m, i.uv = y, i.geoId = r, this.geomMap.push(i); Bh.debug(this.geomMap), Bh.timeEnd("GeometryReader") }, BatchedGeometryReader: function (A, e) { Bh.time("BatchedGeometryReader"), this.geomMap = [], this.geoCount = new Uint32Array(A, 0, 1)[0]; for (var t = this.geoCount, i = 0, o = 0, n = 0, r = [], a = 4, s = 0; t > s; s += 1) { var l = {}; r.push(l); var c = new Uint32Array(A, a, 7); l.geoId = c[0], l.offset = c[1], l.vertexLength = c[2], l.normalLength = c[5], l.indicesLength = c[3], l.uvLength = c[4], l.componentCount = o = c[6], l.nodeInfo = [], a += 28; for (var h = 0; o > h; h += 1) { var d = new Uint32Array(A, a, 1)[0]; a += 4; for (var p = 0; d > p; p += 1) { var g = new Uint32Array(A, a, 3); a += 12, l.nodeInfo.push(g) } } l.materialKeyLength = new Uint32Array(A, a, 1)[0], a += 4 } for (var u = 0; t > u; u += 1) { var f = r[u], m = f.normalLength, C = f.indicesLength, y = f.uvLength; i = a + f.offset, n = 4 * f.vertexLength; var v = new Float32Array(A.slice(i, i + n)); i += n, n = 4 * C; var I = new Uint32Array(A.slice(i, i + n)); i += n, n = 4 * y; var E = new Float32Array(A.slice(i, i + n)); i += n, n = 4 * m; var B = new Float32Array(A.slice(i, i + n)); i += n, o = f.componentCount; for (var x = {}, S = 0, w = f.nodeInfo.length; w > S; S += 1) { var b = f.nodeInfo[S]; n = 2 * b[0]; var U = uh.ab2str(new Int16Array(A.slice(i, i + n))); i += n, n = 2 * b[1]; var F = uh.ab2str(new Int16Array(A.slice(i, i + n))); i += n; var K = new Uint32Array(A.slice(i, i + 4))[0]; i += 4; var Q = new Uint32Array(A.slice(i, i + 4))[0]; i += 4; var R = new Uint32Array(A.slice(i, i + 4))[0]; i += 4; var T = new Uint32Array(A.slice(i, i + 4))[0]; i += 4; var k = {}; k.userId = U, k.nodeId = F, k.positionStart = K, k.positionCount = Q, k.indexStart = R, k.indexCount = T, x[U] || (x[U] = []), x[U].push(k) } n = 2 * f.materialKeyLength; var D = uh.ab2str(new Int16Array(A.slice(i, i + n))); if (vc.DataReduction) { var L = (new M).makeScale(.001, .001, .001); Tu.applyMatrix4ToBuffer(L, v) } var N = {}; N.position = v, N.normal = B, N.index = I, N.uv = E, N.materialIndex = null, N.geoId = f.geoId, N.materialKey = D, N.componentInfo = x, this.geomMap.push(N) } Bh.debug(this.geomMap), Bh.timeEnd("BatchedGeometryReader") }, NodesReader: function (A, e) { Bh.time("NodesReader"), this.geomMap = [], this.nodeCount = new Uint32Array(A, 0, 1)[0]; for (var t = this.nodeCount, i = 0, o = 0, n = [], r = 4, a = 0; t > a; a += 1) { var s = {}; n.push(s); var l = new Uint32Array(A, r, 5); s.geoId = l[0], s.offset = l[1], s.nodeIdLength = l[2], s.materialKeyLength = l[3], s.matrixLength = l[4], r += 20 } for (var c = 0; t > c; c += 1) { var h = n[c], d = h.materialKeyLength, p = h.matrixLength, g = uh.ab2str(A.slice(i = r + h.offset, i + (o = h.nodeIdLength))), u = uh.ab2str(A.slice(i += o, i + (o = d))); i += o, o = 8 * p; var f = new Float64Array(A.slice(i, i + o)); i += o; var m = {}; m.nodeId = g, m.geoId = h.geoId, m.material = u, m.matrix = f, this.geomMap.push(m) } Bh.debug(this.geomMap), Bh.timeEnd("NodesReader") }, InstancedGeometryReader: function (A, e) { Bh.time("InstancedGeometryReader"), this.geomMap = [], this.geoCount = new Uint32Array(A, 0, 1)[0]; for (var t = this.geoCount, i = null, o = 0, n = 0, r = 0, a = [], s = 4, l = 0; t > l; l += 1) { var c = {}; a.push(c), i = new Uint32Array(A, s, 7), c.geoId = i[0], c.offset = i[1], c.vertexLength = i[2], c.normalLength = i[5], c.indicesLength = i[3], c.uvLength = i[4], c.componentCount = n = i[6], c.nodeInfo = {}, s += 28; var h = []; c.componentKeyLength = h, c.matrixArrayLength = []; for (var d = 0; n > d; d += 1) { h.push(new Uint32Array(A, s, 1)[0]), s += 4; var p = new Uint32Array(A, s, 1)[0]; s += 4, c.nodeInfo[d] = []; for (var g = 0; p > g; g += 1) { var u = new Uint32Array(A, s, 1)[0]; s += 4, c.nodeInfo[d].push(u) } } c.matrixArrayLength = new Uint32Array(A, s, 1)[0], s += 4, c.materialKeyLength = new Uint32Array(A, s, 1)[0], s += 4 } for (var f = 0; t > f; f += 1) { var m = a[f], C = m.normalLength, y = m.indicesLength, v = m.uvLength; o = s + m.offset, r = 4 * m.vertexLength; var I = new Float32Array(A.slice(o, o + r)); o += r, r = 4 * y; var E = new Uint32Array(A.slice(o, o + r)); o += r, r = 4 * v; var B = new Float32Array(A.slice(o, o + r)); o += r, r = 4 * C; var x = new Float32Array(A.slice(o, o + r)); o += r; for (var S = {}, w = [], b = [], U = 0, F = 0, K = n = m.componentCount; K > F; F += 1) { var Q = uh.ab2str(A.slice(o, o + (r = m.componentKeyLength[F]))); o += r, b.push(Q), S[Q] || (S[Q] = []); for (var R = m.nodeInfo[F], T = 0, k = R.length; k > T; T += 1) { var D = uh.ab2str(A.slice(o, o + (r = R[T]))); o += r, S[Q].push(U), w.push(D), U += 1 } } r = 8 * m.matrixArrayLength; var L = new Float64Array(A.slice(o, o + r)); o += r; var N = new Float64Array(A.slice(o, o + r)); o += r; var O = new Float64Array(A.slice(o, o + r)); o += r; var V = new Float64Array(A.slice(o, o + r)), G = uh.ab2str(A.slice(o += r, o + (r = m.materialKeyLength))); o += r, r = 4 * w.length * 4; var P = new Float32Array(A.slice(o, o + r)); if (o += r, vc.DataReduction) { var q = (new M).makeScale(.001, .001, .001); Tu.applyMatrix4ToBuffer(q, I) } var j = {}; j.position = I, j.normal = x, j.index = E, j.uv = B, j.materialIndex = null, j.geoId = m.geoId, j.materialKey = G, j.componentInfo = S, j.mcol0 = L, j.mcol1 = N, j.mcol2 = O, j.mcol3 = V, j.color = P, j.nodeIdInfo = w, j.componentKeyInfo = b, this.geomMap.push(j) } Bh.debug(this.geomMap), Bh.timeEnd("InstancedGeometryReader") }, BoneReader: function (A, e) { Bh.time("BoneReader"), this.boneMap = [], this.boneCount = new Uint32Array(A, 0, 1)[0]; for (var t = this.boneCount, i = [], o = 0, n = null, r = null, a = null, s = null, l = null, c = null, h = 0, d = null, p = 0, g = null, u = 0, f = null, m = 0, C = [], y = "[]", v = 0; t > v; v += 1) { i = {}, o = 4 * (1 + 5 * t), r = (n = new Uint32Array(A, 4 * (1 + 5 * v), 5))[0], a = n[2], s = n[3], l = n[3], c = n[4], h = o + n[1], d = new Float32Array(A.slice(h, 4 * a + h)), p = 4 * a + h, g = new Uint16Array(A.slice(p, p + 2 * s)), u = p + 2 * s, f = new Float32Array(A.slice(u, u + 4 * l)), m = u + 4 * l; var I = new Uint8Array(A.slice(m, m + c)); y = mh.isIE11() ? uh.decodeUTF8(I) : new TextDecoder("utf-8").decode(I); try { C = JSON.parse(y) } catch (A) { Bh.error("解析name出错:", A) } i.offsetMatrix = d, i.skinIndex = g, i.skinWeight = f, i.name = C, i.geoId = r, this.boneMap.push(i) } Bh.debug(this.boneMap), Bh.time("BoneReader") } }; ku.GeometryReader.prototype = { constructor: ku.GeometryReader, getPositionBuffer: function (A) { return this.geos[A].position }, getIndexBuffer: function (A) { return this.geos[A].index }, getNormalBuffer: function (A) { return this.geos[A].normal }, getUVBuffer: function (A) { return [] } }; var Du = function (A, e) { if (this.materialMap = [], np(e, "2")) this.materialMap = A; else for (var t = this.materialCount = new Uint32Array(A, 0, 1)[0], i = 4 * (1 + 6 * t), o = 0; t > o; o += 1) { var n = new Uint32Array(A, 4 * (1 + 6 * o), 6), r = n[0], a = n[1], s = n[2], l = n[3], c = n[4], h = n[5], d = new Float32Array(A.slice(i + a, 4 * s + i + a)), p = new Int16Array(A.slice(4 * s + i + a, 4 * s + i + a + 2 * l)), g = new Uint8Array(A.slice(4 * s + i + a + 2 * l, 4 * s + i + a + 2 * l + c)), u = 4 * s + i + a + 2 * l + c, f = new Int16Array(A.slice(u, u + 2 * h)), m = "[]"; m = mh.isIE11() ? uh.decodeUTF8(g) : new TextDecoder("utf-8").decode(g); var C = []; try { C = JSON.parse(m) } catch (A) { Bh.error("解析纹理出错:", A) } var y = {}; y.matId = r, y.color = d, y.colorIndex = p, y.texture = C, y.textureIndex = f, this.materialMap.push(y) } Bh.debug(this.materialMap) }, Lu = { geoHeader: function (A) { var e = new Int32Array(A); this.geoCount = e[0], this.headerBuffer = e.slice(1, 4 * this.geoCount + 1) }, GeometryReader: function (A, e) { this.geomMap = [], this.geoCount = new Uint32Array(A, 0, 1)[0]; for (var t = this.geoCount, i = [], o = 0, n = null, r = null, a = null, s = null, l = 0, c = null, h = null, d = 0, p = 0; t > p; p += 1) i = {}, o = 4 * (1 + 4 * t), r = (n = new Uint32Array(A, 4 * (1 + 4 * p), 4))[0], a = n[3], s = n[2], l = o + n[1], h = new Uint32Array(A.slice(l, l + 4 * s)), d = l + 4 * s, c = new Float32Array(A.slice(d, 4 * a + d)), i.position = c, i.index = h, i.geoId = r, this.geomMap.push(i); Bh.debug(this.geomMap) }, BoneReader: function (A, e) { this.boneMap = [], this.boneCount = new Uint32Array(A, 0, 1)[0]; for (var t = this.boneCount, i = [], o = 0, n = null, r = null, a = null, s = null, l = null, c = null, h = 0, d = null, p = 0, g = null, u = 0, f = null, m = 0, C = [], y = "[]", v = 0; t > v; v += 1) { i = {}, o = 4 * (1 + 5 * t), r = (n = new Uint32Array(A, 4 * (1 + 5 * v), 5))[0], a = n[2], s = n[3], l = n[3], c = n[4], h = o + n[1], d = new Float32Array(A.slice(h, 4 * a + h)), p = 4 * a + h, g = new Uint16Array(A.slice(p, p + 2 * s)), u = p + 2 * s, f = new Float32Array(A.slice(u, u + 4 * l)), m = u + 4 * l; var I = new Uint8Array(A.slice(m, m + c)); y = mh.isIE11() ? uh.decodeUTF8(I) : new TextDecoder("utf-8").decode(I); try { C = JSON.parse(y) } catch (A) { Bh.error("解析name出错:", A) } i.offsetMatrix = d, i.skinIndex = g, i.skinWeight = f, i.name = C, i.geoId = r, this.boneMap.push(i) } Bh.debug(this.boneMap) } }; Lu.GeometryReader.prototype = { constructor: Lu.GeometryReader, getPositionBuffer: function (A) { return this.geos[A].position }, getIndexBuffer: function (A) { return this.geos[A].index }, getNormalBuffer: function (A) { return this.geos[A].normal }, getUVBuffer: function (A) { return [] } }; var Nu = function (A) { this.MaxThreadCount = A || 8, this.todoList = [], this.doingCount = 0, this.addItem = function (A) { void 0 !== A && this.todoList.push(A) }, this.run = function (A, e, t) { if (0 >= this.doingCount) if (0 !== this.todoList.length) { var i = this.todoList, o = i.length; this.todoList = [], this.doingCount = o; for (var n = Math.min(this.MaxThreadCount, vc.ConcurrencyRequestCount, o), r = this, a = 0; n > a; a += 1) s(a) } else t(); function s(a) { o > a ? (e(r.doingCount, o), A(i[a], a + n, s)) : 1 > r.doingCount && (r.run(A, e, t), e(r.doingCount, o), t()) } } }, Ou = function (A, e) { this.type = e, this.manager = A, this.worker = new Nu(4), this.working = !0 }; function Vu(A, e, t, i) { for (var o = function (A, e) { var t = void 0; t = "Line" === e || "LineSegments" === e ? new Ba : new Ja; for (var i = new s, o = new s, n = new s, r = !0, a = !1, l = A.match(/[a-df-z][^a-df-z]*/gi), c = 0, h = l.length; h > c; c++) { var d = l[c], p = (e = d.charAt(0), d.substr(1).trim()); switch (!0 === r && (a = !0, r = !1), e) { case "M": for (var g = Gu(p), u = 0, f = g.length; f > u; u += 2) i.x = g[u + 0], i.y = g[u + 1], o.x = i.x, o.y = i.y, 0 === u ? t.moveTo(i.x, i.y) : t.lineTo(i.x, i.y), 0 === u && !0 === a && n.copy(i); break; case "H": for (g = Gu(p), u = 0, f = g.length; f > u; u++) i.x = g[u], o.x = i.x, o.y = i.y, t.lineTo(i.x, i.y), 0 === u && !0 === a && n.copy(i); break; case "V": for (g = Gu(p), u = 0, f = g.length; f > u; u++) i.y = g[u], o.x = i.x, o.y = i.y, t.lineTo(i.x, i.y), 0 === u && !0 === a && n.copy(i); break; case "L": for (g = Gu(p), u = 0, f = g.length; f > u; u += 2) i.x = g[u + 0], i.y = g[u + 1], o.x = i.x, o.y = i.y, t.lineTo(i.x, i.y), 0 === u && !0 === a && n.copy(i); break; case "C": for (g = Gu(p), u = 0, f = g.length; f > u; u += 6) t.bezierCurveTo(g[u + 0], g[u + 1], g[u + 2], g[u + 3], g[u + 4], g[u + 5]), o.x = g[u + 2], o.y = g[u + 3], i.x = g[u + 4], i.y = g[u + 5], 0 === u && !0 === a && n.copy(i); break; case "S": for (g = Gu(p), u = 0, f = g.length; f > u; u += 4) t.bezierCurveTo(Pu(i.x, o.x), Pu(i.y, o.y), g[u + 0], g[u + 1], g[u + 2], g[u + 3]), o.x = g[u + 0], o.y = g[u + 1], i.x = g[u + 2], i.y = g[u + 3], 0 === u && !0 === a && n.copy(i); break; case "Q": for (g = Gu(p), u = 0, f = g.length; f > u; u += 4) t.quadraticCurveTo(g[u + 0], g[u + 1], g[u + 2], g[u + 3]), o.x = g[u + 0], o.y = g[u + 1], i.x = g[u + 2], i.y = g[u + 3], 0 === u && !0 === a && n.copy(i); break; case "T": for (g = Gu(p), u = 0, f = g.length; f > u; u += 2) { var m = Pu(i.x, o.x), C = Pu(i.y, o.y); t.quadraticCurveTo(m, C, g[u + 0], g[u + 1]), o.x = m, o.y = C, i.x = g[u + 0], i.y = g[u + 1], 0 === u && !0 === a && n.copy(i) } break; case "A": for (g = Gu(p), u = 0, f = g.length; f > u; u += 7) { var y = i.clone(); i.x = g[u + 5], i.y = g[u + 6], o.x = i.x, o.y = i.y, qu(t, g[u], g[u + 1], g[u + 2], g[u + 3], g[u + 4], y, i), 0 === u && !0 === a && n.copy(i) } break; case "m": for (g = Gu(p), u = 0, f = g.length; f > u; u += 2) i.x += g[u + 0], i.y += g[u + 1], o.x = i.x, o.y = i.y, 0 === u ? t.moveTo(i.x, i.y) : t.lineTo(i.x, i.y), 0 === u && !0 === a && n.copy(i); break; case "h": for (g = Gu(p), u = 0, f = g.length; f > u; u++) i.x += g[u], o.x = i.x, o.y = i.y, t.lineTo(i.x, i.y), 0 === u && !0 === a && n.copy(i); break; case "v": for (g = Gu(p), u = 0, f = g.length; f > u; u++) i.y += g[u], o.x = i.x, o.y = i.y, t.lineTo(i.x, i.y), 0 === u && !0 === a && n.copy(i); break; case "l": for (g = Gu(p), u = 0, f = g.length; f > u; u += 2) i.x += g[u + 0], i.y += g[u + 1], o.x = i.x, o.y = i.y, t.lineTo(i.x, i.y), 0 === u && !0 === a && n.copy(i); break; case "c": for (g = Gu(p), u = 0, f = g.length; f > u; u += 6) t.bezierCurveTo(i.x + g[u + 0], i.y + g[u + 1], i.x + g[u + 2], i.y + g[u + 3], i.x + g[u + 4], i.y + g[u + 5]), o.x = i.x + g[u + 2], o.y = i.y + g[u + 3], i.x += g[u + 4], i.y += g[u + 5], 0 === u && !0 === a && n.copy(i); break; case "s": for (g = Gu(p), u = 0, f = g.length; f > u; u += 4) t.bezierCurveTo(Pu(i.x, o.x), Pu(i.y, o.y), i.x + g[u + 0], i.y + g[u + 1], i.x + g[u + 2], i.y + g[u + 3]), o.x = i.x + g[u + 0], o.y = i.y + g[u + 1], i.x += g[u + 2], i.y += g[u + 3], 0 === u && !0 === a && n.copy(i); break; case "q": for (g = Gu(p), u = 0, f = g.length; f > u; u += 4) t.quadraticCurveTo(i.x + g[u + 0], i.y + g[u + 1], i.x + g[u + 2], i.y + g[u + 3]), o.x = i.x + g[u + 0], o.y = i.y + g[u + 1], i.x += g[u + 2], i.y += g[u + 3], 0 === u && !0 === a && n.copy(i); break; case "t": for (g = Gu(p), u = 0, f = g.length; f > u; u += 2) { m = Pu(i.x, o.x), C = Pu(i.y, o.y); t.quadraticCurveTo(m, C, i.x + g[u + 0], i.y + g[u + 1]), o.x = m, o.y = C, i.x = i.x + g[u + 0], i.y = i.y + g[u + 1], 0 === u && !0 === a && n.copy(i) } break; case "a": for (g = Gu(p), u = 0, f = g.length; f > u; u += 7) { y = i.clone(); i.x += g[u + 5], i.y += g[u + 6], o.x = i.x, o.y = i.y, qu(t, g[u], g[u + 1], g[u + 2], g[u + 3], g[u + 4], y, i), 0 === u && !0 === a && n.copy(i) } break; case "Z": case "z": t.currentPath.autoClose = !0, t.currentPath.curves.length > 0 && (i.copy(n), t.currentPath.currentPoint.copy(i), r = !0); break; default: console.warn(d) } a = !1 } return t }(A), n = "Shape" === o.type ? [o] : o.toShapes(!0), r = new H, a = 0; n.length > a; a++) { var l = n[a]; if ("Line" === e || "LineSegments" === e) { for (var c = l.getPoints(), h = 0; c.length > h; h += 1) { var d = c[h]; d.y = -d.y, i && (d.z = i) } if ("LineSegments" === e) { var p = new jo((new De).setFromPoints(c), t); r.add(p) } else if ("Line" === e) { var g = new Go((new De).setFromPoints(c), t); r.add(g) } } else if ("Mesh" === e) { for (var u = new ar(l), f = u.getAttribute("position"), m = f.array, C = 0, y = m.length; y > C; C += 3) m[C + 1] = -m[C + 1], m[C + 2] = i; f.needsUpdate = !0; var v = new Ue(u, t); r.add(v) } } return r } function Gu(A) { for (var e = A.split(/[\s,]+|(?=\s?[+\-])/), t = 0; e.length > t; t += 1) { var i = e[t]; if (i.indexOf(".") !== i.lastIndexOf(".")) for (var o = i.split("."), n = 2; o.length > n; n += 1) e.splice(t + n - 1, 0, "0." + o[n]); e[t] = parseFloat(i) } return e } function Pu(A, e) { return A - (e - A) } function qu(A, e, t, i, o, n, r, a) { i = i * Math.PI / 180, e = Math.abs(e), t = Math.abs(t); var s = (r.x - a.x) / 2, l = (r.y - a.y) / 2, c = Math.cos(i) * s + Math.sin(i) * l, h = -Math.sin(i) * s + Math.cos(i) * l, d = e * e, p = t * t, g = c * c, u = h * h, f = g / d + u / p; if (f > 1) { var m = Math.sqrt(f); d = (e *= m) * e, p = (t *= m) * t } var C = d * u + p * g, y = Math.sqrt(Math.max(0, (d * p - C) / C)); o === n && (y = -y); var v = y * e * h / t, I = -y * t * c / e, E = Math.cos(i) * v - Math.sin(i) * I + (r.x + a.x) / 2, B = Math.sin(i) * v + Math.cos(i) * I + (r.y + a.y) / 2, x = svgAngle(1, 0, (c - v) / e, (h - I) / t), S = svgAngle((c - v) / e, (h - I) / t, (-c - v) / e, (-h - I) / t) % (2 * Math.PI); A.currentPath.absellipse(E, B, e, t, x, x + S, 0 === n, i) } function ju(A) { this.group = A; var e = new LA(16711680); this._lineMaterial = new ko({ color: e, side: 2 }), this._meshMaterial = new jA({ color: e, side: 2 }) } function Hu() { this.axisNet = void 0, this.visibleByUser = !1 } Ou.prototype = { constructor: Ou, addTask: function (A) { this.worker.addItem(A) }, processTasks: function (A, e, t) { var i = this, o = this.worker; this.worker.run((function (e, t, n) { i.working && A(e, (function () { o.doingCount -= 1, n(t) })) }), e = e || function () {}, t = t || function () {}) }, stop: function () { this.working = !1 }, start: function () { this.working = !0 } }, ju.prototype.fromJSON = function (A, e) { for (var t in A) if (A.hasOwnProperty(t)) { var i = A[t]; for (var o in i) if (i.hasOwnProperty(o)) { var n = i[o], r = n.G.Path; if (r && r.length > 0) { var a = n.P.matrix || [0, 0]; if (n.P.Type && "LINE" === n.P.Type) { for (var s = "", l = 0, c = r.length; c > l; l += 1) s += r[l]; var h = Vu(s, "LineSegments", this._lineMaterial, e); h.position.setX(a[0]), h.position.setY(-a[1]), this.group.add(h), h.updateMatrixWorld(!0) } else for (var d = 0, p = r.length; p > d; d += 1) { var g = void 0, u = Vu(r[d], g = n.G.Fill && n.G.Fill.length === p && 0 !== n.G.Fill[d].length ? "Mesh" : "Line", "Line" === g ? this._lineMaterial : this._meshMaterial, e); u.position.setX(a[0]), u.position.setY(-a[1]), this.group.add(u), u.updateMatrixWorld(!0) } } } } }, ju.prototype.setColor = function (A, e) { if (A) { var t = new LA(A); this._lineMaterial.color = t, e && (this._lineMaterial.opacity = e, this._lineMaterial.transparent = 1 !== e), this._meshMaterial.color = t, e && (this._meshMaterial.opacity = e, this._meshMaterial.transparent = 1 !== e), this._lineMaterial.needsUpdate = !0, this._meshMaterial.needsUpdate = !0 } }, ju.prototype.enableStayInFront = function () { this._lineMaterial.transparent = !0, this._meshMaterial.transparent = !0, this._lineMaterial.depthTest = !1, this._meshMaterial.depthTest = !1 }, ju.prototype.disableStayInFront = function () { this._lineMaterial.transparent = !1, this._meshMaterial.transparent = !1, this._lineMaterial.depthTest = !0, this._meshMaterial.depthTest = !0 }, Hu.prototype.setupColor = function (A, e) { A && this.axisNet.setColor(A, e) }, Hu.prototype.hide = function () { this.axisNet && (this.visibleByUser = !1, this.axisNet.group.visible = !1) }, Hu.prototype.show = function () { this.axisNet && (this.visibleByUser = !0, this.axisNet.group.visible = !0) }, Hu.prototype.privateShow = function () { this.axisNet && (this.axisNet.group.visible = !0) }, Hu.prototype.privateHide = function () { this.axisNet && (this.axisNet.group.visible = !1) }, Hu.prototype.enableStayInFront = function () { this.axisNet.enableStayInFront() }, Hu.prototype.disableStayInFront = function () { this.axisNet.disableStayInFront() }; var Yu = function () { this.name = "", this.componentkeys = [], this.box = void 0, this.center = void 0, this.map = void 0 }, Wu = function () { this.name = "", this.image = void 0, this.width = 0, this.height = 0, this.sceneWidth = 0, this.sceneHeight = 0, this.box = { x1: 0, y1: 0, z1: 0, x2: 0, y2: 0, z2: 0, offsetX: 0, offsetY: 0 }, this.componentKeys = void 0 }; Wu.prototype.clone = function () { var A = new Wu; return A.name = this.name, A.image = this.image, A.width = this.width, A.height = this.height, A.sceneWidth = this.sceneWidth, A.sceneHeight = this.sceneHeight, A.box = Object.assign({}, this.box), A.componentKeys = this.componentKeys ? [].concat(this.componentKeys) : void 0, A }, Yu.parseFloorInfos = function (A) { for (var e = [], t = Object.keys(A), i = 0, o = t.length; o > i; i += 1) { var n = A[t[i]]; if (n.length > 0) { var r = new Yu; r.componentkeys = n, r.name = t[i], e.push(r) } } if (e.length > 0) return e }; var Ju = function () { this.floors = void 0, this.sortedFloors = void 0, this.factor = 1, this.baseFloorIndex = -1, this.averageHeight = 0, this.center = void 0 }, zu = function () { function A() { cc(this, A), this.floors = void 0, this.floorExplosionInfo = void 0, this.modelType = void 0, this.modelKey = void 0, this.revitFilter = { OST_CeilingOpening: !0, OST_FloorOpening: !0, OST_RoofOpening: !0, OST_Walls: !0, OST_StructuralFraming: !0, OST_CurtainWallPanels: !0, OST_CurtainWallMullions: !0, OST_CurtaSystem: !0, OST_ShaftOpening: !0 }, this.ifcFilter = { IfcWallStandardCase: !0, IfcWall: !0, IfcCurtainWall: !0, IfcBeam: !0, IfcMember: !0 } } return dc(A, [{ key: "generateMiniMap", value: function (A) { var e = this; if ((this.modelType === Zc.RVT || this.modelType === Zc.IFC || this.modelType === Zc.MERGE) && this.floors && this.floors.length > 0) { var t = vc.MiniMapSize, i = t, o = A.rendererManager.renderer, n = new s(t, i), r = new g(n.x, n.y, { stencilBuffer: !1 }); o.setRenderTarget(r); var a = new p, l = o.getPixelRatio(); o.getViewport(a), o.setPixelRatio(1), o.setViewport(0, 0, n.width, n.height); var c = A.getScene(), h = new y, d = new y, u = A.getModel(this.modelKey).getBoundingBoxWorld(); u.getCenter(h), u.getSize(d); var f = Math.ceil(Math.max(d.x, d.y)), m = f / 2, C = new y(f, f, d.z); u.setFromCenterAndSize(h, C); var v = new Ka; v.up.set(0, 1, 0), v.position.set(h.x, h.y, u.max.z), v.lookAt(h.x, h.y, u.min.z), v.left = -m, v.right = m, v.top = m, v.bottom = -m, v.near = 1, v.far = d.z, v.updateMatrixWorld(!0), v.updateProjectionMatrix(); var I = document.createElement("canvas"); I.width = n.width, I.height = n.height; var E = I.getContext("2d"), B = new Uint8Array(n.width * n.height * 4), x = A.getFilter(); this.floors.forEach((function (a) { var s = e.findSpecificKeys(a.componentkeys, A); 0 === s.length && (s = a.componentkeys); var l = A.getBoundingBoxByIds(s); l.getCenter(h), l.getSize(d); var p = new Wu; p.box.x1 = l.min.x, p.box.y1 = l.min.y, p.box.z1 = l.min.z, p.box.x2 = l.max.x, p.box.y2 = l.max.y, p.box.z2 = l.max.z, p.box.offsetX = l.min.x - u.min.x, p.box.offsetY = l.min.y - u.min.y, p.width = t, p.height = i, p.sceneWidth = f, p.sceneHeight = f, p.name = a.name, p.componentKeys = s, a.map = p, x.setIsolateList(s, !0), A.modelManager.applyFilter(), o.render(c, v), o.readRenderTargetPixels(r, 0, 0, n.width, n.height, B); for (var g = i / 2, m = 4 * t, C = new Uint8Array(4 * t), y = 0; g > y; y += 1) { var S = y * m, w = (i - y - 1) * m; C.set(B.subarray(S, S + m)), B.copyWithin(S, w, w + m), B.set(C, w) } var M = new Uint8ClampedArray(B.buffer), b = new ImageData(M, n.width, n.height); E.putImageData(b, 0, 0), p.image = I.toDataURL() })), x.clearIsolation(), o.setRenderTarget(null), o.setPixelRatio(l), o.setViewport(a.x, a.y, a.width, a.height) } } }, { key: "findSpecificKeys", value: function (A, e) { for (var t = [], i = 0, o = A.length; o > i; i += 1) { var n = e.modelManager.getComponent(A[i]); if (n && n.length > 0) { var r = n[0], a = r.buildInCategory, s = r.type; (a && this.revitFilter[a] || s && this.ifcFilter[s]) && t.push(A[i]) } } return t } }, { key: "getMimiMaps", value: function () { if (this.serverMapData) return { msg: "success", data: this.serverMapData.data }; if (this.floors && this.floors.length > 0) { for (var A = [], e = 0, t = this.floors.length; t > e; e += 1) { var i = this.floors[e].map; i && A.push(i.clone()) } if (A.length > 0) return { msg: "success", data: A } } return { msg: "该模型不支持小地图" } } }, { key: "getServerMimiMaps", value: function (A) { var e = this.model.dataUrl.floorMapUrl(), t = this.model.accessToken, i = this; if (this.floors && this.floors.length > 0) if (this.serverMapData) A({ msg: "success", data: i.serverMapData.data }); else { var o = { url: e, success: function (e) { var t; "SUCCESS" === (t = "string" == typeof e ? JSON.parse(e) : e).code ? (i.serverMapData = t, A({ msg: "success", data: t.data })) : "FAILURE" === t.code ? setTimeout((function () { i.getServerMimiMaps(A) }), 3e3) : A({ msg: "获取模型小地图出错" }) }, error: function () { A({ msg: "该模型不支持小地图" }) } }; t && (o.headers = { Authorization: t }), _d(o) } } }]), A }(), Zu = function () { this.leftChild = null, this.rightChild = null, this.boundingBox = null, this.level = -1, this.components = [] }; Zu.prototype.init = function (A) { if (A && (void 0 !== A.axis && (this.level = A.axis), A.left && (this.leftChild = new Zu, this.leftChild.init(A.left[0] ? A.left[0] : A.left)), A.right && (this.rightChild = new Zu, this.rightChild.init(A.right[0] ? A.right[0] : A.right)), A.box && !A.items && (this.boundingBox = new aA((new y).fromArray(A.box.min), (new y).fromArray(A.box.max))), A.items)) for (var e = 0; A.items.length > e; e += 1) this.components.push(A.items[e].key) }, Zu.prototype.intersect = function (A, e) { if (this.boundingBox) { if (!1 === A.intersectsBox(this.boundingBox)) return; this.leftChild && this.leftChild.intersect(A, e), this.rightChild && this.rightChild.intersect(A, e); for (var t = 0; this.components.length > t; t += 1) e.push(this.components[t]) } else for (var i = 0; this.components.length > i; i += 1) e.push(this.components[i]) }, Zu.prototype.frustumIntersect = function (A, e, t) { if (this.boundingBox) { var i = this.boundingBox; if (t && !t.equals(Bc) && (i = this.boundingBox.clone()).applyMatrix4(t), !1 === A.intersectsBox(i)) return; this.leftChild && this.leftChild.frustumIntersect(A, e, t), this.rightChild && this.rightChild.frustumIntersect(A, e, t); for (var o = 0; this.components.length > o; o += 1) e.push(this.components[o]) } else for (var n = 0; this.components.length > n; n += 1) e.push(this.components[n]) }, Zu.prototype.destroy = function () { this.leftChild && this.leftChild.destroy(), this.rightChild && this.rightChild.destroy(), this.leftChild = null, this.rightChild = null, this.boundingBox = null, this.level = -1, this.components = [] }; var Xu = function (A) { jr.call(this), this.handler = A, this.model = A.model, this.dataVersion = this.model.dataVersion, this.storage = this.model.getStorage(), this.url = A.model.dataUrl, this.offLine = A.model.offLine, this.fileLoader = A.model.fileLoader, this.descriptor = null, this.loader = new bu(this), this.Textureloader = new bu(this), this.jsonLoader = new bu(this), this.loadTaskCount = 0, this.maxLoadTaskCount = 0, this.loadTextureCount = 0, this.maxLoadTextureCount = 0, this.textruesLoaded = !1, this.dataLoaded = !1, this.taskComponentManager = new Ou(this, "component"), this.taskReuseNodeManager = new Ou(this, "component"), this.taskGeometrieManager = new Ou(this, "geometrie"), this.taskComponentNodeManager = new Ou(this, "nodes"), this.taskMaterialManager = new Ou(this, "material"), this.taskTexturesManager = new Ou(this, "textures"), this.fileKeyFromModelKey = {}, this.enableCompressedTexture = !1, this.enableSmallTexture = !1, this.startCallback = null, this.progressCallback = null, this.finishCallback = null, this.progress = { total: 0, loaded: 0, failed: 0 }, this.requests = {} }; Xu.prototype.destroy = function () { for (var A in this.requests) this.requests.hasOwnProperty(A) && (this.requests[A].abort && this.requests[A].abort(), delete this.requests[A]); this.taskComponentManager.stop(), this.taskComponentManager = null, this.taskGeometrieManager.stop(), this.taskGeometrieManager = null, this.taskMaterialManager.stop(), this.taskMaterialManager = null, this.taskTexturesManager.stop(), this.taskTexturesManager = null, this.url = null, this.model = null, this.fileLoader = null, this.descriptor = null, this.handler = null, this.startCallback = null, this.progressCallback = null, this.finishCallback = null, this.descriptor && this.descriptor.destroy() }, Xu.prototype.getStorage = function () { return this.storage }, Xu.prototype.getDescriptor = function () { return this.descriptor }, Xu.prototype.setNotifyProgress = function (A) { this.notifyProgress = A }, Xu.prototype.load = function (A, e, t) { this.startCallback = A, this.progressCallback = e, this.finishCallback = t, this.loadData() }, Xu.prototype.loadData = function () { var A = this.model, e = A.getConfig(), t = e.scene, i = e.animation; if (!t || !t.components || !t.geometries && (!t.batchedGeometries && !t.instancedGeometries || 1 > t.batchedGeometries.length && 1 > t.instancedGeometries.length) || !t.materials || !t.textures) return A.setEmptyScene(!0), Bh.error("scene is null,modelKey is ", A.modelKey), void A.dispatchEventEx({ type: Rc.ON_LOAD_EMPTY_SCENE, modelKey: A.modelKey }); var o = 0, n = 0, r = 0, a = t.components.length || 0, s = t.materials.length || 0, l = t.textures.length || 0, c = t.lights && t.lights.length || 0, h = t.reuseNodes && t.reuseNodes.length || 0, d = [], p = [], g = [], u = [], f = [], m = [], C = [], y = t.textures, v = [], I = []; if (this.map = {}, ap(this.dataVersion, "2.0.0")) { for (var E = 0; a > E; E += 1) t.components[E].fileKey ? d.push(t.components[E].fileKey) : A.dispatchEventEx({ type: Tc.SCENE_NOT_CLOSE, modelKey: A.modelKey }); for (var B = 0; s > B; B += 1) t.materials[B].fileKey ? p.push(t.materials[B].fileKey) : A.dispatchEventEx({ type: Tc.SCENE_NOT_CLOSE, modelKey: A.modelKey }) } else d = t.components, t.geometries, p = t.materials, Array.isArray(t.nodes) && (C = t.nodes), I = t.reuseNodes || []; if (t.map && (this.map = t.map), t.lights && t.lights.length > 0 && (m = t.lights), t.trees.length > 0) for (var x = 0; t.trees.length > x; x += 1) { var S = t.trees[x]; "partition" === S.type && v.push(S.fileKey) } if (i && (o = i.bones.length, n = 1, r = 1, g = i.bones, u.push(i.clips), f.push(i.nodes)), this.maxLoadTaskCount = 0, this.maxLoadTaskCount += a, this.maxLoadTaskCount += s, this.maxLoadTaskCount += o, this.maxLoadTaskCount += n, this.maxLoadTaskCount += r, this.maxLoadTaskCount += c, this.maxLoadTaskCount += v.length, this.maxLoadTaskCount += h, this.maxLoadTaskCount += C.length, 1 > this.maxLoadTaskCount) return Bh.info("Nothing to load ", A.modelKey), void A.dispatchEventEx({ type: Tc.SCENE_NOTHING_TO_LOAD, modelKey: A.modelKey }); this.progress.total += this.maxLoadTaskCount, this.startCallback && this.startCallback(), Bh.time("数据加载时间"), this._loadComponent(d), this._loadMaterial(p), this._loadComponentNode(C), this._loadReuseNode(I), vc.EnableTextureLoading && l > 0 ? (this.maxLoadTextureCount += l, this._loadTextures(y)) : this._onLoadTexture(), this._loadKDTree(v), this._loadClips(u), this._loadBones(g), this._loadNodes(f), c && this._loadLights(m), this.offLine && this.loadAttribute(), e.axis && this._loadAxisNet(e.axis), this.loadFloorInfo(this.model.modelKey), this.loadSceneAndGeos(e) }, Xu.prototype.loadSceneAndGeos = function (A) {}, Xu.prototype.getSceneTaskCount = function (A) { return 0 }, Xu.prototype._loadLightmapConfig = function (A, e) { var t = this.model, i = this.descriptor; i && this.fileLoader.load(A, (function (A) { var o; try { o = JSON.parse(A) } catch (A) { return void console.log("Lightmap config data exceptions!") } void 0 !== o.count.lightmapNum && o.count.lightmapNum > 0 && (t.lightmapNum = o.count.lightmapNum, t.lightmap = !0, i.lightmap = !0, vc.Instance = !1, vc.EnableLightmap = !0), e && e() })) }, Xu.prototype._onTaskFinished = function () { var A = this.model; this.loadTaskCount += 1; var e = this.dealProgressSegment(A, this.loadTaskCount); this.notifyProgress && (this.progressCallback && this.progressCallback({ total: this.maxLoadTaskCount, loaded: e, modelKey: this.model.modelKey })); this.maxLoadTaskCount > this.loadTaskCount || (this.dataLoaded = !0, this.textruesLoaded && (Bh.timeEnd("数据加载时间"), this.finishCallback && this.finishCallback())) }, Xu.prototype._onLoadTexture = function () { this.loadTextureCount += 1, this.maxLoadTextureCount > this.loadTextureCount || (this.textruesLoaded = !0, this.dataLoaded && (Bh.timeEnd("数据加载时间"), this.finishCallback && this.finishCallback())) }, Xu.prototype._loadScene = function (A) { var e = this, t = this.model, i = this.url, o = this.fileLoader; o.setResponseType("arraybuffer"), o.load(i.sceneUrl(A), (function (t) { e._parseScene(t, A), e._onTaskFinished() }), void 0, (function (A) { t.dispatchEvent({ type: Tc.LOAD_ERROR, errorType: Tc.LOAD_SCENE_ERROR, event: A }), e._onTaskFinished() })) }, Xu.prototype._parseScene = function (A, e) { var t = new Loader.SceneReader(A); this.descriptor.mapSceneReader[e] = t, t = null }, Xu.prototype._loadLine = function () { var A = this, e = this.model, t = this.url, i = this.fileLoader; i.setResponseType("arraybuffer"), i.load(t.lineUrl(), (function (e) { A._parseLine(e), A._onTaskFinished() }), void 0, (function (t) { e.dispatchEvent({ type: Tc.LOAD_ERROR, errorType: Tc.LOAD_MATERIAL_ERROR, event: t }), A._onTaskFinished() })) }, Xu.prototype._parseLine = function (A) { for (var e = new Loader.LineReader(A), t = 0, i = e.header.lineCount; i > t; ++t) { var o = e.getPtBuffer(t), n = e.getIdxBuffer(t); if (void 0 !== o && void 0 !== n) { var r = e.getLineData(t); if (0 === r.lineType) { for (var a = [], s = 1, l = n.length; l > s; s++) a.push(n[s - 1]), a.push(n[s]); a.length && (n = a) } this.descriptor.cacheReferencedMeshBufferData("line-" + r.line_id, { P: o, I: n }) } else Bh.log("Error Geometry!") } e = null }, Xu.prototype._parseMaterialBinary = function (A) { var e, t = this.url, i = this.model.materialManager, o = i.materials, n = i.textures, r = new Loader.MaterialReader(A), a = r.materialCount, s = this, l = []; if (a >= 0) { var c = this.model.manager.scene; for (e = 0; a > e; ++e) { var h, d = {}, p = r.getMaterial(e); if (void 0 !== p.color && (d.color = p.color), void 0 !== p.opacity && (d.opacity = p.opacity, 1 > p.opacity && (d.transparent = !0)), void 0 !== p.side && p.side && (d.side = 2), void 0 !== p.emissive && (d.emissive = p.emissive), void 0 !== p.environment && (d.envMapIntensity = p.environment), void 0 !== p.roughness && (d.roughness = p.roughness, d.originRoughness = p.roughness), void 0 !== p.metalness && (d.metalness = p.metalness, d.originMetalness = p.metalness), vc.IBL ? (d.iblProbe = c.iblProbe, (h = new ImageBasedLighting.IBLMaterial(d)).type = "IBL") : h = Kd.createStandardMaterial(d), h.name = e, o[e] = h, d = null, vc.EnableTextureLoading) { var g = null; p.texture_n > 0 && (g = r.getTexture(p.texture_id[0])), g && l.push({ id: e, data: g }) } } if (l.length > 0) { for (a = this.maxLoadTextureCount = l.length, e = 0; a > e; e += 1) this._parseTexture(t, l[e], n); l = null } else s._onLoadTexture(); if (this.model.lightmap) { var u = this.model.lightmapNum; for (this.maxLoadTextureCount += u, e = 0; u > e; e += 1) { var f = this._loadTexture(t.textureUrl("lightmap-rgbm" + e + ".png"), (function () { s._onLoadTexture() }), void 0, (function () { s._onLoadTexture() })); i.lightmaps[e] = f } } r = null } }, Xu.prototype._parseMaterialJson = function (A) { var e, t = this.url, i = this.model.materialManager, o = i.materials, n = i.textures, r = new Loader.MaterialReaderJson(A), a = r.count, s = this, l = []; if (a >= 0) { var c = this.model.manager.scene; for (e = 0; a > e; ++e) { var h, d = {}, p = r.getMaterial(e), g = p.parameters; if (void 0 !== g.color && (d.color = g.color), void 0 !== g.opacity && (d.opacity = g.opacity, 1 > g.opacity && (d.transparent = !0)), void 0 !== g.side && "double" === g.side && (d.side = 2), void 0 !== g.emissive && (d.emissive = g.emissive), void 0 !== g.environment && (d.envMapIntensity = g.environment), void 0 !== g.roughness && (d.roughness = g.roughness, d.originRoughness = g.roughness), void 0 !== g.metalness && (d.metalness = g.metalness, d.originMetalness = g.metalness), void 0 !== g.refractionRatio && (d.refractionRatio = g.refractionRatio), void 0 !== g.imageFade && (d.imageFade = g.imageFade), this.model.lightmap && (d.lights = !1), vc.IBL ? (d.iblProbe = c.iblProbe, (h = new ImageBasedLighting.IBLMaterial(d)).type = "IBL") : (h = Kd.createStandardMaterial(d)).refreshUniforms(), h.name = e, o[e] = h, d = null, vc.EnableTextureLoading) { var u = [], f = p.textures; for (var m in f) { "reliefMap" == m && f.bumpMap || u.push({ type: m, data: f[m] }) } u.length > 0 && l.push({ id: e, dataArray: u }) } } if (l.length > 0) { for (a = l.length, e = 0; a > e; e += 1) { this.maxLoadTextureCount += (u = l[e].dataArray).length } for (e = 0; a > e; e += 1) { for (var C = l[e].id, y = [], v = 0, I = (u = l[e].dataArray).length; I > v; v++) this._parseTextureJson(t, u[v], y); n[C] = y } l = null } else s._onLoadTexture(); if (this.model.lightmap) { var E = this.model.lightmapNum; for (this.maxLoadTextureCount += E, e = 0; E > e; e += 1) { var B = this._loadTexture(t.lightmapTexUrl("lightmap-rgbm" + e + ".png"), (function () { s._onLoadTexture() }), void 0, (function () { s._onLoadTexture() })); i.lightmaps[e] = B } } r = null } }, Xu.prototype._loadTexture = function (A, e, t, i) { var o, n = Yr.Handlers.get(A), r = this; return null !== n ? o = n.load(A, e) : (o = new d, (n = new _r).setCrossOrigin("anonymous"), n.load(A, (function (A) { o.image = Kd.ensurePowerOfTwo(A), o.needsUpdate = !0, e && e(o) }), t, (function (A) { void 0 !== i && i(A), r.model.dispatchEvent({ type: Tc.LOAD_ERROR, errorType: Tc.LOAD_TEXTURE_ERROR, event: A }) }))), o }, Xu.prototype._loadCompressedTexture = function (A, e, t, i) {}, Xu.prototype._loadTextureByCrypto = function (A, e, t, i) { var o, n = Yr.Handlers.get(A), r = this; return null !== n ? o = n.load(A, e) : (o = new d, (n = new TEST.CryptoResourceLoader).loadURL(A, (function (A) { var t = new Blob([A], { type: "jpeg" }), n = new Image; n.onload = function () { o.image = Kd.ensurePowerOfTwo(n), o.needsUpdate = !0, e && e(o) }, n.onerror = function (A) { i && i(A), r.model.dispatchEvent({ type: Tc.LOAD_ERROR, errorType: Tc.LOAD_TEXTURE_ERROR, event: A }) }, n.src = URL.createObjectURL(t) }), (function (A) { void 0 !== i && i(A), r.model.dispatchEvent({ type: Tc.LOAD_ERROR, errorType: Tc.LOAD_TEXTURE_ERROR, event: A }) }))), o }, Xu.prototype._parseTexture = function (A, e, t) { var i = window.TEST || {}, o = e.id, n = e.data, r = n.id + n.file_name_ext; this.textureLoader = this.enableCompressedTexture && n.dds ? this._loadCompressedTexture : i.CryptoResourceLoader ? this._loadTextureByCrypto : this._loadTexture; var a = this; this.textureLoader(A.textureUrl(r), (function (A) { A.repeat.fromArray([n.scale_u, n.scale_v]), A.offset.fromArray([n.offset_u, n.offset_v]), A.setRotateAngle && A.setRotateAngle(n.angle), n.repeat_u && (A.wrapS = 1e3), n.repeat_v && (A.wrapT = 1e3), A && (t[o] = A), a._onLoadTexture() }), void 0, (function () { a._onLoadTexture() })) }, Xu.prototype._parseTextureJson = function (A, e, t) { var i = window.TEST || {}, o = e.type, n = e.data, r = A.textureUrl(n.sourceFile), a = this.enableSmallTexture && n.texture_small; if (!a && this.enableCompressedTexture && n.dds) this.textureLoader = this._loadCompressedTexture; else if (this.textureLoader = i.CryptoResourceLoader ? this._loadTextureByCrypto : this._loadTexture, a) { var s = r.lastIndexOf("."); r = r.substring(0, s) + "_s" + r.substring(s) } var l = this; this.textureLoader(r, (function (A) { A.repeat.fromArray([n.scale[0], n.scale[1]]), A.offset.fromArray([n.offset[0], n.offset[1]]), A.setRotateAngle && A.setRotateAngle(n.angle), n.repeatU && (A.wrapS = 1e3), n.repeatV && (A.wrapT = 1e3), A.texturetype = o, "reliefMap" == o && (A.texturetype = "bumpMap"), n.dataType && "NormalMap" == n.dataType && (A.texturetype = "normalMap"), n.alpha && (A.texturetype = "alphaMap"), n.depth && (A.depth = n.depth), A && t.push(A), l._onLoadTexture() }), void 0, (function () { l._onLoadTexture() })) }, Xu.prototype._loadUV2 = function () { var A = this, e = this.url, t = this.fileLoader; t.setResponseType("arraybuffer"), t.load(e.uv2Url(), (function (e) { A.uv2Buffer = new Uint16Array(e), A._onTaskFinished() }), void 0, (function (e) { A._onTaskFinished() })), t.setResponseType(""), t.load(e.uv2MapItemUrl(), (function (e) { A.uv2MapItem = JSON.parse(e), A._onTaskFinished() }), void 0, (function (e) { A._onTaskFinished() })) }, Xu.prototype.getUV2ById = function (A, e) { if (this.uv2MapItem && e) { var t = this.uv2MapItem[A]; if (t) { var i = t.uv1Scale, o = t.uv1Translation, n = t.uv1ByteOffset / 2, r = 2 * e; if (this.uv2Buffer) { for (var a = this.uv2Buffer.slice(n, n + r), s = [], l = 0; r > l; l += 2) s.push(i[0] * (a[l] / 65535) + o[0]), s.push(i[1] * (a[l + 1] / 65535) + o[1]); return { lightmapIdx: t.lightmapIdx, uv2: s } } } } }, Xu.prototype._loadSymbol = function () { var A = this, e = this.url, t = this.fileLoader; t.setResponseType("arraybuffer"), t.load(e.symbolUrl(), (function (e) { A.parseSymbol(e), A._onTaskFinished() }), void 0, (function (e) { A.model.dispatchEvent({ type: Tc.LOAD_ERROR, errorType: Tc.LOAD_SYMBOL_ERROR, event: e }), A._onTaskFinished() })) }, Xu.prototype.parseSymbol = function (A) { this.descriptor.symbolReader = new Loader.SymbolReader(A) }, Xu.prototype._loadOctree = function (A, e) { var t = null, i = this.model.configLoader.transformInfos.transformMatrix; this.model.configLoader.transformInfos.octreeTransformed && (t = new M).getInverse(i), A && this._loadOctreeBy(t, !1), e && this._loadOctreeBy(t, !0) }, Xu.prototype._loadOctreeBy = function (A, e) { var t, i = this, o = this.url, n = this.fileLoader; t = o.octreeUrl(e ? "i" : "o"), n.setResponseType("arraybuffer"), n.load(t, (function (t) { i._parseOctree(t, A, e), i._onTaskFinished() }), void 0, (function (A) { i.model.dispatchEvent({ type: Tc.LOAD_ERROR, errorType: Tc.LOAD_OCTREEINNER_ERROR, event: A }), i._onTaskFinished() })) }, Xu.prototype._parseOctree = function (A, e, t) { this.descriptor.octreeRootNode[t ? "inner" : "outer"] = this._getOctreeRootNode(A, e) }, Xu.prototype._getOctreeRootNode = function (A, e) { function t(A, t) { e && t.boundingBox.applyMatrix4(e), A.boundingBoxWorld = t.boundingBox.clone(), A.min = t.boundingBox.min, A.max = t.boundingBox.max, A.center = t.boundingBox.getCenter(), A.size = t.boundingBox.getSize().lengthSq(), A.childStart = t.child_s, A.childEnd = t.child_e } function i(A, e) { A.octType = 0, e.center.x > A.center.x && (A.octType += 1), e.center.y > A.center.y && (A.octType += 2), e.center.z > A.center.z && (A.octType += 4) } var o = null, n = new Loader.OctreeReader(A); if (n.getCount() > 0) { var r = n.getNode(0); t(o = new Loader.OctreeNode(r.cell_id, 0), r), function A(e, o) { for (var n = e.childEnd, r = e.childStart; n > r; ++r) { var a = o.getNode(r), s = new Loader.OctreeNode(a.cell_id, e.depth); t(s, a), e.add(s), i(s, e), s.updateMaxDepth(), A(s, o) } }(o, n) } return n = null, o }, Xu.prototype._loadUserId = function () { var A = this, e = this.url, t = this.fileLoader; t.setResponseType("arraybuffer"), t.load(e.userIdUrl(), (function (e) { A._parseUserId(e), A._onTaskFinished() }), void 0, (function (e) { A.model.dispatchEvent({ type: Tc.LOAD_ERROR, errorType: Tc.LOAD_USERID_ERROR, event: e }), A._onTaskFinished() })) }, Xu.prototype._parseUserId = function (A) { this.descriptor.userIdReader = new Loader.IdReader(A) }, Xu.prototype._loadUserData = function () { var A = this, e = this.url, t = this.fileLoader; t.setResponseType(""), t.load(e.userDataUrl(), (function (e) { A._parseUserData(e), A._onTaskFinished() }), void 0, (function (e) { A.model.dispatchEvent({ type: Tc.LOAD_ERROR, errorType: Tc.LOAD_USERDATA_ERROR, event: e }), A._onTaskFinished() })) }, Xu.prototype._parseUserData = function (A) { this.descriptor.userDataReader = new Loader.UserDataReader(A) }, Xu.prototype._loadCamera = function () { var A = this, e = this.url, t = this.fileLoader; t.setResponseType(""), t.load(e.cameraUrl(), (function (e) { A._parseCamera(e), A._onTaskFinished() }), void 0, (function (e) { A.model.dispatchEvent({ type: Tc.LOAD_ERROR, errorType: Tc.LOAD_CAMERA_ERROR, event: e }), A._onTaskFinished() })) }, Xu.prototype._parseCamera = function (A) { var e = this.model.configLoader.transformInfos.transformMatrix; new Loader.CameraReader(A).parse(this.model, e) }, Xu.prototype._parseGeo = function (A, e) { for (var t = new Loader.MPKReader(A), i = new M, o = 0, n = t.header.meshCount; n > o; ++o) { var r = t.getPtBuffer(o), a = t.getIdxBuffer(o), s = t.getNormalBuffer(o), l = t.getMeshData(o), c = t.getUVBuffer(o); null != r && null != a ? (0 !== l.baseScale && (r = new Float32Array(r), i.identity(), i.setPosition(new y(l.baseX, l.baseY, l.baseZ)), i.scale(new y(l.baseScale, l.baseScale, l.baseScale)), GeomUtil.applyMatrix4ToBuffer(i, r)), this.descriptor.cacheReferencedMeshBufferData(l.mesh_id, { P: r, I: a, N: s, UV: c }), this.descriptor.cacheReferencedMeshGeoIds(e, l.mesh_id)) : Logger.log("Error Geometry!") } t = null }, Xu.prototype._loadBorderline = function (A) { var e = this, t = this.url, i = this.fileLoader, o = t.borderLineUrl(A ? 1 : 0); i.setResponseType("arraybuffer"), i.load(o, (function (t) { e._parseBorderLine(t, A), e._onTaskFinished() }), void 0, (function (A) { e.model.dispatchEvent({ type: Tc.LOAD_ERROR, errorType: Tc.LOAD_MATERIAL_ERROR, event: A }), e._onTaskFinished() })) }, Xu.prototype._parseBorderLine = function (A, e) { for (var t = new Loader.LineReader(A), i = [], o = 0, n = t.header.lineCount; n > o; ++o) { var r = t.getLineData(o); i.push({ meshId: r.line_id, positionStart: r.ptOffset / 4, positionCount: 3 * r.ptCount, indexStart: r.idxOffset / 4, indexCount: r.idxCount }) } this.descriptor.cacheBorderLine(e, { P: t.ptBuffer, I: t.idxBuffer, IndexInfos: i }), t = null }, Xu.prototype._isLoadGeoBorderlines = function () { var A = this.model.getConfig().metadata; return !(!vc.BorderLineBatched || !A.outline_mpk) }, Xu.prototype.getAllBorderlineCount = function () { var A = this.model.getConfig().metadata; return this._isLoadGeoBorderlines() ? A.outline_mpk : A.outline_0 + A.outline_1 }, Xu.prototype._loadAllBorderlines = function (A) { this._isLoadGeoBorderlines() ? A.outline_mpk && this._loadAllGeoBorderLines(A.outline_mpk) : (A.outline_0 && this._loadBorderline(!1), A.outline_1 && this._loadBorderline(!0)) }, Xu.prototype.delayLoadBorderlines = function (A) { this.model.getConfig(); this._isLoadGeoBorderlines() ? this._delayLoadGeoBorderlines(A) : this._delayLoadTogetherBorderlines(A) }, Xu.prototype._delayLoadGeoBorderlines = function (A) { var e = this.model.getConfig().metadata; this.startCallback = null, this.progressCallback = null, this.finishCallback = A, this.loadTaskCount = 0, this.maxLoadTaskCount = e.outline_mpk, e.outline_mpk && this._loadAllGeoBorderLines(e.outline_mpk) }, Xu.prototype._delayLoadTogetherBorderlines = function (A) { var e = this.model.getConfig().metadata; this.startCallback = null, this.progressCallback = null, this.finishCallback = A, this.loadTaskCount = 0, this.maxLoadTaskCount = e.outline_0 + e.outline_1, e.outline_0 && this._loadBorderline(!1), e.outline_1 && this._loadBorderline(!0) }, Xu.prototype._loadAllGeoBorderLines = function (A) { this.mpkBorderLineTaskManager || (this.mpkBorderLineTaskManager = new Ou); for (var e = 0; A > e; ++e) this.mpkBorderLineTaskManager.addTask(e); this.mpkBorderLineTaskManager.processTasks(this._loadGeoBorderLine.bind(this)) }, Xu.prototype._loadGeoBorderLine = function (A, e) { var t = this, i = this.fileLoader, o = this.url, n = A >= this.model.getConfig().metadata.mpk_shared_index; i.setResponseType("arraybuffer"), i.load(o.mpkBorderLineUrl(A), (function (A) { t._parseGeoBorderLine(A, n), e(), t._onTaskFinished() }), void 0, (function (A) { t._onTaskFinished() })) }, Xu.prototype._parseGeoBorderLine = function (A, e) { for (var t = new Loader.LineReader(A), i = [], o = 0, n = t.header.lineCount; n > o; ++o) { var r = t.getLineData(o); i.push({ meshId: r.line_id, positionStart: r.ptOffset / 4, positionCount: 3 * r.ptCount, indexStart: r.idxOffset / 4, indexCount: r.idxCount }) } this.descriptor.cacheBorderLine(e, { P: t.ptBuffer, I: t.idxBuffer, IndexInfos: i }), t = null }, Xu.prototype.dealProgressSegment = function (A, e) { return vc.MergeComponent ? e * A.progressPercentage.load : e }, Xu.prototype._loadWireframe = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.mpkUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = function (t) { if (A[i[t]]) if (!0 === A[i[t]].split) { var o = A[i[t]].list, s = new Uint8Array(A[i[t]].length); n.getBatch(o, (function (A) { for (var n = !0, r = 0; o.length > r; r += 1) A[o[r]] ? s.set(new Uint8Array(A[o[r]]), 4e7 * r) : (n = !1, Bh.error("获取分割几何失败")); if (n) { var a = i[t].indexOf("fileKey="); e._parseWireframe(s.buffer, i[t].slice(a + 8)), Bh.debug("load geo from local"), e._onTaskFinished() } else { var l = e.taskGeometrieManager; if (-1 === (a = i[t].indexOf("fileKey="))) return void Bh.error("url is not has fileKey"); l.addTask(i[t].slice(a + 8)), Bh.debug("load geo from net"), e.taskGeometrieManager.processTasks(e.loadWireframe.bind(e)) } }), (function () { Bh.error("获取分割几何失败") })) } else a = i[t].indexOf("fileKey="), e._parseWireframe(A[i[t]], i[t].slice(a + 8)), Bh.debug("load geo from local"), e._onTaskFinished(); else { if (r = e.taskGeometrieManager, -1 === (a = i[t].indexOf("fileKey="))) return Bh.error("url is not has fileKey"), { v: void 0 }; r.addTask(i[t].slice(a + 8)), Bh.debug("load geo from net") } }, o = 0; i.length > o; o += 1) { var r, a, s = t(o); if ("object" === lc(s)) return s.v } e.taskGeometrieManager.processTasks(e.loadWireframe.bind(e)) }), (function () { for (var t = e.taskGeometrieManager, i = 0; A.length > i; i += 1) t.addTask(A[i]); t.processTasks(e.loadWireframe.bind(e)) })) } else { for (var r = this.taskGeometrieManager, a = 0; A.length > a; a += 1) r.addTask(A[a]); r.processTasks(e.loadWireframe.bind(e)) } }, Xu.prototype._loadGeo = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.mpkUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = function (t) { if (A[i[t]]) if (!0 === A[i[t]].split) { var o = A[i[t]].list, s = new Uint8Array(A[i[t]].length); n.getBatch(o, (function (A) { for (var n = 0; o.length > n; n += 1) A[o[n]] ? s.set(new Uint8Array(A[o[n]]), 4e7 * n) : Bh.error("获取分割几何失败"); var r = i[t].indexOf("fileKey="); e._parseGeometrie(s.buffer, i[t].slice(r + 8)), Bh.debug("load geo from local"), e._onTaskFinished() }), (function () { Bh.error("获取分割几何失败") })) } else a = i[t].indexOf("fileKey="), e._parseGeometrie(A[i[t]], i[t].slice(a + 8)), Bh.debug("load geo from local"), e._onTaskFinished(); else { if (r = e.taskGeometrieManager, -1 === (a = i[t].indexOf("fileKey="))) return Bh.error("url is not has fileKey"), { v: void 0 }; r.addTask(i[t].slice(a + 8)), Bh.debug("load geo from net") } }, o = 0; i.length > o; o += 1) { var r, a, s = t(o); if ("object" === lc(s)) return s.v } e.taskGeometrieManager.processTasks(e.loadGeometrie.bind(e)) }), (function () { for (var t = e.taskGeometrieManager, i = 0; A.length > i; i += 1) t.addTask(A[i]); t.processTasks(e.loadGeometrie.bind(e)) })) } else { for (var r = this.taskGeometrieManager, a = 0; A.length > a; a += 1) r.addTask(A[a]); r.processTasks(e.loadGeometrie.bind(e)) } }, Xu.prototype._loadComponentNode = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.mpkUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = function (t) { if (A[i[t]]) if (!0 === A[i[t]].split) { var o = A[i[t]].list, s = new Uint8Array(A[i[t]].length); n.getBatch(o, (function (A) { for (var n = 0; o.length > n; n += 1) A[o[n]] ? s.set(new Uint8Array(A[o[n]]), 4e7 * n) : Bh.error("获取分割node失败"); var r = i[t].indexOf("fileKey="); e._parseComponentNode(s.buffer, i[t].slice(r + 8)), Bh.debug("load geo from local"), e._onTaskFinished() }), (function () { Bh.error("获取分割node失败") })) } else a = i[t].indexOf("fileKey="), e._parseComponentNode(A[i[t]], i[t].slice(a + 8)), Bh.debug("load geo from local"), e._onTaskFinished(); else { if (r = e.taskComponentNodeManager, -1 === (a = i[t].indexOf("fileKey="))) return Bh.error("url is not has fileKey"), { v: void 0 }; r.addTask(i[t].slice(a + 8)), Bh.debug("load component.node from net") } }, o = 0; i.length > o; o += 1) { var r, a, s = t(o); if ("object" === lc(s)) return s.v } e.taskComponentNodeManager.processTasks(e.loadComponentNode.bind(e)) }), (function () { for (var t = e.taskComponentNodeManager, i = 0; A.length > i; i += 1) t.addTask(A[i]); t.processTasks(e.loadComponentNode.bind(e)) })) } else { for (var r = this.taskComponentNodeManager, a = 0; A.length > a; a += 1) r.addTask(A[a]); r.processTasks(e.loadComponentNode.bind(e)) } }, Xu.prototype._loadKDTree = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.kdTreeUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = 0; i.length > t; t += 1) { var o = i[t].indexOf("fileKey="); if (-1 === o) return void Bh.error("url is not has fileKey"); var n = i[t].slice(o + 8); A[i[t]] ? (e._parseKDTree(A[i[t]], n), Bh.debug("load kdTree from local"), e._onTaskFinished()) : (e.loadKDTree(n, (function () {})), Bh.debug("load kdtree from net")) } }), (function () { for (var t = 0; A.length > t; t += 1) e.loadKDTree(A[t], (function () {})) })) } else for (var r = 0; A.length > r; r += 1) e.loadKDTree(A[r], (function () {})) }, Xu.prototype._loadLights = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.lightUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = 0; i.length > t; t += 1) { var o = i[t].indexOf("fileKey="); if (-1 === o) return void Bh.error("url is not has fileKey"); var n = i[t].slice(o + 8); A[i[t]] ? (e._parseLight(A[i[t]], n), Bh.debug("load light from local"), e._onTaskFinished()) : (e.loadLight(n, (function () {})), Bh.debug("load kdtree from net")) } }), (function () { for (var t = 0; A.length > t; t += 1) e.loadLight(A[t], (function () {})) })) } else for (var r = 0; A.length > r; r += 1) e.loadLight(A[r], (function () {})) }, Xu.prototype._loadBones = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.bonesUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = 0; i.length > t; t += 1) if (A[i[t]]) e._parseBones(A[i[t]]), Bh.debug("load Bones from local"), e._onTaskFinished(); else { var o = i[t].indexOf("fileKey="); if (-1 === o) return void Bh.error("url is not has fileKey"); e.loadBones(i[t].slice(o + 8), (function () {})), Bh.debug("load Bones from net") } }), (function () { for (var t = 0; A.length > t; t += 1) e.loadBones(A[t], (function () {})) })) } else { for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) r.addTask(A[a]); r.processTasks(e.loadBones.bind(e)) } }, Xu.prototype._loadClips = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.clipsUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = 0; i.length > t; t += 1) if (A[i[t]]) e._parseClips(A[i[t]]), Bh.debug("load Clips from local"), e._onTaskFinished(); else { var o = i[t].indexOf("fileKey="); if (-1 === o) return void Bh.error("url is not has fileKey"); e.loadClips(i[t].slice(o + 8), (function () {})), Bh.debug("load Clips from net") } }), (function () { for (var t = 0; A.length > t; t += 1) e.loadClips(A[t], (function () {})) })) } else { for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) r.addTask(A[a]); r.processTasks(e.loadClips.bind(e)) } }, Xu.prototype._loadNodes = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.nodesUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = 0; i.length > t; t += 1) if (A[i[t]]) e._parseNodes(A[i[t]]), Bh.debug("load Nodes from local"), e._onTaskFinished(); else { var o = i[t].indexOf("fileKey="); if (-1 === o) return void Bh.error("url is not has fileKey"); e.loadNodes(i[t].slice(o + 8), (function () {})), Bh.debug("load Nodes from net") } }), (function () { for (var t = 0; A.length > t; t += 1) e.loadNodes(A[t], (function () {})) })) } else { for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) r.addTask(A[a]); r.processTasks(e.loadNodes.bind(e)) } }, Xu.prototype._loadComponent = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.mpkUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = 0; i.length > t; t += 1) { if (-1 === (r = i[t].indexOf("fileKey=")) && !e.offLine) return void Bh.error("url is not has fileKey"); var o = i[t].slice(r + 8); if (A[i[t]]) e._parseComponent(A[i[t]], o), Bh.debug("load com from local"), e._onTaskFinished(); else { var n = e.taskComponentManager; if (e.offLine) { var r; if (-1 === (r = i[t].indexOf("data/"))) return void Bh.error("url is not has data/"); n.addTask(i[t].slice(r + 5)) } else n.addTask(o); n.processTasks(e.loadComponent.bind(e)), Bh.debug("load com from net") } } }), (function () { for (var t = e.taskComponentManager, i = 0; A.length > i; i += 1) t.addTask(A[i]); t.processTasks(e.loadComponent.bind(e)) })) } else { for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) r.addTask(A[a]); r.processTasks(e.loadComponent.bind(e)) } }, Xu.prototype._loadReuseNode = function (A) { var e = this; if (vc.getDataFromIndexedDB) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.mpkUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = 0; i.length > t; t += 1) if (A[i[t]]) e._parseReuseNodes(A[i[t]]), Bh.debug("load com from local"), e._onTaskFinished(); else { var o = e.taskReuseNodeManager; if (e.offLine) { if (-1 === (n = i[t].indexOf("data/"))) return void Bh.error("url is not has data/"); o.addTask(i[t].slice(n + 5)) } else { var n; if (-1 === (n = i[t].indexOf("fileKey="))) return void Bh.error("url is not has fileKey"); o.addTask(i[t].slice(n + 8)) } o.processTasks(e.loadReuseNode.bind(e)), Bh.debug("load com from net") } }), (function () { for (var t = e.taskReuseNodeManager, i = 0; A.length > i; i += 1) t.addTask(A[i]); t.processTasks(e.loadReuseNode.bind(e)) })) } else { for (var r = this.taskReuseNodeManager, a = 0; A.length > a; a += 1) r.addTask(A[a]); r.processTasks(e.loadReuseNode.bind(e)) } }, Xu.prototype._loadMaterial = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.mpkUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = 0; i.length > t; t += 1) if (A[i[t]]) e._parseMaterial(A[i[t]]), Bh.debug("load mat from local"), e._onTaskFinished(); else { var o = e.taskMaterialManager, n = i[t].indexOf("fileKey="); if (-1 === n) return void Bh.error("url is not has fileKey"); o.addTask(i[t].slice(n + 8)), o.processTasks(e.loadMaterial.bind(e)), Bh.debug("load mat from net") } }), (function () { for (var t = e.taskMaterialManager, i = 0; A.length > i; i += 1) t.addTask(A[i]); t.processTasks(e.loadMaterial.bind(e)) })) } else { for (var r = this.taskMaterialManager, a = 0; A.length > a; a += 1) r.addTask(A[a]); r.processTasks(e.loadMaterial.bind(e)) } }, Xu.prototype._loadTextures = function (A) { var e = this.model.materialManager.textures, t = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var i = this.url, o = [], n = 0; A.length > n; n += 1) o.push(i.mpkUrl(A[n])); var r = this.model.getStorage(); r && r.getBatch(o, (function (A) { for (var i = 0; o.length > i; i += 1) if (A[o[i]]) { var n, r = function () { if (-1 === (n = o[i].indexOf("fileKey="))) return Bh.error("url is not has fileKey"), { v: void 0 }; var r = A[o[i]]; A[o[i]] instanceof Blob || (r = new Blob([A[o[i]]], { type: "text/plain" })); var a = o[i].slice(n + 8), s = new d; Bh.debug("load tex from local"), e[a] = s; var l = document.createElement("img"); s.wrapS = s.wrapT = 1e3, l.onload = function (e) { "string" != typeof A[o[i]] && window.URL.revokeObjectURL(l.src), t.model.textureNeedsUpdate = !0, s.image = Kd.ensurePowerOfTwo(l), t._onLoadTexture() }, l.onerror = function (A) { t.model.dispatchEventEx({ type: Tc.LOAD_TEXTURE_ERROR }) }, l.src = "string" == typeof A[o[i]] ? A[o[i]] : window.URL.createObjectURL(r), s.image = l, s.needsUpdate = !0 }(); if ("object" === lc(r)) return r.v } else { var a = t.taskTexturesManager, s = o[i].indexOf("fileKey="); if (-1 === s) return void Bh.error("url is not has fileKey"); a.addTask(o[i].slice(s + 8)), a.processTasks(t.loadTextures.bind(t)), Bh.debug("load tex from net") } }), (function () { for (var e = t.taskTexturesManager, i = 0; A.length > i; i += 1) e.addTask(A[i]); e.processTasks(t.loadTextures.bind(t)) })) } else { for (var a = this.taskTexturesManager, s = 0; A.length > s; s += 1) a.addTask(A[s]); a.processTasks(t.loadTextures.bind(t)) } }, Xu.prototype._loadAxisNet = function (A) { if (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { var t = this.url.axisNetUrl(A), i = this.model.getStorage(); i && i.getBatch([t], (function (i) { if (i[t]) e._parseAxisNet(i[t]), Bh.debug("load axisnet from local"); else { if (-1 === t.indexOf("fileKey=")) return void Bh.error("url is not has fileKey"); e.loadAxisNet(A), Bh.debug("load axisnet from net") } }), (function () { e.loadAxisNet(A) })) } else e.loadAxisNet(A) } }, Xu.prototype._parseWireframe = function (A, e) { var t = new Lu.GeometryReader(A, this.dataVersion), i = this.descriptor; if (i) { for (var o = t.geoCount, n = 0; o > n; n += 1) { var r = t.geomMap[n]; void 0 !== r.position && void 0 !== r.index ? i.cacheReferencedMeshWireframeData(r.geoId, r) : Bh.error("Error Geometry!") } t = null } }, Xu.prototype._parseGeometrie = function (A, e) { var t = this.fileKeyFromModelKey[e] || "", i = new ku.GeometryReader(A, this.dataVersion), o = this.descriptor; if (o) { for (var n = i.geoCount, r = 0; n > r; r += 1) { var a = i.geomMap[r]; void 0 !== a.position && void 0 !== a.index && void 0 !== a.normal ? (vc.DEBUG && window.geoidToFileKeyMap && (window.geoidToFileKeyMap[a.geoId] = e), o.cacheReferencedMeshBufferData(t + a.geoId, a)) : Bh.error("Error Geometry!") } i = null } }, Xu.prototype._parseComponentNode = function (A, e) { var t = this.fileKeyFromModelKey[e] || "", i = new ku.NodesReader(A, this.dataVersion), o = this.descriptor; if (o) { for (var n = i.nodeCount, r = 0; n > r; r += 1) { var a = i.geomMap[r]; void 0 !== a.matrix && void 0 !== a.material && void 0 !== a.nodeId ? o.cacheReferencedMeshComponentNodeData(t + a.nodeId, a) : Bh.error("Error Node!") } i = null } }, Xu.prototype._parseMaterial = function (A, e) { var t = this.descriptor; if (t) { var i = new Du(A, this.dataVersion); if (Array.isArray(i.materialMap)) { var o = i.materialCount; if (0 > o) return; for (var n = 0; o > n; n += 1) { var r = i.materialMap[n]; t.cacheReferencedMeshMaterialData(r.matId, r) } } else for (var a in i.materialMap) t.cacheReferencedMeshMaterialData(a, i.materialMap[a]); i = null } }, Xu.prototype._parseComponent = function (A, e) { if (A) { var t = new Uu(A), i = t.compArr.length, o = this.descriptor; if (o) { for (var n = 0; i > n; n += 1) { var r = t.compArr[n]; o.cacheReferencedMeshComponentData(r.key, r) } t = null } } else Bh.error("没有数据") }, Xu.prototype._parseKDTree = function (A, e) { var t = {}; t = "string" == typeof A ? JSON.parse(A) : A, !this.model.kdTreeNode && t && (this.model.kdTreeNode = new Zu, this.model.kdTreeNode.init(t)) }, Xu.prototype._parseLight = function (A, e) { var t, i = []; if (t = "string" == typeof A ? JSON.parse(A) : A) for (var o = 0, n = t.length; n > o; o += 1) { var r = t[o], a = void 0, s = r.pos || [0, 0, 0], l = void 0; switch (r.type) { case Fc.DirectionalLight: (a = new Ra((new LA).fromArray(r.diffuse), .5)).position.set(s[0] - r.lookat[0], s[1] - r.lookat[1], s[2] - r.lookat[2]), a.name = r.parent, 0 === r.ambient[0] && 0 === r.ambient[1] && 0 === r.ambient[2] || (l = new Ta((new LA).fromArray(r.ambient), .5)); break; case Fc.PointLight: (a = new Fa((new LA).fromArray(r.diffuse))).position.set(s[0], s[1], s[2]), a.name = r.parent, 0 === r.ambient[0] && 0 === r.ambient[1] && 0 === r.ambient[2] || (l = new Ta((new LA).fromArray(r.ambient), .5)); break; case Fc.SpotLight: (a = new ba((new LA).fromArray(r.diffuse), .5)).position.set(s[0] - r.lookat[0], s[1] - r.lookat[1], s[2] - r.lookat[2]), a.angle = r.cone_inn || Math.PI / 2, a.name = r.parent, 0 === r.ambient[0] && 0 === r.ambient[1] && 0 === r.ambient[2] || (l = new Ta((new LA).fromArray(r.ambient), .5)) } a && i.push(a), l && i.push(l) } this.model.addLights(i) }, Xu.prototype._parseNodes = function (A, e) { var t = this.descriptor; if (t) { var i = {}; i = "string" == typeof A ? JSON.parse(A) : A, Bh.debug("nodes", i), t.cacheReferencedMeshNodesData(i) } }, Xu.prototype._parseClips = function (A, e) { var t = this.descriptor; if (t) { var i = {}; i = "string" == typeof A ? JSON.parse(A) : A, Bh.debug("clips", i), t.cacheReferencedMeshClipsData(i) } }, Xu.prototype._parseBones = function (A, e) { var t = new ku.BoneReader(A), i = this.descriptor; if (i) { for (var o = t.boneCount, n = 0; o > n; n += 1) { var r = t.boneMap[n]; Bh.debug("bones", r), i.cacheReferencedMeshBoneBufferData(r.geoId, r) } t = null } }, Xu.prototype._parseAxisNet = function (A) { var e = this.model.getBoundingBoxWorld(), t = 0; e && (t = e.min.z); var i = this.model._getNodeGroup(gp.AXISNET); i.visible = !1; var o = new ju(i); o.fromJSON(A, t); var n = new Hu; n.axisNet = o, this.model.axisNetManager = n }, Xu.prototype.loadWireframe = function (A, e) { var t = this, i = this.loader, o = this.url, n = this.model, r = vc.GeoWorkerUrl; if (vc.UseGeoWorker) i.setResponseType("arraybuffer"), i.load(o.mpkUrl(A), (function (A) { var i = new Worker(r); i.onmessage = function (A) { var i = A.data; for (var o in i) i.hasOwnProperty(o); e(), t._onTaskFinished() }, i.postMessage({ msg: A }) })); else { i.setResponseType("arraybuffer"), i.setCacheViable(!this.offLine); var a = i.load(o.mpkUrl(A), (function (i) { t._parseWireframe(i, A), Bh.debug("geo load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { n.dispatchEventEx({ type: Tc.LOAD_GEOMETRY_ERROR, modelKey: n.modelKey }) })); t.requests.loadGeometrie = a } }, Xu.prototype.loadGeometrie = function (A, e) { var t = this, i = this.loader, o = this.url, n = this.model; i.setResponseType("arraybuffer"), i.setCacheViable(!this.offLine); var r = i.load(o.mpkUrl(A), (function (i) { t._parseGeometrie(i, A), Bh.debug("geo load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { n.dispatchEventEx({ type: Tc.LOAD_GEOMETRY_ERROR, modelKey: n.modelKey }), e(), t._onTaskFinished() })); t.requests.loadGeometrie = r }, Xu.prototype.loadComponentNode = function (A, e) { var t = this, i = this.loader, o = this.url, n = this.model; i.setResponseType("arraybuffer"), i.setCacheViable(!this.offLine); var r = i.load(o.mpkUrl(A), (function (i) { t._parseComponentNode(i, A), Bh.debug("geo load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { n.dispatchEventEx({ type: Tc.LOAD_COMPONENTNODE_ERROR, modelKey: n.modelKey }), e(), t._onTaskFinished() })); t.requests.loadComponentNode = r }, Xu.prototype.loadMaterial = function (A, e) { var t = this, i = this.loader, o = this.url, n = this.model, r = vc.GeoWorkerUrl; if (vc.UseGeoWorker) i.setResponseType("arraybuffer"), i.load(o.mpkUrl(A), (function (A) { var i = new Worker(r); i.onmessage = function (A) { var i = A.data; for (var o in i) i.hasOwnProperty(o); e(), t._onTaskFinished() }, i.postMessage({ msg: A }) })); else { rp(t.dataVersion, "1") ? i.setResponseType("json") : i.setResponseType("arraybuffer"), i.setCacheViable(!this.offLine); var a = i.load(o.mpkUrl(A), (function (A) { t._parseMaterial(A), Bh.debug("met load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { n.dispatchEventEx({ type: Tc.LOAD_MATERIAL_ERROR, modelKey: n.modelKey }) })); t.requests.loadMaterial = a } }, Xu.prototype.loadTextures = function (A, e) { var t = this.model.materialManager.textures, i = this, o = this.Textureloader, n = this.url, r = this.model, a = vc.GeoWorkerUrl; if (vc.UseGeoWorker) o.load(n.mpkUrl(A), (function (A) { var t = new Worker(a); t.onmessage = function (A) { var t = A.data; for (var o in t) t.hasOwnProperty(o); e(), i._onTaskFinished() }, t.postMessage({ msg: A }) })); else { o.setResponseType("arraybuffer"), o.setCacheViable(!this.offLine); var s = o.load(n.textureUrl(A), (function (o) { var n = o; o instanceof Blob || (n = new Blob([o], { type: "text/plain" })), Bh.debug("tex load from online"); var a = new d; t[A] = a, a.wrapS = a.wrapT = 1e3; var s = document.createElement("img"); s.onload = function (A) { "string" != typeof n && window.URL.revokeObjectURL(s.src), a.image = Kd.ensurePowerOfTwo(s), i._onLoadTexture(), e(), i.model.textureNeedsUpdate = !0 }, s.onerror = function (A) { r.dispatchEventEx({ type: Tc.LOAD_TEXTURE_ERROR, modelKey: r.modelKey }) }, s.src = "string" == typeof n ? n : window.URL.createObjectURL(n), a.image = s, a.needsUpdate = !0 }), void 0, (function (A) { r.dispatchEventEx({ type: Tc.LOAD_TEXTURE_ERROR, modelKey: r.modelKey }) })); i.requests.loadTextures = s } }, Xu.prototype.loadComponent = function (A, e) { var t = this, i = this.jsonLoader, o = this.model, n = this.url, r = vc.GeoWorkerUrl; if (vc.UseGeoWorker) i.setResponseType("json"), i.load(n.mpkUrl(A), (function (A) { var i = new Worker(r); i.onmessage = function (A) { var i = A.data; for (var o in i) i.hasOwnProperty(o); e(), t._onTaskFinished() }, i.postMessage({ msg: A }) }), (function (A) {})); else { i.setResponseType("json"), vc.useGzip && i.setResponseType("arraybuffer"), i.setCacheViable(!0); var a = i.load(n.mpkUrl(A), (function (i) { t._parseComponent(i, A), Bh.debug("component load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { o.dispatchEventEx({ type: Tc.LOAD_COMPONENT_ERROR, modelKey: o.modelKey }) })); t.requests.loadComponent = a } }, Xu.prototype.loadKDTree = function (A, e) { var t = this, i = this.loader, o = this.model, n = this.url, r = vc.GeoWorkerUrl; if (vc.UseGeoWorker) i.setResponseType("json"), i.load(n.mpkUrl(A), (function (A) { var i = new Worker(r); i.onmessage = function (A) { var i = A.data; for (var o in i) i.hasOwnProperty(o); e(), t._onTaskFinished() }, i.postMessage({ msg: A }) }), (function (A) {})); else { i.setResponseType("json"), i.setCacheViable(!this.offLine); var a = i.load(n.kdTreeUrl(A), (function (i) { t._parseKDTree(i, A), Bh.debug("kdtree load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { o.dispatchEventEx({ type: Tc.LOAD_COMPONENT_ERROR, modelKey: o.modelKey }) })); t.requests.loadKDTree = a } }, Xu.prototype.loadLight = function (A, e) { var t = this, i = this.loader, o = this.model, n = this.url; i.setResponseType("json"), i.setCacheViable(!this.offLine); var r = i.load(n.lightUrl(A), (function (i) { t._parseLight(i, A), Bh.debug("light load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { o.dispatchEventEx({ type: Tc.LOAD_COMPONENT_ERROR, modelKey: o.modelKey }) })); t.requests.loadLight = r }, Xu.prototype.loadBones = function (A, e) { var t = this, i = this.loader, o = this.model, n = this.url, r = vc.GeoWorkerUrl; if (vc.UseGeoWorker) i.setResponseType("arraybuffer"), i.load(n.bonesUrl(A), (function (A) { var i = new Worker(r); i.onmessage = function (A) { var i = A.data; for (var o in i) i.hasOwnProperty(o); e(), t._onTaskFinished() }, i.postMessage({ msg: A }) }), (function (A) {})); else { i.setResponseType("arraybuffer"), i.setCacheViable(!this.offLine); var a = i.load(n.bonesUrl(A), (function (A) { t._parseBones(A), Bh.debug("bones load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { o.dispatchEventEx({ type: Tc.LOAD_COMPONENT_ERROR, modelKey: o.modelKey }) })); t.requests.loadBones = a } }, Xu.prototype.loadClips = function (A, e) { var t = this, i = this.loader, o = this.model, n = this.url, r = vc.GeoWorkerUrl; if (vc.UseGeoWorker) i.setResponseType("json"), i.load(n.mpkUrl(A), (function (A) { var i = new Worker(r); i.onmessage = function (A) { var i = A.data; for (var o in i) i.hasOwnProperty(o); e(), t._onTaskFinished() }, i.postMessage({ msg: A }) }), (function (A) {})); else { i.setResponseType("json"), i.setCacheViable(!this.offLine); var a = i.load(n.clipsUrl(A), (function (A) { t._parseClips(A), Bh.debug("Clips load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { o.dispatchEventEx({ type: Tc.LOAD_COMPONENT_ERROR, modelKey: o.modelKey }) })); t.requests.loadClips = a } }, Xu.prototype.loadNodes = function (A, e) { var t = this, i = this.loader, o = this.model, n = this.url, r = vc.GeoWorkerUrl; if (vc.UseGeoWorker) i.setResponseType("json"), i.load(n.mpkUrl(A), (function (A) { var i = new Worker(r); i.onmessage = function (A) { var i = A.data; for (var o in i) i.hasOwnProperty(o); e(), t._onTaskFinished() }, i.postMessage({ msg: A }) }), (function (A) {})); else { i.setResponseType("json"), i.setCacheViable(!this.offLine); var a = i.load(n.nodesUrl(A), (function (A) { t._parseNodes(A), Bh.debug("Nodes load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { o.dispatchEventEx({ type: Tc.LOAD_COMPONENT_ERROR, modelKey: o.modelKey }) })); t.requests.loadNodes = a } }, Xu.prototype.loadAttribute = function (A, e) { var t = this, i = this.loader, o = this.model, n = this.url, r = vc.GeoWorkerUrl; if (vc.UseGeoWorker) i.setResponseType("json"), i.load(n.mpkUrl(A), (function (A) { var i = new Worker(r); i.onmessage = function (A) { var i = A.data; for (var o in i) i.hasOwnProperty(o); e(), t._onTaskFinished() }, i.postMessage({ msg: A }) }), (function (A) {})); else { i.setResponseType("json"), i.setCacheViable(!this.offLine); var a = i.load(n.attributeUrl(), (function (A) { if (A instanceof String) try { A = JSON.parse(A) } catch (A) {} o.attributes = A, Bh.debug("Attribute load from online") }), void 0, (function (A) { o.dispatchEventEx({ type: Tc.LOAD_COMPONENT_ERROR, modelKey: o.modelKey }) })); t.requests.loadAttribute = a } }, Xu.prototype.loadGeopkOnDemand = function (A, e, t) { this.loadTaskCount = 0, this.maxLoadTaskCount = A.length, this._loadingOnDemand = !0, this.finishCallback = t; var i = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var o = this.url, n = [], r = 0; A.length > r; r += 1) n.push(o.mpkUrl(A[r])); var a = this.model.getStorage(); a && a.getBatch(n, (function (A) { for (var t = function (e) { if (A[n[e]]) if (!0 === A[n[e]].split) { var t = A[n[e]].list, o = new Uint8Array(A[n[e]].length); a.getBatch(t, (function (A) { for (var r = 0; t.length > r; r += 1) A[t[r]] ? o.set(new Uint8Array(A[t[r]]), 4e7 * r) : Bh.error("获取分割几何失败"); var a = n[e].indexOf("fileKey="); i._parseGeometrie(o.buffer, n[e].slice(a + 8)), Bh.debug("load geo from local"), i._onTaskFinished() }), (function () { Bh.error("获取分割几何失败") })) } else s = n[e].indexOf("fileKey="), i._parseGeometrie(A[n[e]], n[e].slice(s + 8)), Bh.debug("load geo from local"), i._onTaskFinished(); else { if (r = i.taskGeometrieManager, -1 === (s = n[e].indexOf("fileKey="))) return Bh.error("url is not has fileKey"), { v: void 0 }; r.addTask(n[e].slice(s + 8)), Bh.debug("load geo from net") } }, o = 0; n.length > o; o += 1) { var r, s, l = t(o); if ("object" === lc(l)) return l.v } i.taskGeometrieManager.processTasks(i.loadGeometrie.bind(i), e) }), (function () { for (var t = i.taskGeometrieManager, o = 0; A.length > o; o += 1) t.addTask(A[o]); t.processTasks(i.loadGeometrie.bind(i), e) })) } else { for (var s = this.taskGeometrieManager, l = 0; A.length > l; l += 1) s.addTask(A[l]); s.processTasks(i.loadGeometrie.bind(i), e) } }, Xu.prototype.loadAxisNet = function (A, e) { var t = this, i = this.loader, o = this.url, n = this.model; rp(t.dataVersion, "1") ? i.setResponseType("json") : i.setResponseType("arraybuffer"), i.setCacheViable(!this.offLine); var r = i.load(o.axisNetUrl(A), (function (A) { t._parseAxisNet(A), Bh.debug("axis net load from online"), e && e() }), void 0, (function (A) { n.dispatchEventEx({ type: Tc.LOAD_AXISNET_ERROR, modelKey: n.modelKey }) })); t.requests.loadAxisNet = r }, Xu.prototype.loadFloorInfo = function (A, e) { var t = this; this._loadFloorInfoFromDB(A, (function (i) { i && i.data ? (t._parseFloorInfo(i), e && e(!0)) : t._loadFloorInfoFromNet(A, (function (A) { A ? (t._parseFloorInfo(A), e && e(!0)) : e && e(!1) })) })) }, Xu.prototype._loadFloorInfoFromDB = function (A, e) { if (vc.getDataFromIndexedDB && !this.offLine) { var t = this.url.floorInfoUrl(A), i = this.model.getStorage(); i && i.getBatch([t], (function (A) { A[t] ? (e(A[t]), Bh.debug("load floorinfo from local")) : e() }), (function () { e() })) } else e() }, Xu.prototype._loadFloorInfoFromNet = function (A, e) { var t = new bu(this), i = this.url, o = this.model; this.model.accessToken && t.setRequestHeader({ Authorization: this.model.accessToken }), rp(this.dataVersion, "1") ? t.setResponseType("json") : t.setResponseType("arraybuffer"), t.setCacheViable(!this.offLine); var n = t.load(i.floorInfoUrl(A), (function (A) { Bh.debug("floor info load from online"), e && e(A) }), void 0, (function (t) { o.dispatchEventEx({ type: Tc.LOAD_FLOORINFO_ERROR, modelKey: A }), e && e() })); this.requests.loadFloorInfo = n }, Xu.prototype._parseReuseNodes = function (A, e) { if (A) { vc.useGzip && (A = JSON.parse(uh.ab2str(pako.ungzip(A)))); var t = this.descriptor; t && (t.referencedMeshCache.reuseNodes = A) } else Bh.error("没有数据") }, Xu.prototype.loadReuseNode = function (A, e) { var t = this, i = this.jsonLoader, o = this.model, n = this.url; i.setResponseType("json"), vc.useGzip && i.setResponseType("arraybuffer"), i.setCacheViable(!0); i.load(n.mpkUrl(A), (function (A) { t._parseReuseNodes(A), Bh.debug("component load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { o.dispatchEventEx({ type: Tc.LOAD_COMPONENT_ERROR, modelKey: o.modelKey }) })) }, Xu.prototype._parseFloorInfo = function (A) { if (A.data && 0 !== Object.keys(A.data).length) { var e = new zu; e.floors = Yu.parseFloorInfos(A.data), e.modelKey = this.model.modelKey; var t = new Ju; t.floors = e.floors, e.floorExplosionInfo = t, e.modelType = this.model.getConfig().type, this.model.floorManager = e, e.model = this.model } }; var _u = { IfcRoof: { color: [.837255, .203922, .270588, 1] }, IfcSlab: { color: [.637255, .603922, .670588, 1] }, IfcWall: { color: [.537255, .337255, .237255, 1] }, IfcWallStandardCase: { color: [.537255, .337255, .237255, 1] }, IfcDoor: { color: [.637255, .603922, .670588, 1] }, IfcWindow: { color: [.137255, .403922, .870588, .4] }, IfcOpeningElement: { color: [.137255, .403922, .870588, .1] }, IfcRailing: { color: [.137255, .403922, .870588, 1] }, IfcColumn: { color: [.137255, .403922, .870588, 1] }, IfcBeam: { color: [.137255, .403922, .870588, 1] }, IfcFurnishingElement: { color: [.137255, .403922, .870588, 1] }, IfcCurtainWall: { color: [.137255, .403922, .870588, 1] }, IfcStair: { color: [.637255, .603922, .670588, 1] }, IfcStairFlight: { color: [.637255, .603922, .670588, 1] }, IfcBuildingElementProxy: { color: [.5, .5, .5, 1] }, IfcFlowSegment: { color: [.137255, .403922, .870588, 1] }, IfcFlowitting: { color: [.137255, .403922, .870588, 1] }, IfcFlowTerminal: { color: [.137255, .403922, .870588, 1] }, IfcProxy: { color: [.137255, .403922, .870588, 1] }, IfcSite: { color: [.137255, .403922, .870588, 1] }, IfcLightFixture: { color: [.8470588235, .8470588235, .870588, 1] }, IfcDuctSegment: { color: [.8470588235, .427450980392, 0, 1] }, IfcDistributionFlowElement: { color: [.8470588235, .427450980392, 0, 1] }, IfcDuctFitting: { color: [.8470588235, .427450980392, 0, 1] }, IfcPlate: { color: [.137255, .403922, .870588, .5] }, IfcAirTerminal: { color: [.8470588235, .427450980392, 0, 1] }, IfcMember: { color: [.8470588235, .427450980392, 0, 1] }, IfcCovering: { color: [.8470588235, .427450980392, 0, 1] }, IfcTransportElement: { color: [.8470588235, .427450980392, 0, 1] }, IfcFlowController: { color: [.8470588235, .427450980392, 0, 1] }, IfcFlowFitting: { color: [.8470588235, .427450980392, 0, 1] }, IfcRamp: { color: [.8470588235, .427450980392, 0, 1] }, IfcFurniture: { color: [.8470588235, .427450980392, 0, 1] }, IfcFooting: { color: [.8470588235, .427450980392, 0, 1] }, IfcSystemFurnitureElement: { color: [.8470588235, .427450980392, 0, 1] }, IfcSpace: { color: [.137255, .303922, .570588, .5] }, DEFAULT: { color: [.8470588235, .427450980392, 0, 1] } }, $u = function (A) { this.symbolReader = null, this.userIdReader = null, this.userDataReader = null, this.mapSceneReader = {}, this.lightmap = !1, this.mapNodeInfoByCategory = {}, this.mapNodeInfoByUserId = {}, this.mapNodeInfoByNodeId = {}, this.mapNodeInfoByComponentKey = {}, this.mapNodeInfoByParameterizedDesc = {}, this.mapNodeInfoByGeometryId = {}, this.referencedMeshCache = {}, this.componentCount = 0, this.borderLines = {}, this.octreeRootNode = { inner: null, outer: null, layer: null }, this.meshCache = {}, this.allBones = {}, this.model = A }; $u.EnumNodeItemType = { SYMBOL: 0, MESH: 1, TUBE: 2, PIPE: 3, BOX: 4, BOX_M: 5, PIPE_M: 6, MESH_REF: 7, LINE: 8 }, $u.NodeInfoCategory = { INSTANCED: 0, STANDARD: 1 }, $u.EnumDataType = { NONE: 0, MERGE_DATA: 1, LAYER: 2, LAYER_SCENE: 3, ANIMATION: 4 }, $u.EnumKeyframeTrackType = { position: "position", scale: "scale", quaternion: "quaternion", weights: "weights" }, $u.prototype.destroy = function () { this.destroyReader(), this.octreeRootNode = null, this.mapNodeInfoByCategory = {}, this.mapNodeInfoByUserId = {}, this.mapNodeInfoByNodeId = {}, this.mapNodeInfoByComponentKey = {}, this.mapNodeInfoByParameterizedDesc = {}, this.mapNodeInfoByGeometryId = {}, this.referencedMeshCache = {}, this.componentCount = 0, this.borderLines = {} }, $u.prototype.destroyReader = function () { this.userIdReader = {}, this.userDataReader = {}, this.symbolReader = {}, this.mapSceneReader = {} }, $u.prototype.getSceneReaderMap = function () { return this.mapSceneReader }, $u.prototype.isValidScene = function () { return !uh.isEmptyObject(this.getSceneReaderMap()) || (Bh.log("model load not started!"), !1) }, $u.prototype.parseItemData = function (A) { var e = this.model; (ap(e.dataVersion, "2.0.0") || void 0 === e.dataVersion) && (Bh.time("升级几何结构"), this._updateV1ToV2(e), e.dataVersion = "2.0.0", Bh.timeEnd("升级几何结构")), this._readMaterialBuffer(e), e.hasAnimation && vc.EnableAnimation ? (this._parseClips(), this._parseBones()) : this._parseGeo(); var t = {}, i = this.referencedMeshCache; for (var o in Bh.time("_readItemData"), i.bufferData && Object.keys(i.bufferData).length > 0 || A && A(), i.components) this._readItemData(t, o, o, void 0, 0); e.hasAnimation && vc.EnableAnimation && this._parseNodes(), Bh.timeEnd("_readItemData"), t = null, A && A() }, $u.prototype.asyncParseItemData = function (A) { for (var e = this.getSceneReaderMap(), t = Object.keys(e), i = t.length, o = 0, n = this, r = 0; i > r; r += 1) { var a = e[t[r]]; uh.asyncProcess(a, a.header.componentCount, 100, (function (A, e) { n._parseItemDataBy(A, e) }), (function () { (o += 1) === i && A && A() })) } }, $u.prototype._parseItemDataBy = function (A, e) { for (var t = A.getComponentInfo(e), i = t.itemIndex; t.itemCount > i; i += 1) this._readItemData(A, i, e) }, $u.prototype.parseItemDataByComponentKey = function (A) { var e = this.getSceneReaderMap(); for (var t in e) this._parseItemDataBy(e[t], A) }, $u.prototype._readItemData = function (A, e, t) { var i = this.referencedMeshCache.components[e]; void 0 !== i && -1 !== i.geoId && this._readMeshInfo(A, t, i, null) }, $u.prototype._readSymbolInfo = function (A, e, t) { var i = this.symbolReader; if (i) { var o = i.header.symbolCount, n = t.toData, r = A.getMatrixInfo(t.matrixId).matrix.clone(), a = { matrix: r, ItemId: t.ItemId, originalId: t.originalId, userDataId: t.userDataId, materialId: t.materialId }; if (n >= 0 && o > n) for (var s = i.getSymbolInfo(n), l = s.itemIndex; s.itemCount > l; l += 1) { var c = i.getItemInfo(l); c.type !== $u.EnumNodeItemType.SYMBOL && this._readMeshInfo(i, e, c, a) } r = null, a = null, i = null } }, $u.prototype._readMeshInfo = function (A, e, t, i) { var o = null, n = null; null === i ? (t.userDataId, o = t.originalId, n = t.materials || t.matId) : (i.userDataId, o = i.originalId, n = i.materialId > -1 ? i.materialId : t.materialId); var r = null; if (r = this._getMeshNodeAttr(A, t, i)) { if (t.buildInCategory && (r.buildInCategory = t.buildInCategory), r.userId = e, r.name = t.name, r.type = t.type, r.componentKey = e, r.originalId = o, r.materialId = n, r.state = Lc.Visible, r.material = null, r.originMId = n, r.userData = null, r.categoryId = 0, r.familyName = t.familyName, r.familySymbol = t.familySymbol, this.lightmap) { var a = t.ItemId; i && (a = i.ItemId + "_" + t.ItemId), r.itemIdUV2 = a } r.instanceOrNot = !1, this._classifyNodeInfo(r), r = null } }, $u.prototype._getMeshNodeAttrOfPipe = function (A, e, t) { var i = A.getMatrixInfo(e.matrixId).matrix.clone(); t && i.multiplyMatrices(t.matrix, i); var o = e.boundingBox.clone(); o.applyMatrix4(i); var n = A.getGeomPipeInfo(e.toData), r = n.startPt, a = n.endPt, s = new y; s.subVectors(a, r); var l = s.length(); s.normalize(); var c = n.radius; c > 1 || (c = 100); var h = new y(0, 1, 0), d = new y(c, l, c), p = (new f).setFromUnitVectors(h, s), g = r.clone().addScaledVector(s, .5 * l), u = (new M).compose(g, p, d); return i.multiply(u), n = null, { nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_pipe", geometryId: "pipe", boundingBox: o, matrix: i } }, $u.prototype._getMeshNodeAttrOfTube = function (A, e, t) { var i = this._getMeshNodeAttrOfPipe(A, e, t); return i.nodeId += "_tube", i.geometryId = "tube", i }, $u.prototype._getMeshNodeAttrOfBox = function (A, e, t) { var i = A.getMatrixInfo(e.matrixId).matrix.clone(); t && i.multiplyMatrices(t.matrix, i); var o = e.boundingBox.clone(); o.applyMatrix4(i); var n = e.boundingBox, r = n.getSize(), a = n.getCenter(), s = (new M).scale(new y(r.x, r.y, r.z)); return s.setPosition(a), i.multiply(s), { nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_box", geometryId: "box", boundingBox: o, matrix: i } }, $u.prototype._getMeshNodeAttrOfBoxM = function (A, e, t) { var i = A.getMatrixInfo(e.matrixId).matrix.clone(); t && i.multiplyMatrices(t.matrix, i); var o = e.boundingBox.clone(); return o.applyMatrix4(i), { nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_boxM", geometryId: "boxM", boundingBox: o, matrix: i, uvArrayBuffer: A.getGeomBoxUvInfo(e.toData) } }, $u.prototype._getMeshNodeAttrOfPipeM = function (A, e, t) { var i = A.getMatrixInfo(e.matrixId).matrix.clone(); t && i.multiplyMatrices(t.matrix, i); var o = e.boundingBox.clone(); return o.applyMatrix4(i), { nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_pipeM", geometryId: "pipeM", boundingBox: o, matrix: i, uvArrayBuffer: A.getGeomPipeUvInfo(e.toData) } }, $u.prototype._getMeshNodeAttrOfMeshRef = function (A, e, t) { var i = A.getMatrixInfo(e.matrixId).matrix.clone(); t && i.multiplyMatrices(t.matrix, i); var o = e.boundingBox.clone(); return o.applyMatrix4(i), { nodeId: "refMesh|" + (t ? t.ItemId + "_" + e.ItemId : e.ItemId), geometryId: e.toData, boundingBox: o, matrix: i } }, $u.prototype._getMeshNodeAttr = function (A, e, t, i) { var o = new M; o.fromArray(e.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), vc.DataReduction && o.scale(new y(1e3, 1e3, 1e3)); var n = t ? e.key + "_" + i : e.key, r = t ? e.geoId + "_" + i : e.geoId; if (-1 !== r) { var a = new ph, s = this.getReferencedMeshBufferById(e.geoId); return s && s.position ? (a = Tu.getBoundingBoxByBuffer(s.position)).applyMatrix4(o) : Bh.error("没有找到对应几何"), { nodeId: n, guid: e.guid, geometryId: r, originalGeometryId: e.geoId, matrix: o, boundingBox: a, model: this.model } } }, $u.prototype._getComponentNodeAttr = function (A, e) { var t = new M; t.fromArray(A.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), vc.DataReduction && t.scale(new y(1e3, 1e3, 1e3)), e && t.multiplyMatrices(e.matrix, t); var i = A.nodeId, o = A.geoId; if (-1 !== o) { var n = A.maxBoundary || e.maxBoundary, r = A.minBoundary || e.minBoundary, a = new ph; return a.set(r, n), { nodeId: i, guid: A.guid, geometryId: o, originalGeometryId: A.geoId, matrix: t, boundingBox: a, model: this.model } } }, $u.prototype._getLineNodeAttr = function (A, e, t) { var i = e.boundingBox.clone(), o = null; return -1 !== e.matrixId ? (o = A.getMatrixInfo(e.matrixId).matrix.clone(), t && o.multiplyMatrices(t.matrix, o), i.applyMatrix4(o)) : (o = new M, t && i.applyMatrix4(t.matrix)), { nodeId: t ? "line-" + t.ItemId + "-" + e.ItemId : "line-" + e.ItemId, geometryId: "line-" + e.toData, boundingBox: i, matrix: o } }, $u.prototype._classifyNodeInfo = function (A) { this._cacheNodeInfoByComponentKey(A), this._cacheNodeInfoByNodeId(A), this._cacheNodeInfoByUserId(A), this._cacheNodeInfoByCategory(A), this._cacheNodeInfoByParameterizedDesc(A) }, $u.prototype._cacheNodeInfoByComponentKey = function (A) { void 0 === this.mapNodeInfoByComponentKey[A.componentKey] && (this.mapNodeInfoByComponentKey[A.componentKey] = []), this.mapNodeInfoByComponentKey[A.componentKey].push(A) }, $u.prototype._cacheNodeInfoByUserId = function (A) { void 0 === this.mapNodeInfoByUserId[A.userId] && (this.mapNodeInfoByUserId[A.userId] = []), this.mapNodeInfoByUserId[A.userId].push(A) }, $u.prototype._cacheNodeInfoByNodeId = function (A) { this.mapNodeInfoByNodeId[A.nodeId] = A }, $u.prototype._cacheNodeInfoByCategory = function (A) { var e = null; void 0 === this.mapNodeInfoByCategory[e = A.instanceOrNot ? $u.NodeInfoCategory.INSTANCED : $u.NodeInfoCategory.STANDARD] && (this.mapNodeInfoByCategory[e] = {}), void 0 === this.mapNodeInfoByCategory[e][A.userId] && (this.mapNodeInfoByCategory[e][A.userId] = []), this.mapNodeInfoByCategory[e][A.userId].push(A) }, $u.prototype._cacheNodeInfoByParameterizedDesc = function (A) { A.parameterizedDesc && (void 0 === this.mapNodeInfoByParameterizedDesc[A.type] && (this.mapNodeInfoByParameterizedDesc[A.type] = []), this.mapNodeInfoByParameterizedDesc[A.type].push(A)) }, $u.prototype._clearNodeInfoCacheWithParameterizedDesc = function (A) { if (A) for (var e = 0, t = A.length; t > e; e += 1) delete this.mapNodeInfoByParameterizedDesc[A[e]]; else this.mapNodeInfoByParameterizedDesc = {} }, $u.prototype._clearNodeInfoCacheWithComponentKey = function (A) { if (A) for (var e = 0, t = A.length; t > e; e += 1) delete this.mapNodeInfoByComponentKey[A[e]]; else this.mapNodeInfoByComponentKey = {} }, $u.prototype._clearNodeInfoCacheWithCategory = function (A) { if (A) for (var e = this.mapNodeInfoByCategory[$u.NodeInfoCategory.INSTANCED], t = this.mapNodeInfoByCategory[$u.NodeInfoCategory.STANDARD], i = 0, o = A.length; o > i; i += 1) e && delete e[A[i]], t && delete t[A[i]]; else this.mapNodeInfoByCategory = {} }, $u.prototype.clearNodeInfoCacheByComponentsKey = function (A) { this._clearNodeInfoCacheWithComponentKey(A), this._clearNodeInfoCacheWithUserId(A), this._clearNodeInfoCacheWithCategory(A) }, $u.prototype._clearNodeInfoCacheWithUserId = function (A) { if (A) for (var e = 0, t = A.length; t > e; e += 1) delete this.mapNodeInfoByUserId[A[e]], delete this.mapNodeInfoByNodeId[A[e]]; else this.mapNodeInfoByUserId = {}; this.mapNodeInfoByUserId = {} }, $u.prototype.clearNodeInfoCache = function () { this._clearNodeInfoCacheWithComponentKey(), this._clearNodeInfoCacheWithUserId(), this._clearNodeInfoCacheWithCategory() }, $u.prototype.getNodeInfosByComponentKey = function (A) { return this.mapNodeInfoByComponentKey[A] }, $u.prototype.getNodeInfosWithComponentKey = function () { return this.mapNodeInfoByComponentKey }, $u.prototype.getAllNodeInfos = function () { return this.mapNodeInfoByUserId }, $u.prototype.getNodeInfosByUserId = function (A) { return this.mapNodeInfoByUserId[A] }, $u.prototype.getNodeInfosByNodeId = function (A) { return this.mapNodeInfoByNodeId[A] }, $u.prototype.getNodeInfosWithUserId = function () { return this.mapNodeInfoByUserId }, $u.prototype.getStandardNodeInfos = function () { return this.mapNodeInfoByCategory[$u.NodeInfoCategory.STANDARD] }, $u.prototype.getInstancedNodeInfos = function () { return this.mapNodeInfoByCategory[$u.NodeInfoCategory.INSTANCED] }, $u.prototype.getStandardUserIds = function () { return this.getStandardNodeInfos() ? Object.keys(this.getStandardNodeInfos()) : [] }, $u.prototype.getInstancedUserIds = function () { return this.getInstancedNodeInfos() ? Object.keys(this.getInstancedNodeInfos()) : [] }, $u.prototype.getStandardNodeInfosById = function (A) { var e = this.getStandardNodeInfos(); return e ? e[A] : null }, $u.prototype.getInstancedNodeInfosById = function (A) { var e = this.getInstancedNodeInfos(); return e ? e[A] : null }, $u.prototype._getUserIdsByCategory = function (A, e) { var t = [], i = null; if (i = e === $u.NodeInfoCategory.INSTANCED ? this.getInstancedNodeInfos() : this.getStandardNodeInfos()) for (var o = 0, n = A.length; n > o; o += 1) i[A[o]] && t.push(A[o]); return t }, $u.prototype.getInstancedUserIdsByCategory = function (A) { return this._getUserIdsByCategory(A, $u.NodeInfoCategory.INSTANCED) }, $u.prototype.getStandardUserIdsByCategory = function (A) { return this._getUserIdsByCategory(A, $u.NodeInfoCategory.STANDARD) }, $u.prototype._traverseNodeInfosByIds = function (A, e, t) { for (var i = 0, o = e.length; o > i; i += 1) { var n = e[i]; t(n, A[n]) } }, $u.prototype.traverseStandardNodeInfos = function (A, e) { var t = this.getStandardNodeInfos(); t && (A = A || this.getStandardUserIds(), this._traverseNodeInfosByIds(t, A, e)) }, $u.prototype.traverseInstancedNodeInfos = function (A, e) { var t = this.getInstancedNodeInfos(); t && (A = A || this.getInstancedUserIds(), this._traverseNodeInfosByIds(t, A, e)) }, $u.prototype.traverseNodeInfosByComponent = function (A) { for (var e = Object.keys(this.mapNodeInfoByComponentKey), t = 0, i = e.length; i > t; t += 1) for (var o = e[t], n = this.mapNodeInfoByComponentKey[o], r = 0, a = n.length; a > r; r += 1) A(o, n[r]) }, $u.prototype.clearReferencedMeshCache = function () { if (!vc.DEBUG) { for (var A in this.referencedMeshCache) delete this.referencedMeshCache[A]; this.referencedMeshCache = null } }, $u.prototype.cacheReferencedMeshBufferData = function (A, e) { this.referencedMeshCache.bufferData || (this.referencedMeshCache.bufferData = {}), this.referencedMeshCache.bufferData[A] = e }, $u.prototype.cacheReferencedMeshComponentNodeData = function (A, e) { this.referencedMeshCache.componentNode || (this.referencedMeshCache.componentNode = {}), this.referencedMeshCache.componentNode[A] = e }, $u.prototype.cacheReferencedMeshWireframeData = function (A, e) { this.referencedMeshCache.wireframeData || (this.referencedMeshCache.wireframeData = {}), this.referencedMeshCache.wireframeData[A] = e }, $u.prototype.getReferencedMeshBufferData = function () { return this.referencedMeshCache.bufferData }, $u.prototype.getReferencedMeshBufferById = function (A) { return this.referencedMeshCache && this.referencedMeshCache.bufferData ? this.referencedMeshCache.bufferData[A] : null }, $u.prototype.getReferencedMeshComponentNodeById = function (A) { return this.referencedMeshCache && this.referencedMeshCache.componentNode ? this.referencedMeshCache.componentNode[A] : null }, $u.prototype.getReferencedMeshWireframeDataById = function (A) { return this.referencedMeshCache && this.referencedMeshCache.wireframeData ? this.referencedMeshCache.wireframeData[A] : null }, $u.prototype.cacheReferencedMeshBoneBufferData = function (A, e) { this.referencedMeshCache.bones || (this.referencedMeshCache.bones = {}), this.referencedMeshCache.bones[A] = e }, $u.prototype.cacheReferencedMeshClipsData = function (A) { this.referencedMeshCache.clips = A }, $u.prototype.cacheReferencedMeshNodesData = function (A) { this.referencedMeshCache.nodes = A }, $u.prototype.cacheReferencedMeshComponentData = function (A, e) { this.referencedMeshCache.components || (this.referencedMeshCache.components = {}), this.referencedMeshCache.components[A] = e }, $u.prototype.cacheReferencedMeshMaterialData = function (A, e) { this.referencedMeshCache.materials || (this.referencedMeshCache.materials = {}), this.referencedMeshCache.materials[A] = e }, $u.prototype.cacheReferencedMeshGeoIds = function (A, e) { this.referencedMeshCache.mpkIds || (this.referencedMeshCache.mpkIds = {}), this.referencedMeshCache.mpkIds[A] || (this.referencedMeshCache.mpkIds[A] = []), this.referencedMeshCache.mpkIds[A].push(e) }, $u.prototype.clearReferencedMeshCacheByGeopkIdxs = function (A, e) { if (this.referencedMeshCache.mpkIds) for (var t = 0, i = A.length; i > t; t += 1) { var o = A[t], n = this.referencedMeshCache.mpkIds[o]; if (n) { for (var r = 0, a = n.length; a > r; r += 1) e && e(n[r]), delete this.referencedMeshCache[n[r]]; delete this.referencedMeshCache.mpkIds[o] } } }, $u.prototype.cacheBorderLine = function (A, e) { var t = A ? "shared" : "unique"; this.borderLines[t] || (this.borderLines[t] = []), this.borderLines[t].push(e) }, $u.prototype.getSharedBorderLineCache = function () { return this.borderLines.shared }, $u.prototype.getUniqueBorderLineCache = function () { return this.borderLines.unique }, $u.prototype._isRegularShape = function (A) { return A.type === $u.EnumNodeItemType.TUBE || A.type === $u.EnumNodeItemType.PIPE || A.type === $u.EnumNodeItemType.BOX || A.type === $u.EnumNodeItemType.BOX_M || A.type === $u.EnumNodeItemType.PIPE_M }, $u.prototype._isInstancedNode = function (A) { return !!vc.Instance && (A.type === $u.EnumNodeItemType.MESH_REF ? !!vc.SharedMeshInstanceEnable : !!A.parameterizedDesc) }, $u.prototype.getComponentCount = function () { return this.componentCount }, $u.prototype.getOctreeRootNode = function () { return this.octreeRootNode }, $u.prototype.isUseInnerAndOuterOctree = function () { return !0 }, $u.prototype.isOctreeOuter = function (A) { var e = this.octreeRootNode.inner || this.octreeRootNode.outer; return !(e.min.x > A.x || A.x > e.max.x || e.min.y > A.y || A.y > e.max.y || e.min.z > A.z || A.z > e.max.z) }, $u.prototype.getOctreeRoots = function (A) { this.octreeRootNode.outer && A.push(this.octreeRootNode.outer), this.octreeRootNode.inner && A.push(this.octreeRootNode.inner) }, $u.prototype.updateOctreeNodeBy = function (A, e) { var t = new aA; function i(A, e) { t.copy(A.boundingBoxWorld), t.applyMatrix4(e), A.min.copy(t.min), A.max.copy(t.max), A.center = t.getCenter(), A.size = t.getSize().lengthSq() } i(A, e), function A(e, t) { for (var o = 0, n = e.childOctants.length; n > o; o += 1) { var r = e.childOctants[o]; i(r, t), A(r, t) } }(A, e) }, $u.prototype.updateOctreeNode = function (A) { var e = this.getOctreeRootNode(); e.outer && this.updateOctreeNodeBy(e.outer, A), e.inner && this.updateOctreeNodeBy(e.inner, A) }, $u.prototype.removeFromSceneReaderMap = function (A) { for (var e = 0, t = A.length; t > e; e += 1) this.mapSceneReader[A[e]] && delete this.mapSceneReader[A[e]] }, $u.prototype.isUserIdExist = function (A) { return !!this.getNodeInfosByUserId(A) }, $u.prototype.addToNodeInfoMap = function (A) { for (var e = 0, t = A.length; t > e; e += 1) this._cacheNodeInfoByUserId(A[e]) }, $u.prototype.removeFromNodeInfoMap = function (A) { for (var e = this.getAllNodeInfos(), t = 0, i = A.length; i > t; t += 1) { var o = A[t].userId; e[o] && delete e[o] } }, $u.prototype.cacheNodeInfosOnGeometryId = function () { var A = this.getStandardNodeInfos(); for (var e in this.mapNodeInfoByGeometryId = {}, A) for (var t = A[e], i = 0, o = t.length; o > i; i += 1) t[i].geometryId = this.convertGeometryId(t[i].geometryId), this.mapNodeInfoByGeometryId[t[i].geometryId] || (this.mapNodeInfoByGeometryId[t[i].geometryId] = []), this.mapNodeInfoByGeometryId[t[i].geometryId].push(t[i]) }, $u.prototype.getNodeInfosOnGeometryId = function () { return this.mapNodeInfoByGeometryId || this.cacheNodeInfosOnGeometryId(), this.mapNodeInfoByGeometryId }, $u.prototype.clearNodeInfosWithGeometryId = function () { this.mapNodeInfoByGeometryId = {} }, $u.prototype.convertGeometryId = function (A) { return A }, $u.prototype._readMaterialBuffer = function (A) { var e = A.materialManager, t = e.materials, i = e.textures, o = this.referencedMeshCache.materials; for (var n in o) { var r = o[n]; if (!r) return null; var a = Kd.createMaterialByMaterialBufferAndTexture(r, i); a.refreshUniforms && a.refreshUniforms(), t[n] = a, vc.EnableShadow && A.manager.viewerImpl.rendererManager.csm && A.manager.viewerImpl.rendererManager.csm.setupMaterial(a) } }, $u.prototype._updateV1ToV2 = function () { var A = this.referencedMeshCache.components, e = this.referencedMeshCache.bufferData, t = this.referencedMeshCache.materials; for (var i in A) if (A.hasOwnProperty(i)) { var o = A[i], n = o.matId, r = e[o.geoId]; if (o.materials) continue; if (o.materials = [], !r) continue; var a = t[n]; if (!a) continue; var s = this._updateMaterialV1ToV2(n, a); if (s) for (var l in r.materialIndex = s.materialIndex, o.materials = s.materialId, s.materials) s.materials.hasOwnProperty(l) && (this.referencedMeshCache.materials[l] = s.materials[l]) } }, $u.prototype._updateMaterialV1ToV2 = function (A, e) { var t = {}, i = [], o = {}; if (!e) return null; for (var n = e.color, r = e.colorIndex, a = e.texture, s = e.textureIndex, l = 0; n.length > l; l += 4) { var c = {}; c.color = [n[l], n[l + 1], n[l + 2]], c.opacity = Math.floor(100 * n[l + 3]) / 100, c.transparent = 1 > n[l + 3]; var h = (255 * c.color[0] << 16 ^ 255 * c.color[1] << 8 ^ 255 * c.color[2] << 0) + "_" + c.opacity; o[h] = c, i.push(h) } if (0 !== a.length && r.length === s.length) for (var d = -1, p = 0; s.length > p; p += 1) if (d !== r[p] && (d = r[p], -1 !== s[p])) { var g = i[r[p]], u = a[s[p]]; if (o[g].map = u, -1 === g.indexOf(u)) { var f = g + "_" + a[s[p]]; o[f] = o[g], i.length > Object.keys(o).length - 1 || delete o[g], i[r[p]] = f } } return t.materials = o, t.materialId = i, t.materialIndex = r, t }, $u.prototype._computeVertexNormalsFromFaceNormals = function (A, e, t) { for (var i = new Float32Array(t), o = 0, n = 0, r = 0, a = 0, s = 0, l = 0, c = 0; A.length > c; c += 3) s = A[c + 1], l = A[c + 2], n = 3 * e[c + 1], r = 3 * e[c + 2], i[o = 3 * e[c]] = a = A[c], i[o + 1] = s, i[o + 2] = l, i[n] = a, i[n + 1] = s, i[n + 2] = l, i[r] = a, i[r + 1] = s, i[r + 2] = l; return i }, $u.prototype._computeVertexNormalsFromIndex = function (A, e, t) { var i = new Float32Array(e.length); if (e) { var o = 0, n = 0, r = 0, a = new y, s = new y, l = new y, c = new y, h = new y; if (A) for (var d = A, p = 0; d.length > p; p += 3) n = 3 * d[p + 1], r = 3 * d[p + 2], a.fromArray(e, o = 3 * d[p]), s.fromArray(e, n), l.fromArray(e, r), c.subVectors(l, s), h.subVectors(a, s), c.cross(h), i[o] += c.x, i[o + 1] += c.y, i[o + 2] += c.z, i[n] += c.x, i[n + 1] += c.y, i[n + 2] += c.z, i[r] += c.x, i[r + 1] += c.y, i[r + 2] += c.z; else for (var g = 0, u = e.length; u > g; g += 9) a.fromArray(e, g), s.fromArray(e, g + 3), l.fromArray(e, g + 6), c.subVectors(l, s), h.subVectors(a, s), c.cross(h), i[g] = c.x, i[g + 1] = c.y, i[g + 2] = c.z, i[g + 3] = c.x, i[g + 4] = c.y, i[g + 5] = c.z, i[g + 6] = c.x, i[g + 7] = c.y, i[g + 8] = c.z } return i }, $u.prototype.addMeshToInfoMap = function (A, e, t, i, o) { var n = this.getNodeInfosByComponentKey(A); Array.isArray(n) && n.forEach((function (A) { A.nodeId === e && (A.mesh = t, A.index = i, A.uv = A.uv || o) })) }, $u.prototype._parseGeo = function () { Bh.time("处理几何:计算法线"); var A = this.referencedMeshCache; for (var e in A.bufferData) { var t = A.bufferData[e]; t.position.length !== t.normal.length && (t.normal = t.normal.length === t.index.length ? this._computeVertexNormalsFromFaceNormals(t.normal, t.index, t.position.length) : this._computeVertexNormalsFromIndex(t.index, t.position)) } Bh.timeEnd("处理几何:计算法线") }, $u.prototype._parseBones = function () { var A = this.referencedMeshCache; for (var e in A._offsetMatrix || (A._offsetMatrix = {}), A.bufferData) { var t = A.bufferData[e]; t.position.length !== t.normal.length && (t.normal = t.normal.length === t.index.length ? this._computeVertexNormalsFromFaceNormals(t.normal, t.index, t.position.length) : this._computeVertexNormalsFromIndex(t.index, t.position)); var i = A.bones[e]; if (i) { t.skinIndex = i.skinIndex, t.skinWeight = i.skinWeight; var o = i.name; i.offsetMatrix.length / 16 !== o.length && Bh.debug("bones的name数量与Matrix数量不符!"); for (var n = 0; o.length > n; n += 1) A._offsetMatrix[o[n]] = (new M).fromArray(i.offsetMatrix, 16 * n) } } }, $u.prototype._parseClips = function () { for (var A = this.referencedMeshCache.clips, e = [], t = 0, i = A.length; i > t; t += 1) { for (var o = [], n = A[t], r = 0, a = n.tracks.length; a > r; r += 1) { var s = n.tracks[r], l = null; switch (s.type) { case $u.EnumKeyframeTrackType.weights: l = Dr; break; case $u.EnumKeyframeTrackType.quaternion: l = Nr; break; case $u.EnumKeyframeTrackType.position: case $u.EnumKeyframeTrackType.scale: default: l = Vr } if (0 === n.ticksPerSec) { n.ticksPerSec = 1e3; for (var c = 0; s.times.length > c; c += 1) s.times[c] /= n.ticksPerSec } var h = new l(Fs.sanitizeNodeName(s.name) + "." + s.type, s.times, s.values, 2301); o.push(h) } var d = new Gr(void 0 !== n.name ? n.name : "animation_" + t, n.duration / n.ticksPerSec, o); e.push(d) } this.model.animations = e }, $u.prototype._parseNodes = function () { var A = this.referencedMeshCache; A.allBones = [], A.offsetMatrix = []; var e = function A(e, t) { var i = null; "node" === e.type ? i = new H : "bone" === e.type && (i = new Uo, t.allBones[e.name] = i), i.name = Fs.sanitizeNodeName(e.name), i.matrix.fromArray(e.transformation || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), i.matrix.decompose(i.position, i.quaternion, i.scale); for (var o = 0; e.children.length > o; o += 1) { var n = A(e.children[o], t); n && i.add(n) } for (var r = 0; e.meshes.length > r; r += 1) { var a = e.meshes[r]; t.model._getHandler().defaultManager.meshManager._readBufferInfo(t.model, [t.model.modelKey + "_" + e.meshes[r]]); var s = t.model._getHandler().defaultManager.meshManager._makeSkinMesh(t.model, [t.model.modelKey + "_" + e.meshes[r]], (function (A) {})); t.meshCache[a] = s, s.name = e.name, i.add(s) } return i }(A.nodes, this); for (var t in A.bufferData) { var i = this.meshCache[t]; if (i && i.isSkinnedMesh) { for (var o = [], n = [], r = 0; A.bones[t].name.length > r; r += 1) { var a = A.bones[t].name[r], s = A._offsetMatrix[a], l = this.allBones[a]; s && l && (o.push(l), n.push(s)) } var c = new bo(o, n); i.bind(c, i.matrixWorld) } } this.model.nodes = e, this.model.manager.getScene().onBeforeRender = function (A, e, t, i) { e.updateMatrixWorld(!0) }, this.model.group.add(e), (c = new _s(e)).visible = !1, this.model.skeleton = c, this.model.group.add(c), this.model.mixer = new Rs(e), this.model.actions = []; for (var h = 0; this.model.animations.length > h; h += 1) { var d = this.model.mixer.clipAction(this.model.animations[h]); this.model.actions.push(d) } }; var Af = function (A) { $u.call(this, A), this.instancedComponent = {} }; Object.assign(Af.prototype, $u.prototype), Af.prototype.parseItemData = function (A) { var e = this.model; (ap(e.dataVersion, "2.0.0") || void 0 === e.dataVersion) && (Bh.time("升级几何结构"), this._updateV1ToV2(e), e.dataVersion = "2.0.0", Bh.timeEnd("升级几何结构")), this._readMaterialBuffer(e), e.hasAnimation && vc.EnableAnimation ? (this._parseClips(), this._parseBones()) : (this._parseGeo(), vc.Instance && sp(e.dataVersion, "2.0.0") && this._parseInstanced()); var t = {}, i = this.referencedMeshCache; if (Bh.time("_readItemData"), !i.bufferData || 0 >= Object.keys(i.bufferData).length) return Bh.warn("缺少几何数据"), !0; for (var o in i.components) this._readItemData(t, o, o, void 0, 0); Bh.timeEnd("_readItemData"), t = null, A && A() }, Af.prototype._readMeshInfo = function (A, e, t, i) { var o = this.model.materialManager.materials, n = null, r = null, a = null, s = this.referencedMeshCache; if (t.nodes || t.nodeIds) { r = t.originalId; var l = t, c = (new M).fromArray(l.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); l.matrix = c; var h = []; h = l.nodes ? l.nodes : l.nodeIds; for (var d = 0; h.length > d; d += 1) { var p = h[d]; if ("object" !== lc(p) && (p = this.getReferencedMeshComponentNodeById(p)), p) { var g, u = null; if (a = "", -1 !== p.geoId) if (u = this._getComponentNodeAttr(p, l, d)) { if (l.buildInCategory && (u.buildInCategory = l.buildInCategory), !o[a = p.material]) { var f = _u[l.type] ? _u[l.type].color : void 0; f || (Bh.log("Material not found for type: ", l.type), f = _u.DEFAULT.color), f || (Bh.log("Default material not found for type: ", l.type), f = [1, 1, 1, 1]); var m = new LA(f[0], f[1], f[2]), C = a || m.getHexString() + "_" + f[3], y = o[C]; y || (Bh.warn("缺少材质 " + a), y = Kd.createStandardMaterial({ color: m }), 1 > f[3] && (y.transparent = !0, y.opacity = f[3]), y.side = 2, o[C] = y), u.material = a = C } if (o[a].aoMap) { var v = this.getReferencedMeshBufferById(u.geometryId); v && (v.uv2 = v.uv) } g = u.nodeId; var I = (K = this.userDataReader) ? K.getUserData(n) : null; u.type = l.type, u.userId = e, u.name = l.name, u.userDataId = n, u.originalId = r, u.materialId = a, u.originMId = a, u.userData = I, u.categoryId = 0, u.componentKey = e, u.familyName = l.familyName, u.familySymbol = l.familySymbol; var E = vc.Instance, B = s.reuseNodes.hasOwnProperty(g); u.instanceOrNot = !(!E || !B), u.isBatched = !0, u.state = Lc.Visible, u.material = null, this._classifyNodeInfo(u), u = null } else Bh.debug("非法node") } } } else if (null === i ? (n = t.userDataId, r = t.originalId, a = t.materialId || t.matId) : (n = i.userDataId, r = i.originalId, a = i.materialId > -1 ? i.materialId : t.materialId), t.materials || (t.materials = []), t.materials.length > 0) for (d = 0; t.materials.length > d; d += 1) { var x = null; if (x = this._getMeshNodeAttr(A, t, t.materials.length > 1, d), !o[a = t.materials[d]]) { var S = _u[t.type] ? _u[t.type].color : void 0; S || (Bh.log("Material not found for type: ", t.type), S = _u.DEFAULT.color), S || (Bh.log("Default material not found for type: ", t.type), S = [1, 1, 1, 1]); var w = new LA(S[0], S[1], S[2]), b = a || w.getHexString() + "_" + S[3], U = o[b]; U || (Bh.warn("缺少材质 " + a), U = Kd.createStandardMaterial({ color: w }), 1 > S[3] && (U.transparent = !0, U.opacity = S[3]), U.side = 2, o[b] = U) } if (o[a].aoMap) { var F = this.getReferencedMeshBufferById(x.geometryId); F && (F.uv2 = F.uv) } if (!x) return; var K; I = (K = this.userDataReader) ? K.getUserData(n) : null; x.type = t.type, x.userId = e, x.name = t.name, x.userDataId = n, x.originalId = r, x.materialId = a, x.originMId = a, x.userData = I, x.categoryId = 0, x.componentKey = e, x.familyName = t.familyName, x.familySymbol = t.familySymbol, vc.Instance && this.instancedComponent[e] ? x.instanceOrNot = !0 : (x.instanceOrNot = !1, this.instancedGeo[x.originalGeometryId].length > 1 && (x.originalGeometryId = "")), x.state = Lc.Visible, x.material = null, x.isBatched = !0, this._classifyNodeInfo(x), x = null } else { var Q = null, R = _u[t.type] ? _u[t.type].color : void 0; R || (Bh.log("Material not found for type: ", t.type), R = _u.DEFAULT.color), R || (Bh.log("Default material not found for type: ", t.type), R = [1, 1, 1, 1]); var T = new LA(R[0], R[1], R[2]), k = T.getHexString() + "_" + R[3], D = o[k]; if (D || (D = Kd.createStandardMaterial({ color: T }), 1 > R[3] && (D.transparent = !0, D.opacity = R[3]), D.side = 2, o[k] = D), t.materials.push(k), Q = this._getMeshNodeAttr(A, t, !1, 0), a = t.materials[0], !Q) return; t.buildInCategory && (Q.buildInCategory = t.buildInCategory); e = t.key; Q.type = t.type, Q.userId = e, Q.name = t.name, Q.originalId = r, Q.materialId = a, Q.originMId = a, Q.userData = {}, Q.categoryId = 0, Q.componentKey = e, Q.familyName = t.familyName, Q.familySymbol = t.familySymbol, Q.instanceOrNot = !(!vc.Instance || !this.instancedComponent[e]), Q.isBatched = !0, Q.state = Lc.Visible, Q.material = null, this._classifyNodeInfo(Q), Q = null } }, Af.prototype._parseGeo = function () { Bh.time("处理几何:按材质拆分构件"); var A = this.referencedMeshCache; for (var e in A.bufferData) { var t = A.bufferData[e]; if (t.position.length !== t.normal.length && (t.normal = t.normal.length === t.index.length ? this._computeVertexNormalsFromFaceNormals(t.normal, t.index, t.position.length) : this._computeVertexNormalsFromIndex(t.index, t.position)), void 0 !== t.materialIndex) { for (var i = void 0, o = [], n = null, r = 0; t.materialIndex.length > r; r += 1) { var a = t.materialIndex[r]; a !== n && (n = a, void 0 !== i && (i.count = 3 * r - i.start, o.push(i)), i = { start: 3 * r, materialIndex: n }) } if (void 0 !== i && (i.count = 3 * t.materialIndex.length - i.start, o.push(i)), 1 === o.length) { A.bufferData[e + "_" + o[0].materialIndex] = t } else { for (var s = {}, l = 0; o.length > l; l += 1) { var c = o[l]; void 0 === s[c.materialIndex] && (s[c.materialIndex] = { index: [], count: 0 }), s[c.materialIndex].index.push({ start: c.start, count: c.count }), s[c.materialIndex].count += c.count } var h = function () { p = {}, g = s[d]; for (var i = 0, o = new Uint32Array(g.count), n = 0; g.index.length > n; n += 1) { var r = g.index[n], a = t.index.slice(r.start, r.start + r.count); o.set(a, i), i += r.count } u = {}, o.forEach((function (A, e) { u[A] || (u[A] = []), u[A].push(e) })); var l = Object.keys(u).length; f = new Float32Array(3 * l), m = new Float32Array(3 * l), C = new Float32Array(2 * l), y = 0, v = 0; var c = 0; for (var h in u) if (u.hasOwnProperty(h)) { h = Number(h); var I = t.position.slice(3 * h, 3 * h + 3), E = t.normal.slice(3 * h, 3 * h + 3); if (t.uv.length > 0) { var B = t.uv.slice(2 * h, 2 * h + 2); C.set(B, v), v += 2 } f.set(I, y), m.set(E, y), y += 3, u[h].forEach((function (A) { o[A] = c })), c += 1 } p.index = o, p.position = f, p.normal = m, t.uv && t.uv.length > 0 && (p.uv = C), A.bufferData[e + "_" + d] = p }; for (var d in s) { var p, g, u, f, m, C, y, v; h() } } } } Bh.timeEnd("处理几何:按材质拆分构件") }, Af.prototype._parseInstanced = function () { Bh.time("_parseInstanced"), this.instancedComponent = {}; var A = {}, e = {}, t = this.referencedMeshCache, i = this.model.materialManager.materials; for (var o in t.components) if (t.components.hasOwnProperty(o)) { var n = t.components[o]; if (n.nodeIds || n.nodes) continue; var r = n.geoId; if (-1 === r) { Bh.debug("实体没有几何"); continue } if (void 0 === A[r] && (A[r] = []), A[r].push(1), !n.materials || 1 > n.materials.length) { n.materials = []; var a = _u[n.type] ? _u[n.type].color : void 0; a || (Bh.log("Material not found for type: ", n.type), a = _u.DEFAULT.color), a || (Bh.log("Default material not found for type: ", n.type), a = [1, 1, 1, 1]); var s = new LA(a[0], a[1], a[2]), l = s.getHexString() + "_" + a[3], c = i[l]; c || (Bh.warn("缺少材质 " + l), c = Kd.createStandardMaterial({ color: s }), 1 > a[3] && (c.transparent = !0, c.opacity = a[3]), c.side = 2, i[l] = c), n.materials.push(l) } for (var h = 0, d = n.materials.length; d > h; h += 1) { var p = n.materials[h] + "&" + r; void 0 === e[p] && (e[p] = []), e[p].push({ componentKey: o }) } } for (var g in this.instancedGeo = A, e) if (e.hasOwnProperty(g)) if (1 < e[g].length) for (var u = 0; e[g].length > u; u += 1) this.instancedComponent[e[g][u].componentKey] = !0; else delete e[g]; Bh.timeEnd("_parseInstanced") }; var ef = function (A) { Xu.call(this, A), this.descriptor = new Af(A.model) }; (ef.prototype = Object.assign(ef.prototype, Xu.prototype)).loadSceneAndGeos = function (A) { var e = A.scene, t = this.model, i = e.geometries.length || 0, o = []; if (this.map = {}, ap(this.dataVersion, "2.0.0")) for (var n = 0; i > n; n += 1) e.geometries[n].fileKey ? o.push(e.geometries[n].fileKey) : t.dispatchEventEx({ type: Tc.SCENE_NOT_CLOSE, modelKey: t.modelKey }); else o = e.geometries; this.maxLoadTaskCount += i, this._loadGeo(o) }, ef.prototype.getSceneTaskCount = function (A) { var e = A.scenes; return e += A.lines, e += A.mpks, vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), e }; var tf = function (A) { this.model = A, this.defaultManager = null, this.instancedManager = null, this.model = A, this.loader = null, this.loaded = !1, this.dataReady = !1, this.borderlinesLoaded = !1, this.borderlinesGenerated = !1 }; tf.prototype.destroy = function () { this.model = null, this.defaultManager.destroy(), this.defaultManager = null, this.instancedManager.destroy(), this.instancedManager = null, this.loader && (this.loader.destroy(), this.loader = null) }, tf.prototype.load = function (A) { var e = this, t = this.model; this.loader.setNotifyProgress(A), this.loader.load((function () { t.manager.dispatchEvent({ type: Rc.ON_LOAD_START, modelKey: t.modelKey }) }), (function (A) { t.manager.dispatchEvent({ type: Rc.ON_LOAD_PROGRESS, progress: A, modelKey: t.modelKey }) }), (function () { e.prepareData((function () { e.processLoadCompleted((function () { t.manager.dispatchEvent({ type: Rc.ON_LOAD_COMPLETE, modelKey: t.modelKey }) })) })) })) }, tf.prototype.processLoadCompleted = function (A) { var e = this.model; e.materialManager._updateTextureMapping(), e.materialManager._updateIBL(e), e.setLoaded(!0); var t = e.manager.filter, i = e.manager.getNodeInfos(); t.initFilterManager(i), requestAnimationFrame((function () { A && A(), e.hasAnimation && vc.EnableAnimation && e.createPanel(), e.updateMeshNodes(), e.applyFilter(), e.debut(e) })) }, tf.prototype.prepareData = function (A) { if (!this.dataReady) { var e = this; this.loader.getDescriptor().parseItemData((function () { e.dataReady = !0, e.settleData(A) })) } }, tf.prototype.prepareWireframe = function (A, e) { if (A.isActivateWireframe()) if (vc.BorderLineDelayLoaded && this.loader.getAllBorderlineCount()) if (this.borderlinesLoaded) this.borderlinesGenerated && (this.defaultManager.asyncGenerateWireframe(A), this.instancedManager.generateWireframe(A)); else { this.borderlinesLoaded = !0; var t = this; this.loader.delayLoadBorderlines((function () { t.instancedManager.generateWireframe(A), t.defaultManager.asyncGenerateWireframe(A, (function () { t.borderlinesGenerated = !0, e && e() })) })) } else this.defaultManager.generateWireframe(A), this.instancedManager.generateWireframe(A) }, tf.prototype.prepare = function (A) {}, tf.prototype.needUpdate = function () { return !0 }, tf.prototype.updateNodes = function () { this.defaultManager.updateNodes(this.model), vc.Instance && this.instancedManager.updateNodes(this.model) }, tf.prototype.isLoaded = function () { return this.loaded }, tf.prototype.isDataReady = function () { return this.loaded }, tf.prototype.isAllReady = function () { return !0 }, tf.prototype.isHidden = function () { var A = this.model; return !A.visible && (A.manager.scene.removeGroupByName(A._getWireframeGroupName()), !0) }, tf.prototype.settleData = function (A) {}, tf.prototype.addNodeInfoToOctantMap = function () {}, tf.prototype.applyFilter = function () { console.log('applyFilter :>dfdfdf> '); this.isLoaded() && (this.defaultManager.applyFilter(this.model), vc.Instance && this.instancedManager.applyFilter(this.model)) }, tf.prototype.applySelection = function () { console.log('applySelection14') // debugger; this.isLoaded() && (this.defaultManager.applySelection(this.model), vc.Instance && this.instancedManager.applySelection(this.model)) }, tf.prototype.clearSelection = function () { this.isLoaded() && (this.defaultManager.clearSelection(this.model), vc.Instance && this.instancedManager.clearSelection(this.model)) }, tf.prototype.applyHover = function () { this.isLoaded() && (this.defaultManager.applyHover(this.model), vc.Instance && this.instancedManager.applyHover(this.model)) }, tf.prototype.clearHover = function () { this.isLoaded() && (this.defaultManager.clearHover(this.model), vc.Instance && this.instancedManager.clearHover(this.model)) }, tf.prototype.applyBlink = function () { this.isLoaded() && (this.defaultManager.applyBlink(this.model), vc.Instance && this.instancedManager.applyBlink(this.model)) }, tf.prototype.clearBlink = function () { this.isLoaded() && (this.defaultManager.clearBlink(this.model), vc.Instance && this.instancedManager.clearBlink(this.model)) }, tf.prototype.applyReplacement = function () { this.isLoaded() && (this.defaultManager.applyReplacement(this.model), vc.Instance && this.instancedManager.applyReplacement(this.model)) }, tf.prototype.getMeshesByUserIds = function (A) { if (this.isLoaded()) { var e = this.defaultManager.getMeshesByUserIds(this.model, A), t = []; return vc.Instance && (t = this.instancedManager.getMeshesByUserId(this.model, A)), [].concat(e).concat(t) } }, tf.prototype.rebuildIndicesforLightmap = function () { this.defaultManager.rebuildIndices(this.model) }, tf.prototype.adjustVisibility = function (A) { this.defaultManager.adjustVisibility(this.model, A) }, tf.prototype.changeVisibilityOfSelectedObjects = function (A) { this.defaultManager.changeVisibilityOfSelectedObjects(this.model, A) }, tf.prototype.changeVisibilityOfNonSelectedObjects = function (A) { this.defaultManager.changeVisibilityOfNonSelectedObjects(this.model, A) }, tf.prototype.adjustInstanceVisibility = function (A) { this.instancedManager.adjustVisibility(this.model, A) }, tf.prototype.changeInstanceVisibilityOfSelectedObjects = function (A) { this.instancedManager.changeVisibilityOfSelectedObjects(this.model, A) }, tf.prototype.changeInstanceVisibilityOfNonSelectedObjects = function (A) { this.instancedManager.changeVisibilityOfNonSelectedObjects(this.model, A) }, tf.prototype.restoreVisibilityOfObjects = function () { this.defaultManager.restoreVisibilityOfObjects(), this.instancedManager.restoreVisibilityOfObjects() }, tf.prototype.getBlinkMaterials = function () { var A = [], e = this.model.materialManager.instanceMaterials; for (var t in e) for (var i = e[t], o = 0, n = i.length; n > o; o += 1) A.push(i[o]); return A = A.concat(this.defaultManager.meshManager.getBlinkMaterials()) }, tf.prototype.disposeBufferAfterVbo = function () { this.isLoaded() && (this.defaultManager.disposeBufferAfterVbo(), this.instancedManager.disposeBufferAfterVbo()) }, tf.prototype.getGeometryBuffersByUserId = function (A) { if (!this.isLoaded()) return []; var e = []; return e = (e = e.concat(this.defaultManager.getGeometryBuffersByUserId(this.model, A))).concat(this.instancedManager.getGeometryBuffersByUserId(this.model, A)) }, tf.prototype.unloadComponents = function (A) {}, tf.prototype.explosion = function (A) { this.isLoaded() && (this.defaultManager.explosion(this.model, A), vc.Instance && this.instancedManager.explosion(this.model, A)) }, tf.prototype.closeExplosion = function () { this.isLoaded() && (this.defaultManager.closeExplosion(this.model), vc.Instance && this.instancedManager.closeExplosion(this.model)) }, tf.prototype.componentsExplosion = function (A) { this.isLoaded() && (this.defaultManager.componentsExplosion(this.model, A), vc.Instance && this.instancedManager.componentsExplosion(this.model, A)) }, tf.prototype.closeComponentsExplosion = function (A) { this.isLoaded() && (this.defaultManager.closeComponentsExplosion(this.model, A), vc.Instance && this.instancedManager.closeComponentsExplosion(this.model, A)) }, tf.prototype.isHiddenNode = function (A) { return this.defaultManager.isHiddenNode(A) || this.instancedManager.isHiddenNode(A) }, tf.prototype.moveMeshfromInstancedToDefault = function (A) {}; var of = function (A) { this.manager = A, this.pickingNodeMap = null, this.pickingNodeGroup = null, this.nodeGroupName = "PickingNodeGroup" }; of .prototype.destroy = function () { this.clearData(), this.pickingNodeGroup = null, this.manager = null }, of .prototype.clearData = function () { this.clearAllFromPickingNodeGroup(), this.clearAllFromPickingNodeMap() }, of .prototype.addToPickingNodeMap = function (A, e) { this.pickingNodeMap || (this.pickingNodeMap = {}), this.pickingNodeMap[A] = e, this.addToPickingNodeGroup(e) }, of .prototype.removeFromPickingNodeMap = function (A) { this.pickingNodeMap && this.pickingNodeMap[A] && (this.removeFormPickingNodeGroup(A), this.disposePickingNodeById(A), delete this.pickingNodeMap[A]) }, of .prototype.addToPickingNodeGroup = function (A) { this.pickingNodeGroup || (this.pickingNodeGroup = new Xi, this.pickingNodeGroup.name = this.nodeGroupName); for (var e = 0, t = A.length; t > e; e += 1) this.pickingNodeGroup.add(A[e]) }, of .prototype.removeFormPickingNodeGroup = function (A) { if (this.pickingNodeGroup) for (var e = this.pickingNodeMap[A], t = 0, i = e.length; i > t; t += 1) this.pickingNodeGroup.remove(e[t]) }, of .prototype.disposePickingNodeById = function (A) { for (var e = this.pickingNodeMap[A], t = 0, i = e.length; i > t; t += 1) e[t].material = null, e[t].geometry.dispose(), e[t] = null }, of .prototype.clearAllFromPickingNodeMap = function () { if (this.pickingNodeMap) { for (var A = Object.keys(this.pickingNodeMap), e = 0, t = A.length; t > e; e += 1) this.disposePickingNodeById(A[e]); this.pickingNodeMap = null } }, of .prototype.clearAllFromPickingNodeGroup = function () { this.pickingNodeGroup && (this.pickingNodeGroup.children.length = 0) }, of .prototype.isPickingMeshesGenerated = function () { return !!this.pickingNodeMap }, of .prototype.generatePickingMeshes = function () {}, of .prototype.updatePickingMeshesState = function (A, e, t) {}, of .prototype.resetPickingMeshesState = function () {}, of .prototype.updatePickingMeshes = function (A, e, t) { return this.isPickingMeshesGenerated() || (this.generatePickingMeshes(), this.isPickingMeshesGenerated()) ? (this.resetPickingMeshesState(), this.updatePickingMeshesState(A, e, t), this.getPickingNodeGroup()) : null }, of .prototype.getPickingNodeGroup = function () { return this.pickingNodeGroup }; var nf = function (A) { of .call(this, A), this.nodeGroupName = "PickingBatchedMeshGroup" }; Object.assign(nf.prototype, of .prototype), eu(nf, [{ key: "disposePickingNodeById", value: function (A) { for (var e = this.pickingNodeMap[A], t = 0, i = e.length; i > t; t += 1) e[t]._indicesGroup = null, e[t].material = null, e[t].geometry.dispose(), e[t] = null } }, { key: "generatePickingMeshes", value: function () { for (var A = this.manager, e = Object.keys(A.mapMaterialIdToMergedNode), t = 0, i = e.length; i > t; t += 1) { for (var o = e[t], n = A.getPropertyValueByMaterialKey(o), r = A.mapMaterialIdToMergedNode[o], a = [], s = 0, l = r.length; l > s; s += 1) { var c = r[s], h = c.geometry, d = c.indices, p = c.mesh, g = new he; g.setAttribute("position", h.getAttribute("position")), g.setIndex(h.getIndex()); var u = new("lines" === n.type ? jo : Ue)(g, Kd.DefaultMaterial); p.matrixWorld.decompose(u.position, u.quaternion, u.scale), u.name = o, u.frustumCulled = !1, u.renderOrder = 0, u._indicesGroup = d, a.push(u) } this.addToPickingNodeMap(o, a) } } }, { key: "_rebuildGeometryGroup", value: function (A, e, t) { var i, o = this.manager.manager, n = 0, r = 0, a = 0, s = A._indicesGroup, l = Object.keys(s), c = [], h = {}; e.length > l.length ? (c = l, h = t) : (c = e, h = s); var d = []; for (a = 0, i = c.length; i > a; a += 1) { var p = c[a]; if (o.isPickableNode(p) && h[p]) { var g = s[p]; if (g && g.length > 0) for (n = 0, r = g.length; r > n; n += 1) d.push({ indexStart: g[n].indexStart, indexCount: g[n].indexCount }) } } A.visible = !0; var u = A.geometry; if (u.clearGroups(), 0 !== d.length) for (d.sort((function (A, e) { return A.indexStart - e.indexStart })), n = 0, r = d.length; r > n; n += 1) { var f = d[n].indexStart, m = d[n].indexCount; if (0 === n) u.addGroup(f, m, 0); else f === d[n - 1].indexStart + d[n - 1].indexCount ? u.groups[u.groups.length - 1].count += m : u.addGroup(f, m, 0) } else A.visible = !1 } }, { key: "updatePickingMeshesState", value: function (A, e, t) { for (var i = this.pickingNodeMap, o = Object.keys(i), n = 0, r = o.length; r > n; n += 1) for (var a = i[o[n]], s = 0, l = a.length; l > s; s += 1) a[s].material = [A], a[s].visible = !1, this._rebuildGeometryGroup(a[s], e, t) } }]); var rf = new aA, af = new M, sf = new CA, lf = new cA, cf = function () { jo.call(this), this.type = "LineSegmentsEx" }; cf.prototype.init = function (A) {}, cf.prototype.destroy = function () {}, cf.prototype.intersectBoxWithDistance = function (A, e) { var t = this.geometry, i = this.matrixWorld; return e && (i = this.matrixWorld.clone()).multiplyMatrices(this.matrixWorld, e), t.boundingBox || t.computeBoundingBox(), rf.copy(t.boundingBox), rf.applyMatrix4(i), A.ray.intersectBoxWithDistance(rf) }, cf.prototype.intersectBoxWithDistanceByIndices = function (A, e) { var t = this.geometry.attributes.position.array, i = 0, o = t.length; e && e.indexCount > 0 && (i = e.positionStart, o = e.positionStart + e.positionCount); var n = uh.box3FromArrayRange(t, i, o); return n.applyMatrix4(this.matrixWorld), A.ray.intersectBoxWithDistance(n) }, cf.prototype.raycastByIndices = function (A, e, t, i) { var o = A.linePrecision; A.linePrecision = vc.LineSelectRange || 5; var n = A.linePrecision, r = n * n, a = null; i ? (a = this.matrixWorld.clone()).multiplyMatrices(this.matrixWorld, i) : a = this.matrixWorld; var s = this.geometry; if (null === s.boundingSphere && s.computeBoundingSphere(), lf.copy(s.boundingSphere), lf.applyMatrix4(a), !1 !== A.ray.intersectsSphere(lf)) { af.getInverse(a), sf.copy(A.ray).applyMatrix4(af); var l = new y, c = new y, h = new y, d = new y, p = s.attributes.position.array, g = s.index.array, u = 0, f = g.length; t && t.indexCount > 0 && (u = t.indexStart, f = t.indexStart + t.indexCount); for (var m = u; f - 1 > m; m += 2) { var C = g[m + 1]; if (l.fromArray(p, 3 * g[m]), c.fromArray(p, 3 * C), r >= sf.distanceSqToSegment(l, c, d, h)) { d.applyMatrix4(a); var v = A.ray.origin.distanceTo(d); A.near > v || v > A.far || e.push({ distance: v, point: h.clone().applyMatrix4(a), index: m, face: null, faceIndex: null, object: this }) } } A.linePrecision = o } }; var hf = new M, df = new CA, pf = new cA, gf = new y, uf = new y, ff = new y, mf = new y, Cf = new y, yf = new y, vf = new y, If = new y, Ef = new y, Bf = new s, xf = new s, Sf = new s, wf = new y, Mf = new y; function bf(A, e, t, i, o, n, r, a) { if (null === (Array.isArray(e) ? i.intersectTriangle(o, n, r, !1, a) : 1 === e.side ? i.intersectTriangle(r, n, o, !0, a) : i.intersectTriangle(o, n, r, 2 !== e.side, a))) return null; Mf.copy(a), Mf.applyMatrix4(A.matrixWorld); var s = t.ray.origin.distanceTo(Mf); return t.near > s || s > t.far ? null : { distance: s, point: Mf.clone(), object: A } } function Uf(A, e, t, i, o, n, r, a, l, c, h, d) { gf.fromBufferAttribute(o, c), uf.fromBufferAttribute(o, h), ff.fromBufferAttribute(o, d); var p = A.morphTargetInfluences; if (e.morphTargets && n && p) { vf.set(0, 0, 0), If.set(0, 0, 0), Ef.set(0, 0, 0); for (var g = 0, u = n.length; u > g; g += 1) { var f = p[g], m = n[g]; 0 !== f && (mf.fromBufferAttribute(m, c), Cf.fromBufferAttribute(m, h), yf.fromBufferAttribute(m, d), r ? (vf.addScaledVector(mf, f), If.addScaledVector(Cf, f), Ef.addScaledVector(yf, f)) : (vf.addScaledVector(mf.sub(gf), f), If.addScaledVector(Cf.sub(uf), f), Ef.addScaledVector(yf.sub(ff), f))) } gf.add(vf), uf.add(If), ff.add(Ef) } var C = bf(A, e, t, i, gf, uf, ff, wf); if (C) { a && (Bf.fromBufferAttribute(a, c), xf.fromBufferAttribute(a, h), Sf.fromBufferAttribute(a, d), C.uv = RA.getUV(wf, gf, uf, ff, Bf, xf, Sf, new s)), l && (Bf.fromBufferAttribute(l, c), xf.fromBufferAttribute(l, h), Sf.fromBufferAttribute(l, d), C.uv2 = RA.getUV(wf, gf, uf, ff, Bf, xf, Sf, new s)); var y = new GA(c, h, d); RA.getNormal(gf, uf, ff, y.normal), C.face = y } return C } var Ff, Kf = function (A, e) { Ue.call(this), this.type = "MeshEx", this.matrixAutoUpdate = !1, this.active = !1, this.guid = "", this.key = "", this.typeEx = "", this.geometry = A || Tu.EmptyGeometry, this.material = e || Kd.DefaultMaterial, this.visible = !1, this.pickable = !0 }; (Kf.prototype = Object.create(Ue.prototype)).constructor = Kf, Kf.prototype.init = function (A) { A && A.parent && A.parent.add(this) }, Kf.prototype.destroy = function () { this.parent && this.parent.remove(this), this.userData && (this.userData = null), this.geometry = null, this.material = null }, Kf.prototype.isVisible = function () { return this.visible && this.active }, Kf.prototype.spawn = function (A) { void 0 !== A.guid && (this.guid = A.guid), void 0 !== A.key && (this.key = A.key), void 0 !== A.name && (this.name = A.name), void 0 !== A.typeEx && (this.typeEx = A.typeEx), A.geometry && (this.geometry = A.geometry), A.material && (this.material = A.material), A.matrix ? (this.matrix.copy(A.matrix), this.updateMatrixWorld(!0)) : (this.matrix.identity(), this.updateMatrixWorld(!0)), this.modelKey = A.modelKey ? A.modelKey : "", A.userData ? this.userData = A.userData : this.userData && (this.userData = null), void 0 !== A.visible && (this.visible = A.visible), void 0 !== A.isMesh && (this.isMesh = A.isMesh), void 0 !== A.isLine && (this.isLine = A.isLine), void 0 !== A.isLineSegments && (this.isLineSegments = A.isLineSegments), this.pickable = void 0 === A.pickable || A.pickable, this.renderOrder = A.renderOrder || 0, this.active = !0, this.visible = !0, this.frustumCulled = !1, this.matChange = !1 }, Kf.prototype.clear = function () { this.geometry = Tu.EmptyGeometry, this.material = Kd.DefaultMaterial, this.active = !1, this.visible = !0, this.guid = "", this.key = "", this.typeEx = "", this.frustumCulled = !0, this.material.visible = !1 }, Kf.prototype.intersectBoxWithDistance = (Ff = new aA, function (A, e) { var t = this.geometry, i = this.material, o = this.matrixWorld; return e && (o = new M).multiplyMatrices(this.matrixWorld, e), void 0 === i ? -1 : (t.boundingBox || t.computeBoundingBox(), Ff.copy(t.boundingBox), Ff.applyMatrix4(o), A.ray.intersectBoxWithDistance(Ff)) } ), Kf.prototype.intersectBoxWithDistanceByIndices = function (A, e) { var t = this.matrixWorld, i = this.computeBoundingBox(e); return i.applyMatrix4(t), A.ray.intersectBoxWithDistance(i) }, Kf.prototype.intersectBoxWithClipPlane = function (A, e) { var t = this.matrixWorld, i = this.computeBoundingBox(e); return i.applyMatrix4(t), i.intersectsPlane(A) }, Kf.prototype.getIntersectionPoints = function (A, e, t, i) { var o = new M; o.getInverse(this.matrixWorld); var n = A.clone(); n.constant *= -1, n = n.applyMatrix4(o); function r(A, e) { var i = e.intersectLine(A); i && t.push(i.x, i.y, i.z) } for (var a, s, l, c = this.geometry.getIndex().array, h = this.geometry.getAttribute("position").array, d = i ? 0 : e.indexStart, p = i ? c.length : e.indexStart + e.indexCount, g = new y, u = new y, f = new y, m = new Hs, C = new Hs, v = new Hs, I = d, E = p; E > I; I += 3) s = 3 * c[I + 1], l = 3 * c[I + 2], g.set(h[a = 3 * c[I]], h[a + 1], h[a + 2]), u.set(h[s], h[s + 1], h[s + 2]), f.set(h[l], h[l + 1], h[l + 2]), i && (g.applyMatrix4(e.matrix), u.applyMatrix4(e.matrix), f.applyMatrix4(e.matrix)), m.set(g, u), C.set(u, f), v.set(f, g), r(m, n), r(C, n), r(v, n) }, Kf.prototype.raycastByIndices = function () { var A = new M, e = new CA, t = new cA, i = new y, o = new y, n = new y, r = new s, a = new s, l = new s, c = new y, h = new y, d = new y, p = new M; function g(A, e, t, s, g, u, f, m) { i.fromBufferAttribute(s, u), o.fromBufferAttribute(s, f), n.fromBufferAttribute(s, m); var C = function (A, e, t, i, o, n, r) { var a = A.material; if (null === (Array.isArray(a) ? t.intersectTriangle(i, o, n, !1, r) : 1 === a.side ? t.intersectTriangle(n, o, i, !0, r) : t.intersectTriangle(i, o, n, 2 !== a.side, r))) return null; d.copy(r), d.applyMatrix4(p); var s = e.ray.origin.distanceTo(d); return e.near > s || s > e.far ? null : { distance: s, point: d.clone(), object: A } }(A, e, t, i, o, n, h); if (C) { if (g && g.array && g.array.length && (r.fromBufferAttribute(g, u), a.fromBufferAttribute(g, f), l.fromBufferAttribute(g, m), C.uv = function (A, e, t, i, o, n, r) { return RA.getBarycoord(A, e, t, i, c), o.multiplyScalar(c.x), n.multiplyScalar(c.y), r.multiplyScalar(c.z), o.add(n).add(r), o.clone() }(h, i, o, n, r, a, l)), s.instanceMatrix) { var v = i.clone().applyMatrix4(s.instanceMatrix), I = o.clone().applyMatrix4(s.instanceMatrix), E = n.clone().applyMatrix4(s.instanceMatrix); C.face = new GA(u, f, m, RA.getNormal(v, I, E, new y)) } else C.face = new GA(u, f, m, RA.getNormal(i, o, n, new y)); C.faceIndex = u } return C } return function (i, o, n, r) { var a = this.geometry, s = this.material; if (r) { a = this.geometry, s = this.material; if ((p = new M).multiplyMatrices(this.matrixWorld, r), void 0 === s) return; if (null === a.boundingSphere && a.computeBoundingSphere(), t.copy(a.boundingSphere), t.applyMatrix4(p), !1 === i.ray.intersectsSphere(t)) return; if (A.getInverse(p), e.copy(i.ray).applyMatrix4(A), null !== a.boundingBox && !1 === e.intersectsBox(a.boundingBox)) return; var l = null, c = null, h = null, d = null, u = a.index; (I = a.attributes.position).instanceMatrix = r; var f = a.attributes.uv, m = null, C = null; if (null !== u) for (m = 0, C = u.count; C > m; m += 3) c = u.getX(m), h = u.getX(m + 1), d = u.getX(m + 2), (l = g(this, i, e, I, f, c, h, d)) && (l.faceIndex = Math.floor(m / 3), o.push(l)); else for (m = 0, C = I.count; C > m; m += 3) (l = g(this, i, e, I, f, c = m, h = m + 1, d = m + 2)) && (l.index = c, o.push(l)) } else { if (p = this.matrixWorld, void 0 === s) return; if (t.copy(this.computeBoundingSphere(n)), t.applyMatrix4(p), !1 === i.ray.intersectsSphere(t)) return; A.getInverse(p), e.copy(i.ray).applyMatrix4(A); var y = this.computeBoundingBox(n); if (!1 === e.intersectsBox(y)) return; l = null, c = null, h = null, d = null; var v, I = a.attributes.position, E = (f = a.attributes.uv, m = null, n.indexStart), B = n.indexStart + n.indexCount, x = a.getIndex().array; for (m = E, v = B; v > m; m += 3) (l = g(this, i, e, I, f, c = x[m], h = x[m + 1], d = x[m + 2])) && (l.faceIndex = Math.floor(m / 3), o.push(l)) } } }(), Kf.prototype.raycastByIndices2 = function () { var A = new M, e = new CA, t = new cA, i = new y, o = new y, n = new y, r = new s, a = new s, l = new s, c = new y, h = new y, d = new y, p = new M; function g(A, e, t, s, g, u, f, m) { i.fromBufferAttribute(s, u), o.fromBufferAttribute(s, f), n.fromBufferAttribute(s, m); var C = function (A, e, t, i, o, n, r) { var a = A.material; if (null === (a instanceof Array ? t.intersectTriangle(i, o, n, !1, r) : 1 === a.side ? t.intersectTriangle(n, o, i, !0, r) : t.intersectTriangle(i, o, n, 2 !== a.side, r))) return null; d.copy(r), d.applyMatrix4(p); var s = e.ray.origin.distanceTo(d); return e.near > s || s > e.far ? null : { distance: s, point: d.clone(), object: A } }(A, e, t, i, o, n, h); if (C) { if (g && g.array && g.array.length && (r.fromBufferAttribute(g, u), a.fromBufferAttribute(g, f), l.fromBufferAttribute(g, m), C.uv = function (A, e, t, i, o, n, r) { return RA.barycoordFromPoint(A, e, t, i, c), o.multiplyScalar(c.x), n.multiplyScalar(c.y), r.multiplyScalar(c.z), o.add(n).add(r), o.clone() }(h, i, o, n, r, a, l)), s.instanceMatrix) { var y = i.clone().applyMatrix4(s.instanceMatrix), v = o.clone().applyMatrix4(s.instanceMatrix), I = n.clone().applyMatrix4(s.instanceMatrix); C.face = new GA(u, f, m, RA.normal(y, v, I)) } else C.face = new GA(u, f, m, RA.normal(i, o, n)); C.faceIndex = u } return C } return function (i, o, n, r) { var a = this.geometry, s = this.material; if (r = !!r, n.isInstanced) { if (void 0 === n.matrix) return; if (p.multiplyMatrices(this.matrixWorld, n.matrix), void 0 === s) return; if (r && (null === a.boundingSphere && a.computeBoundingSphere(), t.copy(a.boundingSphere), t.applyMatrix4(p), !1 === i.ray.intersectsSphere(t))) return; if (A.getInverse(p), e.copy(i.ray).applyMatrix4(A), r && null !== a.boundingBox && !1 === e.intersectsBox(a.boundingBox)) return; var l = a.index; (I = a.attributes.position).instanceMatrix = n.matrix; var c, h = a.attributes.uv; if (null !== l) for (y = 0, c = l.count; c > y; y += 3) f = l.getX(y), m = l.getX(y + 1), C = l.getX(y + 2), (u = g(this, i, e, I, h, f, m, C)) && (u.faceIndex = Math.floor(y / 3), o.push(u)); else for (y = 0, c = I.count; c > y; y += 3) (u = g(this, i, e, I, h, f = y, m = y + 1, C = y + 2)) && (u.index = f, o.push(u)) } else if (n.matrix ? p.multiplyMatrices(this.matrixWorld, n.matrix) : p = this.matrixWorld, void 0 !== s && (!r || (t.copy(this.computeBoundingSphere(n)), t.applyMatrix4(p), !1 !== i.ray.intersectsSphere(t)))) { if (A.getInverse(p), e.copy(i.ray).applyMatrix4(A), r) { var d = this.computeBoundingBox(n); if (!1 === e.intersectsBox(d)) return } var u, f, m, C, y, v, I = a.attributes.position, E = (h = a.attributes.uv, n.indexStart), B = n.indexStart + n.indexCount, x = a.getIndex().array; for (y = E, v = B; v > y; y += 3) (u = g(this, i, e, I, h, f = x[y], m = x[y + 1], C = x[y + 2])) && (u.faceIndex = Math.floor(y / 3), o.push(u)) } } }(), Kf.prototype.computeBoundingBox = function (A) { var e = new aA, t = this.geometry.attributes.position.array, i = null, o = null; return A ? (i = A.positionStart, o = A.positionStart + A.positionCount) : (i = 0, o = t.length), this.setBoundingBoxFromArray(e, t, i, o), e }, Kf.prototype.computeBoundingSphere = function (A) { var e = new aA, t = new y, i = this.geometry.attributes.position.array, o = null, n = null; A ? (o = A.positionStart, n = A.positionStart + A.positionCount) : (o = 0, n = i.length); var r = new cA, a = r.center; this.setBoundingBoxFromArray(e, i, o, n), e.getCenter(a); for (var s = 0, l = o, c = n; c > l; l += 3) t.x = i[l], t.y = i[l + 1], t.z = i[l + 2], s = Math.max(s, a.distanceToSquared(t)); return r.radius = Math.sqrt(s), r }, Kf.prototype.setBoundingBoxFromArray = function (A, e, t, i) { for (var o = Number(1 / 0), n = Number(1 / 0), r = Number(1 / 0), a = -1 / 0, s = -1 / 0, l = -1 / 0, c = t, h = i; h > c; c += 3) { var d = e[c], p = e[c + 1], g = e[c + 2]; o > d && (o = d), n > p && (n = p), r > g && (r = g), d > a && (a = d), p > s && (s = p), g > l && (l = g) } A.min.set(o, n, r), A.max.set(a, s, l) }, Kf.prototype.raycast = function (A, e) { var t = this.geometry, i = this.material, o = this.matrixWorld; if (void 0 !== i && (null === t.boundingSphere && t.computeBoundingSphere(), pf.copy(t.boundingSphere), pf.applyMatrix4(o), !1 !== A.ray.intersectsSphere(pf) && (hf.getInverse(o), df.copy(A.ray).applyMatrix4(hf), null === t.boundingBox || !1 !== df.intersectsBox(t.boundingBox)))) { var n = null; if (t.isBufferGeometry) { var r = null, a = null, l = null, c = t.index, h = t.attributes.position, d = t.morphAttributes.position, p = t.morphTargetsRelative, g = t.attributes.uv, u = t.attributes.uv2, f = t.groups, m = t.drawRange, C = null, y = null, v = null, I = null, E = null, B = null; if (null !== c) if (Array.isArray(i)) { for (C = 0, v = f.length; v > C; C += 1) if (B = i[(E = f[C]).materialIndex]) for (y = Math.max(E.start, m.start), I = Math.min(E.start + E.count, m.start + m.count); I > y; y += 3) r = c.getX(y), a = c.getX(y + 1), l = c.getX(y + 2), (n = Uf(this, B, A, df, h, d, p, g, u, r, a, l)) && (n.faceIndex = Math.floor(y / 3), n.face.materialIndex = E.materialIndex, e.push(n)) } else for (C = Math.max(0, m.start), v = Math.min(c.count, m.start + m.count); v > C; C += 3) r = c.getX(C), a = c.getX(C + 1), l = c.getX(C + 2), (n = Uf(this, i, A, df, h, d, p, g, u, r, a, l)) && (n.faceIndex = Math.floor(C / 3), e.push(n)); else if (void 0 !== h) if (Array.isArray(i)) { for (C = 0, v = f.length; v > C; C += 1) if (B = i[(E = f[C]).materialIndex]) for (y = Math.max(E.start, m.start), I = Math.min(E.start + E.count, m.start + m.count); I > y; y += 3) (n = Uf(this, B, A, df, h, d, p, g, u, r = y, a = y + 1, l = y + 2)) && (n.faceIndex = Math.floor(y / 3), n.face.materialIndex = E.materialIndex, e.push(n)) } else for (C = Math.max(0, m.start), v = Math.min(h.count, m.start + m.count); v > C; C += 3) (n = Uf(this, i, A, df, h, d, p, g, u, r = C, a = C + 1, l = C + 2)) && (n.faceIndex = Math.floor(C / 3), e.push(n)) } else if (t.isGeometry) { var x = null, S = null, w = null, M = Array.isArray(i), b = t.vertices, U = t.faces, F = null, K = t.faceVertexUvs[0]; K.length > 0 && (F = K); for (var Q = 0, R = U.length; R > Q; Q += 1) { var T = U[Q], k = M ? i[T.materialIndex] : i; if (void 0 !== k && (n = bf(this, k, A, df, x = b[T.a], S = b[T.b], w = b[T.c], wf))) { if (F && F[Q]) { var D = F[Q]; Bf.copy(D[0]), xf.copy(D[1]), Sf.copy(D[2]), n.uv = RA.getUV(wf, x, S, w, Bf, xf, Sf, new s) } n.face = T, n.faceIndex = Q, e.push(n) } } } } }; var Qf = function (A, e) { this.model = e, this.loader = A, this.mapNodeInfoByCategory = {}, this.mapNodeInfoByUserId = {}, this.mapNodeInfoByComponentId = {}, this.referencedMeshCache = {}, this.nodeInfosOnGeometryId = null, this.componentCount = 0, this.meshCache = {}, this.allBones = {} }; Qf.EnumNodeItemType = { SYMBOL: 0, MESH: 1, TUBE: 2, PIPE: 3, BOX: 4, BOX_M: 5, PIPE_M: 6, MESH_REF: 7, LINE: 8 }, Qf.NodeInfoCategory = { INSTANCED: 0, STANDARD: 1 }, Qf.EnumDataType = { NONE: 0, MERGE_DATA: 1, LAYER: 2, LAYER_SCENE: 3, ANIMATION: 4 }, Qf.EnumKeyframeTrackType = { position: "position", scale: "scale", quaternion: "quaternion", weights: "weights" }, Qf.prototype.destroy = function () { this.mapNodeInfoByCategory = null, this.mapNodeInfoByUserId = null, this.mapNodeInfoByComponentId = null, this.referencedMeshCache = null, this.nodeInfosOnGeometryId = null }, Qf.prototype.clearReferencedMeshCache = function () { if (!vc.DEBUG) { for (var A in this.referencedMeshCache) delete this.referencedMeshCache[A]; this.referencedMeshCache = null } }, Qf.prototype.cacheReferencedMeshBufferData = function (A, e) { this.referencedMeshCache.geometries || (this.referencedMeshCache.geometries = {}), this.referencedMeshCache.geometries[A] = e }, Qf.prototype.cacheReferencedMeshBoneBufferData = function (A, e) { this.referencedMeshCache.bones || (this.referencedMeshCache.bones = {}), this.referencedMeshCache.bones[A] = e }, Qf.prototype.cacheReferencedMeshClipsData = function (A) { this.referencedMeshCache.clips = A }, Qf.prototype.cacheReferencedMeshNodesData = function (A) { this.referencedMeshCache.nodes = A }, Qf.prototype.cacheReferencedMeshComponentData = function (A, e) { this.referencedMeshCache.components || (this.referencedMeshCache.components = {}), this.referencedMeshCache.components[A] = e }, Qf.prototype.cacheReferencedMeshMaterialData = function (A, e) { this.referencedMeshCache.materials || (this.referencedMeshCache.materials = {}), this.referencedMeshCache.materials[A] = e }, Qf.prototype.getReferencedMeshBufferData = function () { return this.referencedMeshCache.geometries }, Qf.prototype.getReferencedMeshBufferById = function (A) { return this.referencedMeshCache.geometries ? this.referencedMeshCache.geometries[A] : null }, Qf.prototype.cacheReferencedMeshMpkIds = function (A, e) { this.referencedMeshCache.mpkIds || (this.referencedMeshCache.mpkIds = {}), this.referencedMeshCache.mpkIds[A] || (this.referencedMeshCache.mpkIds[A] = []), this.referencedMeshCache.mpkIds[A].push(e) }, Qf.prototype.clearReferencedMeshCacheByMpkIdxs = function (A, e) { if (this.referencedMeshCache.mpkIds) for (var t = 0, i = A.length; i > t; t += 1) { var o = A[t], n = this.referencedMeshCache.mpkIds[o]; if (n) { for (var r = 0, a = n.length; a > r; r += 1) e && e(n[r]), delete this.referencedMeshCache[n[r]]; delete this.referencedMeshCache.mpkIds[o] } } }, Qf.prototype.parseItemData = function (A, e) { (op(A.dataVersion, "1.0") || void 0 === A.dataVersion) && (Bh.time("升级几何结构"), this._updateV1ToV2(A), A.dataVersion = "2.0", Bh.timeEnd("升级几何结构")), this._readMaterialBuffer222(A), A.hasAnimation && vc.EnableAnimation ? (this._parseClips(), this._parseBones()) : (this._parseGeo(), this._parseInstanced()); var t = this.loader.getSceneReaderArray(); if (!t) return Bh.log("Empty scene"), !1; var i = this.referencedMeshCache; if (Bh.time("_readItemData"), !i.geometries || 0 >= Object.keys(i.geometries).length) return !0; if (e) for (var o = 0, n = e.length; n > o; o += 1) i.components[e[o]] && this._readItemData(t, e[o], e[o], void 0, 0); else for (var r in i.components) this._readItemData(t, r, r, void 0, 0); return A.hasAnimation && vc.EnableAnimation && this._parseNodes(), Bh.timeEnd("_readItemData"), t = null, !0 }, Qf.prototype._readItemData = function (A, e, t) { var i = this.referencedMeshCache.components[e]; void 0 !== i && -1 !== i.geoId && (this.model.merged ? this._readMeshInfo(A, t, i, null) : this._readMeshInfo2(A, t, i, null)) }, Qf.prototype._readSymbolInfo = function (A, e, t) { var i = this.loader.getSymbolReader(); if (i) { var o = i.header.symbolCount, n = t.toData, r = A.getMatrixInfo(t.matrixId).matrix.clone(), a = { matrix: r, ItemId: t.ItemId, originalId: t.originalId, userDataId: t.userDataId, materialId: t.materialId }; if (n >= 0 && o > n) for (var s = i.getSymbolInfo(n), l = s.itemIndex; s.itemCount > l; l += 1) { var c = i.getItemInfo(l); c.type !== Qf.EnumNodeItemType.SYMBOL && this._readMeshInfo(i, e, c, a) } r = null, a = null, i = null } }, Qf.prototype._readMeshInfo = function (A, e, t, i) { var o = this.loader, n = this.model.materialManager.materials, r = null, a = null, s = null; if (null === i ? (r = t.userDataId, a = t.originalId, s = t.materialId || t.matId) : (r = i.userDataId, a = i.originalId, s = i.materialId > -1 ? i.materialId : t.materialId), t.materials || (t.materials = []), t.materials.length > 0) for (var l = 0; t.materials.length > l; l += 1) { var c = null; if (c = this._getMeshNodeAttr(A, t, t.materials.length > 1, l), !n[s = t.materials[l]]) { var h = _u[t.type] ? _u[t.type].color : void 0; h || (Bh.log("Material not found for type: ", t.type), h = _u.DEFAULT.color), h || (Bh.log("Default material not found for type: ", t.type), h = [1, 1, 1, 1]); var d = new LA(h[0], h[1], h[2]), p = s || d.getHexString() + "_" + h[3], g = n[p]; g || (Bh.warn("缺少材质 " + s), g = new xr({ color: d }), 1 > h[3] && (g.transparent = !0, g.opacity = h[3]), g.side = 2, n[p] = g) } if (n[s].aoMap) { var u = this.getReferencedMeshBufferById(c.geometryId); u && (u.uv2 = u.uv) } if (!c) return; var f = o.getUserDataReader(), m = f ? f.getUserData(r) : null, C = t.key; c.type = t.type, c.userId = C, c.name = t.name, c.userDataId = r, c.originalId = a, c.materialId = s, c.originMId = s, c.userData = m, c.categoryId = 0, c.componentId = C, c.familyName = t.familyName, c.familySymbol = t.familySymbol, c.instanceOrNot = !(!vc.Instance || !this.instancedComponent[C]), c.state = Lc.Visible, c.material = null, this._classifyNodeInfo(c), c = null } else { var y = null, v = _u[t.type] ? _u[t.type].color : void 0; v || (Bh.log("Material not found for type: ", t.type), v = _u.DEFAULT.color), v || (Bh.log("Default material not found for type: ", t.type), v = [1, 1, 1, 1]); var I = new LA(v[0], v[1], v[2]), E = I.getHexString() + "_" + v[3], B = n[E]; if (B || (B = new xr({ color: I }), 1 > v[3] && (B.transparent = !0, B.opacity = v[3]), B.side = 2, n[E] = B), t.materials.push(E), y = this._getMeshNodeAttr(A, t, !1, 0), s = t.materials[0], !y) return; var x = t.key; y.type = t.type, y.userId = x, y.name = t.name, y.originalId = a, y.materialId = s, y.originMId = s, y.userData = {}, y.categoryId = 0, y.componentId = x, y.familyName = t.familyName, y.familySymbol = t.familySymbol, y.instanceOrNot = !(!vc.Instance || !this.instancedComponent[x]), y.state = Lc.Visible, y.material = null, this._classifyNodeInfo(y), y = null } }, Qf.prototype._readMeshInfo2 = function (A, e, t, i) { var o = this.loader, n = null, r = null, a = null; null === i ? (n = t.userDataId, r = t.originalId, a = t.materials || t.matId) : (n = i.userDataId, r = i.originalId, a = i.materialId > -1 ? i.materialId : t.materialId); var s = null; if (s = this._getMeshNodeAttr(A, t, !1)) { var l = o.getUserDataReader(), c = l ? l.getUserData(n) : null, h = t.key; s.type = t.type, s.userId = h, s.name = t.name, s.originalId = r, s.materialId = a, s.originMId = a, s.userData = c, s.categoryId = 0, s.componentId = h, s.familyName = t.familyName, s.familySymbol = t.familySymbol, s.state = Lc.Visible, s.material = null, this._classifyNodeInfo(s), s = null } }, Qf.prototype._getMeshNodeAttrOfPipe = function (A, e, t) { var i = A.getMatrixInfo(e.matrixId).matrix.clone(), o = uh.TemporaryMatrix; o.copy(i); var n = A.getGeomPipeInfo(e.toData), r = n.startPt, a = n.endPt, s = new y; s.subVectors(a, r); var l = s.length(); s.normalize(); var c = n.radius; c > 1 || (c = 100); var h = new y(0, 1, 0), d = new y(c, l, c), p = (new f).setFromUnitVectors(h, s), g = r.clone().addScaledVector(s, .5 * l), u = (new M).compose(g, p, d); return i.multiply(u), t && (i.multiplyMatrices(t.matrix, i), o.multiplyMatrices(t.matrix, o)), n = null, { nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_pipe", geometryId: "pipe", boundingBox: e.boundingBox.clone().applyMatrix4(o), matrix: i, finalState: !0 } }, Qf.prototype._getMeshNodeAttrOfTube = function (A, e, t) { var i = this._getMeshNodeAttrOfPipe(A, e, t); return i.nodeId += "_tube", i.geometryId = "tube", i }, Qf.prototype._getMeshNodeAttrOfBox = function (A, e, t) { var i = A.getMatrixInfo(e.matrixId).matrix.clone(), o = uh.TemporaryMatrix; o.copy(i); var n = e.boundingBox, r = n.getSize(), a = n.getCenter(), s = (new M).scale(new y(r.x, r.y, r.z)); return s.setPosition(a), i.multiply(s), t && (i.multiplyMatrices(t.matrix, i), o.multiplyMatrices(t.matrix, o)), { nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_box", geometryId: "box", boundingBox: e.boundingBox.clone().applyMatrix4(o), matrix: i, finalState: !0 } }, Qf.prototype._getMeshNodeAttrOfBoxM = function (A, e, t) { var i = A.getMatrixInfo(e.matrixId).matrix.clone(); return t && i.multiplyMatrices(t.matrix, i), { nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_boxM", geometryId: "boxM", boundingBox: e.boundingBox.clone().applyMatrix4(i), matrix: i, uvArrayBuffer: A.getGeomBoxUvInfo(e.toData), finalState: !0 } }, Qf.prototype._getMeshNodeAttrOfPipeM = function (A, e, t) { var i = A.getMatrixInfo(e.matrixId).matrix.clone(); return t && i.multiplyMatrices(t.matrix, i), { nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_pipeM", geometryId: "pipeM", boundingBox: e.boundingBox.clone().applyMatrix4(i), matrix: i, uvArrayBuffer: A.getGeomPipeUvInfo(e.toData), finalState: !0 } }, Qf.prototype._getMeshNodeAttrOfMeshRef = function (A, e, t) { return { nodeId: "refMesh|" + (t ? t.ItemId + "_" + e.ItemId : e.ItemId), geometryId: e.toData, boundingBox: e.boundingBox.clone(), matrix: A.getMatrixInfo(e.matrixId).matrix.clone(), matrixParent: t ? t.matrix : null, finalState: !1, transformed: !1, shared: !0 } }, Qf.prototype._getMeshNodeAttr = function (A, e, t, i) { var o = new M; o.fromArray(e.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); var n = t ? e.key + "_" + i : e.key, r = t ? e.geoId + "_" + i : e.geoId; if (-1 !== r) { var a = new aA, s = this.getReferencedMeshBufferById(e.geoId); return s && s.position ? (a = Tu.getBoundingBoxByBuffer(s.position)).applyMatrix4(o) : Bh.warn("no position "), { nodeId: n, guid: e.guid, geometryId: r, originalGeometryId: e.geoId, matrix: o, boundingBox: a, model: this.model } } }, Qf.prototype._getLineNodeAttr = function (A, e, t) { var i = null, o = null; return -1 !== e.matrixId ? (o = !1, i = A.getMatrixInfo(e.matrixId).matrix.clone()) : (o = !0, i = new M), { nodeId: t ? "line-" + t.ItemId + "-" + e.ItemId : "line-" + e.ItemId, geometryId: "line-" + e.toData, boundingBox: e.boundingBox.clone(), matrix: i, matrixParent: t ? t.matrix : null, finalState: !1, transformed: o } }, Qf.prototype._classifyNodeInfo = function (A) { this._cacheNodeInfoByComponentId(A), this._cacheNodeInfoByUserId(A), this._cacheNodeInfoByCategory(A) }, Qf.prototype._cacheNodeInfoByComponentId = function (A) { void 0 === this.mapNodeInfoByComponentId[A.componentId] && (this.mapNodeInfoByComponentId[A.componentId] = []), this.mapNodeInfoByComponentId[A.componentId].push(A) }, Qf.prototype._clearNodeInfoCacheWithComponentId = function (A) { if (A) for (var e = 0, t = A.length; t > e; e += 1) delete this.mapNodeInfoByComponentId[A[e]]; else this.mapNodeInfoByComponentId = {} }, Qf.prototype._clearNodeInfoCacheWithUserId = function (A) { if (A) for (var e = 0, t = A.length; t > e; e += 1) delete this.mapNodeInfoByUserId[A[e]]; else this.mapNodeInfoByUserId = {} }, Qf.prototype._clearNodeInfoCacheWithCategory = function (A) { if (A) for (var e = this.mapNodeInfoByCategory[Qf.NodeInfoCategory.INSTANCED], t = this.mapNodeInfoByCategory[Qf.NodeInfoCategory.STANDARD], i = 0, o = A.length; o > i; i += 1) e && delete e[A[i]], t && delete t[A[i]]; else this.mapNodeInfoByCategory = {} }, Qf.prototype.clearNodeInfoCache = function () { this._clearNodeInfoCacheWithComponentId(), this._clearNodeInfoCacheWithUserId(), this._clearNodeInfoCacheWithCategory() }, Qf.prototype.clearNodeInfoCacheByComponentsKey = function (A) { this._clearNodeInfoCacheWithComponentId(A), this._clearNodeInfoCacheWithUserId(A), this._clearNodeInfoCacheWithCategory(A) }, Qf.prototype.getNodeInfosWithComponentId = function () { return this.mapNodeInfoByComponentId }, Qf.prototype.getNodeInfosByComponentId = function (A) { return this.mapNodeInfoByComponentId[A] }, Qf.prototype._cacheNodeInfoByUserId = function (A) { void 0 === this.mapNodeInfoByUserId[A.userId] && (this.mapNodeInfoByUserId[A.userId] = []), this.mapNodeInfoByUserId[A.userId].push(A) }, Qf.prototype.getNodeInfosByUserId = function (A) { return this.mapNodeInfoByUserId[A] }, Qf.prototype.getNodeInfosWithUserId = function () { return this.mapNodeInfoByUserId }, Qf.prototype._cacheNodeInfoByCategory = function (A) { var e = null; void 0 === this.mapNodeInfoByCategory[e = A.instanceOrNot ? Qf.NodeInfoCategory.INSTANCED : Qf.NodeInfoCategory.STANDARD] && (this.mapNodeInfoByCategory[e] = {}), void 0 === this.mapNodeInfoByCategory[e][A.userId] && (this.mapNodeInfoByCategory[e][A.userId] = []), this.mapNodeInfoByCategory[e][A.userId].push(A) }, Qf.prototype.getNodeInfosByCategory = function (A) { return this.mapNodeInfoByCategory[A] }, Qf.prototype.getStandardNodeInfos = function () { return this.getNodeInfosByCategory(Qf.NodeInfoCategory.STANDARD) }, Qf.prototype.getInstancedNodeInfos = function () { return this.getNodeInfosByCategory(Qf.NodeInfoCategory.INSTANCED) }, Qf.prototype.getStandardUserIds = function () { return this.getStandardNodeInfos() ? Object.keys(this.getStandardNodeInfos()) : null }, Qf.prototype.getInstancedUserIds = function () { return this.getInstancedNodeInfos() ? Object.keys(this.getInstancedNodeInfos()) : null }, Qf.prototype.traverseNodeInfos = function (A) { if (A) for (var e in this.mapNodeInfoByComponentId) for (var t = this.mapNodeInfoByComponentId[e], i = 0, o = t.length; o > i; i += 1) A(e, t[i]) }, Qf.prototype.getUserIdsByCategory = function (A, e) { var t = [], i = null; if (i = e === Qf.NodeInfoCategory.INSTANCED ? this.getInstancedNodeInfos() : this.getStandardNodeInfos()) for (var o = 0, n = A.length; n > o; o += 1) i[A[o]] && t.push(A[o]); return t }, Qf.prototype.getInstancedUserIdsByCategory = function (A) { return this.getUserIdsByCategory(A, Qf.NodeInfoCategory.INSTANCED) }, Qf.prototype.getStandardUserIdsByCategory = function (A) { return this.getUserIdsByCategory(A, Qf.NodeInfoCategory.STANDARD) }, Qf.prototype.getNodeInfosOnBMpkGeometryId = function () { return this.nodeInfosOnGeometryId || this.cacheNodeInfosOnGeometryId(), this.nodeInfosOnGeometryId }, Qf.prototype.cacheNodeInfosOnGeometryId = function () { var A = this.getStandardNodeInfos(); for (var e in this.nodeInfosOnGeometryId = {}, A) for (var t = A[e], i = 0, o = t.length; o > i; i += 1) { var n = this.loader.convertToBMpkGeometryId(t[i].geometryId); void 0 !== n && (t[i].geometryId = n), this.nodeInfosOnGeometryId[t[i].geometryId] || (this.nodeInfosOnGeometryId[t[i].geometryId] = []), this.nodeInfosOnGeometryId[t[i].geometryId].push(t[i]) } }, Qf.prototype.updateNodeInfosByIds = function (A) {}, Qf.prototype._isRegularShape = function (A) { var e = A.type === Qf.EnumNodeItemType.TUBE || A.type === Qf.EnumNodeItemType.PIPE || A.type === Qf.EnumNodeItemType.BOX || A.type === Qf.EnumNodeItemType.BOX_M || A.type === Qf.EnumNodeItemType.PIPE_M; return vc.SharedMeshInstanceEnable && (e = e || A.type === Qf.EnumNodeItemType.MESH_REF), e }, Qf.prototype.getOctreeRoots = function (A) { var e = this.loader, t = e.getOctreeRootNodeOuter(); t && A.push(t); var i = e.getOctreeRootNodeInner(); i && A.push(i) }, Qf.prototype.getComponentCount = function () { return this.componentCount }, Qf.prototype._parseInstanced = function () { this.instancedComponent = {}; var A = {}, e = {}, t = this.referencedMeshCache; for (var i in t.components) if (t.components.hasOwnProperty(i)) { var o = t.components[i], n = o.geoId; if (-1 === n) { Bh.debug("实体没有几何"); continue } if (void 0 === A[n] && (A[n] = [], e[n] = {}), A[n].push({ componentId: i }), !o.materials) { o.materials = []; continue } for (var r = 0; o.materials.length > r; r += 1) { var a = o.materials[r]; e[n][a] || (e[n][a] = []), e[n][a].push({ componentId: i, matrix: o.matrix }) } } for (var s in A) if (A.hasOwnProperty(s)) if (1 < A[s].length) for (r = 0; A[s].length > r; r += 1) this.instancedComponent[A[s][r].componentId] = !0; else delete A[s], delete e[s] }, Qf.prototype._parseBones = function () { var A = this.referencedMeshCache; for (var e in A._offsetMatrix || (A._offsetMatrix = {}), A.geometries) { var t = A.geometries[e]; t.position.length !== t.normal.length && (t.normal = t.normal.length === t.index.length ? this._computeVertexNormalsFromFaceNormals(t.normal, t.index, t.position.length) : this._computeVertexNormalsFromIndex(t.index, t.position)); var i = A.bones[e]; if (i) { t.skinIndex = i.skinIndex, t.skinWeight = i.skinWeight; var o = i.name; i.offsetMatrix.length / 16 !== o.length && Bh.debug("bones的name数量与Matrix数量不符!"); for (var n = 0; o.length > n; n += 1) A._offsetMatrix[o[n]] = (new M).fromArray(i.offsetMatrix, 16 * n) } } }, Qf.prototype._parseClips = function () { for (var A = this.referencedMeshCache.clips, e = [], t = 0, i = A.length; i > t; t += 1) { for (var o = [], n = A[t], r = 0, a = n.tracks.length; a > r; r += 1) { var s = n.tracks[r], l = null; switch (s.type) { case Qf.EnumKeyframeTrackType.weights: l = Dr; break; case Qf.EnumKeyframeTrackType.quaternion: l = Nr; break; case Qf.EnumKeyframeTrackType.position: case Qf.EnumKeyframeTrackType.scale: default: l = Vr } if (0 === n.ticksPerSec) { n.ticksPerSec = 1e3; for (var c = 0; s.times.length > c; c += 1) s.times[c] /= n.ticksPerSec } var h = new l(Fs.sanitizeNodeName(s.name) + "." + s.type, s.times, s.values, 2301); o.push(h) } var d = new Gr(void 0 !== n.name ? n.name : "animation_" + t, n.duration / n.ticksPerSec, o); e.push(d) } this.model.animations = e }, Qf.prototype._parseNodes = function () { var A = this.referencedMeshCache; A.allBones = [], A.offsetMatrix = []; var e = function A(e, t) { var i = null; "node" === e.type ? i = new H : "bone" === e.type && (i = new Uo, t.allBones[e.name] = i), i.name = Fs.sanitizeNodeName(e.name), i.matrix.fromArray(e.transformation || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), i.matrix.decompose(i.position, i.quaternion, i.scale); for (var o = 0; e.children.length > o; o += 1) { var n = A(e.children[o], t); n && i.add(n) } for (var r = 0; e.meshes.length > r; r += 1) { var a = e.meshes[r]; t.model._getHandler().defaultManager.meshManager._readBufferInfo(t.model, [t.model.modelKey + "_" + e.meshes[r]]); var s = t.model._getHandler().defaultManager.meshManager._makeSkinMesh(t.model, [t.model.modelKey + "_" + e.meshes[r]], (function (A) {})); t.meshCache[a] = s, s.name = e.name, i.add(s) } return i }(A.nodes, this); for (var t in A.geometries) { var i = this.meshCache[t]; if (i && i.isSkinnedMesh) { for (var o = [], n = [], r = 0; A.bones[t].name.length > r; r += 1) { var a = A.bones[t].name[r], s = A._offsetMatrix[a], l = this.allBones[a]; s && l && (o.push(l), n.push(s)) } var c = new bo(o, n); i.bind(c, i.matrixWorld) } } this.model.nodes = e, this.model.manager.getScene().onBeforeRender = function (A, e, t, i) { e.updateMatrixWorld(!0) }, this.model.group.add(e), (c = new _s(e)).visible = !1, this.model.skeleton = c, this.model.group.add(c), this.model.mixer = new Rs(e), this.model.actions = []; for (var h = 0; this.model.animations.length > h; h += 1) { var d = this.model.mixer.clipAction(this.model.animations[h]); this.model.actions.push(d) } }, Qf.prototype._parseGeo = function () { Bh.time("处理几何:按材质拆分构件"); var A = this.referencedMeshCache; for (var e in A.geometries) { var t = A.geometries[e]; if (t.position.length !== t.normal.length && (t.normal = t.normal.length === t.index.length ? this._computeVertexNormalsFromFaceNormals(t.normal, t.index, t.position.length) : this._computeVertexNormalsFromIndex(t.index, t.position)), void 0 !== t.materialIndex) { for (var i = void 0, o = [], n = null, r = 0; t.materialIndex.length > r; r += 1) { var a = t.materialIndex[r]; a !== n && (n = a, void 0 !== i && (i.count = 3 * r - i.start, o.push(i)), i = { start: 3 * r, materialIndex: n }) } if (void 0 !== i && (i.count = 3 * t.materialIndex.length - i.start, o.push(i)), 1 === o.length) { A.geometries[e + "_" + o[0].materialIndex] = t } else { for (var s = {}, l = 0; o.length > l; l += 1) { var c = o[l]; void 0 === s[c.materialIndex] && (s[c.materialIndex] = { index: [], count: 0 }), s[c.materialIndex].index.push({ start: c.start, count: c.count }), s[c.materialIndex].count += c.count } var h = function () { p = {}, g = s[d]; for (var i = 0, o = new Uint32Array(g.count), n = 0; g.index.length > n; n += 1) { var r = g.index[n], a = t.index.slice(r.start, r.start + r.count); o.set(a, i), i += r.count } u = {}, o.forEach((function (A, e) { u[A] || (u[A] = []), u[A].push(e) })); var l = Object.keys(u).length; f = new Float32Array(3 * l), m = new Float32Array(3 * l), C = new Float32Array(2 * l), y = 0, v = 0; var c = 0; for (var h in u) if (u.hasOwnProperty(h)) { h = Number(h); var I = t.position.slice(3 * h, 3 * h + 3), E = t.normal.slice(3 * h, 3 * h + 3); if (t.uv.length > 0) { var B = t.uv.slice(2 * h, 2 * h + 2); C.set(B, v), v += 2 } f.set(I, y), m.set(E, y), y += 3, u[h].forEach((function (A) { o[A] = c })), c += 1 } p.index = o, p.position = f, p.normal = m, t.uv && t.uv.length > 0 && (p.uv = C), A.geometries[e + "_" + d] = p }; for (var d in s) { var p, g, u, f, m, C, y, v; h() } } } } Bh.timeEnd("处理几何:按材质拆分构件") }, Qf.prototype._computeVertexNormalsFromFaceNormals = function (A, e, t) { for (var i = new Float32Array(t), o = 0, n = 0, r = 0, a = 0, s = 0, l = 0, c = 0; A.length > c; c += 3) s = A[c + 1], l = A[c + 2], n = 3 * e[c + 1], r = 3 * e[c + 2], i[o = 3 * e[c]] = a = A[c], i[o + 1] = s, i[o + 2] = l, i[n] = a, i[n + 1] = s, i[n + 2] = l, i[r] = a, i[r + 1] = s, i[r + 2] = l; return i }, Qf.prototype._computeVertexNormalsFromIndex = function (A, e) { var t = new Float32Array(e.length); if (e) { var i = 0, o = 0, n = 0, r = new y, a = new y, s = new y, l = new y, c = new y; if (A) for (var h = A, d = 0; h.length > d; d += 3) o = 3 * h[d + 1], n = 3 * h[d + 2], r.fromArray(e, i = 3 * h[d]), a.fromArray(e, o), s.fromArray(e, n), l.subVectors(s, a), c.subVectors(r, a), l.cross(c), t[i] += l.x, t[i + 1] += l.y, t[i + 2] += l.z, t[o] += l.x, t[o + 1] += l.y, t[o + 2] += l.z, t[n] += l.x, t[n + 1] += l.y, t[n + 2] += l.z; else for (var p = 0, g = e.length; g > p; p += 9) r.fromArray(e, p), a.fromArray(e, p + 3), s.fromArray(e, p + 6), l.subVectors(s, a), c.subVectors(r, a), l.cross(c), t[p] = l.x, t[p + 1] = l.y, t[p + 2] = l.z, t[p + 3] = l.x, t[p + 4] = l.y, t[p + 5] = l.z, t[p + 6] = l.x, t[p + 7] = l.y, t[p + 8] = l.z } return t }, Qf.prototype._readMaterialBuffer222 = function (A) { var e = A.materialManager, t = e.materials, i = e.textures, o = this.referencedMeshCache.materials; for (var n in o) { var r = o[n]; if (!r) return null; var a = new xr; if (a.name = r.name || n, a.key = n, r.emissive && a.emissive && (1 === r.emissive[0] && 1 === r.emissive[1] && 1 === r.emissive[2] || a.emissive.setRGB(r.emissive[0], r.emissive[1], r.emissive[2])), r.color ? a.color.setRGB(r.color[0], r.color[1], r.color[2]) : a.color.setRGB(.72, .72, .72), r.tint && a.color.setRGB(r.tint[0], r.tint[1], r.tint[2]), r.specular && a.specular && a.specular.setRGB(r.specular[0], r.specular[1], r.specular[2]), r.map) if (void 0 !== r.mapOffsetY && 0 !== r.mapOffsetY || void 0 !== r.mapOffsetX && 0 !== r.mapOfsfetX || void 0 !== r.mapScaleX && 1 !== r.mapScaleX || void 0 !== r.mapScaleY && 1 !== r.mapScaleY || void 0 !== r.mapWAngle && 0 !== r.mapWAngle) { var s = r.mapOffsetX + "_" + r.mapOffsetY + "_" + r.mapScaleX + "_" + r.mapScaleY + "_" + r.mapWAngle + "_" + r.map; if (i[s]) a.map = i[s]; else (g = new d).wrapS = g.wrapT = 1e3, g.image = i[r.map].image ? i[r.map].image : null, g.needsUpdate = !0, g.image && (g.offset.x = r.mapOffsetX ? r.mapOffsetX : 0, g.offset.y = r.mapOffsetY ? r.mapOffsetY : 0, g.repeat.x = r.mapScaleX ? r.mapScaleX : 1, g.repeat.y = r.mapScaleY ? r.mapScaleY : 1, g.rotation = r.mapWAngle ? r.mapWAngle : 0, i[s] = g, a.map = g) } else a.map = i[r.map] ? i[r.map] : null; if (r.aoMap) if (void 0 !== r.aoMapOffsetY && 0 !== r.aoMapOffsetY || void 0 !== r.aoMapOffsetX && 0 !== r.aoMapOfsfetX || void 0 !== r.aoMapScaleX && 1 !== r.aoMapScaleX || void 0 !== r.aoMapScaleY && 1 !== r.aoMapScaleY || void 0 !== r.aoMapWAngle && 0 !== r.aoMapWAngle) { var l = r.aoMapOffsetX + "_" + r.aoMapOffsetY + "_" + r.aoMapScaleX + "_" + r.aoMapScaleY + "_" + r.aoMapWAngle + "_" + r.aoMap; if (i[l]) a.aoMap = i[l]; else (g = new d).wrapS = g.wrapT = 1e3, g.image = i[r.aoMap] && i[r.aoMap].image ? i[r.aoMap].image : null, g.needsUpdate = !0, g.image && (g.offset.x = r.aoMapOffsetX ? r.aoMapOffsetX : 0, g.offset.y = r.aoMapOffsetY ? r.aoMapOffsetY : 0, g.repeat.x = r.aoMapScaleX ? r.aoMapScaleX : 1, g.repeat.y = r.aoMapScaleY ? r.aoMapScaleY : 1, g.rotation = r.aoMapWAngle ? r.aoMapWAngle : 0, i[l] = g, a.aoMap = g) } else a.aoMap = i[r.aoMap] ? i[r.aoMap] : null; if (void 0 !== r.aoMapIntensity && (a.aoMapIntensity = r.aoMapIntensity), r.envMap) if (void 0 !== r.envMapOffsetY && 0 !== r.envMapOffsetY || void 0 !== r.envMapOffsetX && 0 !== r.envMapOfsfetX || void 0 !== r.envMapScaleX && 1 !== r.envMapScaleX || void 0 !== r.envMapScaleY && 1 !== r.envMapScaleY || void 0 !== r.envMapWAngle && 0 !== r.envMapWAngle) { var c = r.envMapOffsetX + "_" + r.envMapOffsetY + "_" + r.envMapScaleX + "_" + r.envMapScaleY + "_" + r.envMapWAngle + "_" + r.envMap; if (i[c]) a.envMap = i[c]; else (g = new d).wrapS = g.wrapT = 1e3, g.image = i[r.envMap].image ? i[r.envMap].image : null, g.needsUpdate = !0, g.image && (g.offset.x = r.envMapOffsetX ? r.envMapOffsetX : 0, g.offset.y = r.envMapOffsetY ? r.envMapOffsetY : 0, g.repeat.x = r.envMapScaleX ? r.envMapScaleX : 1, g.repeat.y = r.envMapScaleY ? r.envMapScaleY : 1, g.rotation = r.envMapWAngle ? r.envMapWAngle : 0, i[c] = g, a.envMap = g) } else a.envMap = i[r.envMap] ? i[r.envMap] : null; if (r.lightMap) if (void 0 !== r.lightMapOffsetY && 0 !== r.lightMapOffsetY || void 0 !== r.lightMapOffsetX && 0 !== r.lightMapOfsfetX || void 0 !== r.lightMapScaleX && 1 !== r.lightMapScaleX || void 0 !== r.lightMapScaleY && 1 !== r.lightMapScaleY || void 0 !== r.lightMapWAngle && 0 !== r.lightMapWAngle) { var h = r.lightMapOffsetX + "_" + r.lightMapOffsetY + "_" + r.lightMapScaleX + "_" + r.lightMapScaleY + "_" + r.lightMapWAngle + "_" + r.lightMap; if (i[h]) a.lightMap = i[h]; else (g = new d).wrapS = g.wrapT = 1e3, g.image = i[r.lightMap].image ? i[r.lightMap].image : null, g.needsUpdate = !0, g.image && (g.offset.x = r.lightMapOffsetX ? r.lightMapOffsetX : 0, g.offset.y = r.lightMapOffsetY ? r.lightMapOffsetY : 0, g.repeat.x = r.lightMapScaleX ? r.lightMapScaleX : 1, g.repeat.y = r.lightMapScaleY ? r.lightMapScaleY : 1, g.rotation = r.lightMapWAngle ? r.lightMapWAngle : 0, i[h] = g, a.lightMap = g) } else a.lightMap = i[r.lightMap] ? i[r.lightMap] : null; if (void 0 !== r.lightMapIntensity && (a.lightMapIntensity = r.lightMapIntensity), r.emissiveMap) if (void 0 !== r.emissiveMapOffsetY && 0 !== r.emissiveMapOffsetY || void 0 !== r.emissiveMapOffsetX && 0 !== r.emissiveMapOfsfetX || void 0 !== r.emissiveMapScaleX && 1 !== r.emissiveMapScaleX || void 0 !== r.emissiveMapScaleY && 1 !== r.emissiveMapScaleY || void 0 !== r.emissiveMapWAngle && 0 !== r.emissiveMapWAngle) { var p = r.emissiveMapOffsetX + "_" + r.emissiveMapOffsetY + "_" + r.emissiveMapScaleX + "_" + r.emissiveMapScaleY + "_" + r.emissiveMapWAngle + "_" + r.emissiveMap; if (i[p]) a.emissiveMap = i[p]; else (g = new d).wrapS = g.wrapT = 1e3, g.image = i[r.emissiveMap].image ? i[r.emissiveMap].image : null, g.needsUpdate = !0, g.image && (g.offset.x = r.emissiveMapOffsetX ? r.emissiveMapOffsetX : 0, g.offset.y = r.emissiveMapOffsetY ? r.emissiveMapOffsetY : 0, g.repeat.x = r.emissiveMapScaleX ? r.emissiveMapScaleX : 1, g.repeat.y = r.emissiveMapScaleY ? r.emissiveMapScaleY : 1, g.rotation = r.emissiveMapWAngle ? r.emissiveMapWAngle : 0, i[p] = g, a.emissiveMap = g) } else a.emissiveMap = i[r.emissiveMap] ? i[r.emissiveMap] : null; if (void 0 !== r.emissiveIntensity && (a.emissiveIntensity = r.emissiveIntensity), r.specularMap) if (void 0 !== r.specularMapOffsetY && 0 !== r.specularMapOffsetY || void 0 !== r.specularMapOffsetX && 0 !== r.specularMapOfsfetX || void 0 !== r.specularMapScaleX && 1 !== r.specularMapScaleX || void 0 !== r.specularMapScaleY && 1 !== r.specularMapScaleY || void 0 !== r.specularMapWAngle && 0 !== r.specularMapWAngle) { var g, u = r.specularMapOffsetX + "_" + r.specularMapOffsetY + "_" + r.specularMapScaleX + "_" + r.specularMapScaleY + "_" + r.specularMapWAngle + "_" + r.specularMap; if (i[u]) a.specularMap = i[u]; else (g = new d).wrapS = g.wrapT = 1e3, g.image = i[r.specularMap].image ? i[r.specularMap].image : null, g.needsUpdate = !0, g.image && (g.offset.x = r.specularMapOffsetX ? r.specularMapOffsetX : 0, g.offset.y = r.specularMapOffsetY ? r.specularMapOffsetY : 0, g.repeat.x = r.specularMapScaleX ? r.specularMapScaleX : 1, g.repeat.y = r.specularMapScaleY ? r.specularMapScaleY : 1, g.rotation = r.specularMapWAngle ? r.specularMapWAngle : 0, i[u] = g, a.specularMap = g) } else a.specularMap = i[r.specularMap] ? i[r.specularMap] : null; void 0 !== r.shininess && (a.shininess = r.shininess), void 0 !== r.opacity && (a.opacity = r.opacity, 1 > r.opacity && (a.transparent = !0), r.opacity > 0 || (a.opacity = .1)), a.side = 2, t[n] = a } }, Qf.prototype._updateV1ToV2 = function (A) { var e = this.referencedMeshCache.components, t = this.referencedMeshCache.geometries, i = this.referencedMeshCache.materials; for (var o in e) if (e.hasOwnProperty(o)) { var n = e[o], r = n.matId, a = t[n.geoId]; if (n.materials) continue; if (n.materials = [], !a) continue; var s = i[r]; if (!s) continue; var l = this._updateMaterialV1ToV2(r, s); if (l) for (var c in a.materialIndex = l.materialIndex, n.materials = l.materialId, l.materials) l.materials.hasOwnProperty(c) && (this.referencedMeshCache.materials[c] = l.materials[c]) } }, Qf.prototype._updateMaterialV1ToV2 = function (A, e) { var t = {}, i = [], o = {}; if (!e) return null; for (var n = e.color, r = e.colorIndex, a = e.texture, s = e.textureIndex, l = 0; n.length > l; l += 4) { var c = {}; c.color = [n[l], n[l + 1], n[l + 2]], c.opacity = Math.floor(100 * n[l + 3]) / 100, c.transparent = 1 > n[l + 3]; var h = (255 * c.color[0] << 16 ^ 255 * c.color[1] << 8 ^ 255 * c.color[2] << 0) + "_" + c.opacity; o[h] = c, i.push(h) } if (0 !== a.length && r.length === s.length) for (var d = -1, p = 0; s.length > p; p += 1) { if (d !== r[p]) if (d = r[p], -1 !== s[p]) o[i[r[p]]].map = a[s[p]] } return t.materials = o, t.materialId = i, t.materialIndex = r, t }, Qf.prototype.addMeshToInfoMap = function (A, e, t, i) { var o = this.getNodeInfosByComponentId(A); Array.isArray(o) && o.forEach((function (A) { A.nodeId === e && (A.mesh = t, A.index = i) })) }; var Rf = function () { this.geometries = {} }; Rf.prototype.dispose = function () { this.disposeGeometries(), this.geometries = {} }, Rf.prototype.destory = function () { this.dispose() }, Rf.prototype.disposeGeometries = function () { for (var A in this.geometries) this.disposeGeometry(A) }, Rf.prototype.disposeGeometry = function (A) { var e = this.geometries[A]; if (e) { if (Array.isArray(e)) for (var t = 0, i = e.length; i > t; t += 1) e[t].dispose(); else e.dispose(); delete this.geometries[A] } }, Rf.prototype._hasGeometry = function (A) { return !!this.geometries[A] }, Rf.prototype._cacheGeometry = function (A, e) { void 0 === this.geometries[A] && (this.geometries[A] = e) }, Rf.prototype.getNodeIdxMapByUserId = function (A) {}, Rf.prototype.getGeometryById = function (A) { return this.geometries[A] }, Rf.prototype.getGeometryByNodeInfo = function (A, e) { return this._hasGeometry(e.geometryId) ? this.getGeometryById(e.geometryId) : this._createGeometryByNodeInfo(A, e) }, Rf.prototype._createGeometryByNodeInfo = function (A, e) { return this._createGeometry(e.type, e.geometryId, A.getModelDescriptor().getReferencedMeshBufferById(e.geometryId)) }, Rf.prototype._createGeometry = function (A, e, t) { if (this._hasGeometry(e)) return this.getGeometryById(e); var i = this._createBufferGeometry(A, t); return i ? (i.key = e, this._cacheGeometry(e, i), i) : null }, Rf.prototype._createBufferGeometry = function (A, e) { var t = Qf.EnumNodeItemType, i = null; switch (1) { case t.MESH: case t.MESH_REF: if (!e) return null; if ((i = new he).setIndex(new YA(e.index, 1)), i.setAttribute("position", new YA(e.position, 3)), e.normal && e.normal.length > 0 ? i.setAttribute("normal", new YA(e.normal, 3)) : i.computeVertexNormals(), e.uv && e.uv.length > 0 && i.setAttribute("uv", new YA(e.uv, 2)), e.uv2 && e.uv2.length > 0 && i.setAttribute("uv2", new YA(e.uv2, 2)), e.skinIndex && e.skinIndex.length > 0 ? i.setAttribute("skinIndex", new YA(e.skinIndex, 4)) : Bh.debug("skinIndex 长度为0"), e.skinWeight && e.skinWeight.length > 0 ? i.setAttribute("skinWeight", new YA(e.skinWeight, 4)) : Bh.debug("skinWeight 长度为0"), void 0 !== e.materialIndex) { for (var o = null, n = [], r = void 0, a = 0; e.materialIndex.length > a; a += 1) { var s = e.materialIndex[a]; s !== r && (r = s, null != o && (o.count = 3 * a - o.start, n.push(o)), o = { start: 3 * a, materialIndex: r }) } null != o && (o.count = 3 * e.materialIndex.length - o.start, n.push(o)), i.groups = n } break; case t.TUBE: case t.PIPE: i = Tu.UnitCylinderInstance; break; case t.BOX: i = Tu.UnitBoxInstance; break; case t.BOX_M: i = Tu.getUnitTextureBox(); break; case t.PIPE_M: i = Tu.getUnitTextureCylinder(); break; case t.LINE: if (!e) return null; (i = new he).setIndex(new YA(e.I, 1)), i.setAttribute("position", new YA(e.P, 3)) } return i }, Rf.prototype.createBufferByBufferDataWithUV2 = function (A, e, t) { var i = this.createBufferByBufferData(e, t); if (!i) return null; if (!A.lightmap) return i; var o = [], n = i.index, r = A.getLoader().getUV2ById(e.itemIdUV2, n.length); r && (e.lightmapIdx = r.lightmapIdx, o = r.uv2); for (var a = i.position, s = i.normal, l = i.uv, c = [], h = [], d = [], p = 0; n.length > p; p += 1) { var g = n[p]; c.push(a[3 * g]), c.push(a[3 * g + 1]), c.push(a[3 * g + 2]), s && (h.push(s[3 * g]), h.push(s[3 * g + 1]), h.push(s[3 * g + 2])), l && (d.push(l[2 * g]), d.push(l[2 * g + 1])), n[p] = p } return a = null, s = null, l = null, i.uv2 = o, i.position = c, i.normal = h, i.uv = d, i }, Rf.prototype.createBufferByBufferData = function (A, e) { this.cachedComponentGeoBuffer || (this.cachedComponentGeoBuffer = {}); var t = null, i = null, o = null, n = null, r = null, a = Qf.EnumNodeItemType, s = null; switch (1) { case a.MESH: case a.MESH_REF: if (!e || !e.buffer) return Bh.debug("缺少几何buffer"), null; var c = e.buffer; if (i = c.index, A.geometryId === A.originalGeometryId ? (t = c.position, o = c.normal, n = c.uv ? c.uv : null, r = c.uv2 ? c.uv2 : null) : (t = Float32Array.from(c.position), o = Float32Array.from(c.normal), n = c.uv ? Float32Array.from(c.uv) : null, r = c.uv2 ? Float32Array.from(c.uv2) : null), c = null, e.indexInfo) { i = i.slice(e.indexInfo.indexStart, e.indexInfo.indexStart + e.indexInfo.indexCount), t = t.slice(e.indexInfo.positionStart, e.indexInfo.positionStart + e.indexInfo.positionCount), o = o.slice(e.indexInfo.positionStart, e.indexInfo.positionStart + e.indexInfo.positionCount), n = n ? n.slice(e.indexInfo.uvStart, e.indexInfo.uvStart + e.indexInfo.uvCount) : null, r = r ? r.slice(e.indexInfo.uvStart, e.indexInfo.uvStart + e.indexInfo.uvCount) : null; var h = e.indexInfo.positionStart / 3; i.forEach((function (A, e, t) { t[e] -= h })) } if (uh.isMirror(A.matrix.elements)) for (var d = 0, p = i.length; p > d; d += 3) { var g = i[d + 1]; i[d + 1] = i[d + 2], i[d + 2] = g } break; case a.BOX: case a.PIPE: s = Tu.UnitCylinderInstance, i = Uint32Array.from(s.index.array), t = Float32Array.from(s.attributes.position.array), o = Float32Array.from(s.attributes.normal.array), s = null; break; case a.TUBE: case a.BOX_M: case a.PIPE_M: s = A.type === a.BOX_M || A.type === a.BOX ? Tu.getBoxMBuffer(A.uvArrayBuffer) : Tu.getPipeMBuffer(A.uvArrayBuffer), i = Uint32Array.from(s.index), t = Float32Array.from(s.vertex), o = Float32Array.from(s.normal), s.uv && (n = Float32Array.from(s.uv), delete s.uv), s = null; break; case a.LINE: if (!e || !e.buffer) return null; if (e.isDataView ? (i = Uint32Array.from(e.buffer.I), t = Float32Array.from(e.buffer.P), o = null, n = null) : (i = new Uint32Array(e.buffer.I), t = new Float32Array(e.buffer.P), o = null, n = null), e.indexInfo) { i = i.slice(e.indexInfo.indexStart, e.indexInfo.indexStart + e.indexInfo.indexCount), t = t.slice(e.indexInfo.positionStart, e.indexInfo.positionStart + e.indexInfo.positionCount); h = e.indexInfo.positionStart / 3; i.forEach((function (A, e, t) { t[e] -= h })) } break; default: Bh.log("error data!") } if (!this.cachedComponentGeoBuffer[A.geometryId] || A.geometryId !== A.originalGeometryId) { var u = A.matrix; if (Tu.applyMatrix4ToBuffer(u, t), o) { var f = new l; f.getNormalMatrix(u), Tu.applyMatrix3ToBuffer(f, o), Tu.normalizeBuffer(o) } this.cachedComponentGeoBuffer[A.geometryId] = !0 } return A.uv = !!n, { index: i, position: t, normal: o, uv: n, uv2: r } }; var Tf = function (A) { return Rf.call(this), this.manager = A, this._maxIndiceseNum = 0, this._materialList = [], this.mapMaterialIdToMergedNode = {}, this.selectedMeshes = [], this.nonSelectedMeshes = [], this.selectedObjectIds = [], this.blinkMaterials = [], this.mapDestroyedBufferKey = {}, this }; function kf(A, e, t, i) { for (var o = A.getAttribute("position").array, n = e; t > n; n += 3) o[n] += i.x, o[n + 1] += i.y, o[n + 2] += i.z; A.getAttribute("position").needsUpdate = !0 } (Tf.prototype = Object.create(Rf.prototype)).destroy = function () { this.dispose(), this.clearData(), this.mapMaterialIdToMergedNode = {}, this.manager = null, this._materialList = [], this.selectedMeshes = [], this.nonSelectedMeshes = [], this.selectedObjectIds = [], this.blinkMaterials = [], this.mapDestroyedBufferKey = {} }, Tf.prototype.clearData = function () { this.bufferDestroyed = !1, this.clearAllNodeBuffer(), this._disposeMergedGeometries() }, Tf.prototype.getMeshesByUserIds = function (A, e) { var t = []; for (var i in this.mapMaterialIdToMergedNode) for (var o = this.mapMaterialIdToMergedNode[i], n = 0, r = o.length; r > n; n += 1) { var a = o[n], s = a.indices[e]; if (s) for (var l = 0, c = s.length; c > l; l += 1) { var h = {}; h.mesh = a.mesh, h.indexInfo = s[l], h.matrix = A.getModelMatrix(), t.push(h) } } return t }, Tf.prototype.rebuildIndices = function (A) { this._materialList.length = 0; var e = vc.EnableLightmap && A.lightmap; this.clearSelectedObjectIds(); var t = this.manager.getFilteredUserIds(), i = this.manager.getSelectedUserIds(), o = this.manager.getHoveredUserIds(), n = this.manager.getBlinkedUserIds(), r = (A.hasReplacedUserId(), A.manager.scene.fillClipPlane && vc.ClippingCaps), a = {}; for (var s in this.mapMaterialIdToMergedNode) { var l, c = this.getPropertyValueByMaterialKey(s).materialId, h = null, d = null, p = null, g = null, u = null, f = null, m = null, C = null, y = null; i && i[c] && (g = i[c]), o && o[c] && (u = o[c]), n && n[c] && (f = n[c]), t && t[c] && (h = t[c][zc.HIDDEN], d = t[c][zc.OVERRIDED], p = t[c][zc.TRANSPARENT]); var v = this.mapMaterialIdToMergedNode[s]; for (y = 0, l = v.length; l > y; y += 1) { var I = v[y], E = I.indices, B = I.geometry; if (B.clearGroups(), B._visible = !0, e) for (var x = A.lightmapNum, S = 0; x > S; S += 1) { var w = "lightmap|" + S; - 1 === this._materialList.indexOf(w) && this._materialList.push(w) } if (g || h || d || u || p || vc.EnableLightmap || r || f) { var M = []; for (var b in E) if (E.hasOwnProperty(b)) { if (h && h[b]) continue; var U = E[b]; if (U && U.length > 0) { if (U.sort((function (A, e) { return A.indexStart - e.indexStart })), p && p[b]) { for (m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.TRANSPARENT }); continue } if (A.manager.isSelectPriority()) { if (g && g[b]) { if (this.cacheSelectedObjectIds(b, s, y), vc.PickingEffect) { if (d && d[b]) { var F = d[b], K = this._materialList.indexOf(F); for (-1 === K && (this._materialList.push(F), K = this._materialList.length - 1), m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.OVERRIDED + K }); continue } for (m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.NONE }); continue } for (m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.SELECTED }); continue } if (f && f[b]) { if (d && d[b]) { var Q = "blink|" + d[b], R = this._materialList.indexOf(Q); for (-1 === R && (this._materialList.push(Q), R = this._materialList.length - 1), m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.OVERRIDED + R }); continue } for (m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.BLINK }); continue } } else { if (f && f[b]) { if (d && d[b]) { var T = "blink|" + d[b], k = this._materialList.indexOf(T); for (-1 === k && (this._materialList.push(T), k = this._materialList.length - 1), m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.OVERRIDED + k }); continue } for (m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.BLINK }); continue } if (g && g[b]) { if (this.cacheSelectedObjectIds(b, s, y), vc.PickingEffect) { if (d && d[b]) { var D = d[b], L = this._materialList.indexOf(D); for (-1 === L && (this._materialList.push(D), L = this._materialList.length - 1), m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.OVERRIDED + L }); continue } for (m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.NONE }); continue } for (m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.SELECTED }); continue } } if (p && p[b]) { for (m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.TRANSPARENT }); continue } if (u && u[b]) { if (d && d[b]) { var N = this._materialList.indexOf(O = "hover|" + d[b]); for (-1 === N && (this._materialList.push(O), N = this._materialList.length - 1), m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.OVERRIDED + N }); continue } for (m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.HOVER }); continue } if (d && d[b]) { var O, V = this._materialList.indexOf(O = d[b]); for (-1 === V && (this._materialList.push(O), V = this._materialList.length - 1), m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.OVERRIDED + V }); continue } if (r && a[b]) { for (m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.CLIPPING }); continue } if (vc.EnableLightmap) for (m = 0, C = U.length; C > m; m += 1) { var G = this._materialList.indexOf("lightmap|" + U[m].lightmapIdx); M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: zc.OVERRIDED + G }) } else for (m = 0, C = U.length; C > m; m += 1) M.push({ indexStart: U[m].indexStart, indexCount: U[m].indexCount, state: 0 }) } } if (M.length > 0) for (M.sort((function (A, e) { return A.state === e.state ? A.indexStart - e.indexStart : A.state - e.state })), m = 0, C = M.length; C > m; m += 1) { var P = M[m].indexStart, q = M[m].indexCount, j = M[m].state; if (0 === m) B.addGroup(P, q, j); else j === M[m - 1].state && P === M[m - 1].indexStart + M[m - 1].indexCount ? B.groups[B.groups.length - 1].count += q : B.addGroup(P, q, j) } else B._visible = !1 } } } }, Tf.prototype.update = function (A, e) { var t = A.manager.filter, i = A.materialManager.materials, o = A.selectedMaterial, n = A.manager.sceneState, r = null, a = null, s = null, l = null, c = null, h = null, d = vc.EnableLightmap && A.lightmap; if (A.isOnlyWireframe()) for (var p in this.mapMaterialIdToMergedNode) { var g = this.mapMaterialIdToMergedNode[p]; for (s = 0, l = g.length; l > s; s += 1) { var u = g[s].mesh; u && (u.visible = !1) } } else { vc.TranslucentDepthDisabled && (o.depthWrite = !o.transparent); var f = t._getMaterialByName("scene"); vc.TranslucentDepthDisabled && (f.depthWrite = !1); var m = []; this.blinkMaterials.length = 0; var C = {}; if (!d) for (r = 0, a = this._materialList.length; a > r; r += 1) { var y = null, v = this._materialList[r], I = v.split("|"); "hover" === I[0] ? (y = t._getMaterialByName(I[1]), y = n.getHoverMaterial(y)) : "blink" === I[0] ? (y = t._getMaterialByName(I[1]), y = n.getBlinkMaterial(y), C[v] || this.blinkMaterials.push(y)) : y = t._getMaterialByName(v) ? t._getMaterialByName(v) : this.manager.model.materialManager.getMaterialById(v), vc.TranslucentDepthDisabled && (y.depthWrite = !y.transparent), m[r] = y } for (var E in this.mapMaterialIdToMergedNode) { var B = this.getPropertyValueByMaterialKey(E).materialId, x = A.manager.getOverrideMaterialByName(B) || i[B] || Kd.getDefaultStandardMaterial(); if (x) { if (d) for (r = 0, a = this._materialList.length; a > r; r += 1) { var S = null, w = this._materialList[r].split("|"); if ("lightmap" === w[0]) if (vc.IBL) S = x.clone(); else { var M = Kd.getMaterialParameters(x); M.lights = !1, (S = Kd.createStandardMaterial(M)).lightMap = A.materialManager.lightmaps[w[1]], S.lightMapIntensity = vc.LightmapIntensity } vc.TranslucentDepthDisabled && S && (S.depthWrite = !S.transparent), m[r] = S } vc.TranslucentDepthDisabled && (x.depthWrite = !x.transparent); var b = n.getHoverMaterial(i[B]); vc.TranslucentDepthDisabled && (b.depthWrite = !b.transparent); var U = this.mapMaterialIdToMergedNode[E]; for (s = 0, l = U.length; l > s; s += 1) { var F = U[s], K = F.geometry; if (null !== K) { var Q = F.mesh; if (Q) if (K._visible) { if (K.groups.length > 0) { var R = C[B]; R || (R = C[B] = n.getBlinkMaterial(x), this.blinkMaterials.push(R)); var T = [x, o, R, b, f]; for (r = 0, a = m.length; a > r; r += 1) { if (!m[r].createByBos) { if (m[r].materialId !== B && !m[r].mapNodeIdToOrigMatId) continue; if (!Object.keys(m[r].mapNodeIdToOrigMatId).find((function (A) { return m[r].mapNodeIdToOrigMatId[A] === B }))) continue } for (var k in K.attributes.uv || (m[r].map = null), U[s].indices) if (this.manager.mapMaterialIdToUserIdsForFilter[B] && this.manager.mapMaterialIdToUserIdsForFilter[B][zc.OVERRIDED]) for (var D = Object.keys(this.manager.mapMaterialIdToUserIdsForFilter[B][zc.OVERRIDED]), L = 0, N = D.length; N > L; L += 1) k === D[L] && (T[5 + r] = m[r]) } if (e) { var O = []; for (c = 0, h = T.length; h > c; c += 1) O.push(e); T = O } Q.material = T } else Q.material = e || x; Q.visible = !0 } else Q.visible = !1; else Bh.error("没有mesh对象") } } x = null } } } }, Tf.prototype.explode = function (A, e, t) { for (var i in this.mapMaterialIdToMergedNode) for (var o = this.mapMaterialIdToMergedNode[i], n = 0, r = o.length; r > n; n += 1) { var a = o[n], s = a.geometry; if (null !== s) { var l = a.indices; for (var c in l) { var h = A.manager.getComponentInfoByUserId(c).boundingBox, d = uh.computeExplodeTranslation(e, h, t), p = l[c]; if (p) for (var g = 0, u = p.length; u > g; g += 1) { var f = p[g].positionStart; kf(s, f, f + p[g].positionCount, d) } } } } }, Tf.prototype.explosion = function (A, e) { var t = A.getModelDescriptor().getStandardUserIds(); e.componentKey = t, this.componentsExplosion(A, e) }, Tf.prototype.closeExplosion = function (A) { this.explosion(A, {}) }, Tf.prototype.componentsExplosion = function (A, e) { var t = e.coefficientX || 1, i = e.coefficientY || 1, o = e.coefficientZ || 1, n = e.offsetX || 0, r = e.offsetY || 0, a = e.offsetZ || 0, s = null; if (e.center) s = (new y).fromArray(e.center); else if (1 !== t || 1 !== i || 1 !== o || 0 !== n || 0 !== r || 0 !== a) return; var l = Array.isArray(e.componentKey) ? e.componentKey : [e.componentKey], c = new y, h = new aA, d = new y(0, 0, 0), p = new y(0, 0, 0), g = new y, u = new M, m = A.getModelMatrix(); m && s && (u.getInverse(m), s.applyMatrix4(u)); var C = A.manager, v = !1, I = new y, E = new f, B = new y(1, 1, 1); uh.isEmptyObject(A.subModel) || (v = !0); for (var x = 0, S = l.length; S > x; x += 1) { var w = l[x]; if (w) { var b = A.getModelDescriptor().getStandardNodeInfosById(w); if (b) for (var U = 0, F = b.length; F > U; U += 1) { var K = b[U]; if (K) { var Q = this._getMaterialKeyByNodeInfo(K), R = this.mapMaterialIdToMergedNode[Q]; if (R) for (var T = 0, k = R.length; k > T; T += 1) { var D = R[T], L = D.geometry, N = D.mesh; if (L && N) { var O = D.indices; if (O) { var V = O[w]; if (V) { h.copy(K.boundingBox), h.getCenter(c), K.userData || (K.userData = {}), d.set(0, 0, 0), p.set(0, 0, 0); var G = new y(1, 1, 1); if (v && (N.matrix.decompose(I, E, B), G.divide(B)), 1 !== t || 1 !== i || 1 !== o || K.userData.explosionFactor) { K.userData.explosionFactor || (K.userData.explosionFactor = new y(1, 1, 1), K.userData.explosionBaseDifference = c.sub(s).clone().multiply(G)); var P = K.userData.explosionFactor, q = K.userData.explosionBaseDifference; d.set((t - P.x) * q.x, (i - P.y) * q.y, (o - P.z) * q.z), 1 === t && 1 === i && 1 === o ? (K.userData.explosionFactor = void 0, K.userData.explosionBaseDifference = void 0) : P.set(t, i, o) } if (0 !== n || 0 !== r || 0 !== a || K.userData.explosionOffset) { K.userData.explosionOffset || (K.userData.explosionOffset = new y(0, 0, 0)); var j = K.userData.explosionOffset; p.set(n * G.x - j.x, r * G.y - j.y, a * G.z - j.z), 0 === n && 0 === r && 0 === a ? K.userData.explosionOffset = void 0 : j.set(n * G.x, r * G.y, a * G.z) } if (g.set(d.x + p.x, d.y + p.y, d.z + p.z), 0 !== g.x || 0 !== g.y || 0 !== g.z) { K.userData.explosionFactor || K.userData.explosionOffset ? C.explosionList[w] || (C.explosionList[w] = !0) : delete C.explosionList[w]; var H = g.clone().multiply(B); u.makeTranslation(H.x, H.y, H.z), K.userData.changeOffset = g.clone(), K.transformation || (K.transformation = !0, K.transformationOriginalMatrix = K.matrix.clone(), K.applyMatrix = new M, K.transformationOriginalBoundingBox = K.boundingBox.clone()), K.matrix.premultiply(u), K.applyMatrix.premultiply(u), K.boundingBox.copy(K.transformationOriginalBoundingBox).applyMatrix4(K.applyMatrix); for (var Y = 0, W = V.length; W > Y; Y += 1) { var J = V[Y].positionStart; kf(L, J, J + V[Y].positionCount, g) } L.attributes.position.needsUpdate = !0 } } } } } } } } } }, Tf.prototype.closeComponentsExplosion = function (A, e) { e = Array.isArray(e) ? e : [e]; this.componentsExplosion(A, { componentKey: e }) }, Tf.prototype._getNodeGroup = function (A) { return A._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }) }, Tf.prototype._hasNodeGroup = function (A) { return A._hasNodeGroup(gp.GEOMETRY) }, Tf.prototype._resetMaxIndicesNumberPerBathSegment = function (A) { vc.SegmentedBatchMergeEnable && this._maxIndiceseNum > vc.maxIndicesNumberPerBathSegment && (Bh.log("adjust maxIndicesNumberPerBathSegment value from " + vc.maxIndicesNumberPerBathSegment + " to " + this._maxIndiceseNum + "!"), vc.maxIndicesNumberPerBathSegment = A) }, Tf.prototype.asyncCreateMeshNodes = function (A, e, t) { var i = this; e && e.length ? this._asyncMergeData(A, e, (function () { Bh.timeEnd("MergeData"), i._makeMeshNodes(A), t && t() })) : t && t() }, Tf.prototype.createBatchedMeshNodes = function (A, e) { var t = this.mapMaterialIdToMergedNode, i = A.manager, o = A.modelKey, n = A._encodedDatabagId, r = this._getNodeGroup(A), a = A.materialManager, s = e.materialKey, l = this.getPropertyValueByMaterialKey(s), c = a.getMaterialById(l.materialId); if (!c) { var h = Object.keys(e.componentInfo)[0], d = e.componentInfo[h][0].nodeId, p = A.getModelDescriptor().getNodeInfosByNodeId(d); if (!p) return; p.uv = "1" === l.uvProp, s = this._getMaterialKeyByNodeInfo(p, A), l = this.getPropertyValueByMaterialKey(s), c = a.getMaterialById(l.materialId) } var g = new he; if (g._visible = !0, g.setIndex(new YA(e.index, 1)), e.position && e.position.length > 0) { g.setAttribute("position", new YA(e.position, 3)), e.normal && e.normal.length === e.position.length && g.setAttribute("normal", new YA(e.normal, 3)); var u = !1; e.uv && e.uv.length > 0 > 0 && (g.setAttribute("uv", new YA(e.uv, 2)), u = !0), c.aoMap && g.setAttribute("uv2", new YA(e.uv, 2)), g.getAttribute("normal") || g.computeVertexNormals(); var f = e.componentInfo; t[s] || (t[s] = []); var m = null; if ("lines" === l.type) (m = new cf(g)).modelKey = o; else { var C = { modelKey: o }; (m = new Kf(g, c)).spawn(C) } if (t[s].push({ geometry: g, indices: f, mesh: m }), m._indicesGroup = f, !uh.isEmptyObject(A.subModel)) { var y = Object.keys(f)[0]; if (y) { var v = uh.getModelKeyFromComponentKey(y); A.subModel[v] && m.matrix.copy(A.subModel[v]) } } r.add(m), i.addMeshToOctantMap(n, s, new Eu(s, m)); var I = function (e) { f.hasOwnProperty(e) && f[e].forEach((function (t) { A.addMeshToInfoMap(e, t.nodeId, m, t, u) })) }; for (var E in f) I(E); r.updateMatrixWorld(!0), f = null, m = null } }, Tf.prototype._asyncMergeData = function (A, e, t) { Bh.time("MergeData"); var i = {}, o = this, n = A.getLoader().maxLoadTaskCount, r = A.progressPercentage.load, a = A.progressPercentage.collect, s = e.length, l = Math.ceil(s / A.progressFrequency), c = A.getModelDescriptor().getStandardNodeInfos(); requestAnimationFrame(function h(d) { var p = d; return function () { var d = null, g = null; for (g = p + l > s ? s : p + l, d = p; g > d; d += 1) { if (o._collectMergedNodeInfosById(A, e[d], c, i), d === g - 1) if (g !== s) A.dispatchEventEx({ type: Rc.ON_LOAD_PROGRESS, progress: { total: n, loaded: (d / s * a + r) * n, modelKey: A.modelKey } }), requestAnimationFrame(h(d + 1)); else A.dispatchEventEx({ type: Rc.ON_LOAD_PROGRESS, progress: { total: n, loaded: (a + r) * n, modelKey: A.modelKey } }), o._asyncMergeGeometry(i, A, t) } } }(0)) }, Tf.prototype._asyncMergeGeometry = function (A, e, t) { var i = []; for (var o in A) i.push(o); if (0 !== i.length) { this._resetMaxIndicesNumberPerBathSegment(this._maxIndiceseNum); var n = this, r = e.getLoader().maxLoadTaskCount, a = e.progressPercentage.load, s = e.progressPercentage.collect, l = e.progressPercentage.merge, c = i.length, h = Math.ceil(c / e.progressFrequency), d = this.mapMaterialIdToMergedNode; requestAnimationFrame(function o(p) { var g = p; return function () { var p, u = null; for (u = g + h > c ? c : g + h, p = g; u > p; p += 1) { if (n._collectMergedGeometriesById(i[p], A, d), p === u - 1) if (u !== i.length) e.dispatchEventEx({ type: Rc.ON_LOAD_PROGRESS, progress: { total: r, loaded: (p / c * l + a + s) * r, modelKey: e.modelKey }, modelKey: e.modelKey }), requestAnimationFrame(o(p + 1)); else t() } } }(0)) } else t() }, Tf.prototype._collectMergedNodeInfosById = function (A, e, t, i) { for (var o = t[e], n = 0, r = o.length; r > n; n += 1) { var a = o[n]; this._createNodeBuffer(A, a); var s = this._getNodeBufferBy(a.nodeId); if (s) { var l = s.index; l && l.length > this._maxIndiceseNum && (this._maxIndiceseNum = l.length); var c = this._getMaterialKeyByNodeInfo(a, A); void 0 === i[c] && (i[c] = []), i[c].push(a) } } }, Tf.prototype._collectMergedGeometriesById = function (A, e, t) { var i = e[A]; void 0 === t[A] && (t[A] = []); for (var o = [], n = Math.max(i.length / 800, 500), r = Math.floor(i.length / n), a = i.length, s = 0; r >= s; s += 1) { for (var l = 0, c = 0, h = 0, d = 0, p = 0, g = null, u = !1, f = 0, m = 0, C = a > n ? n : a; C > m; m += 1) { var y = s * n, v = i[y + m]; if (!v) break; (g = this._getNodeBufferBy(v.nodeId)) ? (c += g.index.length, l += g.position.length, g.normal && (h += g.normal.length), g.uv && g.uv.length > 0 ? (u = !0, d += g.uv.length) : d += g.position.length / 3 * 2, g.uv2 && (p += g.uv2.length), vc.SegmentedBatchMergeEnable && c > vc.maxIndicesNumberPerBathSegment ? (g.normal && (h -= g.normal.length), g.uv && (d -= g.uv.length), g.uv2 && (p -= g.uv2.length), o.push({ start: f, end: m, steps: y, arrayPositionLength: l -= g.position.length, arrayIndexLength: c -= g.index.length, arrayNormalLength: h, arrayUVLength: d, arrayUV2Length: p }), l = 0, c = 0, h = 0, d = 0, p = 0, f = m, m -= 1) : m === C - 1 && o.push({ start: f, end: C, steps: y, arrayPositionLength: l, arrayIndexLength: c, arrayNormalLength: h, arrayUVLength: d, arrayUV2Length: p }), g = null) : m === C - 1 && o.push({ start: f, end: C, steps: y, arrayPositionLength: l, arrayIndexLength: c, arrayNormalLength: h, arrayUVLength: d, arrayUV2Length: p }) } a -= n } for (var I = 0, E = o.length; E > I; I += 1) { for (var B = o[I], x = new he, S = {}, w = new Float32Array(B.arrayPositionLength), M = new Uint32Array(B.arrayIndexLength), b = new Float32Array(B.arrayNormalLength), U = new Float32Array(B.arrayUVLength), F = new Float32Array(B.arrayUV2Length), K = 0, Q = 0, R = 0, T = 0, k = 0, D = [], L = B.start, N = B.end; N > L; L += 1) { var O = i[B.steps + L]; if (g = this._getNodeBufferBy(O.nodeId)) { D.push(O.nodeId); var V = g.index, G = g.position, P = g.normal, q = g.uv, j = g.uv2; w.set(G, K); for (var H = new Uint32Array(V), Y = 0, W = H.length; W > Y; Y += 1) H[Y] += K / 3; M.set(H, Q), void 0 === S[O.userId] && (S[O.userId] = []), S[O.userId].push({ userId: O.userId, nodeId: O.nodeId, positionStart: K, positionCount: G.length, indexStart: Q, indexCount: V.length, lightmapIdx: O.lightmapIdx, boundingBox: O.boundingBox }), Q += V.length, K += G.length, P && (b.set(P, R), R += P.length), u && (q ? (U.set(q, T), T += q.length) : (U.set(new Float32Array(G.length / 3 * 2), T), T += q.length)), j && (F.set(j, k), k += j.length), V = null, G = null, P = null, q = null, j = null, g = null } } this.clearNodeBufferByNodeIds(D), x._visible = !0, x.setIndex(new YA(M, 1)), x.setAttribute("position", new YA(w, 3)), R > 0 && x.setAttribute("normal", new YA(b, 3)), T > 0 && x.setAttribute("uv", new YA(U, 2)), k > 0 && x.setAttribute("uv2", new YA(F, 2)), t[A].push({ geometry: x, indices: S }) } }, Tf.prototype.clearAllNodeBuffer = function () { this.cachedNodeBuffer && (this.cachedNodeBuffer = {}) }, Tf.prototype.clearNodeBufferByNodeIds = function (A) { if (this.cachedNodeBuffer) for (var e = 0, t = A.length; t > e; e += 1) this.cachedNodeBuffer[A[e]] = null }, Tf.prototype._getNodeBufferByNodeInfo = function (A, e) { return this.cachedNodeBuffer || this._createNodeBuffer(A, e), this.cachedNodeBuffer[e.nodeId] }, Tf.prototype._getNodeBufferBy = function (A) { return this.cachedNodeBuffer ? this.cachedNodeBuffer[A] : null }, Tf.prototype._createNodeBufferForMergedBuffer = function (A, e, t) { this.cachedNodeBuffer || (this.cachedNodeBuffer = {}), this.cachedNodeBuffer[e.nodeId] || (this.cachedNodeBuffer[e.nodeId] = this.createBufferByBufferDataWithUV2(A, e, t)) }, Tf.prototype._createNodeBuffer = function (A, e) { this._createNodeBufferForMergedBuffer(A, e, { buffer: A.getModelDescriptor().getReferencedMeshBufferById(e.geometryId), isDataView: !0 }) }, Tf.prototype._createGeometries = function (A, e) { var t = this, i = A.getModelDescriptor().getNodeInfosOnGeometryId(), o = A.getModelDescriptor().getReferencedMeshBufferData(), n = this._getClassifiedMeshes(i, o); this._dealDataMergedMeshs(A, n, o, i, (function () { t._dealDataMergeableMeshs(A, n, o, i, e) })) }, Tf.prototype._getClassifiedMeshes = function (A, e) { var t = [], i = []; for (var o in e) { var n = e[o].IndexInfos, r = void 0; if (n) { if (1 > n.length) continue; for (var a = 0, s = n.length; s > a; a += 1) { if ((l = A[n[a].meshId]) && l.length) { r = n[a].meshId; break } } } else { var l; (l = A[o]) && l.length && (r = o) } if (void 0 !== r) (l = A[r]) && l.length && (l[0].type === $u.EnumNodeItemType.LINE || !l[0].instanceOrNot && l[0].shared ? t.push(o) : i.push(o)) } if (!vc.Instance) for (var o in A) i[o] || t[o] || t.push(o); return { mergeableIdxs: t, mergedIdxs: i } }, Tf.prototype._collectMergeableMeshesByIdxId = function (A, e, t, i, o) { t[e] && t[e].IndexInfos ? this._collectSharedMeshesByIdxId(A, e, t, i, o) : this._collectLineOrIntanceMeshesByIdxId(A, e, t, i, o) }, Tf.prototype._collectLineOrIntanceMeshesByIdxId = function (A, e, t, i, o) { for (var n = i[e], r = { buffer: A.getModelDescriptor().getReferencedMeshBufferById(e) }, a = 0, s = n.length; s > a; a += 1) { var l = n[a]; this._createNodeBufferByGeoBufferData(A, l, r); var c = this._getMaterialKeyByNodeInfo(l); o[c] || (o[c] = []), o[c].push(l) } }, Tf.prototype._collectSharedMeshesByIdxId = function (A, e, t, i, o) { for (var n = t[e].IndexInfos, r = 0, a = n.length; a > r; r += 1) { var s = i[n[r].meshId]; if (s) for (var l = { buffer: A.getModelDescriptor().getReferencedMeshBufferById(e), indexInfo: n[r] }, c = 0, h = s.length; h > c; c += 1) { var d = s[c]; this._createNodeBufferByGeoBufferData(A, d, l); var p = this._getMaterialKeyByNodeInfo(d); o[p] || (o[p] = []), o[p].push(d) } } }, Tf.prototype._mergeMergeableMeshes = function (A, e, t, i) { var o = Object.keys(e); if (0 !== o.length) { var n = this, r = A.getLoader().maxLoadTaskCount, a = o.length, s = A.progressPercentage.load, l = A.progressPercentage.collect, c = A.progressPercentage.merge, h = Math.ceil(a / A.progressFrequency); requestAnimationFrame(function d(p) { var g = p; return function () { var p = null, u = null; for (u = g + h > a ? a : g + h, p = g; u > p; p += 1) n._collectMergedGeometriesById(o[p], e, t), p === u - 1 && (u !== a ? (A.dispatchEvent({ type: Rc.ON_LOAD_PROGRESS, progress: { total: r, loaded: (p / a * c + s + l) * r, modelKey: A.modelKey } }), requestAnimationFrame(d(p + 1))) : n._makeMeshNodes(A, i)) } }(0)) } else this._makeMeshNodes(A, i) }, Tf.prototype._dealDataMergeableMeshs = function (A, e, t, i, o) { if (0 !== e.mergeableIdxs.length) { var n = this, r = this.mapMaterialIdToMergedNode, a = {}, s = e.mergedIdxs.length, l = e.mergeableIdxs.length, c = s + l, h = e.mergeableIdxs, d = A.getLoader().maxLoadTaskCount, p = A.progressPercentage.load, g = A.progressPercentage.collect, u = Math.ceil(l / A.progressFrequency); requestAnimationFrame(function e(f) { var m = f; return function () { var f = null, C = null; for (C = m + u > l ? l : m + u, f = m; C > f; f += 1) n._collectMergeableMeshesByIdxId(A, h[f], t, i, a), f === C - 1 && (C !== l ? (A.dispatchEvent({ type: Rc.ON_LOAD_PROGRESS, progress: { total: d, loaded: ((f + s) / c * g + p) * d, modelKey: A.modelKey } }), requestAnimationFrame(e(f + 1))) : (A.dispatchEvent({ type: Rc.ON_LOAD_PROGRESS, progress: { total: d, loaded: (g + p) * d, modelKey: A.modelKey } }), n._mergeMergeableMeshes(A, a, r, o))) } }(0)) } else this._makeMeshNodes(A, o) }, Tf.prototype._collectDataMergedMeshesByIdxId = function (A, e, t, i, o) { var n = e[A], r = n.IndexInfos; if (r && 0 !== r.length) { var a = !1; n.UV && (n.UV.byteLength || n.UV.length) && (a = !0), o.lightmap && (n = this.getAttributeForLightmapWithDataMerged(n, o, A)); for (var s = void 0, l = 0, c = r.length; c > l; l += 1) { var h = t[r[l].meshId]; if (h && 0 !== h.length) { o.lightmap && (r[l].lightmapIdx = n.lightmapIdx, r[l].positionStart = 3 * r[l].indexStart, r[l].positionCount = 3 * r[l].indexCount), s = r[l].meshId; for (var d = 0, p = h.length; p > d; d += 1) h[d].uv = a } } if (void 0 !== s) { var g = t[s][0], u = {}, f = this._getMaterialKeyByNodeInfo(g); void 0 === i[f] && (i[f] = []); for (var m = 0, C = r.length; C > m; m += 1) t[r[m].meshId] && (void 0 === u[(g = t[r[m].meshId][0]).userId] && (u[g.userId] = []), r[m].userId = g.userId, r[m].nodeId = g.nodeId, r[m].boundingBox = g.boundingBox, u[g.name].push(r[m])); var y = new he; y._visible = !0, y.setIndex(new YA(new Uint32Array(n.I), 1)), y.setAttribute("position", new YA(new Float32Array(n.P), 3)), n.N && (n.N.byteLength || n.N.length) && y.setAttribute("normal", new YA(new Float32Array(n.N), 3)), a && y.setAttribute("uv", new YA(new Float32Array(n.UV), 2)), n.UV2 && (y.setAttribute("uv2", new YA(new Float32Array(n.UV2), 2)), y.lightmapIdx = n.lightmapIdx), i[f].push({ geometry: y, indices: u }) } } }, Tf.prototype.getAttributeForLightmapWithDataMerged = function (A, e, t) { var i = [], o = new Uint32Array(A.I), n = e.getLoader().getUV2ById("bmpk_" + t, o.length); if (n) { var r = n.lightmapIdx; i = n.uv2 } for (var a = new Float32Array(A.P), s = new Float32Array(A.N), l = new Float32Array(A.UV), c = [], h = [], d = [], p = 0; o.length > p; p += 1) { var g = o[p]; c.push(a[3 * g]), c.push(a[3 * g + 1]), c.push(a[3 * g + 2]), s.length > 0 && (h.push(s[3 * g]), h.push(s[3 * g + 1]), h.push(s[3 * g + 2])), l.length > 0 && (d.push(l[2 * g]), d.push(l[2 * g + 1])), o[p] = p } return a = null, s = null, l = null, { I: o, UV2: i, P: c, N: h, UV: d, lightmapIdx: r } }, Tf.prototype._dealDataMergedMeshs = function (A, e, t, i, o) { if (0 !== e.mergedIdxs.length) { var n = this, r = this.mapMaterialIdToMergedNode, a = e.mergedIdxs, s = a.length, l = e.mergedIdxs.length + e.mergeableIdxs.length, c = A.getLoader().maxLoadTaskCount, h = A.progressPercentage.load, d = A.progressPercentage.collect, p = Math.ceil(s / A.progressFrequency); requestAnimationFrame(function e(g) { var u = g; return function () { var g = null, f = null; for (f = u + p > s ? s : u + p, g = u; f > g; g += 1) n._collectDataMergedMeshesByIdxId(a[g], t, i, r), g === f - 1 && (f !== s ? (A.dispatchEvent({ type: Rc.ON_LOAD_PROGRESS, progress: { total: c, loaded: (g / l * d + h) * c, modelKey: A.modelKey } }), requestAnimationFrame(e(g + 1))) : (A.dispatchEvent({ type: Rc.ON_LOAD_PROGRESS, progress: { total: c, loaded: (g / l * d + h) * c, modelKey: A.modelKey } }), o && o())) } }(0)) } else o && o() }, Tf.prototype._dealUnsharedMeshs = function (A, e, t) { for (var i = this.mapMaterialIdToMergedNode, o = 0, n = A.length; n > o; o += 1) { var r = t[A[o]], a = r.IndexInfos, s = e[a[0].meshId][0], l = {}, c = this._getMaterialKeyByNodeInfo(s); void 0 === i[c] && (i[c] = []); for (var h = 0, d = a.length; d > h; h += 1) void 0 === l[(s = e[a[h].meshId][0]).userId] && (l[s.userId] = []), a[h].userId = s.userId, a[h].nodeId = s.nodeId, l[s.userId].push(a[h]); var p = new he; p._visible = !0, p.setIndex(new YA(new Uint32Array(r.index), 1)), p.setAttribute("position", new YA(new Float32Array(r.position), 3)), r.normal && p.setAttribute("normal", new YA(new Float32Array(r.normal), 3)), r.uv && p.setAttribute("uv", new YA(new Float32Array(r.uv), 2)), i[c].push({ geometry: p, indices: l }) } }, Tf.prototype._makeMeshNodes = function (A, e) { Bh.time("makeMesh"); var t = A.manager, i = A.modelKey, o = A._encodedDatabagId, n = this._getNodeGroup(A), r = this.mapMaterialIdToMergedNode; for (var a in r) for (var s = this.getPropertyValueByMaterialKey(a), l = r[a], c = 0, h = l.length; h > c; c += 1) { var d = l[c].geometry, p = l[c].indices; if (!l[c].mesh) { var g = null; if ("lines" === s.type) (g = new cf(d)).modelKey = i; else { var u = { modelKey: i }; (g = new Kf(d)).spawn(u) } if (!uh.isEmptyObject(A.subModel)) { var f = Object.keys(p)[0]; if (f) { var m = uh.getModelKeyFromComponentKey(f); A.subModel[m] && g.matrix.copy(A.subModel[m]) } } g._indicesGroup = p, n.add(g), l[c].mesh = g, t.addMeshToOctantMap(o, a, new Eu(a, g)); var C = function (e) { p.hasOwnProperty(e) && p[e].forEach((function (t) { A.addMeshToInfoMap(e, t.nodeId, g, t) })) }; for (var y in p) C(y); p = null, g = null } } n.updateMatrixWorld(!0), A.dispatchEvent({ type: Rc.ON_LOAD_PROGRESS, progress: { total: A.getLoader().maxLoadTaskCount, loaded: A.getLoader().maxLoadTaskCount, modelKey: A.modelKey } }), e && e(), Bh.timeEnd("makeMesh") }, Tf.prototype.createMeshNodes = function (A, e) { A.getModelDescriptor().getStandardNodeInfos() ? this._createGeometries(A, e) : e && e() }, Tf.prototype.applySelection = function (A) {}, Tf.prototype.clearSelection = function (A) {}, Tf.prototype.applyHover = function (A) {}, Tf.prototype.clearHover = function (A) {}, Tf.prototype.getMeshNode = function () { return this.mapMaterialIdToMergedNode }, Tf.prototype._disposeMergedGeometries = function () { for (var A in this.mapMaterialIdToMergedNode) { for (var e = this.mapMaterialIdToMergedNode[A], t = 0, i = e.length; i > t; t += 1) { e[t].geometry.dispose(), delete e[t].geometry, delete e[t].indices, delete e[t].mesh } delete this.mapMaterialIdToMergedNode[A] } }, Tf.prototype._getMaterialKeyByNodeInfo = function (A, e) { if (e) { var t = e.manager.getOverrideMaterialByNodeInfo(A); A.materialId = t ? t.name : A.originMId } return uh.getCombinedKeyString([A.materialId, A.uv ? "1" : "0", A.type === $u.EnumNodeItemType.LINE ? "lines" : "meshes"]) }, Tf.prototype.getPropertyValueByMaterialKey = function (A) { var e = uh.splitCombinedKeyString(A); return { materialId: e[0], uvProp: e[1], type: e[2] } }, Tf.prototype.clearSelectedObjectIds = function () { this.selectedObjectIds.length = 0 }, Tf.prototype.cacheSelectedObjectIds = function (A, e, t) { this.selectedObjectIds.push({ uid: A, mKey: e, idx: t }) }, Tf.prototype.adjustVisibility = function (A, e) { var t = this._getNodeGroup(A), i = t.visible; e && !t.bVisible || (t.visible = e), t.bVisible = i }, Tf.prototype.changeVisibilityOfSelectedObjects = function (A, e) { if (e) for (var t = 0, i = this.selectedMeshes.length; i > t; t += 1) { var o = this.selectedMeshes[t].object, n = this.selectedMeshes[t].indices; if (o) for (var r = 0, a = n.length; a > r; r += 1) { var s = o.geometry.groups[n[r].idx]; s.start = n[r].start, s.count = n[r].count } } else { this.selectedMeshes.length = 0; for (var l = {}, c = 0, h = this.selectedObjectIds.length; h > c; c += 1) { var d = this.selectedObjectIds[c].mKey, p = this.selectedObjectIds[c].idx, g = uh.getCombinedKeyString([d, p]); if (!l[g]) { l[g] = !0; var u = this.mapMaterialIdToMergedNode[d][p], f = u.mesh; if (f) { for (var m = [], C = u.geometry.groups, y = 0, v = C.length; v > y; y += 1) { var I = C[y]; I.materialIndex === zc.SELECTED && (m.push({ idx: y, start: I.start, count: I.count }), I.start = 0, I.count = 0) } m.length && this.selectedMeshes.push({ object: f, indices: m }) } } } } }, Tf.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { if (e) for (var t = 0, i = this.nonSelectedMeshes.length; i > t; t += 1) { var o = this.nonSelectedMeshes[t].object, n = this.nonSelectedMeshes[t].indices; if (n) for (var r = 0, a = n.length; a > r; r += 1) { var s = o.geometry.groups[n[r].idx]; s.start = n[r].start, s.count = n[r].count } else o.visible = this.nonSelectedMeshes[t].visibility } else { this.nonSelectedMeshes.length = 0; for (var l = {}, c = 0, h = this.selectedObjectIds.length; h > c; c += 1) { var d = this.selectedObjectIds[c]; l[d.mKey] || (l[d.mKey] = {}), l[d.mKey][d.idx] = !0 } for (var p in this.mapMaterialIdToMergedNode) { var g = this.mapMaterialIdToMergedNode[p]; if (l[p]) for (var u = 0, f = g.length; f > u; u += 1) { var m = g[u].mesh; if (m) { if (!l[p][u]) { this.nonSelectedMeshes.push({ object: m, indices: null, visibility: m.visible }), m.visible = !1; continue } for (var C = [], y = m.geometry.groups, v = 0, I = y.length; I > v; v += 1) { var E = y[v]; E.materialIndex !== zc.SELECTED && (C.push({ idx: v, start: E.start, count: E.count }), E.start = 0, E.count = 0) } C.length > 0 && this.nonSelectedMeshes.push({ object: m, indices: C }) } } else for (var B = 0, x = g.length; x > B; B += 1) { var S = g[B].mesh; S && (this.nonSelectedMeshes.push({ object: S, indices: null, visibility: S.visible }), S.visible = !1) } } } }, Tf.prototype.restoreVisibilityOfObjects = function () { this.selectedMeshes.length = 0, this.nonSelectedMeshes.length = 0 }, Tf.prototype.getBlinkMaterials = function () { return this.blinkMaterials }, Tf.prototype.disposeBufferAfterVbo = function () { if (!this.bufferDestroyed) { var A = 0; for (var e in this.mapMaterialIdToMergedNode) { for (var t = this.mapMaterialIdToMergedNode[e], i = 0, o = t.length; o > i; i += 1) { var n = t[i], r = n.geometry; if (null !== r) { A += 1; var a = e + "-" + i; this.mapDestroyedBufferKey[a] || n.mesh.visible && (this.mapDestroyedBufferKey[a] = !0, Tu.disposeBufferFromGeometry(r, ["normal", "uv", "uv2"])) } } Object.keys(this.mapDestroyedBufferKey).length === A && (this.mapDestroyedBufferKey = {}, this.bufferDestroyed = !0) } } }, Tf.prototype._traverseMeshNodeMap = function (A) { for (var e in this.mapMaterialIdToMergedNode) for (var t = this.mapMaterialIdToMergedNode[e], i = 0, o = t.length; o > i; i += 1) A && A(e, t[i]) }, Tf.prototype.getGeometryBuffersByUserId = function (A, e) { var t = [], i = A.getDatabagId(); return this._traverseMeshNodeMap((function (A, o) { var n = o.indices[e]; if (n) for (var r = o.geometry, a = r.getIndex().array, s = r.getAttribute("position").array, l = 0, c = n.length; c > l; l += 1) { var h = n[l], d = h.indexStart, p = h.indexStart + h.indexCount, g = a.slice(d, p), u = s.slice(d = h.positionStart, p = h.positionStart + h.positionCount); d /= 3, g.forEach((function (A, e, t) { t[e] -= d })), t.push({ databagId: i, nodeId: h.nodeId, position: u, index: g }) } })), t }, Tf.prototype.getPickingNodeGenerator = function () { return this.pickingNodeGenerator || (this.pickingNodeGenerator = new nf(this)), this.pickingNodeGenerator }; var Df = function (A) { of .call(this, A), this.nodeGroupName = "PickingBatchedWireFrameGroup" }; Object.assign(Df.prototype, of .prototype), eu(Df, [{ key: "disposePickingNodeById", value: function (A) { for (var e = this.pickingNodeMap[A], t = 0, i = e.length; i > t; t += 1) e[t]._indicesGroup = null, e[t].material = null, e[t].geometry.dispose(), e[t] = null } }, { key: "generatePickingMeshes", value: function () { var A = this.manager.getWireFrameLineSegments(); A || (this.manager.generateWireframe(), A = this.manager.getWireFrameLineSegments()); for (var e = 0, t = A.length; t > e; e += 1) { var i = A[e].geometry, o = new he; o.setAttribute("position", i.getAttribute("position")), o.setIndex(i.getIndex()); var n = new jo(o, Kd.DefaultMaterial); (new M).copy(A[e].matrix).multiply(this.manager.model.getModelMatrix()).decompose(n.position, n.quaternion, n.scale), n._indicesGroup = A[e]._indicesGroup, n.frustumCulled = !1, n.renderOrder = 1, this.addToPickingNodeMap(e, [n]) } } }, { key: "_rebuildGeometryGroup", value: function (A, e, t) { var i, o = this.manager.manager, n = 0, r = 0, a = 0, s = A._indicesGroup, l = Object.keys(s), c = [], h = {}; e.length > l.length ? (c = l, h = t) : (c = e, h = s); var d = []; for (a = 0, i = c.length; i > a; a += 1) { var p = c[a]; if (o.isPickableNode(p) && h[p]) { var g = s[p]; if (g && g.length > 0) for (n = 0, r = g.length; r > n; n += 1) d.push({ indexStart: g[n].indexStart, indexCount: g[n].indexCount }) } } A.visible = !0; var u = A.geometry; if (u.clearGroups(), 0 !== d.length) for (d.sort((function (A, e) { return A.indexStart - e.indexStart })), n = 0, r = d.length; r > n; n += 1) { var f = d[n].indexStart, m = d[n].indexCount; if (0 === n) u.addGroup(f, m, 0); else f === d[n - 1].indexStart + d[n - 1].indexCount ? u.groups[u.groups.length - 1].count += m : u.addGroup(f, m, 0) } else A.visible = !1 } }, { key: "updatePickingMeshesState", value: function (A, e, t) { for (var i = this.pickingNodeMap, o = Object.keys(i), n = 0, r = o.length; r > n; n += 1) for (var a = i[o[n]], s = 0, l = a.length; l > s; s += 1) a[s].material = [A], a[s].visible = !1, this._rebuildGeometryGroup(a[s], e, t) } }]); var Lf = function (A) { this.manager = A, this.model = A.model, this.generated = !1, this.wireframeLineSegment = null, this.wireframeGeometryMap = null, this.wireframeDataMap = null, this.userIdMapForNoWireFrame = {} }; function Nf(A, e, t, i) { for (var o = A.getAttribute("position").array, n = e; t > n; n += 1) o[3 * n] += i.x, o[3 * n + 1] += i.y, o[3 * n + 2] += i.z; A.getAttribute("position").needsUpdate = !0 } Lf.prototype.destroy = function () { this.clearData(), this.manager = null, this.userIdMapForNoWireFrame = null, this.pickingNodeGenerator && (this.pickingNodeGenerator.destroy(), this.pickingNodeGenerator = null) }, Lf.prototype.clearData = function () { this.generated = !1, this.bufferDestroyed = !1, this.wireframeLineSegment && (this.wireframeLineSegment._indicesGroup = null, this.wireframeLineSegment.geometry.dispose(), this.wireframeLineSegment = null), this.pickingNodeGenerator && this.pickingNodeGenerator.clearData(), this.wireframeGeometryMap = null, this.userIdMapForNoWireFrame = {} }, Lf.prototype._createWireframeGeometry = function (A, e) { if (this.wireframeGeometryMap || (this.wireframeGeometryMap = {}), this.wireframeDataMap || (this.wireframeDataMap = {}), !this.wireframeGeometryMap[e.nodeId]) { var t = this._getWireframeData(A, e), i = new he; i.setIndex(new $A(t.index, 1)), i.setAttribute("position", new YA(t.buffer, 3)), i._userId = e.userId, this.wireframeGeometryMap[e.nodeId] = i } }, Lf.prototype._getWireframeData = function (A, e) { this.wireframeDataMap || (this.wireframeDataMap = {}); var t = {}; if (!this.wireframeDataMap[e.nodeId]) { for (var i = A.attributes.position.array.slice(e.positionStart, e.positionStart + e.positionCount), o = A.getIndex().array.slice(e.indexStart, e.indexStart + e.indexCount), n = 0, r = o.length; r > n; n += 1) o[n] -= e.positionStart / 3; var a = Up(i, o); return t = Tu.reducedGeometry(i, a), this.wireframeDataMap[e.nodeId] = t, t } return this.wireframeDataMap[e.nodeId] }, Lf.prototype._createWireframeGeometries = function (A) { A || (A = this.model); var e = A.manager.filter, t = A.getModelDescriptor().getStandardNodeInfos(); function i(A) { var i = t[A]; return !(i && e._hasRenderWithBoardlineFilter() && !e._isRenderWithBoardline(i[0])) } var o = this.manager.getMeshNode(); for (var n in Bh.time("createWireframeGeometry"), o) { if ("meshes" === this.manager.getPropertyValueByMaterialKey(n).type) for (var r = o[n], a = 0, s = r.length; s > a; a += 1) { var l, c = r[a]; if (c.RenderTypeChange) { for (var h = (l = c.geometry.clone()).attributes.position.array, d = [], p = new y, g = c.mesh.matrixWorld, u = 0, f = h.length; f > u; u += 3) p.set(h[u], h[u + 1], h[u + 2]).applyMatrix4(g), d.push(p.x, p.y, p.z); l.setAttribute("position", new YA(new Float32Array(d), 3)) } else l = c.geometry; if (null !== l) { var m = c.indices; for (var C in m) { i(C) || (this.userIdMapForNoWireFrame[C] = !0); for (var v = m[C], I = 0, E = v.length; E > I; I += 1) this._createWireframeGeometry(l, v[I]) } } } } return Bh.timeEnd("createWireframeGeometry"), !0 }, Lf.prototype._makeWireframe = function (A) { A || (A = this.model); var e = {}, t = A.getWireframeMaterial(); for (var i in this.wireframeGeometryMap) { var o = this.wireframeGeometryMap[i], n = o._userId, r = new jo(o, t); r.userId = n, r.nodeId = i, e[n] || (e[n] = []), e[n].push(r), r = null } var a = []; for (var n in e) for (var s = e[n], l = 0, c = s.length; c > l; l += 1) a.push(s[l]); if (a.length > 0) { var h = {}, d = Tu.mergeBufferGeometriesFromMeshs(a, h); if (d && (this.wireframeLineSegment = new jo(d, A.getWireframeMaterial()), this.wireframeLineSegment.matrixAutoUpdate = !1, this.wireframeLineSegment._indicesGroup = h, !uh.isEmptyObject(A.subModel))) { var p = Object.keys(h)[0]; if (p) { var g = uh.getModelKeyFromComponentKey(p); A.subModel[g] && this.wireframeLineSegment.matrix.copy(A.subModel[g]) } } } for (var n in a = null, e) delete e[n]; e = null, this.wireframeGeometryMap = null }, Lf.prototype.generateWireframe = function (A, e) { A || (A = this.model), this.generated || (this._createWireframeGeometries(A), this._makeWireframe(A), this.generated = !0, e && e()) }, Lf.prototype.update = function (A) { if (this.manager.hasNodeInfo(A)) if (A.isActivateWireframe()) { if (this.generateWireframe(A), this.wireframeLineSegment) { var e = this._getNodeGroup(A); e.clear(), e.add(this.wireframeLineSegment), e.updateMatrixWorld(!0) } } else A._hasNodeGroup(gp.WIREFRAME) && A._removeNodeGroup(gp.WIREFRAME) }, Lf.prototype.rebuildIndices = function (A) { if (this.needDealWireframeLine(A)) { this.wireframeLineSegment.visible = !0; var e = this.wireframeLineSegment._indicesGroup, t = this.wireframeLineSegment.geometry; t.clearGroups(); var i = A.getWireframeMaterial(); this.wireframeLineSegment.material = i; var o = this.manager.getFilteredUserIdsForWireFrame(), n = Boolean(o && Object.keys(o).length); if (this._existHiddenUserId() || n) { var r = [], a = 0, s = 0, l = []; for (var c in e) if (!this._isHiddenUserId(c)) { var h = e[c]; if (h && h.length > 0) { if (o[c]) { var d = o[c], p = l.indexOf(d); for (-1 === p && (l.push(d), p = l.length - 1), a = 0, s = h.length; s > a; a += 1) r.push({ indexStart: h[a].indexStart, indexCount: h[a].indexCount, state: 1 + p }); continue } for (a = 0, s = h.length; s > a; a += 1) r.push({ indexStart: h[a].indexStart, indexCount: h[a].indexCount, state: 0 }) } } if (0 !== r.length) { for (r.sort((function (A, e) { return A.indexStart - e.indexStart })), a = 0, s = r.length; s > a; a += 1) { var g = r[a].indexStart, u = r[a].indexCount, f = r[a].state; if (0 === a) t.addGroup(g, u, f); else f === r[a - 1].state && g === r[a - 1].indexStart + r[a - 1].indexCount ? t.groups[t.groups.length - 1].count += u : t.addGroup(g, u, f) } var m = A.getFilter(), C = [i]; for (a = 0, s = l.length; s > a; a += 1) { var y = m._getMaterialByName(l[a]); C.push(y) } this.wireframeLineSegment.material = C } else this.wireframeLineSegment.visible = !1 } } }, Lf.prototype.explode = function (A, e, t) {}, Lf.prototype.explosion = function (A, e) { if (this.wireframeLineSegment) { var t = Object.keys(this.wireframeLineSegment._indicesGroup); e || (e = {}), e.componentKey = t, this.componentsExplosion(A, e) } }, Lf.prototype.closeExplosion = function (A) { this.explosion(A) }, Lf.prototype.componentsExplosion = function (A, e) { if (this.wireframeLineSegment) for (var t = Array.isArray(e.componentKey) ? e.componentKey : [e.componentKey], i = this.wireframeLineSegment._indicesGroup, o = this.wireframeLineSegment.geometry, n = 0, r = t.length; r > n; n += 1) { var a = t[n]; if (a) { var s = A.getModelDescriptor().getStandardNodeInfosById(a); if (s) { var l = i[a]; if (l) { var c = s[0]; if (!c || !c.userData || !c.userData.changeOffset) continue; for (var h = 0, d = l.length; d > h; h += 1) { var p = l[h].positionStart; Nf(o, p, p + l[h].positionCount, c.userData.changeOffset) } c.userData.changeOffset = void 0 } } } } }, Lf.prototype.closeComponentsExplosion = function (A, e) { this.componentsExplosion(A, { componentKey: e }) }, Lf.prototype._getNodeGroup = function (A) { return A._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 }) }, Lf.prototype.needDealWireframeLine = function (A) { return !(!A.isActivateWireframe() || !this.wireframeLineSegment) }, Lf.prototype.adjustVisibility = function (A, e) { if (this.needDealWireframeLine(A)) { var t = this._getNodeGroup(A), i = t.visible; e && !t.bVisible || (t.visible = e), t.bVisible = i } }, Lf.prototype.changeVisibilityOfSelectedObjects = function (A, e) {}, Lf.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { this.adjustVisibility(A, e) }, Lf.prototype.restoreVisibilityOfObjects = function () {}, Lf.prototype.disposeBufferAfterVbo = function () { this.generated && !this.bufferDestroyed && this.wireframeLineSegment && this.wireframeLineSegment.visible && (this.bufferDestroyed = !0, Tu.disposeBufferFromGeometry(this.wireframeLineSegment.geometry, ["position", "normal", "uv", "uv2"])) }, Lf.prototype._existHiddenUserId = function () { var A = this.manager.getHiddenUserIds(); return !!(this.userIdMapForNoWireFrame && Object.keys(this.userIdMapForNoWireFrame).length || A && Object.keys(A).length) }, Lf.prototype._isHiddenUserId = function (A) { if (this.userIdMapForNoWireFrame[A]) return !0; var e = this.manager.getHiddenUserIds(); return !(!e || !e[A]) }, Lf.prototype.getWireFrameLineSegments = function () { return this.wireframeLineSegment ? [this.wireframeLineSegment] : null }, Lf.prototype.getPickingNodeGenerator = function () { return this.pickingNodeGenerator || (this.pickingNodeGenerator = new Df(this)), this.pickingNodeGenerator }; var Of = function (A, e) { this.model = e, this.meshManager = new Tf(this), A || (this.wireframeManager = new Lf(this)) }; Of.prototype.destroy = function () { this.meshManager.destroy(), this.meshManager = null, this.wireframeManager.destroy(), this.wireframeManager = null, this._clearFilteredState(), this._clearSelectedState(), this._clearHoveredState(), this._clearBlinkedState() }, Of.prototype.updateNodes = function (A) { var e; e = this._collectModelFiltered(A), this.meshManager.update(A, e), this.wireframeManager.update(A) }, Of.prototype.generateWireframe = function (A, e) { this.wireframeManager.generateWireframe(A, e) }, Of.prototype.asyncGenerateWireframe = function (A, e) { this.wireframeManager.asyncGenerateWireframe(A, e) }, Of.prototype.rebuildIndices = function (A) { this._rebuildIndices(A) }, Of.prototype.clearData = function () { this.meshManager.clearData(), this.wireframeManager.clearData(), this._clearFilteredState(), this._clearSelectedState(), this._clearHoveredState(), this._clearBlinkedState() }, Of.prototype.createMeshNodes = function (A, e) { this.meshManager.createMeshNodes(A, e) }, Of.prototype.createBatchedMeshNodes = function (A, e) { this.meshManager.createBatchedMeshNodes(A, e) }, Of.prototype.asyncCreateMeshNodes = function (A, e, t) { this.meshManager.asyncCreateMeshNodes(A, e, t) }, Of.prototype.hasNodeInfo = function (A) { return Boolean(A.getModelDescriptor().getStandardNodeInfos()) }, Of.prototype.disposeGeometry = function (A) { this.meshManager.disposeGeometry(A) }, Of.prototype.getMeshNode = function () { return this.meshManager.getMeshNode() }, Of.prototype.getPropertyValueByMaterialKey = function (A) { return this.meshManager.getPropertyValueByMaterialKey(A) }, Of.prototype.getFilteredUserIds = function () { return this.mapMaterialIdToUserIdsForFilter }, Of.prototype.getSelectedUserIds = function () { return this.mapMaterialIdToUserIdsForSelection }, Of.prototype.getHoveredUserIds = function () { return this.mapMaterialIdToUserIdsForHover }, Of.prototype.getBlinkedUserIds = function () { return this.mapBlinkUserIds }, Of.prototype.getHiddenUserIds = function () { return this.hiddenUserIdSetObject }, Of.prototype.getTransparentUserIds = function () { return this.transparentUserIdSetObject }, Of.prototype.applyFilter = function (A, e) { console.log('applyFilter :>>dddddddddd '); if (this.hasNodeInfo(A)) { var t = null; t = e || A.getModelDescriptor().getStandardUserIds(); var i = A.getModelDescriptor().getStandardNodeInfos(); this._collectFilteredUserIds(A, t, i), this._collectFilteredUserIdsForWireFrame(A, t, i), this._collectSelectedUserIds(A.manager.sceneState.selectionSet, i), this._collectHoveredUserIds(A.manager.sceneState.hoverId, i), this._rebuildIndices(A), this.updateNodes(A) } }, Of.prototype.applySelection = function (A) { console.log('applySelection16') if (this.hasNodeInfo(A)) { var e = A.getModelDescriptor().getStandardNodeInfos(); this._clearSelectedState(A), this._clearHoveredState(A), this._collectSelectedUserIds(A.manager.sceneState.selectionSet, e), this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), this._rebuildIndices(A), this.updateNodes(A) } }, Of.prototype.clearSelection = function (A) { this._clearSelectedState(A), this.applyHover(A) }, Of.prototype.applyHover = function (A) { if (this.hasNodeInfo(A)) { var e = A.getModelDescriptor().getStandardNodeInfos(); this._clearHoveredState(A), this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), this._rebuildIndices(A), this.updateNodes(A) } }, Of.prototype.clearHover = function (A) { this._clearHoveredState(A), this._rebuildIndices(A), this.updateNodes(A) }, Of.prototype.applyBlink = function (A) { if (this.hasNodeInfo(A)) { var e = A.getModelDescriptor().getStandardNodeInfos(); this._clearBlinkedState(A), this._clearHoveredState(A), this._collectBlinkedUserIds(A.manager.sceneState.getBlinkComponentsIdMap(), e), this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), this._rebuildIndices(A), this.updateNodes(A) } }, Of.prototype.clearBlink = function (A) { this._clearBlinkedState(A), this.applyHover(A) }, Of.prototype.applyReplacement = function (A) { this._rebuildIndices(A), this.updateNodes(A) }, Of.prototype._collectFilteredUserIds = function (A, e, t) { var i = A.manager.filter, o = i._hasHiddenFileIdFilter(), n = i._hasVisibleFilter(), r = i._hasOverrideMaterialFilter(), a = i._hasTransparentFilter(), s = A.hasReplacedUserId(), l = A.hasHiddenSourceObjectUserId(), c = this.mapMaterialIdToUserIdsForFilter = {}; if (this.hiddenUserIdSetObject = {}, this.overrideUserIdSetObject = {}, this.transparentUserIdSetObject = {}, o || n || r || a || s || l) for (var h = 0; e.length > h; h += 1) { var d = e[h], p = t[d]; if (p && p.length) for (var g = 0, u = p.length; u > g; g += 1) { var f = p[g]; if (o && i._isHiddenFileId(f) || n && !1 === i._isVisible(f) || A.isReplacedUserId(d) || A.isHiddenSourceObjectUserId(d)) void 0 === c[f.materialId] && (c[f.materialId] = {}), void 0 === c[f.materialId][zc.HIDDEN] && (c[f.materialId][zc.HIDDEN] = {}), c[f.materialId][zc.HIDDEN][d] = !0, this.hiddenUserIdSetObject[d] = !0; else if (a && i._isTransparent(f)) void 0 === c[f.materialId] && (c[f.materialId] = {}), void 0 === c[f.materialId][zc.TRANSPARENT] && (c[f.materialId][zc.TRANSPARENT] = {}), c[f.materialId][zc.TRANSPARENT][d] = !0, this.transparentUserIdSetObject[d] = !0; else if (r && i._hasOverrideMaterial(f)) { var m = i._getOverrideMaterial(f); if (Array.isArray(m)) { var C = g, y = m.find((function (A) { return !!A.mapNodeIdToOrigMatId && Object.keys(A.mapNodeIdToOrigMatId).includes(f.nodeId) })), v = y ? y.mapNodeIdToOrigMatId[f.nodeId] : m[C].materialId, I = y ? y.materialId : ""; "" !== I && (void 0 === c[v] && (c[v] = {}), void 0 === c[v][zc.OVERRIDED] && (c[v][zc.OVERRIDED] = {})), c[v] || (c[v] = {}, c[v][zc.OVERRIDED] = {}), c[v][zc.OVERRIDED][d] = I, this.overrideUserIdSetObject[d] || (this.overrideUserIdSetObject[d] = []), this.overrideUserIdSetObject[d][C] = I } else { var E = null !== m ? m.name : ""; "" !== E && (void 0 === c[f.materialId] && (c[f.materialId] = {}), void 0 === c[f.materialId][zc.OVERRIDED] && (c[f.materialId][zc.OVERRIDED] = {}), c[f.materialId][zc.OVERRIDED][d] = E, this.overrideUserIdSetObject[d] = E) } } } } }, Of.prototype._collectFilteredUserIdsForWireFrame = function (A, e, t) { var i = A.getFilter(), o = i._hasOverrideMaterialFilterForWireFrame(); if (this.mapFilteredUserIdsForWireFrame = {}, o) for (var n = 0; e.length > n; n += 1) { var r = e[n]; if (!this.hiddenUserIdSetObject[r]) { var a = t[r]; if (a && a.length) for (var s = 0, l = a.length; l > s; s += 1) { var c = a[s]; if (i._hasOverrideMaterialForWireFrame(c)) { var h = i._getOverrideMaterialForWireFrame(c), d = null !== h ? h.name : ""; "" !== d && (this.mapFilteredUserIdsForWireFrame[r] = d) } } } } }, Of.prototype._collectModelFiltered = function (A) { var e = A.manager.filter, t = A.modelKey, i = e._hasModelOverrideMaterialFilter(), o = e._hasModelTransparentFilter(), n = A.manager.modelState.selectionSet; return A.manager.modelState.hoverId === t ? A.manager.modelState.getHoverMaterial() : n.hasOwnProperty(A.modelKey) ? A.manager.modelState.selectionMaterial : o && e._isModelTransparent(t) ? e._getMaterialByName("scene") : i && e._hasModelOverrideMaterial(t) ? e._getModelOverrideMaterial(t) : null }, Of.prototype._clearFilteredState = function () { this.mapMaterialIdToUserIdsForFilter = null }, Of.prototype._collectSelectedUserIds = function (A, e) { var t = this.mapMaterialIdToUserIdsForSelection = {}; for (var i in A) if (this.model.modelKey === i) for (var o in A[i]) { var n = e[o]; if (n && n.length) for (var r = 0, a = n.length; a > r; r += 1) void 0 === t[n[r].materialId] && (t[n[r].materialId] = {}), void 0 === t[n[r].materialId][o] && (t[n[r].materialId][o] = !0) } }, Of.prototype._clearSelectedState = function () { this.mapMaterialIdToUserIdsForSelection && (this.mapMaterialIdToUserIdsForSelection = null) }, Of.prototype._collectHoveredUserIds = function (A, e) { var t = this.mapMaterialIdToUserIdsForHover = {}; if (A && e[A]) for (var i = e[A], o = 0, n = i.length; n > o; o += 1) void 0 === t[i[o].materialId] && (t[i[o].materialId] = {}), void 0 === t[i[o].materialId][A] && (t[i[o].materialId][A] = !0) }, Of.prototype._clearHoveredState = function () { this.mapMaterialIdToUserIdsForHover && (this.mapMaterialIdToUserIdsForHover = null) }, Of.prototype._collectBlinkedUserIds = function (A, e) { var t = this.mapBlinkUserIds = {}; for (var i in A) { var o = e[i]; if (o && o.length) for (var n = 0, r = o.length; r > n; n += 1) void 0 === t[o[n].materialId] && (t[o[n].materialId] = {}), void 0 === t[o[n].materialId][i] && (t[o[n].materialId][i] = !0) } }, Of.prototype.calculateClippingIds = function (A, e) { this.meshManager.calculateClippingIds(A, e) }, Of.prototype._clearBlinkedState = function () { this.mapBlinkUserIds && (this.mapBlinkUserIds = null) }, Of.prototype._rebuildIndices = function (A) { this.meshManager.rebuildIndices(A), this.wireframeManager.rebuildIndices(A) }, Of.prototype.clearCachedData = function () { this.meshManager.clearAllNodeBuffer() }, Of.prototype.getMeshesByUserIds = function (A, e) { return this.meshManager.getMeshesByUserIds(A, e) }, Of.prototype.adjustVisibility = function (A, e) { this.meshManager.adjustVisibility(A, e), this.wireframeManager.adjustVisibility(A, e) }, Of.prototype.changeVisibilityOfSelectedObjects = function (A, e) { this.meshManager.changeVisibilityOfSelectedObjects(A, e), this.wireframeManager.changeVisibilityOfSelectedObjects(A, e) }, Of.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { this.meshManager.changeVisibilityOfNonSelectedObjects(A, e), this.wireframeManager.changeVisibilityOfNonSelectedObjects(A, e) }, Of.prototype.restoreVisibilityOfObjects = function () { this.meshManager.restoreVisibilityOfObjects(), this.wireframeManager.restoreVisibilityOfObjects() }, Of.prototype.disposeBufferAfterVbo = function () { this.meshManager.disposeBufferAfterVbo(), this.wireframeManager.disposeBufferAfterVbo() }, Of.prototype.getGeometryBuffersByUserId = function (A, e) { return this.meshManager.getGeometryBuffersByUserId(A, e) }, Of.prototype.explosion = function (A, e) { this.meshManager.explosion(A, e), this.wireframeManager.explosion(A, e) }, Of.prototype.closeExplosion = function (A) { this.meshManager.closeExplosion(A), this.wireframeManager.closeExplosion(A) }, Of.prototype.componentsExplosion = function (A, e) { this.meshManager.componentsExplosion(A, e), this.wireframeManager.componentsExplosion(A, e) }, Of.prototype.closeComponentsExplosion = function (A, e) { this.meshManager.closeComponentsExplosion(A, e), this.wireframeManager.closeComponentsExplosion(A, e) }, Of.prototype.isPickableNode = function (A) { var e = this.getHiddenUserIds(); if (e && e[A]) return !1; var t = this.getTransparentUserIds(); return !t || !t[A] }, Of.prototype.isHiddenNode = function (A) { var e = this.getHiddenUserIds(); return !(!e || !e[A]) }, Of.prototype.getMeshManager = function () { return this.meshManager }, Of.prototype.getWireFrameManager = function () { return this.wireframeManager }, Of.prototype.getFilteredUserIdsForWireFrame = function () { return this.mapFilteredUserIdsForWireFrame }; var Vf = function (A) { of .call(this, A), this.nodeGroupName = "PickingInstancedMeshGroup" }; function Gf(A, e, t) { for (var i = A.getAttribute("mcol3").array, o = 0; e.length > o; o += 1) { var n = e[o]; i[3 * n] += t.x, i[3 * n + 1] += t.y, i[3 * n + 2] += t.z } A.getAttribute("mcol3").needsUpdate = !0 } Object.assign(Vf.prototype, of .prototype), eu(Vf, [{ key: "generatePickingMeshes", value: function () { var A = this, e = this.manager, t = e.cachedInstance, i = !vc.BatchMergeEnabled; e.traverseInstanceNodeMap(null, (function (e, o) { for (var n = [], r = 0, a = o.length; a > r; r += 1) { var s = o[r].geometry, l = o[r], c = new Na; c.setAttribute("position", s.getAttribute("position")), c.setAttribute("mcol0", s.getAttribute("mcol0")), c.setAttribute("mcol1", s.getAttribute("mcol1")), c.setAttribute("mcol2", s.getAttribute("mcol2")), c.setAttribute("mcol3", s.getAttribute("mcol3")), c.setAttribute("vState", new Oa(new Float32Array(t.vState[e]), 1, !1, 1)), c.setIndex(s.getIndex()); var h = new Ue(c, Kd.DefaultMaterial); l.matrixWorld.decompose(h.position, h.quaternion, h.scale), h.name = e, h.frustumCulled = !1, h.renderOrder = i ? 1 : 0, n.push(h) } A.addToPickingNodeMap(e, n) })) } }, { key: "updatePickingMeshesState", value: function (A, e, t) { if (this.pickingNodeMap) for (var i = this.manager.manager, o = this.pickingNodeMap, n = 0, r = e.length; r > n; n += 1) { var a = e[n]; if (i.isPickableNode(a)) { var s = i.getMeshManager().getNodeIdxMapByUserId(a); if (s) for (var l = Object.keys(s), c = 0, h = l.length; h > c; c += 1) { var d = l[c], p = o[d]; if (p) for (var g = s[d], u = 0, f = p.length; f > u; u += 1) { var m = p[u]; m.material = A, m.visible = !0; for (var C = m.geometry, y = C.getAttribute("vState").array, v = 0, I = g.length; I > v; v += 1) y[g[v]] = Hc.NONE; C.getAttribute("vState").needsUpdate = !0 } } } } } }, { key: "resetPickingMeshesState", value: function () { if (this.pickingNodeMap) for (var A = this.pickingNodeMap, e = Object.keys(A), t = 0, i = e.length; i > t; t += 1) for (var o = A[e[t]], n = 0, r = o.length; r > n; n += 1) o[n].visible = !1, o[n].geometry.getAttribute("vState").array.fill(Hc.HIDDEN), o[n].geometry.getAttribute("vState").needsUpdate = !0 } }]); var Pf = function (A) { return Rf.call(this), this.manager = A, this.instanceGeometryMap = {}, this.bufferAttributeMap = {}, this.instanceNodeMap = {}, this.nodeIdxMapFromUserId = {}, this.matrixInfoMapFromUserId = {}, this.cachedInstance = { vState: {}, vState2: {}, vColor: {}, vMirror: {}, mcol0: {}, mcol1: {}, mcol2: {}, mcol3: {}, muvCol0: {}, muvCol1: {}, muvCol2: {}, userId: {}, nodeId: {} }, this.selectedMeshes = [], this.nonSelectedMeshes = [], this.selectedObjectIds = [], this }; (Pf.prototype = Object.create(Rf.prototype)).destroy = function () { this.cachedInstance = {}, this.instanceNodeMap = {}, this.bufferAttributeMap = {}, this.nodeIdxMapFromUserId = {}, this.matrixInfoMapFromUserId = {}, this.disposeInstanceGeometries(), this.instanceGeometryMap = {}, this.manager = null, this.selectedMeshes = [], this.nonSelectedMeshes = [], this.selectedObjectIds = [] }, Pf.prototype.clearData = function () { this.bufferDestroyed = !1, this.disposeGeometries(), this.disposeInstanceGeometries(), this.clearInstanceCache(), this.pickingNodeGenerator && this.pickingNodeGenerator.clearData() }, Pf.prototype.clearInstanceCache = function () { this.cachedInstance.vState = {}, this.cachedInstance.vState2 = {}, this.cachedInstance.vColor = {}, this.cachedInstance.vMirror = {}, this.cachedInstance.mcol0 = {}, this.cachedInstance.mcol1 = {}, this.cachedInstance.mcol2 = {}, this.cachedInstance.mcol3 = {}, this.cachedInstance.muvCol0 = {}, this.cachedInstance.muvCol1 = {}, this.cachedInstance.muvCol2 = {}, this.bufferAttributeMap = {}, this.nodeIdxMapFromUserId = {}, this.instanceNodeMap = {}, this.instanceGeometryMap = {}, this.matrixInfoMapFromUserId = {}, this.geometries = {} }, Pf.prototype.updateNodes = function (A) { this._getNodeGroup(A).visible = !A.isOnlyWireframe() }, Pf.prototype.createMeshNodes = function (A, e) { this._createInstanceGeometries(A, e), this._makeInstanceNodes(A) }, Pf.prototype.disposeInstanceGeometries = function () { this.traverseInstanceGeometryMap((function (A, e) { for (var t = 0, i = e.length; i > t; t += 1) e[t].dispose() })) }, Pf.prototype._createInstanceGeometries = function (A, e) { Bh.time("createInstanceGeometries"); var t = this; A.getModelDescriptor().traverseInstancedNodeInfos(e, (function (e, i) { for (var o = 0, n = i.length; n > o; o += 1) { var r = i[o], a = t.getGeometryByNodeInfo(A, r); if (a) { var s = A.manager.getOverrideMaterialByNodeInfo(r); s && (r.materialId = s.name); var l = t.getMeshIdByNodeInfo(r), c = t.cacheInstanceAttributeStateBy(A, l, a, r, s); t.cacheNodeIdxByUserId(r.userId, l, c), t.cacheMatrixInfoByUserId(r.userId, l, { matrix: r.matrix, boundingBox: r.boundingBox }), t.cacheInstanceGeometries(l, a) } } })), Bh.timeEnd("createInstanceGeometries") }, Pf.prototype._createBatchedInstanceGeometries = function (A, e) { var t = A.materialManager.getMaterialById(e.materialKey), i = A.getModelDescriptor(); if (!t) { var o = i.getNodeInfosByNodeId(e.nodeIdInfo[0]); if (!o) return; e.materialKey = o.materialId, t = A.materialManager.getMaterialById(e.materialKey), e.color = []; for (var n = 0, r = e.nodeIdInfo.length; r > n; n += 1) e.color.push(t.color.r, t.color.g, t.color.b, t.opacity) } var a = !1; t.aoMap && (a = !0), e.hasUV2 = a; var s = uh.getCombinedKeyString([e.materialKey, e.geoId]), l = this.cachedInstance; if (e.nodeIdInfo.length < 1) Bh.error("node 数量为 0 "); else if (l.vState[s]) Bh.warn("实例化几何已存在:", s); else { l.vState[s] = new Float32Array(e.nodeIdInfo.length), l.vColor[s] = e.color, l.vMirror[s] = new Float32Array(e.nodeIdInfo.length), l.mcol0[s] = e.mcol0, l.mcol1[s] = e.mcol1, l.mcol2[s] = e.mcol2, l.mcol3[s] = e.mcol3, l.muvCol0[s] = [], l.muvCol1[s] = [], l.muvCol2[s] = [], l.userId[s] = [], l.nodeId[s] = []; for (var c = new M, h = [], d = 0, p = e.nodeIdInfo.length; p > d; d += 1) h = [], l.userId[s].push(e.componentKeyInfo[d]), l.nodeId[s].push(e.nodeIdInfo[d]), h.push(e.mcol0[3 * d]), h.push(e.mcol0[3 * d + 1]), h.push(e.mcol0[3 * d + 2]), h.push(0), h.push(e.mcol1[3 * d]), h.push(e.mcol1[3 * d + 1]), h.push(e.mcol1[3 * d + 2]), h.push(0), h.push(e.mcol2[3 * d]), h.push(e.mcol2[3 * d + 1]), h.push(e.mcol2[3 * d + 2]), h.push(0), h.push(e.mcol3[3 * d]), h.push(e.mcol3[3 * d + 1]), h.push(e.mcol3[3 * d + 2]), h.push(1), c.fromArray(h), 0 > c.determinant() && (l.vMirror[s][d] = -1); this.getBufferAttributesBy(s); this.cacheBatchedInstanceGeometries(s, e); for (var g in e.componentInfo) if (e.componentInfo.hasOwnProperty(g)) for (var u = 0, f = e.componentInfo[g].length; f > u; u += 1) { var m = e.componentInfo[g][u]; this.cacheNodeIdxByUserId(g, s, m); var C = i.getNodeInfosByNodeId(e.nodeIdInfo[m]); C && this.cacheMatrixInfoByUserId(g, s, { matrix: C.matrix, boundingBox: C.boundingBox }) } this._makeInstanceNodeById(A, s, this.instanceGeometryMap[s]) } }, Pf.prototype.getBufferAttributesBy = function (A) { if (this.bufferAttributeMap[A]) return this.bufferAttributeMap[A]; var e = this.cachedInstance, t = new Oa(new Float32Array(e.mcol0[A]), 3, !1, 1), i = new Oa(new Float32Array(e.mcol1[A]), 3, !1, 1), o = new Oa(new Float32Array(e.mcol2[A]), 3, !1, 1), n = new Oa(new Float32Array(e.mcol3[A]), 3, !1, 1), r = [], a = [], s = []; if (e.muvCol0[A]) for (var l = 0, c = e.muvCol0[A].length; c > l; l += 1) r.push(new Oa(new Float32Array(e.muvCol0[A][l]), 2, !1, 1)), a.push(new Oa(new Float32Array(e.muvCol1[A][l]), 2, !1, 1)), s.push(new Oa(new Float32Array(e.muvCol2[A][l]), 2, !1, 1)); return this.bufferAttributeMap[A] = { attributeMcol0: t, attributeMcol1: i, attributeMcol2: o, attributeMcol3: n, attributeMuvCol0Array: r, attributeMuvCol1Array: a, attributeMuvCol2Array: s }, this.bufferAttributeMap[A] }, Pf.prototype._addInstanceNodeToScene = function (A, e, t) { this._getNodeGroup(A).add(t), t.updateMatrixWorld(!0), A.manager.addMeshToOctantMap(A.modelKey, e, new Bu(e, t)) }, Pf.prototype.addAllInstanceNodeToScene = function (A) { this.traverseInstanceNodeMap(null, (function (e, t) { for (var i = 0, o = t.length; o > i; i += 1) A.manager.addMeshToOctantMap(A._encodedDatabagId, e, new Bu(e, t[i])) })) }, Pf.prototype._makeInstanceNodeById = function (A, e, t) { var i = this.cachedInstance, o = A.materialManager, n = this.getMaterialIdByMeshId(e), r = this.getBufferAttributesBy(e), a = o.getInstanceMaterialById(n, A); this.instanceNodeMap[e] || (this.instanceNodeMap[e] = []); for (var s = this.instanceNodeMap[e], l = 0, c = t.length; c > l; l += 1) { t[l].setAttribute("mcol0", r.attributeMcol0), t[l].setAttribute("mcol1", r.attributeMcol1), t[l].setAttribute("mcol2", r.attributeMcol2), t[l].setAttribute("mcol3", r.attributeMcol3), r.attributeMuvCol0Array.length > 0 && (t[l].setAttribute("muvCol0", r.attributeMuvCol0Array[l]), t[l].setAttribute("muvCol1", r.attributeMuvCol1Array[l]), t[l].setAttribute("muvCol2", r.attributeMuvCol2Array[l])), t[l].setAttribute("aColor", new Oa(new Float32Array(i.vColor[e]), 4, !1, 1)), t[l].setAttribute("vState", new Oa(new Float32Array(i.vState[e]), 1, !1, 1)), t[l].setAttribute("vState2", new Oa(new Float32Array(i.vState[e]), 1, !1, 1)), t[l].setAttribute("vMirror", new Oa(new Float32Array(i.vMirror[e]), 1, !1, 1)), t[l].getAttribute("vState2").array.fill(Hc.HIDDEN); var h = t[l].index; t[l].addGroup(0, h.count, 0), t[l].addGroup(0, h.count, 1), a[1].visible = !1; var d = new Kf(t[l], a); if (d.visible = !0, d.modelKey = A.modelKey, d.frustumCulled = !1, s.push(d), !uh.isEmptyObject(A.subModel)) { var p = i.userId[e][0]; if (p) { var g = uh.getModelKeyFromComponentKey(p); A.subModel[g] && d.matrix.copy(A.subModel[g]) } } this._addInstanceNodeToScene(A, e, d) } }, Pf.prototype._makeInstanceNodes = function (A) { Bh.time("makeInstanceNodes"); var e = this; this.traverseInstanceGeometryMap((function (t, i) { e._makeInstanceNodeById(A, t, i) })), Bh.timeEnd("makeInstanceNodes") }, Pf.prototype.resetInstanceMaterial = function (A) { var e = this, t = A.materialManager; this.traverseInstanceGeometryMap((function (i, o) { var n = e.getMaterialIdByMeshId(i), r = t.getInstanceMaterialById(n, A); r[0].visible = !0, r[1].visible = !1, r.splice(2, 1); for (var a = 0, s = o.length; s > a; a += 1) { if (o[a].getAttribute("vState").array.fill(Hc.NONE), o[0].removed) for (var l in o[0].removed) o[a].getAttribute("vState").array[l] = -1; o[a].getAttribute("vState").needsUpdate = !0, o[a].getAttribute("vState2").array.fill(Hc.HIDDEN), o[a].getAttribute("vState2").needsUpdate = !0, o[a].deleteAttribute("vState3"), o[a].groups.splice(2, 1) } })) }, Pf.prototype.clearInstanceStateByUserId = function (A) { function e(A, e, t, i) { for (var o = A.getAttribute("vState").array, n = A.getAttribute("vState2").array, r = 0, a = e.length; a > r; r += 1) { var s = e[r]; o[s] = t, n[s] = i } A.getAttribute("vState").needsUpdate = !0, A.getAttribute("vState2").needsUpdate = !0 } var t = this, i = Hc.NONE, o = Hc.HIDDEN; this.traverseNodeIdxMapByUserId(A, (function (A, n) { var r = t.getInstanceGeometries(A); if (r) for (var a = 0, s = r.length; s > a; a += 1) e(r[a], n, i, o) })) }, Pf.prototype.updateInstanceStateByUserId = function (A, e, t, i) { function o(A, e, t, i, o, n, r) { var a = A.getAttribute("vState").array, s = A.getAttribute("vState2").array, l = A.getAttribute("aColor"), c = A.getAttribute("vState3"), h = null; null !== r && (c ? h = c.array : ((h = (c = A.getAttribute("vState").clone()).array).fill(Hc.HIDDEN), A.setAttribute("vState3", c))); for (var d = l ? l.array : null, p = 0; e.length > p; p += 1) { var g = e[p]; a[g] = t, s[g] = i, h && (h[g] = r), null !== d && null !== o && (d[4 * g] = o[0], d[4 * g + 1] = o[1], d[4 * g + 2] = o[2], d[4 * g + 3] = o[3]) } if (A.getAttribute("vState").needsUpdate = !0, A.getAttribute("vState2").needsUpdate = !0, c && (c.needsUpdate = !0), l && (l.needsUpdate = !0), n) { var u = !1, f = !1; if (!n[0].visible) if (t !== Hc.HIDDEN) n[0].visible = !0; else { for (var m = 0, C = a.length; C > m; m += 1) if (a[m] !== Hc.HIDDEN) { u = !0; break } n[0].visible = u } if (!n[1].visible) if (i !== Hc.HIDDEN) n[1].visible = !0; else { for (var y = 0, v = s.length; v > y; y += 1) if (s[y] !== Hc.HIDDEN) { f = !0; break } n[1].visible = f } } } var n = A.materialManager, r = this; this.traverseNodeIdxMapByUserId(e, (function (a, s) { var l = r.getInstanceGeometries(a); r.getInstanceNodesById(a); if (l) { var c = null, h = null, d = null; if (t === Hc.HIDDEN) { c = Hc.HIDDEN, h = Hc.HIDDEN; for (var p = 0, g = l.length; g > p; p += 1) o(l[p], s, c, h, null, null) } else { var u = r.getMaterialIdByMeshId(a), f = r.getUsableMaterialColorParamsBy(A, u, t, i), m = f.rgbaColor, C = t; t === Hc.TRANSPARENT && (C = Hc.OVERRIDED), t === Hc.SELECTED && r.cacheSelectedObjectIds(e, a); var y = n.getInstanceMaterialById(u, A), v = y[0]; if (v.transparent === f.transparent ? (c = C, h = Hc.HIDDEN) : (c = Hc.HIDDEN, h = C), !0 === f.wireframe) { var I = y[2] || Kd.createInstanceMaterial(Kd.getMaterialParameters(v)); I.wireframe = !0, I.defines.INSTANCE_STATE_TERTIARY = "", 3 > y.length && y.push(I), c = Hc.HIDDEN, h = Hc.HIDDEN, d = C } C === Hc.BLINK && v.setBlinkColor(A.manager.getBlinkColor()); for (p = 0, g = l.length; g > p; p += 1) { if (!0 === f.wireframe) { var E = l[p].groups[0]; l[p].groups[2] = { start: E.start, count: E.count, materialIndex: 2 } } o(l[p], s, c, h, m, y, d) } } } })) }, Pf.prototype.getUsableMaterialColorParamsBy = function (A, e, t, i) { var o = A.selectedMaterial, n = A.manager.filter._getMaterialByName("scene"), r = A.materialManager, a = A.manager.getOverrideMaterialByName(e) || r.getMaterialById(e), s = null, l = null; switch (t) { case Hc.HOVER: i ? (s = A.manager.filter._getMaterialByName(i), l = A.manager.sceneState.getHoverColorByMaterial(s)) : l = A.manager.sceneState.getHoverColorByMaterial(a); break; case Hc.SELECTED: l = Kd.getColorParamsByMaterial(o); break; case Hc.TRANSPARENT: l = Kd.getColorParamsByMaterial(n); break; case Hc.OVERRIDED: case Hc.BLINK: i ? (s = A.manager.filter._getMaterialByName(i), l = Kd.getColorParamsByMaterial(s)) : l = Kd.getColorParamsByMaterial(a) } return l }, Pf.prototype.getInstanceNodesById = function (A) { return this.instanceNodeMap[A] }, Pf.prototype.traverseInstanceNodeMap = function (A, e) { for (var t = this.instanceNodeMap, i = 0, o = (A = A || Object.keys(this.instanceNodeMap)).length; o > i; i += 1) { var n = A[i]; e(n, t[n]) } }, Pf.prototype.getInstanceGeometries = function (A) { return this.instanceGeometryMap[A] }, Pf.prototype.cacheInstanceGeometries = function (A, e) { if (!this.instanceGeometryMap[A]) { var t = this.instanceGeometryMap[A] = []; e instanceof Array || (e = [e]); for (var i = 0, o = e.length; o > i; i += 1) t[i] = new Na, t[i].setIndex(e[i].index), e[i].attributes.position && t[i].setAttribute("position", e[i].attributes.position), e[i].attributes.normal && t[i].setAttribute("normal", e[i].attributes.normal), e[i].attributes.uv && t[i].setAttribute("uv", e[i].attributes.uv), e[i].attributes.uv2 && t[i].setAttribute("uv2", e[i].attributes.uv2) } }, Pf.prototype.cacheBatchedInstanceGeometries = function (A, e) { if (this.instanceGeometryMap[A]) return this.instanceGeometryMap[A][0]; var t = this.instanceGeometryMap[A] = [], i = new Na; return t[0] = i, i.setIndex(new YA(e.index, 1)), e.position && e.position.length > 0 && i.setAttribute("position", new YA(e.position, 3)), e.normal && e.normal.length === e.position.length && i.setAttribute("normal", new YA(e.normal, 3)), e.uv && e.uv.length > 0 && i.setAttribute("uv", new YA(e.uv, 2)), e.hasUV2 && i.getAttribute("uv") && i.setAttribute("uv2", i.getAttribute("uv")), i.getAttribute("normal") || i.computeVertexNormals(), i }, Pf.prototype.traverseInstanceGeometryMap = function (A) { var e = this.instanceGeometryMap; for (var t in e) A(t, e[t]) }, Pf.prototype.disposeInstanceGeometries = function () { this.traverseInstanceGeometryMap((function (A, e) { for (var t = 0, i = e.length; i > t; t += 1) e[t].dispose() })) }, Pf.prototype.cacheInstanceAttributeStateBy = function (A, e, t, i, o) { var n = i.materialId; t instanceof Array || (t = [t]); var r = t.length, a = this.cachedInstance; if (!a.vState[e]) { a.vState[e] = [], a.vColor[e] = [], a.vMirror[e] = [], a.mcol0[e] = [], a.mcol1[e] = [], a.mcol2[e] = [], a.mcol3[e] = [], a.muvCol0[e] = [], a.muvCol1[e] = [], a.muvCol2[e] = [], a.userId[e] = [], a.nodeId[e] = []; for (var s = 0; r > s; s += 1) a.muvCol0[e][s] = [], a.muvCol1[e][s] = [], a.muvCol2[e][s] = [] } var l = o || A.materialManager.getMaterialById(n); a.userId[e].push(i.userId), a.nodeId[e].push(i.nodeId), a.vColor[e].push(l.color.r, l.color.g, l.color.b, l.opacity), a.vState[e].push(0); var c = i.matrix.elements; return a.mcol0[e].push(c[0], c[1], c[2]), a.mcol1[e].push(c[4], c[5], c[6]), a.mcol2[e].push(c[8], c[9], c[10]), a.mcol3[e].push(c[12], c[13], c[14]), 0 > i.matrix.determinant() ? a.vMirror[e].push(-1) : a.vMirror[e].push(0), a.vState[e].length - 1 }, Pf.prototype.cacheNodeIdxByUserId = function (A, e, t) { var i = this.nodeIdxMapFromUserId; i[A] || (i[A] = {}), i[A][e] || (i[A][e] = []), i[A][e].push(t) }, Pf.prototype.getNodeIdxMapByUserId = function (A) { return this.nodeIdxMapFromUserId[A] }, Pf.prototype.traverseNodeIdxMapByUserId = function (A, e) { var t = this.nodeIdxMapFromUserId[A]; for (var i in t) e(i, t[i]) }, Pf.prototype.traverseNodeIdxMap = function (A, e) { for (var t = Object.keys(this.nodeIdxMapFromUserId), i = 0, o = t.length; o > i; i += 1) { var n = t[i], r = this.nodeIdxMapFromUserId[n]; if (!e || !e(n)) for (var a in r) A(a, r[a]) } }, Pf.prototype.cacheMatrixInfoByUserId = function (A, e, t) { var i = this.matrixInfoMapFromUserId; i[A] || (i[A] = {}), i[A][e] || (i[A][e] = []), i[A][e].push(t) }, Pf.prototype.traverseMatrixInfoMapByUserId = function (A, e) { var t = this.matrixInfoMapFromUserId[A]; for (var i in t) e(i, t[i]) }, Pf.prototype.getMeshesByUserId = function (A, e) { var t = this, i = []; return this.traverseMatrixInfoMapByUserId(e, (function (e, o) { for (var n = t.getInstanceNodesById(e), r = 0, a = o.length; a > r; r += 1) for (var s = 0, l = n.length; l > s; s += 1) { var c = {}; if (c.matrix = A.getModelMatrix().clone().multiply(o[r].matrix), c.mesh = n[s], 1 === l) c.boundingBox = o[r].boundingBox; else { var h = c.mesh.geometry.boundingBox; h ? h = h.clone() : (c.mesh.geometry.computeBoundingBox(), h = c.mesh.geometry.boundingBox.clone()), h.applyMatrix4(c.matrix), c.boundingBox = h } i.push(c) } })), i }, Pf.prototype._getNodeGroup = function (A) { return A._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 }) }, Pf.prototype._hasNodeGroup = function (A) { return A._hasNodeGroup(gp.INSTANCEGEOMETRY) }, Pf.prototype.clearSelectedObjectIds = function () { this.selectedObjectIds.length = 0 }, Pf.prototype.cacheSelectedObjectIds = function (A, e) { this.selectedObjectIds.push({ uid: A, mgId: e }) }, Pf.prototype.adjustVisibility = function (A, e) { var t = this._getNodeGroup(A), i = t.visible; e && !t.bVisible || (t.visible = e), t.bVisible = i }, Pf.prototype.changeVisibilityOfSelectedObjects = function (A, e) { var t = null; if (e) for (var i = 0, o = (t = this.selectedMeshes).length; o > i; i += 1) { var n = t[i].object, r = t[i].indices; if (r) { if (r.length) { for (var a = n.geometry.getAttribute("vState").array, s = n.geometry.getAttribute("vState2").array, l = 0, c = r.length; c > l; l += 1) r[l].state ? a[r[l].idx] = r[l].state : r[l].state2 && (s[r[l].idx] = r[l].state2); n.geometry.getAttribute("vState").needsUpdate = !0, n.geometry.getAttribute("vState2").needsUpdate = !0 } } else n.visible = t[i].visibility } else { this.selectedMeshes.length = 0, t = this.selectedMeshes; for (var h = {}, d = 0, p = this.selectedObjectIds.length; p > d; d += 1) h[this.selectedObjectIds[d].mgId] = !0; var g = Object.keys(h); this.traverseInstanceNodeMap(g, (function (A, e) { for (var i = 0, o = e.length; o > i; i += 1) { for (var n = e[i], r = [], a = n.geometry.getAttribute("vState").array, s = n.geometry.getAttribute("vState2").array, l = 0, c = a.length; c > l; l += 1) a[l] === Hc.SELECTED ? (r.push({ idx: l, state: a[l] }), a[l] = Hc.HIDDEN) : s[l] === Hc.SELECTED && (r.push({ idx: l, state2: s[l] }), s[l] = Hc.HIDDEN); r.length ? (n.geometry.getAttribute("vState").needsUpdate = !0, n.geometry.getAttribute("vState2").needsUpdate = !0, t.push({ object: n, indices: r })) : (t.push({ object: n, indices: null, visibility: n.visible }), n.visible = !1) } })) } }, Pf.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { var t = null; if (e) for (var i = 0, o = (t = this.nonSelectedMeshes).length; o > i; i += 1) { var n = t[i].object, r = t[i].indices; if (r) { if (r.length) { for (var a = n.geometry.getAttribute("vState").array, s = n.geometry.getAttribute("vState2").array, l = 0, c = r.length; c > l; l += 1) void 0 !== r[l].state ? a[r[l].idx] = r[l].state : void 0 !== r[l].state2 && (s[r[l].idx] = r[l].state2); n.geometry.getAttribute("vState").needsUpdate = !0 } } else n.visible = t[i].visibility } else { this.nonSelectedMeshes.length = 0, t = this.nonSelectedMeshes; for (var h = {}, d = 0, p = this.selectedObjectIds.length; p > d; d += 1) h[this.selectedObjectIds[d].mgId] = !0; this.traverseInstanceNodeMap(null, (function (A, e) { if (h[A]) for (var i = 0, o = e.length; o > i; i += 1) { for (var n = [], r = (p = e[i]).geometry.getAttribute("vState").array, a = p.geometry.getAttribute("vState2").array, s = 0, l = r.length; l > s; s += 1) r[s] !== Hc.SELECTED && r[s] !== Hc.HIDDEN ? (n.push({ idx: s, state: r[s] }), r[s] = Hc.HIDDEN) : a[s] !== Hc.SELECTED && a[s] !== Hc.HIDDEN && (n.push({ idx: s, state2: a[s] }), a[s] = Hc.HIDDEN); n.length && (p.geometry.getAttribute("vState").needsUpdate = !0, p.geometry.getAttribute("vState2").needsUpdate = !0, t.push({ object: p, indices: n })) } else for (var c = 0, d = e.length; d > c; c += 1) { var p; t.push({ object: p = e[c], indices: null, visibility: p.visible }), p.visible = !1 } })) } }, Pf.prototype.restoreVisibilityOfObjects = function () { this.selectedMeshes.length = 0, this.nonSelectedMeshes.length = 0 }, Pf.prototype.getMeshIdByNodeInfo = function (A) { return uh.getCombinedKeyString([A.materialId, A.geometryId]) }, Pf.prototype.getMaterialIdByMeshId = function (A) { return uh.splitCombinedKeyString(A)[0] }, Pf.prototype.getOriginalMaterialIdByMeshId = function (A) { var e = uh.splitCombinedKeyString(A); return uh.splitCombinedKeyString(e[0], "_")[0] }, Pf.prototype.disposeBufferAfterVbo = function () { if (!this.bufferDestroyed) { this.bufferDestroyed = !0; var A = ["muvCol0", "muvCol1", "muvCol2", "mcol0", "mcol1", "mcol2", "mcol3"]; vc.EnableExplosion && A.pop(), this.traverseInstanceGeometryMap((function (e, t) { for (var i = 0, o = t.length; o > i; i += 1) Tu.disposeBufferFromGeometry(t[i], A) })) } }, Pf.prototype.getGeometryBuffersByUserId = function (A, e) { var t = A.getModelDescriptor().getInstancedNodeInfosById(e); if (!t) return []; for (var i = [], o = A.getDatabagId(), n = 0, r = t.length; r > n; n += 1) { var a = t[n], s = this.getGeometryByNodeInfo(A, a), l = this._isLines(a); if (s instanceof Array) for (var c = 0, h = s.length; h > c; c += 1) i.push({ isLines: l, databagId: o, nodeId: a.nodeId, position: s[c].getAttribute("position").array, index: s[c].getIndex().array, matrix: a.matrix }); else i.push({ databagId: o, nodeId: a.nodeId, position: s.getAttribute("position").array, index: s.getIndex().array, matrix: a.matrix }) } return i }, Pf.prototype.explode = function (A, e, t) { var i = this; for (var o in i.nodeIdxMapFromUserId) i.traverseNodeIdxMapByUserId(o, (function (n, r) { var a = A.manager.getComponentInfoByUserId(o).boundingBox, s = uh.computeExplodeTranslation(e, a, t), l = i.getInstanceGeometries(n); l && Gf(l[0], r, s) })) }, Pf.prototype.explosion = function (A, e) { var t = Object.keys(this.nodeIdxMapFromUserId); e.componentKey = t, this.componentsExplosion(A, e) }, Pf.prototype.closeExplosion = function (A) { this.explosion(A, {}) }, Pf.prototype.componentsExplosion = function (A, e) { var t = e.coefficientX || 1, i = e.coefficientY || 1, o = e.coefficientZ || 1, n = e.offsetX || 0, r = e.offsetY || 0, a = e.offsetZ || 0, s = null; if (e.center) s = (new y).fromArray(e.center); else if (1 !== t || 1 !== i || 1 !== o || 0 !== n || 0 !== r || 0 !== a) return; var l = Array.isArray(e.componentKey) ? e.componentKey : [e.componentKey], c = new y, h = new aA, d = new y(0, 0, 0), p = new y(0, 0, 0), g = new y, u = new M, m = A.getModelMatrix(); m && s && (u.getInverse(m), s.applyMatrix4(u)); var C = A.manager, v = !1, I = new y, E = new f, B = new y(1, 1, 1); uh.isEmptyObject(A.subModel) || (v = !0); for (var x = 0, S = l.length; S > x; x += 1) { var w = l[x]; if (w) { var b = A.getModelDescriptor().getInstancedNodeInfosById(w); if (b) for (var U = this.nodeIdxMapFromUserId[w], F = 0, K = b.length; K > F; F += 1) { var Q = b[F]; if (Q) { var R = Q.materialId + "&" + Q.geometryId, T = new y(1, 1, 1); if (v) this.getInstanceNodesById(R)[0].matrix.decompose(I, E, B), T.divide(B); if (h.copy(Q.boundingBox), h.getCenter(c), Q.userData || (Q.userData = {}), d.set(0, 0, 0), p.set(0, 0, 0), 1 !== t || 1 !== i || 1 !== o || Q.userData.explosionFactor) { Q.userData.explosionFactor || (Q.userData.explosionFactor = new y(1, 1, 1), Q.userData.explosionBaseDifference = c.sub(s).clone().multiply(T)); var k = Q.userData.explosionFactor, D = Q.userData.explosionBaseDifference; d.set((t - k.x) * D.x, (i - k.y) * D.y, (o - k.z) * D.z), 1 === t && 1 === i && 1 === o ? (Q.userData.explosionFactor = void 0, Q.userData.explosionBaseDifference = void 0) : k.set(t, i, o) } if (0 !== n || 0 !== r || 0 !== a || Q.userData.explosionOffset) { Q.userData.explosionOffset || (Q.userData.explosionOffset = new y(0, 0, 0)); var L = Q.userData.explosionOffset; p.set(n * T.x - L.x, r * T.y - L.y, a * T.z - L.z), 0 === n && 0 === r && 0 === a ? Q.userData.explosionOffset = void 0 : L.set(n * T.x, r * T.y, a * T.z) } if (g.set(d.x + p.x, d.y + p.y, d.z + p.z), 0 !== g.x || 0 !== g.y || 0 !== g.z) { Q.userData.explosionFactor || Q.userData.explosionOffset ? C.explosionList[w] || (C.explosionList[w] = !0) : delete C.explosionList[w]; var N = g.clone().multiply(B), O = u; v && (O = u.clone()).makeTranslation(g.x, g.y, g.z), u.makeTranslation(N.x, N.y, N.z), Q.transformation || (Q.transformation = !0, Q.transformationOriginalMatrix = Q.matrix.clone(), Q.applyMatrix = new M, Q.transformationOriginalBoundingBox = Q.boundingBox.clone()), Q.matrix.premultiply(O), Q.applyMatrix.premultiply(u), Q.boundingBox.copy(Q.transformationOriginalBoundingBox).applyMatrix4(Q.applyMatrix); var V = Q.matrix, G = U[R], P = this.getInstanceGeometries(R); if (P) { var q = P[0], j = q.getAttribute("mcol0"), H = q.getAttribute("mcol1"), Y = q.getAttribute("mcol2"), W = q.getAttribute("mcol3"), J = G[0]; j.array[3 * J] = V.elements[0], j.array[3 * J + 1] = V.elements[1], j.array[3 * J + 2] = V.elements[2], j.needsUpdate = !0, H.array[3 * J] = V.elements[4], H.array[3 * J + 1] = V.elements[5], H.array[3 * J + 2] = V.elements[6], H.needsUpdate = !0, Y.array[3 * J] = V.elements[8], Y.array[3 * J + 1] = V.elements[9], Y.array[3 * J + 2] = V.elements[10], Y.needsUpdate = !0, W.array[3 * J] = V.elements[12], W.array[3 * J + 1] = V.elements[13], W.array[3 * J + 2] = V.elements[14], W.needsUpdate = !0 } } } } } } }, Pf.prototype.closeComponentsExplosion = function (A, e) { e = Array.isArray(e) ? e : [e]; this.componentsExplosion(A, { componentKey: e }) }, Pf.prototype._isLines = function (A) { return A.type === $u.EnumNodeItemType.LINE }, Pf.prototype.getPickingNodeGenerator = function () { return this.pickingNodeGenerator || (this.pickingNodeGenerator = new Vf(this)), this.pickingNodeGenerator }, Pf.prototype.calculateClippingIds = function (A, e) { var t = this; for (var i in t.nodeIdxMapFromUserId) this.traverseMatrixInfoMapByUserId(i, (function (i, o) { for (var n = t.getInstanceNodesById(i), r = 0, a = o.length; a > r; r += 1) for (var s = 0, l = n.length; l > s; s += 1) n[s].intersectBoxWithClipPlane(A, o[r]) && n[s].getIntersectionPoints(A, o[r], e, !0) })) }; var qf = function (A) { of .call(this, A), this.nodeGroupName = "PickingInstancedWireFrameGroup" }; Object.assign(qf.prototype, of .prototype), eu(qf, [{ key: "generatePickingMeshes", value: function () { this.manager.generateWireframe(), this.manager.updateNodes(); var A = this, e = this.manager, t = e.manager.getCachedInstanceData(), i = !vc.BatchMergeEnabled; e._traverseWireframeGeometryMap((function (o, n) { for (var r = [], a = e._getWireframeMeshById(o), s = 0, l = n.length; l > s; s += 1) { var c = n[s], h = new Na, d = a[s]; h.setAttribute("position", c.getAttribute("position")), h.setAttribute("mcol0", c.getAttribute("mcol0")), h.setAttribute("mcol1", c.getAttribute("mcol1")), h.setAttribute("mcol2", c.getAttribute("mcol2")), h.setAttribute("mcol3", c.getAttribute("mcol3")), h.setAttribute("vState", new Oa(new Float32Array(t.vState[o]), 1, !1, 1)), h.setIndex(c.getIndex()); var p = new jo(h, Kd.DefaultMaterial); d.matrixWorld.decompose(p.position, p.quaternion, p.scale), p.name = o, p.frustumCulled = !1, p.renderOrder = i ? 0 : 1, r.push(p) } A.addToPickingNodeMap(o, r) })) } }, { key: "updatePickingMeshesState", value: function (A, e, t) { if (this.pickingNodeMap) for (var i = this.manager.manager, o = this.pickingNodeMap, n = 0, r = e.length; r > n; n += 1) { var a = e[n]; if (i.isPickableNode(a)) { var s = i.getMeshManager().getNodeIdxMapByUserId(a); if (s) for (var l = Object.keys(s), c = 0, h = l.length; h > c; c += 1) { var d = l[c], p = o[d]; if (p) for (var g = s[d], u = 0, f = p.length; f > u; u += 1) { var m = p[u]; m.material = A, m.visible = !0; for (var C = m.geometry, y = C.getAttribute("vState").array, v = 0, I = g.length; I > v; v += 1) y[g[v]] = Hc.NONE; C.getAttribute("vState").needsUpdate = !0 } } } } } }, { key: "resetPickingMeshesState", value: function () { if (this.pickingNodeMap) for (var A = this.pickingNodeMap, e = Object.keys(A), t = 0, i = e.length; i > t; t += 1) for (var o = A[e[t]], n = 0, r = o.length; r > n; n += 1) o[n].visible = !1, o[n].geometry.getAttribute("vState").array.fill(Hc.HIDDEN), o[n].geometry.getAttribute("vState").needsUpdate = !0 } }]); var jf = function (A) { this.manager = A, this.model = A.model, this.wireframeGeometryMap = {}, this.wireframeMeshMap = {}, this.noNeedWireframingIdMap = {}, this.generated = !1 }; jf.prototype.destroy = function () { this.disposeGeometries(), this.wireframeGeometryMap = null, this.noNeedWireframingIdMap = null, this.manager = null }, jf.prototype.clearData = function () { this.generated = !1, this.bufferDestroyed = !1, this.wireframeMesh = {}, this.disposeGeometries(), this.wireframeGeometryMap = {}, this.noNeedWireframingIdMap = {} }, jf.prototype.disposeGeometries = function () { this._traverseWireframeGeometryMap((function (A, e) { for (var t = 0, i = e.length; i > t; t += 1) e[t].dispose() })) }, jf.prototype.updateNodes = function (A) { A || (A = this.model); var e = null; A.isActivateWireframe() ? (this.generateWireframe(A), (e = this._getNodeGroup(A)).updateMatrixWorld(!0), e.visible = !0) : this._hasNodeGroup(A) && ((e = this._getNodeGroup(A)).visible = !1) }, jf.prototype.resetInstanceMaterial = function () { var A = Hc.NONE; this._traverseWireframeGeometryMap((function (e, t) { for (var i = 0, o = t.length; o > i; i += 1) { for (var n = t[i].getAttribute("vState").array, r = 0, a = n.length; a > r; r += 1) n[r] = A; t[i].getAttribute("vState").needsUpdate = !0 } })), this._updateNoWireframingState() }, jf.prototype.updateInstanceWireframeByUserId = function (A, e, t, i) { if (t === Hc.HIDDEN || t === Hc.NONE || t === Hc.OVERRIDED) { var o = null; if (i) { var n = A.getFilter()._getMaterialByName(i), r = Kd.getColorParamsByMaterial(n); o = r.rgbaColor } var a = this; this.manager.traverseNodeIdxMapByUserId(e, (function (A, e) { a._setInstanceWireframeState(A, e, t, o) })) } }, jf.prototype._updateNoWireframingState = function () { var A = this, e = Hc.HIDDEN; this.manager.traverseNodeIdxMap((function (t, i) { A._setInstanceWireframeState(t, i, e) }), (function (e) { return A._isNeedWireframing(e) })) }, jf.prototype._setInstanceWireframeState = function (A, e, t, i) { var o = this._getWireframeGeometryById(A); if (o) for (var n = 0, r = o.length; r > n; n += 1) { var a = o[n].getAttribute("vState").array, s = null, l = null; i && (l = (s = o[n].getAttribute("aColor")) ? s.array : null); for (var c = 0, h = e.length; h > c; c += 1) { var d = e[c]; a[d] = t, null !== l && (l[4 * d] = i[0], l[4 * d + 1] = i[1], l[4 * d + 2] = i[2], l[4 * d + 3] = i[3]) } o[n].getAttribute("vState").needsUpdate = !0, s && (s.needsUpdate = !0) } }, jf.prototype._generateInstanceWireframe = function (A) { A || (A = this.model), this._collectNoWireframingIds(A), this._createInstanceWireframeGeometries(A), this._makeInstanceWireframe(A), this._updateNoWireframingState() }, jf.prototype.generateWireframe = function (A) { A || (A = this.model), this.generated || (Bh.time("createInstancedWireframeGeometry"), this._generateInstanceWireframe(A), Bh.timeEnd("createInstancedWireframeGeometry"), this.generated = !0) }, jf.prototype._collectNoWireframingIds = function (A) { var e = this, t = A.manager.filter; A.getModelDescriptor().traverseInstancedNodeInfos(null, (function (A, i) { i && t._hasRenderWithBoardlineFilter() && !t._isRenderWithBoardline(i[0]) && (e.noNeedWireframingIdMap[A] = !0) })) }, jf.prototype._createInstanceWireframeGeometries = function (A) { var e = this, t = {}; this.manager.traverseInstanceGeometryMap((function (A, i) { for (var o = e._getWireframeBufferById(A, i, t), n = e.wireframeGeometryMap[A] = [], r = 0, a = o.length; a > r; r += 1) { var s = new Na; s.setIndex(o[r].index), s.setAttribute("position", o[r].position), n.push(s) } })), t = null }, jf.prototype._makeInstanceWireframe = function (A) { var e = this, t = this.manager, i = t.getCachedInstanceData(), o = this._getWireframeMaterial(A); this._traverseWireframeGeometryMap((function (n, r) { for (var a = t.getBufferAttributesBy(n), s = e.wireframeMeshMap[n] = [], l = 0, c = r.length; c > l; l += 1) { r[l].setAttribute("vState", new Oa(new Float32Array(i.vState[n]), 1, !1, 1)), r[l].setAttribute("mcol0", a.attributeMcol0), r[l].setAttribute("mcol1", a.attributeMcol1), r[l].setAttribute("mcol2", a.attributeMcol2), r[l].setAttribute("mcol3", a.attributeMcol3); var h = new jo(r[l], o); if (h.matrixAutoUpdate = !1, h.frustumCulled = !1, !uh.isEmptyObject(A.subModel)) { var d = i.userId[n][0]; if (d) { var p = uh.getModelKeyFromComponentKey(d); A.subModel[p] && h.matrix.copy(A.subModel[p]) } } s.push(h), e._addWireframeNodeToScene(A, h) } })) }, jf.prototype._addWireframeNodeToScene = function (A, e) { this._getNodeGroup(A).add(e), e.updateMatrixWorld(!0) }, jf.prototype._isNeedWireframing = function (A) { return !this.noNeedWireframingIdMap || !this.noNeedWireframingIdMap[A] }, jf.prototype._getWireframeMaterial = function (A) { return A.getInstanceWireframeMaterial() }, jf.prototype._getWireframeBufferById = function (A, e, t) { var i = this.getGeometryIdByMeshId(A); if (t[i]) return t[i]; t[i] = []; for (var o = 0, n = e.length; n > o; o += 1) { var r = e[o]; t[i].push({ index: Up(r.attributes.position.array, r.index.array), position: r.attributes.position }) } return t[i] }, jf.prototype._getWireframeGeometryById = function (A) { return this.wireframeGeometryMap[A] }, jf.prototype._getWireframeMeshById = function (A) { return this.wireframeMeshMap[A] }, jf.prototype._traverseWireframeGeometryMap = function (A) { var e = this.wireframeGeometryMap; for (var t in e) A(t, e[t]) }, jf.prototype._getNodeGroup = function (A) { return A._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 }) }, jf.prototype._hasNodeGroup = function (A) { return A._hasNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY) }, jf.prototype.getGeometryIdByMeshId = function (A) { return uh.splitCombinedKeyString(A)[1] }, jf.prototype.adjustVisibility = function (A, e) { if (A.isActivateWireframe()) { var t = this._getNodeGroup(A), i = t.visible; e && !t.bVisible || (t.visible = e), t.bVisible = i } }, jf.prototype.changeVisibilityOfSelectedObjects = function (A, e) {}, jf.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { this.adjustVisibility(A, e) }, jf.prototype.restoreVisibilityOfObjects = function () {}, jf.prototype.disposeBufferAfterVbo = function () { if (this.generated && !this.bufferDestroyed) { this.bufferDestroyed = !0; var A = ["mcol0", "mcol1", "mcol2", "mcol3"]; vc.EnableExplosion && A.pop(), this._traverseWireframeGeometryMap((function (e, t) { for (var i = 0, o = t.length; o > i; i += 1) Tu.disposeBufferFromGeometry(t[i], A) })) } }, jf.prototype.getPickingNodeGenerator = function () { return this.pickingNodeGenerator || (this.pickingNodeGenerator = new qf(this)), this.pickingNodeGenerator }; var Hf = function (A) { this.model = A, this.meshManager = new Pf(this), this.wireframeManager = new jf(this) }; Hf.prototype.destroy = function () { this.meshManager.destroy(), this.meshManager = null, this.wireframeManager.destroy(), this.wireframeManager = null }, Hf.prototype.clearData = function () { this.meshManager.clearData(), this.wireframeManager.clearData() }, Hf.prototype.getGeometryByNodeInfo = function (A, e) { return this.meshManager.getGeometryByNodeInfo(A, e) }, Hf.prototype.getInstanceGeometries = function () { return this.meshManager.instanceGeometryMap }, Hf.prototype.traverseInstanceGeometryMap = function (A) { this.meshManager.traverseInstanceGeometryMap(A) }, Hf.prototype.getCachedInstanceData = function () { return this.meshManager.cachedInstance }, Hf.prototype.getBufferAttributesBy = function (A) { return this.meshManager.getBufferAttributesBy(A) }, Hf.prototype.traverseNodeIdxMapByUserId = function (A, e) { this.meshManager.traverseNodeIdxMapByUserId(A, e) }, Hf.prototype.traverseNodeIdxMap = function (A, e) { this.meshManager.traverseNodeIdxMap(A, e) }, Hf.prototype.getMeshesByUserId = function (A, e) { return this.meshManager.getMeshesByUserId(A, e) }, Hf.prototype._updateInstanceMaterialByUserId = function (A, e, t, i) { this.meshManager.updateInstanceStateByUserId(A, e, t, i) }, Hf.prototype._updateInstanceMaterialForWireFrameByUserId = function (A, e, t, i) { this.wireframeManager.updateInstanceWireframeByUserId(A, e, t, i) }, Hf.prototype._updateInstanceMaterial = function (A) { Bh.time("update instance material"); var e = zc; for (var t in this.clearSelectedObjectIds(), this.filteredIds) { var i = this.filteredIds[t]; if (i[e.HIDDEN]) this._updateInstanceMaterialByUserId(A, t, Hc.HIDDEN), this._updateInstanceMaterialForWireFrameByUserId(A, t, Hc.HIDDEN); else if (i[e.TRANSPARENT]) this._updateInstanceMaterialByUserId(A, t, Hc.TRANSPARENT); else { if (A.manager.isSelectPriority()) { if (i[e.SELECTED]) { this._updateInstanceMaterialByUserId(A, t, Hc.SELECTED); continue } if (i[e.BLINK]) { i[e.OVERRIDED] ? this._updateInstanceMaterialByUserId(A, t, Hc.BLINK, i[e.OVERRIDED]) : this._updateInstanceMaterialByUserId(A, t, Hc.BLINK); continue } } else { if (i[e.BLINK]) { i[e.OVERRIDED] ? this._updateInstanceMaterialByUserId(A, t, Hc.BLINK, i[e.OVERRIDED]) : this._updateInstanceMaterialByUserId(A, t, Hc.BLINK); continue } if (i[e.SELECTED]) { this._updateInstanceMaterialByUserId(A, t, Hc.SELECTED); continue } } i[e.HOVER] ? i[e.OVERRIDED] ? this._updateInstanceMaterialByUserId(A, t, Hc.HOVER, i[e.OVERRIDED]) : this._updateInstanceMaterialByUserId(A, t, Hc.HOVER) : i[e.OVERRIDED] && this._updateInstanceMaterialByUserId(A, t, Hc.OVERRIDED, i[e.OVERRIDED]) } } this._updateInstanceMaterialForWireFrame(A), Bh.timeEnd("update instance material") }, Hf.prototype._updateInstanceMaterialForWireFrame = function (A) { var e = this.mapFilteredUserIdsForWireFrame; if (e) for (var t = Object.keys(e), i = 0, o = t.length; o > i; i += 1) { var n = t[i]; this.filteredIds && this.filteredIds[n] && this.filteredIds[n][zc.HIDDEN] || this._updateInstanceMaterialForWireFrameByUserId(A, n, Hc.OVERRIDED, e[n]) } }, Hf.prototype._resetInstanceMaterial = function (A) { this.meshManager.resetInstanceMaterial(A), this.wireframeManager.resetInstanceMaterial() }, Hf.prototype._collectFilteredUserIds = function (A, e, t) { var i = A.manager.filter, o = i._hasHiddenFileIdFilter(), n = i._hasVisibleFilter(), r = i._hasOverrideMaterialFilter(), a = i._hasTransparentFilter(), s = A.hasReplacedUserId(), l = A.hasHiddenUserId(), c = this.filteredIds = {}; if (this.transparentUserIdSetObject = {}, o || n || r || a || s || l) for (var h = zc, d = 0; e.length > d; d += 1) { var p = e[d], g = t[p]; if (g && g.length) { var u = g[0]; if (o && i._isHiddenFileId(u) || n && !1 === i._isVisible(u) || A.isReplacedUserId(p) || A.isHiddenSourceObjectUserId(p)) c[p] || (c[p] = {}), c[p][h.HIDDEN] = !0; else if (a && i._isTransparent(u)) c[p] || (c[p] = {}), c[p][h.TRANSPARENT] = !0, this.transparentUserIdSetObject[p] = !0; else if (r && i._hasOverrideMaterial(u)) { var f = i._getOverrideMaterial(u), m = null; if (Array.isArray(f)) { var C = u.nodeId.replace(u.componentKey + "_", ""), y = parseInt(C, 10); "" === (m = null !== f[y] ? f[y].name : "") && (m = u.materialId), c[p] || (c[p] = {}), c[p][h.OVERRIDED] || (c[p][h.OVERRIDED] = []), c[p][h.OVERRIDED][y] = m } else "" !== (m = null !== f ? f.name : "") && (c[p] || (c[p] = {}), c[p][h.OVERRIDED] = m) } } } }, Hf.prototype._collectModelFiltered = function (A) { var e = A.manager.filter, t = A.modelKey, i = e._hasModelOverrideMaterialFilter(), o = e._hasModelTransparentFilter(), n = A.manager.modelState.selectionSet; return A.manager.modelState.hoverId === t ? A.manager.modelState.getHoverMaterial() : n.hasOwnProperty(A.modelKey) ? A.manager.modelState.selectionMaterial : o && e._isModelTransparent(t) ? e._getMaterialByName("scene") : i && e._hasModelOverrideMaterial(t) ? e._getModelOverrideMaterial(t) : null }, Hf.prototype._collectFilteredUserIdsForWireFrame = function (A, e, t) { var i = A.getFilter(), o = i._hasOverrideMaterialFilterForWireFrame(); if (this.mapFilteredUserIdsForWireFrame = {}, o) for (var n = zc, r = 0; e.length > r; r += 1) { var a = e[r]; if (!(this.filteredIds && this.filteredIds[a] && this.filteredIds[a][n.HIDDEN])) { var s = t[a]; if (s && s.length) { var l = s[0]; if (i._hasOverrideMaterialForWireFrame(l)) { var c = i._getOverrideMaterialForWireFrame(l), h = null !== c ? c.name : ""; "" !== h && (this.mapFilteredUserIdsForWireFrame[a] = h) } } } } }, Hf.prototype._collectSelectedUserIds = function (A, e) { var t = this.filteredIds = this.filteredIds || {}, i = zc, o = {}; for (var n in A) if (this.model.modelKey === n) for (var r in A[n]) e[r] && (t[r] || (t[r] = {}), t[r][i.SELECTED] = !0, o[r] = !0); this.selectedUserIds = Object.keys(o) }, Hf.prototype._clearSelectedState = function (A) { if (this.filteredIds && this.selectedUserIds && this.selectedUserIds.length) { for (var e = 0, t = this.selectedUserIds.length; t > e; e += 1) { var i = this.selectedUserIds[e]; this.filteredIds[i] && (this.meshManager.clearInstanceStateByUserId(i), delete this.filteredIds[i][zc.SELECTED]) } this.selectedUserIds = null } }, Hf.prototype._collectHoveredUserIds = function (A, e) { var t = this.filteredIds = this.filteredIds || {}; this.hoverdUserId = void 0, A && e[A] && (t[A] || (t[A] = {}), t[A][zc.HOVER] = !0, this.hoverdUserId = A) }, Hf.prototype._clearHoveredState = function (A) { this.filteredIds && this.hoverdUserId && this.filteredIds[this.hoverdUserId] && (this.meshManager.clearInstanceStateByUserId(this.hoverdUserId), delete this.filteredIds[this.hoverdUserId][zc.HOVER], this.hoverdUserId = void 0) }, Hf.prototype._collectBlinkedUserIds = function (A, e) { var t = this.filteredIds = this.filteredIds || {}, i = zc, o = {}; for (var n in A) e[n] && (t[n] || (t[n] = {}), t[n][i.BLINK] = !0, o[n] = !0); this.blinkUserIds = Object.keys(o) }, Hf.prototype._clearBlinkedState = function (A) { if (this.filteredIds && this.blinkUserIds && this.blinkUserIds.length) { for (var e = 0, t = this.blinkUserIds.length; t > e; e += 1) { var i = this.blinkUserIds[e]; this.filteredIds[i] && (this.meshManager.clearInstanceStateByUserId(i), delete this.filteredIds[i][zc.BLINK]) } this.blinkUserIds = null } }, Hf.prototype.applyFilter = function (A, e) { console.log('applyFilter :>dfdf> '); if (this.hasNodeInfo(A)) { this.updateNodes(A), this._resetInstanceMaterial(A); var t = null; t = e || A.getModelDescriptor().getInstancedUserIds(); var i = A.getModelDescriptor().getInstancedNodeInfos(); this._collectFilteredUserIds(A, t, i), this._collectFilteredUserIdsForWireFrame(A, t, i), this._collectSelectedUserIds(A.manager.sceneState.selectionSet, i), this._collectBlinkedUserIds(A.manager.sceneState.getBlinkComponentsIdMap(), i), this._collectHoveredUserIds(A.manager.sceneState.hoverId, i), this._updateInstanceMaterial(A), this.updateNodes(A) } }, Hf.prototype.applySelection = function (A) { console.log('applySelection17') if (this.hasNodeInfo(A)) { var e = A.getModelDescriptor().getInstancedNodeInfos(); this._clearSelectedState(A), this._clearHoveredState(A), this._collectSelectedUserIds(A.manager.sceneState.selectionSet, e), this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), this._updateInstanceMaterial(A), this.updateNodes(A) } }, Hf.prototype.clearSelection = function (A) { this._clearSelectedState(A), this.applyHover(A) }, Hf.prototype.applyHover = function (A) { if (this.hasNodeInfo(A)) { var e = A.getModelDescriptor().getInstancedNodeInfos(); this._clearHoveredState(A), this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), this._updateInstanceMaterial(A), this.updateNodes(A) } }, Hf.prototype.clearHover = function (A) { this._clearHoveredState(A), this._updateInstanceMaterial(A), this.updateNodes(A) }, Hf.prototype.applyBlink = function (A) { if (this.hasNodeInfo(A)) { var e = A.getModelDescriptor().getInstancedNodeInfos(); this._clearBlinkedState(A), this._clearHoveredState(A), this._collectBlinkedUserIds(A.manager.sceneState.getBlinkComponentsIdMap(), e), this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), this._updateInstanceMaterial(A), this.updateNodes(A) } }, Hf.prototype.clearBlink = function (A) { this._clearBlinkedState(A), this.applyHover(A) }, Hf.prototype.applyReplacement = function (A) { this._updateInstanceMaterial(A), this.updateNodes(A) }, Hf.prototype.hasNodeInfo = function (A) { return Boolean(A.getModelDescriptor().getInstancedNodeInfos()) }, Hf.prototype.updateNodes = function (A) { if (this.hasNodeInfo(A)) { var e; if (e = this._collectModelFiltered(A)) for (var t = A.getModelDescriptor().getInstancedUserIds(), i = 0; t.length > i; i += 1) this._updateInstanceMaterialByUserId(A, t[i], Hc.OVERRIDED, e); this.meshManager.updateNodes(A), this.wireframeManager.updateNodes(A) } }, Hf.prototype.generateWireframe = function (A, e) { this.wireframeManager.generateWireframe(A, e) }, Hf.prototype.createMeshNodes = function (A, e) { this.meshManager.createMeshNodes(A, e) }, Hf.prototype.createInstancedMeshNodes = function (A, e) { this.meshManager._createBatchedInstanceGeometries(A, e) }, Hf.prototype.clearCachedData = function () { this.meshManager.disposeGeometries() }, Hf.prototype.getMeshesByUserIds = function (A, e) { this.meshManager.getMeshesByUserId(A, e) }, Hf.prototype.clearSelectedObjectIds = function () { this.meshManager.clearSelectedObjectIds() }, Hf.prototype.adjustVisibility = function (A, e) { this.meshManager.adjustVisibility(A, e), this.wireframeManager.adjustVisibility(A, e) }, Hf.prototype.changeVisibilityOfSelectedObjects = function (A, e) { this.meshManager.changeVisibilityOfSelectedObjects(A, e), this.wireframeManager.changeVisibilityOfSelectedObjects(A, e) }, Hf.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { this.meshManager.changeVisibilityOfNonSelectedObjects(A, e), this.wireframeManager.changeVisibilityOfNonSelectedObjects(A, e) }, Hf.prototype.restoreVisibilityOfObjects = function () { this.meshManager.restoreVisibilityOfObjects(), this.wireframeManager.restoreVisibilityOfObjects() }, Hf.prototype.disposeBufferAfterVbo = function () { this.meshManager.disposeBufferAfterVbo(), this.wireframeManager.disposeBufferAfterVbo() }, Hf.prototype.addAllInstanceNodeToScene = function (A) { this.meshManager.addAllInstanceNodeToScene(A) }, Hf.prototype.getGeometryBuffersByUserId = function (A, e) { return this.meshManager.getGeometryBuffersByUserId(A, e) }, Hf.prototype.explode = function (A, e, t) { this.meshManager.explode(A, e, t) }, Hf.prototype.explosion = function (A, e) { this.meshManager.explosion(A, e) }, Hf.prototype.closeExplosion = function (A) { this.meshManager.closeExplosion(A) }, Hf.prototype.componentsExplosion = function (A, e) { this.meshManager.componentsExplosion(A, e) }, Hf.prototype.closeComponentsExplosion = function (A, e) { this.meshManager.closeComponentsExplosion(A, e) }, Hf.prototype.isPickableNode = function (A) { if (!this.filteredIds || !this.filteredIds[A]) return !0; var e = this.filteredIds[A]; return !e[zc.HIDDEN] && !e[zc.TRANSPARENT] }, Hf.prototype.isHiddenNode = function (A) { return !!(this.filteredIds && this.filteredIds[A] && this.filteredIds[A][zc.HIDDEN]) }, Hf.prototype.getMeshManager = function () { return this.meshManager }, Hf.prototype.getWireFrameManager = function () { return this.wireframeManager }, Hf.prototype.getTransparentUserIds = function () { return this.transparentUserIdSetObject }; var Yf = function (A, e) { tf.call(this, A), this.defaultManager = new Of(e, A), this.instancedManager = new Hf(A), this.loader = new ef(this) }; function Wf(A, e) { var t = A.__state.conversionName.toString(), i = Math.round(A.r), o = Math.round(A.g), n = Math.round(A.b), r = A.a, a = Math.round(A.h), s = A.s.toFixed(1), l = A.v.toFixed(1); if (e || "THREE_CHAR_HEX" === t || "SIX_CHAR_HEX" === t) { for (var c = A.hex.toString(16); 6 > c.length;) c = "0" + c; return "#" + c } return "CSS_RGB" === t ? "rgb(" + i + "," + o + "," + n + ")" : "CSS_RGBA" === t ? "rgba(" + i + "," + o + "," + n + "," + r + ")" : "HEX" === t ? "0x" + A.hex.toString(16) : "RGB_ARRAY" === t ? "[" + i + "," + o + "," + n + "]" : "RGBA_ARRAY" === t ? "[" + i + "," + o + "," + n + "," + r + "]" : "RGB_OBJ" === t ? "{r:" + i + ",g:" + o + ",b:" + n + "}" : "RGBA_OBJ" === t ? "{r:" + i + ",g:" + o + ",b:" + n + ",a:" + r + "}" : "HSV_OBJ" === t ? "{h:" + a + ",s:" + s + ",v:" + l + "}" : "HSVA_OBJ" === t ? "{h:" + a + ",s:" + s + ",v:" + l + ",a:" + r + "}" : "unknown format" } (Yf.prototype = Object.create(tf.prototype)).prepare = function (A, e) { if (this.isLoaded() && !this.isHidden()) { this.prepareWireframe(this.model, e); this.model.getMaterialManager(); this.model.getMaterialManager()._updateTextureMapping(), !this.model.lightmap || this.model.enableLightmap === vc.EnableLightmap && this.model.lightmapIntensity === vc.LightmapIntensity || (this.model.enableLightmap = vc.EnableLightmap, this.model.lightmapIntensity = vc.LightmapIntensity, this.rebuildIndicesforLightmap(), this.updateNodes()) } }, Yf.prototype.settleData = function (A) { this.addNodeInfoToOctantMap(), this.createMeshNodes(A) }, Yf.prototype.addNodeInfoToOctantMap = function () { var A = this.model.manager, e = this.model.getEncodedDatabagId(); this.loader.getDescriptor().traverseNodeInfosByComponent((function (t, i) { A.addNodeInfoToOctantMap(e, t, i) })) }, Yf.prototype.createMeshNodes = function (A) { var e = this, t = this.model, i = this.loader.getDescriptor(); this.instancedManager.createMeshNodes(t, i.getInstancedUserIds()), this.defaultManager.asyncCreateMeshNodes(t, i.getStandardUserIds(), (function () { t.getMaterialManager()._updateTextureMapping(), e.clearCachedData(t), e.loaded = !0, A && A() })) }, Yf.prototype.clearCachedData = function (A) { this.loader.getDescriptor().destroyReader(), this.loader.getDescriptor().clearReferencedMeshCache(), this.defaultManager.clearCachedData(), this.instancedManager.clearCachedData() }; var Jf = Array.prototype.forEach, zf = Array.prototype.slice, Zf = { BREAK: {}, extend: function (A) { return this.each(zf.call(arguments, 1), (function (e) { (this.isObject(e) ? Object.keys(e) : []).forEach(function (t) { this.isUndefined(e[t]) || (A[t] = e[t]) } .bind(this)) }), this), A }, defaults: function (A) { return this.each(zf.call(arguments, 1), (function (e) { (this.isObject(e) ? Object.keys(e) : []).forEach(function (t) { this.isUndefined(A[t]) && (A[t] = e[t]) } .bind(this)) }), this), A }, compose: function () { var A = zf.call(arguments); return function () { for (var e = zf.call(arguments), t = A.length - 1; t >= 0; t--) e = [A[t].apply(this, e)]; return e[0] } }, each: function (A, e, t) { if (A) if (Jf && A.forEach && A.forEach === Jf) A.forEach(e, t); else if (A.length === A.length + 0) { var i, o = void 0; for (o = 0, i = A.length; i > o; o++) if (o in A && e.call(t, A[o], o) === this.BREAK) return } else for (var n in A) if (e.call(t, A[n], n) === this.BREAK) return }, defer: function (A) { setTimeout(A, 0) }, debounce: function (A, e, t) { var i = void 0; return function () { var o = this, n = arguments; function r() { i = null, t || A.apply(o, n) } var a = t || !i; clearTimeout(i), i = setTimeout(r, e), a && A.apply(o, n) } }, toArray: function (A) { return A.toArray ? A.toArray() : zf.call(A) }, isUndefined: function (A) { return void 0 === A }, isNull: function (A) { return null === A }, isNaN: function (A) { function e() { return A.apply(this, arguments) } return e.toString = function () { return A.toString() }, e }((function (A) { return isNaN(A) })), isArray: Array.isArray || function (A) { return A.constructor === Array }, isObject: function (A) { return A === Object(A) }, isNumber: function (A) { return A === A + 0 }, isString: function (A) { return A === A + "" }, isBoolean: function (A) { return !1 === A || !0 === A }, isFunction: function (A) { return "[object Function]" === Object.prototype.toString.call(A) } }, Xf = [{ litmus: Zf.isString, conversions: { THREE_CHAR_HEX: { read: function (A) { var e = A.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i); return null !== e && { space: "HEX", hex: parseInt("0x" + e[1].toString() + e[1].toString() + e[2].toString() + e[2].toString() + e[3].toString() + e[3].toString(), 0) } }, write: Wf }, SIX_CHAR_HEX: { read: function (A) { var e = A.match(/^#([A-F0-9]{6})$/i); return null !== e && { space: "HEX", hex: parseInt("0x" + e[1].toString(), 0) } }, write: Wf }, CSS_RGB: { read: function (A) { var e = A.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); return null !== e && { space: "RGB", r: parseFloat(e[1]), g: parseFloat(e[2]), b: parseFloat(e[3]) } }, write: Wf }, CSS_RGBA: { read: function (A) { var e = A.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); return null !== e && { space: "RGB", r: parseFloat(e[1]), g: parseFloat(e[2]), b: parseFloat(e[3]), a: parseFloat(e[4]) } }, write: Wf } } }, { litmus: Zf.isNumber, conversions: { HEX: { read: function (A) { return { space: "HEX", hex: A, conversionName: "HEX" } }, write: function (A) { return A.hex } } } }, { litmus: Zf.isArray, conversions: { RGB_ARRAY: { read: function (A) { return 3 === A.length && { space: "RGB", r: A[0], g: A[1], b: A[2] } }, write: function (A) { return [A.r, A.g, A.b] } }, RGBA_ARRAY: { read: function (A) { return 4 === A.length && { space: "RGB", r: A[0], g: A[1], b: A[2], a: A[3] } }, write: function (A) { return [A.r, A.g, A.b, A.a] } } } }, { litmus: Zf.isObject, conversions: { RGBA_OBJ: { read: function (A) { return !!(Zf.isNumber(A.r) && Zf.isNumber(A.g) && Zf.isNumber(A.b) && Zf.isNumber(A.a)) && { space: "RGB", r: A.r, g: A.g, b: A.b, a: A.a } }, write: function (A) { return { r: A.r, g: A.g, b: A.b, a: A.a } } }, RGB_OBJ: { read: function (A) { return !!(Zf.isNumber(A.r) && Zf.isNumber(A.g) && Zf.isNumber(A.b)) && { space: "RGB", r: A.r, g: A.g, b: A.b } }, write: function (A) { return { r: A.r, g: A.g, b: A.b } } }, HSVA_OBJ: { read: function (A) { return !!(Zf.isNumber(A.h) && Zf.isNumber(A.s) && Zf.isNumber(A.v) && Zf.isNumber(A.a)) && { space: "HSV", h: A.h, s: A.s, v: A.v, a: A.a } }, write: function (A) { return { h: A.h, s: A.s, v: A.v, a: A.a } } }, HSV_OBJ: { read: function (A) { return !!(Zf.isNumber(A.h) && Zf.isNumber(A.s) && Zf.isNumber(A.v)) && { space: "HSV", h: A.h, s: A.s, v: A.v } }, write: function (A) { return { h: A.h, s: A.s, v: A.v } } } } }], _f = void 0, $f = void 0, Am = function () { $f = !1; var A = arguments.length > 1 ? Zf.toArray(arguments) : arguments[0]; return Zf.each(Xf, (function (e) { if (e.litmus(A)) return Zf.each(e.conversions, (function (e, t) { if (_f = e.read(A), !1 === $f && !1 !== _f) return $f = _f, _f.conversionName = t, _f.conversion = e, Zf.BREAK })), Zf.BREAK })), $f }, em = void 0, tm = { hsv_to_rgb: function (A, e, t) { var i = Math.floor(A / 60) % 6, o = A / 60 - Math.floor(A / 60), n = t * (1 - e), r = t * (1 - o * e), a = t * (1 - (1 - o) * e), s = [ [t, a, n], [r, t, n], [n, t, a], [n, r, t], [a, n, t], [t, n, r] ][i]; return { r: 255 * s[0], g: 255 * s[1], b: 255 * s[2] } }, rgb_to_hsv: function (A, e, t) { var i = Math.min(A, e, t), o = Math.max(A, e, t), n = o - i, r = void 0; return 0 === o ? { h: NaN, s: 0, v: 0 } : (r = A === o ? (e - t) / n : e === o ? 2 + (t - A) / n : 4 + (A - e) / n, 0 > (r /= 6) && (r += 1), { h: 360 * r, s: n / o, v: o / 255 }) }, rgb_to_hex: function (A, e, t) { var i = this.hex_with_component(0, 2, A); return i = this.hex_with_component(i, 1, e), i = this.hex_with_component(i, 0, t) }, component_from_hex: function (A, e) { return A >> 8 * e & 255 }, hex_with_component: function (A, e, t) { return t << (em = 8 * e) | A & ~(255 << em) } }, im = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (A) { return typeof A } : function (A) { return A && "function" == typeof Symbol && A.constructor === Symbol && A !== Symbol.prototype ? "symbol" : typeof A }, om = function (A, e) { if (!(A instanceof e)) throw new TypeError("Cannot call a class as a function") }, nm = function () { function A(A, e) { for (var t = 0; e.length > t; t++) { var i = e[t]; i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(A, i.key, i) } } return function (e, t, i) { return t && A(e.prototype, t), i && A(e, i), e } }(), rm = function A(e, t, i) { null === e && (e = Function.prototype); var o = Object.getOwnPropertyDescriptor(e, t); if (void 0 === o) { var n = Object.getPrototypeOf(e); return null === n ? void 0 : A(n, t, i) } if ("value" in o) return o.value; var r = o.get; return void 0 !== r ? r.call(i) : void 0 }, am = function (A, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); A.prototype = Object.create(e && e.prototype, { constructor: { value: A, enumerable: !1, writable: !0, configurable: !0 } }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(A, e) : A.__proto__ = e) }, sm = function (A, e) { if (!A) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !e || "object" != typeof e && "function" != typeof e ? A : e }, lm = function () { function A() { if (om(this, A), this.__state = Am.apply(this, arguments), !1 === this.__state) throw new Error("Failed to interpret color arguments"); this.__state.a = this.__state.a || 1 } return nm(A, [{ key: "toString", value: function () { return Wf(this) } }, { key: "toHexString", value: function () { return Wf(this, !0) } }, { key: "toOriginal", value: function () { return this.__state.conversion.write(this) } }]), A }(); function cm(A, e, t) { Object.defineProperty(A, e, { get: function () { return "RGB" === this.__state.space || lm.recalculateRGB(this, e, t), this.__state[e] }, set: function (A) { "RGB" !== this.__state.space && (lm.recalculateRGB(this, e, t), this.__state.space = "RGB"), this.__state[e] = A } }) } function hm(A, e) { Object.defineProperty(A, e, { get: function () { return "HSV" === this.__state.space || lm.recalculateHSV(this), this.__state[e] }, set: function (A) { "HSV" !== this.__state.space && (lm.recalculateHSV(this), this.__state.space = "HSV"), this.__state[e] = A } }) } lm.recalculateRGB = function (A, e, t) { if ("HEX" === A.__state.space) A.__state[e] = tm.component_from_hex(A.__state.hex, t); else { if ("HSV" !== A.__state.space) throw new Error("Corrupted color state"); Zf.extend(A.__state, tm.hsv_to_rgb(A.__state.h, A.__state.s, A.__state.v)) } }, lm.recalculateHSV = function (A) { var e = tm.rgb_to_hsv(A.r, A.g, A.b); Zf.extend(A.__state, { s: e.s, v: e.v }), Zf.isNaN(e.h) ? Zf.isUndefined(A.__state.h) && (A.__state.h = 0) : A.__state.h = e.h }, lm.COMPONENTS = ["r", "g", "b", "h", "s", "v", "hex", "a"], cm(lm.prototype, "r", 2), cm(lm.prototype, "g", 1), cm(lm.prototype, "b", 0), hm(lm.prototype, "h"), hm(lm.prototype, "s"), hm(lm.prototype, "v"), Object.defineProperty(lm.prototype, "a", { get: function () { return this.__state.a }, set: function (A) { this.__state.a = A } }), Object.defineProperty(lm.prototype, "hex", { get: function () { return "HEX" !== !this.__state.space && (this.__state.hex = tm.rgb_to_hex(this.r, this.g, this.b)), this.__state.hex }, set: function (A) { this.__state.space = "HEX", this.__state.hex = A } }); var dm = function () { function A(e, t) { om(this, A), this.initialValue = e[t], this.domElement = document.createElement("div"), this.object = e, this.property = t, this.__onChange = void 0, this.__onFinishChange = void 0 } return nm(A, [{ key: "onChange", value: function (A) { return this.__onChange = A, this } }, { key: "onFinishChange", value: function (A) { return this.__onFinishChange = A, this } }, { key: "setValue", value: function (A) { return this.object[this.property] = A, this.__onChange && this.__onChange.call(this, A), this.updateDisplay(), this } }, { key: "getValue", value: function () { return this.object[this.property] } }, { key: "updateDisplay", value: function () { return this } }, { key: "isModified", value: function () { return this.initialValue !== this.getValue() } }]), A }(), pm = {}; Zf.each({ HTMLEvents: ["change"], MouseEvents: ["click", "mousemove", "mousedown", "mouseup", "mouseover"], KeyboardEvents: ["keydown"] }, (function (A, e) { Zf.each(A, (function (A) { pm[A] = e })) })); var gm = /(\d+(\.\d+)?)px/; function um(A) { if ("0" === A || Zf.isUndefined(A)) return 0; var e = A.match(gm); return Zf.isNull(e) ? 0 : parseFloat(e[1]) } var fm = { makeSelectable: function (A, e) { void 0 !== A && void 0 !== A.style && (A.onselectstart = e ? function () { return !1 } : function () {}, A.style.MozUserSelect = e ? "auto" : "none", A.style.KhtmlUserSelect = e ? "auto" : "none", A.unselectable = e ? "on" : "off") }, makeFullscreen: function (A, e, t) { var i = t, o = e; Zf.isUndefined(o) && (o = !0), Zf.isUndefined(i) && (i = !0), A.style.position = "absolute", o && (A.style.left = 0, A.style.right = 0), i && (A.style.top = 0, A.style.bottom = 0) }, fakeEvent: function (A, e, t, i) { var o = t || {}, n = pm[e]; if (!n) throw new Error("Event type " + e + " not supported."); var r = document.createEvent(n); switch (n) { case "MouseEvents": r.initMouseEvent(e, o.bubbles || !1, o.cancelable || !0, window, o.clickCount || 1, 0, 0, o.x || o.clientX || 0, o.y || o.clientY || 0, !1, !1, !1, !1, 0, null); break; case "KeyboardEvents": var a = r.initKeyboardEvent || r.initKeyEvent; Zf.defaults(o, { cancelable: !0, ctrlKey: !1, altKey: !1, shiftKey: !1, metaKey: !1, keyCode: void 0, charCode: void 0 }), a(e, o.bubbles || !1, o.cancelable, window, o.ctrlKey, o.altKey, o.shiftKey, o.metaKey, o.keyCode, o.charCode); break; default: r.initEvent(e, o.bubbles || !1, o.cancelable || !0) } Zf.defaults(r, i), A.dispatchEvent(r) }, bind: function (A, e, t, i) { return A.addEventListener ? A.addEventListener(e, t, i || !1) : A.attachEvent && A.attachEvent("on" + e, t), fm }, unbind: function (A, e, t, i) { return A.removeEventListener ? A.removeEventListener(e, t, i || !1) : A.detachEvent && A.detachEvent("on" + e, t), fm }, addClass: function (A, e) { if (void 0 === A.className) A.className = e; else if (A.className !== e) { var t = A.className.split(/ +/); - 1 === t.indexOf(e) && (t.push(e), A.className = t.join(" ").replace(/^\s+/, "").replace(/\s+$/, "")) } return fm }, removeClass: function (A, e) { if (e) if (A.className === e) A.removeAttribute("class"); else { var t = A.className.split(/ +/), i = t.indexOf(e); - 1 !== i && (t.splice(i, 1), A.className = t.join(" ")) } else A.className = void 0; return fm }, hasClass: function (A, e) { return new RegExp("(?:^|\\s+)" + e + "(?:\\s+|$)").test(A.className) || !1 }, getWidth: function (A) { var e = getComputedStyle(A); return um(e["border-left-width"]) + um(e["border-right-width"]) + um(e["padding-left"]) + um(e["padding-right"]) + um(e.width) }, getHeight: function (A) { var e = getComputedStyle(A); return um(e["border-top-width"]) + um(e["border-bottom-width"]) + um(e["padding-top"]) + um(e["padding-bottom"]) + um(e.height) }, getOffset: function (A) { var e = A, t = { left: 0, top: 0 }; if (e.offsetParent) do { t.left += e.offsetLeft, t.top += e.offsetTop, e = e.offsetParent } while (e); return t }, isActive: function (A) { return A === document.activeElement && (A.type || A.href) } }, mm = function (A) { function e(A, t) { om(this, e); var i = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)), o = i; return i.__prev = i.getValue(), i.__checkbox = document.createElement("input"), i.__checkbox.setAttribute("type", "checkbox"), fm.bind(i.__checkbox, "change", (function () { o.setValue(!o.__prev) }), !1), i.domElement.appendChild(i.__checkbox), i.updateDisplay(), i } return am(e, A), nm(e, [{ key: "setValue", value: function (A) { var t = rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "setValue", this).call(this, A); return this.__onFinishChange && this.__onFinishChange.call(this, this.getValue()), this.__prev = this.getValue(), t } }, { key: "updateDisplay", value: function () { return !0 === this.getValue() ? (this.__checkbox.setAttribute("checked", "checked"), this.__checkbox.checked = !0, this.__prev = !0) : (this.__checkbox.checked = !1, this.__prev = !1), rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "updateDisplay", this).call(this) } }]), e }(dm), Cm = function (A) { function e(A, t, i) { om(this, e); var o = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)), n = i, r = o; if (o.__select = document.createElement("select"), Zf.isArray(n)) { var a = {}; Zf.each(n, (function (A) { a[A] = A })), n = a } return Zf.each(n, (function (A, e) { var t = document.createElement("option"); t.innerHTML = e, t.setAttribute("value", A), r.__select.appendChild(t) })), o.updateDisplay(), fm.bind(o.__select, "change", (function () { r.setValue(this.options[this.selectedIndex].value) })), o.domElement.appendChild(o.__select), o } return am(e, A), nm(e, [{ key: "setValue", value: function (A) { var t = rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "setValue", this).call(this, A); return this.__onFinishChange && this.__onFinishChange.call(this, this.getValue()), t } }, { key: "updateDisplay", value: function () { return fm.isActive(this.__select) ? this : (this.__select.value = this.getValue(), rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "updateDisplay", this).call(this)) } }]), e }(dm), ym = function (A) { function e(A, t) { om(this, e); var i = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)), o = i; function n() { o.setValue(o.__input.value) } return i.__input = document.createElement("input"), i.__input.setAttribute("type", "text"), fm.bind(i.__input, "keyup", n), fm.bind(i.__input, "change", n), fm.bind(i.__input, "blur", (function () { o.__onFinishChange && o.__onFinishChange.call(o, o.getValue()) })), fm.bind(i.__input, "keydown", (function (A) { 13 === A.keyCode && this.blur() })), i.updateDisplay(), i.domElement.appendChild(i.__input), i } return am(e, A), nm(e, [{ key: "updateDisplay", value: function () { return fm.isActive(this.__input) || (this.__input.value = this.getValue()), rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "updateDisplay", this).call(this) } }]), e }(dm); function vm(A) { var e = A.toString(); return e.indexOf(".") > -1 ? e.length - e.indexOf(".") - 1 : 0 } var Im = function (A) { function e(A, t, i) { om(this, e); var o = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)), n = i || {}; return o.__min = n.min, o.__max = n.max, o.__step = n.step, o.__impliedStep = Zf.isUndefined(o.__step) ? 0 === o.initialValue ? 1 : Math.pow(10, Math.floor(Math.log(Math.abs(o.initialValue)) / Math.LN10)) / 10 : o.__step, o.__precision = vm(o.__impliedStep), o } return am(e, A), nm(e, [{ key: "setValue", value: function (A) { var t = A; return void 0 !== this.__min && this.__min > t ? t = this.__min : void 0 !== this.__max && t > this.__max && (t = this.__max), void 0 !== this.__step && t % this.__step != 0 && (t = Math.round(t / this.__step) * this.__step), rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "setValue", this).call(this, t) } }, { key: "min", value: function (A) { return this.__min = A, this } }, { key: "max", value: function (A) { return this.__max = A, this } }, { key: "step", value: function (A) { return this.__step = A, this.__impliedStep = A, this.__precision = vm(A), this } }]), e }(dm); var Em = function (A) { function e(A, t, i) { om(this, e); var o = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t, i)); o.__truncationSuspended = !1; var n = o, r = void 0; function a() { n.__onFinishChange && n.__onFinishChange.call(n, n.getValue()) } function s(A) { var e = r - A.clientY; n.setValue(n.getValue() + e * n.__impliedStep), r = A.clientY } function l() { fm.unbind(window, "mousemove", s), fm.unbind(window, "mouseup", l), a() } return o.__input = document.createElement("input"), o.__input.setAttribute("type", "text"), fm.bind(o.__input, "change", (function () { var A = parseFloat(n.__input.value); Zf.isNaN(A) || n.setValue(A) })), fm.bind(o.__input, "blur", (function () { a() })), fm.bind(o.__input, "mousedown", (function (A) { fm.bind(window, "mousemove", s), fm.bind(window, "mouseup", l), r = A.clientY })), fm.bind(o.__input, "keydown", (function (A) { 13 === A.keyCode && (n.__truncationSuspended = !0, this.blur(), n.__truncationSuspended = !1, a()) })), o.updateDisplay(), o.domElement.appendChild(o.__input), o } return am(e, A), nm(e, [{ key: "updateDisplay", value: function () { var A, t; return this.__input.value = this.__truncationSuspended ? this.getValue() : (A = this.getValue(), t = Math.pow(10, this.__precision), Math.round(A * t) / t), rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "updateDisplay", this).call(this) } }]), e }(Im); function Bm(A, e, t, i, o) { return i + (A - e) / (t - e) * (o - i) } var xm = function (A) { function e(A, t, i, o, n) { om(this, e); var r = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t, { min: i, max: o, step: n })), a = r; function s(A) { A.preventDefault(); var e = a.__background.getBoundingClientRect(); return a.setValue(Bm(A.clientX, e.left, e.right, a.__min, a.__max)), !1 } function l() { fm.unbind(window, "mousemove", s), fm.unbind(window, "mouseup", l), a.__onFinishChange && a.__onFinishChange.call(a, a.getValue()) } function c(A) { var e = A.touches[0].clientX, t = a.__background.getBoundingClientRect(); a.setValue(Bm(e, t.left, t.right, a.__min, a.__max)) } function h() { fm.unbind(window, "touchmove", c), fm.unbind(window, "touchend", h), a.__onFinishChange && a.__onFinishChange.call(a, a.getValue()) } return r.__background = document.createElement("div"), r.__foreground = document.createElement("div"), fm.bind(r.__background, "mousedown", (function (A) { document.activeElement.blur(), fm.bind(window, "mousemove", s), fm.bind(window, "mouseup", l), s(A) })), fm.bind(r.__background, "touchstart", (function (A) { if (1 !== A.touches.length) return; fm.bind(window, "touchmove", c), fm.bind(window, "touchend", h), c(A) })), fm.addClass(r.__background, "slider"), fm.addClass(r.__foreground, "slider-fg"), r.updateDisplay(), r.__background.appendChild(r.__foreground), r.domElement.appendChild(r.__background), r } return am(e, A), nm(e, [{ key: "updateDisplay", value: function () { var A = (this.getValue() - this.__min) / (this.__max - this.__min); return this.__foreground.style.width = 100 * A + "%", rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "updateDisplay", this).call(this) } }]), e }(Im), Sm = function (A) { function e(A, t, i) { om(this, e); var o = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)), n = o; return o.__button = document.createElement("div"), o.__button.innerHTML = void 0 === i ? "Fire" : i, fm.bind(o.__button, "click", (function (A) { return A.preventDefault(), n.fire(), !1 })), fm.addClass(o.__button, "button"), o.domElement.appendChild(o.__button), o } return am(e, A), nm(e, [{ key: "fire", value: function () { this.__onChange && this.__onChange.call(this), this.getValue().call(this.object), this.__onFinishChange && this.__onFinishChange.call(this, this.getValue()) } }]), e }(dm), wm = function (A) { function e(A, t) { om(this, e); var i = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)); i.__color = new lm(i.getValue()), i.__temp = new lm(0); var o = i; i.domElement = document.createElement("div"), fm.makeSelectable(i.domElement, !1), i.__selector = document.createElement("div"), i.__selector.className = "selector", i.__saturation_field = document.createElement("div"), i.__saturation_field.className = "saturation-field", i.__field_knob = document.createElement("div"), i.__field_knob.className = "field-knob", i.__field_knob_border = "2px solid ", i.__hue_knob = document.createElement("div"), i.__hue_knob.className = "hue-knob", i.__hue_field = document.createElement("div"), i.__hue_field.className = "hue-field", i.__input = document.createElement("input"), i.__input.type = "text", i.__input_textShadow = "0 1px 1px ", fm.bind(i.__input, "keydown", (function (A) { 13 === A.keyCode && h.call(this) })), fm.bind(i.__input, "blur", h), fm.bind(i.__selector, "mousedown", (function () { fm.addClass(this, "drag").bind(window, "mouseup", (function () { fm.removeClass(o.__selector, "drag") })) })), fm.bind(i.__selector, "touchstart", (function () { fm.addClass(this, "drag").bind(window, "touchend", (function () { fm.removeClass(o.__selector, "drag") })) })); var n, r = document.createElement("div"); function a(A) { p(A), fm.bind(window, "mousemove", p), fm.bind(window, "touchmove", p), fm.bind(window, "mouseup", l), fm.bind(window, "touchend", l) } function s(A) { g(A), fm.bind(window, "mousemove", g), fm.bind(window, "touchmove", g), fm.bind(window, "mouseup", c), fm.bind(window, "touchend", c) } function l() { fm.unbind(window, "mousemove", p), fm.unbind(window, "touchmove", p), fm.unbind(window, "mouseup", l), fm.unbind(window, "touchend", l), d() } function c() { fm.unbind(window, "mousemove", g), fm.unbind(window, "touchmove", g), fm.unbind(window, "mouseup", c), fm.unbind(window, "touchend", c), d() } function h() { var A = Am(this.value); !1 !== A ? (o.__color.__state = A, o.setValue(o.__color.toOriginal())) : this.value = o.__color.toString() } function d() { o.__onFinishChange && o.__onFinishChange.call(o, o.__color.toOriginal()) } function p(A) { -1 === A.type.indexOf("touch") && A.preventDefault(); var e = o.__saturation_field.getBoundingClientRect(), t = A.touches && A.touches[0] || A, i = (t.clientX - e.left) / (e.right - e.left), n = 1 - (t.clientY - e.top) / (e.bottom - e.top); return n > 1 ? n = 1 : 0 > n && (n = 0), i > 1 ? i = 1 : 0 > i && (i = 0), o.__color.v = n, o.__color.s = i, o.setValue(o.__color.toOriginal()), !1 } function g(A) { -1 === A.type.indexOf("touch") && A.preventDefault(); var e = o.__hue_field.getBoundingClientRect(), t = 1 - ((A.touches && A.touches[0] || A).clientY - e.top) / (e.bottom - e.top); return t > 1 ? t = 1 : 0 > t && (t = 0), o.__color.h = 360 * t, o.setValue(o.__color.toOriginal()), !1 } return Zf.extend(i.__selector.style, { width: "122px", height: "102px", padding: "3px", backgroundColor: "#222", boxShadow: "0px 1px 3px rgba(0,0,0,0.3)" }), Zf.extend(i.__field_knob.style, { position: "absolute", width: "12px", height: "12px", border: i.__field_knob_border + (.5 > i.__color.v ? "#fff" : "#000"), boxShadow: "0px 1px 3px rgba(0,0,0,0.5)", borderRadius: "12px", zIndex: 1 }), Zf.extend(i.__hue_knob.style, { position: "absolute", width: "15px", height: "2px", borderRight: "4px solid #fff", zIndex: 1 }), Zf.extend(i.__saturation_field.style, { width: "100px", height: "100px", border: "1px solid #555", marginRight: "3px", display: "inline-block", cursor: "pointer" }), Zf.extend(r.style, { width: "100%", height: "100%", background: "none" }), bm(r, "top", "rgba(0,0,0,0)", "#000"), Zf.extend(i.__hue_field.style, { width: "15px", height: "100px", border: "1px solid #555", cursor: "ns-resize", position: "absolute", top: "3px", right: "3px" }), (n = i.__hue_field).style.background = "", n.style.cssText += "background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);", n.style.cssText += "background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);", n.style.cssText += "background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);", n.style.cssText += "background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);", n.style.cssText += "background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);", Zf.extend(i.__input.style, { outline: "none", textAlign: "center", color: "#fff", border: 0, fontWeight: "bold", textShadow: i.__input_textShadow + "rgba(0,0,0,0.7)" }), fm.bind(i.__saturation_field, "mousedown", a), fm.bind(i.__saturation_field, "touchstart", a), fm.bind(i.__field_knob, "mousedown", a), fm.bind(i.__field_knob, "touchstart", a), fm.bind(i.__hue_field, "mousedown", s), fm.bind(i.__hue_field, "touchstart", s), i.__saturation_field.appendChild(r), i.__selector.appendChild(i.__field_knob), i.__selector.appendChild(i.__saturation_field), i.__selector.appendChild(i.__hue_field), i.__hue_field.appendChild(i.__hue_knob), i.domElement.appendChild(i.__input), i.domElement.appendChild(i.__selector), i.updateDisplay(), i } return am(e, A), nm(e, [{ key: "updateDisplay", value: function () { var A = Am(this.getValue()); if (!1 !== A) { var e = !1; Zf.each(lm.COMPONENTS, (function (t) { if (!Zf.isUndefined(A[t]) && !Zf.isUndefined(this.__color.__state[t]) && A[t] !== this.__color.__state[t]) return e = !0, {} }), this), e && Zf.extend(this.__color.__state, A) } Zf.extend(this.__temp.__state, this.__color.__state), this.__temp.a = 1; var t = .5 > this.__color.v || this.__color.s > .5 ? 255 : 0, i = 255 - t; Zf.extend(this.__field_knob.style, { marginLeft: 100 * this.__color.s - 7 + "px", marginTop: 100 * (1 - this.__color.v) - 7 + "px", backgroundColor: this.__temp.toHexString(), border: this.__field_knob_border + "rgb(" + t + "," + t + "," + t + ")" }), this.__hue_knob.style.marginTop = 100 * (1 - this.__color.h / 360) + "px", this.__temp.s = 1, this.__temp.v = 1, bm(this.__saturation_field, "left", "#fff", this.__temp.toHexString()), this.__input.value = this.__color.toString(), Zf.extend(this.__input.style, { backgroundColor: this.__color.toHexString(), color: "rgb(" + t + "," + t + "," + t + ")", textShadow: this.__input_textShadow + "rgba(" + i + "," + i + "," + i + ",.7)" }) } }]), e }(dm), Mm = ["-moz-", "-o-", "-webkit-", "-ms-", ""]; function bm(A, e, t, i) { A.style.background = "", Zf.each(Mm, (function (o) { A.style.cssText += "background: " + o + "linear-gradient(" + e + ", " + t + " 0%, " + i + " 100%); " })) } var Um = function (A, e) { var t = e || document, i = document.createElement("style"); i.type = "text/css", i.innerHTML = A; var o = t.getElementsByTagName("head")[0]; try { o.appendChild(i) } catch (A) {} }, Fm = '
\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n
', Km = function (A, e) { var t = A[e]; return Zf.isArray(arguments[2]) || Zf.isObject(arguments[2]) ? new Cm(A, e, arguments[2]) : Zf.isNumber(t) ? Zf.isNumber(arguments[2]) && Zf.isNumber(arguments[3]) ? Zf.isNumber(arguments[4]) ? new xm(A, e, arguments[2], arguments[3], arguments[4]) : new xm(A, e, arguments[2], arguments[3]) : Zf.isNumber(arguments[4]) ? new Em(A, e, { min: arguments[2], max: arguments[3], step: arguments[4] }) : new Em(A, e, { min: arguments[2], max: arguments[3] }) : Zf.isString(t) ? new ym(A, e) : Zf.isFunction(t) ? new Sm(A, e, "") : Zf.isBoolean(t) ? new mm(A, e) : null }; var Qm = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (A) { setTimeout(A, 1e3 / 60) }, Rm = function () { function A() { om(this, A), this.backgroundElement = document.createElement("div"), Zf.extend(this.backgroundElement.style, { backgroundColor: "rgba(0,0,0,0.8)", top: 0, left: 0, display: "none", zIndex: "1000", opacity: 0, WebkitTransition: "opacity 0.2s linear", transition: "opacity 0.2s linear" }), fm.makeFullscreen(this.backgroundElement), this.backgroundElement.style.position = "fixed", this.domElement = document.createElement("div"), Zf.extend(this.domElement.style, { position: "fixed", display: "none", zIndex: "1001", opacity: 0, WebkitTransition: "-webkit-transform 0.2s ease-out, opacity 0.2s linear", transition: "transform 0.2s ease-out, opacity 0.2s linear" }), document.body.appendChild(this.backgroundElement), document.body.appendChild(this.domElement); var e = this; fm.bind(this.backgroundElement, "click", (function () { e.hide() })) } return nm(A, [{ key: "show", value: function () { var A = this; this.backgroundElement.style.display = "block", this.domElement.style.display = "block", this.domElement.style.opacity = 0, this.domElement.style.webkitTransform = "scale(1.1)", this.layout(), Zf.defer((function () { A.backgroundElement.style.opacity = 1, A.domElement.style.opacity = 1, A.domElement.style.webkitTransform = "scale(1)" })) } }, { key: "hide", value: function () { var A = this, e = function e() { A.domElement.style.display = "none", A.backgroundElement.style.display = "none", fm.unbind(A.domElement, "webkitTransitionEnd", e), fm.unbind(A.domElement, "transitionend", e), fm.unbind(A.domElement, "oTransitionEnd", e) }; fm.bind(this.domElement, "webkitTransitionEnd", e), fm.bind(this.domElement, "transitionend", e), fm.bind(this.domElement, "oTransitionEnd", e), this.backgroundElement.style.opacity = 0, this.domElement.style.opacity = 0, this.domElement.style.webkitTransform = "scale(1.1)" } }, { key: "layout", value: function () { this.domElement.style.left = window.innerWidth / 2 - fm.getWidth(this.domElement) / 2 + "px", this.domElement.style.top = window.innerHeight / 2 - fm.getHeight(this.domElement) / 2 + "px" } }]), A }(); Um(function (A) { if (A && "undefined" != typeof window) { var e = document.createElement("style"); return e.setAttribute("type", "text/css"), e.innerHTML = A, document.head.appendChild(e), A } }(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n")); var Tm = function () { try { return !!window.localStorage } catch (A) { return !1 } }(), km = void 0, Dm = !0, Lm = void 0, Nm = !1, Om = [], Vm = function A(e) { var t = this, i = e || {}; this.domElement = document.createElement("div"), this.__ul = document.createElement("ul"), this.domElement.appendChild(this.__ul), fm.addClass(this.domElement, "dg"), this.__folders = {}, this.__controllers = [], this.__rememberedObjects = [], this.__rememberedObjectIndecesToControllers = [], this.__listening = [], i = Zf.defaults(i, { closeOnTop: !1, autoPlace: !0, width: A.DEFAULT_WIDTH }), i = Zf.defaults(i, { resizable: i.autoPlace, hideable: i.autoPlace }), Zf.isUndefined(i.load) ? i.load = { preset: "Default" } : i.preset && (i.load.preset = i.preset), Zf.isUndefined(i.parent) && i.hideable && Om.push(this), i.resizable = Zf.isUndefined(i.parent) && i.resizable, i.autoPlace && Zf.isUndefined(i.scrollable) && (i.scrollable = !0); var o = Tm && "true" === localStorage.getItem(Ym(this, "isLocal")), n = void 0, r = void 0; if (Object.defineProperties(this, { parent: { get: function () { return i.parent } }, scrollable: { get: function () { return i.scrollable } }, autoPlace: { get: function () { return i.autoPlace } }, closeOnTop: { get: function () { return i.closeOnTop } }, preset: { get: function () { return t.parent ? t.getRoot().preset : i.load.preset }, set: function (A) { t.parent ? t.getRoot().preset = A : i.load.preset = A, function (A) { for (var e = 0; A.__preset_select.length > e; e++) A.__preset_select[e].value === A.preset && (A.__preset_select.selectedIndex = e) }(this), t.revert() } }, width: { get: function () { return i.width }, set: function (A) { i.width = A, Xm(t, A) } }, name: { get: function () { return i.name }, set: function (A) { i.name = A, r && (r.innerHTML = i.name) } }, closed: { get: function () { return i.closed }, set: function (e) { i.closed = e, i.closed ? fm.addClass(t.__ul, A.CLASS_CLOSED) : fm.removeClass(t.__ul, A.CLASS_CLOSED), this.onResize(), t.__closeButton && (t.__closeButton.innerHTML = e ? A.TEXT_OPEN : A.TEXT_CLOSED) } }, load: { get: function () { return i.load } }, useLocalStorage: { get: function () { return o }, set: function (A) { Tm && (o = A, A ? fm.bind(window, "unload", n) : fm.unbind(window, "unload", n), localStorage.setItem(Ym(t, "isLocal"), A)) } } }), Zf.isUndefined(i.parent)) { if (this.closed = i.closed || !1, fm.addClass(this.domElement, A.CLASS_MAIN), fm.makeSelectable(this.domElement, !1), Tm && o) { t.useLocalStorage = !0; var a = localStorage.getItem(Ym(this, "gui")); a && (i.load = JSON.parse(a)) } this.__closeButton = document.createElement("div"), this.__closeButton.innerHTML = A.TEXT_CLOSED, fm.addClass(this.__closeButton, A.CLASS_CLOSE_BUTTON), i.closeOnTop ? (fm.addClass(this.__closeButton, A.CLASS_CLOSE_TOP), this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0])) : (fm.addClass(this.__closeButton, A.CLASS_CLOSE_BOTTOM), this.domElement.appendChild(this.__closeButton)), fm.bind(this.__closeButton, "click", (function () { t.closed = !t.closed })) } else { void 0 === i.closed && (i.closed = !0); var s = document.createTextNode(i.name); fm.addClass(s, "controller-name"), r = Gm(t, s); fm.addClass(this.__ul, A.CLASS_CLOSED), fm.addClass(r, "title"), fm.bind(r, "click", (function (A) { return A.preventDefault(), t.closed = !t.closed, !1 })), i.closed || (this.closed = !1) } i.autoPlace && (Zf.isUndefined(i.parent) && (Dm && (Lm = document.createElement("div"), fm.addClass(Lm, "dg"), fm.addClass(Lm, A.CLASS_AUTO_PLACE_CONTAINER), document.body.appendChild(Lm), Dm = !1), Lm.appendChild(this.domElement), fm.addClass(this.domElement, A.CLASS_AUTO_PLACE)), this.parent || Xm(t, i.width)), this.__resizeHandler = function () { t.onResizeDebounced() }, fm.bind(window, "resize", this.__resizeHandler), fm.bind(this.__ul, "webkitTransitionEnd", this.__resizeHandler), fm.bind(this.__ul, "transitionend", this.__resizeHandler), fm.bind(this.__ul, "oTransitionEnd", this.__resizeHandler), this.onResize(), i.resizable && Zm(this), this.saveToLocalStorageIfPossible = n = function () { Tm && "true" === localStorage.getItem(Ym(t, "isLocal")) && localStorage.setItem(Ym(t, "gui"), JSON.stringify(t.getSaveObject())) }, i.parent || function () { var A = t.getRoot(); A.width += 1, Zf.defer((function () { A.width -= 1 })) }() }; function Gm(A, e, t) { var i = document.createElement("li"); return e && i.appendChild(e), t ? A.__ul.insertBefore(i, t) : A.__ul.appendChild(i), A.onResize(), i } function Pm(A) { fm.unbind(window, "resize", A.__resizeHandler), A.saveToLocalStorageIfPossible && fm.unbind(window, "unload", A.saveToLocalStorageIfPossible) } function qm(A, e) { var t = A.__preset_select[A.__preset_select.selectedIndex]; t.innerHTML = e ? t.value + "*" : t.value } function jm(A, e) { var t = A.getRoot(), i = t.__rememberedObjects.indexOf(e.object); if (-1 !== i) { var o = t.__rememberedObjectIndecesToControllers[i]; if (void 0 === o && (t.__rememberedObjectIndecesToControllers[i] = o = {}), o[e.property] = e, t.load && t.load.remembered) { var n = t.load.remembered, r = void 0; if (n[A.preset]) r = n[A.preset]; else { if (!n.Default) return; r = n.Default } if (r[i] && void 0 !== r[i][e.property]) { var a = r[i][e.property]; e.initialValue = a, e.setValue(a) } } } } function Hm(A, e, t, i) { if (void 0 === e[t]) throw new Error('Object "' + e + '" has no property "' + t + '"'); var o = void 0; if (i.color) o = new wm(e, t); else { var n = [e, t].concat(i.factoryArgs); o = Km.apply(A, n) } i.before instanceof dm && (i.before = i.before.__li), jm(A, o), fm.addClass(o.domElement, "c"); var r = document.createElement("span"); fm.addClass(r, "property-name"), r.innerHTML = o.property; var a = document.createElement("div"); a.appendChild(r), a.appendChild(o.domElement); var s = Gm(A, a, i.before); return fm.addClass(s, Vm.CLASS_CONTROLLER_ROW), fm.addClass(s, o instanceof wm ? "color" : im(o.getValue())), function (A, e, t) { if (t.__li = e, t.__gui = A, Zf.extend(t, { options: function (e) { if (arguments.length > 1) { var i = t.__li.nextElementSibling; return t.remove(), Hm(A, t.object, t.property, { before: i, factoryArgs: [Zf.toArray(arguments)] }) } if (Zf.isArray(e) || Zf.isObject(e)) { var o = t.__li.nextElementSibling; return t.remove(), Hm(A, t.object, t.property, { before: o, factoryArgs: [e] }) } }, name: function (A) { return t.__li.firstElementChild.firstElementChild.innerHTML = A, t }, listen: function () { return t.__gui.listen(t), t }, remove: function () { return t.__gui.remove(t), t } }), t instanceof xm) { var i = new Em(t.object, t.property, { min: t.__min, max: t.__max, step: t.__step }); Zf.each(["updateDisplay", "onChange", "onFinishChange", "step", "min", "max"], (function (A) { var e = t[A], o = i[A]; t[A] = i[A] = function () { var A = Array.prototype.slice.call(arguments); return o.apply(i, A), e.apply(t, A) } })), fm.addClass(e, "has-slider"), t.domElement.insertBefore(i.domElement, t.domElement.firstElementChild) } else if (t instanceof Em) { var o = function (e) { if (Zf.isNumber(t.__min) && Zf.isNumber(t.__max)) { var i = t.__li.firstElementChild.firstElementChild.innerHTML, o = t.__gui.__listening.indexOf(t) > -1; t.remove(); var n = Hm(A, t.object, t.property, { before: t.__li.nextElementSibling, factoryArgs: [t.__min, t.__max, t.__step] }); return n.name(i), o && n.listen(), n } return e }; t.min = Zf.compose(o, t.min), t.max = Zf.compose(o, t.max) } else t instanceof mm ? (fm.bind(e, "click", (function () { fm.fakeEvent(t.__checkbox, "click") })), fm.bind(t.__checkbox, "click", (function (A) { A.stopPropagation() }))) : t instanceof Sm ? (fm.bind(e, "click", (function () { fm.fakeEvent(t.__button, "click") })), fm.bind(e, "mouseover", (function () { fm.addClass(t.__button, "hover") })), fm.bind(e, "mouseout", (function () { fm.removeClass(t.__button, "hover") }))) : t instanceof wm && (fm.addClass(e, "color"), t.updateDisplay = Zf.compose((function (A) { return e.style.borderLeftColor = t.__color.toString(), A }), t.updateDisplay), t.updateDisplay()); t.setValue = Zf.compose((function (e) { return A.getRoot().__preset_select && t.isModified() && qm(A.getRoot(), !0), e }), t.setValue) }(A, s, o), A.__controllers.push(o), o } function Ym(A, e) { return document.location.href + "." + e } function Wm(A, e, t) { var i = document.createElement("option"); i.innerHTML = e, i.value = e, A.__preset_select.appendChild(i), t && (A.__preset_select.selectedIndex = A.__preset_select.length - 1) } function Jm(A, e) { e.style.display = A.useLocalStorage ? "block" : "none" } function zm(A) { var e = A.__save_row = document.createElement("li"); fm.addClass(A.domElement, "has-save"), A.__ul.insertBefore(e, A.__ul.firstChild), fm.addClass(e, "save-row"); var t = document.createElement("span"); t.innerHTML = " ", fm.addClass(t, "button gears"); var i = document.createElement("span"); i.innerHTML = "Save", fm.addClass(i, "button"), fm.addClass(i, "save"); var o = document.createElement("span"); o.innerHTML = "New", fm.addClass(o, "button"), fm.addClass(o, "save-as"); var n = document.createElement("span"); n.innerHTML = "Revert", fm.addClass(n, "button"), fm.addClass(n, "revert"); var r = A.__preset_select = document.createElement("select"); if (A.load && A.load.remembered ? Zf.each(A.load.remembered, (function (e, t) { Wm(A, t, t === A.preset) })) : Wm(A, "Default", !1), fm.bind(r, "change", (function () { for (var e = 0; A.__preset_select.length > e; e++) A.__preset_select[e].innerHTML = A.__preset_select[e].value; A.preset = this.value })), e.appendChild(r), e.appendChild(t), e.appendChild(i), e.appendChild(o), e.appendChild(n), Tm) { var a = document.getElementById("dg-local-explain"), s = document.getElementById("dg-local-storage"); document.getElementById("dg-save-locally").style.display = "block", "true" === localStorage.getItem(Ym(0, "isLocal")) && s.setAttribute("checked", "checked"), Jm(A, a), fm.bind(s, "change", (function () { A.useLocalStorage = !A.useLocalStorage, Jm(A, a) })) } var l = document.getElementById("dg-new-constructor"); fm.bind(l, "keydown", (function (A) { !A.metaKey || 67 !== A.which && 67 !== A.keyCode || km.hide() })), fm.bind(t, "click", (function () { l.innerHTML = JSON.stringify(A.getSaveObject(), void 0, 2), km.show(), l.focus(), l.select() })), fm.bind(i, "click", (function () { A.save() })), fm.bind(o, "click", (function () { var e = prompt("Enter a new preset name."); e && A.saveAs(e) })), fm.bind(n, "click", (function () { A.revert() })) } function Zm(A) { var e = void 0; function t(t) { return t.preventDefault(), A.width += e - t.clientX, A.onResize(), e = t.clientX, !1 } function i() { fm.removeClass(A.__closeButton, Vm.CLASS_DRAG), fm.unbind(window, "mousemove", t), fm.unbind(window, "mouseup", i) } function o(o) { return o.preventDefault(), e = o.clientX, fm.addClass(A.__closeButton, Vm.CLASS_DRAG), fm.bind(window, "mousemove", t), fm.bind(window, "mouseup", i), !1 } A.__resize_handle = document.createElement("div"), Zf.extend(A.__resize_handle.style, { width: "6px", marginLeft: "-3px", height: "200px", cursor: "ew-resize", position: "absolute" }), fm.bind(A.__resize_handle, "mousedown", o), fm.bind(A.__closeButton, "mousedown", o), A.domElement.insertBefore(A.__resize_handle, A.domElement.firstElementChild) } function Xm(A, e) { A.domElement.style.width = e + "px", A.__save_row && A.autoPlace && (A.__save_row.style.width = e + "px"), A.__closeButton && (A.__closeButton.style.width = e + "px") } function _m(A, e) { var t = {}; return Zf.each(A.__rememberedObjects, (function (i, o) { var n = {}; Zf.each(A.__rememberedObjectIndecesToControllers[o], (function (A, t) { n[t] = e ? A.initialValue : A.getValue() })), t[o] = n })), t } Vm.toggleHide = function () { Nm = !Nm, Zf.each(Om, (function (A) { A.domElement.style.display = Nm ? "none" : "" })) }, Vm.CLASS_AUTO_PLACE = "a", Vm.CLASS_AUTO_PLACE_CONTAINER = "ac", Vm.CLASS_MAIN = "main", Vm.CLASS_CONTROLLER_ROW = "cr", Vm.CLASS_TOO_TALL = "taller-than-window", Vm.CLASS_CLOSED = "closed", Vm.CLASS_CLOSE_BUTTON = "close-button", Vm.CLASS_CLOSE_TOP = "close-top", Vm.CLASS_CLOSE_BOTTOM = "close-bottom", Vm.CLASS_DRAG = "drag", Vm.DEFAULT_WIDTH = 245, Vm.TEXT_CLOSED = "关闭控制器", Vm.TEXT_OPEN = "打开控制器", Vm._keydownHandler = function (A) { "text" === document.activeElement.type || 72 !== A.which && 72 !== A.keyCode || Vm.toggleHide() }, fm.bind(window, "keydown", Vm._keydownHandler, !1), Zf.extend(Vm.prototype, { add: function (A, e) { return Hm(this, A, e, { factoryArgs: Array.prototype.slice.call(arguments, 2) }) }, addColor: function (A, e) { return Hm(this, A, e, { color: !0 }) }, remove: function (A) { this.__ul.removeChild(A.__li), this.__controllers.splice(this.__controllers.indexOf(A), 1); var e = this; Zf.defer((function () { e.onResize() })) }, destroy: function () { if (this.parent) throw new Error("Only the root GUI should be removed with .destroy(). For subfolders, use gui.removeFolder(folder) instead."); this.autoPlace && Lm.removeChild(this.domElement); var A = this; Zf.each(this.__folders, (function (e) { A.removeFolder(e) })), fm.unbind(window, "keydown", Vm._keydownHandler, !1), Pm(this) }, addFolder: function (A) { if (void 0 !== this.__folders[A]) throw new Error('You already have a folder in this GUI by the name "' + A + '"'); var e = { name: A, parent: this }; e.autoPlace = this.autoPlace, this.load && this.load.folders && this.load.folders[A] && (e.closed = this.load.folders[A].closed, e.load = this.load.folders[A]); var t = new Vm(e); this.__folders[A] = t; var i = Gm(this, t.domElement); return fm.addClass(i, "folder"), t }, removeFolder: function (A) { this.__ul.removeChild(A.domElement.parentElement), delete this.__folders[A.name], this.load && this.load.folders && this.load.folders[A.name] && delete this.load.folders[A.name], Pm(A); var e = this; Zf.each(A.__folders, (function (e) { A.removeFolder(e) })), Zf.defer((function () { e.onResize() })) }, open: function () { this.closed = !1 }, close: function () { this.closed = !0 }, hide: function () { this.domElement.style.display = "none" }, show: function () { this.domElement.style.display = "" }, onResize: function () { var A = this.getRoot(); if (A.scrollable) { var e = fm.getOffset(A.__ul).top, t = 0; Zf.each(A.__ul.childNodes, (function (e) { A.autoPlace && e === A.__save_row || (t += fm.getHeight(e)) })), window.innerHeight - e - 20 < t ? (fm.addClass(A.domElement, Vm.CLASS_TOO_TALL), A.__ul.style.height = window.innerHeight - e - 20 + "px") : (fm.removeClass(A.domElement, Vm.CLASS_TOO_TALL), A.__ul.style.height = "auto") } A.__resize_handle && Zf.defer((function () { A.__resize_handle.style.height = A.__ul.offsetHeight + "px" })), A.__closeButton && (A.__closeButton.style.width = A.width + "px") }, onResizeDebounced: Zf.debounce((function () { this.onResize() }), 50), remember: function () { if (Zf.isUndefined(km) && ((km = new Rm).domElement.innerHTML = Fm), this.parent) throw new Error("You can only call remember on a top level GUI."); var A = this; Zf.each(Array.prototype.slice.call(arguments), (function (e) { 0 === A.__rememberedObjects.length && zm(A), -1 === A.__rememberedObjects.indexOf(e) && A.__rememberedObjects.push(e) })), this.autoPlace && Xm(this, this.width) }, getRoot: function () { for (var A = this; A.parent;) A = A.parent; return A }, getSaveObject: function () { var A = this.load; return A.closed = this.closed, this.__rememberedObjects.length > 0 && (A.preset = this.preset, A.remembered || (A.remembered = {}), A.remembered[this.preset] = _m(this)), A.folders = {}, Zf.each(this.__folders, (function (e, t) { A.folders[t] = e.getSaveObject() })), A }, save: function () { this.load.remembered || (this.load.remembered = {}), this.load.remembered[this.preset] = _m(this), qm(this, !1), this.saveToLocalStorageIfPossible() }, saveAs: function (A) { this.load.remembered || (this.load.remembered = {}, this.load.remembered.Default = _m(this, !0)), this.load.remembered[A] = _m(this), this.preset = A, Wm(this, A, !0), this.saveToLocalStorageIfPossible() }, revert: function (A) { Zf.each(this.__controllers, (function (e) { this.getRoot().load.remembered ? jm(A || this.getRoot(), e) : e.setValue(e.initialValue), e.__onFinishChange && e.__onFinishChange.call(e, e.getValue()) }), this), Zf.each(this.__folders, (function (A) { A.revert(A) })), A || qm(this.getRoot(), !1) }, listen: function (A) { var e = 0 === this.__listening.length; this.__listening.push(A), e && function A(e) { 0 !== e.length && Qm.call(window, (function () { A(e) })); Zf.each(e, (function (A) { A.updateDisplay() })) }(this.__listening) }, updateDisplay: function () { Zf.each(this.__controllers, (function (A) { A.updateDisplay() })), Zf.each(this.__folders, (function (A) { A.updateDisplay() })) } }); var $m = Vm, AC = function (A) { var e = this; this.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; window.IDBKeyRange || window; var t = uh.extend({}, { dbName: "bos3d", store: "default", version: 1, indexes: ["id"], keyPath: "id" }, A); this.IDBOpenDBRequest = null, this.dbName = t.dbName; var i = this.version = t.version; this.storeName = t.store; var o = t.keyPath, n = this.indexedDB.open(this.dbName, i); n.onupgradeneeded = function (A) { Bh.log("DB version changed to " + i); var n = A.target.result, r = null; if (!1 === n.objectStoreNames.contains(e.storeName)) { r = n.createObjectStore(e.storeName, { keyPath: o }); for (var a = 0; t.indexes.length > a; a += 1) { var s = t.indexes[a]; r.createIndex(s, s, { unique: !1 }) } } }, n.onsuccess = function (A) { e.IDBOpenDBRequest = A.target.result, Bh.log("成功建立并打开数据库:" + e.IDBOpenDBRequest.name + " version " + i), e.dispatchEvent({ type: Rc.ON_DATABASE_OPEN }) }, n.onerror = function (A) { Bh.error("IndexedDB", A), e.dispatchEvent({ type: Rc.ON_DATABASE_EEEOR }) }, n.onblocked = function (A) { Bh.warn("Please close all other tabs with this site open!", A) } }; Object.assign(AC.prototype, Ld.prototype), Object.assign(AC.prototype, { constructor: AC, get: function (A, e, t) { if (this.IDBOpenDBRequest) { var i = this.IDBOpenDBRequest.transaction([this.storeName]).objectStore(this.storeName).get(A); i.onsuccess = function (A) { "function" == typeof e && e(A.target.result ? A.target.result.data : null) }, i.onerror = function (A) { Bh.error("getDataByKey error"), "function" == typeof t && t(A) } } }, getBatch: function (A, e, t) { if (this.IDBOpenDBRequest) { for (var i = this.IDBOpenDBRequest.transaction([this.storeName]).objectStore(this.storeName), o = {}, n = [], r = 0; A.length > r; r += 1) n.push(new Promise((function (e, t) { var o = A[r], n = i.index("id").get(o); n.onsuccess = function (A) { e(A.target.result) }, n.onerror = function (A) { Bh.error(o, "failed", A), t(A) } }))); Promise.all(n).then((function (A) { for (var t = 0; A.length > t; t += 1) A[t] && (o[A[t].id] = A[t].data); e(o) })).catch((function (A) { Bh.debug(A), A instanceof TypeError ? Bh.error(A) : e(o) })) } }, setBatch: function (A, e, t) { if (this.IDBOpenDBRequest) for (var i = this.IDBOpenDBRequest.transaction([this.storeName], "readwrite").objectStore(this.storeName), o = 0; A.length > o; o += 1) { i.put({ id: A[o].key, data: A[o] }).onsuccess = function (A) {} } }, set: function (A, e, t, i) { var o = performance.now(); if (this.IDBOpenDBRequest) { var n = this.IDBOpenDBRequest.transaction([this.storeName], "readwrite").objectStore(this.storeName).add([{ id: A, data: e }]); n.onsuccess = function (A) { "function" == typeof t && t(A.target.result), Bh.debug("Saved state to IndexedDB. " + (performance.now() - o).toFixed(2) + "ms") }, n.onerror = function (A) { "function" == typeof i && i(A) } } }, put: function (A, e, t, i, o) { if (this.IDBOpenDBRequest) { var n = performance.now(), r = this.IDBOpenDBRequest.transaction([t], "readwrite").objectStore(t).put({ id: A, data: e }); r.onsuccess = function (A) { "function" == typeof i && i(A.target.result), Bh.debug("Saved state to IndexedDB. " + (performance.now() - n).toFixed(2) + "ms") }, r.onerror = function (A) { Bh.error("离线存储出错:", A.target.error.name, ":", A.target.error.message), "function" == typeof o && o(A) } } }, delete: function (A, e, t) { if (this.IDBOpenDBRequest) { var i = this.IDBOpenDBRequest.transaction(this.storeName, "readwrite").objectStore(this.storeName).delete(A); i.onsuccess = function (A) { Bh.debug("delete data form IndexedDB."), "function" == typeof e && e(A.target.result) }, i.onerror = function (A) { Bh.error("IndexedDB", A), "function" == typeof t && t(A) } } }, clear: function (A, e) { if (this.IDBOpenDBRequest) { var t = this.IDBOpenDBRequest.transaction(this.storeName, "readwrite").objectStore(this.storeName).clear(); t.onsuccess = function (e) { Bh.debug("Cleared IndexedDB."), "function" == typeof A && A(e.target.result) }, t.onerror = function (A) { Bh.error("IndexedDB", A), "function" == typeof e && e(A) } } }, deleteDatabase: function (A) { indexedDB.deleteDatabase(this.dbName), Bh.debug(this.dbName + "数据库已删除"), "function" == typeof A && A() }, close: function (A) { this.IDBOpenDBRequest && (this.IDBOpenDBRequest.close(), Bh.debug("数据库已关闭"), "function" == typeof A && A()) }, getIndex: function (A, e, t, i) { var o = A.transaction(e, "readwrite").objectStore(e).index("id"); o.openCursor().onsuccess = function () { var A = this.result; A && (Bh.debug(A.value), A.continue()) }; var n = IDBKeyRange.only(2), r = o.openCursor(n); r.onsuccess = function () { var A = r.result; A && Bh.info(A.value) } }, destroy: function () { this.close(), this.IDBOpenDBRequest = null, this.dbName = null, this.storeName = null } }); var eC = function (A) { this.serverUrl = A.serverUrl, this.modelKey = A.modelKey, this.dbName = A.dbName, this.offLine = A.offLine, this.shareParameter = "" !== A.share ? "&share=" + A.share : "" }; eC.prototype.projectUrl = function (A) { return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/scene/scene.json" : this.serverUrl + "/api/" + this.dbName + "/models?modelKey=" + (A || this.modelKey) + this.shareParameter }, eC.prototype.sceneUrl = function (A) { return this.serverUrl + this.modelKey + "/scene/scene_" + (A = A || 0) + vc.ZipResourcePostfix }, eC.prototype.sceneIdUrl = function () { return this.serverUrl + this.modelKey + "/scene/scene_id" + vc.ZipResourcePostfix }, eC.prototype.userIdUrl = function () { return this.serverUrl + this.modelKey + "/scene/user_id" + vc.ZipResourcePostfix }, eC.prototype.octreeUrl = function (A) { return this.serverUrl + this.modelKey + "/scene/octree_" + A + vc.ZipResourcePostfix }, eC.prototype.symbolUrl = function () { return this.serverUrl + this.modelKey + "/symbol/symbol" + vc.ZipResourcePostfix }, eC.prototype.mpkUrl = function (A) { return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A }, eC.prototype.texUrl = function (A) { return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/Texture/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A }, eC.prototype.bonesUrl = function (A) { return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A }, eC.prototype.nodesUrl = function (A) { return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A }, eC.prototype.clipsUrl = function (A) { return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A }, eC.prototype.kdTreeUrl = function (A) { return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A }, eC.prototype.lightUrl = function (A) { return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A }, eC.prototype.rootTilesUrl = function (A) { return this.offLine ? this.serverUrl + "/" + this.modelKey + "/tileset.json" : this.serverUrl + "/api/" + this.dbName + "/geomodels/" + this.modelKey + "/data/tileset.json" }, eC.prototype.tilesUrl = function (A) { return this.offLine ? this.serverUrl + "/" + this.modelKey + "/" + A : this.serverUrl + "/api/" + this.dbName + "/geomodels/" + this.modelKey + "/data/" + A }, eC.prototype.b3dmUrl = function (A) { return this.offLine ? this.serverUrl + "/" + this.modelKey + "/" + A : this.serverUrl + "/api/" + this.dbName + "/geomodels/" + this.modelKey + "/data/" + A }, eC.prototype.attributeUrl = function () { if (this.offLine) return this.serverUrl + "/" + this.modelKey + "/resource/attribute/attribute.json" }, eC.prototype.meshIdUrl = function () { return this.serverUrl + this.modelKey + "/mpk/mesh_id" + vc.ZipResourcePostfix }, eC.prototype.materialUrl = function () { return this.serverUrl + this.modelKey + "/material/material" + vc.ZipResourcePostfix }, eC.prototype.materialIdUrl = function () { return this.serverUrl + this.modelKey + "/material/material_id" + vc.ZipResourcePostfix }, eC.prototype.userDataUrl = function () { return this.serverUrl + this.modelKey + "/userdata/userdata" + vc.ZipResourcePostfix }, eC.prototype.textureUrl = function (A) { return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + this.shareParameter }, eC.prototype.axisNetUrl = function (A) { return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A }, eC.prototype.floorInfoUrl = function (A) { return this.offLine ? this.serverUrl + "/" + A + "/resource/floor/floorKey.json" : this.serverUrl + "/api/" + this.dbName + "/components/floorkeys?modelKey=" + A + this.shareParameter }, eC.prototype.floorMapUrl = function (A) { return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/floor/map.json" : this.serverUrl + "/api/" + this.dbName + "/models/maps?modelKey=" + this.modelKey + this.shareParameter }; var tC = function (A) { $u.call(this, A), this.instancedComponent = {} }; Object.assign(tC.prototype, $u.prototype), tC.prototype.parseItemData = function (A) { this._readMaterialBuffer(this.model); var e = {}, t = this.referencedMeshCache; for (var i in Bh.time("_readItemData"), t.components) t.components.hasOwnProperty(i) && this._readItemData(e, i, i, void 0, 0); Bh.timeEnd("_readItemData"), e = null, A && A() }, tC.prototype._readItemData = function (A, e, t) { var i = this.referencedMeshCache.components[e]; void 0 !== i && this._readMeshInfo(A, t, i, null) }, tC.prototype._readMeshInfo = function (A, e, t, i) { var o = this.referencedMeshCache, n = this.model.materialManager.materials, r = null; if (t.nodes || t.nodeIds) { r = t.originalId; var a = (new M).fromArray(t.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); t.matrix = a; var s = []; s = t.nodes ? t.nodes : t.nodeIds; for (var l = 0; s.length > l; l += 1) { var c = s[l]; if ("object" !== lc(c) && (c = this.getReferencedMeshComponentNodeById(c)), c) { var h, d = null, p = ""; if (-1 !== c.geoId) if (d = this._getComponentNodeAttr(c, t, l)) { if (t.buildInCategory && (d.buildInCategory = t.buildInCategory), !n[p = c.material]) { var g = _u[t.type] ? _u[t.type].color : void 0; g || (Bh.log("Material not found for type: ", t.type), g = _u.DEFAULT.color), g || (Bh.log("Default material not found for type: ", t.type), g = [1, 1, 1, 1]); var u = new LA(g[0], g[1], g[2]), f = p || u.getHexString() + "_" + g[3], m = n[f]; m || (Bh.warn("缺少材质 " + p), m = Kd.createStandardMaterial({ color: u }), 1 > g[3] && (m.transparent = !0, m.opacity = g[3]), m.side = 2, n[f] = m), d.material = p = f } if (n[p].aoMap) { var C = this.getReferencedMeshBufferById(d.geometryId); C && (C.uv2 = C.uv) } h = d.nodeId; var y = this.userDataReader, v = y ? y.getUserData(null) : null; d.type = t.type, d.userId = e, d.name = t.name, d.userDataId = null, d.originalId = r, d.materialId = p, d.originMId = p, d.userData = v, d.categoryId = 0, d.componentKey = e, d.familyName = t.familyName, d.familySymbol = t.familySymbol; var I = vc.Instance, E = o.reuseNodes.hasOwnProperty(h); d.instanceOrNot = !(!I || !E), d.isBatched = !0, d.state = Lc.Visible, d.material = null, this._classifyNodeInfo(d), d = null } else Bh.debug("非法node") } } } }, tC.prototype._parseInstanced = function () { Bh.time("_parseInstanced"), this.instancedComponent = {}, this.instancedNode = {}; var A = {}, e = this.referencedMeshCache, t = e.componentNodes, i = this.model.materialManager.materials; for (var o in e.components) if (e.components.hasOwnProperty(o)) for (var n = e.components[o], r = 0, a = n.Nodes.length; a > r; r += 1) { var s = n.Nodes[r], l = t[s], c = l.geometry, h = l.material; if (-1 !== c) { if (!h && 0 !== h) { var d = _u[n.type] ? _u[n.type].color : void 0; d || (Bh.log("Material not found for type: ", n.type), d = _u.DEFAULT.color), d || (Bh.log("Default material not found for type: ", n.type), d = [1, 1, 1, 1]); var p = new LA(d[0], d[1], d[2]), g = p.getHexString() + "_" + d[3], u = i[g]; u || (Bh.warn("缺少材质 " + g), u = Kd.createStandardMaterial({ color: p }), 1 > d[3] && (u.transparent = !0, u.opacity = d[3]), u.side = 2, i[g] = u), l.material = g, h = g } var f = h + "&" + c; void 0 === A[f] && (A[f] = []), A[f].push({ nodeId: s }) } else Bh.debug("实体没有几何") } for (var m in A) if (A.hasOwnProperty(m)) if (1 < A[m].length) for (var C = 0; A[m].length > C; C += 1) this.instancedComponent[A[m][C].nodeId] = !0; else delete A[m]; Bh.timeEnd("_parseInstanced") }; var iC = function (A) { Xu.call(this, A), this.maxGeoLoadTaskCount = 0, this.geoLoadTaskCount = 0, this.taskInstancedGeometrieManager = new Ou(this, "geometrie"), this.descriptor = new tC(A.model) }; (iC.prototype = Object.assign(iC.prototype, Xu.prototype))._parseMaterial = function (A, e) { if (A) { var t = this.descriptor; if (t) for (var i in A) t.cacheReferencedMeshMaterialData(i, A[i]) } else Bh.error("没有数据") }, iC.prototype.loadBatchedGeometrie = function (A, e) { var t = this, i = this.loader, o = this.url, n = this.model; i.setResponseType("arraybuffer"), i.setCacheViable(!this.offLine); var r = i.load(o.mpkUrl(A), (function (i) { t._parseBatchedGeometrie(i, A), Bh.debug("geo load from online"), t._onGeoTaskFinished(), e() }), void 0, (function (A) { n.dispatchEventEx({ type: Tc.LOAD_GEOMETRY_ERROR, modelKey: n.modelKey }), e(), t._onGeoTaskFinished() })); t.requests.loadGeometrie = r }, iC.prototype.loadInstancedGeometrie = function (A, e) { var t = this, i = this.loader, o = this.url, n = this.model; i.setResponseType("arraybuffer"), i.setCacheViable(!this.offLine); var r = i.load(o.mpkUrl(A), (function (i) { t._parseInstancedGeometrie(i, A), Bh.debug("geo load from online"), t._onGeoTaskFinished(), e() }), void 0, (function (A) { n.dispatchEventEx({ type: Tc.LOAD_GEOMETRY_ERROR, modelKey: n.modelKey }), e(), t._onGeoTaskFinished() })); t.requests.loadGeometrie = r }, iC.prototype._parseGeometrie = function (A, e) { if (A) { var t = this.descriptor; if (t) for (var i in A) A.hasOwnProperty(i) && (A[i].position = new Float32Array(A[i].positions), delete A[i].positions, A[i].index = new Uint32Array(A[i].indices), delete A[i].indices, A[i].normal = new Float32Array(A[i].normals), A[i].uv = new Float32Array(A[i].uv), delete A[i].normals, t.cacheReferencedMeshBufferData(i, A[i])) } else Bh.error("没有数据") }, iC.prototype._parseBatchedGeometrie = function (A, e) { var t = new ku.BatchedGeometryReader(A, this.dataVersion), i = this.descriptor; if (i) { var o = t.geoCount; Bh.time("createBatchedMeshNodes"); for (var n = 0; o > n; n += 1) { var r = t.geomMap[n]; void 0 !== r.position && void 0 !== r.index && void 0 !== r.normal ? (i.cacheReferencedMeshBufferData(r.geoId, r), this.handler.createBatchedMeshNodes(r)) : Bh.error("Error Geometry!") } this.model.manager.viewerImpl.render(), Bh.timeEnd("createBatchedMeshNodes"), t = null } }, iC.prototype._parseInstancedGeometrie = function (A, e) { var t = new ku.InstancedGeometryReader(A, this.dataVersion), i = this.descriptor; if (i) { var o = t.geoCount; Bh.time("createInstancedMeshNodes"); for (var n = 0; o > n; n += 1) { var r = t.geomMap[n]; void 0 !== r.position && void 0 !== r.index && void 0 !== r.normal ? (i.cacheReferencedMeshBufferData(r.geoId, r), this.handler.createInstancedMeshNodes(r)) : Bh.error("Error Geometry!") } this.model.manager.viewerImpl.render(), t = null, Bh.timeEnd("createInstancedMeshNodes") } }, iC.prototype.startLoadSceneAndGeos = function (A) { Bh.time("几何数据加载时间"); var e = A.scene, t = e.instancedGeometries.length || 0, i = e.batchedGeometries, o = e.instancedGeometries; this.maxGeoLoadTaskCount += e.batchedGeometries.length || 0, this.maxGeoLoadTaskCount += t, this._loadBatchedGeo(i), this._loadInstancedGeo(o) }, iC.prototype._loadBatchedGeo = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.mpkUrl(A[o])); var n = this.model.getStorage(); if (n) for (var r = function () { var t = i.splice(0, 30); n.getBatch(t, (function (A) { for (var i = function (i) { if (A[t[i]]) if (!0 === A[t[i]].split) { var o = A[t[i]].list, s = new Uint8Array(A[t[i]].length); n.getBatch(o, (function (A) { for (var n = !0, r = 0; o.length > r; r += 1) A[o[r]] ? s.set(new Uint8Array(A[o[r]]), 4e7 * r) : (n = !1, Bh.error("获取分割几何失败")); if (n) { var a = t[i].indexOf("fileKey="); e._parseBatchedGeometrie(s.buffer, t[i].slice(a + 8)), e._onGeoTaskFinished(), Bh.debug("load geo from local") } else { var l = e.taskGeometrieManager, c = t[i].indexOf("fileKey="); if (-1 === c) return void Bh.error("url is not has fileKey"); l.addTask(t[i].slice(c + 8)), Bh.debug("load geo from net"), e.taskGeometrieManager.processTasks(e.loadBatchedGeometrie.bind(e)) } }), (function () { Bh.error("获取分割几何失败") })) } else a = t[i].indexOf("fileKey="), e._parseBatchedGeometrie(A[t[i]], t[i].slice(a + 8)), e._onGeoTaskFinished(), Bh.debug("load geo from local"); else { if (r = e.taskGeometrieManager, -1 === (a = t[i].indexOf("fileKey="))) return Bh.error("url is not has fileKey"), { v: void 0 }; r.addTask(t[i].slice(a + 8)), Bh.debug("load geo from net") } }, o = 0; t.length > o; o += 1) { var r, a, s = i(o); if ("object" === lc(s)) return s.v } e.taskGeometrieManager.processTasks(e.loadBatchedGeometrie.bind(e)) }), (function () { for (var t = e.taskGeometrieManager, i = 0; A.length > i; i += 1) t.addTask(A[i]); t.processTasks(e.loadBatchedGeometrie.bind(e)) })) }; i.length > 0;) r() } else { for (var a = this.taskGeometrieManager, s = 0; A.length > s; s += 1) a.addTask(A[s]); a.processTasks(e.loadBatchedGeometrie.bind(e)) } }, iC.prototype._loadInstancedGeo = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.mpkUrl(A[o])); var n = this.model.getStorage(); if (n) for (var r = function () { var t = i.splice(0, 30); n.getBatch(t, (function (A) { for (var i = function (i) { if (A[t[i]]) if (!0 === A[t[i]].split) { var o = A[t[i]].list, s = new Uint8Array(A[t[i]].length); n.getBatch(o, (function (A) { for (var n = 0; o.length > n; n += 1) A[o[n]] ? s.set(new Uint8Array(A[o[n]]), 4e7 * n) : Bh.error("获取分割几何失败"); var r = t[i].indexOf("fileKey="); e._parseInstancedGeometrie(s.buffer, t[i].slice(r + 8)), e._onGeoTaskFinished(), Bh.debug("load geo from local") }), (function () { Bh.error("获取分割几何失败") })) } else a = t[i].indexOf("fileKey="), e._parseInstancedGeometrie(A[t[i]], t[i].slice(a + 8)), e._onGeoTaskFinished(), Bh.debug("load geo from local"); else { if (r = e.taskInstancedGeometrieManager, -1 === (a = t[i].indexOf("fileKey="))) return Bh.error("url is not has fileKey"), { v: void 0 }; r.addTask(t[i].slice(a + 8)), Bh.debug("load geo from net") } }, o = 0; t.length > o; o += 1) { var r, a, s = i(o); if ("object" === lc(s)) return s.v } e.taskInstancedGeometrieManager.processTasks(e.loadInstancedGeometrie.bind(e)) }), (function () { for (var t = e.taskInstancedGeometrieManager, i = 0; A.length > i; i += 1) t.addTask(A[i]); t.processTasks(e.loadInstancedGeometrie.bind(e)) })) }; i.length > 0;) r() } else { for (var a = this.taskInstancedGeometrieManager, s = 0; A.length > s; s += 1) a.addTask(A[s]); a.processTasks(e.loadInstancedGeometrie.bind(e)) } }, iC.prototype._onGeoTaskFinished = function () { (this.geoLoadTaskCount += 1, this.notifyProgress) && (this.progressCallback && this.progressCallback({ total: this.maxLoadTaskCount + this.maxGeoLoadTaskCount, loaded: .8 * (this.loadTaskCount + this.geoLoadTaskCount), modelKey: this.model.modelKey })); this.maxGeoLoadTaskCount > this.geoLoadTaskCount || (this.dataLoaded = !0, Bh.timeEnd("几何数据加载时间"), this.geoFinishCallback && this.geoFinishCallback()) }, iC.prototype.getSceneTaskCount = function (A) { var e = A.scenes; return e += A.lines, e += A.mpks, vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), e }; var oC = function (A, e) { tf.call(this, A), this.defaultManager = new Of(e, A), this.instancedManager = new Hf(A), this.loader = new iC(this) }; (oC.prototype = Object.create(tf.prototype)).prepare = function (A, e) { if (this.isLoaded() && !this.isHidden()) { this.prepareWireframe(this.model, e); this.model.getMaterialManager(); this.model.getMaterialManager()._updateTextureMapping(), !this.model.lightmap || this.model.enableLightmap === vc.EnableLightmap && this.model.lightmapIntensity === vc.LightmapIntensity || (this.model.enableLightmap = vc.EnableLightmap, this.model.lightmapIntensity = vc.LightmapIntensity, this.rebuildIndicesforLightmap(), this.updateNodes()) } }, oC.prototype.settleData = function (A) { var e = this; this.addNodeInfoToOctantMap(), e.model.setLoaded(!0); this.loader.geoFinishCallback = function () { e.loaded = !0, e.model.getMaterialManager()._updateTextureMapping(), e.clearCachedData(e.model), A && A() }, this.loader.startLoadSceneAndGeos(this.model.getConfig()) }, oC.prototype.addNodeInfoToOctantMap = function () { var A = this.model.manager, e = this.model.getEncodedDatabagId(); this.loader.getDescriptor().traverseNodeInfosByComponent((function (t, i) { A.addNodeInfoToOctantMap(e, t, i) })) }, oC.prototype.createMeshNodes = function (A) { var e = this, t = this.model; vc.stepLoad && t.setLoaded(!0); var i = this.loader.getDescriptor(); this.instancedManager.createMeshNodes(t, i.getInstancedUserIds()), this.defaultManager.asyncCreateMeshNodes(t, i.getStandardUserIds(), (function () { t.getMaterialManager()._updateTextureMapping(), e.clearCachedData(t), e.loaded = !0, A && A() })) }, oC.prototype.clearCachedData = function (A) { this.loader.getDescriptor().destroyReader(), this.loader.getDescriptor().clearReferencedMeshCache(), this.defaultManager.clearCachedData(), this.instancedManager.clearCachedData() }, oC.prototype.createBatchedMeshNodes = function (A) { this.defaultManager.createBatchedMeshNodes(this.model, A) }, oC.prototype.createInstancedMeshNodes = function (A) { this.instancedManager.createInstancedMeshNodes(this.model, A) }; var nC = function (A) { Xu.call(this, A), this._loadingOnDemand = !1 }; (nC.prototype = Object.assign(nC.prototype, Xu.prototype)).loadGeopkOnDemand = function (A, e, t) { this.loadTaskCount = 0, this.maxLoadTaskCount = A.length, this._loadingOnDemand = !0, this.finishCallback = t; var i = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var o = this.url, n = [], r = 0; A.length > r; r += 1) n.push(o.mpkUrl(A[r])); var a = this.model.getStorage(); a && a.getBatch(n, (function (A) { for (var t = function (e) { if (A[n[e]]) if (!0 === A[n[e]].split) { var t = A[n[e]].list, o = new Uint8Array(A[n[e]].length); a.getBatch(t, (function (A) { for (var r = 0; t.length > r; r += 1) A[t[r]] ? o.set(new Uint8Array(A[t[r]]), 4e7 * r) : Bh.error("获取分割几何失败"); var a = n[e].indexOf("fileKey="); i._parseGeometrie(o.buffer, n[e].slice(a + 8)), Bh.debug("load geo from local"), i._onTaskFinished() }), (function () { Bh.error("获取分割几何失败") })) } else s = n[e].indexOf("fileKey="), i._parseGeometrie(A[n[e]], n[e].slice(s + 8)), Bh.debug("load geo from local"), i._onTaskFinished(); else { if (r = i.taskGeometrieManager, -1 === (s = n[e].indexOf("fileKey="))) return Bh.error("url is not has fileKey"), { v: void 0 }; r.addTask(n[e].slice(s + 8)), Bh.debug("load geo from net") } }, o = 0; n.length > o; o += 1) { var r, s, l = t(o); if ("object" === lc(l)) return l.v } i.taskGeometrieManager.processTasks(i.loadGeometrie.bind(i), e) }), (function () { for (var t = i.taskGeometrieManager, o = 0; A.length > o; o += 1) t.addTask(A[o]); t.processTasks(i.loadGeometrie.bind(i), e) })) } else { for (var s = this.taskGeometrieManager, l = 0; A.length > l; l += 1) s.addTask(A[l]); s.processTasks(i.loadGeometrie.bind(i), e, t) } }, nC.prototype.resetProcessState = function (A) { this.loadTaskCount = 0, this.maxLoadTaskCount = A, this._loadingOnDemand = !0 }, nC.prototype.dealProgressSegment = function (A, e) { return vc.MergeComponent && this._loadingOnDemand ? e * A.progressPercentage.load : e }, nC.prototype._loadLayerKey = function () { var A = this, e = this.fileLoader, t = this.url, i = this.model, o = this.handler.getLayerProvider(); e.setResponseType(""), e.load(t.layerKeyUrl(), (function (e) { var t = new LayerKeyReader(e), i = [], n = t.getData(); o.cacheLayerKeys(n); for (var r = 0, a = t.getCount(); a > r; ++r) { var s = t.getLayerKey(r), l = o.formatLayerIds(s); i.push(l[0]) } A._loadLayer(i) }), void 0, (function (e) { i.dispatchEvent({ type: Tc.LOAD_ERROR, errorType: Tc.LOAD_MPK_ERROR, event: e }), A._onTaskFinished() })) }, nC.prototype._loadLayer = function (A) { var e = this, t = this.fileLoader, i = this.url, o = this.model, n = this.handler.getLayerProvider(); t.setResponseType("arraybuffer"), t.load(i.layerUrl(), (function (t) { for (var i = new LayerReader(t), o = 0, r = i.getLayerCount(); r > o; ++o) if (void 0 !== A[o]) { for (var a = [], s = i.getLayerData(o), l = i.getGeopkList(o), c = 0, h = l.length; h > c; c += 1) a.push(l[c]); n.cacheLayerData(A[o], { layerId: s.layer_id, boundingBox: s.boundingBox, mpkIdxs: a }) } e._onTaskFinished() }), void 0, (function (A) { o.dispatchEvent({ type: Tc.LOAD_ERROR, errorType: Tc.LOAD_MPK_ERROR, event: A }), e._onTaskFinished() })) }, nC.prototype.delayLoadResources = function (A) { var e = this.model.getConfig().metadata; e && 0 !== e.lines ? (this.startCallback = null, this.progressCallback = null, this.finishCallback = A, this.loadTaskCount = 0, this.maxLoadTaskCount = 0, this.maxLoadTaskCount += e.lines, e.lines && this._loadLine()) : A && A() }; var rC = function (A) { Af.call(this, A) }; (rC.prototype = Object.assign(rC.prototype, Af.prototype)).parseItemData = function (A, e) { var t = this.model; (ap(t.dataVersion, "2.0.0") || void 0 === t.dataVersion) && (Bh.time("升级几何结构"), this._updateV1ToV2(t), t.dataVersion = "2.0.0", Bh.timeEnd("升级几何结构")), this._readMaterialBuffer(t), t.hasAnimation && vc.EnableAnimation ? (this._parseClips(), this._parseBones()) : (this._parseGeo(), vc.Instance && sp(t.dataVersion, "2.0.0") && this._parseInstanced()); var i = {}; if (!i) return Bh.log("Empty scene"), !1; var o = this.referencedMeshCache; if (Bh.time("_readItemData"), !o.bufferData || 0 >= Object.keys(o.bufferData).length) return !0; if (A) for (var n = 0, r = A.length; r > n; n += 1) o.components[A[n]] && this._readItemData(i, A[n], A[n], void 0, 0); else for (var a in o.components) this._readItemData(i, a, a, void 0, 0); t.hasAnimation && vc.EnableAnimation && this._parseNodes(), Bh.timeEnd("_readItemData"), i = null, e && e() }; var aC = function (A) { nC.call(this, A), this.descriptor = new rC(A.model) }; (aC.prototype = Object.assign(aC.prototype, nC.prototype)).loadSceneAndMpks = function (A) { this._loadScene(0), this._loadLayerKey(), vc.BorderLineDelayLoaded || this._loadAllBorderlines(A) }, aC.prototype.getSceneTaskCount = function (A) { var e = 2; return vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), e }; var sC = function (A) { tf.call(this, A), this.layerDataLoaded = !1, this.loadedUserIdsObject = null, this.loadedUserIds = null, this.layerProvider = null, this.firstToLoad = !1 }; (sC.prototype = Object.assign(sC.prototype, tf.prototype)).destroy = function () { sC.prototype.destroy.call(this), this.loadedUserIdsObject = null, this.loadedUserIds = null, this.layerProvider.destroy(), this.layerProvider = null }, sC.prototype.getLayerProvider = function () { return this.layerProvider }, sC.prototype.load = function (A) { var e = this, t = this.model; this.loader.setNotifyProgress(A), this.loader.load((function () { t.manager.dispatchEvent({ type: Rc.ON_LOAD_START }) }), (function (A) { t.manager.dispatchEvent({ type: Rc.ON_LOAD_PROGRESS, progress: A }) }), (function () { e.processLoadCompleted((function () { t.manager.dispatchEvent({ type: Rc.ON_LOAD_COMPLETE, modelKey: e.model.modelKey }) })) })) }, sC.prototype.unload = function (A, e) {}, sC.prototype.loadGeopkOnDemand = function (A, e, t, i) { var o = this, n = this.model, r = !A, a = function (A) { n.manager.dispatchEvent({ type: Rc.ON_LOAD_PROGRESS, progress: A }) }; this.firstToLoad ? this.loader.delayLoadResources((function () { o.firstToLoad = !1, o.loader.finishCallback = null, o.prepareData((function () { o.loader.progressCallback = a, o.getLayerProvider().setConditionsOnDemandLoad(A), o._loadGeopkOnDemand(r, e, t, i) })) })) : (o.loader.progressCallback = a, o.getLayerProvider().setConditionsOnDemandLoad(A), o._loadGeopkOnDemand(r, e, t, i)) }, sC.prototype._loadGeopkOnDemand = function (A, e, t, i) { var o = this, n = this.model; this.layerDataLoaded = !1, e && e(), n.manager.dispatchEvent({ type: Rc.ON_LOAD_START }), this.getLayerProvider().loadGeopkOnDemand(A, (function (A) { o.dealData(A) }), (function (A, e) {}), t, (function () { o.layerDataLoaded = !0, n.manager.updateFilterManager(), Bh.log("load finish"), n.dispatchEventEx({ type: Rc.ON_DEMAND_LOAD_COMPLETE, data: { boundingBox: n.manager.getLoadOnDemandDirector().getBoundingBoxForUsedComponent() }, modelKey: o.model.modelKey }), i && i() })) }, sC.prototype.processLoadCompleted = function (A) { var e = this.model; e.materialManager._updateTextureMapping(), e.materialManager._updateIBL(e), e.loaded = !0, e.updateOctreeNode(), requestAnimationFrame((function () { A && A(), e.debut(e) })) }, sC.prototype.isAllReady = function () { return !(!this.isLoaded() || this.isHidden() || !this.isLayerDataLoaded()) }, sC.prototype.applyFilter = function () { console.log('applyFilter :>erqwer> '); if (this.isLoaded() && this.isLayerDataLoaded()) { var A = this.model.getModelDescriptor().getStandardUserIdsByCategory(this.loadedUserIds); if (A.length && this.defaultManager.applyFilter(this.model, A), vc.Instance) { var e = this.model.getModelDescriptor().getInstancedUserIdsByCategory(this.loadedUserIds); e.length && this.instancedManager.applyFilter(this.model, e) } } }, sC.prototype.needUpdate = function () { return !!this.isLayerDataLoaded() }, sC.prototype.clearData = function () {}, sC.prototype.initData = function (A) {}, sC.prototype.dealMeshNodes = function (A) {}, sC.prototype.dealData = function (A) { var e = this; this.initData((function () { e.model.manager.loadOverrideMaterialsByDemand((function () { e.dealMeshNodes(A) }), (function () { e.dealMeshNodes(A) })) })) }, sC.prototype.getLoadedUserIdsObject = function () { return this.loadedUserIdsObject }, sC.prototype.isLayerDataLoaded = function () { return this.layerDataLoaded }, sC.prototype.clearLoadedState = function () { this.layerDataLoaded = !1, this.loadedUserIdsObject = null, this.loadedUserIds = null }; var lC = function (A) { this.model = A, this.conditionsChanged = !0, this.nodeInfosWithLayerKey = {}, this.cachedLayerData = {}, this.cacheAttributes = null, this.cacheSpecialtysLevels = {}, this.mapLayerKeys = {}, this.lastUsedGeopkIdxsObject = null, this.lastUsedLayerIdsObject = null, this.lastUsedLayerData = null, this.mapNeededConditions = null }; lC.prototype.destroy = function () { this.cachedLayerData = null, this.nodeInfosWithLayerKey = null, this.cacheAttributes = null, this.cacheSpecialtysLevels = null, this.mapLayerKeys = null, this.lastUsedLayerData = null, this.lastUsedGeopkIdxsObject = null, this.lastUsedLayerIdsObject = null, this.mapNeededConditions = null }, lC.prototype.clearData = function () {}, lC.prototype.loadLayerDataByIdxs = function (A, e, t, i) {}, lC.prototype.dealLayerDataLoading = function (A, e, t, i, o) {}, lC.prototype.loadGeopkOnDemand = function (A, e, t, i, o) { var n = A ? this.getAllLayerIdxData() : this.getUsedLayerIdxData(); this.dealLayerDataLoading(this.getLayerIdxInfoByLayerData(n), e, t, i, o) }, lC.prototype.getUsedIdxsInfoFrom = function (A, e) { var t = null, i = {}, o = {}, n = {}, r = {}; if (A && A.length) for (var a = 0, s = A.length; s > a; a += 1) i[t = A[a]] = !0; if (e) if (uh.isEmptyObject(i)) n = e; else { for (t in e) i[t] && (r[t] = !0); if (uh.isEmptyObject(r)) o = i, n = e; else { for (t in e) r[t] || (n[t] = !0); for (t in i) r[t] || (o[t] = !0) } } else uh.isEmptyObject(i) || (o = i); return { objCurrUsedIdxs: i, addIdxs: Object.keys(o), removeIdxs: Object.keys(n) } }, lC.prototype.getLayerIdxInfoByLayerData = function (A) { var e = null, t = null; A ? (e = A.layerIds, t = A.mpkIdxs) : (e = null, t = null); var i = this.getUsedIdxsInfoFrom(e, this.lastUsedLayerIdsObject); this.lastUsedLayerIdsObject = i.objCurrUsedIdxs; var o = this.getUsedIdxsInfoFrom(t, this.lastUsedGeopkIdxsObject); return this.lastUsedGeopkIdxsObject = o.objCurrUsedIdxs, { layerScene: i, mpk: o } }, lC.prototype.getUsedLayerIdxData = function () { if (!this.isConditionsChanged() && this.lastUsedLayerData) return this.lastUsedLayerData; this.setConditionsChanged(!1); var A = this.getConditionsOnDemand(); if (!A) return this.lastUsedLayerData = null, null; this.getCachedLayerData(); for (var e = [], t = A, i = this.model.getModelDescriptor().referencedMeshCache.components, o = this.model.getModelDescriptor(), n = 0, r = t.length; r > n; n += 1) { var a = t[n], s = i[a]; if (s) if (s.nodes || s.nodeIds) for (var l = null, c = 0, h = (l = s.nodes ? s.nodes : s.nodeIds).length; h > c; c += 1) { var d = l[c]; if ("object" !== lc(d) && (d = o.getReferencedMeshComponentNodeById(d)), d) { var p = this.getFileKeyByGeoId(d.geoId); p && e.push(p) } } else { var g = this.getFileKeyByGeoId(i[a].geoId); g && e.push(g) } } return this.lastUsedLayerData = { layerIds: [], layerKeys: [], boundingBoxes: [], mpkIdxs: e }, this.lastUsedLayerData }, lC.prototype.getFileKeyByGeoId = function (A) { for (var e in this.cachedLayerData) if (this.cachedLayerData.hasOwnProperty(e)) { var t = this.cachedLayerData[e]; if (A >= t[0] && t[1] >= A) return e } return window.geoidToFileKeyMap ? window.geoidToFileKeyMap[A] : null }, lC.prototype.getAllLayerIdxData = function () { this.setConditionsChanged(!1); var A = this.getCachedLayerData(); if (!A) return null; var e = [], t = [], i = [], o = []; for (var n in A) { for (var r = A[n].mpkIdxs, a = 0, s = r.length; s > a; a += 1) i.push(r[a]); e.push(n), t.push(A[n].layerId), o.push(A[n].boundingBox) } return { layerIds: t, layerKeys: e, boundingBoxes: o, mpkIdxs: i } }, lC.prototype.getUserIdsOnDemand = function () { var A = {}, e = this.getConditionsOnDemand(); if (e) for (var t in e) A[e[t]] = !0; return A }, lC.prototype.cacheLayerData = function (A, e) { this.cachedLayerData[A] = e }, lC.prototype.getCachedLayerData = function () { return this.cachedLayerData }, lC.prototype.clearNodeInfoCacheWithLayerKey = function () { this.nodeInfosWithLayerKey = {} }, lC.prototype.cacheNodeInfoByLayerKey = function (A, e) { this.nodeInfosWithLayerKey[A] || (this.nodeInfosWithLayerKey[A] = []), this.nodeInfosWithLayerKey[A].push(e) }, lC.prototype.cacheNodeInfosWithLayerKey = function () { var A = this.model.getModelDescriptor().getAllNodeInfos(); for (var e in A) for (var t = A[e], i = 0, o = t.length; o > i; i += 1) { var n = t[i], r = this.formatLayerIds(n.userData); this.cacheNodeInfoByLayerKey(r[0], n) } }, lC.prototype.cacheLayerKeys = function (A) { this.mapLayerKeys = A; var e = {}, t = this.getLayerKeyAttributes(); for (var i in A) { var o = A[i], n = o[t[0]], r = o[t[1]]; e.hasOwnProperty(n) || (e[n] = []), e.hasOwnProperty(r) || (e[r] = []), e[n].push(r), e[r].push(n) } this.cacheSpecialtysLevels = e }, lC.prototype.getLayerKeyAttributes = function () { if (this.cacheAttributes) return this.cacheAttributes; var A = [], e = Object.keys(this.mapLayerKeys), t = this.mapLayerKeys[e[0]]; for (var i in t) t.hasOwnProperty(i) && A.push(i); return this.cacheAttributes = A, this.cacheAttributes }, lC.prototype.formatLayerIds = function (A) { var e = []; if (!A) return e.push("unknown"), e; var t = this.getFileKeyByGeoId(A.originalGeometryId); return e.push(t || "unknown"), e }, lC.prototype.getLevelsOrSpecialtys = function (A) { return this.cacheSpecialtysLevels.hasOwnProperty(A) ? this.cacheSpecialtysLevels[A] : (Bh.warn("Attribute " + A + "has no according levels or specialtys."), []) }, lC.prototype.getUnionBoundingBoxOnDemand = function () { var A = this.getBoundingBoxesOnDemand(); if (A && A.length > 0) { for (var e = new aA, t = 0, i = A.length; i > t; t += 1) e.union(A[t]); return e } return null }, lC.prototype.getBoundingBoxesOnDemand = function () { var A = this.getUsedLayerIdxData(); return A ? A.boundingBoxes : null }, lC.prototype.setConditionsOnDemandLoad = function (A) { this.mapNeededConditions = A, this.setConditionsChanged(!0) }, lC.prototype.setConditionsChanged = function (A) { this.conditionsChanged = A }, lC.prototype.getConditionsOnDemand = function () { return this.mapNeededConditions }, lC.prototype.isConditionsChanged = function () { return this.conditionsChanged }; var cC = function (A) { lC.call(this, A) }; (cC.prototype = Object.assign(cC.prototype, lC.prototype)).loadLayerDataByIdxs = function (A, e, t, i) { this.model.getLoader().resetProcessState(e.length), this.model.getLoader().loadGeopkOnDemand(e, (function (A, e) { t && t(e - A, e) }), i) }, cC.prototype.dealLayerDataLoading = function (A, e, t, i, o) { var n = A.mpk; if (0 !== n.addIdxs.length || 0 !== n.removeIdxs.length) { var r = !1; n.removeIdxs.length > 0 && (r = !0, t && t(null, n.removeIdxs)), n.addIdxs.length > 0 ? this.loadLayerDataByIdxs(null, n.addIdxs, i, (function () { e && e(o) })) : r ? e && e(o) : o && o() } else e && e(o) }; var hC = function (A) { return sC.call(this, A), this.layerProvider = new cC(A), this }; (hC.prototype = Object.assign(hC.prototype, sC.prototype)).settleData = function (A) { this.addNodeInfoToOctantMap(), this.getLayerProvider().cacheNodeInfosWithLayerKey(), this.loaded = !0, A && A() }, hC.prototype.clearData = function () { this.model.clearNodeGroup(), this.model.clearMeshFromOctantMap(), this.getLayerProvider().clearData(), this.model.clearWireframeElementCount(), this.defaultManager.clearData(), this.instancedManager.clearData(), this.clearLoadedState() }, hC.prototype.addNodeInfoToOctantMap = function () { var A = this.model.manager, e = this.model.getEncodedDatabagId(); this.model.getModelDescriptor().traverseNodeInfosByComponent((function (t, i) { A.addNodeInfoToOctantMap(e, t, i) })) }, hC.prototype.initData = function (A) { var e = this; e.model.getModelDescriptor().parseItemData(e.layerProvider.getConditionsOnDemand(), (function () { e.settleData(), e.loadedUserIdsObject = e.getLayerProvider().getUserIdsOnDemand(), e.loadedUserIds = Object.keys(e.loadedUserIdsObject), A && A() })) }, hC.prototype.unload = function (A, e) { var t = this; this.model.getModelDescriptor().clearReferencedMeshCacheByGeopkIdxs(e, (function (A) { t.defaultManager.disposeGeometry(A) })) }; var dC = function (A, e) { return hC.call(this, A, e), this.tag = "layer", this.defaultManager = new Of(e, A), this.instancedManager = new Hf(A), this.loader = new aC(this), this }; (dC.prototype = Object.assign(dC.prototype, hC.prototype)).prepare = function (A, e) { this.isAllReady() && (this.prepareWireframe(this.model, e), this.model.getMaterialManager()._updateTextureMapping(this.model)) }, dC.prototype.dealMeshNodes = function (A) { delete this.model.manager.octantToObjectMap[this.model.modelKey], this.addNodeInfoToOctantMap(); var e = this.model.getModelDescriptor().getInstancedUserIdsByCategory(this.loadedUserIds); this.model._removeNodeGroup(gp.INSTANCEGEOMETRY), this.model._removeNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY), this.instancedManager.meshManager.dispose(), this.instancedManager.meshManager.disposeInstanceGeometries(), e.length && this.instancedManager.createMeshNodes(this.model, e); var t = this.model.getModelDescriptor().getStandardUserIdsByCategory(this.loadedUserIds); this.model._removeNodeGroup(gp.GEOMETRY), this.model._removeNodeGroup(gp.WIREFRAME), this.defaultManager.meshManager.dispose(), this.defaultManager.meshManager.clearData(), t.length ? this.defaultManager.asyncCreateMeshNodes(this.model, t, A) : A && A() }, dC.prototype.unloadComponents = function (A, e) { for (var t = this.model.modelKey, i = 0, o = A.length; o > i; i += 1) this.model.manager.removeBatchedMeshFromOctantMap(t, A[i]); this.model.getModelDescriptor().clearNodeInfoCacheByComponentsKey(A), this.dealMeshNodes(e) }; var pC = function (A) { $u.call(this, A) }; (pC.prototype = Object.assign(pC.prototype, $u.prototype)).parseItemData = function (A, e) { var t = this.model; (ap(t.dataVersion, "2.0.0") || void 0 === t.dataVersion) && (Bh.time("升级几何结构"), this._updateV1ToV2(t), t.dataVersion = "2.0.0", Bh.timeEnd("升级几何结构")), this._readMaterialBuffer(t), t.hasAnimation && vc.EnableAnimation ? (this._parseClips(), this._parseBones()) : this._parseGeo(); var i = {}; if (!i) return Bh.log("Empty scene"), !1; var o = this.referencedMeshCache; if (Bh.time("_readItemData"), !o.bufferData || 0 >= Object.keys(o.bufferData).length) return !0; if (A) for (var n = 0, r = A.length; r > n; n += 1) o.components[A[n]] && this._readItemData(i, A[n], A[n], void 0, 0); else for (var a in o.components) this._readItemData(i, a, a, void 0, 0); t.hasAnimation && vc.EnableAnimation && this._parseNodes(), Bh.timeEnd("_readItemData"), i = null, e && e() }; var gC = function (A) { nC.call(this, A), this.descriptor = new pC(A.model) }; (gC.prototype = Object.assign(gC.prototype, nC.prototype)).loadSceneAndMpks = function (A) { this._loadScene(0), this._loadLayerKey(), vc.BorderLineDelayLoaded || this._loadAllBorderlines(A) }, gC.prototype.getSceneTaskCount = function (A) { var e = 2; return vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), e }; var uC = function (A) { of .call(this, A), this.nodeGroupName = "PickingMeshGroup" }; Object.assign(uC.prototype, of .prototype), eu(uC, [{ key: "disposePickingNodeById", value: function (A) { for (var e = Object.keys(this.pickingNodeMap[A]), t = 0, i = e.length; i > t; t += 1) for (var o = this.pickingNodeMap[A][e[t]], n = 0, r = o.length; r > n; n += 1) o[n].material = null, o[n].geometry.dispose(), o[n] = null } }, { key: "removeFormPickingNodeGroup", value: function (A) { if (this.pickingNodeGroup) for (var e = Object.keys(this.pickingNodeMap[A]), t = 0, i = e.length; i > t; t += 1) for (var o = this.pickingNodeMap[A][e[t]], n = 0, r = o.length; r > n; n += 1) this.pickingNodeGroup.remove(o[n]) } }, { key: "addToPickingNodeMap", value: function (A, e, t) { this.pickingNodeMap || (this.pickingNodeMap = {}), this.pickingNodeMap[A] || (this.pickingNodeMap[A] = {}), this.pickingNodeMap[A][e] = t, this.addToPickingNodeGroup(t) } }, { key: "generatePickingMeshes", value: function (A) { var e = this; this.manager.traverseActiveMeshMap(A, (function (A, t, i) { if (!e._isExistNode(A, t)) { for (var o = [], n = 0, r = i.length; r > n; n += 1) { var a = i[n], s = new he; s.setAttribute("position", a.geometry.getAttribute("position")), s.setIndex(a.geometry.getIndex()), s._withDrawRange && s.setDrawRange(a.geometry.drawRange.start, a.geometry.drawRange.count); var l = new(a.isLineSegments ? jo : Ue)(s, Kd.DefaultMaterial); Tu.copyMeshProperties(l, a), l.renderOrder = 1, o.push(l) } e.addToPickingNodeMap(A, t, o) } })) } }, { key: "_isExistNode", value: function (A, e) { return !!(this.pickingNodeMap && this.pickingNodeMap[A] && this.pickingNodeMap[A][e]) } }, { key: "updatePickingMeshesState", value: function (A, e, t) { if (this.pickingNodeMap) for (var i = this.pickingNodeMap, o = this.manager, n = 0, r = e.length; r > n; n += 1) { var a = e[n]; if (i[a] && o.isPickableNode(a)) { var s = o.getActiveMeshMapById(a); if (s) for (var l = Object.keys(i[a]), c = 0, h = l.length; h > c; c += 1) { var d = l[c]; if (s[d]) { var p = i[a][d]; if (p) for (var g = 0, u = p.length; u > g; g += 1) p[g].material = A, p[g].visible = !0 } } } } } }, { key: "resetPickingMeshesState", value: function () { if (this.pickingNodeMap) for (var A = this.pickingNodeMap, e = Object.keys(A), t = 0, i = e.length; i > t; t += 1) for (var o = e[t], n = Object.keys(A[o]), r = 0, a = n.length; a > r; r += 1) for (var s = A[o][n[r]], l = 0, c = s.length; c > l; l += 1) s[l].visible = !1 } }, { key: "updatePickingMeshes", value: function (A, e, t) { return this.generatePickingMeshes(e), this.resetPickingMeshesState(), this.updatePickingMeshesState(A, e, t), this.getPickingNodeGroup() } }]); var fC = function (A, e) { So.call(this), this.type = "SkinnedMeshEx", this.matrixAutoUpdate = !0, this.active = !1, this.guid = "", this.key = "", this.typeEx = "", this.geometry = A || Tu.EmptyGeometry, this.material = e || Kd.DefaultMaterial, this.visible = !1, this.castShadow = vc.EnableShadow, this.receiveShadow = vc.EnableShadow }; (fC.prototype = Object.create(So.prototype)).constructor = fC, fC.prototype.init = function (A) { A && A.parent && A.parent.add(this) }, fC.prototype.destroy = function () { this.parent && this.parent.remove(this), this.userData && (this.userData = null), this.geometry = null, this.material = null }, fC.prototype.isVisible = function () { return this.visible && this.active }, fC.prototype.spawn = function (A) { void 0 !== A.guid && (this.guid = A.guid), void 0 !== A.key && (this.key = A.key), void 0 !== A.name && (this.name = A.name), void 0 !== A.typeEx && (this.typeEx = A.typeEx), A.geometry && (this.geometry = A.geometry), A.material && (this.material = A.material), A.matrix ? (this.matrix.copy(A.matrix), this.updateMatrixWorld(!0)) : (this.matrix.identity(), this.updateMatrixWorld(!0)), this.modelKey = A.modelKey ? A.modelKey : "", A.userData ? this.userData = A.userData : this.userData && (this.userData = null), void 0 !== A.visible && (this.visible = A.visible), this.renderOrder = A.renderOrder || 0, this.active = !0, this.visible = !0, this.frustumCulled = !1, this.matChange = !1 }, fC.prototype.clear = function () { this.geometry = Tu.EmptyGeometry, this.material = Kd.DefaultMaterial, this.active = !1, this.visible = !0, this.guid = "", this.key = "", this.typeEx = "", this.frustumCulled = !0, this.material.visible = !1 }, fC.prototype.intersectBoxWithDistance = function () { var A = new aA; return function (e, t) { var i = this.geometry, o = this.material, n = this.matrixWorld; return t && (n = new M).multiplyMatrices(this.matrixWorld, t), void 0 === o ? -1 : (i.boundingBox || i.computeBoundingBox(), A.copy(i.boundingBox), A.applyMatrix4(n), e.ray.intersectBoxWithDistance(A)) } }(), fC.prototype.intersectBoxWithDistanceByIndices = function (A, e) { var t = this.matrixWorld, i = this.computeBoundingBox(e); return i.applyMatrix4(t), A.ray.intersectBoxWithDistance(i) }, fC.prototype.intersectBoxWithClipPlane = function (A, e) { var t = this.matrixWorld, i = this.computeBoundingBox(e); return i.applyMatrix4(t), i.intersectsPlane(A) }, fC.prototype.raycastByIndices = function () { var A = new M, e = new CA, t = new cA, i = new y, o = new y, n = new y, r = new s, a = new s, l = new s, c = new y, h = new y, d = new y, p = new M; function g(A, e, t, s, g, u, f, m) { i.fromBufferAttribute(s, u), o.fromBufferAttribute(s, f), n.fromBufferAttribute(s, m); var C = function (A, e, t, i, o, n, r) { var a = A.material; if (null === (Array.isArray(a) ? t.intersectTriangle(i, o, n, !1, r) : 1 === a.side ? t.intersectTriangle(n, o, i, !0, r) : t.intersectTriangle(i, o, n, 2 !== a.side, r))) return null; d.copy(r), d.applyMatrix4(p); var s = e.ray.origin.distanceTo(d); return e.near > s || s > e.far ? null : { distance: s, point: d.clone(), object: A } }(A, e, t, i, o, n, h); if (C) { if (g && g.array && g.array.length && (r.fromBufferAttribute(g, u), a.fromBufferAttribute(g, f), l.fromBufferAttribute(g, m), C.uv = function (A, e, t, i, o, n, r) { return RA.getBarycoord(A, e, t, i, c), o.multiplyScalar(c.x), n.multiplyScalar(c.y), r.multiplyScalar(c.z), o.add(n).add(r), o.clone() }(h, i, o, n, r, a, l)), s.instanceMatrix) { var v = i.clone().applyMatrix4(s.instanceMatrix), I = o.clone().applyMatrix4(s.instanceMatrix), E = n.clone().applyMatrix4(s.instanceMatrix); C.face = new GA(u, f, m, RA.getNormal(v, I, E, new y)) } else C.face = new GA(u, f, m, RA.getNormal(i, o, n, new y)); C.faceIndex = u } return C } return function (i, o, n, r) { var a = this.geometry, s = this.material; if (r) { a = this.geometry, s = this.material; if ((p = new M).multiplyMatrices(this.matrixWorld, r), void 0 === s) return; if (null === a.boundingSphere && a.computeBoundingSphere(), t.copy(a.boundingSphere), t.applyMatrix4(p), !1 === i.ray.intersectsSphere(t)) return; if (A.getInverse(p), e.copy(i.ray).applyMatrix4(A), null !== a.boundingBox && !1 === e.intersectsBox(a.boundingBox)) return; var l = null, c = null, h = null, d = null, u = a.index; (I = a.attributes.position).instanceMatrix = r; var f = a.attributes.uv, m = null, C = null; if (null !== u) for (m = 0, C = u.count; C > m; m += 3) c = u.getX(m), h = u.getX(m + 1), d = u.getX(m + 2), (l = g(this, i, e, I, f, c, h, d)) && (l.faceIndex = Math.floor(m / 3), o.push(l)); else for (m = 0, C = I.count; C > m; m += 3) (l = g(this, i, e, I, f, c = m, h = m + 1, d = m + 2)) && (l.index = c, o.push(l)) } else { if (p = this.matrixWorld, void 0 === s) return; if (t.copy(this.computeBoundingSphere(n)), t.applyMatrix4(p), !1 === i.ray.intersectsSphere(t)) return; A.getInverse(p), e.copy(i.ray).applyMatrix4(A); var y = this.computeBoundingBox(n); if (!1 === e.intersectsBox(y)) return; l = null, c = null, h = null, d = null; var v, I = a.attributes.position, E = (f = a.attributes.uv, m = null, n.indexStart), B = n.indexStart + n.indexCount, x = a.getIndex().array; for (m = E, v = B; v > m; m += 3) (l = g(this, i, e, I, f, c = x[m], h = x[m + 1], d = x[m + 2])) && (l.faceIndex = Math.floor(m / 3), o.push(l)) } } }(), fC.prototype.minDistanceToTri = function (A, e, t) { function i(A, e) { return new y(A.x - e.x, A.y - e.y, A.z - e.z) } function o(A, e) { return new y(A.x + e.x, A.y + e.y, A.z + e.z) } function n(A, e, t) { return new y(A.x + e.x * t, A.y + e.y * t, A.z + e.z * t) } function r(A, e) { return A.x * e.x + A.y * e.y + A.z * e.z } function a(A, e) { return new y(A.y * e.z - A.z * e.y, A.z * e.x - A.x * e.z, A.x * e.y - A.y * e.x) } function s(A, e, t, s) { var l, c = r(e, s), h = r(e, e), d = r(s, s), p = i(t, A), g = r(e, p), u = r(s, p), f = null; 0 > (f = (g * d - u * c) / (h * d - c * c)) || isNaN(f) ? f = 0 : f > 1 && (f = 1); var m = null, C = null, y = null, v = null; return 0 >= (l = (f * c - u) / d) || isNaN(l) ? (C = t, 0 >= (f = g / h) || isNaN(f) ? (m = A, y = i(t, A)) : 1 > f ? (m = n(A, e, f), v = a(p, e), y = a(e, v)) : y = i(t, m = o(A, e))) : 1 > l ? (C = n(t, s, l), 0 >= f || isNaN(f) ? (m = A, v = a(p, s), y = a(s, v)) : 1 > f ? (m = n(A, e, f), 0 > r(y = a(e, s), p) && y.multiplyScalar(-1)) : (v = a(p = i(t, m = o(A, e)), s), y = a(s, v))) : (C = o(t, s), 0 >= (f = (c + g) / h) || isNaN(f) ? (m = A, y = i(C, A)) : 1 > f ? (m = n(A, e, f), v = a(p = i(C, A), e), y = a(e, v)) : y = i(C, m = o(A, e))), { vec: y, closestP: m, closestQ: C } } function l(A, e) { var t = null, o = null, l = [], c = [], h = null; l[0] = i(A[1], A[0]), l[1] = i(A[2], A[1]), l[2] = i(A[0], A[2]), c[0] = i(e[1], e[0]), c[1] = i(e[2], e[1]), c[2] = i(e[0], e[2]); for (var d = null, p = null, g = null, u = 0, f = A[0].distanceToSquared(e[0]) + 1, m = 0; 3 > m; m += 1) for (var C = 0; 3 > C; C += 1) { var y = s(A[m], l[m], e[C], c[C]); h = y.vec; var v = r(d = i(o = y.closestQ, t = y.closestP), d); if (f >= v) { p = t.clone(), g = o.clone(), f = v; var I = r(i(A[(m + 2) % 3], t), h), E = r(i(e[(C + 2) % 3], o), h); if (0 >= I && E >= 0) return { start: t.clone(), end: o.clone(), minDistance: Math.sqrt(v) }; 0 > I && (I = 0), E > 0 && (E = 0), r(d, h) - I + E > 0 && (u = 1) } } var B = a(l[0], l[1]), x = r(B, B); if (x > 1e-15) { var S = []; d = i(A[0], e[0]), S[0] = r(d, B), d = i(A[0], e[1]), S[1] = r(d, B), d = i(A[0], e[2]), S[2] = r(d, B); var w = -1; if (S[0] > 0 && S[1] > 0 && S[2] > 0 ? S[w = S[1] > S[0] ? 0 : 1] > S[2] && (w = 2) : 0 > S[0] && 0 > S[1] && 0 > S[2] && S[2] > S[w = S[0] > S[1] ? 0 : 1] && (w = 2), w >= 0 && (u = 1, r(d = i(e[w], A[0]), a(B, l[0])) > 0 && r(d = i(e[w], A[1]), a(B, l[1])) > 0 && r(d = i(e[w], A[2]), a(B, l[2])) > 0)) return t = n(e[w], B, S[w] / x), o = e[w].clone(), t.distanceTo(o) } var M = a(c[0], c[1]), b = r(M, M); if (b > 1e-15) { var U = []; d = i(e[0], A[0]), U[0] = r(d, M), d = i(e[0], A[1]), U[1] = r(d, M), d = i(e[0], A[2]), U[2] = r(d, M); w = -1; if (U[0] > 0 && U[1] > 0 && U[2] > 0 ? U[w = U[1] > U[0] ? 0 : 1] > U[2] && (w = 2) : 0 > U[0] && 0 > U[1] && 0 > U[2] && U[2] > U[w = U[0] > U[1] ? 0 : 1] && (w = 2), w >= 0 && (u = 1, r(d = i(A[w], e[0]), a(M, c[0])) > 0 && r(d = i(A[w], e[1]), a(M, c[1])) > 0 && r(d = i(A[w], e[2]), a(M, c[2])) > 0)) return { start: t = A[w].clone(), end: (o = n(A[w], M, U[w] / b)).clone(), minDistance: t.distanceTo(o) } } return u ? (t = p, o = g, { start: p.clone(), end: g.clone(), minDistance: Math.sqrt(f) }) : { start: p.clone(), end: g.clone(), minDistance: 0 } } var c = new y, h = new y, d = new y; function p(A, e, t, i, o, n) { c.fromBufferAttribute(e, t), h.fromBufferAttribute(e, i), d.fromBufferAttribute(e, o), n && (c.applyMatrix4(n), h.applyMatrix4(n), d.applyMatrix4(n)), A.push(c), A.push(h), A.push(d) } for (var g = { start: null, end: null, minDistance: Number.POSITIVE_INFINITY }, u = this.geometry, f = u.attributes.position, m = e ? e.indexStart : 0, C = u.getIndex().array, v = m, I = e ? e.indexStart + e.indexCount : C.length; I > v; v += 3) { var E = []; p(E, f, C[v], C[v + 1], C[v + 2], t); var B = l(A, E); if (0 >= B.minDistance) return g.minDistance = 0, g; g.minDistance > B.minDistance && (g.minDistance = B.minDistance, g.start = B.start.clone(), g.end = B.end.clone()) } return g }, fC.prototype.computeBoundingBox = function (A) { var e = new aA, t = this.geometry.attributes.position.array, i = null, o = null; return A ? (i = A.positionStart, o = A.positionStart + A.positionCount) : (i = 0, o = t.length), this.setBoundingBoxFromArray(e, t, i, o), e }, fC.prototype.computeBoundingSphere = function (A) { var e = new aA, t = new y, i = this.geometry.attributes.position.array, o = null, n = null; A ? (o = A.positionStart, n = A.positionStart + A.positionCount) : (o = 0, n = i.length); var r = new cA, a = r.center; this.setBoundingBoxFromArray(e, i, o, n), e.getCenter(a); for (var s = 0, l = o, c = n; c > l; l += 3) t.x = i[l], t.y = i[l + 1], t.z = i[l + 2], s = Math.max(s, a.distanceToSquared(t)); return r.radius = Math.sqrt(s), r }, fC.prototype.setBoundingBoxFromArray = function (A, e, t, i) { for (var o = Number(1 / 0), n = Number(1 / 0), r = Number(1 / 0), a = -1 / 0, s = -1 / 0, l = -1 / 0, c = t, h = i; h > c; c += 3) { var d = e[c], p = e[c + 1], g = e[c + 2]; o > d && (o = d), n > p && (n = p), r > g && (r = g), d > a && (a = d), p > s && (s = p), g > l && (l = g) } A.min.set(o, n, r), A.max.set(a, s, l) }; var mC = function (A) { return Rf.call(this), this.manager = A, this.nodePriority = { high: [], medium: [], low: [] }, this.visibleOctant = [], this.occlusionVisibleOctant = [], this.usedNodeInfosObject = {}, this.lineNodes = {}, this.blinkMaterials = [], this.selectedMeshes = [], this.nonSelectedMeshes = [], this.selectedObjectIds = [], this.activeMeshMap = {}, this }; (mC.prototype = Object.create(Rf.prototype)).destroy = function () { this.dispose(), this.clearData(), this.pickingNodeGenerator && (this.pickingNodeGenerator.destroy(), this.pickingNodeGenerator = null), this.activeMeshMap = null, this.manager = null, this.nodePriority = null, this.visibleOctant = null, this.occlusionVisibleOctant = null, this.nodePriority = null, this.lineNodes = null, this.blinkMaterials = null }, mC.prototype.disposeLineNodes = function () { for (var A in this.lineNodes) { var e = this.lineNodes[A]; e.geometry.dispose(), e = null, delete this.lineNodes[A] } }, mC.prototype.clearData = function () { this.pickingNodeGenerator && this.pickingNodeGenerator.clearData(), this._clearActiveMeshMap(), this.disposeGeometries(), this.disposeLineNodes(), this._clearNodePriorityData(!0), this._clearUsedNodeInfosObject(), this.visibleOctant.length = 0, this.occlusionVisibleOctant.length = 0 }, mC.prototype.update = function (A, e, t) { this._updateMeshNodes(A, e, t) }, mC.prototype.cullNodes = function (A, e) { this._clearNodePriorityData(!1), this._adjustLowNodePriorityLength(A); var t = 0; return t = vc.EnableOctant ? this._cullNodesWithOctant(A, e) : this._cullNodesWithFull(A), this._calcPrioritizedNodeCount(A, t) }, mC.prototype.getPriorityNodes = function () { return [this.nodePriority.high, this.nodePriority.medium, this.nodePriority.low] }, mC.prototype._cullNodesWithOctant = function (A, e) { var t = 0, i = 0, o = this.manager.getLoader(A).getOctreeRootNodeInner(), n = this.manager.getLoader(A).getOctreeRootNodeOuter(); if (this.manager.getContainsCamera(A) || !n) return this.visibleOctant.length = 0, o && this._frustumCull(A, e, o), n && this._frustumCull(A, e, n), (i = this.visibleOctant.length) > 0 && (this._sortVisibleOctant(e), t = this._logicCull(A, !0, !0, t, i)), t; n && (this.visibleOctant.length = 0, this._frustumCull(A, e, n), (i = this.visibleOctant.length) > 0 && (this._sortVisibleOctant(e), t = this._logicCull(A, !0, !1, t, i))); var r = this.manager.getFilter(A); (Object.keys(this.nodePriority.low).length + this.nodePriority.high.length + this.nodePriority.medium.length < this.manager.getRenderableCount(A) || r._hasRenderPromotionFilter()) && ((o = this.manager.getLoader(A).getOctreeRootNodeInner()) && (this.visibleOctant.length = 0, this._frustumCull(A, e, o), (i = this.visibleOctant.length) > 0 && (this._sortVisibleOctant(A, e), t = this._logicCull(A, !0, !1, t, i)))); return t }, mC.prototype._cullNodesWithFull = function (A) { var e = A.getModelDescriptor().getComponentCount(); return 0 === e ? 0 : this._logicCullWithFull(A, e) }, mC.prototype._calcPrioritizedNodeCount = function (A, e) { var t = e + this.nodePriority.high.length + this.nodePriority.medium.length; return t > this.manager.getRenderableCount(A) && (t = this.manager.getRenderableCount(A)), t }, mC.prototype._updateMeshNodes = function (A, e, t) { if (this.filter = A.getFilter(), A.isOnlyWireframe()) { A._getNodeGroup(gp.GEOMETRY).visible = !1 } else { var i = A.getModelDescriptor().getStandardNodeInfos(); if (i) { this.clearSelectedObjectIds(), A._getNodeGroup(gp.GEOMETRY).visible = !0; var o = A.manager.filter, n = A.selectedMaterial, r = A.manager.sceneState, a = A.manager; if (a.octantToObjectMap && a.octantToObjectMap[A.modelKey]) { var s = a.octantToObjectMap[A.modelKey].mesh, l = A.materialManager.materials, c = this.manager.hiddenUserIdSetObject, h = this.manager.overrideUserIdSetObject, d = this.manager.transparentUserIdSetObject, p = this.manager.selectedUserIdSetObject, g = this.manager.hoveredUserIdSetObject; this.blinkMaterials.length = 0, e || (e = A.getModelDescriptor().getStandardUserIds()), vc.TranslucentDepthDisabled && (n.depthWrite = !n.transparent); var u = o._getMaterialByName("scene"); vc.TranslucentDepthDisabled && (u.depthWrite = !1); for (var f = 0; e.length > f; f += 1) { var m = e[f]; if (i[m]) { var C = i[m][0]; if (C) if (s[m]) { var y = s[m][0]; if (y instanceof vu && (y = y.object), y) if (c && c[m]) y.visible = !1; else { y.visible = !0; var v = []; if (d && d[m] && !vc.EnableSelectionByTranslucent) { for (var I = 0; C.materialId.length > I; I += 1) v.push(t || u); y.material = v } else if (p && p[m]) if (this.cacheSelectedObjectIds(m), vc.PickingEffect) for (var E = o._getOverrideMaterial(C), B = 0; C.materialId.length > B; B += 1) v.push(t || E); else { for (var x = 0; C.materialId.length > x; x += 1) v.push(t || n); y.material = v } else if (g && g[m]) { for (var S = 0; C.materialId.length > S; S += 1) if (h[m]) { var w = o._getMaterialByName(h[m]), M = r.getHoverMaterial(t || w); v.push(M) } else { var b = r.getHoverMaterial(t || l[C.materialId[S]]); v.push(b) } y.material = v } else if (d && d[m]) { for (var U = 0; C.materialId.length > U; U += 1) v.push(t || u); y.material = v } else if (h && h[m]) { for (var F = 0; C.materialId.length > F; F += 1) if (Array.isArray(h[m])) { (K = l[C.materialId[F]]) || (K = o._getMaterialByName(h[m][F])), v.push(t || K) } else { var K = o._getMaterialByName(h[m]); v.push(t || K) } y.material = v } else { for (var Q = 0; C.materialId.length > Q; Q += 1) { K = l[C.materialId[Q]]; v.push(t || K) } y.material = v } } } else Bh.error(m, "没有创建对应的mesh") } } } } } }, mC.prototype._getUsableMaterial = function (A, e, t, i) { var o = e.materialId, n = e.userId, r = A.materialManager.materials, a = A.manager.sceneState, s = A.manager.filter, l = null, c = a.isSelected(n); !0 !== c || s._isPickable(e) || (c = !1), t ? vc.PickingEffect ? l = s._getOverrideMaterial(e) : (l = s._getOverrideMaterial(e)) && !c || (l = t) : i && (l = s._getOverrideMaterial(e)); var h = A.manager.getOverrideMaterialByNodeInfo(e); return l = l || h || r[o], vc.Hover && !vc.EnableRenderPass && a.hoverId === n && !1 === c && (l = a.getHoverMaterial(l)), l }, mC.prototype._dealMeshes = function (A, e, t, i, o) { var n = this.getGeometryByNodeInfo(A, e), r = A.pool, a = 0; if (Array.isArray(n)) for (var s = 0, l = n.length; l > s; s += 1) { a = r.get({ modelKey: A.modelKey, nodeId: e.nodeId, userId: e.userId, originalId: e.originalId, userData: e.userData, geometry: n[s], matrix: e.matrix, material: i, renderOrder: i.transparent ? 0 : vc.MaximumDepth - e.cellDepth, visible: t }), null } else a = r.get({ modelKey: A.modelKey, nodeId: e.nodeId, userId: e.userId, originalId: e.originalId, userData: e.userData, geometry: n, matrix: e.matrix, material: i, renderOrder: i.transparent ? 0 : vc.MaximumDepth - e.cellDepth, visible: t }); 0 > a || o.curOctantId !== e.octantId && (a > 0 && A.manager.addObjectRangeToOctantMap(o.curOctantId, o.octantStartIndex, a - 1), o.octantStartIndex = a, o.curOctantId = e.octantId) }, mC.prototype._dealLineSegments = function (A, e, t, i) { var o = this.getGeometryByNodeInfo(A, e); if (o) { var n = this._getLineSegmentsNodeGroup(A), r = this.lineNodes[e.nodeId]; r || ((r = new cf(o, i)).nodeId = e.nodeId, r.name = e.name, r.geometryId = e.geometryId, r.modelKey = A.modelKey, this.lineNodes[e.nodeId] = r), r.material = i, r.visible = t, n.add(r), r.updateMatrixWorld(!0), this._cacheActiveMesh(e.userId, e.nodeId, r) } }, mC.prototype._frustumCull = function (A, e, t) { var i = A.manager, o = e.getFrustum(), n = vc.OctantDepth, r = e.projScreenMatrix, a = new aA; function s(A, e, t, i, o) { var n = null; if (e && t > A.depth && (a.set(A.min, A.max), n = e.intersectsBox(a)), n) { if (i) { var l = a.applyMatrix4(r), c = l.getSize().length(), h = l.getCenter().z; A.priority = c / (h = h > 1e-6 ? h : 1e-6), o.push(A) } else o.push(A); for (var d = 0, p = A.childOctants.length; p > d; d += 1) s(A.childOctants[d], e, t, i, o) } } (vc.DEBUG && i.showOctreeBox(t), s(t, o, n, !0, this.visibleOctant), vc.OcclusionTranslucentEnabled) && s(t, this.manager.getFrustumFromOcclusionCamera(), n, !1, this.occlusionVisibleOctant); return !0 }, mC.prototype._logicCull = function (A, e, t, i, o) { var n = A.manager, r = n.filter, a = r._hasHiddenFileIdFilter(), s = r._hasOverrideMaterialFilter(), l = n.sceneState.selectionSet, c = r._hasRenderPromotionFilter(), h = this.nodePriority.high, d = this.nodePriority.medium, p = this.nodePriority.low, g = this.nodePriority.low.length, u = A.getModelDescriptor().getNodeInfosWithComponentKey(); function f(A, e) { if (!(a && r._isHiddenFileId(A) || !1 === r._isVisible(A))) if (l.hasOwnProperty(A.userId) || s && r._hasHighPriorityOverrideMaterial(A)) h.push(A); else { var t = !1; if (c && r._isRenderPromotion(A) && (t = !0), e) { var o = A.userData, n = o ? o.categoryId : void 0; n && e[n] && (t = !0) } t ? d.push(A) : g > i && (p[i] = A, i += 1) } } var m = n.getCategoriesFromHighPriority("outer"); !0 === t && (m = n.getCategoriesFromHighPriority("inner")); for (var C = 0, y = 0, v = 0; o > v; v += 1) { var I = null, E = 0; e ? (I = this.visibleOctant[v].octantId, E = this.visibleOctant[v].depth) : I = v; var B = u[I]; if (B) { var x = this._getUsedNodeInfosByComponentKey(I); if (!x) { for (C = 0, y = B.length; y > C; C += 1) { (w = B[C]).octantId = I, w.cellDepth = E, this._isSatisfied(A, w) && this._cacheUsedNodeInfosByComponentKey(I, w) } x = this._getUsedNodeInfosByComponentKey(I) } if (x) { var S = x.default; for (C = 0, y = S.length; y > C; C += 1) { var w; f(w = S[C], m) } } } } return Bh.timeEnd("collectNodeInfo"), i }, mC.prototype._clearUsedNodeInfosObject = function () { for (var A in this.usedNodeInfosObject) delete this.usedNodeInfosObject[A].default, delete this.usedNodeInfosObject[A].instance, delete this.usedNodeInfosObject[A]; this.usedNodeInfosObject = {} }, mC.prototype._getUsedNodeInfosByComponentKey = function (A) { return this.usedNodeInfosObject[A] }, mC.prototype._cacheUsedNodeInfosByComponentKey = function (A, e) { this.usedNodeInfosObject[A] || (this.usedNodeInfosObject[A] = {}, this.usedNodeInfosObject[A].default = [], this.usedNodeInfosObject[A].instance = []), this.usedNodeInfosObject[A].default.push(e) }, mC.prototype._isSatisfied = function (A, e) { var t = A.getLoadedUserIdsObject(); return !t || Boolean(t[e.userId]) }, mC.prototype._logicCullWithFull = function (A, e) { return this._logicCull(A, !1, !0, 0, e) }, mC.prototype._sortVisibleOctant = function (A, e) {}, mC.prototype._applyOcclusionTranslucent = function (A) { if (vc.OcclusionTranslucentEnabled) { var e = A.pool.getObjects(), t = A.manager.octantToObjectMap, i = this.occlusionVisibleOctant.length; if (i > 0) for (var o = A.manager.getFrustumFromOcclusionCamera(), n = 0; i > n; n += 1) { var r = t[this.occlusionVisibleOctant[n].octantId]; if (r && r.length > 0) for (var a = 0, s = r.length; s > a; a += 2) for (var l = r[a]; r[a + 1] >= l; l += 1) { var c = e[l][0]; Rd.intersectObjectWithFrustum(c, o) && this._overrideOcclusionMaterial(c) } } } }, mC.prototype._overrideOcclusionMaterial = function (A, e) { var t = e.material; if (t && !1 === t.transparent) { var i = A.manager.acquireMaterial(), o = i.material; t.color ? o.color.copy(t.color) : i.resetColor(), o.opacity = vc.OcclusionOpacity, e.material = o, e.material.needsUpdate = !0 } }, mC.prototype._clearNodePriorityData = function (A) { var e = this.nodePriority; e.high.length = 0, e.medium.length = 0, A && (e.low.length = 0) }, mC.prototype._adjustLowNodePriorityLength = function (A) { 0 === this.nodePriority.low.length && (this.nodePriority.low.length = this.manager.getRenderableCount(A)) }, mC.prototype._clearLineSegmentsNodeGroup = function (A) { this._getLineSegmentsNodeGroup(A).clear() }, mC.prototype._getLineSegmentsNodeGroup = function (A) { return A._getNodeGroup(gp.LINESEGMENTS, { globalSpace: !0 }) }, mC.prototype._isLineSegments = function (A) { return A.type === Qf.EnumNodeItemType.LINE }, mC.prototype.getBlinkMaterials = function (A) { return this.blinkMaterials }, mC.prototype._makeMesh = function (A, e, t) { var i = A.modelKey, o = A.manager, n = A.getModelDescriptor().getStandardNodeInfos(); if (n) { e || (e = A.getModelDescriptor().getInstancedUserIds()); for (var r = A.getModelDescriptor(), a = A._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }), s = A.materialManager.materials, l = 0, c = e.length; c > l; l += 1) { var h = A.getModelDescriptor().getNodeInfosByComponentKey(e[l]); if (!h || !h[0].mesh) for (var d = n[e[l]], p = 0, g = d.length; g > p; p += 1) { var u = d[p]; if (u) { var f = u.geometryId, m = this.getGeometryById(f); if (m) { var C = u.materialId || r.referencedMeshCache.components[e[l]].matId, y = null; if (y = [], op(A.dataVersion, "1.0") || void 0 === A.dataVersion) { var v = s[C]; if (u.materialId = [], !v) continue; if (Array.isArray(v)) if (v.length > 1) for (p = 0; v.length > p; p += 1) u.materialId.push(C + "_" + p), s[C + "_" + p] = v[p]; else s[C] = v[0], u.materialId.push(C); else u.materialId.push(C); for (p = 0; u.materialId.length > p; p += 1) y.push(s[u.materialId[p]]) } else for (p = 0; C.length > p; p += 1) { var I = s[C[p]]; I || (I = Kd.DefaultMaterial), y.push(I) } if (1 > y.length) { var E = _u[u.type] ? _u[u.type].color : void 0; E || (Bh.log("Material not found for type: ", u.type), E = _u.DEFAULT.color), E || (Bh.log("Default material not found for type: ", u.type), E = [1, 1, 1, 1]); var B = new LA(E[0], E[1], E[2]), x = B.getHexString() + "_" + E[3], S = s[x]; S || (S = new xr({ color: B }), 1 > E[3] && (S.transparent = !0, S.opacity = E[3]), S.side = 2, s[x] = S), m.groups = [{ start: 0, count: m.index.count, materialIndex: 0 }], u.materialId.push(x), y.push(S) } for (var w = 0; y.length > w; w += 1) y[w].aoMap && m.attributes.uv && (m.attributes.uv2 = m.attributes.uv); var M = new Kf(m, y), b = { matrix: u.matrix, modelKey: i, name: u.name, key: u.componentKey, userData: {}, typeEx: u.type }; M.spawn(b), a.add(M), o.addMeshToOctantMap(i, u.componentKey, new Iu(u.componentKey, M)); var U = { indexCount: m.index.count, indexStart: 0, lightmapIdx: void 0, nodeId: u.componentKey, positionCount: 3 * m.attributes.position.count, positionStart: 0, userId: u.componentKey }; M._indicesGroup = {}, M._indicesGroup[u.componentKey] = [U], A.addMeshToInfoMap(u.componentKey, u.componentKey, M, U), M.geometryId = u.geometryId, this._cacheActiveMesh(u.userId, u.nodeId, M), f = null, C = null, b = null, y = null, m = null, M = null } } } } a.updateMatrixWorld(!0), t && t() } }, mC.prototype._makeSkinMesh = function (A, e, t) { var i = A.modelKey, o = A.manager, n = A.getModelDescriptor().getStandardNodeInfos(); if (n) { e || (e = A.getModelDescriptor().getInstancedUserIds()); for (var r = A.getModelDescriptor(), a = A.materialManager.materials, s = 0, l = e.length; l > s; s += 1) for (var c = n[e[s]], h = 0, d = c.length; d > h; h += 1) { var p = c[h]; if (p) { var g = p.geometryId, u = this.getGeometryById(g); if (u) { var f = p.materialId || r.referencedMeshCache.components[e[s]].matId, m = null; m = []; for (h = 0; f.length > h; h += 1) { var C = a[f[h]]; C || (C = Kd.DefaultMaterial), m.push(C) } if (1 > m.length) { var y = _u[p.type] ? _u[p.type].color : void 0; y || (Bh.log("Material not found for type: ", p.type), y = _u.DEFAULT.color), y || (Bh.log("Default material not found for type: ", p.type), y = [1, 1, 1, 1]); var v = new LA(y[0], y[1], y[2]), I = v.getHexString() + "_" + y[3], E = a[I]; E || (E = new xr({ color: v }), 1 > y[3] && (E.transparent = !0, E.opacity = y[3]), E.side = 2, a[I] = E), u.groups = [{ start: 0, count: u.index.count, materialIndex: 0 }], p.materialId.push(I), m.push(E) } for (var B = 0; m.length > B; B += 1) m[B].aoMap && (u.attributes.uv2 = u.attributes.uv); var x = null; if ("skinIndex" in u.attributes && "skinWeight" in u.attributes) { x = new fC(u, m); for (var S = 0; m.length > S; S += 1) m[S].skinning = !0; console.log("SkinnedMesh 类型mesh") } else x = new Kf(u, m); var w = { matrix: p.matrix, modelKey: i, name: p.name, key: p.componentKey, userData: {}, typeEx: p.type }; x.spawn(w), o.addMeshToOctantMap(i, p.componentKey, new Iu(p.componentKey, x)); var M = { indexCount: u.index.count, indexStart: 0, lightmapIdx: void 0, nodeId: p.componentKey, positionCount: u.attributes.position.count, positionStart: 0, userId: p.componentKey }; return x._indicesGroup = {}, x._indicesGroup[p.componentKey] = [M], A.addMeshToInfoMap(p.componentKey, p.componentKey, x, M), x.geometryId = p.geometryId, this._cacheActiveMesh(p.userId, p.nodeId, x), g = null, f = null, w = null, m = null, u = null, x } } } } }, mC.prototype._readBufferInfo = function (A, e) { var t = A.getModelDescriptor().getStandardNodeInfos(); if (t) { e || (e = A.getModelDescriptor().getInstancedUserIds()); for (var i = A.getModelDescriptor(), o = A.materialManager.materials, n = A.materialManager.textures, r = 0, a = e.length; a > r; r += 1) for (var s = t[e[r]], l = 0, c = s.length; c > l; l += 1) { var h = i.referencedMeshCache.components[s[l].componentKey], d = h.type; if (-1 !== h.geoId) { var p = this.getGeometryById(h.geoId); if (p || (p = this.getGeometryByNodeInfo(A, s[l]))) if (np(A.dataVersion, "2.0.0")) ; else { var g = o[h.matId]; if (g) { if (A.textureNeedsUpdate && void 0 !== A.dataVersion && ap(A.dataVersion, "2.0.0") && (A.textureNeedsUpdate = !1, g.textures.length > 0)) if (g.materials.length > 1) for (l = 0; g.UVgroup.length > l; l += 1) for (m = (f = g.UVgroup[l]).start, C = f.count, y = f.textureIndex, r = 0; g.groups.length > r; r += 1) { E = (v = g.groups[r]).count, B = v.materialIndex; if ((m === (I = v.start) || m + C === I + E || I > m && C > E) && C >= E) { S = g.materials[B]; (x = n[g.textures[y]]) && S && (S.map = x) } } else g.materials[0].map = n[g.textures[0]] } else if (g = this._readMaterialBuffer(h.matId, A)) { if (0 === g.materials.length) { (v = _u[d] ? _u[d].color : void 0) || (Bh.log("Material not found for type: ", d), v = _u.DEFAULT.color), v || Bh.log("Default material not found for type: ", d); var u = new xr({ color: new LA(v[0], v[1], v[2]) }); 1 > v[3] && (u.transparent = !0, u.opacity = v[3]), u.side = 2, g.materials.push(u), g.groups.push({ start: 0, count: c = p.index.count, materialIndex: 0 }) } if (g.textures.length > 0) if (g.materials.length > 1) for (var l = 0; g.UVgroup.length > l; l += 1) for (var f, m = (f = g.UVgroup[l]).start, C = f.count, y = f.textureIndex, r = 0; g.groups.length > r; r += 1) { var v, I, E = (v = g.groups[r]).count, B = v.materialIndex; if ((m === (I = v.start) || m + C === I + E || I > m && C > E) && C >= E) { var x, S = g.materials[B]; (x = n[g.textures[y]]) && S && (S.map = x) } } else g.materials[0].map = n[g.textures[0]]; p && g && (p.groups = g.groups), o[h.matId] = g.materials } } } else Bh.debug("实体没有几何") } } }, mC.prototype.createMeshNodes = function (A, e) { this._readBufferInfo(A, e), A.hasAnimation && vc.EnableAnimation ? this._makeSkinMesh(A) : this._makeMesh(A) }, mC.prototype.asyncCreateMeshNodes = function (A, e, t) { this._readBufferInfo(A, e), A.hasAnimation && vc.EnableAnimation ? t && t() : this._makeMesh(A, e, t) }, mC.prototype._readMaterialBuffer = function (A, e) { var t = e.getModelDescriptor().referencedMeshCache.materials[A]; if (!t) return null; var i = t.color, o = t.colorIndex, n = t.texture, r = t.textureIndex, a = [], s = [], l = []; new Aa; if (i.length > 4) { for (var c = 0; i.length / 4 > c; c += 1) { var h = new xr({ color: new LA(i[4 * c], i[4 * c + 1], i[4 * c + 2]) }); 1 > i[4 * c + 3] && (h.transparent = !0, h.opacity = i[4 * c + 3]), h.side = 2, a.push(h), h = null } for (var d = null, p = void 0, g = 0; o.length > g; g += 1) { var u = o[g]; u !== p && (p = u, null != d && (d.count = 3 * g - d.start, s.push(d)), d = { start: 3 * g, materialIndex: p }) } null != d && (d.count = 3 * o.length - d.start, s.push(d)) } else if (4 === i.length) { var f = new xr({ color: new LA(i[0], i[1], i[2]) }); 1 > i[3] && (f.transparent = !0, f.opacity = i[3]), f.side = 2, a.push(f), s.push({ start: 0, count: 3 * o.length, materialIndex: 0 }) } for (var m = null, C = void 0, y = r, v = 0; y.length > v; v += 1) { var I = y[v]; I !== C && (C = I, null != m && (m.count = 3 * v - m.start, l.push(m)), m = { start: 3 * v, textureIndex: C }) } return null != m && (m.count = 3 * y.length - m.start, l.push(m)), { materials: a, groups: s, textures: n, UVgroup: l } }, mC.prototype.clearSelectedObjectIds = function () { this.selectedObjectIds.length = 0 }, mC.prototype.cacheSelectedObjectIds = function (A) { this.selectedObjectIds.push(A) }, mC.prototype.adjustVisibility = function (A, e) { var t = this._getNodeGroup(A), i = t.visible; e && !t.bVisible || (t.visible = e), t.bVisible = i }, mC.prototype.changeVisibilityOfSelectedObjects = function (A, e) { var t = A.manager, i = t.octantToObjectMap[A.modelKey].mesh; this.selectedMeshes.length = 0; for (var o = 0, n = this.selectedObjectIds.length; n > o; o += 1) { var r = this.selectedObjectIds[o], a = i[r][0]; a && (t.filter._isVisible({ userId: r }) && (a.visible = e)) } }, mC.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { var t = A.manager, i = t.octantToObjectMap[A.modelKey].mesh; this.selectedMeshes.length = 0; for (var o = {}, n = 0, r = this.selectedObjectIds.length; r > n; n += 1) { o[this.selectedObjectIds[n]] = !0 } for (var a in i) if (i.hasOwnProperty(a) && !o[a]) { var s = i[a][0]; if (!s) continue; if (!t.filter._isVisible({ userId: a })) continue; s.visible = e } }, mC.prototype.restoreVisibilityOfObjects = function () { this.selectedMeshes.length = 0, this.nonSelectedMeshes.length = 0 }, mC.prototype._getNodeGroup = function (A) { return A._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }) }, mC.prototype.getMeshesByUserIds = function (A, e) { var t = e, i = A.getModelDescriptor().getNodeInfosByComponentKey(t); if (i) { for (var o = [], n = 0, r = i.length; r > n; n += 1) for (var a = i[n], s = a.mesh, l = s._indicesGroup[t], c = 0, h = l.length; h > c; c += 1) { var d = {}; d.mesh = s, d.indexInfo = l[c], d.matrix = s.matrix.clone().multiply(A.getModelMatrix()), d.boundingBox = a.boundingBox.clone().applyMatrix4(d.matrix), o.push(d) } return o } return null }, mC.prototype._getUsedGeometry = function (A, e) { var t = null; if (!vc.Instance && e.uvArrayBuffer) { var i = e.geometryId + "|" + e.nodeId; if (t = this.getGeometryById(i)) return t; var o = this._createGeometryByNodeInfo(A, e); o instanceof Array || (o = [o]), t = []; for (var n = new l, r = new y, a = e.uvArrayBuffer, s = 0, c = o.length; c > s; s += 1) { var h = new he; h.setIndex(o[s].index), h.addAttribute("position", o[s].attributes.position), h.addAttribute("normal", o[s].attributes.normal), n.set(a[6 * s], a[6 * s + 2], a[6 * s + 4], a[6 * s + 1], a[6 * s + 3], a[6 * s + 5], 0, 0, 1); for (var d = [], p = o[s].attributes.uv.array, g = 0, u = p.length; u > g; g += 2) r.set(p[g], p[g + 1], 1), r.applyMatrix3(n), d.push(r.x), d.push(r.y); h.addAttribute("uv", new Ae(d, 2)), t.push(h) } this._cacheGeometry(i, t) } else t = this.getGeometryByNodeInfo(A, e); return t }, mC.prototype.getGeometryBuffersByUserId = function (A, e) { var t = A.getModelDescriptor().getStandardNodeInfosById(e); if (!t) return []; for (var i = [], o = A.getDatabagId(), n = 0, r = t.length; r > n; n += 1) { var a = t[n], s = this.getGeometryByNodeInfo(A, a); if (s) { var l = this._isLines(a); if (s instanceof Array) for (var c = 0, h = s.length; h > c; c += 1) i.push({ isLines: l, databagId: o, nodeId: a.nodeId, position: s[c].getAttribute("position").array, index: s[c].getIndex().array, matrix: a.matrix }); else i.push({ isLines: l, databagId: o, nodeId: a.nodeId, position: s.getAttribute("position").array, index: s.getIndex().array, matrix: a.matrix }) } } return i }, mC.prototype.traverseActiveMeshMap = function (A, e) { for (var t = 0, i = (A = A || Object.keys(this.activeMeshMap)).length; i > t; t += 1) { var o = A[t]; if (this.activeMeshMap[o]) for (var n = Object.keys(this.activeMeshMap[o]), r = 0, a = n.length; a > r; r += 1) { var s = n[r]; e(o, s, this.activeMeshMap[o][s]) } } }, mC.prototype.getActiveMeshMapById = function (A) { return this.activeMeshMap[A] }, mC.prototype._clearActiveMeshMap = function () { this.activeMeshMap = {} }, mC.prototype._cacheActiveMesh = function (A, e, t) { this.activeMeshMap[A] || (this.activeMeshMap[A] = {}), this.activeMeshMap[A][e] || (this.activeMeshMap[A][e] = []), this.activeMeshMap[A][e].push(t) }, mC.prototype._isLines = function (A) { return A.type === $u.EnumNodeItemType.LINE }, mC.prototype.getPickingNodeGenerator = function () { return this.pickingNodeGenerator || (this.pickingNodeGenerator = new uC(this)), this.pickingNodeGenerator }, mC.prototype.isPickableNode = function (A) { return !this.filter || this.filter._isPickable({ userId: A }) }; var CC = function (A) { of .call(this, A), this.nodeGroupName = "PickingWireFrameGroup" }; Object.assign(CC.prototype, of .prototype), eu(CC, [{ key: "disposePickingNodeById", value: function (A) { for (var e = Object.keys(this.pickingNodeMap[A]), t = 0, i = e.length; i > t; t += 1) for (var o = this.pickingNodeMap[A][e[t]], n = 0, r = o.length; r > n; n += 1) o[n].material = null, o[n].geometry.dispose(), o[n] = null } }, { key: "addToPickingNodeMap", value: function (A, e, t) { this.pickingNodeMap || (this.pickingNodeMap = {}), this.pickingNodeMap[A] || (this.pickingNodeMap[A] = {}), this.pickingNodeMap[A][e] = t, this.addToPickingNodeGroup(t) } }, { key: "removeFormPickingNodeGroup", value: function (A) { if (this.pickingNodeGroup) for (var e = Object.keys(this.pickingNodeMap[A]), t = 0, i = e.length; i > t; t += 1) for (var o = this.pickingNodeMap[A][e[t]], n = 0, r = o.length; r > n; n += 1) this.pickingNodeGroup.remove(o[n]) } }, { key: "generatePickingMeshes", value: function (A) { var e = this, t = this.manager; this.manager.manager.getMeshManager().traverseActiveMeshMap(A, (function (A, i, o) { if (!(o && o.length && o[0].isLineSegments || e._isExistNode(A, i))) { var n = 0, r = 0, a = o[0].geometryId, s = []; for (n = 0, r = o.length; r > n; n += 1) s.push(o[n].geometry); var l = t._getWireframeGeometryById(a, s), c = []; for (n = 0, r = l.length; r > n; n += 1) { var h = new jo(l[n], Kd.DefaultMaterial); Tu.copyMeshProperties(h, o[n]), h.renderOrder = 0, c.push(h) } e.addToPickingNodeMap(A, i, c) } })) } }, { key: "_isExistNode", value: function (A, e) { return !!(this.pickingNodeMap && this.pickingNodeMap[A] && this.pickingNodeMap[A][e]) } }, { key: "updatePickingMeshesState", value: function (A, e, t) { if (this.pickingNodeMap) for (var i = this.pickingNodeMap, o = this.manager.manager.getMeshManager(), n = 0, r = e.length; r > n; n += 1) { var a = e[n]; if (i[a] && o.isPickableNode(a)) { var s = o.getActiveMeshMapById(a); if (s) for (var l = Object.keys(i[a]), c = 0, h = l.length; h > c; c += 1) { var d = l[c]; if (s[d]) { var p = i[a][d]; if (p) for (var g = 0, u = p.length; u > g; g += 1) p[g].material = A, p[g].visible = !0 } } } } } }, { key: "resetPickingMeshesState", value: function () { if (this.pickingNodeMap) for (var A = this.pickingNodeMap, e = Object.keys(A), t = 0, i = e.length; i > t; t += 1) for (var o = e[t], n = Object.keys(A[o]), r = 0, a = n.length; a > r; r += 1) for (var s = A[o][n[r]], l = 0, c = s.length; c > l; l += 1) s[l].visible = !1 } }, { key: "updatePickingMeshes", value: function (A, e, t) { return this.generatePickingMeshes(e), this.resetPickingMeshesState(), this.updatePickingMeshesState(A, e, t), this.getPickingNodeGroup() } }]); var yC = function (A) { this.manager = A, this.wireframeGeometries = {}, this.wireframeLineMeshes = {} }; yC.prototype._disposeGeometries = function () { for (var A in this.wireframeGeometries) this._disposeGeometry(A) }, yC.prototype.destroy = function () { this.manager = null, this._clearWireframeLineMeshes(), this.wireframeLineMeshes = null, this._disposeGeometries(), this.wireframeGeometries = null }, yC.prototype.clearData = function () { this._clearWireframeLineMeshes(), this._disposeGeometries() }, yC.prototype.update = function (A, e) { this.isActivateWireframe(A) ? (this._clearWireframeGroupNode(A), this._generateWireframeNodes(A, e), this._getWireWireframeGroupNode(A).updateMatrixWorld(!0)) : this._removeWireframeGroupNode(A) }, yC.prototype._disposeGeometry = function (A) { var e = this.wireframeGeometries[A]; if (e) { if (Array.isArray(e)) for (var t = 0, i = e.length; i > t; t += 1) e[t].dispose(); else e.dispose(); delete this.wireframeGeometries[A] } }, yC.prototype._clearWireframeLineMeshes = function () { for (var A in this.wireframeLineMeshes) delete this.wireframeLineMeshes[A]; this.wireframeLineMeshes = {} }, yC.prototype._clearWireframeGroupNode = function (A) { this._getWireWireframeGroupNode(A).clear() }, yC.prototype._removeWireframeGroupNode = function (A) { A._removeNodeGroup(this._getWireframeGroupName(A)) }, yC.prototype.isActivateWireframe = function (A) { return A.isActivateWireframe() }, yC.prototype._getWireWireframeGroupNode = function (A) { return A._getNodeGroup(this._getWireframeGroupName(A), { globalSpace: !0 }) }, yC.prototype._getWireframeGeometryByNodeInfo = function (A, e) { return this._getWireframeGeometryById(e.geometryId, this.manager.getGeometryByNodeInfo(A, e), A) }, yC.prototype._getWireframeGeometryById = function (A, e, t) { if (this.wireframeGeometries[A]) return this.wireframeGeometries[A]; var i = [], o = null, n = null; if (Array.isArray(e)) for (var r = 0, a = e.length; a > r; r += 1) n = Up(e[r].attributes.position.array, e[r].index.array), (o = new he).setIndex(new $A(n, 1)), o.setAttribute("position", e[r].attributes.position, 3), i.push(o); else n = Up(e.attributes.position.array, e.index.array), (o = new he).setIndex(new $A(n, 1)), o.setAttribute("position", e.attributes.position, 3), i.push(o); return this.wireframeGeometries[A] = i, this.wireframeGeometries[A] }, yC.prototype._makeWireframeLineMeshes = function (A, e, t) { var i = this.wireframeLineMeshes[e.nodeId]; if (!i) { i = this.wireframeLineMeshes[e.nodeId] = []; for (var o = this._getWireframeGeometryByNodeInfo(A, e), n = 0, r = o.length; r > n; n += 1) { var a = new jo(o[n], this._getWireframeMaterial(A)); a.name = e.nodeId + "_" + n, a.applyMatrix4(e.matrix), a.matrixAutoUpdate = !1, i.push(a) } e.wireframeMeshs = i } for (var s = 0, l = i.length; l > s; s += 1) t.add(i[s]) }, yC.prototype._generateWireframeNodes = function (A, e) { var t = this._getWireWireframeGroupNode(A), i = A.getModelDescriptor().getStandardNodeInfos(); e || (e = A.getModelDescriptor().getStandardUserIds()); for (var o, n, r = this.manager.getHiddenUserIds(), a = 0; e.length > a; a += 1) { var s = e[a], l = i[s][0]; r[s] || (o = l, n = this._getFilter(A), o.type === Qf.EnumNodeItemType.LINE || vc.Instance && ("box" === o.geometryId || "boxM" === o.geometryId) || n._hasRenderWithBoardlineFilter() && !n._isRenderWithBoardline(o) || this._makeWireframeLineMeshes(A, l, t)) } }, yC.prototype._getWireframeGroupName = function (A) { return A._getWireframeGroupName() }, yC.prototype._getWireframeMaterial = function (A) { return A.getWireframeMaterial() }, yC.prototype._getFilter = function (A) { return A.manager.filter }, yC.prototype.adjustVisibility = function (A, e) { if (A.isActivateWireframe()) { var t = this._getWireWireframeGroupNode(A), i = t.visible; e && !t.bVisible || (t.visible = e), t.bVisible = i } }, yC.prototype.changeVisibilityOfSelectedObjects = function (A, e) {}, yC.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { this.adjustVisibility(A, e) }, yC.prototype.restoreVisibilityOfObjects = function () {}, yC.prototype.getPickingNodeGenerator = function () { return this.pickingNodeGenerator || (this.pickingNodeGenerator = new CC(this)), this.pickingNodeGenerator }; var vC = function (A) { this.meshManager = new mC(this), this.model = A, this.wireframeManager = new yC(this) }; vC.prototype.destroy = function () { this.meshManager.destroy(), this.meshManager = null, this.wireframeManager.destroy(), this.wireframeManager = null }, vC.prototype.clearData = function () { this.meshManager.clearData(), this.wireframeManager.clearData() }, vC.prototype.disposeGeometry = function (A) { this.meshManager.disposeGeometry(A) }, vC.prototype.cullNodes = function (A, e) { this.hasNodeInfo(A) && this.meshManager.cullNodes(A, e) }, vC.prototype.updateNodes = function (A, e) { if (this.hasNodeInfo(A)) { var t; t = this._collectModelFiltered(A), this.meshManager.update(A, e, t), this.wireframeManager.update(A, e) } }, vC.prototype.applyFilter = function (A, e) { console.log('applyFilter :>dfdfdfdf> '); if (this.hasNodeInfo(A)) { var t = null; t = e || A.getModelDescriptor().getStandardUserIds(); var i = A.getModelDescriptor().getStandardNodeInfos(); this._collectFilteredUserIds(A.manager.filter, t, i), this._collectSelectedUserIds(A.manager.sceneState.selectionSet, i), this._collectHoveredUserIds(A.manager.sceneState.hoverId, i), this.updateNodes(A, e) } }, vC.prototype.applySelection = function (A) { console.log('applySelection18') if (this.hasNodeInfo(A)) { var e = A.getModelDescriptor().getStandardNodeInfos(); this._clearSelectedState(A), this._clearHoveredState(A), this._collectSelectedUserIds(A.manager.sceneState.selectionSet, e), this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), this.updateNodes(A) } }, vC.prototype.clearSelection = function (A) { this._clearSelectedState(A), this.applyHover(A) }, vC.prototype.applyHover = function (A) { if (this.hasNodeInfo(A)) { var e = A.getModelDescriptor().getStandardNodeInfos(); this._clearHoveredState(A), this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), this.updateNodes(A) } }, vC.prototype.clearHover = function (A) { this._clearHoveredState(A), this.updateNodes(A) }, vC.prototype.applyBlink = function (A) {}, vC.prototype.clearBlink = function (A) {}, vC.prototype.getPriorityNodes = function () { return this.meshManager.getPriorityNodes() }, vC.prototype.getGeometryByNodeInfo = function (A, e) { return this.meshManager.getGeometryByNodeInfo(A, e) }, vC.prototype.getRenderableCount = function (A) { return A.renderableCount }, vC.prototype.getLoader = function (A) { return A.loader }, vC.prototype.getContainsCamera = function (A) { return A.containsCamera }, vC.prototype.getFilter = function (A) { return A.manager.filter }, vC.prototype.hasNodeInfo = function (A) { return !!A.getModelDescriptor().getStandardNodeInfos() }, vC.prototype.createMeshNodes = function (A) { this.meshManager.createMeshNodes(A) }, vC.prototype.asyncCreateMeshNodes = function (A, e, t) { this.meshManager.asyncCreateMeshNodes(A, e, t) }, vC.prototype._collectFilteredUserIds = function (A, e, t) { var i = A._hasHiddenFileIdFilter(), o = A._hasVisibleFilter(), n = A._hasOverrideMaterialFilter(), r = A._hasTransparentFilter(); this.mapMaterialIdToUserIdsForFilter = {}; if (this.hiddenUserIdSetObject = {}, this.overrideUserIdSetObject = {}, this.transparentUserIdSetObject = {}, i || o || n || r) for (var a = 0; e.length > a; a += 1) { var s = e[a], l = t[s]; if (l && l.length) for (var c = 0, h = l.length; h > c; c += 1) { var d = l[c]; if (i && A._isHiddenFileId(d) || o && !1 === A._isVisible(d)) this.hiddenUserIdSetObject[s] = !0; else if (r && A._isTransparent(d)) this.transparentUserIdSetObject[s] = !0; else if (n && A._hasOverrideMaterial(d)) { var p = A._getOverrideMaterial(d); if (Array.isArray(p)) { for (var g = [], u = 0, f = p.length; f > u; u++) { var m = null !== p[u] ? p[u].name : ""; "" !== m && g.push(m) } this.overrideUserIdSetObject[s] = g } else { var C = null !== p ? p.name : ""; "" !== C && (this.overrideUserIdSetObject[s] = C) } } } } }, vC.prototype._collectModelFiltered = function (A) { var e = A.manager.filter, t = A.modelKey, i = e._hasModelOverrideMaterialFilter(), o = e._hasModelTransparentFilter(), n = A.manager.modelState.selectionSet; return A.manager.modelState.hoverId === t ? A.manager.modelState.getHoverMaterial() : n.hasOwnProperty(A.modelKey) ? A.manager.modelState.selectionMaterial : o && e._isModelTransparent(t) ? e._getMaterialByName("scene") : i && e._hasModelOverrideMaterial(t) ? e._getModelOverrideMaterial(t) : null }, vC.prototype._clearFilteredState = function () { this.hiddenUserIdSetObject = {}, this.overrideUserIdSetObject = {}, this.transparentUserIdSetObject = {} }, vC.prototype.getFilteredUserIds = function () { return this.mapMaterialIdToUserIdsForFilter }, vC.prototype.getSelectedUserIds = function () { return this.mapMaterialIdToUserIdsForSelection }, vC.prototype.getHoveredUserIds = function () { return this.mapMaterialIdToUserIdsForHover }, vC.prototype.getBlinkedUserIds = function () { return this.mapBlinkUserIds }, vC.prototype.getHiddenUserIds = function () { return this.hiddenUserIdSetObject }, vC.prototype._collectSelectedUserIds = function (A, e) { for (var t in this.selectedUserIdSetObject = {}, A) if (A.hasOwnProperty(t)) { if (!e[t]) continue; this.selectedUserIdSetObject[t] = !0 } }, vC.prototype._clearSelectedState = function () { this.selectedUserIdSetObject = {} }, vC.prototype._collectHoveredUserIds = function (A, e) { if (this.hoveredUserIdSetObject = {}, A && e[A]) { var t = e[A]; this.hoveredUserIdSetObject = {}, t && (this.hoveredUserIdSetObject[A] = !0) } }, vC.prototype._clearHoveredState = function () { this.hoveredUserIdSetObject = {} }, vC.prototype.getMeshesByUserIds = function (A, e) { return this.meshManager.getMeshesByUserIds(A, e) }, vC.prototype.adjustVisibility = function (A, e) { this.meshManager.adjustVisibility(A, e), this.wireframeManager.adjustVisibility(A, e) }, vC.prototype.changeVisibilityOfSelectedObjects = function (A, e) { this.meshManager.changeVisibilityOfSelectedObjects(A, e), this.wireframeManager.changeVisibilityOfSelectedObjects(A, e) }, vC.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { this.meshManager.changeVisibilityOfNonSelectedObjects(A, e), this.wireframeManager.changeVisibilityOfNonSelectedObjects(A, e) }, vC.prototype.restoreVisibilityOfObjects = function () { this.meshManager.restoreVisibilityOfObjects(), this.wireframeManager.restoreVisibilityOfObjects() }, vC.prototype.isPickableNode = function (A) { var e = this.getHiddenUserIds(); if (e && e[A]) return !1; var t = this.getTransparentUserIds(); return !t || !t[A] }, vC.prototype.isHiddenNode = function (A) { var e = this.getHiddenUserIds(); return !(!e || !e[A]) }, vC.prototype.getMeshManager = function () { return this.meshManager }, vC.prototype.getWireFrameManager = function () { return this.wireframeManager }, vC.prototype.getTransparentUserIds = function () { return this.transparentUserIdSetObject }; var IC = function (A) { return hC.call(this, A), this.tag = "layer", this.defaultManager = new vC, this.instancedManager = new Hf, this.loader = new gC(this), this }; (IC.prototype = Object.assign(IC.prototype, hC.prototype)).destroy = function () { this.defaultManager.destroy(), this.defaultManager = null, this.instancedManager.destroy(), this.instancedManager = null }, IC.prototype.prepareData = function (A) {}, IC.prototype.prepare = function (A) { this.isAllReady() && (this.model.getMaterialManager()._updateTextureMapping(), this.model.clearMeshFromOctantMap()) }, IC.prototype.updateNodes = function () {}, IC.prototype.addNodeInfoToOctantMap = function () {}, IC.prototype.dealMeshNodes = function (A) { A && A() }, IC.prototype.disposeBufferAfterVbo = function () {}, IC.prototype.dealMeshNodes = function (A) { this.model.getModelDescriptor().getInstancedUserIdsByCategory(this._loadedUserIds); var e = this.model, t = this; this.defaultManager.asyncCreateMeshNodes(e, e.getModelDescriptor().getStandardUserIds(), (function () { t.updateNodes(), A && A() })) }, IC.prototype.unloadComponents = function (A, e) { for (var t = this.model.modelKey, i = 0, o = A.length; o > i; i += 1) { var n = this.model.getModelDescriptor().getNodeInfosByComponentKey(A[i]); if (n) { for (var r = 0, a = n.length; a > r; r += 1) { var s = n[r]; if (s.mesh) this.defaultManager.meshManager.disposeGeometry(s.mesh.geometry.key), s.mesh.destroy() } this.model.manager.removeMeshFromOctantMap(t, A[i]) } } this.model.getModelDescriptor().clearNodeInfoCacheByComponentsKey(A), e && e() }; var EC = function (A) { Af.call(this, A), this.instancedComponent = {} }; Object.assign(EC.prototype, Af.prototype), EC.prototype.parseItemData = function (A) { this._readMaterialBuffer(this.model), this._parseGeo(), vc.Instance && this._parseInstanced(); var e = {}, t = this.referencedMeshCache; for (var i in Bh.time("_readItemData"), t.components) t.components.hasOwnProperty(i) && this._readItemData(e, i, i, void 0, 0); Bh.timeEnd("_readItemData"), e = null, A && A() }, EC.prototype._readItemData = function (A, e, t) { var i = this.referencedMeshCache.components[e]; void 0 !== i && this._readMeshInfo(A, t, i, null) }, EC.prototype._readMeshInfo = function (A, e, t, i) { var o = this.referencedMeshCache, n = this.model.materialManager.materials, r = null, a = null, s = this.model.subModel[t.subModel]; if (t.nodes || t.nodeIds) { a = t.originalId; var l = (new M).fromArray(t.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); t.matrix = l; var c = []; c = t.nodes ? t.nodes : t.nodeIds; for (var h = 0; c.length > h; h += 1) { var d = c[h]; if ("object" !== lc(d) && (d = this.getReferencedMeshComponentNodeById(d)), d) { var p, g = null, u = ""; if (-1 !== d.geoId) if ((g = this._getMeshNodeAttr(d, t, h)).boundingBox.applyMatrix4(s), g) { if (t.buildInCategory && (g.buildInCategory = t.buildInCategory), !n[u = d.material]) { var f = _u[t.type] ? _u[t.type].color : void 0; f || (Bh.log("Material not found for type: ", t.type), f = _u.DEFAULT.color), f || (Bh.log("Default material not found for type: ", t.type), f = [1, 1, 1, 1]); var m = new LA(f[0], f[1], f[2]), C = u || m.getHexString() + "_" + f[3], y = n[C]; y || (Bh.warn("缺少材质 " + u), y = Kd.createStandardMaterial({ color: m }), 1 > f[3] && (y.transparent = !0, y.opacity = f[3]), y.side = 2, n[C] = y), g.material = u = C } if (n[u].aoMap) { var v = this.getReferencedMeshBufferById(g.geometryId); v && (v.uv2 = v.uv) } p = g.nodeId; var I = (R = this.userDataReader) ? R.getUserData(r) : null; g.type = t.type, g.userId = e, g.name = t.name, g.userDataId = r, g.originalId = a, g.materialId = u, g.originMId = u, g.userData = I, g.categoryId = 0, g.componentKey = e, g.familyName = t.familyName, g.familySymbol = t.familySymbol; var E = vc.Instance, B = o.reuseNodes.hasOwnProperty(p); g.instanceOrNot = !(!E || !B), g.isBatched = !0, g.state = Lc.Visible, g.material = null, this._classifyNodeInfo(g), g = null } else Bh.debug("非法node") } } } else { var x = t, S = ""; if (null === i ? (r = x.userDataId, a = x.originalId, S = x.materialId || x.matId) : (r = i.userDataId, a = i.originalId, S = i.materialId > -1 ? i.materialId : x.materialId), x.materials || (x.materials = []), x.materials.length > 0) for (h = 0; x.materials.length > h; h += 1) { var w = null; if (w = this._getOldMeshNodeAttr(A, x, x.materials.length > 1, h)) { if (x.buildInCategory && (w.buildInCategory = x.buildInCategory), w.boundingBox.applyMatrix4(s), !n[S = x.materials[h]]) { var b = _u[x.type] ? _u[x.type].color : void 0; b || (Bh.log("Material not found for type: ", x.type), b = _u.DEFAULT.color), b || (Bh.log("Default material not found for type: ", x.type), b = [1, 1, 1, 1]); var U = new LA(b[0], b[1], b[2]), F = S || U.getHexString() + "_" + b[3], K = n[F]; K || (Bh.warn("缺少材质 " + S), K = Kd.createStandardMaterial({ color: U }), 1 > b[3] && (K.transparent = !0, K.opacity = b[3]), K.side = 2, n[F] = K) } if (n[S].aoMap) { var Q = this.getReferencedMeshBufferById(w.geometryId); Q && (Q.uv2 = Q.uv) } if (!w) return; var R; I = (R = this.userDataReader) ? R.getUserData(r) : null; w.type = x.type, w.userId = x.key, w.name = x.name, w.userDataId = r, w.originalId = a, w.materialId = S, w.originMId = S, w.userData = I, w.categoryId = 0, w.componentKey = x.key, w.familyName = x.familyName, w.familySymbol = x.familySymbol, vc.Instance && this.instancedComponent[x.key] ? w.instanceOrNot = !0 : (w.instanceOrNot = !1, this.instancedGeo[w.originalGeometryId].length > 1 && (w.originalGeometryId = "")), w.state = Lc.Visible, w.material = null, w.isBatched = !0, this._classifyNodeInfo(w), w = null } else Bh.debug("非法node") } else { var T = null, k = _u[x.type] ? _u[x.type].color : void 0; k || (Bh.log("Material not found for type: ", x.type), k = _u.DEFAULT.color), k || (Bh.log("Default material not found for type: ", x.type), k = [1, 1, 1, 1]); var D = new LA(k[0], k[1], k[2]), L = D.getHexString() + "_" + k[3], N = n[L]; if (N || (N = Kd.createStandardMaterial({ color: D }), 1 > k[3] && (N.transparent = !0, N.opacity = k[3]), N.side = 2, n[L] = N), x.materials.push(L), (T = this._getOldMeshNodeAttr(A, x, !1, 0)).boundingBox.applyMatrix4(s), S = x.materials[0], !T) return; e = x.key; T.type = x.type, T.userId = e, T.name = x.name, T.originalId = a, T.materialId = S, T.originMId = S, T.userData = {}, T.categoryId = 0, T.componentKey = e, T.familyName = x.familyName, T.familySymbol = x.familySymbol, T.instanceOrNot = !(!vc.Instance || !this.instancedComponent[e]), T.isBatched = !0, T.state = Lc.Visible, T.material = null, this._classifyNodeInfo(T), T = null } } }, EC.prototype._getMeshNodeAttr = function (A, e, t) { var i = new M; i.fromArray(A.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), vc.DataReduction && i.scale(new y(1e3, 1e3, 1e3)), e && i.multiplyMatrices(e.matrix, i), A.geoId = e.subModel + A.geoId; var o = A.nodeId, n = A.geoId; if (-1 !== n) { var r = A.maxBoundary || e.maxBoundary, a = A.minBoundary || e.minBoundary, s = new ph; return s.set(a, r), { nodeId: o, guid: A.guid, geometryId: n, originalGeometryId: A.geoId, matrix: i, boundingBox: s, model: this.model } } }, EC.prototype._getOldMeshNodeAttr = function (A, e, t, i) { var o = new M; o.fromArray(e.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), vc.DataReduction && o.scale(new y(1e3, 1e3, 1e3)); var n = t ? e.key + "_" + i : e.key, r = t ? e.geoId + "_" + i : e.geoId; if (-1 !== r) { var a = new ph, s = this.getReferencedMeshBufferById(e.geoId); return s && s.position ? (a = Tu.getBoundingBoxByBuffer(s.position)).applyMatrix4(o) : Bh.warn("no position "), { nodeId: n, guid: e.guid, geometryId: r, originalGeometryId: e.geoId, matrix: o, boundingBox: a, model: this.model } } }; var BC = function (A) { Xu.call(this, A), this.maxGeoLoadTaskCount = 0, this.geoLoadTaskCount = 0, this.taskInstancedGeometrieManager = new Ou(this, "geometrie"), this.descriptor = new EC(A.model) }; (BC.prototype = Object.assign(BC.prototype, Xu.prototype)).loadData = function () { for (var A = this, e = this, t = this.model, i = t.getConfig(), o = !1, n = 0, r = 0, a = 0, s = 0, l = [], c = [], h = [], d = [], p = [], g = [], u = [], f = [], m = [], C = function (C, y) { var v = i.children[C]; if (E = i.animation, !(I = i.scene[C]) || !I.components || !I.geometries && (!I.batchedGeometries && !I.instancedGeometries || 1 > I.batchedGeometries.length && 1 > I.instancedGeometries.length) || !I.materials || !I.textures) return Bh.error("scene is null,modelKey is ", t.modelKey), t.dispatchEventEx({ type: Rc.ON_LOAD_EMPTY_SCENE, modelKey: t.modelKey }), "continue"; if (o = !0, n += I.components.length || 0, I.components.forEach((function (A) { e.fileKeyFromModelKey[A] = v })), r += I.materials.length || 0, a += I.textures.length || 0, s += I.reuseNodes && I.reuseNodes.length || 0, u = u.concat(I.textures), A.map = A.map || [], 2 > Number(I.geo)) return Bh.error("不支持1.0版本的几何结构和其他版本混合加载。"), { v: void 0 }; if (l = l.concat(I.components), h = h.concat(I.materials), m = m.concat(I.reuseNodes || []), Array.isArray(I.nodes) && (c = c.concat(I.nodes)), u = u.concat(I.textures), I.map && A.map.push(I.map), I.trees.length > 0) for (B = 0; I.trees.length > B; B += 1) "partition" === (x = I.trees[B]).type && (f.push(x.fileKey), e.fileKeyFromModelKey[x.fileKey] = v); I.lights && I.lights.length > 0 && (g = g.concat(I.lights)), E && (E.bones.length, E.bones, d.push(E.clips), p.push(E.nodes)) }, y = 0, v = i.scene.length; v > y; y += 1) { var I, E, B, x, S = C(y); switch (S) { case "continue": continue; default: if ("object" === lc(S)) return S.v } } if (t.setEmptyScene(!o), e.maxLoadTaskCount = 0, e.maxLoadTaskCount += n, e.maxLoadTaskCount += r, e.maxLoadTaskCount += f.length, e.maxLoadTaskCount += s, e.maxLoadTaskCount += c.length, e.maxLoadTaskCount += g.length, 1 > e.maxLoadTaskCount) return Bh.info("Nothing to load ", t.modelKey), void t.dispatchEventEx({ type: Tc.SCENE_NOTHING_TO_LOAD, modelKey: t.modelKey }); e.progress.total += e.maxLoadTaskCount, e.startCallback && e.startCallback(), Bh.time("数据加载时间"), e._loadComponent(l), e._loadMaterial(h), e._loadComponentNode(c), e._loadReuseNode(m), vc.EnableTextureLoading && a > 0 ? (e.maxLoadTextureCount += a, e._loadTextures(u)) : e._onLoadTexture(), e._loadKDTree(f), g.length > 0 && e._loadLights(g), e.offLine && e.loadAttribute(), e.loadFloorInfo(e.model.modelKey), e.loadSceneAndGeos(i) }, BC.prototype.loadReuseNode = function (A, e) { var t = this, i = this.jsonLoader, o = this.model, n = this.url; i.setResponseType("json"), vc.useGzip && i.setResponseType("arraybuffer"), i.setCacheViable(!0); i.load(n.mpkUrl(A), (function (A) { t._parseReuseNodes(A), Bh.debug("component load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { o.dispatchEventEx({ type: Tc.LOAD_COMPONENT_ERROR, modelKey: o.modelKey }) })) }, BC.prototype._parseComponent = function (A, e) { var t = this.fileKeyFromModelKey[e] || ""; if (A) { var i = this.descriptor; if (i) for (var o in vc.useGzip && (A = JSON.parse(uh.ab2str(pako.ungzip(A)))), A) if (A.hasOwnProperty(o)) { var n = A[o]; - 1 !== n.geoId && (n.geoId = t + n.geoId, n.subModel = t), i.cacheReferencedMeshComponentData(A[o].key, A[o]) } } else Bh.error("没有数据") }, BC.prototype._parseMaterial = function (A, e) { if (A) { if (A instanceof ArrayBuffer) try { A = JSON.parse(uh.ab2str(A)) } catch (A) { Bh.error("处理材质出错") } var t = this.descriptor; if (t) for (var i in A) t.cacheReferencedMeshMaterialData(i, A[i]) } else Bh.error("没有数据") }, BC.prototype.loadBatchedGeometrie = function (A, e) { var t = this, i = this.loader, o = this.url, n = this.model; i.setResponseType("arraybuffer"), i.setCacheViable(!this.offLine); var r = i.load(o.mpkUrl(A), (function (i) { t._parseBatchedGeometrie(i, A), Bh.debug("geo load from online"), t._onGeoTaskFinished(), e() }), void 0, (function (A) { n.dispatchEventEx({ type: Tc.LOAD_GEOMETRY_ERROR, modelKey: n.modelKey }), e(), t._onGeoTaskFinished() })); t.requests.loadGeometrie = r }, BC.prototype.loadInstancedGeometrie = function (A, e) { var t = this, i = this.loader, o = this.url, n = this.model; i.setResponseType("arraybuffer"), i.setCacheViable(!this.offLine); var r = i.load(o.mpkUrl(A), (function (i) { t._parseInstancedGeometrie(i, A), Bh.debug("geo load from online"), t._onGeoTaskFinished(), e() }), void 0, (function (A) { n.dispatchEventEx({ type: Tc.LOAD_GEOMETRY_ERROR, modelKey: n.modelKey }), e(), t._onGeoTaskFinished() })); t.requests.loadGeometrie = r }, BC.prototype._parseBatchedGeometrie = function (A, e) { var t = this.fileKeyFromModelKey[e] || "", i = new ku.BatchedGeometryReader(A, this.dataVersion), o = this.descriptor; if (o) { for (var n = i.geoCount, r = 0; n > r; r += 1) { var a = i.geomMap[r]; void 0 !== a.position && void 0 !== a.index && void 0 !== a.normal ? (a.geoId = t + a.geoId, o.cacheReferencedMeshBufferData(a.geoId, a), this.handler.createBatchedMeshNodes(a)) : Bh.error("Error Geometry!") } this.model.manager.viewerImpl.render(), i = null } }, BC.prototype._parseInstancedGeometrie = function (A, e) { var t = this.fileKeyFromModelKey[e] || "", i = new ku.InstancedGeometryReader(A, this.dataVersion), o = this.descriptor; if (o) { for (var n = i.geoCount, r = 0; n > r; r += 1) { var a = i.geomMap[r]; void 0 !== a.position && void 0 !== a.index && void 0 !== a.normal ? (a.geoId = t + a.geoId, o.cacheReferencedMeshBufferData(a.geoId, a), this.handler.createInstancedMeshNodes(a)) : Bh.error("Error Geometry!") } this.model.manager.viewerImpl.render(), i = null } }, BC.prototype._parseReuseNodes = function (A, e) { if (A) { vc.useGzip && (A = JSON.parse(uh.ab2str(pako.ungzip(A)))); var t = this.descriptor; if (t) if (t.referencedMeshCache.reuseNodes) for (var i in A) t.referencedMeshCache.reuseNodes[i] = A[i]; else t.referencedMeshCache.reuseNodes = A } else Bh.error("没有数据") }, BC.prototype.startLoadSceneAndGeos = function (A) { Bh.time("几何数据加载时间"); for (var e = A.scene, t = this, i = 0, o = 0, n = [], r = [], a = function (a, s) { var l = e[a], c = A.children[a]; (l.batchedGeometries && l.batchedGeometries.length > 0 || l.instancedGeometries && l.instancedGeometries.length > 0) && (i += l.batchedGeometries.length || 0, o += l.instancedGeometries.length || 0, n = n.concat(l.batchedGeometries), r = r.concat(l.instancedGeometries), l.batchedGeometries.forEach((function (A) { t.fileKeyFromModelKey[A] = c })), l.instancedGeometries.forEach((function (A) { t.fileKeyFromModelKey[A] = c }))) }, s = 0, l = e.length; l > s; s += 1) a(s); t.maxGeoLoadTaskCount += i, t.maxGeoLoadTaskCount += o, t.maxGeoLoadTaskCount > 0 || t._onGeoTaskFinished(), this._loadBatchedGeo(n), this._loadInstancedGeo(r) }, BC.prototype.loadSceneAndGeos = function (A) { for (var e = A.scene, t = this, i = 0, o = [], n = function (n, r) { var a = e[n], s = A.children[n]; a.geometries && a.geometries.length > 0 && !(a.batchedGeometries && a.batchedGeometries.length > 0 || a.instancedGeometries && a.instancedGeometries.length > 0) && (i += a.geometries.length || 0, o = o.concat(a.geometries), a.geometries.forEach((function (A) { t.fileKeyFromModelKey[A] = s }))) }, r = 0, a = e.length; a > r; r += 1) n(r); t.maxLoadTaskCount += i, this._loadGeo(o) }, BC.prototype._loadBatchedGeo = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.mpkUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = function (t) { if (A[i[t]]) if (!0 === A[i[t]].split) { var o = A[i[t]].list, s = new Uint8Array(A[i[t]].length); n.getBatch(o, (function (A) { for (var n = !0, r = 0; o.length > r; r += 1) A[o[r]] ? s.set(new Uint8Array(A[o[r]]), 4e7 * r) : (n = !1, Bh.error("获取分割几何失败")); if (n) { var a = i[t].indexOf("fileKey="); e._parseBatchedGeometrie(s.buffer, i[t].slice(a + 8)), e._onGeoTaskFinished(), Bh.debug("load geo from local") } else { var l = e.taskGeometrieManager, c = i[t].indexOf("fileKey="); if (-1 === c) return void Bh.error("url is not has fileKey"); l.addTask(i[t].slice(c + 8)), Bh.debug("load geo from net"), e.taskGeometrieManager.processTasks(e.loadBatchedGeometrie.bind(e)) } }), (function () { Bh.error("获取分割几何失败") })) } else a = i[t].indexOf("fileKey="), e._parseBatchedGeometrie(A[i[t]], i[t].slice(a + 8)), e._onGeoTaskFinished(), Bh.debug("load geo from local"); else { if (r = e.taskGeometrieManager, -1 === (a = i[t].indexOf("fileKey="))) return Bh.error("url is not has fileKey"), { v: void 0 }; r.addTask(i[t].slice(a + 8)), Bh.debug("load geo from net") } }, o = 0; i.length > o; o += 1) { var r, a, s = t(o); if ("object" === lc(s)) return s.v } e.taskGeometrieManager.processTasks(e.loadBatchedGeometrie.bind(e)) }), (function () { for (var t = e.taskGeometrieManager, i = 0; A.length > i; i += 1) t.addTask(A[i]); t.processTasks(e.loadBatchedGeometrie.bind(e)) })) } else { for (var r = this.taskGeometrieManager, a = 0; A.length > a; a += 1) r.addTask(A[a]); r.processTasks(e.loadBatchedGeometrie.bind(e)) } }, BC.prototype._loadInstancedGeo = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.mpkUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = function (t) { if (A[i[t]]) if (!0 === A[i[t]].split) { var o = A[i[t]].list, s = new Uint8Array(A[i[t]].length); n.getBatch(o, (function (A) { for (var n = 0; o.length > n; n += 1) A[o[n]] ? s.set(new Uint8Array(A[o[n]]), 4e7 * n) : Bh.error("获取分割几何失败"); var r = i[t].indexOf("fileKey="); e._parseInstancedGeometrie(s.buffer, i[t].slice(r + 8)), e._onGeoTaskFinished(), Bh.debug("load geo from local") }), (function () { Bh.error("获取分割几何失败") })) } else a = i[t].indexOf("fileKey="), e._parseInstancedGeometrie(A[i[t]], i[t].slice(a + 8)), e._onGeoTaskFinished(), Bh.debug("load geo from local"); else { if (r = e.taskInstancedGeometrieManager, -1 === (a = i[t].indexOf("fileKey="))) return Bh.error("url is not has fileKey"), { v: void 0 }; r.addTask(i[t].slice(a + 8)), Bh.debug("load geo from net") } }, o = 0; i.length > o; o += 1) { var r, a, s = t(o); if ("object" === lc(s)) return s.v } e.taskInstancedGeometrieManager.processTasks(e.loadInstancedGeometrie.bind(e)) }), (function () { for (var t = e.taskInstancedGeometrieManager, i = 0; A.length > i; i += 1) t.addTask(A[i]); t.processTasks(e.loadInstancedGeometrie.bind(e)) })) } else { for (var r = this.taskInstancedGeometrieManager, a = 0; A.length > a; a += 1) r.addTask(A[a]); r.processTasks(e.loadInstancedGeometrie.bind(e)) } }, BC.prototype._onGeoTaskFinished = function () { (this.geoLoadTaskCount += 1, this.notifyProgress) && (this.progressCallback && this.progressCallback({ total: this.maxLoadTaskCount + this.maxGeoLoadTaskCount, loaded: .8 * (this.loadTaskCount + this.geoLoadTaskCount), modelKey: this.model.modelKey })); this.maxGeoLoadTaskCount > this.geoLoadTaskCount || (this.dataLoaded = !0, Bh.timeEnd("几何数据加载时间"), this.geoFinishCallback && this.geoFinishCallback()) }, BC.prototype.getSceneTaskCount = function (A) { var e = A.scenes; return e += A.lines, e += A.mpks, vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), e }, BC.prototype._parseKDTree = function (A, e) { var t = {}; t = "string" == typeof A ? JSON.parse(A) : A, this.model.kdTreeNode = this.model.kdTreeNode || []; var i = this.fileKeyFromModelKey[e] || ""; if (t) { var o = new Zu; o.modelKey = i, o.init(t), this.model.kdTreeNode.push(o) } }; var xC = function (A, e) { tf.call(this, A), this.defaultManager = new Of(e, A), this.instancedManager = new Hf(A), this.loader = new BC(this) }; (xC.prototype = Object.create(tf.prototype)).prepare = function (A, e) { if (this.isLoaded() && !this.isHidden()) { this.prepareWireframe(this.model, e); this.model.getMaterialManager(); this.model.getMaterialManager()._updateTextureMapping(), !this.model.lightmap || this.model.enableLightmap === vc.EnableLightmap && this.model.lightmapIntensity === vc.LightmapIntensity || (this.model.enableLightmap = vc.EnableLightmap, this.model.lightmapIntensity = vc.LightmapIntensity, this.rebuildIndicesforLightmap(), this.updateNodes()) } }, xC.prototype.settleData = function (A) { var e = this; this.addNodeInfoToOctantMap(); var t = !1, i = !1; this.createMeshNodes((function () { t = !0, i && (e.loaded = !0, e.model.getMaterialManager()._updateTextureMapping(), e.clearCachedData(e.model), A && A()) })), e.model.setLoaded(!0); this.loader.geoFinishCallback = function () { i = !0, t && (e.loaded = !0, e.model.getMaterialManager()._updateTextureMapping(), e.clearCachedData(e.model), A && A()) }, this.loader.startLoadSceneAndGeos(this.model.getConfig()) }, xC.prototype.addNodeInfoToOctantMap = function () { var A = this.model.manager, e = this.model.getEncodedDatabagId(); this.loader.getDescriptor().traverseNodeInfosByComponent((function (t, i) { A.addNodeInfoToOctantMap(e, t, i) })) }, xC.prototype.createMeshNodes = function (A) { var e = this, t = this.model; vc.stepLoad && t.setLoaded(!0); var i = this.loader.getDescriptor(); this.instancedManager.createMeshNodes(t, i.getInstancedUserIds()), this.defaultManager.asyncCreateMeshNodes(t, i.getStandardUserIds(), (function () { t.getMaterialManager()._updateTextureMapping(), e.loaded = !0, A && A() })) }, xC.prototype.clearCachedData = function (A) { this.loader.getDescriptor().destroyReader(), this.loader.getDescriptor().clearReferencedMeshCache(), this.defaultManager.clearCachedData(), this.instancedManager.clearCachedData() }, xC.prototype.createBatchedMeshNodes = function (A) { this.defaultManager.createBatchedMeshNodes(this.model, A) }, xC.prototype.createInstancedMeshNodes = function (A) { this.instancedManager.createInstancedMeshNodes(this.model, A) }; var SC = function (A) { $u.call(this, A) }; Object.assign(SC.prototype, $u.prototype); var wC = function (A) { Xu.call(this, A), this.descriptor = new SC(A.model) }; (wC.prototype = Object.assign(wC.prototype, Xu.prototype)).loadSceneAndGeos = function (A) { var e = A.scene, t = this.model, i = e.geometries.length || 0, o = []; if (this.map = {}, ap(this.dataVersion, "2.0.0")) for (var n = 0; i > n; n += 1) e.geometries[n].fileKey ? o.push(e.geometries[n].fileKey) : t.dispatchEventEx({ type: Tc.SCENE_NOT_CLOSE, modelKey: t.modelKey }); else o = e.geometries; this.maxLoadTaskCount += i, this._loadGeo(o) }, wC.prototype.getSceneTaskCount = function (A) { var e = A.scenes; return e += A.lines, e += A.mpks, vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), e }; var MC = function (A, e) { tf.call(this, A), this.defaultManager = new vC(e, A), this.instancedManager = new Hf(A), this.loader = new wC(this) }; Object.assign(MC.prototype, tf.prototype), MC.prototype.prepare = function (A) { this.isLoaded() && !this.isHidden() && (this.model.getMaterialManager()._updateTextureMapping(), this.model.clearMeshFromOctantMap(), this.instancedManager.addAllInstanceNodeToScene(this.model), this.defaultManager.cullNodes(this.model, A), this.prepareWireframe(this.model), this.updateNodes()) }, MC.prototype.prepareWireframe = function (A, e) { A.isActivateWireframe() && this.instancedManager.generateWireframe(A) }, MC.prototype.settleData = function (A) { this.addNodeInfoToOctantMap(), this.createMeshNodes(A) }, MC.prototype.addNodeInfoToOctantMap = function () { var A = this.model.manager, e = this.model.getEncodedDatabagId(); this.model.getModelDescriptor().traverseNodeInfosByComponent((function (t, i) { A.addNodeInfoToOctantMap(e, t, i) })) }, MC.prototype.createMeshNodes = function (A) { var e = this.model, t = this; this.instancedManager.createMeshNodes(this.model, this.model.getModelDescriptor().getInstancedUserIds()), this.defaultManager.asyncCreateMeshNodes(e, e.getModelDescriptor().getStandardUserIds(), (function () { e.getMaterialManager()._updateTextureMapping(), t.updateNodes(), e.getModelDescriptor().clearReferencedMeshCache(), t.loaded = !0, A && A() })) }, MC.prototype.disposeBufferAfterVbo = function () {}, MC.prototype.explosion = function (A) { if (this.isLoaded()) { var e = this.model.getComponentlist(); A.componentKey = e, this.componentsExplosion(A) } }, MC.prototype.closeExplosion = function () { this.explosion({}) }, MC.prototype.componentsExplosion = function (A) { if (this.isLoaded()) { var e = A.coefficientX || 1, t = A.coefficientY || 1, i = A.coefficientZ || 1, o = A.offsetX || 0, n = A.offsetY || 0, r = A.offsetZ || 0, a = null; if (A.center) a = (new y).fromArray(A.center); else if (1 !== e || 1 !== t || 1 !== i || 0 !== o || 0 !== n || 0 !== r) return; var s = this.model, l = s.manager, c = Array.isArray(A.componentKey) ? A.componentKey : [A.componentKey], h = new y, d = new aA, p = new y(0, 0, 0), g = new y(0, 0, 0), u = new y, f = s.getModelMatrix(), m = new M; f && a && (m.getInverse(f), a.applyMatrix4(m)); for (var C = 0; c.length > C; C += 1) { var v = c[C], I = s.getComponentInfo(v); if (I && I.length > 0) for (var E = 0, B = I.length; B > E; E += 1) { var x = I[E], S = x.mesh; if (S) { if (d.copy(x.boundingBox), d.getCenter(h), x.userData || (x.userData = {}), p.set(0, 0, 0), g.set(0, 0, 0), 1 !== e || 1 !== t || 1 !== i || x.userData.explosionFactor) { x.userData.explosionFactor || (x.userData.explosionFactor = new y(1, 1, 1), x.userData.explosionBaseDifference = h.sub(a).clone()); var w = x.userData.explosionFactor, b = x.userData.explosionBaseDifference; p.set((e - w.x) * b.x, (t - w.y) * b.y, (i - w.z) * b.z), 1 === e && 1 === t && 1 === i ? (x.userData.explosionFactor = void 0, x.userData.explosionBaseDifference = void 0) : w.set(e, t, i) } if (0 !== o || 0 !== n || 0 !== r || x.userData.explosionOffset) { x.userData.explosionOffset || (x.userData.explosionOffset = new y(0, 0, 0)); var U = x.userData.explosionOffset; g.set(o - U.x, n - U.y, r - U.z), 0 === o && 0 === n && 0 === r ? x.userData.explosionOffset = void 0 : U.set(o, n, r) } if (u.set(p.x + g.x, p.y + g.y, p.z + g.z), 0 !== u.x || 0 !== u.y || 0 !== u.z) { x.userData.explosionFactor || x.userData.explosionOffset ? l.explosionList[v] || (l.explosionList[v] = !0) : delete l.explosionList[v], m.makeTranslation(u.x, u.y, u.z), x.transformation || (x.transformation = !0, x.transformationOriginalMatrix = x.matrix.clone(), x.applyMatrix = new M, x.transformationOriginalBoundingBox = x.boundingBox.clone()), x.matrix.premultiply(m), x.applyMatrix.premultiply(m), x.boundingBox.copy(x.transformationOriginalBoundingBox).applyMatrix4(x.applyMatrix); var F = S.matrixAutoUpdate; S.matrixAutoUpdate = !1, S.applyMatrix4(m), S.updateMatrixWorld(!0), S.matrixAutoUpdate = F; var K = x.wireframeMeshs; if (K) for (var Q = 0, R = K.length; R > Q; Q += 1) { var T = K[Q]; F = T.matrixAutoUpdate, T.matrixAutoUpdate = !1, T.matrix.copy(S.matrix), T.updateMatrixWorld(!0), T.matrixAutoUpdate = F } } } } } } }, MC.prototype.closeComponentsExplosion = function (A) { var e = Array.isArray(A) ? A : [A]; this.componentsExplosion({ componentKey: e }) }; var bC = function (A) { this.model = A, this.config = null, this.statistics = { renderableCount: 0, renderableTotal: vc.maxObjectNumInPool, renderableTotalForPool: vc.maxObjectNumInPool, numOfElements: 0, numOfTriangles: 0, memoeryInfo: null }, this.transformInfos = { octreeTransformed: !0, originalBoundingBox: null, boundingBox: null, position: new y, rotation: new f, scale: new y(1, 1, 1), transformMatrix: new M, originalMatrix: new M } }; bC.prototype.destroy = function () { this.model = null, this.config = null, this.statistics = null, this.transformInfos = null }, bC.prototype.load = function (A) { var e = this, t = this.model, i = t.dataUrl, o = function (o) { var n = {}; if ("string" == typeof o) try { n = JSON.parse(o) } catch (A) { return t.setEmptyScene(!0), void t.dispatchEventEx({ type: Rc.ON_LOAD_INVALID_SCENE, modelKey: t.modelKey }) } else n = o; if (n && "SUCCESS" === n.code) { if (vc.offLine) e.model.getStorage().put(i.projectUrl(), n, e.model.modelKey, (function () {}), (function () {})); if (-1 === Number(n.data.status)) return void t.dispatchEventEx({ type: Tc.PARSEFAILE, modelKey: t.modelKey }); if (3 > Number(n.data.status)) return void t.dispatchEventEx({ type: Tc.PARSING, modelKey: t.modelKey }); if (n.data.type === Zc.DWG) return t.dispatchEventEx({ type: Tc.IS2D, modelKey: t.modelKey }), void Bh.error("模型 ", t.modelKey, " 是图纸文件,请使用EIMDRAWINGS库加载"); !n.data.profiles || n.data.children && n.data.children.length > 1 ? (e.dataVersion = "2.0.0", i.apiVersion = "2.0.0", e.model.dataVersion = e.dataVersion) : (e.dataVersion = n.data.profiles.geo || "1.0.0", i.apiVersion = n.data.profiles.api, e.model.dataVersion = e.dataVersion), e._parse(n.data), t.dispatchEventEx({ type: Rc.ON_LOAD_CONFIG_FINISH, modelKey: t.modelKey }), A && A() } else Bh.log(t.modelKey, "config load error! ", n.message), t.dispatchEventEx({ type: Rc.ON_LOAD_ERROR, modelKey: t.modelKey, code: n.code, message: n.message }), t.manager.unload(t.modelKey) }; if (vc.offLine) { var n = this.model.getStorage(); n && n.getBatch([i.projectUrl()], (function (A) { A[i.projectUrl()] ? o(A[i.projectUrl()]) : _d({ type: "GET", url: i.projectUrl(), headers: { Authorization: t.accessToken }, success: o, error: function (A) { t.dispatchEventEx({ type: Rc.ON_NETWORK_ERROR, modelKey: t.modelKey, data: A }) } }) }), (function () {})) } else _d({ type: "GET", url: i.projectUrl(), headers: { Authorization: t.accessToken }, success: o, error: function (A, e) { switch (A) { case 401: t.dispatchEventEx({ type: Rc.ACCOUNT_NO_EXIST, modelKey: t.modelKey, data: e }); break; case 403: t.dispatchEventEx({ type: Rc.NO_PERMISSION, modelKey: t.modelKey, data: e }); break; default: t.dispatchEventEx({ type: Rc.ON_NETWORK_ERROR, modelKey: t.modelKey, data: A }) } } }) }, bC.prototype._parse = function (A) { this.config = A, A.lengthUnit && (this.model.originalLengthUnit = A.lengthUnit), vc.AutoMergeComponent && A.componentCount > vc.AutoMergeComponentCount && (vc.MergeComponent = !0), this._toStatistics(A), this._setTransformInfos(A), this._chooseRendering(A), this._setHandler(A) }, bC.prototype._getDataProvider = function (A) { if (vc.DataProvider === Wc.MERGED && void 0 !== A.bmpks && A.bmpks > 0) return Bh.debug("data from: merged"), Wc.MERGED; if (vc.LoadComponentOnDemand && A.scene && A.scene.map) { if (vc.DataProvider === Wc.LAYER_SCENE) return A.layers > 1 ? (Bh.debug("data from: layer scene"), Wc.LAYER_SCENE) : (Bh.debug("data from: layer"), Wc.LAYER); if (vc.DataProvider === Wc.LAYER) return Bh.debug("data from: layer"), Wc.LAYER } if (vc.DataProvider === Wc.AUTO) { if (vc.LoadComponentOnDemand && A.scene && A.scene.map) return np(this.dataVersion, "2.0.0") && (vc.MergeComponent = !0), Bh.debug("data from: layer"), Wc.LAYER; if (!vc.loadBatch && A.scene.geometries && A.scene.geometries.length > 0) return rp(this.dataVersion, "2.0.0") && (vc.MergeComponent = !0), Wc.DEFAULT; if (A.scene.batchedGeometries && A.scene.batchedGeometries.length > 0 || A.scene.instancedGeometries && A.scene.instancedGeometries.length > 0) return vc.MergeComponent = !0, Wc.MERGED; if (vc.MergeComponent && void 0 !== A.bmpks && A.bmpks > 0) return Bh.debug("data from: merged"), Wc.MERGED } return Bh.debug("data from: default"), Wc.DEFAULT }, bC.prototype._chooseRendering = function (A) { this.model.manager.chooseRendering(this.statistics.memoeryInfo) }, bC.prototype._setHandler = function (A) { var e = this._getDataProvider(A), t = null, i = this.model; if (Array.isArray(A.scene)) { for (var o = 0, n = A.children.length; n > o; o += 1) { var r = A.scene[o]; r && (i.subModel[A.children[o]] = (new M).fromArray(r.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])) } t = new xC(i, !1), i.merged = !0, vc.MergeComponent = !0 } else if (i.hasAnimation && vc.EnableAnimation) t = new MC(i); else if (vc.MergeComponent) { switch (e) { case Wc.LAYER: vc.HasLayerData = !0, vc.LoadGeoOnDemand = !0, (t = new dC(i, !1)).layerProvider.cachedLayerData = A.scene.map; break; case Wc.LAYER_SCENE: vc.HasLayerData = !0, vc.LoadGeoOnDemand = !0; break; case Wc.MERGED: t = new oC(i, !1); break; default: t = new Yf(i, !1) } i.merged = !0 } else if (vc.OrganizeNodesByCameraView) switch (e) { case Wc.LAYER: case Wc.LAYER_SCENE: vc.HasLayerData = !0, vc.LoadGeoOnDemand = !0 } else switch (e) { case Wc.LAYER: vc.HasLayerData = !0, vc.LoadGeoOnDemand = !0, (t = new IC(i)).layerProvider.cachedLayerData = A.scene.map; break; case Wc.LAYER_SCENE: vc.HasLayerData = !0, vc.LoadGeoOnDemand = !0; break; case Wc.MERGED: break; default: t = new MC(i) } i._handler = t }, bC.prototype._setTransformInfos = function (A) { if (this.model.hasAnimation = A.hasAnimation, this.transformInfos.octreeTransformed = !1, this.transformInfos.boundingBox && this.transformInfos.boundingBox.isBox3 || (this.transformInfos.boundingBox = new aA), this.transformInfos.boundingBox.expandByPoint(new y(A.minBoundary.x, A.minBoundary.y, A.minBoundary.z)), this.transformInfos.boundingBox.expandByPoint(new y(A.maxBoundary.x, A.maxBoundary.y, A.maxBoundary.z)), this.transformInfos.transformMatrix.compose(this.transformInfos.position, this.transformInfos.rotation, this.transformInfos.scale), this.transformInfos.transformMatrix.fromArray(A.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), A.transform && Array.isArray(A.transform)) { var e = (new M).fromArray(A.transform || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); this.transformInfos.transformMatrix.multiplyMatrices(this.transformInfos.transformMatrix, e) } this.transformInfos.originalMatrix.copy(this.transformInfos.transformMatrix), this.model.setModelMatrix(this.transformInfos.transformMatrix), this.model.manager.updateScene() }, bC.prototype._toStatistics = function (A) { A.count = {}, A.count.texture_pixels && A.count.texture_pixels > vc.MaxTexturePixels && (vc.EnableTextureLoading = !1), void 0 !== A.count && (void 0 !== A.count.mesh_face && (this.statistics.numOfTriangles += A.count.mesh_face), this.statistics.renderableTotal = 0, this.statistics.renderableTotalForPool = 0, void 0 !== A.count.geom_box && void 0 !== A.count.geom_pipe && void 0 !== A.count.geom_tube && void 0 !== A.count.mesh ? (this.statistics.renderableTotal += A.count.geom_box, this.statistics.renderableTotal += A.count.geom_pipe, this.statistics.renderableTotal += A.count.geom_tube, this.statistics.renderableTotal += A.count.mesh, this.statistics.renderableTotalForPool += 6 * A.count.geom_box, this.statistics.renderableTotalForPool += 3 * A.count.geom_pipe, this.statistics.renderableTotalForPool += A.count.geom_tube, this.statistics.renderableTotalForPool += A.count.mesh, this.statistics.numOfTriangles += 12 * A.count.geom_box, this.statistics.numOfTriangles += 32 * A.count.geom_pipe, this.statistics.numOfTriangles += 32 * A.count.geom_tube) : void 0 !== A.count.geom && void 0 !== A.count.mesh && (this.statistics.renderableTotal += A.count.geom, this.statistics.renderableTotal += A.count.mesh, this.statistics.numOfTriangles += 12 * A.count.geom, this.statistics.numOfElements = this.statistics.renderableTotal, this.statistics.renderableTotalForPool = this.statistics.renderableTotal), void 0 !== A.count.item && (this.statistics.numOfElements = A.count.item)), this.statistics.memoeryInfo = this._computeApproximateMemoerySize(A) }, bC.prototype._computeApproximateMemoerySize = function (A) { var e = 0, t = 0, i = A.count.mesh_vertex || 0, o = A.count.mesh_face || 0, n = A.count.geom_box || 0, r = A.count.geom_pipe || 0, a = A.count.texture_pixels || 0; t += 8 * i, t += 3 * o, t += 0, t += 0, e += 6 * i, e += 3 * o, e += 0, e += 0; var s = 0; if (s += o, n > 0 && (s += 12 * n), r > 0 && (s += 124 * r), s += 0, vc.Instance) { n > 0 && (t += 192, t += 36, t += 24 * n, e += 144, e += 36, e += 18 * n), r > 0 && (t += 1040, t += 372, t += 24 * r, e += 780, e += 372, e += 18 * r) } else n > 0 && (t += 24 * n * 8, t += 12 * n * 3, e += 24 * n * 6, e += 12 * n * 3), r > 0 && (t += 130 * r * 8, t += 124 * r * 3, e += 130 * r * 6, e += 124 * r * 3); return vc.EnableTextureLoading && (t += 4 * a, e += 4 * a), t *= 4, e *= 4, t *= 1 / 1048576, e *= 1 / 1048576, { maxMemoerySize: t = Math.ceil(t), minMemoerySize: e = Math.ceil(e), triangleNumber: s, instanceEnabled: vc.Instance } }, bC.prototype.getMemoeryInfo = function () { return this.statistics.memoeryInfo }, bC.prototype.getStatistics = function () { return this.statistics }, bC.prototype.getConfig = function () { return this.config }, bC.prototype.getTransforms = function () { return this.transformInfos }, bC.prototype.setRenderableCount = function (A) { this.statistics.renderableCount = A }; var UC = function (A) { ef.call(this, A), this.descriptor = new Af(A.model), this.fileKeyFromModelKey = {} }; (UC.prototype = Object.assign(UC.prototype, ef.prototype)).loadData = function () { var A = this, e = this.model; this.modelDataVersion = e.configLoader.modelDataVersion; e.getConfig(); var t = e.configLoader.scenes, i = [], o = [], n = [], r = [], a = [], s = [], l = [], c = []; A.maxLoadTaskCount = 0, A.maxLoadTextureCount = 0; for (var h = function (h) { var d = t[h].scene, F = t[h].dataVersion, K = t[h].modelKey; if (!(d && d.components && d.geometries && d.materials && d.textures)) return e.setEmptyScene(!0), Bh.error("scene is null,modelKey is ", K), e.dispatchEventEx({ type: Rc.ON_LOAD_EMPTY_SCENE, modelKey: K }), { v: void 0 }; if (p = d.components.length || 0, g = d.geometries.length || 0, u = d.materials.length || 0, f = d.textures.length || 0, m = [], C = [], y = [], v = [], I = [], E = [], B = d.textures, x = [], op(F, "2.0.0")) m = d.components, C = d.geometries, y = d.materials; else { for (S = 0; p > S; S += 1) d.components[S].fileKey ? m.push(d.components[S].fileKey) : e.dispatchEventEx({ type: Tc.SCENE_NOT_CLOSE, modelKey: K }); for (w = 0; g > w; w += 1) d.geometries[w].fileKey ? C.push(d.geometries[w].fileKey) : e.dispatchEventEx({ type: Tc.SCENE_NOT_CLOSE, modelKey: K }); for (M = 0; u > M; M += 1) d.materials[M].fileKey ? y.push(d.materials[M].fileKey) : e.dispatchEventEx({ type: Tc.SCENE_NOT_CLOSE, modelKey: K }) } if (d.trees.length > 0) for (b = 0; d.trees.length > b; b += 1) "partition" === (U = d.trees[b]).type && x.push(U.fileKey); A.maxLoadTaskCount += p, A.maxLoadTaskCount += g, A.maxLoadTaskCount += u, vc.EnableTextureLoading && (A.maxLoadTextureCount += f), A.maxLoadTaskCount += 0, A.maxLoadTaskCount += 0, A.maxLoadTaskCount += 0, A.maxLoadTaskCount += x.length, m.forEach((function (e) { A.fileKeyFromModelKey[e] = K })), C.forEach((function (e) { A.fileKeyFromModelKey[e] = K })), y.forEach((function (e) { A.fileKeyFromModelKey[e] = K })), v.forEach((function (e) { A.fileKeyFromModelKey[e] = K })), I.forEach((function (e) { A.fileKeyFromModelKey[e] = K })), E.forEach((function (e) { A.fileKeyFromModelKey[e] = K })), B.forEach((function (e) { A.fileKeyFromModelKey[e] = K })), x.forEach((function (e) { A.fileKeyFromModelKey[e] = K })), i = i.concat(m), o = o.concat(C), n = n.concat(y), r = r.concat(v), a = a.concat(I), s = s.concat(E), l = l.concat(B), c = c.concat(x) }, d = 0; t.length > d; d += 1) { var p, g, u, f, m, C, y, v, I, E, B, x, S, w, M, b, U, F = h(d); if ("object" === lc(F)) return F.v } if (A.progress.total += A.maxLoadTaskCount, 1 > A.maxLoadTaskCount) return Bh.info("Nothing to load ", e.modelKey), void e.dispatchEventEx({ type: Tc.SCENE_NOTHING_TO_LOAD, modelKey: e.modelKey }); Bh.time("数据加载时间"), A._loadComponent(i), A._loadMaterial(n), vc.EnableTextureLoading && A.maxLoadTextureCount.length > 0 ? A._loadTextures(l) : A._onLoadTexture(), A._loadTextures(l), A._loadKDTree(c), A._loadClips(a), A._loadBones(r), A._loadNodes(s), A.offLine && A.loadAttribute(), A._loadGeo(o) }, UC.prototype.loadSceneAndGeos = function (A) { this._loadGeo(A) }, UC.prototype._loadGeometrie = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { var t = this.url, i = [], o = []; i.push(o); for (var n = 0, r = 0; A.length > r; r += 1) 50 > n || (i.push(o = []), n = 0), n += 1, o.push(t.mpkUrl(A[r])); var a = this.model.getStorage(); if (a) for (var s = function (t, o) { var n = i[o]; a.getBatch(n, (function (A) { for (var t = function (t) { if (-1 === (o = n[t].indexOf("fileKey="))) return Bh.error("url is not has fileKey"), { v: void 0 }; var i = n[t].slice(o + 8); if (A[n[t]]) if (!0 === A[n[t]].split) { var s = A[n[t]].list, l = new Uint8Array(A[n[t]].length); a.getBatch(s, (function (A) { for (var t = 0; s.length > t; t += 1) A[s[t]] ? l.set(new Uint8Array(A[s[t]]), 4e7 * t) : Bh.error("获取分割几何失败"); e._parseGeometrie(l.buffer, i), Bh.debug("load geo from local"), e._onTaskFinished() }), (function () { Bh.error("获取分割几何失败") })) } else e._parseGeometrie(A[n[t]], i), Bh.debug("load geo from local"), e._onTaskFinished(); else { if (r = e.taskGeometrieManager, -1 === n[t].indexOf("fileKey=")) return Bh.error("url is not has fileKey"), { v: void 0 }; r.addTask(i), Bh.debug("load geo from net") } }, i = 0; n.length > i; i += 1) { var o, r, s = t(i); if ("object" === lc(s)) return s.v } e.taskGeometrieManager.processTasks(e.loadGeometrie.bind(e)) }), (function () { for (var t = e.taskGeometrieManager, i = 0; A.length > i; i += 1) t.addTask(A[i]); t.processTasks(e.loadGeometrie.bind(e)) })) }, l = 0, c = i.length; c > l; l += 1) s(0, l) } else { for (var h = this.taskGeometrieManager, d = 0; A.length > d; d += 1) h.addTask(A[d]); h.processTasks(e.loadGeometrie.bind(e)) } }, UC.prototype._loadKDTree = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { var t = this.url, i = [], o = []; i.push(o); for (var n = 0, r = 0; A.length > r; r += 1) 50 > n || (i.push(o = []), n = 0), n += 1, o.push(t.mpkUrl(A[r])); var a = this.model.getStorage(); if (a) for (var s = function (t, o) { var n = i[o]; a.getBatch(n, (function (A) { for (var t = 0; n.length > t; t += 1) { var i = n[t].indexOf("fileKey="); if (-1 === i) return void Bh.error("url is not has fileKey"); var o = n[t].slice(i + 8); if (A[n[t]]) e._parseKDTree(A[n[t]], o), Bh.debug("load kdtree from local"), e._onTaskFinished(); else { var r = e.taskComponentManager; if (-1 === n[t].indexOf("fileKey=")) return void Bh.error("url is not has fileKey"); r.addTask(o), r.processTasks(e.loadKDTree.bind(e)), Bh.debug("load kdtree from net") } } }), (function () { for (var t = e.taskComponentManager, i = 0; A.length > i; i += 1) t.addTask(A[i]); t.processTasks(e.loadKDTree.bind(e)) })) }, l = 0, c = i.length; c > l; l += 1) s(0, l) } else { for (var h = this.taskComponentManager, d = 0; A.length > d; d += 1) h.addTask(A[d]); h.processTasks(e.loadKDTree.bind(e)) } }, UC.prototype._loadBones = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.bonesUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = 0; i.length > t; t += 1) { var o = i[t].indexOf("fileKey="); if (-1 === o) return void Bh.error("url is not has fileKey"); var n = i[t].slice(o + 8); if (A[i[t]]) e._parseBones(A[i[t]], n), Bh.debug("load Bones from local"), e._onTaskFinished(); else { if (-1 === i[t].indexOf("fileKey=")) return void Bh.error("url is not has fileKey"); e.loadBones(i[t].slice(o + 8), (function () {})), Bh.debug("load Bones from net") } } }), (function () { for (var t = 0; A.length > t; t += 1) e.loadBones(A[t], (function () {})) })) } else { for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) r.addTask(A[a]); r.processTasks(e.loadBones.bind(e)) } }, UC.prototype._loadClips = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.clipsUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = 0; i.length > t; t += 1) { var o = i[t].indexOf("fileKey="); if (-1 === o) return void Bh.error("url is not has fileKey"); var n = i[t].slice(o + 8); if (A[i[t]]) e._parseClips(A[i[t]], n), Bh.debug("load Clips from local"), e._onTaskFinished(); else { if (-1 === i[t].indexOf("fileKey=")) return void Bh.error("url is not has fileKey"); e.loadClips(i[t].slice(o + 8), (function () {})), Bh.debug("load Clips from net") } } }), (function () { for (var t = 0; A.length > t; t += 1) e.loadClips(A[t], (function () {})) })) } else { for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) r.addTask(A[a]); r.processTasks(e.loadClips.bind(e)) } }, UC.prototype._loadNodes = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.nodesUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = 0; i.length > t; t += 1) { var o = i[t].indexOf("fileKey="); if (-1 === o) return void Bh.error("url is not has fileKey"); var n = i[t].slice(o + 8); if (A[i[t]]) e._parseNodes(A[i[t]], n), Bh.debug("load Nodes from local"), e._onTaskFinished(); else { if (-1 === i[t].indexOf("fileKey=")) return void Bh.error("url is not has fileKey"); e.loadNodes(i[t].slice(o + 8), (function () {})), Bh.debug("load Nodes from net") } } }), (function () { for (var t = 0; A.length > t; t += 1) e.loadNodes(A[t], (function () {})) })) } else { for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) r.addTask(A[a]); r.processTasks(e.loadNodes.bind(e)) } }, UC.prototype._loadComponent = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { var t = this.url, i = [], o = []; i.push(o); for (var n = 0, r = 0; A.length > r; r += 1) 50 > n || (i.push(o = []), n = 0), n += 1, o.push(t.mpkUrl(A[r])); var a = this.model.getStorage(); if (a) for (var s = function (t, o) { var n = i[o]; a.getBatch(n, (function (A) { for (var t = 0; n.length > t; t += 1) { var i = n[t].indexOf("fileKey="); if (-1 === i) return void Bh.error("url is not has fileKey"); var o = n[t].slice(i + 8); if (A[n[t]]) e._parseComponent(A[n[t]], o), Bh.debug("load com from local"), e._onTaskFinished(); else { var r = e.taskComponentManager; if (-1 === n[t].indexOf("fileKey=")) return void Bh.error("url is not has fileKey"); r.addTask(o), r.processTasks(e.loadComponent.bind(e)), Bh.debug("load com from net") } } }), (function () { for (var t = e.taskComponentManager, i = 0; A.length > i; i += 1) t.addTask(A[i]); t.processTasks(e.loadComponent.bind(e)) })) }, l = 0, c = i.length; c > l; l += 1) s(0, l) } else { for (var h = this.taskComponentManager, d = 0; A.length > d; d += 1) h.addTask(A[d]); h.processTasks(e.loadComponent.bind(e)) } }, UC.prototype._loadMaterial = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var t = this.url, i = [], o = 0; A.length > o; o += 1) i.push(t.mpkUrl(A[o])); var n = this.model.getStorage(); n && n.getBatch(i, (function (A) { for (var t = 0; i.length > t; t += 1) { var o = i[t].indexOf("fileKey="); if (-1 === o) return void Bh.error("url is not has fileKey"); var n = i[t].slice(o + 8); if (A[i[t]]) e._parseMaterial(A[i[t]], n), Bh.debug("load mat from local"), e._onTaskFinished(); else { var r = e.taskMaterialManager; if (-1 === i[t].indexOf("fileKey=")) return void Bh.error("url is not has fileKey"); r.addTask(n), r.processTasks(e.loadMaterial.bind(e)), Bh.debug("load mat from net") } } }), (function () { for (var t = e.taskMaterialManager, i = 0; A.length > i; i += 1) t.addTask(A[i]); t.processTasks(e.loadMaterial.bind(e)) })) } else { for (var r = this.taskMaterialManager, a = 0; A.length > a; a += 1) r.addTask(A[a]); r.processTasks(e.loadMaterial.bind(e)) } }, UC.prototype._loadTextures = function (A) { var e = this.model.materialManager.textures, t = this; if (vc.getDataFromIndexedDB && !this.offLine) { for (var i = this.url, o = [], n = 0; A.length > n; n += 1) o.push(i.mpkUrl(A[n])); var r = this.model.getStorage(); r && r.getBatch(o, (function (A) { for (var i = 0; o.length > i; i += 1) if (A[o[i]]) { var n = o[i].indexOf("fileKey="); if (-1 === n) return void Bh.error("url is not has fileKey"); var r = o[i].slice(n + 8), a = new d; Bh.debug("load tex from local"), e[r] = a; var s = document.createElement("img"); a.wrapS = a.wrapT = 1e3, s.onload = function (e) { "string" != typeof A[o[i]] && window.URL.revokeObjectURL(s.src), t.model.textureNeedsUpdate = !0, t._onLoadTexture() }, s.onerror = function (A) { t.model.dispatchEventEx({ type: Tc.LOAD_TEXTURE_ERROR }) }, s.src = "string" == typeof A[o[i]] ? A[o[i]] : window.URL.createObjectURL(A[o[i]]), a.image = s, a.needsUpdate = !0 } else { var l = t.taskTexturesManager, c = o[i].indexOf("fileKey="); if (-1 === c) return void Bh.error("url is not has fileKey"); l.addTask(o[i].slice(c + 8)), l.processTasks(t.loadTextures.bind(t)), Bh.debug("load tex from net") } }), (function () { for (var e = t.taskTexturesManager, i = 0; A.length > i; i += 1) e.addTask(A[i]); e.processTasks(t.loadTextures.bind(t)) })) } else { for (var a = this.taskTexturesManager, s = 0; A.length > s; s += 1) a.addTask(A[s]); a.processTasks(t.loadTextures.bind(t)) } }, UC.prototype._parseGeometrie = function (A, e) { var t = this.fileKeyFromModelKey[e] || "", i = new ku.GeometryReader(A, this.modelDataVersion[t]), o = this.descriptor; if (o) { for (var n = i.geoCount, r = 0; n > r; r += 1) { var a = i.geomMap[r]; void 0 !== a.position && void 0 !== a.index && void 0 !== a.normal ? o.cacheReferencedMeshBufferData(t + a.geoId, a) : Bh.error("Error Geometry!") } i = null } }, UC.prototype._parseMaterial = function (A, e) { var t = this.descriptor; if (t) { var i = new Du(A, this.modelDataVersion[this.fileKeyFromModelKey[e] || ""]); if (Array.isArray(i.materialMap)) { var o = i.materialCount; if (0 > o) return; for (var n = 0; o > n; n += 1) { var r = i.materialMap[n]; t.cacheReferencedMeshMaterialData(r.matId, r) } } else for (var a in i.materialMap) t.cacheReferencedMeshMaterialData(a, i.materialMap[a]); i = null } }, UC.prototype._parseComponent = function (A, e) { if (A) { var t = new Uu(A), i = t.compArr.length, o = this.descriptor; if (o) { for (var n = this.fileKeyFromModelKey[e] || "", r = 0; i > r; r += 1) { var a = t.compArr[r]; - 1 !== a.geoId && (a.geoId = n + a.geoId, -1 !== a.matId && (a.matId = n + a.matId), this.model.submodel[n] = this.model.submodel[n] || [], this.model.submodel[n].push(a.key)), o.cacheReferencedMeshComponentData(a.key, a) } t = null } } else Bh.error("没有数据") }, UC.prototype._parseKDTree = function (A, e) { var t = {}; if (t = "string" == typeof A ? JSON.parse(A) : A, this.model.kdTreeNode = this.model.kdTreeNode || [], t) { var i = new Zu; i.init(t), this.model.kdTreeNode.push(i) } }, UC.prototype._parseNodes = function (A, e) { var t = this.descriptor; if (t) { var i = {}; i = "string" == typeof A ? JSON.parse(A) : A, Bh.debug("nodes", i), t.cacheReferencedMeshNodesData(i) } }, UC.prototype._parseClips = function (A, e) { var t = this.descriptor; if (t) { var i = {}; i = "string" == typeof A ? JSON.parse(A) : A, Bh.debug("clips", i), t.cacheReferencedMeshClipsData(i) } }, UC.prototype._parseBones = function (A, e) { var t = new ku.BoneReader(A), i = this.descriptor; if (i) { for (var o = t.boneCount, n = 0; o > n; n += 1) { var r = t.boneMap[n]; Bh.debug("bones", r), i.cacheReferencedMeshBoneBufferData(r.geoId, r) } t = null } }, UC.prototype._loadComponent = function (A) { var e = this; if (vc.getDataFromIndexedDB && !this.offLine) { var t = this.url, i = [], o = []; i.push(o); for (var n = 0, r = 0; A.length > r; r += 1) 50 > n || (i.push(o = []), n = 0), n += 1, o.push(t.mpkUrl(A[r])); var a = this.model.getStorage(); if (a) for (var s = function (t, o) { var n = i[o]; a.getBatch(n, (function (A) { for (var t = 0; n.length > t; t += 1) { var i = n[t].indexOf("fileKey="); if (-1 === i) return void Bh.error("url is not has fileKey"); var o = n[t].slice(i + 8); if (A[n[t]]) e._parseComponent(A[n[t]], o), Bh.debug("load com from local"), e._onTaskFinished(); else { var r = e.taskComponentManager; if (-1 === n[t].indexOf("fileKey=")) return void Bh.error("url is not has fileKey"); r.addTask(o), r.processTasks(e.loadComponent.bind(e)), Bh.debug("load com from net") } } }), (function () { for (var t = e.taskComponentManager, i = 0; A.length > i; i += 1) t.addTask(A[i]); t.processTasks(e.loadComponent.bind(e)) })) }, l = 0, c = i.length; c > l; l += 1) s(0, l) } else { for (var h = this.taskComponentManager, d = 0; A.length > d; d += 1) h.addTask(A[d]); h.processTasks(e.loadComponent.bind(e)) } }, UC.prototype.loadGeometrie = function (A, e) { var t = this, i = this.loader, o = this.url, n = this.model, r = vc.GeoWorkerUrl; vc.UseGeoWorker ? (i.setResponseType("arraybuffer"), i.load(o.mpkUrl(A), (function (A) { var i = new Worker(r); i.onmessage = function (A) { var i = A.data; for (var o in i) i.hasOwnProperty(o); e(), t._onTaskFinished() }, i.postMessage({ msg: A }) }))) : (i.setResponseType("arraybuffer"), i.setCacheViable(!this.offLine), i.load(o.mpkUrl(A), (function (i) { t._parseGeometrie(i, A, A), Bh.debug("geo load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { n.dispatchEventEx({ type: Tc.LOAD_GEOMETRY_ERROR, modelKey: n.modelKey }) }))) }, UC.prototype.loadMaterial = function (A, e) { var t = this, i = this.loader, o = this.url, n = this.model, r = vc.GeoWorkerUrl; vc.UseGeoWorker ? (i.setResponseType("arraybuffer"), i.load(o.mpkUrl(A), (function (A) { var i = new Worker(r); i.onmessage = function (A) { var i = A.data; for (var o in i) i.hasOwnProperty(o); e(), t._onTaskFinished() }, i.postMessage({ msg: A }) }))) : (i.setResponseType(t.modelDataVersion[t.fileKeyFromModelKey[A] || ""] > 1 ? "json" : "arraybuffer"), i.setCacheViable(!this.offLine), i.load(o.mpkUrl(A), (function (i) { t._parseMaterial(i, A), Bh.debug("met load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { n.dispatchEventEx({ type: Tc.LOAD_MATERIAL_ERROR, modelKey: n.modelKey }) }))) }, UC.prototype.loadTextures = function (A, e) { var t = this.model.materialManager.textures, i = this, o = this.Textureloader, n = this.url, r = this.model, a = vc.GeoWorkerUrl; vc.UseGeoWorker ? o.load(n.mpkUrl(A), (function (A) { var t = new Worker(a); t.onmessage = function (A) { var t = A.data; for (var o in t) t.hasOwnProperty(o); e(), i._onTaskFinished() }, t.postMessage({ msg: A }) })) : (o.setResponseType("blob"), o.setMimeType("text/plain"), o.setCacheViable(!this.offLine), o.load(n.textureUrl(A), (function (o) { Bh.debug("tex load from online"); var n = new d; t[A] = n, n.wrapS = n.wrapT = 1e3; var a = document.createElement("img"); a.onload = function (A) { "string" != typeof o && window.URL.revokeObjectURL(a.src), e(), i.model.textureNeedsUpdate = !0, i._onLoadTexture() }, a.onerror = function (A) { r.dispatchEventEx({ type: Tc.LOAD_TEXTURE_ERROR, modelKey: r.modelKey }) }, a.src = "string" == typeof o ? o : window.URL.createObjectURL(o), n.image = a, n.needsUpdate = !0 }), void 0, (function (A) { r.dispatchEventEx({ type: Tc.LOAD_TEXTURE_ERROR, modelKey: r.modelKey }) }))) }, UC.prototype.loadComponent = function (A, e) { var t = this, i = this.jsonLoader, o = this.model, n = this.url, r = vc.GeoWorkerUrl; vc.UseGeoWorker ? (i.setResponseType("json"), i.load(n.mpkUrl(A), (function (A) { var i = new Worker(r); i.onmessage = function (A) { var i = A.data; for (var o in i) i.hasOwnProperty(o); e(), t._onTaskFinished() }, i.postMessage({ msg: A }) }), (function (A) {}))) : (i.setResponseType("json"), i.setCacheViable(!this.offLine), i.load(n.mpkUrl(A), (function (i) { t._parseComponent(i, A), Bh.debug("component load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { o.dispatchEventEx({ type: Tc.LOAD_COMPONENT_ERROR, modelKey: o.modelKey }) }))) }, UC.prototype.loadKDTree = function (A, e) { var t = this, i = this.loader, o = this.model, n = this.url, r = vc.GeoWorkerUrl; vc.UseGeoWorker ? (i.setResponseType("json"), i.load(n.mpkUrl(A), (function (A) { var i = new Worker(r); i.onmessage = function (A) { var i = A.data; for (var o in i) i.hasOwnProperty(o); e(), t._onTaskFinished() }, i.postMessage({ msg: A }) }), (function (A) {}))) : (i.setResponseType("json"), i.setCacheViable(!this.offLine), i.load(n.kdTreeUrl(A), (function (i) { t._parseKDTree(i, A), Bh.debug("kdtree load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { o.dispatchEventEx({ type: Tc.LOAD_COMPONENT_ERROR, modelKey: o.modelKey }) }))) }, UC.prototype.loadBones = function (A, e) { var t = this, i = this.loader, o = this.model, n = this.url, r = vc.GeoWorkerUrl; vc.UseGeoWorker ? (i.setResponseType("arraybuffer"), i.load(n.bonesUrl(A), (function (A) { var i = new Worker(r); i.onmessage = function (A) { var i = A.data; for (var o in i) i.hasOwnProperty(o); e(), t._onTaskFinished() }, i.postMessage({ msg: A }) }), (function (A) {}))) : (i.setResponseType("arraybuffer"), i.setCacheViable(!this.offLine), i.load(n.bonesUrl(A), (function (i) { t._parseBones(i, A), Bh.debug("bones load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { o.dispatchEventEx({ type: Tc.LOAD_COMPONENT_ERROR, modelKey: o.modelKey }) }))) }, UC.prototype.loadClips = function (A, e) { var t = this, i = this.loader, o = this.model, n = this.url, r = vc.GeoWorkerUrl; vc.UseGeoWorker ? (i.setResponseType("json"), i.load(n.mpkUrl(A), (function (A) { var i = new Worker(r); i.onmessage = function (A) { var i = A.data; for (var o in i) i.hasOwnProperty(o); e(), t._onTaskFinished() }, i.postMessage({ msg: A }) }), (function (A) {}))) : (i.setResponseType("json"), i.setCacheViable(!this.offLine), i.load(n.clipsUrl(A), (function (i) { t._parseClips(i, A), Bh.debug("Clips load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { o.dispatchEventEx({ type: Tc.LOAD_COMPONENT_ERROR, modelKey: o.modelKey }) }))) }, UC.prototype.loadNodes = function (A, e) { var t = this, i = this.loader, o = this.model, n = this.url, r = vc.GeoWorkerUrl; vc.UseGeoWorker ? (i.setResponseType("json"), i.load(n.mpkUrl(A), (function (A) { var i = new Worker(r); i.onmessage = function (A) { var i = A.data; for (var o in i) i.hasOwnProperty(o); e(), t._onTaskFinished() }, i.postMessage({ msg: A }) }), (function (A) {}))) : (i.setResponseType("json"), i.setCacheViable(!this.offLine), i.load(n.nodesUrl(A), (function (i) { t._parseNodes(i, A), Bh.debug("Nodes load from online"), e(), t._onTaskFinished() }), void 0, (function (A) { o.dispatchEventEx({ type: Tc.LOAD_COMPONENT_ERROR, modelKey: o.modelKey }) }))) }; var FC = function (A, e) { tf.call(this, A), this.defaultManager = new Of(e, A), this.instancedManager = new Hf(A), this.loader = new UC(this) }; FC.prototype = Object.create(Yf.prototype); var KC = function (A) { bC.call(this, A), this.modelDataVersion = {} }; (KC.prototype = Object.assign(KC.prototype, bC.prototype)).load = function (A) { var e = this, t = this.model; this.config = {}; var i = t.dataUrl, o = function (o) { var n = {}; if ("string" == typeof o) try { n = JSON.parse(o) } catch (A) { return t.setEmptyScene(!0), void t.dispatchEventEx({ type: Rc.ON_LOAD_INVALID_SCENE, modelKey: t.modelKey }) } else n = o; if (n && "SUCCESS" === n.code) { if (vc.offLine) e.model.getStorage().put(i.projectUrl(), n, e.model.modelKey, (function () {}), (function () {})); if (-1 === Number(n.data.status)) return void t.dispatchEventEx({ type: Tc.PARSEFAILE, modelKey: t.modelKey }); if (3 > Number(n.data.status)) return void t.dispatchEventEx({ type: Tc.PARSING, modelKey: t.modelKey }); e.dataVersion = n.data.profiles.geo || "1.0.0", i.apiVersion = n.data.profiles.api, e.model.dataVersion = e.dataVersion, e._parse(n.data), t.dispatchEventEx({ type: Rc.ON_LOAD_CONFIG_FINISH, modelKey: t.modelKey }), A && A() } else Bh.log(t.modelKey, "config load error! ", n.message), t.dispatchEventEx({ type: Rc.ON_LOAD_ERROR, modelKey: t.modelKey, code: n.code, message: n.message }) }; if (vc.offLine) { var n = this.model.getStorage(); n && n.getBatch([i.projectUrl()], (function (A) { A[i.projectUrl()] ? o(A[i.projectUrl()]) : _d({ type: "GET", url: i.projectUrl(), headers: { Authorization: t.accessToken }, success: o, error: function (A) { t.dispatchEventEx({ type: Rc.ON_NETWORK_ERROR, modelKey: t.modelKey, data: A }) } }) }), (function () {})) } else { for (var r = [], a = function () { var A = t.modelKeys[s]; r.push(new Promise((function (e, o) { _d({ type: "GET", url: i.projectUrl(A), headers: { Authorization: t.accessToken }, success: function (t) { e({ modelKey: A, data: t }) }, error: function (e, i) { switch (e) { case 401: t.dispatchEventEx({ type: Rc.ACCOUNT_NO_EXIST, modelKey: A, data: i }); break; case 403: t.dispatchEventEx({ type: Rc.NO_PERMISSION, modelKey: A, data: i }); break; default: t.dispatchEventEx({ type: Rc.ON_NETWORK_ERROR, modelKey: A, data: e }) } o(e, i) } }) }))) }, s = 0; t.modelKeys.length > s; s += 1) a(); Promise.all(r).then((function (o) { for (var n = [], r = 0, a = 0; o.length > a; a += 1) if (o[a]) { var s = o[a].data, l = o[a].modelKey, c = {}; if ("string" == typeof s) try { c = JSON.parse(s) } catch (A) { return void t.dispatchEventEx({ type: Rc.ON_LOAD_INVALID_SCENE, modelKey: l }) } else c = s; if (c && "SUCCESS" === c.code) { if (vc.offLine) e.model.getStorage().put(i.projectUrl(), c, e.model.modelKey, (function () {}), (function () {})); var h = c.data.scene || null, d = c.data.profiles.geo || "1.0.0"; if (i.apiVersion = c.data.profiles.api, n.push({ scene: h, modelKey: c.data.key, dataVersion: d }), e.modelDataVersion[c.data.key] = d, r += c.data.componentCount, -1 === Number(c.data.status)) return void t.dispatchEventEx({ type: Tc.PARSEFAILE, modelKey: l }); if (3 > Number(c.data.status)) return void t.dispatchEventEx({ type: Tc.PARSING, modelKey: l }); e.dataVersion = c.data.profiles.geo || "1.0.0", e.sceneReader = e.sceneReader || [], t.setConfig(c.data), e._parse(c.data) } else Bh.log(t.modelKey, "config load error! ", c.message), t.dispatchEventEx({ type: Rc.ON_LOAD_ERROR, modelKey: l, code: c.code, message: c.message }) } var p = new FC(t, !1); t._handler = p, e.model.componentCount = r, t.dispatchEventEx({ type: Rc.ON_LOAD_CONFIG_FINISH, modelKey: t.modelKey }), e.scenes = n, A && A() })).catch((function (A) { console.log(A) })) } }, KC.prototype._parse = function (A) { this.config = A, A.lengthUnit && (this.model.originalLengthUnit = A.lengthUnit), vc.MergeComponent = !0, this._toStatistics(A), this._setTransformInfos(A), this._chooseRendering(A) }; var QC = {}; QC.brdf_vs = ["varying vec2 vUV;", "void main() {", " vUV = uv;", " gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);", "}"].join("\n"), QC.brdf_fs = ["varying vec2 vUV;", "uniform sampler2D HammersleyTable;", "const float PI = 3.14159265358979;", "float GGX(float NdotV, float alpha)", "{", " float alpha2 = pow(alpha, 2.0);", " return 2.0 * NdotV / (NdotV + sqrt(alpha2 + (1.0 - alpha2) * NdotV * NdotV));", "}", "float G_Smith(float NdotV, float NdotL, float roughness)", "{", " float alpha = pow(roughness, 2.0);", " return GGX(NdotV, alpha) * GGX(NdotL, alpha);", "}", "vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness)", "{", " float a = roughness * roughness;", " float Phi = 2.0 * PI * Xi.x; ", " float CosTheta = sqrt((1.0 - Xi.y) / (1.0 + (a * a - 1.0) * Xi.y)); ", " float SinTheta = sqrt(1.0 - CosTheta * CosTheta);", " vec3 H;", " H.x = SinTheta * cos(Phi); ", " H.y = SinTheta * sin(Phi); ", " H.z = CosTheta;", " vec3 UpVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); ", " vec3 TangentX = normalize(cross(UpVector, N)); ", " vec3 TangentY = cross(N, TangentX);", " return normalize(TangentX * H.x + TangentY * H.y + N * H.z);", "}", "vec2 IntegrateBRDF(float NdotV, float roughness)", "{", " vec3 N = vec3(0.0, 0.0, 1.0);", " vec3 V = vec3(sqrt(1.0 - NdotV * NdotV), 0.0, NdotV);", " vec2 result = vec2(0.0, 0.0);", " const int NumSamples = 1024;", " for (int i = 0; i < NumSamples; i++)", " {", " float u = float(i) / float(NumSamples);", " vec2 Xi = vec2(u, texture2D(HammersleyTable, vec2(u)).r);", " vec3 H = ImportanceSampleGGX(Xi, N, roughness);", " vec3 L = 2.0 * dot(V, H) * H - V;", " float NdotL = saturate(L.z);", " float NdotH = saturate(H.z);", " float VdotH = saturate(dot(V, H));", " float NdotV = saturate(dot(N, V));", " if (NdotL > 0.0)", " {", " float G = G_Smith(NdotV, NdotL, roughness);", " float G_Vis = G * VdotH / (NdotH * NdotV); ", " float F = pow(1.0 - VdotH, 5.0);", " result.x += (1.0 - F) * G_Vis;", " result.y += F * G_Vis;", " }", " }", " return result / float(NumSamples);", "}", "void main()", "{", " vec2 brdf = IntegrateBRDF(vUV.x, vUV.y);", " gl_FragColor = vec4(brdf, 0.0, 1.0);", "}"].join("\n"), QC.BRDFMap = function (A, e) { this.texture = null, this.resolution = e || 512, this.brdfMaterial = new Pe({ vertexShader: QC.brdf_vs, fragmentShader: QC.brdf_fs, uniforms: { HammersleyTable: { value: A } }, lights: !1 }), this.quad = new Ue(new et(window.innerWidth, window.innerHeight), this.brdfMaterial), this.quad.position.z = -100 }, QC.BRDFMap.prototype.constructor = QC.BRDFMap, QC.BRDFMap.prototype.generateMap = function (A) { var e = new Y; e.add(this.quad); var t = new Ka(window.innerWidth / -2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / -2, -1e4, 1e4); t.position.z = 100; var i = new g(this.resolution, this.resolution, { minFilter: 1006, magFilter: 1003, format: 1022 }); A.setRenderTarget(i), A.clear(), A.render(e, t), this.texture = i.texture }; var RC = function () { this.instanceMaterials = {}, this.materials = {}, this.textures = {}, this.lightmaps = {}, this.ensureImagePowerOfTwo = !1 }; RC.prototype.changeAllMaterials = function (A, e) {}, RC.prototype.destroy = function () { this.instanceMaterials = {}, this.materials = {}, this.textures = {}, this.lightmaps = {} }, RC.prototype.disposeInstanceMaterials = function (A) { var e = this.instanceMaterials; for (var t in e) { var i = e[t]; if (Array.isArray(i)) for (var o = 0, n = i.length; n > o; o += 1) i[o].dispose(); else i.dispose() } }, RC.prototype.disposeMaterials = function (A) { for (var e in this.materials) this.materials[e].dispose(); this.disposeInstanceMaterials(A) }, RC.prototype.updateMaterialsValue = function (A, e, t) { var i = this.materials, o = this.instanceMaterials, n = null; for (var r in i) for (var r in (n = i[r]) && n[e] && (n[e] = t, "function" == typeof n.refreshUniforms && n.refreshUniforms(), n.needsUpdate = !0), o) if (n = o[r]) if (Array.isArray(n)) for (var a = 0, s = n.length; s > a; a += 1) n[a][e] && (n[a][e] = t, "function" == typeof n[a].refreshUniforms && n[a].refreshUniforms(), n[a].needsUpdate = !0); else n[e] && (n[e] = t, "function" == typeof n.refreshUniforms && n.refreshUniforms(), n.needsUpdate = !0) }, RC.prototype.enableColorWithoutLight = function (A) { var e = this.materials, t = this.instanceMaterials, i = null; if (A) { for (var o in e) (i = e[o]) && (i.defines.USE_COLORWITHOUTLIGHT = "", i.needsUpdate = !0); for (var o in t) if (i = t[o]) if (i instanceof Array) for (var n = 0, r = i.length; r > n; n += 1) i[n].defines.USE_COLORWITHOUTLIGHT = "", i[n].needsUpdate = !0; else i.defines.USE_COLORWITHOUTLIGHT = "", i.needsUpdate = !0 } else { for (var o in e) (i = e[o]) && (delete i.defines.USE_COLORWITHOUTLIGHT, i.needsUpdate = !0); for (var o in t) if (i = t[o]) if (i instanceof Array) for (n = 0, r = i.length; r > n; n += 1) delete i[n].defines.USE_COLORWITHOUTLIGHT, i[n].needsUpdate = !0; else delete i.defines.USE_COLORWITHOUTLIGHT, i.needsUpdate = !0 } }, RC.prototype._updateTextureMapping = function (A) { var e = vc.EnableTextureMapping, t = this.ensureImagePowerOfTwo; function i(A, e) { if (e) { if (void 0 === e.length) A.map = e; else for (var i = 0; e.length > i; i += 1) t || (e[i].image = Kd.ensurePowerOfTwo(e[i].image)), "map" === e[i].texturetype ? A.map = e[i] : "bumpMap" === e[i].texturetype ? e[i].depth && (A.bumpScale = e[i].depth) : "specularMap" === e[i].texturetype ? A.specularMap = e[i] : "alphaMap" === e[i].texturetype ? (A.alphaMap = e[i], A.alphaTest = .01, A.map = e[i], A.transparent = !0) : "emissiveMap" === e[i].texturetype ? A.emissiveMap = e[i] : "environmentMap" === e[i].texturetype ? A.envMap = e[i] : "normalMap" === e[i].texturetype ? (A.normalMap = e[i], e[i].depth && A.normalScale.set(e[i].depth, e[i].depth)) : Bh.warn("This map type is not supported yet:", e[i].texturetype); vc.IBL && A.refreshUniforms(), A.needsUpdate = !0 } else A.textureColor && A.color.setStyle(A.textureColor), A.needsUpdate = !0 } if (this.lastTextureEnabled !== e) { var o = this.textures, n = this.materials; if (A) var r = A.manager.getMaterialOverrideSet(), a = r ? r.materialsByName : null, s = r ? r.textures : null; var l = this.instanceMaterials, c = null, h = null; if (e) { for (c in n) { if (h = n[c]) i(h, d = o[c]) } for (c in l) if (h = l[c]) { var d = o[c]; if (s && s[c] && (d = s[c]), Array.isArray(h)) for (var p = 0, g = h.length; g > p; p += 1) i(h[p], d); else i(h, d) } for (c in a) { if (h = a[c]) i(h, d = s[c.split("#")[0]]) } this.ensureImagePowerOfTwo = !0 } else { if (!r) for (c in n) (h = n[c]) && (h.map = null, h.needsUpdate = !0); for (c in l) if (h = l[c]) if (Array.isArray(h)) for (p = 0, g = h.length; g > p; p += 1) h[p].pureColor && (h[p].color.setStyle(h[p].pureColor), h[p].map = null, h[p].needsUpdate = !0), r || (h[p].map = null, h[p].needsUpdate = !0); else h.pureColor && (h.color.setStyle(h.pureColor), h.map = null, h.needsUpdate = !0), r || (h.map = null, h.needsUpdate = !0); for (c in a) (h = a[c]) && (h.map = null, h.needsUpdate = !0, h.pureColor && h.color.setStyle(h.pureColor)) } this.lastTextureEnabled = e } }, RC.prototype.updateMaterials = function (A) { var e = this.materials; for (var t in e) if (e.hasOwnProperty(t)) { var i = e[t]; i.IBLMaps = A.manager.scene.IBLMaps, i.refreshUniforms() } }, RC.prototype._updateIBL = function (A) { var e = A.manager.scene; if (vc.IBL && null !== e.iblProbe && e.iblProbe.isComputed) { this.materialManager.updateMaterials(A); var t = e.IBLcfg, i = t[Object.keys(t)[e.IBLIndex]]; for (var o in i) this.materialManager.updateMaterialsValue(A, o, i[o]) } }, RC.prototype.changeAllMaterials = function (A, e) { var t = this.materials; for (var i in t) if (t.hasOwnProperty(i)) { var o = Kd.getMaterialParameters(t[i]), n = null; e ? (delete o.textureColor, delete o.pureColor, delete o.imageFade, o.lights = !0, (n = new QC.IBLMaterial(o)).type = "IBL", n.refreshUniforms()) : (delete o.iblProbe, (n = Kd.createStandardMaterial(o)).roughness = o.originRoughness, n.metalness = o.originMetalness, n.refreshUniforms()), n.name = i, t[i] = n, o = null } }, RC.prototype.switchNewStyleMaterial = function (A, e) { var t = this.materials; for (var i in t) if (t.hasOwnProperty(i)) { var o = Kd.getMaterialParameters(t[i]), n = null; (n = e ? Kd.createNewStyleMaterial(o) : Kd.createStandardMaterial(o)).name = i, t[i] = n, o = null } }, RC.prototype.getInstanceMaterialById = function (A, e) { if (this.instanceMaterials[A]) return this.instanceMaterials[A]; var t = Kd.getMaterialParameters(e.manager.getOverrideMaterialByName(A) || this.materials[A]), i = t.transparent, o = Kd.createInstanceMaterial(t, !0); o.transparent = !1; var n = Kd.createInstanceMaterial(t, !0); return n.transparent = !0, vc.TranslucentDepthDisabled && (n.depthWrite = !1), i === o.transparent ? (this.instanceMaterials[A] = [o, n], n.defines.INSTANCE_STATE_SECONDARY = "") : (this.instanceMaterials[A] = [n, o], o.defines.INSTANCE_STATE_SECONDARY = ""), this.instanceMaterials[A] }, RC.prototype.getMaterialById = function (A) { return this.materials[A] }; var TC = function (A, e, t, i) { var o = this; this.manager = A, this.modelKey = e.modelKey, this.projectKey = e.dbName, this.offLine = e.offLine, this.accessToken = e.token || "", this.shareKey = e.share || "", this.dataVersion = null, this.debut = i, this.dataUrl = new eC(e), this.submodel = {}, this.loadingManager = new jr, this.loadingManager.model = this, this.fileLoader = new bu(this.loadingManager), this.configLoader = new bC(this), this.firstOctreeTransform = !0, this.numOfElements = 0, this.numOfTriangles = 0, this.singleStepMode = !1, this.sizeOfNextStep = 0, this.needUpdate = !1, this.boundingBoxWorld = null, this.rotation = new f, this.position = new y, this.scale = new y(1, 1, 1), this.transformMatrix = new M, this.selectedMaterial = this.manager.sceneState.selectionMaterial, this.materialManager = new RC, this.wireframeManager = new au, this.axisNetManager = void 0, this.floorManager = void 0, this.containsCamera = !1, this.loaded = !1, this.visible = !0, this.emptyScene = !1, this.cameraList = [], this.index = 0, this.modelConfig = null, this.kdTreeNode = null, this.parseCfgFinish = void 0, this.progressPercentage = { load: .4, collect: .5, merge: .1 }, this.progressFrequency = 10, this._encodedDatabagId = this.modelKey, this.groupName = gp.MODEL + "|" + this.modelKey, this.group = this.manager.scene.getOrCreateGroup(this.groupName, { pickableType: Qc.Geometry, globalSpace: !0 }), this._handler = null, this.lightmap = !1, this.lightmapNum = 0, this.enableLightmap = !1, this.lightmapIntensity = vc.LightmapIntensity, this.minDistanceObjects = {}, this.prioritizedNodeCount = 0, this.plugins = [], this.merged = !1, e.modelKeys && (this.modelGroup = !0, this.groupKey = e.modelKey, this.modelKeys = e.modelKeys, this.progressFrequency = 100, this.merged = !0, this.configLoader = new KC(this)), this.subModel = {}, mh.isSupportIndexedDB() ? (this.storage = new AC({ store: this.modelKey, version: 1, dbName: this.modelKey }), this.storage.addEventListener(Rc.ON_DATABASE_OPEN, (function (A) { t && t(o, !0) })), this.storage.addEventListener(Rc.ON_DATABASE_EEEOR, (function (A) { o.storage = void 0, t && t(o, !1) }))) : (o.storage = void 0, t && t(this, !1)) }; Object.assign(TC.prototype, Ld.prototype), TC.prototype.getStorage = function () { return this.storage }, TC.prototype.destroy = function () { this.selectedMaterial = null, this.cameraList = null, this.occlusionCamera && (this.occlusionCamera = null), this._removeMeshNodeGroup(), this.removeAllFromOctantMap(), this._handler && (this._handler.destroy(), this._handler = null), this.wireframeManager.destroy(), this.wireframeManager = null, this.materialManager.disposeMaterials(this), this.materialManager.destroy(), this.materialManager = null, this.manager = null, this.plugins = null, this.dataUrl = null, this.fileLoader = null, this.configLoader.destroy(), this.configLoader = null }, TC.prototype._getWireframeGroupName = function () { return gp.WIREFRAME + "|" + this.modelKey }, TC.prototype.load = function (A) { var e = this; this.configLoader.load((function () { e.parseCfgFinish && e.parseCfgFinish(), e.manager.updateScene(), e._getHandler().load(A) })) }, TC.prototype.setCrossOrigin = function (A) { this.fileLoader.setCrossOrigin(A) }, TC.prototype.prepare = function (A, e) { var t = this._getHandler(); t && t.prepare(A, e) }, TC.prototype.dispatchEventEx = function (A) { A.modelKey = this.modelKey, this.manager.dispatchEvent(A) }, TC.prototype.setLoaded = function (A) { this.loaded = A }, TC.prototype.isLoaded = function () { return this.loaded }, TC.prototype.getTransformMatrix = function () { return this.transformMatrix }, TC.prototype.isEmptyScene = function () { return this.emptyScene }, TC.prototype.setEmptyScene = function (A) { this.emptyScene = A }, TC.prototype.isLayerData = function () { return !(!this._handler || "layer" !== this._handler.tag) }, TC.prototype.setConfig = function (A) { this.configLoader.config = A }, TC.prototype.getConfig = function () { return this.configLoader.config }, TC.prototype.isVisible = function () { return this.manager.filter._isModelVisible(this.modelKey) }, TC.prototype.setVisible = function (A) { A ? this.manager.filter.showModelByIds([this.modelKey]) : this.manager.filter.hideModelByIds([this.modelKey]) }, TC.prototype.calculateCameraModelRelation = function (A) { this.containsCamera = this.getModelDescriptor().isOctreeOuter(A) }, TC.prototype.addCamera = function (A) { this.cameraList.push(A) }, TC.prototype.getCameraNameList = function () { for (var A = [], e = this.cameraList.length - 1; e >= 0; e -= 1) A.push(this.cameraList[e].name); return A }, TC.prototype.getCamera = function (A) { for (var e = this.cameraList.length - 1; e >= 0; e -= 1) if (this.cameraList[e].name === A) return this.cameraList[e]; return null }, TC.prototype.updateOctreeNode = function (A) { if (A || this.firstOctreeTransform) { this.firstOctreeTransform && (this.firstOctreeTransform = !1); var e = this.manager.scene.getMatrixGlobal(); this.getModelDescriptor().updateOctreeNode(e) } }, TC.prototype.isDataReady = function () { var A = this._handler; return !!A && A.isDataReady() }, TC.prototype.updateMeshNodes = function (A) { var e = this._getHandler(); if (e) { if ("layer" === e.tag && !e.layerDataLoaded) return; e.updateNodes() } }, TC.prototype._getHandler = function (A) { return this._handler }, TC.prototype.getMeshesByUserIds = function (A) { if (A) { var e = this._getHandler(); return e ? e.getMeshesByUserIds(A) : void 0 } }, TC.prototype.applyFilter = function () { console.log('applyFilter :>dfdfdf> '); if (!1 !== this.manager.filter._isModelVisible(this.modelKey)) { for (var A = 0, e = this.plugins.length; e > A; A += 1) this.plugins[A].applyFilter(); this.group.visible = !0; var t = this._getHandler(); t && t.applyFilter() } else this.group.visible = !1 }, TC.prototype.applySelection = function () { console.log('applySelection11') for (var A = 0, e = this.plugins.length; e > A; A += 1) this.plugins[A].applySelection(); var t = this._getHandler(); t && t.applySelection() }, TC.prototype.clearSelection = function () { for (var A = 0, e = this.plugins.length; e > A; A += 1) this.plugins[A].clearSelection(); var t = this._getHandler(); t && t.clearSelection() }, TC.prototype.applyHover = function () { for (var A = 0, e = this.plugins.length; e > A; A += 1) this.plugins[A].applyHover(); var t = this._getHandler(); t && t.applyHover() }, TC.prototype.clearHover = function () { for (var A = 0, e = this.plugins.length; e > A; A += 1) this.plugins[A].clearHover(); var t = this._getHandler(); t && t.clearHover() }, TC.prototype.applyBlink = function () { var A = this._getHandler(); A && A.applyBlink() }, TC.prototype.clearBlink = function () { var A = this._getHandler(); A && A.clearBlink() }, TC.prototype.applyReplacement = function () { var A = this._getHandler(); A && A.applyReplacement() }, TC.prototype._removeMeshNodeGroup = function () { this._removeNodeGroup(gp.GEOMETRY), this._removeNodeGroup(gp.INSTANCEGEOMETRY), this._removeNodeGroup(gp.WIREFRAME), this._removeNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY), this._removeNodeGroup(gp.AXISNET), this._removeSceneGroup(), this.group = null }, TC.prototype._getNodeGroup = function (A, e) { for (var t = this.group.children, i = 0, o = t.length; o > i; i += 1) if (t[i].name === A) return t[i]; var n = new ep(A, e); return this.group.add(n), n.globalSpace && (n.matrixAutoUpdate = !1, n.updateMatrixWorld(!0)), n }, TC.prototype._removeNodeGroup = function (A) { this.group.removeByName(A) }, TC.prototype._hasNodeGroup = function (A) { return this.group.hasChild(A) }, TC.prototype._removeSceneGroup = function () { this.manager.scene.removeGroupByName(this.groupName), this.manager.scene.removeGroupByName(this._getWireframeGroupName()) }, TC.prototype.removeAllFromOctantMap = function () { this.manager.removeAllFromOctantMap(this.modelKey) }, TC.prototype.clearMeshFromOctantMap = function () { this.manager.removeMeshFromOctantMap(this.modelKey) }, TC.prototype.getDatabagId = function () { return this.modelKey }, TC.prototype.getEncodedDatabagId = function () { return this.modelKey }, TC.prototype.getMaterialManager = function () { return this.materialManager }, TC.prototype.clearWireframeElementCount = function () { this.wireframeElementCount = void 0 }, TC.prototype.getWireframeElementCount = function () { if (void 0 !== this.wireframeElementCount) return this.wireframeElementCount; var A = this.getModelDescriptor().getAllNodeInfos(), e = this.manager.filter, t = 0; for (var i in A) { var o = A[i]; e._hasRenderWithBoardlineFilter() && !e._isRenderWithBoardline(o[0]) || (t += o.length) } return this.wireframeElementCount = t, t }, TC.prototype.isActivateWireframe = function () { return this.manager.isDrawingBoardlineEnabled() }, TC.prototype.isOnlyWireframe = function () { return this.manager.isOnlyWireframe() }, TC.prototype.getLoadedUserIdsObject = function () { return this._handler && this._handler.getLoadedUserIdsObject ? this._handler.getLoadedUserIdsObject() : null }, TC.prototype.clearNodeGroup = function () { var A = this._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); A.clear(), (A = this._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).clear(), (A = this._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 })).clear(), (A = this._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 })).clear() }, TC.prototype.getWireframeMaterial = function () { return this.wireframeManager.wireframeMaterial }, TC.prototype.getInstanceWireframeMaterial = function () { return this.wireframeManager.instanceWireframeMaterial }, TC.prototype.getMaterialByMaterialId = function (A) { return this.materialManager.materials[A] }, TC.prototype.adjustProgressPercentage = function (A, e, t) { this.progressPercentage.load = A, this.progressPercentage.collect = e, this.progressPercentage.merge = t }, TC.prototype.setReplacedUserIdMap = function (A) { this.replacedUserIdMap = uh.isOwnEmptyObject(A) ? null : A }, TC.prototype.hasReplacedUserId = function () { return !uh.isEmptyObject(this.replacedUserIdMap) }, TC.prototype.isReplacedUserId = function (A) { return this.replacedUserIdMap && this.replacedUserIdMap[A] }, TC.prototype.registerPlugin = function (A) { this.plugins.push(A) }, TC.prototype.disposeBufferAfterVbo = function () { var A = this._getHandler(); A && A.disposeBufferAfterVbo() }, TC.prototype.isHiddenUserId = function (A) { var e = this._getHandler(); return !!e && e.isHiddenNode(A) }, TC.prototype.hasHiddenUserId = function () { return this.manager.hasHiddenUserId() }, TC.prototype.isHiddenSourceObjectUserId = function (A) { return this.manager.isHiddenSourceObjectUserId(A) }, TC.prototype.hasHiddenSourceObjectUserId = function () { return this.manager.hasHiddenSourceObjectUserId() }, TC.prototype.getModelDescriptor = function () { return this._handler.loader.getDescriptor() }, TC.prototype.getLoader = function () { return this._handler.loader }, TC.prototype.getConfig = function () { return this.configLoader.getConfig() }, TC.prototype.getTransforms = function () { return this.configLoader.getTransforms() }, TC.prototype.getStatistics = function () { return this.configLoader.getStatistics() }, TC.prototype.setRenderableCount = function (A) { this.configLoader.setRenderableCount(A), this._handler && this._handler.clearPriorityNodesSet && this._handler.clearPriorityNodesSet(!0) }, TC.prototype.getRenderableCount = function () { return this.configLoader.getStatistics().renderableCount }, TC.prototype.getBoundingBoxWorld = function () { return this.configLoader.getTransforms().boundingBox }, TC.prototype.calculateBoundingBox = function () { var A = this.getModelDescriptor().getAllNodeInfos(), e = new aA; for (var t in A) for (var i = A[t], o = 0, n = i.length; n > o; o += 1) { var r = i[o]; r.boundingBox && e.union(r.boundingBox) } var a = this.getModelMatrix(); a && e.applyMatrix4(a), this.configLoader.getTransforms().boundingBox.copy(e) }, TC.prototype.calculateClippingIds = function () { var A = this._getHandler(); A && A.calculateClippingIds() }, TC.prototype.explode = function (A) { var e = this.getBoundingBoxWorld().getCenter(), t = this._getHandler(); t && t.explode(e, A) }, TC.prototype.formatLayerIds = function (A) { return this.getLayerProvider().formatLayerIds(A) }, TC.prototype.getBoundingBoxOfGeometries = function (A) { for (var e = !A, t = new aA, i = 0; A.length > i; i += 1) { var o = this.group.getObjectByProperty("guid", A[i]); if (o) { var n = o.geometry; if (n) { if (e || n) { n.boundingBox || n.computeBoundingBox(); var r = n.boundingBox; if (r) { var a = r.clone(); o.matrixWorld && a.applyMatrix4(o.matrixWorld), t.expandByPoint(a.min), t.expandByPoint(a.max) } } } else Bh.log("empty geometry!") } } return t }, TC.prototype.setModelMatrix = function (A) { this.group.matrix.copy(A), this.group.updateMatrixWorld(!0); var e = this.configLoader.transformInfos; e && e.boundingBox && (e.transformMatrix.copy(A), e.originalBoundingBox ? this.calculateBoundingBox() : (e.originalBoundingBox = e.boundingBox.clone(), e.boundingBox.applyMatrix4(A))), this.manager.updateSceneBoundingBox() }, TC.prototype.applyModelMatrix = function (A) { var e = this.configLoader.transformInfos; e && e.boundingBox && (e.transformMatrix.premultiply(A), e.originalBoundingBox || (e.originalBoundingBox = e.boundingBox.clone()), e.boundingBox.applyMatrix4(A)), this.group.matrix.copy(e.transformMatrix), this.group.updateMatrixWorld(!0), this.manager.updateSceneBoundingBox() }, TC.prototype.getModelMatrix = function () { var A = null; return this.group.matrix && (A = this.group.matrix.clone()), A }, TC.prototype.resetModelMatrix = function () { var A = this.configLoader.transformInfos.originalMatrix; A && this.setModelMatrix(A) }, TC.prototype.overturnYAndZaxis = function () { var A = (new M).makeRotationFromEuler(new F(Math.PI / 2, 0, 0)); this.group.matrix && (A.multiply(this.group.matrix), this.setModelMatrix(A)) }, TC.prototype.hasComponent = function (A) { return !!this.getModelDescriptor().getNodeInfosByUserId(A) }, TC.prototype.getComponentInfo = function (A) { return this.getModelDescriptor().getNodeInfosByComponentKey(A) }, TC.prototype.getComponentlist = function () { var A = [], e = this.getModelDescriptor(); for (var t in e.mapNodeInfoByComponentKey) e.mapNodeInfoByComponentKey.hasOwnProperty(t) && A.push(t); return A }, TC.prototype.addMeshToInfoMap = function (A, e, t, i, o) { this.getModelDescriptor().addMeshToInfoMap(A, e, t, i, o) }, TC.prototype.loadGeopkOnDemand = function (A, e, t) { this._handler && "layer" === this._handler.tag && this._handler.loadGeopkOnDemand(A, e, t) }, TC.prototype.unloadGeopkOnDemand = function (A, e) { this._handler && "layer" === this._handler.tag && this._handler.unloadComponents(A, e) }, TC.prototype.loadAllGeosOnDemand = function (A, e, t) { this._handler && "layer" === this._handler.tag && this._handler.loadAllGeosOnDemand(A, e, t) }, TC.prototype.getUnionBoundingBoxOnDemand = function () { return this.getLayerProvider().getUnionBoundingBoxOnDemand() }, TC.prototype.setConditionsChangedOnDemand = function (A) { this.getLayerProvider().setConditionsChanged(A) }, TC.prototype.explosion = function (A) { var e = this._getHandler(); Bh.time("模型离散用时"), e && (this.explosioning = !0, e.explosion(A)), Bh.timeEnd("模型离散用时"), this.calculateBoundingBox() }, TC.prototype.closeExplosion = function () { Bh.time("取消模型离散用时"); var A = this._getHandler(); A && (A.closeExplosion(), this.explosioning = !1), Bh.timeEnd("取消模型离散用时") }, TC.prototype.componentsExplosion = function (A) { var e = this._getHandler(); if (1 === (A.coefficientX || 1) && 1 === (A.coefficientY || 1) && 1 === (A.coefficientZ || 1) && 0 === (A.offsetX || 0) && 0 === (A.offsetY || 0) && 0 === (A.offsetZ || 0)) return this.explosioning = !1, this.closeComponentsExplosion(A.componentKey), void this.calculateBoundingBox(); Bh.time("构件离散用时"), e && (this.explosioning = !0, e.componentsExplosion(A), this.calculateBoundingBox()), Bh.timeEnd("构件离散用时") }, TC.prototype.closeComponentsExplosion = function (A) { Bh.time("取消构件离散用时"); var e = this._getHandler(); e && (e.closeComponentsExplosion(A), this.explosioning = !1), Bh.timeEnd("取消构件离散用时") }, TC.prototype.floorExplosion = function (A) { if (this.floorManager) { var e = this.floorManager.floorExplosionInfo; this.explosioning = !0; var t = this._getHandler(); if (!t) return !1; if (!e.sortedFloors) { for (var i = [], o = 0, n = e.floors.length; n > o; o += 1) { var r = e.floors[o], a = this.manager.getBoundingBoxByIds(r.componentkeys); if (!a.isEmpty()) { r.box = a; var s = new y; r.box.getCenter(s), r.center = s, i.push(r) } } i.sort((function (A, e) { return A.center.z - e.center.z })), e.sortedFloors = i; for (var l = 0, c = 1 / 0, h = 0, d = 0, p = i.length; p > d; d += 1) { var g = Math.abs(i[d].center.z); c > g && (l = d, c = g); var u = new y; i[d].box.getSize(u), h += u.z } e.baseFloorIndex = l, e.averageHeight = h / i.length; var f = i[l].center.toArray(); e.center = f } for (var m = (A - 1) * e.averageHeight, C = 0, v = e.sortedFloors.length; v > C; C += 1) { if (C !== e.baseFloorIndex) t.componentsExplosion({ offsetZ: (C - e.baseFloorIndex) * m, componentKey: e.sortedFloors[C].componentkeys, center: e.center }) } return this.calculateBoundingBox(), !0 } return !1 }, TC.prototype.closeFloorExplosion = function () { if (this.floorManager) { var A = this.floorManager.floorExplosionInfo; if (A && A.sortedFloors) { var e = this._getHandler(); if (e) { for (var t = 0, i = A.sortedFloors.length; i > t; t += 1) { e.closeComponentsExplosion(A.sortedFloors[t].componentkeys) } this.calculateBoundingBox(), this.explosioning = !1 } } } }, TC.prototype.showModel = function (A) { this.nodes.visible = A }, TC.prototype.updateMaterials = function () { var A = this.materials; for (var e in A) if (A.hasOwnProperty(e)) { var t = A[e]; t.IBLMaps = this.manager.scene.IBLMaps, t.refreshUniforms() } }, TC.prototype.updateMaterialsValue = function (A, e) { var t = this.materials; for (var i in t) if (t.hasOwnProperty(i)) { var o = t[i]; o.hasOwnProperty(A) && (o[A] = e, o.refreshUniforms(), o.needsUpdate = !0) } }, TC.prototype.changeAllMaterials = function (A) { var e = this.materials; for (var t in e) if (e.hasOwnProperty(t)) { var i = Kd.getMaterialParameters(e[t]), o = null; A ? (delete i.textureColor, delete i.pureColor, delete i.imageFade, i.lights = !0, (o = new QC.IBLMaterial(i)).type = "IBL", o.refreshUniforms()) : (delete i.iblProbe, (o = Kd.createStandardMaterial(i)).roughness = i.originRoughness, o.metalness = i.originMetalness, o.refreshUniforms()), o.name = t, e[t] = o, i = null } }, TC.prototype.getAllComponents = function () { return this.getComponentlist() }, TC.prototype.getComponentKeysByTypeFromList = function (A, e) { for (var t = this.getModelDescriptor(), i = [], o = 0; A.length > o; o += 1) t.mapNodeInfoByComponentKey.hasOwnProperty(A[o]) && t.mapNodeInfoByComponentKey[A[o]][0].type === e && i.push(A[o]); return i }, TC.prototype.getComponentKeysByType = function (A) { var e = this.getModelDescriptor(), t = []; for (var i in e.mapNodeInfoByComponentKey) e.mapNodeInfoByComponentKey.hasOwnProperty(i) && e.mapNodeInfoByComponentKey[i][0].type === A && t.push(i); return t }, TC.prototype.getAllComponentKeyType = function () { var A = {}, e = [], t = this.getModelDescriptor(); for (var i in t.mapNodeInfoByComponentKey) if (t.mapNodeInfoByComponentKey.hasOwnProperty(i)) { var o = t.mapNodeInfoByComponentKey[i][0].type; A[o] || (A[o] = !0, e.push(o)) } return e }, TC.prototype.getComponentKeysByName = function (A) { var e = this.getModelDescriptor(), t = []; for (var i in e.mapNodeInfoByComponentKey) e.mapNodeInfoByComponentKey.hasOwnProperty(i) && e.mapNodeInfoByComponentKey[i][0].name === A && t.push(i); return t }, TC.prototype.getComponentKeysByProperty = function (A, e) { var t = this.getModelDescriptor(), i = []; for (var o in t.mapNodeInfoByComponentKey) t.mapNodeInfoByComponentKey.hasOwnProperty(o) && t.mapNodeInfoByComponentKey[o][0][A] === e && i.push(o); return i }, TC.prototype._getLayerHandler = function () { return this._layerHandler }, TC.prototype.prepareData = function () { var A = this; this.materialManager._updateTextureMapping(), this.materialManager._updateIBL(this); var e = this._getHandler(); e && e.prepareData((function () { A.loaded = !0, A.hasAnimation && vc.EnableAnimation && A.createPanel(), A.debut(A) })) }, TC.prototype.isUserIdExist = function (A) { return !!this.getModelDescriptor().getNodeInfosByUserId(A) }, TC.prototype.getNodeInfosByUserId = function (A) { return this.getModelDescriptor().getNodeInfosByUserId(A) }, TC.prototype.getNodeInfos = function () { return this.getModelDescriptor().getNodeInfosWithUserId() }, TC.prototype.getFilter = function () { return this.manager.filter }, TC.prototype.getOctreeRoots = function (A) { this.getModelDescriptor().getOctreeRoots(A) }, TC.prototype.getPickingMeshes = function (A, e, t, i) { this._dealNonInstancedNodesForPicking(A, e, t, i), this._dealInstancedNodesForPicking(A, e, t, i), this._dealPluginNodesForPicking(A, e, t, i) }, TC.prototype._dealNonInstancedNodesForPicking = function (A, e, t, i) { if (this._handler) { var o = this._handler.defaultManager; if (o.hasNodeInfo(this)) { var n = o.getMeshManager().getPickingNodeGenerator().updatePickingMeshes(A.selectedMaterial, t, i); n && e.meshes.push(n); var r = o.getWireFrameManager().getPickingNodeGenerator().updatePickingMeshes(A.wireframeMaterial, t, i); r && e.meshes.push(r) } } }, TC.prototype._dealInstancedNodesForPicking = function (A, e, t, i) { if (this._handler) { var o = this._handler.instancedManager; if (o.hasNodeInfo(this)) { var n = o.getMeshManager().getPickingNodeGenerator().updatePickingMeshes(A.instancedSelectedMaterial, t, i); n && e.meshes.push(n); var r = o.getWireFrameManager().getPickingNodeGenerator().updatePickingMeshes(A.instancedWireFrameMaterial, t, i); r && e.meshes.push(r) } } }, TC.prototype._dealPluginNodesForPicking = function (A, e, t, i) { if (this._handler) for (var o = this.plugins, n = 0, r = o.length; r > n; n += 1) { var a = o[n].getPickingNodeGenerator().updatePickingMeshes(A.selectedMaterial, t, i); a && e.meshes.push(a) } }, TC.prototype.onWSWorkerMessage = function () {}, TC.prototype.onPDWorkerMessage = function () {}, TC.prototype._overrideOcclusionMaterial = function (A) { var e = A.material; if (e && !1 === e.transparent) { var t = this.manager.acquireMaterial(), i = t.material; e.color ? i.color.copy(e.color) : t.resetColor(), i.opacity = vc.OcclusionOpacity, A.material = i, A.material.needsUpdate = !0 } }, TC.prototype.showSkeleton = function (A) { this.skeleton.visible = A }, TC.prototype.deactivateAllActions = function () { this.needUpdate = !1, this.actions.forEach((function (A) { A.stop() })) }, TC.prototype.activateAllActions = function () { this.needUpdate = !0; for (var A = 0; this.actions.length > A; A += 1) this.setWeight(this.actions[A], 0 === A ? 1 : 0); this.actions.forEach((function (A) { A.play() })) }, TC.prototype.pauseAllActions = function () { this.needUpdate = !1, this.actions.forEach((function (A) { A.paused = !0 })) }, TC.prototype.toSingleStepMode = function () { this.unPauseAllActions(), this.singleStepMode = !0, this.sizeOfNextStep = this.settings["调整步长"] }, TC.prototype.pauseContinue = function () { this.singleStepMode ? (this.singleStepMode = !1, this.unPauseAllActions()) : this.paused ? (this.paused = !1, this.unPauseAllActions()) : (this.paused = !0, this.pauseAllActions()) }, TC.prototype.unPauseAllActions = function () { this.needUpdate = !0, this.actions.forEach((function (A) { A.paused = !1 })) }, TC.prototype.setWeight = function (A, e) { A.enabled = !0, A.setEffectiveTimeScale(1), A.setEffectiveWeight(e) }, TC.prototype.modifyTimeScale = function (A) { this.mixer.timeScale = A }, TC.prototype.createPanel = function () { var A = this, e = new $m({ width: 300 }).addFolder(this.modelKey), t = e.addFolder("可见性"), i = e.addFolder("激活/失活"), o = e.addFolder("暂停/步进"), n = e.addFolder("混合权重"), r = e.addFolder("综合速度"); this.settings = { "显示模型": !0, "显示骨骼": !1, "关闭全部动画": this.deactivateAllActions.bind(A), "激活所有动画": this.activateAllActions.bind(A), "暂停/继续": this.pauseContinue.bind(A), "单步动画": this.toSingleStepMode.bind(A), "调整步长": .05, "使用默认持续时间": !0, "设置自定义持续时间": 3.5, "modify idle weight": 0, "modify walk weight": 1, "modify run weight": 0, "修改时间尺度": 1 }; var a = this.settings; t.add(a, "显示模型").onChange(this.showModel.bind(A)), t.add(a, "显示骨骼").onChange(this.showSkeleton.bind(A)), i.add(a, "关闭全部动画"), i.add(a, "激活所有动画"), o.add(a, "暂停/继续"), o.add(a, "单步动画"), o.add(a, "调整步长", .01, .1, .001); for (var s = this.actions, l = function (e) { var t = s[e]._clip.name; a[t] = 0 === e ? 1 : 0, n.add(a, t, 0, 1, .01).listen().onChange((function (t) { A.setWeight(s[e], t) })) }, c = 0; s.length > c; c += 1) l(c); r.add(a, "修改时间尺度", 0, 10, .01).onChange(this.modifyTimeScale.bind(A)), t.open(), i.open(), o.open(), n.open(), r.open() }, TC.prototype.getTransformGroup = function () { return this.transformGroup || (this.transformGroup = this.manager.scene.getOrCreateGroup(gp.TRANSFORM), this.group.add(this.transformGroup), this.transformGroup.updateMatrixWorld(!0)), this.transformGroup }, TC.prototype.getComponentKeysBySubmodelKey = function (A) { return this.submodel[A] || [] }, TC.prototype.getTrianglesCount = function () { var A = 0, e = 0, t = 0, i = 0, o = {}; return this.group.traverse((function (n) { if (n.isMesh) { var r = n.geometry, a = r.getAttribute("position").count, s = r.index.count / 3, l = r.getAttribute("vState"); o[r.id] || (t += a, i += s, o[r.id] = !0), l && (a *= l.count, s *= l.count), A += a, e += s } })), o = null, { positionsCount: A, trianglesCount: e, realPositionCount: t, realTrianglesCount: i } }, TC.prototype.addLights = function (A) { this.lightGroup = this.lightGroup || new Xi, this.group.add(this.lightGroup), this.lightGroup.visible = !1; for (var e = 0, t = A.length; t > e; e += 1) this.lightGroup.add(A[e]), A[e].updateMatrixWorld() }, TC.prototype.hasLights = function () { return this.lightGroup && this.lightGroup.children.length > 0 }, TC.prototype.enabledLights = function () { this.lightGroup.visible = !0 }, TC.prototype.disabledLights = function () { this.lightGroup.visible = !1 }, Object.defineProperties(TC.prototype, { modelConfig: { get: function () { return Bh.warn("EIMMODEL.Model: .modelConfig 现在为 .getConfig()"), this.getConfig() }, set: function (A) { this.setConfig(A) } }, loader: { get: function () { return this._getHandler().loader } } }); var kC = { getBoxFromTileBoundingVolumeBox: function (A) { var e = new aA, t = (new y).fromArray(A, 0), i = new y; return i.fromArray(A, 3), i.add(t), e.expandByPoint(i), i.fromArray(A, 6), i.add(t), e.expandByPoint(i), i.fromArray(A, 9), i.add(t), e.expandByPoint(i), e }, getSphereFromTileBoundingVolumeSphere: function (A) { return new cA((new y).fromArray(A, 0), A[3] || 0) }, getTransfrom: function (A) { return Array.isArray(A) ? (new M).fromArray(A) : new M }, getSSE: function (A) { var e = this.getBoxByComponentsKey(A), t = this.viewerImpl.camera, i = e.getCenter(new y), o = e.getSize().length(), n = this.viewerImpl.getRenderer().domElement.width, r = t.fov; return o * n / (2 * t.position.clone().sub(i).length() * Math.tan(r / 2)) } }, DC = function (A) { bC.call(this, A) }; function LC(A, e, t) { if (0 > e) throw new Error("byteOffset cannot be negative."); if (0 > t) throw new Error("byteLength cannot be negative."); if (e + t > A.byteLength) throw new Error("sub-region exceeds array bounds."); return A = A.subarray(e = e || 0, e + (t = t || A.byteLength - e)), LC.decode(A) } function NC(A, e, t) { return A >= e && t >= A } (DC.prototype = Object.create(bC.prototype)).load = function (A) { var e = this, t = this.model, i = t.dataUrl; _d({ type: "GET", url: i.rootTilesUrl(), headers: { Authorization: t.accessToken }, success: function (o) { var n = {}; if ("string" == typeof o) try { n = JSON.parse(o) } catch (A) { return t.setEmptyScene(!0), void t.dispatchEventEx({ type: Rc.ON_LOAD_INVALID_SCENE, modelKey: t.modelKey }) } else n = o; if (n) { if (vc.offLine) e.model.getStorage().put(i.projectUrl(), n, e.model.modelKey, (function () {}), (function () {})); e._parse(n), t.dispatchEventEx({ type: Rc.ON_LOAD_CONFIG_FINISH, modelKey: t.modelKey }), A && A() } else Bh.log(t.modelKey, "config load error! ", n.message), t.dispatchEventEx({ type: Rc.ON_LOAD_ERROR, modelKey: t.modelKey, code: n.code, message: n.message }) }, error: function (A, e) { switch (A) { case 401: t.dispatchEventEx({ type: Rc.ACCOUNT_NO_EXIST, modelKey: t.modelKey, data: e }); break; case 403: t.dispatchEventEx({ type: Rc.NO_PERMISSION, modelKey: t.modelKey, data: e }); break; default: t.dispatchEventEx({ type: Rc.ON_NETWORK_ERROR, modelKey: t.modelKey, data: A }) } } }) }, DC.prototype._parse = function (A) { this.config = A, A.lengthUnit && (this.model.originalLengthUnit = A.lengthUnit || "m"), this._toStatistics(A), this._setTransformInfos(A), this._chooseRendering(A) }, DC.prototype._setTransformInfos = function (A) { this.model.hasAnimation = !1, this.transformInfos.octreeTransformed = !1, this.transformInfos.boundingBox && this.transformInfos.boundingBox.isBox3 || (this.transformInfos.boundingBox = kC.getBoxFromTileBoundingVolumeBox(A.root.boundingVolume.box)), this.transformInfos.transformMatrix.compose(this.transformInfos.position, this.transformInfos.rotation, this.transformInfos.scale), this.transformInfos.transformMatrix.fromArray(A.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), this.model.setModelMatrix(this.transformInfos.transformMatrix), this.model.manager.updateScene() }, LC.decodeWithTextDecoder = function (A) { return new TextDecoder("utf-8").decode(A) }, LC.decodeWithFromCharCode = function (A) { for (var e = "", t = function (A) { for (var e = 0, t = 0, i = 0, o = 128, n = 191, r = [], a = A.length, s = 0; a > s; s += 1) { var l = A[s]; if (0 === i) { if (NC(l, 0, 127)) { r.push(l); continue } if (NC(l, 194, 223)) { i = 1, e = 31 & l; continue } if (NC(l, 224, 239)) { 224 === l && (o = 160), 237 === l && (n = 159), i = 2, e = 15 & l; continue } if (NC(l, 240, 244)) { 240 === l && (o = 144), 244 === l && (n = 143), i = 3, e = 7 & l; continue } throw new Error("String decoding failed.") } NC(l, o, n) ? (o = 128, n = 191, e = e << 6 | 63 & l, (t += 1) === i && (r.push(e), e = i = t = 0)) : (e = i = t = 0, o = 128, n = 191, s -= 1) } return r }(A), i = t.length, o = 0; i > o; o += 1) { var n = t[o]; n > 65535 ? (n -= 65536, e += String.fromCharCode(55296 + (n >> 10), 56320 + (1023 & n))) : e += String.fromCharCode(n) } return e }, LC.decode = "undefined" != typeof TextDecoder ? LC.decodeWithTextDecoder : LC.decodeWithFromCharCode; var OC = function () { function A(A) { Yr.call(this, A), this.dracoLoader = null, this.ddsLoader = null } function e() { var A = {}; return { get: function (e) { return A[e] }, add: function (e, t) { A[e] = t }, remove: function (e) { delete A[e] }, removeAll: function () { A = {} } } } A.prototype = Object.assign(Object.create(Yr.prototype), { constructor: A, load: function (A, e, t, i) { var o, n = this; o = "" !== this.resourcePath ? this.resourcePath : "" !== this.path ? this.path : La.extractUrlBase(A), n.manager.itemStart(A); var r = function (e) { i ? i(e) : console.error(e), n.manager.itemError(A), n.manager.itemEnd(A) }, a = new bu(n.manager); a.setPath(this.path), a.setResponseType("arraybuffer"), "use-credentials" === n.crossOrigin && a.setWithCredentials(!0), a.load(A, (function (t) { try { n.parse(t, o, (function (t) { e(t), n.manager.itemEnd(A) }), r) } catch (A) { r(A) } }), t, r) }, setDRACOLoader: function (A) { return this.dracoLoader = A, this }, setDDSLoader: function (A) { return this.ddsLoader = A, this }, parse: function (A, e, a, s) { var l, c = {}; if ("string" == typeof A) l = A; else { var g = La.decodeText(new Uint8Array(A, 0, 4)); if (g === r) { try { c[t.KHR_BINARY_GLTF] = new h(A) } catch (A) { return void(s && s(A)) } l = c[t.KHR_BINARY_GLTF].content } else if ("b3dm" === g) { try { c[t.KHR_BINARY_GLTF] = new h(function (A) { var e = 0; e = 0; var t = Uint32Array.BYTES_PER_ELEMENT, i = new Uint8Array(A), o = new DataView(A), n = o.getUint32(e += t, !0); if (1 !== n) throw new Error("Only Batched 3D Model version 1 is supported. Version " + n + " is not."); var r, a = o.getUint32(e += t, !0), s = o.getUint32(e += t, !0), l = o.getUint32(e += t, !0), c = o.getUint32(e += t, !0), h = o.getUint32(e += t, !0); if (e += t, 570425344 > c ? 570425344 > h || (e -= t, r = c, c = s, h = l, s = 0, l = 0) : (e -= 2 * t, r = s, c = l, h = 0, s = 0, l = 0), 0 === s) ({ BATCH_LENGTH: r || 0 }); else { var d = LC(i, e, s); JSON.parse(d), e += s } if (e += l, c > 0) { var p = LC(i, e, c); JSON.parse(p), e += c, h > 0 && (e += h) } var g = 0 + a - e; if (0 === g) throw new Error("glTF byte length must be greater than 0."); var u = null; return e % 4 == 0 ? (new Uint8Array(A, e, g), u = A.slice(e)) : (new Uint8Array(i.subarray(e, e + g)), u = A.slice(e)), u }(A)) } catch (A) { return void(s && s(A)) } l = c[t.KHR_BINARY_GLTF].content } else l = La.decodeText(new Uint8Array(A)) } var m = JSON.parse(l); if (void 0 === m.asset || m.asset.version[0] < 2) s && s(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")); else { if (m.extensionsUsed) for (var C = 0; m.extensionsUsed.length > C; ++C) { var y = m.extensionsUsed[C], v = m.extensionsRequired || []; switch (y) { case t.KHR_LIGHTS_PUNCTUAL: c[y] = new o(m); break; case t.KHR_MATERIALS_UNLIT: c[y] = new n; break; case t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: c[y] = new u; break; case t.KHR_DRACO_MESH_COMPRESSION: c[y] = new d(m, this.dracoLoader); break; case t.MSFT_TEXTURE_DDS: c[y] = new i(this.ddsLoader); break; case t.KHR_TEXTURE_TRANSFORM: c[y] = new p; break; case t.KHR_MESH_QUANTIZATION: c[y] = new f; break; default: 0 > v.indexOf(y) || console.warn('THREE.GLTFLoader: Unknown extension "' + y + '".') } } new q(m, c, { path: e || this.resourcePath || "", crossOrigin: this.crossOrigin, manager: this.manager }).parse(a, s) } } }); var t = { KHR_BINARY_GLTF: "KHR_binary_glTF", KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression", KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual", KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: "KHR_materials_pbrSpecularGlossiness", KHR_MATERIALS_UNLIT: "KHR_materials_unlit", KHR_TEXTURE_TRANSFORM: "KHR_texture_transform", KHR_MESH_QUANTIZATION: "KHR_mesh_quantization", MSFT_TEXTURE_DDS: "MSFT_texture_dds" }; function i(A) { if (!A) throw new Error("THREE.GLTFLoader: Attempting to load .dds texture without importing DDSLoader"); this.name = t.MSFT_TEXTURE_DDS, this.ddsLoader = A } function o(A) { this.name = t.KHR_LIGHTS_PUNCTUAL, this.lightDefs = (A.extensions && A.extensions[t.KHR_LIGHTS_PUNCTUAL] || {}).lights || [] } function n() { this.name = t.KHR_MATERIALS_UNLIT } o.prototype.loadLight = function (A) { var e, t = this.lightDefs[A], i = new LA(16777215); void 0 !== t.color && i.fromArray(t.color); var o = void 0 !== t.range ? t.range : 0; switch (t.type) { case "directional": (e = new Ra(i)).target.position.set(0, 0, -1), e.add(e.target); break; case "point": (e = new Fa(i)).distance = o; break; case "spot": (e = new ba(i)).distance = o, t.spot = t.spot || {}, t.spot.innerConeAngle = void 0 !== t.spot.innerConeAngle ? t.spot.innerConeAngle : 0, t.spot.outerConeAngle = void 0 !== t.spot.outerConeAngle ? t.spot.outerConeAngle : Math.PI / 4, e.angle = t.spot.outerConeAngle, e.penumbra = 1 - t.spot.innerConeAngle / t.spot.outerConeAngle, e.target.position.set(0, 0, -1), e.add(e.target); break; default: throw new Error('THREE.GLTFLoader: Unexpected light type, "' + t.type + '".') } return e.position.set(0, 0, 0), e.decay = 2, void 0 !== t.intensity && (e.intensity = t.intensity), e.name = t.name || "light_" + A, Promise.resolve(e) }, n.prototype.getMaterialType = function () { return jA }, n.prototype.extendParams = function (A, e, t) { var i = []; A.color = new LA(1, 1, 1), A.opacity = 1; var o = e.pbrMetallicRoughness; if (o) { if (Array.isArray(o.baseColorFactor)) { var n = o.baseColorFactor; A.color.fromArray(n), A.opacity = n[3] } void 0 !== o.baseColorTexture && i.push(t.assignTexture(A, "map", o.baseColorTexture)) } return Promise.all(i) }; var r = "glTF", l = 1313821514, c = 5130562; function h(A) { this.name = t.KHR_BINARY_GLTF, this.content = null, this.body = null; var e = new DataView(A, 0, 12); if (this.header = { magic: La.decodeText(new Uint8Array(A.slice(0, 4))), version: e.getUint32(4, !0), length: e.getUint32(8, !0) }, this.header.magic !== r) throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header."); if (2 > this.header.version) throw new Error("THREE.GLTFLoader: Legacy binary file detected."); for (var i = new DataView(A, 12), o = 0; i.byteLength > o;) { var n = i.getUint32(o, !0), a = i.getUint32(o += 4, !0); if (o += 4, a === l) { var s = new Uint8Array(A, 12 + o, n); this.content = La.decodeText(s) } else if (a === c) { var h = 12 + o; this.body = A.slice(h, h + n) } o += n } if (null === this.content) throw new Error("THREE.GLTFLoader: JSON content not found.") } function d(A, e) { if (!e) throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided."); this.name = t.KHR_DRACO_MESH_COMPRESSION, this.json = A, this.dracoLoader = e, this.dracoLoader.preload() } function p() { this.name = t.KHR_TEXTURE_TRANSFORM } function g(A) { yr.call(this), this.isGLTFSpecularGlossinessMaterial = !0; var e = ["#ifdef USE_SPECULARMAP", "\tuniform sampler2D specularMap;", "#endif"].join("\n"), t = ["#ifdef USE_GLOSSINESSMAP", "\tuniform sampler2D glossinessMap;", "#endif"].join("\n"), i = ["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"), o = ["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"), n = ["PhysicalMaterial material;", "material.diffuseColor = diffuseColor.rgb;", "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.rgb;"].join("\n"), r = { specular: { value: (new LA).setHex(16777215) }, glossiness: { value: 1 }, specularMap: { value: null }, glossinessMap: { value: null } }; this._extraUniforms = r, this.onBeforeCompile = function (A) { for (var a in r) A.uniforms[a] = r[a]; A.fragmentShader = A.fragmentShader.replace("uniform float roughness;", "uniform vec3 specular;"), A.fragmentShader = A.fragmentShader.replace("uniform float metalness;", "uniform float glossiness;"), A.fragmentShader = A.fragmentShader.replace("#include ", e), A.fragmentShader = A.fragmentShader.replace("#include ", t), A.fragmentShader = A.fragmentShader.replace("#include ", i), A.fragmentShader = A.fragmentShader.replace("#include ", o), A.fragmentShader = A.fragmentShader.replace("#include ", n) }, Object.defineProperties(this, { specular: { get: function () { return r.specular.value }, set: function (A) { r.specular.value = A } }, specularMap: { get: function () { return r.specularMap.value }, set: function (A) { r.specularMap.value = A } }, glossiness: { get: function () { return r.glossiness.value }, set: function (A) { r.glossiness.value = A } }, glossinessMap: { get: function () { return r.glossinessMap.value }, set: function (A) { r.glossinessMap.value = A, A ? (this.defines.USE_GLOSSINESSMAP = "", this.defines.USE_ROUGHNESSMAP = "") : (delete this.defines.USE_ROUGHNESSMAP, delete this.defines.USE_GLOSSINESSMAP) } } }), delete this.metalness, delete this.roughness, delete this.metalnessMap, delete this.roughnessMap, this.setValues(A) } function u() { return { name: t.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 g }, extendParams: function (A, e, t) { var i = e.extensions[this.name]; A.color = new LA(1, 1, 1), A.opacity = 1; var o = []; if (Array.isArray(i.diffuseFactor)) { var n = i.diffuseFactor; A.color.fromArray(n), A.opacity = n[3] } if (void 0 !== i.diffuseTexture && o.push(t.assignTexture(A, "map", i.diffuseTexture)), A.emissive = new LA(0, 0, 0), A.glossiness = void 0 !== i.glossinessFactor ? i.glossinessFactor : 1, A.specular = new LA(1, 1, 1), Array.isArray(i.specularFactor) && A.specular.fromArray(i.specularFactor), void 0 !== i.specularGlossinessTexture) { var r = i.specularGlossinessTexture; o.push(t.assignTexture(A, "glossinessMap", r)), o.push(t.assignTexture(A, "specularMap", r)) } return Promise.all(o) }, createMaterial: function (A) { var e = new g(A); return e.fog = !0, e.color = A.color, e.map = void 0 === A.map ? null : A.map, e.lightMap = null, e.lightMapIntensity = 1, e.aoMap = void 0 === A.aoMap ? null : A.aoMap, e.aoMapIntensity = 1, e.emissive = A.emissive, e.emissiveIntensity = 1, e.emissiveMap = void 0 === A.emissiveMap ? null : A.emissiveMap, e.bumpMap = void 0 === A.bumpMap ? null : A.bumpMap, e.bumpScale = 1, e.normalMap = void 0 === A.normalMap ? null : A.normalMap, e.normalMapType = 0, A.normalScale && (e.normalScale = A.normalScale), e.displacementMap = null, e.displacementScale = 1, e.displacementBias = 0, e.specularMap = void 0 === A.specularMap ? null : A.specularMap, e.specular = A.specular, e.glossinessMap = void 0 === A.glossinessMap ? null : A.glossinessMap, e.glossiness = A.glossiness, e.alphaMap = null, e.envMap = void 0 === A.envMap ? null : A.envMap, e.envMapIntensity = 1, e.refractionRatio = .98, e } } } function f() { this.name = t.KHR_MESH_QUANTIZATION } function m(A, e, t, i) { Ur.call(this, A, e, t, i) } d.prototype.decodePrimitive = function (A, e) { var t = this.json, i = this.dracoLoader, o = A.extensions[this.name].bufferView, n = A.extensions[this.name].attributes, r = {}, a = {}, s = {}; for (var l in n) { var c = K[l] || l.toLowerCase(); r[c] = n[l] } for (l in A.attributes) { c = K[l] || l.toLowerCase(); if (void 0 !== n[l]) { var h = t.accessors[A.attributes[l]]; s[c] = w[h.componentType], a[c] = !0 === h.normalized } } return e.getDependency("bufferView", o).then((function (A) { return new Promise((function (e) { i.decodeDracoFile(A, (function (A) { for (var t in A.attributes) { var i = a[t]; void 0 !== i && (A.attributes[t].normalized = i) } e(A) }), r, s) })) })) }, p.prototype.extendTexture = function (A, e) { return A = A.clone(), void 0 !== e.offset && A.offset.fromArray(e.offset), void 0 !== e.rotation && (A.rotation = e.rotation), void 0 !== e.scale && A.repeat.fromArray(e.scale), void 0 !== e.texCoord && console.warn('THREE.GLTFLoader: Custom UV sets in "' + this.name + '" extension not yet supported.'), A.needsUpdate = !0, A }, (g.prototype = Object.create(yr.prototype)).constructor = g, g.prototype.copy = function (A) { return yr.prototype.copy.call(this, A), this.specularMap = A.specularMap, this.specular.copy(A.specular), this.glossinessMap = A.glossinessMap, this.glossiness = A.glossiness, delete this.metalness, delete this.roughness, delete this.metalnessMap, delete this.roughnessMap, this }, (m.prototype = Object.create(Ur.prototype)).constructor = m, m.prototype.beforeStart_ = m.prototype.copySampleValue_ = function (A) { for (var e = this.resultBuffer, t = this.sampleValues, i = this.valueSize, o = A * i * 3 + i, n = 0; n !== i; n++) e[n] = t[o + n]; return e }, m.prototype.afterEnd_ = m.prototype.copySampleValue_, m.prototype.interpolate_ = function (A, e, t, i) { for (var o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, a = 2 * r, s = 3 * r, l = i - e, c = (t - e) / l, h = c * c, d = h * c, p = A * s, g = p - s, u = -2 * d + 3 * h, f = d - h, m = 1 - u, C = f - h + c, y = 0; y !== r; y++) { o[y] = m * n[g + y + r] + C * (n[g + y + a] * l) + u * n[p + y + r] + f * (n[p + y] * l) } return o }; var C = 0, v = 1, I = 2, E = 3, B = 4, x = 5, S = 6, w = { 5120: Int8Array, 5121: Uint8Array, 5122: Int16Array, 5123: Uint16Array, 5125: Uint32Array, 5126: Float32Array }, b = { 9728: 1003, 9729: 1006, 9984: 1004, 9985: 1007, 9986: 1005, 9987: 1008 }, U = { 33071: 1001, 33648: 1002, 10497: 1e3 }, F = { SCALAR: 1, VEC2: 2, VEC3: 3, VEC4: 4, MAT2: 4, MAT3: 9, MAT4: 16 }, K = { POSITION: "position", NORMAL: "normal", TANGENT: "tangent", TEXCOORD_0: "uv", TEXCOORD_1: "uv2", COLOR_0: "color", WEIGHTS_0: "skinWeight", JOINTS_0: "skinIndex" }, Q = { scale: "scale", translation: "position", rotation: "quaternion", weights: "morphTargetInfluences" }, R = { CUBICSPLINE: void 0, LINEAR: 2301, STEP: 2300 }, T = "OPAQUE", k = "MASK", D = "BLEND", L = { "image/png": 1023, "image/jpeg": 1022 }; function N(A, e) { return "string" != typeof A || "" === A ? "" : (/^https?:\/\//i.test(e) && /^\//.test(A) && (e = e.replace(/(^https?:\/\/[^\/]+).*/i, "$1")), /^(https?:)?\/\//i.test(A) || /^data:.*,.*$/i.test(A) || /^blob:.*$/i.test(A) ? A : e + A) } function O(A, e, t) { for (var i in t.extensions) void 0 === A[i] && (e.userData.gltfExtensions = e.userData.gltfExtensions || {}, e.userData.gltfExtensions[i] = t.extensions[i]) } function V(A, e) { void 0 !== e.extras && ("object" === lc(e.extras) ? Object.assign(A.userData, e.extras) : console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + e.extras)) } function G(A, e) { if (A.updateMorphTargets(), void 0 !== e.weights) for (var t = 0, i = e.weights.length; i > t; t++) A.morphTargetInfluences[t] = e.weights[t]; if (e.extras && Array.isArray(e.extras.targetNames)) { var o = e.extras.targetNames; if (A.morphTargetInfluences.length === o.length) { A.morphTargetDictionary = {}; for (t = 0, i = o.length; i > t; t++) A.morphTargetDictionary[o[t]] = t } else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.") } } function P(A) { for (var e = "", t = Object.keys(A).sort(), i = 0, o = t.length; o > i; i++) e += t[i] + ":" + A[t[i]] + ";"; return e } function q(A, t, i) { this.json = A || {}, this.extensions = t || {}, this.options = i || {}, this.cache = new e, this.primitiveCache = {}, this.textureLoader = new Aa(this.options.manager), this.textureLoader.setCrossOrigin(this.options.crossOrigin), this.fileLoader = new bu(this.options.manager), this.fileLoader.setResponseType("arraybuffer"), "use-credentials" === this.options.crossOrigin && this.fileLoader.setWithCredentials(!0) } function j(A, e, t) { var i = e.attributes, o = []; function n(e, i) { return t.getDependency("accessor", e).then((function (e) { A.setAttribute(i, e) })) } for (var r in i) { var a = K[r] || r.toLowerCase(); a in A.attributes || o.push(n(i[r], a)) } if (void 0 !== e.indices && !A.index) { var s = t.getDependency("accessor", e.indices).then((function (e) { A.setIndex(e) })); o.push(s) } return V(A, e), function (A, e, t) { var i = e.attributes, o = new aA; if (void 0 !== i.POSITION) { var n = (h = t.json.accessors[i.POSITION]).max; if (void 0 !== (d = h.min) && void 0 !== n) { o.set(new y(d[0], d[1], d[2]), new y(n[0], n[1], n[2])); var r = e.targets; if (void 0 !== r) for (var a = new y, s = 0, l = r.length; l > s; s++) { var c = r[s]; if (void 0 !== c.POSITION) { var h, d; n = (h = t.json.accessors[c.POSITION]).max; void 0 !== (d = h.min) && void 0 !== n ? (a.setX(Math.max(Math.abs(d[0]), Math.abs(n[0]))), a.setY(Math.max(Math.abs(d[1]), Math.abs(n[1]))), a.setZ(Math.max(Math.abs(d[2]), Math.abs(n[2]))), o.expandByVector(a)) : console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.") } } A.boundingBox = o; var p = new cA; o.getCenter(p.center), p.radius = o.min.distanceTo(o.max) / 2, A.boundingSphere = p } else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.") } }(A, e, t), Promise.all(o).then((function () { return void 0 !== e.targets ? function (A, e, t) { for (var i = !1, o = !1, n = 0, r = e.length; r > n; n++) { if (void 0 !== (l = e[n]).POSITION && (i = !0), void 0 !== l.NORMAL && (o = !0), i && o) break } if (!i && !o) return Promise.resolve(A); var a = [], s = []; for (n = 0, r = e.length; r > n; n++) { var l = e[n]; if (i) { var c = void 0 !== l.POSITION ? t.getDependency("accessor", l.POSITION) : A.attributes.position; a.push(c) } if (o) { c = void 0 !== l.NORMAL ? t.getDependency("accessor", l.NORMAL) : A.attributes.normal; s.push(c) } } return Promise.all([Promise.all(a), Promise.all(s)]).then((function (e) { var t = e[1]; return i && (A.morphAttributes.position = e[0]), o && (A.morphAttributes.normal = t), A.morphTargetsRelative = !0, A })) }(A, e.targets, t) : A })) } function Y(A, e) { var t = A.getIndex(); if (null === t) { var i = [], o = A.getAttribute("position"); if (void 0 === o) return console.error("THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."), A; for (var n = 0; o.count > n; n++) i.push(n); A.setIndex(i), t = A.getIndex() } var r = t.count - 2, a = []; if (2 === e) for (n = 1; r >= n; n++) a.push(t.getX(0)), a.push(t.getX(n)), a.push(t.getX(n + 1)); else for (n = 0; r > n; n++) n % 2 == 0 ? (a.push(t.getX(n)), a.push(t.getX(n + 1)), a.push(t.getX(n + 2))) : (a.push(t.getX(n + 2)), a.push(t.getX(n + 1)), a.push(t.getX(n))); a.length / 3 !== r && console.error("THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles."); var s = A.clone(); return s.setIndex(a), s } return q.prototype.parse = function (A, e) { var t = this, i = this.json, o = this.extensions; this.cache.removeAll(), this.markDefs(), Promise.all([this.getDependencies("scene"), this.getDependencies("animation"), this.getDependencies("camera")]).then((function (e) { var n = { scene: e[0][i.scene || 0], scenes: e[0], animations: e[1], cameras: e[2], asset: i.asset, parser: t, userData: {} }; O(o, n, i), V(n, i), A(n) })).catch(e) }, q.prototype.markDefs = function () { for (var A = this.json.nodes || [], e = this.json.skins || [], t = this.json.meshes || [], i = {}, o = {}, n = 0, r = e.length; r > n; n++) for (var a = e[n].joints, s = 0, l = a.length; l > s; s++) A[a[s]].isBone = !0; for (var c = 0, h = A.length; h > c; c++) { var d = A[c]; void 0 !== d.mesh && (void 0 === i[d.mesh] && (i[d.mesh] = o[d.mesh] = 0), i[d.mesh]++, void 0 !== d.skin && (t[d.mesh].isSkinnedMesh = !0)) } this.json.meshReferences = i, this.json.meshUses = o }, q.prototype.getDependency = function (A, e) { var i = A + ":" + e, o = this.cache.get(i); if (!o) { switch (A) { case "scene": o = this.loadScene(e); break; case "node": o = this.loadNode(e); break; case "mesh": o = this.loadMesh(e); break; case "accessor": o = this.loadAccessor(e); break; case "bufferView": o = this.loadBufferView(e); break; case "buffer": o = this.loadBuffer(e); break; case "material": o = this.loadMaterial(e); break; case "texture": o = this.loadTexture(e); break; case "skin": o = this.loadSkin(e); break; case "animation": o = this.loadAnimation(e); break; case "camera": o = this.loadCamera(e); break; case "light": o = this.extensions[t.KHR_LIGHTS_PUNCTUAL].loadLight(e); break; default: throw new Error("Unknown type: " + A) } this.cache.add(i, o) } return o }, q.prototype.getDependencies = function (A) { var e = this.cache.get(A); if (!e) { var t = this; e = Promise.all((this.json[A + ("mesh" === A ? "es" : "s")] || []).map((function (e, i) { return t.getDependency(A, i) }))), this.cache.add(A, e) } return e }, q.prototype.loadBuffer = function (A) { var e = this.json.buffers[A], i = this.fileLoader; if (e.type && "arraybuffer" !== e.type) throw new Error("THREE.GLTFLoader: " + e.type + " buffer type is not supported."); if (void 0 === e.uri && 0 === A) return Promise.resolve(this.extensions[t.KHR_BINARY_GLTF].body); var o = this.options; return new Promise((function (A, t) { i.load(N(e.uri, o.path), A, void 0, (function () { t(new Error('THREE.GLTFLoader: Failed to load buffer "' + e.uri + '".')) })) })) }, q.prototype.loadBufferView = function (A) { var e = this.json.bufferViews[A]; return this.getDependency("buffer", e.buffer).then((function (A) { var t = e.byteOffset || 0; return A.slice(t, t + (e.byteLength || 0)) })) }, q.prototype.loadAccessor = function (A) { var e = this, t = this.json, i = this.json.accessors[A]; if (void 0 === i.bufferView && void 0 === i.sparse) return Promise.resolve(null); var o = []; return o.push(void 0 !== i.bufferView ? this.getDependency("bufferView", i.bufferView) : null), void 0 !== i.sparse && (o.push(this.getDependency("bufferView", i.sparse.indices.bufferView)), o.push(this.getDependency("bufferView", i.sparse.values.bufferView))), Promise.all(o).then((function (A) { var o, n = A[0], r = F[i.type], a = w[i.componentType], s = a.BYTES_PER_ELEMENT, l = i.byteOffset || 0, c = void 0 !== i.bufferView ? t.bufferViews[i.bufferView].byteStride : void 0, h = !0 === i.normalized; if (c && c !== s * r) { var d = Math.floor(l / c), p = "InterleavedBuffer:" + i.bufferView + ":" + i.componentType + ":" + d + ":" + i.count, g = e.cache.get(p); g || (g = new to(new a(n, d * c, i.count * c / s), c / s), e.cache.add(p, g)), o = new no(g, r, l % c / s, h) } else o = new YA(null === n ? new a(i.count * r) : new a(n, l, i.count * r), r, h); if (void 0 !== i.sparse) { var u = i.sparse.values.byteOffset || 0, f = new(0, w[i.sparse.indices.componentType])(A[1], i.sparse.indices.byteOffset || 0, i.sparse.count * F.SCALAR), m = new a(A[2], u, i.sparse.count * r); null !== n && (o = new YA(o.array.slice(), o.itemSize, o.normalized)); for (var C = 0, y = f.length; y > C; C++) { var v = f[C]; if (o.setX(v, m[C * r]), 2 > r || o.setY(v, m[C * r + 1]), 3 > r || o.setZ(v, m[C * r + 2]), 4 > r || o.setW(v, m[C * r + 3]), r >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.") } } return o })) }, q.prototype.loadTexture = function (A) { var e, i = this, o = this.json, n = this.options, r = this.textureLoader, a = window.URL || window.webkitURL, s = o.textures[A], l = s.extensions || {}, c = (e = l[t.MSFT_TEXTURE_DDS] ? o.images[l[t.MSFT_TEXTURE_DDS].source] : o.images[s.source]).uri, h = !1; return void 0 !== e.bufferView && (c = i.getDependency("bufferView", e.bufferView).then((function (A) { h = !0; var t = new Blob([A], { type: e.mimeType }); return c = a.createObjectURL(t) }))), Promise.resolve(c).then((function (A) { var e = n.manager.getHandler(A); return e || (e = l[t.MSFT_TEXTURE_DDS] ? i.extensions[t.MSFT_TEXTURE_DDS].ddsLoader : r), new Promise((function (t, i) { e.load(N(A, n.path), t, void 0, i) })) })).then((function (A) { !0 === h && a.revokeObjectURL(c), A.flipY = !1, s.name && (A.name = s.name), e.mimeType in L && (A.format = L[e.mimeType]); var t = (o.samplers || {})[s.sampler] || {}; return A.magFilter = b[t.magFilter] || 1006, A.minFilter = b[t.minFilter] || 1008, A.wrapS = U[t.wrapS] || 1e3, A.wrapT = U[t.wrapT] || 1e3, A })) }, q.prototype.assignTexture = function (A, e, i) { var o = this; return this.getDependency("texture", i.index).then((function (n) { if (!n.isCompressedTexture) switch (e) { case "aoMap": case "emissiveMap": case "metalnessMap": case "normalMap": case "roughnessMap": n.format = 1022 } if (void 0 === i.texCoord || 0 == i.texCoord || "aoMap" === e && 1 == i.texCoord || console.warn("THREE.GLTFLoader: Custom UV set " + i.texCoord + " for texture " + e + " not yet supported."), o.extensions[t.KHR_TEXTURE_TRANSFORM]) { var r = void 0 !== i.extensions ? i.extensions[t.KHR_TEXTURE_TRANSFORM] : void 0; r && (n = o.extensions[t.KHR_TEXTURE_TRANSFORM].extendTexture(n, r)) } A[e] = n })) }, q.prototype.assignFinalMaterial = function (A) { var e = A.geometry, t = A.material, i = void 0 !== e.attributes.tangent, o = void 0 !== e.attributes.color, n = void 0 === e.attributes.normal, r = !0 === A.isSkinnedMesh, a = Object.keys(e.morphAttributes).length > 0, s = a && void 0 !== e.morphAttributes.normal; if (A.isPoints) { var l = this.cache.get(h = "PointsMaterial:" + t.uuid); l || (l = new Yo, qA.prototype.copy.call(l, t), l.color.copy(t.color), l.map = t.map, l.sizeAttenuation = !1, this.cache.add(h, l)), t = l } else if (A.isLine) { var c = this.cache.get(h = "LineBasicMaterial:" + t.uuid); c || (c = new ko, qA.prototype.copy.call(c, t), c.color.copy(t.color), this.cache.add(h, c)), t = c } if (i || o || n || r || a) { var h = "ClonedMaterial:" + t.uuid + ":"; t.isGLTFSpecularGlossinessMaterial && (h += "specular-glossiness:"), r && (h += "skinning:"), i && (h += "vertex-tangents:"), o && (h += "vertex-colors:"), n && (h += "flat-shading:"), a && (h += "morph-targets:"), s && (h += "morph-normals:"); var d = this.cache.get(h); d || (d = t.clone(), r && (d.skinning = !0), i && (d.vertexTangents = !0), o && (d.vertexColors = !0), n && (d.flatShading = !0), a && (d.morphTargets = !0), s && (d.morphNormals = !0), this.cache.add(h, d)), t = d } t.aoMap && void 0 === e.attributes.uv2 && void 0 !== e.attributes.uv && e.setAttribute("uv2", new YA(e.attributes.uv.array, 2)), t.normalScale && !i && (t.normalScale.y = -t.normalScale.y), A.material = t }, q.prototype.loadMaterial = function (A) { var e, i = this.extensions, o = this.json.materials[A], n = {}, r = o.extensions || {}, a = []; if (r[t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]) { var l = i[t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]; e = l.getMaterialType(), a.push(l.extendParams(n, o, this)) } else if (r[t.KHR_MATERIALS_UNLIT]) { var c = i[t.KHR_MATERIALS_UNLIT]; e = c.getMaterialType(), a.push(c.extendParams(n, o, this)) } else { e = yr; var h = o.pbrMetallicRoughness || {}; if (n.color = new LA(1, 1, 1), n.opacity = 1, Array.isArray(h.baseColorFactor)) { var d = h.baseColorFactor; n.color.fromArray(d), n.opacity = d[3] } void 0 !== h.baseColorTexture && a.push(this.assignTexture(n, "map", h.baseColorTexture)), n.metalness = void 0 !== h.metallicFactor ? h.metallicFactor : 1, n.roughness = void 0 !== h.roughnessFactor ? h.roughnessFactor : 1, void 0 !== h.metallicRoughnessTexture && (a.push(this.assignTexture(n, "metalnessMap", h.metallicRoughnessTexture)), a.push(this.assignTexture(n, "roughnessMap", h.metallicRoughnessTexture))) }!0 === o.doubleSided && (n.side = 2); var p = o.alphaMode || T; return p === D ? (n.transparent = !0, n.depthWrite = !1) : (n.transparent = !1, p === k && (n.alphaTest = void 0 !== o.alphaCutoff ? o.alphaCutoff : .5)), void 0 !== o.normalTexture && e !== jA && (a.push(this.assignTexture(n, "normalMap", o.normalTexture)), n.normalScale = new s(1, 1), void 0 !== o.normalTexture.scale && n.normalScale.set(o.normalTexture.scale, o.normalTexture.scale)), void 0 !== o.occlusionTexture && e !== jA && (a.push(this.assignTexture(n, "aoMap", o.occlusionTexture)), void 0 !== o.occlusionTexture.strength && (n.aoMapIntensity = o.occlusionTexture.strength)), void 0 !== o.emissiveFactor && e !== jA && (n.emissive = (new LA).fromArray(o.emissiveFactor)), void 0 !== o.emissiveTexture && e !== jA && a.push(this.assignTexture(n, "emissiveMap", o.emissiveTexture)), Promise.all(a).then((function () { var A; return A = e === g ? i[t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS].createMaterial(n) : new e(n), o.name && (A.name = o.name), A.map && (A.map.encoding = 3001), A.emissiveMap && (A.emissiveMap.encoding = 3001), V(A, o), o.extensions && O(i, A, o), A })) }, q.prototype.loadGeometries = function (A) { var e = this, i = this.extensions, o = this.primitiveCache; function n(A) { return i[t.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(A, e).then((function (t) { return j(t, A, e) })) } for (var r, a, s = [], l = 0, c = A.length; c > l; l++) { var h, d = A[l], p = (a = void 0, (a = (r = d).extensions && r.extensions[t.KHR_DRACO_MESH_COMPRESSION]) ? "draco:" + a.bufferView + ":" + a.indices + ":" + P(a.attributes) : r.indices + ":" + P(r.attributes) + ":" + r.mode), g = o[p]; if (g) s.push(g.promise); else h = d.extensions && d.extensions[t.KHR_DRACO_MESH_COMPRESSION] ? n(d) : j(new he, d, e), o[p] = { primitive: d, promise: h }, s.push(h) } return Promise.all(s) }, q.prototype.loadMesh = function (A) { for (var e, t = this, i = this.json.meshes[A], o = i.primitives, n = [], r = 0, a = o.length; a > r; r++) { var s = void 0 === o[r].material ? (void 0 === (e = this.cache).DefaultMaterial && (e.DefaultMaterial = new yr({ color: 16777215, emissive: 0, metalness: 1, roughness: 1, transparent: !1, depthTest: !0, side: 0 })), e.DefaultMaterial) : this.getDependency("material", o[r].material); n.push(s) } return n.push(t.loadGeometries(o)), Promise.all(n).then((function (e) { for (var n = e.slice(0, e.length - 1), r = e[e.length - 1], a = [], s = 0, l = r.length; l > s; s++) { var c, h = r[s], d = o[s], p = n[s]; if (d.mode === B || d.mode === x || d.mode === S || void 0 === d.mode) !0 !== (c = !0 === i.isSkinnedMesh ? new So(h, p) : new Ue(h, p)).isSkinnedMesh || c.geometry.attributes.skinWeight.normalized || c.normalizeSkinWeights(), d.mode === x ? c.geometry = Y(c.geometry, 1) : d.mode === S && (c.geometry = Y(c.geometry, 2)); else if (d.mode === v) c = new jo(h, p); else if (d.mode === E) c = new Go(h, p); else if (d.mode === I) c = new Ho(h, p); else { if (d.mode !== C) throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + d.mode); c = new Xo(h, p) } Object.keys(c.geometry.morphAttributes).length > 0 && G(c, i), c.name = i.name || "mesh_" + A, r.length > 1 && (c.name += "_" + s), V(c, i), t.assignFinalMaterial(c), a.push(c) } if (1 === a.length) return a[0]; var g = new Xi; for (s = 0, l = a.length; l > s; s++) g.add(a[s]); return g })) }, q.prototype.loadCamera = function (A) { var e, t = this.json.cameras[A], i = t[t.type]; if (i) return "perspective" === t.type ? e = new je(a.radToDeg(i.yfov), i.aspectRatio || 1, i.znear || 1, i.zfar || 2e6) : "orthographic" === t.type && (e = new Ka(i.xmag / -2, i.xmag / 2, i.ymag / 2, i.ymag / -2, i.znear, i.zfar)), t.name && (e.name = t.name), V(e, t), Promise.resolve(e); console.warn("THREE.GLTFLoader: Missing camera parameters.") }, q.prototype.loadSkin = function (A) { var e = this.json.skins[A], t = { joints: e.joints }; return void 0 === e.inverseBindMatrices ? Promise.resolve(t) : this.getDependency("accessor", e.inverseBindMatrices).then((function (A) { return t.inverseBindMatrices = A, t })) }, q.prototype.loadAnimation = function (A) { for (var e = this.json.animations[A], t = [], i = [], o = [], n = [], r = [], a = 0, s = e.channels.length; s > a; a++) { var l = e.channels[a], c = e.samplers[l.sampler], h = l.target, d = void 0 !== e.parameters ? e.parameters[c.input] : c.input, p = void 0 !== e.parameters ? e.parameters[c.output] : c.output; t.push(this.getDependency("node", void 0 !== h.node ? h.node : h.id)), i.push(this.getDependency("accessor", d)), o.push(this.getDependency("accessor", p)), n.push(c), r.push(h) } return Promise.all([Promise.all(t), Promise.all(i), Promise.all(o), Promise.all(n), Promise.all(r)]).then((function (t) { for (var i = t[0], o = t[1], n = t[2], r = t[3], a = t[4], s = [], l = 0, c = i.length; c > l; l++) { var h = i[l], d = o[l], p = n[l], g = r[l], u = a[l]; if (void 0 !== h) { var f; switch (h.updateMatrix(), h.matrixAutoUpdate = !0, Q[u.path]) { case Q.weights: f = Dr; break; case Q.rotation: f = Nr; break; case Q.position: case Q.scale: default: f = Vr } var C = h.name ? h.name : h.uuid, y = void 0 !== g.interpolation ? R[g.interpolation] : 2301, v = []; Q[u.path] === Q.weights ? h.traverse((function (A) { !0 === A.isMesh && A.morphTargetInfluences && v.push(A.name ? A.name : A.uuid) })) : v.push(C); var I = p.array; if (p.normalized) { var E; if (I.constructor === Int8Array) E = 1 / 127; else if (I.constructor === Uint8Array) E = 1 / 255; else if (I.constructor == Int16Array) E = 1 / 32767; else { if (I.constructor !== Uint16Array) throw new Error("THREE.GLTFLoader: Unsupported output accessor component type."); E = 1 / 65535 } for (var B = new Float32Array(I.length), x = 0, S = I.length; S > x; x++) B[x] = I[x] * E; I = B } for (x = 0, S = v.length; S > x; x++) { var w = new f(v[x] + "." + Q[u.path], d.array, I, y); "CUBICSPLINE" === g.interpolation && (w.createInterpolant = function (A) { return new m(this.times, this.values, this.getValueSize() / 3, A) }, w.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = !0), s.push(w) } } } return new Gr(e.name ? e.name : "animation_" + A, void 0, s) })) }, q.prototype.loadNode = function (A) { var e, i = this.json, o = this.extensions, n = this, r = i.meshReferences, a = i.meshUses, s = i.nodes[A]; return (e = [], void 0 !== s.mesh && e.push(n.getDependency("mesh", s.mesh).then((function (A) { var e; if (r[s.mesh] > 1) { var t = a[s.mesh]++; (e = A.clone()).name += "_instance_" + t } else e = A; return void 0 !== s.weights && e.traverse((function (A) { if (A.isMesh) for (var e = 0, t = s.weights.length; t > e; e++) A.morphTargetInfluences[e] = s.weights[e] })), e }))), void 0 !== s.camera && e.push(n.getDependency("camera", s.camera)), s.extensions && s.extensions[t.KHR_LIGHTS_PUNCTUAL] && void 0 !== s.extensions[t.KHR_LIGHTS_PUNCTUAL].light && e.push(n.getDependency("light", s.extensions[t.KHR_LIGHTS_PUNCTUAL].light)), Promise.all(e)).then((function (A) { var e; if ((e = !0 === s.isBone ? new Uo : A.length > 1 ? new Xi : 1 === A.length ? A[0] : new H) !== A[0]) for (var t = 0, i = A.length; i > t; t++) e.add(A[t]); if (s.name && (e.userData.name = s.name, e.name = Fs.sanitizeNodeName(s.name)), V(e, s), s.extensions && O(o, e, s), void 0 !== s.matrix) { var n = new M; n.fromArray(s.matrix), e.applyMatrix4(n) } else void 0 !== s.translation && e.position.fromArray(s.translation), void 0 !== s.rotation && e.quaternion.fromArray(s.rotation), void 0 !== s.scale && e.scale.fromArray(s.scale); return e })) }, q.prototype.loadScene = function () { function A(e, t, i, o) { var n = i.nodes[e]; return o.getDependency("node", e).then((function (A) { return void 0 === n.skin ? A : o.getDependency("skin", n.skin).then((function (A) { for (var t = [], i = 0, n = (e = A).joints.length; n > i; i++) t.push(o.getDependency("node", e.joints[i])); return Promise.all(t) })).then((function (t) { return A.traverse((function (A) { if (A.isMesh) { for (var i = [], o = [], n = 0, r = t.length; r > n; n++) { var a = t[n]; if (a) { i.push(a); var s = new M; void 0 !== e.inverseBindMatrices && s.fromArray(e.inverseBindMatrices.array, 16 * n), o.push(s) } else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', e.joints[n]) } A.bind(new bo(i, o), A.matrixWorld) } })), A })); var e })).then((function (e) { t.add(e); var r = []; if (n.children) for (var a = n.children, s = 0, l = a.length; l > s; s++) { r.push(A(a[s], e, i, o)) } return Promise.all(r) })) } return function (e) { var t = this.json, i = this.extensions, o = this.json.scenes[e], n = new Xi; o.name && (n.name = o.name), V(n, o), o.extensions && O(i, n, o); for (var r = o.nodes || [], a = [], s = 0, l = r.length; l > s; s++) a.push(A(r[s], n, t, this)); return Promise.all(a).then((function () { return n })) } }(), A }(), VC = "REPLACE", GC = function A(e, t, i, o) { H.call(this); if (this.isRoot = o || !1, o || (this.matrix = kC.getTransfrom(i.transform)), this.refine = i.refine || VC, this.geometricError = i.geometricError || 0, this.boundingBox = kC.getBoxFromTileBoundingVolumeBox(i.boundingVolume.box), this.scene = null, this.model = e, this.json = i, this.level = t && t.level + 1 || 0, this.matrixAutoUpdate = !1, this.hasB3DM = !1, i.content && (i.content.url.endsWith("json") ? this.loadContent(i.content.url) : i.content.url.endsWith("b3dm") && (this.hasB3DM = !0, this.model.tilesList[i.content.url] = this, t && t.hasB3DM || (this.firstB3DM = !0, this.loadB3DM(i.content.url)))), i.children) for (var n = 0, r = i.children.length; r > n; n += 1) this.add(new A(e, this, i.children[n])) }; (GC.prototype = Object.create(H.prototype)).loadContent = function (A) { var e = this, t = e.model, i = t.dataUrl.tilesUrl(A); function o() { var A = t.fileLoader; A.setResponseType("json"), A.setCacheViable(!0), A.setRequestHeader({ Authorization: t.accessToken }), A.load(i, (function (A) { var i = {}; if ("string" == typeof A) try { i = JSON.parse(A) } catch (A) { return void t.dispatchEventEx({ type: Rc.ON_LOAD_INVALID_DATA, modelKey: t.modelKey }) } else i = A; e.add(new GC(t, parent, i.root, parent.level + 1, !0)) }), (function (A, e) { switch (A) { case 401: t.dispatchEventEx({ type: Rc.ACCOUNT_NO_EXIST, modelKey: t.modelKey, data: e }); break; case 403: t.dispatchEventEx({ type: Rc.NO_PERMISSION, modelKey: t.modelKey, data: e }); break; default: t.dispatchEventEx({ type: Rc.ON_NETWORK_ERROR, modelKey: t.modelKey, data: A }) } })) } if (vc.getDataFromIndexedDB) { var n = t.getStorage(); n && n.get(i, (function (A) { if (A) { var i = {}; if ("string" == typeof A) try { i = JSON.parse(A) } catch (A) { return void t.dispatchEventEx({ type: Rc.ON_LOAD_INVALID_DATA, modelKey: t.modelKey }) } else i = A; e.add(new GC(t, parent, i.root, !0)) } else o() }), (function () { o() })) } else o() }, GC.prototype.loadB3DM = function (A) { var e = this, t = e.model; e.loaderManager = new wu, e.loaderManager.model = t; var i = new OC(e.loaderManager); function o(A) { e.scene = A, e.loading = !1, e.loaded = !0, e.add(A.scene), t.tileLoadFinish() } e.loading = !0; var n = t.dataUrl.b3dmUrl(A || e.json.content.url); if (vc.getDataFromIndexedDB) { var r = t.getStorage(); r && r.get(n, (function (t) { t ? i.parse(t, A || e.json.content.url, o) : i.load(n, o) }), (function () { i.load(n, o) })) } else i.load(n, o) }; var PC = function (A, e, t, i) { TC.call(this, A, e, t, i), this.configLoader = new DC(this), this.tilesList = {}, this.isTilesModel = !0 }; (PC.prototype = Object.create(TC.prototype)).load = function (A) { var e = this; this.configLoader.load((function () { e.parseCfgFinish && e.parseCfgFinish(), e.manager.updateScene(), e.group.add(new GC(e, null, e.configLoader.config.root, !0)), e.loaded = !0 })) }, PC.prototype.tileLoadStart = function () {}, PC.prototype.tileLoadFinish = function () { this.group.updateMatrixWorld(!0, !0), this.manager.viewerImpl.render() }, PC.prototype.tileUnloadStart = function () {}, PC.prototype.tileUnloadFinish = function () {}, PC.prototype.checkTilesDataChanged = function (A) { for (var e in Bh.time("checkTilesDataChanged"), this.tilesList) if (this.tilesList.hasOwnProperty(e)) { var t = this.tilesList[e]; this.tilesNeedLoad(t.boundingBox.getCenter((new y).applyMatrix4(t.parent.matrixWorld).applyMatrix4(t.matrix)), t.boundingBox.getSize(new y).length()) || t.firstB3DM ? t.scene || t.loading ? t.visible = !0 : t.loadB3DM() : A ? (t.remove(t.scene), t.scene = null) : t.visible = !1 } Bh.timeEnd("checkTilesDataChanged") }, PC.prototype.tilesNeedLoad = function (A, e) { var t, i = this.manager.cameraFov; return t = (e || 0) * this.manager.domElementWidth / (2 * this.manager.cameraPosition.clone().sub(A).length() * Math.tan(i / 2)), Bh.debug("几何误差:", t), t > vc.geometricErrorThresholdValue }; var qC = function () { this.size = 0, this.counter = 0, this.expansion = 1, this._pool = null }; qC.prototype.init = function (A, e) { this.classType = A, this._pool = [], this._expand(e) }, qC.prototype._expand = function (A) { this.size += A; for (var e = 0; A > e; e += 1) this._pool.push(new this.classType) }, qC.prototype.acquire = function () { return this.size > this.counter || (this.expansion = Math.round(1.2 * this.expansion) + 1, this._expand(this.expansion)), this._pool[this.counter++] }, qC.prototype.clear = function () { this.counter = 0 }, qC.prototype.destroy = function () { for (var A = 0, e = this.size; e > A; A += 1) this._pool[A].destroy(); this.counter = 0, this.size = 0, this.expansion = 1, this._pool = null }, qC.prototype.getObjects = function () { return this._pool }; var jC = function (A) { Pe.call(this), this.type = "PhoneLightingMaterial", this.color = new LA(16777215), this.specular = new LA(1118481), this.shininess = 30, this.emissive = new LA(0), this.map = null, this.shadowMapEnabled = !1, this.defines = {}, this.uniforms = Ge.merge([Xe.common, Xe.lights, { diffuse: { value: new LA(16711680) }, opacity: { value: 1 }, specular: { value: new LA(1118481) }, shininess: { value: 30 }, emissive: { value: new LA(0) } }]), this.vertexShader = ["varying vec3 vViewPosition;", "varying vec3 vNormal;", "#include ", "void main() {", " #include ", " #include ", " #include ", " #include ", " #include ", " vNormal = normalize( transformedNormal );", " vViewPosition = - mvPosition.xyz;", "}"].join("\n"), this.fragmentShader = ["uniform vec3 diffuse;", "uniform float opacity;", "uniform vec3 specular;", "uniform float shininess;", "uniform vec3 emissive;", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "void main() {", " vec4 diffuseColor = vec4( diffuse, opacity );", "#ifdef USE_MAP", " vec4 texelColor = texture2D( map, vUv );", " texelColor = mapTexelToLinear( texelColor );", " diffuseColor = vec4(texelColor.rgb, opacity);", "#endif", " ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );", " vec3 totalEmissiveRadiance = emissive;", " float specularStrength = 1.0;", " #include ", " #include ", " gl_FragColor = linearToOutputTexel( diffuseColor );", "}"].join("\n"), this.lights = !1, this.defaultAttributeValues = { color: [1, 1, 1], uv: [0, 0], uv2: [0, 0] }, void 0 !== A && (void 0 !== A.attributes && console.error("PhoneLightingMaterial: attributes should now be defined in THREE.BufferGeometry instead."), this.setValues(A)), this.refreshUniforms() }; (jC.prototype = Object.create(Pe.prototype)).constructor = jC, jC.prototype.isShaderMaterial = !0, jC.prototype.copy = function (A) { return Pe.prototype.copy.call(this, A), this.color.copy(A.color), this.specular.copy(A.specular), this.shininess = A.shininess, this.emissive.copy(A.emissive), this }, jC.prototype.refreshUniforms = function () { this.uniforms.diffuse.value.set(this.color), this.uniforms.opacity.value = this.opacity, this.uniforms.specular.value.set(this.specular), this.uniforms.shininess.value = this.shininess, this.uniforms.emissive.value.set(this.emissive), this.uniforms.map.value = this.map }; var HC = function (A, e) { ep.call(this, gp.CLIPPLANE, { priority: 20 }); var t = []; t.push("clipPlane_right"), t.push("clipPlane_left"), t.push("clipPlane_back"), t.push("clipPlane_front"), t.push("clipPlane_top"), t.push("clipPlane_bottom"), this.cubeSize = A.clone(), this.center = e.clone(), this.visible = !1, this.rotatable = !1, this.selectIndex = null, this.planeOffset = new Array(6), this.planeRotate = [0, 0, 0], this.observer = null, this.uniforms = { iClipPlane: { type: "i", value: 0 }, vClipPlane: { type: "v4v", value: [new p, new p, new p, new p, new p, new p] } }, this.clipplanes = null, this.calculation = !0, this.boundingBox = new aA, this.calculateClipBoundingBox = function (A) { this.boundingBox.makeEmpty(); for (var e = new y, t = 0; A.length > t; t += 1) { var i = A[t].coplanarPoint(e); 0 !== i.x && (i.x > this.boundingBox.max.x ? this.boundingBox.max.x = i.x : this.boundingBox.min.x > i.x && (this.boundingBox.min.x = i.x)), 0 !== i.y && (i.y > this.boundingBox.max.y ? this.boundingBox.max.y = i.y : this.boundingBox.min.y > i.y && (this.boundingBox.min.y = i.y)), 0 !== i.z && (i.z > this.boundingBox.max.z ? this.boundingBox.max.z = i.z : this.boundingBox.min.z > i.z && (this.boundingBox.min.z = i.z)) } }, this.getClipBoundingBox = function () { return this.boundingBox }, this.isVisible = function () { return this.visible }, this.getPlaneNormal = function (A) { var e = new p, t = Math.floor(A / 2); return e.setComponent(t, Math.pow(-1, A % 2)), e.w = .5 * -this.cubeSize.getComponent(t), this.planeOffset[A] = 0, e }, this.planeMaterial = new jC({ color: 8158334, opacity: .3, transparent: !0, side: 0, lights: !1 }), this.planeHighLightMatrial = new jC({ color: 255, opacity: .3, transparent: !0, side: 0, lights: !1 }), this.initPlaneModel = function (A) { var e = Math.floor(A / 2), i = A % 2, o = new Ue(new et(0 === e ? this.cubeSize.z : this.cubeSize.x, 1 === e ? this.cubeSize.z : this.cubeSize.y), this.planeMaterial); switch (o.name = t[A], o.customTag = !0, o.position.setComponent(e, Math.pow(-1, i) * this.cubeSize.getComponent(e) * .5), A) { case 0: o.rotation.y = .5 * Math.PI; break; case 1: o.rotation.y = .5 * -Math.PI; break; case 2: o.rotation.x = .5 * -Math.PI; break; case 3: o.rotation.x = .5 * Math.PI; break; case 4: break; case 5: o.rotation.x = Math.PI } o.renderOrder = 90, this.add(o) }, this.initCapsBox = function () { if (this.boxMesh) return this.boxMesh; var A = new Ne(this.cubeSize.x, this.cubeSize.y, this.cubeSize.z); A.groups = null; var e = new Ue(A, new jC({ color: 16776960, side: 2, stencilWrite: !0, stencilFunc: 515, stencilRef: 1, stencilFuncMask: 255, stencilFail: 7680, stencilZFail: 7680, stencilZPass: 7680 })); return e.matrixWorld = this.matrixWorld, e.matrix = this.matrix, e.name = "capsBox", this.boxMesh = e, e }, this.initWireframes = function () { var A = [.5 * -this.cubeSize.x, .5 * -this.cubeSize.y, .5 * -this.cubeSize.z, .5 * this.cubeSize.x, .5 * -this.cubeSize.y, .5 * -this.cubeSize.z, .5 * this.cubeSize.x, .5 * this.cubeSize.y, .5 * -this.cubeSize.z, .5 * -this.cubeSize.x, .5 * this.cubeSize.y, .5 * -this.cubeSize.z, .5 * -this.cubeSize.x, .5 * -this.cubeSize.y, .5 * this.cubeSize.z, .5 * this.cubeSize.x, .5 * -this.cubeSize.y, .5 * this.cubeSize.z, .5 * this.cubeSize.x, .5 * this.cubeSize.y, .5 * this.cubeSize.z, .5 * -this.cubeSize.x, .5 * this.cubeSize.y, .5 * this.cubeSize.z], e = new he, t = new jC({ color: 0, lights: !0 }); e.setIndex([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 3, 7, 1, 5, 2, 6]), e.setAttribute("position", new Ae(A, 3)), e.setAttribute("color", new Ae([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 3)), e.computeBoundingSphere(); var i = new jo(e, t); i.name = "Wireframes", i.customTag = !0, this.add(i) }, this.updateClippingParams = function (A) {}, this.enable = function (A, e) { this.visible = e, this.uniforms.iClipPlane.value = A ? 6 : 0, this.updateClippingParams(this.uniforms), this.boxMesh && (this.boxMesh.visible = e) }, this.isEnabled = function () { return 0 !== this.uniforms.iClipPlane.value }; var i = function (A, e, t, i, o, n, r, a, s, l, c, h) { this.enable = A, this.visible = e, this.rotatable = t, this.calculation = i, this.planeOffset = o.slice(0), this.planeRotate = n.slice(0), this.position = r, this.scale = a, this.quaternion = s, this.cubeSize = l, this.center = c, this.boundingBox = h }; this.store = function () { return new i(!!this.uniforms.iClipPlane.value, this.visible, this.rotatable, this.calculation, this.planeOffset, this.planeRotate, this.position.clone(), this.scale.clone(), this.quaternion.clone(), this.cubeSize.clone(), this.center.clone(), this.boundingBox.clone()) }, this.restore = function (A) { this.calculation = !0, this.calculationPlanes(A.cubeSize, A.center), this.enable(A.enable, A.visible), this.rotatable = A.rotatable, this.calculation = A.calculation; for (var e = 0; 6 > e; e += 1) this.planeOffset[e] = A.planeOffset[e]; for (var t = 0; 3 > t; t += 1) this.planeRotate[t] = A.planeRotate[t]; this.position.copy(A.position), this.scale.copy(A.scale), this.quaternion._w = A.quaternion._w, this.quaternion._x = A.quaternion._x, this.quaternion._y = A.quaternion._y, this.quaternion._z = A.quaternion._z, this.update() }, this.reset = function () { this.calculation = !0; for (var A = 0; 6 > A; A += 1) this.planeOffset[A] = 0; for (A = 0; 3 > A; A += 1) this.planeRotate[A] = 0; this.position.copy(this.center), this.scale.copy(new y(1, 1, 1)), this.quaternion.copy(new f), this.update() }, this.calculationPlanes = function (A, e, t) { if (this.calculation || t) { this.cubeSize.copy(A), this.center.copy(e); for (var i = this.children.length - 1; i >= 0; i -= 1) this.remove(this.children[i]); for (i = 0; 6 > i; i += 1) this.uniforms.vClipPlane.value[i] = this.getPlaneNormal(i), this.initPlaneModel(i); this.initWireframes(), this.clipplanes = this.uniforms.vClipPlane.value.slice(0), this.reset() } }, this.update = function () { this.updateMatrixWorld(); var A = new M; A.getInverse(this.matrix), A.transpose(); for (var e = 0; 6 > e; e += 1) this.uniforms.vClipPlane.value[e] = this.clipplanes[e].clone().applyMatrix4(A); this.updateClippingParams(this.uniforms), this.observer && this.observer() }, this.offset = function (A, e) { this.calculation = !1; var t = Math.floor(A / 2); this.cubeSize.getComponent(t); A % 2 == 0 && this.planeOffset[A] + e > 0 && (e = -this.planeOffset[A]), A % 2 == 1 && 0 > this.planeOffset[A] + e && (e = -this.planeOffset[A]), this.planeOffset[A] += e; for (var i = new y, o = 0; 6 > o; o += 1) { var n = this.clipplanes[o].clone(), r = this.planeOffset[o], a = new y(n.x * r, n.y * r, n.z * r); i.add(a) } var s = 1 + i.getComponent(t) / this.cubeSize.getComponent(t); if ((s = 0 === s ? 1e-5 : s) > 0) { this.scale.setComponent(t, s); var l = this.uniforms.vClipPlane.value[A].clone(), c = new y(l.x, l.y, l.z); c.normalize(); var h = new y(c.x * (a = e), c.y * a, c.z * a); A % 2 == 1 ? this.position.sub(h.multiplyScalar(.5)) : this.position.add(h.multiplyScalar(.5)), this.update() } else this.planeOffset[A] -= e }; var o = new f, n = new y(1, 0, 0); this.rotX = function (A) { this.calculation = !1, o.setFromAxisAngle(n, A), this.quaternion.multiply(o), this.update() }; var r = new y(0, 1, 0); this.rotY = function (A) { this.calculation = !1, o.setFromAxisAngle(r, A), this.quaternion.multiply(o), this.update() }, this.setSectionBox = function (A, e) { this.calculation = !0; var t = new y(e.x - A.x, e.y - A.y, e.z - A.z), i = new y(.5 * (A.x + e.x), .5 * (A.y + e.y), .5 * (A.z + e.z)); this.calculationPlanes(t, i) }, this.calculateOffsetByBox = function (A, e) { var t = e.x - this.center.x - .5 * this.cubeSize.x; this.planeOffset[0] > t ? (this.moveSectionPlane("left", this.center.x - .5 * this.cubeSize.x - A.x), this.moveSectionPlane("right", t)) : (this.moveSectionPlane("right", t), this.moveSectionPlane("left", this.center.x - .5 * this.cubeSize.x - A.x)); var i = e.y - this.center.y - .5 * this.cubeSize.y; this.planeOffset[2] > i ? (this.moveSectionPlane("bottom", this.center.y - .5 * this.cubeSize.y - A.y), this.moveSectionPlane("top", i)) : (this.moveSectionPlane("top", i), this.moveSectionPlane("bottom", this.center.y - .5 * this.cubeSize.y - A.y)); var o = e.z - this.center.z - .5 * this.cubeSize.z; this.planeOffset[4] > o ? (this.moveSectionPlane("back", this.center.z - .5 * this.cubeSize.z - A.z), this.moveSectionPlane("front", o)) : (this.moveSectionPlane("front", o), this.moveSectionPlane("back", this.center.z - .5 * this.cubeSize.z - A.z)) }, this.getPlaneIndexByName = function (A) { var e = -1; return "right" === A ? e = 0 : "left" === A ? e = 1 : "top" === A ? e = 2 : "bottom" === A ? e = 3 : "front" === A ? e = 4 : "back" === A && (e = 5), e }, this.moveSectionPlane = function (A, e) { var t = this.getPlaneIndexByName(A); - 1 !== t && (t % 2 != 0 && (e = -e), this.offset(t, e - this.planeOffset[t])) }, this.recalculate = function () { return this.filter.getVisibleComponentsBbox() }, this.setProcess = function (A, e) { var t = this.getPlaneIndexByName(A), i = 0; (2 > t ? i = this.cubeSize.x : 4 > t ? i = this.cubeSize.y : 6 > t && (i = this.cubeSize.z), e > 1 ? e = 1 : 0 > e && (e = 0), -1 !== t) && (t % 2 != 1 && (e = -e), this.offset(t, e * i - this.planeOffset[t])) }, this.getProcess = function (A) { var e = this.getPlaneIndexByName(A); - 1 === e && console.log("faceName is illegal"); var t = 0; 2 > e ? t = this.cubeSize.x : 4 > e ? t = this.cubeSize.y : 6 > e && (t = this.cubeSize.z); var i = 1; e % 2 != 1 && (i = -1); var o = i * this.planeOffset[e] / t; return o > 1 ? o = 1 : 0 > o && (o = 0), o }; var a = new y(0, 0, 1); this.rotateSectionBox = function (A, e) { "x" === A ? this.planeRotate[0] = e : "y" === A ? this.planeRotate[1] = e : "z" === A && (this.planeRotate[2] = e), this.calculation = !0; var t = new f; t.setFromAxisAngle(n, this.planeRotate[0]); var i = new f; i.setFromAxisAngle(r, this.planeRotate[1]); var o = new f; o.setFromAxisAngle(a, this.planeRotate[2]); var s = new f; s.multiply(t), s.multiply(i), s.multiply(o), this.quaternion.copy(s), this.update() }, this.highLight = function () { null !== this.selectIndex && (this.children[this.selectIndex].material = this.planeHighLightMatrial) }, this.cancelHighLight = function () { null !== this.selectIndex && (this.children[this.selectIndex].material = this.planeMaterial, this.selectIndex = null) } }; (HC.prototype = Object.create(ep.prototype)).constructor = HC, HC.prototype.init = function () { this.calculationPlanes(this.cubeSize, this.center) }, HC.prototype.hitTest = function (A) { var e = null, t = null; if (this.raycast(A), null !== this.selectIndex) { var i = A.ray, o = new EA, n = this.uniforms.vClipPlane.value[this.selectIndex]; o.setComponents(n.x, n.y, n.z, n.w), e = i.distanceToPlane(o), t = 0 > i.direction.dot(o.normal) } return { sign: t, distance: e } }, HC.prototype.raycast = function (A) { if (this.visible) { var e = [], t = null; this.selectIndex = null; for (var i = 0; 6 > i; i += 1) if (this.children[i].raycast(A, e), e.length > 0) { var o = e.pop(); t && o.distance >= t.distance || (t = o, this.selectIndex = i), e = [] } } }, Xe.line = { linewidth: { value: 1 }, resolution: { value: new s(1, 1) }, dashScale: { value: 1 }, dashSize: { value: 1 }, dashOffset: { value: 0 }, gapSize: { value: 1 }, opacity: { value: 1 } }, it.line = { uniforms: Ge.merge([Xe.common, Xe.fog, Xe.line]), vertexShader: "\n #include \n #include \n #include \n #include \n #include \n\n uniform float linewidth;\n uniform vec2 resolution;\n\n attribute vec3 instanceStart;\n attribute vec3 instanceEnd;\n\n attribute vec3 instanceColorStart;\n attribute vec3 instanceColorEnd;\n\n varying vec2 vUv;\n\n #ifdef USE_DASH\n\n uniform float dashScale;\n attribute float instanceDistanceStart;\n attribute float instanceDistanceEnd;\n varying float vLineDistance;\n\n #endif\n\n void trimSegment( const in vec4 start, inout vec4 end ) {\n\n // trim end segment so it terminates between the camera plane and the near plane\n\n // conservative estimate of the near plane\n float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n float nearEstimate = - 0.5 * b / a;\n\n float alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n end.xyz = mix( start.xyz, end.xyz, alpha );\n\n }\n\n void main() {\n\n #ifdef USE_COLOR\n\n vColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n #endif\n\n #ifdef USE_DASH\n\n vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\n #endif\n\n float aspect = resolution.x / resolution.y;\n\n vUv = uv;\n\n // camera space\n vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n // special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n // but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n // perhaps there is a more elegant solution -- WestLangley\n\n bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n if ( perspective ) {\n\n if ( start.z < 0.0 && end.z >= 0.0 ) {\n\n trimSegment( start, end );\n\n } else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n trimSegment( end, start );\n\n }\n\n }\n\n // clip space\n vec4 clipStart = projectionMatrix * start;\n vec4 clipEnd = projectionMatrix * end;\n\n // ndc space\n vec2 ndcStart = clipStart.xy / clipStart.w;\n vec2 ndcEnd = clipEnd.xy / clipEnd.w;\n\n // direction\n vec2 dir = ndcEnd - ndcStart;\n\n // account for clip-space aspect ratio\n dir.x *= aspect;\n dir = normalize( dir );\n\n // perpendicular to dir\n vec2 offset = vec2( dir.y, - dir.x );\n\n // undo aspect ratio adjustment\n dir.x /= aspect;\n offset.x /= aspect;\n\n // sign flip\n if ( position.x < 0.0 ) offset *= - 1.0;\n\n // endcaps\n if ( position.y < 0.0 ) {\n\n offset += - dir;\n\n } else if ( position.y > 1.0 ) {\n\n offset += dir;\n\n }\n\n // adjust for linewidth\n offset *= linewidth;\n\n // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n offset /= resolution.y;\n\n // select end\n vec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n // back to clip space\n offset *= clip.w;\n\n clip.xy += offset;\n\n gl_Position = clip;\n\n vec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n #include \n #include \n #include \n\n }\n ", fragmentShader: "\n uniform vec3 diffuse;\n uniform float opacity;\n\n #ifdef USE_DASH\n\n uniform float dashSize;\n uniform float dashOffset;\n uniform float gapSize;\n\n #endif\n\n varying float vLineDistance;\n\n #include \n #include \n #include \n #include \n #include \n\n varying vec2 vUv;\n\n void main() {\n\n #include \n\n #ifdef USE_DASH\n\n if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n #endif\n\n if ( abs( vUv.y ) > 1.0 ) {\n\n float a = vUv.x;\n float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n float len2 = a * a + b * b;\n\n if ( len2 > 1.0 ) discard;\n\n }\n\n vec4 diffuseColor = vec4( diffuse, opacity );\n\n #include \n #include \n\n gl_FragColor = vec4( diffuseColor.rgb, diffuseColor.a );\n\n #include \n #include \n #include \n #include \n\n }\n " }; var YC = function (A) { Pe.call(this, { type: "LineMaterial", uniforms: Ge.clone(it.line.uniforms), vertexShader: it.line.vertexShader, fragmentShader: it.line.fragmentShader, clipping: !0 }), this.dashed = !1, Object.defineProperties(this, { color: { enumerable: !0, get: function () { return this.uniforms.diffuse.value }, set: function (A) { this.uniforms.diffuse.value = A } }, linewidth: { enumerable: !0, get: function () { return this.uniforms.linewidth.value }, set: function (A) { this.uniforms.linewidth.value = A } }, dashScale: { enumerable: !0, get: function () { return this.uniforms.dashScale.value }, set: function (A) { this.uniforms.dashScale.value = A } }, dashSize: { enumerable: !0, get: function () { return this.uniforms.dashSize.value }, set: function (A) { this.uniforms.dashSize.value = A } }, dashOffset: { enumerable: !0, get: function () { return this.uniforms.dashOffset.value }, set: function (A) { this.uniforms.dashOffset.value = A } }, gapSize: { enumerable: !0, get: function () { return this.uniforms.gapSize.value }, set: function (A) { this.uniforms.gapSize.value = A } }, resolution: { enumerable: !0, get: function () { return this.uniforms.resolution.value }, set: function (A) { this.uniforms.resolution.value.copy(A) } }, opacity: { enumerable: !0, get: function () { return this.uniforms.opacity.value }, set: function (A) { this.uniforms.opacity.value = A } } }), this.setValues(A) }; (YC.prototype = Object.create(Pe.prototype)).constructor = YC, YC.prototype.isLineMaterial = !0; var WC, JC = function () { Na.call(this), this.type = "LineSegmentsGeometry"; this.setIndex([0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5]), this.setAttribute("position", new Ae([-1, 2, 0, 1, 2, 0, -1, 1, 0, 1, 1, 0, -1, 0, 0, 1, 0, 0, -1, -1, 0, 1, -1, 0], 3)), this.setAttribute("uv", new Ae([-1, 2, 1, 2, -1, 1, 1, 1, -1, -1, 1, -1, -1, -2, 1, -2], 2)) }; JC.prototype = Object.assign(Object.create(Na.prototype), { constructor: JC, isLineSegmentsGeometry: !0, applyMatrix4: function (A) { var e = this.attributes.instanceStart, t = this.attributes.instanceEnd; return void 0 !== e && (e.applyMatrix4(A), t.applyMatrix4(A), e.needsUpdate = !0), null !== this.boundingBox && this.computeBoundingBox(), null !== this.boundingSphere && this.computeBoundingSphere(), this }, setPositions: function (A) { var e = null; A instanceof Float32Array ? e = A : Array.isArray(A) && (e = new Float32Array(A)); var t = new ks(e, 6, 1); return this.setAttribute("instanceStart", new no(t, 3, 0)), this.setAttribute("instanceEnd", new no(t, 3, 3)), this.computeBoundingBox(), this.computeBoundingSphere(), this }, setColors: function (A) { var e = null; A instanceof Float32Array ? e = A : Array.isArray(A) && (e = new Float32Array(A)); var t = new ks(e, 6, 1); return this.setAttribute("instanceColorStart", new no(t, 3, 0)), this.setAttribute("instanceColorEnd", new no(t, 3, 3)), this }, fromWireframeGeometry: function (A) { return this.setPositions(A.attributes.position.array), this }, fromEdgesGeometry: function (A) { return this.setPositions(A.attributes.position.array), this }, fromMesh: function (A) { return this.fromWireframeGeometry(new on(A.geometry)), this }, fromLineSegements: function (A) { var e = A.geometry; return e.isGeometry ? this.setPositions(e.vertices) : e.isBufferGeometry && this.setPositions(e.attributes.position.array), this }, computeBoundingBox: function () { var A = new aA; return function () { null === this.boundingBox && (this.boundingBox = new aA); var e = this.attributes.instanceStart, t = this.attributes.instanceEnd; void 0 !== e && void 0 !== t && (this.boundingBox.setFromBufferAttribute(e), A.setFromBufferAttribute(t), this.boundingBox.union(A)) } }(), computeBoundingSphere: (WC = new y, function () { null === this.boundingSphere && (this.boundingSphere = new cA), null === this.boundingBox && this.computeBoundingBox(); var A = this.attributes.instanceStart, e = this.attributes.instanceEnd; if (void 0 !== A && void 0 !== e) { var t = this.boundingSphere.center; this.boundingBox.getCenter(t); for (var i = 0, o = 0, n = A.count; n > o; o += 1) WC.fromBufferAttribute(A, o), i = Math.max(i, t.distanceToSquared(WC)), WC.fromBufferAttribute(e, o), i = Math.max(i, t.distanceToSquared(WC)); this.boundingSphere.radius = Math.sqrt(i), isNaN(this.boundingSphere.radius) && console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.", this) } } ), toJSON: function () {}, applyMatrix: function (A) { return console.warn("THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4()."), this.applyMatrix4(A) } }); var zC, ZC, XC = function (A, e) { void 0 === A && (A = new JC), void 0 === e && (e = new YC({ color: 16777215 * Math.random() })), Ue.call(this, A, e), this.type = "LineSegments2" }; XC.prototype = Object.assign(Object.create(Ue.prototype), { constructor: XC, isLineSegments2: !0, computeLineDistances: (zC = new y, ZC = new y, function () { for (var A = this.geometry, e = A.attributes.instanceStart, t = A.attributes.instanceEnd, i = new Float32Array(2 * e.data.count), o = 0, n = 0, r = e.data.count; r > o; o += 1, n += 2) zC.fromBufferAttribute(e, o), ZC.fromBufferAttribute(t, o), i[n] = 0 === n ? 0 : i[n - 1], i[n + 1] = i[n] + zC.distanceTo(ZC); var a = new ks(i, 2, 1); return A.setAttribute("instanceDistanceStart", new no(a, 1, 0)), A.setAttribute("instanceDistanceEnd", new no(a, 1, 1)), this } ), raycast: function () { var A = new p, e = new p, t = new p, i = new y, o = new M, n = new Hs, r = new y; return function (s, l) { null === s.camera && console.error('LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2.'); var c = s.ray, h = s.camera, d = h.projectionMatrix, p = this.geometry, g = this.material, u = g.resolution, f = g.linewidth + (void 0 !== s.params.Line2 && s.params.Line2.threshold || 0), m = p.attributes.instanceStart, C = p.attributes.instanceEnd; c.at(1, t), t.w = 1, t.applyMatrix4(h.matrixWorldInverse), t.applyMatrix4(d), t.multiplyScalar(1 / t.w), t.x *= u.x / 2, t.y *= u.y / 2, t.z = 0, i.copy(t); var v = this.matrixWorld; o.multiplyMatrices(h.matrixWorldInverse, v); for (var I = 0, E = m.count; E > I; I += 1) { if (A.fromBufferAttribute(m, I), e.fromBufferAttribute(C, I), A.w = 1, e.w = 1, A.applyMatrix4(o), e.applyMatrix4(o), A.applyMatrix4(d), e.applyMatrix4(d), A.multiplyScalar(1 / A.w), e.multiplyScalar(1 / e.w), !(-1 > A.z && -1 > e.z) && !(A.z > 1 && e.z > 1)) { A.x *= u.x / 2, A.y *= u.y / 2, e.x *= u.x / 2, e.y *= u.y / 2, n.start.copy(A), n.start.z = 0, n.end.copy(e), n.end.z = 0; var B = n.closestPointToPointParameter(i, !0); n.at(B, r); var x = a.lerp(A.z, e.z, B), S = x >= -1 && 1 >= x, w = i.distanceTo(r) < .5 * f; if (S && w) { n.start.fromBufferAttribute(m, I), n.end.fromBufferAttribute(C, I), n.start.applyMatrix4(v), n.end.applyMatrix4(v); var M = new y, b = new y; c.distanceSqToSegment(n.start, n.end, b, M), l.push({ point: b, pointOnLine: M, distance: c.origin.distanceTo(b), object: this, face: null, faceIndex: I, uv: null, uv2: null }) } } } } }() }); var _C = function (A, e) { ep.call(this, gp.FILLCLIPPLANE, { priority: 20 }), this.cubeSize = A.clone(), this.originBoundingBox = (new aA).setFromCenterAndSize(e, A), this.boundingBox = this.originBoundingBox.clone(), this.center = e.clone(), this.length = .8 * this.originBoundingBox.getSize(new y).length(), this.planeOffset = 0, this.normalIndex = 3, this.visible = !1, this.rotatable = !1, this.hit = !1, this.clipplane = new p, this.observer = null, this.renderClipPlane = new EA, this.angleA = 0, this.angleB = 0, this.uniforms = { iClipPlane: { value: 0 }, vClipPlane: { value: new Array(new p) } }, this.planeMaterial = new jC({ color: 6724044, opacity: .3, transparent: !0, side: 2, lights: !0 }), this.planeMaterial.visible = !1, this.planeHighLightMatrial = new jC({ color: 6724044, opacity: .3, transparent: !0, side: 2, lights: !0 }), this.initPlaneModel = function () { for (var A = this.children.length - 1; A >= 0; A -= 1) this.remove(this.children[A]); this.planeOffset = 0; var e = this.length, t = new Ue(new At(e, e), this.planeMaterial); t.name = "fillClipPlane", t.customTag = !0, t.renderOrder = 90, this.position.copy(this.center), this.clipplane.set(0, 0, 1, 0), this.planeMesh = t, this.add(t) }, this.initWireframes = function () { var A = .5 * this.length, e = [-A, A, 0, A, A, 0, -A, -A, 0, A, -A, 0], t = new he, i = new jC({ color: 2003199, lights: !0 }); t.setIndex([0, 1, 1, 3, 3, 2, 2, 0]), t.setAttribute("position", new Ae(e, 3)); var o = new jo(t, i); o.name = "Wireframes", o.customTag = !0, this.wireframeMesh = o, this.add(o) }, this.getCoordinate = function () { var A = .5 * this.length, e = new y(-A, A, 0); e.applyMatrix4(this.matrix); var t = new y(A, A, 0); t.applyMatrix4(this.matrix); var i = new y(-A, -A, 0); return i.applyMatrix4(this.matrix), { axisX: e.clone().sub(t).normalize(), axisY: e.clone().sub(i).normalize() } }, this.initCapsPlane = function () { if (this.capPlane) return this.capPlane; this.planeMesh || this.initPlaneModel(); var A = this.length, e = new Ue(new At(A, A), new jC({ color: 16776960, side: 2, stencilWrite: !0, stencilFunc: 515, stencilRef: 1, stencilFuncMask: 255, stencilFail: 7680, stencilZFail: 7680, stencilZPass: 7680 })), t = this.planeMesh; e.matrixWorld = t.matrixWorld, e.matrix = this.matrix; for (var i = .5 * this.length, o = .01 * this.length, n = [], r = i - o; r > -i; r -= o) n.push(r, i, 0), n.push(i, r, 0); for (r = -i + o; i > r; r += o) n.push(-i, r, 0), n.push(r, -i, 0); var a = new YC({ color: 2236962, stencilWrite: !0, stencilFunc: 515, stencilRef: 1, stencilFuncMask: 255, stencilFail: 7680, stencilZFail: 7680, stencilZPass: 7680 }); a.linewidth = 1, a.resolution.set(window.innerWidth, window.innerHeight), a.depthTest = !1; var s = new JC; s.setPositions(n); var l = new XC(s, a); return l.matrix = this.matrix, l.matrixWorld = t.matrixWorld, this.capPlane = { planeMesh: e, lineMesh: l }, this.capPlane }, this.updateClippingParams = function (A) {}, this.getFillClipBoundingBox = function () { return this.boundingBox }, this.calculateFillClipBoundingBox = function (A) { this.boundingBox = this.originBoundingBox.clone(), 0 !== this.clipplane.x ? 1 === this.clipplane.x ? this.boundingBox.max.x = A.x : this.boundingBox.min.x = A.x : 0 !== this.clipplane.y ? 1 === this.clipplane.y ? this.boundingBox.max.y = A.y : this.boundingBox.min.y = A.y : 0 !== this.clipplane.z && (1 === this.clipplane.z ? this.boundingBox.max.z = A.z : this.boundingBox.min.z = A.z) }, this.enable = function (A, e) { this.visible = e, this.uniforms.iClipPlane.value = A ? 1 : 0, this.capPlane && (this.capPlane.lineMesh.visible = e, this.capPlane.planeMesh.visible = e), this.update() }, this.isEnabled = function () { return 0 !== this.uniforms.iClipPlane.value }, this.update = function () { this.updateMatrixWorld(); var A = new M; A.getInverse(this.matrix), A.transpose(), this.uniforms.vClipPlane.value[0] = this.clipplane.clone().applyMatrix4(A), this.updateClippingParams(this.uniforms), this.observer && this.observer() }, this.getClipPlane = function () { return this.clipplane.clone() }, this.offset = function (A) { var e = this.cubeSize.length(); this.planeOffset += A, Math.abs(this.planeOffset) > .5 * e && (this.planeOffset = this.planeOffset > 0 ? .5 * e : .5 * -e); var t = this.uniforms.vClipPlane.value[0].clone(), i = new y(t.x, t.y, t.z); i.normalize(); var o = new y(i.x * this.planeOffset, i.y * this.planeOffset, i.z * this.planeOffset); this.position.copy(this.center).add(o), this.update() }, this.setOffset = function (A) { var e = this.cubeSize.length(); this.planeOffset = A, Math.abs(A) > .5 * e && (this.planeOffset = A > 0 ? .5 * e : .5 * -e); var t = this.uniforms.vClipPlane.value[0].clone(), i = new y(t.x, t.y, t.z); i.normalize(); var o = new y(i.x * this.planeOffset, i.y * this.planeOffset, i.z * this.planeOffset); this.position.copy(this.center).add(o), this.update() }, this.changeNormal = function (A) { this.quaternion.set(0, 0, 0, 1), this.angleA = 0, this.angleB = 0, this.setNormal(A) }, this.setNormal = function (A) { var e = this.planeMesh, t = this.wireframeMesh; 0 === A ? (this.clipplane.set(1, 0, 0, 0), e.rotation.set(0, Math.PI / 2, 0), t.rotation.set(0, Math.PI / 2, 0)) : 1 === A ? (this.clipplane.set(-1, 0, 0, 0), e.rotation.set(0, -Math.PI / 2, 0), t.rotation.set(0, -Math.PI / 2, 0)) : 2 === A ? (this.clipplane.set(0, 0, 1, 0), e.rotation.set(Math.PI, 0, 0), t.rotation.set(Math.PI, 0, 0)) : 3 === A ? (this.clipplane.set(0, 0, -1, 0), e.rotation.set(0, 0, 0), t.rotation.set(0, 0, 0)) : 4 === A ? (this.clipplane.set(0, 1, 0, 0), e.rotation.set(-Math.PI / 2, 0, 0), t.rotation.set(-Math.PI / 2, 0, 0)) : 5 === A && (this.clipplane.set(0, -1, 0, 0), e.rotation.set(Math.PI / 2, 0, 0), t.rotation.set(Math.PI / 2, 0, 0)), this.normalIndex = A, e.updateMatrixWorld(), t.updateMatrixWorld(), this.capPlane && (this.capPlane.planeMesh.matrixWorld = e.matrixWorld, this.capPlane.lineMesh.matrixWorld = e.matrixWorld), this.update() }; var t = new f, i = new y(1, 0, 0); this.rotX = function (A) { t.setFromAxisAngle(i, A), this.quaternion.multiply(t), this.update() }; var o = new y(0, 1, 0); this.rotY = function (A) { t.setFromAxisAngle(o, A), this.quaternion.multiply(t), this.update() }; var n = new y(0, 0, 1); this.rotateByAxis = function (A, e) { t.setFromAxisAngle(A, e), this.quaternion.multiply(t) }, this.rotateAngleOffset = function (A, e) { var t = this.normalIndex; A = A % 360 / 180 * Math.PI, 0 === t || 1 === t ? ("y" === e && this.rotateByAxis(n, A), "z" === e && this.rotateByAxis(o, A)) : 2 === t || 3 === t ? ("x" === e && this.rotateByAxis(i, A), "z" === e && this.rotateByAxis(o, A)) : 4 !== t && 5 !== t || ("x" === e && this.rotateByAxis(i, A), "y" === e && this.rotateByAxis(n, A)), this.update() }, this.setRotateAngle = function (A, e) { this.quaternion.set(0, 0, 0, 1); var t = this.normalIndex; e = 0 > (e = void 0 === e ? this.angleB : e % 360) ? 360 + e : e, this.angleA = A = 0 > (A = void 0 === A ? this.angleA : A % 360) ? 360 + A : A, this.angleB = e, A = A / 180 * Math.PI, e = e / 180 * Math.PI, 0 === t || 1 === t ? (e = 0 === t ? e : -e, this.rotateByAxis(n, A = 0 === t ? -A : A), this.rotateByAxis(o, e)) : 2 === t || 3 === t ? (this.rotateByAxis(i, A), this.rotateByAxis(o, e)) : 4 !== t && 5 !== t || (e = 3 === t ? e : -e, this.rotateByAxis(i, A = 3 === t ? -A : A), this.rotateByAxis(n, e)), this.update() }, this.getRotateAngle = function () { return { angleA: this.angleA, angleB: this.angleB } }, this.highLight = function () { this.planeMesh.material = this.planeHighLightMatrial }, this.cancelHighLight = function () { this.planeMesh.material = this.planeMaterial, this.hit = !1 }; var r = function (A, e, t, i, o, n, r, a, s) { this.enable = A, this.visible = e, this.rotatable = t, this.planeOffset = i, this.position = o, this.scale = n, this.quaternion = r, this.cubeSize = a, this.center = s }; this.store = function () { return new r(!!this.uniforms.iClipPlane.value, this.visible, this.rotatable, this.planeOffset, this.position.clone(), this.scale.clone(), this.quaternion.clone(), this.cubeSize.clone(), this.center.clone()) }, this.restore = function (A) { this.enable(A.enable, A.visible), this.rotatable = A.rotatable, this.planeOffset = A.planeOffset, this.position.copy(A.position), this.scale.copy(A.scale), this.quaternion._w = A.quaternion._w, this.quaternion._x = A.quaternion._x, this.quaternion._y = A.quaternion._y, this.quaternion._z = A.quaternion._z, this.normalIndex = void 0 === A.normalIndex ? this.normalIndex : A.normalIndex, this.setNormal(this.normalIndex) }, this.setProcess = function (A) { var e = this.cubeSize.length(); A > 1 ? A = 1 : -1 > A && (A = -1), this.planeOffset = A * e * .5; var t = this.uniforms.vClipPlane.value[0].clone(), i = new y(t.x, t.y, t.z); i.normalize(); var o = new y(i.x * this.planeOffset, i.y * this.planeOffset, i.z * this.planeOffset); this.position.copy(this.center).add(o), this.update() }, this.restoreRotation = function () { this.quaternion.set(0, 0, 0, 1), this.update() }, this.getProcess = function () { var A = this.cubeSize.length(); return this.planeOffset / A * 2 } }; (_C.prototype = Object.create(ep.prototype)).constructor = _C, _C.prototype.init = function () { this.initPlaneModel(), this.initWireframes() }, _C.prototype.hitTest = function (A) { if (this.visible) { var e = null, t = null; if (this.hit = this.raycast(A), this.hit) { var i = A.ray, o = new EA, n = this.uniforms.vClipPlane.value[0]; o.setComponents(n.x, n.y, n.z, n.w), e = i.distanceToPlane(o), t = 0 > i.direction.dot(o.normal) } return { sign: t, distance: e } } this.hit = !1 }, _C.prototype.raycast = function (A, e) { var t = []; return this.planeMesh.raycast(A, t), t.length > 0 }, _C.prototype.resize = function (A, e) { var t = A.length() / this.length; this.scale.set(t, t, t), this.cubeSize.copy(A), e && (this.center = e.clone(), this.position.copy(this.center)), this.offset(0), this.updateMatrixWorld() }, _C.prototype.getSideLength = function () { return this.length * this.scale.x }; var $C = function (A, e) { this.cls = A, this.size = e, this._pool = [], this.counter = 0 }; $C.prototype.init = function (A) { for (var e = 0, t = this.size; t > e; e += 1) { var i = new this.cls; i.init(A), this._pool[e] = i } }, $C.prototype.resize = function (A, e) { this.size = A, this.collect(), this.init(e) }, $C.prototype.get = function (A) { return this.size > this.counter ? (this._pool[this.counter].spawn(A), this.counter += 1, this.counter - 1) : (Bh.log("the pool is full"), -1) }, $C.prototype.clear = function () { for (var A = 0, e = this.size; e > A; A += 1) this._pool[A].clear(); this.counter = 0 }, $C.prototype.destroy = function () { this.collect() }, $C.prototype.collect = function () { this._pool = [], this.counter = 0 }, $C.prototype.getObjects = function () { return this._pool }; var Ay = function (A, e) { var t = new he; t.setAttribute("position", new YA(new Float32Array(72), 3)), jo.call(this, t, new ko({ color: e })), void 0 !== A && this.updateBBox(A) }; (Ay.prototype = Object.create(jo.prototype)).constructor = Ay, Ay.prototype.unload = function () {}, Ay.prototype.updateBBox = function (A) { var e = A.min, t = A.max, i = this.geometry.attributes.position.array; i[0] = t.x, i[1] = t.y, i[2] = t.z, i[3] = e.x, i[4] = t.y, i[5] = t.z, i[6] = e.x, i[7] = t.y, i[8] = t.z, i[9] = e.x, i[10] = e.y, i[11] = t.z, i[12] = e.x, i[13] = e.y, i[14] = t.z, i[15] = t.x, i[16] = e.y, i[17] = t.z, i[18] = t.x, i[19] = e.y, i[20] = t.z, i[21] = t.x, i[22] = t.y, i[23] = t.z, i[24] = t.x, i[25] = t.y, i[26] = e.z, i[27] = e.x, i[28] = t.y, i[29] = e.z, i[30] = e.x, i[31] = t.y, i[32] = e.z, i[33] = e.x, i[34] = e.y, i[35] = e.z, i[36] = e.x, i[37] = e.y, i[38] = e.z, i[39] = t.x, i[40] = e.y, i[41] = e.z, i[42] = t.x, i[43] = e.y, i[44] = e.z, i[45] = t.x, i[46] = t.y, i[47] = e.z, i[48] = t.x, i[49] = t.y, i[50] = t.z, i[51] = t.x, i[52] = t.y, i[53] = e.z, i[54] = e.x, i[55] = t.y, i[56] = t.z, i[57] = e.x, i[58] = t.y, i[59] = e.z, i[60] = e.x, i[61] = e.y, i[62] = t.z, i[63] = e.x, i[64] = e.y, i[65] = e.z, i[66] = t.x, i[67] = e.y, i[68] = t.z, i[69] = t.x, i[70] = e.y, i[71] = e.z, this.geometry.attributes.position.needsUpdate = !0, this.geometry.computeBoundingBox(), this.geometry.computeBoundingSphere(), this.matrixAutoUpdate = !1 }; var ey = function () { ep.call(this, gp.EXTERNALSCENEMANAGER, { pickableType: Qc.Geometry, priority: 20 }), this.globalSpace = !0 }; (ey.prototype = Object.create(ep.prototype)).constructor = ey, ey.prototype.getNode = function (A) { for (var e = this.children, t = 0, i = e.length; i > t; t += 1) if (e[t].name === A.toString()) return e[t]; return null }, ey.prototype.removeNodeByName = function (A) { var e = this.getNode(A); return !!e && (this.remove(e), !0) }, ey.prototype.clearNodes = function () { this.clear() }, ey.prototype.setNodeVisibleByName = function (A, e) { var t = this.getNode(A); return !!t && (t.visible = e, !0) }, ey.prototype.showAllNodes = function () { for (var A = this.children, e = 0, t = A.length; t > e; e += 1) A[e].visible = !0 }, ey.prototype.hideAllNodes = function () { for (var A = this.children, e = 0, t = A.length; t > e; e += 1) A[e].visible = !1 }; var ty = function () { ep.call(this, gp.EXTRUDEBODYMANAGER, { pickableType: Qc.Geometry, priority: 20 }), this.globalSpace = !0, this.mapColorToNodeId = {}, this.selectionIds = {}, this.selectionColor = { red:240 , green: 224, blue:50 , alpha: .3 }, this.selectionEdgeColor = { red: 50, green: 224, blue: 240, alpha: 1 } }; function iy(A) { this.scene = A, this.lightArray = void 0, this.lightHelperArray = void 0, this.lightHelper = !1, this._currentPreset = void 0, this._intensityFactor = vc.LightIntensityFactor, this.defaultShadowLightDir = new y(100, -100, -160), this.defaultLightDir = new y(100, -100, -160), this.shadowLightDir = new y(100, -100, -160), this.lightDir = new y(100, -100, -160), this._ambientLight = void 0, this.setLightPreset(vc.LightPreset) } (ty.prototype = Object.create(ep.prototype)).constructor = ty, ty.prototype.addNode = function (A, e, t, i, o, n) { n = void 0 === n || n; var r = this.getNode(A); if (r) return r.material = i, this.setColorInMap(r.name, i), void((r = this.getNode("wireframe_" + A)) && (r.material = o, this.setColorInMap(r.name, o))); var a = [], l = 0; if (e.belong && "user" === e.belong) a = e.roomBoundary, l = e.offsetZ; else { e.version && "2.0" === e.version && (e = e.loops && e.loops.length > 0 ? e.loops[0] : []); for (var c = e.length, h = 0; c > h; h += 1) for (var d = e[h], p = d.length, g = 0; p - 1 > g; g += 1) { var u = d[g]; a.push(new s(u.x, u.y)), 0 === h && 0 === g && (l = u.z) } a.length > 0 && a.push(a[0]) } var f = new Jn(new Ba(a), { amount: t }); i.depthTest = !n, f.boundingBox || f.computeBoundingBox(); var m = new Ue(f, i); m.name = A.toString(), m.translateZ(l), this.setColorInMap(m.name, i), this.add(m), this.updateMatrixWorld(!0); var C = m.geometry.faces, y = []; for (h = 0, p = C.length; p > h; h += 1) y.push(C[h].a), y.push(C[h].b), y.push(C[h].c); var v = m.geometry.vertices, I = []; for (h = 0, p = v.length; p > h; h += 1) I.push(v[h].x), I.push(v[h].y), I.push(v[h].z); var E = Up(I, y, Math.PI / 3.5), B = new he; B.setIndex(new $A(E, 1)), B.setAttribute("position", new Ae(I, 3)), o.depthTest = !n, o.transparent = !0; var x = new jo(B, o); x.translateZ(l), x.name = "wireframe_" + A, this.setColorInMap(x.name, o), this.add(x), this.updateMatrixWorld(!0) }, ty.prototype.setColorInMap = function (A, e) { console.log(e.color.r); this.mapColorToNodeId[A] = { red: 255 * e.color.r, green: 255 * e.color.g, blue: 255 * e.color.b, alpha: e.opacity } }, ty.prototype.createMaterial = function (A) { return Kd.createStandardMaterial(A) }, ty.prototype.setNodeMaterial = function (A, e, t) { var i = this.getNode(A); if (i) { var o = i.material; for (var n in e) { o.hasOwnProperty(r = n) && (o[r] = "color" === r ? new LA(e[n]) : e[n]) } } if (i = this.getNode("wireframe_" + A)) { o = i.material; for (var n in t) { var r; o.hasOwnProperty(r = n) && (o[r] = "color" === r ? new LA(t[n]) : t[n]) } } }, ty.prototype.getNode = function (A) { for (var e = this.children, t = 0, i = e.length; i > t; t += 1) if (e[t].name === A.toString()) return e[t]; return null }, ty.prototype.removeNodeById = function (A) { var e = this.getNode(A); return e && (delete this.mapColorToNodeId[e.name], this.remove(e)), !!(e = this.getNode("wireframe_" + A)) && (delete this.mapColorToNodeId[e.name], this.remove(e), !0) }, ty.prototype.clearNodes = function () { this.clear(), this.mapColorToNodeId = {} }, ty.prototype.setNodeVisibleById = function (A, e) { var t = this.getNode(A); return t && (t.visible = e), !!(t = this.getNode("wireframe_" + A)) && (t.visible = e, !0) }, ty.prototype.showAllNodes = function () { for (var A = this.children, e = 0, t = A.length; t > e; e += 1) A[e].visible = !0 }, ty.prototype.hideAllNodes = function () { for (var A = this.children, e = 0, t = A.length; t > e; e += 1) A[e].visible = !1 }, ty.prototype.setNodeColorById = function (A, e) { var t = this.getNode(A); console.log('setNodeColorById...', t); if (t) { var i = t.material; return i.color = new LA(e.red / 255, e.green / 255, e.blue / 255), i.opacity = e.alpha, e !== this.selectionColor && e !== this.selectionEdgeColor && this.setColorInMap(t.name, i), !0 } return !1 }, ty.prototype.getNodeColorById = function (A) { return this.mapColorToNodeId[A] }, ty.prototype.setWireframeColorById = function (A, e) { console.log('setWireframeColorById'); return this.setNodeColorById("wireframe_" + A, e) }, ty.prototype.getWireframeColorById = function (A) { return this.getNodeColorById("wireframe_" + A) }, ty.prototype.applySelection = function (A) { console.log('applySelection77') console.log(this.selectionColor) this.clearSelection(); var e = this.selectionIds, t = this.mapColorToNodeId, i = A.sceneState.selectionSet; console.log('i>>',i) // debugger; for (var o in i) t[o] && (e[o] = !0, // this.setNodeColorById(o, this.selectionColor), this.setNodeColorById(o, { alpha: 0.3, blue: 50, green: 224, red: 240 }), this.setWireframeColorById(o, this.selectionEdgeColor)) }, ty.prototype.clearSelection = function () { console.log('clearSelection') var A = this.mapColorToNodeId; console.log('A',A) if (this.selectionIds) { console.log(this.selectionIds) for (var e = this.children, t = 0, i = e.length; i > t; t += 1) { var o = e[t], n = A[o.name]; o.material.color = new LA(n.red / 255, n.green / 255, n.blue / 255), o.material.opacity = n.alpha } this.selectionIds = {} } }, ty.prototype.applyHover = function (A) { var e = A.sceneState; if (e.hoverId && !e.isSelected(e.hoverId)) { var t = this.getNode(e.hoverId); if (t) { this.hoveredId = e.hoverId; var i = this.mapColorToNodeId[this.hoveredId], o = Kd.getHoverColorByColor({ r: i.red / 255, g: i.green / 255, b: i.blue / 255, a: i.alpha }); t.material.color.setRGB(o.r, o.g, o.b), t.material.opacity = o.a } } }, ty.prototype.clearHover = function () { var A = this.hoveredId; if (A) if (this.selectionIds[A]) this.hoveredId = null; else { var e = this.getNode(A); if (e) { var t = this.mapColorToNodeId[A]; e.material.color.setRGB(t.red / 255, t.green / 255, t.blue / 255), e.material.opacity = t.alpha, this.hoveredId = null } else this.hoveredId = null } }, iy.prototype.destroy = function () { this.scene = void 0, this._clearLights(), this._clearLightHelpers() }, iy.prototype.currentLights = function () { if (this.lightArray) return [].concat(this.lightArray) }, iy.prototype.setLightPreset = function (A) { this._currentPreset !== A && (vc.LightPreset = A, this._currentPreset = A, this._clearLights(), this._clearLightHelpers(), this._createLights(), this.setIntensityFactor(this._intensityFactor), this.lightHelper && this._createLightHelpers()) }, iy.prototype.getLightPreset = function () { return this._currentPreset }, iy.prototype.updateLights = function (A) { if (this.lightArray) { var e = new y(0, 0, 1), t = Math.PI / 4, i = A.position.clone(); i.sub(A.target), i.normalize(); var o = null; if (0 === this._currentPreset) { var n = this.lightArray[1]; n.position.set(i.x, i.y, i.z), n.updateMatrixWorld(!0) } else if (1 === this._currentPreset || 3 === this._currentPreset) { var r = this.lightArray[2], a = this.lightArray[3]; o = i.clone().applyAxisAngle(e, -1.2 * t), r.position.copy(o).normalize(), r.position.multiplyScalar(1e3), r.position.z = 600, r.updateMatrixWorld(), o = i.clone().applyAxisAngle(e, Number(t)), a.position.copy(o).normalize(), a.position.multiplyScalar(1e3), a.position.z = 600, a.updateMatrixWorld() } else if (2 === this._currentPreset) { var s = this.lightArray[1], l = this.scene.getBoundingBox().getCenter(new y), c = new y(l.x - (o = this.lightDir).x, l.y - o.y, l.z - o.z); s.position.copy(c), s.target.position.set(l.x, l.y, l.z), s.target.updateMatrixWorld(!0), s.updateMatrixWorld(!0) } else { s = this.lightArray[1]; o = i.clone().applyAxisAngle(e, -2 * t), s.position.copy(o).normalize(), s.position.multiplyScalar(1e3), s.position.z = 600, s.updateMatrixWorld() } this.lightHelperArray && this.updateLightHelper() } }, iy.prototype.updateLightHelper = function () { for (var A = 0; this.lightHelperArray.length > A; A += 1) { var e = this.lightHelperArray[A]; e.update(), e.updateMatrixWorld(!0) } }, iy.prototype.setIntensityFactor = function (A) { if (!isNaN(A)) { var e = Number(A); if (e >= 0 && (this._intensityFactor = e, vc.LightIntensityFactor = this._intensityFactor, this.lightArray)) for (var t = 0, i = this.lightArray.length; i > t; t += 1) { var o = this.lightArray[t]; o.intensity = o.initIntensity * this._intensityFactor } } }, iy.prototype.getIntensityFactor = function () { return this._intensityFactor }, iy.prototype.setAmbientLightIntensity = function (A) { if (this._ambientLight) { if (isNaN(A)) return; var e = Number(A); if (0 > e) return; this._ambientLight.intensity = e } }, iy.prototype.getAmbientLightIntensity = function () { if (this._ambientLight) return this._ambientLight.intensity }, iy.prototype._createLights = function () { var A = null; switch (this._currentPreset) { case 0: A = this._lightPreset0(); break; case 1: A = this._lightPreset1(); break; case 2: A = this._lightPreset2(); break; case 3: A = this._lightPreset3(); break; case 4: A = this._lightPreset4(); break; default: (A = this._commonLights(.72))[1].color.setHex(16777215) } if (this.lightArray = A, this.scene && this.lightArray) for (var e = 0, t = this.lightArray.length; t > e; e += 1) this.scene.add(this.lightArray[e]), this.lightArray[e].updateMatrixWorld() }, iy.prototype._clearLights = function () { if (this.lightArray) { for (var A = 0; this.lightArray.length > A; A += 1) { var e = this.lightArray[A]; e.parent && e.parent.remove(e) } this.lightArray = void 0 } this._ambientLight = void 0 }, iy.prototype._createLightHelpers = function () { if (this.lightArray) for (var A = 0; this.lightArray.length > A; A += 1) { var e = this.lightArray[A]; if (e instanceof Ra) { var t = new ll(e, 6e3); this.lightHelperArray || (this.lightHelperArray = []), this.lightHelperArray.push(t), this.scene && this.scene.add(t) } } }, iy.prototype._clearLightHelpers = function () { if (this.lightHelperArray) { for (var A = 0; this.lightHelperArray.length > A; A += 1) { var e = this.lightHelperArray[A]; e.parent && e.parent.remove(e) } this.lightHelperArray = void 0 } }, iy.prototype._commonLights = function (A, e) { var t = [], i = new Ta(16777215, .6); i.intensity = .3, i.initIntensity = i.intensity, t.push(i), this._ambientLight = i; var o = new Ra(16777215, 1); return o.color.setHex(14800580), o.position.set(-100, 100, 160), o.intensity = .72, o.initIntensity = o.intensity, o.distance = 300, o.updateMatrixWorld(), t.push(o), vc.EnableShadow && (o.castShadow = !0, o.shadow.camera.near = 0, o.shadow.camera.far = 5e6, o.shadow.camera.left = -2e5, o.shadow.camera.right = 2e5, o.shadow.camera.top = 2e5, o.shadow.camera.bottom = -2e5, o.distance = 1110, o.shadow.mapSize.height = 1028, o.shadow.mapSize.width = 1028), t }, iy.prototype._lightPreset0 = function () { var A = null; if (!vc.EnableLightmap) { A = []; var e = .3, t = new Sa(16777215, 16777215, e); A.push(t), t.initIntensity = e, t.position.set(0, 0, 500), t.updateMatrixWorld(!0); var i = new Ra(16777215, e = .7); A.push(i), i.initIntensity = e, i.color.setHSL(.1, .95, 1), i.position.set(-1, 1, .75), i.position.multiplyScalar(50) } return A }, iy.prototype._lightPreset1 = function () { var A = this._commonLights(.4, .56); A || (A = []); var e = new Ra(16777215, 1); A.push(e), e.color.setHex(16777215), e.position.set(100, 100, 100), e.intensity = .4, e.initIntensity = e.intensity, e.updateMatrixWorld(); var t = new Ra(16777215, 1); return A.push(t), t.color.setHex(16777215), t.position.set(-100, -100, 100), t.intensity = .18, t.initIntensity = t.intensity, t.updateMatrixWorld(), A }, iy.prototype._lightPreset2 = function () { var A = this._commonLights(); A || (A = []); var e = new Ra(16777215, 1); A.push(e), e.position.set(60, 130, 80), e.intensity = .28, e.initIntensity = e.intensity, e.updateMatrixWorld(); var t = new Ra(16777215, 1); A.push(t), t.color.setHex(8100788), t.position.set(100, -100, 80), t.intensity = .22, t.initIntensity = t.intensity, t.updateMatrixWorld(); var i = new Ra(16777215, 1); return A.push(i), i.color.setHex(8100788), i.position.set(-140, -50, 80), i.intensity = .18, i.initIntensity = i.intensity, i.updateMatrixWorld(), A }, iy.prototype._lightPreset3 = function () { var A = this._commonLights(.4, .56); A || (A = []); var e = new Ra(16777215, 1); A.push(e), e.color.setHex(16777215), e.position.set(100, 100, 100), e.intensity = .22, e.initIntensity = e.intensity, e.updateMatrixWorld(); var t = new Ra(16777215, 1); return A.push(t), t.color.setHex(16777215), t.position.set(-100, -100, 100), t.intensity = .18, t.initIntensity = t.intensity, t.updateMatrixWorld(), A }, iy.prototype._lightPreset4 = function () { var A = this._commonLights(.4, .56); A || (A = []); var e = new Ra(16777215, 1); A.push(e), e.color.setHex(16777215), e.position.set(100, 100, 100), e.intensity = .4, e.initIntensity = e.intensity, e.updateMatrixWorld(); var t = new Ra(16777215, 1); return A.push(t), t.color.setHex(16777215), t.position.set(-100, -100, 100), t.intensity = .1, t.initIntensity = t.intensity, t.updateMatrixWorld(), A[0].intensity = .3, A[1].intensity = .2, this.enableShadowLight(), A }, iy.prototype.enableShadowLight = function () { this.lightCastShadow ? this.lightCastShadow.visible = !0 : (this.lightCastShadow = new Ra(16777215, .15), this.lightCastShadow.intensity = .5, this.lightCastShadow.initIntensity = .5, this.lightCastShadow.castShadow = !0, this.lightCastShadow.shadow.mapSize.width = 1024, this.lightCastShadow.shadow.mapSize.height = 1024, this.lightCastShadow.shadow.bias = -9e-4, this.scene.add(this.lightCastShadow)), this.lightCastShadow.updateMatrixWorld() }, iy.prototype.getLightDirFromAltitudeAndAzimuth = function (A, e) { var t = Math.sin(e), i = Math.cos(e); return e > 0 && (i = -i), new y(t, i, Math.sin(A) / Math.cos(A)).multiplyScalar(-100) }, iy.prototype.disableShadowLight = function () { this.lightCastShadow && (this.lightCastShadow.visible = !1) }, iy.prototype.updateShadowLight = function () { if (null !== this.scene.geometryGroup.boundingBox && this.lightCastShadow && this.lightCastShadow.visible) { var A = this.scene.getBoundingBox().clone(), e = new y, t = A.getSize(e); t.multiplyScalar(.2), A.min.sub(t), A.max.add(t); var i = A.getCenter(new y), o = this.shadowLightDir, n = new y(i.x - o.x, i.y - o.y, i.z - o.z); this.lightCastShadow.position.set(n.x, n.y, n.z), this.lightCastShadow.target.position.set(i.x, i.y, i.z), this.lightCastShadow.target.updateMatrixWorld(!0), this.lightCastShadow.updateMatrixWorld(!0); var r = this.lightCastShadow.shadow.camera; r.position.set(n.x, n.y, n.z), r.lookAt(i), r.updateMatrixWorld(), r.matrixWorldInverse.getInverse(r.matrixWorld), t = A.getSize(new y), A.min.z = A.min.z - .05 * t.z; var a = new EA(new y(0, 0, 1), -A.min.z), s = a.normal.dot(o), l = A.max.clone(), c = -(l.dot(a.normal) + a.constant) / s, h = new y; h.copy(o).multiplyScalar(c).add(l), A.expandByPoint(h), A.applyMatrix4(r.matrixWorldInverse), r.left = A.min.x, r.right = A.max.x, r.top = A.max.y, r.bottom = A.min.y, r.far = 1.5 * -A.min.z, r.near = -A.max.z, r.updateProjectionMatrix() } }, iy.prototype.disableLights = function () { if (this.lightArray) for (var A = 0, e = this.lightArray.length; e > A; A += 1) this.lightArray[A].visible = !1 }, iy.prototype.enableLights = function () { if (this.lightArray) for (var A = 0, e = this.lightArray.length; e > A; A += 1) this.lightArray[A].visible = !0 }; var oy = function () { console.log('oy..................') H.call(this), this.type = "Scene", this.autoUpdate = !1, this.tempVector3 = new y, this.objectGroups = new ep, this.add(this.objectGroups), this.geometryGroup = new ep(gp.GEOMETRY, { pickableType: Qc.Geometry, globalSpace: !0 }), this.geometryGroup.boundingBox = new aA, this.pool = new $C(Kf, 0), this.expandScalar = 1.01, this.clipPlanes = null, this.fillClipPlane = null, this.areaNode = null, this.extrudeBodyManager = null, this.externalScene = null, this.externalComponentManager = null, this.customPlaneManager = null, this.axisGridManager = null, this.lightManager = new iy(this), this.selectedMeshes = [], this.nonSelectedMeshes = [], this.selectedInstanceMeshes = [], this.nonSelectedInstanceMeshes = [], this.componentTransformControl = void 0 }; (oy.prototype = Object.create(H.prototype)).constructor = oy, oy.prototype.createCapStencilMaterials = function () { this.backMaterial || (this.backMaterial = Kd.createStandardMaterial({ color: 16711680, colorWrite: !1, depthWrite: !1, depthTest: !1, side: 1, stencilWrite: !0, stencilFunc: 519, stencilRef: 1, stencilFuncMask: 255, stencilFail: 7680, stencilZFail: 7680, stencilZPass: 7682 }), this.frontMaterial = Kd.createStandardMaterial({ color: 255, colorWrite: !1, depthWrite: !1, depthTest: !1, side: 0, stencilWrite: !0, stencilFunc: 519, stencilRef: 1, stencilFuncMask: 255, stencilFail: 7680, stencilZFail: 7680, stencilZPass: 7683 }), this.backInstanceMaterial = Kd.createStandardMaterial({ color: 16711680, colorWrite: !1, depthWrite: !1, depthTest: !1, side: 1, stencilWrite: !0, stencilFunc: 519, stencilRef: 1, stencilFuncMask: 255, stencilFail: 7680, stencilZFail: 7680, stencilZPass: 7682 }), this.backInstanceMaterial.defines.USE_INSTANCE = "", this.backInstanceMaterial.defines.USE_INSTANCE_NORMAL = "", this.frontInstanceMaterial = Kd.createStandardMaterial({ color: 255, colorWrite: !1, depthWrite: !1, depthTest: !1, side: 0, stencilWrite: !0, stencilFunc: 519, stencilRef: 1, stencilFuncMask: 255, stencilFail: 7680, stencilZFail: 7680, stencilZPass: 7683 }), this.frontInstanceMaterial.defines.USE_INSTANCE = "", this.frontInstanceMaterial.defines.USE_INSTANCE_NORMAL = "") }, oy.prototype.destroy = function () { this.lightManager.destroy(), this.clearAll(), this.pool.destroy(), this.pool = null, this.geometryGroup = null, this.objectGroups = null, this.clipPlanes = null, this.fillClipPlane = null, this.areaNode = null, this.extrudeBodyManager = null, this.externalComponentManager = null, this.axisGridManager = null, this.IBLMaps = null, this.transformMatrix = null, this.selectedMeshes = null, this.nonSelectedMeshes = null, this.selectedInstanceMeshes = null, this.nonSelectedInstanceMeshes = null }, oy.prototype.resizePool = function (A) { vc.MergeComponent || (this.geometryGroup.clear(), this.pool.resize(A, { parent: this.geometryGroup })) }, oy.prototype.clearAll = function () { this.pool.clear(), this.autoUpdate = !1 }, oy.prototype.getRootNode = function () { return this.geometryGroup }, oy.prototype.getBoundingBox = function () { var A = this.getBoundingBoxWorld(); return A.applyMatrix4(this.geometryGroup.matrix), A }, oy.prototype.getGeometryBoundingBox = function () { var A = new aA; A.copy(this.geometryGroup.boundingBox); var e = new y, t = A.getSize(e); return t.multiplyScalar(this.expandScalar - 1), A.min.sub(t), A.max.add(t), A.applyMatrix4(this.geometryGroup.matrix), A }, oy.prototype.getBoundingBoxWorld = function () { var A = new aA, e = new y; return function () { A.copy(this.geometryGroup.boundingBox), this.componentTransformControl && A.union(this.componentTransformControl.getBoundingBox()); var t = A.getSize(e); return t.multiplyScalar(this.expandScalar - 1), A.min.sub(t), A.max.add(t), this.fillClipPlane && this.fillClipPlane.visible ? A.expandByObject(this.fillClipPlane) : this.clipPlanes && this.clipPlanes.visible && A.expandByObject(this.clipPlanes), A } }(), oy.prototype.setBoundingBoxWorld = function (A) { this.geometryGroup.boundingBox ? this.geometryGroup.boundingBox.copy(A) : this.geometryGroup.boundingBox = A; var e = A.clone(); if (this.clipPlanes && this.clipPlanes.visible) { var t = e.getSize(new y); t.multiplyScalar(this.expandScalar - 1), e.min.sub(t), e.max.add(t), this.clipPlanes.setSectionBox(e.min, e.max) } if (this.fillClipPlane && this.fillClipPlane.visible) { var i = new y; e.getSize(i), i.multiplyScalar(.05), e.min.sub(i), e.max.add(i), this.fillClipPlane.resize(e.getSize(i), e.getCenter(new y)) } }, oy.prototype.expandBoundingBoxWorldBy = function (A) { if (A) { var e = A; A instanceof Array == !1 && (e = [A]); for (var t = 0, i = e.length; i > t; t += 1) { var o = e[t]; (o instanceof Ue || o instanceof H) && this.geometryGroup.boundingBox.expandByObject(o) } } }, oy.prototype.getTransformMatrixGlobal = function () { return this.transformMatrix }, oy.prototype.getMatrixGlobal = function () { return this.geometryGroup.matrix.clone() }, oy.prototype.getGlobalScaleFactor = function () { return this.geometryGroup.matrix.elements[0] }, oy.prototype.getMatrixWorldGlobal = function () { return this.geometryGroup.matrixWorld }, oy.prototype.getRotationGlobal = function () { if (this.geometryGroup.matrix) { var A = new M; A.extractRotation(this.geometryGroup.matrix); var e = new F; return e.setFromRotationMatrix(A), e } return null }, oy.prototype.getTrackingPointFromBoundingBox = function (A, e) { if (!this.geometryGroup.boundingBox) return null; var t = e.origin, i = this.getBoundingBox(), o = 0, n = [new y, new y, new y, new y, new y, new y, new y, new y]; n[0].set(i.min.x, i.min.y, i.min.z), n[1].set(i.min.x, i.min.y, i.max.z), n[2].set(i.min.x, i.max.y, i.min.z), n[3].set(i.min.x, i.max.y, i.max.z), n[4].set(i.max.x, i.min.y, i.min.z), n[5].set(i.max.x, i.min.y, i.max.z), n[6].set(i.max.x, i.max.y, i.min.z), n[7].set(i.max.x, i.max.y, i.max.z); for (var r = 0; 8 > r; r += 1) { var a = new y; a.subVectors(n[r], t); var s = a.dot(A); s > o && (o = s) } var l = A.clone().multiplyScalar(o), c = t.clone().add(l), h = new EA; return h.setFromNormalAndCoplanarPoint(A, c), e.intersectPlane(h, new y) }, oy.prototype.getNearDepthByRect = function () { var A = new aA, e = 1 / 0, t = new M, i = new y; function o(A) { i.setFromMatrixPosition(A.matrixWorld), i.applyProjection(t); var o = i.z; o >= e || 0 > o || o > 1 || (e = o) } return function (i, n) { function r(e) { if (e instanceof Kf) { if (! function (e, t) { if (!t.boundingBox || t instanceof Ue) { var i = t.geometry; null === i.boundingBox && i.computeBoundingBox(), A.copy(i.boundingBox), A.applyMatrix4(t.matrixWorld) } else A.copy(t.boundingBox), A.applyMatrix4(t.matrixWorld); return e.intersectsBox(A) }(i, e)) return; o(e) } else if (e.worldBoundingBox) { if (!i.intersectsBox(e.worldBoundingBox)) return; o(e) } var t = e.children; if (t) for (var n = 0, a = t.length; a > n; n += 1) { var s = t[n]; s.visible && r(s) } } e = 1 / 0, t.multiplyMatrices(n.projectionMatrix, n.matrixWorldInverse); for (var a = this.geometryGroup.children, s = 0, l = a.length; l > s; s += 1) { var c = a[s]; c.visible && r(c) } return e } }(), oy.prototype.getExpandScalar = function () { return this.expandScalar }, oy.prototype.hasClipPlanes = function () { return null !== this.clipPlanes }, oy.prototype.getClipPlanes = function (A) { var e = this.getBoundingBox(), t = e.getSize(new y), i = e.getCenter(this.tempVector3); return null === this.clipPlanes ? (this.clipPlanes = new HC(t, i), this.objectGroups.add(this.clipPlanes)) : A && this.clipPlanes.setSectionBox(e.min, e.max), this.clipPlanes }, oy.prototype.setClipPlanes = function (A) { if (A) { var e = this.getClipPlanes(); A.setFromCenterAndSize(A.getCenter(new y), A.getSize(new y).multiplyScalar(this.expandScalar)), e.setSectionBox(A.min, A.max) } }, oy.prototype.resetClipPlanes = function () { var A = this.getClipPlanes(), e = this.getBoundingBox(); A.reset(), e.max.x !== -1 / 0 && e.max.y !== -1 / 0 && e.max.z !== -1 / 0 && e.min.x !== 1 / 0 && e.min.y !== 1 / 0 && e.min.z !== 1 / 0 ? (e.setFromCenterAndSize(e.getCenter(new y), e.getSize(new y)), A.setSectionBox(e.min, e.max)) : this.clipPlanes = null }, oy.prototype.hasFillClipPlanes = function () { return null != this.fillClipPlane }, oy.prototype.getFillClipPlane = function () { var A = new aA; A.copy(this.geometryGroup.boundingBox), A.applyMatrix4(this.geometryGroup.matrix); var e = A.getSize(new y); e.multiplyScalar(.05), A.min.sub(e), A.max.add(e); var t = A.getSize(new y), i = A.getCenter(new y); return null === this.fillClipPlane ? (this.fillClipPlane = new _C(t, i), this.objectGroups.add(this.fillClipPlane)) : this.fillClipPlane.cubeSize.equals(t) || this.fillClipPlane.resize(t, i), this.fillClipPlane }, oy.prototype.disableClipPlanes = function () { null != this.clipPlanes && (this.clipPlanes.enable(!1, !1), this.clipPlanes.update()), null != this.fillClipPlane && (this.fillClipPlane.enable(!1, !1), this.fillClipPlane.update()) }, oy.prototype.getAreaNode = function () { return this.areaNode }, oy.prototype.getAxisGridManager = function () { return this.axisGridManager }, oy.prototype.getExtrudeBodyManager = function () { return null === this.extrudeBodyManager && (this.extrudeBodyManager = new ty, this.objectGroups.add(this.extrudeBodyManager), this.extrudeBodyManager.matrix.copy(this.geometryGroup.matrix), this.extrudeBodyManager.matrixAutoUpdate = !1, this.extrudeBodyManager.updateMatrixWorld(!0)), this.extrudeBodyManager }, oy.prototype.getCustomPlaneManager = function () { return this.customPlaneManager }, oy.prototype.getExternalScene = function () { return null === this.externalScene && (this.externalScene = new ey, this.add(this.externalScene), this.externalScene.updateMatrixWorld(!0)), this.externalScene }, oy.prototype.shrinkScopeByClipPlane = function (A, e) { if (this.clipPlanes && this.clipPlanes.isEnabled()) { var t = this.clipPlanes.hitTest(A); if (null === t.distance && void 0 === t.distance) return; t.sign ? t.distance > e.near && (e.near = t.distance) : e.far > t.distance && (e.far = t.distance) } }, oy.prototype.updateWorldMatrixByMatrix = function (A) { for (var e = this.objectGroups.children, t = 0, i = e.length; i > t; t += 1) e[t].globalSpace && (e[t].matrix.copy(A), e[t].matrixAutoUpdate = !1, e[t].updateMatrixWorld(!0)) }, oy.prototype.currentLights = function () { return this.lightManager.currentLights() }, oy.prototype.setLightPreset = function (A) { this.lightManager.setLightPreset(A) }, oy.prototype.getLightPreset = function () { return this.lightManager.getLightPreset() }, oy.prototype.setLightIntensityFactor = function (A) { this.lightManager.setIntensityFactor(A) }, oy.prototype.updateLights = function (A) { this.lightManager.updateLights(A) }, oy.prototype.setAmbientLightIntensity = function (A) { this.lightManager.setAmbientLightIntensity(A) }, oy.prototype.getAmbientLightIntensity = function () { return this.lightManager.getAmbientLightIntensity() }, oy.prototype.getOrCreateGroup = function (A, e) { for (var t = this.objectGroups.children, i = 0, o = t.length; o > i; i += 1) if (t[i].name === A) return t[i]; var n = new ep(A, e); return n.isGlobalSpace() && (n.matrix.copy(this.geometryGroup.matrix), n.matrixAutoUpdate = !1, n.updateMatrixWorld(!0)), this.objectGroups.add(n), n }, oy.prototype.getGroup = function (A) { for (var e = this.objectGroups.children, t = 0, i = e.length; i > t; t += 1) if (e[t].name === A) return e[t]; return null }, oy.prototype.getGroupType = function (A) { var e = A.split("|"); return { groupType: e[0], modelKey: e.length > 1 ? e[1] : void 0 } }, oy.prototype.getGroups = function () { return this.objectGroups.children }, oy.prototype.removeGroup = function (A) { this.objectGroups.remove(A) }, oy.prototype.removeGroupByName = function (A) { this.objectGroups.removeByName(A) }, oy.prototype.hasGroup = function (A) { return this.objectGroups.hasChild(A) }, oy.prototype.prepareScene = function () {}, oy.prototype.parseRootNode = function (A) { var e = this.geometryGroup, t = uh.box3FromObject(A.minBoundary, A.maxBoundary); null === e.boundingBox || e.boundingBox.isEmpty() ? e.boundingBox = t : (e.boundingBox.expandByPoint(t.min), e.boundingBox.expandByPoint(t.max)), e.updateMatrixWorld(!0) }, oy.prototype.intersectToWorld = function (A, e) { var t = this.getMatrixGlobal(); A.worldPosition = Tu.getWorldPositionOfMesh(A.point, t); var i = e.getComponentInfoByUserId(A.userId); i && (A.worldBoundingBox = i.boundingBox.clone()) }, oy.prototype.worldToDrawing = function (A) { var e = this.getMatrixGlobal(), t = new y(A.x, A.y, A.z); return t.applyMatrix4(e), t }, oy.prototype.drawingToWorld = function (A) { var e = this.getMatrixGlobal(), t = new M; t.getInverse(e); var i = new y(A.x, A.y, A.z); return i.applyMatrix4(t), i }, oy.prototype.getBoundingBoxWorldByMesh = function (A) { var e = this.getMatrixGlobal(), t = A.boundingBox; t || (A.geometry.boundingBox || A.geometry.computeBoundingBox(), t = A.geometry.boundingBox); var i = t.clone(); i.applyMatrix4(A.matrixWorld); var o = new M; return o.getInverse(e), i.applyMatrix4(o), i }, oy.prototype.getObjectPool = function () { return this.pool }, oy.prototype.getBoundingBoxOfGeometries = function (A) { var e = new aA, t = []; if (Array.isArray(A)) t = A; else for (var i in A) A.hasOwnProperty(i) && t.push(i); for (var o = 0, n = t.length; n > o; o += 1) { var r = this.objectGroups.getObjectByProperty("key", t[o]); if (r) { var a = r.geometry; if (a) { a.boundingBox || a.computeBoundingBox(); var s = a.boundingBox; if (s) { var l = s.clone(); r.matrixWorld && l.applyMatrix4(r.matrixWorld), e.expandByPoint(l.min), e.expandByPoint(l.max) } } else Bh.log("empty geometry!") } } return e }, oy.prototype.adjustInstanceVisibility = function (A) { this.traverse((function (e) { if ((e instanceof Ue || e instanceof jo) && e.geometry instanceof Na) { var t = e.visible; A && !e.bVisible || (e.visible = A), e.bVisible = t } })) }, oy.prototype.adjustVisibility = function (A) { this.traverse((function (e) { if ((e instanceof Ue || e instanceof jo) && !(e.geometry instanceof Na)) { var t = e.visible; A && !e.bVisible || (e.visible = A), e.bVisible = t } })) }, oy.prototype.changeVisibilityOfSelectedObjects = function (A) { var e = this; A || (e.selectedMeshes.length = 0, e.selectedInstanceMeshes.length = 0); var t = e.selectedMeshes, i = e.selectedInstanceMeshes; this.traverse((function (o) { (o instanceof Ue || o instanceof jo) && (o.geometry instanceof Na ? A ? function (A) { for (var t = 0, i = e.selectedInstanceMeshes.length; i > t; t += 1) { if (A === e.selectedInstanceMeshes[t].object) { for (var o = e.selectedInstanceMeshes[t].indices, n = A.geometry.getAttribute("vState").array, r = 0, a = o.length; a > r; r += 1) n[o[r]] = Hc.SELECTED; A.geometry.getAttribute("vState").needsUpdate = !0 } } }(o) : function (A) { if (A.visible) { for (var e = [], t = A.geometry.getAttribute("vState").array, o = 0; t.length > o; o += 1) t[o] === Hc.SELECTED && (e.push(o), t[o] = Hc.HIDDEN); e.length && (A.geometry.getAttribute("vState").needsUpdate = !0, i.push({ object: A, indices: e })) } }(o) : A ? function (A) { for (var t = 0, i = e.selectedMeshes.length; i > t; t += 1) { if (A === e.selectedMeshes[t].object) for (var o = e.selectedMeshes[t].indices, n = 0, r = o.length; r > n; n += 1) { var a = o[n], s = A.geometry.groups[a.idx]; s.start = a.start, s.count = a.count } } }(o) : function (A) { if (A._indicesGroup && A.visible) { var e = [], i = A.geometry.groups; if (i && i.length) { for (var o = 0, n = i.length; n > o; o += 1) { var r = i[o]; r.materialIndex === zc.SELECTED && (e.push({ idx: o, start: r.start, count: r.count }), r.start = 0, r.count = 0) } e.length && t.push({ object: A, indices: e }) } } }(o)) })) }, oy.prototype.changeVisibilityOfNonSelectedObjects = function (A) { var e = this; A || (e.nonSelectedMeshes.length = 0, e.nonSelectedInstanceMeshes.length = 0); var t = e.nonSelectedMeshes, i = e.nonSelectedInstanceMeshes; this.traverse((function (o) { (o instanceof Ue || o instanceof jo) && (o.geometry instanceof Na ? A ? function (A) { for (var t = 0, i = e.nonSelectedInstanceMeshes.length; i > t; t += 1) { if (A === e.nonSelectedInstanceMeshes[t].object) { for (var o = e.nonSelectedInstanceMeshes[t].indices, n = A.geometry.getAttribute("vState").array, r = 0, a = o.length; a > r; r += 1) n[o[r].idx] = o[r].state; A.geometry.getAttribute("vState").needsUpdate = !0 } } }(o) : function (A) { if (A.visible) { for (var e = [], t = A.geometry.getAttribute("vState").array, o = 0, n = t.length; n > o; o += 1) t[o] !== Hc.SELECTED && t[o] !== Hc.HIDDEN && (e.push({ idx: o, state: t[o] }), t[o] = Hc.HIDDEN); e.length && (A.geometry.getAttribute("vState").needsUpdate = !0, i.push({ object: A, indices: e })) } }(o) : A ? function (A) { for (var t = 0, i = e.nonSelectedMeshes.length; i > t; t += 1) { if (A === e.nonSelectedMeshes[t].object) { var o = e.nonSelectedMeshes[t].indices; if (null === o) A.visible = !0; else for (var n = 0, r = o.length; r > n; n += 1) { var a = o[n], s = A.geometry.groups[a.idx]; s.start = a.start, s.count = a.count } } } }(o) : function (A) { if (A._indicesGroup && A.visible) { var e = [], i = A.geometry.groups; if (i && i.length) { for (var o = 0, n = i.length; n > o; o += 1) { var r = i[o]; r.materialIndex !== zc.SELECTED && (e.push({ idx: o, start: r.start, count: r.count }), r.start = 0, r.count = 0) } e.length ? t.push({ object: A, indices: e }) : (A.visible = !1, t.push({ object: A, indices: null })) } else A.visible = !1, t.push({ object: A, indices: null }) } }(o)) })) }, oy.prototype.clearSelectedAndNonSelectedMeshes = function () { this.selectedMeshes.length = 0, this.nonSelectedMeshes.length = 0, this.selectedInstanceMeshes.length = 0, this.nonSelectedInstanceMeshes.length = 0 }, oy.prototype.setSkyBox = function (A, e, t, i, o) { var n = A, r = e || [Pd.skyBoxLeft, Pd.skyBoxRight, Pd.skyBoxBack, Pd.skyBoxFront, Pd.skyBoxUp, Pd.skyBoxDown], a = this; (new $r).setPath(n).load(r, (function (A) { a.background = A, t && t() }), i, o) }, oy.prototype.drawBoundingBox = function (A) { if (A) { var e = this.getOrCreateGroup("BoundingBox", { pickable: 0, priority: 2 }), t = this.getBoundingBox(); void 0 === this.boudingBoxNode ? (this.boudingBoxNode = new Ay(t, 16711680), e.add(this.boudingBoxNode)) : this.boudingBoxNode.updateBBox(t), this.boudingBoxNode.updateMatrixWorld(!0) } else this.removeGroupByName("BoundingBox") }, oy.prototype.calculateGisMapBox = function (A) { var e = this.getGroup("ExternalComponentManager"), t = this.getBoundingBoxWorld(), i = t.clone(); if (e) { var o = A.position.clone(), n = this.getMatrixWorldGlobal(), r = (new M).getInverse(n); o.applyMatrix4(r); var a = 6370856e3, s = o.z - t.min.z; s = Math.abs(s); var l = a * Math.acos(a / (a + s)); i.min.x = o.x - l, i.max.x = o.x + l, i.min.y = o.y - l, i.max.y = o.y + l, i.min.z = t.min.z, i.max.z = t.max.z } return i }, oy.prototype.getReceivingPlane = function (A) { if (!this.receivingPlane) { this.receivingPlane = this.getOrCreateGroup(gp.RECEIVESHADOWPLANE); var e = new mr; e.transparent = !0, e.opacity = .2, e.side = 2; var t = new Ue(new et(1e6, 1e6), e); t.receiveShadow = !0, this.receivingPlane.add(t), this.add(this.receivingPlane), this.receivingPlane.matrixAutoUpdate = !1, this.updateReceivingPlane() } return this.receivingPlane.visible = A, this.receivingPlane }, oy.prototype.updateReceivingPlane = function () { var A = this.receivingPlane.children[0], e = this.getBoundingBoxWorld(), t = e.getCenter(new y), i = e.getSize(new y); A.position.z = e.min.z - .05 * i.z, A.position.x = t.x, A.position.y = t.y, A.scale.x = i.x / 1e4, A.scale.y = i.y / 1e4, this.receivingPlane.updateMatrixWorld(!0) }, Object.defineProperties(oy.prototype, { lightArray: { get: function () { return Bh.warn("EIMMODEL.Scene: .lightArray 现在为 .lightManager.lightArray"), this.lightManager.lightArray } }, lightHelperArray: { get: function () { return Bh.warn("EIMMODEL.Scene: .lightHelperArray 现在为 .lightManager.lightHelperArray"), this.lightManager.lightHelperArray } } }); var ny = function (A) { this.selectionSet = {}, this.selectionMaterial = Kd.createHighlightMaterial(), this.selectionMaterial.colorState = Yc.SELECT, this.selectionMaterial.name = "selection", this.selectionMaterial.refreshUniforms(), this.hoverId = void 0, this.hoverMaterialDefaultParams = { color: 14540253, opacity: .9, transparent: !0, side: 2 }, this.hoverMaterial = Kd.createStandardMaterial(this.hoverMaterialDefaultParams), this.hoverMaterial.name = "hover", this.boxMaterialDefaultParams = { color: 16776960, opacity: 1, transparent: !1 }, this.boxMaterial = new ko(this.boxMaterialDefaultParams), this.boxMaterial.name = "box", this.modelManager = A, this.blinkComponentIds = {}; var e = this; this.filter = A.filter, this.filter.observerForSceneState = function (t) { e.removeSelection(t), e.clearBlinkComponentsById(t), A.viewerImpl.render() }, this.phongHoverMaterial = new Ir(this.hoverMaterialDefaultParams), this.phongSelectionMaterial = new Ir(vc.SelectionColor) }; ny.prototype = { constructor: ny, destroy: function () { this.selectionSet = null, this.blinkComponentIds = null, this.modelManager = null, this.selectionMaterial.destroy(), this.selectionMaterial = null, this.hoverMaterial.destroy(), this.hoverMaterial = null, this.phongHoverMaterial.dispose(), this.phongHoverMaterial = null, this.phongSelectionMaterial.dispose(), this.phongSelectionMaterial = null }, _dispatchChangeEvent: function () { var A = this.getSelection(); if (vc.EnableSelectionBoundingBox) { var e = this.modelManager.scene.getOrCreateGroup("BoundingBox"); if (A && A.length > 0) { var t = this.modelManager.viewerImpl.getBoundingBoxByIds(A); if (t.isEmpty()) return void(e.visible = !1); e.visible = !0; var i = e.getObjectByName("Box"); if (!i) { var o = 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]), n = new Float32Array(24), r = new he; r.setIndex(new YA(o, 1)), r.setAttribute("position", new YA(n, 3)), (i = new jo(r, this.boxMaterial)).name = "Box", i.matrixAutoUpdate = !1, e.add(i) } var a = i.geometry.attributes.position, s = a.array, l = t.min, c = t.max; s[0] = c.x, s[1] = c.y, s[2] = c.z, s[3] = l.x, s[4] = c.y, s[5] = c.z, s[6] = l.x, s[7] = l.y, s[8] = c.z, s[9] = c.x, s[10] = l.y, s[11] = c.z, s[12] = c.x, s[13] = c.y, s[14] = l.z, s[15] = l.x, s[16] = c.y, s[17] = l.z, s[18] = l.x, s[19] = l.y, s[20] = l.z, s[21] = c.x, s[22] = l.y, s[23] = l.z, a.needsUpdate = !0 } else e.visible = !1 } else { var h = this.modelManager.scene.getObjectByName("BoundingBox"); h && (h.visible = !1) } // debugger; this.modelManager.dispatchEvent({ type: Rc.ON_SELECTION_CHANGED, selectionList: A }) }, clearSelection: function (A) { var e, t = !1; if (void 0 === A) { var i = []; for (var o in this.selectionSet) { for (var n in t = !1, e = this.getSelectionSet(o)) if (e.hasOwnProperty(n)) { t = !0; break } t && i.push(o) } if (i.length) { for (var r = 0, a = i.length; a > r; r += 1) this.selectionSet[i[r]] = {}, this.modelManager.clearSelection(i[r]); this._dispatchChangeEvent() } } else { for (var n in e = this.getSelectionSet(A)) if (e.hasOwnProperty(n)) { t = !0; break } t && (this.selectionSet[A] = {}, this.modelManager.clearSelection(A), this._dispatchChangeEvent()) } }, addSelection: function (A, e) { console.log('addSelection1111111111111111'); if (A && A.length >= 1) { var t, i = [], o = !1, n = this.modelManager, r = this.filter; if (void 0 === e) { console.log('addSelection if'); for (var a = {}, s = n.getModelKeys(), l = [], c = 0, h = s.length; h > c; c += 1) { // console.log('addSelection22222222222222222222'); var d = s[c]; // debugger; t = this.getSelectionSet(d), o = !1; for (var p = A.length - 1; p >= 0; p -= 1) { // console.log('n.isUserIdExist(f = A[p], d) :>> ', n.isUserIdExist(f = A[p], d)); // console.log('r.isComponentActive(f, d) :>> ', r.isComponentActive(f, d)); n.isUserIdExist(f = A[p], d) && (!t[f] && r.isComponentActive(f, d) && (t[f] = !0, o = !0), a[f] = !0) } // console.log('d :>> ', d); o && l.push(d) } // for (p = A.length - 1; p >= 0; p -= 1) { // a[f = A[p]] || i.push(f) // } // if (i.length > 0 && n.dispatchEvent({ // type: Rc.ON_SELECTION_FAILED, // failedId: i // }), // l.length) { // for (var g = 0, u = l.length; u > g; g += 1) // this.modelManager.applySelection(l[g]); // // debugger; // this._dispatchChangeEvent() // } // debugger; } else { console.log('addSelection else'); t = this.getSelectionSet(e); for (p = A.length - 1; p >= 0; p -= 1) { var f; n.isUserIdExist(f = A[p], e) ? !t[f] && r.isComponentActive(f, e) && (t[f] = !0, o = !0) : i.push(f) } i.length > 0 && n.dispatchEvent({ type: Rc.ON_SELECTION_FAILED, failedId: i }), o && (this.modelManager.applySelection(e), this._dispatchChangeEvent()) } } }, setSelection: function (A, e) { if (A && A.length >= 1){ // debugger; if (void 0 === e) { console.log('setSelection if') for (var t in this.selectionSet) delete this.selectionSet[t]; // debugger; this.addSelection(A) } else console.log('setSelection else') this.selectionSet[e] = {}, this.addSelection(A, e) } }, removeSelection: function (A, e) { console.log('removeSelection'); if (A && A.length >= 1) { var t = !1; if (void 0 === e) { var i = []; for (var o in this.selectionSet) { var n = this.getSelectionSet(o); t = !1; for (var r = 0, a = A.length; a > r; r += 1) { var s = A[r]; n[s] && (delete n[s], t = !0) } t && i.push(o) } if (i.length) { for (var l = 0, c = i.length; c > l; l += 1) this.modelManager.applySelection(i[l]); this._dispatchChangeEvent() } } else { for (var h = this.getSelectionSet(e), d = 0, p = A.length; p > d; d += 1) { var g = A[d]; h[g] && (delete h[g], t = !0) } t && (this.modelManager.applySelection(e), this._dispatchChangeEvent()) } } }, getSelection: function (A) { var e = {}; if (void 0 === A) for (var t in this.selectionSet) for (var i = this.getSelectionSet(t), o = Object.keys(i), n = 0, r = o.length; r > n; n += 1) e[o[n]] = !0; else e = this.getSelectionSet(t); return Object.keys(e) }, hasSelection: function (A) { var e, t = !1; if (void 0 === A) for (var i in this.selectionSet) { for (var o in e = this.getSelectionSet(i)) if (e.hasOwnProperty[o]) { t = !0; break } if (t) break } else for (var o in e = this.getSelection(A)) if (e.hasOwnProperty[o]) { t = !0; break } return t }, getSelectionSet: function (A) { if (void 0 === A) { var e = {}; for (var t in this.selectionSet) for (var i = this.getSelectionSet(t), o = Object.keys(i), n = 0, r = o.length; r > n; n += 1) e[o[n]] = !0; return e } return void 0 === this.selectionSet[A] && (this.selectionSet[A] = {}), this.selectionSet[A] }, isSelected: function (A, e) { var t, i = !1; if (void 0 === e) { for (var o in this.selectionSet) if ((t = this.selectionSet[o]) && t[A]) { i = !0; break } } else (t = this.selectionSet[e]) && t[A] && (i = !0); return i }, setHoverId: function (A, e) { this.hoverId = A, this.modelManager.applyHover(e) }, clearHover: function (A) { this.hoverId = void 0, this.modelManager.clearHover(A) }, getHoverMaterial: function (A) { var e = A && A.isMeshPhongMaterial ? this.phongHoverMaterial.clone() : this.hoverMaterial.clone(); if (A && A.hasOwnProperty("color")) { var t = A.color.clone(), i = Math.max(t.r, Math.max(t.g, t.b)); 0 === i && (i = .5), t.r += 0 === t.r ? .3 * i : .2 * t.r, t.g += 0 === t.g ? .3 * i : .2 * t.g, t.b += 0 === t.b ? .3 * i : .2 * t.b, t.r > 1 && (t.r = 1), t.g > 1 && (t.g = 1), t.b > 1 && (t.b = 1), 1 === t.r && 1 === t.g && 1 === t.b && (t.r = .87, t.g = .87, t.b = .87), e.color.setHex(t.getHex()), e.opacity = void 0 !== A.opacity ? A.opacity : this.hoverMaterialDefaultParams.opacity, e.transparent = void 0 !== A.transparent ? A.transparent : this.hoverMaterialDefaultParams.transparent, e.side = void 0 !== A.side ? A.side : this.hoverMaterialDefaultParams.side, void 0 !== A.metalness && (e.metalness = A.metalness), void 0 !== A.roughness && (e.roughness = A.roughness), void 0 !== A.bumpMap && (e.bumpMap = A.bumpMap), void 0 !== A.alphaMap && (e.alphaMap = A.alphaMap), void 0 !== A.emissiveMap && (e.emissiveMap = A.emissiveMap), void 0 !== A.envMap && (e.envMap = A.envMap), void 0 !== A.envMapIntensity && (e.envMapIntensity = A.envMapIntensity), null != A.map && (e.map = A.map), e.opacity = Kd.getHoverOpacity(e.opacity), e.transparent = !0, e.needsUpdate = !0 } return e }, getHoverColorByMaterial: function (A) { var e = void 0 !== A.opacity ? A.opacity : this.hoverMaterialDefaultParams.opacity; if (e = Kd.getHoverOpacity(e), !A.hasOwnProperty("color")) return { rgbaColor: [this.hoverMaterial.color.r, this.hoverMaterial.color.g, this.hoverMaterial.color.b, e], transparent: !0 }; var t = A.color.clone(); return { rgbaColor: [t.r, t.g, t.b, e], transparent: !0 } }, setSelectionColor: function (A, e) { console.log('setSelectionColor'); var t = this.selectionMaterial.opacity; e = void 0 === e ? t : e, "0x" + this.selectionMaterial.color.getHexString() === A && t === e || (this.selectionMaterial.color.setHex(A), e && (this.selectionMaterial.opacity = e), this.selectionMaterial.needsUpdate = !0) }, getSelectionColor: function () { var A = this.selectionMaterial.opacity; return new Xh(this.selectionMaterial.color.getHex(), A) }, getSelectionMaterial: function () { return this.selectionMaterial.clone() }, setBlinkComponentsById: function (A, e) { if (this.blinkComponentIds = {}, A && 0 !== A.length) { for (var t = A.length - 1; t >= 0; t -= 1) { this.filter.isComponentActive(A[t], e) && (this.blinkComponentIds[A[t]] = !0) } this.modelManager.applyBlink() } }, addBlinkComponentsById: function (A, e) { if (A && A.length) { for (var t = this.blinkComponentIds, i = !1, o = A.length - 1; o >= 0; o -= 1) { var n = A[o]; !t[n] && this.filter.isComponentActive(n) && (t[n] = !0, i = !0) } i && this.modelManager.applyBlink() } }, clearBlinkComponentsById: function (A, e) { if (A && A.length) { for (var t = !1, i = this.blinkComponentIds, o = 0, n = A.length; n > o; o += 1) { var r = A[o]; i[r] && (delete i[r], t = !0) } t && this.modelManager.applyBlink() } }, clearAllBlinkComponents: function () { var A = !1; uh.isOwnEmptyObject(this.blinkComponentIds) || (A = !0, this.blinkComponentIds = {}), A && this.modelManager.clearBlink() }, getBlinkComponents: function () { return Object.keys(this.blinkComponentIds) }, getBlinkComponentsIdMap: function (A) { var e = this; if (this.modelManager.getBlinkEnabled()) { if (A) { var t = this.getBlinkComponents(), i = {}; return t.forEach((function (t) { var o = e.modelManager.filterHelper.distributeId(t), n = o.modelKey, r = o.objectId; n && n.toString() !== A.toString() || (i[r] = e.blinkComponentIds[t]) })), i } return this.blinkComponentIds } return null }, getBlinkMaterial: function (A) { return Kd.getBlinkMaterial(A, this.modelManager.getBlinkColor()) }, getBoxMaterial: function () { return this.boxMaterial.clone() }, setBoxColor: function (A, e) { var t = this.boxMaterial.opacity; e = void 0 === e ? t : e, "0x" + this.boxMaterial.color.getHexString() === A && t === e || (this.boxMaterial.color.setHex(A), e && (this.boxMaterial.opacity = e), this.boxMaterial.needsUpdate = !0, this.boxMaterial.color.setHex(A), this.boxMaterial.needsUpdate = !0) } }; var ry = function () { this.hiddenUserIdMap = {} }; ry.prototype.destroy = function () { this.hiddenUserIdMap = null }, ry.prototype.hideByUserId = function (A, e) { this.hiddenUserIdMap || (this.hiddenUserIdMap = {}), this.hiddenUserIdMap[A] = !!e }, ry.prototype.cancelHiddenByUserId = function (A) { this.hiddenUserIdMap && delete this.hiddenUserIdMap[A] }, ry.prototype.cancelAllHidden = function () { this.hiddenUserIdMap = null }, ry.prototype.isHidden = function (A) { return !!this.hiddenUserIdMap[A] }, ry.prototype.hasHidden = function () { return !uh.isEmptyObject(this.hiddenUserIdMap) }; var ay = function () { this.materialDefaultParams = { color: 14540253, opacity: .5, transparent: !0, side: 0 }, this.material = Kd.createPhongMaterial(this.materialDefaultParams) }; ay.prototype.destroy = function () { this.material = null }, ay.prototype.resetColor = function () { this.material.color.setHex(this.materialDefaultParams.color) }, ay.prototype.resetOpacity = function () { this.material.opacity = this.materialDefaultParams.opacity }, ay.prototype.reset = function () { this.material.color.setHex(this.materialDefaultParams.color), this.material.opacity = this.materialDefaultParams.opacity, this.material.transparent = this.materialDefaultParams.transparent, this.material.side = this.materialDefaultParams.side, this.material.needsUpdate = !0 }; var sy = function (A) { this.manager = A, this.requestCount = 0, this.maxRequestCount = 1e5, this.loading = !1, this.delayIntervalTime = 300 }; sy.prototype.destroy = function () { this.manager = null, this.currentConditions = null, this.delayLoadTimer && (clearTimeout(this.delayLoadTimer), this.delayLoadTimer = null) }, sy.prototype.isValidModel = function (A) { return !(A.isEmptyScene() || !A.isLayerData()) }, sy.prototype.loadGeopkOnDemandByConditionsWithDelay = function (A, e, t, i) { var o = this, n = this.delayIntervalTime; o.delayLoadTimer && clearTimeout(o.delayLoadTimer), o.delayLoadTimer = setTimeout((function () { o.loadGeopkOnDemandByConditions(A, e, t, i) }), n) }, sy.prototype.loadGeopkOnDemandByConditions = function (A, e, t, i) { if (this.currentConditions = A, this.requestCount += 1, this.requestCount > this.maxRequestCount && (this.requestCount = 0), !this.loading) { this.loading = !0; var o = this; requestAnimationFrame(function A(n) { var r = n, a = o.currentConditions; return function () { o._loadGeopkOnDemandByConditions(a, e, t, (function () { r !== o.requestCount ? requestAnimationFrame(A(o.requestCount)) : (o.loading = !1, i && i(a), a = null) })) } }(this.requestCount)) } }, sy.prototype._loadGeopkOnDemandByConditions = function (A, e, t, i) { var o = this; this.manager.traverseModels((function (n) { o.isValidModel(n) && n._getHandler().loadGeopkOnDemand(A, e, t, i) })) }, sy.prototype.getBoundingBoxOnDemand = function () { var A = new aA, e = this; return this.manager.traverseModels((function (t) { if (e.isValidModel(t)) { var i = t._getHandler().getLayerProvider().getUnionBoundingBoxOnDemand(); i && A.union(i) } })), A.isEmpty() ? null : A }, sy.prototype.isLoading = function () { return this.loading }, sy.prototype.getBoundingBoxForUsedComponent = function () { var A = this.manager, e = new aA; return A.traverseModels((function (t) { var i = t.getLoadedUserIdsObject(); i && e.union(A.getBoundingBoxByIds(i)) })), e.isEmpty() ? null : e }; var ly = function (A, e) { vc.UseWorker && mh.isSupportWorker() && (this.websocketWorker = new Worker("src/worker/WebsocketWorker.js"), this.prepareDataWorkers = new Worker("src/worker/PrepareDataWorker.js")), mh.isMobileDevice() && (vc.maxObjectNumInPool = 6e3, vc.maxDrawCacheNum = 4e3), this.scene = new oy(this), this.filter = A, this.crossOrigin = !0, this.models = {}, this.viewerImpl = e, this.materialPool = null, this.occlusionCamera = null, this.containsCamera = !1, this.highPriorityCategories = { inner: {}, outer: {} }, this.octantToObjectMap = {}, this.instanceGeometries = {}, this.sceneState = new ny(this), this.modelState = new ny(this), this.filter.setSceneStateHelper(this.sceneState), this.rotation = new f, this.boundingBox = new aA, this.explosionList = {}, this.IBLMaterial = !1, this.clippingCaps = !1, this.blinkStartTime = null, this.blinkEnabled = !1, this.blinkIntervalTime = 600, this.blinkPermited = !1, this.defaultBlinkColor = (new LA).setHex(3330982), this.defaultBlinkAlpha = 1, this.blinkColor = new p(this.defaultBlinkColor.r, this.defaultBlinkColor.g, this.defaultBlinkColor.b, this.defaultBlinkAlpha), this.selectPriority = !0, this.materialOverrideSet = null, this.plugins = [], this.cameraFov = 0, this.cameraPosition = new y, this.domElementWidth = 1, this.transformComponent = {} }; Object.assign(ly.prototype, Ld.prototype), ly.prototype.destroy = function () { for (var A in this.removeAllEventListener(), this.models) this.models[A].destroy(); this.models = null, this.octantToObjectMap = null, this.materialPool && (this.materialPool.destroy(), this.materialPool = null), this.occlusionCamera && (this.occlusionCamera = null); for (var e = 0, t = this.plugins.length; t > e; e += 1) this.plugins[e].destroy(); this.plugins = null, this.loadOnDemandDirector && (this.loadOnDemandDirector.destroy(), this.loadOnDemandDirector = null), this.highPriorityCategories = null, this.rotation = null, this.boundingBox = null, this.scene.destroy(), this.scene = null, this.filter = null, this.sceneState.destroy(), this.sceneState = null, this.modelState.destroy(), this.modelState = null, this.blinkStartTime = null, this.defaultBlinkColor = null, this.blinkColor = null, this.floorExplosionList = null, this.explosionTranslation = null }, ly.prototype.registerPlugin = function (A) { this.plugins.push(A) }, ly.prototype.removeAllEventListener = function () { this._listeners = void 0 }, ly.prototype.prepareCapScene = function () { this.capsScene ? this.clippingCaps || (this.initCapPlane(), this.initCapBox()) : (this.capsScene = new oy, this.clippingCaps || (this.initCapPlane(), this.initCapBox()), this.scene.createCapStencilMaterials()) }, ly.prototype.initCapPlane = function () { var A = this.scene.getFillClipPlane().initCapsPlane(); this.capsScene.add(A.planeMesh), this.capsScene.add(A.lineMesh), this.clippingCaps = !0 }, ly.prototype.initCapBox = function () { var A = this.scene.getClipPlanes().initCapsBox(); A.material.needsUpdate = !0, A.visible = !0, this.capsScene.add(A), this.clippingCaps = !0 }, ly.prototype.getAllComponents = function () { return this.scene.pool._pool }, ly.prototype.getAllComponentsKey = function () { var A = []; for (var e in this.models) if (this.models.hasOwnProperty(e)) { var t = this.models[e]; if (t) { var i = t.getComponentlist(); A = A.concat(i) } } return A }, ly.prototype.getComponentsKeyByModelKey = function (A) { var e = []; if (this.models.hasOwnProperty(A)) { var t = this.models[A]; if (t) e = t.getComponentlist() } return e }, ly.prototype.getComponent = function (A) { for (var e in this.models) if (this.models.hasOwnProperty(e)) { var t = this.models[e]; if (t.isLoaded() && t.getComponentInfo(A)) { var i = t.getComponentInfo(A); if (i) return i } } for (var o = 0, n = this.plugins.length; n > o; o += 1) if (this.plugins[o].getNodeInfosByUserId) { var r = this.plugins[o].getNodeInfosByUserId(A); if (r) return r } }, ly.prototype.getStorage = function () { return this.storage }, ly.prototype.updateTransformComponentList = function (A) { this.transformComponent[A] = !0 }, ly.prototype._updateOcclusionCamera = function (A) { var e = A.near, t = A.distanceFromWorldToDrawing(this.getMatrixWorldGlobal(), vc.OcclusionDistanceToCamera); this.occlusionCamera ? this.occlusionCamera.copy(A) : this.occlusionCamera = A.clone(), this.occlusionCamera.setNearFar(e, t), this.occlusionCamera.updateMVP() }, ly.prototype._clearMaterialPool = function () { this.materialPool && this.materialPool.clear() }, ly.prototype.acquireMaterial = function () { return this.materialPool ? this.materialPool.acquire() : null }, ly.prototype.getObjectPool = function () { return this.scene.getObjectPool() }, ly.prototype.getFrustumFromOcclusionCamera = function () { return this.occlusionCamera.getFrustum(!1) }, ly.prototype.getOcclusionCamera = function () { return this.occlusionCamera }, ly.prototype.prepareScene = function (A, e) { var t = this.models; for (var i in vc.MergeComponent || (this.clearPool(), this.clearObjectRangeFromOctantMap()), vc.OcclusionTranslucentEnabled && (null === this.materialPool && (this.materialPool = new qC, this.materialPool.init(ay, 50)), this._clearMaterialPool(), this._updateOcclusionCamera(A)), t) if (t.hasOwnProperty(i)) { var o = t[i]; !vc.RendererWhenLoad && !o.isLoaded() || o.isEmptyScene() || o.prepare(A, e) } this.dealStateChanged() }, ly.prototype.clearPool = function () { this.scene.getObjectPool().clear() }, ly.prototype.clearObjectRangeFromOctantMap = function () { this.octantToObjectMap && this.octantToObjectMap.pool && (this.octantToObjectMap.pool = {}) }, ly.prototype.setDrawableModel = function (A) { this.isDrawableModel = A }, ly.prototype.isDrawable = function () { return this.isDrawableModel }, ly.prototype.load = function (A, e, t) { var i = this.models, o = i[A.modelKey], n = this; if (this.setDrawableModel(!1), void 0 !== o) return this.setDrawableModel(!0), o.isVisible() || (o.setVisible(!0), o.dispatchEventEx({ type: Rc.ON_LOAD_COMPLETE })), o; var r = []; for (var a in i) i.hasOwnProperty(a) && r.push(i[a].index); r.sort(); for (var s = 0; r.length > s && r[s] === s; s += 1) ; return o = new("GIS" === A.type ? PC : TC)(this, A, (function (e, t) { if (vc.UseWorker) { if (n.websocketWorker && n.prepareDataWorkers) { var i = JSON.parse(window.localStorage.getItem("bos_IndexedDB")); i || (i = { version: 1 }), window.localStorage.setItem("bos_IndexedDB", JSON.stringify(i)); var r = i.version; n.websocketWorker.postMessage({ type: "INITIALIZE_DATABASE", data: { modelKey: o.modelKey, dbName: o.projectKey, version: r } }), n.websocketWorker.onmessage = o.onWSWorkerMessage, n.prepareDataWorkers.postMessage({ type: "INITIALIZE_DATABASE", data: { modelKey: o.modelKey, dbName: o.projectKey, version: r } }), n.prepareDataWorkers.onmessage = o.onPDWorkerMessage } } else e.load(A.notifyProgress) }), t), this.filter.addModel(o.modelKey), this.models[A.modelKey] = o, o }, ly.prototype.loadTiles = function (A, e, t) { var i = this.models, o = i[A.modelKey], n = this; if (void 0 !== o) return o.isVisible() || (o.setVisible(!0), o.dispatchEventEx({ type: Rc.ON_LOAD_COMPLETE })), o; var r = []; for (var a in i) i.hasOwnProperty(a) && r.push(i[a].index); r.sort(); for (var s = 0; r.length > s && r[s] === s; s += 1) ; return o = new PC(this, A, (function (e, t) { if (vc.UseWorker) { if (n.websocketWorker && n.prepareDataWorkers) { var i = JSON.parse(window.localStorage.getItem("bos_IndexedDB")); i || (i = { version: 1 }), window.localStorage.setItem("bos_IndexedDB", JSON.stringify(i)); var r = i.version; n.websocketWorker.postMessage({ type: "INITIALIZE_DATABASE", data: { modelKey: o.modelKey, dbName: o.projectKey, version: r } }), n.websocketWorker.onmessage = o.onWSWorkerMessage, n.prepareDataWorkers.postMessage({ type: "INITIALIZE_DATABASE", data: { modelKey: o.modelKey, dbName: o.projectKey, version: r } }), n.prepareDataWorkers.onmessage = o.onPDWorkerMessage } } else e.load(A.notifyProgress) }), t), this.models[A.modelKey] = o, o }, ly.prototype.loadModels = function (A) { var e = this.models[A.modelKey], t = this; return void 0 !== e ? (e.isVisible() || (e.setVisible(!0), e.dispatchEventEx({ type: Rc.ON_LOAD_COMPLETE })), e) : (e = new TC(this, A, (function () { if (vc.UseWorker) { if (t.websocketWorker && t.prepareDataWorkers) { var i = JSON.parse(window.localStorage.getItem("bos_IndexedDB")); i || (i = { version: 1 }), window.localStorage.setItem("bos_IndexedDB", JSON.stringify(i)); var o = i.version; t.websocketWorker.postMessage({ type: "INITIALIZE_DATABASE", data: { modelKey: e.modelKey, dbName: e.projectKey, version: o } }), t.websocketWorker.onmessage = e.onWSWorkerMessage, t.prepareDataWorkers.postMessage({ type: "INITIALIZE_DATABASE", data: { modelKey: e.modelKey, dbName: e.projectKey, version: o } }), t.prepareDataWorkers.onmessage = e.onPDWorkerMessage } } else e.load(A.notifyProgress) })), this.models[A.modelKey] = e, e) }, ly.prototype.unload = function (A) { var e = this.models[A]; return !!e && (e.destroy(), delete this.models[A], this.filter.removeModel(A), this.filter.reinitFilterManager(this.getNodeInfos()), this.updateScene(), this.updateFilterManager(), this.filter.getObjectInfoManager().calculateVisibleComponentsBbox(), !0) }, ly.prototype.unloadAll = function () { for (var A = this.getModelKeys(), e = 0, t = A.length; t > e; e += 1) this.unload(A[e]); this.clearPool(), this.models = {} }, ly.prototype.showModel = function (A) { var e = this.models[A]; return !!e && (e.setVisible(!0), !0) }, ly.prototype.hideModel = function (A) { var e = this.models[A]; return !!e && (e.setVisible(!1), !0) }, ly.prototype.getModelKeys = function () { var A = this.models, e = []; for (var t in A) A.hasOwnProperty(t) && e.push(t); return e }, ly.prototype.updateScene = function () { this.updateSceneBoundingBox() }, ly.prototype.updateSceneBoundingBox = function () { var A = this.models, e = this.boundingBox; for (var t in e.makeEmpty(), A) if (A.hasOwnProperty(t)) { var i = A[t]; if (!i.isEmptyScene()) { var o = i.getBoundingBoxWorld(); if (!o || o.isEmpty()) continue; e.isEmpty() ? e.copy(o) : (e.expandByPoint(o.min), e.expandByPoint(o.max)) } } for (var n = 0, r = this.plugins.length; r > n; n += 1) { var a = this.plugins[n]; if ("function" == typeof a.getBoundingBoxWorld) { var s = a.getBoundingBoxWorld(); s && e.union(s) } } this.scene.setBoundingBoxWorld(e) }, ly.prototype.parseSceneRootNode = function (A) { this.scene.parseRootNode(A), this.updateSceneBoundingBox() }, ly.prototype.updateSceneRootMatrix = function () { var A = !1, e = new M, t = new M, i = new f, o = this.models; for (var n in this.models) if (o.hasOwnProperty(n)) { var r = o[n]; if (!r.isEmptyScene()) { i.copy(r.getTransforms().rotation), e.copy(r.getTransforms().transformMatrix), A = r.getTransforms().transformed; break } } if (this.scene.setTransformMatrixGlobal(e), A) t.copy(e); else { var a = new y(1, 1, 1), s = vc.SceneSize, l = this.boundingBox.getSize(new y), c = Math.max(l.x, l.y, l.z); a.multiplyScalar(s / c), t.makeRotationFromQuaternion(i), t.scale(a) } this.scene.updateWorldMatrixByMatrix(t) }, ly.prototype.updateSceneRenderable = function () { var A = this.models, e = vc.maxObjectNumInPool, t = [], i = 0; for (var o in A) { if (A.hasOwnProperty(o)) (a = A[o]).isEmptyScene() || (i += a.model.getStatistics().renderableTotalForPool, t.push(o)) } for (var n = 0, r = t.length; r > n; n += 1) { var a = A[o = t[n]], s = Math.floor(a.getStatistics().renderableTotalForPool / i * e); s > a.getStatistics().renderableTotalForPool && (s = a.getStatistics().renderableTotalForPool), a.setRenderableCount(s) } }, ly.prototype.updateOctreeNode = function () { var A = this.models; for (var e in this.models) if (A.hasOwnProperty(e)) { var t = A[e]; t.isLoaded() && !t.isEmptyScene() && t.updateOctreeNode(!0) } }, ly.prototype.updateMaterials = function () { var A = this.models; for (var e in this.models) if (A.hasOwnProperty(e)) { var t = A[e]; t.isLoaded() && !t.isEmptyScene() && t.materialManager.updateMaterials(t) } }, ly.prototype.updateMaterialsValue = function (A, e) { var t = this.models; for (var i in this.models) if (t.hasOwnProperty(i)) { var o = t[i]; o.isLoaded() && !o.isEmptyScene() && o.materialManager.updateMaterialsValue(o, A, e) } this.materialOverrideSet && this.materialOverrideSet.updateMaterialsValue(A, e) }, ly.prototype.enableColorWithoutLight = function (A) { var e = this.models; for (var t in this.models) if (e.hasOwnProperty(t)) { var i = e[t]; i.isLoaded() && i.isEmptyScene() } }, ly.prototype.switchNewStyleMaterial = function (A) { var e = this.models; for (var t in this.models) if (e.hasOwnProperty(t)) { var i = e[t]; i.isLoaded() && !i.isEmptyScene() && i.materialManager.switchNewStyleMaterial(i, A) } }, ly.prototype.changeAllMaterials = function (A) { if (this.IBLMaterial !== A) { var e = this.models; for (var t in this.models) if (e.hasOwnProperty(t)) { var i = e[t]; i.isEmptyScene() || i.materialManager.changeAllMaterials(i, A) } this.IBLMaterial = A } }, ly.prototype.setCrossOrigin = function (A) { this.crossOrigin = A }, ly.prototype.getMatrixWorldGlobal = function () { return this.scene.getMatrixWorldGlobal() }, ly.prototype.hasModel = function () { var A = this.models; for (var e in A) { if (A.hasOwnProperty(e)) if (A[e].isLoaded()) return !0 } return !1 }, ly.prototype.isEmpty = function () { if (this.hasModel()) return !1; for (var A = !1, e = 0, t = this.plugins.length; t > e; e += 1) { var i = this.plugins[e]; if ("function" == typeof i.isEmpty && !i.isEmpty()) { A = !0; break } } return !A }, ly.prototype.hasModelDataReady = function () { var A = this.models, e = !1; for (var t in A) { if (A.hasOwnProperty(t)) if (e = !0, !A[t].isDataReady()) return !1 } return e }, ly.prototype.isLayerData = function () { var A = this.models; for (var e in A) { if (A.hasOwnProperty(e)) if (A[e].isLayerData()) return !0 } return !1 }, ly.prototype.getModel = function (A) { var e = this.models[A]; return e || null }, ly.prototype.getFirstModel = function () { var A = Object.keys(this.models)[0]; return this.models[A] }, ly.prototype.showOctreeBox = function (A) { vc.ShowOctant || this.scene.removeGroupByName(gp.OCTREENODE) }, ly.prototype.setCategoriesToHighPriority = function (A, e) { var t = A.length; if (t >= 1) for (var i = this.highPriorityCategories[e] = {}, o = 0; t > o; o += 1) i[A[o]] = !0 }, ly.prototype.getCategoriesFromHighPriority = function (A) { return this.highPriorityCategories[A] }, ly.prototype.clearCategoriesFromHighPriority = function (A) { this.highPriorityCategories[A] = {} }, ly.prototype.clearAllCategoriesFromHighPriority = function () { this.clearCategoriesFromHighPriority("inner"), this.clearCategoriesFromHighPriority("outer") }, ly.prototype.calculateCameraModelRelation = function (A) { var e = !1, t = this.models; for (var i in t) if (t.hasOwnProperty(i)) { var o = t[i]; o && o.isLoaded() && !o.isEmptyScene() && (o.calculateCameraModelRelation(A), e = e || o.containsCamera) } this.containsCamera = e }, ly.prototype.getCameraNameList = function () { var A = this.models, e = []; for (var t in A) if (A.hasOwnProperty(t)) { var i = A[t]; i.isEmptyScene() || (e = e.concat(i.getCameraNameList())) } return e }, ly.prototype.getCamera = function (A) { var e = this.models, t = null; for (var i in e) if (e.hasOwnProperty(i)) { var o = e[i]; if (!o.isEmptyScene() && (t = o.getCamera(A))) break } return t }, ly.prototype.getNumOfElements = function () { var A = this.models, e = 0; for (var t in this.models) if (A.hasOwnProperty(t)) { var i = A[t]; i.isEmptyScene() || (e += i.getStatistics().numOfElements) } return e }, ly.prototype.getNumOfRenderables = function () { var A = this.models, e = 0; for (var t in this.models) if (A.hasOwnProperty(t)) { var i = A[t]; i.isEmptyScene() || (e += i.getStatistics().renderableTotal) } return e }, ly.prototype.getNumOfTriangles = function () { var A = this.models, e = 0; for (var t in this.models) if (A.hasOwnProperty(t)) { var i = A[t]; i.isEmptyScene() || (e += i.getStatistics().numOfTriangles) } return e }, ly.prototype.getScene = function () { return this.scene }, ly.prototype.getOctreeRoots = function () { var A = this.models, e = {}; for (var t in A) if (A.hasOwnProperty(t)) { var i = A[t]; if (i.isLoaded() && !i.isEmptyScene()) { var o = i.getEncodedDatabagId(); e[o] = [], i.getModelDescriptor().getOctreeRoots(e[o]) } } return e }, ly.prototype.getModelSnapshotPhoto = function () { return this.viewerImpl.render(), { imgURL: this.viewerImpl.getRenderer().domElement.toDataURL("image/png"), height: this.viewerImpl.domElement.offsetHeight, width: this.viewerImpl.domElement.offsetWidth } }, ly.prototype.addMeshToOctantMap = function (A, e, t) { var i = this.octantToObjectMap; i[A] || (i[A] = {}), i[A].mesh || (i[A].mesh = {}), i[A].mesh[e] || (i[A].mesh[e] = []), i[A].mesh[e].push(t) }, ly.prototype.addNodeInfoToOctantMap = function (A, e, t) { var i = this.octantToObjectMap; i[A] || (i[A] = {}), i[A].info || (i[A].info = {}), i[A].info[e] || (i[A].info[e] = []), i[A].info[e].push(t) }, ly.prototype.removeNodeInfoFromOctantMap = function (A, e) { var t = this.octantToObjectMap; if (t[A] && t[A].info && t[A].info[e.componentKey]) for (var i = t[A].info[e.componentKey], o = i.length - 1; o >= 0; o -= 1) if (e.nodeId === i[o].nodeId) { i.splice(o); break } }, ly.prototype.clearNodeInfosFromOctantMap = function (A) { var e = this.octantToObjectMap; e[A] && e[A].info && (e[A] = null) }, ly.prototype.removeAllFromOctantMap = function (A) { var e = this.octantToObjectMap; e[A] && delete e[A] }, ly.prototype.clearMeshFromOctantMap = function (A) { var e = this.octantToObjectMap; e[A] && e[A].mesh && delete e[A].mesh }, ly.prototype.removeMeshFromOctantMap = function (A, e) { var t = this.octantToObjectMap; if (t[A] && t[A].mesh) { var i = 0, o = t[A].mesh[e]; for (i = o.length - 1; i >= 0; i -= 1) delete o[i]; delete t[A].mesh[e] } }, ly.prototype.removeBatchedMeshFromOctantMap = function (A, e) { var t = this.octantToObjectMap; if (t[A] && t[A].mesh && t[A].info) { var i = 0, o = t[A].info[e]; for (i = o.length - 1; i >= 0; i -= 1) o.splice(i); delete t[A].info[e] } }, ly.prototype.getOctantMap = function () { return this.octantToObjectMap }, ly.prototype.isFilterApplied = function () { return this.filterApplied }, ly.prototype.setFilterApplied = function (A) { this.filterApplied = A }, ly.prototype.applyFilter = function () { for (var A in Bh.time("applyFilter"), this.models) { this.models[A].applyFilter() } for (var e = 0, t = this.plugins.length; t > e; e += 1) this.plugins[e].applyFilter(); this.setFilterApplied(!0), Bh.timeEnd("applyFilter") }, ly.prototype.applySelection = function () { console.log('applySelection22') for (var A in this.selectPriority = !0, this.models) { this.models[A].applySelection() } this.scene.getExtrudeBodyManager().applySelection(this); for (var e = 0, t = this.plugins.length; t > e; e += 1) this.plugins[e].applySelection() }, ly.prototype.clearSelection = function () { for (var A in this.selectPriority = !0, this.models) { this.models[A].clearSelection() } this.scene.getExtrudeBodyManager().clearSelection(); for (var e = 0, t = this.plugins.length; t > e; e += 1) this.plugins[e].clearSelection() }, ly.prototype.applyHover = function () { if (vc.Hover && !vc.EnableRenderPass) for (var A in this.models) { this.models[A].applyHover() } this.scene.getExtrudeBodyManager().applyHover(this); for (var e = 0, t = this.plugins.length; t > e; e += 1) this.plugins[e].applyHover() }, ly.prototype.clearHover = function () { if (vc.Hover && !vc.EnableRenderPass) for (var A in this.models) { this.models[A].clearHover() } this.scene.getExtrudeBodyManager().clearHover(); for (var e = 0, t = this.plugins.length; t > e; e += 1) this.plugins[e].clearHover() }, ly.prototype.chooseRendering = function (A) {}, ly.prototype.isUserIdExist = function (A) { var e = !1; for (var t in this.models) { if (this.models.hasOwnProperty(t)) if (this.models[t].getModelDescriptor().isUserIdExist(A)) { e = !0; break } } for (var i = 0, o = this.plugins.length; o > i; i += 1) if (this.plugins[i].isUserIdExist && this.plugins[i].isUserIdExist(A)) { e = !0; break } return e }, ly.prototype.getNodeInfosByUserId = function (A) { var e = []; for (var t in this.models) { var i = this.models[t]; if (i && i.isLoaded()) { var o = this.models[t].getModelDescriptor().getNodeInfosByUserId(A); o && (e = e.concat(o)) } } for (var n = 0, r = this.plugins.length; r > n; n += 1) if (this.plugins[n].getNodeInfosByUserId) { var a = this.plugins[n].getNodeInfosByUserId(A); a && (e = e.concat(a)) } return e.length ? e : null }, ly.prototype.getNodeInfos = function () { var A = {}; for (var e in this.models) if (this.models[e].isLoaded()) { var t = this.models[e].getModelDescriptor().getAllNodeInfos(); t && (A[e] = t) } var i = this.getNodeInfosInPlugins(); return Object.assign(A, i), A }, ly.prototype.getNodeInfosInPlugins = function () { for (var A = {}, e = 0, t = this.plugins.length; t > e; e += 1) this.plugins[e].getAllNodeInfos && this.plugins[e].getAllNodeInfos(A); return A }, ly.prototype.getMaterialByNodeId = function (A, e, t) { var i = this.models[A]; if (!i) return null; for (var o = i.getModelDescriptor().getNodeInfosByUserId(e), n = -1, r = 0, a = o.length; a > r; r += 1) if (o[r].nodeId === t) { n = r; break } return -1 !== n ? i.getMaterialByMaterialId(o[n].materialId) : null }, ly.prototype.getNodeInfoByNodeId = function (A, e, t) { var i = this.models[A]; if (!i) return null; for (var o = i.getModelDescriptor().getNodeInfosByUserId(e), n = -1, r = 0, a = o.length; a > r; r += 1) if (o[r].nodeId === t) { n = r; break } return -1 !== n ? o[n] : null }, ly.prototype.getComponentInfoByUserId = function (A) { var e = this.getNodeInfosByUserId(A); if (e && e.length > 0) { for (var t = new aA, i = [], o = 0, n = e.length; n > o; o += 1) t.union(e[o].boundingBox), -1 === i.indexOf(e[o].materialId) && i.push(e[o].materialId); return { userId: A, state: 0, materials: i, boundingBox: t, userData: e[0].userData } } return null }, ly.prototype.getBoundingBoxByIds = function (A) { var e = this.getScene(), t = new aA; for (var i in A) if (!this.isHiddenUserId(i)) { Array.isArray(A) && (i = A[i]); var o = this.getComponentInfoByUserId(i); if (o) t.union(o.boundingBox); else { var n = e.getExtrudeBodyManager().getNode(i); if (n) { var r = n.geometry.boundingBox.clone(); n.matrix && r.applyMatrix4(n.matrix), t.union(r) } } } return t }, ly.prototype.createMaterialOverrideSet = function (A, e) { this.materialOverrideSet = new MaterialOverriderSet(A, e), vc.EnableTextureMapping = !0 }, ly.prototype.getMaterialOverrideSet = function () { return this.materialOverrideSet }, ly.prototype.getOverrideMaterialByNodeInfo = function (A) { return this.materialOverrideSet ? this.materialOverrideSet.getOverrideMaterialByNodeInfo(A) : null }, ly.prototype.getOverrideMaterialByName = function (A) { return this.materialOverrideSet ? this.materialOverrideSet.getOverrideMaterialByName(A) : null }, ly.prototype.loadOverrideMaterialsByDemand = function (A, e) { if (this.materialOverrideSet) { var t = this.getConditions(); this.materialOverrideSet.loadByDemand(t, A, e) } else e && e() }, ly.prototype.getConditions = function () { var A = {}, e = {}, t = {}; for (var i in this.models) { var o = this.models[i].getModelDescriptor().getAllNodeInfos(); if (o) for (var i in o) if (o.hasOwnProperty(i)) for (var n = 0, r = o[i].length; r > n; n += 1) { var a = o[i][n].userData; e[o[i][n].userId] = !0, t[a.systemTypeId] = !0, A[a.familyId] = !0 } } return { familyIds: A, elementIds: e, systemTypeIds: t } }, ly.prototype.isHiddenUserId = function (A) { var e = !1; for (var t in this.models) { if (this.models.hasOwnProperty(t)) if ((t = this.models[t]).isHiddenUserId(A)) { e = !0; break } } return e }, ly.prototype.isHiddenSourceObjectUserId = function (A) { return !!this.sourceObjectManager && this.sourceObjectManager.isHidden(A) }, ly.prototype.hasHiddenSourceObjectUserId = function () { return !!this.sourceObjectManager && this.sourceObjectManager.hasHidden() }, ly.prototype.updateMeshNodes = function () { for (var A in this.models) { if (this.models.hasOwnProperty(A)) (A = this.models[A]).updateMeshNodes() } }, ly.prototype.getMinDistanceObjects = function (A, e) { var t = this, i = {}; for (var o in this.models) if (this.models.hasOwnProperty(o)) { (o = this.models[o]).minDistanceObjects = {}; var n = o.getMeshesByUserIds(A), r = o.getMeshesByUserIds(e); if (n && n.length > 0 && (i[A] = n), r && r.length > 0 && (i[e] = r), i[A] && i[e]) return i } var a = null, s = null, l = null, c = null, h = null, d = function () { var i = {}, o = function (A, e, t) { var o = {}; o.mesh = A; var n = new M; t ? n.multiplyMatrices(t, A.matrix) : n = A.matrix, o.matrix = n; var r = A.geometry.boundingBox; r || (A.geometry.computeBoundingBox(), r = o.mesh.geometry.boundingBox); var a = r.clone().applyMatrix4(n); o.boundingBox = a, i[e] && (i[e] = []), i[e].push(o) }; if (!(a = t.scene.getGroup("ExternalComponentManager"))) return { v: void 0 }; for (l = 0, c = (s = a.children).length; c > l; l += 1) (h = s[l]).name !== A && h.name !== e || (uh.isGroupObject(h) ? h.traverseVisible((function (A) { uh.isMeshObject(A) && o(A, h.name, h.matrix) })) : o(h, h.name)); return { v: i } }(); return d && d.v && (d.v[A] && d.v[A].length > 0 && (i[A] = d.v[A]), d.v[e] && d.v[e].length > 0 && (i[e] = d.v[e]), i[A] && i[e]) || i[A] && i[e] ? i : null }, ly.prototype.getMeshByUserId = function (A) { for (var e in this.models) if (this.models.hasOwnProperty(e)) { var t = (e = this.models[e]).getMeshesByUserIds(A); if (t) return t } return null }, ly.prototype.adjustVisibility = function (A) { for (var e in this.models) this.models[e] && this.models[e]._getHandler().adjustVisibility(A); for (var t = 0, i = this.plugins.length; i > t; t += 1) { var o = this.plugins[t]; o.adjustVisibility && "function" == typeof o.adjustVisibility && o.adjustVisibility(A) } this.otherAdjustVisibility && this.otherAdjustVisibility(A) }, ly.prototype.changeVisibilityOfSelectedObjects = function (A) { for (var e in this.models) this.models[e] && this.models[e]._getHandler().changeVisibilityOfSelectedObjects(A); for (var t = 0, i = this.plugins.length; i > t; t += 1) { var o = this.plugins[t]; o.changeVisibilityOfSelectedObjects && "function" == typeof o.changeVisibilityOfSelectedObjects && o.changeVisibilityOfSelectedObjects(A) } }, ly.prototype.changeVisibilityOfNonSelectedObjects = function (A) { for (var e in this.models) this.models[e] && this.models[e]._getHandler().changeVisibilityOfNonSelectedObjects(A); this.otherAdjustVisibility && this.otherAdjustVisibility(A); for (var t = 0, i = this.plugins.length; i > t; t += 1) { var o = this.plugins[t]; o.changeVisibilityOfNonSelectedObjects && "function" == typeof o.changeVisibilityOfNonSelectedObjects && o.changeVisibilityOfNonSelectedObjects(A) } }, ly.prototype.adjustInstanceVisibility = function (A) { for (var e in this.models) this.models[e] && this.models[e].merged && this.models[e]._getHandler().adjustInstanceVisibility(A) }, ly.prototype.adjustVisibilityOfObjectsWithoutOutline = function (A) { for (var e in this.models) if (this.models[e]) { var t = this.models[e].axisNetManager; t && t.visibleByUser && (A ? this.models[e].axisNetManager.privateShow() : this.models[e].axisNetManager.privateHide()) } for (var i = 0, o = this.plugins.length; o > i; i += 1) { var n = this.plugins[i]; n.adjustVisibilityOfObjectsWithoutOutline && "function" == typeof n.adjustVisibilityOfObjectsWithoutOutline && n.adjustVisibilityOfObjectsWithoutOutline(A) } var r; this.scene.hasClipPlanes() && ((r = this.scene.getClipPlanes()).isEnabled() && (!1 === A && r.visible ? (r.visible = !1, r._hideByModelManager = !0) : !0 === A && r._hideByModelManager && (r.visible = !0, delete r._hideByModelManager))); this.scene.hasFillClipPlanes() && ((r = this.scene.getFillClipPlane()).isEnabled() && (!1 === A && r.visible ? (r.visible = !1, r._hideByModelManager = !0) : !0 === A && r._hideByModelManager && (r.visible = !0, delete r._hideByModelManager))); this.scene.receivingPlane && (!1 === A && this.scene.receivingPlane.visible ? (this.scene.receivingPlane.visible = !1, this.scene.receivingPlane._hideByModelManager = !0) : !0 === A && this.scene.receivingPlane._hideByModelManager && (this.scene.receivingPlane.visible = !0, delete this.scene.receivingPlane._hideByModelManager)), this.otherAdjustVisibility && this.otherAdjustVisibility(A); for (var a = this.scene.children, s = (i = 0, a.length); s > i; i += 1) { var l = a[i]; l !== this.scene.objectGroups && !0 !== l.isLight && !0 === l.isObject3D && (l.visible = A) } }, ly.prototype.changeInstanceVisibilityOfSelectedObjects = function (A) { for (var e in this.models) this.models[e] && this.models[e].merged && this.models[e]._getHandler().changeInstanceVisibilityOfSelectedObjects(A) }, ly.prototype.changeInstanceVisibilityOfNonSelectedObjects = function (A) { for (var e in this.models) this.models[e] && this.models[e].merged && this.models[e]._getHandler().changeInstanceVisibilityOfNonSelectedObjects(A) }, ly.prototype.restoreVisibilityOfObjects = function () { for (var A in this.models) this.models[A] && this.models[A]._getHandler().restoreVisibilityOfObjects(); this.otherAdjustVisibility && this.otherAdjustVisibility(!0) }, ly.prototype.getComponentKeysByTypeFromList = function (A, e) { var t = []; for (var i in this.models) { if (this.models.hasOwnProperty(i)) if ((i = this.models[i]).isLoaded()) { var o = i.getComponentKeysByTypeFromList(A, e); o && (t = t.concat(o)) } } return t }, ly.prototype.getComponentKeysByType = function (A) { var e = []; for (var t in this.models) { if (this.models.hasOwnProperty(t)) if ((t = this.models[t]).isLoaded()) { var i = t.getComponentKeysByType(A); i && (e = e.concat(i)) } } return e }, ly.prototype.getComponentKeysByName = function (A) { var e = []; for (var t in this.models) if (this.models.hasOwnProperty(t)) { var i = (t = this.models[t]).getComponentKeysByName(A); i && (e = e.concat(i)) } return e }, ly.prototype.getComponentKeysByProperty = function (A, e) { var t = []; for (var i in this.models) if (this.models.hasOwnProperty(i)) { var o = (i = this.models[i]).getComponentKeysByProperty(A, e); o && (t = t.concat(o)) } return t }, ly.prototype.getBlinkMaterials = function () { var A = []; for (var e in this.models) this.models[e] && this.models[e]._getHandler().getBlinkMaterials && (A = A.concat(this.models[e]._getHandler().getBlinkMaterials())); return A }, ly.prototype.resetBlinkMaterial = function () { for (var A = this.getBlinkMaterials(), e = 0, t = A.length; t > e; e += 1) A[e].resetBlinkUniformValue() }, ly.prototype.updateBlinkMaterial = function () { if (null !== this.blinkStartTime) { if (Date.now() - this.blinkStartTime >= this.blinkIntervalTime) { this.blinkStartTime = Date.now(), this.indexSwitch = !this.indexSwitch; for (var A = this.indexSwitch ? Yc.BLINK : Yc.NONE, e = this.getBlinkMaterials(), t = 0, i = e.length; i > t; t += 1) e[t].updateBlinkUniformValue(A, this.blinkColor) } } else this.blinkStartTime = Date.now() }, ly.prototype.getBlinkColor = function () { return this.blinkColor }, ly.prototype.setBlinkColor = function (A, e) { if (A) { var t = uh.hexToRgb(A); this.blinkColor.fromArray([t.r, t.g, t.b, e || 1]) } else this.blinkColor.set(this.defaultBlinkColor.r, this.defaultBlinkColor.g, this.defaultBlinkColor.b, this.defaultBlinkAlpha) }, ly.prototype.setBlinkIntervalTime = function (A) { this.blinkIntervalTime > 0 && (this.blinkIntervalTime = A) }, ly.prototype.enableBlink = function (A) { this.blinkEnabled = A, A ? null === this.blinkStartTime && (this.blinkStartTime = Date.now()) : (this.blinkStartTime = null, this.resetBlinkMaterial()), this.applyBlink() }, ly.prototype.getBlinkEnabled = function () { return !this.isBlinkPermited() && this.blinkEnabled }, ly.prototype.getBlinkComponentsIdMap = function () { return this.isBlinkPermited() ? null : this.sceneState.getBlinkComponentsIdMap() }, ly.prototype.applyBlink = function () { if (!this.isBlinkPermited()) for (var A in this.selectPriority = !1, this.models) { this.models[A].applyBlink() } }, ly.prototype.clearBlink = function () { if (!this.isBlinkPermited()) for (var A in this.selectPriority = !1, this.models) { this.models[A].clearBlink() } }, ly.prototype.permitBlink = function (A) { this.blinkPermited = A }, ly.prototype.isBlinkPermited = function () { return this.blinkPermited }, ly.prototype.isSelectPriority = function () { return this.selectPriority }, ly.prototype.getSceneState = function () { return this.sceneState }, ly.prototype.getModelSceneState = function () { return this.modelState }, ly.prototype.disposeBufferAfterVbo = function () { if (vc.EnableDisposeBufferAfterVbo) for (var A in this.models) { this.models[A].disposeBufferAfterVbo() } }, ly.prototype.getSourceObjectManager = function () { return this.sourceObjectManager || (this.sourceObjectManager = new ry), this.sourceObjectManager }, ly.prototype.isHiddenUserId = function (A) { return !!this.sourceObjectManager && this.sourceObjectManager.isHidden(A) }, ly.prototype.hasHiddenUserId = function () { return !!this.sourceObjectManager && this.sourceObjectManager.hasHidden() }, ly.prototype.traverseModels = function (A, e) { for (var t in this.models) { var i = this.models[t]; if (e && e(i)) break; A && A(i) } }, ly.prototype.traverseLoadedModels = function (A) { for (var e in this.models) { var t = this.models[e]; t && t.isLoaded() && A(t) } }, ly.prototype.getStatisticsInfo = function () { var A = 0, e = 0, t = 0, i = 0; for (var o in this.models) { var n = this.models[o]; if (n && n.isLoaded()) { var r = n.getTrianglesCount(); A += r.positionsCount, e += r.trianglesCount, t += r.realPositionCount, i += r.realTrianglesCount } } return { positionsCount: A, trianglesCount: e, realPositionCount: t, realTrianglesCount: i, componentCount: this.getAllComponentsKey().length } }, ly.prototype.dealStateChanged = function () { this.hasModelDataReady() && (this.isRenderStateChanged() || this.filter.isStateChanged()) && (this.isRenderStateChanged() && this.setRenderStateChanged(!1), this.filter.isStateChanged() && this.filter.disableStateChanged(), this.applyFilter()) }, ly.prototype.setRenderStateChanged = function (A) { this._renderStateChanged = A }, ly.prototype.isRenderStateChanged = function () { return this._renderStateChanged }, ly.prototype.hasLoadOnDemandDirector = function () { return !!this.loadOnDemandDirector }, ly.prototype.getLoadOnDemandDirector = function () { return this.loadOnDemandDirector || (this.loadOnDemandDirector = new sy(this)), this.loadOnDemandDirector }, ly.prototype.checkLayerDataLoading = function () { return !!(this.isLayerData() && this.hasLoadOnDemandDirector() && this.getLoadOnDemandDirector().isLoading()) && (this.filter.isStateChanged() && this.filter.disableStateChanged(), !0) }, ly.prototype.updateFilterManager = function () { var A = this.getNodeInfos(), e = this.filter; e.clearFilterManager(), e.initFilterManager(A), e.isStateChanged() && e.disableStateChanged(), this.updateMeshNodes(), this.applyFilter() }, ly.prototype.isDrawingBoardlineEnabled = function () { return !(!vc.DrawingBoardlineEnabled || vc.DrawingStyle !== jc.BOARDLINE && vc.DrawingStyle !== jc.SHADINGWITHLINE) }, ly.prototype.isOnlyWireframe = function () { return vc.DrawingStyle === jc.BOARDLINE }, ly.prototype.getExplosionExtent = function () { return this.explosionExtent }, ly.prototype.setExplosionExtent = function (A) { var e = A - this.explosionExtent; for (var t in this.models) this.models[t] && this.models[t].explode(e); this.explosionExtent = A }, ly.prototype.updateAnimation = function () { var A = this.viewerImpl.clock.getDelta(); for (var e in this.models) if (this.models.hasOwnProperty(e)) { var t = this.models[e]; if (t.hasAnimation && t.mixer) { var i = t.mixer; t.singleStepMode ? (i.update(t.sizeOfNextStep), t.sizeOfNextStep = 0) : i.update(A) } } }, ly.prototype.needUpdateAnimation = function () { for (var A in this.models) if (this.models.hasOwnProperty(A)) { var e = this.models[A]; if (e.hasAnimation && e.mixer && e.needUpdate) return !0 } return !1 }, ly.prototype.unloadGeopkOnDemand = function (A, e) { var t = this.models; for (var i in t) if (t.hasOwnProperty(i)) { var o = t[i]; o.isLoaded() && !o.isEmptyScene() && o.isLayerData() && o.unloadGeopkOnDemand(A, e) } }, ly.prototype.loadGeopkOnDemand = function (A, e, t, i) { this.getLoadOnDemandDirector().loadGeopkOnDemandByConditions(A, e, t, i) }, ly.prototype.loadAllGeosOnDemand = function (A, e) { var t = this.models; for (var i in t) if (t.hasOwnProperty(i)) { var o = t[i]; o.isLoaded() && !o.isEmptyScene() && o.isLayerData() && o.loadAllGeosOnDemand(A, e) } }, ly.prototype.getBoundingBoxOnDemand = function () { var A = this.models, e = new aA; for (var t in A) if (A.hasOwnProperty(t)) { var i = A[t]; if (i.isLoaded() && !i.isEmptyScene() && i.isLayerData()) { var o = i.getUnionBoundingBoxOnDemand(); o && e.union(o) } } return e }, ly.prototype.setConditionsOnDemandLoad = function (A) { this.conditionsOnDemandLoad = A; var e = this.models; for (var t in e) if (e.hasOwnProperty(t)) { var i = e[t]; i.isLoaded() && !i.isEmptyScene() && i.isLayerData() && i.setConditionsChangedOnDemand(!0) } }, ly.prototype.getConditionsOnDemandLoad = function () { return this.conditionsOnDemandLoad }, ly.prototype.componentsExplosion = function (A) { var e = this.models; for (var t in e) { if (e.hasOwnProperty(t)) e[t].componentsExplosion(A) } }, ly.prototype.closeComponentsExplosion = function (A) { var e = this.models; for (var t in e) { if (e.hasOwnProperty(t)) e[t].closeComponentsExplosion(A) } }, ly.prototype.canFloorExplosion = function () { var A = this.models, e = !1; for (var t in A) { if (A.hasOwnProperty(t)) A[t].floorManager && (e = !0) } return e }, ly.prototype.floorExplosion = function (A) { var e = this.models, t = !1; for (var i in e) { if (e.hasOwnProperty(i)) e[i].floorExplosion(A) && (this.updateSceneBoundingBox(), t = !0) } return t }, ly.prototype.closeFloorExplosion = function () { var A = this.models; for (var e in A) { if (A.hasOwnProperty(e)) A[e].closeFloorExplosion() } }, ly.prototype.checkTilesDataChanged = function (A, e) { if (!this.cameraPosition.equals(A.position) || this.cameraFov !== A.fov || this.domElementWidth !== e.domElement.width) { this.cameraFov = A.fov || 45, this.cameraPosition = A.position.clone() || new y, this.domElementWidth = e.domElement.width || 1e3; var t = !1, i = this.checkMemory(); for (var o in i > vc.MaximumAvailableMemory && (t = !0), this.models) if (this.models.hasOwnProperty(o)) { var n = this.models[o]; n.isTilesModel && n.checkTilesDataChanged(t) } } }, ly.prototype.checkMemory = function () { var A = 0, e = this.viewerImpl.getRenderer().info; return A += 6 * (e.render.triangles || 0), A += 1024 * (e.memory.textures || 0) * 1024 / 4, A += 1024 * (e.render.calls || 0) / 4, A += 1024 * (e.memory.geometries || 0) / 4, A *= 1 / 1048576, A = Math.ceil(A) }, ly.prototype.getMeshIdFromOctantMap = function (A) { return A.single ? A.nodeId : A.instanceOrNot ? uh.getCombinedKeyString(A.uv2Info ? [A.materialId, A.geometryId, A.uv2Info.byteOffset] : [A.materialId, A.geometryId]) : vc.MergeComponent ? uh.getCombinedKeyString([A.materialId, A.uv ? "1" : "0", A.type === $u.EnumNodeItemType.LINE ? "lines" : "meshes"]) : A.nodeId }; var cy, hy, dy, py = { uniforms: { tDiffuse: { value: null }, opacity: { value: 1 } }, vertexShader: ["varying vec2 vUv;", "void main() {", "vUv = uv;", "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"), fragmentShader: ["uniform float opacity;", "uniform sampler2D tDiffuse;", "varying vec2 vUv;", "void main() {", "vec4 texel = texture2D( tDiffuse, vUv );", "gl_FragColor = opacity * texel;", "}"].join("\n") }; function gy() { this.enabled = !0, this.needsSwap = !0, this.clear = !1, this.renderToScreen = !1 } Object.assign(gy.prototype, { setSize: function () {}, render: function () { console.error("THREE.Pass: .render() must be implemented in derived pass.") } }), gy.FullScreenQuad = (cy = new Ka(-1, 1, 1, -1, 0, 1), hy = new et(2, 2), dy = function (A) { this._mesh = new Ue(hy, A) }, Object.defineProperty(dy.prototype, "material", { get: function () { return this._mesh.material }, set: function (A) { this._mesh.material = A } }), Object.assign(dy.prototype, { render: function (A) { A.render(this._mesh, cy) } }), dy); var uy = function (A, e) { gy.call(this), this.textureID = void 0 !== e ? e : "tDiffuse", A instanceof Pe ? (this.uniforms = A.uniforms, this.material = A) : A && (this.uniforms = Ge.clone(A.uniforms), this.material = new Pe({ defines: Object.assign({}, A.defines), uniforms: this.uniforms, vertexShader: A.vertexShader, fragmentShader: A.fragmentShader })), this.fsQuad = new gy.FullScreenQuad(this.material) }; uy.prototype = Object.assign(Object.create(gy.prototype), { constructor: uy, render: function (A, e, t) { this.uniforms[this.textureID] && (this.uniforms[this.textureID].value = t.texture), this.fsQuad.material = this.material, this.renderToScreen ? (A.setRenderTarget(null), this.fsQuad.render(A)) : (A.setRenderTarget(e), this.clear && A.clear(A.autoClearColor, A.autoClearDepth, A.autoClearStencil), this.fsQuad.render(A)) } }); var fy = function (A, e) { gy.call(this), this.scene = A, this.camera = e, this.clear = !0, this.needsSwap = !1, this.inverse = !1 }; fy.prototype = Object.assign(Object.create(gy.prototype), { constructor: fy, render: function (A, e, t) { var i = A.getContext(), o = A.state; o.buffers.color.setMask(!1), o.buffers.depth.setMask(!1), o.buffers.color.setLocked(!0), o.buffers.depth.setLocked(!0); var n = null, r = null; this.inverse ? (r = 0, n = 1) : (r = 1, n = 0), o.buffers.stencil.setTest(!0), o.buffers.stencil.setOp(i.REPLACE, i.REPLACE, i.REPLACE), o.buffers.stencil.setFunc(i.ALWAYS, r, 4294967295), o.buffers.stencil.setClear(n), o.buffers.stencil.setLocked(!0), A.setRenderTarget(t), this.clear && A.clear(), A.render(this.scene, this.camera), A.setRenderTarget(e), this.clear && A.clear(), A.render(this.scene, this.camera), o.buffers.color.setLocked(!1), o.buffers.depth.setLocked(!1), o.buffers.stencil.setLocked(!1), o.buffers.stencil.setFunc(i.EQUAL, 1, 4294967295), o.buffers.stencil.setOp(i.KEEP, i.KEEP, i.KEEP), o.buffers.stencil.setLocked(!0) } }); var my = function () { gy.call(this), this.needsSwap = !1 }; my.prototype = Object.create(gy.prototype), Object.assign(my.prototype, { render: function (A) { A.state.buffers.stencil.setLocked(!1), A.state.buffers.stencil.setTest(!1) } }); var Cy = function (A, e) { if (this.renderer = A, void 0 === e) { var t = { minFilter: 1006, magFilter: 1006, format: 1023, stencilBuffer: !1 }, i = A.getSize(new s); this._pixelRatio = A.getPixelRatio(), this._width = i.width, this._height = i.height, (e = new g(this._width * this._pixelRatio, this._height * this._pixelRatio, t)).texture.name = "EffectComposer.rt1" } else this._pixelRatio = 1, this._width = e.width, this._height = e.height; this.renderTarget1 = e, this.renderTarget2 = e.clone(), this.renderTarget2.texture.name = "EffectComposer.rt2", this.writeBuffer = this.renderTarget1, this.readBuffer = this.renderTarget2, this.renderToScreen = !0, this.passes = [], void 0 === py && console.error("THREE.EffectComposer relies on CopyShader"), void 0 === uy && console.error("THREE.EffectComposer relies on ShaderPass"), this.copyPass = new uy(py), this.clock = new as }; Object.assign(Cy.prototype, { swapBuffers: function () { var A = this.readBuffer; this.readBuffer = this.writeBuffer, this.writeBuffer = A }, addPass: function (A) { this.passes.push(A), A.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio) }, insertPass: function (A, e) { this.passes.splice(e, 0, A) }, isLastEnabledPass: function (A) { for (var e = A + 1; this.passes.length > e; e += 1) if (this.passes[e].enabled) return !1; return !0 }, render: function (A) { void 0 === A && (A = this.clock.getDelta()); var e = this.renderer.getRenderTarget(), t = !1, i = null, o = null, n = this.passes.length; for (o = 0; n > o; o += 1) if (!1 !== (i = this.passes[o]).enabled) { if (i.renderToScreen = this.renderToScreen && this.isLastEnabledPass(o), i.render(this.renderer, this.writeBuffer, this.readBuffer, A, t), i.needsSwap) { if (t) { var r = this.renderer.getContext(), a = this.renderer.state.buffers.stencil; a.setFunc(r.NOTEQUAL, 1, 4294967295), this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, A), a.setFunc(r.EQUAL, 1, 4294967295) } this.swapBuffers() } void 0 !== fy && (i instanceof fy ? t = !0 : i instanceof my && (t = !1)) } this.renderer.setRenderTarget(e) }, reset: function (A) { if (void 0 === A) { var e = this.renderer.getSize(new s); this._pixelRatio = this.renderer.getPixelRatio(), this._width = e.width, this._height = e.height, (A = this.renderTarget1.clone()).setSize(this._width * this._pixelRatio, this._height * this._pixelRatio) } this.renderTarget1.dispose(), this.renderTarget2.dispose(), this.renderTarget1 = A, this.renderTarget2 = A.clone(), this.writeBuffer = this.renderTarget1, this.readBuffer = this.renderTarget2 }, setSize: function (A, e) { this._width = A, this._height = e; var t = this._width * this._pixelRatio, i = this._height * this._pixelRatio; this.renderTarget1.setSize(t, i), this.renderTarget2.setSize(t, i); for (var o = 0; this.passes.length > o; o += 1) this.passes[o].setSize(t, i) }, setPixelRatio: function (A) { this._pixelRatio = A, this.setSize(this._width, this._height) } }); var yy = function () { this.enabled = !0, this.needsSwap = !0, this.clear = !1, this.renderToScreen = !1 }; Object.assign(yy.prototype, { setSize: function () {}, render: function () { console.error("THREE.Pass: .render() must be implemented in derived pass.") } }), yy.FullScreenQuad = function () { var A = new Ka(-1, 1, 1, -1, 0, 1), e = new et(2, 2), t = function (A) { this._mesh = new Ue(e, A) }; return Object.defineProperty(t.prototype, "material", { get: function () { return this._mesh.material }, set: function (A) { this._mesh.material = A } }), Object.assign(t.prototype, { render: function (e) { e.render(this._mesh, A) } }), t }(); var vy = { uniforms: { tDiffuse: { value: null }, resolution: { value: new s(1 / 1024, 1 / 512) } }, vertexShader: ["varying vec2 vUv;", "void main() {", "vUv = uv;", "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"), fragmentShader: ["precision highp float;", "", "uniform sampler2D tDiffuse;", "", "uniform vec2 resolution;", "", "varying vec2 vUv;", "", "// FXAA 3.11 implementation by NVIDIA, ported to WebGL by Agost Biro (biro@archilogic.com)", "", "//----------------------------------------------------------------------------------", "// File: es3-kepler FXAA assets shaders/FXAA_DefaultES.frag", "// SDK Version: v3.00", "// Email: gameworks@nvidia.com", "// Site: http://developer.nvidia.com/", "//", "// Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.", "//", "// Redistribution and use in source and binary forms, with or without", "// modification, are permitted provided that the following conditions", "// are met:", "// * Redistributions of source code must retain the above copyright", "// notice, this list of conditions and the following disclaimer.", "// * Redistributions in binary form must reproduce the above copyright", "// notice, this list of conditions and the following disclaimer in the", "// documentation and/or other materials provided with the distribution.", "// * Neither the name of NVIDIA CORPORATION nor the names of its", "// contributors may be used to endorse or promote products derived", "// from this software without specific prior written permission.", "//", "// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY", "// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE", "// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR", "// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR", "// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,", "// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,", "// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR", "// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY", "// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT", "// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE", "// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", "//", "//----------------------------------------------------------------------------------", "", "#define FXAA_PC 1", "#define FXAA_GLSL_100 1", "#define FXAA_QUALITY_PRESET 12", "", "#define FXAA_GREEN_AS_LUMA 1", "", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_PC_CONSOLE", " //", " // The console algorithm for PC is included", " // for developers targeting really low spec machines.", " // Likely better to just run FXAA_PC, and use a really low preset.", " //", " #define FXAA_PC_CONSOLE 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_GLSL_120", " #define FXAA_GLSL_120 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_GLSL_130", " #define FXAA_GLSL_130 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_HLSL_3", " #define FXAA_HLSL_3 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_HLSL_4", " #define FXAA_HLSL_4 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_HLSL_5", " #define FXAA_HLSL_5 0", "#endif", "/*==========================================================================*/", "#ifndef FXAA_GREEN_AS_LUMA", " //", " // For those using non-linear color,", " // and either not able to get luma in alpha, or not wanting to,", " // this enables FXAA to run using green as a proxy for luma.", " // So with this enabled, no need to pack luma in alpha.", " //", " // This will turn off AA on anything which lacks some amount of green.", " // Pure red and blue or combination of only R and B, will get no AA.", " //", " // Might want to lower the settings for both,", " // fxaaConsoleEdgeThresholdMin", " // fxaaQualityEdgeThresholdMin", " // In order to insure AA does not get turned off on colors", " // which contain a minor amount of green.", " //", " // 1 = On.", " // 0 = Off.", " //", " #define FXAA_GREEN_AS_LUMA 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_EARLY_EXIT", " //", " // Controls algorithm's early exit path.", " // On PS3 turning this ON adds 2 cycles to the shader.", " // On 360 turning this OFF adds 10ths of a millisecond to the shader.", " // Turning this off on console will result in a more blurry image.", " // So this defaults to on.", " //", " // 1 = On.", " // 0 = Off.", " //", " #define FXAA_EARLY_EXIT 1", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_DISCARD", " //", " // Only valid for PC OpenGL currently.", " // Probably will not work when FXAA_GREEN_AS_LUMA = 1.", " //", " // 1 = Use discard on pixels which don't need AA.", " // For APIs which enable concurrent TEX+ROP from same surface.", " // 0 = Return unchanged color on pixels which don't need AA.", " //", " #define FXAA_DISCARD 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_FAST_PIXEL_OFFSET", " //", " // Used for GLSL 120 only.", " //", " // 1 = GL API supports fast pixel offsets", " // 0 = do not use fast pixel offsets", " //", " #ifdef GL_EXT_gpu_shader4", " #define FXAA_FAST_PIXEL_OFFSET 1", " #endif", " #ifdef GL_NV_gpu_shader5", " #define FXAA_FAST_PIXEL_OFFSET 1", " #endif", " #ifdef GL_ARB_gpu_shader5", " #define FXAA_FAST_PIXEL_OFFSET 1", " #endif", " #ifndef FXAA_FAST_PIXEL_OFFSET", " #define FXAA_FAST_PIXEL_OFFSET 0", " #endif", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_GATHER4_ALPHA", " //", " // 1 = API supports gather4 on alpha channel.", " // 0 = API does not support gather4 on alpha channel.", " //", " #if (FXAA_HLSL_5 == 1)", " #define FXAA_GATHER4_ALPHA 1", " #endif", " #ifdef GL_ARB_gpu_shader5", " #define FXAA_GATHER4_ALPHA 1", " #endif", " #ifdef GL_NV_gpu_shader5", " #define FXAA_GATHER4_ALPHA 1", " #endif", " #ifndef FXAA_GATHER4_ALPHA", " #define FXAA_GATHER4_ALPHA 0", " #endif", "#endif", "", "", "/*============================================================================", " FXAA QUALITY - TUNING KNOBS", "------------------------------------------------------------------------------", "NOTE the other tuning knobs are now in the shader function inputs!", "============================================================================*/", "#ifndef FXAA_QUALITY_PRESET", " //", " // Choose the quality preset.", " // This needs to be compiled into the shader as it effects code.", " // Best option to include multiple presets is to", " // in each shader define the preset, then include this file.", " //", " // OPTIONS", " // -----------------------------------------------------------------------", " // 10 to 15 - default medium dither (10=fastest, 15=highest quality)", " // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)", " // 39 - no dither, very expensive", " //", " // NOTES", " // -----------------------------------------------------------------------", " // 12 = slightly faster then FXAA 3.9 and higher edge quality (default)", " // 13 = about same speed as FXAA 3.9 and better than 12", " // 23 = closest to FXAA 3.9 visually and performance wise", " // _ = the lowest digit is directly related to performance", " // _ = the highest digit is directly related to style", " //", " #define FXAA_QUALITY_PRESET 12", "#endif", "", "", "/*============================================================================", "", " FXAA QUALITY - PRESETS", "", "============================================================================*/", "", "/*============================================================================", " FXAA QUALITY - MEDIUM DITHER PRESETS", "============================================================================*/", "#if (FXAA_QUALITY_PRESET == 10)", " #define FXAA_QUALITY_PS 3", " #define FXAA_QUALITY_P0 1.5", " #define FXAA_QUALITY_P1 3.0", " #define FXAA_QUALITY_P2 12.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 11)", " #define FXAA_QUALITY_PS 4", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 3.0", " #define FXAA_QUALITY_P3 12.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 12)", " #define FXAA_QUALITY_PS 5", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 4.0", " #define FXAA_QUALITY_P4 12.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 13)", " #define FXAA_QUALITY_PS 6", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 4.0", " #define FXAA_QUALITY_P5 12.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 14)", " #define FXAA_QUALITY_PS 7", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 4.0", " #define FXAA_QUALITY_P6 12.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 15)", " #define FXAA_QUALITY_PS 8", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 4.0", " #define FXAA_QUALITY_P7 12.0", "#endif", "", "/*============================================================================", " FXAA QUALITY - LOW DITHER PRESETS", "============================================================================*/", "#if (FXAA_QUALITY_PRESET == 20)", " #define FXAA_QUALITY_PS 3", " #define FXAA_QUALITY_P0 1.5", " #define FXAA_QUALITY_P1 2.0", " #define FXAA_QUALITY_P2 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 21)", " #define FXAA_QUALITY_PS 4", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 22)", " #define FXAA_QUALITY_PS 5", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 23)", " #define FXAA_QUALITY_PS 6", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 24)", " #define FXAA_QUALITY_PS 7", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 3.0", " #define FXAA_QUALITY_P6 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 25)", " #define FXAA_QUALITY_PS 8", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 4.0", " #define FXAA_QUALITY_P7 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 26)", " #define FXAA_QUALITY_PS 9", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 2.0", " #define FXAA_QUALITY_P7 4.0", " #define FXAA_QUALITY_P8 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 27)", " #define FXAA_QUALITY_PS 10", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 2.0", " #define FXAA_QUALITY_P7 2.0", " #define FXAA_QUALITY_P8 4.0", " #define FXAA_QUALITY_P9 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 28)", " #define FXAA_QUALITY_PS 11", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 2.0", " #define FXAA_QUALITY_P7 2.0", " #define FXAA_QUALITY_P8 2.0", " #define FXAA_QUALITY_P9 4.0", " #define FXAA_QUALITY_P10 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 29)", " #define FXAA_QUALITY_PS 12", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 2.0", " #define FXAA_QUALITY_P7 2.0", " #define FXAA_QUALITY_P8 2.0", " #define FXAA_QUALITY_P9 2.0", " #define FXAA_QUALITY_P10 4.0", " #define FXAA_QUALITY_P11 8.0", "#endif", "", "/*============================================================================", " FXAA QUALITY - EXTREME QUALITY", "============================================================================*/", "#if (FXAA_QUALITY_PRESET == 39)", " #define FXAA_QUALITY_PS 12", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.0", " #define FXAA_QUALITY_P2 1.0", " #define FXAA_QUALITY_P3 1.0", " #define FXAA_QUALITY_P4 1.0", " #define FXAA_QUALITY_P5 1.5", " #define FXAA_QUALITY_P6 2.0", " #define FXAA_QUALITY_P7 2.0", " #define FXAA_QUALITY_P8 2.0", " #define FXAA_QUALITY_P9 2.0", " #define FXAA_QUALITY_P10 4.0", " #define FXAA_QUALITY_P11 8.0", "#endif", "", "", "", "/*============================================================================", "", " API PORTING", "", "============================================================================*/", "#if (FXAA_GLSL_100 == 1) || (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)", " #define FxaaBool bool", " #define FxaaDiscard discard", " #define FxaaFloat float", " #define FxaaFloat2 vec2", " #define FxaaFloat3 vec3", " #define FxaaFloat4 vec4", " #define FxaaHalf float", " #define FxaaHalf2 vec2", " #define FxaaHalf3 vec3", " #define FxaaHalf4 vec4", " #define FxaaInt2 ivec2", " #define FxaaSat(x) clamp(x, 0.0, 1.0)", " #define FxaaTex sampler2D", "#else", " #define FxaaBool bool", " #define FxaaDiscard clip(-1)", " #define FxaaFloat float", " #define FxaaFloat2 float2", " #define FxaaFloat3 float3", " #define FxaaFloat4 float4", " #define FxaaHalf half", " #define FxaaHalf2 half2", " #define FxaaHalf3 half3", " #define FxaaHalf4 half4", " #define FxaaSat(x) saturate(x)", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_GLSL_100 == 1)", " #define FxaaTexTop(t, p) texture2D(t, p, 0.0)", " #define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), 0.0)", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_GLSL_120 == 1)", " // Requires,", " // #version 120", " // And at least,", " // #extension GL_EXT_gpu_shader4 : enable", " // (or set FXAA_FAST_PIXEL_OFFSET 1 to work like DX9)", " #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)", " #if (FXAA_FAST_PIXEL_OFFSET == 1)", " #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)", " #else", " #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)", " #endif", " #if (FXAA_GATHER4_ALPHA == 1)", " // use #extension GL_ARB_gpu_shader5 : enable", " #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)", " #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)", " #define FxaaTexGreen4(t, p) textureGather(t, p, 1)", " #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)", " #endif", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_GLSL_130 == 1)", ' // Requires "#version 130" or better', " #define FxaaTexTop(t, p) textureLod(t, p, 0.0)", " #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)", " #if (FXAA_GATHER4_ALPHA == 1)", " // use #extension GL_ARB_gpu_shader5 : enable", " #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)", " #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)", " #define FxaaTexGreen4(t, p) textureGather(t, p, 1)", " #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)", " #endif", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_HLSL_3 == 1)", " #define FxaaInt2 float2", " #define FxaaTex sampler2D", " #define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0))", " #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0))", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_HLSL_4 == 1)", " #define FxaaInt2 int2", " struct FxaaTex { SamplerState smpl; Texture2D tex; };", " #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)", " #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_HLSL_5 == 1)", " #define FxaaInt2 int2", " struct FxaaTex { SamplerState smpl; Texture2D tex; };", " #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)", " #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)", " #define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p)", " #define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o)", " #define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p)", " #define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o)", "#endif", "", "", "/*============================================================================", " GREEN AS LUMA OPTION SUPPORT FUNCTION", "============================================================================*/", "#if (FXAA_GREEN_AS_LUMA == 0)", " FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; }", "#else", " FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }", "#endif", "", "", "", "", "/*============================================================================", "", " FXAA3 QUALITY - PC", "", "============================================================================*/", "#if (FXAA_PC == 1)", "/*--------------------------------------------------------------------------*/", "FxaaFloat4 FxaaPixelShader(", " //", " // Use noperspective interpolation here (turn off perspective interpolation).", " // {xy} = center of pixel", " FxaaFloat2 pos,", " //", " // Used only for FXAA Console, and not used on the 360 version.", " // Use noperspective interpolation here (turn off perspective interpolation).", " // {xy_} = upper left of pixel", " // {_zw} = lower right of pixel", " FxaaFloat4 fxaaConsolePosPos,", " //", " // Input color texture.", " // {rgb_} = color in linear or perceptual color space", " // if (FXAA_GREEN_AS_LUMA == 0)", " // {__a} = luma in perceptual color space (not linear)", " FxaaTex tex,", " //", " // Only used on the optimized 360 version of FXAA Console.", ' // For everything but 360, just use the same input here as for "tex".', " // For 360, same texture, just alias with a 2nd sampler.", " // This sampler needs to have an exponent bias of -1.", " FxaaTex fxaaConsole360TexExpBiasNegOne,", " //", " // Only used on the optimized 360 version of FXAA Console.", ' // For everything but 360, just use the same input here as for "tex".', " // For 360, same texture, just alias with a 3nd sampler.", " // This sampler needs to have an exponent bias of -2.", " FxaaTex fxaaConsole360TexExpBiasNegTwo,", " //", " // Only used on FXAA Quality.", " // This must be from a constant/uniform.", " // {x_} = 1.0/screenWidthInPixels", " // {_y} = 1.0/screenHeightInPixels", " FxaaFloat2 fxaaQualityRcpFrame,", " //", " // Only used on FXAA Console.", " // This must be from a constant/uniform.", " // This effects sub-pixel AA quality and inversely sharpness.", " // Where N ranges between,", " // N = 0.50 (default)", " // N = 0.33 (sharper)", " // {x__} = -N/screenWidthInPixels", " // {_y_} = -N/screenHeightInPixels", " // {_z_} = N/screenWidthInPixels", " // {__w} = N/screenHeightInPixels", " FxaaFloat4 fxaaConsoleRcpFrameOpt,", " //", " // Only used on FXAA Console.", " // Not used on 360, but used on PS3 and PC.", " // This must be from a constant/uniform.", " // {x__} = -2.0/screenWidthInPixels", " // {_y_} = -2.0/screenHeightInPixels", " // {_z_} = 2.0/screenWidthInPixels", " // {__w} = 2.0/screenHeightInPixels", " FxaaFloat4 fxaaConsoleRcpFrameOpt2,", " //", " // Only used on FXAA Console.", " // Only used on 360 in place of fxaaConsoleRcpFrameOpt2.", " // This must be from a constant/uniform.", " // {x__} = 8.0/screenWidthInPixels", " // {_y_} = 8.0/screenHeightInPixels", " // {_z_} = -4.0/screenWidthInPixels", " // {__w} = -4.0/screenHeightInPixels", " FxaaFloat4 fxaaConsole360RcpFrameOpt2,", " //", " // Only used on FXAA Quality.", " // This used to be the FXAA_QUALITY_SUBPIX define.", " // It is here now to allow easier tuning.", " // Choose the amount of sub-pixel aliasing removal.", " // This can effect sharpness.", " // 1.00 - upper limit (softer)", " // 0.75 - default amount of filtering", " // 0.50 - lower limit (sharper, less sub-pixel aliasing removal)", " // 0.25 - almost off", " // 0.00 - completely off", " FxaaFloat fxaaQualitySubpix,", " //", " // Only used on FXAA Quality.", " // This used to be the FXAA_QUALITY_EDGE_THRESHOLD define.", " // It is here now to allow easier tuning.", " // The minimum amount of local contrast required to apply algorithm.", " // 0.333 - too little (faster)", " // 0.250 - low quality", " // 0.166 - default", " // 0.125 - high quality", " // 0.063 - overkill (slower)", " FxaaFloat fxaaQualityEdgeThreshold,", " //", " // Only used on FXAA Quality.", " // This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define.", " // It is here now to allow easier tuning.", " // Trims the algorithm from processing darks.", " // 0.0833 - upper limit (default, the start of visible unfiltered edges)", " // 0.0625 - high quality (faster)", " // 0.0312 - visible limit (slower)", " // Special notes when using FXAA_GREEN_AS_LUMA,", " // Likely want to set this to zero.", " // As colors that are mostly not-green", " // will appear very dark in the green channel!", " // Tune by looking at mostly non-green content,", " // then start at zero and increase until aliasing is a problem.", " FxaaFloat fxaaQualityEdgeThresholdMin,", " //", " // Only used on FXAA Console.", " // This used to be the FXAA_CONSOLE_EDGE_SHARPNESS define.", " // It is here now to allow easier tuning.", " // This does not effect PS3, as this needs to be compiled in.", " // Use FXAA_CONSOLE_PS3_EDGE_SHARPNESS for PS3.", " // Due to the PS3 being ALU bound,", " // there are only three safe values here: 2 and 4 and 8.", " // These options use the shaders ability to a free *|/ by 2|4|8.", " // For all other platforms can be a non-power of two.", " // 8.0 is sharper (default!!!)", " // 4.0 is softer", " // 2.0 is really soft (good only for vector graphics inputs)", " FxaaFloat fxaaConsoleEdgeSharpness,", " //", " // Only used on FXAA Console.", " // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD define.", " // It is here now to allow easier tuning.", " // This does not effect PS3, as this needs to be compiled in.", " // Use FXAA_CONSOLE_PS3_EDGE_THRESHOLD for PS3.", " // Due to the PS3 being ALU bound,", " // there are only two safe values here: 1/4 and 1/8.", " // These options use the shaders ability to a free *|/ by 2|4|8.", " // The console setting has a different mapping than the quality setting.", " // Other platforms can use other values.", " // 0.125 leaves less aliasing, but is softer (default!!!)", " // 0.25 leaves more aliasing, and is sharper", " FxaaFloat fxaaConsoleEdgeThreshold,", " //", " // Only used on FXAA Console.", " // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD_MIN define.", " // It is here now to allow easier tuning.", " // Trims the algorithm from processing darks.", " // The console setting has a different mapping than the quality setting.", " // This only applies when FXAA_EARLY_EXIT is 1.", " // This does not apply to PS3,", " // PS3 was simplified to avoid more shader instructions.", " // 0.06 - faster but more aliasing in darks", " // 0.05 - default", " // 0.04 - slower and less aliasing in darks", " // Special notes when using FXAA_GREEN_AS_LUMA,", " // Likely want to set this to zero.", " // As colors that are mostly not-green", " // will appear very dark in the green channel!", " // Tune by looking at mostly non-green content,", " // then start at zero and increase until aliasing is a problem.", " FxaaFloat fxaaConsoleEdgeThresholdMin,", " //", " // Extra constants for 360 FXAA Console only.", " // Use zeros or anything else for other platforms.", " // These must be in physical constant registers and NOT immediates.", " // Immediates will result in compiler un-optimizing.", " // {xyzw} = float4(1.0, -1.0, 0.25, -0.25)", " FxaaFloat4 fxaaConsole360ConstDir", ") {", "/*--------------------------------------------------------------------------*/", " FxaaFloat2 posM;", " posM.x = pos.x;", " posM.y = pos.y;", " #if (FXAA_GATHER4_ALPHA == 1)", " #if (FXAA_DISCARD == 0)", " FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);", " #if (FXAA_GREEN_AS_LUMA == 0)", " #define lumaM rgbyM.w", " #else", " #define lumaM rgbyM.y", " #endif", " #endif", " #if (FXAA_GREEN_AS_LUMA == 0)", " FxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM);", " FxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1));", " #else", " FxaaFloat4 luma4A = FxaaTexGreen4(tex, posM);", " FxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1));", " #endif", " #if (FXAA_DISCARD == 1)", " #define lumaM luma4A.w", " #endif", " #define lumaE luma4A.z", " #define lumaS luma4A.x", " #define lumaSE luma4A.y", " #define lumaNW luma4B.w", " #define lumaN luma4B.z", " #define lumaW luma4B.x", " #else", " FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);", " #if (FXAA_GREEN_AS_LUMA == 0)", " #define lumaM rgbyM.w", " #else", " #define lumaM rgbyM.y", " #endif", " #if (FXAA_GLSL_100 == 1)", " FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0, 1.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 0.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0,-1.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 0.0), fxaaQualityRcpFrame.xy));", " #else", " FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));", " #endif", " #endif", "/*--------------------------------------------------------------------------*/", " FxaaFloat maxSM = max(lumaS, lumaM);", " FxaaFloat minSM = min(lumaS, lumaM);", " FxaaFloat maxESM = max(lumaE, maxSM);", " FxaaFloat minESM = min(lumaE, minSM);", " FxaaFloat maxWN = max(lumaN, lumaW);", " FxaaFloat minWN = min(lumaN, lumaW);", " FxaaFloat rangeMax = max(maxWN, maxESM);", " FxaaFloat rangeMin = min(minWN, minESM);", " FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;", " FxaaFloat range = rangeMax - rangeMin;", " FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);", " FxaaBool earlyExit = range < rangeMaxClamped;", "/*--------------------------------------------------------------------------*/", " if(earlyExit)", " #if (FXAA_DISCARD == 1)", " FxaaDiscard;", " #else", " return rgbyM;", " #endif", "/*--------------------------------------------------------------------------*/", " #if (FXAA_GATHER4_ALPHA == 0)", " #if (FXAA_GLSL_100 == 1)", " FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0,-1.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 1.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0,-1.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 1.0), fxaaQualityRcpFrame.xy));", " #else", " FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));", " #endif", " #else", " FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));", " #endif", "/*--------------------------------------------------------------------------*/", " FxaaFloat lumaNS = lumaN + lumaS;", " FxaaFloat lumaWE = lumaW + lumaE;", " FxaaFloat subpixRcpRange = 1.0/range;", " FxaaFloat subpixNSWE = lumaNS + lumaWE;", " FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;", " FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;", "/*--------------------------------------------------------------------------*/", " FxaaFloat lumaNESE = lumaNE + lumaSE;", " FxaaFloat lumaNWNE = lumaNW + lumaNE;", " FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;", " FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;", "/*--------------------------------------------------------------------------*/", " FxaaFloat lumaNWSW = lumaNW + lumaSW;", " FxaaFloat lumaSWSE = lumaSW + lumaSE;", " FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);", " FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);", " FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;", " FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;", " FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;", " FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;", "/*--------------------------------------------------------------------------*/", " FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;", " FxaaFloat lengthSign = fxaaQualityRcpFrame.x;", " FxaaBool horzSpan = edgeHorz >= edgeVert;", " FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;", "/*--------------------------------------------------------------------------*/", " if(!horzSpan) lumaN = lumaW;", " if(!horzSpan) lumaS = lumaE;", " if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;", " FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;", "/*--------------------------------------------------------------------------*/", " FxaaFloat gradientN = lumaN - lumaM;", " FxaaFloat gradientS = lumaS - lumaM;", " FxaaFloat lumaNN = lumaN + lumaM;", " FxaaFloat lumaSS = lumaS + lumaM;", " FxaaBool pairN = abs(gradientN) >= abs(gradientS);", " FxaaFloat gradient = max(abs(gradientN), abs(gradientS));", " if(pairN) lengthSign = -lengthSign;", " FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);", "/*--------------------------------------------------------------------------*/", " FxaaFloat2 posB;", " posB.x = posM.x;", " posB.y = posM.y;", " FxaaFloat2 offNP;", " offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;", " offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;", " if(!horzSpan) posB.x += lengthSign * 0.5;", " if( horzSpan) posB.y += lengthSign * 0.5;", "/*--------------------------------------------------------------------------*/", " FxaaFloat2 posN;", " posN.x = posB.x - offNP.x * FXAA_QUALITY_P0;", " posN.y = posB.y - offNP.y * FXAA_QUALITY_P0;", " FxaaFloat2 posP;", " posP.x = posB.x + offNP.x * FXAA_QUALITY_P0;", " posP.y = posB.y + offNP.y * FXAA_QUALITY_P0;", " FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;", " FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));", " FxaaFloat subpixE = subpixC * subpixC;", " FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));", "/*--------------------------------------------------------------------------*/", " if(!pairN) lumaNN = lumaSS;", " FxaaFloat gradientScaled = gradient * 1.0/4.0;", " FxaaFloat lumaMM = lumaM - lumaNN * 0.5;", " FxaaFloat subpixF = subpixD * subpixE;", " FxaaBool lumaMLTZero = lumaMM < 0.0;", "/*--------------------------------------------------------------------------*/", " lumaEndN -= lumaNN * 0.5;", " lumaEndP -= lumaNN * 0.5;", " FxaaBool doneN = abs(lumaEndN) >= gradientScaled;", " FxaaBool doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;", " FxaaBool doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;", "/*--------------------------------------------------------------------------*/", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 3)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 4)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 5)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 6)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 7)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 8)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 9)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 10)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 11)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 12)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", "/*--------------------------------------------------------------------------*/", " FxaaFloat dstN = posM.x - posN.x;", " FxaaFloat dstP = posP.x - posM.x;", " if(!horzSpan) dstN = posM.y - posN.y;", " if(!horzSpan) dstP = posP.y - posM.y;", "/*--------------------------------------------------------------------------*/", " FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;", " FxaaFloat spanLength = (dstP + dstN);", " FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;", " FxaaFloat spanLengthRcp = 1.0/spanLength;", "/*--------------------------------------------------------------------------*/", " FxaaBool directionN = dstN < dstP;", " FxaaFloat dst = min(dstN, dstP);", " FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;", " FxaaFloat subpixG = subpixF * subpixF;", " FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;", " FxaaFloat subpixH = subpixG * fxaaQualitySubpix;", "/*--------------------------------------------------------------------------*/", " FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;", " FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);", " if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;", " if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;", " #if (FXAA_DISCARD == 1)", " return FxaaTexTop(tex, posM);", " #else", " return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);", " #endif", "}", "/*==========================================================================*/", "#endif", "", "void main() {", " gl_FragColor = FxaaPixelShader(", " vUv,", " vec4(0.0),", " tDiffuse,", " tDiffuse,", " tDiffuse,", " resolution,", " vec4(0.0),", " vec4(0.0),", " vec4(0.0),", " 0.75,", " 0.166,", " 0.0833,", " 0.0,", " 0.0,", " 0.0,", " vec4(0.0)", " );", "", " // TODO avoid querying texture twice for same texel", " gl_FragColor.a = texture2D(tDiffuse, vUv).a;", "}"].join("\n") }, Iy = function (A, e, t, i, o) { gy.call(this), this.scene = A, this.camera = e, this.overrideMaterial = t, this.clearColor = i, this.clearAlpha = void 0 !== o ? o : 0, this.clear = !0, this.clearDepth = !1, this.needsSwap = !1 }; Iy.prototype = Object.assign(Object.create(gy.prototype), { constructor: Iy, render: function (A, e, t) { var i = A.autoClear; A.autoClear = !1, this.scene.overrideMaterial = this.overrideMaterial; var o = null, n = null; this.clearColor && (n = A.getClearColor().getHex(), o = A.getClearAlpha(), A.setClearColor(this.clearColor, this.clearAlpha)), this.clearDepth && A.clearDepth(), A.setRenderTarget(this.renderToScreen ? null : t), this.clear && A.clear(A.autoClearColor, A.autoClearDepth, A.autoClearStencil), A.render(this.scene, this.camera), this.clearColor && A.setClearColor(n, o), this.scene.overrideMaterial = null, A.autoClear = i } }); var Ey = function (A, e, t, i, o) { gy.call(this), this.modelManager = e, this.renderScene = t, this.renderCamera = i, this.selectedObjectIds = void 0 !== o ? o : [], this.defaultEdgeColor = (new LA).setHex(4173056), this.defaultEdgeAlpha = .95, this.edgeColor = new p(this.defaultEdgeColor.r, this.defaultEdgeColor.g, this.defaultEdgeColor.b, this.defaultEdgeAlpha), this.edgeLength = 2, this.resolution = void 0 !== A ? new s(A.x, A.y) : new s(256, 256); var n = { minFilter: 1006, magFilter: 1006, format: 1023 }; this.renderTargetDepthBuffer = new g(this.resolution.x, this.resolution.y, n), this.renderTargetDepthBuffer.texture.name = "OutlinePass.depth", this.renderTargetDepthBuffer.texture.generateMipmaps = !1, this.renderTargetMaskBuffer = new g(this.resolution.x, this.resolution.y, n), this.renderTargetMaskBuffer.texture.name = "OutlinePass.mask", this.renderTargetMaskBuffer.texture.generateMipmaps = !1, this.renderTargetMaskDownSampleBuffer = new g(this.resolution.x, this.resolution.y, n), this.renderTargetMaskDownSampleBuffer.texture.name = "OutlinePass.depthDownSample", this.renderTargetMaskDownSampleBuffer.texture.generateMipmaps = !1, this.renderTargetEdgeBuffer = new g(this.resolution.x, this.resolution.y, n), this.renderTargetEdgeBuffer.texture.name = "OutlinePass.edge", this.renderTargetEdgeBuffer.texture.generateMipmaps = !1, this.renderTargetColorBuffer = new g(this.resolution.x, this.resolution.y, n), this.renderTargetColorBuffer.texture.name = "OutlinePass.color", this.renderTargetColorBuffer.texture.generateMipmaps = !1, this.depthMaterial = new ji, this.depthMaterial.side = 2, this.depthMaterial.depthPacking = 3201, this.depthMaterial.blending = 0, this.InstancedDepthMaterial = new Su, this.InstancedDepthMaterial.side = 2, this.InstancedDepthMaterial.depthPacking = 3201, this.InstancedDepthMaterial.blending = 0, this.prepareMaskMaterial = this.getPrepareMaskMaterial(), this.prepareMaskMaterial.side = 2, this.prepareMaskInstancedMaterial = this.getPrepareMaskInstancedMaterial(), this.prepareMaskInstancedMaterial.side = 2, this.edgeDetectionMaterial = this.getEdgeDetectionMaterial(), this.overlayMaterial = this.getOverlayMaterial(), void 0 === py && console.error("OutlinePass relies on THREE.CopyShader"); var r = py; return this.copyUniforms = Ge.clone(r.uniforms), this.copyUniforms.opacity.value = 1, this.materialCopy = new Pe({ uniforms: this.copyUniforms, vertexShader: r.vertexShader, fragmentShader: r.fragmentShader, blending: 0, depthTest: !1, depthWrite: !1, transparent: !0 }), this.enabled = !0, this.needsSwap = !1, this.oldClearColor = new LA, this.oldClearAlpha = 1, this.camera = new Ka(-1, 1, 1, -1, 0, 1), this.scene = new Y, this.quad = new Ue(new et(2, 2), null), this.quad.frustumCulled = !1, this.scene.add(this.quad), this.textureMatrix = new M, this }; Ey.prototype.dispose = function () { this.renderTargetDepthBuffer.dispose(), this.renderTargetMaskBuffer.dispose(), this.renderTargetMaskDownSampleBuffer.dispose(), this.renderTargetEdgeBuffer.dispose(), this.renderTargetColorBuffer.dispose() }, Ey.prototype.setSize = function (A, e) { this.renderTargetDepthBuffer.setSize(A, e), this.renderTargetMaskBuffer.setSize(A, e), this.renderTargetMaskDownSampleBuffer.setSize(A, e), this.renderTargetEdgeBuffer.setSize(A, e), this.renderTargetColorBuffer.setSize(A, e) }, Ey.prototype.adjustVisibilityOfObjectsWithoutOutline = function (A) { this.modelManager.adjustVisibilityOfObjectsWithoutOutline(A) }, Ey.prototype.adjustVisibility = function (A) { this.modelManager.adjustVisibility(A) }, Ey.prototype.changeVisibilityOfSelectedObjects = function (A) { this.modelManager.changeVisibilityOfSelectedObjects(A) }, Ey.prototype.changeVisibilityOfNonSelectedObjects = function (A) { this.modelManager.changeVisibilityOfNonSelectedObjects(A) }, Ey.prototype.adjustInstanceVisibility = function (A) { this.modelManager.adjustInstanceVisibility(A) }, Ey.prototype.changeInstanceVisibilityOfSelectedObjects = function (A) { this.modelManager.changeInstanceVisibilityOfSelectedObjects(A) }, Ey.prototype.changeInstanceVisibilityOfNonSelectedObjects = function (A) { this.modelManager.changeInstanceVisibilityOfNonSelectedObjects(A) }, Ey.prototype.restoreVisibilityOfObjects = function () { this.modelManager.restoreVisibilityOfObjects() }, Ey.prototype.updateTextureMatrix = function () { this.textureMatrix.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), this.textureMatrix.multiply(this.renderCamera.projectionMatrix), this.textureMatrix.multiply(this.renderCamera.matrixWorldInverse) }, Ey.prototype.render = function (A, e, t, i, o) { this.oldClearColor.copy(A.getClearColor()), this.oldClearAlpha = A.getClearAlpha(); var n = A.autoClear; A.autoClear = !1, o && A.state.buffers.stencil.setTest(!1), A.setClearColor(0, 0), this.adjustVisibilityOfObjectsWithoutOutline(!1), this.adjustInstanceVisibility(!1), this.changeVisibilityOfSelectedObjects(!1), this.renderScene.overrideMaterial = this.depthMaterial, A.setRenderTarget(this.renderTargetDepthBuffer), A.clear(), A.render(this.renderScene, this.renderCamera), this.adjustInstanceVisibility(!0), this.changeVisibilityOfSelectedObjects(!0), this.adjustVisibility(!1), this.changeInstanceVisibilityOfSelectedObjects(!1), this.renderScene.overrideMaterial = this.InstancedDepthMaterial, A.setRenderTarget(this.renderTargetDepthBuffer), A.render(this.renderScene, this.renderCamera), this.adjustVisibility(!0), this.changeInstanceVisibilityOfSelectedObjects(!0), this.updateTextureMatrix(), this.adjustInstanceVisibility(!1), this.changeVisibilityOfNonSelectedObjects(!1), this.adjustVisibilityOfObjectsWithoutOutline(!1), this.renderScene.overrideMaterial = this.prepareMaskMaterial, this.prepareMaskMaterial.uniforms.cameraNearFar.value = new s(this.renderCamera.near, this.renderCamera.far), this.prepareMaskMaterial.uniforms.depthTexture.value = this.renderTargetDepthBuffer.texture, this.prepareMaskMaterial.uniforms.textureMatrix.value = this.textureMatrix, A.setRenderTarget(this.renderTargetMaskBuffer), A.clear(), A.render(this.renderScene, this.renderCamera), this.adjustInstanceVisibility(!0), this.changeVisibilityOfNonSelectedObjects(!0), this.adjustVisibility(!1), this.changeInstanceVisibilityOfNonSelectedObjects(!1), this.adjustVisibilityOfObjectsWithoutOutline(!1), this.renderScene.overrideMaterial = this.prepareMaskInstancedMaterial, this.prepareMaskInstancedMaterial.uniforms.cameraNearFar.value = new s(this.renderCamera.near, this.renderCamera.far), this.prepareMaskInstancedMaterial.uniforms.depthTexture.value = this.renderTargetDepthBuffer.texture, this.prepareMaskInstancedMaterial.uniforms.textureMatrix.value = this.textureMatrix, A.setRenderTarget(this.renderTargetMaskBuffer), A.render(this.renderScene, this.renderCamera), this.renderScene.overrideMaterial = null, this.adjustVisibility(!0), this.changeInstanceVisibilityOfNonSelectedObjects(!0), this.restoreVisibilityOfObjects(), this.quad.material = this.materialCopy, this.copyUniforms.tDiffuse.value = this.renderTargetMaskBuffer.texture, A.setRenderTarget(this.renderTargetMaskDownSampleBuffer), A.clear(), A.render(this.scene, this.camera), this.quad.material = this.edgeDetectionMaterial, this.edgeDetectionMaterial.uniforms.maskTexture.value = this.renderTargetMaskDownSampleBuffer.texture, this.edgeDetectionMaterial.uniforms.texSize.value = new s(this.renderTargetMaskDownSampleBuffer.width, this.renderTargetMaskDownSampleBuffer.height), this.edgeDetectionMaterial.uniforms.edgeColor.value = this.edgeColor, this.edgeDetectionMaterial.uniforms.edgeLength.value = this.edgeLength, A.setRenderTarget(this.renderTargetEdgeBuffer), A.clear(), A.render(this.scene, this.camera), this.quad.material = this.overlayMaterial, this.overlayMaterial.uniforms.colorTexture.value = t.texture, this.overlayMaterial.uniforms.outlineTexture.value = this.renderTargetEdgeBuffer.texture, A.setRenderTarget(this.renderTargetColorBuffer), A.clear(), A.render(this.scene, this.camera), this.quad.material = this.materialCopy, this.copyUniforms.tDiffuse.value = this.renderTargetColorBuffer.texture, o && A.state.buffers.stencil.setTest(!0), A.setRenderTarget(t), A.clear(), this.adjustVisibilityOfObjectsWithoutOutline(!0), A.render(this.scene, this.camera), A.setClearColor(this.oldClearColor, this.oldClearAlpha), A.autoClear = n }, Ey.prototype.getPrepareMaskMaterial = function () { return new Pe({ uniforms: { depthTexture: { value: null }, cameraNearFar: { value: new s(.5, .5) }, textureMatrix: { value: new M } }, vertexShader: "varying vec2 vUv;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}", fragmentShader: "\n #include \n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tuniform sampler2D depthTexture;\n\t\t\t\tuniform vec2 cameraNearFar;\n\t\t\t\t\n\t\t\t\tfloat linearDepth(float depth)\n {\n float far = cameraNearFar.y;\n float near = cameraNearFar.x;\n return (2.0 * near) / (far + near - depth * (far - near));\n }\n\t\t\t\t\n\t\t\t\tvoid main() {\n\t\t\t\t\tfloat depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\t\t\t\t\t\n\t\t\t\t\tgl_FragColor = vec4(depth);\n\t\t\t\t}" }) }, Ey.prototype.getPrepareMaskInstancedMaterial = function () { return new Pe({ uniforms: { depthTexture: { value: null }, cameraNearFar: { value: new s(.5, .5) }, textureMatrix: { value: new M } }, vertexShader: "\n attribute float vState; \n attribute vec4 aColor; \n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3;\n #if defined(USE_MAP)\n attribute vec2 muvCol0;\n attribute vec2 muvCol1;\n attribute vec2 muvCol2;\n #endif\n \n varying float vfState;\n varying vec2 vUv;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\t\n\t\t\t\tvec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n \n vec2 getInstanceUV(vec2 uv) {\n \n #if defined(USE_MAP)\n return vec2(mat3(vec3(muvCol0, 0.0),\n vec3(muvCol1, 0.0), \n vec3(muvCol2, 1.0)) * vec3(uv, 1.0));\n #else\n return uv;\n #endif \n \n }\n \n\t\t\t\tvoid main() {\n\t\t\t\t vfState = vState;\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tvPosition = vec4(getInstancePosition(position), 1.0);\n\t\t\t\t\tvec4 worldPosition = modelMatrix * vPosition;\n\t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vPosition;\n\t\t\t\t}", fragmentShader: "#include \n varying float vfState;\n varying vec2 vUv;\n varying vec4 vPosition;\n varying vec4 projTexCoord;\n uniform sampler2D depthTexture;\n uniform vec2 cameraNearFar;\n \n float linearDepth(float depth)\n {\n float far = cameraNearFar.y;\n float near = cameraNearFar.x;\n return (2.0 * near) / (far + near - depth * (far - near));\n }\n \n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n float depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\n gl_FragColor = vec4(depth);\n }" }) }, Ey.prototype.getEdgeDetectionMaterial = function () { return new Pe({ uniforms: { maskTexture: { value: null }, texSize: { value: new s(.5, .5) }, edgeColor: { value: new p(1, 1, 1, 1) }, edgeLength: { value: 2 } }, vertexShader: "\n varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}", fragmentShader: "\n varying vec2 vUv;\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec4 edgeColor;\n uniform float edgeLength; \n \n void main(void)\n {\n float directions[3];\n directions[0] = -1.0;\n directions[1] = 0.0;\n directions[2] = 1.0;\n \n float scalars[3];\n scalars[0] = 3.0;\n scalars[1] = 10.0;\n scalars[2] = 3.0;\n \n float padx = 1.0 / texSize.x;\n float pady = 1.0 / texSize.y ; \n \n float edgeSize = 0.0; \n float horizEdge = 0.0;\n float vertEdge = 0.0; \n \n for (int i = 0; i < 3; ++i)\n {\n float dir = directions[i];\n float scale = scalars[i];\n \n horizEdge -= texture2D(maskTexture, vUv + vec2(-padx, dir * pady)).x * scale;\n horizEdge += texture2D(maskTexture, vUv + vec2(padx, dir * pady)).x * scale;\n \n vertEdge -= texture2D(maskTexture, vUv + vec2(dir * padx, -pady)).x * scale;\n vertEdge += texture2D(maskTexture, vUv + vec2(dir * padx, pady)).x * scale;\n } \n \n float len = sqrt(horizEdge * horizEdge + vertEdge * vertEdge); \n float alpha = len > edgeLength ? edgeColor.a : (texture2D(maskTexture, vUv).w > 0.1 ? 0.1 : 0.0);\n gl_FragColor = vec4(edgeColor.rgb, alpha);\n }" }) }, Ey.prototype.getOverlayMaterial = function () { return new Pe({ uniforms: { colorTexture: { value: null }, outlineTexture: { value: null } }, vertexShader: "varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}", fragmentShader: "varying vec2 vUv;\n\t\t\t\tuniform sampler2D colorTexture;\n\t\t\t\tuniform sampler2D outlineTexture;\n\t\t\t\t\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec4 outlineColor = texture2D(outlineTexture, vUv);\t\t\t\t\t\n\t\t\t\t\tgl_FragColor = mix(texture2D(colorTexture, vUv), outlineColor, outlineColor.a);\t\t\t\t\t\n\t\t\t\t}", blending: 2, depthTest: !1, depthWrite: !1, transparent: !0 }) }, Ey.prototype.setOutlineEdgeColor = function (A) { this.edgeColor.fromArray([A.r, A.g, A.b, A.opacity ? A.opacity : 1]) }, Ey.prototype.getOutlineEdgeColor = function (A) { return (new Xh).fromArray(this.edgeColor.toArray()) }; var By = function (A) { this.renderer = A, this.composer = null, this.renderPass = null, this.outlinePass = null, this.effectFXAA = null, this.selectedObjectIds = [] }; By.prototype.destroy = function () { this.renderer = null, this.composer = null, this.renderPass = null, this.outlinePass = null, this.effectFXAA = null, this.selectedObjectIds = null }, By.prototype.init = function (A, e, t, i, o) { this.composer = new Cy(this.renderer), this.renderPass = new Iy(e, t), this.composer.addPass(this.renderPass), this.outlinePass = new Ey(new s(i, o), A, e, t), this.composer.addPass(this.outlinePass), this.effectFXAA = new uy(vy), this.effectFXAA.uniforms.resolution.value.set(1 / i, 1 / o), this.effectFXAA.renderToScreen = !0, this.composer.addPass(this.effectFXAA) }, By.prototype.reinit = function (A, e, t, i, o, n) { this.renderer = A, this.composer = new Cy(this.renderer), this.renderPass = this.renderPass || new Iy(t, i), this.composer.addPass(this.renderPass), this.outlinePass = this.outlinePass || new Ey(new s(o, n), e, t, i), this.composer.addPass(this.outlinePass), this.effectFXAA = this.effectFXAA || new uy(vy), this.effectFXAA.uniforms.resolution.value.set(1 / o, 1 / n), this.effectFXAA.renderToScreen = !0, this.composer.addPass(this.effectFXAA) }, By.prototype.render = function () { this.composer.render() }, By.prototype.setSize = function (A, e) { this.composer.setSize(A, e), this.effectFXAA.uniforms.resolution.value.set(1 / A, 1 / e) }, By.prototype.addSelectedId = function (A) { this.selectedObjectIds.push(A) }, By.prototype.clearSelectedIds = function () { this.selectedObjectIds.length = 0 }, By.prototype.setSelectedIds = function (A) { if (this.outlinePass) { this.clearSelectedIds(); for (var e = 0, t = A.length; t > e; e += 1) this.addSelectedId(A[e]); this.outlinePass.selectedObjectIds = this.selectedObjectIds } }, By.prototype.setOutlineEdgeColor = function (A) { this.outlinePass.setOutlineEdgeColor(A) }, By.prototype.getOutlineEdgeColor = function () { return this.outlinePass.getOutlineEdgeColor() }; var xy = function (A) { jA.call(this, A), this.type = "InstancedMeshBasicMaterial", this.uniforms = it.basic.uniforms, this.vertexShader = function (A) { return A.replace("#include ", "\n vec4 mvPosition = modelViewMatrix * vec4(getInstancePosition(transformed), 1.0);\n gl_Position = projectionMatrix * mvPosition;\n ") }(it.basic.vertexShader.replace("void main() {", "\n attribute float vState; \n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3; \n varying float vfState;\n \n vec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n \n void main() {\n vfState = vState;\n ")), this.fragmentShader = it.basic.fragmentShader.replace("void main() {", "\n varying float vfState; \n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n \n ") }; (xy.prototype = Object.create(jA.prototype)).constructor = xy; var Sy = function (A) { this.viewer = A; var e = vc.SelectionColor.color; this.wireframeMaterial = new jA({ color: e, opacity: 1, transparent: !0, blending: 5, blendSrc: 201, blendDst: 200, blendEquation: 100 }), this.selectedMaterial = new jA({ color: e, opacity: .3, transparent: !0 }), this.skinningWireframeMaterial = new jA({ color: e, opacity: 1, transparent: !0, blending: 5, blendSrc: 201, blendDst: 200, blendEquation: 100, skinning: !0 }), this.skinningSelectedMaterial = new jA({ color: e, opacity: .3, transparent: !0, skinning: !0 }), this.selectedLineMaterial = new YC({ color: e, opacity: 1, transparent: !0, linewidth: 2, dashed: !1 }), this.instancedWireFrameMaterial = new xy({ color: e, opacity: 1, transparent: !0, blending: 5, blendSrc: 201, blendDst: 200, blendEquation: 100 }), this.instancedSelectedMaterial = new xy({ color: e, opacity: .3, transparent: !0 }), this.selectionScene = new Y, this.selectionScene.autoUpdate = !1, this.selectionObjectGroup = new ep, this.selectionObjectGroup.name = "PickingObjectGroup", this.selectionObjectGroup.matrixAutoUpdate = !1, this.selectionScene.add(this.selectionObjectGroup), this.lastSelectedUserIdMap = null, this.lastSelectedUserIds = null }; Sy.prototype.destroy = function () { this.wireframeMaterial.dispose(), this.wireframeMaterial = null, this.selectedMaterial.dispose(), this.selectedMaterial = null, this.skinningWireframeMaterial.dispose(), this.skinningWireframeMaterial = null, this.skinningSelectedMaterial.dispose(), this.skinningSelectedMaterial = null, this.selectedLineMaterial.dispose(), this.selectedLineMaterial = null, this.instancedWireFrameMaterial.dispose(), this.instancedWireFrameMaterial = null, this.instancedSelectedMaterial.dispose(), this.instancedSelectedMaterial = null, this.selectionObjectGroup.clear(), this.selectionObjectGroup = null, this.selectionScene = null, this.lastSelectedUserIdMap = null, this.lastSelectedUserIds = null, this.viewer = null }, Sy.prototype.apply = function (A) { var e = this.viewer, t = e.getSelection(); if (!t || !t.length) return this._clearSelectedUserIdsCache(), void this._clearMeshesFromScene(); (A || this._isSelectionsChanged()) && (this._cacheSelectedUserIds(t), this._updateScene(t)), this._render(e.rendererManager.getRenderer(), e.camera) }, Sy.prototype._isSelectionsChanged = function () { var A = this.lastSelectedUserIds; if (!A) return !0; var e = this.viewer.getSelection(), t = e.length; if (t !== A.length) return !0; for (var i = !1, o = this.lastSelectedUserIdMap, n = t - 1; n >= 0; n -= 1) if (!o[e[n]]) { i = !0; break } return i }, Sy.prototype._cacheSelectedUserIds = function (A) { this.lastSelectedUserIds = A.slice(0), this.lastSelectedUserIdMap = uh.arrayToMap(A) }, Sy.prototype._clearSelectedUserIdsCache = function () { this.lastSelectedUserIds = null, this.lastSelectedUserIdMap = null }, Sy.prototype._render = function (A, e) { var t = A.autoClearColor, i = A.autoClearDepth, o = A.autoClearStencil; A.autoClearColor = !1, A.autoClearDepth = !0, A.autoClearStencil = !1, A.render(this.selectionScene, e), A.autoClearColor = t, A.autoClearDepth = i, A.autoClearStencil = o }, Sy.prototype._updateScene = function (A) { this._clearMeshesFromScene(), this._addMeshesToScene(this._getSelectedMeshes(A)), this._updateMatrixWorldForScene(), this._updateSelectedLineMaterial() }, Sy.prototype._clearMeshesFromScene = function () { this.selectionObjectGroup.clear() }, Sy.prototype._addMeshesToScene = function (A) { for (var e = 0, t = A.length; t > e; e += 1) this.selectionObjectGroup.add(A[e]) }, Sy.prototype._updateMatrixWorldForScene = function () { this.selectionObjectGroup.matrix.copy(this.viewer.getScene().getMatrixGlobal()), this.selectionObjectGroup.updateMatrixWorld(!0) }, Sy.prototype._getSelectedMeshes = function (A) { var e = { meshes: [] }, t = this, i = uh.arrayToMap(A); return this.viewer.getModelManager().traverseLoadedModels((function (o) { o.getPickingMeshes(t, e, A, i) })), e.meshes }, Sy.prototype._updateSelectedLineMaterial = function () { vc.PickingLineWidthEnabled && this.selectedLineMaterial.resolution.set(this.viewer.domElement.offsetWidth, this.viewer.domElement.offsetHeight) }, Sy.prototype.setSelectionColor = function (A, e) { var t = this.selectedMaterial.opacity; e = void 0 === e ? t : e, "0x" + this.selectedMaterial.color.getHexString() === A && t === e || (this.selectedMaterial.color.setHex(A), this.skinningSelectedMaterial.color.setHex(A), this.instancedSelectedMaterial.color.setHex(A), void 0 === e && null === e || (this.selectedMaterial.opacity = e, this.skinningSelectedMaterial.opacity = e, this.instancedSelectedMaterial.opacity = e, 1 > e ? (this.selectedMaterial.transparent = !0, this.skinningSelectedMaterial.transparent = !0, this.instancedSelectedMaterial.transparent = !0) : (this.selectedMaterial.transparent = !1, this.skinningSelectedMaterial.transparent = !1, this.instancedSelectedMaterial.transparent = !1)), this.selectedMaterial.needsUpdate = !0, this.skinningSelectedMaterial.needsUpdate = !0, this.instancedSelectedMaterial.needsUpdate = !0) }, Sy.prototype.getSelectionColor = function (A, e) { var t = this.selectedMaterial.opacity; return new Xh(this.selectedMaterial.color.getHex(), t) }, Sy.prototype.setLineSelectionColor = function (A, e) { var t = this.wireframeMaterial.opacity; e = void 0 === e ? t : e, "0x" + this.wireframeMaterial.color.getHexString() === A && t === e || (this.wireframeMaterial.color.setHex(A), this.skinningWireframeMaterial.color.setHex(A), this.selectedLineMaterial.color.setHex(A), this.instancedWireFrameMaterial.color.setHex(A), void 0 === e && null === e || (this.wireframeMaterial.opacity = e, this.skinningWireframeMaterial.opacity = e, this.selectedLineMaterial.opacity = e, this.instancedWireFrameMaterial.opacity = e, 1 > e ? (this.wireframeMaterial.transparent = !0, this.skinningWireframeMaterial.transparent = !0, this.selectedLineMaterial.transparent = !0, this.instancedWireFrameMaterial.transparent = !0) : (this.wireframeMaterial.transparent = !1, this.skinningWireframeMaterial.transparent = !1, this.selectedLineMaterial.transparent = !1, this.instancedWireFrameMaterial.transparent = !1)), this.wireframeMaterial.needsUpdate = !0, this.skinningWireframeMaterial.needsUpdate = !0, this.selectedLineMaterial.needsUpdate = !0, this.instancedWireFrameMaterial.needsUpdate = !0) }, Sy.prototype.getLineSelectionColor = function () { var A = this.wireframeMaterial.opacity; return new Xh(this.wireframeMaterial.color.getHex(), A) }; var wy = new M, My = function () { function A(e) { cc(this, A), e = e || {}, this.vertices = { near: [new y, new y, new y, new y], far: [new y, new y, new y, new y] }, void 0 !== e.projectionMatrix && this.setFromProjectionMatrix(e.projectionMatrix, e.maxFar || 1e4) } return dc(A, [{ key: "setFromProjectionMatrix", value: function (A, e) { var t = 0 === A.elements[11]; return wy.getInverse(A), this.vertices.near[0].set(1, 1, -1), this.vertices.near[1].set(1, -1, -1), this.vertices.near[2].set(-1, -1, -1), this.vertices.near[3].set(-1, 1, -1), this.vertices.near.forEach((function (A) { A.applyMatrix4(wy) })), this.vertices.far[0].set(1, 1, 1), this.vertices.far[1].set(1, -1, 1), this.vertices.far[2].set(-1, -1, 1), this.vertices.far[3].set(-1, 1, 1), this.vertices.far.forEach((function (A) { A.applyMatrix4(wy); var i = Math.abs(A.z); t ? A.z *= Math.min(e / i, 1) : A.multiplyScalar(Math.min(e / i, 1)) })), this.vertices } }, { key: "split", value: function (e, t) { for (; e.length > t.length;) t.push(new A); t.length = e.length; for (var i = 0; e.length > i; i += 1) { var o = t[i]; if (0 === i) for (var n = 0; 4 > n; n += 1) o.vertices.near[n].copy(this.vertices.near[n]); else for (var r = 0; 4 > r; r += 1) o.vertices.near[r].lerpVectors(this.vertices.near[r], this.vertices.far[r], e[i - 1]); if (i === e - 1) for (var a = 0; 4 > a; a += 1) o.vertices.far[a].copy(this.vertices.far[a]); else for (var s = 0; 4 > s; s += 1) o.vertices.far[s].lerpVectors(this.vertices.near[s], this.vertices.far[s], e[i]) } } }, { key: "toSpace", value: function (A, e) { for (var t = 0; 4 > t; t += 1) e.vertices.near[t].copy(this.vertices.near[t]).applyMatrix4(A), e.vertices.far[t].copy(this.vertices.far[t]).applyMatrix4(A) } }]), A }(), by = { lights_fragment_begin: "\nGeometricContext geometry;\n\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n\n#ifdef CLEARCOAT\n\n\tgeometry.clearcoatNormal = clearcoatNormal;\n\n#endif\n\nIncidentLight directLight;\n\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\n\t\tpointLight = pointLights[ i ];\n\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\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\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\n#endif\n\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\n\t\tspotLight = spotLights[ i ];\n\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\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\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\n#endif\n\n#if ( NUM_DIR_LIGHTS > 0) && defined( RE_Direct ) && defined( USE_CSM ) && defined( CSM_CASCADES )\n\n\tDirectionalLight directionalLight;\n\tfloat linearDepth = (vViewPosition.z) / (shadowFar - cameraNear);\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#if defined( USE_SHADOWMAP ) && defined( CSM_FADE )\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n\t\t// NOTE: Depth gets larger away from the camera.\n\t\t// cascade.x is closer, cascade.y is further\n\t\tvec2 cascade = CSM_cascades[ i ];\n\t\tfloat cascadeCenter = ( cascade.x + cascade.y ) / 2.0;\n\t\tfloat closestEdge = linearDepth < cascadeCenter ? cascade.x : cascade.y;\n\t\tfloat margin = 0.25 * pow( closestEdge, 2.0 );\n\t\tfloat csmx = cascade.x - margin / 2.0;\n\t\tfloat csmy = cascade.y + margin / 2.0;\n\t\tif( i < NUM_DIR_LIGHT_SHADOWS && linearDepth >= csmx && ( linearDepth < csmy || i == CSM_CASCADES - 1 ) ) {\n\n\t\t\tfloat dist = min( linearDepth - csmx, csmy - linearDepth );\n\t\t\tfloat ratio = clamp( dist / margin, 0.0, 1.0 );\n\t\t\tif( i < NUM_DIR_LIGHT_SHADOWS ) {\n\n\t\t\t\tvec3 prevColor = directLight.color;\n\t\t\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\t\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t\t\t\tbool shouldFadeLastCascade = i == CSM_CASCADES - 1 && linearDepth > cascadeCenter;\n\t\t\t\tdirectLight.color = mix( prevColor, directLight.color, shouldFadeLastCascade ? ratio : 1.0 );\n\n\t\t\t}\n\n\t\t\tReflectedLight prevLight = reflectedLight;\n\t\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t\t\tbool shouldBlend = i != CSM_CASCADES - 1 || i == CSM_CASCADES - 1 && linearDepth < cascadeCenter;\n\t\t\tfloat blendRatio = shouldBlend ? ratio : 1.0;\n\n\t\t\treflectedLight.directDiffuse = mix( prevLight.directDiffuse, reflectedLight.directDiffuse, blendRatio );\n\t\t\treflectedLight.directSpecular = mix( prevLight.directSpecular, reflectedLight.directSpecular, blendRatio );\n\t\t\treflectedLight.indirectDiffuse = mix( prevLight.indirectDiffuse, reflectedLight.indirectDiffuse, blendRatio );\n\t\t\treflectedLight.indirectSpecular = mix( prevLight.indirectSpecular, reflectedLight.indirectSpecular, blendRatio );\n\n\t\t}\n\n\t}\n\t#else\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tif(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y) directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t\t#endif\n\n\t\tif(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && (linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1)) RE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\n\t#endif\n\n#endif\n\n\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && !defined( USE_CSM ) && !defined( CSM_CASCADES )\n\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\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\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\n#endif\n\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\n\tRectAreaLight rectAreaLight;\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\n\t}\n\n#endif\n\n#if defined( RE_IndirectDiffuse )\n\n\tvec3 iblIrradiance = vec3( 0.0 );\n\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\n\t\t#pragma unroll_loop\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\n\t\t}\n\n\t#endif\n\n#endif\n\n#if defined( RE_IndirectSpecular )\n\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n\n#endif\n", lights_pars_begin: "\n#if defined( USE_CSM ) && defined( CSM_CASCADES )\nuniform vec2 CSM_cascades[CSM_CASCADES];\nuniform float cameraNear;\nuniform float shadowFar;\n#endif\n\t" + tt.lights_pars_begin }, Uy = new M, Fy = new My, Ky = new My, Qy = new y, Ry = new aA, Ty = [], ky = [], Dy = function () { function A(e) { cc(this, A), this.camera = (e = e || {}).camera, this.parent = e.parent, this.cascades = e.cascades || 3, this.maxFar = e.maxFar || 1e5, this.mode = e.mode || "practical", this.shadowMapSize = e.shadowMapSize || 2048, this.shadowBias = e.shadowBias || 1e-6, this.lightDirection = e.lightDirection || new y(1, -1, 1).normalize(), this.lightIntensity = e.lightIntensity || 1, this.lightNear = e.lightNear || 1, this.lightFar = e.lightFar || 2e3, this.lightMargin = e.lightMargin || 200, this.customSplitsCallback = e.customSplitsCallback, this.fade = !1, this.mainFrustum = new My, this.frustums = [], this.breaks = [], this.lights = [], this.shaders = new Map, this.createLights(), this.getBreaks(), this.initCascades(), this.injectInclude() } return dc(A, [{ key: "createLights", value: function () { for (var A = 0; this.cascades > A; A++) { var e = new Ra(16777215, this.lightIntensity); e.castShadow = !0, e.intensity = .72, e.distance = 300, e.color.setHex(14800580), e.position.set(-100, 100, 160), e.shadow.mapSize.width = this.shadowMapSize, e.shadow.mapSize.height = this.shadowMapSize, e.shadow.camera.near = this.lightNear, e.shadow.camera.far = this.lightFar, e.shadow.bias = this.shadowBias, e.updateMatrixWorld(), this.parent.add(e), this.parent.add(e.target), this.lights.push(e) } } }, { key: "initCascades", value: function () { var A = this.camera; A.updateProjectionMatrix(), this.mainFrustum.setFromProjectionMatrix(A.projectionMatrix, this.maxFar), this.mainFrustum.split(this.breaks, this.frustums) } }, { key: "getBreaks", value: function () { var A = this.camera, e = Math.min(A.far, this.maxFar); switch (this.breaks.length = 0, this.mode) { case "uniform": t(this.cascades, A.near, e, this.breaks); break; case "logarithmic": i(this.cascades, A.near, e, this.breaks); break; case "practical": ! function (A, e, o, n, r) { Ty.length = 0, ky.length = 0, i(A, e, o, ky), t(A, e, o, Ty); for (var s = 1; A > s; s++) r.push(a.lerp(Ty[s - 1], ky[s - 1], n)); r.push(1) }(this.cascades, A.near, e, .5, this.breaks); break; case "custom": void 0 === this.customSplitsCallback && console.error("CSM: Custom split scheme callback not defined."), this.customSplitsCallback(this.cascades, A.near, e, this.breaks) } function t(A, e, t, i) { for (var o = 1; A > o; o++) i.push((e + (t - e) * o / A) / t); i.push(1) } function i(A, e, t, i) { for (var o = 1; A > o; o++) i.push(e * (t / e) * (o / A) / t); i.push(1) } } }, { key: "update", value: function (A) { for (var e = this.frustums, t = 0; e.length > t; t++) { var i = this.lights[t]; i.shadow.camera.updateMatrixWorld(!0), Uy.multiplyMatrices(i.shadow.camera.matrixWorldInverse, A), e[t].toSpace(Uy, Fy); var o = Fy.vertices.near, n = Fy.vertices.far, r = n[0], a = void 0; a = r.distanceTo(n[2]) > r.distanceTo(o[2]) ? n[2] : o[2]; var s = r.distanceTo(a); Ry.makeEmpty(); for (var l = 0; 4 > l; l++) Ry.expandByPoint(o[l]), Ry.expandByPoint(n[l]); if (this.fade) { var c = this.camera, h = Math.max(c.far, this.maxFar); s += .25 * Math.pow(e[t].vertices.far[0].z / (h - c.near), 2) * (h - c.near) } var d = s / this.shadowMapSize; Ry.getCenter(Qy), Qy.z = Ry.max.z + this.lightMargin, Qy.x = Math.floor(Qy.x / d) * d, Qy.y = Math.floor(Qy.y / d) * d, Qy.applyMatrix4(i.shadow.camera.matrixWorld), i.shadow.camera.left = -s / 2, i.shadow.camera.right = s / 2, i.shadow.camera.top = s / 2, i.shadow.camera.bottom = -s / 2, i.position.copy(Qy), i.target.position.copy(Qy), i.target.position.x += this.lightDirection.x, i.target.position.y += this.lightDirection.y, i.target.position.z += this.lightDirection.z, i.shadow.camera.updateProjectionMatrix(), i.shadow.camera.updateMatrixWorld() } } }, { key: "injectInclude", value: function () { tt.lights_fragment_begin = by.lights_fragment_begin, tt.lights_pars_begin = by.lights_pars_begin } }, { key: "setupMaterial", value: function (A) { A.defines = A.defines || {}, A.defines.USE_CSM = 1, A.defines.CSM_CASCADES = this.cascades, this.fade && (A.defines.CSM_FADE = ""); var e = [], t = this, i = this.shaders; A.onBeforeCompile = function (o) { var n = Math.min(t.camera.far, t.maxFar); t.getExtendedBreaks(e), console.log("www", e, e.length), o.uniforms.CSM_cascades = { value: e }, o.uniforms.cameraNear = { value: t.camera.near }, o.uniforms.shadowFar = { value: n }, i.set(A, o) }, i.set(A, null) } }, { key: "updateUniforms", value: function () { var A = Math.min(this.camera.far, this.maxFar); this.shaders.forEach((function (e, t) { if (null !== e) { var i = e.uniforms; this.getExtendedBreaks(i.CSM_cascades.value), i.cameraNear.value = this.camera.near, i.shadowFar.value = A }!this.fade && "CSM_FADE" in t.defines ? (delete t.defines.CSM_FADE, t.needsUpdate = !0) : this.fade && !("CSM_FADE" in t.defines) && (t.defines.CSM_FADE = "", t.needsUpdate = !0) }), this) } }, { key: "getExtendedBreaks", value: function (A) { for (; this.breaks.length > A.length;) A.push(new s); A.length = this.breaks.length; for (var e = 0; this.cascades > e; e++) { var t = this.breaks[e]; A[e].x = this.breaks[e - 1] || 0, A[e].y = t } } }, { key: "updateFrustums", value: function () { this.getBreaks(), this.initCascades(), this.updateUniforms() } }, { key: "helper", value: function (A) { for (var e, t, i = new ko({ color: 16777215 }), o = new H, n = 0; this.frustums.length > n; n++) { this.frustums[n].toSpace(A, Ky), e = new he, t = []; for (var r = 0; 5 > r; r++) { var a = Ky.vertices.near[4 === r ? 0 : r]; t.push(a.x, a.y, a.z) } e.setAttribute("position", new YA(new Float32Array(t), 3)), o.add(new Go(e, i)), e = new he, t = []; for (var s = 0; 5 > s; s++) { var l = Ky.vertices.far[4 === s ? 0 : s]; t.push(l.x, l.y, l.z) } e.setAttribute("position", new YA(new Float32Array(t), 3)), o.add(new Go(e, i)); for (var c = 0; 4 > c; c++) { e = new he; var h = Ky.vertices.near[c], d = Ky.vertices.far[c]; (t = []).push(h.x, h.y, h.z), t.push(d.x, d.y, d.z), e.setAttribute("position", new YA(new Float32Array(t), 3)), o.add(new Go(e, i)) } } return o } }, { key: "remove", value: function () { for (var A = 0; this.lights.length > A; A++) this.parent.remove(this.lights[A]) } }, { key: "dispose", value: function () { var A = this.shaders; A.forEach((function (A, e) { delete e.onBeforeCompile, delete e.defines.USE_CSM, delete e.defines.CSM_CASCADES, delete e.defines.CSM_FADE, delete A.uniforms.CSM_cascades, delete A.uniforms.cameraNear, delete A.uniforms.shadowFar, e.needsUpdate = !0 })), A.clear() } }]), A }(), Ly = function (A) { this.viewer = A, this.renderer = null, this.countRenderRequest = 0, this.maxCountRenderRequest = 1e4, this.rendering = !1, this.incrementRenderHandle = 0, this.composer = null, this.blinkHandle = 0, this.transparentSort = function (A, e) { return A.groupOrder !== e.groupOrder ? A.groupOrder - e.groupOrder : A.renderOrder !== e.renderOrder ? A.renderOrder - e.renderOrder : A.z !== e.z ? e.z - A.z : A.id - e.id } }; Ly.prototype.destroy = function () { this.incrementRenderHandle > 0 && cancelAnimationFrame(this.incrementRenderHandle), this.blinkHandle > 0 && cancelAnimationFrame(this.blinkHandle), this.composer && (this.composer.destroy(), this.composer = null), this.renderer && (this.renderer.destroy && this.orderedRenderer && (this.renderer.destroy(), this.renderer.setRenderer && this.renderer.setRenderer(null), this.orderedRenderer = null), this.renderer.dispose(), this.renderer.domElement.parentNode && this.renderer.domElement.parentNode.removeChild(this.renderer.domElement)), this.renderer = null, this.pickingEffecter && (this.pickingEffecter.destroy(), this.pickingEffecter = null), this.viewer = null }, Ly.prototype.setupRenderer = function (A) { if (!this.renderer) { var e = this.viewer; this.renderer = new $i(A); var t = e.domElement.offsetWidth, i = e.domElement.offsetHeight; this.renderer.toneMapping = 1, this.renderer.setTransparentSort(this.transparentSort), this.renderer.setClearColor(0, 0), this.renderer.setPixelRatio(window.devicePixelRatio || 1), this.renderer.setSize(t, i), this.renderer.sortObjects = !0, this.renderer.domElement.setAttribute("tabindex", "0"), this.renderer.domElement.setAttribute("class", "main-canvas"), e.domElement.appendChild(this.renderer.domElement), this.composer = new By(this.renderer), this.composer.init(e.modelManager, e.getScene(), e.camera, t, i), this.composer.setOutlineEdgeColor(new Xh(vc.SelectionColor.color, vc.SelectionColor.opacity)) } }, Ly.prototype.resetupRenderer = function (A) { var e = this.viewer; A.context = this.renderer.getContext(); var t = new $i(A); t.setClearColor(this.renderer.getClearColor(), this.renderer.getClearAlpha()), t.setPixelRatio(this.renderer.getPixelRatio()); var i = this.renderer.getSize(new s); t.setSize(i.x, i.y), t.gammaFactor = this.renderer.gammaFactor, t.sortObjects = this.renderer.sortObjects, t.domElement = this.renderer.domElement, t.toneMapping = this.renderer.toneMapping, t.shadowMap.enabled = this.renderer.shadowMap.enabled, t.clippingPlanes = this.renderer.clippingPlanes, t.shadowMap.enabled = this.renderer.shadowMap.enabled, t.shadowMap.type = this.renderer.shadowMap.type, t.shadowMap.autoUpdate = this.renderer.shadowMap.autoUpdate, t.shadowMap.needsUpdate = this.renderer.shadowMap.needsUpdate, t.setTransparentSort(this.transparentSort), this.renderer = t, this.composer.reinit(this.renderer, e.modelManager, e.getScene(), e.camera, i.x, i.y) }, Ly.prototype.setupShadowMap = function (A) { var e = this.viewer, t = new Dy({ maxFar: A.far, cascades: 4, mode: A.mode, parent: e.getScene().getExternalScene(), shadowMapSize: 1024, lightDirection: new y(A.lightX, A.lightY, A.lightZ).normalize(), camera: e.camera }); this.csm = t; var i = new $m; i.add(A, "orthographic").onChange((function (A) {})), i.add(A, "fade").onChange((function (A) { t.fade = A, t.updateFrustums() })), i.add(A, "far", 1, 5e7).step(1).name("shadow far").onChange((function (A) { t.maxFar = A, t.updateFrustums() })), i.add(A, "mode", ["uniform", "logarithmic", "practical"]).name("frustum split mode").onChange((function (A) { t.mode = A, t.updateFrustums() })), i.add(A, "lightX", -1, 1).name("light direction x").onChange((function (A) { t.lightDirection.x = A })), i.add(A, "lightY", -1, 1).name("light direction y").onChange((function (A) { t.lightDirection.y = A })), i.add(A, "lightZ", -1, 1).name("light direction z").onChange((function (A) { t.lightDirection.z = A })), i.add(A, "margin", 0, 2e6).name("light margin").onChange((function (A) { t.lightMargin = A })), i.add(A, "lightNear", 1, 1e7).name("light near").onChange((function (A) { for (var e = 0; t.lights.length > e; e += 1) t.lights[e].shadow.camera.near = A, t.lights[e].shadow.camera.updateProjectionMatrix() })), i.add(A, "lightFar", 1, 1e8).name("light far").onChange((function (A) { for (var e = 0; t.lights.length > e; e += 1) t.lights[e].shadow.camera.far = A, t.lights[e].shadow.camera.updateProjectionMatrix() })) }, Ly.prototype._applyPickingEffectForIncrement = function () { if (this.getPickingEffecter()) { var A = this.viewer.modelManager.isFilterApplied(); this.orderedRenderer.restart(), this.orderedRenderer.setNonBreakingRender(!0), this.pickingEffecter.apply(A), this.orderedRenderer.setNonBreakingRender(!1) } }, Ly.prototype._applyPickingEffect = function () { if (this.getPickingEffecter()) { var A = this.viewer.modelManager.isFilterApplied(); this.pickingEffecter.apply(A) } }, Ly.prototype._forceRenderOneFrame = function () { var A = this.viewer, e = A.camera, t = A.modelManager.getScene(); this.orderedRenderer ? (this.orderedRenderer.restart(), this.orderedRenderer.setNonBreakingRender(!0), this.renderer.render(t, e, null, !0), this.orderedRenderer.setNonBreakingRender(!1)) : (this.renderer.setRenderTarget(null), this.renderer.clear(), this.renderer.render(t, e)) }, Ly.prototype.incrementRender = function (A) { if (this.countRenderRequest += 1, this.countRenderRequest > this.maxCountRenderRequest && (this.countRenderRequest = 0), !this.rendering && !this.pickingEffectRendering) { this.rendering = !0; var e = this, t = this.viewer, i = t.camera, o = t.modelManager, n = t.editorManager, r = t.getScene(), a = this.renderer; o.calculateCameraModelRelation(i.position), t.cameraControl.updateCamera(), t.calculateNearFar(), r.updateLights(i); var s = n.isUpdateRenderList; a.resetIncrementRender(), a.setObjectListUpdateState(s), s && o.prepareScene(i), this.incrementRenderHandle = requestAnimationFrame(function A(s, l) { var c = s; return function () { a.autoClear = l, n.cameraChange ? (a.resetIncrementRender(), a.autoClear = !0, n.cameraChange = !1) : a.autoClear = l, a.render(r, i) || c !== e.countRenderRequest ? (e.rendering = !1, c !== e.countRenderRequest ? t.render() : (e.pickingEffectRendering = !0, e._applyPickingEffectForIncrement(), o.setFilterApplied(!1), t.onRenderFinishedCallback(), o.disposeBufferAfterVbo(), e.pickingEffectRendering = !1)) : e.incrementRenderHandle = requestAnimationFrame(A(c, !1)) } }(e.countRenderRequest, !0)), t.onRenderCallback(), t.cameraControl.setCameraChanging(!1) } }, Ly.prototype.fullRender = function () { var A = this, e = this.viewer, t = e.camera, i = e.modelManager, o = e.getScene(), n = this.renderer; this.blinkHandle > 0 && cancelAnimationFrame(this.blinkHandle), function r() { e.cameraControl.updateCamera(), e.calculateNearFar(), o.updateLights(t), i.getBlinkEnabled() && i.updateBlinkMaterial(); var a = o.fillClipPlane && o.fillClipPlane.visible, s = o.clipPlanes && o.clipPlanes.visible && vc.EnableBoxClippingCaps; if (vc.ClippingCaps && (a || s) && vc.EnableClippingCaps) { if (a || s) { var l = o.getFillClipPlane(), c = o.getClipPlanes(), h = e.modelManager.getModelKeys(); i.prepareCapScene(), n.clear(), n.autoClear = !1, a ? (l.capPlane.planeMesh.visible = !0, l.capPlane.lineMesh.visible = !0, c.boxMesh.visible = !1) : (l.capPlane.planeMesh.visible = !1, l.capPlane.lineMesh.visible = !1, c.boxMesh.visible = !0), l.planeHighLightMatrial.visible = !1, c.planeHighLightMatrial.visible = !1, c.planeMaterial.visible = !1, o.overrideMaterial = o.backMaterial; for (var d = {}, p = 0, g = h.length; g > p; p += 1) { var u = h[p], f = e.modelManager.getModel(u); if (d[u] = {}, f) { var m = f._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); d[u][gp.GEOMETRY] = m.visible, m = f._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 }), d[u][gp.WIREFRAME] = m.visible, m = f._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 }), d[u][gp.INSTANCEGEOMETRY] = m.visible, m.visible = !1, m = f._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 }), d[u][gp.INSTANCEWIREFRAMEGEOMETRY] = m.visible, m.visible = !1 } } n.render(o, t), o.overrideMaterial = o.backInstanceMaterial; for (var C = 0, y = h.length; y > C; C += 1) { var v = h[C], I = e.modelManager.getModel(v); if (I) { var E = I._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); E.visible = !1, (E = I._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).visible = !1, (E = I._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 })).visible = d[v][gp.INSTANCEGEOMETRY], (E = I._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 })).visible = d[v][gp.INSTANCEWIREFRAMEGEOMETRY] } } n.render(o, t), o.overrideMaterial = o.frontMaterial; for (var B = 0, x = h.length; x > B; B += 1) { var S = h[B], w = e.modelManager.getModel(S); if (w) { var M = w._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); M.visible = d[S][gp.GEOMETRY], (M = w._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).visible = d[S][gp.WIREFRAME], M = w._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 }), d[S][gp.INSTANCEGEOMETRY] = M.visible, M.visible = !1, M = w._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 }), d[S][gp.INSTANCEWIREFRAMEGEOMETRY] = M.visible, M.visible = !1 } } n.render(o, t), o.overrideMaterial = o.frontInstanceMaterial; for (var b = 0, U = h.length; U > b; b += 1) { var F = h[b], K = e.modelManager.getModel(F); if (K) { var Q = K._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); Q.visible = !1, (Q = K._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).visible = !1, (Q = K._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 })).visible = d[F][gp.INSTANCEGEOMETRY], (Q = K._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 })).visible = d[F][gp.INSTANCEWIREFRAMEGEOMETRY] } } n.render(o, t), n.render(i.capsScene, t), o.overrideMaterial = null, l.planeHighLightMatrial.visible = !0, c.planeHighLightMatrial.visible = !0, c.planeMaterial.visible = !0; for (var R = 0, T = h.length; T > R; R += 1) { var k = h[R], D = e.modelManager.getModel(k); if (D) { var L = D._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); L.visible = d[k][gp.GEOMETRY], (L = D._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).visible = d[k][gp.WIREFRAME], (L = D._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 })).visible = d[k][gp.INSTANCEGEOMETRY], (L = D._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 })).visible = d[k][gp.INSTANCEWIREFRAMEGEOMETRY] } } d = null, n.render(o, t) } } else !vc.PickingEffect && vc.EnableSelectionOutline && A.composer && e.getSelection().length > 0 ? A.composer.render() : (n.setRenderTarget(null), n.clear(), n.render(o, t)); A._applyPickingEffect(), i.setFilterApplied(!1), e.onRenderListener(), e.onRenderFinishedListener(), e.cameraControl.isCameraChanging() && i.dispatchEvent({ type: Rc.ON_CAMERA_CHANGED_AND_RENDERED }), e.cameraControl.setCameraChanging(!1), i.getBlinkEnabled() && (A.blinkHandle = requestAnimationFrame(r)), i.disposeBufferAfterVbo() }() }, Ly.prototype.fillCavityRender = function (A) { var e = this.viewer, t = e.camera, i = e.modelManager, o = this.renderer, n = e.getScene(); function r(A, e, t, i) { var o = new Xi, n = new jA; n.depthWrite = !1, n.depthTest = !1, n.colorWrite = !1, n.stencilWrite = !0, n.stencilFunc = 519; var r = n.clone(); r.side = 1, r.clippingPlanes = [e], r.stencilFail = 34055, r.stencilZFail = 34055, r.stencilZPass = 34055; var a = new Ue(A, r); a.matrixWorld = i.matrixWorld, a.renderOrder = t, o.add(a); var s = n.clone(); s.side = 0, s.clippingPlanes = [e], s.stencilFail = 34056, s.stencilZFail = 34056, s.stencilZPass = 34056; var l = new Ue(A, s); return l.renderOrder = t, l.matrixWorld = i.matrixWorld, o.add(l), o } this.blinkHandle > 0 && cancelAnimationFrame(this.blinkHandle), function A() { e.cameraControl.updateCamera(), e.calculateNearFar(), n.updateLights(t), i.getBlinkEnabled() && i.updateBlinkMaterial(); var a = n.fillClipPlane && n.fillClipPlane.visible, s = n.clipPlanes && n.clipPlanes.visible, l = o.autoClear, c = o.sortObjects; if (vc.ClippingCaps && (a || s)) { if (a) { var h = n.getFillClipPlane(), d = n.getClipPlanes(), p = e.modelManager.getModelKeys(); i.prepareCapScene(), o.clear(), o.autoClear = !1, a ? (h.capPlane.planeMesh.visible = !0, h.capPlane.lineMesh.visible = !0, d.boxMesh.visible = !1) : (h.capPlane.planeMesh.visible = !1, h.capPlane.lineMesh.visible = !1, d.boxMesh.visible = !0), h.planeHighLightMatrial.visible = !1, d.planeHighLightMatrial.visible = !1, d.planeMaterial.visible = !1, n.overrideMaterial = n.backMaterial; for (var g = {}, u = 0, f = p.length; f > u; u += 1) { var m = p[u], C = e.modelManager.getModel(m); if (g[m] = {}, C) { var y = C._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); g[m][gp.GEOMETRY] = y.visible, y = C._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 }), g[m][gp.WIREFRAME] = y.visible, y = C._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 }), g[m][gp.INSTANCEGEOMETRY] = y.visible, y.visible = !1, y = C._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 }), g[m][gp.INSTANCEWIREFRAMEGEOMETRY] = y.visible, y.visible = !1 } } o.render(n, t), n.overrideMaterial = n.backInstanceMaterial; for (var v = 0, I = p.length; I > v; v += 1) { var E = p[v], B = e.modelManager.getModel(E); if (B) { var x = B._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); x.visible = !1, (x = B._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).visible = !1, (x = B._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 })).visible = g[E][gp.INSTANCEGEOMETRY], (x = B._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 })).visible = g[E][gp.INSTANCEWIREFRAMEGEOMETRY] } } o.render(n, t), n.overrideMaterial = n.frontMaterial; for (var S = 0, w = p.length; w > S; S += 1) { var M = p[S], b = e.modelManager.getModel(M); if (b) { var U = b._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); U.visible = g[M][gp.GEOMETRY], (U = b._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).visible = g[M][gp.WIREFRAME], U = b._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 }), g[M][gp.INSTANCEGEOMETRY] = U.visible, U.visible = !1, U = b._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 }), g[M][gp.INSTANCEWIREFRAMEGEOMETRY] = U.visible, U.visible = !1 } } o.render(n, t), n.overrideMaterial = n.frontInstanceMaterial; for (var F = 0, K = p.length; K > F; F += 1) { var Q = p[F], R = e.modelManager.getModel(Q); if (R) { var T = R._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); T.visible = !1, (T = R._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).visible = !1, (T = R._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 })).visible = g[Q][gp.INSTANCEGEOMETRY], (T = R._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 })).visible = g[Q][gp.INSTANCEWIREFRAMEGEOMETRY] } } o.render(n, t), o.render(i.capsScene, t), n.overrideMaterial = null, a ? h.planeHighLightMatrial.visible = !0 : (d.planeHighLightMatrial.visible = !0, d.planeMaterial.visible = !0); for (var k = 0, D = p.length; D > k; k += 1) { var L = p[k], N = e.modelManager.getModel(L); if (N) { var O = N._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); O.visible = g[L][gp.GEOMETRY], (O = N._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).visible = g[L][gp.WIREFRAME], (O = N._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 })).visible = g[L][gp.INSTANCEGEOMETRY], (O = N._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 })).visible = g[L][gp.INSTANCEWIREFRAMEGEOMETRY] } } g = null, o.render(n, t) } if (s) { o.clear(), o.autoClear = !1, o.sortObjects = !0, o.localClippingEnabled = !0; var V = e.modelManager.getModelKeys(), G = o.clippingPlanes; o.clippingPlanes = []; var P = n.getClipPlanes(), q = new Y; q.autoUpdate = !1; for (var j = 0, H = n.lightArray.length; H > j; j += 1) q.add(n.lightArray[j].clone()); for (var W = [], J = 0; 6 > J; J += 1) W[J] = P.children[J].clone(); for (var z = 0, Z = V.length; Z > z; z += 1) { var X = e.modelManager.getModel(V[z]); if (X) for (var _ = X._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }), $ = 0, AA = _.children.length; AA > $; $ += 1) { var eA = new Xi; eA.name = "object"; var tA = [], iA = []; q.add(eA); var oA = _.children[$]; if (oA.visible) { for (var nA = oA.geometry, rA = [], aA = 0; 6 > aA; aA += 1) rA[aA] = G[aA].clone(); for (var sA = function (A) { (cA = new Xi).name = "poGroup"; var e = rA[A]; (hA = r(nA, e, A + 1, oA)).name = "stencilGroup", dA = new yr({ color: oA.material[0].color, metalness: .1, roughness: .75, clippingPlanes: rA.filter((function (A) { return A !== e })), stencilWrite: !0, stencilRef: 0, stencilFunc: 517, stencilFail: 7681, stencilZFail: 7681, stencilZPass: 7681 }); var t = W[A].clone(); t.material = dA, t.testNumber = A, t.onAfterRender = function () { o.clearStencil() }, t.renderOrder = A + 1.1, eA.add(hA), cA.add(t), tA.push(t), q.add(cA), iA.push(cA) }, lA = 0; 6 > lA; lA += 1) { var cA, hA, dA; sA(lA) } for (var pA = oA.clone(), gA = 0, uA = pA.material.length; uA > gA; gA += 1) pA.material[gA].clippingPlanes = rA; pA.renderOrder = 6, eA.add(pA), o.render(q, t), q.remove(eA); for (var fA = 0, mA = iA.length; mA > fA; fA += 1) q.remove(iA[fA]); tA = null } } } o.sortObjects = c, o.clippingPlanes = G, o.autoClear = l, o.localClippingEnabled = !1 } } else vc.EnableSelectionOutline && e.composer && e.getSelection().length > 0 ? e.composer.render() : (o.setRenderTarget(null), o.clear(), o.render(n, t)); e.onRenderListener(), e.onRenderFinishedListener(), e.cameraControl.setCameraChanging(!1), i.getBlinkEnabled() && (e.blinkHandle = requestAnimationFrame(A)), i.disposeBufferAfterVbo() }() }, Ly.prototype.fillCavityRender2 = function (A) { var e = this.viewer, t = e.camera, i = e.modelManager, o = this.renderer, n = e.getScene(); this.blinkHandle > 0 && cancelAnimationFrame(this.blinkHandle), function A() { e.cameraControl.updateCamera(), e.calculateNearFar(), n.updateLights(t), i.getBlinkEnabled() && i.updateBlinkMaterial(); var r = n.fillClipPlane && n.fillClipPlane.visible, a = n.clipPlanes && n.clipPlanes.visible, s = o.autoClear; if (vc.ClippingCaps && (r || a)) { if (r) { var l = n.getFillClipPlane(), c = n.getClipPlanes(), h = e.modelManager.getModelKeys(); i.prepareCapScene(), o.clear(), o.autoClear = !1, r ? (l.capPlane.planeMesh.visible = !0, l.capPlane.lineMesh.visible = !0, c.boxMesh.visible = !1) : (l.capPlane.planeMesh.visible = !1, l.capPlane.lineMesh.visible = !1, c.boxMesh.visible = !0), l.planeHighLightMatrial.visible = !1, c.planeHighLightMatrial.visible = !1, c.planeMaterial.visible = !1, n.overrideMaterial = n.backMaterial; for (var d = {}, p = 0, g = h.length; g > p; p += 1) { var u = h[p], f = e.modelManager.getModel(u); if (d[u] = {}, f) { var m = f._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); d[u][gp.GEOMETRY] = m.visible, m = f._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 }), d[u][gp.WIREFRAME] = m.visible, m = f._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 }), d[u][gp.INSTANCEGEOMETRY] = m.visible, m.visible = !1, m = f._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 }), d[u][gp.INSTANCEWIREFRAMEGEOMETRY] = m.visible, m.visible = !1 } } o.render(n, t), n.overrideMaterial = n.backInstanceMaterial; for (var C = 0, y = h.length; y > C; C += 1) { var v = h[C], I = e.modelManager.getModel(v); if (I) { var E = I._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); E.visible = !1, (E = I._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).visible = !1, (E = I._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 })).visible = d[v][gp.INSTANCEGEOMETRY], (E = I._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 })).visible = d[v][gp.INSTANCEWIREFRAMEGEOMETRY] } } o.render(n, t), n.overrideMaterial = n.frontMaterial; for (var B = 0, x = h.length; x > B; B += 1) { var S = h[B], w = e.modelManager.getModel(S); if (w) { var M = w._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); M.visible = d[S][gp.GEOMETRY], (M = w._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).visible = d[S][gp.WIREFRAME], M = w._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 }), d[S][gp.INSTANCEGEOMETRY] = M.visible, M.visible = !1, M = w._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 }), d[S][gp.INSTANCEWIREFRAMEGEOMETRY] = M.visible, M.visible = !1 } } o.render(n, t), n.overrideMaterial = n.frontInstanceMaterial; for (var b = 0, U = h.length; U > b; b += 1) { var F = h[b], K = e.modelManager.getModel(F); if (K) { var Q = K._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); Q.visible = !1, (Q = K._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).visible = !1, (Q = K._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 })).visible = d[F][gp.INSTANCEGEOMETRY], (Q = K._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 })).visible = d[F][gp.INSTANCEWIREFRAMEGEOMETRY] } } o.render(n, t), o.render(i.capsScene, t), n.overrideMaterial = null, r ? l.planeHighLightMatrial.visible = !0 : (c.planeHighLightMatrial.visible = !0, c.planeMaterial.visible = !0); for (var R = 0, T = h.length; T > R; R += 1) { var k = h[R], D = e.modelManager.getModel(k); if (D) { var L = D._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); L.visible = d[k][gp.GEOMETRY], (L = D._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).visible = d[k][gp.WIREFRAME], (L = D._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 })).visible = d[k][gp.INSTANCEGEOMETRY], (L = D._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 })).visible = d[k][gp.INSTANCEWIREFRAMEGEOMETRY] } } d = null, o.render(n, t) } if (a) { o.clear(), o.autoClear = !1; for (var N = e.modelManager.getModelKeys(), O = o.clippingPlanes, V = o.tempPlanes || [], G = 0; 6 > G; G += 1) { if (V[G]) { if (V[G].equals(O[G])) continue; V[G] = O[G].clone() } else V[G] = O[G].clone(); for (var P = 0, q = N.length; q > P; P += 1) { var j = e.modelManager.getModel(N[P]); if (j) { var H = j._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }), Y = j._getNodeGroup("sectionFill_" + G); Y.clear(); for (var W = 0, J = H.children.length; J > W; W += 1) { var z = H.children[W]; if (z.visible) { var Z = V[G].clone().applyMatrix4(z.matrixWorld), X = z.geometry; if (X.boundingBox || X.computeBoundingBox(), X.boundingBox.intersectsPlane(Z)) { var _ = Tu.getShapeGeometryFromGeometryAndPlane(X, Z); if (_) { var $ = new Ue(_, z.material[0]); Y.add($), $.matrixWorld.copy(z.matrixWorld) } } } } } } } o.tempPlanes = V, o.autoClear = s, o.setRenderTarget(null), o.clear(), o.render(n, t) } } else vc.EnableSelectionOutline && e.composer && e.getSelection().length > 0 ? e.composer.render() : (o.setRenderTarget(null), o.clear(), o.render(n, t)); e.onRenderListener(), e.onRenderFinishedListener(), e.cameraControl.setCameraChanging(!1), i.getBlinkEnabled() && (e.blinkHandle = requestAnimationFrame(A)), i.disposeBufferAfterVbo() }() }, Ly.prototype.render = function (A) { if (this.renderer) { var e = this.viewer, t = e.modelManager; if (t.isEmpty()) return Bh.log("model not loaded!"), void this._forceRenderOneFrame(); if (!t.checkLayerDataLoading()) { e._checkDataChanged(); e.getScene(); e.camera.updateMatrixWorld(), this.csm && (this.csm.update(e.camera.matrixWorld), this.csm.updateFrustums()), vc.IncrementRender ? this.incrementRender(A) : vc.FillCavity ? this.fillCavityRender2(A) : this.fullRender(A) } } }, Ly.prototype.getRenderer = function () { return this.renderer }, Ly.prototype.setSize = function (A, e) { this.renderer.setSize(A, e), this.composer && this.composer.setSize(A, e) }, Ly.prototype.getRendererSize = function () { return this.renderer ? this.renderer.getSize() : { width: 0, height: 0 } }, Ly.prototype.getPickingEffecter = function () { return vc.PickingEffect ? (this.pickingEffecter || (this.pickingEffecter = new Sy(this.viewer)), this.pickingEffecter) : null }; var Ny = function (A, e) { jo.call(this, A, e), this.type = "SkinnedMesh", this.bindMode = "attached", this.bindMatrix = new M, this.bindMatrixInverse = new M; var t = new bo(this.initBones()); this.bind(t, this.matrixWorld), this.normalizeSkinWeights() }; Ny.prototype = Object.assign(Object.create(jo.prototype), { constructor: Ny, isSkinnedMesh: !0, initBones: function () { var A = [], e = null, t = null, i = null, o = null; if (this.geometry && void 0 !== this.geometry.bones) { for (i = 0, o = this.geometry.bones.length; o > i; i += 1) t = this.geometry.bones[i], e = new Uo, A.push(e), e.name = t.name, e.position.fromArray(t.pos), e.quaternion.fromArray(t.rotq), void 0 !== t.scl && e.scale.fromArray(t.scl); for (i = 0, o = this.geometry.bones.length; o > i; i += 1) - 1 !== (t = this.geometry.bones[i]).parent && null !== t.parent && void 0 !== A[t.parent] ? A[t.parent].add(A[i]) : this.add(A[i]) } return this.updateMatrixWorld(!0), A }, bind: function (A, e) { this.skeleton = A, void 0 === e && (this.updateMatrixWorld(!0), this.skeleton.calculateInverses(), e = this.matrixWorld), this.bindMatrix.copy(e), this.bindMatrixInverse.getInverse(e) }, pose: function () { this.skeleton.pose() }, normalizeSkinWeights: function () { var A = null, e = null; if (this.geometry && this.geometry.isGeometry) for (e = 0; this.geometry.skinWeights.length > e; e += 1) { var t = this.geometry.skinWeights[e]; (A = 1 / t.lengthManhattan()) !== 1 / 0 ? t.multiplyScalar(A) : t.set(1, 0, 0, 0) } else if (this.geometry && this.geometry.isBufferGeometry) { var i = new p, o = this.geometry.attributes.skinWeight; for (e = 0; o.count > e; e += 1) i.x = o.getX(e), i.y = o.getY(e), i.z = o.getZ(e), i.w = o.getW(e), (A = 1 / i.lengthManhattan()) !== 1 / 0 ? i.multiplyScalar(A) : i.set(1, 0, 0, 0), o.setXYZW(e, i.x, i.y, i.z, i.w) } }, updateMatrixWorld: function (A) { jo.prototype.updateMatrixWorld.call(this, A), "attached" === this.bindMode ? this.bindMatrixInverse.getInverse(this.matrixWorld) : "detached" === this.bindMode ? this.bindMatrixInverse.getInverse(this.bindMatrix) : console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode) }, clone: function () { return new this.constructor(this.geometry, this.material).copy(this) } }); var Oy = function (A) { of .call(this, A), this.nodeGroupName = "PickingExternalMeshGroup", this.pickingEffecter = this.manager.viewer.rendererManager.getPickingEffecter() }; Object.assign(Oy.prototype, of .prototype), eu(Oy, [{ key: "destroy", value: function () { this.pickingEffecter = null } }, { key: "_disposeGeometryByNode", value: function (A) { A.traverseVisible((function (e) { e !== A && (e.isMesh || e.isLine) && (e.material = null, e.geometry.dispose()) })) } }, { key: "disposePickingNodeById", value: function (A) { for (var e = this.pickingNodeMap[A], t = 0, i = e.length; i > t; t += 1) this._disposeGeometryByNode(e[t]), e[t] = null } }, { key: "updatePickingMeshes", value: function (A, e, t) { if (this.pickingNodeMap) { for (var i = Object.keys(this.pickingNodeMap), o = 0, n = i.length; n > o; o += 1) { var r = i[o], a = this.pickingNodeMap[r], s = 0, l = 0; if (t[r] && this.manager.isPickableNode({ userId: r, name: r })) for (s = 0, l = a.length; l > s; s += 1) a[s].visible = !0; else for (s = 0, l = a.length; l > s; s += 1) a[s].visible = !1 } return this.getPickingNodeGroup() } } }, { key: "addNode", value: function (A, e) { this.addToPickingNodeMap(A, e) } }, { key: "removeNodeById", value: function (A) { this.removeFromPickingNodeMap(A) } }, { key: "clearNodes", value: function () { this.clearData() } }, { key: "addToPickingNodeMap", value: function (A, e) { for (var t = [], i = !vc.BatchMergeEnabled, o = 0, n = e.length; n > o; o += 1) { var r = this._createPickingNodeBy(e[o], i); if (r) if (Array.isArray(r)) for (var a = 0, s = r.length; s > a; a += 1) r[a].name = A, t.push(r[a]); else r.name = A, t.push(r) } this.pickingNodeMap || (this.pickingNodeMap = {}), this.pickingNodeMap[A] = t, this.addToPickingNodeGroup(t) } }, { key: "_createPickingNodeBy", value: function (A, e) { var t = this, i = {}, o = {}; if ("Object3D" === A.type || A instanceof Xi || A instanceof ep) { var n = new Xi; n.copy(A, !1), A.animations && (n.animations = A.animations), A.traverseVisible((function (n) { if (n !== A) { var r = null; if ("Object3D" === n.type || n instanceof Xi || n instanceof ep || n instanceof Uo) (r = n instanceof Uo ? new Uo : new Xi).copy(n, !1), i[n.uuid] = { destination: r, source: n }; else { if (!n.isMesh && !n.isLine) return; (r = t._createPickingMeshesBy(n, e)) && (o[n.uuid] = { destination: r, source: n }) } r = null } })); var r = 0, a = 0, s = null, l = Object.keys(i); for (r = 0, a = l.length; a > r; r += 1) { var c = i[l[r]]; c.source.parent !== A ? i[s = c.source.parent.uuid].destination.add(c.destination) : n.add(c.destination) } var h = Object.keys(o); for (r = 0, a = h.length; a > r; r += 1) { var d = o[h[r]], p = 0, g = 0; if (d.source.parent === A) if (Array.isArray(d.destination)) for (p = 0, g = d.destination.length; g > p; p += 1) n.add(d.destination[p]); else n.add(d.destination); else if (s = d.source.parent.uuid, Array.isArray(d.destination)) for (p = 0, g = d.destination.length; g > p; p += 1) i[s].destination.add(d.destination[p]); else i[s].destination.add(d.destination) } return n } return A.isMesh || A.isLine ? t._createPickingMeshesBy(A, e) : null } }, { key: "_createLineMeshBy", value: function (A, e, t) { var i = null, o = null, n = this.pickingEffecter; if (vc.PickingLineWidthEnabled) { i = n.selectedLineMaterial; var r = new JC; A.isLineSegments ? r.fromLineSegments(A) : A.isLineLoop ? r.fromLineLoop(A) : r.fromLine(A), o = new XC(r, i), Tu.copyMeshProperties(o, A), o.renderOrder = t ? 1 : 0 } else i = n.selectedMaterial, o = A.isLineSegments ? new jo(e, i) : A.isLineLoop ? new Ho(e, i) : new Go(e, i), Tu.copyMeshProperties(o, A), o.renderOrder = t ? 1 : 0; return o } }, { key: "_createMeshBy", value: function (A, e, t) { var i = new Ue(e, this.pickingEffecter.selectedMaterial); return Tu.copyMeshProperties(i, A), i.renderOrder = t ? 1 : 0, i } }, { key: "_createSkinnedMeshBy", value: function (A, e, t) { var i = new So(e, this.pickingEffecter.skinningSelectedMaterial); return Tu.copyMeshProperties(i, A), i.renderOrder = t ? 1 : 0, i.bindMatrix.copy(A.bindMatrix), i.bindMatrixInverse.copy(A.bindMatrixInverse), i.bindMode = A.bindMode, i.userData = A.userData, i.skeleton = A.skeleton, i } }, { key: "_createSkinnedWireFrameBy", value: function (A, e, t) { if (!e.index) return null; var i = this.pickingEffecter.skinningWireframeMaterial, o = Up(e.attributes.position.array, e.index.array), n = new he; n.setIndex(new $A(o, 1)), n.setAttribute("position", e.getAttribute("position")), n.setAttribute("skinIndex", e.getAttribute("skinIndex")), n.setAttribute("skinWeight", e.getAttribute("skinWeight")); var r = new Ny(n, i); return Tu.copyMeshProperties(r, A), r.bindMatrix.copy(A.bindMatrix), r.bindMatrixInverse.copy(A.bindMatrixInverse), r.bindMode = A.bindMode, r.userData = A.userData, r.skeleton = A.skeleton, r.renderOrder = t ? 0 : 1, r } }, { key: "_createWireFrameBy", value: function (A, e, t) { if (!e.index) return null; var i = this.pickingEffecter.wireframeMaterial, o = Up(e.attributes.position.array, e.index.array), n = new he; n.setIndex(new $A(o, 1)), n.setAttribute("position", e.getAttribute("position")); var r = new jo(n, i); return Tu.copyMeshProperties(r, A), r.renderOrder = t ? 0 : 1, r } }, { key: "_createPickingMeshesBy", value: function (A, e) { var t = Tu.createBufferGeometryWithPosAndSkin(A.geometry); if (!t) return null; if (A.isLineSegments) return this._createLineMeshBy(A, t, e); var i = null, o = null; return A.isSkinnedMesh ? (i = this._createSkinnedMeshBy(A, t, e), o = this._createSkinnedWireFrameBy(A, t, e)) : (i = this._createMeshBy(A, t, e), o = this._createWireFrameBy(A, t, e)), o ? [i, o] : i } }, { key: "setAccumulateTransform", value: function (A, e, t, i) { if (this.pickingNodeMap && this.pickingNodeMap[A]) for (var o = this.pickingNodeMap[A], n = 0, r = o.length; r > n; n += 1) { var a = o[n]; e && (a.position.x += e.x, a.position.y += e.y, a.position.z += e.z), t && (a.scale.x *= t.x, a.scale.y *= t.y, a.scale.z *= t.z), i && (a.rotation.x += i.x, a.rotation.y += i.y, a.rotation.z += i.z), a.updateMatrixWorld() } } }, { key: "setTransform", value: function (A, e, t, i, o) { if (this.pickingNodeMap && this.pickingNodeMap[A]) for (var n = this.pickingNodeMap[A], r = 0, a = n.length; a > r; r += 1) { var s = n[r]; o ? this.manager.setTransformForClonedMesh(s, e, t, i) : this.manager.setTransformForMesh(s, e, t, i) } } }, { key: "rotateOnBasePoint", value: function (A, e, t, i) { if (this.pickingNodeMap && this.pickingNodeMap[A]) { var o = this.pickingNodeMap[A]; if (o) for (var n = 0, r = o.length; r > n; n += 1) { var a = o[n], s = (new f).setFromAxisAngle(t, i); a.quaternion.premultiply(s), a.position.sub(e), a.position.applyQuaternion(s), a.position.add(e), a.updateMatrixWorld() } } } }, { key: "applyTransform", value: function (A, e, t, i) { if (this.pickingNodeMap && this.pickingNodeMap[A]) { var o = this.manager.getTransformMatrix(e, t, i); this.applyTransformMatrix(A, o) } } }, { key: "applyTransformMatrix", value: function (A, e) { if (this.pickingNodeMap && this.pickingNodeMap[A]) for (var t = this.pickingNodeMap[A], i = 0, o = t.length; o > i; i += 1) this.manager.updateMatrixWorldForMesh(t[i], e) } }]); var Vy = function (A) { this.viewer = A, this.viewer.modelManager.registerPlugin(this), this.meshes = {}, this.customSelectMaterials = {}, this.databagId = "ExternalComponent", this.objectIds = null, this.lastFilteredIds = null, this.firstAnimation = !0, this.animationIds = {}, this.animationLength = 0, this.animationId = 0, this.invalidObjectType = ["invalidPlane"], this.floorExplosion = !1, this.boundingBoxWorld = void 0 }; Vy.prototype.destroy = function () { this.pickingNodeGenerator && (this.pickingNodeGenerator.destroy(), this.pickingNodeGenerator = null), this._removeNodeGroup(), this.meshes = null, this.customSelectMaterials = null, this.objectIds = null, this.lastFilteredIds = null, this._cancelAnimate(), this.firstAnimation = null, this.animationIds = null, this.invalidObjectType = null, this.viewer = null }, Vy.prototype.addExternalObject = function (A) { if (A && (A instanceof Xi || A instanceof Ue)) { var e = uh.createUUID(); this.meshes[e] = [A]; var t = { name: e, userId: e, nodeId: e, state: Lc.Visible, mesh: [A], isExternalComponent: !0, matrix: A.matrixWorld.clone() }, i = new aA; return i.setFromObject(A), t.boundingBox = i, A.key = e, this._getNodeGroup().add(A), this._addToNodeInfoMap(t), this._cacheNodeMaterial(A), this.boundingBoxWorld ? this.boundingBoxWorld.union(i) : this.boundingBoxWorld = i.clone(), this.viewer.modelManager.updateSceneBoundingBox(), this._updateFilterManager(), this.objectIds = Object.keys(this.meshes), { nodeId: e } } }, Vy.prototype.getObjectCenterAndMatrixByNodeId = function (A) { var e = void 0, t = this.getNodeInfosByUserId(A); if (t && t.length > 0) { e = { matrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], center: [0, 0, 0] }; var i = t[0]; if (i.matrix && (e.matrix = i.matrix.toArray()), i.boundingBox) { var o = new y; i.boundingBox.getCenter(o), e.center = o.toArray() } } return e }, Vy.prototype.addNode = function (A, e, t, i) { if (this.meshes[A]) Bh.error("Warning: name is already exist, please change name "); else if (-1 === this.invalidObjectType.indexOf(e.type)) { e instanceof Array || (e = [e]), this.meshes[A] = e, this._isPickingEffectEnabled() && this.getPickingNodeGenerator().addNode(A, e), void 0 === t && (t = !1), i && (this.customSelectMaterials[A] = i); for (var o = new aA, n = 0, r = e.length; r > n; n += 1) { var a = new aA; a.setFromObject(e[n]), a.isEmpty() && a.min.x === 1 / 0 && e[n].position && (a.min.copy(e[n].position), a.max.copy(e[n].position)), o.union(a), e[n].box = a, e[n].originBox = a.clone(); var s = new M; s.getInverse(e[n].matrix), e[n].originBox.applyMatrix4(s), this._initializeAnimation(e[n], A); var l = e[n]; l.key = A, this._getNodeGroup().add(l), l.updateMatrixWorld(!0), t || this._cacheNodeMaterial(l) } var c = { name: A, userId: A, state: Lc.Visible, boundingBox: o, mesh: e, isExternalComponent: !0 }; 1 === e.length && (c.matrix = e[0].matrixWorld.clone()), this._addToNodeInfoMap(c), this.boundingBoxWorld ? this.boundingBoxWorld.union(o) : this.boundingBoxWorld = o.clone(), this.viewer.modelManager.updateSceneBoundingBox(), this._updateFilterManager(), this.objectIds = Object.keys(this.meshes) } else Bh.error("Warning: the object is invalid") }, Vy.prototype.getNodeById = function (A) { var e = this.meshes[A]; return e && 1 === e.length ? e[0] : e }, Vy.prototype.removeNodeById = function (A) { var e = this.meshes[A]; if (!e) return !1; e[0].autoAnimation && (delete this.animationIds[A], this.animationLength -= 1, 0 === this.animationLength && this._cancelAnimate()), delete this.meshes[A], this._isPickingEffectEnabled() && this.getPickingNodeGenerator().removeNodeById(A), this.customSelectMaterials[A] && delete this.customSelectMaterials[A]; for (var t = this._getNodeGroup(), i = 0, o = e.length; o > i; i += 1) t.remove(e[i]); return this.filteredIds && this.filteredIds[A] && delete this.filteredIds[A], this.lastFilteredIds && this.lastFilteredIds[A] && delete this.lastFilteredIds[A], this.viewer.removeFromSelection([A]), this.viewer.cancelTransformComponentByKey(A), this._removeFromNodeInfoMap(A), this._updateFilterManager(), this.objectIds = Object.keys(this.meshes), !0 }, Vy.prototype.clearNodes = function () { this._isPickingEffectEnabled() && this.getPickingNodeGenerator().clearNodes(), this._getNodeGroup().clear(), this._clearNodeInfoMap(), this.meshes = {}, this.customSelectMaterials = {}, this.objectIds = null, this.animationIds = {}, this.animationLength = 0, this._cancelAnimate() }, Vy.prototype.getAllNodes = function () { return this.meshes }, Vy.prototype.isEmpty = function () { return !this._hasNode() }, Vy.prototype.setTransform = function (A, e, t, i, o) { if (this.floorExplosion && o) o(); else { var n = this.meshes[A]; if (n) { for (var r = 0, a = n.length; a > r; r += 1) { var s = n[r]; s.position.x = (e = e || s.position).x, s.position.y = e.y, s.position.z = e.z, s.scale.x = (t = t || s.scale).x, s.scale.y = t.y, s.scale.z = t.z, s.setRotationFromQuaternion(i = i || s.quaternion), s.updateMatrixWorld(); var l = s.originBox.clone(); s.box = l.applyMatrix4(s.matrix), s.levelName = null } this._isPickingEffectEnabled() && this.getPickingNodeGenerator().setTransform(A, e, t, i) } } }, Vy.prototype.getTransform = function (A) { var e = this.meshes[A]; return e ? { position: e[0].position, scale: e[0].scale, rotate: e[0].quaternion } : null }, Vy.prototype.applyTransform = function (A, e, t, i) { if (this.meshes[A]) { e = e || new y, t = t || new y(1, 1, 1), i = i || new f; var o = new M; o.compose(e, i, t), this.applyTransformMatrix(A, o), this._isPickingEffectEnabled() && this.getPickingNodeGenerator().applyTransformMatrix(A, o) } }, Vy.prototype.applyTransformMatrix = function (A, e) { var t = this.meshes[A]; if (t) for (var i = 0, o = t.length; o > i; i += 1) { var n = t[i]; n._oriMatrix || (n._oriMatrix = n.matrix.clone()), n.matrix.multiplyMatrices(e, n._oriMatrix), n.updateMatrixWorld(!0); var r = n.originBox.clone(); n.box = r.applyMatrix4(n.matrix) } }, Vy.prototype.applyFilter = function () { this._hasNode() && (this._collectFilteredIds(), this._collectSelectedIds(), this._collectHoveredIds(), this._updateNodes()) }, Vy.prototype.applySelection = function () { console.log('applySelection13') this._hasNode() && (this._collectSelectedIds(), this._collectHoveredIds(), this._updateNodes()) }, Vy.prototype.clearSelection = function () { this._hasNode() && (this._clearSelectedIds(), this.applyHover()) }, Vy.prototype.applyHover = function () { this._hasNode() && (this._collectHoveredIds(), this._updateNodes()) }, Vy.prototype.clearHover = function () { this._hasNode() && (this._clearHoveredIds(), this._updateNodes()) }, Vy.prototype.getNodeInfosByUserId = function (A) { if (this.nodeInfoMap) return this.nodeInfoMap[A] }, Vy.prototype.getAllNodeInfos = function (A) { A[this.databagId] = this.nodeInfoMap || {} }, Vy.prototype.calculateBoundingBox = function () { if (this.nodeInfoMap) { var A = new aA, e = new aA; for (var t in this.nodeInfoMap) for (var i = this.nodeInfoMap[t], o = 0, n = i.length; n > o; o += 1) { var r = i[o], a = r.mesh, s = new aA; for (o = 0, n = a.length; n > o; o += 1) e.makeEmpty(), e.setFromObject(a[o]), e.isEmpty() && e.min.x === 1 / 0 && a[o].position && (e.min.copy(a[o].position), e.max.copy(a[o].position)), s.union(e); r.boundingBox.copy(s), A.union(r.boundingBox) } this.boundingBoxWorld ? this.boundingBoxWorld.copy(A) : this.boundingBoxWorld = A } }, Vy.prototype.recalculateComponentBoundingbox = function (A) { var e = this.getNodeInfosByUserId(A); if (e) for (var t = 0, i = e.length; i > t; t += 1) { var o = e[t], n = o.mesh, r = new aA, a = new aA; for (t = 0, i = n.length; i > t; t += 1) a.setFromObject(n[t]), a.isEmpty() && a.min.x === 1 / 0 && n[t].position && (a.min.copy(n[t].position), a.max.copy(n[t].position)), r.union(a); o.boundingBox.copy(r) } }, Vy.prototype.getBoundingBoxWorld = function () { if (this.boundingBoxWorld) return this.boundingBoxWorld.clone() }, Vy.prototype.adjustVisibility = function (A) { this._getNodeGroup().visible = A }, Vy.prototype.changeVisibilityOfSelectedObjects = function (A) { if (this.selectedIds) for (var e = this.viewer.modelManager.filter, t = 0, i = this.selectedIds.length; i > t; t += 1) { var o = this.selectedIds[t], n = this.meshes[o]; if (n && e._isVisible({ userId: o })) for (var r = 0, a = n.length; a > r; r += 1) n[r].visible = A } }, Vy.prototype.changeVisibilityOfNonSelectedObjects = function (A) { if (this.objectIds) { var e = {}; if (this.selectedIds) for (var t = 0, i = this.selectedIds.length; i > t; t += 1) e[this.selectedIds[t]] = !0; for (var o = this.viewer.modelManager.filter, n = 0, r = this.objectIds.length; r > n; n += 1) { var a = this.objectIds[n]; if (!e[a] && o._isVisible({ userId: a })) for (var s = this.meshes[a], l = 0, c = s.length; c > l; l += 1) s[l].visible = A } } }, Vy.prototype.adjustVisibilityOfObjectsWithoutOutline = function (A) { if (this.objectIds) for (var e = this.viewer.modelManager.filter, t = 0, i = this.objectIds.length; i > t; t += 1) { var o = this.objectIds[t]; if (e._isVisible({ userId: o })) for (var n = this.meshes[o], r = 0, a = n.length; a > r; r += 1) n[r].isSprite && (n[r].visible = A) } }, Vy.prototype._addToNodeInfoMap = function (A) { this.nodeInfoMap || (this.nodeInfoMap = {}), this.nodeInfoMap[A.userId] || (this.nodeInfoMap[A.userId] = []), this.nodeInfoMap[A.userId].push(A) }, Vy.prototype._removeFromNodeInfoMap = function (A) { this.nodeInfoMap && this.nodeInfoMap[A] && delete this.nodeInfoMap[A] }, Vy.prototype._clearNodeInfoMap = function () { this.nodeInfoMap = null }, Vy.prototype._updateFilterManager = function () { var A = this.viewer.modelManager; A.filter.reinitFilterManager(A.getNodeInfos()) }, Vy.prototype._canBePick = function (A) { return !!A._oriMaterial }, Vy.prototype._getNodeGroup = function () { return this.viewer.modelManager.scene.getOrCreateGroup(gp.EXTERNALCOMPONENTMANAGER, { pickableType: Qc.Geometry, globalSpace: !0 }) }, Vy.prototype._removeNodeGroup = function () { this.viewer.modelManager.scene.removeGroupByName(gp.EXTERNALCOMPONENTMANAGER) }, Vy.prototype._cacheNodeMaterial = function (A) { uh.isGroupObject(A) ? A.traverse((function (A) { if (uh.isMeshObject(A) && !A._oriMaterial && (A._oriMaterial = A.material, !A.geometry.index && A.geometry.attributes && A.geometry.attributes.position)) { for (var e = [], t = 0, i = A.geometry.attributes.position.array.length / 3; i > t; t += 1) e.push(t); A.geometry.setIndex(new YA(new Uint32Array(e), 1)) } })) : A._oriMaterial || (A._oriMaterial = A.material) }, Vy.prototype._collectFilteredIds = function () { var A = this.filteredIds = {}, e = this.viewer.modelManager.filter, t = e._hasHiddenFileIdFilter(), i = e._hasVisibleFilter(), o = e._hasOverrideMaterialFilter(), n = e._hasTransparentFilter(); if (t || i || o || n) for (var r = this.objectIds, a = zc, s = 0, l = r.length; l > s; s += 1) { var c = r[s], h = { userId: c }; if (i && !1 === e._isVisible(h)) A[c] || (A[c] = {}), A[c][a.HIDDEN] = !0; else if (n && e._isTransparent(h)) A[c] || (A[c] = {}), A[c][a.TRANSPARENT] = !0; else if (o && e._hasOverrideMaterial(h)) { var d = e._getOverrideMaterial(h), p = d ? d.name : ""; A[c] || (A[c] = {}), A[c][a.OVERRIDED] = p } } }, Vy.prototype._collectSelectedIds = function () { var A = this.filteredIds = this.filteredIds || {}, e = zc, t = this.viewer.modelManager.sceneState.getSelection(), i = {}; this._clearSelectedIds(); for (var o = 0, n = t.length; n > o; o += 1) { var r = t[o]; this.canBeSelectedId(r) && (A[r] || (A[r] = {}), A[r][e.SELECTED] = !0, i[r] = !0) } this.selectedIds = Object.keys(i) }, Vy.prototype._clearSelectedIds = function () { if (this.filteredIds && this.selectedIds && this.selectedIds.length) { for (var A = 0, e = this.selectedIds.length; e > A; A += 1) { var t = this.selectedIds[A]; this.filteredIds[t] && delete this.filteredIds[t][zc.SELECTED] } this.selectedIds = null } }, Vy.prototype._collectHoveredIds = function () { var A = this.viewer.modelManager.sceneState.hoverId; if (A && this._hasObjectId(A)) { var e = this.filteredIds = this.filteredIds || {}; this.hoveredId = A, e[A] || (e[A] = {}), e[A][zc.HOVER] = !0 } }, Vy.prototype._clearHoveredIds = function () { this.filteredIds && this.hoveredId && this.filteredIds[this.hoveredId] && (delete this.filteredIds[this.hoveredId][zc.HOVER], this.hoveredId = void 0) }, Vy.prototype._hasObjectId = function (A) { return !!this.meshes[A] }, Vy.prototype.isUserIdExist = function (A) { return this._hasObjectId(A) }, Vy.prototype.canBeSelectedId = function (A) { var e = this.meshes[A]; return !(!e || e[0].disPickable) }, Vy.prototype._hasNode = function () { return !(!this.objectIds || !this.objectIds.length) }, Vy.prototype._traverseNodeById = function (A, e) { if (this._hasObjectId(A)) for (var t = this, i = this.meshes[A], o = 0, n = i.length; n > o; o += 1) { var r = i[o]; uh.isGroupObject(r) ? r.traverseVisible((function (A) { uh.isMeshObject(A) && t._canBePick(A) && e && e(A) })) : (uh.isMeshObject(r) || r.isSprite) && t._canBePick(r) && e && e(r) } }, Vy.prototype._resetNodeMaterial = function () { var A = this.lastFilteredIds; if (A && A.length) for (var e = 0, t = A.length; t > e; e += 1) this._updateNodeVisible(A[e], !0), this._traverseNodeById(A[e], (function (A) { A.material = A._oriMaterial })) }, Vy.prototype._updateNodeVisible = function (A, e) { if (this._hasObjectId(A)) for (var t = this.meshes[A], i = 0, o = t.length; o > i; i += 1) t[i].visible = e }, Vy.prototype._updateNodeById = function (A, e) { if (this._hasObjectId(A)) { var t = this.viewer.modelManager.sceneState, i = zc, o = this.filteredIds[A]; if (o) if (o[i.HIDDEN]) this._updateNodeVisible(A, !1); else { var n = function (A, e) { if (A._oriMaterial instanceof Array) { for (var t = [], i = 0, o = A._oriMaterial.length; o > i; i += 1) { var n = A._oriMaterial[i]; n instanceof ld ? t.push(e) : t.push = Kd.cloneMaterialBaseOnColor(n, e) } A.material = t } else A.material = A._oriMaterial instanceof ld ? e : Kd.cloneMaterialBaseOnColor(A._oriMaterial, e) }; if (o[i.TRANSPARENT]) { var r = e._getMaterialByName("scene"); this._traverseNodeById(A, (function (A) { n(A, r) })) } else if (this._isPickingEffectEnabled() || !o[i.SELECTED]) { if (o[i.HOVER]) if (o[i.OVERRIDED]) { var a = t.getHoverMaterial(e._getMaterialByName(o[i.OVERRIDED])); this._traverseNodeById(A, (function (A) { n(A, a) })) } else this._traverseNodeById(A, (function (A) { var e = t.getHoverMaterial(A._oriMaterial); n(A, e) })); else if (o[i.OVERRIDED]) { var s = e._getMaterialByName(o[i.OVERRIDED]); this._traverseNodeById(A, (function (A) { n(A, s) })) } } else { var l = t.selectionMaterial, c = this.customSelectMaterials[A]; this._traverseNodeById(A, (function (A) { c ? A.material = c : A._oriMaterial.isMeshPhongMaterial ? (A.material = t.phongSelectionMaterial, A.material.skinning = A._oriMaterial.skinning) : n(A, l) })) } } } }, Vy.prototype._updateNodes = function () { var A = this.viewer.modelManager.filter; if (this._resetNodeMaterial(), this.filteredIds) { for (var e in this.filteredIds) this._updateNodeById(e, A); this.lastFilteredIds = Object.keys(this.filteredIds) } }, Vy.prototype._initializeAnimation = function (A, e) { if (A.autoAnimation) { if ("fire" === A.type) { var t = vc.SceneSize, i = this.viewer.getBoundingBoxWorld().getSize(), o = Math.max(i.x, i.y, i.z); A._initializeSizetween(t / o / .01421) } this.firstAnimation && (this._animate(), this.firstAnimation = !1), this.animationIds[e] = !0, this.animationLength += 1 } }, Vy.prototype._animate = function () { var A = this; ! function e() { for (var t in A.animationId = requestAnimationFrame(e), A.animationIds) for (var i = A.meshes[t], o = 0, n = i.length; n > o; o += 1) i[o].autoAnimation && i[o].update && i[o].update(); A.viewer.render() }() }, Vy.prototype._cancelAnimate = function () { this.firstAnimation = !0, cancelAnimationFrame(this.animationId), this.animationId = 0 }, Vy.prototype.isPickableNode = function (A) { if (!this.canBeSelectedId(A.userId)) return !1; var e = this.viewer.modelManager.filter; return !e._isHiddenFileId(A) && !1 !== e._isVisible(A) && !e._isTransparent(A) }, Vy.prototype._isPickingEffectEnabled = function () { return !1 }, Vy.prototype.getPickingNodeGenerator = function () { return this.pickingNodeGenerator || (this.pickingNodeGenerator = new Oy(this)), this.pickingNodeGenerator }, Vy.prototype.setCloneComponentMaterialsByKey = function (A, e, t) { var i = this.meshes[A][0]; if (!i) return { result: !1, message: "mesh isn`t exist", code: -1 }; if (!i.byClone) return { result: !1, message: "mesh isn`t qualified", code: -2 }; var o = 0 === t || Boolean(t); if (Array.isArray(e) || (e = [e]), o && (Array.isArray(t) || (t = [t])), Array.isArray(i.material)) if (o) { var n = 0, r = !0, a = !1, s = void 0; try { for (var l, c = t[Symbol.iterator](); !(r = (l = c.next()).done); r = !0) { var h = l.value; if (!i.material[h] || !e[n]) break; i.material[h] = e[n], n += 1 } } catch (A) { a = !0, s = A } finally { try { r || null == c.return || c.return() } finally { if (a) throw s } } } else { var d = 0, p = !0, g = !1, u = void 0; try { for (var f, m = e[Symbol.iterator](); !(p = (f = m.next()).done); p = !0) { var C = f.value; if (!i.material[d]) break; i.material[d] = C, d += 1 } } catch (A) { g = !0, u = A } finally { try { p || null == m.return || m.return() } finally { if (g) throw u } } } else i.material = e[0] }, Vy.prototype.getModelManager = function () { return this.viewer.modelManager }; var Gy = function () { this.domElement = null, this.camera = null, this.highlightManager = null, this.controller = document.getElementById("viewerController"), this.countRenderRequest = 0, this.maxCountRenderRequest = 1e4, this.rendering = !1, this.incrementRenderHandle = 0, this.callbacks = {}, this.tempBox = new aA, this.tempVector3 = new y, this.enableCameraNearFar = !0, this.currentHomeView = Uc.Home, this.initialView = Uc.Home, this.filter = new xu, this.modelManager = new ly(this.filter, this), this.isRecalculationPlanes = !1, this.calculationPlanesBind = this.calculationPlanes.bind(this), this.addRenderFinishedListener(this.calculationPlanesBind), this.uuid = "", this.transitionAnimationState = !0, this.animator = new dp, this._renderStateChanged = !1; var A = this; this._renderTimer = null, this.blinkHandle = 0, this.needCheckTilesDataChange = !1, this.clock = new as, this.rendererManager = new Ly(this), this.cameraStateWithFrustum = !1, this.checkNeedRender = function () { (A.needRender || A.modelManager.needUpdateAnimation()) && (A.needRender = vc.continueRender || !1, A.modelManager.updateAnimation(), A._render()), A._renderTimer = requestAnimationFrame(A.checkNeedRender) }, this.checkNeedApplyFilter = function () { A.needApplyFilter && (A.needApplyFilter = !1, A.modelManager.applyFilter(), A.render()), A._applyFilterTimer = requestAnimationFrame(A.checkNeedApplyFilter) }, this.blink = {} }; Object.assign(Gy.prototype, Ld.prototype), Object.assign(Gy.prototype, { constructor: Gy, addRenderListener: function (A) { this.addEventListener("render", A) }, removeRenderListener: function (A) { this.removeEventListener("render", A) }, onRenderListener: function () { this.dispatchEvent("render") }, addRenderFinishedListener: function (A) { this.addEventListener("renderFinished", A) }, removeRenderFinishedListener: function (A) { this.removeEventListener("renderFinished", A) }, onRenderFinishedListener: function () { this.dispatchEvent("renderFinished") }, removeAllListeners: function () { this.removeAllEventListener() }, destroy: function () { if (this.stopRedner(), this.stopApplyFilter(), this.removeAllListeners(), this.controlManager.unregisterDomEventListeners(this.domElement), this.renderer) { var A = document.getElementById(this.uuid); this.domElement.contains(this.getRenderer().domElement) && this.domElement.removeChild(A) } this.domElement = null, this.renderSettings.canvas = null, this.renderSettings.context = null, this.renderSettings = null, this.rendererManager.destroy(), this.rendererManager = null, this.camera = null, this.defaultCamera = null, this.cameraControl.destroy(), this.cameraControl = null, this.controlManager.destroy(), this.modelManager.destroy(), this.modelManager = null, this.controlManager = null, this.tmpBox = null, this.filter = null, this.calculationPlanesBind = null, this.animator = null }, init: function (A) { var e = this; e.uuid = a.generateUUID(), this.domElement = A, this.resetBackgroundColor(); var t = { alpha: !0, preserveDrawingBuffer: !0, antialias: !0, depth: !0, maxDrawCacheNum: vc.maxDrawCacheNum, logarithmicDepthBuffer: !1, stencil: !0 }; vc.logarithmicDepthBuffer && (t.logarithmicDepthBuffer = !0), vc.DisableAntialias && (t.antialias = !1); var i = null; try { (i = document.createElement("canvas")).style.outline = "none", i.getContext("webgl", t) || i.getContext("experimental-webgl", t) || (t.antialias = !1) } catch (A) { return !1 } Tu.initializeUnitInstances(); var o = document.createElement("div"); o.setAttribute("id", e.uuid), o.style.width = "100%", o.style.height = "100%", t.canvas = i, this.renderSettings = t, this.camera = this.defaultCamera = new cp(45, A.offsetWidth, A.offsetHeight, .1, 200 * vc.SceneSize), this.camera.up = new y(0, 0, 1), this.camera.realUp = new y(0, 0, 1), this.camera.lookAt(this.camera.target), this.cameraControl = new mp(this, this.camera, A, (function (A) { e.render(A) })), this.controlManager = new Og, this.controlManager.setControlMode(this, "pick"), this.setOrbitButton("left"), this.setReverseWheelDirection(!1), this.registerDomEventListener(Rc.ON_CONTROL_END, (function () { e.needCheckTilesDataChange = !0 })), this.registerDomEventListener(Rc.ON_CONTROL_ZOOM, (function () { e.needCheckTilesDataChange = !0 })), e.rendererManager.setupRenderer(e.renderSettings), o.appendChild(this.getRenderer().domElement), this.domElement.appendChild(o), this.controlManager.registerDomEventListeners(o), this.startRender(), this.startApplyFilter() }, getDomElement: function () { return this.domElement ? this.domElement : null }, getRendererDomElement: function () { return this.getRenderer() && this.getRenderer().domElement ? this.getRenderer().domElement : null }, render: function () { this.needRender = !0 }, startRender: function () { this._renderTimer = requestAnimationFrame(this.checkNeedRender) }, stopRedner: function () { cancelAnimationFrame(this._renderTimer) }, startApplyFilter: function () { this._applyFilterTimer = requestAnimationFrame(this.checkNeedApplyFilter) }, stopApplyFilter: function () { cancelAnimationFrame(this._applyFilterTimer) }, _render: function (A) { this.rendererManager.render(A) }, incrementRender: function (A) { var e = this, t = this.camera, i = this.modelManager, o = this.getRenderer(), n = this.getScene(); if (this.countRenderRequest += 1, this.countRenderRequest > this.maxCountRenderRequest && (this.countRenderRequest = 0), !this.rendering) { this.rendering = !0, i.calculateCameraModelRelation(t.position), this.ar(), this.cameraControl.updateCamera(), n.updateLights(t); var r = this.controlManager.isUpdateRenderList; o.resetIncrementRender(), o.setObjectListUpdateState(r), this.incrementRenderHandle = requestAnimationFrame(function A(i, r) { var a = i; return function () { o.autoClear = r, e.controlManager.cameraChange ? (o.resetIncrementRender(), o.autoClear = !0, e.controlManager.cameraChange = !1) : o.autoClear = r, o.render(n, t) || a !== e.countRenderRequest ? (e.rendering = !1, a !== e.countRenderRequest ? e.render() : e.onRenderFinishedListener()) : e.incrementRenderHandle = requestAnimationFrame(A(a, !1)) } }(e.countRenderRequest, !0)), r && i.prepareScene(t), this.onRenderFinishedListener(), this.cameraControl.setCameraChanging(!1) } }, fullRender: function (A) { var e = this, t = this.camera, i = this.modelManager, o = this.getRenderer(), n = this.getScene(); this.blinkHandle > 0 && cancelAnimationFrame(this.blinkHandle), function A() { e.calculateNearFar(), e.cameraControl.updateCamera(), n.updateLights(t), i.getBlinkEnabled() && i.updateBlinkMaterial(); var r = n.fillClipPlane && n.fillClipPlane.visible, a = n.clipPlanes && n.clipPlanes.visible && vc.EnableBoxClippingCaps; if (vc.ClippingCaps && (r || a) && vc.EnableClippingCaps) { if (r || a) { var s = n.getFillClipPlane(), l = n.getClipPlanes(), c = e.modelManager.getModelKeys(); i.prepareCapScene(), o.clear(), o.autoClear = !1, r ? (s.capPlane.planeMesh.visible = !0, s.capPlane.lineMesh.visible = !0, l.boxMesh.visible = !1) : (s.capPlane.planeMesh.visible = !1, s.capPlane.lineMesh.visible = !1, l.boxMesh.visible = !0), s.planeHighLightMatrial.visible = !1, l.planeHighLightMatrial.visible = !1, l.planeMaterial.visible = !1, n.overrideMaterial = n.backMaterial; for (var h = {}, d = 0, p = c.length; p > d; d += 1) { var g = c[d], u = e.modelManager.getModel(g); if (h[g] = {}, u) { var f = u._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); h[g][gp.GEOMETRY] = f.visible, f = u._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 }), h[g][gp.WIREFRAME] = f.visible, f = u._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 }), h[g][gp.INSTANCEGEOMETRY] = f.visible, f.visible = !1, f = u._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 }), h[g][gp.INSTANCEWIREFRAMEGEOMETRY] = f.visible, f.visible = !1 } } o.render(n, t), n.overrideMaterial = n.backInstanceMaterial; for (var m = 0, C = c.length; C > m; m += 1) { var y = c[m], v = e.modelManager.getModel(y); if (v) { var I = v._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); I.visible = !1, (I = v._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).visible = !1, (I = v._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 })).visible = h[y][gp.INSTANCEGEOMETRY], (I = v._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 })).visible = h[y][gp.INSTANCEWIREFRAMEGEOMETRY] } } o.render(n, t), n.overrideMaterial = n.frontMaterial; for (var E = 0, B = c.length; B > E; E += 1) { var x = c[E], S = e.modelManager.getModel(x); if (S) { var w = S._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); w.visible = h[x][gp.GEOMETRY], (w = S._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).visible = h[x][gp.WIREFRAME], w = S._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 }), h[x][gp.INSTANCEGEOMETRY] = w.visible, w.visible = !1, w = S._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 }), h[x][gp.INSTANCEWIREFRAMEGEOMETRY] = w.visible, w.visible = !1 } } o.render(n, t), n.overrideMaterial = n.frontInstanceMaterial; for (var M = 0, b = c.length; b > M; M += 1) { var U = c[M], F = e.modelManager.getModel(U); if (F) { var K = F._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); K.visible = !1, (K = F._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).visible = !1, (K = F._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 })).visible = h[U][gp.INSTANCEGEOMETRY], (K = F._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 })).visible = h[U][gp.INSTANCEWIREFRAMEGEOMETRY] } } o.render(n, t), o.render(i.capsScene, t), n.overrideMaterial = null, s.planeHighLightMatrial.visible = !0, l.planeHighLightMatrial.visible = !0, l.planeMaterial.visible = !0; for (var Q = 0, R = c.length; R > Q; Q += 1) { var T = c[Q], k = e.modelManager.getModel(T); if (k) { var D = k._getNodeGroup(gp.GEOMETRY, { globalSpace: !0 }); D.visible = h[T][gp.GEOMETRY], (D = k._getNodeGroup(gp.WIREFRAME, { globalSpace: !0 })).visible = h[T][gp.WIREFRAME], (D = k._getNodeGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 })).visible = h[T][gp.INSTANCEGEOMETRY], (D = k._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { globalSpace: !0 })).visible = h[T][gp.INSTANCEWIREFRAMEGEOMETRY] } } h = null, o.render(n, t) } } else vc.EnableSelectionOutline && e.composer && e.getSelection().length > 0 ? e.composer.render() : (o.setRenderTarget(null), o.clear(), o.render(n, t)); e.onRenderListener(), e.onRenderFinishedListener(), e.cameraControl.setCameraChanging(!1), i.getBlinkEnabled() && (e.blinkHandle = requestAnimationFrame(A)), i.disposeBufferAfterVbo() }() }, resize: function (A, e) { if (this.camera && this.getRenderer()) { var t = this.getDomElement(); t && (t.style.height = e + "px", t.style.width = A + "px"), this.camera.setSize(A, e), this.camera.updateProjectionMatrix(), this.rendererManager.setSize(A, e), this.dispatchEvent({ type: "resize", data: { width: A, height: e } }), this.render() } }, resizeByFrustum: function (A, e) { this.camera && this.getRenderer() && (this.camera.updateProjectionMatrixByFrustum = !0, this.camera.setSizeByFrustum(A, e), this.render(), this.camera.updateProjectionMatrixByFrustum = !1) }, calculateNearFar: function () { this.calculateNearFar2() }, calculateNearFar2: function () { var A = this.getScene(), e = A.getBoundingBoxWorld(), t = this.getRenderer(); if (this.enableCameraNearFar) { var i = this.camera, o = i.position.clone().sub(A.getBoundingBoxWorld().getCenter(new y)).length(), n = A.getBoundingBoxWorld().getSize(new y).length(); if (null !== e && !e.isEmpty()) { e.expandByScalar(1.1); e.applyMatrix4(i.matrixWorldInverse); var r = e.getSize(new y).length() / 1e3, a = 100; 1e-4 > r ? a = .001 : .001 > r ? a = .01 : .01 > r ? a = .1 : .1 > r ? a = 1 : 1 > r && (a = 10); var s = 1, l = 0; e.max.z > 0 && 0 > e.min.z ? (l = -e.min.z, s = Math.min(r / 2, a / 2)) : (l = -e.min.z, s = Math.max(Math.min(r, a), -e.max.z)), t.shadowMap.enabled && (l *= 3, s /= 3), l = Math.max(s + 1, l), .1 > (l = Math.min(l, o + n)) - s && (s /= 2), i.setNearFar(s, l) } } }, resetSelectionColor: function (A, e) { this.modelManager.sceneState.setSelectionColor(A, e) }, calculateMinDistance: function (A, e) { if (Bh.time("计算最小距离"), A === e) { var t = this.getBoundingBoxByIds([A]).getCenter(new y); return { start: t, end: t, minDistance: 0 } } function i(A, e) { for (var t = 0, i = 0, o = 0; 3 > o; o += 1) { var n = A.min.getComponent(o), r = A.max.getComponent(o), a = e.min.getComponent(o), s = e.max.getComponent(o), l = 0; n > s ? l = n - s : a > r && (l = a - r), t += l * l; var c = Math.max(s, r) - Math.min(n, a); i += c * c } return { minDis: Math.sqrt(t), maxDis: Math.sqrt(i) } } var o = new y, n = new y, r = new y; function a(A, e, t, i, o, n, r, a, s) { r.fromBufferAttribute(e, t), a.fromBufferAttribute(e, i), s.fromBufferAttribute(e, o), n && (r.applyMatrix4(n), a.applyMatrix4(n), s.applyMatrix4(n)), A.push(r), A.push(a), A.push(s) } function s(A, e, t) { var i = { start: null, end: null, minDistance: t }, s = A.mesh, l = A.indexInfo, c = s.matrix.clone().multiply(A.matrix), h = s.geometry, d = h.attributes.position, p = l ? l.indexStart : 0, g = h.getIndex().array, u = l ? l.indexStart + l.indexCount : g.length, f = e.mesh, m = e.indexInfo, C = f.matrix.clone().multiply(e.matrix), v = f.geometry, I = v.attributes.position, E = m ? m.indexStart : 0, B = v.getIndex().array, x = m ? m.indexStart + m.indexCount : B.length, S = A.boundingBox, w = e.boundingBox; if (S.intersectsBox(w)) { for (var M = p, b = u; b > M; M += 3) { var U = []; a(U, d, g[M], g[M + 1], g[M + 2], c, o, n, r); var F = Tu.minDistanceBetweenTriToMesh(U, f, m, C); i.minDistance > F.minDistance && (i.minDistance = F.minDistance, i.start = F.start, i.end = F.end) } return i } var K = S.getSize(new y), Q = w.getSize(new y), R = S.min.x - w.max.x, T = S.min.y - w.max.y, k = S.min.z - w.max.z, D = w.min.x - S.max.x, L = w.min.y - S.max.y, N = w.min.z - S.max.z, O = w.min.x > S.min.x ? S.min.x : w.min.x, V = w.min.y > S.min.y ? S.min.y : w.min.y, G = w.min.z > S.min.z ? S.min.z : w.min.z, P = S.max.x > w.max.x ? S.max.x : w.max.x, q = S.max.y > w.max.y ? S.max.y : w.max.y, j = S.max.z > w.max.z ? S.max.z : w.max.z, H = R; switch (T > H && (H = T), k > H && (H = k), D > H && (H = D), L > H && (H = L), N > H && (H = N), H) { case R: O += Q.x / 2, P -= K.x / 2; break; case T: V += Q.y / 2, q -= K.y / 2; break; case k: G += Q.z / 2, j -= K.z / 2; break; case D: O += K.x / 2, P -= Q.x / 2; break; case L: V += K.y / 2, q -= Q.y / 2; break; case N: G += K.z / 2, j -= Q.z / 2 } for (var Y = new aA(new y(O, V, G), new y(P, q, j)), W = [], J = [], z = [], Z = [], X = p, _ = u; _ > X; X += 3) { var $ = []; a($, d, g[X], g[X + 1], g[X + 2], c, new y, new y, new y), z.push($); for (var AA = 0, eA = $.length; eA > AA; AA += 1) if (Y.containsPoint($[AA])) { W.push($); break } } for (var tA = E, iA = x; iA > tA; tA += 3) { var oA = []; a(oA, I, B[tA], B[tA + 1], B[tA + 2], C, new y, new y, new y), Z.push(oA); for (var nA = 0, rA = oA.length; rA > nA; nA += 1) if (Y.containsPoint(oA[nA])) { J.push(oA); break } } W.length || (W = z), J.length || (J = Z); var sA = Tu.minDistanceBetweenTriToTri(W, J); return i.minDistance > sA.minDistance && (i.minDistance = sA.minDistance, i.start = sA.start, i.end = sA.end), i } var l = this.modelManager.getMinDistanceObjects(A, e); if (!l) return -1; var c = [], h = { start: null, end: null, minDistance: Number.POSITIVE_INFINITY }; for (var d in l) { if (!l[d].boundingBox) { var p = this.getBoundingBoxByIds([d]); l[d].boundingBox = p } c.push(l[d]) } if (1 > c[0].length || 1 > c[1].length) return Bh.timeEnd("计算最小距离"), -1; var g = c[0], u = c[1], f = g.length, m = u.length, C = null, v = Number.POSITIVE_INFINITY; if (f > 1 || m > 1) { C = {}; for (var I = 0; f > I; I += 1) for (var E = g[I], B = 0; m > B; B += 1) { var x = u[B]; x.boundingBox = u.boundingBox, E.boundingBox = g.boundingBox; var S = i(E.boundingBox, x.boundingBox); v = S.maxDis > v ? v : S.maxDis, C[I + "_" + B] = S } } for (var w = 0; f > w; w += 1) for (var M = g[w], b = 0; m > b; b += 1) { if (C) { var U = C[w + "_" + b].minDis; if (U > v || U > h.minDistance) continue } var F = u[b]; F.boundingBox = u.boundingBox, M.boundingBox = g.boundingBox; var K = s(M, F, h.minDistance); if (h.minDistance > K.minDistance && (h.minDistance = K.minDistance, h.start = K.start, h.end = K.end), 0 === h.minDistance) return Bh.timeEnd("计算最小距离"), h } return C = null, Bh.timeEnd("计算最小距离"), h }, registerDomEventListeners: function () { this.domElement && this.controlManager.registerDomEventListeners(this.domElement) }, unregisterDomEventListeners: function () { this.domElement && this.controlManager.unregisterDomEventListeners(this.domElement) }, registerEventListener: function (A, e) { this.modelManager.addEventListener(A, e) }, unregisterEventListener: function (A, e) { this.modelManager.removeEventListener(A, e) }, registerCameraEventListener: function (A, e) { this.cameraControl.addEventListener(A, e) }, unregisterCameraEventListener: function (A, e) { this.cameraControl.removeEventListener(A, e) }, registerDomEventListener: function (A, e) { this.controlManager.addEventListener(A, e) }, unregisterDomEventListener: function (A, e) { this.controlManager.removeEventListener(A, e) }, load: function (A) { var e = this; return this.modelManager.load(A, (function () {}), (function (A) { Bh.time("Rendering: "), e.camera.dirty = !0, e.camera.dirty ? e.render() : (e.zoomAll(), e.goToInitialView()), Bh.timeEnd("Rendering: ") })) }, loadWithType: function () {}, loadTiles: function (A) { var e = this; return this.modelManager.loadTiles(A, (function () { void 0 === e._useBatchMerge && (e._useBatchMerge = e.modelManager.shouldUseBatchRendering(), vc.MergeComponent = e._useBatchMerge, e._setupRenderer()) }), (function (A) { Bh.time("Rendering: "), e.camera.dirty = !0, e.camera.dirty ? e.render() : (e.zoomAll(), e.goToInitialView()), Bh.timeEnd("Rendering: ") })) }, unload: function (A) { var e = this.modelManager.unload(A); return e && (vc.UserControlView || this.zoomAll(), this.render()), e }, unloadAll: function () { this.modelManager.unloadAll(), this.render() }, showModel: function (A) { this.modelManager.showModel(A) && this.render() }, hideModel: function (A) { this.modelManager.hideModel(A) && this.render() }, translateModel: function (A) { var e = this._transformModelByKey(A); e && e.switchToTranslateMode() }, rotateModel: function (A) { var e = this._transformModelByKey(A); e && e.switchToRotateMode() }, scaleModel: function (A) {}, showScene: function (A, e) { A && (A.setVisible(e), this.render()) }, clearAll: function () { this.getScene().clearAll() }, restore: function () { this.getFilter().clear(), this.getScene().disableClipPlanes(), this.modelManager.dispatchEvent({ type: Rc.ON_VIEWER_RESTORED }) }, getScene: function () { return this.modelManager.scene }, getCapsScene: function () { return this.modelManager.capsScene }, getControlManager: function () { return this.controlManager }, getUserdataByUserId: function (A) { var e = this.modelManager.getNodeInfosByUserId(A); return e && e instanceof Array ? e[0].userData : null }, getFilter: function () { return this.filter }, getCurrentControlName: function () { return this.controlManager.getCurrentControlName() }, getCurrentControlMode: function () { return this.controlManager.getCurrentControlMode() }, setControlMode: function (A) { this.controlManager.setControlMode(this, A), this.render() }, setControlDefault: function () { this.setControlMode(Gc.PICK) }, getBoundingBoxWorld: function () { return this.getScene().getBoundingBoxWorld() }, getBoundingBox: function () { return this.getScene().getBoundingBox() }, getModel: function (A) { return this.modelManager.getModel(A) }, getModelManager: function () { return this.modelManager }, setModelMatrix: function (A, e) { var t = this.getModel(e); t && t.setModelMatrix(A) }, getModelMatrix: function (A) { var e = null, t = this.getModel(A); return t && (e = t.getModelMatrix()), e }, overturnYAndZaxis: function (A) { var e = this.getModel(A); e && e.overturnYAndZaxis() }, zoomIn: function (A) { void 0 === A && (A = .1), 0 > A && (A = 0), this.cameraControl.zoom(A) }, zoomOut: function (A) { void 0 === A && (A = .1), A > 0 ? A *= -1 : A = 0, this.cameraControl.zoom(A) }, zoomAll: function (A, e, t) { var i = this.getScene().getBoundingBox(); this._zoomToLocalBox(i, A, e, t) }, zoomToBuilding: function (A, e, t) { this.zoomAll(A, e, t) }, zoomToSelection: function (A, e, t) { var i = this.getScene(), o = this.getBoundingBoxByIds(this.modelManager.sceneState.getSelection()); o.isEmpty() && (o = i.getBoundingBox()), !0 === this.getTransitionAnimationState() ? this.animator.setStandardView(Uc.Keep, this, o, A) : this._zoomToLocalBox(o, A, e, t) }, _zoomToLocalBox: function (A, e, t, i) { this.camera.zoomToBox(A, e, t, i), this.cameraControl.update(!0, !0), this.cameraControl.dirtyCamera(!0) }, zoomToBox: function (A, e, t, i) { var o = new aA; A ? (o.copy(A), o.applyMatrix4(this.getScene().getMatrixGlobal())) : o.copy(this.getScene().getBoundingBox()), !0 === this.getTransitionAnimationState() ? this.animator.setStandardView(Uc.Keep, this, o, e) : this._zoomToLocalBox(o, e, t, i) }, zoomToBoxByDirection: function (A, e, t, i) { if (e) { if (e && A) { var o = A.clone(), n = o.getCenter(new y).clone().add(e); o.applyMatrix4(this.getScene().getMatrixGlobal()), n.applyMatrix4(this.getScene().getMatrixGlobal()); var r = n.clone().sub(o.getCenter(new y)); r.length() > 1e-4 ? (r.normalize(), this.camera.realUp.copy(H.DefaultUp), this._zoomToLocalBox(o, t, i, r)) : this._zoomToLocalBox(o, t, i) } } else this.zoomToBox(A, t, i) }, zoomToBoxWithOuterBox: function (A, e, t, i) { if (e) { if (e && A) { var o = A.clone(), n = e.getCenter(new y); o.applyMatrix4(this.getScene().getMatrixGlobal()), n.applyMatrix4(this.getScene().getMatrixGlobal()); var r = n.clone().sub(o.getCenter(new y)); r.length() > 1e-4 ? (r.normalize(), this.camera.realUp.copy(H.DefaultUp), this.controlManager.zoomToBox(this, o, t, i, r)) : this.controlManager.zoomToBox(this, o, t, i) } } else this.zoomToBox(A, t, i) }, getObjectsInBox: function (A, e) { var t = new aA; return t.copy(A), t.applyMatrix4(this.getScene().getMatrixGlobal()), wg.getObjectsInBox(this.getScene(), t, this.modelManager, this, e) }, setStandardView: function (A, e, t, i) { var o = this.camera, n = this.getScene().getBoundingBox(); if (this.transitionAnimationState) this.animator.setStandardView(A, this, n, e, t, i); else { o.setStandardView(A, n); this.camera.zoomToBox(n, e); this.cameraControl.update(!0, !0), i && i() } }, rotateCameraByViewCubeSide: function (A) { this._viewCubeAnimator && (this._viewCubeAnimator.cancelAnimation(), this._viewCubeAnimator = void 0); var e = this.camera, t = this.getScene().getGeometryBoundingBox(), i = new Cp, o = this; i.rotateCameraByViewCubeSide(e, t, A, (function (A, e, t, i) { o.camera.position.copy(t); var n = new y(0, 1, 0); n.applyQuaternion(e), o.camera.up = n, o.camera.realUp = n.clone(), o.camera.lookAt(i), o.camera.target = i, 1 > A || o.camera.quaternion.copy(e), o.cameraControl.update(!0) })), this._viewCubeAnimator = i }, cancelCurrentAnimationByViewCube: function () { this._viewCubeAnimator && (this._viewCubeAnimator.cancelAnimation(), this._viewCubeAnimator = void 0) }, getLineSelectRange: function () { return vc.LineSelectRange }, setLineSelectRange: function (A) { vc.LineSelectRange = A }, _setStandardView: function (A, e) { var t = this.camera, i = this.getScene().getBoundingBox(); t.setStandardView(A, i), t.zoomToBox(i, e) }, setStandardViewWithBox: function (A, e, t, i) { if (e ? e.applyMatrix4(this.getScene().getMatrixGlobal()) : e = this.getScene().getBoundingBox(), this.transitionAnimationState) this.animator.setStandardView(A, this, e, t); else { var o = this.camera; o.setStandardView(A, e), o.zoomToBox(e, t, i), this.cameraControl.update(!0, !0) } }, setTopView: function (A, e, t) { this.setStandardViewWithBox(Uc.Top, A, e, t) }, setInitialView: function (A) { this.initialView = A, this._setStandardView(A) }, goToInitialView: function (A) { this.setStandardView(this.initialView, A, null) }, setHomeView: function (A) { this.currentHomeView = A, this._setStandardView(A) }, getHomeView: function () { return this.currentHomeView }, goToHomeView: function (A) { this.setStandardView(this.currentHomeView, A, null) }, rotateByAxis: function (A, e, t) { var i = t || this.cameraControl.calculatePivot(kc.CENTER, null), o = 2 * Math.PI / 60 / 60 * A; if (e && "x" !== e) { if ("y" !== e) return void Bh.warn("Illegal rotation axis for ViewerImpl.rotateByAxis()."); this.cameraControl.handleRotation(0, -o, i) } else this.cameraControl.handleRotation(-o, 0, i); this.cameraControl.update(!0) }, lookAt: function (A, e, t) { var i = new y; i.subVectors(e, A), this.camera.lookAtEx(e, i, t), this.cameraControl.updateCamera(e), this.render() }, setImageResPath: function (A) { vc.TextureResRoot = A }, setLimitFrameTime: function (A) { vc.IncrementRender && (A > 0 || (A = 30), vc.LimitFrameTime = A) }, limitFrameRate: function (A) { vc.IncrementRender && (A > 0 || (A = 4), vc.LimitFrameTime = 1e3 / A) }, transformCamera: function (A) { return Rd.transformCamera(A, this.modelManager.scene) }, getCamera: function () { var A = this.getScene().getMatrixGlobal(), e = this.cameraControl.getCamera(), t = this.cameraControl.getCameraName(), i = new Qd(t, e.position, e.target, e.up); i = cp.drawingToWorld(i, A); var o = {}; if (this.cameraStateWithFrustum) { var n = 2 * (e.near * Math.tan(.5 * a.DEG2RAD * e.fov) / e.zoom); o = new Qd(t, i.position, i.target, i.up, e.fov, void 0, e.aspect * n, n) } else o = new Qd(t, i.position, i.target, i.up, e.fov, void 0); return JSON.stringify(o) }, setCameraStateWithFrustum: function (A) { this.cameraStateWithFrustum = A }, setCamera: function (A, e, t) { this.camera.dirty = !0; var i = this, o = Rd.parseCameraInfo(A); if (null === o) Bh.log("Invalid camera info string. Fail to set camera."); else if (this.switchToCamera(o.name)) { var n = this.getScene().getMatrixGlobal(), r = cp.worldToDrawing(o, n); if (this.transitionAnimationState) { var a = { position: this.camera.position.clone(), target: this.camera.target.clone(), up: this.camera.realUp.clone() || this.camera.up.clone() }; this.animator.active(a, r, this, (function (A) { i.cameraControl.update(!0, !0) }), (function () { o.frustumWidth && o.frustumHeight && i.resizeByFrustum(o.frustumWidth, o.frustumHeight), t && t() })) } else { var s = new y; s.subVectors(r.target, r.position), this.camera.lookAtEx(r.target, s, r.up), e && this.cameraControl.updateCamera(), o.frustumWidth && o.frustumHeight && (i.cameraControl.update(!0, !0), i.resizeByFrustum(o.frustumWidth, o.frustumHeight)), t && t() } } }, getRenderBufferScreenShot: function (A, e, t, i) { this._render(); var o = this.getRenderer().domElement, n = o.toDataURL("image/png"), r = o.width, a = o.height, s = window.devicePixelRatio || 1, l = e || r / s, c = t || a / s; if (!l || !c) return i ? (i(n), null) : n; var h, d = null, p = null, g = 0, u = 0; if (l > c || l / c > r / a ? (d = l, u = c / 2 - (p = a / r * l) / 2) : (p = c, g = l / 2 - (d = r / a * c) / 2), i) return (h = new Image).onload = function () { var e = document.createElement("canvas"), t = e.getContext("2d"); e.width = l, e.height = c, A && (t.fillStyle = A, t.fillRect(0, 0, l, c)), t.drawImage(h, g, u, d, p); var o = e.toDataURL("image/png"); i(o) }, h.src = n, null; (h = new Image).src = n; var f = document.createElement("canvas"), m = f.getContext("2d"); return f.width = l, f.height = c, A && (m.fillStyle = A, m.fillRect(0, 0, l, c)), m.drawImage(h, g, u, d, p), f.toDataURL("image/png") }, screenShot: function (A, e, t) { var i = this; return this._render(), function () { var o = i.getRenderer().domElement, n = o.toDataURL("image/png"), r = o.width, a = o.height, s = (window, A), l = e; if (!s || !l) return t ? (t(n), null) : n; var c = null, h = null, d = 0, p = 0; if (s > l || s / l > r / a ? (c = s, p = l / 2 - (h = a / r * s) / 2) : (h = l, d = s / 2 - (c = r / a * l) / 2), t) { var g = new Image; return g.onload = function () { var A = document.createElement("canvas"), e = A.getContext("2d"); A.width = s, A.height = l, e.drawImage(g, d, p, c, h); var i = A.toDataURL("image/png"); t(i) }, g.src = n, null } }() }, canvas2image: function (A, e, t, i) { var o = null, n = this; return i ? (this.getRenderBufferScreenShot(A, e, t, (function (A) { i(A), n.render() })), null) : (o = this.getRenderBufferScreenShot(A, e, t), this.render(), o) }, lockAxisZ: function (A, e) { var t = this.cameraControl; if (t) { var i = t.getZenith(), o = this.getBoundingBox().getCenter().clone(); if (A && void 0 !== e || (e = null), e) { var n = e[0], r = e[1]; i > r ? t.handleRotation(0, r - i, o) : n > i && t.handleRotation(0, n - i, o), this.render() } this.cameraControl.lockAxisZ(A), this.cameraControl.setLockAxisZRange(e) } }, isLockedAxisZ: function () { return this.cameraControl.isLockedAxisZ() }, enableTranslucentByDClick: function (A) { vc.EnableDemolishByDClick = A }, enableHitDetection: function (A) { vc.EnableHitDetection = A }, enableRotate: function (A) { jh.NoRotate = !A }, rotateCamera: function (A, e) { this.cameraControl.processRotate(A, e), this.cameraControl.update() }, getActiveCameraInfo: function () { var A = {}; A.up = new y, A.dir = new y; var e = this.camera, t = e.getWorldDirection(new y); return A.up.copy(e.realUp || e.up), A.dir.copy(t), A.quaternion = e.quaternion.clone(), A }, calculationPlanes: function () { if (this.isRecalculationPlanes) { this.isRecalculationPlanes = !1; var A = this.getScene(), e = this.getBoundingBoxByIds(); e.isEmpty() && (e = A.getBoundingBox()), A.getClipPlanes().calculationPlanes(e.getSize(new y), e.getCenter(new y)), this.render() } }, recalculationPlanes: function () { this.isRecalculationPlanes = !0 }, setOctantDepth: function (A) { vc.OctantDepth = A }, resizePool: function (A) { vc.maxObjectNumInPool = A, this.modelManager.updateSceneRenderable(), this.render() }, setCategoriesToHighPriority: function (A, e) { this.modelManager.setCategoriesToHighPriority(A, 0 === e ? "inner" : "outer") }, clearCategoriesFromHighPriority: function (A) { this.modelManager.clearCategoriesFromHighPriority(0 === A ? "inner" : "outer") }, clearAllCategoriesFromHighPriority: function () { this.modelManager.clearAllCategoriesFromHighPriority() }, isolate: function (A, e) { var t = this.getFilter(); switch (e) { case "hide": t.setIsolateConditions(A, Nc.HIDDEN_OTHERS); break; case "translucent": t.setIsolateConditions(A, Nc.TRANSLUCENT_OTHERS); break; default: Bh.warn("no this isolate state : " + e) } }, setIsolateMaterial: function (A) { this.getFilter().setIsolateMaterial(A) }, resetIsolateMaterial: function () { this.getFilter().resetIsolateMaterial() }, setOrbitButton: function (A) { var e = this.controlManager._getControlByName(this, Gc.ORBIT), i = this.controlManager._getControlByName(this, Gc.PICK), o = {}; "left" === A ? o = { ORBIT: t.LEFT, PAN2: t.MIDDLE, PAN: t.RIGHT } : "right" === A && (o = { ORBIT: t.RIGHT, PAN2: t.MIDDLE, PAN: t.LEFT }), e && e.updateButtons(o), i && i.updateButtons(o) }, showPickedInformation: function (A) {}, setOrbitEnabled: function (A) { jh.NoRotate = !0 !== A }, getOrbitEnabled: function () { return !jh.NoRotate }, setSelectPadCallback: function (A) { var e = this.controlManager.getCurrentControlMode(); e && e.selectPad && (e.selectPad.callback = A) }, setDeviceMobile: function (A) { vc.IsMobile = A || !1 }, setPointRotateMode: function (A) { jh.RotatePivotMode = A }, worldToDrawing: function (A) { if (!this.cameraControl) return Bh.warn("camera is not initialized!!!"), null; var e = this.getScene().worldToDrawing(A); return { x: e.x, y: e.y, z: e.z } }, drawingToWorld: function (A) { if (!this.cameraControl) return Bh.warn("camera is not initialized!!!"), null; var e = this.getScene().drawingToWorld(A); return { x: e.x, y: e.y, z: e.z } }, worldToCanvas: function (A) { var e = this.cameraControl; if (!e) return Bh.warn("camera is not initialized!!!"), null; var t = e.getContainerDimensions(); if (!t) return null; var i = e.getCamera(), o = this.getScene().worldToDrawing(A); return Rd.drawingToCanvas(i, o, t.width, t.height) }, canvasToWorld: function (A) { var e = this.cameraControl; if (!e) return Bh.warn("camera is not initialized!!!"), null; var t = e.getContainerDimensions(); if (!t) return null; var i = e.getCamera(), o = this.getScene(), n = Rd.canvasToDrawing(i, A, t.width, t.height), r = o.drawingToWorld(n); return { x: r.x, y: r.y, z: r.z } }, worldToClient: function (A) { var e = this.cameraControl; if (!e) return Bh.warn("camera is not initialized!!!"), null; var t = e.getContainerDimensions(); if (!t) return null; var i = e.getCamera(), o = this.getScene().worldToDrawing(A), n = Rd.drawingToCanvas(i, o, t.width, t.height); return n ? (n.x += t.left, n.y += t.top, n) : null }, worldPointsToClient: function (A, e) { var t = this.cameraControl; if (!t) return Bh.warn("camera is not initialized!!!"), null; var i = t.getContainerDimensions(); if (!i) return null; var o = t.getCamera(), n = this.getScene(), r = n.worldToDrawing(A), a = n.worldToDrawing(e), s = Rd.drawingPointsToCanvas(o, r, a, i.width, i.height); return s ? (s.start.x += i.left, s.start.y += i.top, s.end.x += i.left, s.end.y += i.top, s) : null }, clientToWorld: function (A) { var e = this.cameraControl; if (!e) return Bh.warn("camera is not initialized!!!"), null; var t = e.getContainerDimensions(); if (!t) return null; (n = { x: A.x, y: A.y, z: A.z }).x -= t.left, n.y -= t.top; var i = e.getCamera(), o = this.getScene(), n = Rd.canvasToDrawing(i, n, t.width, t.height), r = o.drawingToWorld(n); return { x: r.x, y: r.y, z: r.z } }, insideCamera: function (A) { var e = this.cameraControl; if (!e) return Bh.warn("camera is not initialized!!!"), !1; var t = this.getScene().worldToDrawing(A); return e.getFrustum().containsPoint(t) }, locateToPointWithParallelEye: function (A) { var e = this.cameraControl; if (!e) return Bh.warn("camera is not initialized!!!"), !1; var t = this.getScene().worldToDrawing(A); e.flyToPointWithParallelEye(t) }, locateToPoint: function (A) { var e = this.cameraControl; if (!e) return Bh.warn("camera is not initialized!!!"), !1; var t = this.getScene().worldToDrawing(A); e.flyToPoint(t) }, enableHover: function (A) { vc.Hover = A }, getObjectsByClientCoordinates: function (A) { return new fp(this).getObjectsByClientCoordinates(A) }, getIBLManager: function () { return this.IBLManager }, loadEnvMap: function (A) { for (var e = ["posx.hdr", "negx.hdr", "posy.hdr", "negy.hdr", "posz.hdr", "negz.hdr"], t = [], i = 0; 6 > i; i += 1) t.push("/" + A + "/" + e[i]); var o = this; (new(void 0)).load(1015, t, (function (A) { o.environmentCubeMap = A, o.modelManager.updateMaterialsValue("envMap", A), o.render() })) }, setEnvMapIntensity: function (A) { this.modelManager.updateMaterialsValue("envMapIntensity", A), this.setRenderStateChanged(!0), this.render() }, closeEnvMap: function () { this.modelManager.updateMaterialsValue("envMap", null), this.render() }, enableSSAO: function (A) { return !vc.IncrementRender && (vc.EnableRenderPass = A, vc.SSAO = A, this.setRenderStateChanged(!0), this.render(), !0) }, switchNewStyleMaterial: function (A) { this.modelManager.switchNewStyleMaterial(A), this.setRenderStateChanged(!0), this.render() }, enableColorWithoutLight: function (A) { this.modelManager.enableColorWithoutLight(A), this.setRenderStateChanged(!0), this.render() }, addPlane: function (A, e, t, i) { var o = new y; o.addVectors(new y(A.x, A.y, A.z), new y(e.x, e.y, e.z)), o.multiplyScalar(.5); var n = new Ue(new et(e.x - A.x, e.y - A.y), new jA({ side: 2, transparent: !0, depthTest: !0 })); n.position.copy(o), n.renderOrder = 10, this.getScene().getOrCreateGroup(gp.CUSTOMPLANE, { globalSpace: !0 }).add(n), n.updateMatrixWorld(!0); var r = this; return (new Aa).load(t, (function (A) { n.material.map = A, n.material.needsUpdate = !0, r.setRenderStateChanged(!0), i && i() })), n }, removePlane: function (A) { var e = this.getScene().getGroup(gp.CUSTOMPLANE); e && e.remove(A) }, clearPlane: function () { var A = this.getScene().getGroup(gp.CUSTOMPLANE); A && A.clear() }, enableTextureMapping: function (A) { vc.EnableTextureMapping = A }, enableLightmap: function (A) { vc.EnableLightmap !== A && (vc.EnableLightmap = A) }, setLightmapIntensity: function (A) { vc.LightmapIntensity !== A && (vc.LightmapIntensity = A) }, setReverseWheelDirection: function (A) { jh.ReverseWheelDirection = Boolean(A) }, getReverseWheelDirection: function () { return jh.ReverseWheelDirection }, setMovementSpeedRate: function (A) { void 0 !== A && (jh.MovementSpeedRate = A) }, getMovementSpeedRate: function () { return jh.MovementSpeedRate }, moveTo: function (A, e, t) { var i = this.controlManager.control; i && i.moveTo(A, e, t) }, rotateTo: function (A) { var e = this.controlManager.control; e && e.rotateTo(A) }, enableOcclusionTranslucent: function (A) { vc.OcclusionTranslucentEnabled = Boolean(A) }, setOcclusionOpacity: function (A) { vc.OcclusionOpacity = A }, setOcclusionDistanceToCamera: function (A) { vc.OcclusionDistanceToCamera = A }, fitAndRotateBySelection: function () { this.cameraControl && this.cameraControl.fitAndRotateBySelection() }, setRoamingWalkHeight: function (A, e, t) { if (Array.isArray(A)) { var i = this.cameraControl; if (!i) return Bh.log("camera is not initialized!!!"), !1; if (e > 0 || (e = 1750), void 0 === t && (t = !0), i.setCameraHeight(A, e), t) { var o = this.controlManager.getCurrentControl(); o && o.name === Gc.WALK && o.update && i.flyOnWorld() } } else Bh.log("elevations is not arry") }, setRoamingWalkAbsoluteHeight: function (A, e) { var t = this.cameraControl; if (!t) return Bh.log("camera is not initialized!!!"), !1; if (void 0 === e && (e = !0), t.setCameraAbsoluteHeight(A), e) { var i = this.controlManager.getCurrentControl(); i && i.name === Gc.WALK && i.update && t.flyOnWorld() } }, cameraToWorld: function (A) { return this.camera ? cp.drawingToWorld(A, this.getScene().getMatrixGlobal()) : null }, cameraToDrawing: function (A) { return this.camera ? cp.worldToDrawing(A, this.getScene().getMatrixGlobal()) : null }, clearSelection: function () { this.modelManager.sceneState.clearSelection() }, clearModelSelection: function () { this.modelManager.modelState.clearSelection() }, addToSelection: function (A) { this.modelManager.sceneState.addSelection(A) }, addToModelSelection: function (A) { this.modelManager.modelState.addSelection(A) }, removeFromSelection: function (A) { this.modelManager.sceneState.removeSelection(A) }, removeFromModelSelection: function (A) { this.modelManager.modelState.removeSelection(A) }, setSelection: function (A) { this.modelManager.sceneState.setSelection(A) }, setModelSelection: function (A) { this.modelManager.modelState.setSelection(A) }, getSelection: function () { return this.modelManager.sceneState.getSelection() }, getModelSelection: function () { return this.modelManager.modelState.getSelection() }, setSelectionColor: function (A, e) { var t = A, i = e; A instanceof Xh && (t = A.getHex(), i = A.getAlpha()), this.modelManager.sceneState.setSelectionColor(t, i); var o = this.rendererManager.getPickingEffecter(); o && o.setSelectionColor(t, i) }, getSelectionColor: function () { return this.modelManager.sceneState.getSelectionColor() }, restoreSelectionColor: function () { this.setSelectionColor(new Xh(vc.SelectionColor.color, vc.SelectionColor.opacity)) }, setModelSelectionColor: function (A, e) { this.modelManager.modelState.setSelectionColor(A, e) }, getScreenCoordFromSceneCoordAndCheckCover: function (A) { var e = void 0, t = !1; if ("[object Array]" == Object.prototype.toString.call(A)) e = new y(A[0], A[1], A[2]); else { if ("[object Object]" != Object.prototype.toString.call(A)) return; e = new y(A.x, A.y, A.z) } if (e) { var i = this.camera.position, o = i.distanceTo(e), n = new Ds(i, e.clone().sub(i).normalize()), r = this.cameraControl.getIntersectContext({ x: 100, y: 100 }), a = this.cameraControl.intersector.getIntersectByRay(r, n.ray); if (!a) return; t = o - 300 > i.distanceTo(a.point) } return { screenCoord: this.getScreenCoordFromSceneCoord(e), cover: t } }, pickByPoint: function (A) { var e = this.cameraControl; if (!1 === e.enabled) return !1; var t = new s(A.x, A.y), i = e.getIntersectContext(t), o = e.intersector.pick(i), n = this.getScene(); if (o) { n.intersectToWorld(o, this); var r = {}; return r.faceIndex = o.faceIndex, r.componentKey = o.userId, r.worldPosition = o.worldPosition, r.worldBoundingBox = o.worldBoundingBox, r } return null }, pickByPointWithNormal: function (A) { var e = this.getScene(), t = this.cameraControl; if (!1 === t.enabled) return null; var i = new s(A.x, A.y), o = t.getIntersectContext(i), n = t.intersector.pick(o); if (!n) return null; e.intersectToWorld(n, this), n.cx = i.x, n.cy = i.y; var r = []; r.push(n); var a = e.getMatrixGlobal(), l = n.face.normal.clone(), c = new CA(n.worldPosition.clone(), l); c.applyMatrix4(a); var h = t.intersector.getIntersectByRay(o, c); return h && (e.intersectToWorld(h, this), r.push(h)), r }, toDefaultOrthographicCamera: function (A) { this.switchToCamera(Ec.ORTHOGRAPHIC), (A || void 0 === A) && this.render() }, toDefaultPerspectiveCamera: function (A) { this.switchToCamera(Ec.PERSPECTIVE), (A || void 0 === A) && this.render() }, getCameraNameList: function () { return ["pesp", "orth"].concat(this.modelManager.getCameraNameList()) }, switchToCamera: function (A) { var e = !0; if (A === Ec.PERSPECTIVE) this.camera = this.defaultCamera, this.camera.toPerspective(); else if (A === Ec.ORTHOGRAPHIC) this.camera = this.defaultCamera, this.camera.toOrthographic(); else { var t = this.modelManager.getCamera(A); t ? this.camera = t : (Bh.log("Fail to switch because not found camera '" + A + "'"), e = !1) } return e && this.cameraControl.setCamera(this.camera), this.render(), e }, getNumOfElements: function () { return this.modelManager.getNumOfElements() }, getNumOfRenderables: function () { return this.modelManager.getNumOfRenderables() }, getNumOfTriangles: function () { return this.modelManager.getNumOfTriangles() }, setLightPreset: function (A) { this.getScene().setLightPreset(A), this.setRenderStateChanged(!0) }, getLightPreset: function () { return this.getScene().getLightPreset() }, setLightIntensityFactor: function (A) { this.getScene().setLightIntensityFactor(A), this.render() }, setAmbientLightIntensity: function (A) { this.getScene().setAmbientLightIntensity(A), this.render() }, getAmbientLightIntensity: function () { return this.getScene().getAmbientLightIntensity() }, setWalkHeightLocked: function (A) { var e = this.controlManager.getCurrentControl(); e && e.name === Gc.WALK && e.setHeightLocked(A) }, setWalkLookMousePressed: function (A) { var e = this.controlManager.getCurrentControl(); e && e.name === Gc.WALK && e.setDragLook(A) }, setWalkSpeedRate: function (A) { var e = this.controlManager.getCurrentControl(); e && e.name === Gc.WALK && (jh.MovementSpeedRate = A) }, getWalkSpeedRate: function () { return jh.WalkSpeedRate }, setDrawingStyle: function (A) { vc.DrawingStyle = A, this.modelManager.applyFilter(), this.setRenderStateChanged(!0) }, getWireframeColor: function (A) { var e = this.modelManager; if (A && e.models[A]) return e.models[A].wireframeManager.getWireframeColor(); for (var t in e.models) { return e.models[t].wireframeManager.getWireframeColor() } }, setWireframeColor: function (A, e) { var t = this.modelManager; if (e && t.models[e]) t.models[e].wireframeManager.setWireframeColor(new LA(A), A.a || 1); else for (var i in t.models) t.models[i].wireframeManager.setWireframeColor(new LA(A), A.a || 1); this.setRenderStateChanged(!0) }, restoreWireframeColor: function (A) { var e = this.modelManager; if (A && e.models[A]) e.models[A].wireframeManager.restoreWireframeColor(); else for (var t in e.models) e.models[t].wireframeManager.restoreWireframeColor(); this.setRenderStateChanged(!0) }, setInstanceMode: function (A) { !vc.Instance === A && (vc.Instance = A, this.getScene().getOrCreateGroup(gp.INSTANCEGEOMETRY, { globalSpace: !0 }).visible = !!A) }, setTransitionAnimationState: function (A) { this.transitionAnimationState = A }, getTransitionAnimationState: function () { return this.transitionAnimationState }, clipPoint: function (A) { var e = this.getRenderer().clippingPlanes; if (e && e.length > 0) for (var t = 0; e.length > t; t += 1) { var i = e[t]; if (A.dot(i.normal) < -i.constant) return !0 } return !1 }, setExposureShift: function (A) { vc.ToneMapping = 1, this.modelManager.updateMaterialsValue("shift", A > 0 ? -.4 * A + .5 : -4 * A + .5), this.setRenderStateChanged(!0) }, setRenderStateChanged: function (A) { this.modelManager && this.modelManager.setRenderStateChanged(A) }, isRenderStateChanged: function () { return this.modelManager._renderStateChanged }, getComponentInfoByUserId: function (A) { return this.modelManager.getComponentInfoByUserId(A) }, getBoundingBoxByIds: function (A) { var e = new aA; if (Array.isArray(A)) { for (var t = 0; A.length > t; t += 1) if (!this.modelManager.isHiddenUserId(A[t])) { var i = this.getModelByComponentKey(A[t]), o = this.getComponentInfoByUserId(A[t]); if (o) if (i) { var n = o.boundingBox.clone().applyMatrix4(i.getModelMatrix()); e.union(n) } else e.union(o.boundingBox) } } else for (var r in A) if (!this.modelManager.isHiddenUserId(r)) { var a = this.getModelByComponentKey(r), s = this.getComponentInfoByUserId(r); if (s) if (a) { var l = s.boundingBox.clone().applyMatrix4(a.getModelMatrix()); e.union(l) } else e.union(s.boundingBox) } return e.isEmpty() || e.applyMatrix4(this.getScene().getMatrixGlobal()), e }, setConditionsOnDemandLoad: function (A, e, t, i) { e = e || !0, this.modelManager.setConditionsOnDemandLoad(A), e && this.modelManager.loadGeopkOnDemand(t, i) }, loadGeopkOnDemand: function (A, e, t, i) { var o = this; this.modelManager.loadGeopkOnDemand(A, e, t, (function () { var A = o.modelManager.getNodeInfos(); o.filter.reinitFilterManager(A), o.setRenderStateChanged(!0), o.render(), i && i() })) }, unloadGeopkOnDemand: function (A, e) { var t = this; this.filter._hasVisibleFilter() && (this.filter.showByIds(A), this.filter.removeFromIsolateList(A)), this.filter._hasOverrideMaterialFilter() && (this.filter.addToOverrideListByColor(A, null), this.filter.addToWireframeByWireframe(A, null)), this.filter._hasTransparentFilter() && this.filter.opaqueByIds(A), this.removeFromSelection(A); for (var i = 0, o = A.length; o > i; i += 1) ; this.modelManager.unloadGeopkOnDemand(A, (function () { var A = t.modelManager.getNodeInfos(); t.filter.reinitFilterManager(A), t.setRenderStateChanged(!0), t.render(), e && e() })) }, getBoundingBoxOnDemand: function () { return this.modelManager.getBoundingBoxOnDemand() }, getScreenCoordFromSceneCoord: function (A) { var e = []; if (A.isVector3) { var t = A.clone(); t.applyMatrix4(this.camera.matrixWorldInverse); var i = t.z > 0; return t.applyMatrix4(this.camera.projectionMatrix), e[0] = (t.x + 1) * this.domElement.clientWidth / 2, e[1] = (1 - t.y) * this.domElement.clientHeight / 2, e[2] = i ? 1 : 0, e } if (Array.isArray(A)) { var o = new y(A[0], A[1], A[2]); o.applyMatrix4(this.camera.matrixWorldInverse); i = o.z > 0; return o.applyMatrix4(this.camera.projectionMatrix), e[0] = (o.x + 1) * this.domElement.clientWidth / 2, e[1] = (1 - o.y) * this.domElement.clientHeight / 2, e[2] = i ? 1 : 0, o = null, e } }, _checkDataChanged: function () { var A = this.modelManager; A.hasModelDataReady() && (this.getFilter().isStateChanged() || this.isRenderStateChanged()) && (this.isRenderStateChanged() && this.setRenderStateChanged(!1), this.getFilter().isStateChanged() && this.getFilter().disableStateChanged(), this.needApplyFilter = !0), this.needCheckTilesDataChange && (this.needCheckTilesDataChange = !1, A.checkTilesDataChanged(this.camera, this.getRenderer())) }, _checkLayerDataLoading: function () { return !(!this.modelManager.isLayerData() || !this._layerDataLoading) && (this.getFilter().isStateChanged() && this.getFilter().disableStateChanged(), !0) }, setOutlineEdgeColor: function (A) { this.rendererManager.composer && this.rendererManager.composer.setOutlineEdgeColor(A); var e = this.rendererManager.getPickingEffecter(); e && e.setLineSelectionColor(A.getHex(), A.opacity) }, getOutlineEdgeColor: function () { if (this.rendererManager.composer) return this.rendererManager.composer.getOutlineEdgeColor(); var A = this.rendererManager.getPickingEffecter(); return A ? A.getLineSelectionColor() : void 0 }, restoreOutlineEdgeColor: function (A) { this.setOutlineEdgeColor(new Xh(vc.SelectionColor.color, vc.SelectionColor.opacity)) }, enableSelectedColorIsAffectedByLight: function (A) { vc.InfluencedByLight = A, vc.InfluencedByLight ? delete this.modelManager.getSceneState().selectionMaterial.defines.NOTAFFECTEDBYLIGHT : this.modelManager.getSceneState().selectionMaterial.defines.NOTAFFECTEDBYLIGHT = "" }, enableLogarithmicDepthBuffer: function (A) { vc.logarithmicDepthBuffer !== A && (vc.logarithmicDepthBuffer = A, this.renderSettings.logarithmicDepthBuffer = A, this.rendererManager.resetupRenderer(this.renderSettings || {}), this._render(), this.updateShadowLight()) }, enableBlinkComponents: function (A) { this.modelManager.isBlinkPermited() || (this.modelManager.enableBlink(A), this.render()) }, setBlinkComponentsById: function (A) { this.modelManager.isBlinkPermited() || this.modelManager.sceneState.setBlinkComponentsById(A) }, addBlinkComponentsById: function (A) { this.modelManager.isBlinkPermited() || this.modelManager.sceneState.addBlinkComponentsById(A) }, clearBlinkComponentsById: function (A) { this.modelManager.isBlinkPermited() || this.modelManager.sceneState.clearBlinkComponentsById(A) }, clearAllBlinkComponents: function () { this.modelManager.isBlinkPermited() || this.modelManager.sceneState.clearAllBlinkComponents() }, getBlinkComponents: function () { return this.modelManager.isBlinkPermited() ? null : this.modelManager.sceneState.getBlinkComponents() }, setBlinkColor: function (A) { this.modelManager.isBlinkPermited() || this.modelManager.setBlinkColor(A.color, A.opacity) }, setBlinkIntervalTime: function (A) { this.modelManager.isBlinkPermited() || this.modelManager.setBlinkIntervalTime(A) }, getModelByComponentKey: function (A) { var e = null; for (var t in this.modelManager.models) if (this.modelManager.models.hasOwnProperty(t) && (e = this.modelManager.getModel(t)) && e.isLoaded() && e.hasComponent(A)) return e }, getSceneState: function () { return { state: this.getFilter().saveState(), camera: this.getCamera(), selection: this.getSelection(), modelSelection: this.getModelSelection() } }, setSceneState: function (A) { void 0 !== A.camera && "object" !== lc(A.camera) || (A.camera = JSON.stringify(A.camera)), this.setCamera(A.camera, !1), this.setSelection(A.selection), this.setModelSelection(A.modelSelection), this.getFilter().loadState(A.state) }, setComponentPositionByKey: function (A, e) { var t = (new y).fromArray(e), i = (this.getModelManager(), new M, this.modelManager.getComponent(A)); if (i && i.length >= 1) { for (var o = new aA, n = 0, r = i.length; r > n; n += 1) { o && o.union(i[n].boundingBox) } var a = new y; o.getCenter(a); var s = this.getModelByComponentKey(A); if (s) { var l = s.getModelMatrix(); if (l) { var c = new M; c.getInverse(l), t.applyMatrix4(c) } } t.sub(a); var h = (new M).makeTranslation(t.x, t.y, t.z); this.componentApplyMatrix2(A, h, !0), this.updateTransformControlIfBindingComKeyEqual(A) } }, setBackgroundColor: function (A, e) { if (e) this.setBackgroundColors([{ color: A, stop: "0%" }, { color: e, stop: "100%" }], "180deg"); else { var t = this.getDomElement(); t && (t.style.background = A.getRGBA()) } }, setBackgroundColors: function (A, e) { var t = this.getDomElement(), i = e || "0deg", o = []; if (A && A.length > 0) { 1 === A.length && this.setBackgroundColor(A[0].color || A[0]); for (var n = 0; A.length > n; n += 1) { var r = A[n].color.getRGBA() + " " + A[n].stop; o.push(r) } var a = i + ", " + o.join(","); t && (t.style.background = "linear-gradient(" + a + ")") } }, resetBackgroundColor: function () { this.getDomElement() && (this.domElement.style.background = "linear-gradient(rgb(135,206,250) 0%, rgb(245, 245, 245) 100%)") }, getComponentLocalMatrixByKey: function (A) { if (A) { var e = this.modelManager.getComponent(A); if (e && e.length > 0 && e[0].matrix) return e[0].matrix.clone() } }, getComponentWorldMatrixByKey: function (A) { var e = this.getComponentLocalMatrixByKey(A); if (e) { var t = this.getModelByComponentKey(A); if (t) { var i = t.getModelMatrix(); e.premultiply(i) } return e } }, setComponentLocalMatrixByKey: function (A, e) { if (A) { var t = this.modelManager.getComponent(A); if (t && t.length > 0) { var i = t[0].mesh; return i.matrix.fromArray(e), i.updateMatrixWorld(!0), this.render(), !0 } } return !1 }, _transformComponentByKey: function (A, e, t) { var i = this; if (A) { var o = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); if (o && o.bindingComponentKey === A) return o; var n = this.getModelByComponentKey(A), r = function (A) { i.render() }, a = function (t) { "string" == typeof A && t.matrix && t.object && (i.componentApplyMatrix2(A, t.matrix, !1), i.getScene().expandBoundingBoxWorldBy(t.object)), e && e(A) }; if ("string" != typeof A) { if (A instanceof H) { var s = A; return this.controlManager.enableTool(this, Pc.COMPONENT_TRANSFORM), (o = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM)).transformComponent(s, r, a), o.bindingComponentKey = void 0, o } return } var l = this.modelManager.getComponent(A); if (l && l.length > 0) { var c = i.externalComponentManager; c && c.getNodeInfosByUserId(A) && c.recalculateComponentBoundingbox(A); for (var h = new aA, d = 0, p = l.length; p > d; d += 1) h.union(l[d].transformationOriginalBoundingBox ? l[d].transformationOriginalBoundingBox : l[d].boundingBox); var g = new Ue(Tu.getGeometryFromBox3(h)); if (g.matrixAutoUpdate = !1, l[0].transformation && g.matrix.copy(l[0].applyMatrix), n) { var u = n.getModelMatrix(); if (u) { var f = new Xi; f.matrixAutoUpdate = !1, f.matrix.copy(u), f.updateMatrixWorld(!0), f.add(g) } } return g.updateMatrixWorld(!0), this.controlManager.enableTool(this, Pc.COMPONENT_TRANSFORM), (o = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM)).transformComponent(g, r, a, void 0, (function (e) { if (n) n.calculateBoundingBox(); else { var o = i.externalComponentManager; o && o.getNodeInfosByUserId(A) && o.calculateBoundingBox() } i.modelManager.updateSceneBoundingBox(), t && t(A) })), o.bindingComponentKey = A, this.modelManager.updateTransformComponentList(A), o } } }, _transformModelByKey: function (A) { if (A && "string" == typeof A) { var e = this.getModel(A); if (e && e.isLoaded() && e.isVisible()) { var t = this, i = e.getBoundingBoxWorld(); if (i.isEmpty()) return; var o = new Ue(Tu.getGeometryFromBox3(i)); o.matrixAutoUpdate = !1, o.updateMatrixWorld(!0), this.controlManager.enableTool(this, Pc.COMPONENT_TRANSFORM); var n = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); return n.transformComponent(o, (function (A) { t.render() }), (function (A) { A && A.matrix && e.applyModelMatrix(A.matrix) })), n } } }, translateComponentByKey: function (A, e, t) { var i = this._transformComponentByKey(A, e, t); i && i.switchToTranslateMode() }, scaleComponentByKey: function (A, e, t) { var i = this._transformComponentByKey(A, e, t); i && i.switchToScaleMode() }, rotateComponentByKey: function (A, e, t) { var i = this._transformComponentByKey(A, e, t); i && i.switchToRotateMode() }, cancelTransformComponent: function (A) { var e = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); e && (A && this.restoreComponentTransform(), e.cancelTransformComponent(), this.controlManager.disableTool(e.name)) }, cancelTransformComponentByKey: function (A) { if (A && "string" == typeof A) { var e = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); e && e.bindingComponentKey === A && (e.cancelTransformComponent(), this.controlManager.disableTool(e.name)) } }, restoreComponentTransform: function () { var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); A && (A.bindingComponentKey ? this.restoreComponentTransformByKey(A.bindingComponentKey) : A.restoreComponentOriginalTransformState() && this.render()) }, restoreComponentTransformByKey: function (A) { A && "string" == typeof A && (this.resetComponentMatrix(A), this.updateTransformControlIfBindingComKeyEqual(A)) }, updateTransformControlIfBindingComKeyEqual: function (A) { var e = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); e && e.bindingComponentKey === A && (e.cancelTransformComponent(), this._transformComponentByKey(A)) }, increaseComponentTransformControlSize: function () { var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); A && A.increaseTransformControlSize() && this.render() }, decreaseComponentTransformControlSize: function () { var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); A && A.decreaseTransformControlSize() && this.render() }, setComponentTransformSpaceToLocalSpace: function () { var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); A && A.setTransformSpaceToLocalSpace() && this.render() }, setComponentTransformSpaceToWorldSpace: function () { var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); A && A.setTransformSpaceToWorldSpace() && this.render() }, switchComponentTransformSpaceBetweenLocalAndWorld: function () { var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); A && A.switchTransformSpace() && this.render() }, showComponentTransformOnAxis: function (A) { var e = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); e && e.showTransformOnAxis(A) && this.render() }, hideComponentTransformOnAxis: function (A) { var e = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); e && e.hideTransformOnAxis(A) && this.render() }, disableComponentTransform: function () { var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); A && A.disableTransform() && this.render() }, enableComponentTransform: function () { var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); A && A.enableTransform() && this.render() }, componentApplyMatrix: function (A, e) { var t = this.getModelManager(), i = this.getModelByComponentKey(A); if (i) { t.explosionList[A] || (t.explosionList[A] = !0); var o = i._getHandler(); if (o instanceof MC) { var n = this.modelManager.getComponent(A); if (n && n[0] && n[0].mesh) { var r = n[0].mesh; if (r) { r.userData.originalMatrix || (r.userData.originalMatrix = r.matrixWorld.clone()); var a = new y(r.userData.originalMatrix.elements[12], r.userData.originalMatrix.elements[13], r.userData.originalMatrix.elements[14]), s = new M; s.setPosition(a); var l = new M; l.setPosition(a.multiplyScalar(-1)), r.matrixWorld.multiply(l).multiply(e).multiply(s) } } } else if (o instanceof Yf) { var c = i.getModelDescriptor(), h = c.mapNodeInfoByCategory[1], d = c.mapNodeInfoByCategory[0]; if (h.hasOwnProperty(A)) for (var p = h[A], g = 0; p.length > g; g += 1) { var u = p[g], f = u.mesh; if (f) { var m = u.index, C = f.geometry.attributes.position; Tu.applyMatrix4ToBuffer(e, C.array, m.positionStart, m.positionStart + m.positionCount), C.needsUpdate = !0 } } if (d.hasOwnProperty(A)) for (var v = d[A], I = o.instancedManager.meshManager, E = 0; v.length > E; E += 1) for (var B = v[E], x = I.getMeshIdByNodeInfo(B), S = I.nodeIdxMapFromUserId[A][x], w = 0, b = S.length; b > w; w += 1) { var U = S[w], F = I.instanceGeometryMap[x][w], K = F.getAttribute("mcol0"), Q = F.getAttribute("mcol1"), R = F.getAttribute("mcol2"), T = F.getAttribute("mcol3"); B.transformation || (B.transformation = !0, B.transformationOriginalMatrix = B.matrix.clone()); var k = (new y).fromArray(B.transformationOriginalMatrix.elements, 12), D = new M; D.setPosition(k); var L = new M; L.setPosition(k.multiplyScalar(-1)); var N = new M; N.fromArray([K.array[3 * U], K.array[3 * U + 1], K.array[3 * U + 2], 0, Q.array[3 * U], Q.array[3 * U + 1], Q.array[3 * U + 2], 0, R.array[3 * U], R.array[3 * U + 1], R.array[3 * U + 2], 0, T.array[3 * U], T.array[3 * U + 1], T.array[3 * U + 2], 1], 0), N.multiply(L).multiply(e).multiply(D), K.array[3 * U] = N.elements[0], K.array[3 * U + 1] = N.elements[1], K.array[3 * U + 2] = N.elements[2], K.needsUpdate = !0, Q.array[3 * U] = N.elements[4], Q.array[3 * U + 1] = N.elements[5], Q.array[3 * U + 2] = N.elements[6], Q.needsUpdate = !0, R.array[3 * U] = N.elements[8], R.array[3 * U + 1] = N.elements[9], R.array[3 * U + 2] = N.elements[10], R.needsUpdate = !0, T.array[3 * U] = N.elements[12], T.array[3 * U + 1] = N.elements[13], T.array[3 * U + 2] = N.elements[14], T.needsUpdate = !0, B.matrix = N } } else Bh.warn("当前模式下暂不支持构件变换") } this.render() }, componentApplyMatrix2: function (A, e, t) { var i = this.getModelByComponentKey(A), o = this.getModelManager().getComponent(A); if (o && o.length > 0) { for (var n = 0; o.length > n; n += 1) { var r = o[n]; if (r.matrix || (r.matrix = new M), r.transformation || (r.transformation = !0, r.transformationOriginalMatrix = r.matrix.clone(), r.applyMatrix = new M, r.boundingBox && (r.transformationOriginalBoundingBox = r.boundingBox.clone())), r.matrix.premultiply(e), r.applyMatrix.premultiply(e), r.boundingBox && r.boundingBox.copy(r.transformationOriginalBoundingBox).applyMatrix4(r.applyMatrix), r.isBatched) { var a = i._getHandler(); if (!0 === r.instanceOrNot) for (var s = a.instancedManager.meshManager, l = s.getMeshIdByNodeInfo(r), c = s.nodeIdxMapFromUserId[A][l], h = 0, d = c.length; d > h; h += 1) { var p = c[h], g = s.instanceGeometryMap[l][h], u = g.getAttribute("mcol0"), f = g.getAttribute("mcol1"), m = g.getAttribute("mcol2"), C = g.getAttribute("mcol3"), y = r.matrix; u.array[3 * p] = y.elements[0], u.array[3 * p + 1] = y.elements[1], u.array[3 * p + 2] = y.elements[2], u.needsUpdate = !0, f.array[3 * p] = y.elements[4], f.array[3 * p + 1] = y.elements[5], f.array[3 * p + 2] = y.elements[6], f.needsUpdate = !0, m.array[3 * p] = y.elements[8], m.array[3 * p + 1] = y.elements[9], m.array[3 * p + 2] = y.elements[10], m.needsUpdate = !0, C.array[3 * p] = y.elements[12], C.array[3 * p + 1] = y.elements[13], C.array[3 * p + 2] = y.elements[14], C.needsUpdate = !0 } else { var v = r.mesh; if (!v) continue; var I = r.index, E = v.geometry; v.geometry.boundingBox = null; var B = E.attributes.position; Tu.applyMatrix4ToBuffer(e, B.array, I.positionStart, I.positionStart + I.positionCount), B.needsUpdate = !0; var x = a.defaultManager.wireframeManager.wireframeLineSegment; if (x) for (var S = x._indicesGroup[A], w = 0, b = S.length; b > w; w += 1) { var U = S[w]; if (S[w].nodeId === r.nodeId) { var F = x.geometry.attributes.position; Tu.applyMatrix4ToBuffer(e, F.array, 3 * U.positionStart, 3 * (U.positionStart + U.positionCount)), F.needsUpdate = !0; break } } } } else { var K = null; if (r.mesh instanceof Array) K = r.mesh; else { if (!(r.mesh instanceof H)) continue; K = [r.mesh] } for (var Q = 0, R = K.length; R > Q; Q += 1) { var T = K[Q]; r.isExternalComponent && (T.userData.originalMatrix || (T.userData.originalMatrix = T.matrix.clone())); var k = T.matrixAutoUpdate; T.matrixAutoUpdate = !1, T.applyMatrix4(e), T.matrixAutoUpdate = k, T.updateMatrixWorld(!0) } var D = r.wireframeMeshs; if (D) for (var L = 0, N = D.length; N > L; L += 1) { var O = D[L]; k = O.matrixAutoUpdate, O.matrixAutoUpdate = !1, O.matrix.copy(r.matrix), O.updateMatrixWorld(!0), O.matrixAutoUpdate = k } } } if (void 0 === t && (t = !0), t) { if (i) i.calculateBoundingBox(); else { var V = this.externalComponentManager; V && V.getNodeInfosByUserId(A) && V.calculateBoundingBox() } this.modelManager.updateSceneBoundingBox() } } this.modelManager.updateTransformComponentList(A), this.render() }, setComponentMatrix: function (A, e) { this.setComponentMatrix2(A, e) }, setComponentMatrix2: function (A, e, t) { var i = this.getModelManager().getComponent(A); if (i && i.length > 0) for (var o = 0; i.length > o; o += 1) { var n = i[o]; n.matrix || (n.matrix = new M); var r = null; n.transformation ? r = (new M).getInverse(n.applyMatrix) : (n.transformation = !0, n.transformationOriginalMatrix = n.matrix.clone(), n.applyMatrix = new M, n.boundingBox && (n.transformationOriginalBoundingBox = n.boundingBox.clone())), n.matrix.copy(n.transformationOriginalMatrix).premultiply(e), n.applyMatrix.copy(e), n.boundingBox && n.boundingBox.copy(n.transformationOriginalBoundingBox).applyMatrix4(n.applyMatrix); var a = this.getModelByComponentKey(A); if (n.isBatched) { var s = a._getHandler(); if (!0 === n.instanceOrNot) for (var l = s.instancedManager.meshManager, c = l.getMeshIdByNodeInfo(n), h = l.nodeIdxMapFromUserId[A][c], d = 0, p = h.length; p > d; d += 1) { var g = h[d], u = l.instanceGeometryMap[c][d], f = u.getAttribute("mcol0"), m = u.getAttribute("mcol1"), C = u.getAttribute("mcol2"), y = u.getAttribute("mcol3"), v = n.matrix; f.array[3 * g] = v.elements[0], f.array[3 * g + 1] = v.elements[1], f.array[3 * g + 2] = v.elements[2], f.needsUpdate = !0, m.array[3 * g] = v.elements[4], m.array[3 * g + 1] = v.elements[5], m.array[3 * g + 2] = v.elements[6], m.needsUpdate = !0, C.array[3 * g] = v.elements[8], C.array[3 * g + 1] = v.elements[9], C.array[3 * g + 2] = v.elements[10], C.needsUpdate = !0, y.array[3 * g] = v.elements[12], y.array[3 * g + 1] = v.elements[13], y.array[3 * g + 2] = v.elements[14], y.needsUpdate = !0 } else { var I = n.mesh; if (!I) continue; var E = n.index, B = I.geometry.attributes.position; r && Tu.applyMatrix4ToBuffer(r, B.array, E.positionStart, E.positionStart + E.positionCount), Tu.applyMatrix4ToBuffer(n.applyMatrix, B.array, E.positionStart, E.positionStart + E.positionCount), B.needsUpdate = !0; var x = s.defaultManager.wireframeManager.wireframeLineSegment; if (x) for (var S = x._indicesGroup[A], w = 0, b = S.length; b > w; w += 1) { var U = S[w]; if (S[w].nodeId === n.nodeId) { var F = x.geometry.attributes.position; r && Tu.applyMatrix4ToBuffer(r, F.array, 3 * U.positionStart, 3 * (U.positionStart + U.positionCount)), Tu.applyMatrix4ToBuffer(e, F.array, 3 * U.positionStart, 3 * (U.positionStart + U.positionCount)), F.needsUpdate = !0; break } } } } else { var K = null; if (n.mesh instanceof Array) K = n.mesh; else { if (!(n.mesh instanceof H)) continue; K = [n.mesh] } for (var Q = 0, R = K.length; R > Q; Q += 1) { var T = K[o]; n.isExternalComponent && (T.userData.originalMatrix || (T.userData.originalMatrix = T.matrix.clone())); var k = T.matrixAutoUpdate; T.matrixAutoUpdate = !1, T.matrix.copy(n.matrix), T.applyMatrix4(new M), T.matrixAutoUpdate = k, T.updateMatrixWorld(!0) } var D = n.wireframeMeshs; if (D) for (var L = 0, N = D.length; N > L; L += 1) { var O = D[L]; k = O.matrixAutoUpdate, O.matrixAutoUpdate = !1, O.matrix.copy(n.matrix), O.updateMatrixWorld(!0), O.matrixAutoUpdate = k } } if (void 0 === t && (t = !0), t) { if (a) a.calculateBoundingBox(); else { var V = this.externalComponentManager; V && V.getNodeInfosByUserId(A) && V.calculateBoundingBox() } this.modelManager.updateSceneBoundingBox() } } this.render() }, resetComponentMatrix: function (A, e) { var t = this.getModelManager().getComponent(A); if (t && t.length > 0) for (var i = 0; t.length > i; i += 1) { var o = t[i]; if (o.transformation) { o.matrix.copy(o.transformationOriginalMatrix), o.transformationOriginalBoundingBox && (o.boundingBox = o.transformationOriginalBoundingBox.clone()); var n = (new M).getInverse(o.applyMatrix), r = this.getModelByComponentKey(A); if (o.isBatched) { var a = r._getHandler(); if (!0 === o.instanceOrNot) for (var s = a.instancedManager.meshManager, l = s.getMeshIdByNodeInfo(o), c = s.nodeIdxMapFromUserId[A][l], h = 0, d = c.length; d > h; h += 1) { var p = c[h], g = s.instanceGeometryMap[l][h], u = g.getAttribute("mcol0"), f = g.getAttribute("mcol1"), m = g.getAttribute("mcol2"), C = g.getAttribute("mcol3"), y = o.matrix; u.array[3 * p] = y.elements[0], u.array[3 * p + 1] = y.elements[1], u.array[3 * p + 2] = y.elements[2], u.needsUpdate = !0, f.array[3 * p] = y.elements[4], f.array[3 * p + 1] = y.elements[5], f.array[3 * p + 2] = y.elements[6], f.needsUpdate = !0, m.array[3 * p] = y.elements[8], m.array[3 * p + 1] = y.elements[9], m.array[3 * p + 2] = y.elements[10], m.needsUpdate = !0, C.array[3 * p] = y.elements[12], C.array[3 * p + 1] = y.elements[13], C.array[3 * p + 2] = y.elements[14], C.needsUpdate = !0 } else { var v = o.mesh; if (!v) continue; var I = o.index, E = v.geometry.attributes.position; n && (Tu.applyMatrix4ToBuffer(n, E.array, I.positionStart, I.positionStart + I.positionCount), E.needsUpdate = !0); var B = a.defaultManager.wireframeManager.wireframeLineSegment; if (B) for (var x = B._indicesGroup[A], S = 0, w = x.length; w > S; S += 1) { var b = x[S]; if (x[S].nodeId === o.nodeId) { var U = B.geometry.attributes.position; n && (Tu.applyMatrix4ToBuffer(n, U.array, 3 * b.positionStart, 3 * (b.positionStart + b.positionCount)), U.needsUpdate = !0); break } } } } else { var F = null; if (o.mesh instanceof Array) F = o.mesh; else { if (!(o.mesh instanceof H)) continue; F = [o.mesh] } for (var K = 0, Q = F.length; Q > K; K += 1) { var R = F[i], T = void 0; if (T = o.isExternalComponent ? R.userData.originalMatrix : o.matrix) { var k = R.matrixAutoUpdate; R.matrixAutoUpdate = !1, R.matrix.copy(T), R.applyMatrix4(new M), R.matrixAutoUpdate = k, R.updateMatrixWorld(!0), R.userData.originalMatrix = void 0 } } var D = o.wireframeMeshs; if (D) for (var L = 0, N = D.length; N > L; L += 1) { var O = D[L]; k = O.matrixAutoUpdate, O.matrixAutoUpdate = !1, O.matrix.copy(o.matrix), O.updateMatrixWorld(!0), O.matrixAutoUpdate = k } } if (void 0 === e && (e = !0), e) { if (r) r.calculateBoundingBox(); else { var V = this.externalComponentManager; V && V.getNodeInfosByUserId(A) && V.calculateBoundingBox() } this.modelManager.updateSceneBoundingBox() } o.transformationOriginalMatrix = void 0, o.transformationOriginalBoundingBox = void 0, o.applyMatrix = void 0, o.transformation = void 0 } } this.render() }, calculateComponentVolume: function (A) { var e = this.modelManager.getComponent(A), t = this.modelManager.getMeshByUserId(A); if (e && e.length > 0) { Bh.time("计算体积"); for (var i = 0, o = 0, n = e.length; n > o; o += 1) { var r = e[o]; if (r.isExternalComponent) for (var a = r.mesh, s = 0, l = a.length; l > s; s += 1) { var c = a[s].geometry, h = Tu.calculateVolumeOfGeometry(c.attributes.position.array, c.index.array); h && (i += h) } else if (t) { var d = r.mesh || t[o].mesh; if (d) { var p = d.geometry, g = d._indicesGroup; if (g && !r.instanceOrNot) for (var u = g[A], f = 0, m = u.length; m > f; f += 1) { var C = u[f], v = Tu.calculateVolumeOfGeometry(p.attributes.position.array, p.index.array, C.indexStart, C.indexCount); v && (i += v) } else { var I = Tu.calculateVolumeOfGeometry(p.attributes.position.array, p.index.array); I && (i += I) } } } } var E = this.getBoundingBoxByIds([A]), B = new y; return E.getCenter(B), Bh.timeEnd("计算体积"), { volume: i, position: B.toArray() } } }, setAxisNetColor: function (A, e) { var t = !1, i = this.modelManager; for (var o in i.models) { var n = i.models[o]; n.axisNetManager && (n.axisNetManager.setupColor(A, e), t = !0) } t && this.render(!0) }, showAxisNet: function () { var A = !1, e = this.modelManager; for (var t in e.models) { var i = e.models[t]; i.axisNetManager && (i.axisNetManager.show(), A = !0) } A && this.render(!0) }, hideAxisNet: function () { var A = !1, e = this.modelManager; for (var t in e.models) { var i = e.models[t]; i.axisNetManager && (i.axisNetManager.hide(), A = !0) } A && this.render(!0) }, enableAxisNetStayInFront: function () { var A = !1, e = this.modelManager; for (var t in e.models) { var i = e.models[t]; i.axisNetManager && (i.axisNetManager.enableStayInFront(), A = !0) } A && this.render(!0) }, disableAxisNetStayInFront: function () { var A = !1, e = this.modelManager; for (var t in e.models) { var i = e.models[t]; i.axisNetManager && (i.axisNetManager.disableStayInFront(), A = !0) } A && this.render(!0) }, enableSnap: function (A) { this.controlManager.getToolByName(Pc.PICK_BY_RECT).enableSnap(A) }, pickToPoint: function (A, e) { return this.controlManager.control.pickHelper.pickToPoint(A, e) }, getViewportSize: function () { return this.rendererManager.getRendererSize() }, getRenderer: function () { return this.rendererManager.getRenderer() }, getExternalComponentManager: function () { return this.externalComponentManager || (this.externalComponentManager = new Vy(this)), this.externalComponentManager }, addExternalObject: function (A, e, t, i) { A = A || uh.createUUID(); this.getExternalComponentManager().addNode(A, e, t, i), this.render() }, addExternalObjects: function (A, e, t) { for (var i = this.getExternalComponentManager(), o = [], n = 0; A.length > n; n += 1) { var r = uh.createUUID(); i.addNode(r, A[n], e, t), o.push(r) } return this.render(), o }, removeExternalObjectByName: function (A) { this.getExternalComponentManager().removeNodeById(A), this.render() }, clearExternalObjects: function () { this.getExternalComponentManager().clearNodes(), this.render() }, getExternalObjectByName: function (A) { return this.getExternalComponentManager().getNodeById(A) }, getAllExternalObjects: function () { return Object.values(this.getExternalComponentManager().getAllNodes()) }, getModelFloorMapsByKey: function (A, e) { var t = this.modelManager.models[A]; if (t && t.floorManager) { if ("function" != typeof e) return t.floorManager.getMimiMaps(); t.floorManager.getServerMimiMaps(e) } }, getReceivingPlane: function (A) { return this.getScene().getReceivingPlane(A) }, enableShadow: function (A) { this.getReceivingPlane(A), A ? this.getScene().lightManager.enableShadowLight() : this.getScene().lightManager.disableShadowLight(); var e = this.getRenderer(); e.shadowMap.enabled = A, e.shadowMap.type = 2, e.shadowMap.autoUpdate = !1, e.shadowMap.needsUpdate = !0; for (var t = this.getScene().getGroups(), i = this.getScene(), o = 0; t.length > o; o += 1) { var n = i.getGroupType(t[o].name); n.groupType !== gp.IBLCUBE && ("ClipPlane" !== n.groupType && this.traverseGroupEnableShadow(t[o], A)) } this.updateShadowLight() }, updateShadowLight: function () { this.getScene().lightManager.updateShadowLight(), this.getRenderer().shadowMap.needsUpdate = !0, this._render(), this.rendererManager.renderer.setClearColor(0, 0), this._render() }, traverseGroupEnableShadow: function (A, e) { var t = this; this.getRenderer(); ! function (A) { if (A instanceof Ue) { var i = A.material; if (i instanceof Array) { var o = null; if ("PhoneLightingMaterial" === i[0].type) return; A.castShadow = e, A.receiveShadow = e; for (var n = 0; i.length > n; n += 1) i[n].needsUpdate = !0, o = i[n].defines; A.customDepthMaterial = e && o && o.hasOwnProperty("USE_INSTANCE") ? t.getInstanceDepthMaterial() : void 0 } else { if ("PhoneLightingMaterial" === i.type) return; A.castShadow = e, A.receiveShadow = e, i.needsUpdate = !0; var r = i.defines; A.customDepthMaterial = e && r && r.hasOwnProperty("USE_INSTANCE") ? t.getInstanceDepthMaterial() : void 0, i.needsUpdate = !0 } } }(A); for (var i = A.children, o = 0, n = i.length; n > o; o += 1) this.traverseGroupEnableShadow(i[o], e) }, getInstanceDepthMaterial: function () { if (this.instanceDepthMaterial) return this.instanceDepthMaterial; var A = new Su; return A.depthPacking = 3201, this.instanceDepthMaterial = A, this.instanceDepthMaterial }, updateShadowMap: function () { 4 === vc.LightPreset && (this.getRenderer().shadowMap.needsUpdate = !0) }, cloneComponent: function (A) { function e(A) { for (var e in A) A.hasOwnProperty(e) && (A[e] instanceof d || A[e] instanceof ut) && (A[e] = A[e].clone(), A[e].needsUpdate = !0) } var t, i = this.modelManager.getComponent(A), o = new he, n = i[0].model, r = n.materialManager, a = this.getExternalComponentManager(), s = []; if (i[0].isBatched && !i[0].instanceOrNot) ! function () { var A = [], n = [], l = [], c = [], h = [], d = 0, p = 0, g = [], u = 0, f = !0, m = !1, C = void 0; try { for (var y, v = function () { var t, i, a, f, m = y.value, C = m.index, v = m.mesh.geometry, I = m.mesh.geometry.attributes, E = I.position.array.slice(C.positionStart, C.positionStart + C.positionCount), B = I.normal.array.slice(C.positionStart, C.positionStart + C.positionCount), x = void 0; if (I.uv) x = I.uv.array.slice(C.positionStart / 3 * 2, (C.positionStart + C.positionCount) / 3 * 2); else { var S = E.length / 3 * 2; (x = new Array(S)).fill(0, 0, S) } var w = void 0; if (I.uv2) w = I.uv2.array.slice(C.positionStart / 3 * 2, (C.positionStart + C.positionCount) / 3 * 2); else { var M = x.length; (w = new Array(M)).fill(0, 0, M) } var b = C.positionStart / 3, U = v.index.array, F = C.indexCount, K = m.originMId; s.push(K); var Q = Kd.getMaterialParameters(r.getMaterialById(K)), R = Kd.createStandardMaterial(Q); e(R), g.push(R), h.push.apply(h, yc(U.slice(C.indexStart, C.indexStart + C.indexCount).map((function (A) { return A - b + p })))), A = (t = A).concat.apply(t, yc(E)), n = (i = n).concat.apply(i, yc(B)), l = (a = l).concat.apply(a, yc(x)), c = (f = c).concat.apply(f, yc(w)), o.groups.push({ start: d, count: F, materialIndex: u }), d += F, p += C.positionCount / 3, u += 1 }, I = i[Symbol.iterator](); !(f = (y = I.next()).done); f = !0) v() } catch (A) { m = !0, C = A } finally { try { f || null == I.return || I.return() } finally { if (m) throw C } } o.setAttribute("position", new YA(new Float32Array(A), 3)), o.setAttribute("uv", new YA(new Float32Array(l), 2)), o.setAttribute("uv2", new YA(new Float32Array(c), 2)), o.setAttribute("normal", new YA(new Float32Array(n), 3)), o.setIndex(new YA(new Uint32Array(h), 1)), t = new Ue(o, g), a.addExternalObject(t) }(); else if (i[0].isBatched && i[0].instanceOrNot) ! function () { var i = n._handler.instancedManager.meshManager, r = i.getNodeIdxMapByUserId(A), l = [], c = [], h = [], d = [], p = i.matrixInfoMapFromUserId[A][Object.keys(i.matrixInfoMapFromUserId[A])[0]][0].matrix, g = 0, u = 0, f = 0, m = [], C = 0; for (var y in r) { var v, I, E, B = i.getInstanceGeometries(y), x = B[0].index.array; if (u = B[0].index.count, l = (v = l).concat.apply(v, yc(B[0].attributes.position.array)), c = (I = c).concat.apply(I, yc(B[0].attributes.normal.array)), B[0].attributes.uv) { var S; h = (S = h).concat.apply(S, yc(B[0].attributes.uv.array)) } else { var w = 2 * u, M = new Array(w); M.fill(0, 0, w), h = h.concat(M) } d = (E = d).concat.apply(E, yc(x.map((function (A) { return A + g })))), g = l.length / 3; var b = i.getMaterialIdByMeshId(y), U = i.manager.model.materialManager.getInstanceMaterialById(b)[0], F = Kd.getMaterialParameters(U), K = Kd.createStandardMaterial(F); s.push(b), e(K), m.push(K), o.groups.push({ start: f, count: u, materialIndex: C }), f += u, C += 1 } o.setAttribute("position", new YA(new Float32Array(l), 3)), o.setAttribute("uv", new YA(new Float32Array(h), 2)), o.setAttribute("normal", new YA(new Float32Array(c), 3)), o.setIndex(new YA(new Uint32Array(d), 1)), (t = new Ue(o, m)).applyMatrix4(p), t.updateMatrixWorld(), a.addExternalObject(t) }(); else { var l = n.getModelDescriptor().getNodeInfosByComponentKey(A)[0].originMId; if (s = l, t = i[0].mesh.clone(), Array.isArray(l)) t.material = l.map((function (A) { var t = r.getMaterialById(A), i = Kd.getMaterialParameters(t), o = Kd.createStandardMaterial(i); return e(o), o })); else { var c = r.getMaterialById(l), h = Kd.getMaterialParameters(c), p = Kd.createStandardMaterial(h); e(p), t.material = p } a.addExternalObject(t) } return t ? (t.byClone = !0, t.originMId = s, t.originComponentKey = A, t) : null }, setComponentsBlink: function () {} }), Object.defineProperties(Gy.prototype, { renderer: { get: function () { return console.warn("EIMMODEL.ViewerImpl: .renderer 现在为 .getRenderer()"), this.getRenderer() } }, composer: { get: function () { return console.warn("EIMMODEL.ViewerImpl: .composer 现在为 .rendererManager.composer"), this.rendererManager.composer } } }); var Py = function (A) { var e = window.performance.timing; Ch.PERFORMANCE > Bh.level || Bh.warn("页面加载时间:", e.domInteractive - e.navigationStart, "ms"); var t = mh.detectWebGL(); if (1 === t) { vc.language = mh.language(), H.DefaultUp.set(0, 0, 1); var i = uh.extend({}, { host: "https://bos3d.bimwinner.com", viewport: "" }, A); this.host = i.host, this.viewerImpl = new Gy; var o = document.getElementById(i.viewport); o.style.position = "relative"; var n = this; this.getViewerImpl().init(o), vc.EnableViewController && !mh.isMobileDevice() && (this.viewController = new lp(this, (function () { return !0 })), this.viewController.init(this.getViewerImpl().getDomElement()), this.viewController.render(), this.getViewerImpl().addRenderFinishedListener((function () { n.viewController.render() }))), this.filter = this.getViewerImpl().filter, this.SVGRect = new tp(this), this.SVGRect.creatSVG(), this.viewport = A.viewport, this.viewportDiv = document.getElementById(A.viewport), this.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_CONFIG_FINISH, (function (A) { Bh.time("模型".concat(A.modelKey, "加载时间")); var e = n.getViewerImpl().getBoundingBox(), t = n.getViewerImpl().getModel(A.modelKey), i = t.getConfig(); i.type !== Zc.I_MODEL && i.type !== Zc.OBJ || n.setLightIntensityFactor(1), op(t.dataVersion, "1.0"); var o = e.getCenter(new y), r = e.getSize(new y), a = new y(o.x + r.x, o.y + r.y, o.z + r.z); n.originalView && vc.UserControlView ? n.viewerImpl.lookAt(n.originalView.position, n.originalView.target, n.originalView.up) : (n.viewerImpl.lookAt(a, o, n.viewerImpl.camera.up), n.setOriginalView(a, o, n.viewerImpl.camera.up)) })), this.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_PROGRESS, (function (A) { Bh.log(A.progress) })), this.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_COMPLETE, (function (A) { Bh.log(A.modelKey, " is load "), Bh.timeEnd("模型".concat(A.modelKey, "加载时间")); var e = n.getViewerImpl().getModel(A.modelKey); for (var t in e.floorManager && vc.EnableCreateMiniMap && (Bh.time("小地图生成"), e.floorManager.generateMiniMap(n.getViewerImpl()), Bh.timeEnd("小地图生成")), e && e.getConfig() && n.getViewerImpl().cameraControl.setSceneUnit(e.getConfig().lengthUnit), bc) if (e && bc.hasOwnProperty(t) && !0 === bc[t]) { var i = t, o = e.getComponentKeysByType(i), r = e.getConfig(), a = []; !r || r.type !== Zc.RVT && r.type !== Zc.MERGE || (a = e.getComponentKeysByProperty("buildInCategory", i)), n.deactivateComponentsByKey(o.concat(a)) } n.getViewerImpl().getBoundingBox().isEmpty() && (n.getViewerImpl().zoomAll(), n.getViewerImpl().goToInitialView()) })), this.getViewerImpl().modelManager.addEventListener(Rc.ON_CLICK_PICK, (function (A) { if (A.intersectInfo) { Bh.log("构件key", A.intersectInfo.selectedObjectId); var e = A.intersectInfo.object; e && Bh.log(e) } })), this.getViewerImpl().getControlManager().addEventListener(Rc.ON_CONTROL_EXIST, (function (A) { if (A.name === Pc.CLIP_BY_BOX) for (var e = n.getViewerImpl().modelManager.getModelKeys(), t = 0, i = e.length; i > t; t += 1) { var o = n.getViewerImpl().modelManager.getModel(e[t]); if (o) for (var r = 0; 6 > r; r += 1) { o._getNodeGroup("sectionFill_" + r).clear() } } })), this.viewerImpl.modelManager.addEventListener(Rc.ON_CONTROL_UPDATEUI, (function (A) { n.SVGRect.creatRect(A) })) } else mh.showWebGLMessage(t) }; Object.assign(Py.prototype, Ld.prototype), Object.assign(Py.prototype, { constructor: Py, addView: function (A, e, t, i) { this.getViewerImpl().load({ serverUrl: this.host, modelKey: A, dbName: e, token: t, share: i || "", notifyProgress: !0, type: A.startsWith("G") ? "GIS" : "" }) }, addViews: function (A, e, t, i) { vc.AutoMergeComponent = !1, vc.MergeComponent = !0, this.getViewerImpl().load({ serverUrl: this.host, modelKey: A, modelKeys: e, dbName: t, token: i, notifyProgress: !0 }) }, addTilesView: function (A, e, t) { this.getViewerImpl().loadTiles({ serverUrl: this.host, modelKey: A, dbName: e, token: t, notifyProgress: !0 }) }, addTilesViewFromLocal: function (A) { this.getViewerImpl().loadTiles({ serverUrl: ".", modelKey: A, dbName: "", token: "", notifyProgress: !0, offLine: !0 }) }, getSSE: function (A) { var e = this.getBoxByComponentsKey(A), t = this.viewerImpl.camera, i = e.getCenter(new y), o = e.getSize().length(), n = this.viewerImpl.getRenderer().domElement.width, r = t.fov; return o * n / (2 * t.position.clone().sub(i).length() * Math.tan(r / 2)) }, removeView: function (A) { return this.getViewerImpl().unload(A) }, removeAllView: function () { this.getViewerImpl().unloadAll() }, addViewFromLocal: function (A) { this.getViewerImpl().load({ serverUrl: ".", modelKey: A, dbName: "", notifyProgress: !0, offLine: !0 }) }, loadComponents: function (A, e, t, i) { Array.isArray(A) || (A = [A]), this.getViewerImpl().loadGeopkOnDemand(A, e, t, i) }, unloadCompomemts: function (A, e) { Array.isArray(A) || (A = [A]), this.getViewerImpl().unloadGeopkOnDemand(A, e) }, getOriginalView: function () { return this.originalView }, setOriginalView: function (A, e, t) { A && e && t ? (this.originalView || (this.originalView = {}), this.originalView.position = Array.isArray(A) ? new y(A[0], A[1], A[2]) : new y(A.x, A.y, A.z), this.originalView.target = Array.isArray(e) ? new y(e[0], e[1], e[2]) : new y(e.x, e.y, e.z), this.originalView.up = Array.isArray(t) ? new y(t[0], t[1], t[2]) : new y(t.x, t.y, t.z)) : this.originalView = void 0 }, getViewerImpl: function () { return this.viewerImpl }, getAllComponents: function () { return this.getViewerImpl().getModelManager().getAllComponents() }, getAllComponentsKey: function () { return this.getViewerImpl().getModelManager().getAllComponentsKey() }, getComponentsKeyByModelKey: function (A) { return this.getViewerImpl().getModelManager().getComponentsKeyByModelKey(A) }, getComponentKeysByName: function (A) { return this.getViewerImpl().getModelManager().getComponentKeysByName(A) }, getComponentKeysByType: function (A) { return this.getViewerImpl().getModelManager().getComponentKeysByType(A) }, getComponentKeysByProperty: function (A, e) { return this.getViewerImpl().getModelManager().getComponentKeysByProperty(A, e) }, getScreenCoordFromSceneCoordAndCheckCover: function (A) { return this.getViewerImpl().getScreenCoordFromSceneCoordAndCheckCover(A) }, pickByPoint: function (A) { return this.getViewerImpl().pickByPoint(A) }, calculateMinDistance: function (A, e) { return this.getViewerImpl().calculateMinDistance(A, e) }, otherObjectsInScene: function (A) {}, getComponentsByKey: function (A) { Array.isArray(A) || (A = [A]); var e = [], t = this; return A.forEach((function (A) { var i = t.getViewerImpl().modelManager.getComponent(A); if (i) { var o = {}; o[A] = i, e.push(o) } })), e }, getModelFloorMapsByKey: function (A, e) { var t = this.getViewerImpl().getModel(A); if (!t) return { msg: "没有此模型" }; var i = t.getConfig().type; return i !== Zc.RVT && i !== Zc.IFC && i !== Zc.MERGE ? { msg: "该模型不支持小地图" } : t.floorManager ? this.getViewerImpl().getModelFloorMapsByKey(A, e) : { msg: "该模型不支持小地图" } }, showComponentsById: function (A, e) { Array.isArray(A) || (A = [A]); for (var t = [], i = 0; A.length > i; i += 1) t[i] = e + "_" + A[i]; this.getViewerImpl().getFilter().showByIds(t), this.render() }, showComponentsByKey: function (A) { Array.isArray(A) || (A = [A]), this.getViewerImpl().getFilter().showByIds(A), this.render() }, hideComponentsById: function (A, e) { Array.isArray(A) || (A = [A]); for (var t = [], i = 0; A.length > i; i += 1) t[i] = e + "_" + A[i]; this.filter.hideByIds(t), this.render() }, hideComponentsByKey: function (A) { Array.isArray(A) || (A = [A]), this.filter.hideByIds(A), this.render() }, activateComponentsByKey: function (A) { Array.isArray(A) || (A = [A]), this.filter.activateByIds(A), this.render() }, deactivateComponentsByKey: function (A) { Array.isArray(A) || (A = [A]), this.filter.deactivateByIds(A), this.render() }, hideAllComponents: function () { this.getViewerImpl().getFilter().hideAll(), this.render() }, showAllComponents: function () { this.getViewerImpl().getFilter().showAll(), this.render() }, highlightComponentsById: function (A, e) { Array.isArray(A) || (A = [A]); for (var t = [], i = 0; A.length > i; i += 1) t[i] = e + "_" + A[i]; this.getViewerImpl().setSelection(t), this.render() }, highlightComponentsByKey: function (A, e) { Array.isArray(A) || (A = [A]), this.getViewerImpl().setSelection(A); var t = e; "boolean" != typeof e && (t = !0), t && this.render() }, addHighlightComponentsByKey: function (A) { Array.isArray(A) || (A = [A]), this.getViewerImpl().addToSelection(A), this.render() }, closeHighlightComponentsById: function (A, e) { Array.isArray(A) || (A = [A]); for (var t = [], i = 0; A.length > i; i += 1) t[i] = e + "_" + A[i]; this.getViewerImpl().removeFromSelection(t), this.render() }, closeHighlightComponentsByKey: function (A) { Array.isArray(A) || (A = [A]), this.getViewerImpl().removeFromSelection(A), this.render() }, getHighlightComponentsKey: function () { return this.getViewerImpl().getSelection() }, clearHighlightList: function () { this.getViewerImpl().clearSelection(), this.render() }, getHighlightComponents: function () { var A = this.getHighlightComponentsKey(), e = [], t = this; return A.forEach((function (A) { var i = t.getViewerImpl().modelManager.getComponent(A); if (i) { var o = {}; o[A] = i, e.push(o) } })), e }, setComponentsOpacityState: function (A, e) { Array.isArray(A) || (A = [A]), e === Oc.TRANSLUCENT ? this.transparentComponentsByKey(A) : e === Oc.OPAQUE && this.closeTransparentComponentsByKey(A) }, transparentComponentsById: function (A, e) { Array.isArray(A) || (A = [A]); for (var t = [], i = 0; A.length > i; i += 1) t[i] = e + "_" + A[i]; this.getViewerImpl().getFilter().makeTranslucentByIds(t), this.render() }, transparentComponentsByKey: function (A, e) { Array.isArray(A) || (A = [A]); var t = this.getViewerImpl().getFilter(); if (e) { var i = this.getComponentsByKey(A); if (Array.isArray(A) && i.length !== A.length) { i = []; var o = !0, n = !1, r = void 0; try { for (var a, s = A[Symbol.iterator](); !(o = (a = s.next()).done); o = !0) { var l = this.getComponentsByKey(a.value); l.length > 0 && i.push(l[0]) } } catch (A) { n = !0, r = A } finally { try { o || null == s.return || s.return() } finally { if (n) throw r } } } t.transparentComponentsByKey(this.getViewerImpl().getModelManager(), i, e) } else t.makeTranslucentByIds(A); this.render() }, transparentOtherComponentsByKey: function (A) { Array.isArray(A) || (A = [A]), this.getViewerImpl().getFilter().makeTranslucentOthersByIds(A), this.render() }, transparentAllComponents: function () { this.getViewerImpl().getFilter().makeTranslucentOthersByIds([]), this.render() }, closeTransparentComponentsById: function (A, e) { Array.isArray(A) || (A = [A]); for (var t = [], i = 0; A.length > i; i += 1) t[i] = e + "_" + A[i]; this.getViewerImpl().getFilter().opaqueByIds(t), this.render() }, closeTransparentComponentsByKey: function (A) { Array.isArray(A) || (A = [A]), this.getViewerImpl().getFilter().opaqueByIds(A), this.render() }, clearTransparentList: function () { this.clearComponentTransparentList(), this.clearModelTransparentList() }, clearComponentTransparentList: function () { var A = this.getViewerImpl().getFilter(); A.opaqueAll(), A.opaqueByIds([]), this.render() }, colorfulComponentsById: function (A, e, t, i) { Array.isArray(A) || (A = [A]); for (var o = [], n = 0; A.length > n; n += 1) o[n] = e + "_" + A[n]; var r = this.getViewerImpl().getFilter(), a = {}; a.color = t, "number" == typeof i && (a.opacity = i), r.addToOverrideListByColor(o, a), this.render() }, colorfulComponentsByKey: function (A, e, t) { Array.isArray(A) || (A = [A]); var i = this.getViewerImpl().getFilter(), o = {}; o.color = e, "number" == typeof t && (o.opacity = t), i.addToOverrideListByColor(A, o), this.render() }, setComponentsMaterialByKey: function (A, e, t, i) { var o = this.getComponentsByKey(A); if (Array.isArray(e)) { var n = 0, r = !0, a = !1, s = void 0; try { for (var l, c = e[Symbol.iterator](); !(r = (l = c.next()).done); r = !0) { var h = l.value; "" === h.name && (h.name = "custMat_" + (new Date).getTime() + "_" + n, n += 1) } } catch (A) { a = !0, s = A } finally { try { r || null == c.return || c.return() } finally { if (a) throw s } } } else "" === e.name && (e.name = "custMat_" + (new Date).getTime()); var d = this.getViewerImpl().getFilter().addToOverrideListByCustomerMaterial(this.getViewerImpl().getModelManager(), o, e, t, i); return this.render(), d }, closeMaterialByKey: function (A) { var e = this; Array.isArray(A) ? A.forEach((function (A) { var t = e.getComponentsByKey(A)[0][A][0]; if (!t.isBatched && !t.instanceOrNot && !t.RenderTypeChange) { var i = t.originMId; e.getComponentsByKey(A)[0][A][0].materialId = Array.isArray(i) ? [].concat(i) : i } e.closeColorfulComponentsByKey(A) })) : this.closeColorfulComponentsByKey(A) }, closeColorfulComponentsById: function (A, e) { Array.isArray(A) || (A = [A]); for (var t = [], i = 0; A.length > i; i += 1) t[i] = e + "_" + A[i]; this.getViewerImpl().getFilter().addToOverrideListByColor(t, null), this.render() }, closeColorfulComponentsByKey: function (A) { Array.isArray(A) || (A = [A]), this.getViewerImpl().getFilter().addToOverrideListByColor(A, null), this.render() }, clearColorfulList: function () { this.getViewerImpl().getFilter().clearAllOverrideList(), this.render() }, wireFrameComponentsById: function (A, e) { Array.isArray(A) || (A = [A]); for (var t = [], i = 0; A.length > i; i += 1) t[i] = e + "_" + A[i]; this.getViewerImpl().getFilter().addToWireframeByWireframe(t, { wireframe: !0 }), this.render() }, wireFrameComponentsByKey: function (A) { Array.isArray(A) || (A = [A]); this.getViewerImpl().getFilter().addToWireframeByWireframe(A, { wireframe: !0 }), this.render() }, closeWireFrameComponentsById: function (A, e) { Array.isArray(A) || (A = [A]); for (var t = [], i = 0; A.length > i; i += 1) t[i] = e + "_" + A[i]; this.getViewerImpl().getFilter().addToWireframeByWireframe(t, null), this.render() }, closeWireFrameComponentsByKey: function (A) { Array.isArray(A) || (A = [A]), this.getViewerImpl().getFilter().addToWireframeByWireframe(A, null), this.render() }, clearWireframeList: function () { this.getViewerImpl().getFilter().clearAllWireframeList(), this.render() }, isolateComponentsById: function (A, e, t) { Array.isArray(A) || (A = [A]); for (var i = [], o = 0; A.length > o; o += 1) i[o] = e + "_" + A[o]; this.getViewerImpl().getFilter().setIsolateList(i, !1 !== t), this.render() }, isolateComponentsByKey: function (A, e) { Array.isArray(A) || (A = [A]), this.getViewerImpl().getFilter().setIsolateList(A, !1 !== e), this.render() }, closeIsolateComponentsById: function (A, e) { Array.isArray(A) || (A = [A]); for (var t = [], i = 0; A.length > i; i += 1) t[i] = e + "_" + A[i]; this.getViewerImpl().getFilter().removeFromIsolateList(t), this.render() }, closeIsolateComponentsByKey: function (A) { Array.isArray(A) || (A = [A]), this.getViewerImpl().getFilter().removeFromIsolateList(A), this.render() }, clearIsolation: function () { this.getViewerImpl().getFilter().clearIsolation() }, showModelsByKey: function (A) { Array.isArray(A) || (A = [A]), this.getViewerImpl().getFilter().showModelByIds(A), this.render() }, hideModelsByKey: function (A) { Array.isArray(A) || (A = [A]), this.filter.hideModelByIds(A), this.render() }, hideAllModels: function () { this.getViewerImpl().getFilter().hideAllModel(), this.render() }, showAllModels: function () { this.getViewerImpl().getFilter().showAllModel(), this.render() }, highlightModelsByKey: function (A) { Array.isArray(A) || (A = [A]), this.getViewerImpl().setModelSelection(A), this.render() }, addHighlightModelsByKey: function (A) { Array.isArray(A) || (A = [A]), this.getViewerImpl().addToModelSelection(A), this.render() }, closeHighlightModelsByKey: function (A) { Array.isArray(A) || (A = [A]), this.getViewerImpl().removeFromModelSelection(A), this.render() }, getHighlightModelsKey: function () { return this.getViewerImpl().getModelSelection() }, clearModelHighlightList: function () { this.getViewerImpl().clearModelSelection(), this.render() }, transparentModelsByKey: function (A, e, t) { var i = this; Array.isArray(A) || (A = [A]), this.closeTransparentModelsByKey(A); var o = this.getViewerImpl().getFilter(); e ? A.forEach((function (A) { o.transparentModelOrigMatByKey(i.getViewerImpl().getModelManager(), A, t) })) : o.makeModelTranslucentByIds(A), this.render() }, transparentOtherModelsByKey: function (A, e, t) { Array.isArray(A) || (A = [A]); for (var i = Object.keys(this.viewerImpl.modelManager.models), o = [], n = 0; i.length > n; n++) { var r = i[n]; A.includes(r) || o.push(r) } (this.closeTransparentModelsByKey(o), e) ? this.transparentModelsByKey(o, e, t): this.getViewerImpl().getFilter().makeTranslucentOthersModelByIds(A); this.render() }, transparentAllModels: function (A, e) { if (this.clearModelTransparentList(), A) { var t = Object.keys(this.viewerImpl.modelManager.models); this.transparentModelsByKey(t, A, e) } else { this.getViewerImpl().getFilter().makeTranslucentOthersModelByIds([]) } this.render() }, closeTransparentModelsByKey: function (A) { var e = this, t = this.getViewerImpl().getFilter(); Array.isArray(A) || (A = [A]), A.forEach((function (A) { t.closeOrigMatModelTransparent(e.viewerImpl.modelManager, A) })), t.opaqueModelByIds(A), this.render() }, clearModelTransparentList: function () { var A = this, e = this.getViewerImpl().getFilter(); Object.keys(this.viewerImpl.modelManager.models).forEach((function (t) { e.closeOrigMatModelTransparent(A.viewerImpl.modelManager, t) })), e.opaqueAllModel(), e.opaqueModelByIds([]), this.render() }, colorfulModelsByKey: function (A, e, t) { Array.isArray(A) || (A = [A]); var i = this.getViewerImpl().getFilter(), o = {}; o.color = e, "number" == typeof t && (o.opacity = t), i.addToModelOverrideListByColor(A, o), this.render() }, closeColorfulModelsByKey: function (A) { Array.isArray(A) || (A = [A]), this.getViewerImpl().getFilter().addToModelOverrideListByColor(A, null), this.render() }, clearModelColorfulList: function () { this.getViewerImpl().getFilter().clearModelAllOverrideList(), this.render() }, isolateModelsByKey: function (A, e) { Array.isArray(A) || (A = [A]), this.getViewerImpl().getFilter().setModelIsolateList(A, !1 !== e), this.render() }, closeIsolateModelsByKey: function (A) { Array.isArray(A) || (A = [A]), this.getViewerImpl().getFilter().removeModelFromIsolateList(A), this.render() }, clearModelIsolation: function () { this.getViewerImpl().getFilter().clearModelIsolation(), this.render() }, setModelMatrix: function (A, e) { this.getViewerImpl().setModelMatrix(e, A) }, getModelMatrix: function (A) { return this.getViewerImpl().getModelMatrix(A) }, disableComponentsSelectionByKey: function (A) { Array.isArray(A) || (A = [A]), this.filter.addToFrozenList(A) }, enableComponentsSelectionByKey: function (A) { Array.isArray(A) || (A = [A]), this.filter.removeFromFrozenList(A) }, clearDisableSelectionList: function () { this.filter.clearFrozen() }, overturnYAndZaxis: function (A) { this.getViewerImpl().overturnYAndZaxis(A), this.render() }, translateModel: function (A) { this.getViewerImpl().translateModel(A) }, rotateModel: function (A) { this.getViewerImpl().rotateModel(A) }, scaleModel: function (A) { this.getViewerImpl().scaleModel(A) }, modelsExplosion: function (A) { for (var e = { modelKey: [], coefficientX: 1, coefficientY: 1, coefficientZ: 1, center: this.getViewerImpl().getScene().getBoundingBoxWorld().getCenter(new y).toArray() }, t = uh.extend(!0, {}, e, A), i = Array.isArray(t.modelKey) ? t.modelKey : [t.modelKey], o = 0; i.length > o; o += 1) { var n = this.getViewerImpl().getModel(i[o]); n && n.explosion(t) } this.getViewerImpl().getModelManager().updateSceneBoundingBox(), this.render() }, closeModelsExplosion: function (A) { var e = Array.isArray(A) ? A : [A]; this.modelsExplosion({ modelKey: e }), this.render() }, componentsExplosion: function (A) { var e = { componentKey: [], coefficientX: 1, coefficientY: 1, coefficientZ: 1, offsetX: 0, offsetY: 0, offsetZ: 0, center: this.getViewerImpl().getScene().getBoundingBoxWorld().getCenter(new y).toArray() }, t = uh.extend(!0, {}, e, A), i = this.getViewerImpl().getModelManager(); i.componentsExplosion(t), i.updateSceneBoundingBox(), this.render() }, closeComponentsExplosion: function (A) { var e = Array.isArray(A) ? A : [A]; this.getViewerImpl().getModelManager().componentsExplosion({ componentKey: e }), this.render() }, canFloorExplosion: function () { return this.getViewerImpl().getModelManager().canFloorExplosion() }, floorExplosion: function (A) { return !!this.getViewerImpl().getModelManager().floorExplosion(A) && (this.render(), !0) }, closeFloorExplosion: function () { var A = this.getViewerImpl().getModelManager(); A.closeFloorExplosion(), A.updateSceneBoundingBox(), this.render() }, componentApplyMatrix: function (A, e) { return !(!e || !e.isMatrix4) && (this.getViewerImpl().componentApplyMatrix2(A, e), this.render(), !0) }, getMatrix4FromEuler: function (A, e, t) { var i = 0, o = 0, n = 0; Array.isArray(A) ? (i = A[0], o = A[1], n = A[2]) : (i = A.x, o = A.y, n = A.z); var r = e || [0, 0, 0], a = 0, s = 0, l = 0; Array.isArray(r) ? (a = r[0], s = r[1], l = r[2]) : (a = r.x, s = r.y, l = r.z); var c = new M; c.setPosition(-a, -s, -l); var h = new M, d = new F(i, o, n, t || "XYZ"); h.makeRotationFromEuler(d); var p = new M; return p.setPosition(a, s, l), p.multiply(h).multiply(c), p }, isolateComponentsByIdForJDS: function (A, e) { Array.isArray(A) || (A = [A]); for (var t = [], i = 0; A.length > i; i += 1) t[i] = e + "_" + A[i]; this.filter.addToIsolateList(Nc.HIDDEN_OTHERS, t); for (var o = this.getViewerImpl().modelManager.getScene().pool._pool, n = 0; o.length > n; n += 1) { o[n].visible = !1; for (var r = 0; t.length > r; r += 1) o[n].key === t[r] && (o[n].visible = !0) } return this.render(), !0 }, sortComponentsById: function (A, e, t) { Array.isArray(A) || (A = [A]); for (var i = this.getViewerImpl().getModel(e), o = [], n = 0; A.length > n; n += 1) o[n] = e + "_" + A[n]; return i ? i.getComponentKeysByTypeFromList(o, t) : [] }, sortComponentsByKey: function (A, e) { return Array.isArray(A) || (A = [A]), this.getViewerImpl().modelManager.getComponentKeysByTypeFromList(A, e) }, conditionSortComponentsById: function (A, e, t, i, o) { var n = this.filter.setConditions(A, e); Array.isArray(t) || (t = [t]); for (var r = [], a = 0; t.length > a; a += 1) r[a] = i + "_" + t[a]; var s = this.getComponentsByKey(r), l = []; if (null !== n) switch (A) { case 0: for (var c = 0; s.length > c; c += 1) n.match(s[c]) && l.push(s[c].key); this.isolateComponentsByKey(l); break; case 1: for (var h = 0; s.length > h; h += 1) n.match(s[h]) && l.push(s[h].key); var d = this.otherObjectsInScene(l); this.transparentComponentsByKey(d, .5, !1); break; case 2: for (var p = 0; s.length > p; p += 1) null !== n.getMatchItem(s[p]) && l.push(s[p].key); !0 === o.highLight ? this.highlightComponentsByKey(l) : this.colorfulComponentsByKey(l, o.color) } return l }, conditionSortComponentsByKey: function (A, e, t, i) { var o = this.filter.setConditions(A, e); Array.isArray(t) || (t = [t]); var n = this.getComponentsByKey(t), r = []; if (null !== o) switch (A) { case 0: for (var a = 0; n.length > a; a += 1) o.match(n[a]) && r.push(n[a].key); this.isolateComponentsByKey(r); break; case 1: for (var s = 0; n.length > s; s += 1) o.match(n[s]) && r.push(n[s].key); var l = this.otherObjectsInScene(r); this.transparentComponentsByKey(l, .5, !1); break; case 2: for (var c = 0; n.length > c; c += 1) null !== o.getMatchItem(n[c]) && r.push(n[c].key); !0 === i.highLight ? this.highlightComponentsByKey(r) : this.colorfulComponentsByKey(r, i.color) } return r }, resetScene: function (A) { if (A = A || {}, this.getViewerImpl().getModelManager().dispatchEvent({ type: Rc.BEFORE_RESETSCENE, data: A }), uh.isEmptyObject(A)) { this.clearIsolation(), this.clearModelIsolation(), this.clearHighlightList(), this.clearModelHighlightList(), this.showAllComponents(), this.showAllModels(), this.clearWireframeList(), this.clearTransparentList(), this.clearModelTransparentList(), this.clearColorfulList(), this.clearModelColorfulList(); var e = this.viewerImpl.modelManager.scene.getBoundingBox(), t = e.getCenter(new y), i = e.getSize(new y), o = new y(t.x + i.x, t.y + i.y, t.z + i.z); this.originalView ? this.viewerImpl.lookAt(this.originalView.position, this.originalView.target, this.originalView.up) : this.viewerImpl.lookAt(o, t, new y(0, 0, 1)) } else if (A.visible && (this.clearIsolation(), this.clearModelIsolation(), this.showAllComponents(), this.showAllModels()), A.selected && (this.clearHighlightList(), this.clearModelHighlightList()), A.transparent && (this.clearTransparentList(), this.clearModelTransparentList()), A.wireframed && this.clearWireframeList(), A.colorfully && (this.clearColorfulList(), this.clearModelColorfulList()), A.view) if (this.originalView) this.viewerImpl.lookAt(this.originalView.position, this.originalView.target, this.originalView.up); else { var n = this.viewerImpl.modelManager.scene.getBoundingBox(), r = n.getCenter(new y), a = n.getSize(new y), s = new y(r.x + a.x, r.y + a.y, r.z + a.z); this.viewerImpl.lookAt(s, r, new y(0, 0, 1)) } this.getViewerImpl().getModelManager().dispatchEvent({ type: Rc.AFTER_RESETSCENE, data: A }), this.render() }, getScreenCoordFromSceneCoord: function (A) { return this.getViewerImpl().getScreenCoordFromSceneCoord(A) }, getWorldPositionFromLocalPositionByModelKey: function (A, e) { var t = this.getModelMatrix(e); if (t) { if (A.isVector3) { var i = A.clone(); return i.applyMatrix4(t), i.toArray() } if (Array.isArray(A)) { var o = (new y).fromArray(A); return o.applyMatrix4(t), o.toArray() } } else Bh.error("模型key无效") }, getLocalPositionFromWorldPositionByModelKey: function (A, e) { var t = this.getModelMatrix(e); if (t) { var i = (new M).getInverse(t); if (A.isVector3) { var o = A.clone(); return o.applyMatrix4(i), o.toArray() } if (Array.isArray(A)) { var n = (new y).fromArray(A); return n.applyMatrix4(i), n.toArray() } } else Bh.error("模型key无效") }, getWorldPositionListFromLocalPositionListByModelKey: function (A, e) { var t = this.getModelMatrix(e); if (t) { for (var i = [], o = 0, n = A.length; n > o; o += 1) { var r = A[o]; if (r.isVector3) { var a = r.clone(); a.applyMatrix4(t), i.push(a.toArray()) } else if (Array.isArray(r)) { var s = (new y).fromArray(r); s.applyMatrix4(t), i.push(s.toArray()) } } return i } Bh.error("模型key无效") }, getLocalPositionListFromWorldPositionListByModelKey: function (A, e) { var t = this.getModelMatrix(e); if (t) { for (var i = (new M).getInverse(t), o = [], n = 0, r = A.length; r > n; n += 1) { var a = A[n]; if (a.isVector3) { var s = a.clone(); s.applyMatrix4(i), o.push(s.toArray()) } else if (Array.isArray(a)) { var l = (new y).fromArray(a); l.applyMatrix4(i), o.push(l.toArray()) } } return o } Bh.error("模型key无效") }, getWorldPositionArrayFromLocalPositionArrayByModelKey: function (A, e) { var t = this.getModelMatrix(e); if (t) { for (var i = [], o = 0, n = A.length; n > o; o += 3) { var r = (new y).fromArray(A, o); r.applyMatrix4(t), i.push.apply(i, yc(r.toArray())) } return i } Bh.error("模型key无效") }, getLocalPositionArrayFromWorldPositionArrayByModelKey: function (A, e) { var t = this.getModelMatrix(e); if (t) { for (var i = (new M).getInverse(t), o = [], n = 0, r = A.length; r > n; n += 3) { var a = (new y).fromArray(A, n); a.applyMatrix4(i), o.push.apply(o, yc(a.toArray())) } return o } Bh.error("模型key无效") }, render: function () { this.getViewerImpl().render() }, syncRender: function () { this.getViewerImpl()._render() }, resize: function (A, e) { this.getViewerImpl().resize(A, e) }, autoResize: function () { this.getViewerImpl().resize(window.innerWidth - 5, window.innerHeight - 5) }, setSceneBackGroundColor: function (A, e) { this.getViewerImpl().setBackgroundColor(new Xh(A, e)) }, resetSceneBackgroundColor: function () { this.getViewerImpl().resetBackgroundColor() }, getComponentsAttributeById: function (A, e, t) { this.getComponentsAttributeByKey(e + "_" + A, t) }, getComponentsAttributeByKey: function (A, e) { var t = this.getViewerImpl().getModelByComponentKey(A); if (t) { if (t.offLine) { if (t.attributes && t.attributes[A]) return void e({ attribute: t.attributes[A] }); e(null) } _d({ type: "GET", url: (t.loader.url.serverUrl || this.host) + "/api/" + t.projectKey + "/components?componentKey=" + A + ("" === t.shareKey ? "" : "&share=" + t.shareKey), headers: { Authorization: t.accessToken }, success: function (A) { try { A = JSON.parse(A) } catch (A) { Bh.log("解析属性失败") } e("SUCCESS" === A.code ? A.data : null) }, error: function (A) { e(null) } }) } else e(null) }, mergeMesh: function (A, e) { var t = this.getViewerImpl().modelManager.getModel(e); if (!t) return null; var i = new ep("mergeGroup"); i.modelKey = e; for (var o = new he, n = [], r = [], a = [], s = [], l = [], c = [], h = t.cache, d = [], p = [], g = null, u = 0, f = 0; A.length > f; f += 1) if (t.cache.components.hasOwnProperty(A)) { u += 1; var m = {}, C = r.length, y = n.length / 3; m.start = C; var v = l.length, I = t.cache.components[A], E = h.geometries[I.geoId]; if (!E) continue; var B = E.clone(), x = new M; x.fromArray(I.matrix); var S = B.attributes; B.applyMatrix(x); for (var w = 0; S.position.array.length > w; w += 1) n.push(S.position.array[w]); for (var b = 0; S.normal.array.length > b; b += 1) s.push(S.normal.array[b]); if (S.uv) for (var U = 0; S.uv.array.length > U; U += 1) a.push(S.uv.array[U]); for (var F = 0; B.index.array.length > F; F += 1) r.push(B.index.array[F] + y); if (B.groups.length > 0) for (var K = 0; B.groups.length > K; K += 1) { var Q = {}; Q.start = B.groups[K].start + C, Q.count = B.groups[K].count, -1 !== B.groups[K].materialIndex && (Q.materialIndex = B.groups[K].materialIndex + v), c.push(Q) } else { var R = {}; R.start = C, R.count = B.index.count, R.materialIndex = v, c.push(R) } var T = h.materials[I.matId]; if (!T) continue; for (F = 0; T.materials.length > F; F += 1) l.push(T.materials[F]); if (m.end = r.length / 3, m.guid = I.guid, u > vc.MaxMergeCount) { if (u = 0, o.setAttribute("position", new YA(new Float32Array(n), 3)), o.setAttribute("normal", new YA(new Float32Array(s), 3)), o.setAttribute("uv", new YA(new Float32Array(a), 2)), d = [], Array.fill) d = Array(n.length).fill(1); else for (var k = 0; n.length > k; k += 1) d.push(1); p = new Float32Array(d), o.setAttribute("color", new YA(p, 3, !0)), o.setIndex(r), o.groups = c, g = new Ue(o, l), i.add(g), o = new he, n = [], r = [], a = [], s = [], l = [], c = [] } } if (o.setAttribute("position", new YA(new Float32Array(n), 3)), o.setAttribute("normal", new YA(new Float32Array(s), 3)), o.setAttribute("uv", new YA(new Float32Array(a), 2)), d = [], Array.fill) d = Array(n.length).fill(1); else for (k = 0; n.length > k; k += 1) d.push(1); return p = new Float32Array(d), o.setAttribute("color", new YA(p, 3, !0)), o.setIndex(r), o.groups = c, g = new Ue(o, l), i.add(g), d = null, n = null, r = null, a = null, s = null, l = null, c = null, i }, setComponentPositionByKey: function (A, e) { this.getViewerImpl().setComponentPositionByKey(A, e), this.render() }, setComponentPositionById: function (A, e, t) {}, getBoxByComponentsKey: function (A) { return Array.isArray(A) || (A = [A]), this.getViewerImpl().getBoundingBoxByIds(A) }, getAttributeByComponentKey: function () {}, zoomToBox: function (A, e, t) { this.getViewerImpl().zoomToBox(A, e, t) }, zoomIn: function (A, e, t) { this.getViewerImpl().zoomIn(A, e, t) }, zoomOut: function (A, e, t) { this.getViewerImpl().zoomOut(A, e, t) }, flyToStandardView: function (A, e, t, i) { this.getViewerImpl().setStandardView(A, e, t, i) }, setStandardViewWithBox: function (A, e, t, i) { this.getViewerImpl().setStandardViewWithBox(A, e, t, i) }, adaptiveSize: function () { this.getViewerImpl().zoomToSelection() }, adaptiveSizeByKey: function (A) { Array.isArray(A) || (A = [A]); var e = this.getViewerImpl().getBoundingBoxByIds(A); e && !e.isEmpty() && this.getViewerImpl().zoomToBox(e) }, flyTo: function (A, e) { var t = this; this.getViewerImpl().animator.slerpFlyTo(A, this.viewerImpl, (function (A) { t.viewerImpl.cameraControl.update(!0, !0) }), e) }, linearFlyTo: function (A, e) { var t = this; this.getViewerImpl().animator.linearFlyTo(A, this.viewerImpl, (function (A) { t.viewerImpl.cameraControl.update(!0, !0) }), e) }, slerpFlyTo: function (A, e) { var t = this; this.getViewerImpl().animator.slerpFlyTo(A, this.viewerImpl, (function (A) { t.viewerImpl.cameraControl.update(!0, !0) }), e) }, setAnimatorDuration: function (A) { var e = this.getViewerImpl().animator; return !(!e || "number" != typeof A) && (e.setDuration(A), !0) }, getAnimatorDuration: function () { var A = this.getViewerImpl().animator; if (A) return A.getDuration() }, enableViewController: function () { var A = this; return this.viewController ? (this.viewController.enable(), !0) : (this.viewController = new lp(this.viewerImpl, (function () { return !0 })), this.viewController.init(this.getViewerImpl().getDomElement()), this.viewController.render(), this.getViewerImpl().addRenderFinishedListener((function () { A.viewController.render() })), !0) }, disableViewController: function () { return !!this.viewController && (this.viewController.disable(), !0) }, enabledCameraRotateOfVerticalPolarAngle: function (A) { this.getViewerImpl().cameraControl.enabledPolar(A), Bh.warn("请改用 lockAxisZ 方法") }, lockAxisZ: function (A, e) { this.getViewerImpl().lockAxisZ(A, e) }, setMinPolarAngle: function (A) { this.getViewerImpl().cameraControl.setMinPolarAngle(A), Bh.warn("请改用 lockAxisZ 方法") }, setMaxPolarAngle: function (A) { this.getViewerImpl().cameraControl.setMaxPolarAngle(A), Bh.warn("请改用 lockAxisZ 方法") }, getMinPolarAngle: function () { return this.getViewerImpl().cameraControl.getMinPolarAngle() }, getMaxPolarAngle: function () { return this.getViewerImpl().cameraControl.getMaxPolarAngle() }, enableRotate: function (A) { return jh.NoRotate = !A, !jh.NoRotate }, enablePan: function (A) { return jh.NoPan = !A, !jh.NoPan }, enableZoom: function (A) { return jh.NoZoom = !A, !jh.NoZoom }, setPointRotateMode: function (A) { return this.getViewerImpl().setPointRotateMode(A), jh.RotatePivotMode }, rotateCamera: function (A, e) { var t = new s, i = new y; Array.isArray(A) ? t.set(A[0], A[1]) : t.set(A.x, A.y), e ? Array.isArray(e) ? i.fromArray(e) : i.set(e.x, e.y, e.z) : i = this.getViewerImpl().getScene().getBoundingBoxWorld().getCenter(i), this.getViewerImpl().rotateCamera(t, i) }, requestPointerLock: function () { this.getViewerImpl().getControlManager().requestPointerLock() }, translateComponentByKey: function (A, e, t) { this.getViewerImpl().translateComponentByKey(A, e, t) }, scaleComponentByKey: function (A, e, t) { this.getViewerImpl().scaleComponentByKey(A, e, t) }, rotateComponentByKey: function (A, e, t) { this.getViewerImpl().rotateComponentByKey(A, e, t) }, cancelTransformComponent: function (A) { this.getViewerImpl().cancelTransformComponent(A) }, restoreComponentTransform: function () { this.getViewerImpl().restoreComponentTransform() }, getComponentLocalMatrixByKey: function (A) { return this.getViewerImpl().getComponentLocalMatrixByKey(A) }, getComponentWorldMatrixByKey: function (A) { return this.getViewerImpl().getComponentWorldMatrixByKey(A) }, setComponentLocalMatrixByKey: function (A, e) { return this.getViewerImpl().setComponentLocalMatrixByKey(A, e) }, resetComponentMatrix: function (A, e) { return this.getViewerImpl().resetComponentMatrix(A, e) }, increaseComponentTransformControlSize: function () { this.getViewerImpl().increaseComponentTransformControlSize() }, decreaseComponentTransformControlSize: function () { this.getViewerImpl().decreaseComponentTransformControlSize() }, setComponentTransformSpaceToLocalSpace: function () { this.getViewerImpl().setComponentTransformSpaceToLocalSpace() }, setComponentTransformSpaceToWorldSpace: function () { this.getViewerImpl().setComponentTransformSpaceToWorldSpace() }, switchComponentTransformSpaceBetweenLocalAndWorld: function () { this.getViewerImpl().switchComponentTransformSpaceBetweenLocalAndWorld() }, showComponentTransformOnAxis: function (A) { this.getViewerImpl().showComponentTransformOnAxis(A) }, hideComponentTransformOnAxis: function (A) { this.getViewerImpl().hideComponentTransformOnAxis(A) }, disableComponentTransform: function () { this.getViewerImpl().disableComponentTransform() }, enableComponentTransform: function () { this.getViewerImpl().enableComponentTransform() }, enableSectionBox: function () { var A = this.getViewerImpl(); A.controlManager.enableTool(A, Pc.CLIP_BY_BOX), this._sectionTool = new Ap(A), this._sectionTool.toggle(!0, !0), this._sectionTool.setVisible(!0), this._sectionTool.reset(), this._isSection = !0, this.render() }, disableSectionBox: function () { this.getViewerImpl().controlManager.disableTool(Pc.CLIP_BY_BOX), this._isSection = !1, this.render() }, resetSectionBox: function () { this._isSection ? (this.showSectionBox(), this.setSectionBoxMode(), this._sectionTool.reset("Rotate")) : Bh.log(fh[vc.language].SectionBoxLockHint) }, setSectionBoxMode: function (A) { this._isSection ? this._sectionTool.setRotatable("Rotate" === A) : Bh.log(fh[vc.language].SectionBoxLockHint) }, showSectionBox: function () { this._isSection ? (this._sectionTool.setVisible(!0), this.render()) : Bh.log(fh[vc.language].SectionBoxLockHint) }, hideSectionBox: function () { this._isSection ? (this._sectionTool.setVisible(!1), this.render()) : Bh.log(fh[vc.language].SectionBoxLockHint) }, setSectionBox: function (A) { var e = this.getViewerImpl(), t = e.getScene().getClipPlanes(), i = e.worldToDrawing(A.min), o = e.worldToDrawing(A.max); this.enableSectionBox(), t.setSectionBox(i, o), this.hideSectionBox() }, getSectionBoxState: function () { if (this._isSection) return this._sectionTool.saveState(); Bh.log(fh[vc.language].SectionBoxLockHint) }, setSectionBoxState: function (A) { this._isSection ? (this._sectionTool.loadState(A), this.render()) : Bh.log(fh[vc.language].SectionBoxLockHint) }, getSceneState: function () { return this.getViewerImpl().getSceneState() }, setSceneState: function (A) { this.getViewerImpl().setSceneState(A) }, getScreenShot: function (A) { var e, t, i, o; return A.color && A.color instanceof Xh && (e = A.color.getRGBA()), A.width > 0 && A.height > 0 && (i = A.width, o = A.height), "function" == typeof A.callback && (t = A.callback), this.getViewerImpl().canvas2image(e, i, o, t) }, registerModelEventListener: function (A, e) { this.getViewerImpl().registerEventListener(A, e) }, unregisterModelEventListener: function (A, e) { this.getViewerImpl().unregisterEventListener(A, e) }, registerControlEventListener: function (A, e) { this.getViewerImpl().registerDomEventListener(A, e) }, unregisterControlEventListener: function (A, e) { this.getViewerImpl().unregisterDomEventListener(A, e) }, registerCameraEventListener: function (A, e) { this.getViewerImpl().registerCameraEventListener(A, e) }, unregisterCameraEventListener: function (A, e) { this.getViewerImpl().unregisterCameraEventListener(A, e) }, enableLogarithmicDepthBuffer: function (A) { this.getViewerImpl().enableLogarithmicDepthBuffer(A) }, setSkyBox: function (A, e, t, i) { var o = this.getRootScene(); o && (A ? o.setSkyBox(void 0, A, e, t, i) : o.background = null) }, setDrawingStyle: function (A) { this.getViewerImpl().setDrawingStyle(A), this.render() }, setExposure: function (A) { this.getViewerImpl().setExposureShift(A), this.render() }, getBoardlineColor: function (A) { var e = this.getViewerImpl().getWireframeColor(A); return new Xh(e, e.opacity) }, setBoardlineColor: function (A, e) { var t = null; t = A instanceof Xh ? A : new Xh(A), this.getViewerImpl().setWireframeColor(t, e) }, restoreBoardlineColor: function (A) { this.getViewerImpl().restoreWireframeColor(A) }, getSelectionBoardlineColor: function () { return this.getViewerImpl().getOutlineEdgeColor() || new Xh }, setSelectionBoardlineColor: function (A) { var e = null; e = A instanceof Xh ? A : new Xh(A), this.getViewerImpl().setOutlineEdgeColor(e) }, restoreSelectionBoardlineColor: function () { this.getViewerImpl().restoreOutlineEdgeColor() }, getSelectionColor: function () { return this.getViewerImpl().getSelectionColor() }, setSelectionColor: function (A) { var e = null; e = A instanceof Xh ? A : new Xh(A), this.getViewerImpl().setSelectionColor(e) }, restoreSelectionColor: function () { this.getViewerImpl().restoreSelectionColor() }, setAxisNetColor: function (A, e) { this.viewerImpl.setAxisNetColor(A, e) }, showAxisNet: function () { this.viewerImpl.showAxisNet() }, hideAxisNet: function () { this.viewerImpl.hideAxisNet() }, enableAxisNetStayInFront: function () { this.viewerImpl.enableAxisNetStayInFront() }, disableAxisNetStayInFront: function () { this.viewerImpl.disableAxisNetStayInFront() }, getScene: function () { return this.getViewerImpl().getScene().getExternalScene() }, getRootScene: function () { return this.getViewerImpl().getScene() }, updateSceneBoundingBox: function () { this.getExternalComponentManager().calculateBoundingBox(), this.getViewerImpl().modelManager.updateSceneBoundingBox() }, getCurrentControlName: function () { return this.getViewerImpl().getCurrentControlName() }, setControlMode: function (A) { this.getViewerImpl().setControlMode(A), this.render() }, setControlDefault: function () { this.setControlMode(Gc.PICK) }, setZoomSpeed: function (A) { this.getViewerImpl().cameraControl.setZoomSpeed(A) }, getZoomSpeed: function () { return this.getViewerImpl().cameraControl.getZoomSpeed() }, setZoomOutLimitRate: function (A) { this.getViewerImpl().cameraControl.setZoomOutLimitRate(A) }, getZoomOutLimitRate: function () { return this.getViewerImpl().cameraControl.getZoomOutLimitRate() }, setLightIntensityFactor: function (A) { this.getViewerImpl().setLightIntensityFactor(A) }, enableShadow: function (A) { this.getViewerImpl().enableShadow(A) }, updateShadowLight: function () { this.getViewerImpl().updateShadowLight() }, setShadowLightDir: function (A) { var e; A ? (e = Array.isArray(A) ? (new y).fromArray(A) : A.isVector3 ? A : new y(A.x, A.y, A.z), this.getViewerImpl().getScene().lightManager.shadowLightDir = e) : Bh.error("无效参数") }, getShadowLightDir: function () { return this.getViewerImpl().getScene().lightManager.shadowLightDir.clone() }, getLightDirFromAltitudeAndAzimuth: function (A, e) { if (void 0 !== A && void 0 !== e) return this.getViewerImpl().getScene().lightManager.getLightDirFromAltitudeAndAzimuth(A, e); Bh.error("参数不合法") }, getExternalComponentManager: function () { return this.getViewerImpl().getExternalComponentManager() }, addExternalObject: function (A, e, t, i) { this.getViewerImpl().addExternalObject(A, e, t, i) }, addExternalObjects: function (A, e, t) { return this.getViewerImpl().addExternalObjects(A, e, t) }, removeExternalObjectByName: function (A) { this.getViewerImpl().removeExternalObjectByName(A) }, clearExternalObjects: function () { this.getViewerImpl().clearExternalObjects() }, getExternalObjectByName: function (A) { return this.getViewerImpl().getExternalObjectByName(A) }, getAllExternalObjects: function () { return this.getViewerImpl().getAllExternalObjects() }, showFPS: function () { this.fpsStats = new $d; var A = this; this.viewportDiv.appendChild(this.fpsStats.dom), this.fpsStats.listener = function () { A.fpsStats.update() }, this.getViewerImpl().addRenderListener(this.fpsStats.listener) }, hideFPS: function () { this.fpsStats && (this.viewportDiv.removeChild(this.fpsStats.dom), this.getViewerImpl().removeRenderListener(this.fpsStats.listener)), this.fpsStats = null }, cloneComponentByKey: function (A, e) { var t = this.getViewerImpl().cloneComponent(A); return "translate" === e ? this.translateComponentByKey(t.key) : "scale" === e ? this.scaleComponentByKey(t.key) : "rotate" === e && this.rotateComponentByKey(t.key), null !== t ? { mesh: t, key: t.key } : null }, setCloneComponentMaterialsByKey: function (A, e, t) { return this.getViewerImpl().getExternalComponentManager().setCloneComponentMaterialsByKey(A, e, t) }, createSmoothCurve: function (A) { return this.getViewerImpl().catmullRomCurve(A) }, destroy: function () { this.getViewerImpl().destroy(), this.viewController && (this.viewController.destroy(), this.viewController = null) } }); var qy, jy, Hy, Yy, Wy = function (A) { var e = A.lobibox, t = A.toolId, i = A.Flag, o = document.createElement("div"); return o.className = "tab-body", o.id = "tab-compare-" + t, e.window({ title: ("old" === t ? "新-旧" : "旧-新") + "模型对比结果", width: 334, height: 705, closeOnEsc: !1, closeButton: !0, afterWindowHide: function () { var A = document.getElementById("modelCompares" + t); i.modelCompares = !1, A && (A.style.backgroundColor = "", A.querySelector(".yj-icon").className = "yj-icon modelCompares-icon") }, afterWindowShow: function () { var A = document.getElementById("modelCompares" + t); i.modelCompares = !0, A && (A.style.backgroundColor = "#1f89de", A.querySelector(".yj-icon").className = "yj-icon modelCompares-icon active") }, content: o }) }, Jy = function (A) { var e = A.lobibox, t = A.toolId, i = document.createElement("div"); i.className = "tab-body", i.id = "tab-compare-properties-" + t; var o = document.createElement("table"); o.classList.add("sx-table"), o.classList.add("table-no-top"), i.appendChild(o); var n = document.createElement("thead"); o.appendChild(n); var r = document.createElement("tbody"); o.appendChild(r); var a = document.createElement("tr"); a.className = "noprop", r.appendChild(a); var s = document.createElement("td"); return s.innerText = "尚未选择构件", a.appendChild(s), e.window({ title: "属性对比详情", width: 500, height: 400, closeOnEsc: !1, closeButton: !0, afterWindowHide: function () {}, content: i }) }, zy = { AGGREGATION: "AGGREGATION", SEPARATION: "SEPARATION", MULTIWINDOW: "MULTIWINDOW" }, Zy = { added: "added", deleted: "deleted", changed: "changed", noChanged: "noChanged", oldChanged: "oldChanged", newChanged: "newChanged", oldNoChanged: "oldNoChanged", newNoChanged: "newNoChanged" }, Xy = { addedColor: { color: 32768, opacity: 1 }, deletedColor: { color: 16711680, opacity: 1 }, changedColor: { color: 16753920, opacity: 1 } }, _y = { ACCOUNT_NO_EXIST: "ACCOUNT_NO_EXIST", NO_PERMISSION: "NO_PERMISSION", ON_NETWORK_ERROR: "ON_NETWORK_ERROR", ON_LOAD_INVALID_COMPARES: "ON_LOAD_INVALID_COMPARES", ON_LOAD_INVALID_CONTRASTDETAILS: "ON_LOAD_INVALID_CONTRASTDETAILS", ON_LOAD_INVALID_STATE: "ON_LOAD_INVALID_STATE", ON_LOAD_ERROR: "ON_LOAD_ERROR" }, $y = function (A, e) { var t = this, i = uh.extend({}, { host: "https://bos3d.bimwinner.com", viewport: "", toolbar: !0, coloringImmediately: !1, showPanel: !1 }, A); this.host = i.host, this.coloringImmediately = i.coloringImmediately, this.domElement = document.getElementById(i.viewport), this.domElement.style.position = "relative", this.oldModelKey = "", this.newModelKey = "", this.displayModel = e || zy.SEPARATION, t.oldNoChangedList = [], t.newNoChangedList = [], t.oldChangedList = [], t.newChangedList = [], t.deletedList = [], t.addedList = [], this.useNewUI = Boolean(window.EIMMODELUI); var o = { modelCompares: i.showPanel }, n = { modelCompares: i.showPanel }; switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: if (this.firstViewer = new Py(A), this.secondViewer = this.firstViewer, t.oldLobibox = new bh, t.oldLobibox.viewport = document.querySelector("#" + t.firstViewer.viewport), t.newLobibox = t.oldLobibox, i.toolbar) { this.useNewUI ? this.firstTool = new window.EIMMODELUI({ viewer3D: this.firstViewer, EIM: window.EIM, EIMMODEL: window.EIMMODEL }) : (this.firstTool = new Xd(this.firstViewer), this.firstTool.createTool()), this.secondTool = this.firstTool, this.oldCompareWindow = Wy({ toolId: "old", lobibox: t.oldLobibox, Flag: o }), this.newCompareWindow = this.oldCompareWindow, this.oldContrastDetailsWindow = Jy({ toolId: "old", lobibox: t.oldLobibox }), this.newContrastDetailsWindow = this.oldContrastDetailsWindow, this.oldCompareWindow.setPosition({ left: "", right: 5, top: 60 }), this.oldContrastDetailsWindow.setPosition({ left: t.domElement.offsetWidth / 2 + t.domElement.offsetLeft / 2 - 250, top: 200 }), t.oldContrastDetailsWindow.windowHide(); var r = document.createElement("div"); r.className = "yj-group", this.useNewUI ? this.firstTool.plugin.addIcon("topRight", r) : this.firstTool.toolbarTop.appendChild(r); var a = document.createElement("button"); a.className = "yj-but", a.title = "模型对比结果", a.id = "modelComparesold"; var s = document.createElement("div"); s.classList.add("yj-icon"), s.classList.add("modelCompares-icon"), a.appendChild(s), r.appendChild(a), a.addEventListener("click", (function (A) { o.modelCompares ? t.oldCompareWindow.windowHide() : (o.modelCompares = !o.modelCompares, t.oldCompareWindow.windowShow()) })) } break; case zy.MULTIWINDOW: var l = document.createElement("div"); l.setAttribute("id", "firstViewer"), l.style.width = "50%", l.style.height = "100%", l.style.float = "left", this.domElement.appendChild(l); var c = document.createElement("div"); if (c.setAttribute("id", "secondViewer"), c.style.width = "50%", c.style.height = "100%", c.style.float = "left", this.domElement.appendChild(l), this.domElement.appendChild(c), this.firstViewer = new Py({ host: this.host, viewport: "firstViewer" }), this.secondViewer = new Py({ host: this.host, viewport: "secondViewer" }), t.oldLobibox = new bh, t.oldLobibox.viewport = document.querySelector("#" + t.firstViewer.viewport), t.newLobibox = new bh, t.newLobibox.viewport = document.querySelector("#" + t.secondViewer.viewport), i.toolbar) { this.useNewUI ? (this.firstTool = new window.EIMMODELUI({ viewer3D: this.firstViewer, EIM: window.EIM, EIMMODEL: window.EIMMODEL }), this.secondTool = new window.EIMMODELUI({ viewer3D: this.secondViewer, EIM: window.EIM, EIMMODEL: window.EIMMODEL })) : (this.firstTool = new Xd(this.firstViewer), this.firstTool.createTool(), this.secondTool = new Xd(this.secondViewer), this.secondTool.createTool()), this.oldCompareWindow = Wy({ toolId: "old", lobibox: t.oldLobibox, Flag: o }), this.newCompareWindow = Wy({ toolId: "new", lobibox: t.newLobibox, Flag: n }), this.oldContrastDetailsWindow = Jy({ toolId: "old", lobibox: t.oldLobibox }), this.newContrastDetailsWindow = Jy({ toolId: "new", lobibox: t.newLobibox }), t.oldContrastDetailsWindow.windowHide(), t.newContrastDetailsWindow.windowHide(), this.oldContrastDetailsWindow.setTitle("旧-新属性对比详情"), this.newContrastDetailsWindow.setTitle("新-旧属性对比详情"), this.oldCompareWindow.setPosition({ left: "", right: 5 + t.domElement.offsetWidth / 2 + t.domElement.offsetLeft / 2, top: 60 }), this.oldContrastDetailsWindow.setPosition({ left: t.domElement.offsetWidth / 4 + t.domElement.offsetLeft / 4 - 250, top: 200 }), this.newCompareWindow.setPosition({ left: "", right: 5, top: 60 }), this.newContrastDetailsWindow.setPosition({ left: t.domElement.offsetWidth / 4 * 3 + t.domElement.offsetLeft / 4 * 3 - 250, top: 200 }); var h = document.createElement("div"); h.className = "yj-group", this.useNewUI ? this.firstTool.plugin.addIcon("topRight", h) : this.firstTool.toolbarTop.appendChild(h); var d = document.createElement("button"); d.className = "yj-but", d.title = "模型对比结果", d.id = "modelComparesold"; var p = document.createElement("div"); p.classList.add("yj-icon"), p.classList.add("modelCompares-icon"), d.appendChild(p), h.appendChild(d), d.addEventListener("click", (function (A) { o.modelCompares ? t.oldCompareWindow.windowHide() : (o.modelCompares = !o.modelCompares, t.oldCompareWindow.windowShow()) })); var g = document.createElement("div"); g.className = "yj-group", this.useNewUI ? this.secondTool.plugin.addIcon("topRight", g) : this.secondTool.toolbarTop.appendChild(g); var u = document.createElement("button"); u.className = "yj-but", u.title = "模型对比结果", u.id = "modelComparesnew"; var f = document.createElement("div"); f.classList.add("yj-icon"), f.classList.add("modelCompares-icon"), u.appendChild(f), g.appendChild(u), u.addEventListener("click", (function (A) { n.modelCompares ? t.newCompareWindow.windowHide() : (n.modelCompares = !n.modelCompares, t.newCompareWindow.windowShow()) })) } break; default: Bh.error("无效的显示模式!") } i.showPanel || (t.newCompareWindow && t.newCompareWindow.windowHide(), t.oldCompareWindow && t.oldCompareWindow.windowHide()), this.firstViewer.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_COMPLETE, (function (A) { A.modelKey === t.oldModelKey && (t.oldModelLoaded = !0, t._applyCompareData(), t._initCompareResultPlane(t.compareData)) })), this.secondViewer.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_COMPLETE, (function (A) { A.modelKey === t.newModelKey && (t.newModelLoaded = !0, t._applyCompareData(), t._initCompareResultPlane(t.compareData)) })) }; Object.assign($y.prototype, Ld.prototype), Object.assign($y.prototype, { resize: function (A, e) { switch (this.domElement && (this.domElement.style.height = e + "px", this.domElement.style.width = A + "px"), this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.resize(A, e); break; case zy.MULTIWINDOW: this.firstViewer.resize(A / 2, e), this.secondViewer.resize(A / 2, e); break; default: this.firstViewer.resize(A, e) } }, autoResize: function () { this.resize(this.getClientWidth(), this.getClientHeight()) }, getClientHeight: function () { return xh.getClientHeight() }, getClientWidth: function () { return xh.getClientWidth() }, resetOldScene: function (A) { this.firstViewer.resetScene(A) }, resetNewScene: function (A) { this.secondViewer.resetScene(A) }, resetScene: function (A) { this.firstViewer.resetScene(A), this.secondViewer.resetScene(A), this._applyCompareData() }, transparentComponentsByType: function (A) { var e = this._getDataByType(A); this.firstViewer.transparentComponentsByKey(e.oldList), this.secondViewer.transparentComponentsByKey(e.newList) }, transparentOtherComponentsByType: function (A) { var e = this._getDataByType(A); switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.transparentOtherComponentsByKey([].concat(e.oldList).concat(e.newList)); break; case zy.MULTIWINDOW: this.firstViewer.transparentOtherComponentsByKey(e.oldList), this.secondViewer.transparentOtherComponentsByKey(e.newList) } }, closeTransparentComponentsByType: function (A) { var e = this._getDataByType(A); switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.closeTransparentComponentsByKey([].concat(e.oldList).concat(e.newList)); break; case zy.MULTIWINDOW: this.firstViewer.closeTransparentComponentsByKey(e.oldList), this.secondViewer.closeTransparentComponentsByKey(e.newList) } }, clearComponentTransparentList: function () { switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.clearComponentTransparentList(); break; case zy.MULTIWINDOW: this.firstViewer.clearComponentTransparentList(), this.secondViewer.clearComponentTransparentList() } }, showComponentsByType: function (A) { var e = this._getDataByType(A); switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.showComponentsByKey([].concat(e.oldList).concat(e.newList)); break; case zy.MULTIWINDOW: this.firstViewer.showComponentsByKey(e.oldList), this.secondViewer.showComponentsByKey(e.newList) } }, hideComponentsByType: function (A) { var e = this._getDataByType(A); switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.hideComponentsByKey([].concat(e.oldList).concat(e.newList)); break; case zy.MULTIWINDOW: this.firstViewer.hideComponentsByKey(e.oldList), this.secondViewer.hideComponentsByKey(e.newList) } }, highlightComponentsByType: function (A) { var e = this._getDataByType(A); switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.highlightComponentsByKey([].concat(e.oldList).concat(e.newList)); break; case zy.MULTIWINDOW: this.firstViewer.highlightComponentsByKey(e.oldList), this.secondViewer.highlightComponentsByKey(e.newList) } }, addHighlightComponentsByType: function (A) { var e = this._getDataByType(A); switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.addHighlightComponentsByKey([].concat(e.oldList).concat(e.newList)); break; case zy.MULTIWINDOW: this.firstViewer.addHighlightComponentsByKey(e.oldList), this.secondViewer.addHighlightComponentsByKey(e.newList) } }, closeHighlightComponentsByType: function (A) { var e = this._getDataByType(A); switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.closeHighlightComponentsByKey([].concat(e.oldList).concat(e.newList)); break; case zy.MULTIWINDOW: this.firstViewer.closeHighlightComponentsByKey(e.oldList), this.secondViewer.closeHighlightComponentsByKey(e.newList) } }, getHighlightComponentsKey: function () { switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: return this.firstViewer.getHighlightComponentsKey(); case zy.MULTIWINDOW: return [].concat(this.firstViewer.getHighlightComponentsKey()).concat(this.secondViewer.getHighlightComponentsKey()); default: return [] } }, clearHighlightList: function () { switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.clearHighlightList(); break; case zy.MULTIWINDOW: this.firstViewer.clearHighlightList(), this.secondViewer.clearHighlightList() } }, getHighlightComponents: function () { switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: return this.firstViewer.getHighlightComponents(); case zy.MULTIWINDOW: return [].concat(this.firstViewer.getHighlightComponents()).concat(this.secondViewer.getHighlightComponents()); default: return [] } }, colorfulComponentsByType: function (A, e, t) { var i = this._getDataByType(A); switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.colorfulComponentsByKey([].concat(i.oldList).concat(i.newList), e, t); break; case zy.MULTIWINDOW: this.firstViewer.colorfulComponentsByKey(i.oldList, e, t), this.secondViewer.colorfulComponentsByKey(i.newList, e, t) } }, closeColorfulComponentsByType: function (A) { var e = this._getDataByType(A); switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.closeColorfulComponentsByKey([].concat(e.oldList).concat(e.newList)); break; case zy.MULTIWINDOW: this.firstViewer.closeColorfulComponentsByKey(e.oldList), this.secondViewer.closeColorfulComponentsByKey(e.newList) } }, clearColorfulList: function () { switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.clearColorfulList(); break; case zy.MULTIWINDOW: this.firstViewer.clearColorfulList(), this.secondViewer.clearColorfulList() } }, wireFrameComponentsByType: function (A) { var e = this._getDataByType(A); switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.wireFrameComponentsByKey([].concat(e.oldList).concat(e.newList)); break; case zy.MULTIWINDOW: this.firstViewer.wireFrameComponentsByKey(e.oldList), this.secondViewer.wireFrameComponentsByKey(e.newList) } }, closeWireFrameComponentsByType: function (A) { var e = this._getDataByType(A); switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.closeWireFrameComponentsByKey([].concat(e.oldList).concat(e.newList)); break; case zy.MULTIWINDOW: this.firstViewer.closeWireFrameComponentsByKey(e.oldList), this.secondViewer.closeWireFrameComponentsByKey(e.newList) } }, clearWireframeList: function () { switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.clearWireframeList(); break; case zy.MULTIWINDOW: this.firstViewer.clearWireframeList(), this.secondViewer.clearWireframeList() } }, isolateComponentsByType: function (A, e) { var t = this._getDataByType(A); switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.isolateComponentsByKey([].concat(t.oldList).concat(t.newList), e); break; case zy.MULTIWINDOW: this.firstViewer.isolateComponentsByKey(t.oldList, e), this.secondViewer.isolateComponentsByKey(t.newList, e) } }, closeIsolateComponentsByType: function (A) { var e = this._getDataByType(A); switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.closeIsolateComponentsByKey([].concat(e.oldList).concat(e.newList)); break; case zy.MULTIWINDOW: this.firstViewer.closeIsolateComponentsByKey(e.oldList), this.secondViewer.closeIsolateComponentsByKey(e.newList) } }, clearIsolation: function () { switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.clearIsolation(); break; case zy.MULTIWINDOW: this.firstViewer.clearIsolation(), this.secondViewer.clearIsolation() } }, getAddedList: function () { return this.addedList }, getDeletedList: function () { return this.deletedList }, getChangedList: function () { return [].concat(this.oldChangedList).concat(this.newChangedList) }, getNoChangedList: function () { return [].concat(this.oldNoChangedList).concat(this.newNoChangedList) }, getNewChangedList: function () { return this.newChangedList }, getOldChangedList: function () { return this.oldChangedList }, getNewNoChangedList: function () { return this.newNoChangedList }, getOldNoChangedList: function () { return this.oldNoChangedList }, setAddedColor: function (A, e) { Xy.addedColor.color = A, Xy.addedColor.opacity = e }, setChangedColor: function (A, e) { Xy.changedColor.color = A, Xy.changedColor.opacity = e }, setDeletedColor: function (A, e) { Xy.deletedColor.color = A, Xy.deletedColor.opacity = e }, getAddedColor: function () { return Xy.addedColor }, getChangedColor: function () { return Xy.changedColor }, getDeletedColor: function () { return Xy.deletedColor }, getOldViewer: function () { return this.firstViewer }, getNewViewer: function () { return this.secondViewer }, getOldToolbar: function () { return this.firstTool }, getNewToolbar: function () { return this.secondTool }, getComponentAttribute: function (A, e) { var t = this.firstViewer.viewerImpl.getModelByComponentKey(A), i = this.secondViewer.viewerImpl.getModelByComponentKey(A); t ? this.firstViewer.getComponentsAttributeByKey(A, (function (A) { A && e(A.attribute) })) : i && this.secondViewer.getComponentsAttributeByKey(A, (function (A) { A && e(A.attribute) })) }, getContrastDetails: function (A, e, t) { var i = this; _d({ type: "GET", url: this.host + "/api/" + this.projectKey + "/compares/changes?compareKey=" + this.compareKey + "&newComponentKey=" + e + "&oldComponentKey=" + A, headers: { Authorization: this.accessToken }, success: function (A) { var e = {}; if ("string" == typeof A) try { e = JSON.parse(A) } catch (A) { return void i.dispatchEvent({ type: _y.ON_LOAD_INVALID_CONTRASTDETAILS, compareKey: i.compareKey }) } else e = A; e && "SUCCESS" === e.code ? t && t(e.data) : (Bh.log(i.compareKey, "获取对比详情出错! ", e.message), i.dispatchEvent({ type: _y.ON_LOAD_ERROR, compareKey: i.compareKey, code: e.code, message: e.message })) }, error: function (A, e) { switch (A) { case 401: i.dispatchEvent({ type: _y.ACCOUNT_NO_EXIST, compareKey: i.compareKey, data: e }); break; case 403: i.dispatchEvent({ type: _y.NO_PERMISSION, compareKey: i.compareKey, data: e }); break; default: i.dispatchEvent({ type: _y.ON_NETWORK_ERROR, compareKey: i.compareKey, data: A }) } } }) }, showOldContrastDetails: (qy = "", jy = document.getElementById("tab-compare-properties-old"), Hy = function (A, e, t, i, o) { var n = document.createElement("tr"); i.parentNode.appendChild(n), n.classList.add(o); var r = document.createElement("td"); r.innerText = A || "", n.appendChild(r); var a = document.createElement("td"); a.innerText = e || "", n.appendChild(a); var s = document.createElement("td"); s.innerText = t || "", n.appendChild(s) }, Yy = function (A, e, t, i) { var o = document.createElement("tr"); o.className = "sx-active", jy.querySelector("table tbody").appendChild(o); var n = document.createElement("td"); for (var r in n.colSpan = 2, n.style.fontSize = "14px", o.appendChild(n), n.appendChild(document.createElement("b")), n.firstElementChild.innerHTML = A, e) if (e.hasOwnProperty(r)) { if (!(t && t[r] || i && i[r])) { Hy(r, e[r], e[r], o, "compares_noChanged"); continue } if (t && t[r] && i && i[r]) { Hy(r, e[r], i[r], o, "compares_changed"), delete i[r]; continue } if ((!t || !t[r]) && i && i[r]) { Hy(r, "", i[r], o, "compares_added"), delete i[r]; continue }!t || !t[r] || i && i[r] || Hy(r, e[r], "", o, "compares_deleted") } for (var a in i) i.hasOwnProperty(a) && (void 0 !== e[a] ? Hy(a, e[a], i[a], o, "compares_changed") : Hy(a, "", i[a], o, "compares_added")) }, function (A) { var e = this; if ((jy = document.querySelector("#tab-compare-properties-old")) && (e.showOldContrastDetailsWindow(), A !== qy)) { if (void 0 === A) { var t = jy.querySelectorAll("table tbody tr"); jy.querySelector("table tbody").removeChild(t[0]), jy.querySelector("table tbody").innerHTML = ""; var i = document.createElement("tr"); i.className = "noprop"; var o = document.createElement("td"); return o.setAttribute("colspan", "2"), o.innerHTML = "未选中构件", i.appendChild(o), jy.querySelector("table tbody").appendChild(i), void(qy = A) } qy = A; var n = jy.querySelectorAll("table tbody tr"); jy.querySelector("table tbody").removeChild(n[0]), e.getComponentAttribute(qy, (function (A) { if (jy.querySelector("table tbody").innerHTML = "", null === A) { var t = document.createElement("tr"); t.className = "noprop"; var i = document.createElement("td"); return i.innerHTML = "没有属性", t.appendChild(i), void jy.querySelector("table tbody").appendChild(t) } if (void 0 === A) { var o = document.createElement("tr"); o.className = "noprop"; var n = document.createElement("td"); return n.innerHTML = "属性加载失败", o.appendChild(n), void jy.querySelector("table tbody").appendChild(o) } var r = qy.indexOf("_"); if (-1 !== r) { var a = e.newModelKey + qy.slice(r); e.getContrastDetails(qy, a, (function (e) { var t = e.old.attribute, i = e.new.attribute, o = document.createElement("tr"); o.className = "noprop"; var n = document.createElement("th"); o.appendChild(n); var r = document.createElement("span"); r.classList.add("value"), r.classList.add("nonEditable"), r.innerHTML = "属性名", n.appendChild(r); var a = document.createElement("th"); o.appendChild(a); var s = document.createElement("span"); s.classList.add("value"), s.classList.add("nonEditable"), s.innerHTML = "修改前", a.appendChild(s); var l = document.createElement("th"); o.appendChild(l); var c = document.createElement("span"); c.classList.add("value"), c.classList.add("nonEditable"), c.innerHTML = "修改后", l.appendChild(c), jy.querySelector("table tbody").appendChild(o); var h = A; for (var d in h) "object" === lc(h[d]) ? (Yy(d, h[d], t[d], i[d]), delete i[d]) : "string" == typeof h[d] && Hy(d, h[d], i[d], o); for (var p in i) "object" === lc(h[p]) ? Yy(p, h[p], t[p], i[p]) : "string" == typeof h[p] && Hy(p, h[p], i[p], o) })) } })) } } ), showNewContrastDetails: function () { var A = "", e = document.getElementById("tab-compare-properties-new"), t = function (A, e, t, i, o) { var n = document.createElement("tr"); i.parentNode.appendChild(n), n.classList.add(o); var r = document.createElement("td"); r.innerText = A || "", n.appendChild(r); var a = document.createElement("td"); a.innerText = e || "", n.appendChild(a); var s = document.createElement("td"); s.innerText = t || "", n.appendChild(s) }, i = function (A, i, o, n) { var r = document.createElement("tr"); r.className = "sx-active", e.querySelector("table tbody").appendChild(r); var a = document.createElement("td"); for (var s in a.colSpan = 2, a.style.fontSize = "14px", r.appendChild(a), a.appendChild(document.createElement("b")), a.firstElementChild.innerHTML = A, i) if (i.hasOwnProperty(s)) { if (!(o && o[s] || n && n[s])) { t(s, i[s], i[s], r, "compares_noChanged"); continue } if (o && o[s] && n && n[s]) { t(s, i[s], n[s], r, "compares_changed"), delete n[s]; continue } if ((!o || !o[s]) && n && n[s]) { t(s, "", n[s], r, "compares_added"), delete n[s]; continue }!o || !o[s] || n && n[s] || t(s, i[s], "", r, "compares_deleted") } for (var l in n) n.hasOwnProperty(l) && (void 0 !== i[l] ? t(l, i[l], n[l], r, "compares_changed") : t(l, "", n[l], r, "compares_added")) }; return function (o) { var n = this; if ((e = document.querySelector("#tab-compare-properties-new")) && (n.showNewContrastDetailsWindow(), o !== A)) { if (void 0 === o) { var r = e.querySelectorAll("table tbody tr"); e.querySelector("table tbody").removeChild(r[0]), e.querySelector("table tbody").innerHTML = ""; var a = document.createElement("tr"); a.className = "noprop"; var s = document.createElement("td"); return s.setAttribute("colspan", "2"), s.innerHTML = "未选中构件", a.appendChild(s), e.querySelector("table tbody").appendChild(a), void(A = o) } A = o; var l = e.querySelectorAll("table tbody tr"); e.querySelector("table tbody").removeChild(l[0]), n.getComponentAttribute(A, (function (o) { if (e.querySelector("table tbody").innerHTML = "", null === o) { var r = document.createElement("tr"); r.className = "noprop"; var a = document.createElement("td"); return a.innerHTML = "没有属性", r.appendChild(a), void e.querySelector("table tbody").appendChild(r) } if (void 0 === o) { var s = document.createElement("tr"); s.className = "noprop"; var l = document.createElement("td"); return l.innerHTML = "属性加载失败", s.appendChild(l), void e.querySelector("table tbody").appendChild(s) } var c = A.indexOf("_"); if (-1 !== c) { var h = n.oldModelKey + A.slice(c); n.getContrastDetails(h, A, (function (A) { var n = A.new.attribute, r = A.old.attribute, a = document.createElement("tr"); a.className = "noprop"; var s = document.createElement("th"); a.appendChild(s); var l = document.createElement("span"); l.classList.add("value"), l.classList.add("nonEditable"), l.innerHTML = "属性名", s.appendChild(l); var c = document.createElement("th"); a.appendChild(c); var h = document.createElement("span"); h.classList.add("value"), h.classList.add("nonEditable"), h.innerHTML = "修改前", c.appendChild(h); var d = document.createElement("th"); a.appendChild(d); var p = document.createElement("span"); p.classList.add("value"), p.classList.add("nonEditable"), p.innerHTML = "修改后", d.appendChild(p), e.querySelector("table tbody").appendChild(a); var g = o; for (var u in g) "object" === lc(g[u]) ? (i(u, g[u], n[u], r[u]), delete r[u]) : "string" == typeof g[u] && t(u, g[u], r[u], a); for (var f in r) "object" === lc(g[f]) ? i(f, g[f], n[f], r[f]) : "string" == typeof g[f] && t(f, g[f], r[f], a) })) } })) } } }(), showOldContrastDetailsWindow: function () { this.oldContrastDetailsWindow && this.oldContrastDetailsWindow.windowShow && this.oldContrastDetailsWindow.windowShow() }, showNewContrastDetailsWindow: function () { this.newContrastDetailsWindow && this.newContrastDetailsWindow.windowShow && this.newContrastDetailsWindow.windowShow() }, hideOldContrastDetailsWindow: function () { this.oldContrastDetailsWindow && this.oldContrastDetailsWindow.windowHide && this.oldContrastDetailsWindow.windowHide() }, hideNewContrastDetailsWindow: function () { this.newContrastDetailsWindow && this.newContrastDetailsWindow.windowHide() && this.newContrastDetailsWindow.windowHide() }, showContrastDetailsWindow: function () { this.showOldContrastDetailsWindow(), this.showNewContrastDetailsWindow() }, hideContrastDetailsWindow: function () { this.hideOldContrastDetailsWindow(), this.hideNewContrastDetailsWindow() }, showOldCompareWindow: function () { this.oldCompareWindow && this.oldCompareWindow.windowShow && this.oldCompareWindow.windowShow() }, showNewCompareWindow: function () { this.newCompareWindow && this.newCompareWindow.windowShow && this.newCompareWindow.windowShow() }, hideOldCompareWindow: function () { this.oldCompareWindow && this.oldCompareWindow.windowHide && this.oldCompareWindow.windowHide() }, hideNewCompareWindow: function () { this.newCompareWindow && this.newCompareWindow.windowHide() && this.newCompareWindow.windowHide() }, showCompareWindow: function () { this.showOldCompareWindow(), this.showNewCompareWindow() }, hideCompareWindow: function () { this.hideOldCompareWindow(), this.hideNewCompareWindow() } }), $y.prototype.addView = function (A, e, t) { var i = this; this.compareKey = A, this.projectKey = e, this.accessToken = t || "", _d({ type: "GET", url: this.host + "/api/" + e + "/compares/status?compareKey=" + A, headers: { Authorization: this.accessToken }, success: i._loadSuccess.bind(i), error: function (e, t) { switch (e) { case 401: i.dispatchEvent({ type: _y.ACCOUNT_NO_EXIST, compareKey: A, data: t }); break; case 403: i.dispatchEvent({ type: _y.NO_PERMISSION, compareKey: A, data: t }); break; default: i.dispatchEvent({ type: _y.ON_NETWORK_ERROR, compareKey: A, data: e }) } } }), i._loadCompares() }, $y.prototype._loadCompares = function () { var A = this; _d({ type: "GET", url: this.host + "/api/" + this.projectKey + "/compares?compareKey=" + this.compareKey, headers: { Authorization: this.accessToken }, success: A._loadComparesSuccess.bind(A), error: function (e, t) { switch (e) { case 401: A.dispatchEvent({ type: _y.ACCOUNT_NO_EXIST, compareKey: A.compareKey, data: t }); break; case 403: A.dispatchEvent({ type: _y.NO_PERMISSION, compareKey: A.compareKey, data: t }); break; default: A.dispatchEvent({ type: _y.ON_NETWORK_ERROR, compareKey: A.compareKey, data: e }) } } }) }, $y.prototype._loadComparesSuccess = function (A) { var e = {}; if ("string" == typeof A) try { e = JSON.parse(A) } catch (A) { return void this.dispatchEvent({ type: _y.ON_LOAD_INVALID_COMPARES, compareKey: this.compareKey }) } else e = A; if (e && "SUCCESS" === e.code) { this.compareData = e.data, this.compareDataLoaded = !0; for (var t = [], i = [], o = [], n = [], r = null, a = 0, s = this.compareData.changed.categories.length; s > a; a += 1) for (var l = 0, c = this.compareData.changed.categories[a].elements.length; c > l; l += 1) t.push((r = this.compareData.changed.categories[a].elements[l]).oldComponentKey), i.push(r.newComponentKey); for (var h = 0, d = this.compareData.added.categories.length; d > h; h += 1) for (var p = 0, g = this.compareData.added.categories[h].elements.length; g > p; p += 1) o.push((r = this.compareData.added.categories[h].elements[p]).componentKey); for (var u = 0, f = this.compareData.deleted.categories.length; f > u; u += 1) for (var m = 0, C = this.compareData.deleted.categories[u].elements.length; C > m; m += 1) n.push((r = this.compareData.deleted.categories[u].elements[m]).componentKey); this.oldChangedList = t, this.newChangedList = i, this.deletedList = n, this.addedList = o, this._initCompareResultPlane(e.data), this._applyCompareData() } else Bh.log(this.compareKey, "config load error! ", e.message), this.dispatchEvent({ type: _y.ON_LOAD_ERROR, compareKey: this.compareKey, code: e.code, message: e.message }) }, $y.prototype._loadSuccess = function (A) { var e = {}; if ("string" == typeof A) try { e = JSON.parse(A) } catch (A) { return void this.dispatchEvent({ type: _y.ON_LOAD_INVALID_STATE, compareKey: this.compareKey }) } else e = A; if (e && "SUCCESS" === e.code) if ("1" !== e.data.status) ; else switch (this.oldModelKey = e.data.old, this.newModelKey = e.data.new, this.name = e.data.name, this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: this.firstViewer.addView(this.oldModelKey, this.projectKey, this.accessToken), this.firstViewer.addView(this.newModelKey, this.projectKey, this.accessToken); break; case zy.MULTIWINDOW: this.firstViewer.addView(this.oldModelKey, this.projectKey, this.accessToken), this.secondViewer.addView(this.newModelKey, this.projectKey, this.accessToken); break; default: this.firstViewer.addView(this.oldModelKey, this.projectKey, this.accessToken), this.firstViewer.addView(this.newModelKey, this.projectKey, this.accessToken) } else Bh.log(this.compareKey, "config load error! ", e.message), this.dispatchEvent({ type: _y.ON_LOAD_ERROR, compareKey: this.compareKey, code: e.code, message: e.message }) }, $y.prototype._applyCompareData = function () { if (this.oldModelLoaded && this.newModelLoaded && this.compareDataLoaded) { var A = this.firstViewer.getViewerImpl().getModel(this.oldModelKey), e = null, t = null; if (A) { var i = A.getComponentlist(); e = this.firstViewer.getBoxByComponentsKey(i); for (var o = 0, n = this.deletedList.length; n > o; o += 1) i.remove(this.deletedList[o]); for (var r = 0, a = this.oldChangedList.length; a > r; r += 1) i.remove(this.oldChangedList[r]); this.oldNoChangedList = i } var s = this.secondViewer.getViewerImpl().getModel(this.newModelKey); if (s) { var l = s.getComponentlist(); t = this.firstViewer.getBoxByComponentsKey(l); for (var c = 0, h = this.addedList.length; h > c; c += 1) l.remove(this.addedList[c]); for (var d = 0, p = this.newChangedList.length; p > d; d += 1) l.remove(this.newChangedList[d]); this.newNoChangedList = l } if (this.displayModel === zy.SEPARATION && !e.isEmpty() && !t.isEmpty()) { var g = e.getSize(), u = t.getSize(), f = 1, m = 1, C = 0; f = u.x > g.x ? g.x : u.x, m = u.y > g.y ? g.y : u.y; var y = s.getModelMatrix(), v = this.firstViewer.viewerImpl.modelManager.scene.getBoundingBoxWorld(); f > m ? (y.elements[14] += C = 1.5 * m, v.min.y -= C / 2, v.max.y += C / 2) : (y.elements[13] += C = 1.5 * f, v.min.x -= C / 2, v.max.x += C / 2), s.setModelMatrix(y), this.firstViewer.viewerImpl.modelManager.scene.setBoundingBoxWorld(v), this.firstViewer.adaptiveSize() } this.coloringImmediately && (this.firstViewer.colorfulComponentsByKey(this.deletedList, Xy.deletedColor.color, Xy.deletedColor.opacity), this.secondViewer.colorfulComponentsByKey(this.addedList, Xy.addedColor.color, Xy.addedColor.opacity), this.firstViewer.colorfulComponentsByKey(this.oldChangedList, Xy.changedColor.color, Xy.changedColor.opacity), this.secondViewer.colorfulComponentsByKey(this.newChangedList, Xy.changedColor.color, Xy.changedColor.opacity)) } }, $y.prototype._getDataByType = function (A) { var e = [], t = []; switch (A) { case Zy.added: t = this.addedList; break; case Zy.deleted: e = this.deletedList; break; case Zy.changed: e = this.oldChangedList, t = this.newChangedList; break; case Zy.noChanged: e = this.oldNoChangedList, t = this.newNoChangedList; break; case Zy.oldChanged: e = this.oldChangedList; break; case Zy.newChanged: t = this.newChangedList; break; case Zy.oldNoChanged: e = this.oldNoChangedList; break; case Zy.newNoChanged: t = this.newNoChangedList } return { oldList: e, newList: t } }, $y.prototype._addProperty = function (A, e, t) { var i = this, o = document.createElement("tr"); o.classList.add("compares_list_tr"); var n = document.createElement("td"); n.innerText = A || "", o.appendChild(n); var r = document.createElement("td"); if (r.innerText = e || "", o.appendChild(r), void 0 !== t) { var a = document.createElement("td"), s = document.createElement("a"); s.classList.add("showDetails"), t ? (s.innerHTML = "查看详情", s.addEventListener("click", (function (A) { A.stopPropagation(); for (var e = A.target.parentNode.parentNode.oldKey, t = A.target.parentNode.parentNode.newKey, o = 0, n = A.path.length; n > o; o += 1) { if ("tab-compare-old" === A.path[o].id) { i.showOldContrastDetails(e); break } if ("tab-compare-new" === A.path[o].id) { i.showNewContrastDetails(t); break } } }))) : s.innerHTML = "无", a.appendChild(s), o.appendChild(a) } return o }, $y.prototype._initCompareResultPlane = function (A) { if (this.oldModelLoaded && this.newModelLoaded && this.compareDataLoaded) switch (this.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: var e = document.getElementById("tab-compare-old"); if (!e) return; this._createPanel(e, A); break; case zy.MULTIWINDOW: var t = document.getElementById("tab-compare-old"); if (!t) return; this._createInversionPanel(t, A); var i = document.getElementById("tab-compare-new"); if (!i) return; this._createPanel(i, A) } }, $y.prototype._createPanel = function (A, e) { var t = this; if (A) { var i = document.createElement("div"); i.classList.add("compares_list_body"), A.appendChild(i); var o = document.createElement("div"); o.classList.add("compares_list_title"), o.innerText = "新增构件列表(" + t.addedList.length + ")", o.addEventListener("click", (function (A) { for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = 0, n = e.length; n > o; o += 1) e[o].newKey && i.push(e[o].newKey); t.secondViewer.adaptiveSizeByKey(i), t.secondViewer.clearColorfulList(), t.secondViewer.clearTransparentList(), t.secondViewer.transparentOtherComponentsByKey(i), t.secondViewer.colorfulComponentsByKey(i, Xy.addedColor.color, Xy.addedColor.opacity) })), i.appendChild(o); var n = document.createElement("table"); n.classList.add("sx-table"), n.classList.add("compares_list_table"), n.classList.add("table-no-top"), i.appendChild(n); var r = document.createElement("thead"); n.appendChild(r); var a = document.createElement("tbody"); n.appendChild(a); var s = document.createElement("tr"); s.style.backgroundColor = "rgba(0, 128, 0, 0.8)", s.className = "noprop"; var l = document.createElement("th"); s.appendChild(l); var c = document.createElement("span"); c.classList.add("value"), c.classList.add("nonEditable"), c.innerHTML = "名称", l.appendChild(c); var h = document.createElement("th"); s.appendChild(h); var d = document.createElement("span"); d.classList.add("value"), d.classList.add("nonEditable"), d.innerHTML = "类型", h.appendChild(d), r.appendChild(s); for (var p = 0, g = t.addedList.length; g > p; p += 1) { var u = t.secondViewer.getComponentsByKey(t.addedList[p]); if (u && u[0] && u[0][t.addedList[p]] && u[0][t.addedList[p]][0]) { var f = t._addProperty(u[0][t.addedList[p]][0].name, u[0][t.addedList[p]][0].type); f.oldKey = "", f.newKey = t.addedList[p], f.addEventListener("click", (function (A) { var e = A.target.parentNode.newKey; e && (t.secondViewer.adaptiveSizeByKey(e), t.secondViewer.clearColorfulList(), t.secondViewer.clearTransparentList(), t.secondViewer.transparentOtherComponentsByKey(e), t.secondViewer.colorfulComponentsByKey(e, Xy.addedColor.color, Xy.addedColor.opacity)) })), a.appendChild(f) } } var m = t.oldChangedList, C = t.newChangedList, y = document.createElement("div"); y.classList.add("compares_list_body"), A.appendChild(y); var v = document.createElement("div"); v.classList.add("compares_list_title"), v.innerText = "变更构件列表(" + m.length + ")", v.addEventListener("click", (function (A) { for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = [], n = 0, r = e.length; r > n; n += 1) e[n].oldKey && o.push(e[n].oldKey), e[n].newKey && i.push(e[n].newKey); switch (t.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: t.secondViewer.adaptiveSizeByKey(i.concat(o)), t.secondViewer.clearColorfulList(), t.secondViewer.clearTransparentList(), t.secondViewer.transparentOtherComponentsByKey(i.concat(o)), t.secondViewer.colorfulComponentsByKey(i.concat(o), Xy.changedColor.color, Xy.changedColor.opacity); break; case zy.MULTIWINDOW: t.firstViewer.adaptiveSizeByKey(o), t.firstViewer.clearColorfulList(), t.firstViewer.clearTransparentList(), t.firstViewer.transparentOtherComponentsByKey(o), t.firstViewer.colorfulComponentsByKey(o, Xy.changedColor.color, Xy.changedColor.opacity), t.secondViewer.adaptiveSizeByKey(i), t.secondViewer.clearColorfulList(), t.secondViewer.clearTransparentList(), t.secondViewer.transparentOtherComponentsByKey(i), t.secondViewer.colorfulComponentsByKey(i, Xy.changedColor.color, Xy.changedColor.opacity) } })), y.appendChild(v); var I = document.createElement("table"); I.classList.add("sx-table"), I.classList.add("compares_list_table"), I.classList.add("table-no-top"), y.appendChild(I); var E = document.createElement("thead"); I.appendChild(E); var B = document.createElement("tbody"); I.appendChild(B); var x = document.createElement("tr"); x.style.backgroundColor = "rgba(255, 165, 0, 0.8)", x.className = "noprop"; var S = document.createElement("th"); x.appendChild(S); var w = document.createElement("span"); w.classList.add("value"), w.classList.add("nonEditable"), w.innerHTML = "名称", S.appendChild(w); var M = document.createElement("th"); x.appendChild(M); var b = document.createElement("span"); b.classList.add("value"), b.classList.add("nonEditable"), b.innerHTML = "类型", M.appendChild(b); var U = document.createElement("th"); x.appendChild(U); var F = document.createElement("span"); F.classList.add("value"), F.classList.add("nonEditable"), F.innerHTML = "操作", U.appendChild(F), E.appendChild(x); for (var K = 0, Q = C.length; Q > K; K += 1) { var R = t.secondViewer.getComponentsByKey(C[K]); if (R && R[0] && R[0][C[K]] && R[0][C[K]][0]) { var T = t._addProperty(R[0][C[K]][0].name, R[0][C[K]][0].type, "geometry" !== C[K].type); T.oldKey = m[K], T.newKey = C[K], T.addEventListener("click", (function (A) { var e = A.target.parentNode.oldKey, i = A.target.parentNode.newKey; if (e && i) switch (t.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: t.secondViewer.adaptiveSizeByKey([e, i]), t.secondViewer.clearColorfulList(), t.secondViewer.clearTransparentList(), t.secondViewer.transparentOtherComponentsByKey([e, i]), t.secondViewer.colorfulComponentsByKey([e, i], Xy.changedColor.color, Xy.changedColor.opacity); break; case zy.MULTIWINDOW: t.firstViewer.adaptiveSizeByKey(e), t.firstViewer.clearColorfulList(), t.firstViewer.clearTransparentList(), t.firstViewer.transparentOtherComponentsByKey(e), t.firstViewer.colorfulComponentsByKey(e, Xy.changedColor.color, Xy.changedColor.opacity), t.secondViewer.adaptiveSizeByKey(i), t.secondViewer.clearColorfulList(), t.secondViewer.clearTransparentList(), t.secondViewer.transparentOtherComponentsByKey(i), t.secondViewer.colorfulComponentsByKey(i, Xy.changedColor.color, Xy.changedColor.opacity) } })), B.appendChild(T) } } var k = document.createElement("div"); k.classList.add("compares_list_body"), A.appendChild(k); var D = document.createElement("div"); D.classList.add("compares_list_title"), D.innerText = "移除构件列表(" + t.deletedList.length + ")", D.addEventListener("click", (function (A) { for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = 0, n = e.length; n > o; o += 1) e[o].oldKey && i.push(e[o].oldKey); t.secondViewer.adaptiveSizeByKey(i), t.secondViewer.clearColorfulList(), t.secondViewer.clearTransparentList(), t.secondViewer.transparentOtherComponentsByKey(i), t.secondViewer.colorfulComponentsByKey(i, Xy.deletedColor.color, Xy.deletedColor.opacity) })), k.appendChild(D); var L = document.createElement("table"); L.classList.add("sx-table"), L.classList.add("compares_list_table"), L.classList.add("table-no-top"), k.appendChild(L); var N = document.createElement("thead"); L.appendChild(N); var O = document.createElement("tbody"); L.appendChild(O); var V = document.createElement("tr"); V.style.backgroundColor = "rgba(255, 0, 0, 0.8)", V.className = "noprop"; var G = document.createElement("th"); V.appendChild(G); var P = document.createElement("span"); P.classList.add("value"), P.classList.add("nonEditable"), P.innerHTML = "名称", G.appendChild(P); var q = document.createElement("th"); V.appendChild(q); var j = document.createElement("span"); j.classList.add("value"), j.classList.add("nonEditable"), j.innerHTML = "类型", q.appendChild(j), N.appendChild(V); for (var H = 0, Y = t.deletedList.length; Y > H; H += 1) { var W = t.firstViewer.getComponentsByKey(t.deletedList[H]); if (W && W[0] && W[0][t.deletedList[H]] && W[0][t.deletedList[H]][0]) { var J = t._addProperty(W[0][t.deletedList[H]][0].name, W[0][t.deletedList[H]][0].type); J.oldKey = t.deletedList[H], J.newKey = "", J.addEventListener("click", (function (A) { var e = A.target.parentNode.oldKey; e && (t.firstViewer.adaptiveSizeByKey(e), t.firstViewer.clearColorfulList(), t.firstViewer.clearTransparentList(), t.firstViewer.transparentOtherComponentsByKey(e), t.firstViewer.colorfulComponentsByKey(e, Xy.deletedColor.color, Xy.deletedColor.opacity)) })), O.appendChild(J) } } } }, $y.prototype._createInversionPanel = function (A, e) { var t = this; if (A) { var i = t.deletedList, o = t.addedList, n = document.createElement("div"); n.classList.add("compares_list_body"), A.appendChild(n); var r = document.createElement("div"); r.classList.add("compares_list_title"), r.innerText = "新增构件列表(" + i.length + ")", r.addEventListener("click", (function (A) { for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = 0, n = e.length; n > o; o += 1) e[o].newKey && i.push(e[o].newKey); t.firstViewer.adaptiveSizeByKey(i), t.firstViewer.clearColorfulList(), t.firstViewer.clearTransparentList(), t.firstViewer.transparentOtherComponentsByKey(i), t.firstViewer.colorfulComponentsByKey(i, Xy.addedColor.color, Xy.addedColor.opacity) })), n.appendChild(r); var a = document.createElement("table"); a.classList.add("sx-table"), a.classList.add("compares_list_table"), a.classList.add("table-no-top"), n.appendChild(a); var s = document.createElement("thead"); a.appendChild(s); var l = document.createElement("tbody"); a.appendChild(l); var c = document.createElement("tr"); c.style.backgroundColor = "rgba(0, 128, 0, 0.8)", c.className = "noprop"; var h = document.createElement("th"); c.appendChild(h); var d = document.createElement("span"); d.classList.add("value"), d.classList.add("nonEditable"), d.innerHTML = "名称", h.appendChild(d); var p = document.createElement("th"); c.appendChild(p); var g = document.createElement("span"); g.classList.add("value"), g.classList.add("nonEditable"), g.innerHTML = "类型", p.appendChild(g), s.appendChild(c); for (var u = 0, f = i.length; f > u; u += 1) { var m = t.firstViewer.getComponentsByKey(i[u]); if (m && m[0] && m[0][i[u]] && m[0][i[u]][0]) { var C = t._addProperty(m[0][i[u]][0].name, m[0][i[u]][0].type); C.oldKey = "", C.newKey = i[u], C.addEventListener("click", (function (A) { var e = A.target.parentNode.newKey; e && (t.firstViewer.adaptiveSizeByKey(e), t.firstViewer.clearColorfulList(), t.firstViewer.clearTransparentList(), t.firstViewer.transparentOtherComponentsByKey(e), t.firstViewer.colorfulComponentsByKey(e, Xy.addedColor.color, Xy.addedColor.opacity)) })), l.appendChild(C) } } var y = t.oldChangedList, v = t.newChangedList, I = document.createElement("div"); I.classList.add("compares_list_body"), A.appendChild(I); var E = document.createElement("div"); E.classList.add("compares_list_title"), E.innerText = "变更构件列表(" + y.length + ")", E.addEventListener("click", (function (A) { for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = [], n = 0, r = e.length; r > n; n += 1) e[n].oldKey && o.push(e[n].oldKey), e[n].newKey && i.push(e[n].newKey); switch (t.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: t.secondViewer.adaptiveSizeByKey(i.concat(o)), t.secondViewer.clearColorfulList(), t.secondViewer.clearTransparentList(), t.secondViewer.transparentOtherComponentsByKey(i.concat(o)), t.secondViewer.colorfulComponentsByKey(i.concat(o), Xy.changedColor.color, Xy.changedColor.opacity); break; case zy.MULTIWINDOW: t.firstViewer.adaptiveSizeByKey(o), t.firstViewer.clearColorfulList(), t.firstViewer.clearTransparentList(), t.firstViewer.transparentOtherComponentsByKey(o), t.firstViewer.colorfulComponentsByKey(o, Xy.changedColor.color, Xy.changedColor.opacity), t.secondViewer.adaptiveSizeByKey(i), t.secondViewer.clearColorfulList(), t.secondViewer.clearTransparentList(), t.secondViewer.transparentOtherComponentsByKey(i), t.secondViewer.colorfulComponentsByKey(i, Xy.changedColor.color, Xy.changedColor.opacity) } })), I.appendChild(E); var B = document.createElement("table"); B.classList.add("sx-table"), B.classList.add("compares_list_table"), B.classList.add("table-no-top"), I.appendChild(B); var x = document.createElement("thead"); B.appendChild(x); var S = document.createElement("tbody"); B.appendChild(S); var w = document.createElement("tr"); w.style.backgroundColor = "rgba(255, 165, 0, 0.8)", w.className = "noprop"; var M = document.createElement("th"); w.appendChild(M); var b = document.createElement("span"); b.classList.add("value"), b.classList.add("nonEditable"), b.innerHTML = "名称", M.appendChild(b); var U = document.createElement("th"); w.appendChild(U); var F = document.createElement("span"); F.classList.add("value"), F.classList.add("nonEditable"), F.innerHTML = "类型", U.appendChild(F); var K = document.createElement("th"); w.appendChild(K); var Q = document.createElement("span"); Q.classList.add("value"), Q.classList.add("nonEditable"), Q.innerHTML = "操作", K.appendChild(Q), x.appendChild(w); for (var R = 0, T = v.length; T > R; R += 1) { var k = t.secondViewer.getComponentsByKey(v[R]); if (k && k[0] && k[0][v[R]] && k[0][v[R]][0]) { var D = t._addProperty(k[0][v[R]][0].name, k[0][v[R]][0].type, "geometry" !== v[R].type); D.oldKey = y[R], D.newKey = v[R], D.addEventListener("click", (function (A) { var e = A.target.parentNode.oldKey, i = A.target.parentNode.newKey; if (e && i) switch (t.displayModel) { case zy.AGGREGATION: case zy.SEPARATION: t.secondViewer.adaptiveSizeByKey([e, i]), t.secondViewer.clearColorfulList(), t.secondViewer.clearTransparentList(), t.secondViewer.transparentOtherComponentsByKey([e, i]), t.secondViewer.colorfulComponentsByKey([e, i], Xy.changedColor.color, Xy.changedColor.opacity); break; case zy.MULTIWINDOW: t.firstViewer.adaptiveSizeByKey(e), t.firstViewer.clearColorfulList(), t.firstViewer.clearTransparentList(), t.firstViewer.transparentOtherComponentsByKey(e), t.firstViewer.colorfulComponentsByKey(e, Xy.changedColor.color, Xy.changedColor.opacity), t.secondViewer.adaptiveSizeByKey(i), t.secondViewer.clearColorfulList(), t.secondViewer.clearTransparentList(), t.secondViewer.transparentOtherComponentsByKey(i), t.secondViewer.colorfulComponentsByKey(i, Xy.changedColor.color, Xy.changedColor.opacity) } })), S.appendChild(D) } } var L = document.createElement("div"); L.classList.add("compares_list_body"), A.appendChild(L); var N = document.createElement("div"); N.classList.add("compares_list_title"), N.innerText = "移除构件列表(" + o.length + ")", N.addEventListener("click", (function (A) { for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = 0, n = e.length; n > o; o += 1) e[o].oldKey && i.push(e[o].oldKey); t.secondViewer.adaptiveSizeByKey(i), t.secondViewer.clearColorfulList(), t.secondViewer.clearTransparentList(), t.secondViewer.transparentOtherComponentsByKey(i), t.secondViewer.colorfulComponentsByKey(i, Xy.deletedColor.color, Xy.deletedColor.opacity) })), L.appendChild(N); var O = document.createElement("table"); O.classList.add("sx-table"), O.classList.add("compares_list_table"), O.classList.add("table-no-top"), L.appendChild(O); var V = document.createElement("thead"); O.appendChild(V); var G = document.createElement("tbody"); O.appendChild(G); var P = document.createElement("tr"); P.style.backgroundColor = "rgba(255, 0, 0, 0.8)", P.className = "noprop"; var q = document.createElement("th"); P.appendChild(q); var j = document.createElement("span"); j.classList.add("value"), j.classList.add("nonEditable"), j.innerHTML = "名称", q.appendChild(j); var H = document.createElement("th"); P.appendChild(H); var Y = document.createElement("span"); Y.classList.add("value"), Y.classList.add("nonEditable"), Y.innerHTML = "类型", H.appendChild(Y), V.appendChild(P); for (var W = 0, J = o.length; J > W; W += 1) { var z = t.secondViewer.getComponentsByKey(o[W]); if (z && z[0] && z[0][o[W]] && z[0][o[W]][0]) { var Z = t._addProperty(z[0][o[W]][0].name, z[0][o[W]][0].type); Z.oldKey = o[W], Z.newKey = "", Z.addEventListener("click", (function (A) { var e = A.target.parentNode.oldKey; e && (t.secondViewer.adaptiveSizeByKey(e), t.secondViewer.clearColorfulList(), t.secondViewer.clearTransparentList(), t.secondViewer.transparentOtherComponentsByKey(e), t.secondViewer.colorfulComponentsByKey(e, Xy.deletedColor.color, Xy.deletedColor.opacity)) })), G.appendChild(Z) } } } }; var Av = "ON_VIEWER3D_CAMERA_CHANGE", ev = function (A, e) { this.viewer2D = e, this.viewer3D = A, this.enableFocus(), this.show3DCameraOn2DViewer() }; ev.prototype.enableFocus = function () { var A = this.viewer2D, e = this.viewer3D; e && A && (A.setOnSelectComponentCallback((function (A) { A && A.length > 0 ? (e.highlightComponentsByKey(A), e.adaptiveSizeByKey(A)) : e.clearHighlightList() })), e.registerModelEventListener(Rc.ON_CLICK_PICK, (function (e) { e.intersectInfo && e.intersectInfo.selectedObjectId && A.focusOnComponentByKey(e.intersectInfo.selectedObjectId, !0) }))) }, ev.prototype.enableMove2DCamera = function () { this.viewer2D.getViewerImpl().controlManager.enableTool(this.viewer2D.getViewerImpl(), "viewer3DCameraControl") }, ev.prototype.disableMove2DCamera = function () { this.viewer2D.getViewerImpl().controlManager.disableTool("viewer3DCameraControl") }, ev.prototype.show3DCameraOn2DViewer = function () { var A = this.viewer2D, e = this.viewer3D; if (e && A) { var t = e.getViewerImpl(); e.registerCameraEventListener(Rc.ON_CAMERA_CHANGE, (function (e) { var t = e.camera, i = t.getWorldPosition(new y), o = t.getWorldDirection(new y); A.show3DCamera([i.x, i.y], [o.x, o.y]) })), A.getViewerImpl().cameraControl.addEventListener(Av, (function (A) { var e = A.position; t.locateToPoint({ x: e[0], y: e[1], z: t.camera.position.z }) })) } }; var tv = function A(e, t) { Ue.call(this, e), this.type = "Reflector"; var i = this, o = new LA(void 0 !== (t = t || {}).color ? t.color : 16777215), n = t.textureWidth || 512, r = t.textureHeight || 512, s = t.clipBias || 0, l = t.shader || A.ReflectorShader, c = void 0 !== t.recursion ? t.recursion : 0, h = new EA, d = new y, u = new y, f = new y, m = new M, C = new y(0, 0, -1), v = new p, I = new y, E = new y, B = new p, x = new M, S = new je, w = new g(n, r, { minFilter: 1006, magFilter: 1006, format: 1022, stencilBuffer: !1 }); a.isPowerOfTwo(n) && a.isPowerOfTwo(r) || (w.texture.generateMipmaps = !1); var b = new Pe({ uniforms: Ge.clone(l.uniforms), fragmentShader: l.fragmentShader, vertexShader: l.vertexShader }); b.uniforms.tDiffuse.value = w.texture, b.uniforms.color.value = o, b.uniforms.textureMatrix.value = x, this.material = b, this.onBeforeRender = function (A, e, t) { if ("recursion" in t.userData) { if (t.userData.recursion === c) return; t.userData.recursion += 1 } if (u.setFromMatrixPosition(i.matrixWorld), f.setFromMatrixPosition(t.matrixWorld), m.extractRotation(i.matrixWorld), d.set(0, 0, 1), d.applyMatrix4(m), I.subVectors(u, f), 0 >= I.dot(d)) { I.reflect(d).negate(), I.add(u), m.extractRotation(t.matrixWorld), C.set(0, 0, -1), C.applyMatrix4(m), C.add(f), E.subVectors(u, C), E.reflect(d).negate(), E.add(u), S.position.copy(I), S.up.set(0, 1, 0), S.up.applyMatrix4(m), S.up.reflect(d), S.lookAt(E), S.far = t.far, S.updateMatrixWorld(), S.matrixWorldInverse.getInverse(S.matrixWorld), S.projectionMatrix.copy(t.projectionMatrix), S.userData.recursion = 0, x.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), x.multiply(S.projectionMatrix), x.multiply(S.matrixWorldInverse), x.multiply(i.matrixWorld), h.setFromNormalAndCoplanarPoint(d, u), h.applyMatrix4(S.matrixWorldInverse), v.set(h.normal.x, h.normal.y, h.normal.z, h.constant); var o = S.projectionMatrix; B.x = (Math.sign(v.x) + o.elements[8]) / o.elements[0], B.y = (Math.sign(v.y) + o.elements[9]) / o.elements[5], B.z = -1, B.w = (1 + o.elements[10]) / o.elements[14], v.multiplyScalar(2 / v.dot(B)), o.elements[2] = v.x, o.elements[6] = v.y, o.elements[10] = v.z + 1 - s, o.elements[14] = v.w, w.texture.encoding = A.outputEncoding, i.visible = !1; var n = A.getRenderTarget(), r = A.xr.enabled, a = A.shadowMap.autoUpdate; A.xr.enabled = !1, A.shadowMap.autoUpdate = !1, A.setRenderTarget(w), A.state.buffers.depth.setMask(!0), !1 === A.autoClear && A.clear(), A.render(e, S), A.xr.enabled = r, A.shadowMap.autoUpdate = a, A.setRenderTarget(n); var l = t.viewport; void 0 !== l && A.state.viewport(l), i.visible = !0 } }, this.getRenderTarget = function () { return w } }; (tv.prototype = Object.create(Ue.prototype)).constructor = tv, tv.ReflectorShader = { uniforms: { color: { value: null }, tDiffuse: { value: null }, textureMatrix: { value: null } }, vertexShader: ["uniform mat4 textureMatrix;", "varying vec4 vUv;", "void main() {", " vUv = textureMatrix * vec4( position, 1.0 );", " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"), fragmentShader: ["uniform vec3 color;", "uniform sampler2D tDiffuse;", "varying vec4 vUv;", "float blendOverlay( float base, float blend ) {", " return( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );", "}", "vec3 blendOverlay( vec3 base, vec3 blend ) {", " return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );", "}", "void main() {", " vec4 base = texture2DProj( tDiffuse, vUv );", " gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );", "}"].join("\n") }; var iv = function A(e, t) { Ue.call(this, e), this.type = "Refractor"; var i = this, o = new LA(void 0 !== (t = t || {}).color ? t.color : 8355711), n = t.textureWidth || 512, r = t.textureHeight || 512, s = t.clipBias || 0, l = t.shader || A.RefractorShader, c = new je; c.matrixAutoUpdate = !1, c.userData.refractor = !0; var h = new EA, d = new M, u = new g(n, r, { minFilter: 1006, magFilter: 1006, format: 1022, stencilBuffer: !1 }); a.isPowerOfTwo(n) && a.isPowerOfTwo(r) || (u.texture.generateMipmaps = !1), this.material = new Pe({ uniforms: Ge.clone(l.uniforms), vertexShader: l.vertexShader, fragmentShader: l.fragmentShader, transparent: !0 }), this.material.uniforms.color.value = o, this.material.uniforms.tDiffuse.value = u.texture, this.material.uniforms.textureMatrix.value = d; var m, C, v, I = function () { var A = new y, e = new y, t = new M, o = new y, n = new y; return function (r) { return A.setFromMatrixPosition(i.matrixWorld), e.setFromMatrixPosition(r.matrixWorld), o.subVectors(A, e), t.extractRotation(i.matrixWorld), n.set(0, 0, 1), n.applyMatrix4(t), 0 > o.dot(n) } }(), E = function () { var A = new y, e = new y, t = new f, o = new y; return function () { i.matrixWorld.decompose(e, t, o), A.set(0, 0, 1).applyQuaternion(t).normalize(), A.negate(), h.setFromNormalAndCoplanarPoint(A, e) } }(), B = (m = new EA, C = new p, v = new p, function (A) { c.matrixWorld.copy(A.matrixWorld), c.matrixWorldInverse.getInverse(c.matrixWorld), c.projectionMatrix.copy(A.projectionMatrix), c.far = A.far, m.copy(h), m.applyMatrix4(c.matrixWorldInverse), C.set(m.normal.x, m.normal.y, m.normal.z, m.constant); var e = c.projectionMatrix; v.x = (Math.sign(C.x) + e.elements[8]) / e.elements[0], v.y = (Math.sign(C.y) + e.elements[9]) / e.elements[5], v.z = -1, v.w = (1 + e.elements[10]) / e.elements[14], C.multiplyScalar(2 / C.dot(v)), e.elements[2] = C.x, e.elements[6] = C.y, e.elements[10] = C.z + 1 - s, e.elements[14] = C.w } ); this.onBeforeRender = function (A, e, t) { u.texture.encoding = A.outputEncoding, !0 !== t.userData.refractor && !0 != !I(t) && (E(), function (A) { d.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), d.multiply(A.projectionMatrix), d.multiply(A.matrixWorldInverse), d.multiply(i.matrixWorld) }(t), B(t), function (A, e, t) { i.visible = !1; var o = A.getRenderTarget(), n = A.xr.enabled, r = A.shadowMap.autoUpdate; A.xr.enabled = !1, A.shadowMap.autoUpdate = !1, A.setRenderTarget(u), !1 === A.autoClear && A.clear(), A.render(e, c), A.xr.enabled = n, A.shadowMap.autoUpdate = r, A.setRenderTarget(o); var a = t.viewport; void 0 !== a && A.state.viewport(a), i.visible = !0 }(A, e, t)) }, this.getRenderTarget = function () { return u } }; (iv.prototype = Object.create(Ue.prototype)).constructor = iv, iv.RefractorShader = { uniforms: { color: { value: null }, tDiffuse: { value: null }, textureMatrix: { value: null } }, vertexShader: ["uniform mat4 textureMatrix;", "varying vec4 vUv;", "void main() {", " vUv = textureMatrix * vec4( position, 1.0 );", " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"), fragmentShader: ["uniform vec3 color;", "uniform sampler2D tDiffuse;", "varying vec4 vUv;", "float blendOverlay( float base, float blend ) {", " return( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );", "}", "vec3 blendOverlay( vec3 base, vec3 blend ) {", " return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );", "}", "void main() {", " vec4 base = texture2DProj( tDiffuse, vUv );", " gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );", "}"].join("\n") }; var ov = function (A) { return he.call(this), this.points = A, this.handlePoints = [], this.minX = 0, this.minY = 0, this.maxX = 0, this.maxY = 0, this.invalid = !1, this._createPlaneGeometry(), this }; (ov.prototype = Object.create(he.prototype)).constructor = he, ov.prototype._createPlaneGeometry = function () { if (this._RemoveDuplicatePoints(this.points)) this.invalid = !0; else { if (3 > this.handlePoints.length) return Bh.warn("Failed to create plane, the number of the points must be more than three."), void(this.invalid = !0); if (3 === this.handlePoints.length && 0 === this._area(this.handlePoints[0], this.handlePoints[1], this.handlePoints[2])) return Bh.warn("Failed to create plane, points are collinear."), void(this.invalid = !0); if (this._checkIntersect()) return Bh.warn("Failed to create plane, the plane border is self-intersecting."), void(this.invalid = !0); this.handlePoints.push(new s(this.points[0].x, this.points[0].y)); var A = new ar(new Ba(this.handlePoints)), e = new Float32Array(this._updateUv(A)); A.setAttribute("uv", new YA(e, 2)), this.attributes = A.attributes, this.groups = A.groups, this.index = A.index } }, ov.prototype._updateUv = function (A) { for (var e = [], t = A.attributes.position.array, i = 0; t.length > i; i += 3) { var o = (t[i + 1] - this.minY) / (this.maxY - this.minY); e.push((t[i] - this.minX) / (this.maxX - this.minX)), e.push(o) } return e }, ov.prototype._RemoveDuplicatePoints = function (A) { var e = new s(A[0].x, A[0].y); this.handlePoints.push(e), this.minX = e.x, this.maxX = e.x, this.minY = e.y, this.maxY = e.y; for (var t = 1; A.length > t; t += 1) { var i = !1; if (void 0 === A[t].x || void 0 === A[t].y) return Bh.log("Failed to create plane, the format of plane is not right, please follow [{x:,y:},...]"), !0; for (var o = 0; this.handlePoints.length > o; o += 1) if (A[t].x === this.handlePoints[o].x && A[t].y === this.handlePoints[o].y) { i = !0; break } if (!1 === i) { e = new s(A[t].x, A[t].y); this.handlePoints.push(e), this.minX > e.x && (this.minX = e.x), this.minY > e.y && (this.minY = e.y), e.x > this.maxX && (this.maxX = e.x), e.y > this.maxY && (this.maxY = e.y) } } return !1 }, ov.prototype._checkIntersect = function () { for (var A = null, e = null, t = this.handlePoints.length, i = 0; t > i; i += 1) { A = this.handlePoints[i], e = this.handlePoints[i === t - 1 ? 0 : i + 1]; for (var o = i + 2; t > o; o += 1) if ((0 !== i || o !== t - 1) && this._intersectSegments(A, e, this.handlePoints[o], this.handlePoints[o === t - 1 ? 0 : o + 1])) return !0 } return !1 }, ov.prototype._area = function (A, e, t) { return (e.x - A.x) * (t.y - A.y) - (t.x - A.x) * (e.y - A.y) }, ov.prototype._collinearIntersectCheck = function (A, e, t, i) { return (Math.min(A.x, e.x) > t.x || t.x > Math.max(A.x, e.x) || Math.min(A.y, e.y) > t.y || t.y > Math.max(A.y, e.y)) && (Math.min(A.x, e.x) > i.x || i.x > Math.max(A.x, e.x) || Math.min(A.y, e.y) > i.y || i.y > Math.max(A.y, e.y)) }, ov.prototype._intersectSegments = function (A, e, t, i) { var o = this._area(A, e, t) * this._area(A, e, i), n = this._area(t, i, A) * this._area(t, i, e); return 0 >= o && (0 >= n && (0 !== o || 0 !== n || !this._collinearIntersectCheck(A, e, t, i))) }; var nv = "data:image/jpeg;base64,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", rv = "data:image/jpeg;base64,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", av = function A(e, t) { Ue.call(this, e), this.type = "Water"; var i = this, o = t || {}, n = void 0 !== o.color ? o.color : new p(1, 1, 1, 1), r = o.textureWidth || 512, a = o.textureHeight || 512, l = o.clipBias || 0, c = o.flowDirection || new s(1, 0), h = o.flowSpeed || .03, d = o.reflectivity || 1, g = o.scale || 1, u = o.shader || A.WaterShader; this.reflectorTexturePosition = o.reflectorTexturePosition, this.refractorTexturePosition = o.refractorTexturePosition; var f = new Aa, m = o.flowMap || void 0, C = o.normalMap0 || f.load(nv), y = o.normalMap1 || f.load(rv), v = new M, I = new as; if (void 0 !== tv) if (void 0 !== iv) { var E = new tv(e, { textureWidth: r, textureHeight: a, clipBias: l }); E.position.copy(this.reflectorTexturePosition), E.updateMatrixWorld(!0); var B = new iv(e, { textureWidth: r, textureHeight: a, clipBias: l }); B.position.copy(this.refractorTexturePosition), B.updateMatrixWorld(!0), this.material = new Pe({ uniforms: Ge.merge([u.uniforms]), vertexShader: u.vertexShader, fragmentShader: u.fragmentShader, transparent: !0 }), this.material.clipping = !0, this.material.side = 2, void 0 !== m ? (this.material.defines.USE_FLOWMAP = "", this.material.uniforms.tFlowMap = { type: "t", value: m }) : this.material.uniforms.flowDirection = { type: "v2", value: c }, C.wrapS = 1e3, C.wrapT = 1e3, y.wrapS = 1e3, y.wrapT = 1e3, this.material.uniforms.tReflectionMap.value = E.getRenderTarget().texture, this.material.uniforms.tRefractionMap.value = B.getRenderTarget().texture, this.material.uniforms.tNormalMap0.value = C, this.material.uniforms.tNormalMap1.value = y, this.material.uniforms.color.value = n, this.material.uniforms.reflectivity.value = d, this.material.uniforms.textureMatrix.value = v, this.material.uniforms.config.value.x = 0, this.material.uniforms.config.value.y = .075, this.material.uniforms.config.value.z = .075, this.material.uniforms.config.value.w = g, this.onBeforeRender = function (A, e, t) { var o, n; ! function (A) { v.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), v.multiply(A.projectionMatrix), v.multiply(A.matrixWorldInverse), v.multiply(i.matrixWorld) }(t), o = I.getDelta(), (n = i.material.uniforms.config).value.x += h * o, n.value.y = n.value.x + .075, .15 > n.value.x ? .15 > n.value.y || (n.value.y = n.value.y - .15) : (n.value.x = 0, n.value.y = .075), i.visible = !1, E.position.equals(this.reflectorTexturePosition) || (E.position.copy(this.reflectorTexturePosition), E.updateMatrixWorld(!0)), B.position.equals(this.refractorTexturePosition) || (B.position.copy(this.refractorTexturePosition), B.updateMatrixWorld(!0)), i.cameraProjectionMatrix || (i.cameraProjectionMatrix = t.projectionMatrix.clone()), t.projectionMatrix.equals(i.cameraProjectionMatrix) || (i.needUpdate = !0), i.waterMatrixWorld || (i.waterMatrixWorld = i.matrixWorld.clone()), i.matrixWorld.equals(i.waterMatrixWorld) || (i.needUpdate = !0), i.needUpdate && (E.onBeforeRender(A, e, t), B.onBeforeRender(A, e, t), i.needUpdate = !1), i.material.uniforms.tReflectionMap.value = E.getRenderTarget().texture, i.material.uniforms.tRefractionMap.value = B.getRenderTarget().texture, i.visible = !0 } } else Bh.error("THREE.Water: Required component THREE.Refractor not found."); else Bh.error("THREE.Water: Required component THREE.Reflector not found.") }; (av.prototype = Object.create(Ue.prototype)).constructor = av, av.WaterShader = { uniforms: { color: { type: "v4", value: null }, reflectivity: { type: "f", value: 0 }, tReflectionMap: { type: "t", value: null }, tRefractionMap: { type: "t", value: null }, tNormalMap0: { type: "t", value: null }, tNormalMap1: { type: "t", value: null }, textureMatrix: { type: "m4", value: null }, config: { type: "v4", value: new p } }, vertexShader: ["#include ", "uniform mat4 textureMatrix;", "varying vec4 vCoord;", "varying vec2 vUv;", "varying vec3 vToEye;", "#include ", "void main() {", " vUv = uv;", " vCoord = textureMatrix * vec4( position, 1.0 );", " vec4 worldPosition = modelMatrix * vec4( position, 1.0 );", " vToEye = cameraPosition - worldPosition.xyz;", " vec4 mvPosition = viewMatrix * worldPosition;", " gl_Position = projectionMatrix * mvPosition;", " #include ", " #include ", "}"].join("\n"), fragmentShader: ["#include ", "#include ", "uniform sampler2D tReflectionMap;", "uniform sampler2D tRefractionMap;", "uniform sampler2D tNormalMap0;", "uniform sampler2D tNormalMap1;", "#ifdef USE_FLOWMAP", " uniform sampler2D tFlowMap;", "#else", " uniform vec2 flowDirection;", "#endif", "uniform vec4 color;", "uniform float reflectivity;", "uniform vec4 config;", "#include ", "varying vec4 vCoord;", "varying vec2 vUv;", "varying vec3 vToEye;", "void main() {", " #include ", " float flowMapOffset0 = config.x;", " float flowMapOffset1 = config.y;", " float halfCycle = config.z;", " float scale = config.w;", " vec3 toEye = normalize( vToEye );", " vec2 flow;", " #ifdef USE_FLOWMAP", " flow = texture2D( tFlowMap, vUv ).rg * 2.0 - 1.0;", " #else", " flow = flowDirection;", " #endif", " flow.x *= - 1.0;", " vec4 normalColor0 = texture2D( tNormalMap0, ( vUv * scale ) + flow * flowMapOffset0 );", " vec4 normalColor1 = texture2D( tNormalMap1, ( vUv * scale ) + flow * flowMapOffset1 );", " float flowLerp = abs( halfCycle - flowMapOffset0 ) / halfCycle;", " vec4 normalColor = mix( normalColor0, normalColor1, flowLerp );", " vec3 normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );", " float theta = max( dot( toEye, normal ), 0.0 );", " float reflectance = reflectivity + ( 1.0 - reflectivity ) * pow( ( 1.0 - theta ), 5.0 );", " vec3 coord = vCoord.xyz / vCoord.w;", " vec2 uv = coord.xy + coord.z * normal.xz * 0.05;", " vec4 reflectColor = texture2D( tReflectionMap, vec2( 1.0 - uv.x, uv.y ) );", " vec4 refractColor = texture2D( tRefractionMap, uv );", " gl_FragColor = color * mix( refractColor, reflectColor, reflectance );", " #include ", " #include ", " #include ", "}"].join("\n") }; var sv = function (A) { A ? (this.boundary = A.boundary, this.color = A.color, this.viewer = A.viewer, this.scale = A.scale, this.xDirection = A.xDirection, this.yDirection = A.yDirection, this.reflectivity = A.reflectivity, A.reflectorTexturePosition ? "number" == typeof A.reflectorTexturePosition.x ? "number" == typeof A.reflectorTexturePosition.y ? "number" == typeof A.reflectorTexturePosition.z ? (this.reflectorTexturePosition = (new y).copy(A.reflectorTexturePosition), A.refractorTexturePosition ? "number" == typeof A.refractorTexturePosition.x ? "number" == typeof A.refractorTexturePosition.y ? "number" == typeof A.refractorTexturePosition.z ? (this.refractorTexturePosition = (new y).copy(A.refractorTexturePosition), this.viewer && this.viewer instanceof Gy ? (A.geometry || 0 !== this.boundary.length) && (this.geometry = A.geometry || new ov(this.boundary), this.water = new av(this.geometry, { color: new p(this.color.r, this.color.g, this.color.b, this.color.a), scale: this.scale, reflectivity: this.reflectivity, flowDirection: new s(this.xDirection, this.yDirection), textureWidth: 1024, textureHeight: 1024, reflectorTexturePosition: this.reflectorTexturePosition, refractorTexturePosition: this.refractorTexturePosition }), this.height = A.height, this.water.translateZ(this.height), this.water.renderOrder = -1, this.water.disPickable = !0, this.id = uh.createUUID(), this.water.name = this.id, this.water.autoAnimation = !0, this.viewer.addExternalObject(this.id, this.water)) : Bh.log("ERROR::viewer must not support.")) : Bh.error("缺少参数 reflectorTexturePosition.z") : Bh.error("缺少参数 reflectorTexturePosition.y") : Bh.error("缺少参数 reflectorTexturePosition.x") : Bh.error("缺少参数 reflectorTexturePosition")) : Bh.error("缺少参数 reflectorTexturePosition.z") : Bh.error("缺少参数 reflectorTexturePosition.y") : Bh.error("缺少参数 reflectorTexturePosition.x") : Bh.error("缺少参数 reflectorTexturePosition")) : Bh.error("ERROR::waterEffectConfig 不能为空.") }; sv.prototype.getBoundary = function () { return this.boundary }, sv.prototype.getColor = function () { return this.color }, sv.prototype.getScale = function () { return this.scale }, sv.prototype.getXDirection = function () { return this.xDirection }, sv.prototype.getYDirection = function () { return this.yDirection }, sv.prototype.setColor = function (A) { A instanceof Xh ? (this.color = A, this.water.material.uniforms.color.value.set(this.color.r, this.color.g, this.color.b, this.color.a)) : Bh.log("ERROR::color should be instance of EIMMODEL.Color") }, sv.prototype.setScale = function (A) { this.scale = A, this.water.material.uniforms.config.value.w = A }, sv.prototype.setReflectivity = function (A) { this.reflectivity = A, this.water.material.uniforms.reflectivity.value = A }, sv.prototype.getReflectivity = function () { return this.reflectivity }, sv.prototype.getReflectorTexturePosition = function () { return this.reflectorTexturePosition.clone() }, sv.prototype.getRefractorTexturePosition = function () { return this.refractorTexturePosition.clone() }, sv.prototype.setReflectorTexturePosition = function (A) { A ? "number" == typeof A.x ? "number" == typeof A.y ? "number" == typeof A.z ? (this.reflectorTexturePosition = new y(A.x, A.y, A.z), this.water.reflectorTexturePosition = this.reflectorTexturePosition) : Bh.error("缺少参数 position.z") : Bh.error("缺少参数 position.y") : Bh.error("缺少参数 position.x") : Bh.error("缺少参数 position") }, sv.prototype.setRefractorTexturePosition = function (A) { A ? "number" == typeof A.x ? "number" == typeof A.y ? "number" == typeof A.z ? (this.refractorTexturePosition = new y(A.x, A.y, A.z), this.water.refractorTexturePosition = this.refractorTexturePosition) : Bh.error("缺少参数 position.z") : Bh.error("缺少参数 position.y") : Bh.error("缺少参数 position.x") : Bh.error("缺少参数 position") }, sv.prototype.setXDirection = function (A) { this.xDirection = A, this.water.material.uniforms.flowDirection.value.x = A }, sv.prototype.setYDirection = function (A) { this.yDirection = A, this.water.material.uniforms.flowDirection.value.y = A }, sv.prototype.remove = function () { this.viewer.removeExternalObjectByName(this.id) }, sv.prototype.setHeight = function (A) { this.height = A, this.water.translateZ(A), this.water.updateMatrixWorld(!0) }, sv.prototype.getHeight = function () { return this.height }, sv.prototype.setGeometry = function (A) { A.isGeometry || A.isBufferGeometry ? (this.geometry = A, this.water.geometry = A) : Bh.log("ERROR::geometry type not support") }, sv.prototype.getGeometry = function () { return this.geometry }, sv.prototype.getWaterObject = function () { return this.water }; var lv = Symbol("_flowing"), cv = function () { function A(e) { cc(this, A), this.viewer = e.viewer3D; var t = e.opt; this.arrowParameters = t, this.arrowParameters.speed = this.arrowParameters.speed || 5, this.arrowParameters.spacing = this.arrowParameters.spacing || 100, this.arrowArray = [], this.pathNumb = 0, this.totalLength = 0, this.path = [], !0 === t.customizeMesh ? this.geometricModelLength = t.meshLength : t.arrowShape ? (t.arrowShape.rectangleLength = t.arrowShape.rectangleLength || 500, t.arrowShape.triangleBottomHeight = t.arrowShape.triangleBottomHeight || 260, this.geometricModelLength = t.arrowShape.rectangleLength + t.arrowShape.triangleBottomHeight ? t.arrowShape.triangleBottomHeight : 260) : this.geometricModelLength = 760, this.intervalLength = this.geometricModelLength + t.spacing, this.materialObject = {}, this.materialsInit = this.arrowParameters.materialsInit || "default", this.materialsUpdate = this.arrowParameters.materialsUpdate || "fixed", this.isFlowing = !1, t.callback && (t.callback.enter && (this.callbackEnter = t.callback.enter), t.callback.out && (this.callbackOut = t.callback.out)), this.meshGroupId = (new Date).getTime(), this.meshGroup ? this.meshGroup.children = [] : this.meshGroup = new Xi } return dc(A, [{ key: "calculationPathOffset", value: function () { for (var A = this.path, e = 0; A.length > e; e += 1) { var t = (new y).copy(A[e].startingPoint), i = new f, o = new f, n = new y(1, 1, 1); if (A[e].offset) { var r = (new y).copy(A[e].offset.pathDepthAxis).applyQuaternion(i); t.add(r.multiplyScalar(A[e].offset.depth)), o.setFromAxisAngle(A[e].startPoint2EndPointAxis, A[e].angle), i.premultiply(o), o.setFromAxisAngle(A[e].vectorNormalize, A[e].offset.angle), i.premultiply(o) } else o.setFromAxisAngle(A[e].startPoint2EndPointAxis, A[e].angle), i.premultiply(o); A[e].rotationComponent = {}, A[e].rotationComponent.position = t, A[e].rotationComponent.quaternion = i, A[e].rotationComponent.scale = n } } }, { key: "translationPath", value: function () { var A = new y(1, 0, 0), e = this.arrowParameters.points, t = e.length - 1, i = []; this.totalLength = 0; for (var o = 0; t > o; o += 1) { var n = {}; if (n.startingPoint = new y(e[o].x, e[o].y, e[o].z), n.endingPoint = new y(e[o + 1].x, e[o + 1].y, e[o + 1].z), n.length = n.startingPoint.distanceTo(n.endingPoint), n.vector = (new y).subVectors(n.endingPoint, n.startingPoint), n.vectorNormalize = (new y).subVectors(n.endingPoint, n.startingPoint).normalize(), n.startPoint2EndPointAxis = (new y).crossVectors(A, n.vectorNormalize).normalize(), n.numb = o, n.angle = A.angleTo(n.vectorNormalize), this.arrowParameters.offset && this.arrowParameters.offset[o + 1]) { var r = {}, a = this.arrowParameters.offset[o + 1], s = a.depth, l = a.angle, c = void 0 === l ? 0 : l; r.depth = void 0 === s ? 0 : s, r.angle = Math.PI / 180 * c, r.pathDepthAxis = new y(0, 1, 0).applyAxisAngle(n.startPoint2EndPointAxis, n.angle), r.pathDepthAxis.applyAxisAngle(n.vectorNormalize, r.angle).normalize(), n.offset = r } this.totalLength += n.length, i.push(n) } this.path = i, this.pathNumb = this.path.length } }, { key: "calculationArrowAmount", value: function () { var A = this.arrowParameters, e = 0; if (A.createMode && "number" === A.createMode && A.arrowAmount && A.arrowAmount > 0) if (A.intervalMode && "strict" === A.intervalMode) { if (e = Math.floor(this.totalLength / this.intervalLength), A.arrowAmount > e) return { code: "001", message: "Too many arrows,over the length of the path" }; this.arrowAmount = A.arrowAmount, this.CreateMode = "number", this.IntervalMode = "strict" } else { if (e = Math.floor(this.totalLength / this.geometricModelLength), A.arrowAmount > e) return { code: "001", message: "Too many arrows,over the length of the path" }; this.arrowAmount = A.arrowAmount, this.CreateMode = "number"; var t = Math.floor(100 * (this.totalLength - this.intervalLength * A.arrowAmount) / A.arrowAmount) / 100; this.intervalLength += t, this.IntervalMode = "free" } else { if (A.createMode && "number" === A.createMode && A.arrowAmount && 1 > A.arrowAmount) return { code: "002", message: "the number is error" }; if (e = Math.floor(this.totalLength / this.intervalLength), A.intervalMode && "strict" === A.intervalMode) this.IntervalMode = "strict"; else { var i = Math.floor(100 * (this.totalLength % this.intervalLength) / e) / 100; this.intervalLength += i, this.IntervalMode = "free" } this.arrowAmount = e, this.CreateMode = "space" } } }, { key: "createArrowArray", value: function () { var A = this.arrowAmount; if (!0 === this.arrowParameters.customizeMesh) for (var e = 0; A > e; e += 1) { var t = this.arrowParameters.mesh.clone(); t.material = this.materialObject.default, this.arrowArray.push(t), this.meshGroup.add(t) } else for (var i = this.arrowParameters.arrowShape, o = void 0 === i ? {} : i, n = o.triangleBottomLength || 400, r = o.triangleBottomHeight || 260, a = o.rectangleWidth || 180, s = o.rectangleLength || 500, l = o.arrowHeight || 80, c = new Float32Array([r + s, l, 0, s, l, n / 2, s, l, -n / 2, r + s, 0, 0, s, 0, n / 2, s, 0, -n / 2, s, l, -a / 2, s, l, a / 2, 0, l, a / 2, 0, l, -a / 2, s, 0, -a / 2, s, 0, a / 2, 0, 0, a / 2, 0, 0, -a / 2]), h = [2, 1, 0, 3, 4, 5, 0, 1, 4, 0, 4, 3, 1, 2, 4, 4, 2, 5, 5, 2, 0, 3, 5, 0, 8, 7, 6, 9, 8, 6, 13, 9, 6, 10, 13, 6, 12, 8, 9, 9, 13, 12, 12, 13, 10, 12, 10, 11, 7, 8, 12, 11, 7, 12], d = 0; A > d; d += 1) { var p = this.createArrowMesh(c, h); p.arrowID = d, this.arrowArray.push(p), this.meshGroup.add(p) } } }, { key: "createArrowMesh", value: function (A, e) { var t = new he; t.setIndex(e); var i = new YA(A, 3); return t.attributes.position = i, new Ue(t, this.materialObject.default) } }, { key: "createMaterialArray", value: function () { for (var A = this.arrowParameters.colors, e = this.arrowParameters.materials, t = this.path.length, i = 1; t >= i; i += 1) e && e[i] ? this.materialObject[i] = e[i] : A && A[i] && (this.materialObject[i] = new jA({ color: A[i] })); e && e.default ? this.materialObject.default = e.default : A && A.default ? this.materialObject.default = new jA({ color: A.default }) : (this.materialObject.default = new jA({ color: 10606038 }), this.materialObject.default.transparent = !0, this.materialObject.default.opacity = .8) } }, { key: "initPostition", value: function () { var A = this.arrowArray, e = this.path, t = A.length, i = 0, o = this.intervalLength, n = 0, r = new f; if (this.arrowParameters.enterSceMod && "progressive" === this.arrowParameters.enterSceMod) for (var a = 0; t > a; a += 1) { var s = A[a]; s.quaternion.copy(r), s.position.x = e[i].startingPoint.x, s.position.y = e[i].startingPoint.y, s.position.z = e[i].startingPoint.z, s.pathOrder = i, e[i].offset ? (s.translateOnAxis(e[i].vectorNormalize, -o * n), s.translateOnAxis(e[i].offset.pathDepthAxis, e[i].offset.depth), s.rotateOnWorldAxis(e[i].startPoint2EndPointAxis, e[i].angle), s.rotateOnWorldAxis(e[i].vectorNormalize, e[i].offset.angle)) : (s.translateOnAxis(e[i].vectorNormalize, -o * n), s.rotateOnWorldAxis(e[i].startPoint2EndPointAxis, e[i].angle)), s.visible = !1, s.userData.BosArrowExt = {}, s.userData.BosArrowExt.enterState = "unenter", "path" === this.materialsInit && this.materialObject[i + 1] && (s.material = this.materialObject[i + 1]), s.updateMatrixWorld(), n += 1 } else for (var l = 0, c = 0; t > c; c += 1) { var h = A[c]; h.quaternion.copy(r); var d = e[i]; d.offset ? (h.position.x = d.startingPoint.x, h.position.y = d.startingPoint.y, h.position.z = d.startingPoint.z, h.translateOnAxis(d.vectorNormalize, o * n + l), h.translateOnAxis(d.offset.pathDepthAxis, d.offset.depth), h.rotateOnWorldAxis(d.startPoint2EndPointAxis, d.angle), h.rotateOnWorldAxis(d.vectorNormalize, d.offset.angle)) : (h.position.x = d.startingPoint.x, h.position.y = d.startingPoint.y, h.position.z = d.startingPoint.z, h.translateOnAxis(d.vectorNormalize, o * n + l), h.rotateOnWorldAxis(d.startPoint2EndPointAxis, d.angle)), h.pathOrder = i, "path" === this.materialsInit && this.materialObject[i + 1] && (h.material = this.materialObject[i + 1]), d.length - l > o * (n + 1) || (l = o * (n + 1) - d.length + l, i += 1, n = -1), h.updateMatrixWorld(), n += 1 } this.viewer.removeExternalObjectByName(this.meshGroupId), this.viewer.addExternalObject(this.meshGroupId, this.meshGroup) } }, { key: "setSpeed", value: function (A) { this.isFlowing ? (this.stopFlow(), this.arrowParameters.speed = A, this.startFlow()) : this.arrowParameters.speed = A } }, { key: "init", value: function () { this.translationPath(), this.calculationPathOffset(), this.calculationArrowAmount(), this.createMaterialArray(), this.createArrowArray(), this.initPostition() } }, { key: "updatePosition", value: function () { var A = this, e = this.path, t = this.arrowParameters.speed; this.arrowArray.forEach((function (i) { if (!i.lockPosUpDate || !0 !== i.lockPosUpDate) { var o = 0; if (i.userData.BosArrowExt && i.userData.BosArrowExt.enterState && "unenter" === i.userData.BosArrowExt.enterState) { var n = i.position.distanceTo(e[0].endingPoint); return e[0].length > n && ("fixed" !== A.materialsUpdate && A.materialObject[0] ? i.material = A.materialObject[0] : "fixed" === A.materialsUpdate || A.materialObject[0] || (i.material = A.materialObject.default), A.callbackEnter && "function" == typeof A.callbackEnter && A.callbackEnter(i, e[0]), i.visible = !0, i.userData.BosArrowExt.enterState = "enter", "fixed" !== A.materialsUpdate && A.materialObject[1] ? i.material = A.materialObject[1] : "fixed" === A.materialsUpdate || A.materialObject[1] || (i.material = A.materialObject.default)), i.translateX(t + o), void i.updateMatrixWorld() } var r = i.position.distanceTo(e[i.pathOrder].startingPoint); r > e[i.pathOrder].length - A.geometricModelLength && !1 !== i.visible && (i.visible = !1, A.callbackOut && "function" == typeof A.callbackOut && A.callbackOut(i, e[i.pathOrder])), !1 === i.visible && (i.pathOrder + 1 === A.pathNumb ? e[i.pathOrder].length > r || (o = r - e[i.pathOrder].length, i.pathOrder = 0, i.position.copy(e[i.pathOrder].rotationComponent.position), i.scale.copy(e[i.pathOrder].rotationComponent.scale), i.setRotationFromQuaternion(e[i.pathOrder].rotationComponent.quaternion), "fixed" !== A.materialsUpdate && A.materialObject[1] ? i.material = A.materialObject[1] : "fixed" === A.materialsUpdate || A.materialObject[1] || (i.material = A.materialObject.default), A.callbackEnter && "function" == typeof A.callbackEnter && A.callbackEnter(i, e[i.pathOrder]), i.visible = !0) : e[i.pathOrder].length > r || (o = r - e[i.pathOrder].length, i.pathOrder += 1, i.position.copy(e[i.pathOrder].rotationComponent.position), i.scale.copy(e[i.pathOrder].rotationComponent.scale), i.setRotationFromQuaternion(e[i.pathOrder].rotationComponent.quaternion), "fixed" !== A.materialsUpdate && A.materialObject[i.pathOrder + 1] ? i.material = A.materialObject[i.pathOrder + 1] : "fixed" === A.materialsUpdate || A.materialObject[i.pathOrder + 1] || (i.material = A.materialObject.default), i.visible = !0, A.callbackEnter && "function" == typeof A.callbackEnter && A.callbackEnter(i, e[i.pathOrder]))), i.translateX(t + o), i.updateMatrixWorld() } })), this.viewer.render() } }, { key: lv, value: function () { this.requestAnimationFrameID = requestAnimationFrame(this[lv].bind(this)), this.updatePosition() } }, { key: "startFlow", value: function () { if (this.isFlowing) return { code: "003", message: "Do not open repeatedly" }; this.isFlowing = !0, this.requestAnimationFrameID = requestAnimationFrame(this[lv].bind(this)) } }, { key: "stopFlow", value: function () { cancelAnimationFrame(this.requestAnimationFrameID), this.isFlowing = !1 } }, { key: "hide", value: function () { this.viewer.removeExternalObjectByName(this.meshGroupId) } }, { key: "show", value: function () { this.hide(), this.viewer.addExternalObject(this.meshGroupId, this.meshGroup) } }, { key: "clear", value: function () { this.hide(), this.meshGroup.children = [], this.arrowArray = [] } }]), A }(); function hv(A, e) { return A === e || A != A && e != e } function dv(A, e) { for (var t = A.length; t--;) if (hv(A[t][0], e)) return t; return -1 } var pv = Array.prototype.splice; function gv(A) { var e = -1, t = null == A ? 0 : A.length; for (this.clear(); ++e < t;) { var i = A[e]; this.set(i[0], i[1]) } } gv.prototype.clear = function () { this.__data__ = [], this.size = 0 }, gv.prototype.delete = function (A) { var e = this.__data__, t = dv(e, A); return t >= 0 && (t == e.length - 1 ? e.pop() : pv.call(e, t, 1), --this.size, !0) }, gv.prototype.get = function (A) { var e = this.__data__, t = dv(e, A); return 0 > t ? void 0 : e[t][1] }, gv.prototype.has = function (A) { return dv(this.__data__, A) > -1 }, gv.prototype.set = function (A, e) { var t = this.__data__, i = dv(t, A); return 0 > i ? (++this.size, t.push([A, e])) : t[i][1] = e, this }; var uv = "object" == typeof global && global && global.Object === Object && global, fv = "object" == typeof self && self && self.Object === Object && self, mv = uv || fv || Function("return this")(), Cv = mv.Symbol, yv = Object.prototype, vv = yv.hasOwnProperty, Iv = yv.toString, Ev = Cv ? Cv.toStringTag : void 0; var Bv = Object.prototype.toString; var xv = Cv ? Cv.toStringTag : void 0; function Sv(A) { return null == A ? void 0 === A ? "[object Undefined]" : "[object Null]" : xv && xv in Object(A) ? function (A) { var e = vv.call(A, Ev), t = A[Ev]; try { A[Ev] = void 0; var i = !0 } catch (A) {} var o = Iv.call(A); return i && (e ? A[Ev] = t : delete A[Ev]), o }(A) : function (A) { return Bv.call(A) }(A) } function wv(A) { var e = typeof A; return null != A && ("object" == e || "function" == e) } function Mv(A) { if (!wv(A)) return !1; var e = Sv(A); return "[object Function]" == e || "[object GeneratorFunction]" == e || "[object AsyncFunction]" == e || "[object Proxy]" == e } var bv, Uv = mv["__core-js_shared__"], Fv = (bv = /[^.]+$/.exec(Uv && Uv.keys && Uv.keys.IE_PROTO || "")) ? "Symbol(src)_1." + bv : ""; var Kv = Function.prototype.toString; function Qv(A) { if (null != A) { try { return Kv.call(A) } catch (A) {} try { return A + "" } catch (A) {} } return "" } var Rv = /^\[object .+?Constructor\]$/, Tv = RegExp("^" + Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"); function kv(A) { return !(!wv(A) || (e = A, Fv && Fv in e)) && (Mv(A) ? Tv : Rv).test(Qv(A)); var e } function Dv(A, e) { var t = function (A, e) { return null == A ? void 0 : A[e] }(A, e); return kv(t) ? t : void 0 } var Lv = Dv(mv, "Map"), Nv = Dv(Object, "create"); var Ov = Object.prototype.hasOwnProperty; var Vv = Object.prototype.hasOwnProperty; function Gv(A) { var e = -1, t = null == A ? 0 : A.length; for (this.clear(); ++e < t;) { var i = A[e]; this.set(i[0], i[1]) } } function Pv(A, e) { var t, i, o = A.__data__; return ("string" == (i = typeof (t = e)) || "number" == i || "symbol" == i || "boolean" == i ? "__proto__" !== t : null === t) ? o["string" == typeof e ? "string" : "hash"] : o.map } function qv(A) { var e = -1, t = null == A ? 0 : A.length; for (this.clear(); ++e < t;) { var i = A[e]; this.set(i[0], i[1]) } } Gv.prototype.clear = function () { this.__data__ = Nv ? Nv(null) : {}, this.size = 0 }, Gv.prototype.delete = function (A) { var e = this.has(A) && delete this.__data__[A]; return this.size -= e ? 1 : 0, e }, Gv.prototype.get = function (A) { var e = this.__data__; if (Nv) { var t = e[A]; return "__lodash_hash_undefined__" === t ? void 0 : t } return Ov.call(e, A) ? e[A] : void 0 }, Gv.prototype.has = function (A) { var e = this.__data__; return Nv ? void 0 !== e[A] : Vv.call(e, A) }, Gv.prototype.set = function (A, e) { var t = this.__data__; return this.size += this.has(A) ? 0 : 1, t[A] = Nv && void 0 === e ? "__lodash_hash_undefined__" : e, this }, qv.prototype.clear = function () { this.size = 0, this.__data__ = { hash: new Gv, map: new(Lv || gv), string: new Gv } }, qv.prototype.delete = function (A) { var e = Pv(this, A).delete(A); return this.size -= e ? 1 : 0, e }, qv.prototype.get = function (A) { return Pv(this, A).get(A) }, qv.prototype.has = function (A) { return Pv(this, A).has(A) }, qv.prototype.set = function (A, e) { var t = Pv(this, A), i = t.size; return t.set(A, e), this.size += t.size == i ? 0 : 1, this }; function jv(A) { var e = this.__data__ = new gv(A); this.size = e.size } jv.prototype.clear = function () { this.__data__ = new gv, this.size = 0 }, jv.prototype.delete = function (A) { var e = this.__data__, t = e.delete(A); return this.size = e.size, t }, jv.prototype.get = function (A) { return this.__data__.get(A) }, jv.prototype.has = function (A) { return this.__data__.has(A) }, jv.prototype.set = function (A, e) { var t = this.__data__; if (t instanceof gv) { var i = t.__data__; if (!Lv || 199 > i.length) return i.push([A, e]), this.size = ++t.size, this; t = this.__data__ = new qv(i) } return t.set(A, e), this.size = t.size, this }; var Hv = function () { try { var A = Dv(Object, "defineProperty"); return A({}, "", {}), A } catch (A) {} }(); function Yv(A, e, t) { "__proto__" == e && Hv ? Hv(A, e, { configurable: !0, enumerable: !0, value: t, writable: !0 }) : A[e] = t } var Wv = Object.prototype.hasOwnProperty; function Jv(A, e, t) { var i = A[e]; Wv.call(A, e) && hv(i, t) && (void 0 !== t || e in A) || Yv(A, e, t) } function zv(A, e, t, i) { var o = !t; t || (t = {}); for (var n = -1, r = e.length; ++n < r;) { var a = e[n], s = i ? i(t[a], A[a], a, t, A) : void 0; void 0 === s && (s = A[a]), o ? Yv(t, a, s) : Jv(t, a, s) } return t } function Zv(A) { return null != A && "object" == typeof A } function Xv(A) { return Zv(A) && "[object Arguments]" == Sv(A) } var _v = Object.prototype, $v = _v.hasOwnProperty, AI = _v.propertyIsEnumerable, eI = Xv(function () { return arguments }()) ? Xv : function (A) { return Zv(A) && $v.call(A, "callee") && !AI.call(A, "callee") }, tI = Array.isArray; var iI = "object" == typeof A && A && !A.nodeType && A, oI = iI && "object" == typeof module && module && !module.nodeType && module, nI = oI && oI.exports === iI ? mv.Buffer : void 0, rI = (nI ? nI.isBuffer : void 0) || function () { return !1 }, aI = /^(?:0|[1-9]\d*)$/; function sI(A, e) { var t = typeof A; return !!(e = null == e ? 9007199254740991 : e) && ("number" == t || "symbol" != t && aI.test(A)) && A > -1 && A % 1 == 0 && e > A } function lI(A) { return "number" == typeof A && A > -1 && A % 1 == 0 && 9007199254740991 >= A } var cI = {}; function hI(A) { return function (e) { return A(e) } } cI["[object Float32Array]"] = cI["[object Float64Array]"] = cI["[object Int8Array]"] = cI["[object Int16Array]"] = cI["[object Int32Array]"] = cI["[object Uint8Array]"] = cI["[object Uint8ClampedArray]"] = cI["[object Uint16Array]"] = cI["[object Uint32Array]"] = !0, cI["[object Arguments]"] = cI["[object Array]"] = cI["[object ArrayBuffer]"] = cI["[object Boolean]"] = cI["[object DataView]"] = cI["[object Date]"] = cI["[object Error]"] = cI["[object Function]"] = cI["[object Map]"] = cI["[object Number]"] = cI["[object Object]"] = cI["[object RegExp]"] = cI["[object Set]"] = cI["[object String]"] = cI["[object WeakMap]"] = !1; var dI = "object" == typeof A && A && !A.nodeType && A, pI = dI && "object" == typeof module && module && !module.nodeType && module, gI = pI && pI.exports === dI && uv.process, uI = function () { try { var A = pI && pI.require && pI.require("util").types; return A || gI && gI.binding && gI.binding("util") } catch (A) {} }(), fI = uI && uI.isTypedArray, mI = fI ? hI(fI) : function (A) { return Zv(A) && lI(A.length) && !!cI[Sv(A)] }, CI = Object.prototype.hasOwnProperty; function yI(A, e) { var t = tI(A), i = !t && eI(A), o = !t && !i && rI(A), n = !t && !i && !o && mI(A), r = t || i || o || n, a = r ? function (A, e) { for (var t = -1, i = Array(A); ++t < A;) i[t] = e(t); return i }(A.length, String) : [], s = a.length; for (var l in A) !e && !CI.call(A, l) || r && ("length" == l || o && ("offset" == l || "parent" == l) || n && ("buffer" == l || "byteLength" == l || "byteOffset" == l) || sI(l, s)) || a.push(l); return a } var vI = Object.prototype; function II(A) { var e = A && A.constructor; return A === ("function" == typeof e && e.prototype || vI) } function EI(A, e) { return function (t) { return A(e(t)) } } var BI = EI(Object.keys, Object), xI = Object.prototype.hasOwnProperty; function SI(A) { return null != A && lI(A.length) && !Mv(A) } function wI(A) { return SI(A) ? yI(A) : function (A) { if (!II(A)) return BI(A); var e = []; for (var t in Object(A)) xI.call(A, t) && "constructor" != t && e.push(t); return e }(A) } var MI = Object.prototype.hasOwnProperty; function bI(A) { if (!wv(A)) return function (A) { var e = []; if (null != A) for (var t in Object(A)) e.push(t); return e }(A); var e = II(A), t = []; for (var i in A) ("constructor" != i || !e && MI.call(A, i)) && t.push(i); return t } function UI(A) { return SI(A) ? yI(A, !0) : bI(A) } var FI = "object" == typeof A && A && !A.nodeType && A, KI = FI && "object" == typeof module && module && !module.nodeType && module, QI = KI && KI.exports === FI ? mv.Buffer : void 0, RI = QI ? QI.allocUnsafe : void 0; function TI() { return [] } var kI = Object.prototype.propertyIsEnumerable, DI = Object.getOwnPropertySymbols, LI = DI ? function (A) { return null == A ? [] : (A = Object(A), function (A, e) { for (var t = -1, i = null == A ? 0 : A.length, o = 0, n = []; ++t < i;) { var r = A[t]; e(r, t, A) && (n[o++] = r) } return n }(DI(A), (function (e) { return kI.call(A, e) }))) } : TI; function NI(A, e) { for (var t = -1, i = e.length, o = A.length; ++t < i;) A[o + t] = e[t]; return A } var OI = EI(Object.getPrototypeOf, Object), VI = Object.getOwnPropertySymbols ? function (A) { for (var e = []; A;) NI(e, LI(A)), A = OI(A); return e } : TI; function GI(A, e, t) { var i = e(A); return tI(A) ? i : NI(i, t(A)) } function PI(A) { return GI(A, wI, LI) } function qI(A) { return GI(A, UI, VI) } var jI = Dv(mv, "DataView"), HI = Dv(mv, "Promise"), YI = Dv(mv, "Set"), WI = Dv(mv, "WeakMap"), JI = Qv(jI), zI = Qv(Lv), ZI = Qv(HI), XI = Qv(YI), _I = Qv(WI), $I = Sv; (jI && "[object DataView]" != $I(new jI(new ArrayBuffer(1))) || Lv && "[object Map]" != $I(new Lv) || HI && "[object Promise]" != $I(HI.resolve()) || YI && "[object Set]" != $I(new YI) || WI && "[object WeakMap]" != $I(new WI)) && ($I = function (A) { var e = Sv(A), t = "[object Object]" == e ? A.constructor : void 0, i = t ? Qv(t) : ""; if (i) switch (i) { case JI: return "[object DataView]"; case zI: return "[object Map]"; case ZI: return "[object Promise]"; case XI: return "[object Set]"; case _I: return "[object WeakMap]" } return e }); var AE = $I, eE = Object.prototype.hasOwnProperty; var tE = mv.Uint8Array; function iE(A) { var e = new A.constructor(A.byteLength); return new tE(e).set(new tE(A)), e } var oE = /\w*$/; var nE = Cv ? Cv.prototype : void 0, rE = nE ? nE.valueOf : void 0; function aE(A, e, t) { var i, o = A.constructor; switch (e) { case "[object ArrayBuffer]": return iE(A); case "[object Boolean]": case "[object Date]": return new o(+A); case "[object DataView]": return function (A, e) { var t = e ? iE(A.buffer) : A.buffer; return new A.constructor(t, A.byteOffset, A.byteLength) }(A, t); case "[object Float32Array]": case "[object Float64Array]": case "[object Int8Array]": case "[object Int16Array]": case "[object Int32Array]": case "[object Uint8Array]": case "[object Uint8ClampedArray]": case "[object Uint16Array]": case "[object Uint32Array]": return function (A, e) { var t = e ? iE(A.buffer) : A.buffer; return new A.constructor(t, A.byteOffset, A.length) }(A, t); case "[object Map]": return new o; case "[object Number]": case "[object String]": return new o(A); case "[object RegExp]": return function (A) { var e = new A.constructor(A.source, oE.exec(A)); return e.lastIndex = A.lastIndex, e }(A); case "[object Set]": return new o; case "[object Symbol]": return i = A, rE ? Object(rE.call(i)) : {} } } var sE = Object.create, lE = function () { function A() {} return function (e) { if (!wv(e)) return {}; if (sE) return sE(e); A.prototype = e; var t = new A; return A.prototype = void 0, t } }(); var cE = uI && uI.isMap, hE = cE ? hI(cE) : function (A) { return Zv(A) && "[object Map]" == AE(A) }; var dE = uI && uI.isSet, pE = dE ? hI(dE) : function (A) { return Zv(A) && "[object Set]" == AE(A) }, gE = {}; function uE(A, e, t, i, o, n) { var r, a = 1 & e, s = 2 & e, l = 4 & e; if (t && (r = o ? t(A, i, o, n) : t(A)), void 0 !== r) return r; if (!wv(A)) return A; var c = tI(A); if (c) { if (r = function (A) { var e = A.length, t = new A.constructor(e); return e && "string" == typeof A[0] && eE.call(A, "index") && (t.index = A.index, t.input = A.input), t }(A), !a) return function (A, e) { var t = -1, i = A.length; for (e || (e = Array(i)); ++t < i;) e[t] = A[t]; return e }(A, r) } else { var h = AE(A), d = "[object Function]" == h || "[object GeneratorFunction]" == h; if (rI(A)) return function (A, e) { if (e) return A.slice(); var t = A.length, i = RI ? RI(t) : new A.constructor(t); return A.copy(i), i }(A, a); if ("[object Object]" == h || "[object Arguments]" == h || d && !o) { if (r = s || d ? {} : function (A) { return "function" != typeof A.constructor || II(A) ? {} : lE(OI(A)) }(A), !a) return s ? function (A, e) { return zv(A, VI(A), e) }(A, function (A, e) { return A && zv(e, UI(e), A) }(r, A)) : function (A, e) { return zv(A, LI(A), e) }(A, function (A, e) { return A && zv(e, wI(e), A) }(r, A)) } else { if (!gE[h]) return o ? A : {}; r = aE(A, h, a) } } n || (n = new jv); var p = n.get(A); if (p) return p; n.set(A, r), pE(A) ? A.forEach((function (i) { r.add(uE(i, e, t, i, A, n)) })) : hE(A) && A.forEach((function (i, o) { r.set(o, uE(i, e, t, o, A, n)) })); var g = l ? s ? qI : PI : s ? keysIn : wI, u = c ? void 0 : g(A); return function (A, e) { for (var t = -1, i = null == A ? 0 : A.length; ++t < i && !1 !== e(A[t], t, A);) ; }(u || A, (function (i, o) { u && (i = A[o = i]), Jv(r, o, uE(i, e, t, o, A, n)) })), r } gE["[object Arguments]"] = gE["[object Array]"] = gE["[object ArrayBuffer]"] = gE["[object DataView]"] = gE["[object Boolean]"] = gE["[object Date]"] = gE["[object Float32Array]"] = gE["[object Float64Array]"] = gE["[object Int8Array]"] = gE["[object Int16Array]"] = gE["[object Int32Array]"] = gE["[object Map]"] = gE["[object Number]"] = gE["[object Object]"] = gE["[object RegExp]"] = gE["[object Set]"] = gE["[object String]"] = gE["[object Symbol]"] = gE["[object Uint8Array]"] = gE["[object Uint8ClampedArray]"] = gE["[object Uint16Array]"] = gE["[object Uint32Array]"] = !0, gE["[object Error]"] = gE["[object Function]"] = gE["[object WeakMap]"] = !1; function fE(A) { return uE(A, 5) } var mE = function () { var A, e = { defaultRadius: 40, defaultRenderer: "canvas2d", defaultGradient: { .25: "rgb(0,0,255)", .55: "rgb(0,255,0)", .85: "yellow", 1: "rgb(255,0,0)" }, defaultMaxOpacity: 1, defaultMinOpacity: 0, defaultBlur: .85, defaultXField: "x", defaultYField: "y", defaultValueField: "value", plugins: {} }, t = function () { var A = function (A) { this._coordinator = {}, this._data = [], this._radi = [], this._min = 10, this._max = 1, this._xField = A.xField || A.defaultXField, this._yField = A.yField || A.defaultYField, this._valueField = A.valueField || A.defaultValueField, A.radius && (this._cfgRadius = A.radius) }, t = e.defaultRadius; return A.prototype = { _organiseData: function (A, e) { var i = A[this._xField], o = A[this._yField], n = this._radi, r = this._data, a = this._max, s = this._min, l = A[this._valueField] || 1, c = A.radius || this._cfgRadius || t; r[i] || (r[i] = [], n[i] = []), r[i][o] ? r[i][o] += l : (r[i][o] = l, n[i][o] = c); var h = r[i][o]; return h > a ? (e ? this.setDataMax(h) : this._max = h, !1) : s > h ? (e ? this.setDataMin(h) : this._min = h, !1) : { x: i, y: o, value: l, radius: c, min: s, max: a } }, _unOrganizeData: function () { var A = [], e = this._data, t = this._radi; for (var i in e) for (var o in e[i]) A.push({ x: i, y: o, radius: t[i][o], value: e[i][o] }); return { min: this._min, max: this._max, data: A } }, _onExtremaChange: function () { this._coordinator.emit("extremachange", { min: this._min, max: this._max }) }, addData: function () { if (arguments[0].length > 0) for (var A = arguments[0], e = A.length; e--;) this.addData.call(this, A[e]); else { var t = this._organiseData(arguments[0], !0); t && (0 === this._data.length && (this._min = this._max = t.value), this._coordinator.emit("renderpartial", { min: this._min, max: this._max, data: [t] })) } return this }, setData: function (A) { var e = A.data, t = e.length; this._data = [], this._radi = []; for (var i = 0; t > i; i++) this._organiseData(e[i], !1); return this._max = A.max, this._min = A.min || 0, this._onExtremaChange(), this._coordinator.emit("renderall", this._getInternalData()), this }, removeData: function () {}, setDataMax: function (A) { return this._max = A, this._onExtremaChange(), this._coordinator.emit("renderall", this._getInternalData()), this }, setDataMin: function (A) { return this._min = A, this._onExtremaChange(), this._coordinator.emit("renderall", this._getInternalData()), this }, setCoordinator: function (A) { this._coordinator = A }, _getInternalData: function () { return { max: this._max, min: this._min, data: this._data, radi: this._radi } }, getData: function () { return this._unOrganizeData() } }, A }(), i = function () { var A = function (A) { var e = A.gradient || A.defaultGradient, t = document.createElement("canvas"), i = t.getContext("2d"); t.width = 256, t.height = 1; var o = i.createLinearGradient(0, 0, 256, 1); for (var n in e) o.addColorStop(n, e[n]); return i.fillStyle = o, i.fillRect(0, 0, 256, 1), i.getImageData(0, 0, 256, 1).data }, e = function (A, e) { var t = document.createElement("canvas"), i = t.getContext("2d"), o = A, n = A; if (t.width = t.height = 2 * A, 1 == e) i.beginPath(), i.arc(o, n, A, 0, 2 * Math.PI, !1), i.fillStyle = "rgba(0,0,0,1)", i.fill(); else { var r = i.createRadialGradient(o, n, A * e, o, n, A); r.addColorStop(0, "rgba(0,0,0,1)"), r.addColorStop(1, "rgba(0,0,0,0)"), i.fillStyle = r, i.fillRect(0, 0, 2 * A, 2 * A) } return t }; function t(e) { var t = e.container, i = this.shadowCanvas = document.createElement("canvas"), o = this.canvas = e.canvas || document.createElement("canvas"), n = (this._renderBoundaries = [1e4, 1e4, 0, 0], getComputedStyle(e.container) || {}); o.className = "heatmap-canvas", this._width = o.width = i.width = e.width || +n.width.replace(/px/, ""), this._height = o.height = i.height = e.height || +n.height.replace(/px/, ""), this.shadowCtx = i.getContext("2d"), this.ctx = o.getContext("2d"), o.style.cssText = i.style.cssText = "position:absolute;left:0;top:0;", t.style.position = "relative", t.appendChild(o), this._palette = A(e), this._templates = {}, this._setStyles(e) } return t.prototype = { renderPartial: function (A) { A.data.length > 0 && (this._drawAlpha(A), this._colorize()) }, renderAll: function (A) { this._clear(), A.data.length > 0 && (this._drawAlpha(function (A) { for (var e = [], t = A.min, i = A.max, o = A.radi, n = (A = A.data, Object.keys(A)), r = n.length; r--;) for (var a = n[r], s = Object.keys(A[a]), l = s.length; l--;) { var c = s[l]; e.push({ x: a, y: c, value: A[a][c], radius: o[a][c] }) } return { min: t, max: i, data: e } }(A)), this._colorize()) }, _updateGradient: function (e) { this._palette = A(e) }, updateConfig: function (A) { A.gradient && this._updateGradient(A), this._setStyles(A) }, setDimensions: function (A, e) { this._width = A, this._height = e, this.canvas.width = this.shadowCanvas.width = A, this.canvas.height = this.shadowCanvas.height = e }, _clear: function () { this.shadowCtx.clearRect(0, 0, this._width, this._height), this.ctx.clearRect(0, 0, this._width, this._height) }, _setStyles: function (A) { this._blur = 0 == A.blur ? 0 : A.blur || A.defaultBlur, A.backgroundColor && (this.canvas.style.backgroundColor = A.backgroundColor), this._width = this.canvas.width = this.shadowCanvas.width = A.width || this._width, this._height = this.canvas.height = this.shadowCanvas.height = A.height || this._height, this._opacity = 255 * (A.opacity || 0), this._maxOpacity = 255 * (A.maxOpacity || A.defaultMaxOpacity), this._minOpacity = 255 * (A.minOpacity || A.defaultMinOpacity), this._useGradientOpacity = !!A.useGradientOpacity }, _drawAlpha: function (A) { for (var t = this._min = A.min, i = this._max = A.max, o = (A = A.data || []).length, n = 1 - this._blur; o--;) { var r, a = A[o], s = a.x, l = a.y, c = a.radius, h = Math.min(a.value, i), d = s - c, p = l - c, g = this.shadowCtx; this._templates[c] ? r = this._templates[c] : this._templates[c] = r = e(c, n); var u = (h - t) / (i - t); g.globalAlpha = .01 > u ? .01 : u, g.drawImage(r, d, p), this._renderBoundaries[0] > d && (this._renderBoundaries[0] = d), this._renderBoundaries[1] > p && (this._renderBoundaries[1] = p), d + 2 * c > this._renderBoundaries[2] && (this._renderBoundaries[2] = d + 2 * c), p + 2 * c > this._renderBoundaries[3] && (this._renderBoundaries[3] = p + 2 * c) } }, _colorize: function () { var A = this._renderBoundaries[0], e = this._renderBoundaries[1], t = this._renderBoundaries[2] - A, i = this._renderBoundaries[3] - e, o = this._width, n = this._height, r = this._opacity, a = this._maxOpacity, s = this._minOpacity, l = this._useGradientOpacity; 0 > A && (A = 0), 0 > e && (e = 0), A + t > o && (t = o - A), e + i > n && (i = n - e); for (var c = this.shadowCtx.getImageData(A, e, t, i), h = c.data, d = h.length, p = this._palette, g = 3; d > g; g += 4) { var u, f = h[g], m = 4 * f; if (m) u = r > 0 ? r : a > f ? s > f ? s : f : a, h[g - 3] = p[m], h[g - 2] = p[m + 1], h[g - 1] = p[m + 2], h[g] = l ? p[m + 3] : u } this.shadowCtx.putImageData(c, A, e), this.ctx.putImageData(c, A, e), this._renderBoundaries = [1e3, 1e3, 0, 0] }, getValueAt: function (A) { var e = this.shadowCtx.getImageData(A.x, A.y, 1, 1).data[3]; return Math.abs(this._max - this._min) * (e / 255) >> 0 }, getDataURL: function () { return this.canvas.toDataURL() } }, t }(), o = (A = !1, "canvas2d" === e.defaultRenderer && (A = i), A), n = function () { for (var A = {}, e = arguments.length, t = 0; e > t; t++) { var i = arguments[t]; for (var o in i) A[o] = i[o] } return A }, r = function () { var A = function () { function A() { this.cStore = {} } return A.prototype = { on: function (A, e, t) { var i = this.cStore; i[A] || (i[A] = []), i[A].push((function (A) { return e.call(t, A) })) }, emit: function (A, e) { var t = this.cStore; if (t[A]) for (var i = t[A].length, o = 0; i > o; o++) { (0, t[A][o])(e) } } }, A }(), i = function (A) { var e = A._renderer, t = A._coordinator, i = A._store; t.on("renderpartial", e.renderPartial, e), t.on("renderall", e.renderAll, e), t.on("extremachange", (function (e) { A._config.onExtremaChange && A._config.onExtremaChange({ min: e.min, max: e.max, gradient: A._config.gradient || A._config.defaultGradient }) })), i.setCoordinator(t) }; function r() { var r = this._config = n(e, arguments[0] || {}); if (this._coordinator = new A, r.plugin) { var a = r.plugin; if (!e.plugins[a]) throw new Error("Plugin '" + a + "' not found. Maybe it was not registered."); var s = e.plugins[a]; this._renderer = new s.renderer(r), this._store = new s.store(r) } else this._renderer = new o(r), this._store = new t(r); i(this) } return r.prototype = { addData: function () { return this._store.addData.apply(this._store, arguments), this }, removeData: function () { return this._store.removeData && this._store.removeData.apply(this._store, arguments), this }, setData: function () { return this._store.setData.apply(this._store, arguments), this }, setDataMax: function () { return this._store.setDataMax.apply(this._store, arguments), this }, setDataMin: function () { return this._store.setDataMin.apply(this._store, arguments), this }, configure: function (A) { return this._config = n(this._config, A), this._renderer.updateConfig(this._config), this._coordinator.emit("renderall", this._store._getInternalData()), this }, repaint: function () { return this._coordinator.emit("renderall", this._store._getInternalData()), this }, getData: function () { return this._store.getData() }, getDataURL: function () { return this._renderer.getDataURL() }, getValueAt: function (A) { return this._store.getValueAt ? this._store.getValueAt(A) : this._renderer.getValueAt ? this._renderer.getValueAt(A) : null } }, r }(); return { create: function (A) { return new r(A) }, register: function (A, t) { e.plugins[A] = t } } }(), CE = function () { function A(e) { cc(this, A), this.viewer = e.viewer3D, this.id = e.id, this.boundary = [], this.quaternion = new f, this.xMin = 1 / 0, this.yMax = -1 / 0, this.zoomRate = .05 } return dc(A, [{ key: "createInstance", value: function (A, e) { var t = document.createElement("div"); t.id = "heatmap-" + this.id || (new Date).getTime(), t.style.width = "10px", t.style.height = "10px", t.style.position = "absolute", t.style.top = "0", t.style.left = "0", t.style.zIndex = "-10", t.style.overflow = "scroll"; var i = document.createElement("div"); i.style.width = A + "px", i.style.height = e + "px", t.appendChild(i), this.viewer.viewportDiv.appendChild(t), this.container = t, this.heatmap = mE.create({ container: i }) } }, { key: "getHeatmap", value: function () { return this.heatmap } }, { key: "isPlane", value: function (A) { if (3 > A.length) return !1; if (3 === A.length) return !0; for (var e = !0, t = (new y).subVectors(A[0], A[1]), i = (new y).subVectors(A[1], A[2]), o = t.cross(i).normalize(), n = 3; A.length > n; n++) { var r = (new y).subVectors(A[n - 1], A[n]).cross(i).normalize(), a = .001; if (Math.abs(Math.abs(o.x) - Math.abs(r.x)) > a || Math.abs(Math.abs(o.y) - Math.abs(r.y)) > a || Math.abs(Math.abs(o.z) - Math.abs(r.z)) > a) { e = !1; break } } return e } }, { key: "addHeatmap", value: function (A, e) { var t = fE(e.boundary); if (e.data.data.forEach((function (A) { t.push(A.point) })), this.isPlane(t)) { this.boundary = fE(e.boundary); var i = new f, o = (new y).subVectors(e.boundary[1], e.boundary[0]).cross((new y).subVectors(e.boundary[2], e.boundary[1])); i.setFromUnitVectors(o.normalize(), new y(0, 0, 1)); var n = fE(e.boundary).map((function (A) { return A.applyQuaternion(i) })); this.quaternion = i.clone(); var r = 1 / 0, a = -1 / 0, s = 1 / 0, l = -1 / 0; n.forEach((function (A) { r > A.x && (r = A.x), A.x > a && (a = A.x), s > A.y && (s = A.y), A.y > l && (l = A.y) })); var c = a - r, h = l - s; this.xMin = r, this.yMax = l; var d = e.quality || .05; this.zoomRate = d, this.createInstance(Math.round(c * d), Math.round(h * d)); var p = e.data.data.map((function (A) { return A.point.applyQuaternion(i) })), g = []; e.data.data.forEach((function (A, e) { var t = p[e]; g.push({ x: Math.round((t.x - r) * d), y: Math.round((l - t.y) * d), value: A.value, radius: (A.radius || 1e3) * d }) })), this.heatmap.setData({ min: e.data.min, max: e.data.max, data: g }); var u = new ov(n), m = new jA({ map: new en(this.container.querySelector("canvas")), side: 2, transparent: !0, polygonOffset: !0, polygonOffsetFactor: -1, polygonOffsetUnits: -1 }), C = new Kf(u, m); C.visible = !0; var v = new M; v.elements[14] = n[0].z; var I = new M; return I.makeRotationFromQuaternion(i.inverse()), C.applyMatrix4(I.multiply(v)), this.viewer.addExternalObject(A, C), C.disPickable = !0, this.viewer.disableComponentsSelectionByKey(A), !0 } return !1 } }, { key: "updateHeatmap", value: function (A) { var e = this, t = fE(this.boundary); if (A.data.data.forEach((function (A) { t.push(A.point) })), this.isPlane(t)) { var i = [], o = A.data.data.map((function (A) { return new y(A.point.x, A.point.y, A.point.z).applyQuaternion(e.quaternion) })), n = this.zoomRate; return A.data.data.forEach((function (A, t) { var r = o[t]; i.push({ x: Math.round((r.x - e.xMin) * n), y: Math.round((e.yMax - r.y) * n), value: A.value, radius: (A.radius || 1e3) * n }) })), this.heatmap.setData({ min: A.data.min, max: A.data.max, data: i }), this.viewer.getExternalObjectByName(A.id).material.map.needsUpdate = !0, this.viewer.render(), !0 } return !1 } }, { key: "removeHeatmap", value: function (A) { this.viewer.removeExternalObjectByName(A), this.viewer.viewportDiv.removeChild(this.container) } }]), A }(), yE = function (A) { this.maxEdgeLength = A }; yE.prototype.modify = function (A) { for (var e, t = [], i = [], o = this.maxEdgeLength * this.maxEdgeLength, n = 0, r = A.faceVertexUvs.length; r > n; n++) i[n] = []; for (n = 0, r = A.faces.length; r > n; n++) { var a = A.faces[n]; if (a instanceof GA) { var s = a.a, l = a.b, c = a.c, h = A.vertices[s], d = A.vertices[l], p = A.vertices[c], g = h.distanceToSquared(d), u = d.distanceToSquared(p), f = h.distanceToSquared(p); if (g > o || u > o || f > o) { var m = A.vertices.length, C = a.clone(), y = a.clone(); if (g < u || g < f) if (u < g || u < f) { if ((v = h.clone()).lerp(p, .5), C.a = s, C.b = l, C.c = m, y.a = m, y.b = l, y.c = c, 3 === a.vertexNormals.length) (I = a.vertexNormals[0].clone()).lerp(a.vertexNormals[2], .5), C.vertexNormals[2].copy(I), y.vertexNormals[0].copy(I); if (3 === a.vertexColors.length) (E = a.vertexColors[0].clone()).lerp(a.vertexColors[2], .5), C.vertexColors[2].copy(E), y.vertexColors[0].copy(E); e = 2 } else { if ((v = d.clone()).lerp(p, .5), C.a = s, C.b = l, C.c = m, y.a = m, y.b = c, y.c = s, 3 === a.vertexNormals.length) (I = a.vertexNormals[1].clone()).lerp(a.vertexNormals[2], .5), C.vertexNormals[2].copy(I), y.vertexNormals[0].copy(I), y.vertexNormals[1].copy(a.vertexNormals[2]), y.vertexNormals[2].copy(a.vertexNormals[0]); if (3 === a.vertexColors.length) (E = a.vertexColors[1].clone()).lerp(a.vertexColors[2], .5), C.vertexColors[2].copy(E), y.vertexColors[0].copy(E), y.vertexColors[1].copy(a.vertexColors[2]), y.vertexColors[2].copy(a.vertexColors[0]); e = 1 } else { var v, I, E; if ((v = h.clone()).lerp(d, .5), C.a = s, C.b = m, C.c = c, y.a = m, y.b = l, y.c = c, 3 === a.vertexNormals.length) (I = a.vertexNormals[0].clone()).lerp(a.vertexNormals[1], .5), C.vertexNormals[1].copy(I), y.vertexNormals[0].copy(I); if (3 === a.vertexColors.length) (E = a.vertexColors[0].clone()).lerp(a.vertexColors[1], .5), C.vertexColors[1].copy(E), y.vertexColors[0].copy(E); e = 0 } t.push(C, y), A.vertices.push(v); for (var B = 0, x = A.faceVertexUvs.length; x > B; B++) if (A.faceVertexUvs[B].length) { var S = A.faceVertexUvs[B][n], w = S[0], M = S[1], b = S[2]; if (0 === e) { (K = w.clone()).lerp(M, .5); var U = [w.clone(), K.clone(), b.clone()], F = [K.clone(), M.clone(), b.clone()] } else if (1 === e) { (K = M.clone()).lerp(b, .5); U = [w.clone(), M.clone(), K.clone()], F = [K.clone(), b.clone(), w.clone()] } else { var K; (K = w.clone()).lerp(b, .5); U = [w.clone(), M.clone(), K.clone()], F = [K.clone(), M.clone(), b.clone()] } i[B].push(U, F) } } else { t.push(a); for (B = 0, x = A.faceVertexUvs.length; x > B; B++) i[B].push(A.faceVertexUvs[B][n]) } } } A.faces = t, A.faceVertexUvs = i }; var vE = function () { function A(e) { cc(this, A), this.viewer = e.viewer3D, this.id = e.id, this.boundary = [], this.quaternion = new f, this.xMin = 1 / 0, this.yMax = -1 / 0, this.zoomRate = .05, this._canvasSize = new s, this.detailFactor = .5, this._offsetToNagZ = !1, this._mesh = void 0, this._originalGeo = void 0, this._currentGeo = void 0 } return dc(A, [{ key: "createInstance", value: function (A, e) { var t = document.createElement("div"); t.id = "heatmap-" + this.id || (new Date).getTime(), t.style.width = "10px", t.style.height = "10px", t.style.position = "absolute", t.style.top = "0", t.style.left = "0", t.style.zIndex = "-10", t.style.overflow = "scroll"; var i = document.createElement("div"); i.style.width = A + "px", i.style.height = e + "px", this._canvas = i, t.appendChild(i), this.viewer.viewportDiv.appendChild(t), this.container = t, this.heatmap = mE.create({ container: i }), this._canvasSize.set(A, e) } }, { key: "getHeatmap", value: function () { return this.heatmap } }, { key: "isPlane", value: function (A) { if (3 > A.length) return !1; if (3 === A.length) return !0; for (var e = !0, t = (new y).subVectors(A[0], A[1]), i = (new y).subVectors(A[1], A[2]), o = t.cross(i).normalize(), n = 3; A.length > n; n += 1) { var r = (new y).subVectors(A[n - 1], A[n]).cross(i).normalize(), a = .001; if (Math.abs(Math.abs(o.x) - Math.abs(r.x)) > a || Math.abs(Math.abs(o.y) - Math.abs(r.y)) > a || Math.abs(Math.abs(o.z) - Math.abs(r.z)) > a) { e = !1; break } } return e } }, { key: "addHeatmap", value: function (A, e) { var t = fE(e.boundary); if (e.data.data.forEach((function (A) { t.push(A.point) })), this.isPlane(t)) { this.boundary = fE(e.boundary); var i = new f, o = (new y).subVectors(e.boundary[1], e.boundary[0]).cross((new y).subVectors(e.boundary[2], e.boundary[1])); i.setFromUnitVectors(o.normalize(), new y(0, 0, 1)), 2 * o.angleTo(new y(0, 0, 1)) > Math.PI && (this._offsetToNagZ = !0); var n = fE(e.boundary).map((function (A) { return A.applyQuaternion(i) })); this.quaternion = i.clone(); var r = 1 / 0, a = -1 / 0, s = 1 / 0, l = -1 / 0; n.forEach((function (A) { r > A.x && (r = A.x), A.x > a && (a = A.x), s > A.y && (s = A.y), A.y > l && (l = A.y) })); var c = a - r, h = l - s; this.xMin = r, this.yMax = l; var d = e.quality || .05; this.zoomRate = d, this.createInstance(Math.round(c * d), Math.round(h * d)); var p = e.data.data.map((function (A) { return A.point.applyQuaternion(i) })), g = []; e.data.data.forEach((function (A, e) { var t = p[e]; g.push({ x: Math.round((t.x - r) * d), y: Math.round((l - t.y) * d), value: A.value, radius: (A.radius || 1e3) * d }) })), this.heatmap.setData({ min: e.data.min, max: e.data.max, data: g }); var u = new ov(n), m = new De; m.fromBufferGeometry(u), this._originalGeo = m.clone(); var C = this._tessellateGeometry(m); u = (new he).fromGeometry(C), this._offsetZ(u); var v = new jA({ map: new en(this.container.querySelector("canvas")), transparent: !0, side: 2, polygonOffset: !0, polygonOffsetFactor: -1, polygonOffsetUnits: -1, wireframe: !1 }), I = new Kf(u, v); I.visible = !0; var E = new M; E.elements[14] = n[0].z; var B = new M; return B.makeRotationFromQuaternion(i.inverse()), I.applyMatrix4(B.multiply(E)), this.viewer.addExternalObject(A, I), I.disPickable = !0, this.viewer.disableComponentsSelectionByKey(A), this._mesh = I, !0 } return !1 } }, { key: "updateHeatmap", value: function (A) { var e = this, t = fE(this.boundary); if (A.data.data.forEach((function (A) { t.push(A.point) })), this.isPlane(t)) { var i = [], o = A.data.data.map((function (A) { return new y(A.point.x, A.point.y, A.point.z).applyQuaternion(e.quaternion) })), n = this.zoomRate; A.data.data.forEach((function (A, t) { var r = o[t]; i.push({ x: Math.round((r.x - e.xMin) * n), y: Math.round((e.yMax - r.y) * n), value: A.value, radius: (A.radius || 1e3) * n }) })), this.heatmap.setData({ min: A.data.min, max: A.data.max, data: i }); var r = this.viewer.getExternalObjectByName(A.id); if (r) return r.material.map.needsUpdate = !0, this.viewer.render(), !0 } return !1 } }, { key: "removeHeatmap", value: function (A) { this.viewer.removeExternalObjectByName(A), this.viewer.viewportDiv.removeChild(this.container) } }, { key: "setDetailFactor", value: function (A) { if (this.detailFactor !== A && (this.detailFactor = A, this._originalGeo && this._mesh)) { var e = this._originalGeo.clone(), t = this._tessellateGeometry(e), i = (new he).fromGeometry(t); this._offsetZ(i), this._mesh.geometry = i } } }, { key: "_tessellateGeometry", value: function (A) { for (var e = new yE(100), t = 10 + Math.round(10 * this.detailFactor), i = 0; t > i; i += 1) e.modify(A); return A } }, { key: "_easeInOutQuad", value: function (A) { return 1 - (1 - A) * (1 - A) } }, { key: "_offsetZ", value: function (A) { for (var e = A.getAttribute("uv").array, t = A.getAttribute("position").array, i = this.heatmap.getData(), o = 0, n = e.length; n > o; o += 2) { var r = (this.heatmap.getValueAt({ x: e[o] * this._canvasSize.x, y: (1 - e[o + 1]) * this._canvasSize.y }) - i.min) / (i.max - i.min); r = this._easeInOutQuad(r), t[o / 2 * 3 + 2] = 1e3 * r * (this._offsetToNagZ ? -1 : 1) } A.getAttribute("position").needsUpdate = !0 } }]), A }(), IE = function () { function A(e, t) { cc(this, A), this.viewer = t, this.maxHeatValue = 1 / 0, this.minHeatValue = -1 / 0, this._init(e) } return dc(A, [{ key: "show", value: function (A) { var e = this; function t(A) { if (0 === A.uniforms.heatmapPoints.value.length) A.fragmentShader = "#define HEATMAPPOINTSCOUNT " + e.shaderData.heatmapPoints.length + "\n" + A.fragmentShader, A.vertexShader = "#define HEATMAPPOINTSCOUNT " + e.shaderData.heatmapPoints.length + "\n" + A.vertexShader; else { var t = "#define HEATMAPPOINTSCOUNT " + A.uniforms.heatmapPoints.value.length; A.fragmentShader = A.fragmentShader.replace(t, "#define HEATMAPPOINTSCOUNT " + e.shaderData.heatmapPoints.length), A.vertexShader = A.vertexShader.replace(t, "#define HEATMAPPOINTSCOUNT " + e.shaderData.heatmapPoints.length) } A.uniforms.heatmapPoints.value = e.shaderData.heatmapPoints, A.uniforms.heatmapTexture.value = e.shaderData.heatmapTexture, A.needsUpdate = !0 } if (A) { if (!this.viewer.getViewerImpl().getModelByComponentKey(A)) return; var i = this.viewer.getViewerImpl().modelManager.getComponent(A); if (i && i.length > 0) for (var o = i[0].mesh.material, n = 0, r = o.length; r > n; n += 1) o[n] = o[n].clone(), t(o[n]) } else this.shaderData.heatmapPoints && this.shaderData.heatmapTexture && (this.viewer.getViewerImpl().getModelManager().traverseModels((function (A) { var e = A.materialManager.materials; for (var i in e) { t(e[i]) } })), this.viewer.syncRender()) } }, { key: "hide", value: function () { var A = this; this.shaderData.heatmapPoints && this.shaderData.heatmapTexture && (this.viewer.getViewerImpl().getModelManager().traverseModels((function (e) { var t = e.materialManager.materials; for (var i in t) { var o = t[i]; if (o.uniforms.heatmapPoints.value.length > 0) { o.uniforms.heatmapPoints.value = [], o.uniforms.heatmapTexture.value = null; var n = "#define HEATMAPPOINTSCOUNT " + A.shaderData.heatmapPoints.length; o.fragmentShader = o.fragmentShader.replace(n, ""), o.vertexShader = o.vertexShader.replace(n, ""), o.needsUpdate = !0 } } })), this.viewer.render()) } }, { key: "removeHeatmap", value: function () { this.hide(), this.shaderData.heatmapPoints && delete this.shaderData.heatmapPoints, this.shaderData.heatmapTexture && delete this.shaderData.heatmapTexture } }, { key: "updateHeatmap", value: function (A) { var e = A.data; this.maxHeatValue = e.max ? e.max : 1 / 0, this.minHeatValue = e.min ? e.min : -1 / 0, this.shaderData.heatmapPoints = this._createHeatmapBuffer(A.data), this.show() } }, { key: "_init", value: function (A) { var e = A.data; this.maxHeatValue = e.max ? e.max : 1 / 0, this.minHeatValue = e.min ? e.min : -1 / 0, this.shaderData = { heatmapPoints: this._createHeatmapBuffer(e), heatmapTexture: this._createHeatmapTexture() } } }, { key: "_createHeatmapBuffer", value: function (A) { if (A.data && 0 !== A.data.length) { if (this.maxHeatValue === 1 / 0 || this.minHeatValue === -1 / 0) for (var e = 0, t = A.data.length; t > e; e += 1) { var i = A.data[e]; i.value > this.maxHeatValue && (this.maxHeatValue = i.value), this.minHeatValue > i.value && (this.minHeatValue = i.value) } for (var o = [], n = 0, r = A.data.length; r > n; n += 1) { var a = A.data[n], s = Math.max(this.minHeatValue, Math.min(a.value, this.maxHeatValue)); o.push(a.point.x, a.point.y, a.point.z, (s - this.minHeatValue) / (this.maxHeatValue - this.minHeatValue), a.radius ? a.radius : 1e3) } return new Float32Array(o) } } }, { key: "_createHeatmapTexture", value: function () { var A = document.createElement("canvas"); A.width = 256, A.height = 1; var e = A.getContext("2d"), t = e.createLinearGradient(0, 0, 256, 1), i = { 0: "#44f", .1: "#0ff", .2: "#0f0", .4: "#ff0", 1: "#f00" }; for (var o in i) t.addColorStop(o, i[o]); return e.fillStyle = t, e.fillRect(0, 0, 256, 1), new en(A) } }]), A }(), EE = function () { function A(e, t) { cc(this, A), this.heatSpheres = [], this.viewer = t, this.maxHeatValue = 1 / 0, this.minHeatValue = -1 / 0, this._animating = !1, this._lastAnimateTime = void 0, this._localTime = 0, this._duration = 2e3, this._init(e) } return dc(A, [{ key: "getColorIndexAndValueOfHeatValue", value: function (e) { A.colorBoard || (A.colorBoard = this._createColorBoard()); var t = (Math.max(this.minHeatValue, Math.min(e, this.maxHeatValue)) - this.minHeatValue) / (this.maxHeatValue - this.minHeatValue) * 255, i = 4 * (t = Math.round(t)); return { color: new LA(A.colorBoard[i] / 255, A.colorBoard[i + 1] / 255, A.colorBoard[i + 2] / 255), index: t } } }, { key: "updateHeatmap", value: function (A) { this.removeHeatmap(), this._init(A), this.startAnimation(this._duration) } }, { key: "startAnimation", value: function (A) { var e = this; this._animating || (this._animating = !0, A && (this._duration = A), requestAnimationFrame((function (A) { return e._animate(A) }))) } }, { key: "stopAnimation", value: function () { this._animating = !1, this._lastAnimateTime = void 0, this._localTime = 0 } }, { key: "removeHeatmap", value: function () { var A = this; this.stopAnimation(), this.heatSpheres.forEach((function (e) { A.viewer.removeExternalObjectByName(e.uuid) })) } }, { key: "_animate", value: function (e) { var t = this, i = this._lastAnimateTime ? e - this._lastAnimateTime : 0; if (!this._lastAnimateTime || i > 100) { this._localTime += i / this._duration, 1 > this._localTime || (this._localTime = 0); var o = this._easeOutSine(this._localTime); this.heatSpheres.forEach((function (e) { e.scale.set(o, o, o), e.updateMatrixWorld(!0); var i = e.userData._heatColorIndex; i = 4 * Math.round(i * (1 - t._localTime)), e.material.color.setRGB(A.colorBoard[i] / 255, A.colorBoard[i + 1] / 255, A.colorBoard[i + 2] / 255), e.material.needsUpdate = !0 })), this.viewer.render(), this._lastAnimateTime = e } this._animating && requestAnimationFrame((function (A) { return t._animate(A) })) } }, { key: "_init", value: function (A) { var e = A.data; if (this.maxHeatValue = e.max ? e.max : 1 / 0, this.minHeatValue = e.min ? e.min : -1 / 0, this._sphereOpacity = e.alpha ? e.alpha : .7, this.maxHeatValue === 1 / 0 || this.minHeatValue === -1 / 0) for (var t = 0, i = e.data.length; i > t; t += 1) { var o = e.data[t]; o.value > this.maxHeatValue && (this.maxHeatValue = o.value), this.minHeatValue > o.value && (this.minHeatValue = o.value) } for (var n = 0, r = e.data.length; r > n; n += 1) this._addHeatPoint(e.data[n]) } }, { key: "_addHeatPoint", value: function (A) { var e = A, t = e.radius ? e.radius : 1e3, i = 10 * Math.log10(t), o = new er(t, i, i), n = this.getColorIndexAndValueOfHeatValue(e.value), r = n.index, a = new Ue(o, new xr({ color: n.color, depthTest: !0, transparent: !0, opacity: this._sphereOpacity })); a.position.set(e.point.x, e.point.y, e.point.z), a.updateMatrixWorld(!0), a.userData._heatValue = e.value, a.userData._heatColorIndex = r, a.disPickable = !0, this.viewer.disableComponentsSelectionByKey(a.uuid), this.heatSpheres.push(a), this.viewer.addExternalObject(a.uuid, a) } }, { key: "_createColorBoard", value: function () { var A = document.createElement("canvas"); A.width = 256, A.height = 1; var e = A.getContext("2d"), t = e.createLinearGradient(0, 0, 256, 1), i = { 0: "#44f", .1: "#0ff", .2: "#0f0", .4: "#ff0", 1: "#f00" }; for (var o in i) t.addColorStop(o, i[o]); return e.fillStyle = t, e.fillRect(0, 0, 256, 1), e.getImageData(0, 0, 256, 1).data } }, { key: "_easeOutCubic", value: function (A) { return 1 - Math.pow(1 - A, 3) } }, { key: "_easeOutSine", value: function (A) { return Math.sin(A * Math.PI / 2) } }, { key: "_easeInCubic", value: function (A) { return A * A * A } }]), A }(), BE = function () { function A(e) { cc(this, A), this.viewer = e.viewer3D, this.mapCollection = {} } return dc(A, [{ key: "createHeatmap", value: function (A) { var e = ((new Date).getTime() * (Math.random() + 1)).toString(36).slice(0, 8), t = new CE({ viewer3D: this.viewer, id: e }), i = fE(A); return i.data.data.forEach((function (A) { A.point = new y(A.point.x, A.point.y, A.point.z) })), i.boundary = i.boundary.map((function (A) { return new y(A.x, A.y, A.z) })), t.addHeatmap(e, i) ? (this.mapCollection[e] = t, { code: "success", id: e }) : { code: "error", message: "输入的点不共面" } } }, { key: "updateHeatmap", value: function (A) { var e = this.mapCollection[A.id]; if (e && e.updateHeatmap) return e.updateHeatmap(A) } }, { key: "removeHeatmap", value: function (A) { return !!this.mapCollection[A] && (this.mapCollection[A].removeHeatmap(A), delete this.mapCollection[A], !0) } }, { key: "createHeatmap3D", value: function (A) { var e = ((new Date).getTime() * (Math.random() + 1)).toString(36).slice(0, 8), t = new vE({ viewer3D: this.viewer, id: e }), i = fE(A); return i.data.data.forEach((function (A) { A.point = new y(A.point.x, A.point.y, A.point.z) })), i.boundary = i.boundary.map((function (A) { return new y(A.x, A.y, A.z) })), t.addHeatmap(e, i) ? (this.mapCollection[e] = t, { code: "success", id: e, map: t }) : { code: "error", message: "输入的点不共面" } } }, { key: "createSphereHeatmap", value: function (A) { if (A.data && A.data.data) { var e = ((new Date).getTime() * (Math.random() + 1)).toString(36).slice(0, 8), t = new EE(A, this.viewer); return t.startAnimation(5e3), this.mapCollection[e] = t, { code: "success", id: e, map: t } } return { code: "error", message: "参数错误" } } }, { key: "createSphereColorOverrideHeatmap", value: function (A) { if (A.data && A.data.data) { if (A.data.data.length > 150) return { code: "error", message: "热力源个数不能超过150" }; var e = new IE(A, this.viewer), t = ((new Date).getTime() * (Math.random() + 1)).toString(36).slice(0, 8); return this.mapCollection[t] = e, e.show(), { code: "success", id: t, map: e } } return { code: "error", message: "参数错误" } } }]), A }(), xE = function (A, e) { Xo.call(this, A, e), this.pointIds = [] }; (xE.prototype = Object.create(Xo.prototype)).constructor = xE, xE.prototype.raycast = function () { var A = new M, e = new CA, t = new cA; return function (i, o) { var n = this, r = this.geometry, a = this.matrixWorld, s = this.size, l = i.camera || i._camera, c = i.viewportSize.height, h = this.pointIds; function d(e, t) { var i = e.clone(); return i.applyMatrix4(a), i.project(l), i.y += t / c, i.unproject(l), i.applyMatrix4(A), i } A.getInverse(a), null === r.boundingSphere && r.computeBoundingSphere(), t.copy(r.boundingSphere); var p = t.center, g = d(p, s), u = g.distanceToSquared(p); if (t.radius += u, t.center.copy(g), t.applyMatrix4(a), !1 !== i.ray.intersectsSphere(t)) { e.copy(i.ray).applyMatrix4(A); var f = new y, m = s; if (r.isBufferGeometry) { var C = r.index, v = r.attributes, I = v.position.array, E = !1, B = null; if (v.attrSize && (E = !0, B = v.attrSize.array), null !== C) for (var x = C.array, S = 0, w = x.length; w > S; S += 1) { var M = x[S]; f.fromArray(I, 3 * M), E && (m = B[M]), F(f, m, M) } else { S = 0; for (var b = I.length / 3; b > S; S += 1) f.fromArray(I, 3 * S), E && (m = B[S]), F(f, m, S) } } else { var U = r.vertices; for (S = 0, b = U.length; b > S; S += 1) F(U[S], m, S) } } function F(A, t, r) { var s = d(A, t), l = s.distanceToSquared(A), c = e.distanceSqToPoint(s); if (l > c) { var p = e.closestPointToPoint(s); p.applyMatrix4(a); var g = i.ray.origin.distanceTo(p); if (i.near > g || g > i.far) return; o.push({ id: h[r], distance: g, distanceToRay: Math.sqrt(c), point: p.clone(), index: r, face: null, object: n }) } } } }(), xE.prototype.setAttributeSize = function (A, e) { var t = this.geometry.attributes; t.attrSize && (t.attrSize.array[A] = e, t.attrSize.needsUpdate = !0) }, xE.prototype.getAttributeSize = function (A) { var e = this.geometry.attributes, t = this.size; return e.attrSize && (t = e.attrSize.array[A]), t }; var SE = ["attribute vec3 customColor;", "attribute float customOpacity;", "attribute float customSize;", "attribute float customAngle;", "attribute float customVisible;", "varying vec4 vColor;", "varying float vAngle;", "void main()", "{", "if ( customVisible > 0.5 )", "vColor = vec4( customColor, customOpacity );", "else", "vColor = vec4(0.0, 0.0, 0.0, 0.0);", "vAngle = customAngle;", "vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );", "gl_PointSize = customSize * ( 3000.0 / length( mvPosition.xyz ) );", "gl_Position = projectionMatrix * mvPosition;", "}"].join("\n"), wE = ["uniform sampler2D texture;", "varying vec4 vColor;", "varying float vAngle;", "void main()", "{", "gl_FragColor = vColor;", "float c = cos(vAngle);", "float s = sin(vAngle);", "vec2 rotatedUV = vec2(c * (gl_PointCoord.x - 0.5) + s * (gl_PointCoord.y - 0.5) + 0.5,", "c * (gl_PointCoord.y - 0.5) - s * (gl_PointCoord.x - 0.5) + 0.5);", "vec4 rotatedTexture = texture2D( texture, rotatedUV );", "gl_FragColor = gl_FragColor * rotatedTexture;", "}"].join("\n"); function ME(A, e) { this.times = A || [], this.values = e || [] } function bE() { this.position = new y, this.velocity = new y, this.acceleration = new y, this.angle = 0, this.angleVelocity = 0, this.angleAcceleration = 0, this.size = 16, this.color = new LA, this.opacity = 1, this.age = 0, this.alive = 0 } function UE() { this.positionStyle = 1, this.positionBase = new y, this.positionSpread = new y, this.positionRadius = 0, this.velocityStyle = 1, this.velocityBase = new y, this.velocitySpread = new y, this.speedBase = 0, this.speedSpread = 0, this.accelerationBase = new y, this.accelerationSpread = new y, this.angleBase = 0, this.angleSpread = 0, this.angleVelocityBase = 0, this.angleVelocitySpread = 0, this.angleAccelerationBase = 0, this.angleAccelerationSpread = 0, this.sizeBase = 0, this.sizeSpread = 0, this.sizeTween = new ME, this.colorBase = new y(0, 1, .5), this.colorSpread = new y(0, 0, 0), this.colorTween = new ME, this.opacityBase = 1, this.opacitySpread = 0, this.opacityTween = new ME, this.blendStyle = 1, this.particleArray = [], this.particlesPerSecond = 100, this.particleDeathAge = 1, this.emitterAge = 0, this.emitterAlive = !0, this.emitterDeathAge = 60, this.particleCount = this.particlesPerSecond * Math.min(this.particleDeathAge, this.emitterDeathAge) } ME.prototype.lerp = function (A) { for (var e = 0, t = this.times.length; t > e && A > this.times[e];) e += 1; if (0 === e) return this.values[0]; if (e === t) return this.values[t - 1]; var i = (A - this.times[e - 1]) / (this.times[e] - this.times[e - 1]); return this.values[0] instanceof y ? this.values[e - 1].clone().lerp(this.values[e], i) : this.values[e - 1] + i * (this.values[e] - this.values[e - 1]) }, bE.prototype.update = function (A) { if (this.position.add(this.velocity.clone().multiplyScalar(A)), this.velocity.add(this.acceleration.clone().multiplyScalar(A)), this.angle += .01745329251 * this.angleVelocity * A, this.angleVelocity += .01745329251 * this.angleAcceleration * A, this.age += A, this.sizeTween.times.length > 0 && (this.size = this.sizeTween.lerp(this.age)), this.colorTween.times.length > 0) { var e = this.colorTween.lerp(this.age); this.color = (new LA).setHSL(e.x, e.y, e.z) } this.opacityTween.times.length > 0 && (this.opacity = this.opacityTween.lerp(this.age)) }, UE.prototype.setValues = function (A) { if (void 0 !== A) { for (var e in this.sizeTween = new ME, this.colorTween = new ME, this.opacityTween = new ME, A) this[e] = A[e]; this.particleArray = [], this.emitterAlive = !0, this.particleCount = this.particlesPerSecond * Math.min(this.particleDeathAge, this.emitterDeathAge), this.particleGeometry = new he, this.particleMaterial = new Pe({ uniforms: { texture: { value: this.particleTexture } }, vertexShader: SE, fragmentShader: wE, transparent: !0, blending: 1, depthWrite: !1 }), this.particleMesh = new xE } }, UE.prototype.randomValue = function (A, e) { return A + e * (Math.random() - .5) }, UE.prototype.randomVector3 = function (A, e) { var t = new y(Math.random() - .5, Math.random() - .5, Math.random() - .5); return (new y).addVectors(A, t.multiplyVectors(e, t)) }, UE.prototype.updateVector3 = function (A, e, t) { var i = new y(Math.random() - .5, Math.random() - .5, Math.random() - .5); A.set(0, 0, 0), A.addVectors(e, i.multiplyVectors(t, i)) }, UE.prototype.createParticle = function () { var A = new bE; if (1 === this.positionStyle && (A.position = this.randomVector3(this.positionBase, this.positionSpread)), 2 === this.positionStyle) { var e = 2 * Math.random() - 1, t = 6.2832 * Math.random(), i = Math.sqrt(1 - e * e), o = new y(i * Math.cos(t), i * Math.sin(t), e); A.position = (new y).addVectors(this.positionBase, o.multiplyScalar(this.positionRadius)) } if (1 === this.velocityStyle && (A.velocity = this.randomVector3(this.velocityBase, this.velocitySpread)), 2 === this.velocityStyle) { var n = (new y).subVectors(A.position, this.positionBase), r = this.randomValue(this.speedBase, this.speedSpread); A.velocity = n.normalize().multiplyScalar(r) } A.acceleration = this.randomVector3(this.accelerationBase, this.accelerationSpread), A.angle = this.randomValue(this.angleBase, this.angleSpread), A.angleVelocity = this.randomValue(this.angleVelocityBase, this.angleVelocitySpread), A.angleAcceleration = this.randomValue(this.angleAccelerationBase, this.angleAccelerationSpread), A.size = this.randomValue(this.sizeBase, this.sizeSpread); var a = this.randomVector3(this.colorBase, this.colorSpread); return A.color = (new LA).setHSL(a.x, a.y, a.z), A.opacity = this.randomValue(this.opacityBase, this.opacitySpread), A.age = 0, A.alive = 0, A.sizeTween = this.sizeTween, A.colorTween = this.colorTween, A.opacityTween = this.opacityTween, A }, UE.prototype.updateParticle = function (A) { if (1 === this.positionStyle && this.updateVector3(A.position, this.positionBase, this.positionSpread), 2 === this.positionStyle) { var e = 2 * Math.random() - 1, t = 6.2832 * Math.random(), i = Math.sqrt(1 - e * e), o = new y(i * Math.cos(t), i * Math.sin(t), e); A.position = (new y).addVectors(this.positionBase, o.multiplyScalar(this.positionRadius)) } if (1 === this.velocityStyle && this.updateVector3(A.velocity, this.velocityBase, this.velocitySpread), 2 === this.velocityStyle) { var n = (new y).subVectors(A.position, this.positionBase), r = this.randomValue(this.speedBase, this.speedSpread); A.velocity = n.normalize().multiplyScalar(r) } this.updateVector3(A.acceleration, this.accelerationBase, this.accelerationSpread), A.angle = this.randomValue(this.angleBase, this.angleSpread), A.angleVelocity = this.randomValue(this.angleVelocityBase, this.angleVelocitySpread), A.angleAcceleration = this.randomValue(this.angleAccelerationBase, this.angleAccelerationSpread), A.size = this.randomValue(this.sizeBase, this.sizeSpread); var a = this.randomVector3(this.colorBase, this.colorSpread); A.color = A.color.setHSL(a.x, a.y, a.z), A.opacity = this.randomValue(this.opacityBase, this.opacitySpread), A.age = 0, A.alive = 0 }, UE.prototype.initialize = function () { this.sortArray = [], this.positions = new Float32Array(3 * this.particleCount), this.customVisible = new Float32Array(this.particleCount), this.customSize = new Float32Array(this.particleCount), this.customColor = new Float32Array(3 * this.particleCount), this.customOpacity = new Float32Array(this.particleCount), this.maxSize = 200; for (var A = 0; this.particleCount > A; A += 1) this.particleArray[A] = this.createParticle(), this.positions[3 * A] = this.particleArray[A].position.x, this.positions[3 * A + 1] = this.particleArray[A].position.y, this.positions[3 * A + 2] = this.particleArray[A].position.z, this.customVisible[A] = this.particleArray[A].alive, this.customColor[3 * A] = this.particleArray[A].color.r, this.customColor[3 * A + 1] = this.particleArray[A].color.g, this.customColor[3 * A + 2] = this.particleArray[A].color.b, this.customOpacity[A] = this.particleArray[A].opacity, this.customSize[A] = this.particleArray[A].size, this.maxSize = this.maxSize > this.customSize[A] ? this.maxSize : this.customSize[A]; this.particleMaterial.blending = this.blendStyle, this.particleGeometry.setAttribute("position", new YA(this.positions, 3)), this.particleGeometry.setAttribute("customColor", new YA(this.customColor, 3)), this.particleGeometry.setAttribute("customVisible", new YA(this.customVisible, 1)), this.particleGeometry.setAttribute("customSize", new YA(this.customSize, 1)), this.particleGeometry.setAttribute("customOpacity", new YA(this.customOpacity, 1)), this.particleMesh = new xE(this.particleGeometry, this.particleMaterial), this.particleMesh.dynamic = !0, this.particleMesh.size = this.maxSize, this.particleMesh.renderOrder = -1 }, UE.prototype.update = function (A) { A = void 0 === A ? .015 : A; for (var e = [], t = 0; this.particleCount > t; t += 1) this.particleArray[t].alive && (this.particleArray[t].update(A), this.particleArray[t].age > this.particleDeathAge && (this.particleArray[t].alive = 0, e.push(t)), this.customVisible[t] = this.particleArray[t].alive, this.customOpacity[t] = this.particleArray[t].opacity, this.customSize[t] = this.particleArray[t].size, this.customColor[3 * t] = this.particleArray[t].color.r, this.customColor[3 * t + 1] = this.particleArray[t].color.g, this.customColor[3 * t + 2] = this.particleArray[t].color.b, this.positions[3 * t] = this.particleArray[t].position.x, this.positions[3 * t + 1] = this.particleArray[t].position.y, this.positions[3 * t + 2] = this.particleArray[t].position.z, this.maxSize = this.maxSize > this.customSize[t] ? this.maxSize : this.customSize[t]); if (this.particleGeometry.getAttribute("customVisible").needsUpdate = !0, this.particleGeometry.getAttribute("customOpacity").needsUpdate = !0, this.particleGeometry.getAttribute("customSize").needsUpdate = !0, this.particleGeometry.getAttribute("customColor").needsUpdate = !0, this.particleGeometry.getAttribute("position").needsUpdate = !0, this.emitterAlive) { var i = Math.round(this.particlesPerSecond * (this.emitterAge + 0)), o = Math.round(this.particlesPerSecond * (this.emitterAge + A)); o > this.particleCount && (o = this.particleCount); for (t = i; o > t; t += 1) this.particleArray[t].alive = 1; for (var n = 0; e.length > n; n += 1) { this.updateParticle(this.particleArray[t = e[n]]), this.particleArray[t].alive = 1, this.positions[3 * t] = this.particleArray[t].position.x, this.positions[3 * t + 1] = this.particleArray[t].position.y, this.positions[3 * t + 2] = this.particleArray[t].position.z } this.emitterAge += A } }, UE.prototype.setScale = function (A) { for (var e = 0, t = this.sizeTween.values.length; t > e; e += 1) this.sizeTween.values[e] = this.sizeTween.values[e] * A; this.maxSize *= A }, UE.prototype.initializeSizetween = function (A) { for (var e = 0, t = this.sizeTween.values.length; t > e; e += 1) this.sizeTween.values[e] = this.sizeTween.values[e] * A; for (e = 0; this.particleCount > e; e += 1) this.particleArray[e].size *= A, this.customSize[e] = this.particleArray[e].size, this.maxSize = this.maxSize > this.customSize[e] ? this.maxSize : this.customSize[e]; this.particleGeometry.getAttribute("customSize").needsUpdate = !0 }, UE.prototype.destroy = function () {}; var FE = function () { return Xi.call(this), this.firePosition = { x: 0, y: 0, z: 0 }, this.position.set(this.firePosition.x, this.firePosition.y, this.firePosition.z), this.fireScale = 1, this.type = "fire", this.disPickable = !0, this.autoAnimation = !0, this._loadTexture(), this._initialize(), this }; (FE.prototype = Object.create(Xi.prototype)).constructor = Xi.prototype, FE.prototype._initialize = function () { this.fire = new UE, this.fire.setValues({ positionStyle: 1, positionBase: new y(0, 0, 600), positionSpread: new y(1500, 1500, 600), velocityStyle: 1, velocityBase: new y(0, 0, 4600), velocitySpread: new y(1e3, 1e3, 4600), accelerationBase: new y(0, 0, 2600), particleTexture: this.fireParticle, sizeTween: new ME([0, .1], [32, 200]), opacityTween: new ME([.7, 1], [.8, 0]), colorBase: new y(.04, 1, .4), blendStyle: 2, particlesPerSecond: 80, particleDeathAge: 1.5 }), this.fire.initialize(), this.smoke = new UE, this.smoke.setValues({ positionStyle: 1, positionBase: new y(0, 0, 2600), positionSpread: new y(1500, 1500, 600), velocityStyle: 1, velocityBase: new y(0, 0, 3600), velocitySpread: new y(1800, 1800, 1100), accelerationBase: new y(0, 0, 2600), particleTexture: this.smokeParticle, sizeTween: new ME([0, 1], [32, 200]), opacityTween: new ME([.5, 1, 1.7], [0, .3, 0]), colorTween: new ME([.4, 1], [new y(0, 0, 0), new y(0, 0, .2)]), blendStyle: 1, particlesPerSecond: 40, particleDeathAge: 2 }), this.smoke.initialize(), this.add(this.fire.particleMesh), this.add(this.smoke.particleMesh) }, FE.prototype._initializeSizetween = function (A) { this.fire.initializeSizetween(A), this.smoke.initializeSizetween(A) }, FE.prototype.update = function () { this.fire.update(), this.smoke.update() }, FE.prototype.getPosition = function () { return this.firePosition }, FE.prototype.setPosition = function (A) { if (A) if ("number" == typeof A.x) if ("number" == typeof A.y) if ("number" == typeof A.z) { if (this.firePosition = A, this.position.set(this.firePosition.x, this.firePosition.y, this.firePosition.z), this.updateMatrixWorld(), this.originBox) { var e = this.originBox.clone(); this.box = e.applyMatrix4(this.matrix), this.levelName = null } } else Bh.error("缺少参数 position.z"); else Bh.error("缺少参数 position.y"); else Bh.error("缺少参数 position.x"); else Bh.error("缺少参数 position") }, FE.prototype.getScale = function () { return this.fireScale }, FE.prototype.setScale = function (A) { this.scale.set(A, A, A), this.updateMatrixWorld(), this.fire.setScale(A / this.fireScale), this.smoke.setScale(A / this.fireScale), this.fireScale = A }, FE.prototype._loadTexture = function () { var A = new Aa; this.fireParticle = A.load("data:image/png;base64,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"), this.smokeParticle = A.load("data:image/png;base64,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") }; var KE = function () { JC.call(this), this.type = "LineGeometry" }; KE.prototype = Object.assign(Object.create(JC.prototype), { constructor: KE, isLineGeometry: !0, setPositions: function (A) { for (var e = A.length - 3, t = new Float32Array(2 * e), i = 0; e > i; i += 3) t[2 * i] = A[i], t[2 * i + 1] = A[i + 1], t[2 * i + 2] = A[i + 2], t[2 * i + 3] = A[i + 3], t[2 * i + 4] = A[i + 4], t[2 * i + 5] = A[i + 5]; return JC.prototype.setPositions.call(this, t), this }, setColors: function (A) { for (var e = A.length - 3, t = new Float32Array(2 * e), i = 0; e > i; i += 3) t[2 * i] = A[i], t[2 * i + 1] = A[i + 1], t[2 * i + 2] = A[i + 2], t[2 * i + 3] = A[i + 3], t[2 * i + 4] = A[i + 4], t[2 * i + 5] = A[i + 5]; return JC.prototype.setColors.call(this, t), this }, fromLine: function (A) { var e = A.geometry; return e.isGeometry ? this.setPositions(e.vertices) : e.isBufferGeometry && this.setPositions(e.position.array), this }, copy: function () { return this } }); var QE = function (A, e) { XC.call(this), this.type = "Line2", this.geometry = void 0 !== A ? A : new KE, this.material = void 0 !== e ? e : new YC({ color: 16777215 * Math.random() }) }; QE.prototype = Object.assign(Object.create(XC.prototype), { constructor: QE, isLine2: !0, copy: function () { return this } }); function RE(A) { return "symbol" == typeof A || Zv(A) && "[object Symbol]" == Sv(A) } var TE = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, kE = /^\w*$/; function DE(A, e) { if ("function" != typeof A || null != e && "function" != typeof e) throw new TypeError("Expected a function"); var t = function () { var i = arguments, o = e ? e.apply(this, i) : i[0], n = t.cache; if (n.has(o)) return n.get(o); var r = A.apply(this, i); return t.cache = n.set(o, r) || n, r }; return t.cache = new(DE.Cache || qv), t } DE.Cache = qv; var LE = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, NE = /\\(\\)?/g, OE = function (A) { var e = DE(A, (function (A) { return 500 === t.size && t.clear(), A })), t = e.cache; return e }((function (A) { var e = []; return 46 === A.charCodeAt(0) && e.push(""), A.replace(LE, (function (A, t, i, o) { e.push(i ? o.replace(NE, "$1") : t || A) })), e })); var VE = Cv ? Cv.prototype : void 0, GE = VE ? VE.toString : void 0; function PE(A) { if ("string" == typeof A) return A; if (tI(A)) return function (A, e) { for (var t = -1, i = null == A ? 0 : A.length, o = Array(i); ++t < i;) o[t] = e(A[t], t, A); return o }(A, PE) + ""; if (RE(A)) return GE ? GE.call(A) : ""; var e = A + ""; return "0" == e && 1 / A == -1 / 0 ? "-0" : e } function qE(A, e) { return tI(A) ? A : function (A, e) { if (tI(A)) return !1; var t = typeof A; return !("number" != t && "symbol" != t && "boolean" != t && null != A && !RE(A)) || (kE.test(A) || !TE.test(A) || null != e && A in Object(e)) }(A, e) ? [A] : OE(function (A) { return null == A ? "" : PE(A) }(A)) } function jE(A) { if ("string" == typeof A || RE(A)) return A; var e = A + ""; return "0" == e && 1 / A == -1 / 0 ? "-0" : e } function HE(A, e, t) { var i = null == A ? void 0 : function (A, e) { for (var t = 0, i = (e = qE(e, A)).length; null != A && i > t;) A = A[jE(e[t++])]; return t && t == i ? A : void 0 }(A, e); return void 0 === i ? t : i } var YE = { height: 0, speed: 1e3, frameTime: 14 }, WE = new hp, JE = function () { function A(e) { cc(this, A), this.roadnet = {}, this.shortestPathLineMap = {}, this.roadNetLineMap = {}, this.roadNetPointMap = {}, this.roadNetInfoMap = {}, this.roadNetEdgeMap = {}, this.roadNetPointMap = {}, this.mapRoadNetListByModelKey = {}, this.mapModelKeyByRoadNetKey = {}, this.modelInfo = {}, this.viewer3D = e } return dc(A, [{ key: "_getRoadNetListByModelKey", value: function (A) { var e = this, t = this; return new Promise((function (i, o) { (function (A) { var e = A.viewer3D.getViewerImpl().getModel(A.modelKey), t = HE(e, ["loader", "url", "serverUrl"]) || HE(A, ["viewer3D", "host"], ""), i = e.projectKey, o = e.accessToken, n = ""; e.share && (n = "&share=" + e.share); var r = { url: "".concat(t, "/").concat(A.apiVersion || "api", "/").concat(i, "/routes/list?modelKey=").concat(A.modelKey).concat(n) }; return o && (r.headers = { Authorization: o }), _d(r) })({ viewer3D: e.viewer3D, modelKey: A }).then((function (e) { var n, r = t.viewer3D.getViewerImpl().getModel(A); if (!r) return Bh.error(A + "模型不存在"), void o(A + "模型不存在"); if (t.modelInfo[A] = r, "SUCCESS" === (n = "string" == typeof e ? JSON.parse(e) : e).code) { var a = t.mapRoadNetListByModelKey; a[A] = {}; for (var s = 0, l = n.data.length; l > s; s += 1) { var c = n.data[s], h = c.key; a[A][h] = c, t.roadNetInfoMap[h] = c, t.mapModelKeyByRoadNetKey[h] = A } i() } else o(n.message) })).catch((function () { Bh.error("获取模型路网列表失败"), o("获取模型路网列表失败") })) })) } }, { key: "_getRoadNetDataByRouteKey", value: function (A, e, t) { var i = this, o = this, n = [], r = this.mapModelKeyByRoadNetKey[A]; if (r) return n.push(new Promise((function (e, t) { (function (A) { var e = A.viewer3D.getViewerImpl().getModel(A.modelKey), t = HE(e, ["loader", "url", "serverUrl"]) || HE(A, ["viewer3D", "host"], ""), i = e.projectKey, o = e.accessToken, n = ""; e.share && (n = "&share=" + e.share); var r = { url: "".concat(t, "/").concat(A.apiVersion || "api", "/").concat(i, "/routes/points?routeKey=").concat(A.routeKey).concat(n) }; return o && (r.headers = { Authorization: o }), _d(r) })({ viewer3D: i.viewer3D, routeKey: A, modelKey: r }).then((function (i) { var n; if ("SUCCESS" === (n = "string" == typeof i ? JSON.parse(i) : i).code) { var r = o.roadNetPointMap; r[A] = {}; for (var a = 0, s = n.data.length; s > a; a += 1) { var l = n.data[a]; r[A][l.key] = l } e() } else t(n.message) })).catch((function () { Bh.error("获取模型路网列表失败"), t("获取模型路网列表失败") })) }))), n.push(new Promise((function (e, t) { (function (A) { var e = A.viewer3D.getViewerImpl().getModel(A.modelKey), t = HE(e, ["loader", "url", "serverUrl"]) || HE(A, ["viewer3D", "host"], ""), i = e.projectKey, o = e.accessToken, n = ""; e.share && (n = "&share=" + e.share); var r = { url: "".concat(t, "/").concat(A.apiVersion || "api", "/").concat(i, "/routes/edges?routeKey=").concat(A.routeKey).concat(n) }; return o && (r.headers = { Authorization: o }), _d(r) })({ viewer3D: i.viewer3D, routeKey: A, modelKey: r }).then((function (i) { var n; "SUCCESS" === (n = "string" == typeof i ? JSON.parse(i) : i).code ? (o.roadNetEdgeMap[A] = n.data, e()) : t(n.message) })).catch((function () { Bh.error("获取模型路网列表失败"), t("获取模型路网列表失败") })) }))), Promise.all(n); Bh.error("模型路网未初始化") } }, { key: "initRoadNetByModelKey", value: function (A) { var e = this; return new Promise((function (t, i) { e._getRoadNetListByModelKey(A).then(t).catch(i) })) } }, { key: "getRoadNetInfoListByModelKey", value: function (A) { return this.mapRoadNetListByModelKey[A] } }, { key: "addRoadNetByKey", value: function (A, e) { var t = this, i = this, o = e.color, n = e.width, r = void 0 === n ? 1 : n, a = e.block, s = void 0 === a || a; return new Promise((function (e, n) { return o instanceof Xh ? "number" != typeof r ? (Bh.error("width 参数非法"), void n("width 参数非法")) : void(i.roadNetLineMap[A] ? e() : t._getRoadNetDataByRouteKey(A).then((function () { for (var t = i.roadNetEdgeMap[A], a = i.roadNetPointMap[A], l = [], c = 0, h = t.length; h > c; c += 1) { var d = t[c], p = d._from.split("/")[1], g = d._to.split("/")[1], u = a[p].xyz; u || (Bh.error("点", p, "不存在"), n("点" + p + "不存在")), l.push.apply(l, yc(u)); var f = a[g].xyz; f || (Bh.error("点", g, "不存在"), n("点" + g + "不存在")), l.push.apply(l, yc(f)) } var m = new JC; m.setPositions(l); var C = new YC({ color: o.getHex(), linewidth: r / 1e3 }); s || (C.depthTest = !1, C.transparent = !0); var y = new XC(m, C); y.matrixAutoUpdate = !1; var v = i.mapModelKeyByRoadNetKey[A]; if (!v) return Bh.error("模型路网未初始化"), void n("模型路网未初始化"); var I = i.viewer3D.getModelMatrix(v); y.matrix.copy(I), i.viewer3D.getScene().add(y), y.updateMatrixWorld(!0), i.roadNetLineMap[A] = y, i.viewer3D.render(), e() })).catch((function (A) { n(A) }))) : (Bh.error("color 参数非法"), void n("color 参数非法")) })) } }, { key: "removeRoadNetByKey", value: function (A) { this.roadNetLineMap[A] ? (this.viewer3D.getScene().remove(this.roadNetLineMap[A]), delete this.roadNetLineMap[A], this.viewer3D.render()) : Bh.warn("路网", A, "不存在") } }, { key: "showRoadNetByKey", value: function (A) { this.roadNetLineMap[A] ? (this.roadNetLineMap[A].visible = !0, this.viewer3D.render()) : Bh.warn("路网", A, "不存在") } }, { key: "hideRoadNetByKey", value: function (A) { this.roadNetLineMap[A] ? (this.roadNetLineMap[A].visible = !1, this.viewer3D.render()) : Bh.warn("路网", A, "不存在") } }, { key: "setRoadNetColorByKey", value: function (A, e) { if (this.roadNetLineMap[A]) { if (!(e instanceof Xh)) return void Bh.warn("color 参数非法"); this.roadNetLineMap[A].material.color = e.getHex(), this.viewer3D.render() } else Bh.warn("路网", A, "不存在") } }, { key: "setRoadNetBlockByKey", value: function (A, e) { this.roadNetLineMap[A] ? (e ? (this.roadNetLineMap[A].material.depthTest = !0, this.roadNetLineMap[A].material.transparent = !1) : (this.roadNetLineMap[A].material.depthTest = !1, this.roadNetLineMap[A].material.transparent = !0), this.viewer3D.render()) : Bh.warn("路网", A, "不存在") } }, { key: "setRoadNetLineWidthByKey", value: function (A, e) { this.roadNetLineMap[A] ? (this.roadNetLineMap[A].material.linewidth = e / 1e3, this.viewer3D.render()) : Bh.warn("路网", A, "不存在") } }, { key: "update", value: function () { for (var A in this.roadNetLineMap) if (this.roadNetLineMap.hasOwnProperty(A)) { var e = this.roadNetLineMap[A], t = this.viewer3D.getModelMatrix(this.mapModelKeyByRoadNetKey[A]); e.matrix.copy(t), e.updateMatrixWorld(!0) } for (var i in this.shortestPathLineMap) if (this.shortestPathLineMap.hasOwnProperty(i)) { var o = this.shortestPathLineMap[i], n = this.viewer3D.getModelMatrix(o.userData.modelKey); o.matrix.copy(n), o.updateMatrixWorld(!0) } this.viewer3D.render() } }, { key: "getShortestPath", value: function (A, e, t, i) { var o = this, n = this; return new Promise((function (i, r) { o.roadNetInfoMap[A] || r({ code: "error", detail: "路网".concat(A, "未初始化"), start: e, end: t }); var a = o.mapModelKeyByRoadNetKey[A]; if (!a) return Bh.error("模型路网未初始化"), void r("模型路网未初始化"); (function (A) { var e = A.viewer3D.getViewerImpl().getModel(A.modelKey), t = HE(e, ["loader", "url", "serverUrl"]) || HE(A, ["viewer3D", "host"], ""), i = e.projectKey, o = e.accessToken, n = ""; e.share && (n = "&share=" + e.share); var r = { url: "".concat(t, "/").concat(A.apiVersion || "api", "/").concat(i, "/routes/shortestPath?routeKey=").concat(A.routeKey, "&start=").concat(A.start.toString(), "&end=").concat(A.end.toString()).concat(n) }; return o && (r.headers = { Authorization: o }), _d(r) })({ modelKey: a, viewer3D: n.viewer3D, routeKey: A, start: e, end: t }).then((function (o) { var n; "SUCCESS" === (n = "string" == typeof o ? JSON.parse(o) : o).code && i({ code: "success", data: { routeKey: A, points: n.data }, start: e, end: t }) })).catch((function (A) { r({ code: "error", detail: A, start: e, end: t }) })) })) } }, { key: "addShortestPathByPoints", value: function (A, e) { var t = this, i = e.color, o = e.width, n = void 0 === o ? 1 : o, r = e.block, a = void 0 === r || r; return new Promise((function (e, o) { if (!A.routeKey) return Bh.error("缺少参数routeKey"), void o("缺少参数routeKey"); if (!A.points) return Bh.error("缺少参数points"), void o("缺少参数points"); if (!(i instanceof Xh)) return Bh.error("color 参数非法"), void o("color 参数非法"); if ("number" != typeof n) return Bh.error("width 参数非法"), void o("width 参数非法"); A.key || (A.key = uh.createUUID()); for (var r = [], s = 0, l = A.points.length; l > s; s += 1) r.push.apply(r, yc(A.points[s])); var c = new KE; c.setPositions(r); var h = new YC({ color: i.getHex(), linewidth: n / 1e3 }); a || (h.depthTest = !1, h.transparent = !0); var d = new QE(c, h); d.matrixAutoUpdate = !1; var p = t.mapModelKeyByRoadNetKey[A.routeKey]; if (!p) return Bh.error("模型路网未初始化"), void o("模型路网未初始化"); var g = t.viewer3D.getModelMatrix(p); d.matrix.copy(g), d.userData.modelKey = p, d.userData.routeKey = A.routeKey, t.viewer3D.getScene().add(d), d.updateMatrixWorld(!0), t.shortestPathLineMap[A.key] = d, t.viewer3D.render(), e(A) })) } }, { key: "showShortestPathByKey", value: function (A) { this.shortestPathLineMap[A] ? (this.shortestPathLineMap[A].visible = !0, this.viewer3D.render()) : Bh.warn("最短路径", A, "不存在") } }, { key: "hideShortestPathByKey", value: function (A) { this.shortestPathLineMap[A] ? (this.shortestPathLineMap[A].visible = !1, this.viewer3D.render()) : Bh.warn("最短路径", A, "不存在") } }, { key: "removeShortestPathByKey", value: function (A) { this.shortestPathLineMap[A] ? (this.viewer3D.getScene().remove(this.shortestPathLineMap[A]), delete this.shortestPathLineMap[A], this.viewer3D.render()) : Bh.warn("最短路径", A, "不存在") } }, { key: "setShortestPathColorByKey", value: function (A, e) { if (this.shortestPathLineMap[A]) { if (!(e instanceof Xh)) return void Bh.warn("color 参数非法"); this.shortestPathLineMap[A].material.color = e.getHex(), this.viewer3D.render() } else Bh.warn("最短路径", A, "不存在") } }, { key: "setShortestPathBlockByKey", value: function (A, e) { this.shortestPathLineMap[A] ? (e ? (this.shortestPathLineMap[A].material.depthTest = !0, this.shortestPathLineMap[A].material.transparent = !1) : (this.shortestPathLineMap[A].material.depthTest = !1, this.shortestPathLineMap[A].material.transparent = !0), this.viewer3D.render()) : Bh.warn("最短路径", A, "不存在") } }, { key: "setShortestPathLineWidthByKey", value: function (A, e) { this.shortestPathLineMap[A] ? (this.shortestPathLineMap[A].material.linewidth = e / 1e3, this.viewer3D.render()) : Bh.warn("最短路径", A, "不存在") } }, { key: "roamByShortestPathData", value: function (A, e) { var t = this, i = uh.extend({}, YE, e); if (A.routeKey) if (A.points) if (i.speed) { var o = t.viewer3D.getModelMatrix(t.mapModelKeyByRoadNetKey[A.routeKey]); if (o) { var n = this.viewer3D.getViewerImpl().camera; ! function A(e, r) { if (e.length - 1 > r) { var a, s = new y(e[r][0], e[r][1], e[r][2] + i.height).applyMatrix4(o), l = new y(e[r + 1][0], e[r + 1][1], e[r + 1][2] + i.height).applyMatrix4(o), c = new y(e[r + 1][0], e[r + 1][1], e[r + 1][2] + i.height).applyMatrix4(o); if (r > e.length - 3 || (a = new y(e[r + 2][0], e[r + 2][1], e[r + 2][2] + i.height).applyMatrix4(o)), r === e.length - 2) { var h = new y(e[r + 1][0], e[r + 1][1], e[r + 1][2] + i.height).sub(new y(e[r][0], e[r][1], e[r][2] + i.height)).setLength(.1); a = new y(e[r + 1][0], e[r + 1][1], e[r + 1][2] + i.height).add(h).applyMatrix4(o) } var d = s.distanceTo(c) / i.speed * 1e3; t.viewer3D.getViewerImpl().getControlManager().setInteractiveState(!1), WE.from({ animPosition: s, animTarget: l, animUp: n.up }).to({ animPosition: c, animTarget: a, animUp: n.up }, d).onUpdate((function (A) { var e = A.animPosition; n.lookAtEXForTargetPositionUp(A.animTarget, e, n.up), t.viewer3D.getViewerImpl().cameraControl.update(!0, !0), i.callbackProcess && i.callbackProcess(e) })).onComplete((function () { n.lookAtEXForTargetPositionUp(a, c, n.up), t.viewer3D.getViewerImpl().cameraControl.update(!0, !0), i.callbackProcess && i.callbackProcess(c), i.callbackFinish && i.callbackFinish(), t.viewer3D.getViewerImpl().getControlManager().setInteractiveState(!0), A(e, r += 1) })).start(i.frameTime, !0) } else i.callbackAllFinish && i.callbackAllFinish() }(A.points, 0) } else Bh.error("无法获取路径对应的模型矩阵") } else Bh.error("speed参数非法"); else Bh.error("缺少参数points"); else Bh.error("缺少参数routeKey") } }]), A }(), zE = { fontSize: 100, color: "#ff0000", opacity: 1, side: 2, transparent: !0 }, ZE = function () { function A() { cc(this, A) } return dc(A, [{ key: "createMesh", value: function (A, e) { var t = Object.assign({}, zE, e), i = A.generateShapes(t.text, t.fontSize), o = new jA(t), n = new Ue(new ar(i), o); return t.position && this.setPos(n, t.position), t.rotation && this.setRotation(n, t.rotation), t.matrix && this.setMat(n, t.matrix), n } }, { key: "setPos", value: function (A, e) { var t; (t = A.position).set.apply(t, yc(e)), A.updateMatrixWorld(!0) } }, { key: "setMat", value: function (A, e) { A.applyMatrix4(e), A.updateMatrixWorld(!0) } }, { key: "setRotation", value: function (A, e) { var t; (t = A.rotation).set.apply(t, yc(e)), A.updateMatrixWorld(!0) } }]), A }(), XE = function () { function A(e) { cc(this, A), this.fonts = {}, this.host = e.host } return dc(A, [{ key: "loadFont", value: function (A, e) { var t = this; return new Promise((function (i, o) { _d({ type: "POST", url: "".concat(t.host, "/api/fonts"), headers: { "Content-type": "application/json;charset=UTF-8" }, data: JSON.stringify({ font: A, text: e }), responseType: "json", success: function (e) { "success" === e.code.toLowerCase() ? (t.fonts[A] ? Object.assign(t.fonts[A].data.glyphs, e.data.glyphs) : (t.fonts[A] = {}, t.fonts[A].data = e.data), t.fonts[A].font = new za(t.fonts[A].data), i(t.fonts[A].font)) : o(e) }, error: function (A, e) { o(e) } }) })) } }, { key: "getFont", value: function (A, e) { var t = this; return new Promise((function (i, o) { if (t.fonts[A]) { for (var n = e.length, r = "", a = 0; n > a; a += 1) t.fonts[A].data.glyphs[e[a]] || (r += e[a]); r ? t.loadFont(A, r).then(i).catch(o) : i(t.fonts[A].font) } else t.loadFont(A, e).then(i).catch(o) })) } }]), A }(), _E = function () { function A(e) { cc(this, A), this.viewer = e.viewer.getViewerImpl(), this.meshes = {}, this.fontLib = new XE({ host: e.viewer.host }), this.text = new ZE, this.draggingId = "" } return dc(A, [{ key: "addText", value: function (A) { var e = this; return this.fontLib.getFont(A.fontName, A.text).then((function (t) { var i = e.text.createMesh(t, A), o = uh.createUUID(); return e.meshes[o] = i, e.viewer.getScene().add(i), e.viewer.render(), { code: "success", id: o } })).catch((function (A) { return { code: "error", err: A } })) } }, { key: "removeText", value: function (A) { if (this.draggingId !== A) { var e = this.meshes[A]; e && (this.viewer.getScene().remove(e), delete this.meshes[A], this.viewer.render()) } } }, { key: "setPosition", value: function (A, e) { if (this.draggingId !== A) { var t = this.meshes[A]; t && (this.text.setPos(t, e), this.viewer.render()) } } }, { key: "setMatrix", value: function (A, e) { if (this.draggingId !== A) { var t = this.meshes[A]; t && (this.text.setMat(t, e), this.viewer.render()) } } }, { key: "setRotation", value: function (A, e) { if (this.draggingId !== A) { var t = this.meshes[A]; t && (this.text.setRotation(t, e), this.viewer.render()) } } }, { key: "getTextIDs", value: function () { return Object.keys(this.meshes) } }, { key: "dragText", value: function (A) { if ("" === this.draggingId) { var e = this.meshes[A]; e && (this.viewer.translateComponentByKey(e), this.draggingId = A) } } }, { key: "saveDragText", value: function () { "" !== this.draggingId && (this.viewer.cancelTransformComponent(!1), this.draggingId = "") } }]), A }(), $E = function () { function A(e) { cc(this, A), this.curves = {}, this.viewer = e.viewer3D, this.modelKey = e.modelKey } return dc(A, [{ key: "getId", value: function (A) { return Bd(JSON.stringify(A)).slice(0, 8) } }, { key: "getCurve", value: function (A) { return this.curves[A] } }, { key: "_setCurve", value: function (A, e) { this.curves[A] = e } }, { key: "_rmCurve", value: function (A) { delete this.curves[A] } }, { key: "genTHREELine", value: function (A) { var e = A.num, t = void 0 === e ? 100 : e, i = A.debug, o = void 0 !== i && i, n = new la(A.points, A.closed, A.curveType, A.tension), r = this.getId(A), a = new De; a.vertices = n.getSpacedPoints(t); var s = new Go(a, new ko({ color: A.color || 16777215 * Math.random(), linewidth: 6.18, depthTest: !0, transparent: !1 })); o && (this.viewer.getViewerImpl().modelManager.getModel(this.modelKey).group.add(s), s.updateMatrixWorld(), this.viewer.render()); return this._setCurve(r, { curve: n, num: t, line: s }), r } }, { key: "rmCurve", value: function (A) { var e = this.getCurve(A).line; this.viewer.getViewerImpl().modelManager.getModel(this.modelKey).group.remove(e), e.updateMatrixWorld(), this.viewer.render(), this._rmCurve(A) } }]), A }(), AB = function () { function A(e) { cc(this, A), this.trackSet = {}, this.lineManager = new $E(e), this.viewer = e.viewer3D } return dc(A, [{ key: "_genLine", value: function (A) { return this.lineManager.genTHREELine(A) } }, { key: "addTrack", value: function (A) { var e = ((new Date).getTime() * (Math.random() + 1)).toString(36).slice(0, 8), t = this._genLine(A); return this.trackSet[e] = { componentKey: A.componentKey, lineId: [t] }, e } }, { key: "appendTrack", value: function (A) { var e = this.trackSet[A.trackId]; if (e) { var t = this._genLine(A); e.lineId.push(t) } } }, { key: "removeTrack", value: function (A) { var e = this, t = this.trackSet[A]; t && (t.lineId.forEach((function (A) { e.lineManager.rmCurve(A) })), delete this.trackSet[A]) } }, { key: "startMove", value: function (A) { var e = this, t = A.trackId, i = A.startDir, o = A.pointFn; return new Promise((function (A, n) { var r = e.trackSet[t]; if (r) { var a = r.lineId, s = r.componentKey, l = new M, c = a.length, h = e.lineManager.getCurve(a[0]).curve.getPoint(0), d = e.viewer.getBoxByComponentsKey(s), p = d.min, g = d.max, u = (new y).addVectors(p, g).divideScalar(2); l.elements[12] = h.x - u.x, l.elements[13] = h.y - u.y, l.elements[14] = h.z - u.z, e.viewer.componentApplyMatrix(s, l); var m = 0, C = new M, v = i.clone().normalize(), I = function i(n) { var r = e.lineManager.getCurve(a[Math.trunc(m)]).curve.getPoint(m - Math.trunc(m)), h = c > n ? e.lineManager.getCurve(a[Math.trunc(n)]).curve.getPoint(n - Math.trunc(n)) : e.lineManager.getCurve(a[c - 1]).curve.getPoint(1), d = new M; d.elements[12] = -r.x, d.elements[13] = -r.y, d.elements[14] = -r.z; var p = new f, g = new y(h.x - r.x, h.y - r.y, h.z - r.z).normalize(); p.setFromUnitVectors(v, g), v.applyQuaternion(p); var u = (new M).makeRotationFromQuaternion(p), I = new M; I.elements[12] = h.x, I.elements[13] = h.y, I.elements[14] = h.z, l.elements = C.elements, e.viewer.componentApplyMatrix(s, I.multiply(u).multiply(d)), m = n, c > n ? "function" == typeof o ? requestAnimationFrame((function () { i(o(t, n, h)) })) : requestAnimationFrame((function () { return i(parseFloat((n + .01).toFixed(2))) })) : A({ code: "success", trackId: t }) }; "function" == typeof o ? requestAnimationFrame((function () { I(o(t, 0, h)) })) : requestAnimationFrame((function () { return I(.01) })) } else n({ code: "error", message: "找不到指定轨迹" }) })) } }]), A }(), eB = function (A, e) { Ue.call(this, A); var t = this, i = void 0 !== (e = e || {}).textureWidth ? e.textureWidth : 512, o = void 0 !== e.textureHeight ? e.textureHeight : 512, n = void 0 !== e.clipBias ? e.clipBias : 0, r = void 0 !== e.alpha ? e.alpha : 1, s = void 0 !== e.time ? e.time : 0, l = void 0 !== e.waterNormals ? e.waterNormals : null, c = void 0 !== e.sunDirection ? e.sunDirection : new y(.70707, .70707, 0), h = new LA(void 0 !== e.sunColor ? e.sunColor : 16777215), d = new LA(void 0 !== e.waterColor ? e.waterColor : 8355711), u = void 0 !== e.eye ? e.eye : new y(0, 0, 0), f = void 0 !== e.distortionScale ? e.distortionScale : 20, m = void 0 !== e.side ? e.side : 0, C = void 0 !== e.fog && e.fog, v = new EA, I = new y, E = new y, B = new y, x = new M, S = new y(0, 0, -1), w = new p, b = new y, U = new y, F = new p, K = new M, Q = new je, R = new g(i, o, { minFilter: 1006, magFilter: 1006, format: 1022, stencilBuffer: !1 }); a.isPowerOfTwo(i) && a.isPowerOfTwo(o) || (R.texture.generateMipmaps = !1); var T = { uniforms: Ge.merge([Xe.fog, Xe.lights, { normalSampler: { value: null }, mirrorSampler: { value: null }, alpha: { value: 1 }, time: { value: 0 }, size: { value: 1 }, distortionScale: { value: 20 }, textureMatrix: { value: new M }, sunColor: { value: new LA(8355711) }, sunDirection: { value: new y(.70707, .70707, 0) }, eye: { value: new y }, waterColor: { value: new LA(5592405) } }]), vertexShader: ["uniform mat4 textureMatrix;", "uniform float time;", "varying vec4 mirrorCoord;", "varying vec4 worldPosition;", tt.fog_pars_vertex, tt.shadowmap_pars_vertex, "void main() {", " mirrorCoord = modelMatrix * vec4( position, 1.0 );", " worldPosition = mirrorCoord.xyzw;", " mirrorCoord = textureMatrix * mirrorCoord;", " vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );", " gl_Position = projectionMatrix * mvPosition;", tt.fog_vertex, tt.shadowmap_vertex, "}"].join("\n"), fragmentShader: ["uniform sampler2D mirrorSampler;", "uniform float alpha;", "uniform float time;", "uniform float size;", "uniform float distortionScale;", "uniform sampler2D normalSampler;", "uniform vec3 sunColor;", "uniform vec3 sunDirection;", "uniform vec3 eye;", "uniform vec3 waterColor;", "varying vec4 mirrorCoord;", "varying vec4 worldPosition;", "vec4 getNoise( vec2 uv ) {", " vec2 uv0 = ( uv / 103.0 ) + vec2(time / 17.0, time / 29.0);", " vec2 uv1 = uv / 107.0-vec2( time / -19.0, time / 31.0 );", " vec2 uv2 = uv / vec2( 8907.0, 9803.0 ) + vec2( time / 101.0, time / 97.0 );", " vec2 uv3 = uv / vec2( 1091.0, 1027.0 ) - vec2( time / 109.0, time / -113.0 );", " vec4 noise = texture2D( normalSampler, uv0 ) +", " texture2D( normalSampler, uv1 ) +", " texture2D( normalSampler, uv2 ) +", " texture2D( normalSampler, uv3 );", " return noise * 0.5 - 1.0;", "}", "void sunLight( const vec3 surfaceNormal, const vec3 eyeDirection, float shiny, float spec, float diffuse, inout vec3 diffuseColor, inout vec3 specularColor ) {", " vec3 reflection = normalize( reflect( -sunDirection, surfaceNormal ) );", " float direction = max( 0.0, dot( eyeDirection, reflection ) );", " specularColor += pow( direction, shiny ) * sunColor * spec;", " diffuseColor += max( dot( sunDirection, surfaceNormal ), 0.0 ) * sunColor * diffuse;", "}", tt.common, tt.packing, tt.bsdfs, tt.fog_pars_fragment, tt.lights_pars_begin, tt.shadowmap_pars_fragment, tt.shadowmask_pars_fragment, "void main() {", " vec4 noise = getNoise( worldPosition.xz * size );", " vec3 surfaceNormal = normalize( noise.xzy * vec3( 1.5, 1.0, 1.5 ) );", " vec3 diffuseLight = vec3(0.0);", " vec3 specularLight = vec3(0.0);", " vec3 worldToEye = eye-worldPosition.xyz;", " vec3 eyeDirection = normalize( worldToEye );", " sunLight( surfaceNormal, eyeDirection, 100.0, 2.0, 0.5, diffuseLight, specularLight );", " float distance = length(worldToEye);", " vec2 distortion = surfaceNormal.xz * ( 0.001 + 1.0 / distance ) * distortionScale;", " vec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) );", " float theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );", " float rf0 = 0.3;", " float reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 );", " vec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor;", " vec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), ( vec3( 0.1 ) + reflectionSample * 0.9 + reflectionSample * specularLight ), reflectance);", " vec3 outgoingLight = albedo;", " gl_FragColor = vec4( outgoingLight, alpha );", tt.tonemapping_fragment, tt.fog_fragment, "}"].join("\n") }, k = new Pe({ fragmentShader: T.fragmentShader, vertexShader: T.vertexShader, uniforms: Ge.clone(T.uniforms), transparent: 1 > r, lights: !0, side: m, fog: C }); k.uniforms.mirrorSampler.value = R.texture, k.uniforms.textureMatrix.value = K, k.uniforms.alpha.value = r, k.uniforms.time.value = s, k.uniforms.normalSampler.value = l, k.uniforms.sunColor.value = h, k.uniforms.waterColor.value = d, k.uniforms.sunDirection.value = c, k.uniforms.distortionScale.value = f, k.uniforms.eye.value = u, t.material = k, t.onBeforeRender = function (A, e, i) { if (E.setFromMatrixPosition(t.matrixWorld), B.setFromMatrixPosition(i.matrixWorld), x.extractRotation(t.matrixWorld), I.set(0, 0, 1), I.applyMatrix4(x), b.subVectors(E, B), 0 >= b.dot(I)) { b.reflect(I).negate(), b.add(E), x.extractRotation(i.matrixWorld), S.set(0, 0, -1), S.applyMatrix4(x), S.add(B), U.subVectors(E, S), U.reflect(I).negate(), U.add(E), Q.position.copy(b), Q.up.set(0, 1, 0), Q.up.applyMatrix4(x), Q.up.reflect(I), Q.lookAt(U), Q.far = i.far, Q.updateMatrixWorld(), Q.projectionMatrix.copy(i.projectionMatrix), K.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), K.multiply(Q.projectionMatrix), K.multiply(Q.matrixWorldInverse), v.setFromNormalAndCoplanarPoint(I, E), v.applyMatrix4(Q.matrixWorldInverse), w.set(v.normal.x, v.normal.y, v.normal.z, v.constant); var o = Q.projectionMatrix; F.x = (Math.sign(w.x) + o.elements[8]) / o.elements[0], F.y = (Math.sign(w.y) + o.elements[9]) / o.elements[5], F.z = -1, F.w = (1 + o.elements[10]) / o.elements[14], w.multiplyScalar(2 / w.dot(F)), o.elements[2] = w.x, o.elements[6] = w.y, o.elements[10] = w.z + 1 - n, o.elements[14] = w.w, u.setFromMatrixPosition(i.matrixWorld); var r = A.getRenderTarget(), a = A.xr.enabled, s = A.shadowMap.autoUpdate; t.visible = !1, A.xr.enabled = !1, A.shadowMap.autoUpdate = !1, A.setRenderTarget(R), A.clear(), A.render(e, Q), t.visible = !0, A.xr.enabled = a, A.shadowMap.autoUpdate = s, A.setRenderTarget(r) } } }; (eB.prototype = Object.create(Ue.prototype)).constructor = eB; var tB = function (A) { this.name = A.name || "", this.id = A.id || "", this.keyFrameList = [], this.roamTime = 5, this.interpolateType = 1, this.fps = 50, this.parts = 100, this.rotateSpeed = Math.PI / this.roamTime / this.fps / 4, this.parameters = { segments: this.roamTime * this.fps * this.parts, closed: !1, curveType: "centripetal", tension: .25 }, this.modificationId = 0, this.mapDeltaAngle = {}, this.mapDeltaOffset = {}, this.allocateSegmentList = null, this.positionCurve = void 0, this.init(A) }; tB.prototype.init = function (A) { this.setKeyFrameList(A.keyFrameList), this.setParameters(A.parameters), this.setInterpolateType(A.type), this.setFps(A.fps), this.setRoamTime(A.roamTime) }, tB.prototype.addKeyFrame = function (A) { var e = new y(A.position.x, A.position.y, A.position.z), t = new y(A.target.x, A.target.y, A.target.z), i = new y(A.up.x, A.up.y, A.up.z), o = null; if (A.quaternion) o = new f(A.quaternion.x, A.quaternion.y, A.quaternion.z, A.quaternion.w); else { var n = new M; n.lookAt(e, t, i), o = (new f).setFromRotationMatrix(n) } this.keyFrameList.push({ position: e, target: t, up: i, id: A.id, quaternion: o, curve: A.curve }), this.modificationId += 1 }, tB.prototype.setKeyFrameList = function (A) { this.keyFrameList = []; for (var e = 0, t = A.length; t > e; e += 1) this.addKeyFrame(A[e]); this.calRotateSpeed() }, tB.prototype.removeKeyFrame = function (A) { A >= 0 && this.keyFrameList.length > A && (this.keyFrameList.splice(A, 1), this.modificationId += 1) }, tB.prototype.getKeyFrames = function () { return this.keyFrameList }, tB.prototype.getKeyFrameCount = function () { return this.keyFrameList.length }, tB.prototype.clearFrames = function () { this.keyFrameList = [] }, tB.prototype.getJumpCounts = function (A) { var e = A / (1e3 / this.fps) * this.parts; return e = parseInt(e, 0) }, tB.prototype.setRoamTime = function (A) { this.roamTime = A, this.setSegments(A * this.fps * this.parts), this.calRotateSpeed() }, tB.prototype.calRotateSpeed = function () { var A = this.getKeyFrames().length; A > 1 && (this.rotateSpeed = Math.PI * (A - 1) / this.roamTime / this.fps / 4) }, tB.prototype.setInterpolateType = function (A) { this.interpolateType = A || 1, 1 === this.interpolateType && this.setSplineTension(0) }, tB.prototype.getInterpolateType = function () { return this.interpolateType }, tB.prototype.setName = function (A) { this.name = A }, tB.prototype.getName = function () { return this.name }, tB.prototype.getId = function () { return this.id }, tB.prototype.getKeyFramePositions = function () { for (var A = [], e = 0, t = this.keyFrameList.length; t > e; e += 1) { A.push(this.keyFrameList[e].position) } return A }, tB.prototype.getKeyFramePosition = function (A) { return this.keyFrameList[A].position }, tB.prototype.getKeyFrameDirection = function (A) { var e = this.keyFrameList[A]; return e.target.clone().sub(e.position) }, tB.prototype.getKeyFrameTarget = function (A) { return this.keyFrameList[A].target }, tB.prototype.getKeyFrameUp = function (A) { return this.keyFrameList[A].up }, tB.prototype.allocateSegments = function () { for (var A = [], e = 0, t = this.keyFrameList.length; t - 1 > e; e += 1) { var i = this.keyFrameList[e].position; A.push(this.keyFrameList[e + 1].position.clone().sub(i).length()) } for (var o = 0, n = 0, r = A.length; r > n; n += 1) o += A[n]; for (var a = this.getSegments(), s = 0, l = A.length; 0 !== o && l > s; s += 1) A[s] /= o, A[s] *= this.getSegments(), A[s] = Math.floor(A[s]), a -= A[s]; for (var c = 0; a > c; c += 1) A[c] > 0 && (A[c] += 1); this.allocateSegmentList = A }, tB.prototype.getAllocateSegmentCount = function (A) { return null === this.allocateSegmentList && this.allocateSegments(), this.allocateSegmentList[A] }, tB.prototype.getSplineParam = function (A, e) { return null === this.allocateSegmentList && this.allocateSegments(), (A + e / this.allocateSegmentList[A]) / this.allocateSegmentList.length }, tB.prototype.getDeltaAngle = function (A) { return this.mapDeltaAngle[A] }, tB.prototype.calculateDeltaAngle = function () { for (var A = this.allocateSegmentList, e = 0; A.length > e; e += 1) { var t = 0; if (this.keyFrameList[e].quaternion && this.keyFrameList[e + 1].quaternion) { var i = this.keyFrameList[e].quaternion, o = this.keyFrameList[e + 1].quaternion, n = (new f).multiplyQuaternions(o, i.clone().inverse()); n.normalize(), t = 2 * Math.acos(n.w) } else { var r = this.getKeyFrameDirection(e), a = this.getKeyFrameDirection(e + 1); t = r.angleTo(a) } var s = A[e]; if (0 === s) { var l = Math.floor(t / this.rotateSpeed) * this.parts; A[e] = l, this.mapDeltaAngle[e] = t / l } else this.mapDeltaAngle[e] = t / s } }, tB.prototype.getRotateAxis = function (A) { var e = this.keyFrameList[A].quaternion, t = this.keyFrameList[A + 1].quaternion; if (e && t) { var i = (new f).multiplyQuaternions(t, e.clone().inverse()); return i.normalize(), new y(i.x, i.y, i.z).normalize() } var o = this.getKeyFrameDirection(A), n = this.getKeyFrameDirection(A + 1); return o.clone().cross(n.clone()).normalize() }, tB.prototype.getDeltaOffset = function (A) { return this.mapDeltaOffset[A] }, tB.prototype.getPositionAtCurve = function (A, e) { var t = this.keyFrameList[A + 1]; if (t && t.curve) return t.curve.getPointAt(e) }, tB.prototype.getPositionAtCurve = function (A, e) { var t = this.keyFrameList[A + 1]; if (t && t.curve) return t.curve.getPointAt(e) }, tB.prototype.getLatestPositionAtCurve = function (A) { var e = this.keyFrameList[A]; if (e && e.curve) return e.position }, tB.prototype.calculateDeltaOffset = function () { for (var A = this.allocateSegmentList, e = this.getKeyFramePositions(), t = 0; A.length > t; t += 1) { var i = e[t], o = e[t + 1], n = this.allocateSegmentList[t]; this.mapDeltaOffset[t] = 0 === n ? new y : o.clone().sub(i).divideScalar(n) } }, tB.prototype.setSplineTension = function (A) { 0 > A || A > 1 || (this.parameters.tension = A, this.modificationId += 1) }, tB.prototype.setSegments = function (A) { this.parameters.segments = A, this.modificationId += 1 }, tB.prototype.getSegments = function () { return this.parameters.segments }, tB.prototype.setParameters = function (A) { A && (this.parameters = A, this.modificationId += 1) }, tB.prototype.getParameters = function () { return this.parameters }, tB.prototype.setFps = function (A) { this.fps = A || 50, this.calRotateSpeed(), this.modificationId += 1 }, tB.prototype.getFps = function () { return this.fps }, tB.prototype.getModificationId = function () { return this.modificationId }, tB.prototype.export = function () { return { name: this.name, id: this.id, fps: this.fps, roamTime: this.roamTime, type: this.interpolateType, keyFrameList: this.keyFrameList } }; var iB = function (A) { this.viewer = A.viewer, this.roam = null, this.bPause = !1, this.bContinue = !1, this.spline = null, this.reqid = 0, this.playBinded = this._play.bind(this), this.recordId = -1, this.keyFrameIdx = 0, this.count = -1, this.camera = this.viewer.cameraControl.camera, this.pausePlayCallback = [], this.stopPlayCallback = [], this.keyFrameCallback = [], this.timeRecorder = { last: 0, pause: 0, deltaTime: 0 }, this.setRoam(A.roamData) }; iB.prototype.setRoam = function (A) { this.roam = A, this.bPause = !1, this.recordId = -1, this.spline = null, this.keyFrameIdx = 0, this.count = -1 }, iB.prototype.updateCamera = function (A, e, t) { this.camera.position.add(A), this.camera.target.addVectors(this.camera.position, e), this.camera.up.copy(t) }, iB.prototype.updateCameraToFrame = function (A) { var e = this.roam.getKeyFramePosition(A), t = this.roam.getKeyFrameTarget(A), i = this.roam.getKeyFrameUp(A); this.camera.position.copy(e), this.camera.target.copy(t), this.camera.up.copy(i) }, iB.prototype.reAllocate = function () { this.recordId !== this.roam.getModificationId() && (this.roam.allocateSegments(), this.roam.calculateDeltaOffset(), this.roam.calculateDeltaAngle(), this.recordId = this.roam.getModificationId()) }, iB.prototype._play = function () { var A = new f, e = new f, t = new y, i = new y(0, 1, 0), o = new y; return function () { this.reqid = setTimeout(this.playBinded, this.roam.getFps()), !1 === this.bContinue ? (this.bContinue = !0, this.timeRecorder.deltaTime = this.timeRecorder.pause - this.timeRecorder.last) : this.timeRecorder.deltaTime = performance.now() - this.timeRecorder.last, this.timeRecorder.last = performance.now(); var n = this.roam.getJumpCounts(this.timeRecorder.deltaTime); if (this.reAllocate(), this.bPause) return this.timeRecorder.pause = performance.now(), clearTimeout(this.reqid), this.triggerPausePlayCallback(), this.bPause = !1, void(this.bContinue = !1); var r = this.roam.getKeyFrameCount(), a = this.roam.getAllocateSegmentCount(this.keyFrameIdx); if (0 === a) this.keyFrameIdx += 1, this.triggerKeyFrameCallback(this.keyFrameIdx), this.count = -1; else if (this.keyFrameIdx === r - 1) this.updateCameraToFrame(this.keyFrameIdx), this.stop(); else if (-1 === this.count) this.timeStart = performance.now(), 0 === this.keyFrameIdx && this.triggerKeyFrameCallback(0), this.updateCameraToFrame(this.keyFrameIdx), this.count = 0; else if (a > this.count) { this.count + n > a && (n = a - this.count); var s = this.count / a, l = this.roam.keyFrameList[this.keyFrameIdx].quaternion, c = this.roam.keyFrameList[this.keyFrameIdx + 1].quaternion; A.copy(c), l.equals(c) || f.slerp(l, c, A, s); var h = this.roam.keyFrameList[this.keyFrameIdx]; t.subVectors(h.target, h.position), t.applyQuaternion(e.copy(l).inverse()), t.applyQuaternion(A), i.set(0, 1, 0), i.applyQuaternion(A); var d = this.roam.getPositionAtCurve(this.keyFrameIdx, s); if (d) this.camera.position.copy(d); else { var p = this.roam.getDeltaOffset(this.keyFrameIdx); o.copy(p).multiplyScalar(n), this.camera.position.add(o) } if (this.camera.target.addVectors(this.camera.position, t), this.camera.up.copy(i), a > this.count + n) this.count += n; else { this.keyFrameIdx += 1; var g = this.roam.getLatestPositionAtCurve(this.keyFrameIdx); g && this.camera.position.copy(g), this.triggerKeyFrameCallback(this.keyFrameIdx), this.count = 0 } } this.viewer.render() } }(), iB.prototype.play = function () { this.bPause = !1, this._play() }, iB.prototype.pause = function () { this.bPause = !0 }, iB.prototype.continue = function () { this.bContinue = !0, this.bPause = !1, this._play() }, iB.prototype.stop = function () { this.bPause = !1, this.keyFrameIdx = 0, this.count = -1, clearTimeout(this.reqid), this.triggerStopPlayCallback() }, iB.prototype.startFrom = function (A) { for (var e = this.roam, t = e.getKeyFrameCount(), i = e.getKeyFrames(), o = 0; t > o; o += 1) if (i[o].id === A) return this.keyFrameIdx = o, void(this.count = -1) }, iB.prototype.addKeyFrameCallback = function (A) { this.keyFrameCallback.push(A) }, iB.prototype.addPausePlayCallback = function (A) { this.pausePlayCallback.push(A) }, iB.prototype.addStopPlayCallback = function (A) { this.stopPlayCallback.push(A) }, iB.prototype.triggerKeyFrameCallback = function (A) { this.keyFrameCallback.forEach((function (e) { e(A) })) }, iB.prototype.triggerPausePlayCallback = function () { this.pausePlayCallback.forEach((function (A) { A() })) }, iB.prototype.triggerStopPlayCallback = function () { this.stopPlayCallback.forEach((function (A) { A() })) }, iB.prototype.updataSpline = function () { var A = this.roam.getKeyFramePositions(), e = this.roam.getParameters(); this.spline = new la(A, e.closed, e.curveType, e.tension) }; var oB = function () { this.roamList = [] }; oB.prototype.clear = function () { this.roamList = [] }, oB.prototype.add = function (A) { this.roamList.push(A) }, oB.prototype.remove = function (A) { for (var e = 0, t = this.roamList.length; t > e; e += 1) { if (this.roamList[e].getName() === A) return void this.roamList.splice(e, 1) } }, oB.prototype.save = function () { return JSON.stringify(this.roamList) }, oB.prototype.load = function (A) { this.clear(); for (var e = JSON.parse(A), t = 0, i = e.length; i > t; t += 1) { var o = new tB({ name: e[t].name, keyFrameList: e[t].keyFrameList, parameters: e[t].parameters, roamTime: e[t].roamTime, type: e[t].type, fps: e[t].fps }); this.add(o) } return this.roamList }; var nB = function (A, e) { this.coordinateSystem = A, this.viewer = A.viewer, this.drawingImpl = e, this.viewportOffset = this.viewer.domElement.getBoundingClientRect(), this.cameraControl = this.viewer.cameraControl, this.fillClipPlane = this.viewer.getScene().getFillClipPlane(), this.initialize() }; nB.prototype.initialize = function () { this.arrowMouseDown = !1, this.circleXMouseDown = !1, this.circleYMouseDown = !1, this.firstClickDown = !0, this.firstRotate = !0, this.lineOut = !0, this.arrowOut = !0, this.translateStartPt = new s, this.translateEndPt = new s, this.rotateAngleA = 0, this.rotateAngleB = 0, this.config = this.coordinateSystem.config }, nB.prototype.registerArrowEvents = function () { var A = this.drawingImpl.getDrawable("axisZ"), e = this, t = this.config.colors; A.onmouseover = function () { !0 !== e.circleXMouseDown && !0 !== e.circleYMouseDown && (e.drawingImpl.setColor("axisZ", t.highLight), e.drawingImpl.fill("arrow", t.highLight), e.drawingImpl.setColor("tipArcX", t.default), e.drawingImpl.fill("cubeX", t.default), e.drawingImpl.setColor("tipArcY", t.default), e.drawingImpl.fill("cubeY", t.default), e.lineOut = !1) }, A.onmouseout = function () { !0 !== e.circleXMouseDown && !0 !== e.circleYMouseDown && !1 === e.arrowMouseDown && !0 === e.arrowOut && (e.drawingImpl.setColor("axisZ", t.arrow), e.drawingImpl.fill("arrow", t.arrow), e.drawingImpl.setColor("tipArcX", t.tipArcX), e.drawingImpl.fill("cubeX", t.cubeX), e.drawingImpl.setColor("tipArcY", t.tipArcY), e.drawingImpl.fill("cubeY", t.cubeY), e.lineOut = !0) }, A.onmousedown = function (A) { e.arrowMouseDown = !0, e.lineOut = !1; var t = e.config.colors; e.drawingImpl.setColor("axisZ", t.highLight), e.drawingImpl.fill("arrow", t.highLight), e.coordinateSystem.colorUpdate = !1, e.translateStartPt.set(A.clientX, A.clientY) }; var i = this.drawingImpl.getDrawable("arrow"); i.onmouseover = function () { if (!0 !== e.circleXMouseDown && !0 !== e.circleYMouseDown) { e.arrowOut = !1; var A = e.config.colors; e.drawingImpl.fill("arrow", A.highLight), e.drawingImpl.setColor("axisZ", A.highLight), e.drawingImpl.setColor("tipArcX", A.default), e.drawingImpl.fill("cubeX", A.default), e.drawingImpl.setColor("tipArcY", A.default), e.drawingImpl.fill("cubeY", A.default) } }, i.onmouseout = function () { if (!0 !== e.circleXMouseDown && !0 !== e.circleYMouseDown && !1 === e.arrowMouseDown && !0 === e.lineOut) { e.arrowOut = !0; var A = e.config.colors; e.drawingImpl.setColor("axisZ", A.arrow), e.drawingImpl.fill("arrow", A.arrow), e.drawingImpl.setColor("tipArcX", A.tipArcX), e.drawingImpl.fill("cubeX", A.cubeX), e.drawingImpl.setColor("tipArcY", A.tipArcY), e.drawingImpl.fill("cubeY", A.cubeY) } }, i.onmousedown = function (A) { e.arrowMouseDown = !0, e.arrowOut = !1; var t = e.config.colors; e.drawingImpl.setColor("axisZ", t.highLight), e.drawingImpl.fill("arrow", t.highLight), e.translateStartPt.set(A.clientX, A.clientY) }, document.onmousemove = function (A) { if (!0 === e.arrowMouseDown) { if (!(A.clientX === e.translateStartPt.x && A.clientY === e.translateStartPt.y)) { var t = e.fillClipPlane.renderClipPlane, i = t.normal.clone(); i.w = t.constant; var o = e.cameraControl.movePlane(i, A, e.translateStartPt, !1, e.fillClipPlane.position.clone()); null !== o && e.fillClipPlane.offset(o), e.translateStartPt.set(A.clientX, A.clientY), e.cameraControl.update(!0) } e.coordinateSystem.update(); var n = e.config.colors; e.drawingImpl.setColor("axisZ", n.highLight), e.drawingImpl.fill("arrow", n.highLight), e.drawingImpl.setColor("tipArcX", n.default), e.drawingImpl.fill("cubeX", n.default), e.drawingImpl.setColor("tipArcY", n.default), e.drawingImpl.fill("cubeY", n.default), A.preventDefault(), A.stopPropagation() } }, document.onmouseup = function () { if (!1 !== e.arrowMouseDown) { e.arrowMouseDown = !1, e.coordinateSystem.colorUpdate = !0; var A = e.config.colors; e.drawingImpl.setColor("axisZ", A.arrow), e.drawingImpl.fill("arrow", A.arrow), e.drawingImpl.setColor("tipArcX", A.tipArcX), e.drawingImpl.fill("cubeX", A.cubeX), e.drawingImpl.setColor("tipArcY", A.tipArcY), e.drawingImpl.fill("cubeY", A.cubeY), vc.ClippingCaps = !0, e.viewer.render() } } }, nB.prototype.registerCircleXEvents = function () { var A = this, e = this.config.colors, t = this.drawingImpl.getDrawable("tipArcX"); t.onmousedown = function () { A.circleXMouseDown = !0, A.drawingImpl.setColor("axisZ", e.default), A.drawingImpl.fill("arrow", e.default), A.enableCircleXMovement() }, t.onmouseout = function () { !1 === A.circleXMouseDown && (A.drawingImpl.setColor("axisZ", e.arrow), A.drawingImpl.fill("arrow", e.arrow), A.drawingImpl.setColor("tipArcY", e.tipArcY), A.drawingImpl.fill("cubeY", e.cubeY), A.coordinateSystem.circleToArc("tipArcX")) }, document.addEventListener("mouseup", (function () { !0 === A.circleXMouseDown && (vc.ClippingCaps = !0, A.viewer.render()), A.circleXMouseDown = !1, A.firstClickDown = !0, A.firstRotate = !1, A.lastRotateX = 0, A.lastRotateY = 0, A.drawingImpl.show("tipArcY", !0), A.drawingImpl.show("axisY", !0), A.drawingImpl.show("axisZ", !0), A.drawingImpl.show("cubeY", !0), A.coordinateSystem.update(), A.drawingImpl.show("dashLineX", !1), A.drawingImpl.setColor("axisZ", e.arrow), A.drawingImpl.fill("arrow", e.arrow) })) }, nB.prototype.registerCircleYEvents = function () { var A = this, e = this.config.colors, t = this.drawingImpl.getDrawable("tipArcY"); t.onmousedown = function () { A.circleYMouseDown = !0, A.drawingImpl.setColor("axisZ", e.default), A.drawingImpl.fill("arrow", e.default), A.enableCircleYMovement() }, t.onmouseout = function () { !1 === A.circleYMouseDown && (A.drawingImpl.setColor("axisZ", e.arrow), A.drawingImpl.fill("arrow", e.arrow), A.coordinateSystem.circleToArc("tipArcY"), A.drawingImpl.setColor("tipArcX", e.tipArcX), A.drawingImpl.fill("cubeX", e.cubeX)) }, document.addEventListener("mouseup", (function () { !0 === A.circleYMouseDown && (vc.ClippingCaps = !0, A.viewer.render()), A.circleYMouseDown = !1, A.drawingImpl.show("tipArcX", !0), A.drawingImpl.show("cubeX", !0), A.coordinateSystem.update(), A.drawingImpl.show("dashLineY", !1), A.drawingImpl.setColor("axisZ", e.arrow), A.drawingImpl.fill("arrow", e.arrow) })) }, nB.prototype.enableCircleXMovement = function () { var A = this, e = this.config.colors; document.addEventListener("mousemove", (function (t) { if (!0 === A.circleXMouseDown) { A.drawingImpl.show("dashLineX", !0), A.drawingImpl.setColor("axisZ", e.default), A.drawingImpl.fill("arrow", e.default), vc.ClippingCaps = !1; var i = A.fillClipPlane.normalIndex, o = A.viewportOffset, n = new s(t.clientX - o.left, t.clientY - o.top), r = A.calcRotateAngleIndex(n, A.coordinateSystem.discretePointsX); !0 === A.firstClickDown && (A.lastIndex = r); var a = 2 * (r - A.lastIndex); i > 3 && (a = -a), A.drawingImpl.show("tipArcY", !1), A.coordinateSystem.updateAxisZ(); var l = A.fillClipPlane.renderClipPlane.normal.clone(), c = A.coordinateSystem.getCoordinateAxis(), h = A.config.styles; A.coordinateSystem.drawClipPlaneCircle("tipArcZ", c.start.clone(), h.auxCircleRadius, A.coordinateSystem.dirX, l); var d = A.coordinateSystem.drawingToCanvas(c.start.clone()), p = A.coordinateSystem.drawingToCanvas(c.endY.clone()); A.coordinateSystem.drawAxisY(d, p, e.highLight), A.coordinateSystem.drawCubeX("cubeX", p, h.cubeRadius), A.drawingImpl.show("cubeY", !1); var g = "x"; 2 > i && (g = "y"), A.fillClipPlane.rotateAngleOffset(a, g), A.coordinateSystem.backwardCoordinate(), !0 === A.firstClickDown ? A.firstClickDown = !1 : A.lastIndex = r, A.translateStartPt.set(t.clientX, t.clientY), A.viewer.render(), t.preventDefault(), t.stopPropagation() } })) }, nB.prototype.enableCircleYMovement = function () { var A = this, e = this.config.colors; document.addEventListener("mousemove", (function (t) { if (!0 === A.circleYMouseDown) { A.drawingImpl.show("dashLineY", !0), A.drawingImpl.setColor("axisZ", e.default), A.drawingImpl.fill("arrow", e.default), vc.ClippingCaps = !1; var i = A.fillClipPlane.normalIndex, o = A.viewportOffset, n = new s(t.clientX - o.left, t.clientY - o.top), r = A.calcRotateAngleIndex(n, A.coordinateSystem.discretePointsY); !0 === A.firstClickDown && (A.lastIndex = r); var a = 2 * (r - A.lastIndex); i > 3 && (a = -a), A.drawingImpl.show("tipArcX", !1), A.coordinateSystem.updateAxisZ(); var l = A.fillClipPlane.renderClipPlane.normal.clone(), c = A.coordinateSystem.getCoordinateAxis(), h = A.config.styles; A.coordinateSystem.drawClipPlaneCircle("tipArcZ", c.start.clone(), h.auxCircleRadius, A.coordinateSystem.dirX.clone(), l.clone()); var d = A.coordinateSystem.drawingToCanvas(c.start.clone()), p = A.coordinateSystem.drawingToCanvas(c.endX.clone()); A.coordinateSystem.drawAxisX(d, p, e.highLight), A.coordinateSystem.drawCubeY("cubeY", p, h.cubeRadius), A.drawingImpl.show("cubeX", !1); var g = "z"; i > 3 && (g = "y"), A.fillClipPlane.rotateAngleOffset(a, g), A.coordinateSystem.backwardCoordinate(), !0 === A.firstClickDown ? A.firstClickDown = !1 : A.lastIndex = r, A.translateStartPt.set(t.clientX, t.clientY), A.viewer.render(), t.preventDefault(), t.stopPropagation() } })) }, nB.prototype.registerTipArcXEvents = function () { var A = this, e = this.config.colors, t = this.drawingImpl.getDrawable("tipArcX"); t.onmouseover = function () { !1 === A.circleYMouseDown && (A.coordinateSystem.arcToCircle("tipArcX"), A.drawingImpl.setColor("tipArcY", e.default), A.drawingImpl.fill("cubeY", e.default), A.drawingImpl.setColor("axisZ", e.default), A.drawingImpl.fill("arrow", e.default), A.registerCircleXEvents()) }, t.onmouseout = function () { !1 === A.circleXMouseDown && A.coordinateSystem.circleToArc("tipArcX") } }, nB.prototype.registerTipArcYEvents = function () { var A = this, e = this.config.colors, t = this.drawingImpl.getDrawable("tipArcY"); t.onmouseover = function () { !1 === A.circleXMouseDown && (A.coordinateSystem.arcToCircle("tipArcY"), A.drawingImpl.setColor("tipArcX", e.default), A.drawingImpl.fill("cubeX", e.default), A.drawingImpl.setColor("axisZ", e.default), A.drawingImpl.fill("arrow", e.default), A.registerCircleYEvents()) }, t.onmouseout = function () { !1 === A.circleYMouseDown && A.coordinateSystem.circleToArc("tipArcY") } }, nB.prototype.calcRotateAngleIndex = function (A, e) { for (var t = this.createLine(A, this.coordinateSystem.cOrigin), i = -1, o = Number.POSITIVE_INFINITY, n = 0; 90 > n; n += 1) { var r = e[n].clone(), a = this.disPointToLine(r, t); o > a && (o = a, i = n) } var s = 90 + i, l = e[i].clone().distanceTo(A); return e[s].clone().distanceTo(A) > l ? i : s }, nB.prototype.createLine = function (A, e) { var t = {}; if (A.x === e.x) t.A = 1, t.B = 0, t.C = -A.x; else { var i = (e.y - A.y) / (e.x - A.x), o = e.y - i * e.x; t.A = i, t.B = -1, t.C = o } return t }, nB.prototype.disPointToLine = function (A, e) { return Math.abs(e.A * A.x + e.B * A.y + e.C) / Math.sqrt(e.A * e.A + e.B * e.B) }; var rB = function () { return { colors: { tipArcX: "#0000FF", cubeX: "#0000FF", tipArcY: "#FF0000", cubeY: "#FF0000", highLight: "#FFFF00", tipLine: "#4dc0ff", arrow: "#4dc0ff", default: "#A9A9A9" }, styles: { dashArray: "10 8", originRadius: 5, auxCircleRadius: .1, tipLineLength: .1, cubeRadius: 5, axisXWidth: 2, axisYWidth: 2, axisZWidth: 3, axisXLength: .1, axisYLength: .1, axisZLength: .14, segments: 180, tipArcLeftCounts: 45, tipArcRightCounts: 45 } } }, aB = function (A, e) { this.coordinateSystem = A, this.viewer = e, this.container = this.viewer.domElement.querySelector("div:first-child"), this.mapDrawables = {}, this.initialize() }; aB.prototype.initialize = function () { this.xmlns = "http://www.w3.org/2000/svg"; var A = document.createElement("div"); A.style.left = "0px", A.style.top = "0px", A.style.width = this.container.offsetWidth + "px", A.style.height = this.container.offsetHeight + "px", A.style.position = "absolute", this.group = document.createElementNS(this.xmlns, "svg"), this.group.setAttribute("width", String(this.container.offsetWidth)), this.group.setAttribute("height", String(this.container.offsetHeight)), A.appendChild(this.group), this.container.appendChild(A) }, aB.prototype.makeCircle = function (A, e) { var t = this.mapDrawables; void 0 === t[A] && (t[A] = document.createElementNS(this.xmlns, "circle"), this.group.appendChild(t[A])); var i = t[A]; i.style.fill = e.color || "#FF0000", i.setAttribute("r", String(e.radius)), i.setAttribute("transform", "translate(" + e.center.x + "," + e.center.y + ")") }, aB.prototype.show = function (A, e) { var t = this.getDrawable(A); t && (t.style.display = e ? "block" : "none") }, aB.prototype.fill = function (A, e) { this.getDrawable(A).style.fill = e ? "block" : "none" }, aB.prototype.makeLine = function (A, e) { var t = this.mapDrawables; void 0 === t[A] && (t[A] = document.createElementNS(this.xmlns, "line"), this.group.appendChild(t[A])); var i = t[A]; i.setAttribute("stroke", e.color || "#000000"), i.setAttribute("stroke-width", e.width || 3), i.setAttribute("x1", String(e.start.x)), i.setAttribute("y1", String(e.start.y)), i.setAttribute("x2", String(e.end.x)), i.setAttribute("y2", String(e.end.y)) }, aB.prototype.makeDashLine = function (A, e) { this.makeLine(A, e), this.mapDrawables[A].setAttribute("stroke-dasharray", e.dashArray) }, aB.prototype.makePolyline = function (A, e) { var t = null, i = this.mapDrawables; void 0 === i[A] && (i[A] = document.createElementNS(this.xmlns, "polyline"), this.group.appendChild(i[A])), (t = i[A]).setAttribute("stroke", e.color || "#A9A9A9"), t.setAttribute("stroke-width", e.width || 3), t.style.fill = "none", t.setAttribute("points", e.points) }, aB.prototype.makeDefs = function (A) { var e = this.mapDrawables; void 0 === e[A] && (e[A] = document.createElementNS(this.xmlns, "defs"), void 0 === e.marker && (e.marker = this.makeMarker(), e[A].appendChild(e.marker)), this.group.appendChild(e[A])) }, aB.prototype.makeMarker = function () { var A = document.createElementNS(this.xmlns, "marker"); A.setAttribute("id", "arrow"), A.setAttribute("viewBox", "0 0 10 10"), A.setAttribute("refX", "5"), A.setAttribute("refY", "5"), A.setAttribute("markerWidth", "6"), A.setAttribute("markerHeight", "6"), A.setAttribute("orient", "auto-start-reverse"); var e = document.createElementNS(this.xmlns, "path"); return e.setAttribute("d", "M 0 0 L 10 5 L 0 10 z"), e.style.fill = "#11DAB7", this.mapDrawables.arrow = e, A.appendChild(e), A }, aB.prototype.getDrawable = function (A) { return this.mapDrawables[A] }, aB.prototype.attach = function () { this.getDrawable("axisZ").setAttribute("marker-end", "url(#arrow)") }, aB.prototype.setColor = function (A, e) { this.getDrawable(A).setAttribute("stroke", e) }, aB.prototype.fill = function (A, e) { this.getDrawable(A).style.fill = e }, aB.prototype.hideAll = function (A) { this.group.style.display = !0 === A ? "none" : "block" }, aB.prototype.destroy = function () { for (var A = this.group.children, e = 0; A.length > e; e += 1) this.group.removeChild(A[e]); this.group.parentNode.removeChild(this.group) }; var sB = function (A) { this.viewer = A, this.enable = !0, this.cameraControl = A.cameraControl, this.fillClipPlane = A.getScene().getFillClipPlane(), this.container = A.domElement.querySelector("div:first-child"), this.config = new rB, this.drawingImpl = new aB(this, A), this.coordinateAction = new nB(this, this.drawingImpl), this.initialize() }; sB.prototype.initialize = function () { this.enable = !0, this.boundingBox = new Ps, this.bRegisterArrowEvent = !1, this.bRegisterAuxCircleEvent = !1, this.mapDrawableName = { ORIGIN: "origin", AXISX: "axisX", AXISY: "axisY", CUBEX: "cubeX", CUBEY: "cubeY", AXISZ: "axisZ", ARROW: "arrow", DASHLINE: "dashLine", TIPARC_X: "tipArcX", TIPARC_Y: "tipArcY", TIPARC_Z: "tipArcZ", DASHLINE_X: "dashLineX", DASHLINE_Y: "dashLineY" } }, sB.prototype.saveTransform = function (A) { this.savedCamera = A.clone() }, sB.prototype.drawingToCanvas = function (A) { var e = Rd.drawingToCanvas(this.cameraControl.camera, A, this.container.offsetWidth, this.container.offsetHeight); return new s(e.x, e.y) }, sB.prototype.getCoordinateAxis = function () { var A = this.fillClipPlane.renderClipPlane.normal.clone(), e = this.fillClipPlane.getCoordinate(), t = e.axisY.clone(), i = A.clone().cross(t.clone()); this.fillClipPlane.normalIndex > 3 && (t = (i = e.axisX.clone()).clone().cross(A.clone())); var o = this.config.styles, n = this.fillClipPlane.position.clone(), r = this.cameraControl.getCamera().position.clone().sub(n).length(), a = n.clone().add(i.clone().multiplyScalar(o.axisXLength * r)), s = n.clone().add(t.clone().multiplyScalar(o.axisYLength * r)), l = n.clone().add(A.clone().multiplyScalar(o.axisZLength * r)); return this.dirX = i, this.dirY = t, { start: n, endX: a, endY: s, endZ: l } }, sB.prototype.drawOrigin = function (A, e) { this.drawingImpl.makeCircle(this.mapDrawableName.ORIGIN, { center: A, radius: e, color: this.config.colors.default }) }, sB.prototype.drawAxisX = function (A, e, t) { this.drawingImpl.makeLine(this.mapDrawableName.AXISX, { start: A, end: e, width: this.config.styles.axisXWidth, color: t || this.config.colors.default }) }, sB.prototype.drawAxisY = function (A, e, t) { var i = this.config; this.drawingImpl.makeLine(this.mapDrawableName.AXISY, { start: A, end: e, width: i.styles.axisYWidth, color: t || i.colors.default }) }, sB.prototype.drawAxisZ = function (A, e) { var t = this.config; this.drawingImpl.makeLine(this.mapDrawableName.AXISZ, { start: A, end: e, width: t.styles.axisZWidth, color: t.colors.arrow }), this.drawingImpl.attach(), !1 === this.bRegisterArrowEvent && (this.coordinateAction.registerArrowEvents(), this.bRegisterArrowEvent = !0) }, sB.prototype.updateAxisZ = function () { var A = this.getCoordinateAxis(), e = this.drawingToCanvas(A.start.clone()), t = this.drawingToCanvas(A.endZ.clone()); this.drawingImpl.makeLine(this.mapDrawableName.AXISZ, { start: e, end: t, color: this.config.colors.default }) }, sB.prototype.drawArrow = function (A, e) { var t = this.mapDrawableName; this.drawingImpl.makeLine(t.AXISZ, { start: A, end: e }), this.drawingImpl.attach(), this.drawingImpl.setColor(t.AXISZ, this.config.colors.default), !1 === this.bRegisterArrowEvent && (this.coordinateAction.registerArrowEvents(), this.bRegisterArrowEvent = !0) }, sB.prototype.drawClipPlaneCircle = function (A, e, t, i, o) { for (var n = { center: e.clone(), radius: t, normal: i.clone(), rotateAxis: o.clone() }, r = this.config.styles.segments, a = this.discreteCircle(n, r), s = "", l = 0; r > l; l += 1) s += a[l].x + "," + a[l].y, s += " "; s += a[0].x + "," + a[0].y, this.drawingImpl.makePolyline(A, { points: s += " ", color: this.config.colors.default, width: 2 }) }, sB.prototype.drawTipArc = function (A, e, t, i, o) { var n = { center: e.clone(), radius: t, normal: i.clone(), rotateAxis: o.clone() }, r = this.config.styles, a = r.tipArcRightCounts, s = r.tipArcLeftCounts, l = r.segments, c = this.discreteCircle(n, l); A === this.mapDrawableName.TIPARC_X ? (this.discretePointsX = c, a = r.tipArcLeftCounts, s = r.tipArcRightCounts) : this.discretePointsY = c; for (var h = "", d = l - a - 1; l > d; d += 1) h += c[d].x + "," + c[d].y, h += " "; for (var p = 0; s >= p; p += 1) h += c[p].x + "," + c[p].y, h += " "; var g = { points: h, color: this.config.colors.tipArcX }; A === this.mapDrawableName.TIPARC_X ? (this.drawingImpl.makePolyline(A, g), this.coordinateAction.registerTipArcXEvents()) : A === this.mapDrawableName.TIPARC_Y && (g.color = this.config.colors.tipArcY, this.drawingImpl.makePolyline(A, g), this.coordinateAction.registerTipArcYEvents()) }, sB.prototype.drawTipLine = function (A, e, t) { var i = this.drawingToCanvas(e.clone()), o = this.drawingToCanvas(t.clone()), n = this.config; this.drawingImpl.makeDashLine(A, { start: i, end: o, color: n.colors.tipLine, dashArray: n.styles.dashArray }), this.drawingImpl.show(A, !1) }, sB.prototype.drawCubeX = function (A, e, t) { this.drawingImpl.makeCircle(A, { center: e, radius: t, color: this.config.colors.cubeX }) }, sB.prototype.drawCubeY = function (A, e, t, i) { this.drawingImpl.makeCircle(A, { center: e, radius: t, color: i || this.config.colors.cubeY }) }, sB.prototype.discreteCircle = function (A, e) { for (var t = A.center.clone(), i = A.radius, o = A.rotateAxis.clone(), n = A.normal.clone(), r = [], a = 0; e > a; a += 1) { n.applyAxisAngle(o, 2 * Math.PI / e); var s = t.clone().add(n.clone().multiplyScalar(i)), l = this.drawingToCanvas(s.clone()); r.push(l) } return r }, sB.prototype.arcToCircle = function (A) { var e = "", t = this.discretePointsX; A === this.mapDrawableName.TIPARC_Y && (t = this.discretePointsY); for (var i = 0, o = t.length; o > i; i += 1) e += t[i].x + "," + t[i].y, e += " "; e += t[0].x + "," + t[0].y, this.drawingImpl.makePolyline(A, { points: e += " ", color: this.config.colors.highLight }) }, sB.prototype.circleToArc = function (A) { var e = this.config.styles, t = e.tipArcLeftCounts, i = e.tipArcRightCounts, o = e.segments, n = this.discretePointsX, r = { color: this.config.colors.tipArcX }; A === this.mapDrawableName.TIPARC_Y && (n = this.discretePointsY, r.color = this.config.colors.tipArcY, t = e.tipArcRightCounts, i = e.tipArcLeftCounts); for (var a = "", s = o - t - 1; o > s; s += 1) a += n[s].x + "," + n[s].y, a += " "; for (var l = 0; i >= l; l += 1) a += n[l].x + "," + n[l].y, a += " "; r.points = a, this.drawingImpl.makePolyline(A, r) }, sB.prototype.update = function () { if (this.enable) { var A = this.fillClipPlane.position.clone(), e = this.cameraControl.getCamera().position.clone().sub(A).length(), t = this.getCoordinateAxis(), i = this.drawingToCanvas(t.start.clone()), o = this.drawingToCanvas(t.endX.clone()), n = this.drawingToCanvas(t.endY.clone()), r = this.drawingToCanvas(t.endZ.clone()); void 0 === this.createRefs && (this.drawingImpl.makeDefs("refs"), this.createRefs = !0), this.cOrigin = i.clone(), this.drawAxisZ(i, r), this.drawAxisX(i, o), this.drawAxisY(i, n); var a = this.config.styles, s = this.mapDrawableName, l = this.fillClipPlane.renderClipPlane.normal.clone(); this.drawClipPlaneCircle(s.TIPARC_Z, t.start.clone(), a.auxCircleRadius * e, this.dirX, l), this.drawTipArc(s.TIPARC_X, t.start.clone(), a.auxCircleRadius * e, l, this.dirX), this.drawTipArc(s.TIPARC_Y, t.start.clone(), a.auxCircleRadius * e, l, this.dirY); var c = t.start.clone().add(this.dirX.clone().multiplyScalar(a.tipLineLength * e)), h = t.start.clone().sub(this.dirX.clone().multiplyScalar(a.tipLineLength * e)); this.drawTipLine(s.DASHLINE_X, c, h); var d = t.start.clone().add(this.dirY.clone().multiplyScalar(a.tipLineLength * e)), p = t.start.clone().sub(this.dirY.clone().multiplyScalar(a.tipLineLength * e)); this.drawTipLine(s.DASHLINE_Y, d, p), this.drawOrigin(i, a.originRadius); var g = this.discretePointsX[44].clone(); this.drawCubeX(s.CUBEX, g, a.cubeRadius); var u = this.discretePointsY[134].clone(); this.drawCubeY(s.CUBEY, u, a.cubeRadius), this.updateBbox() } else this.hide(!0) }, sB.prototype.hide = function (A) { this.drawingImpl.hideAll(A) }, sB.prototype.enabled = function (A) { this.enable = A }, sB.prototype.destroy = function () { this.drawingImpl.destroy() }, sB.prototype.updateBbox = function () { this.boundingBox.makeEmpty(); for (var A = 0; this.discretePointsX.length > A; A += 1) { var e = this.discretePointsX[A].clone(); this.boundingBox.expandByPoint(e) } for (A = 0; this.discretePointsY.length > A; A += 1) { e = this.discretePointsY[A].clone(); this.boundingBox.expandByPoint(e) } var t = this.getCoordinateAxis(), i = this.drawingToCanvas(t.start.clone()), o = this.drawingToCanvas(t.endZ.clone()); this.boundingBox.expandByPoint(i), this.boundingBox.expandByPoint(o), this.boundingBox.expandByScalar(5) }, sB.prototype.insideBoundingBox = function (A) { return this.boundingBox.containsPoint(A.clone()) }, sB.prototype.backwardCoordinate = function () { var A = this.cameraControl.camera.position, e = this.cameraControl.camera.target.clone().sub(A.clone()).normalize(), t = this.fillClipPlane.renderClipPlane.normal.clone(); e.angleTo(t); Math }; var lB = { Forward: 0, Reverse: 1 }, cB = { X: 0, Y: 4, Z: 2 }, hB = function (A) { var e = A.viewer; if (e) { if (e._sectionBox && e._sectionBox.exit(), e._sectionPlane) return e._sectionPlane; e._sectionPlane = this, this.id = A.id, this._opt = A, this.mode = A.mode, this._plane = A.plane, this._direction = A.direction, this._progress = A.progress, this.init(), this.setPlane(A.plane) } else Bh.log("domElement must not be empty.") }; hB.prototype = { init: function () { this.enableCoordinate = !0; var A = this._opt.viewer.getViewerImpl(); this.coordinateSystem = new sB(A), A.controlManager.enableTool(A, Pc.CLIP_FILL), this._sectionTool = A.getScene().getFillClipPlane(), this._sectionTool.enable(!0, !0), this.hookEvens() }, hookEvens: function () { var A = this, e = this.coordinateSystem, t = this._opt.viewer.getViewerImpl(); t.getDomElement(); t.registerEventListener(Rc.ON_CLIP_HOVER, (function (t) { if (!1 !== A.enableCoordinate) if (t.onClipPlane) e.enable && (e.update(), e.hide(!1)); else { var i = new s(t.event.clientX, t.event.clientY); e.insideBoundingBox(i) ? e.hide(!1) : e.hide(!0) } })), t.registerEventListener(Rc.ON_CLIP_MOUSE_DOWN, (function (A) {})), t.registerEventListener(Rc.ON_CLIP_MOUSE_MOVE, (function (A) { e.update() })), t.registerDomEventListener(Rc.ON_CONTROL_ZOOM, (function (A) { e.update() })) }, exit: function () { var A = this._opt.viewer.getViewerImpl(), e = A.getScene().getFillClipPlane(); A.controlManager.disableTool(Pc.CLIP_FILL), e.enable(!1, !1), this.coordinateSystem.destroy(), this._sectionTool = null, this._opt.viewer._sectionPlane = null }, setProgress: function (A) { var e = 1 - A / 50; this._progress = A, this._sectionTool.setProcess(e) }, getProgress: function () { return 50 * (1 - this._sectionTool.getProcess()) }, setPlane: function (A) { var e = lB[this._direction] + cB[A]; this._plane = A, this._sectionTool.changeNormal(e), this.setProgress(this._opt.progress) }, getPlane: function () { return this._plane }, setDirection: function (A) { var e = lB[A] + cB[this._plane]; this._direction = A, this._sectionTool.changeNormal(e), this.setProgress(this._opt.progress) }, getDirection: function () { return this._direction }, setRotateAngle: function (A, e) { this._sectionTool.setRotateAngle(A, e) }, getRotateAngle: function () { return this._sectionTool.getRotateAngle() }, hidePlane: function () { this._sectionTool.visible = !1, this.enableCoordinate = !1, this.coordinateSystem.hide(!0) }, showPlane: function () { this._sectionTool.visible = !0, this.enableCoordinate = !0 }, reset: function () { this.setPlane(this._opt.plane), this.setDirection(this._opt.direction), this.setProgress(this._opt.progress) }, getState: function () { return this._sectionTool.store() }, setState: function (A) { this._sectionTool.restore(A) } }; var dB = function (A) { var e = this, t = A; "function" == typeof A.getViewerImpl && (t = A.getViewerImpl()), this.marks = {}, this.SelectedMark = {}, this.components = {}, this.allOids = []; var i = { id: "", name: "mark", scale: 20, alwaysVisible: !1, color: [99, 99, 99], wordColor: [0, 0, 0], position: [0, 0, 0] }, o = new s, n = 0, r = 0; function a(A) { var e = [0, 0]; if (A) { for (var t = A.target, i = 0, o = 0; t.offsetParent;) i += t.offsetLeft, o += t.offsetTop, t = t.offsetParent; e[0] = A.pageX - i, e[1] = A.pageY - o } else A = window.event, e.x = A.x, e.y = A.y; return e } function l(A) { var i = new Dd, n = new y(o.x / t.domElement.clientWidth * 2 - 1, -o.y / t.domElement.clientHeight * 2 + 1, .5); i.setFromCamera(n, t.camera), i.camera = t.camera, i._camera = t.camera; var r = Object.values(e.components), a = i.intersectObjects(r); a && a.length > 0 && e.SelectedMark !== a[0].object ? (e.SelectedMark = a[0].object, e.dispatchEvent("updated", { added: { objects: e.SelectedMark } })) : (e.SelectedMark = {}, e.dispatchEvent("updated", { removed: { objects: e.SelectedMark } })) } function c(A) { var e = a(A); o.x = n = e[0], o.y = r = e[1] } function h(A) { var e = a(A); (e[0] > n ? 5 > e[0] - n : 5 > n - e[0]) && (e[1] > r ? 5 > e[1] - r : 5 > r - e[1]) && (o.x = n = e[0], o.y = r = e[1], l()) } function p(A) { o.x = n = A.changedTouches[0].clientX, o.y = r = A.changedTouches[0].clientY } function g(A) { (A.changedTouches[0].clientX > n ? 5 > A.changedTouches[0].clientX - n : 5 > n - A.changedTouches[0].clientX) && (A.changedTouches[0].clientY > r ? 5 > A.changedTouches[0].clientY - r : 5 > r - A.changedTouches[0].clientY) && (o.x = n = A.changedTouches[0].clientX, o.y = r = A.changedTouches[0].clientY, l()) } this.active = !0, e.domElement = t.domElement, this.enabled = function () { this.mousedown = t.domElement.addEventListener("mousedown", c, !1), this.mouseup = t.domElement.addEventListener("mouseup", h, !1) }, this.disabled = function () { this.mousedown = t.domElement.removeEventListener("mousedown", c, !1), this.mouseup = t.domElement.removeEventListener("mouseup", h, !1) }, this.touchEnabled = function () { this.touchstart = t.domElement.addEventListener("touchstart", p, !1), this.touchend = t.domElement.addEventListener("touchend", g, !1) }, this.touchDisabled = function () { this.touchstart = t.domElement.removeEventListener("touchstart", p, !1), this.touchend = t.domElement.removeEventListener("touchend", g, !1) }, this.enabled(), this.add = function (A, t) { var o = Object.assign({}, i, A); if ("" !== o.id) for (var n = 0; e.allOids.length > n; n += 1) if (o.id === e.allOids[n]) return { data: "标签id重复" }; (o.position.isVector3 || (o.position = new y(o.position[0], o.position[1], o.position[2])), Array.isArray(o.color)) && (o.color = "rgb(" + o.color[0] + "," + o.color[1] + "," + o.color[2] + ")"); Array.isArray(o.wordColor) && (o.wordColor = "rgb(" + o.wordColor[0] + "," + o.wordColor[1] + "," + o.wordColor[2] + ")"); var r = document.createElement("canvas"); r.width = 28 * o.name.length, r.height = 150; var a = r.getContext("2d"); a.fillStyle = "rgba(255, 255, 255, 0)", a.lineWidth = 2, a.strokeStyle = o.color, a.strokeRect(5, 0, r.width - 5, 30), a.moveTo(5, 141), a.lineTo(5, 30), a.stroke(), a.fillStyle = o.color, a.beginPath(), a.arc(5, 145, 4, 0, 2 * Math.PI), a.fill(), a.fillRect(10, 5, r.width - 15, 20), a.font = "bold 18px Arial", a.fillStyle = o.wordColor, a.textAlign = "center", a.fillText(o.name, r.width / 2, 20); var s = new d(r); s.needsUpdate = !0; var l = new ro({ map: s, color: 16777215, depthTest: o.alwaysVisible }), c = new vo(l); c.center.x = 0, c.center.y = 0, c.scale.set(o.scale * l.map.image.width, o.scale * l.map.image.height, 1), c.position.copy(o.position), c.updateMatrixWorld(), c.key = "" !== o.id ? o.id : c.uuid, e.addObjectToScene(o, c), "function" == typeof t && t(c.key) }, this.addObjectToScene = function (A, e) { A && A.id && e && (this.components[A.id] = e, this.allOids.push(A.id), this.marks[A.id] = A, t.addExternalObject(A.id, e)) }, this.updateMark = function (A, i) { if (e.marks[A]) { var o = Object.assign({}, e.marks[A], i), n = this.components[A]; if (n) { if (o.position.isVector3 || (o.position = new y(o.position[0], o.position[1], o.position[2])), Array.isArray(o.color)) o.color = "rgb(" + o.color[0] + "," + o.color[1] + "," + o.color[2] + ")"; if (Array.isArray(o.wordColor)) o.wordColor = "rgb(" + o.color[0] + "," + o.color[1] + "," + o.color[2] + ")"; var r = document.createElement("canvas"); r.width = 28 * o.name.length, r.height = 150; var a = r.getContext("2d"); a.fillStyle = "rgba(255, 255, 255, 0)", a.lineWidth = 2, a.strokeStyle = o.color, a.strokeRect(5, 0, r.width - 5, 30), a.moveTo(5, 141), a.lineTo(5, 30), a.stroke(), a.fillStyle = o.color, a.beginPath(), a.arc(5, 145, 4, 0, 2 * Math.PI), a.fill(), a.fillRect(10, 5, r.width - 15, 20), a.font = "bold 18px Arial", a.fillStyle = o.wordColor, a.textAlign = "center", a.fillText(o.name, r.width / 2, 20); var s = new d(r); s.needsUpdate = !0; var l = new ro({ map: s, color: 16777215, depthTest: o.alwaysVisible }); n.material = l, n.scale.set(o.scale * n.material.map.image.width, o.scale * n.material.map.image.height, 1), n.position.copy(o.position), n.updateMatrixWorld(), t.render(), e.marks[A] = o } } }, this.remove = function (A) { if (null == A) return { data: "未选中mark" }; Array.isArray(A) || (A = [A]); for (var i = 0; A.length > i; i += 1) { var o = e.allOids.indexOf(A[i]); e.allOids.splice(o, 1), delete e.components[A[i]], t.removeExternalObjectByName(A[i]) } }, this.hide = function (A) { if (null == A) return { data: "未选中mark" }; Array.isArray(A) || (A = [A]); for (var e = null, t = 0; A.length > t; t += 1) (e = this.components[A[t]]) && (e.visible = !1) }, this.show = function (A) { var t = null; if (A) { Array.isArray(A) || (A = [A]); for (var i = 0; A.length > i; i += 1) (t = this.components[A[i]]) && (t.visible = !0) } else for (var o in e.components) (t = e.components[o]) && (t.visible = !0) }, this.isolation = function (A) { if (null == A) return { data: "未选中mark" }; if (e.show(), e.allOids.length > 0) { var t = e.allOids.concat(); Array.isArray(A) || (A = [A]); for (var i = 0; A.length > i; i += 1) { var o = A[i]; if (-1 === e.allOids.indexOf(o)) return { data: "mark不存在" }; for (var n = 0; t.length > n; n += 1) if (o === t[n]) { t.splice(n, 1); break } } var r = null; for (n = 0; t.length > n; n += 1) (r = e.components[t[n]]) && (r.visible = !1) } }, this.listentoSelectMarks = function (A) { e.addEventListener("updated", (function () { e.SelectedMark !== {} ? A(e.SelectedMark.key ? e.SelectedMark.key : e.SelectedMark.uuid, e.SelectedMark) : A(null, null) })) } }; Object.assign(dB.prototype, Ld.prototype); var pB = function (A) { var e = this; this.Marks = new H, A.modelManager.scene.add(e.Marks), this.SelectedMark = {}, this.components = {}, this.allOids = []; var t = { id: "", name: "mark", scale: 20, width: 1, height: 1, alwaysVisible: !1, useImageSize: !0, color: "#000000", position: [0, 0, 0] }, i = new s, o = 0, n = 0; function r(A) { var e = [0, 0]; if (A) { for (var t = A.target, i = 0, o = 0; t.offsetParent;) i += t.offsetLeft, o += t.offsetTop, t = t.offsetParent; e[0] = A.pageX - i, e[1] = A.pageY - o } else A = window.event, e.x = A.x, e.y = A.y; return e } function a(t) { var o = new Dd, n = new y(i.x / A.domElement.clientWidth * 2 - 1, -i.y / A.domElement.clientHeight * 2 + 1, .5); o.setFromCamera(n, A.camera); var r = o.intersectObjects(e.Marks.children); r && r.length > 0 && e.SelectedMark !== r[0].object ? (e.SelectedMark = r[0].object, e.dispatchEvent("updated", { added: { objects: e.SelectedMark } })) : (e.SelectedMark = {}, e.dispatchEvent("updated", { removed: { objects: e.SelectedMark } })) } function l(A) { var e = r(A); i.x = o = e[0], i.y = n = e[1] } function c(A) { var e = r(A); (e[0] > o ? 5 > e[0] - o : 5 > o - e[0]) && (e[1] > n ? 5 > e[1] - n : 5 > n - e[1]) && (i.x = o = e[0], i.y = n = e[1], a()) } function h(A) { i.x = o = A.changedTouches[0].clientX, i.y = n = A.changedTouches[0].clientY } function p(A) { (A.changedTouches[0].clientX > o ? 5 > A.changedTouches[0].clientX - o : 5 > o - A.changedTouches[0].clientX) && (A.changedTouches[0].clientY > n ? 5 > A.changedTouches[0].clientY - n : 5 > n - A.changedTouches[0].clientY) && (i.x = o = A.changedTouches[0].clientX, i.y = n = A.changedTouches[0].clientY, a()) } this.active = !0, e.domElement = A.domElement, this.enabled = function () { this.mousedown = A.domElement.addEventListener("mousedown", l, !1), this.mouseup = A.domElement.addEventListener("mouseup", c, !1) }, this.disabled = function () { this.mousedown = A.domElement.removeEventListener("mousedown", l, !1), this.mouseup = A.domElement.removeEventListener("mouseup", c, !1) }, this.touchEnabled = function () { this.touchstart = A.domElement.addEventListener("touchstart", h, !1), this.touchend = A.domElement.addEventListener("touchend", p, !1) }, this.touchDisabled = function () { this.touchstart = A.domElement.removeEventListener("touchstart", h, !1), this.touchend = A.domElement.removeEventListener("touchend", p, !1) }, this.enabled(), this.add = function (i, o) { var n = Object.assign({}, t, i); if ("" !== n.id) for (var r = 0; e.allOids.length > r; r += 1) if (n.id === e.allOids[r]) return { data: "标签id重复" }; var a = document.createElement("canvas"); a.width = 24 * n.name.length, a.height = 32; var s = a.getContext("2d"); s.lineWidth = 3, s.strokeStyle = "#0000FF", s.strokeRect(0, 0, a.width, 32), s.fillStyle = "#FFFFFF", s.fillRect(3, 3, a.width - 6, 26), s.font = " bold 24px Arial", s.fillStyle = n.color, s.textAlign = "center", s.fillText(n.name, a.width / 2, 26), console.log(a.width); var l = new d(a); l.needsUpdate = !0; var c = new ro({ map: l, color: 16777215, depthTest: n.alwaysVisible }), h = new vo(c); h.scale.set(n.scale * c.map.image.width, n.scale * c.map.image.height, 1), n.position.isVector3 ? h.position.copy(n.position) : h.position.set(n.position[0], n.position[1], n.position[2]), h.updateMatrixWorld(), e.Marks.add(h), A.render(), "" !== n.id ? (h.key = n.id, e.components[n.id] = h, e.allOids.push(n.id)) : (h.key = h.uuid, e.components[h.uuid] = h, e.allOids.push(h.uuid)), "function" == typeof o && o(h.key) }, this.updateMark = function (i, o) { var n = Object.assign({}, t, o), r = null; if (e.components[i]) { r = e.components[i]; var a = document.createElement("canvas"); a.width = 24 * n.name.length, a.height = 32; var s = a.getContext("2d"); s.lineWidth = 3, s.strokeStyle = "#0000FF", s.strokeRect(0, 0, a.width, 32), s.fillStyle = "#FFFFFF", s.fillRect(3, 3, a.width - 6, 26), s.font = " bold 24px Arial", s.fillStyle = n.color, s.textAlign = "center", s.fillText(n.name, a.width / 2, 26); var l = new d(a); l.needsUpdate = !0; var c = new ro({ map: l, color: 16777215, depthTest: n.alwaysVisible }); r.material = c, r.scale.set(n.scale * r.material.map.image.width, n.scale * r.material.map.image.height, 1), n.position.isVector3 ? r.position.copy(n.position) : r.position.set(n.position[0], n.position[1], n.position[2]), r.updateMatrixWorld(), A.render() } }, this.remove = function (A) { if (null == A) return { data: "未选中mark" }; Array.isArray(A) || (A = [A]); for (var t = null, i = 0; A.length > i; i += 1) { t = e.components[A[i]]; var o = e.allOids.indexOf(A[i]); e.allOids.splice(o, 1), e.Marks.remove(t) } }, this.hide = function (A) { if (null == A) return { data: "未选中mark" }; Array.isArray(A) || (A = [A]); for (var t = null, i = 0; A.length > i; i += 1) (t = e.components[A[i]]) && (t.visible = !1) }, this.show = function (A) { var t = null; if (A) { Array.isArray(A) || (A = [A]); for (var i = 0; A.length > i; i += 1) (t = e.components[A[i]]) && (t.visible = !0) } else for (var o in e.components) (t = e.components[o]) && (t.visible = !0) }, this.isolation = function (A) { if (null == A) return { data: "未选中mark" }; if (e.show(), e.allOids.length > 0) { var t = e.allOids.concat(); Array.isArray(A) || (A = [A]); for (var i = 0; A.length > i; i += 1) { var o = A[i]; if (-1 === e.allOids.indexOf(o)) return { data: "mark不存在" }; for (var n = 0; t.length > n; n += 1) if (o === t[n]) { t.splice(n, 1); break } } var r = null; for (n = 0; t.length > n; n += 1) (r = e.components[t[n]]) && (r.visible = !1) } }, this.listentoSelectMarks = function (A) { e.addEventListener("updated", (function () { e.SelectedMark !== {} ? A(e.SelectedMark.key ? e.SelectedMark.key : e.SelectedMark.uuid, e.SelectedMark) : A(null, null) })) } }; Object.assign(pB.prototype, Ld.prototype); var gB = function A() { cc(this, A), this.type = "circle", this.lineHeight = 2, this.color = "#ff0000", this.titleColor = "#000000", this.titleBackgroundColor = "#ff0000", this.lineTitleBackgroundColor = "#ffffff" }, uB = function () { function A(e, t, i, o, n, r) { cc(this, A), this.lineTitle = t, this.icon = o, this.title = i, this.type = e.type, this.lineHeight = e.lineHeight, this.color = e.color, this.titleBackgroundColor = e.titleBackgroundColor, this.titleColor = e.titleColor, this.lineTitleBackgroundColor = e.lineTitleBackgroundColor, this.id = n, this.scenePoint = r, this.rootDiv = void 0, this.lineTitleDiv = void 0, this.contentDiv = void 0, this.lineStartPosition = { x: 0, y: 0 }, this.lineEndPosition = { x: 100, y: 100 }, this._iconSize = 30, this._marginLeft = 10, this._dragStart = this._dragStart.bind(this), this._dragMove = this._dragMove.bind(this), this._dragEnd = this._dragEnd.bind(this), this._lastDragPoint = void 0, this._init() } return dc(A, [{ key: "_init", value: function () { this.rootDiv = document.createElement("div"), this.rootDiv.style.cssText = "position:absolute; left: 0px; top: 0px;-moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; -khtml-user-select: none; user-select: none;"; var A = document.createElementNS("http://www.w3.org/2000/svg", "svg"); A.setAttribute("xmlns", "http://www.w3.org/2000/svg"), A.style.overflow = "visible", this.svg = A; var e = document.createElementNS("http://www.w3.org/2000/svg", "path"); e.style.fill = this.color, this.arrow = e, this.svg.appendChild(e), this.rootDiv.appendChild(A); var t = document.createElement("div"); t.style.position = "absolute", t.style.backgroundColor = "#ffffff", t.style.color = this.titleColor, t.innerText = this.lineTitle, this.lineTitleDiv = t, this.rootDiv.appendChild(t); var i = document.createElement("div"); this.contentDiv = i, this.contentDiv.addEventListener("mousedown", this._dragStart); var o = document.createElement("div"); if (this.titleDiv = o, o.style.display = "inline-block", o.style.color = this.titleColor, o.style.whiteSpace = "nowrap", o.style.overflow = "hidden", o.style.textOverflow = "ellipsis", o.style.maxWidth = "150px", o.style.position = "absolute", o.style.top = "50%", this.icon ? "circle" === this.type ? (o.style.left = "50%", o.style.transform = "translate(-50%, 5px)") : (o.style.left = "".concat(this._marginLeft + this._iconSize + 5, "px"), o.style.transform = "translate(0px, -50%)") : (o.style.left = "50%", o.style.transform = "translate(-50%, -50%)"), o.innerText = this.title, this.contentDiv.appendChild(o), this.icon) { var n = document.createElement("img"); n.style.width = "".concat(this._iconSize, "px"), n.style.height = "".concat(this._iconSize, "px"), n.style.position = "absolute", n.style.pointerEvents = "none", "circle" === this.type ? (n.style.left = "50%", n.style.top = "50%", n.style.transform = "translate(-50%, -100%)") : (n.style.left = "".concat(this._marginLeft, "px"), n.style.top = "50%", n.style.transform = "translate(0px, -50%)"), n.src = this.icon, this.contentDiv.appendChild(n) } this.rootDiv.appendChild(i) } }, { key: "setLineStartPosition", value: function (A, e) { this.lineStartPosition.x = A, this.lineStartPosition.y = e, this.update() } }, { key: "setLineEndPosition", value: function (A, e) { this.lineEndPosition.x = A, this.lineEndPosition.y = e, this.update() } }, { key: "setLineStartAndEndPoint", value: function (A, e, t, i) { this.lineStartPosition.x = A, this.lineStartPosition.y = e, this.lineEndPosition.x = t, this.lineEndPosition.y = i, this.update() } }, { key: "update", value: function () { var A = this.titleDiv.getBoundingClientRect(); A.width += 2 * this._marginLeft, "rectangle" === this.type && (this.icon && (A.width += this._iconSize, A.width += 5), A.height = 40); var e = this.lineEndPosition.x - this.lineStartPosition.x, t = this.lineEndPosition.y - this.lineStartPosition.y, i = Math.atan2(t, e); i > 0 || (i += 2 * Math.PI); var o = i / Math.PI * 180, n = Math.sqrt(e * e + t * t); if ("circle" === this.type) n -= A.width / 2; else { var r = Math.tan(i); Math.abs(r) > A.height / A.width ? n -= A.height / 2 / Math.abs(Math.sin(i)) : n -= A.width / 2 / Math.abs(Math.cos(i)) } n = Math.max(15, n); var a = 0, s = 0, l = "M".concat(a, " ").concat(s); l += "L".concat(a, " ").concat(s - this.lineHeight / 2), l += "L".concat(a + n - 10, " ").concat(s - this.lineHeight / 2), l += "A".concat(20, " ").concat(20, " 0 0 0 ").concat(a + n - 15, " ").concat(s - this.lineHeight / 2 - 10), l += "L".concat(a + n, " ").concat(s), l += "L".concat(a + n - 15, " ").concat(s + this.lineHeight / 2 + 10), l += "A".concat(20, " ").concat(20, " 0 0 0 ").concat(a + n - 10, " ").concat(s + this.lineHeight / 2), l += "L".concat(a, " ").concat(s + this.lineHeight / 2, "Z"), this.arrow.setAttributeNS(null, "d", l); var c = "translate(".concat(this.lineStartPosition.x, ", ").concat(this.lineStartPosition.y, ") rotate(").concat(o, ")"); this.arrow.setAttributeNS(null, "transform", c); var h = (this.lineStartPosition.y + this.lineEndPosition.y) / 2, d = "\n left:".concat((this.lineStartPosition.x + this.lineEndPosition.x) / 2, "px;top:").concat(h, "px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width:150px;\n position:absolute;\n transform:translate(-50%, -50%);\n background-color: ").concat(this.lineTitleBackgroundColor, ";\n "); this.lineTitleDiv.style.cssText = d; var p = this.lineEndPosition.x, g = this.lineEndPosition.y; d = "\n background-color:".concat(this.titleBackgroundColor, ";\n position: absolute;\n left:").concat(p, "px;\n top:").concat(g, "px;\n transform:translate(-50%,-50%);\n width:").concat(A.width, "px;\n cursor: move;\n "), d += "circle" === this.type ? "\n height:".concat(A.width, "px;\n border-radius:").concat(A.width, "px;\n ") : "\n height:".concat(A.height, "px;\n border-radius:4px;\n "), this.contentDiv.style.cssText = d } }, { key: "_dragStart", value: function (A) { 0 === A.button && (document.addEventListener("mousemove", this._dragMove), document.addEventListener("mouseup", this._dragEnd), this._lastDragPoint = { x: A.clientX, y: A.clientY }) } }, { key: "_dragMove", value: function (A) { if (this._lastDragPoint) { var e = A.clientY - this._lastDragPoint.y; this.lineEndPosition.x += A.clientX - this._lastDragPoint.x, this.lineEndPosition.y += e, this.update(), this._lastDragPoint.x = A.clientX, this._lastDragPoint.y = A.clientY } else this._lastDragPoint = { x: A.clientX, y: A.clientY } } }, { key: "_dragEnd", value: function (A) { this._lastDragPoint = void 0, document.removeEventListener("mousemove", this._dragMove), document.removeEventListener("mouseup", this._dragEnd) } }]), A }(), fB = function () { function A(e, t) { cc(this, A), this.viewer3D = e, this.EIMMODEL = t, this.THREE = t.THREE, this.marks = {}, this.arrowConfig = new gB, this.flag = 1, this.update = this.update.bind(this), e.registerCameraEventListener(this.EIMMODEL.EVENTS.ON_CAMERA_CHANGE, this.update) } return dc(A, [{ key: "testData", value: function () { return [{ lineTitle: "测试1", title: "测试1胜利大街发", icon: "data:image/png;base64,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", type: "rectangle" }, { lineTitle: "测试2", title: "测试2胜利大街发", icon: void 0, type: "rectangle" }, { lineTitle: "测试3", title: "测试3胜利大街发", icon: void 0, type: "rectangle" }, { lineTitle: "测试4", title: "测试4胜利大街发", icon: "data:image/png;base64,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", type: "circle" }, { lineTitle: "测试5", title: "测试5胜利大街发", icon: void 0, type: "rectangle" }, { lineTitle: "测试6", title: "测试6胜利大街发", icon: void 0, type: "circle" }, { lineTitle: "测试7", title: "测试7胜利大街发", icon: "data:image/png;base64,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", type: "rectangle" }] } }, { key: "addMarksAtComponent", value: function (A, e, t) { var i = this.viewer3D.getBoxByComponentsKey(A), o = new this.THREE.Vector3; i.getCenter(o); var n = o.toArray(), r = this.viewer3D.getViewerImpl().domElement, a = r.getBoundingClientRect(), s = this.viewer3D.getScreenCoordFromSceneCoord(o), l = e || this.arrowConfig, c = l.type, h = 0, d = [s[0] + 250, s[1]], p = 250, g = 0, u = 0; this.marks[A] || (this.marks[A] = []); for (var f = 0, m = t.length; m > f; f += 1) { var C = t[f]; l.type = C.type || c; var y = new uB(l, C.lineTitle, C.title, C.icon, this.flag, n); r.appendChild(y.rootDiv), y.setLineStartAndEndPoint(s[0], s[1], d[0], d[1]); var v = y.contentDiv.getBoundingClientRect(); if (f > 0) { u += 2 * Math.asin((v.height / 2 + h / 2) / 2 / 250), u += .1; var I = Math.cos(u), E = Math.sin(u), B = p * I + g * -E + s[0], x = p * E + g * I + s[1]; 0 > B ? B = v.width / 2 : B > a.width && (B = a.width - v.width / 2), 0 > x ? x = v.height / 2 : x > a.height && (x = a.height - v.height / 2), y.setLineEndPosition(B, x) } h = v.height, this.flag += 1, this.marks[A].push(y) } } }, { key: "addMarkAt", value: function (A, e, t, i, o) { var n = parseInt(A.x, 10).toString() + "_" + parseInt(A.y, 10).toString() + "_" + parseInt(A.z, 10).toString(), r = new uB(o || this.arrowConfig, e, t, i, this.flag, A), a = this.viewer3D.getViewerImpl().domElement; a.appendChild(r.rootDiv); var s = a.getBoundingClientRect(), l = this.viewer3D.getScreenCoordFromSceneCoord(A), c = [l[0], l[1]]; return l.x > s.width / 2 ? c[0] -= 250 : c[0] += 250, r.setLineStartAndEndPoint(l[0], l[1], c[0], c[1]), this.flag += 1, this.marks[n] || (this.marks[n] = []), this.marks[n].push(r), r } }, { key: "update", value: function () { var A = this, e = (new Date).getTime(); this._lastTime && e - this._lastTime < 25 || (this._lastTime = e, Object.keys(this.marks).forEach((function (e) { var t = A.marks[e], i = A.viewer3D.getScreenCoordFromSceneCoord(t[0].scenePoint); t.forEach((function (A) { A.setLineStartPosition(i[0], i[1]) })) }))) } }, { key: "destroy", value: function () { this.viewer3D.unregisterCameraEventListener(this.EIMMODEL.EVENTS.ON_CAMERA_CHANGE, this.update) } }]), A }(), mB = function (A) { this.Measurement = { pointMove: new y, pointPick: [], pointPickToScreen: [], pointAssist: [], pointAssistToScreen: [], needUpdatedObjects: [], pickLineP1: new y, pickLineP2: new y, planeSquare: {}, planeVolume: {}, measureWindow: {} }, this.renderer = A.viewerImpl.modelManager.renderer, this.scene = A.viewerImpl.modelManager.scene, this.camera = A.viewerImpl.camera.cameraPerspective, this.cameraControl = A.viewerImpl.cameraControl, this.intersect = null, this.domElement = A.viewerImpl.domElement, this.viewer = A.viewerImpl, this.SVG = document.getElementById("svgid" + A.getViewerImpl().uuid), this.SVGRect = A.SVGRect; var e = this; function t() { e.updatePos() } function i() { var t = A.getScreenCoordFromSceneCoord(e.Measurement.pickLineP1), i = A.getScreenCoordFromSceneCoord(e.Measurement.pickLineP2), o = new s(t[0], t[1]), n = new s(i[0], i[1]); e.SVGRect.createMoveLine(o, n) } this.movePoint = function (t) { if (t.pickLine || t.pickPlane || t.pickPoint) { e.SVGRect.deleteCircle(); var i = A.viewerImpl.cameraControl.screenToCanvas(t.event.clientX, t.event.clientY); e.SVGRect.creatMoveCircle(i); var o = e.cameraControl.getIntersectContext(new s(t.event.clientX, t.event.clientY)); if (e.cameraControl.intersector.pick(o, (function (t) { for (var o = t.object.geometry, n = o.attributes.position.array, r = o.attributes.position.count, a = 0; r > a; a += 1) { var s = new y(n[3 * a], n[3 * a + 1], n[3 * a + 2]); s.applyMatrix4(t.object.matrixWorld); var l = A.getScreenCoordFromSceneCoord(s); 15 > Math.sqrt((l[0] - i.x) * (l[0] - i.x) + (l[1] - i.y) * (l[1] - i.y)) && (e.Measurement.pointMove = s, e.SVGRect.changeMoveCircleStyle(l)) } })), t.pickLine) { e.Measurement.pickLineP1 = t.pickLine[0], e.Measurement.pickLineP2 = t.pickLine[1]; var n = A.getScreenCoordFromSceneCoord(t.pickLine[0].clone()), r = A.getScreenCoordFromSceneCoord(t.pickLine[1].clone()), a = new s(n[0], n[1]), l = new s(r[0], r[1]); e.SVGRect.createMoveLine(a, l) } } }, this.pickPoint = function (t) { if (t.pickLine || t.pickPlane || t.pickPoint) { 1 > e.Measurement.needUpdatedObjects.length || (e.SVGRect.deleteCircle(), e.SVGRect.deleteMoveLine(), e.SVGRect.deleteLineAndCircle(), e.Measurement.pointPick = [], e.Measurement.pointPickToScreen = [], e.Measurement.pointAssist = [], e.Measurement.pointAssistToScreen = [], e.Measurement.needUpdatedObjects = [], e.updatePos()); new y, new y, new y, new y; var i = null, o = t.pickPoint, n = (new s).fromArray(A.getScreenCoordFromSceneCoord(o)); e.Measurement.pointPick.push(o), e.Measurement.pointPickToScreen.push(n); var r = e.Measurement.pointPickToScreen.length; if (e.SVGRect.creatPickCircle(n, r - 1), r % 2 == 0 && r > 0) { var a = new y(e.Measurement.pointPick[r - 1].x, e.Measurement.pointPick[r - 2].y, e.Measurement.pointPick[r - 2].z), l = new y(e.Measurement.pointPick[r - 1].x, e.Measurement.pointPick[r - 2].y, e.Measurement.pointPick[r - 1].z); e.Measurement.pointAssist.push(a), e.Measurement.pointAssist.push(l); var c = A.getScreenCoordFromSceneCoord(a), h = A.getScreenCoordFromSceneCoord(l), d = new s(c[0], c[1]), p = new s(h[0], h[1]); e.SVGRect.creatLine(e.Measurement.pointPickToScreen[r - 2], d, "red", "red" + (r - 1)), e.SVGRect.creatLine(p, e.Measurement.pointPickToScreen[r - 1], "green", "green" + (r - 1)), e.SVGRect.creatLine(d, p, "blue", "blue" + (r - 1)), e.SVGRect.creatLine(e.Measurement.pointPickToScreen[r - 1], e.Measurement.pointPickToScreen[r - 2], "yellow", "yellow" + (r - 1)), e.Measurement.needUpdatedObjects.push({ point1: e.Measurement.pointPick[r - 2], point2: e.Measurement.pointPick[r - 1], asPot1: e.Measurement.pointAssist[r - 2], asPot2: e.Measurement.pointAssist[r - 1] }); var g = Math.abs(e.Measurement.pointPick[r - 1].x - e.Measurement.pointPick[r - 2].x), u = Math.abs(e.Measurement.pointPick[r - 1].y - e.Measurement.pointPick[r - 2].y), f = Math.abs(e.Measurement.pointPick[r - 1].z - e.Measurement.pointPick[r - 2].z), m = e.Measurement.pointPick[r - 1].distanceTo(e.Measurement.pointPick[r - 2]); i = { dx: g.toFixed(3), dy: u.toFixed(3), dz: f.toFixed(3), dis: m.toFixed(3) } } return i } }, this.clear = function () { e.SVGRect.deleteCircle(), e.SVGRect.deleteMoveLine(), e.SVGRect.deleteLineAndCircle(), e.Measurement.pointPick = [], e.Measurement.pointPickToScreen = [], e.Measurement.pointAssist = [], e.Measurement.pointAssistToScreen = [], e.Measurement.needUpdatedObjects = [], e.cameraControl.removeEventListener(Rc.ON_CAMERA_CHANGE, t), e.cameraControl.removeEventListener(Rc.ON_CAMERA_CHANGE, i) }, this.updatePos = function () { var t = e.Measurement.pointPick.length, i = e.Measurement.pointAssist.length, o = e.Measurement.needUpdatedObjects; if (i) for (var n = 0; o.length > n; n += 1) { var r = 2 * n, a = A.getScreenCoordFromSceneCoord(o[n].point1), l = A.getScreenCoordFromSceneCoord(o[n].point2), c = new s(a[0], a[1]), h = new s(l[0], l[1]); e.Measurement.pointPickToScreen[r] = c, e.Measurement.pointPickToScreen[r + 1] = h; var d = A.getScreenCoordFromSceneCoord(o[n].asPot1), p = A.getScreenCoordFromSceneCoord(o[n].asPot2), g = new s(d[0], d[1]), u = new s(p[0], p[1]); e.Measurement.pointAssistToScreen[r] = g, e.Measurement.pointAssistToScreen[r + 1] = u; var f = e.Measurement.pointPickToScreen[r].x, m = e.Measurement.pointPickToScreen[r].y, C = e.Measurement.pointPickToScreen[r + 1].x, y = e.Measurement.pointPickToScreen[r + 1].y, v = e.Measurement.pointAssistToScreen[r].x, I = e.Measurement.pointAssistToScreen[r].y, E = e.Measurement.pointAssistToScreen[r + 1].x, B = e.Measurement.pointAssistToScreen[r + 1].y, x = document.getElementById("circlePick" + A.getViewerImpl().uuid + r), S = document.getElementById("circlePick" + A.getViewerImpl().uuid + (r + 1)); x.setAttribute("cx", f), x.setAttribute("cy", m), S.setAttribute("cx", C), S.setAttribute("cy", y); var w = document.getElementById("pickline" + A.getViewerImpl().uuid + "red" + (r + 1)), M = document.getElementById("pickline" + A.getViewerImpl().uuid + "green" + (r + 1)), b = document.getElementById("pickline" + A.getViewerImpl().uuid + "blue" + (r + 1)), U = document.getElementById("pickline" + A.getViewerImpl().uuid + "yellow" + (r + 1)); w.setAttribute("x1", f), w.setAttribute("y1", m), w.setAttribute("x2", v), w.setAttribute("y2", I), M.setAttribute("x1", E), M.setAttribute("y1", B), M.setAttribute("x2", C), M.setAttribute("y2", y), b.setAttribute("x1", v), b.setAttribute("y1", I), b.setAttribute("x2", E), b.setAttribute("y2", B), U.setAttribute("x1", f), U.setAttribute("y1", m), U.setAttribute("x2", C), U.setAttribute("y2", y) } if (t % 2 == 1 && t !== i) { var F = A.getScreenCoordFromSceneCoord(e.Measurement.pointPick[t - 1]), K = new s(F[0], F[1]); e.Measurement.pointPickToScreen[t - 1] = K; f = K.x, m = K.y; (x = document.getElementById("circlePick" + A.getViewerImpl().uuid + (t - 1))).setAttribute("cx", f), x.setAttribute("cy", m) } }, this.addEventListener = function () { e.cameraControl.addEventListener(Rc.ON_CAMERA_CHANGE, t), e.cameraControl.addEventListener(Rc.ON_CAMERA_CHANGE, i) } }; Object.assign(mB.prototype, Ld.prototype); var CB = function () { function A(e) { cc(this, A), this.coef = e.coef || .5, this.controlPoints = e.controlPoints || [], this.pointCountRecord = e.pointCountRecord, this.formatConPoints = [], this.matrix = [], this.update = !0, this.points = [], this.controlPointsIndex = [], this.straightLineDistance = 0, this.curveLength = 0, this.updateCurveLength = !0, this.updateList = [], this.setCoef(this.coef), this._forMatConPoints() } return dc(A, [{ key: "setControlPoints", value: function (A) { this.controlPoints = A, this._forMatConPoints(), this.update = !0, this.updateList.push("controlPoints"), this.updateStraightLineDistance = !0 } }, { key: "getPoints", value: function () { return this.update && this._createPoints(this.pointCountRecord), this.points } }, { key: "setPointsCount", value: function (A) { this.updateList.push("count"), this.update = !0, this.pointCountRecord = A } }, { key: "getCurveLength", value: function () { return this.update ? { info: "参数已修改,请先更新曲线", code: -1, updateList: this.updateList } : (this.updateCurveLength && function () { var A = this.points, e = A.length; this.curveLength = A.reduce((function (A, t, i, o) { return e > i + 1 && (A += o[i].distanceTo(o[i + 1])), A }), 0), this.updateCurveLength = !1 } .bind(this)(), this.curveLength) } }, { key: "getStraightLineDistance", value: function () { return this.updateStraightLineDistance && function () { var A = this.controlPoints, e = A.length; this.straightLineDistance = A.reduce((function (A, t, i, o) { return e > i + 1 && (A += o[i].distanceTo(o[i + 1])), A }), 0), this.updateStraightLineDistance = !1 } .bind(this)(), this.straightLineDistance } }, { key: "setCoef", value: function (A) { this.updateList.push("coef"), this.update = !0, this.matrix = [ [-A, 2 - A, A - 2, A], [2 * A, A - 3, 3 - 2 * A, -A], [-A, 0, A, 0], [0, 1, 0, 0] ] } }, { key: "updateCurve", value: function () { return this.getPoints() } }, { key: "getPointsInfo", value: function () { return this.update ? { info: "参数已修改,请先更新曲线", code: -1, updateList: this.updateList } : { points: this.getPoints(), controlPointsIndex: this.controlPointsIndex, curveLength: this.getCurveLength(), straightLineDistance: this.getStraightLineDistance() } } }, { key: "_forMatConPoints", value: function () { var A = this.controlPoints; this.formatConPoints = []; for (var e = 0, t = A.length; t > e; e += 1) 0 === e ? this.formatConPoints.push(A[e].clone(), A[e].clone()) : t > e + 1 ? this.formatConPoints.push(A[e].clone()) : this.formatConPoints.push(A[e].clone(), A[e].clone()) } }, { key: "_createPoints", value: function (A) { var e = [], t = this.matrix; function i(A) { e[0] = new y, e[1] = new y, e[2] = new y, e[3] = new y; var i = []; i[0] = [], i[1] = [], i[2] = [], i[3] = [], i[0][0] = A[0].clone().multiplyScalar(t[0][0]), i[0][1] = A[1].clone().multiplyScalar(t[0][1]), i[0][2] = A[2].clone().multiplyScalar(t[0][2]), i[0][3] = A[3].clone().multiplyScalar(t[0][3]), i[1][0] = A[0].clone().multiplyScalar(t[1][0]), i[1][1] = A[1].clone().multiplyScalar(t[1][1]), i[1][2] = A[2].clone().multiplyScalar(t[1][2]), i[1][3] = A[3].clone().multiplyScalar(t[1][3]), i[2][0] = A[0].clone().multiplyScalar(t[2][0]), i[2][1] = A[1].clone().multiplyScalar(t[2][1]), i[2][2] = A[2].clone().multiplyScalar(t[2][2]), i[2][3] = A[3].clone().multiplyScalar(t[2][3]), i[3][0] = A[0].clone().multiplyScalar(t[3][0]), i[3][1] = A[1].clone().multiplyScalar(t[3][1]), i[3][2] = A[2].clone().multiplyScalar(t[3][2]), i[3][3] = A[3].clone().multiplyScalar(t[3][3]); for (var o = 0; 4 > o; o += 1) for (var n = 0; 4 > n; n += 1) e[o].add(i[o][n]) } function o(A) { var t = A * A, i = t * A; return e[0].clone().multiplyScalar(i).add(e[1].clone().multiplyScalar(t)).add(e[2].clone().multiplyScalar(A)).add(e[3].clone()) } var n = this.formatConPoints, r = this.points = [], a = this.controlPointsIndex = [], s = this.controlPoints; if (A) { for (var l = this.getStraightLineDistance(), c = 1 / A, h = 0, d = 0, p = 0, g = s.length - 1; g > p; p += 1) { h += s[p].distanceTo(s[p + 1]); var u = Math.floor(h / l / c) - d; i([n[p], n[p + 1], n[p + 2], n[p + 3]]); for (var f = 1 / u, m = 0; u > m; m += 1) { r.push(o(f * m)) } d += u } r.push(s[s.length - 1]) } else for (var C = 0, v = n.length; v > C; C += 1) { var I = 0 === C ? 0 : 1; if (C + 3 >= v) { r.push(n[C + 2]), a.push({ j: n[C + 1], order: -1 }); break } r.push(n[C + 1]), a.push({ j: n[C + 1], order: 100 * C + I }), i([n[C], n[C + 1], n[C + 2], n[C + 3]]); for (var E = 1; 100 > E; E += 1) r.push(o(E / 100)) } this.update = !1, this.updateCurveLength = !0, this.updateList = [] } }]), A }(), yB = function () { function A(e) { cc(this, A), this.coef = e.coef || .5, this.points = e.controlPoints || [], this.pointCountRecord = e.pointCountRecord, this.formatConPoints = [], this.matrix = [], this._points = [], this.controlPointsIndex = [], this.straightLineDistance = 0, this.count = 0, this.setCoef(this.coef), this._forMatConPoints(), this._calCount(), this.update = !0 } return dc(A, [{ key: "setControlPoints", value: function (A) { this.points = A, this._forMatConPoints(), this._calCount(), this._createPoints(), this.update = !0 } }, { key: "getPointAt", value: function (A) { this.update && this.getPoints(); var e = Math.ceil(A * this.count); return this._points[e > this.count ? this.count : e] } }, { key: "getPoints", value: function () { return this.update && this._createPoints(this.pointCountRecord), this._points } }, { key: "setCoef", value: function (A) { this.update = !0, this.matrix = [ [-A, 2 - A, A - 2, A], [2 * A, A - 3, 3 - 2 * A, -A], [-A, 0, A, 0], [0, 1, 0, 0] ] } }, { key: "getPointsInfo", value: function () { return { points: this.getPoints(), controlPointsIndex: this.controlPointsIndex } } }, { key: "_forMatConPoints", value: function () { var A = this.points; this.formatConPoints = []; for (var e = 0, t = A.length; t > e; e += 1) 0 === e ? this.formatConPoints.push(A[e].clone(), A[e].clone()) : t > e + 1 ? this.formatConPoints.push(A[e].clone()) : this.formatConPoints.push(A[e].clone(), A[e].clone()) } }, { key: "_calCount", value: function () { var A, e, t = this, i = 1 / 0; e = (A = t.points).length, t.straightLineDistance = A.reduce((function (A, t, o, n) { if (e > o + 1) { var r = n[o].distanceTo(n[o + 1]); i = r > i ? i : r, A += r } return A }), 0), t.updateStraightLineDistance = !1; var o = Math.ceil(t.straightLineDistance / i); this.count = o > 100 ? o : 100 } }, { key: "_createPoints", value: function () { var A = [], e = this.matrix; function t(t) { A[0] = new y, A[1] = new y, A[2] = new y, A[3] = new y; var i = []; i[0] = [], i[1] = [], i[2] = [], i[3] = [], i[0][0] = t[0].clone().multiplyScalar(e[0][0]), i[0][1] = t[1].clone().multiplyScalar(e[0][1]), i[0][2] = t[2].clone().multiplyScalar(e[0][2]), i[0][3] = t[3].clone().multiplyScalar(e[0][3]), i[1][0] = t[0].clone().multiplyScalar(e[1][0]), i[1][1] = t[1].clone().multiplyScalar(e[1][1]), i[1][2] = t[2].clone().multiplyScalar(e[1][2]), i[1][3] = t[3].clone().multiplyScalar(e[1][3]), i[2][0] = t[0].clone().multiplyScalar(e[2][0]), i[2][1] = t[1].clone().multiplyScalar(e[2][1]), i[2][2] = t[2].clone().multiplyScalar(e[2][2]), i[2][3] = t[3].clone().multiplyScalar(e[2][3]), i[3][0] = t[0].clone().multiplyScalar(e[3][0]), i[3][1] = t[1].clone().multiplyScalar(e[3][1]), i[3][2] = t[2].clone().multiplyScalar(e[3][2]), i[3][3] = t[3].clone().multiplyScalar(e[3][3]); for (var o = 0; 4 > o; o += 1) for (var n = 0; 4 > n; n += 1) A[o].add(i[o][n]) } for (var i, o, n, r = this.formatConPoints, a = this._points = [], s = this.controlPointsIndex = [], l = this.points, c = this.straightLineDistance, h = 0, d = 0, p = 0, g = l.length - 1; g > p; p += 1) { var u = (h += l[p].distanceTo(l[p + 1])) / c * this.count - d; t([r[p], r[p + 1], r[p + 2], r[p + 3]]), a.push(r[p + 1]), s.push({ j: r[p + 1], order: d }), d += 1; for (var f = 1; u > f; f += 1) a.push((o = void 0, n = void 0, n = (o = (i = f / u) * i) * i, A[0].clone().multiplyScalar(n).add(A[1].clone().multiplyScalar(o)).add(A[2].clone().multiplyScalar(i)).add(A[3].clone()))), d += 1 } a.push(l[l.length - 1]), s.push({ to: r[l.length - 1], order: -1 }), this.update = !1 } }]), A }(), vB = function () { function A(e) { return cc(this, A), A.shareInstance || (A.shareInstance = this, this.maxRequestCount = e || 300, this.currentPendingCount = 0, this._requests = [], this._requestDidLoad = this._requestDidLoad.bind(this), this._requestDidError = this._requestDidError.bind(this), this._requestDidAbort = this._requestDidAbort.bind(this), this._requestDidTimeout = this._requestDidTimeout.bind(this)), A.shareInstance } return dc(A, [{ key: "addRequest", value: function (A, e) { A.addEventListener("load", this._requestDidLoad), A.addEventListener("error", this._requestDidError), A.addEventListener("abort", this._requestDidAbort), A.addEventListener("timeout", this._requestDidTimeout), this.maxRequestCount > this.currentPendingCount ? (A.send(e), this.currentPendingCount += 1) : this._requests.push({ request: A, dataToSend: e }) } }, { key: "_sendNextRequest", value: function () { if (this._requests.length > 0) { var A = this._requests.shift(); A.request.send(A.dataToSend), this.currentPendingCount += 1 } } }, { key: "_requestDidLoad", value: function () { this.currentPendingCount -= 1, this._sendNextRequest() } }, { key: "_requestDidError", value: function () { this.currentPendingCount -= 1, this._sendNextRequest() } }, { key: "_requestDidAbort", value: function () { this.currentPendingCount -= 1, this._sendNextRequest() } }, { key: "_requestDidTimeout", value: function () { this.currentPendingCount -= 1, this._sendNextRequest() } }]), A }(), IB = { group: "group", model: "model", component: "component", components: "components" }, EB = function A() { cc(this, A), this.type = void 0, this.nodeId = void 0, this.matrix = void 0, this.center = void 0, this.modelKey = void 0, this.componentKey = void 0, this.componentsKey = void 0, this.children = void 0 }, BB = function () { function A(e, t, i, o) { cc(this, A), this.host = e, this.projectUrl = t, this.accessToken = i, this._cachedComponents = {}, this._cachedMaterials = {}, this._cachedGeometries = {}, this._cachedFile = {}, this._requestQueue = new vB(o) } return dc(A, [{ key: "destroy", value: function () { delete this._cachedComponents, delete this._cachedMaterials, delete this._cachedGeometries, delete this._cachedFile } }, { key: "getExternalObjectByModelKey", value: function (A) { var e = this; return "string" != typeof A ? Promise.reject("参数不合法") : this._loadModelInfo(A).then((function () { return e._loadComponentsListIn(A) })).then((function (A) { return e.getExternalObjectByComponentsKey(A) })) } }, { key: "getExternalObjectByComponentKey", value: function (A) { var e = this; if ("string" != typeof A) return Promise.reject("参数不合法"); var t = this._cachedComponents[A]; return t ? Promise.resolve(this._createMesh(t, !0)) : this._loadComponentsInfo([A]).then((function (A) { return e._generateMeshByComponentInfo(A[0]) })).then((function (A) { return A })) } }, { key: "getExternalObjectByComponentsKeyBackup", value: function (A) { var e = this; if (A instanceof Array == !1) return Promise.reject("参数不合法"); for (var t = [], i = [], o = {}, n = function (n, r) { var a = e.getExternalObjectByComponentKey(A[n]).then((function (A) { i.push(A) })).catch((function (e) { o[A[n]] = e })); t.push(a) }, r = 0, a = A.length; a > r; r += 1) n(r); return Promise.all(t).then((function () { if (i.length > 0) { i.length !== A.length && Bh.error(o); for (var e = new Xi, t = 0, n = i.length; n > t; t += 1) e.add(i[t]); return e } return Promise.reject(o) })) } }, { key: "getExternalObjectByComponentsKey", value: function (A) { var e = this; if (A instanceof Array == !1) return Promise.reject("参数不合法"); for (var t = [], i = {}, o = [], n = 0, r = A.length; r > n; n += 1) { var a = A[n], s = this._cachedComponents[a]; s ? t.push(this._createMesh(s, !0)) : o.push(a) } if (o.length > 0) return this._loadComponentsInfo(o).then((function (o) { for (var n = [], r = 0, a = o.length; a > r; r += 1) { var s = e._generateMeshByComponentInfo(o[r]).then((function (A) { t.push(A) })).catch((function (A) { i[A.componentKey] = A.message })); n.push(s) } return Promise.all(n).then((function () { if (t.length > 0) { t.length !== A.length && Bh.error(i); for (var e = new Xi, o = 0, n = t.length; n > o; o += 1) e.add(t[o]); return e } return Promise.reject(i) })) })); for (var l = new Xi, c = 0, h = t.length; h > c; c += 1) l.add(t[c]); return Promise.resolve(l) } }, { key: "testData", value: function () { var A = new EB; A.type = IB.group; var e = new EB; e.type = IB.component, e.componentKey = "M1577676674083_265272"; var t = new EB; t.type = IB.component, t.componentKey = "M1577676674083_265916"; var i = new EB; i.type = IB.component, i.componentKey = "M1577676674083_244449"; var o = (new M).makeTranslation(0, 0, 5e3); i.matrix = o.toArray(); var n = new EB; n.type = IB.group; var r = new EB; r.type = IB.component, r.componentKey = "M1577676674083_246705"; var a = new EB; a.type = IB.component, a.componentKey = "M1577676674083_247372", a.matrix = o.makeTranslation(0, 0, 7e3).toArray(); var s = new EB; return s.type = IB.component, s.componentKey = "M1577676674083_244910", A.children = [e, t, i, n], n.children = [r, a, s], A } }, { key: "getExternalObjectByNodeInfo", value: function (A) { var e = this, t = void 0; return A.type === IB.component && A.componentKey ? t = this.getExternalObjectByComponentKey(A.componentKey) : A.type === IB.components && A.componentsKey && A.componentsKey instanceof Array && A.componentsKey.length > 0 ? t = this.getExternalObjectByComponentsKey(A.componentsKey) : A.type === IB.model && A.modelKey ? t = this.getExternalObjectByModelKey(A.modelKey) : A.type === IB.group && A.children && A.children.length > 0 ? function () { for (var i = new Xi, o = [], n = function (t, n) { var r = A.children[t], a = e.getExternalObjectByNodeInfo(r).then((function (A) { i.add(A) })).catch((function (A) { return Bh.error(r, A), A })); o.push(a) }, r = 0, a = A.children.length; a > r; r += 1) n(r); t = Promise.all(o).then((function () { return i })) }() : t = Promise.reject("参数不合法"), t.then((function (e) { if (A.matrix) { var t = (new M).fromArray(A.matrix); e.matrix.identity(), e.applyMatrix4(t), e.updateMatrixWorld(!0) } if (A.center) { var i = (new aA).setFromObject(e), o = new y; if (i.getCenter(o), parseInt(A.center[0], 10) !== parseInt(o.x, 10) || parseInt(A.center[1], 10) !== parseInt(o.y, 10) || parseInt(A.center[2], 10) !== parseInt(o.z, 10)) { var n = (new y).fromArray(A.center).sub(o), r = (new M).makeTranslation(n.x, n.y, n.z); e.applyMatrix4(r), e.updateMatrixWorld(!0) } } return e })) } }, { key: "exportNodeInfoByComponents", value: function (A, e) { if (e) { var t = new EB; return 1 === e.length ? (t.type = IB.component, t.componentKey = e[0]) : (t.type = IB.components, t.componentsKey = e), t.nodeId = A, t } } }, { key: "exportNodeInfoByModelKey", value: function (A, e) { if (e) { var t = new EB; return t.type = IB.model, t.modelKey = e, t.nodeId = A, t } } }, { key: "_loadModelInfo", value: function (A) { return this._httpGet(this.host + "/api/" + this.projectUrl + "/models?modelKey=" + A) } }, { key: "_loadComponentsListIn", value: function (A) { return this._httpGet(this.host + "/api/" + this.projectUrl + "/components/keys?modelKey=" + A) } }, { key: "_loadComponentsInfo", value: function (A, e, t) { return this._httpPost(this.host + "/api/" + this.projectUrl + "/components/geometry", { components: A }) } }, { key: "_generateMeshByComponentInfo", value: function (A) { var e = this; if (!A.geometry) return Promise.reject({ componentKey: A.component, message: "几何为空" }); var t = {}; if (t.componentKey = A.component, A.matrix) { var i = (new M).fromArray(A.matrix); t.matrix = i } var o = A.materials, n = [], r = []; if (A.materials.length > 0) for (var a = function (t, i) { n.push(e._loadMaterial(o[t]).then((function (A) { r[t] = A })).catch((function (i) { Bh.error(i, "用默认材质代替"), r[t] = e._loadMaterialByType(A.type) }))) }, s = 0, l = o.length; l > s; s += 1) a(s); else { var c = this._loadMaterialByType(A.type); r.push(c), n.push(Promise.resolve(c)) } return Promise.all(n).then((function () { return t.materials = r, e._loadGeometry(A.geometry) })).then((function (A) { t.geometry = A; for (var i = 0, o = t.materials.length; o > i; i += 1) { var n = t.materials[i]; if (n.aoMap || n.lightMap) { t.geometry.setAttribute("uv2", new YA(t.geometry.attributes.uv.array, 2)); break } } return e._cachedComponents[t.componentKey] = t, e._createMesh(t, !1) })) } }, { key: "_loadMaterial", value: function (A) { var e = this, t = this._cachedMaterials[A.key]; if (t) return Promise.resolve(t.clone()); var i = A.data; return this._loadAllTextures(i).then((function (t) { var o = e._createMaterial(i, t); return e._cachedMaterials[A.key] = o, o })) } }, { key: "_loadMaterialByType", value: function (A) { var e = _u[A] ? _u[A].color : void 0; e || (e = _u.DEFAULT.color); var t = new LA(e[0], e[1], e[2]), i = t.getHexString() + "_" + e[3], o = this._cachedMaterials[i]; return o || ((o = Kd.createStandardMaterial({ color: t })).side = 2, this._cachedMaterials[i] = o), o } }, { key: "_loadGeometry", value: function (A) { var e = this, t = this._cachedGeometries[A]; return t ? Promise.resolve(t) : this._loadFile(A).then((function (t) { try { var i = new TextDecoder("utf-8").decode(t), o = JSON.parse(i), n = e._createGeometry(o); return n ? (e._cachedGeometries[A] = n, n) : Promise.reject("几何为空") } catch (A) { return Promise.reject(A.message) } })) } }, { key: "_loadAllTextures", value: function (A) { for (var e = this, t = [], i = this._getAllTextureFileKey(A), o = {}, n = function (A, n) { var r = i[A]; t.push(e._loadFile(r).then((function (A) { var t = e._createTexture(A); o[r] = t })).catch((function (A) { Bh.error(A) }))) }, r = 0, a = i.length; a > r; r += 1) n(r); return t.length > 0 ? new Promise((function (A, e) { Promise.all(t).then((function () { Object.keys(o).length > 0 ? A(o) : e("加载纹理失败") })) })) : Promise.resolve(o) } }, { key: "_getAllTextureFileKey", value: function (A) { var e = {}; return A.map && (e[A.map] = !0), A.aoMap && (e[A.aoMap] = !0), A.alphaMap && (e[A.alphaMap] = !0), A.envMap && (e[A.envMap] = !0), A.lightMap && (e[A.lightMap] = !0), A.emissiveMap && (e[A.emissiveMap] = !0), A.specularMap && (e[A.specularMap] = !0), A.specularMap && (e[A.specularMap] = !0), Object.keys(e) } }, { key: "_createTexture", value: function (A) { var e = new d, t = document.createElement("img"); e.wrapS = e.wrapT = 1e3, t.onerror = function (A) { Bh.error("加载纹理出错") }, t.onload = function (i) { "string" != typeof A && window.URL.revokeObjectURL(t.src), e.image = t, e.needsUpdate = !0 }; var i = new Blob([A]); return t.src = window.URL.createObjectURL(i), e } }, { key: "_createGeometry", value: function (A) { if (A.positions && 0 !== A.positions.length) { var e = null; e = new he; var t = new Float32Array(A.positions); e.setAttribute("position", new YA(t, 3)); var i = new Uint32Array(A.indices); if (e.setIndex(new YA(i, 1)), A.normals && A.normals.length > 0) { var o = new Float32Array(A.normals); e.setAttribute("normal", new YA(o, 3)) } else e.computeVertexNormals(); if (A.uv && A.uv.length > 0) { var n = new Float32Array(A.uv); e.setAttribute("uv", new YA(n, 2)) } if (void 0 !== A.materialIndices) { for (var r = null, a = [], s = void 0, l = 0; A.materialIndices.length > l; l += 1) { var c = A.materialIndices[l]; c !== s && (s = c, null != r && (r.count = 3 * l - r.start, a.push(r)), r = { start: 3 * l, materialIndex: s }) } null != r && (r.count = 3 * A.materialIndices.length - r.start, a.push(r)), e.groups = a } return e } } }, { key: "_createMaterial", value: function (A, e) { return Kd.createMaterialByMaterialBufferAndTexture(A, e) } }, { key: "_createMesh", value: function (A, e) { var t = null; if (e) { t = []; for (var i = 0, o = A.materials.length; o > i; i += 1) t.push(A.materials[i].clone()) } else t = A.materials; var n = new Kf(A.geometry, t); return n.visible = !0, n.key = A.componentKey, A.matrix && (n.applyMatrix4(A.matrix), n.updateMatrixWorld(!0)), n } }, { key: "_loadFile", value: function (A) { var e = this._cachedFile[A]; return e ? Promise.resolve(e) : this._http("GET", this.host + "/api/" + this.projectUrl + "/files?fileKey=" + A, "arraybuffer").then((function (A) { return A })) } }, { key: "_httpGet", value: function (A) { return this._http("GET", A) } }, { key: "_httpPost", value: function (A, e) { return this._http("POST", A, void 0, e) } }, { key: "_http", value: function (A, e, t, i) { var o = this; return new Promise((function (n, r) { var a = {}; "POST" === A && (a["Content-type"] = "application/json;charset=UTF-8"), o.accessToken && (a.Authorization = o.accessToken), _d({ type: A, url: e, headers: a, data: JSON.stringify(i), responseType: t || "json", requestQueue: o._requestQueue, success: function (A) { if (A) try { t && "json" !== t ? n(A) : A.data ? n(A.data) : "success" !== A.code.toLowerCase() && r(A.message ? A.message : "未知错误") } catch (A) { r(A.message) } else r("数据为空") }, error: function (A, e) { r(e) } }) })) } }]), A }(), xB = {}; xB.ToolBar = Xd; var SB = {}; SB.ModelCompares = $y, SB.DISPLAYMODEL = zy, SB.CompareGlobalData = Xy, SB.CompareComponentType = Zy, SB.COMPAREEVENTS = _y, SB.ViewerConnector = ev, SB.RoadNetManager = JE, SB.TextLoader = _E, SB.TrackSimulator = AB, SB.Heatmap = BE, SB.Fire = FE, SB.Water = eB, SB.WaterEffect = sv, SB.WaterEffectConfig = function () { this.boundary = [], this.color = new Xh("#80FDFF", .8), this.scale = 4, this.viewer = null, this.xDirection = 1, this.yDirection = 1, this.reflectivity = 1, this.reflectorTexturePosition = new y, this.refractorTexturePosition = new y, this.height = 0, this.geometry = null }, SB.ArrowManager = cv; var wB = {}; wB.Line2 = QE, wB.LineMaterial = YC, wB.LineGeometry = KE; for (var MB = {}, bB = Object.keys(sc), UB = 0; bB.length > UB; UB += 1) { var FB = bB[UB]; Object.defineProperty(MB, FB, { value: sc[FB], enumerable: !0, configurable: !0, writable: !1 }) } A.Animation = hp, A.ArrowDomMark = uB, A.ArrowDomMarkManager = fB, A.BOSCatmullRomCurve3 = CB, A.BOSCatmullRomCurve3ForFrameEdit = yB, A.BaseControl = Fg, A.CAMERATYPE = Ec, A.Camera = cp, A.CameraAnimator = dp, A.CameraControl = mp, A.CameraInfo = Qd, A.CameraUtil = Rd, A.ClipPlaneService = Ap, A.ClipPlanes = HC, A.ClipPlanesTool = vp, A.CollisionDetection = function (A) { this.cameraControl = A, this.intersector = A.intersector; var e = new Dd, t = new Dd, i = new Dd, o = new Dd, n = new Dd, r = new Dd; this.run = function (a, s) { var l = {}, c = this.cameraControl.getIntersectContext(null); e.set(a, new y(0, 0, 1)), t.set(a, new y(0, 0, -1)), n.set(a, s), r.set(a, new y(-s.x, -s.y, -s.z)), i.set(a, new y(-s.y, s.x, s.z)), o.set(a, new y(s.y, -s.x, s.z)), l.top = this.intersector.getIntersectByRay(c, e.ray), l.down = this.intersector.getIntersectByRay(c, t.ray), l.front = this.intersector.getIntersectByRay(c, n.ray), l.back = this.intersector.getIntersectByRay(c, r.ray), l.left = this.intersector.getIntersectByRay(c, i.ray), l.right = this.intersector.getIntersectByRay(c, o.ray); var h = new y(a.x, a.y, a.z - .8 * A.manHeight), d = new Dd; d.set(h, s); var p = new Dd; p.set(h, new y(-s.x, -s.y, -s.z)); var g = new Dd; g.set(h, new y(-s.y, s.x, s.z)); var u = new Dd; return u.set(h, new y(s.y, -s.x, s.z)), l.frontMiddle = this.intersector.getIntersectByRay(c, d.ray), l.backMiddle = this.intersector.getIntersectByRay(c, p.ray), l.leftMiddle = this.intersector.getIntersectByRay(c, g.ray), l.rightMiddle = this.intersector.getIntersectByRay(c, u.ray), l } }, A.Color = Xh, A.ColorPicker = Hh, A.ControlConfig = jh, A.ControlManager = Og, A.ControlMode = Gc, A.DOMMark = Od, A.DefaultInvisibleComponentType = bc, A.DefaultMaterial = _u, A.DeviceTest = mh, A.DomUtil = xh, A.DrawingStyle = jc, A.EIMMODELMaterial = ld, A.EVENTS = Rc, A.Edge = wp, A.EnumCesiumImageryLayerType = { AUTO: 0, BAIDU: 1, GAODE: 2, MAPBOX: 3, ARCGIS: 4, GOOGLE: 5 }, A.EnumConditionType = { HIDDEN_OTHERS: 0, TRANSLUCENT_OTHERS: 1, OVERRIDE: 2, BORDERLINE: 3 }, A.EnumDataProvider = Wc, A.EnumFilterState = zc, A.EnumIdBasedType = Dc, A.EnumInstanceState = Hc, A.EnumIsolateState = Nc, A.EnumObjectState = Lc, A.EnumRenderType = { RENDER: 0, RENDER_FINISHED: 1, RESIZE: 2 }, A.EnumRendererType = { AUTO: 0, FULL: 1, INCREMENT: 2 }, A.EnumSceneState = Vc, A.EnumShaderColorState = Yc, A.EnumTransparentState = Oc, A.EnumUserType = { HIDDEN_DATA: 0, OVERRIDE_DATA: 1, WITH_BOARDLINE: 2 }, A.EventDispatcher = Ld, A.ExternalObjectConverter = BB, A.ExternalObjectNodeInfo = EB, A.ExternalObjectNodeInfoType = IB, A.ExternalScene = ey, A.FillClipPlane = _C, A.FillClipPlaneTool = Sp, A.FilterResultMode = Jc, A.FullScreen = Wh, A.GLTFLoader = OC, A.GeomUtil = Tu, A.GlobalData = vc, A.Group = ep, A.IDENTITYMATRIX3 = xc, A.IDENTITYMATRIX4 = Bc, A.ImageResources = Pd, A.IntersectHelper = fp, A.KDNode = Zu, A.LOADERROREVENTS = Tc, A.LightType = Fc, A.LineSegmentsEx = cf, A.Lobibox = bh, A.LogLevels = Ch, A.MarkObject = Hd, A.MaterialEx = ay, A.MaterialUtil = Kd, A.MeasureTool = Eg, A.MeasurementManager = mB, A.MeshEx = Kf, A.ModelType = Zc, A.MoveDirection = qc, A.NodeItemType = { SYMBOL: 0, MESH: 1, TUBE: 2, PIPE: 3, BOX: 4, BOX_M: 5, PIPE_M: 6, MESH_REF: 7, LINE: 8 }, A.NoiseTextureType = xd, A.NormalControl = Qg, A.OPSELECTIONTYPE = Kc, A.OrbitControl = Rg, A.PICKABLETYPE = Qc, A.PhongLightingMaterial = jC, A.PickControl = kg, A.PickHelper = kp, A.PickUtil = wg, A.PlaneMark = Vd, A.Plugins = SB, A.PostilObject = Jd, A.PrimitiveCount = { vertexCount: 0, triangleCount: 0 }, A.Raycaster = Dd, A.RectOpTool = Mg, A.RectPickTool = bg, A.RectZoomTool = Ug, A.Roam = tB, A.RoamManager = oB, A.RoamPlayer = iB, A.RotatePivotMode = kc, A.RotationOrders = Ic, A.SVGRect = tp, A.Scene = oy, A.SceneStateHelper = ny, A.SectionPlane = hB, A.SelectPad = Dg, A.Snapshot = Zd, A.SpriteMark = Gd, A.StorageCache = AC, A.THREE = MB, A.THREEEX = wB, A.ThreeMark = dB, A.Tool = yp, A.ToolBar = Xd, A.ToolMode = Pc, A.UI = xB, A.Utils = uh, A.Version = "4.18.0", A.ViewController = lp, A.Viewer = Py, A.ViewerImpl = Gy, A.WalkControl = Lg, A.WordPlaneMark = pB, A.ajax = _d, A.buildEdge = Up, A.createNoiseTexture = Fd, A.getFaceIndex = Fp, A.getScript = function (A, e) { var t = {}; if (t[A]) e && e(); else { var i = document.createElement("script"); i.type = "text/javascript", i.src = A, document.head.appendChild(i), t[A] = !0, i.readyState ? i.onreadystatechange = function () { "loaded" !== i.readyState && "complete" !== i.readyState || (i.onreadystatechange = null, e && e()) } : i.onload = function () { e && e() } } }, A.i18nMessage = fh, A.logger = Bh, A.message = jd, A.removeDuplicateIndex = Mp, A.removeDuplicateVertex = bp, A.standardView = Uc, Object.defineProperty(A, "__esModule", { value: !0 }) })); //# sourceMappingURL=EIMMODEL.min.js.map