"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[258],{258:function(e,t,i){let s,r,n,a,A,o,l,h;/** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ let c=(e,t)=>"method"!==t.kind||!t.descriptor||"value"in t.descriptor?{kind:"field",key:Symbol(),placement:"own",descriptor:{},originalKey:t.key,initializer(){"function"==typeof t.initializer&&(this[t.key]=t.initializer.call(this))},finisher(i){i.createProperty(t.key,e)}}:{...t,finisher(i){i.createProperty(t.key,e)}};function u(e){return(t,i)=>void 0!==i?((e,t,i)=>{t.constructor.createProperty(i,e)})(e,t,i):c(e,t)}null!=(null===(I=window.HTMLSlotElement)||void 0===I?void 0:I.prototype.assignedElements)||((e,t)=>e.assignedNodes(t).filter(e=>e.nodeType===Node.ELEMENT_NODE));var g,d,p,m,I,f,E,C,B,y,Q,w,v,S,b,x,M,R,D,T,L,F,k,_,U,N,G,P,O,H,q,K,V,J,Y,j,z,$,W,X,Z,ee,et,ei,es,er,en,ea,eA,eo,el=i(9477);/** * @license * Copyright 2019 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ let eh=window,ec=eh.ShadowRoot&&(void 0===eh.ShadyCSS||eh.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,eu=Symbol(),eg=new WeakMap;class ed{constructor(e,t,i){if(this._$cssResult$=!0,i!==eu)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o,t=this.t;if(ec&&void 0===e){let i=void 0!==t&&1===t.length;i&&(e=eg.get(t)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),i&&eg.set(t,e))}return e}toString(){return this.cssText}}let ep=e=>new ed("string"==typeof e?e:e+"",void 0,eu),em=(e,t)=>{ec?e.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet):t.forEach(t=>{let i=document.createElement("style"),s=eh.litNonce;void 0!==s&&i.setAttribute("nonce",s),i.textContent=t.cssText,e.appendChild(i)})},eI=ec?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(let i of e.cssRules)t+=i.cssText;return ep(t)})(e):e,ef=window,eE=ef.trustedTypes,eC=eE?eE.emptyScript:"",eB=ef.reactiveElementPolyfillSupport,ey={toAttribute(e,t){switch(t){case Boolean:e=e?eC:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let i=e;switch(t){case Boolean:i=null!==e;break;case Number:i=null===e?null:Number(e);break;case Object:case Array:try{i=JSON.parse(e)}catch(s){i=null}}return i}},eQ=(e,t)=>t!==e&&(t==t||e==e),ew={attribute:!0,type:String,converter:ey,reflect:!1,hasChanged:eQ};class ev extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this.u()}static addInitializer(e){var t;this.finalize(),(null!==(t=this.h)&&void 0!==t?t:this.h=[]).push(e)}static get observedAttributes(){this.finalize();let e=[];return this.elementProperties.forEach((t,i)=>{let s=this._$Ep(i,t);void 0!==s&&(this._$Ev.set(s,i),e.push(s))}),e}static createProperty(e,t=ew){if(t.state&&(t.attribute=!1),this.finalize(),this.elementProperties.set(e,t),!t.noAccessor&&!this.prototype.hasOwnProperty(e)){let i="symbol"==typeof e?Symbol():"__"+e,s=this.getPropertyDescriptor(e,i,t);void 0!==s&&Object.defineProperty(this.prototype,e,s)}}static getPropertyDescriptor(e,t,i){return{get(){return this[t]},set(s){let r=this[e];this[t]=s,this.requestUpdate(e,r,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)||ew}static finalize(){if(this.hasOwnProperty("finalized"))return!1;this.finalized=!0;let e=Object.getPrototypeOf(this);if(e.finalize(),void 0!==e.h&&(this.h=[...e.h]),this.elementProperties=new Map(e.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){let t=this.properties,i=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(let s of i)this.createProperty(s,t[s])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(e){let t=[];if(Array.isArray(e)){let i=new Set(e.flat(1/0).reverse());for(let s of i)t.unshift(eI(s))}else void 0!==e&&t.push(eI(e));return t}static _$Ep(e,t){let i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof e?e.toLowerCase():void 0}u(){var e;this._$E_=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$Eg(),this.requestUpdate(),null===(e=this.constructor.h)||void 0===e||e.forEach(e=>e(this))}addController(e){var t,i;(null!==(t=this._$ES)&&void 0!==t?t:this._$ES=[]).push(e),void 0!==this.renderRoot&&this.isConnected&&(null===(i=e.hostConnected)||void 0===i||i.call(e))}removeController(e){var t;null===(t=this._$ES)||void 0===t||t.splice(this._$ES.indexOf(e)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach((e,t)=>{this.hasOwnProperty(t)&&(this._$Ei.set(t,this[t]),delete this[t])})}createRenderRoot(){var e;let t=null!==(e=this.shadowRoot)&&void 0!==e?e:this.attachShadow(this.constructor.shadowRootOptions);return em(t,this.constructor.elementStyles),t}connectedCallback(){var e;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(e=this._$ES)||void 0===e||e.forEach(e=>{var t;return null===(t=e.hostConnected)||void 0===t?void 0:t.call(e)})}enableUpdating(e){}disconnectedCallback(){var e;null===(e=this._$ES)||void 0===e||e.forEach(e=>{var t;return null===(t=e.hostDisconnected)||void 0===t?void 0:t.call(e)})}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$EO(e,t,i=ew){var s;let r=this.constructor._$Ep(e,i);if(void 0!==r&&!0===i.reflect){let n=(void 0!==(null===(s=i.converter)||void 0===s?void 0:s.toAttribute)?i.converter:ey).toAttribute(t,i.type);this._$El=e,null==n?this.removeAttribute(r):this.setAttribute(r,n),this._$El=null}}_$AK(e,t){var i;let s=this.constructor,r=s._$Ev.get(e);if(void 0!==r&&this._$El!==r){let n=s.getPropertyOptions(r),a="function"==typeof n.converter?{fromAttribute:n.converter}:void 0!==(null===(i=n.converter)||void 0===i?void 0:i.fromAttribute)?n.converter:ey;this._$El=r,this[r]=a.fromAttribute(t,n.type),this._$El=null}}requestUpdate(e,t,i){let s=!0;void 0!==e&&(((i=i||this.constructor.getPropertyOptions(e)).hasChanged||eQ)(this[e],t)?(this._$AL.has(e)||this._$AL.set(e,t),!0===i.reflect&&this._$El!==e&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(e,i))):s=!1),!this.isUpdatePending&&s&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(e){Promise.reject(e)}let t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var e;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach((e,t)=>this[t]=e),this._$Ei=void 0);let t=!1,i=this._$AL;try{(t=this.shouldUpdate(i))?(this.willUpdate(i),null===(e=this._$ES)||void 0===e||e.forEach(e=>{var t;return null===(t=e.hostUpdate)||void 0===t?void 0:t.call(e)}),this.update(i)):this._$Ek()}catch(s){throw t=!1,this._$Ek(),s}t&&this._$AE(i)}willUpdate(e){}_$AE(e){var t;null===(t=this._$ES)||void 0===t||t.forEach(e=>{var t;return null===(t=e.hostUpdated)||void 0===t?void 0:t.call(e)}),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(e){return!0}update(e){void 0!==this._$EC&&(this._$EC.forEach((e,t)=>this._$EO(t,this[t],e)),this._$EC=void 0),this._$Ek()}updated(e){}firstUpdated(e){}}ev.finalized=!0,ev.elementProperties=new Map,ev.elementStyles=[],ev.shadowRootOptions={mode:"open"},null==eB||eB({ReactiveElement:ev}),(null!==(f=ef.reactiveElementVersions)&&void 0!==f?f:ef.reactiveElementVersions=[]).push("1.4.2");let eS=window,eb=eS.trustedTypes,ex=eb?eb.createPolicy("lit-html",{createHTML:e=>e}):void 0,eM=`lit$${(Math.random()+"").slice(9)}$`,eR="?"+eM,eD=`<${eR}>`,eT=document,eL=(e="")=>eT.createComment(e),eF=e=>null===e||"object"!=typeof e&&"function"!=typeof e,ek=Array.isArray,e_=e=>ek(e)||"function"==typeof(null==e?void 0:e[Symbol.iterator]),eU=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,eN=/-->/g,eG=/>/g,eP=RegExp(">|[ \n\f\r](?:([^\\s\"'>=/]+)([ \n\f\r]*=[ \n\f\r]*(?:[^ \n\f\r\"'`<>=]|(\"|')|))|$)","g"),eO=/'/g,eH=/"/g,eq=/^(?:script|style|textarea|title)$/i,eK=e=>(t,...i)=>({_$litType$:e,strings:t,values:i}),eV=eK(1),eJ=(eK(2),Symbol.for("lit-noChange")),eY=Symbol.for("lit-nothing"),ej=new WeakMap,ez=eT.createTreeWalker(eT,129,null,!1),e$=(e,t)=>{let i=e.length-1,s=[],r,n=2===t?"":"",a=eU;for(let A=0;A"===h[0]?(a=null!=r?r:eU,c=-1):void 0===h[1]?c=-2:(c=a.lastIndex-h[2].length,l=h[1],a=void 0===h[3]?eP:'"'===h[3]?eH:eO):a===eH||a===eO?a=eP:a===eN||a===eG?a=eU:(a=eP,r=void 0);let g=a===eP&&e[A+1].startsWith("/>")?" ":"";n+=a===eU?o+eD:c>=0?(s.push(l),o.slice(0,c)+"$lit$"+o.slice(c)+eM+g):o+eM+(-2===c?(s.push(void 0),A):g)}let d=n+(e[i]||"")+(2===t?"":"");if(!Array.isArray(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return[void 0!==ex?ex.createHTML(d):d,s]};class eW{constructor({strings:e,_$litType$:t},i){let s;this.parts=[];let r=0,n=0,a=e.length-1,A=this.parts,[o,l]=e$(e,t);if(this.el=eW.createElement(o,i),ez.currentNode=this.el.content,2===t){let h=this.el.content,c=h.firstChild;c.remove(),h.append(...c.childNodes)}for(;null!==(s=ez.nextNode())&&A.length0){s.textContent=eb?eb.emptyScript:"";for(let C=0;C2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=eY}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,t=this,i,s){let r=this.strings,n=!1;if(void 0===r)(n=!eF(e=eX(this,e,t,0))||e!==this._$AH&&e!==eJ)&&(this._$AH=e);else{let a,A;let o=e;for(e=r[0],a=0;a{var s,r;let n=null!==(s=null==i?void 0:i.renderBefore)&&void 0!==s?s:t,a=n._$litPart$;if(void 0===a){let A=null!==(r=null==i?void 0:i.renderBefore)&&void 0!==r?r:null;n._$litPart$=a=new e0(t.insertBefore(eL(),A),A,void 0,null!=i?i:{})}return a._$AI(e),a};class e7 extends ev{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var e,t;let i=super.createRenderRoot();return null!==(e=(t=this.renderOptions).renderBefore)&&void 0!==e||(t.renderBefore=i.firstChild),i}update(e){let t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=e9(t,this.renderRoot,this.renderOptions)}connectedCallback(){var e;super.connectedCallback(),null===(e=this._$Do)||void 0===e||e.setConnected(!0)}disconnectedCallback(){var e;super.disconnectedCallback(),null===(e=this._$Do)||void 0===e||e.setConnected(!1)}render(){return eJ}}e7.finalized=!0,e7._$litElement$=!0,null===(C=globalThis.litElementHydrateSupport)||void 0===C||C.call(globalThis,{LitElement:e7});let te=globalThis.litElementPolyfillSupport;null==te||te({LitElement:e7}),(null!==(B=globalThis.litElementVersions)&&void 0!==B?B:globalThis.litElementVersions=[]).push("3.2.2");/* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ let tt=null!=navigator.xr&&null!=self.XRSession&&null!=navigator.xr.isSessionSupported,ti=tt&&null!=self.XRSession.prototype.requestHitTestSource,ts=null!=self.ResizeObserver,tr=null!=self.IntersectionObserver;(()=>{let e=navigator.userAgent||navigator.vendor||self.opera;/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4))})(),/\bCrOS\b/.test(navigator.userAgent);let tn=/android/i.test(navigator.userAgent),ta=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!self.MSStream||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1;/Safari\//.test(navigator.userAgent);let tA=/firefox/i.test(navigator.userAgent),to=/OculusBrowser/.test(navigator.userAgent);ta&&/CriOS\//.test(navigator.userAgent);let tl=tn&&!tA&&!to,th=Boolean(window.webkit&&window.webkit.messageHandlers),tc=(()=>{if(!ta)return!1;if(th)return Boolean(/CriOS\/|EdgiOS\/|FxiOS\/|GSA\/|DuckDuckGo\//.test(navigator.userAgent));{let e=document.createElement("a");return Boolean(e.relList&&e.relList.supports&&e.relList.supports("ar"))}})(),tu=e=>e&&"null"!==e?td(e):null,tg=()=>{if(ti)return;let e=[];throw tt||e.push("WebXR Device API"),ti||e.push("WebXR Hit Test API"),Error(`The following APIs are required for AR, but are missing in this browser: ${e.join(", ")}`)},td=e=>{let t=new URL(e,window.location.toString());return t.toString()},tp=(e,t)=>{let i=null,s=(...s)=>{null==i&&(e(...s),i=self.setTimeout(()=>i=null,t))};return s.flush=()=>{null!=i&&(self.clearTimeout(i),i=null)},s},tm=(e,t)=>{let i=null;return(...s)=>{null!=i&&self.clearTimeout(i),i=self.setTimeout(()=>{i=null,e(...s)},t)}},tI=(e,t,i)=>Math.max(t,Math.min(i,e)),tf=(()=>{let e=(()=>{var e;if(null===(e=document.documentElement.getAttribute("itemtype"))||void 0===e?void 0:e.includes("schema.org/SearchResultsPage"))return!0;let t=null!=document.head?Array.from(document.head.querySelectorAll("meta")):[];for(let i of t)if("viewport"===i.name)return!0;return!1})();return e||console.warn('No detected; will cap pixel density at 1.'),()=>e?window.devicePixelRatio:1})(),tE=(()=>{let e=RegExp("[?&]model-viewer-debug-mode(&|$)");return()=>self.ModelViewerElement&&self.ModelViewerElement.debugMode||self.location&&self.location.search&&self.location.search.match(e)})(),tC=(e=0)=>new Promise(t=>setTimeout(t,e)),tB=(e,t,i=null)=>new Promise(s=>{e.addEventListener(t,function r(n){(!i||i(n))&&(s(n),e.removeEventListener(t,r))})});/* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var ty=function(e,t,i,s){var r,n=arguments.length,a=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,i,s);else for(var A=e.length-1;A>=0;A--)(r=e[A])&&(a=(n<3?r(a):n>3?r(t,i,a):r(t,i))||a);return n>3&&a&&Object.defineProperty(t,i,a),a};let tQ=Symbol("currentEnvironmentMap"),tw=Symbol("currentBackground"),tv=Symbol("updateEnvironment"),tS=Symbol("cancelEnvironmentUpdate");/* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var tb=eV` `,tx=eV` `,tM=eV` `;/* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ let tR=eV`
`,tD=e=>{e9(tR,e)},tT=new WeakMap;class tL extends el.aNw{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,i,s){let r=new el.hH6(this.manager);r.setPath(this.path),r.setResponseType("arraybuffer"),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(e,e=>{this.decodeDracoFile(e,t).catch(s)},i,s)}decodeDracoFile(e,t,i,s){let r={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:s||this.defaultAttributeTypes,useUniqueIDs:!!i};return this.decodeGeometry(e,r).then(t)}decodeGeometry(e,t){let i;let s=JSON.stringify(t);if(tT.has(e)){let r=tT.get(e);if(r.key===s)return r.promise;if(0===e.byteLength)throw Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let n=this.workerNextTaskID++,a=e.byteLength,A=this._getWorker(n,a).then(s=>(i=s,new Promise((s,r)=>{i._callbacks[n]={resolve:s,reject:r},i.postMessage({type:"decode",id:n,taskConfig:t,buffer:e},[e])}))).then(e=>this._createGeometry(e.geometry));return A.catch(()=>!0).then(()=>{i&&n&&this._releaseTask(i,n)}),tT.set(e,{key:s,promise:A}),A}_createGeometry(e){let t=new el.u9r;e.index&&t.setIndex(new el.TlE(e.index.array,1));for(let i=0;i{i.load(e,t,void 0,s)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;let e="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(t=>{let i=t[0];e||(this.decoderConfig.wasmBinary=t[1]);let s=tF.toString(),r=["/* draco decoder */",i,"","/* worker */",s.substring(s.indexOf("{")+1,s.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([r]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.lengtht._taskLoad?-1:1});let s=this.workerPool[this.workerPool.length-1];return s._taskCosts[e]=t,s._taskLoad+=t,s})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e{let t=e.draco,i=new t.Decoder,a=new t.DecoderBuffer;a.Init(new Int8Array(r),r.byteLength);try{let A=function(e,t,i,s){let r,n;let a=s.attributeIDs,A=s.attributeTypes,o=t.GetEncodedGeometryType(i);if(o===e.TRIANGULAR_MESH)r=new e.Mesh,n=t.DecodeBufferToMesh(i,r);else if(o===e.POINT_CLOUD)r=new e.PointCloud,n=t.DecodeBufferToPointCloud(i,r);else throw Error("THREE.DRACOLoader: Unexpected geometry type.");if(!n.ok()||0===r.ptr)throw Error("THREE.DRACOLoader: Decoding failed: "+n.error_msg());let l={index:null,attributes:[]};for(let h in a){let c,u;let g=self[A[h]];if(s.useUniqueIDs)u=a[h],c=t.GetAttributeByUniqueId(r,u);else{if(-1===(u=t.GetAttributeId(r,e[a[h]])))continue;c=t.GetAttribute(r,u)}l.attributes.push(function(e,t,i,s,r,n){let a=n.num_components(),A=i.num_points(),o=A*a,l=o*r.BYTES_PER_ELEMENT,h=function(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}(e,r),c=e._malloc(l);t.GetAttributeDataArrayForAllPoints(i,n,h,l,c);let u=new r(e.HEAPF32.buffer,c,o).slice();return e._free(c),{name:s,array:u,itemSize:a}}(e,t,r,h,g,c))}return o===e.TRIANGULAR_MESH&&(l.index=function(e,t,i){let s=i.num_faces(),r=3*s,n=4*r,a=e._malloc(n);t.GetTrianglesUInt32Array(i,n,a);let A=new Uint32Array(e.HEAPF32.buffer,a,r).slice();return e._free(a),{array:A,itemSize:1}}(e,t,r)),e.destroy(r),l}(t,i,a,n),o=A.attributes.map(e=>e.array.buffer);A.index&&o.push(A.index.array.buffer),self.postMessage({type:"decode",id:s.id,geometry:A},o)}catch(l){console.error(l),self.postMessage({type:"error",id:s.id,error:l.message})}finally{t.destroy(a),t.destroy(i)}})}}}class tk extends el.aNw{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(e){return new tO(e)}),this.register(function(e){return new tj(e)}),this.register(function(e){return new tz(e)}),this.register(function(e){return new tq(e)}),this.register(function(e){return new tK(e)}),this.register(function(e){return new tV(e)}),this.register(function(e){return new tJ(e)}),this.register(function(e){return new tP(e)}),this.register(function(e){return new tY(e)}),this.register(function(e){return new tH(e)}),this.register(function(e){return new tN(e)}),this.register(function(e){return new t$(e)}),this.register(function(e){return new tW(e)})}load(e,t,i,s){let r;let n=this;r=""!==this.resourcePath?this.resourcePath:""!==this.path?this.path:el.Zp0.extractUrlBase(e),this.manager.itemStart(e);let a=function(t){s?s(t):console.error(t),n.manager.itemError(e),n.manager.itemEnd(e)},A=new el.hH6(this.manager);A.setPath(this.path),A.setResponseType("arraybuffer"),A.setRequestHeader(this.requestHeader),A.setWithCredentials(this.withCredentials),A.load(e,function(i){try{n.parse(i,r,function(i){t(i),n.manager.itemEnd(e)},a)}catch(s){a(s)}},i,a)}setDRACOLoader(e){return this.dracoLoader=e,this}setDDSLoader(){throw Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return -1===this.pluginCallbacks.indexOf(e)&&this.pluginCallbacks.push(e),this}unregister(e){return -1!==this.pluginCallbacks.indexOf(e)&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,i,s){let r;let n={},a={};if("string"==typeof e)r=JSON.parse(e);else if(e instanceof ArrayBuffer){let A=el.Zp0.decodeText(new Uint8Array(e,0,4));if(A===tX){try{n[tU.KHR_BINARY_GLTF]=new t0(e)}catch(o){s&&s(o);return}r=JSON.parse(n[tU.KHR_BINARY_GLTF].content)}else r=JSON.parse(el.Zp0.decodeText(new Uint8Array(e)))}else r=e;if(void 0===r.asset||r.asset.version[0]<2){s&&s(Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}let l=new ig(r,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});l.fileLoader.setRequestHeader(this.requestHeader);for(let h=0;h=0&&void 0===a[g]&&console.warn('THREE.GLTFLoader: Unknown extension "'+g+'".')}}l.setExtensions(n),l.setPlugins(a),l.parse(i,s)}parseAsync(e,t){let i=this;return new Promise(function(s,r){i.parse(e,t,s,r)})}}function t_(){let e={};return{get:function(t){return e[t]},add:function(t,i){e[t]=i},remove:function(t){delete e[t]},removeAll:function(){e={}}}}let tU={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:"KHR_materials_pbrSpecularGlossiness",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class tN{constructor(e){this.parser=e,this.name=tU.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let i=0,s=t.length;i=0))return null;throw Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures")}return t.loadTextureImage(e,r.source,n)}}class tz{constructor(e){this.parser=e,this.name=tU.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){let t=this.name,i=this.parser,s=i.json,r=s.textures[e];if(!r.extensions||!r.extensions[t])return null;let n=r.extensions[t],a=s.images[n.source],A=i.textureLoader;if(a.uri){let o=i.options.manager.getHandler(a.uri);null!==o&&(A=o)}return this.detectSupport().then(function(r){if(r)return i.loadTextureImage(e,n.source,A);if(s.extensionsRequired&&s.extensionsRequired.indexOf(t)>=0)throw Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return i.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){let t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(1===t.height)}})),this.isSupported}}class t${constructor(e){this.name=tU.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){let t=this.parser.json,i=t.bufferViews[e];if(!i.extensions||!i.extensions[this.name])return null;{let s=i.extensions[this.name],r=this.parser.getDependency("buffer",s.buffer),n=this.parser.options.meshoptDecoder;if(!n||!n.supported){if(!(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0))return null;throw Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files")}return r.then(function(e){let t=s.byteOffset||0,i=s.byteLength||0,r=s.count,a=s.byteStride,A=new Uint8Array(e,t,i);return n.decodeGltfBufferAsync?n.decodeGltfBufferAsync(r,a,A,s.mode,s.filter).then(function(e){return e.buffer}):n.ready.then(function(){let e=new ArrayBuffer(r*a);return n.decodeGltfBuffer(new Uint8Array(e),r,a,A,s.mode,s.filter),e})})}}}class tW{constructor(e){this.name=tU.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){let t=this.parser.json,i=t.nodes[e];if(!i.extensions||!i.extensions[this.name]||void 0===i.mesh)return null;let s=t.meshes[i.mesh];for(let r of s.primitives)if(r.mode!==t7.TRIANGLES&&r.mode!==t7.TRIANGLE_STRIP&&r.mode!==t7.TRIANGLE_FAN&&void 0!==r.mode)return null;let n=i.extensions[this.name],a=n.attributes,A=[],o={};for(let l in a)A.push(this.parser.getDependency("accessor",a[l]).then(e=>(o[l]=e,o[l])));return A.length<1?null:(A.push(this.parser.createNodeMesh(e)),Promise.all(A).then(e=>{let t=e.pop(),i=t.isGroup?t.children:[t],s=e[0].count,r=[];for(let n of i){let a=new el.yGw,A=new el.Pa4,l=new el._fP,h=new el.Pa4(1,1,1),c=new el.SPe(n.geometry,n.material,s);for(let u=0;u","#ifdef USE_SPECULARMAP\n uniform sampler2D specularMap;\n#endif").replace("#include ","#ifdef USE_GLOSSINESSMAP\n uniform sampler2D glossinessMap;\n#endif").replace("#include ","vec3 specularFactor = specular;\n#ifdef USE_SPECULARMAP\n vec4 texelSpecular = texture2D( specularMap, vUv );\n // reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture\n specularFactor *= texelSpecular.rgb;\n#endif").replace("#include ","float glossinessFactor = glossiness;\n#ifdef USE_GLOSSINESSMAP\n vec4 texelGlossiness = texture2D( glossinessMap, vUv );\n // reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture\n glossinessFactor *= texelGlossiness.a;\n#endif").replace("#include ","PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1. - max( specularFactor.r, max( specularFactor.g, specularFactor.b ) ) );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( 1.0 - glossinessFactor, 0.0525 ); // 0.0525 corresponds to the base mip of a 256 cubemap.\nmaterial.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\nmaterial.specularColor = specularFactor;")},Object.defineProperties(this,{specular:{get:function(){return t.specular.value},set:function(e){t.specular.value=e}},specularMap:{get:function(){return t.specularMap.value},set:function(e){t.specularMap.value=e,e?this.defines.USE_SPECULARMAP="":delete this.defines.USE_SPECULARMAP}},glossiness:{get:function(){return t.glossiness.value},set:function(e){t.glossiness.value=e}},glossinessMap:{get:function(){return t.glossinessMap.value},set:function(e){t.glossinessMap.value=e,e?(this.defines.USE_GLOSSINESSMAP="",this.defines.USE_UV=""):(delete this.defines.USE_GLOSSINESSMAP,delete this.defines.USE_UV)}}}),delete this.metalness,delete this.roughness,delete this.metalnessMap,delete this.roughnessMap,this.setValues(e)}copy(e){return super.copy(e),this.specularMap=e.specularMap,this.specular.copy(e.specular),this.glossinessMap=e.glossinessMap,this.glossiness=e.glossiness,delete this.metalness,delete this.roughness,delete this.metalnessMap,delete this.roughnessMap,this}}class t4{constructor(){this.name=tU.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS,this.specularGlossinessParams=["color","map","lightMap","lightMapIntensity","aoMap","aoMapIntensity","emissive","emissiveIntensity","emissiveMap","bumpMap","bumpScale","normalMap","normalMapType","displacementMap","displacementScale","displacementBias","specularMap","specular","glossinessMap","glossiness","alphaMap","envMap","envMapIntensity"]}getMaterialType(){return t3}extendParams(e,t,i){let s=t.extensions[this.name];e.color=new el.Ilk(1,1,1),e.opacity=1;let r=[];if(Array.isArray(s.diffuseFactor)){let n=s.diffuseFactor;e.color.fromArray(n),e.opacity=n[3]}if(void 0!==s.diffuseTexture&&r.push(i.assignTexture(e,"map",s.diffuseTexture,el.knz)),e.emissive=new el.Ilk(0,0,0),e.glossiness=void 0!==s.glossinessFactor?s.glossinessFactor:1,e.specular=new el.Ilk(1,1,1),Array.isArray(s.specularFactor)&&e.specular.fromArray(s.specularFactor),void 0!==s.specularGlossinessTexture){let a=s.specularGlossinessTexture;r.push(i.assignTexture(e,"glossinessMap",a)),r.push(i.assignTexture(e,"specularMap",a,el.knz))}return Promise.all(r)}createMaterial(e){let t=new t3(e);return t.fog=!0,t.color=e.color,t.map=void 0===e.map?null:e.map,t.lightMap=null,t.lightMapIntensity=1,t.aoMap=void 0===e.aoMap?null:e.aoMap,t.aoMapIntensity=1,t.emissive=e.emissive,t.emissiveIntensity=void 0===e.emissiveIntensity?1:e.emissiveIntensity,t.emissiveMap=void 0===e.emissiveMap?null:e.emissiveMap,t.bumpMap=void 0===e.bumpMap?null:e.bumpMap,t.bumpScale=1,t.normalMap=void 0===e.normalMap?null:e.normalMap,t.normalMapType=el.IOt,e.normalScale&&(t.normalScale=e.normalScale),t.displacementMap=null,t.displacementScale=1,t.displacementBias=0,t.specularMap=void 0===e.specularMap?null:e.specularMap,t.specular=e.specular,t.glossinessMap=void 0===e.glossinessMap?null:e.glossinessMap,t.glossiness=e.glossiness,t.alphaMap=null,t.envMap=void 0===e.envMap?null:e.envMap,t.envMapIntensity=1,t}}class t8{constructor(){this.name=tU.KHR_MESH_QUANTIZATION}}class t5 extends el._C8{constructor(e,t,i,s){super(e,t,i,s)}copySampleValue_(e){let t=this.resultBuffer,i=this.sampleValues,s=this.valueSize,r=e*s*3+s;for(let n=0;n!==s;n++)t[n]=i[r+n];return t}interpolate_(e,t,i,s){let r=this.resultBuffer,n=this.sampleValues,a=this.valueSize,A=2*a,o=3*a,l=s-t,h=(i-t)/l,c=h*h,u=c*h,g=e*o,d=g-o,p=-2*u+3*c,m=u-c,I=1-p,f=m-c+h;for(let E=0;E!==a;E++){let C=n[d+E+a],B=n[d+E+A]*l,y=n[g+E+a],Q=n[g+E]*l;r[E]=I*C+f*B+p*y+m*Q}return r}}let t6=new el._fP;class t9 extends t5{interpolate_(e,t,i,s){let r=super.interpolate_(e,t,i,s);return t6.fromArray(r).normalize().toArray(r),r}}let t7={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123},ie={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},it={9728:el.TyD,9729:el.wem,9984:el.YLQ,9985:el.qyh,9986:el.aH4,9987:el.D1R},ii={33071:el.uWy,33648:el.OoA,10497:el.rpg},is={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},ir={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv2",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},ia={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},iA={CUBICSPLINE:void 0,LINEAR:el.NMF,STEP:el.Syv},io={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function il(e,t,i){for(let s in i.extensions)void 0===e[s]&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[s]=i.extensions[s])}function ih(e,t){void 0!==t.extras&&("object"==typeof t.extras?Object.assign(e.userData,t.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+t.extras))}function ic(e){let t="",i=Object.keys(e).sort();for(let s=0,r=i.length;s-1,r=s?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1;"undefined"==typeof createImageBitmap||i||s&&r<98?this.textureLoader=new el.dpR(this.options.manager):this.textureLoader=new el.QRU(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new el.hH6(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){let i=this,s=this.json,r=this.extensions;this.cache.removeAll(),this._invokeAll(function(e){return e._markDefs&&e._markDefs()}),Promise.all(this._invokeAll(function(e){return e.beforeRoot&&e.beforeRoot()})).then(function(){return Promise.all([i.getDependencies("scene"),i.getDependencies("animation"),i.getDependencies("camera")])}).then(function(t){let n={scene:t[0][s.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:s.asset,parser:i,userData:{}};il(r,n,s),ih(n,s),Promise.all(i._invokeAll(function(e){return e.afterRoot&&e.afterRoot(n)})).then(function(){e(n)})}).catch(t)}_markDefs(){let e=this.json.nodes||[],t=this.json.skins||[],i=this.json.meshes||[];for(let s=0,r=t.length;s{let i=this.associations.get(e);for(let[s,n]of(null!=i&&this.associations.set(t,i),e.children.entries()))r(n,t.children[s])};return r(i,s),s.name+="_instance_"+e.uses[t]++,s}_invokeOne(e){let t=Object.values(this.plugins);t.push(this);for(let i=0;i=2&&n.setY(w,B[y*A+1]),A>=3&&n.setZ(w,B[y*A+2]),A>=4&&n.setW(w,B[y*A+3]),A>=5)throw Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return n})}loadTexture(e){let t=this.json,i=this.options,s=t.textures[e],r=s.source,n=t.images[r],a=this.textureLoader;if(n.uri){let A=i.manager.getHandler(n.uri);null!==A&&(a=A)}return this.loadTextureImage(e,r,a)}loadTextureImage(e,t,i){let s=this,r=this.json,n=r.textures[e],a=r.images[t],A=(a.uri||a.bufferView)+":"+n.sampler;if(this.textureCache[A])return this.textureCache[A];let o=this.loadImageSource(t,i).then(function(t){t.flipY=!1,t.name=n.name||a.name||"";let i=r.samplers||{},A=i[n.sampler]||{};return t.magFilter=it[A.magFilter]||el.wem,t.minFilter=it[A.minFilter]||el.D1R,t.wrapS=ii[A.wrapS]||el.rpg,t.wrapT=ii[A.wrapT]||el.rpg,s.associations.set(t,{textures:e}),t}).catch(function(){return null});return this.textureCache[A]=o,o}loadImageSource(e,t){let i=this.json,s=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then(e=>e.clone());let r=i.images[e],n=self.URL||self.webkitURL,a=r.uri||"",A=!1;if(void 0!==r.bufferView)a=this.getDependency("bufferView",r.bufferView).then(function(e){A=!0;let t=new Blob([e],{type:r.mimeType});return a=n.createObjectURL(t)});else if(void 0===r.uri)throw Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");let o=Promise.resolve(a).then(function(e){return new Promise(function(i,r){let n=i;!0===t.isImageBitmapLoader&&(n=function(e){let t=new el.xEZ(e);t.needsUpdate=!0,i(t)}),t.load(el.Zp0.resolveURL(e,s.path),n,void 0,r)})}).then(function(e){var t;return!0===A&&n.revokeObjectURL(a),e.userData.mimeType=r.mimeType||((t=r.uri).search(/\.jpe?g($|\?)/i)>0||0===t.search(/^data\:image\/jpeg/)?"image/jpeg":t.search(/\.webp($|\?)/i)>0||0===t.search(/^data\:image\/webp/)?"image/webp":"image/png"),e}).catch(function(e){throw console.error("THREE.GLTFLoader: Couldn't load texture",a),e});return this.sourceCache[e]=o,o}assignTexture(e,t,i,s){let r=this;return this.getDependency("texture",i.index).then(function(n){if(void 0===i.texCoord||0==i.texCoord||"aoMap"===t&&1==i.texCoord||console.warn("THREE.GLTFLoader: Custom UV set "+i.texCoord+" for texture "+t+" not yet supported."),r.extensions[tU.KHR_TEXTURE_TRANSFORM]){let a=void 0!==i.extensions?i.extensions[tU.KHR_TEXTURE_TRANSFORM]:void 0;if(a){let A=r.associations.get(n);n=r.extensions[tU.KHR_TEXTURE_TRANSFORM].extendTexture(n,a),r.associations.set(n,A)}}return void 0!==s&&(n.encoding=s),e[t]=n,n})}assignFinalMaterial(e){let t=e.geometry,i=e.material,s=void 0===t.attributes.tangent,r=void 0!==t.attributes.color,n=void 0===t.attributes.normal;if(e.isPoints){let a="PointsMaterial:"+i.uuid,A=this.cache.get(a);A||(A=new el.UY4,el.F5T.prototype.copy.call(A,i),A.color.copy(i.color),A.map=i.map,A.sizeAttenuation=!1,this.cache.add(a,A)),i=A}else if(e.isLine){let o="LineBasicMaterial:"+i.uuid,l=this.cache.get(o);l||(l=new el.nls,el.F5T.prototype.copy.call(l,i),l.color.copy(i.color),this.cache.add(o,l)),i=l}if(s||r||n){let h="ClonedMaterial:"+i.uuid+":";i.isGLTFSpecularGlossinessMaterial&&(h+="specular-glossiness:"),s&&(h+="derivative-tangents:"),r&&(h+="vertex-colors:"),n&&(h+="flat-shading:");let c=this.cache.get(h);c||(c=i.clone(),r&&(c.vertexColors=!0),n&&(c.flatShading=!0),s&&(c.normalScale&&(c.normalScale.y*=-1),c.clearcoatNormalScale&&(c.clearcoatNormalScale.y*=-1)),this.cache.add(h,c),this.associations.set(c,this.associations.get(i))),i=c}i.aoMap&&void 0===t.attributes.uv2&&void 0!==t.attributes.uv&&t.setAttribute("uv2",t.attributes.uv),e.material=i}getMaterialType(){return el.Wid}loadMaterial(e){let t;let i=this,s=this.json,r=this.extensions,n=s.materials[e],a={},A=n.extensions||{},o=[];if(A[tU.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]){let l=r[tU.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS];t=l.getMaterialType(),o.push(l.extendParams(a,n,i))}else if(A[tU.KHR_MATERIALS_UNLIT]){let h=r[tU.KHR_MATERIALS_UNLIT];t=h.getMaterialType(),o.push(h.extendParams(a,n,i))}else{let c=n.pbrMetallicRoughness||{};if(a.color=new el.Ilk(1,1,1),a.opacity=1,Array.isArray(c.baseColorFactor)){let u=c.baseColorFactor;a.color.fromArray(u),a.opacity=u[3]}void 0!==c.baseColorTexture&&o.push(i.assignTexture(a,"map",c.baseColorTexture,el.knz)),a.metalness=void 0!==c.metallicFactor?c.metallicFactor:1,a.roughness=void 0!==c.roughnessFactor?c.roughnessFactor:1,void 0!==c.metallicRoughnessTexture&&(o.push(i.assignTexture(a,"metalnessMap",c.metallicRoughnessTexture)),o.push(i.assignTexture(a,"roughnessMap",c.metallicRoughnessTexture))),t=this._invokeOne(function(t){return t.getMaterialType&&t.getMaterialType(e)}),o.push(Promise.all(this._invokeAll(function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,a)})))}!0===n.doubleSided&&(a.side=el.ehD);let g=n.alphaMode||io.OPAQUE;if(g===io.BLEND?(a.transparent=!0,a.depthWrite=!1):(a.transparent=!1,g===io.MASK&&(a.alphaTest=void 0!==n.alphaCutoff?n.alphaCutoff:.5)),void 0!==n.normalTexture&&t!==el.vBJ&&(o.push(i.assignTexture(a,"normalMap",n.normalTexture)),a.normalScale=new el.FM8(1,1),void 0!==n.normalTexture.scale)){let d=n.normalTexture.scale;a.normalScale.set(d,d)}return void 0!==n.occlusionTexture&&t!==el.vBJ&&(o.push(i.assignTexture(a,"aoMap",n.occlusionTexture)),void 0!==n.occlusionTexture.strength&&(a.aoMapIntensity=n.occlusionTexture.strength)),void 0!==n.emissiveFactor&&t!==el.vBJ&&(a.emissive=new el.Ilk().fromArray(n.emissiveFactor)),void 0!==n.emissiveTexture&&t!==el.vBJ&&o.push(i.assignTexture(a,"emissiveMap",n.emissiveTexture,el.knz)),Promise.all(o).then(function(){let s;return s=t===t3?r[tU.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS].createMaterial(a):new t(a),n.name&&(s.name=n.name),ih(s,n),i.associations.set(s,{materials:e}),n.extensions&&il(r,s,n),s})}createUniqueName(e){let t=el.iUV.sanitizeNodeName(e||""),i=t;for(let s=1;this.nodeNamesUsed[i];++s)i=t+"_"+s;return this.nodeNamesUsed[i]=!0,i}loadGeometries(e){let t=this,i=this.extensions,s=this.primitiveCache,r=[];for(let n=0,a=e.length;n0&&function(e,t){if(e.updateMorphTargets(),void 0!==t.weights)for(let i=0,s=t.weights.length;i1?new el.ZAu:1===t.length?t[0]:new el.Tme)!==t[0])for(let A=0,o=t.length;A{let t=new Map;for(let[i,s]of r.associations)(i instanceof el.F5T||i instanceof el.xEZ)&&t.set(i,s);return e.traverse(e=>{let i=r.associations.get(e);null!=i&&t.set(e,i)}),t})(n),n})}}function id(e,t,i){let s=t.attributes,r=[];for(let n in s){let a=ir[n]||n.toLowerCase();a in e.attributes||r.push(function(t,s){return i.getDependency("accessor",t).then(function(t){e.setAttribute(s,t)})}(s[n],a))}if(void 0!==t.indices&&!e.index){let A=i.getDependency("accessor",t.indices).then(function(t){e.setIndex(t)});r.push(A)}return ih(e,t),!function(e,t,i){let s=t.attributes,r=new el.ZzF;if(void 0===s.POSITION)return;{let n=i.json.accessors[s.POSITION],a=n.min,A=n.max;if(void 0!==a&&void 0!==A){if(r.set(new el.Pa4(a[0],a[1],a[2]),new el.Pa4(A[0],A[1],A[2])),n.normalized){let o=iu(ie[n.componentType]);r.min.multiplyScalar(o),r.max.multiplyScalar(o)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}let l=t.targets;if(void 0!==l){let h=new el.Pa4,c=new el.Pa4;for(let u=0,g=l.length;u{let s=this._getIdleWorker();-1!==s?(this._initWorker(s),this.workerStatus|=1<e.terminate()),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}var iI=i(1876).Buffer;class iE{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],this.keyValue={},this.globalData=null}}class iC{constructor(e,t,i,s){this._dataView=new DataView(e.buffer,e.byteOffset+t,i),this._littleEndian=s,this._offset=0}_nextUint8(){let e=this._dataView.getUint8(this._offset);return this._offset+=1,e}_nextUint16(){let e=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,e}_nextUint32(){let e=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint64(){let e=this._dataView.getUint32(this._offset,this._littleEndian)+4294967296*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,e}_nextInt32(){let e=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,e}_skip(e){return this._offset+=e,this}_scan(e,t=0){let i=this._offset,s=0;for(;this._dataView.getUint8(this._offset)!==t&&se.arrayBuffer()).then(e=>WebAssembly.instantiate(e,iw)).then(this._init):WebAssembly.instantiate(iQ.from(iS,"base64"),iw).then(this._init))}_init(e){r=e.instance,iw.env.emscripten_notify_memory_growth(0)}decode(e,t=0){if(!r)throw Error("ZSTDDecoder: Await .init() before decoding.");let i=e.byteLength,s=r.exports.malloc(i);n.set(e,s),t=t||Number(r.exports.ZSTD_findDecompressedSize(s,i));let a=r.exports.malloc(t),A=r.exports.ZSTD_decompress(a,t,s,i),o=n.slice(a,a+A);return r.exports.free(s),r.exports.free(a),o}}let iS="AGFzbQEAAAABpQEVYAF/AX9gAn9/AGADf39/AX9gBX9/f39/AX9gAX8AYAJ/fwF/YAR/f39/AX9gA39/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gAn9/AX5gAn5+AX5gAABgBX9/f39/AGAGf39/f39/AGAIf39/f39/f38AYAl/f39/f39/f38AYAABf2AIf39/f39/f38Bf2ANf39/f39/f39/f39/fwF/YAF/AX4CJwEDZW52H2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgABANpaAEFAAAFAgEFCwACAQABAgIFBQcAAwABDgsBAQcAEhMHAAUBDAQEAAANBwQCAgYCBAgDAwMDBgEACQkHBgICAAYGAgQUBwYGAwIGAAMCAQgBBwUGCgoEEQAEBAEIAwgDBQgDEA8IAAcABAUBcAECAgUEAQCAAgYJAX8BQaCgwAILB2AHBm1lbW9yeQIABm1hbGxvYwAoBGZyZWUAJgxaU1REX2lzRXJyb3IAaBlaU1REX2ZpbmREZWNvbXByZXNzZWRTaXplAFQPWlNURF9kZWNvbXByZXNzAEoGX3N0YXJ0ACQJBwEAQQELASQKussBaA8AIAAgACgCBCABajYCBAsZACAAKAIAIAAoAgRBH3F0QQAgAWtBH3F2CwgAIABBiH9LC34BBH9BAyEBIAAoAgQiA0EgTQRAIAAoAggiASAAKAIQTwRAIAAQDQ8LIAAoAgwiAiABRgRAQQFBAiADQSBJGw8LIAAgASABIAJrIANBA3YiBCABIARrIAJJIgEbIgJrIgQ2AgggACADIAJBA3RrNgIEIAAgBCgAADYCAAsgAQsUAQF/IAAgARACIQIgACABEAEgAgv3AQECfyACRQRAIABCADcCACAAQQA2AhAgAEIANwIIQbh/DwsgACABNgIMIAAgAUEEajYCECACQQRPBEAgACABIAJqIgFBfGoiAzYCCCAAIAMoAAA2AgAgAUF/ai0AACIBBEAgAEEIIAEQFGs2AgQgAg8LIABBADYCBEF/DwsgACABNgIIIAAgAS0AACIDNgIAIAJBfmoiBEEBTQRAIARBAWtFBEAgACABLQACQRB0IANyIgM2AgALIAAgAS0AAUEIdCADajYCAAsgASACakF/ai0AACIBRQRAIABBADYCBEFsDwsgAEEoIAEQFCACQQN0ams2AgQgAgsWACAAIAEpAAA3AAAgACABKQAINwAICy8BAX8gAUECdEGgHWooAgAgACgCAEEgIAEgACgCBGprQR9xdnEhAiAAIAEQASACCyEAIAFCz9bTvtLHq9lCfiAAfEIfiUKHla+vmLbem55/fgsdAQF/IAAoAgggACgCDEYEfyAAKAIEQSBGBUEACwuCBAEDfyACQYDAAE8EQCAAIAEgAhBnIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgA0F8aiIEIABJBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsMACAAIAEpAAA3AAALQQECfyAAKAIIIgEgACgCEEkEQEEDDwsgACAAKAIEIgJBB3E2AgQgACABIAJBA3ZrIgE2AgggACABKAAANgIAQQALDAAgACABKAIANgAAC/cCAQJ/AkAgACABRg0AAkAgASACaiAASwRAIAAgAmoiBCABSw0BCyAAIAEgAhALDwsgACABc0EDcSEDAkACQCAAIAFJBEAgAwRAIAAhAwwDCyAAQQNxRQRAIAAhAwwCCyAAIQMDQCACRQ0EIAMgAS0AADoAACABQQFqIQEgAkF/aiECIANBAWoiA0EDcQ0ACwwBCwJAIAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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",ib=new WeakMap,ix=0;class iM extends el.aNw{constructor(e){super(e),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new im,this.workerSourceURL="",this.workerConfig=null,"undefined"!=typeof MSC_TRANSCODER&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(e){return this.transcoderPath=e,this}setWorkerLimit(e){return this.workerPool.setWorkerLimit(e),this}detectSupport(e){return this.workerConfig={astcSupported:e.extensions.has("WEBGL_compressed_texture_astc"),etc1Supported:e.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:e.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:e.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:e.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:e.extensions.has("WEBGL_compressed_texture_pvrtc")||e.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},e.capabilities.isWebGL2&&(this.workerConfig.etc1Supported=!1),this}init(){if(!this.transcoderPending){let e=new el.hH6(this.manager);e.setPath(this.transcoderPath),e.setWithCredentials(this.withCredentials);let t=e.loadAsync("basis_transcoder.js"),i=new el.hH6(this.manager);i.setPath(this.transcoderPath),i.setResponseType("arraybuffer"),i.setWithCredentials(this.withCredentials);let s=i.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([t,s]).then(([e,t])=>{let i=iM.BasisWorker.toString(),s=["/* constants */","let _EngineFormat = "+JSON.stringify(iM.EngineFormat),"let _TranscoderFormat = "+JSON.stringify(iM.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(iM.BasisFormat),"/* basis_transcoder.js */",e,"/* worker */",i.substring(i.indexOf("{")+1,i.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([s])),this.transcoderBinary=t,this.workerPool.setWorkerCreator(()=>{let e=new Worker(this.workerSourceURL),t=this.transcoderBinary.slice(0);return e.postMessage({type:"init",config:this.workerConfig,transcoderBinary:t},[t]),e})}),ix>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),ix++}return this.transcoderPending}load(e,t,i,s){if(null===this.workerConfig)throw Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");let r=new el.hH6(this.manager);r.setResponseType("arraybuffer"),r.setWithCredentials(this.withCredentials),r.load(e,e=>{if(ib.has(e)){let i=ib.get(e);return i.promise.then(t).catch(s)}this._createTexture(e).then(e=>t?t(e):null).catch(s)},i,s)}_createTextureFrom(e,t){let{mipmaps:i,width:s,height:r,format:n,type:a,error:A,dfdTransferFn:o,dfdFlags:l}=e;if("error"===a)return Promise.reject(A);let h=t.layerCount>1?new el.Z_g(i,s,r,t.layerCount,n,el.ywz):new el.EB7(i,s,r,n,el.ywz);return h.minFilter=1===i.length?el.wem:el.D1R,h.magFilter=el.wem,h.generateMipmaps=!1,h.needsUpdate=!0,h.encoding=2===o?el.knz:el.rnI,h.premultiplyAlpha=!!(1&l),h}async _createTexture(e,t={}){let i=function(e){let t=new Uint8Array(e.buffer,e.byteOffset,iB.length);if(t[0]!==iB[0]||t[1]!==iB[1]||t[2]!==iB[2]||t[3]!==iB[3]||t[4]!==iB[4]||t[5]!==iB[5]||t[6]!==iB[6]||t[7]!==iB[7]||t[8]!==iB[8]||t[9]!==iB[9]||t[10]!==iB[10]||t[11]!==iB[11])throw Error("Missing KTX 2.0 identifier.");let i=new iE,s=17*Uint32Array.BYTES_PER_ELEMENT,r=new iC(e,iB.length,s,!0);i.vkFormat=r._nextUint32(),i.typeSize=r._nextUint32(),i.pixelWidth=r._nextUint32(),i.pixelHeight=r._nextUint32(),i.pixelDepth=r._nextUint32(),i.layerCount=r._nextUint32(),i.faceCount=r._nextUint32();let n=r._nextUint32();i.supercompressionScheme=r._nextUint32();let a=r._nextUint32(),A=r._nextUint32(),o=r._nextUint32(),l=r._nextUint32(),h=r._nextUint64(),c=r._nextUint64(),u=new iC(e,iB.length+s,3*n*8,!0);for(let g=0;gthis.workerPool.postMessage({type:"transcode",buffer:e,taskConfig:t},[e])).then(e=>this._createTextureFrom(e.data,i));return ib.set(e,{promise:s}),s}dispose(){return this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),ix--,this}}iM.BasisFormat={ETC1S:0,UASTC_4x4:1},iM.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16},iM.EngineFormat={RGBAFormat:el.wk1,RGBA_ASTC_4x4_Format:el.ptH,RGBA_BPTC_Format:el.bsb,RGBA_ETC2_EAC_Format:el.ekQ,RGBA_PVRTC_4BPPV1_Format:el.eaV,RGBA_S3TC_DXT5_Format:el.ILR,RGB_ETC1_Format:el.fto,RGB_ETC2_Format:el.l0P,RGB_PVRTC_4BPPV1_Format:el._AM,RGB_S3TC_DXT1_Format:el.wuA},iM.BasisWorker=function(){let e,t,i;let s=_EngineFormat,r=_TranscoderFormat,n=_BasisFormat;self.addEventListener("message",function(a){let h=a.data;switch(h.type){case"init":var c;e=h.config,c=h.transcoderBinary,t=new Promise(e=>{i={wasmBinary:c,onRuntimeInitialized:e},BASIS(i)}).then(()=>{i.initializeBasis(),void 0===i.KTX2File&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")});break;case"transcode":t.then(()=>{try{let{width:t,height:a,hasAlpha:c,mipmaps:u,format:g,dfdTransferFn:d,dfdFlags:p}=function(t){let a=new i.KTX2File(new Uint8Array(t));function h(){a.close(),a.delete()}if(!a.isValid())throw h(),Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");let c=a.isUASTC()?n.UASTC_4x4:n.ETC1S,u=a.getWidth(),g=a.getHeight(),d=a.getLayers()||1,p=a.getLevels(),m=a.getHasAlpha(),I=a.getDFDTransferFunc(),f=a.getDFDFlags(),{transcoderFormat:E,engineFormat:C}=function(t,i,a,h){let c,u;let g=t===n.ETC1S?A:o;for(let d=0;d{let t=new iv;await t.init(),e(t)})),t=(await a).decode(o.levelData,o.uncompressedByteLength);else throw Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");i=iD[s]===el.VzW?new Float32Array(t.buffer,t.byteOffset,t.byteLength/Float32Array.BYTES_PER_ELEMENT):iD[s]===el.cLu?new Uint16Array(t.buffer,t.byteOffset,t.byteLength/Uint16Array.BYTES_PER_ELEMENT):t;let l=0===A?new el.IEO(i,r,n):new el.JUT(i,r,n,A);return l.type=iD[s],l.format=iR[s],l.encoding=iT[s]||el.rnI,l.needsUpdate=!0,Promise.resolve(l)}let iF=Symbol("retainerCount"),ik=Symbol("recentlyUsed"),i_=Symbol("evict"),iU=Symbol("evictionThreshold"),iN=Symbol("cache");class iG{constructor(e,t=5){this[y]=new Map,this[Q]=[],this[iN]=e,this[iU]=t}set evictionThreshold(e){this[iU]=e,this[i_]()}get evictionThreshold(){return this[iU]}get cache(){return this[iN]}retainerCount(e){return this[iF].get(e)||0}reset(){this[iF].clear(),this[ik]=[]}retain(e){this[iF].has(e)||this[iF].set(e,0),this[iF].set(e,this[iF].get(e)+1);let t=this[ik].indexOf(e);-1!==t&&this[ik].splice(t,1),this[ik].unshift(e),this[i_]()}release(e){this[iF].has(e)&&this[iF].set(e,Math.max(this[iF].get(e)-1,0)),this[i_]()}[(y=iF,Q=ik,i_)](){if(!(this[ik].length=this[iU];--e){let t=this[ik][e],i=this[iF].get(t);0===i&&(this[iN].delete(t),this[ik].splice(e,1))}}}/* @license * Copyright 2021 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ let iP=e=>{let t=[],i=new Set;for(let s of e){let r=s,n=0;for(;i.has(r);)r=s+"."+ ++n;i.add(r),t.push(r)}return t},iO=e=>{let t=new Map;for(let i of e.mappings)for(let s of i.variants)t.set(s,{material:null,gltfMaterialIndex:i.material});return t};class iH{constructor(e){this.parser=e,this.name="KHR_materials_variants"}afterRoot(e){let t=this.parser,i=t.json;if(void 0===i.extensions||void 0===i.extensions[this.name])return null;let s=i.extensions[this.name],r=s.variants||[],n=iP(r.map(e=>e.name));for(let a of e.scenes)a.traverse(e=>{let s=e;if(!s.isMesh)return;let r=t.associations.get(s);if(null==r||null==r.meshes||null==r.primitives)return;let n=i.meshes[r.meshes],a=n.primitives,A=a[r.primitives],o=A.extensions;o&&o[this.name]&&(s.userData.variantMaterials=iO(o[this.name]))});return e.userData.variants=n,Promise.resolve()}}let iq=(e,t,i=()=>{})=>{let s=e=>{let t=e.loaded/e.total;i(Math.max(0,Math.min(1,isFinite(t)?t:1)))};return new Promise((i,r)=>{t.load(e,i,s,r)})},iK=e=>new Promise((t,i)=>{let s=document.createElement("script");document.body.appendChild(s),s.onload=t,s.onerror=i,s.async=!0,s.src=e}),iV=new Map,iJ=new Map,iY=new tL,ij=new iM,iz=Symbol("loader"),i$=Symbol("evictionPolicy"),iW=Symbol("GLTFInstance");class iX extends el.pBf{constructor(e){super(),this[v]=new tk().register(e=>new iH(e)),this[iW]=e,this[iz].setDRACOLoader(iY),this[iz].setKTX2Loader(ij)}static setDRACODecoderLocation(e){A=e,iY.setDecoderPath(e)}static getDRACODecoderLocation(){return A}static setKTX2TranscoderLocation(e){o=e,ij.setTranscoderPath(e)}static getKTX2TranscoderLocation(){return o}static setMeshoptDecoderLocation(e){l!==e&&(l=e,h=iK(e).then(()=>MeshoptDecoder.ready).then(()=>MeshoptDecoder))}static getMeshoptDecoderLocation(){return l}static initializeKTX2Loader(e){ij.detectSupport(e)}static get cache(){return iV}static clearCache(){iV.forEach((e,t)=>{this.delete(t)}),this[i$].reset()}static has(e){return iV.has(e)}static async delete(e){if(!this.has(e))return;let t=iV.get(e);iJ.delete(e),iV.delete(e);let i=await t;i.dispose()}static hasFinishedLoading(e){return!!iJ.get(e)}get[(w=i$,v=iz,i$)](){return this.constructor[i$]}async preload(e,t,i=()=>{}){if(this[iz].setWithCredentials(iX.withCredentials),this.dispatchEvent({type:"preload",element:t,src:e}),!iV.has(e)){null!=h&&this[iz].setMeshoptDecoder(await h);let s=iq(e,this[iz],e=>{i(.8*e)}),r=this[iW],n=s.then(e=>r.prepare(e)).then(e=>(i(.9),new r(e))).catch(e=>(console.error(e),new r));iV.set(e,n)}await iV.get(e),iJ.set(e,!0),i&&i(1)}async load(e,t,i=()=>{}){await this.preload(e,t,i);let s=await iV.get(e),r=await s.clone();return this[i$].retain(e),r.dispose=()=>{this[i$].release(e)},r}}iX[w]=new iG(iX);class iZ extends el.Tme{constructor(e=document.createElement("div")){super(),this.isCSS2DObject=!0,this.element=e,this.element.style.position="absolute",this.element.style.userSelect="none",this.element.setAttribute("draggable",!1),this.addEventListener("removed",function(){this.traverse(function(e){e.element instanceof Element&&null!==e.element.parentNode&&e.element.parentNode.removeChild(e.element)})})}copy(e,t){return super.copy(e,t),this.element=e.element.cloneNode(!0),this}}let i0=new el.Pa4,i1=new el.yGw,i2=new el.yGw,i3=new el.Pa4,i4=new el.Pa4;class i8{constructor(e={}){let t,i,s,r;let n=this,a={objects:new WeakMap},A=void 0!==e.element?e.element:document.createElement("div");A.style.overflow="hidden",this.domElement=A,this.getSize=function(){return{width:t,height:i}},this.render=function(e,t){!0===e.matrixWorldAutoUpdate&&e.updateMatrixWorld(),null===t.parent&&!0===t.matrixWorldAutoUpdate&&t.updateMatrixWorld(),i1.copy(t.matrixWorldInverse),i2.multiplyMatrices(t.projectionMatrix,i1),function e(t,i,o){if(t.isCSS2DObject){i0.setFromMatrixPosition(t.matrixWorld),i0.applyMatrix4(i2);let l=!0===t.visible&&i0.z>=-1&&i0.z<=1&&!0===t.layers.test(o.layers);if(t.element.style.display=!0===l?"":"none",!0===l){t.onBeforeRender(n,i,o);let h=t.element;h.style.transform="translate(-50%,-50%) translate("+(i0.x*s+s)+"px,"+(-i0.y*r+r)+"px)",h.parentNode!==A&&A.appendChild(h),t.onAfterRender(n,i,o)}let c={distanceToCameraSquared:(i3.setFromMatrixPosition(o.matrixWorld),i4.setFromMatrixPosition(t.matrixWorld),i3.distanceToSquared(i4))};a.objects.set(t,c)}for(let u=0,g=t.children.length;ue.toBlob(i,t)):("image/jpeg"===t?i=.92:"image/webp"===t&&(i=.8),e.convertToBlob({type:t,quality:i}))}class sn{constructor(){this.plugins=[],this.options={},this.pending=[],this.buffers=[],this.byteOffset=0,this.buffers=[],this.nodeMap=new Map,this.skins=[],this.extensionsUsed={},this.uids=new Map,this.uid=0,this.json={asset:{version:"2.0",generator:"THREE.GLTFExporter"}},this.cache={meshes:new Map,attributes:new Map,attributesNormalized:new Map,materials:new Map,textures:new Map,images:new Map}}setPlugins(e){this.plugins=e}async write(e,t,i){this.options=Object.assign({},{binary:!1,trs:!1,onlyVisible:!0,maxTextureSize:1/0,animations:[],includeCustomExtensions:!1},i),this.options.animations.length>0&&(this.options.trs=!0),this.processInput(e),await Promise.all(this.pending);let s=this.buffers,r=this.json;i=this.options;let n=this.extensionsUsed,a=new Blob(s,{type:"application/octet-stream"}),A=Object.keys(n);if(A.length>0&&(r.extensionsUsed=A),r.buffers&&r.buffers.length>0&&(r.buffers[0].byteLength=a.size),!0===i.binary){let o=new FileReader;o.readAsArrayBuffer(a),o.onloadend=function(){var e;let i=si(o.result),s=new DataView(new ArrayBuffer(8));s.setUint32(0,i.byteLength,!0),s.setUint32(4,5130562,!0);let n=si((e=JSON.stringify(r),new TextEncoder().encode(e).buffer),32),a=new DataView(new ArrayBuffer(8));a.setUint32(0,n.byteLength,!0),a.setUint32(4,1313821514,!0);let A=new ArrayBuffer(12),l=new DataView(A);l.setUint32(0,1179937895,!0),l.setUint32(4,2,!0);let h=12+a.byteLength+n.byteLength+s.byteLength+i.byteLength;l.setUint32(8,h,!0);let c=new Blob([A,a,n,s,i],{type:"application/octet-stream"}),u=new FileReader;u.readAsArrayBuffer(c),u.onloadend=function(){t(u.result)}}}else if(r.buffers&&r.buffers.length>0){let l=new FileReader;l.readAsDataURL(a),l.onloadend=function(){let e=l.result;r.buffers[0].uri=e,t(r)}}else t(r)}serializeUserData(e,t){if(0===Object.keys(e.userData).length)return;let i=this.options,s=this.extensionsUsed;try{let r=JSON.parse(JSON.stringify(e.userData));if(i.includeCustomExtensions&&r.gltfExtensions){for(let n in void 0===t.extensions&&(t.extensions={}),r.gltfExtensions)t.extensions[n]=r.gltfExtensions[n],s[n]=!0;delete r.gltfExtensions}Object.keys(r).length>0&&(t.extras=r)}catch(a){console.warn("THREE.GLTFExporter: userData of '"+e.name+"' won't be serialized because of JSON.stringify error - "+a.message)}}getUID(e,t=!1){if(!1===this.uids.has(e)){let i=new Map;i.set(!0,this.uid++),i.set(!1,this.uid++),this.uids.set(e,i)}let s=this.uids.get(e);return s.get(t)}isNormalizedNormalAttribute(e){let t=this.cache;if(t.attributesNormalized.has(e))return!1;let i=new el.Pa4;for(let s=0,r=e.count;s5e-4)return!1;return!0}createNormalizedNormalAttribute(e){let t=this.cache;if(t.attributesNormalized.has(e))return t.attributesNormalized.get(e);let i=e.clone(),s=new el.Pa4;for(let r=0,n=i.count;r4?u=e.array[h*e.itemSize+c]:0===c?u=e.getX(h):1===c?u=e.getY(h):2===c?u=e.getZ(h):3===c&&(u=e.getW(h)),t===i6.FLOAT?o.setFloat32(l,u,!0):t===i6.UNSIGNED_INT?o.setUint32(l,u,!0):t===i6.UNSIGNED_SHORT?o.setUint16(l,u,!0):t===i6.UNSIGNED_BYTE&&o.setUint8(l,u),l+=n}let g={buffer:this.processBuffer(o.buffer),byteOffset:this.byteOffset,byteLength:A};void 0!==r&&(g.target=r),r===i6.ARRAY_BUFFER&&(g.byteStride=e.itemSize*n),this.byteOffset+=A,a.bufferViews.push(g);let d={id:a.bufferViews.length-1,byteLength:0};return d}processBufferViewImage(e){let t=this,i=t.json;return i.bufferViews||(i.bufferViews=[]),new Promise(function(s){let r=new FileReader;r.readAsArrayBuffer(e),r.onloadend=function(){let e=si(r.result),n={buffer:t.processBuffer(e),byteOffset:t.byteOffset,byteLength:e.byteLength};t.byteOffset+=e.byteLength,s(i.bufferViews.push(n)-1)}})}processAccessor(e,t,i,s){let r,n;let a=this.json;if(e.array.constructor===Float32Array)r=i6.FLOAT;else if(e.array.constructor===Uint32Array)r=i6.UNSIGNED_INT;else if(e.array.constructor===Uint16Array)r=i6.UNSIGNED_SHORT;else if(e.array.constructor===Uint8Array)r=i6.UNSIGNED_BYTE;else throw Error("THREE.GLTFExporter: Unsupported bufferAttribute component type.");if(void 0===i&&(i=0),void 0===s&&(s=e.count),0===s)return null;let A=function(e,t,i){let s={min:Array(e.itemSize).fill(Number.POSITIVE_INFINITY),max:Array(e.itemSize).fill(Number.NEGATIVE_INFINITY)};for(let r=t;r4?a=e.array[r*e.itemSize+n]:0===n?a=e.getX(r):1===n?a=e.getY(r):2===n?a=e.getZ(r):3===n&&(a=e.getW(r)),s.min[n]=Math.min(s.min[n],a),s.max[n]=Math.max(s.max[n],a)}return s}(e,i,s);void 0!==t&&(n=e===t.index?i6.ELEMENT_ARRAY_BUFFER:i6.ARRAY_BUFFER);let o=this.processBufferView(e,r,i,s,n),l={bufferView:o.id,byteOffset:o.byteOffset,componentType:r,count:s,max:A.max,min:A.min,type:{1:"SCALAR",2:"VEC2",3:"VEC3",4:"VEC4",16:"MAT4"}[e.itemSize]};return!0===e.normalized&&(l.normalized=!0),a.accessors||(a.accessors=[]),a.accessors.push(l)-1}processImage(e,t,i,s="image/png"){let r=this,n=r.cache,a=r.json,A=r.options,o=r.pending;n.images.has(e)||n.images.set(e,{});let l=n.images.get(e),h=s+":flipY/"+i.toString();if(void 0!==l[h])return l[h];a.images||(a.images=[]);let c={mimeType:s},u=ss();u.width=Math.min(e.width,A.maxTextureSize),u.height=Math.min(e.height,A.maxTextureSize);let g=u.getContext("2d");if(!0===i&&(g.translate(0,u.height),g.scale(1,-1)),void 0!==e.data){t!==el.wk1&&console.error("GLTFExporter: Only RGBAFormat is supported."),(e.width>A.maxTextureSize||e.height>A.maxTextureSize)&&console.warn("GLTFExporter: Image size is bigger than maxTextureSize",e);let d=new Uint8ClampedArray(e.height*e.width*4);for(let p=0;pr.processBufferViewImage(e)).then(e=>{c.bufferView=e})):void 0!==u.toDataURL?c.uri=u.toDataURL(s):o.push(sr(u,s).then(e=>new FileReader().readAsDataURL(e)).then(e=>{c.uri=e}));let m=a.images.push(c)-1;return l[h]=m,m}processSampler(e){let t=this.json;t.samplers||(t.samplers=[]);let i={magFilter:i9[e.magFilter],minFilter:i9[e.minFilter],wrapS:i9[e.wrapS],wrapT:i9[e.wrapT]};return t.samplers.push(i)-1}processTexture(e){let t=this.cache,i=this.json;if(t.textures.has(e))return t.textures.get(e);i.textures||(i.textures=[]);let s=e.userData.mimeType;"image/webp"===s&&(s="image/png");let r={sampler:this.processSampler(e),source:this.processImage(e.image,e.format,e.flipY,s)};e.name&&(r.name=e.name),this._invokeAll(function(t){t.writeTexture&&t.writeTexture(e,r)});let n=i.textures.push(r)-1;return t.textures.set(e,n),n}processMaterial(e){let t=this.cache,i=this.json;if(t.materials.has(e))return t.materials.get(e);if(e.isShaderMaterial)return console.warn("GLTFExporter: THREE.ShaderMaterial not supported."),null;i.materials||(i.materials=[]);let s={pbrMetallicRoughness:{}};!0!==e.isMeshStandardMaterial&&!0!==e.isMeshBasicMaterial&&console.warn("GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.");let r=e.color.toArray().concat([e.opacity]);if(se(r,[1,1,1,1])||(s.pbrMetallicRoughness.baseColorFactor=r),e.isMeshStandardMaterial?(s.pbrMetallicRoughness.metallicFactor=e.metalness,s.pbrMetallicRoughness.roughnessFactor=e.roughness):(s.pbrMetallicRoughness.metallicFactor=.5,s.pbrMetallicRoughness.roughnessFactor=.5),e.metalnessMap||e.roughnessMap){let n=this.buildMetalRoughTexture(e.metalnessMap,e.roughnessMap),a={index:this.processTexture(n)};this.applyTextureTransform(a,n),s.pbrMetallicRoughness.metallicRoughnessTexture=a}if(e.map){let A={index:this.processTexture(e.map)};this.applyTextureTransform(A,e.map),s.pbrMetallicRoughness.baseColorTexture=A}if(e.emissive){let o=e.emissive.clone().multiplyScalar(e.emissiveIntensity),l=Math.max(o.r,o.g,o.b);if(l>1&&(o.multiplyScalar(1/l),console.warn("THREE.GLTFExporter: Some emissive components exceed 1; emissive has been limited")),l>0&&(s.emissiveFactor=o.toArray()),e.emissiveMap){let h={index:this.processTexture(e.emissiveMap)};this.applyTextureTransform(h,e.emissiveMap),s.emissiveTexture=h}}if(e.normalMap){let c={index:this.processTexture(e.normalMap)};e.normalScale&&1!==e.normalScale.x&&(c.scale=e.normalScale.x),this.applyTextureTransform(c,e.normalMap),s.normalTexture=c}if(e.aoMap){let u={index:this.processTexture(e.aoMap),texCoord:1};1!==e.aoMapIntensity&&(u.strength=e.aoMapIntensity),this.applyTextureTransform(u,e.aoMap),s.occlusionTexture=u}e.transparent?s.alphaMode="BLEND":e.alphaTest>0&&(s.alphaMode="MASK",s.alphaCutoff=e.alphaTest),e.side===el.ehD&&(s.doubleSided=!0),""!==e.name&&(s.name=e.name),this.serializeUserData(e,s),this._invokeAll(function(t){t.writeMaterial&&t.writeMaterial(e,s)});let g=i.materials.push(s)-1;return t.materials.set(e,g),g}processMesh(e){let t;let i=this.cache,s=this.json,r=[e.geometry.uuid];if(Array.isArray(e.material))for(let n=0,a=e.material.length;n0){let B=[],y=[],Q={};if(void 0!==e.morphTargetDictionary)for(let w in e.morphTargetDictionary)Q[e.morphTargetDictionary[w]]=w;for(let v=0;v0&&(l.extras={},l.extras.targetNames=y)}let k=Array.isArray(e.material);if(k&&0===o.groups.length)return null;let _=k?e.material:[e.material],U=k?o.groups:[{materialIndex:0,start:void 0,count:void 0}];for(let N=0,G=U.length;N0&&(P.targets=u),null!==o.index){let O=this.getUID(o.index);(void 0!==U[N].start||void 0!==U[N].count)&&(O+=":"+U[N].start+":"+U[N].count),i.attributes.has(O)?P.indices=i.attributes.get(O):(P.indices=this.processAccessor(o.index,o,U[N].start,U[N].count),i.attributes.set(O,P.indices)),null===P.indices&&delete P.indices}let H=this.processMaterial(_[U[N].materialIndex]);null!==H&&(P.material=H),c.push(P)}l.primitives=c,s.meshes||(s.meshes=[]),this._invokeAll(function(t){t.writeMesh&&t.writeMesh(e,l)});let q=s.meshes.push(l)-1;return i.meshes.set(A,q),q}processCamera(e){let t=this.json;t.cameras||(t.cameras=[]);let i=e.isOrthographicCamera,s={type:i?"orthographic":"perspective"};return i?s.orthographic={xmag:2*e.right,ymag:2*e.top,zfar:e.far<=0?.001:e.far,znear:e.near<0?0:e.near}:s.perspective={aspectRatio:e.aspect,yfov:el.M8C.degToRad(e.fov),zfar:e.far<=0?.001:e.far,znear:e.near<0?0:e.near},""!==e.name&&(s.name=e.type),t.cameras.push(s)-1}processAnimation(e,t){let i=this.json,s=this.nodeMap;i.animations||(i.animations=[]),e=i5.Utils.mergeMorphTargetTracks(e.clone(),t);let r=e.tracks,n=[],a=[];for(let A=0;A0){let l=[];for(let h=0,c=e.children.length;h0&&(r.children=l)}this._invokeAll(function(t){t.writeNode&&t.writeNode(e,r)});let d=t.nodes.push(r)-1;return s.set(e,d),d}processScene(e){let t=this.json,i=this.options;t.scenes||(t.scenes=[],t.scene=0);let s={};""!==e.name&&(s.name=e.name),t.scenes.push(s);let r=[];for(let n=0,a=e.children.length;n0&&(s.nodes=r),this.serializeUserData(e,s)}processObjects(e){let t=new el.xsS;t.name="AuxScene";for(let i=0;i0&&this.processObjects(i);for(let r=0;r0&&(n.range=e.distance)):e.isSpotLight&&(n.type="spot",e.distance>0&&(n.range=e.distance),n.spot={},n.spot.innerConeAngle=-((e.penumbra-1)*e.angle*1),n.spot.outerConeAngle=e.angle),void 0!==e.decay&&2!==e.decay&&console.warn("THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2."),e.target&&(e.target.parent!==e||0!==e.target.position.x||0!==e.target.position.y||-1!==e.target.position.z)&&console.warn("THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1."),r[this.name]||(s.extensions=s.extensions||{},s.extensions[this.name]={lights:[]},r[this.name]=!0);let a=s.extensions[this.name].lights;a.push(n),t.extensions=t.extensions||{},t.extensions[this.name]={light:a.length-1}}}class sA{constructor(e){this.writer=e,this.name="KHR_materials_unlit"}writeMaterial(e,t){if(!e.isMeshBasicMaterial)return;let i=this.writer,s=i.extensionsUsed;t.extensions=t.extensions||{},t.extensions[this.name]={},s[this.name]=!0,t.pbrMetallicRoughness.metallicFactor=0,t.pbrMetallicRoughness.roughnessFactor=.9}}class so{constructor(e){this.writer=e,this.name="KHR_materials_pbrSpecularGlossiness"}writeMaterial(e,t){if(!e.isGLTFSpecularGlossinessMaterial)return;let i=this.writer,s=i.extensionsUsed,r={};t.pbrMetallicRoughness.baseColorFactor&&(r.diffuseFactor=t.pbrMetallicRoughness.baseColorFactor);let n=[1,1,1];if(e.specular.toArray(n,0),r.specularFactor=n,r.glossinessFactor=e.glossiness,t.pbrMetallicRoughness.baseColorTexture&&(r.diffuseTexture=t.pbrMetallicRoughness.baseColorTexture),e.specularMap){let a={index:i.processTexture(e.specularMap)};i.applyTextureTransform(a,e.specularMap),r.specularGlossinessTexture=a}t.extensions=t.extensions||{},t.extensions[this.name]=r,s[this.name]=!0}}class sl{constructor(e){this.writer=e,this.name="KHR_materials_clearcoat"}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial)return;let i=this.writer,s=i.extensionsUsed,r={};if(r.clearcoatFactor=e.clearcoat,e.clearcoatMap){let n={index:i.processTexture(e.clearcoatMap)};i.applyTextureTransform(n,e.clearcoatMap),r.clearcoatTexture=n}if(r.clearcoatRoughnessFactor=e.clearcoatRoughness,e.clearcoatRoughnessMap){let a={index:i.processTexture(e.clearcoatRoughnessMap)};i.applyTextureTransform(a,e.clearcoatRoughnessMap),r.clearcoatRoughnessTexture=a}if(e.clearcoatNormalMap){let A={index:i.processTexture(e.clearcoatNormalMap)};i.applyTextureTransform(A,e.clearcoatNormalMap),r.clearcoatNormalTexture=A}t.extensions=t.extensions||{},t.extensions[this.name]=r,s[this.name]=!0}}class sh{constructor(e){this.writer=e,this.name="KHR_materials_iridescence"}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial)return;let i=this.writer,s=i.extensionsUsed,r={};if(r.iridescenceFactor=e.iridescence,e.iridescenceMap){let n={index:i.processTexture(e.iridescenceMap)};i.applyTextureTransform(n,e.iridescenceMap),r.iridescenceTexture=n}if(r.iridescenceIor=e.iridescenceIOR,r.iridescenceThicknessMinimum=e.iridescenceThicknessRange[0],r.iridescenceThicknessMaximum=e.iridescenceThicknessRange[1],e.iridescenceThicknessMap){let a={index:i.processTexture(e.iridescenceThicknessMap)};i.applyTextureTransform(a,e.iridescenceThicknessMap),r.iridescenceThicknessTexture=a}t.extensions=t.extensions||{},t.extensions[this.name]=r,s[this.name]=!0}}class sc{constructor(e){this.writer=e,this.name="KHR_materials_transmission"}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||0===e.transmission)return;let i=this.writer,s=i.extensionsUsed,r={};if(r.transmissionFactor=e.transmission,e.transmissionMap){let n={index:i.processTexture(e.transmissionMap)};i.applyTextureTransform(n,e.transmissionMap),r.transmissionTexture=n}t.extensions=t.extensions||{},t.extensions[this.name]=r,s[this.name]=!0}}class su{constructor(e){this.writer=e,this.name="KHR_materials_volume"}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||0===e.transmission)return;let i=this.writer,s=i.extensionsUsed,r={};if(r.thicknessFactor=e.thickness,e.thicknessMap){let n={index:i.processTexture(e.thicknessMap)};i.applyTextureTransform(n,e.thicknessMap),r.thicknessTexture=n}r.attenuationDistance=e.attenuationDistance,r.attenuationColor=e.attenuationColor.toArray(),t.extensions=t.extensions||{},t.extensions[this.name]=r,s[this.name]=!0}}i5.Utils={insertKeyframe:function(e,t){let i;let s=e.getValueSize(),r=new e.TimeBufferType(e.times.length+1),n=new e.ValueBufferType(e.values.length+s),a=e.createInterpolant(new e.ValueBufferType(s));if(0===e.times.length){r[0]=t;for(let A=0;AMath.abs(e.times[0]-t))return 0;r[0]=t,r.set(e.times,1),n.set(a.evaluate(t),0),n.set(e.values,s),i=0}else if(t>e.times[e.times.length-1]){if(.001>Math.abs(e.times[e.times.length-1]-t))return e.times.length-1;r[r.length-1]=t,r.set(e.times,0),n.set(e.values,0),n.set(a.evaluate(t),e.values.length),i=r.length-1}else for(let o=0;oMath.abs(e.times[o]-t))return o;if(e.times[o]t){r.set(e.times.slice(0,o+1),0),r[o+1]=t,r.set(e.times.slice(o+1),o+2),n.set(e.values.slice(0,(o+1)*s),0),n.set(a.evaluate(t),(o+1)*s),n.set(e.values.slice((o+1)*s),(o+2)*s),i=o+1;break}}return e.times=r,e.values=n,i},mergeMorphTargetTracks:function(e,t){let i=[],s={},r=e.tracks;for(let n=0;nvoid 0!==e.material&&e.userData&&e.userData.variantMaterials&&!!Array.from(e.userData.variantMaterials.values()).filter(e=>sd(e.material)),sd=e=>e&&e.isMaterial&&!Array.isArray(e);class sp{constructor(e){this.writer=e,this.name="KHR_materials_variants",this.variantNames=[]}beforeParse(e){let t=new Set;for(let i of e)i.traverse(e=>{if(!sg(e))return;let i=e.userData.variantMaterials,s=e.userData.variantData;for(let[r,n]of s){let a=i.get(n.index);a&&sd(a.material)&&t.add(r)}});t.forEach(e=>this.variantNames.push(e))}writeMesh(e,t){if(!sg(e))return;let i=e.userData,s=i.variantMaterials,r=i.variantData,n=new Map,a=new Map,A=Array.from(r.values()).sort((e,t)=>e.index-t.index);for(let[o,l]of A.entries())a.set(l.index,o);for(let h of r.values()){let c=s.get(h.index);if(!c||!sd(c.material))continue;let u=this.writer.processMaterial(c.material);n.has(u)||n.set(u,{material:u,variants:[]}),n.get(u).variants.push(a.get(h.index))}let g=Array.from(n.values()).map(e=>e.variants.sort((e,t)=>e-t)&&e).sort((e,t)=>e.material-t.material);if(0===g.length)return;let d=sd(i.originalMaterial)?this.writer.processMaterial(i.originalMaterial):-1;for(let p of t.primitives)d>=0&&(p.material=d),p.extensions=p.extensions||{},p.extensions[this.name]={mappings:g}}afterParse(){if(0===this.variantNames.length)return;let e=this.writer.json;e.extensions=e.extensions||{};let t=this.variantNames.map(e=>({name:e}));e.extensions[this.name]={variants:t},this.writer.extensionsUsed[this.name]=!0}}class sm{constructor(e,t,i,s,r){this.xrLight=e,this.renderer=t,this.lightProbe=i,this.xrWebGLBinding=null,this.estimationStartCallback=r,this.frameCallback=this.onXRFrame.bind(this);let n=t.xr.getSession();if(s&&"XRWebGLBinding"in window){let a=new el.oAp(16);e.environment=a.texture;let A=t.getContext();switch(n.preferredReflectionFormat){case"srgba8":A.getExtension("EXT_sRGB");break;case"rgba16f":A.getExtension("OES_texture_half_float")}this.xrWebGLBinding=new XRWebGLBinding(n,A),this.lightProbe.addEventListener("reflectionchange",()=>{this.updateReflection()})}n.requestAnimationFrame(this.frameCallback)}updateReflection(){let e=this.renderer.properties.get(this.xrLight.environment);if(e){let t=this.xrWebGLBinding.getReflectionCubeMap(this.lightProbe);t&&(e.__webglTexture=t,this.xrLight.environment.needsPMREMUpdate=!0)}}onXRFrame(e,t){if(!this.xrLight)return;let i=t.session;i.requestAnimationFrame(this.frameCallback);let s=t.getLightEstimate(this.lightProbe);if(s){this.xrLight.lightProbe.sh.fromArray(s.sphericalHarmonicsCoefficients),this.xrLight.lightProbe.intensity=1;let r=Math.max(1,Math.max(s.primaryLightIntensity.x,Math.max(s.primaryLightIntensity.y,s.primaryLightIntensity.z)));this.xrLight.directionalLight.color.setRGB(s.primaryLightIntensity.x/r,s.primaryLightIntensity.y/r,s.primaryLightIntensity.z/r),this.xrLight.directionalLight.intensity=r,this.xrLight.directionalLight.position.copy(s.primaryLightDirection),this.estimationStartCallback&&(this.estimationStartCallback(),this.estimationStartCallback=null)}}dispose(){this.xrLight=null,this.renderer=null,this.lightProbe=null,this.xrWebGLBinding=null}}class sI extends el.ZAu{constructor(e,t=!0){super(),this.lightProbe=new el.lk7,this.lightProbe.intensity=0,this.add(this.lightProbe),this.directionalLight=new el.Ox3,this.directionalLight.intensity=0,this.add(this.directionalLight),this.environment=null;let i=null,s=!1;e.xr.addEventListener("sessionstart",()=>{let r=e.xr.getSession();"requestLightProbe"in r&&r.requestLightProbe({reflectionFormat:r.preferredReflectionFormat}).then(r=>{i=new sm(this,e,r,t,()=>{s=!0,this.dispatchEvent({type:"estimationstart"})})})}),e.xr.addEventListener("sessionend",()=>{i&&(i.dispose(),i=null),s&&this.dispatchEvent({type:"estimationend"})}),this.dispose=()=>{i&&(i.dispose(),i=null),this.remove(this.lightProbe),this.lightProbe=null,this.remove(this.directionalLight),this.directionalLight=null,this.environment=null}}}class sf{constructor(e=50){this.velocity=0,this.naturalFrequency=0,this.setDecayTime(e)}setDecayTime(e){this.naturalFrequency=1/Math.max(.001,e)}update(e,t,i,s){let r=2e-4*this.naturalFrequency;if(null==e||0===s||e===t&&0===this.velocity)return t;if(i<0)return e;let n=e-t,a=this.velocity+this.naturalFrequency*n,A=n+i*a,o=Math.exp(-this.naturalFrequency*i),l=(a-this.naturalFrequency*A)*o,h=-this.naturalFrequency*(l+a*o);return Math.abs(l)=0?(this.velocity=0,t):(this.velocity=l,t+A*o)}}let sE=Math.PI/24,sC=new el.FM8,sB=(e,t,i)=>{let s=t>0?i>0?0:-Math.PI/2:i>0?Math.PI/2:Math.PI;for(let r=0;r<=12;++r)e.push(t+.17*Math.cos(s),i+.17*Math.sin(s),0,t+.2*Math.cos(s),i+.2*Math.sin(s),0),s+=sE};class sy extends el.Kj0{constructor(e,t){let i=new el.u9r,s=[],r=[],{size:n,boundingBox:a}=e,A=n.x/2,o=("back"===t?n.y:n.z)/2;sB(r,A,o),sB(r,-A,o),sB(r,-A,-o),sB(r,A,-o);let l=r.length/3;for(let h=0;h0}dispose(){var e;let{geometry:t,material:i}=this.hitPlane;t.dispose(),i.dispose(),this.geometry.dispose(),this.material.dispose(),null===(e=this.parent)||void 0===e||e.remove(this)}}let sQ={NOT_PRESENTING:"not-presenting",SESSION_STARTED:"session-started",OBJECT_PLACED:"object-placed",FAILED:"failed"},sw={TRACKING:"tracking",NOT_TRACKING:"not-tracking"},sv=new el.Pa4,sS=new el.yGw,sb=new el.Pa4,sx=new el.cPb(45,1,.1,100);class sM extends el.pBf{constructor(e){super(),this.renderer=e,this.currentSession=null,this.placeOnWall=!1,this.placementBox=null,this.lastTick=null,this.turntableRotation=null,this.oldShadowIntensity=null,this.frame=null,this.initialHitSource=null,this.transientHitTestSource=null,this.inputSource=null,this._presentedScene=null,this.resolveCleanup=null,this.exitWebXRButtonContainer=null,this.overlay=null,this.xrLight=null,this.tracking=!0,this.frames=0,this.initialized=!1,this.oldTarget=new el.Pa4,this.placementComplete=!1,this.isTranslating=!1,this.isRotating=!1,this.isTwoFingering=!1,this.lastDragPosition=new el.Pa4,this.firstRatio=0,this.lastAngle=0,this.goalPosition=new el.Pa4,this.goalYaw=0,this.goalScale=1,this.xDamper=new sf,this.yDamper=new sf,this.zDamper=new sf,this.yawDamper=new sf,this.scaleDamper=new sf,this.onExitWebXRButtonContainerClick=()=>this.stopPresenting(),this.onUpdateScene=()=>{null!=this.placementBox&&this.isPresenting&&(this.placementBox.dispose(),this.placementBox=new sy(this.presentedScene,this.placeOnWall?"back":"bottom"))},this.onSelectStart=e=>{let t=this.transientHitTestSource;if(null==t)return;let i=this.frame.getHitTestResultsForTransientInput(t),s=this.presentedScene,r=this.placementBox;if(1===i.length){this.inputSource=e.inputSource;let{axes:n}=this.inputSource.gamepad,a=r.getHit(this.presentedScene,n[0],n[1]);r.show=!0,null!=a?(this.isTranslating=!0,this.lastDragPosition.copy(a)):!1===this.placeOnWall&&(this.isRotating=!0,this.lastAngle=1.5*n[0])}else if(2===i.length){r.show=!0,this.isTwoFingering=!0;let{separation:A}=this.fingerPolar(i);this.firstRatio=A/s.scale.x}},this.onSelectEnd=()=>{this.isTranslating=!1,this.isRotating=!1,this.isTwoFingering=!1,this.inputSource=null,this.goalPosition.y+=this.placementBox.offsetHeight*this.presentedScene.scale.x,this.placementBox.show=!1},this.threeRenderer=e.threeRenderer,this.threeRenderer.xr.enabled=!0}async resolveARSession(){tg();let e=await navigator.xr.requestSession("immersive-ar",{requiredFeatures:["hit-test"],optionalFeatures:["dom-overlay","light-estimation"],domOverlay:this.overlay?{root:this.overlay}:void 0});return this.threeRenderer.xr.setReferenceSpaceType("local"),await this.threeRenderer.xr.setSession(e),this.threeRenderer.xr.cameraAutoUpdate=!1,e}get presentedScene(){return this._presentedScene}async supportsPresentation(){try{return tg(),await navigator.xr.isSessionSupported("immersive-ar")}catch(e){return console.warn("Request to present in WebXR denied:"),console.warn(e),console.warn("Falling back to next ar-mode"),!1}}async present(e,t=!1){this.isPresenting&&console.warn("Cannot present while a model is already presenting");let i=new Promise((e,t)=>{requestAnimationFrame(()=>e())});e.setHotspotsVisibility(!1),e.queueRender(),await i,this._presentedScene=e,this.overlay=e.element.shadowRoot.querySelector("div.default"),!0===t&&(this.xrLight=new sI(this.threeRenderer),this.xrLight.addEventListener("estimationstart",()=>{if(!this.isPresenting||null==this.xrLight)return;let e=this.presentedScene;e.add(this.xrLight),e.environment=this.xrLight.environment}));let s=await this.resolveARSession();s.addEventListener("end",()=>{this.postSessionCleanup()},{once:!0});let r=e.element.shadowRoot.querySelector(".slot.exit-webxr-ar-button");r.classList.add("enabled"),r.addEventListener("click",this.onExitWebXRButtonContainerClick),this.exitWebXRButtonContainer=r;let n=await s.requestReferenceSpace("viewer");this.tracking=!0,this.frames=0,this.initialized=!1,this.turntableRotation=e.yaw,this.goalYaw=e.yaw,this.goalScale=1,e.background=null,this.oldShadowIntensity=e.shadowIntensity,e.setShadowIntensity(.01),this.oldTarget.copy(e.getTarget()),e.element.addEventListener("load",this.onUpdateScene);let a=20*Math.PI/180,A=!0===this.placeOnWall?void 0:new XRRay(new DOMPoint(0,0,0),{x:0,y:-Math.sin(a),z:-Math.cos(a)});s.requestHitTestSource({space:n,offsetRay:A}).then(e=>{this.initialHitSource=e}),this.currentSession=s,this.placementBox=new sy(e,this.placeOnWall?"back":"bottom"),this.placementComplete=!1,this.lastTick=performance.now(),this.dispatchEvent({type:"status",status:sQ.SESSION_STARTED})}async stopPresenting(){if(!this.isPresenting)return;let e=new Promise(e=>{this.resolveCleanup=e});try{await this.currentSession.end(),await e}catch(t){console.warn("Error while trying to end WebXR AR session"),console.warn(t),this.postSessionCleanup()}}get isPresenting(){return null!=this.presentedScene}get target(){return this.oldTarget}updateTarget(){let e=this.presentedScene;if(null!=e){let t=e.getTarget();this.oldTarget.copy(t),this.placeOnWall?t.z=e.boundingBox.min.z:t.y=e.boundingBox.min.y,e.setTarget(t.x,t.y,t.z)}}postSessionCleanup(){let e=this.currentSession;null!=e&&(e.removeEventListener("selectstart",this.onSelectStart),e.removeEventListener("selectend",this.onSelectEnd),this.currentSession=null);let t=this.presentedScene;if(this._presentedScene=null,null!=t){let{element:i}=t;null!=this.xrLight&&(t.remove(this.xrLight),this.xrLight.dispose(),this.xrLight=null),t.position.set(0,0,0),t.scale.set(1,1,1),t.setShadowOffset(0);let s=this.turntableRotation;null!=s&&(t.yaw=s);let r=this.oldShadowIntensity;null!=r&&t.setShadowIntensity(r),t.setEnvironmentAndSkybox(i[tQ],i[tw]);let n=this.oldTarget;t.setTarget(n.x,n.y,n.z),t.xrCamera=null,t.element.removeEventListener("load",this.onUpdateScene),t.orientHotspots(0),i.requestUpdate("cameraTarget"),i.requestUpdate("maxCameraOrbit"),i[n7](i.getBoundingClientRect())}this.renderer.height=0;let a=this.exitWebXRButtonContainer;null!=a&&(a.classList.remove("enabled"),a.removeEventListener("click",this.onExitWebXRButtonContainerClick),this.exitWebXRButtonContainer=null);let A=this.transientHitTestSource;null!=A&&(A.cancel(),this.transientHitTestSource=null);let o=this.initialHitSource;null!=o&&(o.cancel(),this.initialHitSource=null),null!=this.placementBox&&(this.placementBox.dispose(),this.placementBox=null),this.lastTick=null,this.turntableRotation=null,this.oldShadowIntensity=null,this.frame=null,this.inputSource=null,this.overlay=null,null!=this.resolveCleanup&&this.resolveCleanup(),this.dispatchEvent({type:"status",status:sQ.NOT_PRESENTING})}updateView(e){let t=this.presentedScene,i=this.threeRenderer.xr;i.updateCamera(sx),t.xrCamera=i.getCamera();let{elements:s}=t.getCamera().matrixWorld;if(t.orientHotspots(Math.atan2(s[1],s[5])),this.initialized||(this.placeInitially(),this.initialized=!0),e.requestViewportScale&&e.recommendedViewportScale){let r=e.recommendedViewportScale;e.requestViewportScale(Math.max(r,.25))}let n=this.currentSession.renderState.baseLayer,a=n.getViewport(e);this.threeRenderer.setViewport(a.x,a.y,a.width,a.height)}placeInitially(){let e=this.presentedScene,{position:t,element:i}=e,s=e.getCamera(),{width:r,height:n}=this.overlay.getBoundingClientRect();e.setSize(r,n),s.projectionMatrixInverse.copy(s.projectionMatrix).invert();let{theta:a,radius:A}=i.getCameraOrbit(),o=s.getWorldDirection(sv);e.yaw=Math.atan2(-o.x,-o.z)-a,this.goalYaw=e.yaw,t.copy(s.position).add(o.multiplyScalar(A)),this.updateTarget();let l=e.getTarget();t.add(l).sub(this.oldTarget),this.goalPosition.copy(t),e.setHotspotsVisibility(!0);let{session:h}=this.frame;h.addEventListener("selectstart",this.onSelectStart),h.addEventListener("selectend",this.onSelectEnd),h.requestHitTestSourceForTransientInput({profile:"generic-touchscreen"}).then(e=>{this.transientHitTestSource=e})}getTouchLocation(){let{axes:e}=this.inputSource.gamepad,t=this.placementBox.getExpandedHit(this.presentedScene,e[0],e[1]);return null!=t&&(sv.copy(t).sub(this.presentedScene.getCamera().position),sv.length()>10)?null:t}getHitPoint(e){let t=this.threeRenderer.xr.getReferenceSpace(),i=e.getPose(t);if(null==i)return null;let s=sS.fromArray(i.transform.matrix);return!0===this.placeOnWall&&(this.goalYaw=Math.atan2(s.elements[4],s.elements[6])),s.elements[5]>.75!==this.placeOnWall?sb.setFromMatrixPosition(s):null}moveToFloor(e){let t=this.initialHitSource;if(null==t)return;let i=e.getHitTestResults(t);if(0==i.length)return;let s=i[0],r=this.getHitPoint(s);null!=r&&(this.placementBox.show=!0,this.isTranslating||(this.placeOnWall?this.goalPosition.copy(r):this.goalPosition.y=r.y),t.cancel(),this.initialHitSource=null,this.dispatchEvent({type:"status",status:sQ.OBJECT_PLACED}))}fingerPolar(e){let t=e[0].inputSource.gamepad.axes,i=e[1].inputSource.gamepad.axes,s=i[0]-t[0],r=i[1]-t[1],n=Math.atan2(r,s),a=this.lastAngle-n;return a>Math.PI?a-=2*Math.PI:a<-Math.PI&&(a+=2*Math.PI),this.lastAngle=n,{separation:Math.sqrt(s*s+r*r),deltaYaw:a}}processInput(e){let t=this.transientHitTestSource;if(null==t||!this.isTranslating&&!this.isTwoFingering&&!this.isRotating)return;let i=e.getHitTestResultsForTransientInput(t),s=this.presentedScene,r=s.scale.x;if(this.isTwoFingering){if(i.length<2)this.isTwoFingering=!1;else{let{separation:n,deltaYaw:a}=this.fingerPolar(i);if(!1===this.placeOnWall&&(this.goalYaw+=a),s.canScale){let A=n/this.firstRatio;this.goalScale=A<1.3&&A>.7692307692307692?1:A}}return}if(2===i.length){this.isTranslating=!1,this.isRotating=!1,this.isTwoFingering=!0;let{separation:o}=this.fingerPolar(i);this.firstRatio=o/r;return}if(this.isRotating){let l=1.5*this.inputSource.gamepad.axes[0];this.goalYaw+=l-this.lastAngle,this.lastAngle=l}else this.isTranslating&&i.forEach(e=>{if(e.inputSource!==this.inputSource)return;let t=null;if(e.results.length>0&&(t=this.getHitPoint(e.results[0])),null==t&&(t=this.getTouchLocation()),null!=t){if(this.goalPosition.sub(this.lastDragPosition),!1===this.placeOnWall){let i=t.y-this.lastDragPosition.y;if(i<0){this.placementBox.offsetHeight=i/r,this.presentedScene.setShadowOffset(i);let n=sv.copy(s.getCamera().position),a=-i/(n.y-t.y);n.multiplyScalar(a),t.multiplyScalar(1-a).add(n)}}this.goalPosition.add(t),this.lastDragPosition.copy(t)}})}moveScene(e){let t=this.presentedScene,{position:i,yaw:s}=t,r=t.boundingSphere.radius,n=this.goalPosition,a=t.scale.x,A=this.placementBox;if(!n.equals(i)||this.goalScale!==a){let{x:o,y:l,z:h}=i;o=this.xDamper.update(o,n.x,e,r),l=this.yDamper.update(l,n.y,e,r),h=this.zDamper.update(h,n.z,e,r),i.set(o,l,h);let c=this.scaleDamper.update(a,this.goalScale,e,1);if(t.scale.set(c,c,c),!this.isTranslating){let u=n.y-l;this.placementComplete&&!1===this.placeOnWall?(A.offsetHeight=u/c,t.setShadowOffset(u)):0===u&&(this.placementComplete=!0,A.show=!1,t.setShadowIntensity(.8))}}A.updateOpacity(e),t.updateTarget(e),t.yaw=this.yawDamper.update(s,this.goalYaw,e,Math.PI)}onWebXRFrame(e,t){this.frame=t,++this.frames;let i=this.threeRenderer.xr.getReferenceSpace(),s=t.getViewerPose(i);null==s&&!0===this.tracking&&this.frames>30&&(this.tracking=!1,this.dispatchEvent({type:"tracking",status:sw.NOT_TRACKING}));let r=this.presentedScene;if(null==s||null==r||!r.element.loaded){this.threeRenderer.clear();return}!1===this.tracking&&(this.tracking=!0,this.dispatchEvent({type:"tracking",status:sw.TRACKING}));let n=!0;for(let a of s.views){if(this.updateView(a),n){this.moveToFloor(t),this.processInput(t);let A=e-this.lastTick;this.moveScene(A),this.renderer.preRender(r,e,A),this.lastTick=e,r.renderShadow(this.threeRenderer)}this.threeRenderer.render(r,r.getCamera()),n=!1}}}/* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ class sR{constructor(e){e.threeRenderer.debug={checkShaderErrors:!0},Promise.resolve().then(()=>{self.dispatchEvent(new CustomEvent("model-viewer-renderer-debug",{detail:{renderer:e,THREE:{ShaderMaterial:el.jyz,Texture:el.xEZ,Mesh:el.Kj0,Scene:el.xsS,PlaneGeometry:el._12,OrthographicCamera:el.iKG,WebGLRenderTarget:el.dd2}}}))})}addScene(e){self.dispatchEvent(new CustomEvent("model-viewer-scene-added-debug",{detail:{scene:e}}))}removeScene(e){self.dispatchEvent(new CustomEvent("model-viewer-scene-removed-debug",{detail:{scene:e}}))}}/* @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ let sD=Symbol("prepared"),sT=Symbol("prepare"),sL=Symbol("preparedGLTF"),sF=Symbol("clone");class sk{constructor(e){this[sL]=e}static prepare(e){if(null==e.scene)throw Error("Model does not have a scene");if(e[sD])return e;let t=this[sT](e);return t[sD]=!0,t}static[sT](e){let{scene:t}=e;return Object.assign(Object.assign({},e),{scene:t,scenes:[t]})}get parser(){return this[sL].parser}get animations(){return this[sL].animations}get scene(){return this[sL].scene}get scenes(){return this[sL].scenes}get cameras(){return this[sL].cameras}get asset(){return this[sL].asset}get userData(){return this[sL].userData}clone(){let e=this.constructor,t=this[sF]();return new e(t)}dispose(){this.scenes.forEach(e=>{e.traverse(e=>{if(!e.isMesh)return;let t=Array.isArray(e.material)?e.material:[e.material];t.forEach(e=>{for(let t in e){let i=e[t];if(i instanceof el.xEZ){let s=i.source.data;null!=s.close&&s.close(),i.dispose()}}e.dispose()}),e.geometry.dispose()})})}[sF](){let e=this[sL],t=function(e){let t=new Map,i=new Map,s=e.clone();return function e(t,i,s){s(t,i);for(let r=0;r{sU(e,t,(e,t)=>{void 0!==t.userData.variantMaterials&&(e.userData.variantMaterials=new Map(t.userData.variantMaterials)),void 0!==t.userData.variantData&&(e.userData.variantData=t.userData.variantData),void 0!==t.userData.originalMaterial&&(e.userData.originalMaterial=t.userData.originalMaterial)})},sU=(e,t,i)=>{i(e,t);for(let s=0;s{let s=t.threeObjectMap.get(e);if(null!=s){for(let A in s)if(null!=A&&"primitives"!==A){let o=A,l=s[o],h=r[o][l],c=n.get(i)||{};c[o]=l,n.set(i,c);let u=a.get(h)||new Set;u.add(i),a.set(h,u)}}});return new sV(e,r,n,a)}static[sH](e,t,i){let s=e=>e.isMesh,r=(e,t)=>{if(i(e,t),e.isObject3D){if(s(e)){if(Array.isArray(e.material))for(let n=0;n{e.renderOrder=1e3,e.frustumCulled=!1,e.name||(e.name=e.uuid);let i=e;if(i.isMesh){let{geometry:r}=i;i.castShadow=!0,i.isSkinnedMesh&&(r.boundingSphere=s,r.boundingBox=null);let n=i.material;if(!0===n.isMeshBasicMaterial&&(n.toneMapped=!1),n.shadowSide=el.Wl3,n.aoMap){let{gltf:a,threeObjectMap:A}=t[sJ],o=A.get(n);if(null!=a.materials&&null!=o&&null!=o.materials){let l=a.materials[o.materials];l.occlusionTexture&&0===l.occlusionTexture.texCoord&&null!=r.attributes.uv&&r.setAttribute("uv2",r.attributes.uv)}}}}),t}get correlatedSceneGraph(){return this[sL][sJ]}[sF](){let e=super[sF](),t=new Map;return e.scene.traverse(e=>{if(e.isMesh){let i=e,s=i.material;if(null!=s){if(t.has(s.uuid)){i.material=t.get(s.uuid);return}i.material=s.clone(),t.set(s.uuid,i.material)}}}),e[sJ]=sV.from(e,this.correlatedSceneGraph),e}}class sj extends el.yxD{constructor(e){super(e),this.type=el.cLu}parse(e){let t=function(e,t){switch(e){case 1:console.error("THREE.RGBELoader Read Error: "+(t||""));break;case 2:console.error("THREE.RGBELoader Write Error: "+(t||""));break;case 3:console.error("THREE.RGBELoader Bad File Format: "+(t||""));break;default:console.error("THREE.RGBELoader: Error: "+(t||""))}return -1},i=function(e,t,i){t=t||1024;let s=e.pos,r=-1,n=0,a="",A=String.fromCharCode.apply(null,new Uint16Array(e.subarray(s,s+128)));for(;0>(r=A.indexOf("\n"))&&n=e.byteLength||!(s=i(e)))return t(1,"no header found");if(!(r=s.match(/^#\?(\S+)/)))return t(3,"bad initial token");for(l.valid|=1,l.programtype=r[1],l.string+=s+"\n";!1!==(s=i(e));){if(l.string+=s+"\n","#"===s.charAt(0)){l.comments+=s+"\n";continue}if((r=s.match(n))&&(l.gamma=parseFloat(r[1])),(r=s.match(a))&&(l.exposure=parseFloat(r[1])),(r=s.match(A))&&(l.valid|=2,l.format=r[1]),(r=s.match(o))&&(l.valid|=4,l.height=parseInt(r[1],10),l.width=parseInt(r[2],10)),2&l.valid&&4&l.valid)break}return 2&l.valid?4&l.valid?l:t(3,"missing image size specifier"):t(3,"missing format specifier")}(s);if(-1!==r){let n=r.width,a=r.height,A=function(e,i,s){if(i<8||i>32767||2!==e[0]||2!==e[1]||128&e[2])return new Uint8Array(e);if(i!==(e[2]<<8|e[3]))return t(3,"wrong scanline width");let r=new Uint8Array(4*i*s);if(!r.length)return t(4,"unable to allocate buffer space");let n=0,a=0,A=4*i,o=new Uint8Array(4),l=new Uint8Array(A),h=s;for(;h>0&&ae.byteLength)return t(1);if(o[0]=e[a++],o[1]=e[a++],o[2]=e[a++],o[3]=e[a++],2!=o[0]||2!=o[1]||(o[2]<<8|o[3])!=i)return t(3,"bad rgbe scanline format");let c=0,u;for(;c128;if(g&&(u-=128),0===u||c+u>A)return t(3,"bad scanline data");if(g){let d=e[a++];for(let p=0;p{}){try{let i=sW.test(e),s=i?sZ:sX,r=await new Promise((i,r)=>s.load(e,i,e=>{t(e.loaded/e.total*.9)},r));return t(1),r.name=e,r.mapping=el.dSO,i||(r.encoding=el.knz),r}finally{t&&t(1)}}async generateEnvironmentMapAndSkybox(e=null,t=null,i=()=>{}){let s;let r="legacy"!==t;("legacy"===t||"neutral"===t)&&(t=null),t=tu(t);let n=Promise.resolve(null);e&&(n=this.loadEquirectFromUrl(e,i)),s=t?this.loadEquirectFromUrl(t,i):e?this.loadEquirectFromUrl(e,i):r?this.loadGeneratedEnvironmentMapAlt():this.loadGeneratedEnvironmentMap();let[a,A]=await Promise.all([s,n]);if(null==a)throw Error("Failed to load environment map.");return{environmentMap:a,skybox:A}}async loadEquirectFromUrl(e,t){if(!this.skyboxCache.has(e)){let i=this.load(e,t);this.skyboxCache.set(e,i)}return this.skyboxCache.get(e)}async GenerateEnvironmentMap(e,t){await tC();let i=this.threeRenderer,s=new el.oAp(256,{generateMipmaps:!1,type:el.cLu,format:el.wk1,encoding:el.rnI,depthBuffer:!0}),r=new el._am(.1,100,s),n=r.renderTarget.texture;n.name=t;let a=i.outputEncoding,A=i.toneMapping;return i.toneMapping=el.uL9,i.outputEncoding=el.rnI,r.update(i,e),this.blurCubemap(s,.04),i.toneMapping=A,i.outputEncoding=a,n}async loadGeneratedEnvironmentMap(){return null==this.generatedEnvironmentMap&&(this.generatedEnvironmentMap=this.GenerateEnvironmentMap(new sz,"legacy")),this.generatedEnvironmentMap}async loadGeneratedEnvironmentMapAlt(){return null==this.generatedEnvironmentMapAlt&&(this.generatedEnvironmentMapAlt=this.GenerateEnvironmentMap(new s$,"neutral")),this.generatedEnvironmentMapAlt}blurCubemap(e,t){if(null==this.blurMaterial){this.blurMaterial=this.getBlurShader(20);let i=new el.DvJ,s=new el.Kj0(i,this.blurMaterial);this.blurScene=new el.xsS,this.blurScene.add(s)}let r=e.clone();this.halfblur(e,r,t,"latitudinal"),this.halfblur(r,e,t,"longitudinal")}halfblur(e,t,i,s){let r=e.width,n=isFinite(i)?Math.PI/(2*r):2*Math.PI/39,a=i/n,A=isFinite(i)?1+Math.floor(3*a):20;A>20&&console.warn(`sigmaRadians, ${i}, is too large and will clip, as it requested ${A} samples when the maximum is set to 20`);let o=[],l=0;for(let h=0;h<20;++h){let c=h/a,u=Math.exp(-c*c/2);o.push(u),0==h?l+=u:h= samples ) { break; } float theta = dTheta * float( i ); gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); } } `,blending:el.jFi,depthTest:!1,depthWrite:!1,side:el._Li});return s}async dispose(){for(let[,e]of this.skyboxCache){let t=await e;t.dispose()}null!=this.generatedEnvironmentMap&&((await this.generatedEnvironmentMap).dispose(),this.generatedEnvironmentMap=null),null!=this.generatedEnvironmentMapAlt&&((await this.generatedEnvironmentMapAlt).dispose(),this.generatedEnvironmentMapAlt=null),null!=this.blurMaterial&&this.blurMaterial.dispose()}}let s1=[1,.79,.62,.5,.4,.31,.25],s2="high-performance";class s3 extends el.pBf{constructor(e){super(),this.loader=new iX(sY),this.width=0,this.height=0,this.dpr=1,this.debugger=null,this.scenes=new Set,this.multipleScenesVisible=!1,this.lastTick=performance.now(),this.renderedLastFrame=!1,this.scaleStep=0,this.lastStep=3,this.avgFrameDuration=50,this.onWebGLContextLost=e=>{this.dispatchEvent({type:"contextlost",sourceEvent:e})},this.onWebGLContextRestored=()=>{var e;for(let t of(null===(e=this.textureUtils)||void 0===e||e.dispose(),this.textureUtils=new s0(this.threeRenderer),this.scenes))t.element[tv]()},this.dpr=tf(),this.canvas3D=document.createElement("canvas"),this.canvas3D.id="webgl-canvas",this.canvas3D.classList.add("show");try{this.threeRenderer=new el.CP7({canvas:this.canvas3D,alpha:!0,antialias:!0,powerPreference:e.powerPreference,preserveDrawingBuffer:!0}),this.threeRenderer.autoClear=!0,this.threeRenderer.outputEncoding=el.knz,this.threeRenderer.physicallyCorrectLights=!0,this.threeRenderer.setPixelRatio(1),this.debugger=e.debug?new sR(this):null,this.threeRenderer.debug={checkShaderErrors:!!this.debugger},this.threeRenderer.toneMapping=el.LY2}catch(t){console.warn(t)}this.arRenderer=new sM(this),this.textureUtils=this.canRender?new s0(this.threeRenderer):null,iX.initializeKTX2Loader(this.threeRenderer),this.canvas3D.addEventListener("webglcontextlost",this.onWebGLContextLost),this.canvas3D.addEventListener("webglcontextrestored",this.onWebGLContextRestored),this.updateRendererSize()}static get singleton(){return this._singleton}static resetSingleton(){let e=this._singleton.dispose();for(let t of e)t.disconnectedCallback();for(let i of(this._singleton=new s3({powerPreference:(self.ModelViewerElement||{}).powerPreference||s2,debug:tE()}),e))i.connectedCallback()}get canRender(){return null!=this.threeRenderer}get scaleFactor(){return s1[this.scaleStep]}set minScale(e){let t=1;for(;t0&&this.threeRenderer.setAnimationLoop((e,t)=>this.render(e,t)),null!=this.debugger&&this.debugger.addScene(e)}unregisterScene(e){this.scenes.delete(e),this.canvas3D.parentElement===e.canvas.parentElement&&e.canvas.parentElement.removeChild(this.canvas3D),this.canRender&&0===this.scenes.size&&this.threeRenderer.setAnimationLoop(null),null!=this.debugger&&this.debugger.removeScene(e)}displayCanvas(e){return this.multipleScenesVisible?e.element[n4]:this.canvas3D}countVisibleScenes(){let{canvas3D:e}=this,t=0,i=null;for(let s of this.scenes){let{element:r}=s;r.modelIsVisible&&null==s.externalRenderer&&++t,e.parentElement===s.canvas.parentElement&&(i=s)}let n=t>1;if(null!=i){let a=n&&!this.multipleScenesVisible,A=!i.element.modelIsVisible;if(a||A){let{width:o,height:l}=this.sceneSize(i);this.copyPixels(i,o,l),e.parentElement.removeChild(e)}}this.multipleScenesVisible=n}updateRendererSize(){let e=tf();if(e!==this.dpr)for(let t of this.scenes){let{element:i}=t;i[nV](i.getBoundingClientRect())}let s=0,r=0;for(let n of this.scenes)s=Math.max(s,n.width),r=Math.max(r,n.height);if(s!==this.width||r!==this.height||e!==this.dpr)for(let a of(this.width=s,this.height=r,this.dpr=e,s=Math.ceil(s*e),r=Math.ceil(r*e),this.canRender&&this.threeRenderer.setSize(s,r,!1),this.scenes)){let{canvas:A}=a;A.width=s,A.height=r,a.forceRescale()}}updateRendererScale(e){let t=this.scaleStep;this.avgFrameDuration+=tI(.2*(e-this.avgFrameDuration),-5,5),this.avgFrameDuration>60?++this.scaleStep:this.avgFrameDuration<40&&this.scaleStep>0&&--this.scaleStep,this.scaleStep=Math.min(this.scaleStep,this.lastStep),t!==this.scaleStep&&(this.avgFrameDuration=50)}shouldRender(e){if(e.shouldRender())e.scaleStep!=this.scaleStep&&(e.scaleStep=this.scaleStep,this.rescaleCanvas(e));else{if(0==e.scaleStep)return!1;e.scaleStep=0,this.rescaleCanvas(e)}return!0}rescaleCanvas(e){let t=s1[e.scaleStep],i=Math.ceil(this.width/t),s=Math.ceil(this.height/t),{style:r}=e.canvas;r.width=`${i}px`,r.height=`${s}px`,this.canvas3D.style.width=`${i}px`,this.canvas3D.style.height=`${s}px`;let n=this.dpr*t,a=t<1?"GPU throttling":this.dpr!==window.devicePixelRatio?"No meta viewport tag":"";e.element.dispatchEvent(new CustomEvent("render-scale",{detail:{reportedDpr:window.devicePixelRatio,renderedDpr:n,minimumDpr:this.dpr*s1[this.lastStep],pixelWidth:Math.ceil(e.width*n),pixelHeight:Math.ceil(e.height*n),reason:a}}))}sceneSize(e){let{dpr:t}=this,i=s1[e.scaleStep],s=Math.min(Math.ceil(e.width*i*t),this.canvas3D.width),r=Math.min(Math.ceil(e.height*i*t),this.canvas3D.height);return{width:s,height:r}}copyPixels(e,t,i){let s=e.context;if(null==s){console.log("could not acquire 2d context");return}s.clearRect(0,0,t,i),s.drawImage(this.canvas3D,0,0,t,i,0,0,t,i),e.canvas.classList.add("show")}orderedScenes(){let e=[];for(let t of[!1,!0])for(let i of this.scenes)i.element.modelIsVisible===t&&e.push(i);return e}get isPresenting(){return this.arRenderer.isPresenting}preRender(e,t,i){let{element:s,exposure:r}=e;s[n6](t,i);let n="number"==typeof r&&!Number.isNaN(r);this.threeRenderer.toneMappingExposure=n?r:1}render(e,t){if(null!=t){this.arRenderer.onWebXRFrame(e,t);return}let i=e-this.lastTick;if(this.lastTick=e,!this.canRender||this.isPresenting)return;this.countVisibleScenes(),this.updateRendererSize(),this.renderedLastFrame&&(this.updateRendererScale(i),this.renderedLastFrame=!1);let{canvas3D:s}=this;for(let r of this.orderedScenes()){let{element:n}=r;if(!n.loaded||!n.modelIsVisible&&r.renderCount>0||(this.preRender(r,e,i),!this.shouldRender(r)))continue;if(null!=r.externalRenderer){let a=r.getCamera();a.updateMatrix();let{matrix:A,projectionMatrix:o}=a,l=A.elements.slice(),h=r.getTarget();l[12]+=h.x,l[13]+=h.y,l[14]+=h.z,r.externalRenderer.render({viewMatrix:l,projectionMatrix:o.elements});continue}if(!n.modelIsVisible&&!this.multipleScenesVisible)for(let c of this.scenes)c.element.modelIsVisible&&c.queueRender();let{width:u,height:g}=this.sceneSize(r);r.renderShadow(this.threeRenderer),this.threeRenderer.setRenderTarget(null),this.threeRenderer.setViewport(0,Math.ceil(this.height*this.dpr)-g,u,g),this.threeRenderer.render(r,r.camera),this.multipleScenesVisible||0===r.renderCount?this.copyPixels(r,u,g):s.parentElement!==r.canvas.parentElement&&(r.canvas.parentElement.appendChild(s),r.canvas.classList.remove("show")),r.hasRendered(),++r.renderCount,this.renderedLastFrame=!0}}dispose(){null!=this.textureUtils&&this.textureUtils.dispose(),null!=this.threeRenderer&&this.threeRenderer.dispose(),this.textureUtils=null,this.threeRenderer=null;let e=[];for(let t of this.scenes)e.push(t.element);return this.canvas3D.removeEventListener("webglcontextlost",this.onWebGLContextLost),this.canvas3D.removeEventListener("webglcontextrestored",this.onWebGLContextRestored),e}}s3._singleton=new s3({powerPreference:(self.ModelViewerElement||{}).powerPreference||s2,debug:tE()});/* @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ let s4=Symbol("correlatedObjects"),s8=Symbol("sourceObject"),s5=Symbol("onUpdate");class s6{constructor(e,t,i=null){this[s5]=e,this[s8]=t,this[s4]=i}}/* @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ let s9=new el.vBJ,s7=new el._12(2,2),re=0,rt=Symbol("threeTexture");Symbol("applyTexture");class ri extends s6{get[rt](){var e;return console.assert(null!=this[s4]&&this[s4].size>0,"Image correlated object is undefined"),null===(e=this[s4])||void 0===e?void 0:e.values().next().value}constructor(e,t,i){super(e,i=null!=i?i:{name:t&&t.image&&t.image.src?t.image.src.split("/").pop():"adhoc_image",uri:t&&t.image&&t.image.src?t.image.src:"adhoc_image"+re++},new Set(t?[t]:[]))}get name(){return this[s8].name||""}get uri(){return this[s8].uri}get bufferView(){return this[s8].bufferView}get type(){return null!=this.uri?"external":"embedded"}set name(e){this[s8].name=e}async createThumbnail(e,t){let i=new el.xsS;s9.map=this[rt];let s=new el.Kj0(s7,s9);i.add(s);let r=new el.iKG(-1,1,1,-1,0,1),{threeRenderer:n}=s3.singleton,a=new el.dd2(e,t);n.setRenderTarget(a),n.render(i,r),n.setRenderTarget(null);let A=new Uint8Array(e*t*4);n.readRenderTargetPixels(a,0,0,e,t,A),nk.width=e,nk.height=t;let o=nk.getContext("2d"),l=o.createImageData(e,t);return l.data.set(A),o.putImageData(l,0,0),new Promise(async(e,t)=>{nk.toBlob(i=>{if(!i)return t("Failed to capture thumbnail.");e(URL.createObjectURL(i))},"image/png")})}}(g=S||(S={}))[g.Nearest=9728]="Nearest",g[g.Linear=9729]="Linear",g[g.NearestMipmapNearest=9984]="NearestMipmapNearest",g[g.LinearMipmapNearest=9985]="LinearMipmapNearest",g[g.NearestMipmapLinear=9986]="NearestMipmapLinear",g[g.LinearMipmapLinear=9987]="LinearMipmapLinear",(d=b||(b={}))[d.ClampToEdge=33071]="ClampToEdge",d[d.MirroredRepeat=33648]="MirroredRepeat",d[d.Repeat=10497]="Repeat";/* @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ let rs=(()=>{let e=[S.Nearest,S.Linear,S.NearestMipmapNearest,S.LinearMipmapLinear,S.NearestMipmapLinear,S.LinearMipmapLinear];return t=>e.indexOf(t)>-1})(),rr=(()=>{let e=[S.Nearest,S.Linear];return t=>e.indexOf(t)>-1})(),rn=(()=>{let e=[b.ClampToEdge,b.MirroredRepeat,b.Repeat];return t=>e.indexOf(t)>-1})(),ra=(e,t)=>{switch(e){case"minFilter":return rs(t);case"magFilter":return rr(t);case"wrapS":case"wrapT":return rn(t);default:throw Error(`Cannot configure property "${e}" on Sampler`)}},rA=Symbol("threeTextures"),ro=Symbol("setProperty"),rl=Symbol("sourceSampler");class rh extends s6{get[rA](){return console.assert(null!=this[s4]&&this[s4].size>0,"Sampler correlated object is undefined"),this[s4]}get[rl](){return console.assert(null!=this[s8],"Sampler source is undefined"),this[s8]}constructor(e,t,i){null==(i=null!=i?i:{}).minFilter&&(i.minFilter=t?t.minFilter:S.LinearMipmapLinear),null==i.magFilter&&(i.magFilter=t?t.magFilter:S.Linear),null==i.wrapS&&(i.wrapS=t?t.wrapS:b.Repeat),null==i.wrapT&&(i.wrapT=t?t.wrapT:b.Repeat),super(e,i,new Set(t?[t]:[]))}get name(){return this[s8].name||""}get minFilter(){return this[rl].minFilter}get magFilter(){return this[rl].magFilter}get wrapS(){return this[rl].wrapS}get wrapT(){return this[rl].wrapT}setMinFilter(e){this[ro]("minFilter",e)}setMagFilter(e){this[ro]("magFilter",e)}setWrapS(e){this[ro]("wrapS",e)}setWrapT(e){this[ro]("wrapT",e)}[ro](e,t){let i=this[rl];if(null!=i){if(ra(e,t))for(let s of(i[e]=t,this[rA]))s[e]=t,s.needsUpdate=!0;this[s5]()}}}/* @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ let rc=Symbol("image"),ru=Symbol("sampler");class rg extends s6{constructor(e,t,i=null,s=null,r=null){super(e,i||{},new Set(t?[t]:[])),this[ru]=new rh(e,t,s),this[rc]=new ri(e,t,r)}get name(){return this[s8].name||""}set name(e){this[s8].name=e}get sampler(){return this[ru]}get source(){return this[rc]}}let rd=Symbol("texture"),rp=Symbol("transform"),rm=Symbol("materials"),rI=Symbol("usage");(p=R||(R={}))[p.Base=0]="Base",p[p.MetallicRoughness=1]="MetallicRoughness",p[p.Normal=2]="Normal",p[p.Occlusion=3]="Occlusion",p[p.Emissive=4]="Emissive";class rf{constructor(e,t,i,s,r,n){if(this[x]=null,this[M]={rotation:0,scale:new el.FM8(1,1),offset:new el.FM8(0,0)},n&&i){let a=r.textures?r.textures[n.index]:null,A=a&&r.samplers?r.samplers[a.sampler]:null,o=a&&r.images?r.images[a.source]:null;this[rp].rotation=i.rotation,this[rp].scale.copy(i.repeat),this[rp].offset.copy(i.offset),this[rd]=new rg(e,i,a,A,o)}this.onUpdate=e,this[rm]=s,this[rI]=t}get texture(){return this[rd]}setTexture(e){let t=null!=e?e.source[rt]:null,i=el.knz;if(this[rd]=e,this[rm])for(let s of this[rm]){switch(this[rI]){case R.Base:s.map=t;break;case R.MetallicRoughness:i=el.rnI,s.metalnessMap=t,s.roughnessMap=t;break;case R.Normal:i=el.rnI,s.normalMap=t;break;case R.Occlusion:i=el.rnI,s.aoMap=t;break;case R.Emissive:s.emissiveMap=t}s.needsUpdate=!0}t&&(t.encoding=i,t.rotation=this[rp].rotation,t.repeat=this[rp].scale,t.offset=this[rp].offset),this.onUpdate()}}x=rd,M=rp;/* @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ let rE=Symbol("threeMaterials"),rC=Symbol("baseColorTexture"),rB=Symbol("metallicRoughnessTexture");class ry extends s6{constructor(e,t,i,s){super(e,i,s),null==i.baseColorFactor&&(i.baseColorFactor=[1,1,1,1]),null==i.roughnessFactor&&(i.roughnessFactor=1),null==i.metallicFactor&&(i.metallicFactor=1);let{baseColorTexture:r,metallicRoughnessTexture:n}=i,{map:a,metalnessMap:A}=s.values().next().value;this[rC]=new rf(e,R.Base,a,s,t,r||null),this[rB]=new rf(e,R.MetallicRoughness,A,s,t,n||null)}get[rE](){return this[s4]}get baseColorFactor(){return this[s8].baseColorFactor}get metallicFactor(){return this[s8].metallicFactor}get roughnessFactor(){return this[s8].roughnessFactor}get baseColorTexture(){return this[rC]}get metallicRoughnessTexture(){return this[rB]}setBaseColorFactor(e){let t=new el.Ilk;for(let i of(e instanceof Array?t.fromArray(e):t.set(e).convertSRGBToLinear(),this[rE]))i.color.set(t),e instanceof Array?i.opacity=e[3]:(e=[0,0,0,i.opacity],t.toArray(e));let s=this[s8];s.baseColorFactor=e,this[s5]()}setMetallicFactor(e){for(let t of this[rE])t.metalness=e;let i=this[s8];i.metallicFactor=e,this[s5]()}setRoughnessFactor(e){for(let t of this[rE])t.roughness=e;let i=this[s8];i.roughnessFactor=e,this[s5]()}}let rQ=Symbol("pbrMetallicRoughness"),rw=Symbol("normalTexture"),rv=Symbol("occlusionTexture"),rS=Symbol("emissiveTexture"),rb=Symbol("backingThreeMaterial"),rx=Symbol("applyAlphaCutoff"),rM=Symbol("lazyLoadGLTFInfo"),rR=Symbol("initialize"),rD=Symbol("getLoadedMaterial"),rT=Symbol("ensureMaterialIsLoaded"),rL=Symbol("gltfIndex"),rF=Symbol("setActive"),rk=Symbol("variantIndices"),r_=Symbol("isActive"),rU=Symbol("variantSet"),rN=Symbol("modelVariants");class rG extends s6{constructor(e,t,i,s,r,n,a,A){super(e,i,a),this[D]=new Set,this[rL]=s,this[r_]=r,this[rN]=n,null==A?this[rR](t):this[rM]=A}get[(D=rU,rb)](){return this[s4].values().next().value}[rR](e){let t=this[s5],i=this[s8],s=this[s4];i.extensions&&i.extensions.KHR_materials_pbrSpecularGlossiness&&console.warn(`Material ${i.name} uses a deprecated extension "KHR_materials_pbrSpecularGlossiness", please use "pbrMetallicRoughness" instead. Specular Glossiness materials are currently supported for rendering, but not for our scene-graph API, nor for auto-generation of USDZ for Quick Look.`),null==i.pbrMetallicRoughness&&(i.pbrMetallicRoughness={}),this[rQ]=new ry(t,e,i.pbrMetallicRoughness,s),null==i.emissiveFactor&&(i.emissiveFactor=[0,0,0]),null==i.doubleSided&&(i.doubleSided=!1),null==i.alphaMode&&(i.alphaMode="OPAQUE"),null==i.alphaCutoff&&(i.alphaCutoff=.5);let{normalTexture:r,occlusionTexture:n,emissiveTexture:a}=i,{normalMap:A,aoMap:o,emissiveMap:l}=s.values().next().value;this[rw]=new rf(t,R.Normal,A,s,e,r||null),this[rv]=new rf(t,R.Occlusion,o,s,e,n||null),this[rS]=new rf(t,R.Emissive,l,s,e,a||null)}async [rD](){if(null!=this[rM]){let{set:e,material:t}=await this[rM].doLazyLoad();return this[s4]=e,this[rR](this[rM].gltf),this[rM]=void 0,this.ensureLoaded=async()=>{},t}return this[s4].values().next().value}[rT](){if(null!=this[rM])throw Error(`Material "${this.name}" has not been loaded, call 'await myMaterial.ensureLoaded()' before using an unloaded material.`)}async ensureLoaded(){await this[rD]()}get isLoaded(){return null==this[rM]}get isActive(){return this[r_]}[rF](e){this[r_]=e}get name(){return this[s8].name}set name(e){let t=this[s8];if(null!=t&&(t.name=e),null!=this[s4])for(let i of this[s4])i.name=e}get pbrMetallicRoughness(){return this[rT](),this[rQ]}get normalTexture(){return this[rT](),this[rw]}get occlusionTexture(){return this[rT](),this[rv]}get emissiveTexture(){return this[rT](),this[rS]}get emissiveFactor(){return this[rT](),this[s8].emissiveFactor}get index(){return this[rL]}[rk](){return this[rU]}hasVariant(e){let t=this[rN].get(e);return null!=t&&this[rU].has(t.index)}setEmissiveFactor(e){this[rT]();let t=new el.Ilk;for(let i of(e instanceof Array?t.fromArray(e):t.set(e).convertSRGBToLinear(),this[s4]))i.emissive.set(t);this[s8].emissiveFactor=t.toArray(),this[s5]()}[rx](){this[rT]();let e=this[s8];for(let t of this[s4])"MASK"===this[s8].alphaMode?t.alphaTest=e.alphaCutoff:t.alphaTest=void 0,t.needsUpdate=!0}setAlphaCutoff(e){this[rT](),this[s8].alphaCutoff=e,this[rx](),this[s5]()}getAlphaCutoff(){return this[rT](),this[s8].alphaCutoff}setDoubleSided(e){for(let t of(this[rT](),this[s4]))t.side=e?el.ehD:el.Wl3,t.needsUpdate=!0;this[s8].doubleSided=e,this[s5]()}getDoubleSided(){return this[rT](),this[s8].doubleSided}setAlphaMode(e){this[rT]();let t=(e,t)=>{e.transparent=t,e.depthWrite=!t};for(let i of(this[s8].alphaMode=e,this[s4]))t(i,"BLEND"===e),this[rx](),i.needsUpdate=!0;this[s5]()}getAlphaMode(){return this[rT](),this[s8].alphaMode}}let rP=Symbol("materials"),rO=Symbol("variantToMaterialMap"),rH=Symbol("modelVariants"),rq=Symbol("mesh");Symbol("primitives"),Symbol("loadVariant"),Symbol("prepareVariantsForExport"),Symbol("switchVariant");let rK=Symbol("children"),rV=Symbol("initialMaterialIdx"),rJ=Symbol("activeMaterialIdx");class rY{constructor(e){this.name="",this[T]=[],this.name=e}}T=rK;class rj extends rY{constructor(e,t,i,s){super(e.name),this[L]=new Map,this[F]=new Map,this[k]=0,this[_]=0,this[rq]=e;let{gltf:r,threeGLTF:n,threeObjectMap:a}=s;this[rH]=i,this.mesh.userData.variantData=i;let A=a.get(e.material);null!=A.materials?this[rV]=this[rJ]=A.materials:console.error(`Primitive (${e.name}) missing initial material reference.`);let o=e.userData.associations||{};if(null==o.meshes){console.error("Mesh is missing primitive index association");return}let l=r.meshes||[],h=l[o.meshes].primitives||[],c=h[o.primitives];if(null==c){console.error("Mesh primitive definition is missing.");return}if(null!=c.material)this[rP].set(c.material,t[c.material]);else{let u=t.findIndex(e=>"Default"===e.name);u>=0?this[rP].set(u,t[u]):console.warn("gltfPrimitive has no material!")}if(c.extensions&&c.extensions.KHR_materials_variants){let g=c.extensions.KHR_materials_variants,d=n.parser.json.extensions,p=d.KHR_materials_variants.variants;for(let m of g.mappings){let I=t[m.material];for(let f of(this[rP].set(m.material,I),m.variants)){let{name:E}=p[f];this[rO].set(f,I),I[rk]().add(f),i.has(E)||i.set(E,{name:E,index:f})}}}}get mesh(){return this[rq]}async setActiveMaterial(e){let t=this[rP].get(e);return null!=t&&(this.mesh.material=await t[rD](),this[rJ]=e),this.mesh.material}getActiveMaterial(){return this[rP].get(this[rJ])}getMaterial(e){return this[rP].get(e)}async enableVariant(e){if(null==e)return this.setActiveMaterial(this[rV]);if(null!=this[rO]&&this[rH].has(e)){let t=this[rH].get(e);return this.enableVariantHelper(t.index)}return null}async enableVariantHelper(e){if(null!=this[rO]&&null!=e){let t=this[rO].get(e);if(null!=t)return this.setActiveMaterial(t.index)}return null}async instantiateVariants(){if(null!=this[rO])for(let e of this[rO].keys()){let t=this.mesh.userData.variantMaterials.get(e);if(null!=t.material)continue;let i=await this.enableVariantHelper(e);null!=i&&(t.material=i)}}get variantInfo(){return this[rO]}addVariant(e,t){if(!this.ensureVariantIsUnused(t))return!1;this[rH].has(t)||this[rH].set(t,{name:t,index:this[rH].size});let i=this[rH].get(t),s=i.index;return e[rk]().add(s),this[rO].set(s,e),this[rP].set(e.index,e),this.updateVariantUserData(s,e),!0}deleteVariant(e){if(this.variantInfo.has(e)){this.variantInfo.delete(e);let t=this.mesh.userData.variantMaterials;null!=t&&t.delete(e)}}updateVariantUserData(e,t){t[rk]().add(e),this.mesh.userData.variantData=this[rH],this.mesh.userData.variantMaterials=this.mesh.userData.variantMaterials||new Map;let i=this.mesh.userData.variantMaterials;i.set(e,{material:t[s4].values().next().value,gltfMaterialIndex:t.index})}ensureVariantIsUnused(e){let t=this[rH].get(e);return!(null!=t&&this.variantInfo.has(t.index))||(console.warn(`Primitive cannot add variant '${e}' for this material, it already exists.`),!1)}}L=rP,F=rO,k=rV,_=rJ;let rz=Symbol("materials"),r$=Symbol("hierarchy"),rW=Symbol("roots"),rX=Symbol("primitives");Symbol("loadVariant");let rZ=Symbol("correlatedSceneGraph"),r0=Symbol("prepareVariantsForExport"),r1=Symbol("switchVariant"),r2=Symbol("threeScene"),r3=Symbol("materialsFromPoint"),r4=Symbol("materialFromPoint"),r8=Symbol("variantData"),r5=Symbol("availableVariants"),r6=Symbol("modelOnUpdate"),r9=Symbol("cloneMaterial");class r7{constructor(e,t,i,s){this.gltf=e,this.gltfElementMap=t,this.mapKey=i,this.doLazyLoad=s}}class ne{constructor(e,t=()=>{}){this[U]=[],this[N]=[],this[G]=[],this[P]=[],this[O]=()=>{},this[H]=new Map,this[r6]=t,this[rZ]=e;let{gltf:i,threeGLTF:s,gltfElementMap:r}=e;for(let[n,a]of(this[r2]=s.scene,i.materials.entries())){let A=r.get(a);if(null!=A)this[rz].push(new rG(t,i,a,n,!0,this[r8],A));else{let o=i.materials||[],l=o[n],h=n,c=async()=>{let e=await s.parser.getDependency("material",h),t=new Set;return r.set(l,t),t.add(e),{set:t,material:e}};this[rz].push(new rG(t,i,l,n,!1,this[r8],A,new r7(i,r,l,c)))}}let u=new Map,g=[];for(let d of s.scene.children)g.push(d);for(;g.length>0;){let p=g.pop(),m=null;p instanceof el.Kj0?(m=new rj(p,this.materials,this[r8],e),this[rX].push(m)):m=new rY(p.name);let I=u.get(p);for(let f of(null!=I?I[rK].push(m):this[rW].push(m),this[r$].push(m),p.children))g.push(f),u.set(p,m)}}get materials(){return this[rz]}[(U=rz,N=r$,G=rW,P=rX,O=r6,H=r8,r5)](){let e=Array.from(this[r8].values());return e.sort((e,t)=>e.index-t.index),e.map(e=>e.name)}getMaterialByName(e){let t=this[rz].filter(t=>t.name===e);return t.length>0?t[0]:null}[r3](e){let t=e.intersectObject(this[r2],!0);return t.map(e=>{let t=this[r$].find(t=>t instanceof rj&&t.mesh===e.object);return null!=t?t.getActiveMaterial():null})}[r4](e){let t=this[r3](e);return t.length>0?t[0]:null}async [r1](e){for(let t of this[rX])await t.enableVariant(e);for(let i of this.materials)i[rF](!1);for(let s of this[rX])this.materials[s.getActiveMaterial().index][rF](!0)}async [r0](){let e=[];for(let t of this[rX])e.push(t.instantiateVariants());await Promise.all(e)}[r9](e,t){let i=this.materials[e];i.isLoaded||console.error(`Cloning an unloaded material, call 'material.ensureLoaded() before cloning the material.`);let s=i[s4],r=JSON.parse(JSON.stringify(i[s8]));r.name=t;let n=this[rZ].gltf;n.materials.push(r);let a=new Set;for(let[A,o]of s.entries()){let l=o.clone();l.name=t+(s.size>1?"_inst"+A:""),a.add(l)}let h=new rG(this[r6],this[rZ].gltf,r,this[rz].length,!1,this[r8],a);return this[rz].push(h),h}createMaterialInstanceForVariant(e,t,i,s=!0){let r=null;for(let n of this[rX]){let a=this[r8].get(i);null!=a&&n.variantInfo.has(a.index)||null==n.getMaterial(e)||(this.hasVariant(i)||this.createVariant(i),null==r&&(r=this[r9](e,t)),n.addVariant(r,i))}if(s&&null!=r)for(let A of(r[rF](!0),this.materials[e][rF](!1),this[rX]))A.enableVariant(i);return r}createVariant(e){this[r8].has(e)?console.warn(`Variant '${e}'' already exists`):this[r8].set(e,{name:e,index:this[r8].size})}hasVariant(e){return this[r8].has(e)}setMaterialToVariant(e,t){if(null==this[r5]().find(e=>e===t)){console.warn(`Can't add material to '${t}', the variant does not exist.'`);return}if(e<0||e>=this.materials.length){console.error("setMaterialToVariant(): materialIndex is out of bounds.");return}for(let i of this[rX]){let s=i.getMaterial(e);null!=s&&i.addVariant(s,t)}}updateVariantName(e,t){let i=this[r8].get(e);null!=i&&(i.name=t,this[r8].set(t,i),this[r8].delete(e))}deleteVariant(e){let t=this[r8].get(e);if(null!=t){for(let i of this.materials)i.hasVariant(e)&&i[rU].delete(t.index);for(let s of this[rX])s.deleteVariant(t.index);this[r8].delete(e)}}}/* @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var nt=function(e,t,i,s){var r,n=arguments.length,a=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,i,s);else for(var A=e.length-1;A>=0;A--)(r=e[A])&&(a=(n<3?r(a):n>3?r(t,i,a):r(t,i))||a);return n>3&&a&&Object.defineProperty(t,i,a),a};let ni=Symbol("currentGLTF"),ns=Symbol("originalGltfJson"),nr=Symbol("model"),nn=Symbol("getOnUpdateMethod"),na=Symbol("textureLoader"),nA=(e,t)=>({type:"number",number:e,unit:t}),no=(()=>{let e={};return t=>{let i=t;if(i in e)return e[i];let s=[],r=0;for(;t;){if(++r>1e3){t="";break}let n=nl(t),a=n.nodes[0];if(null==a||0===a.terms.length)break;s.push(a),t=n.remainingInput}return e[i]=s}})(),nl=(()=>{let e=/^(\-\-|[a-z\u0240-\uffff])/i,t=/^([\*\+\/]|[\-]\s)/i,i=/^[\),]/;return s=>{let r=[];for(;s.length&&(s=s.trim(),!i.test(s));)if("("===s[0]){let{nodes:n,remainingInput:a}=ng(s);s=a,r.push({type:"function",name:{type:"ident",value:"calc"},arguments:n})}else if(e.test(s)){let A=nh(s),o=A.nodes[0];if("("===(s=A.remainingInput)[0]){let{nodes:l,remainingInput:h}=ng(s);r.push({type:"function",name:o,arguments:l}),s=h}else r.push(o)}else if(t.test(s))r.push({type:"operator",value:s[0]}),s=s.slice(1);else{let{nodes:c,remainingInput:u}="#"===s[0]?nu(s):nc(s);if(0===c.length)break;r.push(c[0]),s=u}return{nodes:[{type:"expression",terms:r}],remainingInput:s}}})(),nh=(()=>{let e=/[^a-z0-9_\-\u0240-\uffff]/i;return t=>{let i=t.match(e),s=null==i?t:t.substr(0,i.index),r=null==i?"":t.substr(i.index);return{nodes:[{type:"ident",value:s}],remainingInput:r}}})(),nc=(()=>{let e=/[\+\-]?(\d+[\.]\d+|\d+|[\.]\d+)([eE][\+\-]?\d+)?/,t=/^[a-z%]+/i,i=/^(m|mm|cm|rad|deg|[%])$/;return s=>{let r=s.match(e),n=null==r?"0":r[0];s=null==n?s:s.slice(n.length);let a=s.match(t),A=null!=a&&""!==a[0]?a[0]:null,o=null==a?s:s.slice(A.length);return null==A||i.test(A)||(A=null),{nodes:[{type:"number",number:parseFloat(n)||0,unit:A}],remainingInput:o}}})(),nu=(()=>{let e=/^[a-f0-9]*/i;return t=>{t=t.slice(1).trim();let i=t.match(e),s=null==i?[]:[{type:"hex",value:i[0]}];return{nodes:s,remainingInput:null==i?t:t.slice(i[0].length)}}})(),ng=e=>{let t=[];for(e=e.slice(1).trim();e.length;){let i=nl(e);if(t.push(i.nodes[0]),","===(e=i.remainingInput.trim())[0])e=e.slice(1).trim();else if(")"===e[0]){e=e.slice(1);break}}return{nodes:t,remainingInput:e}},nd=Symbol("visitedTypes");class np{constructor(e){this[nd]=e}walk(e,t){let i=e.slice();for(;i.length;){let s=i.shift();switch(this[nd].indexOf(s.type)>-1&&t(s),s.type){case"expression":i.unshift(...s.terms);break;case"function":i.unshift(s.name,...s.arguments)}}}}let nm=Object.freeze({type:"number",number:0,unit:null}),nI=(e,t=0)=>{let{number:i,unit:s}=e;if(isFinite(i)){if("rad"===e.unit||null==e.unit)return e}else i=t,s="rad";let r="deg"===s&&null!=i,n=r?i:0;return{type:"number",number:n*Math.PI/180,unit:"rad"}},nf=(e,t=0)=>{let i,{number:s,unit:r}=e;if(isFinite(s)){if("m"===e.unit)return e}else s=t,r="m";switch(r){default:i=1;break;case"cm":i=.01;break;case"mm":i=.001}let n=i*s;return{type:"number",number:n,unit:"m"}},nE=(()=>{let e={rad:e=>e,deg:nI,m:e=>e,mm:nf,cm:nf};return(t,i=nm)=>{isFinite(t.number)||(t.number=i.number,t.unit=i.unit);let{unit:s}=t;if(null==s)return t;let r=e[s];return null==r?i:r(t)}})();/* @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ class nC extends iZ{constructor(e){super(document.createElement("div")),this.normal=new el.Pa4(0,1,0),this.initialized=!1,this.referenceCount=1,this.pivot=document.createElement("div"),this.slot=document.createElement("slot"),this.element.classList.add("annotation-wrapper"),this.slot.name=e.name,this.element.appendChild(this.pivot),this.pivot.appendChild(this.slot),this.updatePosition(e.position),this.updateNormal(e.normal)}get facingCamera(){return!this.element.classList.contains("hide")}show(){this.facingCamera&&this.initialized||this.updateVisibility(!0)}hide(){(this.facingCamera||!this.initialized)&&this.updateVisibility(!1)}increment(){this.referenceCount++}decrement(){return this.referenceCount>0&&--this.referenceCount,0===this.referenceCount}updatePosition(e){if(null==e)return;let t=no(e)[0].terms;for(let i=0;i<3;++i)this.position.setComponent(i,nE(t[i]).number);this.updateMatrixWorld()}updateNormal(e){if(null==e)return;let t=no(e)[0].terms;for(let i=0;i<3;++i)this.normal.setComponent(i,nE(t[i]).number)}orient(e){this.pivot.style.transform=`rotate(${e}rad)`}updateVisibility(e){e?this.element.classList.remove("hide"):this.element.classList.add("hide"),this.slot.assignedNodes().forEach(t=>{if(t.nodeType!==Node.ELEMENT_NODE)return;let i=t.dataset.visibilityAttribute;if(null!=i){let s=`data-${i}`;e?t.setAttribute(s,""):t.removeAttribute(s)}t.dispatchEvent(new CustomEvent("hotspot-visibility",{detail:{visible:e}}))}),this.initialized=!0}}let nB=(e,t,i)=>{let s=i,r=new el.Pa4;return e.traverseVisible(e=>{let i,n;e.updateWorldMatrix(!1,!1);let a=e.geometry;if(void 0!==a){if(a.isGeometry){let A=a.vertices;for(i=0,n=A.length;i0,this.boundingBox.copy(e.boundingBox),this.size.copy(e.size),this.maxDimension=Math.max(r.x,r.y,r.z)*(this.isAnimated?2:1),this.boundingBox.getCenter(a),"back"===i){let{min:A,max:o}=s;[A.y,A.z]=[A.z,A.y],[o.y,o.z]=[o.z,o.y],[r.y,r.z]=[r.z,r.y],n.x=Math.PI/2,n.y=Math.PI}else n.x=0,n.y=0;if(this.isAnimated){let l=s.min.y,h=s.max.y;r.y=this.maxDimension,s.expandByVector(r.subScalar(this.maxDimension).multiplyScalar(-.5)),s.min.y=l,s.max.y=h,r.set(this.maxDimension,h-l,this.maxDimension)}"bottom"===i?a.y=s.min.y:a.z=s.min.y,this.setSoftness(t)}setSoftness(e){this.softness=e;let{size:t,camera:i}=this,s=this.isAnimated?2:1;this.setMapSize(s*Math.pow(2,9-3*e));let r=t.y/2,n=t.y*s;i.near=0,i.far=(1-e)*n+e*r,this.depthMaterial.opacity=1/e,i.updateProjectionMatrix(),this.setIntensity(this.intensity),this.setOffset(0)}setMapSize(e){let{size:t}=this;this.isAnimated&&(e*=2);let i=Math.floor(t.x>t.z?e:e*t.x/t.z),s=Math.floor(t.x>t.z?e*t.z/t.x:e),r=10+i,n=10+s;if(null!=this.renderTarget&&(this.renderTarget.width!==r||this.renderTarget.height!==n)&&(this.renderTarget.dispose(),this.renderTarget=null,this.renderTargetBlur.dispose(),this.renderTargetBlur=null),null==this.renderTarget){let a={format:el.wk1};this.renderTarget=new el.dd2(r,n,a),this.renderTargetBlur=new el.dd2(r,n,a),this.floor.material.map=this.renderTarget.texture}this.camera.scale.set(t.x*(1+10/i),t.z*(1+10/s),1),this.needsUpdate=!0}setIntensity(e){if(this.intensity=e,e>0){var t;this.visible=!0,this.floor.visible=!0,this.floor.material.opacity=e*((1-(t=this.softness*this.softness))*.3+1*t)}else this.visible=!1,this.floor.visible=!1}getIntensity(){return this.intensity}setOffset(e){this.floor.position.z=-e+.001*this.maxDimension}render(e,t){t.overrideMaterial=this.depthMaterial;let i=e.getClearAlpha();e.setClearAlpha(0),this.floor.visible=!1;let s=e.xr.enabled;e.xr.enabled=!1;let r=e.getRenderTarget();e.setRenderTarget(this.renderTarget),e.render(t,this.camera),t.overrideMaterial=null,this.floor.visible=!0,this.blurShadow(e),e.xr.enabled=s,e.setRenderTarget(r),e.setClearAlpha(i)}blurShadow(e){let{camera:t,horizontalBlurMaterial:i,verticalBlurMaterial:s,renderTarget:r,renderTargetBlur:n,blurPlane:a}=this;a.visible=!0,a.material=i,i.uniforms.h.value=1/this.renderTarget.width,i.uniforms.tDiffuse.value=this.renderTarget.texture,e.setRenderTarget(n),e.render(a,t),a.material=s,s.uniforms.v.value=1/this.renderTarget.height,s.uniforms.tDiffuse.value=this.renderTargetBlur.texture,e.setRenderTarget(r),e.render(a,t),a.visible=!1}dispose(){null!=this.renderTarget&&this.renderTarget.dispose(),null!=this.renderTargetBlur&&this.renderTargetBlur.dispose(),this.depthMaterial.dispose(),this.horizontalBlurMaterial.dispose(),this.verticalBlurMaterial.dispose(),this.floor.material.dispose(),this.floor.geometry.dispose(),this.blurPlane.geometry.dispose(),this.removeFromParent()}}let nv=new el.Pa4,nS=new el.Pa4,nb=new el.Pa4,nx=new el.iMs,nM=new el.Pa4,nR=new el.FM8;class nD extends el.xsS{constructor({canvas:e,element:t,width:i,height:s}){super(),this.annotationRenderer=new i8,this.schemaElement=document.createElement("script"),this.width=1,this.height=1,this.aspect=1,this.scaleStep=0,this.renderCount=0,this.externalRenderer=null,this.camera=new el.cPb(45,1,.1,100),this.xrCamera=null,this.url=null,this.target=new el.Tme,this.animationNames=[],this.boundingBox=new el.ZzF,this.boundingSphere=new el.aLr,this.size=new el.Pa4,this.idealAspect=0,this.framedFoVDeg=0,this.shadow=null,this.shadowIntensity=0,this.shadowSoftness=1,this.bakedShadows=new Set,this.exposure=1,this.canScale=!0,this.isDirty=!1,this.goalTarget=new el.Pa4,this.targetDamperX=new sf,this.targetDamperY=new sf,this.targetDamperZ=new sf,this._currentGLTF=null,this._model=null,this.cancelPendingSourceChange=null,this.animationsByName=new Map,this.currentAnimationAction=null,this.name="ModelScene",this.element=t,this.canvas=e,this.camera=new el.cPb(45,1,.1,100),this.camera.name="MainCamera",this.add(this.target),this.setSize(i,s),this.target.name="Target",this.mixer=new el.Xcj(this.target);let{domElement:r}=this.annotationRenderer,{style:n}=r;n.display="none",n.pointerEvents="none",n.position="absolute",n.top="0",this.element.shadowRoot.querySelector(".default").appendChild(r),this.schemaElement.setAttribute("type","application/ld+json")}get context(){return this.canvas.getContext("2d")}getCamera(){return null!=this.xrCamera?this.xrCamera:this.camera}queueRender(){this.isDirty=!0}shouldRender(){return this.isDirty}hasRendered(){this.isDirty=!1}forceRescale(){this.scaleStep=-1,this.queueRender()}async setObject(e){this.reset(),this._model=e,this.target.add(e),await this.setupScene()}async setSource(e,t=()=>{}){let i;if(!e||e===this.url){t(1);return}if(this.reset(),this.url=e,null!=this.externalRenderer){let s=await this.externalRenderer.load(t);this.boundingSphere.radius=s.framedRadius,this.idealAspect=s.fieldOfViewAspect;return}null!=this.cancelPendingSourceChange&&(this.cancelPendingSourceChange(),this.cancelPendingSourceChange=null);try{i=await new Promise(async(i,s)=>{this.cancelPendingSourceChange=()=>s();try{let r=await this.element[ae].loader.load(e,this.element,t);i(r)}catch(n){s(n)}})}catch(r){if(null==r)return;throw r}this.cancelPendingSourceChange=null,this.reset(),this.url=e,this._currentGLTF=i,null!=i&&(this._model=i.scene,this.target.add(i.scene));let{animations:n}=i,a=new Map,A=[];for(let o of n)a.set(o.name,o),A.push(o.name);this.animations=n,this.animationsByName=a,this.animationNames=A,await this.setupScene()}async setupScene(){this.applyTransform(),this.updateBoundingBox(),await this.updateFraming(),this.updateShadow(),this.setShadowIntensity(this.shadowIntensity)}reset(){this.url=null,this.queueRender(),null!=this.shadow&&this.shadow.setIntensity(0),this.bakedShadows.clear();let{_model:e}=this;null!=e&&(e.removeFromParent(),this._model=null);let t=this._currentGLTF;null!=t&&(t.dispose(),this._currentGLTF=null),null!=this.currentAnimationAction&&(this.currentAnimationAction.stop(),this.currentAnimationAction=null),this.mixer.stopAllAction(),this.mixer.uncacheRoot(this)}dispose(){this.reset(),null!=this.shadow&&(this.shadow.dispose(),this.shadow=null),this.element[ni]=null,this.element[ns]=null,this.element[nr]=null}get currentGLTF(){return this._currentGLTF}setSize(e,t){if(this.width!==e||this.height!==t){if(this.width=Math.max(e,1),this.height=Math.max(t,1),this.annotationRenderer.setSize(e,t),this.aspect=this.width/this.height,null!=this.externalRenderer){let i=tf();this.externalRenderer.resize(e*i,t*i)}this.queueRender()}}markBakedShadow(e){e.userData.shadow=!0,this.bakedShadows.add(e)}unmarkBakedShadow(e){e.userData.shadow=!1,e.visible=!0,this.bakedShadows.delete(e),this.boundingBox.expandByObject(e)}findBakedShadows(e){let t=new el.ZzF;e.traverse(e=>{if(!e.isMesh)return;let i=e.material;if(!i.transparent)return;t.setFromObject(e);let s=t.getSize(nM),r=Math.min(s.x,s.y,s.z),n=Math.max(s.x,s.y,s.z);n<100*r||this.markBakedShadow(e)})}checkBakedShadows(){let{min:e,max:t}=this.boundingBox,i=new el.ZzF;for(let s of(this.boundingBox.getSize(this.size),this.bakedShadows))i.setFromObject(s),i.min.y=t.x&&i.min.z<=e.z&&i.max.z>=t.z||i.min.z=t.x&&i.min.y<=e.y&&i.max.y>=t.y||this.unmarkBakedShadow(s)}applyTransform(){let{model:e}=this;if(null==e)return;let t=no(this.element.orientation)[0].terms,i=nE(t[0]).number,s=nE(t[1]).number,r=nE(t[2]).number;e.quaternion.setFromEuler(new el.USm(s,r,i,"YXZ"));let n=no(this.element.scale)[0].terms;e.scale.set(n[0].number,n[1].number,n[2].number)}updateBoundingBox(){let{model:e}=this;if(null==e)return;this.target.remove(e),this.findBakedShadows(e);let t=(e,t)=>e.expandByPoint(t);this.setBakedShadowVisibility(!1),this.boundingBox=nB(e,t,new el.ZzF),this.boundingBox.isEmpty()&&(this.setBakedShadowVisibility(!0),this.bakedShadows.forEach(e=>this.unmarkBakedShadow(e)),this.boundingBox=nB(e,t,new el.ZzF)),this.checkBakedShadows(),this.setBakedShadowVisibility(),this.boundingBox.getSize(this.size),this.target.add(e)}async updateFraming(){let{model:e}=this;if(null==e)return;this.target.remove(e),this.setBakedShadowVisibility(!1);let{center:t}=this.boundingSphere;this.element.requestUpdate("cameraTarget"),await this.element.updateComplete,t.copy(this.getTarget());let i=(e,i)=>Math.max(e,t.distanceToSquared(i));this.boundingSphere.radius=Math.sqrt(nB(e,i,0));let s=(e,i)=>{i.sub(t);let s=Math.sqrt(i.x*i.x+i.z*i.z);return Math.max(e,s/(this.idealCameraDistance()-Math.abs(i.y)))};this.idealAspect=nB(e,s,0)/Math.tan(this.framedFoVDeg/2*Math.PI/180),this.setBakedShadowVisibility(),this.target.add(e)}setBakedShadowVisibility(e=this.shadowIntensity<=0){for(let t of this.bakedShadows)t.visible=e}idealCameraDistance(){let e=this.framedFoVDeg/2*Math.PI/180;return this.boundingSphere.radius/Math.sin(e)}adjustedFoV(e){let t=Math.tan(e/2*Math.PI/180)*Math.max(1,this.idealAspect/this.aspect);return 2*Math.atan(t)*180/Math.PI}getNDC(e,t){if(null!=this.xrCamera)nR.set(e/window.screen.width,t/window.screen.height);else{let i=this.element.getBoundingClientRect();nR.set((e-i.x)/this.width,(t-i.y)/this.height)}return nR.multiplyScalar(2).subScalar(1),nR.y*=-1,nR}getSize(){return{width:this.width,height:this.height}}setEnvironmentAndSkybox(e,t){this.element[ae].arRenderer.presentedScene!==this&&(this.environment=e,this.background=t,this.queueRender())}setTarget(e,t,i){this.goalTarget.set(-e,-t,-i)}setTargetDamperDecayTime(e){this.targetDamperX.setDecayTime(e),this.targetDamperY.setDecayTime(e),this.targetDamperZ.setDecayTime(e)}getTarget(){return this.goalTarget.clone().multiplyScalar(-1)}jumpToGoal(){this.updateTarget(1e4)}updateTarget(e){let t=this.goalTarget,i=this.target.position;if(t.equals(i))return!1;{let s=this.boundingSphere.radius/10,{x:r,y:n,z:a}=i;return r=this.targetDamperX.update(r,t.x,e,s),n=this.targetDamperY.update(n,t.y,e,s),a=this.targetDamperZ.update(a,t.z,e,s),this.target.position.set(r,n,a),this.target.updateMatrixWorld(),this.queueRender(),!0}}pointTowards(e,t){let{x:i,z:s}=this.position;this.yaw=Math.atan2(e-i,t-s)}get model(){return this._model}set yaw(e){this.rotation.y=e,this.queueRender()}get yaw(){return this.rotation.y}set animationTime(e){this.mixer.setTime(e),this.queueShadowRender()}get animationTime(){if(null!=this.currentAnimationAction){let e=Math.max(this.currentAnimationAction._loopCount,0);return this.currentAnimationAction.loop===el.uEv&&(1&e)==1?this.duration-this.currentAnimationAction.time:this.currentAnimationAction.time}return 0}set animationTimeScale(e){this.mixer.timeScale=e}get animationTimeScale(){return this.mixer.timeScale}get duration(){return null!=this.currentAnimationAction&&this.currentAnimationAction.getClip()?this.currentAnimationAction.getClip().duration:0}get hasActiveAnimation(){return null!=this.currentAnimationAction}playAnimation(e=null,t=0,i=el.YKA,s=1/0){if(null==this._currentGLTF)return;let{animations:r}=this;if(null==r||0===r.length){console.warn("Cannot play animation (model does not have any animations)");return}let n=null;if(null!=e&&null==(n=this.animationsByName.get(e))){let a=parseInt(e);!isNaN(a)&&a>=0&&a0&&this.animationTime==this.duration&&(this.animationTime=0)),o.setLoop(i,s),o.enabled=!0,o.clampWhenFinished=!0,o.play()}catch(l){console.error(l)}}stopAnimation(){this.currentAnimationAction=null,this.mixer.stopAllAction()}updateAnimation(e){this.mixer.update(e),this.queueShadowRender()}subscribeMixerEvent(e,t){this.mixer.addEventListener(e,t)}updateShadow(){let e=this.shadow;if(null!=e){let t="wall"===this.element.arPlacement?"back":"bottom";e.setScene(this,this.shadowSoftness,t),e.needsUpdate=!0}}renderShadow(e){let t=this.shadow;null!=t&&!0==t.needsUpdate&&(t.render(e,this),t.needsUpdate=!1)}queueShadowRender(){null!=this.shadow&&(this.shadow.needsUpdate=!0)}setShadowIntensity(e){if(this.shadowIntensity=e,null!=this._currentGLTF&&(this.setBakedShadowVisibility(),!(e<=0)||null!=this.shadow)){if(null==this.shadow){let t="wall"===this.element.arPlacement?"back":"bottom";this.shadow=new nw(this,this.shadowSoftness,t)}this.shadow.setIntensity(e)}}setShadowSoftness(e){this.shadowSoftness=e;let t=this.shadow;null!=t&&t.setSoftness(e)}setShadowOffset(e){let t=this.shadow;null!=t&&t.setOffset(e)}get raycaster(){return nx}positionAndNormalFromPoint(e,t=this){this.raycaster.setFromCamera(e,this.getCamera());let i=this.raycaster.intersectObject(t,!0),s=i.find(e=>e.object.visible&&!e.object.userData.shadow);return null==s||null==s.face?null:null==s.uv?{position:s.point,normal:s.face.normal,uv:null}:(s.face.normal.applyNormalMatrix(new el.Vkp().getNormalMatrix(s.object.matrixWorld)),{position:s.point,normal:s.face.normal,uv:s.uv})}addHotspot(e){this.target.add(e),this.annotationRenderer.domElement.appendChild(e.element)}removeHotspot(e){this.target.remove(e)}forHotspots(e){let{children:t}=this.target;for(let i=0,s=t.length;i{nv.copy(e),nS.setFromMatrixPosition(t.matrixWorld),nv.sub(nS),nb.copy(t.normal).transformDirection(this.target.matrixWorld),0>nv.dot(nb)?t.hide():t.show()})}orientHotspots(e){this.forHotspots(t=>{t.orient(e)})}setHotspotsVisibility(e){this.forHotspots(t=>{t.visible=e})}updateSchema(e){var t;let{schemaElement:i,element:s}=this,{alt:r,poster:n,iosSrc:a}=s;if(null!=e){let A=[{"@type":"MediaObject",contentUrl:e,encodingFormat:(null===(t=e.split(".").pop())||void 0===t?void 0:t.toLowerCase())==="gltf"?"model/gltf+json":"model/gltf-binary"}];a&&A.push({"@type":"MediaObject",contentUrl:a,encodingFormat:"model/vnd.usdz+zip"}),i.textContent=JSON.stringify({"@context":"http://schema.org/","@type":"3DModel",image:null!=n?n:void 0,name:null!=r?r:void 0,encoding:A}),document.head.appendChild(i)}else null!=i.parentElement&&i.parentElement.removeChild(i)}}/* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ let nT=async e=>new Promise((t,i)=>{let s=e.match(/data:(.*);/);if(!s)return i(Error(`${e} is not a valid data Url`));let r=s[1],n=e.replace(/data:image\/\w+;base64,/,""),a=atob(n),A=[];for(let o=0;o{let i;return(i=Math.max(tI(t,0,1),e.progress))!==e.progress&&this.announceTotalProgress(e,i),e.progress}}announceTotalProgress(e,t){let i=0,s=0;for(let r of(1==t&&(e.completed=!0),this.ongoingActivities)){let{progress:n}=r;i+=1-n,!0===r.completed&&s++}let a=e.progress;e.progress=t,this.totalProgress+=(t-a)*(1-this.totalProgress)/i;let A=s===this.ongoingActivityCount?1:this.totalProgress;this.dispatchEvent(new CustomEvent("progress",{detail:{totalProgress:A}})),s===this.ongoingActivityCount&&(this.totalProgress=0,this.ongoingActivities.clear())}}/* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var nF=function(e,t,i,s){var r,n=arguments.length,a=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,i,s);else for(var A=e.length-1;A>=0;A--)(r=e[A])&&(a=(n<3?r(a):n>3?r(t,i,a):r(t,i))||a);return n>3&&a&&Object.defineProperty(t,i,a),a};let nk=document.createElement("canvas"),n_=Symbol("fallbackResizeHandler"),nU=Symbol("defaultAriaLabel"),nN=Symbol("resizeObserver"),nG=Symbol("clearModelTimeout"),nP=Symbol("onContextLost"),nO=Symbol("loaded"),nH=Symbol("status"),nq=Symbol("onFocus"),nK=Symbol("onBlur"),nV=Symbol("updateSize"),nJ=Symbol("intersectionObserver"),nY=Symbol("isElementInViewport"),nj=Symbol("announceModelVisibility"),nz=Symbol("ariaLabel"),n$=Symbol("altDefaulted"),nW=Symbol("statusElement"),nX=Symbol("updateStatus"),nZ=Symbol("loadedTime"),n0=Symbol("updateSource"),n1=Symbol("markLoaded"),n2=Symbol("container"),n3=Symbol("input"),n4=Symbol("canvas"),n8=Symbol("scene"),n5=Symbol("needsRender"),n6=Symbol("tick"),n9=Symbol("onModelLoad"),n7=Symbol("onResize"),ae=Symbol("renderer"),at=Symbol("progressTracker"),ai=Symbol("getLoaded"),as=Symbol("getModelIsVisible"),ar=Symbol("shouldAttemptPreload"),an=e=>({x:e.x,y:e.y,z:e.z,toString(){return`${this.x}m ${this.y}m ${this.z}m`}}),aa=e=>({u:e.x,v:e.y,toString(){return`${this.u} ${this.v}`}});class aA extends ev{constructor(){let e,t;super(),this.alt=null,this.src=null,this.withCredentials=!1,this.generateSchema=!1,this[q]=!1,this[K]=!1,this[V]=0,this[J]="",this[Y]=null,this[j]=tm(()=>{let e=this.getBoundingClientRect();this[nV](e)},50),this[z]=tm(e=>{let t=this.modelIsVisible;t!==e&&this.dispatchEvent(new CustomEvent("model-visibility",{detail:{visible:t}}))},0),this[$]=null,this[W]=null,this[X]=new nL,this[Z]=()=>{this[nW].textContent=this[nH]},this[ee]=()=>{this[nW].textContent=""},this[et]=e=>{this.dispatchEvent(new CustomEvent("error",{detail:{type:"webglcontextlost",sourceError:e.sourceEvent}}))},this.attachShadow({mode:"open"});let i=this.shadowRoot;if(tD(i),this[n2]=i.querySelector(".container"),this[n3]=i.querySelector(".userInput"),this[n4]=i.querySelector("canvas"),this[nW]=i.querySelector("#status"),this[nU]=this[n3].getAttribute("aria-label"),this.isConnected){let s=this.getBoundingClientRect();e=s.width,t=s.height}else e=300,t=150;this[n8]=new nD({canvas:this[n4],element:this,width:e,height:t}),Promise.resolve().then(()=>{this[nV](this.getBoundingClientRect())}),ts&&(this[nN]=new ResizeObserver(e=>{if(!this[ae].isPresenting)for(let t of e)t.target===this&&this[nV](t.contentRect)})),tr?this[nJ]=new IntersectionObserver(e=>{for(let t of e)if(t.target===this){let i=this.modelIsVisible;this[nY]=t.isIntersecting,this[nj](i),this[nY]&&!this.loaded&&this[n0]()}},{root:null,rootMargin:"0px",threshold:1e-5}):this[nY]=!0}static get is(){return"model-viewer"}static set modelCacheSize(e){iX[i$].evictionThreshold=e}static get modelCacheSize(){return iX[i$].evictionThreshold}static set minimumRenderScale(e){e>1&&console.warn(" minimumRenderScale has been clamped to a maximum value of 1."),e<=0&&console.warn(" minimumRenderScale has been clamped to a minimum value of 0.25."),s3.singleton.minScale=e}static get minimumRenderScale(){return s3.singleton.minScale}get loaded(){return this[ai]()}get[(q=nY,K=nO,V=nZ,J=nH,Y=nG,j=n_,z=nj,$=nN,W=nJ,X=at,ae)](){return s3.singleton}get modelIsVisible(){return this[as]()}connectedCallback(){super.connectedCallback&&super.connectedCallback(),ts?this[nN].observe(this):self.addEventListener("resize",this[n_]),tr&&this[nJ].observe(this),this.addEventListener("focus",this[nq]),this.addEventListener("blur",this[nK]);let e=this[ae];e.addEventListener("contextlost",this[nP]),e.registerScene(this[n8]),null!=this[nG]&&(self.clearTimeout(this[nG]),this[nG]=null,this.requestUpdate("src",null))}disconnectedCallback(){super.disconnectedCallback&&super.disconnectedCallback(),ts?this[nN].unobserve(this):self.removeEventListener("resize",this[n_]),tr&&this[nJ].unobserve(this),this.removeEventListener("focus",this[nq]),this.removeEventListener("blur",this[nK]);let e=this[ae];e.removeEventListener("contextlost",this[nP]),e.unregisterScene(this[n8]),this[nG]=self.setTimeout(()=>{this[n8].dispose(),this[nG]=null},1e3)}updated(e){super.updated(e),e.has("src")&&(null==this.src?(this[nO]=!1,this[nZ]=0,this[n8].reset()):this.src!==this[n8].url&&(this[nO]=!1,this[nZ]=0,this[n0]())),e.has("alt")&&this[n3].setAttribute("aria-label",this[nz]),e.has("withCredentials")&&(iX.withCredentials=this.withCredentials),e.has("generateSchema")&&(this.generateSchema?this[n8].updateSchema(this.src):this[n8].updateSchema(null))}toDataURL(e,t){return this[ae].displayCanvas(this[n8]).toDataURL(e,t)}async toBlob(e){let t=e?e.mimeType:void 0,i=e?e.qualityArgument:void 0,s=e?e.idealAspect:void 0,{width:r,height:n,idealAspect:a,aspect:A}=this[n8],{dpr:o,scaleFactor:l}=this[ae],h=r*l*o,c=n*l*o,u=0,g=0;if(!0===s){if(a>A){let d=c;g=(d-(c=Math.round(h/a)))/2}else{let p=h;u=(p-(h=Math.round(c*a)))/2}}nk.width=h,nk.height=c;try{return new Promise(async(e,s)=>(nk.getContext("2d").drawImage(this[ae].displayCanvas(this[n8]),u,g,h,c,0,0,h,c),nk.msToBlob&&(!t||"image/png"===t))?e(nk.msToBlob()):nk.toBlob?void nk.toBlob(t=>{if(!t)return s(Error("Unable to retrieve canvas blob"));e(t)},t,i):e(await nT(nk.toDataURL(t,i))))}finally{this[nV]({width:r,height:n})}}registerRenderer(e){this[n8].externalRenderer=e}unregisterRenderer(){this[n8].externalRenderer=null}get[nz](){return this[n$]}get[n$](){return null==this.alt||"null"===this.alt?this[nU]:this.alt}[ai](){return this[nO]}[as](){return this.loaded&&this[nY]}[ar](){return!!this.src&&this[nY]}[nV]({width:e,height:t}){this[n2].style.width=`${e}px`,this[n2].style.height=`${t}px`,this[n7]({width:parseFloat(e),height:parseFloat(t)})}[n6](e,t){}[n1](){this[nO]||(this[nO]=!0,this[nZ]=performance.now())}[n5](){this[n8].queueRender()}[n9](){}[nX](e){this[nH]=e;let t=this.getRootNode();null!=t&&t.activeElement===this&&this[nW].textContent!=e&&(this[nW].textContent=e)}[(Z=nq,ee=nK,n7)](e){this[n8].setSize(e.width,e.height)}async [(et=nP,n0)](){let e=this[n8];if(this.loaded||!this[ar]()||this.src===e.url)return;this.generateSchema&&e.updateSchema(this.src),this[nX]("Loading"),e.stopAnimation();let t=this[at].beginActivity(),i=this.src;try{let s=e.setSource(i,e=>t(.95*tI(e,0,1))),r=this[tv]();await Promise.all([s,r]),this[n1](),this[n9](),await new Promise(e=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{this.dispatchEvent(new CustomEvent("load",{detail:{url:i}})),e()})})})}catch(n){this.dispatchEvent(new CustomEvent("error",{detail:{type:"loadfailure",sourceError:n}}))}finally{t(1)}}}nF([u({type:String})],aA.prototype,"alt",void 0),nF([u({type:String})],aA.prototype,"src",void 0),nF([u({type:Boolean,attribute:"with-credentials"})],aA.prototype,"withCredentials",void 0),nF([u({type:Boolean,attribute:"generate-schema"})],aA.prototype,"generateSchema",void 0);/* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var ao=function(e,t,i,s){var r,n=arguments.length,a=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,i,s);else for(var A=e.length-1;A>=0;A--)(r=e[A])&&(a=(n<3?r(a):n>3?r(t,i,a):r(t,i))||a);return n>3&&a&&Object.defineProperty(t,i,a),a};let al=Symbol("changeAnimation"),ah=Symbol("paused"),ac={repetitions:1/0,pingpong:!1},au=Symbol("hotspotMap"),ag=Symbol("mutationCallback"),ad=Symbol("observer"),ap=Symbol("addHotspot"),am=Symbol("removeHotspot"),aI=new el.yGw,af=new el.Vkp;/*! fflate - fast JavaScript compression/decompression Licensed under MIT. https://github.com/101arrowz/fflate/blob/master/LICENSE version 0.6.9 */ var aE={},aC=function(e){return URL.createObjectURL(new Blob([e],{type:"text/javascript"}))},aB=function(e){return new Worker(e)};try{URL.revokeObjectURL(aC(""))}catch(ay){aC=function(e){return"data:application/javascript;charset=UTF-8,"+encodeURI(e)},aB=function(e){return new Worker(e,{type:"module"})}}var aQ=Uint8Array,aw=Uint16Array,av=Uint32Array,aS=new aQ([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),ab=new aQ([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),ax=new aQ([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),aM=function(e,t){for(var i=new aw(31),s=0;s<31;++s)i[s]=t+=1<>>1|(21845&aU)<<1;aN=(61680&(aN=(52428&aN)>>>2|(13107&aN)<<2))>>>4|(3855&aN)<<4,a_[aU]=((65280&aN)>>>8|(255&aN)<<8)>>>1}for(var aG=function(e,t,i){for(var s,r=e.length,n=0,a=new aw(t);n>>o]=l}else for(n=0,s=new aw(r);n>>15-e[n]);return s},aP=new aQ(288),aU=0;aU<144;++aU)aP[aU]=8;for(var aU=144;aU<256;++aU)aP[aU]=9;for(var aU=256;aU<280;++aU)aP[aU]=7;for(var aU=280;aU<288;++aU)aP[aU]=8;for(var aO=new aQ(32),aU=0;aU<32;++aU)aO[aU]=5;var aH=aG(aP,9,0),aq=aG(aO,5,0),aK=function(e){for(var t=e[0],i=1;it&&(t=e[i]);return t},aV=function(e,t,i){var s=t/8|0;return(e[s]|e[s+1]<<8)>>(7&t)&i},aJ=function(e,t){var i=t/8|0;return(e[i]|e[i+1]<<8|e[i+2]<<16)>>(7&t)},aY=function(e){return(e/8|0)+(7&e&&1)},aj=function(e,t,i){(null==t||t<0)&&(t=0),(null==i||i>e.length)&&(i=e.length);var s=new(e instanceof aw?aw:e instanceof av?av:aQ)(i-t);return s.set(e.subarray(t,i)),s},az=function(e,t,i){i<<=7&t;var s=t/8|0;e[s]|=i,e[s+1]|=i>>>8},a$=function(e,t,i){i<<=7&t;var s=t/8|0;e[s]|=i,e[s+1]|=i>>>8,e[s+2]|=i>>>16},aW=function(e,t){for(var i=[],s=0;su&&(u=n[s].s);var g=new aw(u+1),d=aX(i[h-1],g,0);if(d>t){var s=0,p=0,m=d-t,I=1<t)p+=I-(1<>>=m;p>0;){var E=n[s].s;g[E]=0&&p;--s){var C=n[s].s;g[C]==t&&(--g[C],++p)}d=t}return[new aQ(g),d]},aX=function(e,t,i){return -1==e.s?Math.max(aX(e.l,t,i+1),aX(e.r,t,i+1)):t[e.s]=i},aZ=function(e){for(var t=e.length;t&&!e[--t];);for(var i=new aw(++t),s=0,r=e[0],n=1,a=function(e){i[s++]=e},A=1;A<=t;++A)if(e[A]==r&&A!=t)++n;else{if(!r&&n>2){for(;n>138;n-=138)a(32754);n>2&&(a(n>10?n-11<<5|28690:n-3<<5|12305),n=0)}else if(n>3){for(a(r),--n;n>6;n-=6)a(8304);n>2&&(a(n-3<<5|8208),n=0)}for(;n--;)a(r);n=1,r=e[A]}return[i.subarray(0,s),t]},a0=function(e,t){for(var i=0,s=0;s>>8,e[r+2]=255^e[r],e[r+3]=255^e[r+1];for(var n=0;n4&&!R[ax[T-1]];--T);var L=l+5<<3,F=a0(r,aP)+a0(n,aO)+a,k=a0(r,m)+a0(n,E)+a+14+3*T+a0(b,R)+(2*b[16]+3*b[17]+7*b[18]);if(L<=F&&L<=k)return a1(t,h,e.subarray(o,o+l));if(az(t,h,1+(k15&&(az(t,h,G[x]>>>5&127),h+=G[x]>>>12)}}else c=aH,u=aP,g=aq,d=aO;for(var x=0;x255){var P=s[x]>>>18&31;a$(t,h,c[P+257]),h+=u[P+257],P>7&&(az(t,h,s[x]>>>23&31),h+=aS[P]);var O=31&s[x];a$(t,h,g[O]),h+=d[O],O>3&&(a$(t,h,s[x]>>>5&8191),h+=ab[O])}else a$(t,h,c[s[x]]),h+=u[s[x]];return a$(t,h,c[256]),h+u[256]},a3=new av([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),a4=new aQ(0),a8=function(e,t,i,s,r,n){var a=e.length,A=new aQ(s+a+5*(1+Math.ceil(a/7e3))+r),o=A.subarray(s,A.length-r),l=0;if(!t||a<8)for(var h=0;h<=a;h+=65535){var c=h+65535;c>>13,d=8191&u,p=(1<7e3||S>24576)&&T>423){l=a2(e,o,0,B,y,Q,v,S,x,h-x,l),S=w=v=0,x=h;for(var L=0;L<286;++L)y[L]=0;for(var L=0;L<30;++L)Q[L]=0}var F=2,k=0,_=d,U=R-D&32767;if(T>2&&M==C(h-U))for(var N=Math.min(g,T)-1,G=Math.min(32767,h),P=Math.min(258,T);U<=G&&--_&&R!=D;){if(e[h+F]==e[h+F-U]){for(var O=0;OF){if(F=O,k=U,O>N)break;for(var H=Math.min(U,O-2),q=0,L=0;Lq&&(q=J,D=K)}}}D=m[R=D],U+=R-D+32768&32767}if(k){B[S++]=268435456|aT[F]<<18|ak[k];var Y=31&aT[F],j=31&ak[k];v+=aS[Y]+ab[j],++y[257+Y],++Q[j],b=h+F,++w}else B[S++]=e[h],++y[e[h]]}}l=a2(e,o,n,B,y,Q,v,S,x,h-x,l),!n&&7&l&&(l=a1(o,l+1,a4))}return aj(A,0,s+aY(l)+r)},a5=function(){for(var e=new av(256),t=0;t<256;++t){for(var i=t,s=9;--s;)i=(1&i&&3988292384)^i>>>1;e[t]=i}return e}(),a6=function(){var e=-1;return{p:function(t){for(var i=e,s=0;s>>8;e=i},d:function(){return~e}}},a9=function(e,t){var i={};for(var s in e)i[s]=e[s];for(var s in t)i[s]=t[s];return i},a7=function(e,t,i){for(;i;++t)e[t]=i,i>>>=8},Ae=function(e,t,i,s){for(var r in e){var n=e[r],a=t+r;n instanceof aQ?i[a]=[n,s]:Array.isArray(n)?i[a]=[n[0],a9(s,n[1])]:Ae(n,a+"/",i,s)}},At="undefined"!=typeof TextEncoder&&new TextEncoder,Ai="undefined"!=typeof TextDecoder&&new TextDecoder;try{Ai.decode(a4,{stream:!0})}catch(As){}function Ar(e,t){if(t){for(var i=new aQ(e.length),s=0;s>1)),a=0,A=function(e){n[a++]=e},s=0;sn.length){var o=new aQ(a+8+(r-s<<1));o.set(n),n=o}var l=e.charCodeAt(s);l<128||t?A(l):l<2048?(A(192|l>>6),A(128|63&l)):l>55295&&l<57344?(A(240|(l=65536+(1047552&l)|1023&e.charCodeAt(++s))>>18),A(128|l>>12&63),A(128|l>>6&63),A(128|63&l)):(A(224|l>>12),A(128|l>>6&63),A(128|63&l))}return aj(n,0,a)}var An=function(e){var t=0;if(e)for(var i in e){var s=e[i].length;if(s>65535)throw"extra field too long";t+=s+4}return t},Aa=function(e,t,i,s,r,n,a,A){var o=s.length,l=i.extra,h=A&&A.length,c=An(l);a7(e,t,null!=a?33639248:67324752),t+=4,null!=a&&(e[t++]=20,e[t++]=i.os),e[t]=20,t+=2,e[t++]=i.flag<<1|(null==n&&8),e[t++]=r&&8,e[t++]=255&i.compression,e[t++]=i.compression>>8;var u=new Date(null==i.mtime?Date.now():i.mtime),g=u.getFullYear()-1980;if(g<0||g>119)throw"date not in range 1980-2099";if(a7(e,t,g<<25|u.getMonth()+1<<21|u.getDate()<<16|u.getHours()<<11|u.getMinutes()<<5|u.getSeconds()>>>1),t+=4,null!=n&&(a7(e,t,i.crc),a7(e,t+4,n),a7(e,t+8,i.size)),a7(e,t+12,o),a7(e,t+14,c),t+=16,null!=a&&(a7(e,t,h),a7(e,t+6,i.attrs),a7(e,t+10,a),t+=14),e.set(s,t),t+=o,c)for(var d in l){var p=l[d],m=p.length;a7(e,t,+d),a7(e,t+2,m),e.set(p,t+4),t+=4+m}return h&&(e.set(A,t),t+=h),t},AA=function(e,t,i,s,r){a7(e,t,101010256),a7(e,t+8,i),a7(e,t+10,i),a7(e,t+12,s),a7(e,t+16,r)};class Ao{async parse(e){let t={},i="model.usda";t[i]=null;let s=Al(),r={},n={};for(let a in e.traverseVisible(e=>{if(e.isMesh){let i=e.geometry,n=e.material;if(n.isMeshStandardMaterial){let a="geometries/Geometry_"+i.id+".usd";if(!(a in t)){var A;let o;let l=function(e){let t=function(e){let t=e.attributes,i=t.position.count;return` def Mesh "Geometry" { int[] faceVertexCounts = [${function(e){let t=null!==e.index?e.index.count:e.attributes.position.count;return Array(t/3).fill(3).join(", ")}(e)}] int[] faceVertexIndices = [${function(e){let t=e.index,i=[];if(null!==t)for(let s=0;se.matrixWorld.determinant()&&console.warn("THREE.USDZExporter: USDZ does not support negative scales",e),`def Xform "${s}" ( prepend references = @./geometries/Geometry_${t.id}.usd@ ) { matrix4d xformOp:transform = ${r} uniform token[] xformOpOrder = ["xformOp:transform"] rel material:binding = } `}(e,i,n)}else console.warn("THREE.USDZExporter: Unsupported material type (USDZ only supports MeshStandardMaterial)",e)}else e.isCamera&&(s+=function(e){let t=e.name?e.name:"Camera_"+e.id,i=Ah(e.matrixWorld);return(0>e.matrixWorld.determinant()&&console.warn("THREE.USDZExporter: USDZ does not support negative scales",e),e.isOrthographicCamera)?`def Camera "${t}" { matrix4d xformOp:transform = ${i} uniform token[] xformOpOrder = ["xformOp:transform"] float2 clippingRange = (${e.near}, ${e.far}) float horizontalAperture = ${(Math.abs(e.left)+Math.abs(e.right))*10} float verticalAperture = ${(Math.abs(e.top)+Math.abs(e.bottom))*10} token projection = "orthographic" } `:`def Camera "${t}" { matrix4d xformOp:transform = ${i} uniform token[] xformOpOrder = ["xformOp:transform"] float2 clippingRange = (${e.near}, ${e.far}) float focalLength = ${e.getFocalLength()} float focusDistance = ${e.focus} float horizontalAperture = ${e.getFilmWidth()} token projection = "perspective" float verticalAperture = ${e.getFilmHeight()} } `}(e))}),s+=function(e,t){let i=[];for(let s in e){let r=e[s];i.push(function(e,t){let i=" ",s=[],r=[];function n(i,s,r){let n=i.id+(r?"_"+r.getHexString():""),a=1023===i.format;return t[n]=i,` def Shader "Transform2d_${s}" ( sdrMetadata = { string role = "math" } ) { uniform token info:id = "UsdTransform2d" float2 inputs:in.connect = float2 inputs:scale = ${Ad(i.repeat)} float2 inputs:translation = ${Ad(i.offset)} float2 outputs:result } def Shader "Texture_${i.id}_${s}" { uniform token info:id = "UsdUVTexture" asset inputs:file = @textures/Texture_${n}.${a?"png":"jpg"}@ float2 inputs:st.connect = token inputs:wrapS = "repeat" token inputs:wrapT = "repeat" float outputs:r float outputs:g float outputs:b float3 outputs:rgb ${e.transparent||e.alphaTest>0?"float outputs:a":""} }`}return e.side===el.ehD&&console.warn("THREE.USDZExporter: USDZ does not support double sided materials",e),null!==e.map?(s.push(`${i}color3f inputs:diffuseColor.connect = `),e.transparent?s.push(`${i}float inputs:opacity.connect = `):e.alphaTest>0&&(s.push(`${i}float inputs:opacity.connect = `),s.push(`${i}float inputs:opacityThreshold = ${e.alphaTest}`)),r.push(n(e.map,"diffuse",e.color))):s.push(`${i}color3f inputs:diffuseColor = ${Ag(e.color)}`),null!==e.emissiveMap?(s.push(`${i}color3f inputs:emissiveColor.connect = `),r.push(n(e.emissiveMap,"emissive"))):e.emissive.getHex()>0&&s.push(`${i}color3f inputs:emissiveColor = ${Ag(e.emissive)}`),null!==e.normalMap&&(s.push(`${i}normal3f inputs:normal.connect = `),r.push(n(e.normalMap,"normal"))),null!==e.aoMap&&(s.push(`${i}float inputs:occlusion.connect = `),r.push(n(e.aoMap,"occlusion"))),null!==e.roughnessMap&&1===e.roughness?(s.push(`${i}float inputs:roughness.connect = `),r.push(n(e.roughnessMap,"roughness"))):s.push(`${i}float inputs:roughness = ${e.roughness}`),null!==e.metalnessMap&&1===e.metalness?(s.push(`${i}float inputs:metallic.connect = `),r.push(n(e.metalnessMap,"metallic"))):s.push(`${i}float inputs:metallic = ${e.metalness}`),null!==e.alphaMap?(s.push(`${i}float inputs:opacity.connect = `),s.push(`${i}float inputs:opacityThreshold = 0.0001`),r.push(n(e.alphaMap,"opacity"))):s.push(`${i}float inputs:opacity = ${e.opacity}`),e.isMeshPhysicalMaterial&&(s.push(`${i}float inputs:clearcoat = ${e.clearcoat}`),s.push(`${i}float inputs:clearcoatRoughness = ${e.clearcoatRoughness}`),s.push(`${i}float inputs:ior = ${e.ior}`)),` def Material "Material_${e.id}" { def Shader "PreviewSurface" { uniform token info:id = "UsdPreviewSurface" ${s.join("\n")} int inputs:useSpecularWorkflow = 0 token outputs:surface } token outputs:surface.connect = token inputs:frame:stPrimvarName = "st" def Shader "uvReader_st" { uniform token info:id = "UsdPrimvarReader_float2" token inputs:varname.connect = float2 inputs:fallback = (0.0, 0.0) float2 outputs:result } ${r.join("\n")} } `}(r,t))}return`def "Materials" { ${i.join("")} } `}(r,n),t[i]=Ar(s),s=null,n){let A=n[a],o=a.split("_")[1],l=1023===A.format,h=function(e,t){if("undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap){let i=1024/Math.max(e.width,e.height),s=document.createElement("canvas");s.width=e.width*Math.min(1,i),s.height=e.height*Math.min(1,i);let r=s.getContext("2d");if(r.drawImage(e,0,0,s.width,s.height),void 0!==t){let n=parseInt(t,16),a=(n>>16&255)/255,A=(n>>8&255)/255,o=(255&n)/255,l=r.getImageData(0,0,s.width,s.height),h=l.data;for(let c=0;ch.toBlob(e,l?"image/png":"image/jpeg",1));t[`textures/Texture_${a}.${l?"png":"jpg"}`]=new Uint8Array(await c.arrayBuffer())}let u=0;for(let g in t){let d=t[g],p=34+g.length;u+=p;let m=63&u;if(4!==m){let I=64-m,f=new Uint8Array(I);t[g]=[d,{extra:{12345:f}}]}u=d.length}return function(e,t){t||(t={});var i={},s=[];Ae(e,"",i,t);var r=0,n=0;for(var a in i){var A=i[a],o=A[0],l=A[1],h=0==l.level?0:8,c=Ar(a),u=c.length,g=l.comment,d=g&&Ar(g),p=d&&d.length,m=An(l.extra);if(u>65535)throw"filename too long";var I=h?function(e,t){var i;return a8(e,null==(i=t||{}).level?6:i.level,null==i.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(e.length)))):12+i.mem,0,0,!0)}(o,l):o,f=I.length,E=a6();E.p(o),s.push(a9(l,{size:o.length,crc:E.d(),c:I,f:c,m:d,u:u!=a.length||d&&g.length!=p,o:r,compression:h})),r+=30+u+m+f,n+=76+2*(u+m)+(p||0)+f}for(var C=new aQ(n+22),B=r,y=n-r,Q=0;Q=0;A--)(r=e[A])&&(a=(n<3?r(a):n>3?r(t,i,a):r(t,i))||a);return n>3&&a&&Object.defineProperty(t,i,a),a};let Am=!1,AI=!1,Af="#model-viewer-no-ar-fallback",AE=(m=["quick-look","scene-viewer","webxr","none"],e=>{try{let t=no(e),i=(t.length?t[0].terms:[]).filter(e=>e&&"ident"===e.type).map(e=>e.value).filter(e=>m.indexOf(e)>-1),s=new Set;for(let r of i)s.add(r);return s}catch(n){}return new Set}),AC={QUICK_LOOK:"quick-look",SCENE_VIEWER:"scene-viewer",WEBXR:"webxr",NONE:"none"},AB=Symbol("arButtonContainer"),Ay=Symbol("enterARWithWebXR"),AQ=Symbol("openSceneViewer"),Aw=Symbol("openIOSARQuickLook"),Av=Symbol("canActivateAR"),AS=Symbol("arMode"),Ab=Symbol("arModes"),Ax=Symbol("arAnchor"),AM=Symbol("preload"),AR=Symbol("onARButtonContainerClick"),AD=Symbol("onARStatus"),AT=Symbol("onARTracking"),AL=Symbol("onARTap"),AF=Symbol("selectARMode"),Ak=Symbol("triggerLoad"),A_=Symbol("evaluate"),AU=Symbol("lastValue");class AN{constructor(){this[ei]=null}static evaluatableFor(e,t=nm){if(e instanceof AN)return e;if("number"===e.type)return"%"===e.unit?new AO(e,t):e;switch(e.name.value){case"calc":return new AJ(e,t);case"env":return new Aq(e)}return nm}static evaluate(e){return e instanceof AN?e.evaluate():e}static isConstant(e){return!(e instanceof AN)||e.isConstant}static applyIntrinsics(e,t){let{basis:i,keywords:s}=t,{auto:r}=s;return i.map((t,i)=>{let n=null==r[i]?t:r[i],a=e[i]?e[i]:n;if("ident"===a.type){let A=a.value;A in s&&(a=s[A][i])}return((null==a||"ident"===a.type)&&(a=n),"%"===a.unit)?nA(a.number/100*t.number,t.unit):(a=nE(a,t)).unit!==t.unit?t:a})}get isConstant(){return!1}evaluate(){return this.isConstant&&null!=this[AU]||(this[AU]=this[A_]()),this[AU]}}ei=AU;let AG=Symbol("percentage"),AP=Symbol("basis");class AO extends AN{constructor(e,t){super(),this[AG]=e,this[AP]=t}get isConstant(){return!0}[A_](){return nA(this[AG].number/100*this[AP].number,this[AP].unit)}}let AH=Symbol("identNode");class Aq extends AN{constructor(e){super(),this[es]=null;let t=e.arguments.length?e.arguments[0].terms[0]:null;null!=t&&"ident"===t.type&&(this[AH]=t)}get isConstant(){return!1}[(es=AH,A_)](){if(null!=this[AH]&&"window-scroll-y"===this[AH].value){let e=window.pageYOffset,t=Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight),i=e/(t-window.innerHeight)||0;return{type:"number",number:i,unit:null}}return nm}}let AK=/[\*\/]/,AV=Symbol("evaluator");class AJ extends AN{constructor(e,t=nm){if(super(),this[er]=null,1!==e.arguments.length)return;let i=e.arguments[0].terms.slice(),s=[];for(;i.length;){let r=i.shift();if(s.length>0){let n=s[s.length-1];if("operator"===n.type&&AK.test(n.value)){let a=s.pop(),A=s.pop();if(null==A)return;s.push(new A$(a,AN.evaluatableFor(A,t),AN.evaluatableFor(r,t)));continue}}s.push("operator"===r.type?r:AN.evaluatableFor(r,t))}for(;s.length>2;){let[o,l,h]=s.splice(0,3);if("operator"!==l.type)return;s.unshift(new A$(l,AN.evaluatableFor(o,t),AN.evaluatableFor(h,t)))}1===s.length&&(this[AV]=s[0])}get isConstant(){return null==this[AV]||AN.isConstant(this[AV])}[(er=AV,A_)](){return null!=this[AV]?AN.evaluate(this[AV]):nm}}let AY=Symbol("operator"),Aj=Symbol("left"),Az=Symbol("right");class A$ extends AN{constructor(e,t,i){super(),this[AY]=e,this[Aj]=t,this[Az]=i}get isConstant(){return AN.isConstant(this[Aj])&&AN.isConstant(this[Az])}[A_](){let e;let t=nE(AN.evaluate(this[Aj])),i=nE(AN.evaluate(this[Az])),{number:s,unit:r}=t,{number:n,unit:a}=i;if(null!=a&&null!=r&&a!=r)return nm;switch(this[AY].value){case"+":e=s+n;break;case"-":e=s-n;break;case"/":e=s/n;break;case"*":e=s*n;break;default:return nm}return{type:"number",number:e,unit:r||a}}}let AW=Symbol("evaluatables"),AX=Symbol("intrinsics");class AZ extends AN{constructor(e,t){super(),this[AX]=t;let i=e[0],s=null!=i?i.terms:[];this[AW]=t.basis.map((e,t)=>{let i=s[t];return null==i?{type:"ident",value:"auto"}:"ident"===i.type?i:AN.evaluatableFor(i,e)})}get isConstant(){for(let e of this[AW])if(!AN.isConstant(e))return!1;return!0}[A_](){let e=this[AW].map(e=>AN.evaluate(e));return AN.applyIntrinsics(e,this[AX]).map(e=>e.number)}}let A0=Symbol("instances"),A1=Symbol("activateListener"),A2=Symbol("deactivateListener"),A3=Symbol("notifyInstances"),A4=Symbol("notify"),A8=Symbol("callback");class A5{constructor(e){this[A8]=e}static[A3](){for(let e of A5[A0])e[A4]()}static[(en=A0,A1)](){window.addEventListener("scroll",this[A3],{passive:!0})}static[A2](){window.removeEventListener("scroll",this[A3])}observe(){0===A5[A0].size&&A5[A1](),A5[A0].add(this)}disconnect(){A5[A0].delete(this),0===A5[A0].size&&A5[A2]()}[A4](){this[A8]()}}A5[en]=new Set;let A6=Symbol("computeStyleCallback"),A9=Symbol("astWalker"),A7=Symbol("dependencies"),oe=Symbol("onScroll");class ot{constructor(e){this[ea]={},this[eA]=new np(["function"]),this[eo]=()=>{this[A6]({relatedState:"window-scroll"})},this[A6]=e}observeEffectsFor(e){let t={},i=this[A7];for(let s in this[A9].walk(e,e=>{let{name:s}=e,r=e.arguments[0],n=r.terms[0];if("env"===s.value&&null!=n&&"ident"===n.type&&"window-scroll-y"===n.value&&null==t["window-scroll"]){let a="window-scroll"in i?i["window-scroll"]:new A5(this[oe]);a.observe(),delete i["window-scroll"],t["window-scroll"]=a}}),i){let r=i[s];r.disconnect()}this[A7]=t}dispose(){for(let e in this[A7]){let t=this[A7][e];t.disconnect()}}}ea=A7,eA=A9,eo=oe;/* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ let oi=e=>{let t=e.observeEffects||!1,i=e.intrinsics instanceof Function?e.intrinsics:()=>e.intrinsics;return(s,r)=>{let n=s.updated,a=s.connectedCallback,A=s.disconnectedCallback,o=Symbol(`${r}StyleEffector`),l=Symbol(`${r}StyleEvaluator`),h=Symbol(`${r}UpdateEvaluator`),c=Symbol(`${r}EvaluateAndSync`);Object.defineProperties(s,{[o]:{value:null,writable:!0},[l]:{value:null,writable:!0},[h]:{value:function(){let e=no(this[r]);this[l]=new AZ(e,i(this)),null==this[o]&&t&&(this[o]=new ot(()=>this[c]())),null!=this[o]&&this[o].observeEffectsFor(e)}},[c]:{value:function(){if(null==this[l])return;let t=this[l].evaluate();this[e.updateHandler](t)}},updated:{value:function(e){e.has(r)&&(this[h](),this[c]()),n.call(this,e)}},connectedCallback:{value:function(){a.call(this),this.requestUpdate(r,this[r])}},disconnectedCallback:{value:function(){A.call(this),null!=this[o]&&(this[o].dispose(),this[o]=null)}}})}},os=new el.FM8,or=new el.Pa4,on=Object.freeze({minimumRadius:0,maximumRadius:1/0,minimumPolarAngle:Math.PI/8,maximumPolarAngle:Math.PI-Math.PI/8,minimumAzimuthalAngle:-1/0,maximumAzimuthalAngle:1/0,minimumFieldOfView:10,maximumFieldOfView:45,touchAction:"none"}),oa=Math.PI/8,oA={USER_INTERACTION:"user-interaction",NONE:"none",AUTOMATIC:"automatic"};class oo extends el.pBf{constructor(e,t,i){super(),this.camera=e,this.element=t,this.scene=i,this.orbitSensitivity=1,this.inputSensitivity=1,this.changeSource=oA.NONE,this._interactionEnabled=!1,this._disableZoom=!1,this.isUserPointing=!1,this.enablePan=!0,this.enableTap=!0,this.panProjection=new el.Vkp,this.panPerPixel=0,this.spherical=new el.$V,this.goalSpherical=new el.$V,this.thetaDamper=new sf,this.phiDamper=new sf,this.radiusDamper=new sf,this.logFov=Math.log(on.maximumFieldOfView),this.goalLogFov=this.logFov,this.fovDamper=new sf,this.touchMode=null,this.pointers=[],this.startTime=0,this.startPointerPosition={clientX:0,clientY:0},this.lastSeparation=0,this.touchDecided=!1,this.onContext=e=>{if(this.enablePan)e.preventDefault();else for(let t of this.pointers)this.onPointerUp(new PointerEvent("pointercancel",Object.assign(Object.assign({},this.startPointerPosition),{pointerId:t.id})))},this.touchModeZoom=(e,t)=>{if(!this._disableZoom){let i=this.twoTouchDistance(this.pointers[0],this.pointers[1]),s=.04*(this.lastSeparation-i)*50/this.scene.height;this.lastSeparation=i,this.userAdjustOrbit(0,0,s)}this.panPerPixel>0&&this.movePan(e,t)},this.disableScroll=e=>{e.preventDefault()},this.touchModeRotate=(e,t)=>{let{touchAction:i}=this._options;if(!this.touchDecided&&"none"!==i){this.touchDecided=!0;let s=Math.abs(e),r=Math.abs(t);if(this.changeSource===oA.USER_INTERACTION&&("pan-y"===i&&r>s||"pan-x"===i&&s>r)){this.touchMode=null;return}this.element.addEventListener("touchmove",this.disableScroll,{passive:!1})}this.handleSinglePointerMove(e,t)},this.onPointerDown=e=>{if(this.pointers.length>2)return;let{element:t}=this;0===this.pointers.length&&(t.addEventListener("pointermove",this.onPointerMove),t.addEventListener("pointerup",this.onPointerUp),this.touchMode=null,this.touchDecided=!1,this.startPointerPosition.clientX=e.clientX,this.startPointerPosition.clientY=e.clientY,this.startTime=performance.now());try{t.setPointerCapture(e.pointerId)}catch(i){}this.pointers.push({clientX:e.clientX,clientY:e.clientY,id:e.pointerId}),this.isUserPointing=!1,"touch"===e.pointerType?(this.changeSource=e.altKey?oA.AUTOMATIC:oA.USER_INTERACTION,this.onTouchChange(e)):(this.changeSource=oA.USER_INTERACTION,this.onMouseDown(e))},this.onPointerMove=e=>{let t=this.pointers.find(t=>t.id===e.pointerId);if(null==t)return;let i=this.pointers.length,s=(e.clientX-t.clientX)/i,r=(e.clientY-t.clientY)/i;(0!==s||0!==r)&&(t.clientX=e.clientX,t.clientY=e.clientY,"touch"===e.pointerType?(this.changeSource=e.altKey?oA.AUTOMATIC:oA.USER_INTERACTION,null!==this.touchMode&&this.touchMode(s,r)):(this.changeSource=oA.USER_INTERACTION,this.panPerPixel>0?this.movePan(s,r):this.handleSinglePointerMove(s,r)))},this.onPointerUp=e=>{let{element:t}=this,i=this.pointers.findIndex(t=>t.id===e.pointerId);-1!==i&&this.pointers.splice(i,1),this.panPerPixel>0&&!e.altKey&&this.resetRadius(),0===this.pointers.length?(t.removeEventListener("pointermove",this.onPointerMove),t.removeEventListener("pointerup",this.onPointerUp),t.removeEventListener("touchmove",this.disableScroll),this.enablePan&&this.enableTap&&this.recenter(e)):null!==this.touchMode&&this.onTouchChange(e),this.scene.element[oL].style.opacity=0,t.style.cursor="grab",this.panPerPixel=0,this.isUserPointing&&this.dispatchEvent({type:"pointer-change-end"})},this.onWheel=e=>{this.changeSource=oA.USER_INTERACTION;let t=e.deltaY*(1==e.deltaMode?18:1)*.04/30;this.userAdjustOrbit(0,0,t),e.preventDefault()},this.onKeyDown=e=>{let{changeSource:t}=this;this.changeSource=oA.USER_INTERACTION;let i=e.shiftKey&&this.enablePan?this.panKeyCodeHandler(e):this.orbitZoomKeyCodeHandler(e);i?e.preventDefault():this.changeSource=t},this._options=Object.assign({},on),this.setOrbit(0,Math.PI/2,1),this.setFieldOfView(100),this.jumpToGoal()}get interactionEnabled(){return this._interactionEnabled}enableInteraction(){if(!1===this._interactionEnabled){let{element:e}=this;e.addEventListener("pointerdown",this.onPointerDown),e.addEventListener("pointercancel",this.onPointerUp),this._disableZoom||e.addEventListener("wheel",this.onWheel),e.addEventListener("keydown",this.onKeyDown),e.addEventListener("touchmove",()=>{},{passive:!1}),e.addEventListener("contextmenu",this.onContext),this.element.style.cursor="grab",this._interactionEnabled=!0,this.updateTouchActionStyle()}}disableInteraction(){if(!0===this._interactionEnabled){let{element:e}=this;e.removeEventListener("pointerdown",this.onPointerDown),e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerup",this.onPointerUp),e.removeEventListener("pointercancel",this.onPointerUp),e.removeEventListener("wheel",this.onWheel),e.removeEventListener("keydown",this.onKeyDown),e.removeEventListener("contextmenu",this.onContext),e.style.cursor="",this.touchMode=null,this._interactionEnabled=!1,this.updateTouchActionStyle()}}get options(){return this._options}set disableZoom(e){this._disableZoom!=e&&(this._disableZoom=e,!0===e?this.element.removeEventListener("wheel",this.onWheel):this.element.addEventListener("wheel",this.onWheel),this.updateTouchActionStyle())}getCameraSpherical(e=new el.$V){return e.copy(this.spherical)}getFieldOfView(){return this.camera.fov}applyOptions(e){Object.assign(this._options,e),this.setOrbit(),this.setFieldOfView(Math.exp(this.goalLogFov))}updateNearFar(e,t){this.camera.near=Math.max(e,t/1e3),this.camera.far=t,this.camera.updateProjectionMatrix()}updateAspect(e){this.camera.aspect=e,this.camera.updateProjectionMatrix()}setOrbit(e=this.goalSpherical.theta,t=this.goalSpherical.phi,i=this.goalSpherical.radius){let{minimumAzimuthalAngle:s,maximumAzimuthalAngle:r,minimumPolarAngle:n,maximumPolarAngle:a,minimumRadius:A,maximumRadius:o}=this._options,{theta:l,phi:h,radius:c}=this.goalSpherical,u=tI(e,s,r);isFinite(s)||isFinite(r)||(this.spherical.theta=this.wrapAngle(this.spherical.theta-u)+u);let g=tI(t,n,a),d=tI(i,A,o);return(u!==l||g!==h||d!==c)&&(this.goalSpherical.theta=u,this.goalSpherical.phi=g,this.goalSpherical.radius=d,this.goalSpherical.makeSafe(),!0)}setRadius(e){this.goalSpherical.radius=e,this.setOrbit()}setFieldOfView(e){let{minimumFieldOfView:t,maximumFieldOfView:i}=this._options;e=tI(e,t,i),this.goalLogFov=Math.log(e)}setDamperDecayTime(e){this.thetaDamper.setDecayTime(e),this.phiDamper.setDecayTime(e),this.radiusDamper.setDecayTime(e),this.fovDamper.setDecayTime(e)}adjustOrbit(e,t,i){let{theta:s,phi:r,radius:n}=this.goalSpherical,{minimumRadius:a,maximumRadius:A,minimumFieldOfView:o,maximumFieldOfView:l}=this._options,h=this.spherical.theta-s,c=Math.PI-.001,u=s-tI(e,-c-h,c-h),g=0===i?0:((i>0?A:a)-n)/(Math.log(i>0?l:o)-this.goalLogFov),d=n+i*(isFinite(g)?g:(A-a)*2);if(this.setOrbit(u,r-t,d),0!==i){let p=this.goalLogFov+i;this.setFieldOfView(Math.exp(p))}}jumpToGoal(){this.update(0,1e4)}update(e,t){if(this.isStationary())return;let{maximumPolarAngle:i,maximumRadius:s}=this._options,r=this.spherical.theta-this.goalSpherical.theta;!(Math.abs(r)>Math.PI)||isFinite(this._options.minimumAzimuthalAngle)||isFinite(this._options.maximumAzimuthalAngle)||(this.spherical.theta-=2*Math.sign(r)*Math.PI),this.spherical.theta=this.thetaDamper.update(this.spherical.theta,this.goalSpherical.theta,t,Math.PI),this.spherical.phi=this.phiDamper.update(this.spherical.phi,this.goalSpherical.phi,t,i),this.spherical.radius=this.radiusDamper.update(this.spherical.radius,this.goalSpherical.radius,t,s),this.logFov=this.fovDamper.update(this.logFov,this.goalLogFov,t,1),this.moveCamera()}updateTouchActionStyle(){let{style:e}=this.element;if(this._interactionEnabled){let{touchAction:t}=this._options;this._disableZoom&&"none"!==t?e.touchAction="manipulation":e.touchAction=t}else e.touchAction=""}isStationary(){return this.goalSpherical.theta===this.spherical.theta&&this.goalSpherical.phi===this.spherical.phi&&this.goalSpherical.radius===this.spherical.radius&&this.goalLogFov===this.logFov}dispatchChange(){this.dispatchEvent({type:"change",source:this.changeSource})}moveCamera(){this.spherical.makeSafe(),this.camera.position.setFromSpherical(this.spherical),this.camera.setRotationFromEuler(new el.USm(this.spherical.phi-Math.PI/2,this.spherical.theta,0,"YXZ")),this.camera.fov!==Math.exp(this.logFov)&&(this.camera.fov=Math.exp(this.logFov),this.camera.updateProjectionMatrix()),this.dispatchChange()}userAdjustOrbit(e,t,i){this.adjustOrbit(e*this.orbitSensitivity*this.inputSensitivity,t*this.orbitSensitivity*this.inputSensitivity,i*this.inputSensitivity),this.dispatchChange()}wrapAngle(e){let t=(e+Math.PI)/(2*Math.PI);return 2*(t-Math.floor(t))*Math.PI-Math.PI}pixelLengthToSphericalAngle(e){return 2*Math.PI*e/this.element.clientHeight}twoTouchDistance(e,t){let{clientX:i,clientY:s}=e,{clientX:r,clientY:n}=t,a=r-i,A=n-s;return Math.sqrt(a*a+A*A)}handleSinglePointerMove(e,t){let i=this.pixelLengthToSphericalAngle(e),s=this.pixelLengthToSphericalAngle(t);!1===this.isUserPointing&&(this.isUserPointing=!0,this.dispatchEvent({type:"pointer-change-start"})),this.userAdjustOrbit(i,s,0)}initializePan(){let{theta:e,phi:t}=this.spherical,i=e-this.scene.yaw;this.panPerPixel=.018/this.scene.height,this.panProjection.set(-Math.cos(i),-Math.cos(t)*Math.sin(i),0,0,Math.sin(t),0,Math.sin(i),-Math.cos(t)*Math.cos(i),0)}movePan(e,t){let{scene:i}=this,s=or.set(e,t,0).multiplyScalar(this.inputSensitivity),r=this.spherical.radius*Math.exp(this.logFov)*this.panPerPixel;s.multiplyScalar(r);let n=i.getTarget();n.add(s.applyMatrix3(this.panProjection)),i.boundingSphere.clampPoint(n,n),i.setTarget(n.x,n.y,n.z),this.dispatchChange()}recenter(e){if(performance.now()>this.startTime+300||Math.abs(e.clientX-this.startPointerPosition.clientX)>2||Math.abs(e.clientY-this.startPointerPosition.clientY)>2)return;let{scene:t}=this,i=t.positionAndNormalFromPoint(t.getNDC(e.clientX,e.clientY));if(null==i){let{cameraTarget:s}=t.element;t.element.cameraTarget="",t.element.cameraTarget=s,this.userAdjustOrbit(0,0,1)}else t.target.worldToLocal(i.position),t.setTarget(i.position.x,i.position.y,i.position.z)}resetRadius(){let{scene:e}=this,t=e.positionAndNormalFromPoint(os.set(0,0));if(null==t)return;e.target.worldToLocal(t.position);let i=e.getTarget(),{theta:s,phi:r}=this.spherical,n=s-e.yaw,a=or.set(Math.sin(r)*Math.sin(n),Math.cos(r),Math.sin(r)*Math.cos(n)),A=a.dot(t.position.sub(i));i.add(a.multiplyScalar(A)),e.setTarget(i.x,i.y,i.z),this.setOrbit(void 0,void 0,this.goalSpherical.radius-A)}onTouchChange(e){if(1===this.pointers.length)this.touchMode=this.touchModeRotate;else{if(this._disableZoom){this.touchMode=null,this.element.removeEventListener("touchmove",this.disableScroll);return}this.touchMode=this.touchDecided&&null===this.touchMode?null:this.touchModeZoom,this.touchDecided=!0,this.element.addEventListener("touchmove",this.disableScroll,{passive:!1}),this.lastSeparation=this.twoTouchDistance(this.pointers[0],this.pointers[1]),this.enablePan&&null!=this.touchMode&&(this.initializePan(),e.altKey||(this.scene.element[oL].style.opacity=1))}}onMouseDown(e){this.panPerPixel=0,this.enablePan&&(2===e.button||e.ctrlKey||e.metaKey||e.shiftKey)&&(this.initializePan(),this.scene.element[oL].style.opacity=1),this.element.style.cursor="grabbing"}orbitZoomKeyCodeHandler(e){let t=!0;switch(e.key){case"PageUp":this.userAdjustOrbit(0,0,.04);break;case"PageDown":this.userAdjustOrbit(0,0,-.04);break;case"ArrowUp":this.userAdjustOrbit(0,-oa,0);break;case"ArrowDown":this.userAdjustOrbit(0,oa,0);break;case"ArrowLeft":this.userAdjustOrbit(-oa,0,0);break;case"ArrowRight":this.userAdjustOrbit(oa,0,0);break;default:t=!1}return t}panKeyCodeHandler(e){this.initializePan();let t=!0;switch(e.key){case"ArrowUp":this.movePan(0,-10);break;case"ArrowDown":this.movePan(0,10);break;case"ArrowLeft":this.movePan(-10,0);break;case"ArrowRight":this.movePan(10,0);break;default:t=!1}return t}}/* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ let ol=e=>e<.5?2*e*e:-1+(4-2*e)*e,oh=(e,t,i=ol)=>s=>e+(t-e)*i(s),oc=(e,t)=>{var i;let s=t.map((i=0,e=>i+=e));return t=>{t=tI(t,0,1)*s[s.length-1];let i=s.findIndex(e=>e>=t),r=i<1?0:s[i-1],n=s[i];return e[i]((t-r)/(n-r))}},ou=e=>{let t=[],i=[],s=e.initialValue;for(let r=0;r=0;A--)(r=e[A])&&(a=(n<3?r(a):n>3?r(t,i,a):r(t,i))||a);return n>3&&a&&Object.defineProperty(t,i,a),a};let od=ou({initialValue:0,keyframes:[{frames:5,value:-1},{frames:1,value:-1},{frames:8,value:1},{frames:1,value:1},{frames:5,value:0},{frames:18,value:0}]}),op=ou({initialValue:0,keyframes:[{frames:1,value:1},{frames:5,value:1},{frames:1,value:0},{frames:6,value:0}]}),om="0deg 75deg 105%",oI=["front","right","back","left"],of=["upper-","","lower-"],oE={AUTO:"auto",NONE:"none"},oC={BASIC:"basic",WIGGLE:"wiggle"},oB={PAN_Y:"pan-y",PAN_X:"pan-x",NONE:"none"},oy=()=>({basis:[nI(nA(30,"deg"))],keywords:{auto:[null]}}),oQ=()=>({basis:[nI(nA(12,"deg"))],keywords:{auto:[null]}}),ow=(()=>{let e=no(om)[0].terms,t=nE(e[0]),i=nE(e[1]);return e=>{let s=e[n8].idealCameraDistance();return{basis:[t,i,nA(s,"m")],keywords:{auto:[null,null,nA(105,"%")]}}}})(),ov=e=>{let t=2.2*e[n8].boundingSphere.radius;return{basis:[nA(-1/0,"rad"),nA(Math.PI/8,"rad"),nA(t,"m")],keywords:{auto:[null,null,null]}}},oS=e=>{let t=ow(e),i=new AZ([],t),s=i.evaluate()[2];return{basis:[nA(1/0,"rad"),nA(Math.PI-Math.PI/8,"rad"),nA(s,"m")],keywords:{auto:[null,null,null]}}},ob=e=>{let t=e[n8].boundingBox.getCenter(new el.Pa4);return{basis:[nA(t.x,"m"),nA(t.y,"m"),nA(t.z,"m")],keywords:{auto:[null,null,null]}}},ox=Math.PI/2,oM=Math.PI/3,oR=ox/2,oD=2*Math.PI,oT=Symbol("controls"),oL=Symbol("panElement"),oF=Symbol("promptElement"),ok=Symbol("promptAnimatedContainer"),o_=Symbol("fingerAnimatedContainers"),oU=Symbol("deferInteractionPrompt"),oN=Symbol("updateAria"),oG=Symbol("updateCameraForRadius"),oP=Symbol("onChange"),oO=Symbol("onPointerChange"),oH=Symbol("waitingToPromptUser"),oq=Symbol("userHasInteracted"),oK=Symbol("promptElementVisibleTime"),oV=Symbol("lastPromptOffset"),oJ=Symbol("lastSpherical"),oY=Symbol("jumpCamera"),oj=Symbol("initialized"),oz=Symbol("maintainThetaPhi"),o$=Symbol("syncCameraOrbit"),oW=Symbol("syncFieldOfView"),oX=Symbol("syncCameraTarget"),oZ=Symbol("syncMinCameraOrbit"),o0=Symbol("syncMaxCameraOrbit"),o1=Symbol("syncMinFieldOfView"),o2=Symbol("syncMaxFieldOfView");/* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var o3=function(e,t,i,s){var r,n=arguments.length,a=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,i,s);else for(var A=e.length-1;A>=0;A--)(r=e[A])&&(a=(n<3?r(a):n>3?r(t,i,a):r(t,i))||a);return n>3&&a&&Object.defineProperty(t,i,a),a};let o4={AUTO:"auto",MANUAL:"manual"},o8={AUTO:"auto",LAZY:"lazy",EAGER:"eager"},o5=Symbol("defaultProgressBarElement"),o6=Symbol("posterContainerElement"),o9=Symbol("defaultPosterElement"),o7=Symbol("shouldDismissPoster"),le=Symbol("hidePoster"),lt=Symbol("modelIsRevealed"),li=Symbol("updateProgressBar"),ls=Symbol("ariaLabelCallToAction"),lr=Symbol("onProgress");/* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var ln=function(e,t,i,s){var r,n=arguments.length,a=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,i,s);else for(var A=e.length-1;A>=0;A--)(r=e[A])&&(a=(n<3?r(a):n>3?r(t,i,a):r(t,i))||a);return n>3&&a&&Object.defineProperty(t,i,a),a};let la={basis:[nI(nA(Math.PI/32,"rad"))],keywords:{auto:[null]}},lA=Symbol("autoRotateStartTime"),lo=Symbol("radiansPerSecond"),ll=Symbol("syncRotationRate"),lh=Symbol("onCameraChange"),lc=(e=>{var t,i,s;class r extends e{constructor(){super(...arguments),this[t]=new Map,this[i]=e=>{e.forEach(e=>{e instanceof MutationRecord&&"childList"!==e.type||(e.addedNodes.forEach(e=>{this[ap](e)}),e.removedNodes.forEach(e=>{this[am](e)}),this[n5]())})},this[s]=new MutationObserver(this[ag])}connectedCallback(){super.connectedCallback();for(let e=0;e{var t,i,s,r;class n extends e{constructor(){super(...arguments),this[t]=void 0,this[i]=null,this[s]=new el.dpR,this[r]=null,this.variantName=null,this.orientation="0 0 0",this.scale="1 1 1"}get model(){return this[nr]}get availableVariants(){return this.model?this.model[r5]():[]}get originalGltfJson(){return this[ns]}[(t=nr,i=ni,s=na,r=ns,nn)](){return()=>{this[n5]()}}async createTexture(e,t="image/png"){let i=this[ni],s=await new Promise(t=>this[na].load(e,t));return i&&s?(s.encoding=el.knz,s.wrapS=el.rpg,s.wrapT=el.rpg,s.flipY=!1,s.userData.mimeType=t,new rg(this[nn](),s)):null}async updated(e){if(super.updated(e),e.has("variantName")){let t=this[at].beginActivity();t(.1);let i=this[nr],{variantName:s}=this;null!=i&&(await i[r1](s),this[n5](),this.dispatchEvent(new CustomEvent("variant-applied"))),t(1)}if(e.has("orientation")||e.has("scale")){if(!this.loaded)return;let r=this[n8];r.applyTransform(),r.updateBoundingBox(),r.updateShadow(),this[ae].arRenderer.onUpdateScene(),this[n5]()}}[n9](){super[n9]();let{currentGLTF:e}=this[n8];if(null!=e){let{correlatedSceneGraph:t}=e;null!=t&&e!==this[ni]&&(this[nr]=new ne(t,this[nn]()),this[ns]=JSON.parse(JSON.stringify(t.gltf))),"variants"in e.userData&&this.requestUpdate("variantName")}this[ni]=e}async exportScene(e){let t=this[n8];return new Promise(async(i,s)=>{let r={binary:!0,onlyVisible:!0,maxTextureSize:1/0,includeCustomExtensions:!1,forceIndices:!1};Object.assign(r,e),r.animations=t.animations,r.truncateDrawRange=!0;let n=t.shadow,a=!1;null!=n&&(a=n.visible,n.visible=!1),await this[nr][r0]();let A=new i5().register(e=>new sp(e));A.parse(t.model,e=>i(new Blob([r.binary?e:JSON.stringify(e)],{type:r.binary?"application/octet-stream":"application/json"})),()=>s("glTF export failed"),r),null!=n&&(n.visible=a)})}materialFromPoint(e,t){let i=this[n8],s=i.getNDC(e,t);return i.raycaster.setFromCamera(s,i.getCamera()),this[nr][r4](i.raycaster)}}return nt([u({type:String,attribute:"variant-name"})],n.prototype,"variantName",void 0),nt([u({type:String,attribute:"orientation"})],n.prototype,"orientation",void 0),nt([u({type:String,attribute:"scale"})],n.prototype,"scale",void 0),n})((e=>{var t,i,s;class r extends e{constructor(){super(...arguments),this.autoRotate=!1,this.autoRotateDelay=3e3,this.rotationPerSecond="auto",this[t]=performance.now(),this[i]=0,this[s]=e=>{this.autoRotate&&"user-interaction"===e.detail.source&&(this[lA]=performance.now())}}connectedCallback(){super.connectedCallback(),this.addEventListener("camera-change",this[lh]),this[lA]=performance.now()}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("camera-change",this[lh]),this[lA]=performance.now()}updated(e){super.updated(e),e.has("autoRotate")&&(this[lA]=performance.now())}[(t=lA,i=lo,ll)](e){this[lo]=e[0]}[n6](e,t){if(super[n6](e,t),!this.autoRotate||!this[as]()||this[ae].isPresenting)return;let i=Math.min(t,e-this[lA]-this.autoRotateDelay);i>0&&(this[n8].yaw=this.turntableRotation+this[lo]*i*.001)}get turntableRotation(){return this[n8].yaw}resetTurntableRotation(e=0){this[n8].yaw=e}}return s=lh,ln([u({type:Boolean,attribute:"auto-rotate"})],r.prototype,"autoRotate",void 0),ln([u({type:Number,attribute:"auto-rotate-delay"})],r.prototype,"autoRotateDelay",void 0),ln([oi({intrinsics:la,updateHandler:ll}),u({type:String,attribute:"rotation-per-second"})],r.prototype,"rotationPerSecond",void 0),r})((e=>{var t,i,s;class r extends e{constructor(){super(...arguments),this.environmentImage=null,this.skyboxImage=null,this.shadowIntensity=0,this.shadowSoftness=1,this.exposure=1,this[t]=null,this[i]=null,this[s]=null}updated(e){super.updated(e),e.has("shadowIntensity")&&(this[n8].setShadowIntensity(.5*this.shadowIntensity),this[n5]()),e.has("shadowSoftness")&&(this[n8].setShadowSoftness(this.shadowSoftness),this[n5]()),e.has("exposure")&&(this[n8].exposure=this.exposure,this[n5]()),(e.has("environmentImage")||e.has("skyboxImage"))&&this[ar]()&&this[tv]()}hasBakedShadow(){return this[n8].bakedShadows.size>0}async [(t=tQ,i=tw,s=tS,tv)](){let{skyboxImage:e,environmentImage:t}=this;null!=this[tS]&&(this[tS](),this[tS]=null);let{textureUtils:i}=this[ae];if(null==i)return;let s=this[at].beginActivity();try{let{environmentMap:r,skybox:n}=await i.generateEnvironmentMapAndSkybox(tu(e),t,e=>s(tI(e,0,1)));this[tQ]!==r&&(this[tQ]=r,this.dispatchEvent(new CustomEvent("environment-change"))),null!=n?this[tw]=n.name===r.name?r:n:this[tw]=null,this[n8].setEnvironmentAndSkybox(this[tQ],this[tw]),this[n8].dispatchEvent({type:"envmap-update"})}catch(a){if(a instanceof Error)throw this[n8].setEnvironmentAndSkybox(null,null),a}finally{s(1)}}}return ty([u({type:String,attribute:"environment-image"})],r.prototype,"environmentImage",void 0),ty([u({type:String,attribute:"skybox-image"})],r.prototype,"skyboxImage",void 0),ty([u({type:Number,attribute:"shadow-intensity"})],r.prototype,"shadowIntensity",void 0),ty([u({type:Number,attribute:"shadow-softness"})],r.prototype,"shadowSoftness",void 0),ty([u({type:Number})],r.prototype,"exposure",void 0),r})((e=>{var t,i,s,r,n,a,A,o,l,h,c,g,d,p,m;class I extends e{constructor(){super(...arguments),this.cameraControls=!1,this.cameraOrbit=om,this.cameraTarget="auto auto auto",this.fieldOfView="auto",this.minCameraOrbit="auto",this.maxCameraOrbit="auto",this.minFieldOfView="auto",this.maxFieldOfView="auto",this.interactionPromptThreshold=3e3,this.interactionPrompt=oE.AUTO,this.interactionPromptStyle=oC.WIGGLE,this.orbitSensitivity=1,this.touchAction=oB.NONE,this.disableZoom=!1,this.disablePan=!1,this.disableTap=!1,this.interpolationDecay=50,this[t]=this.shadowRoot.querySelector(".interaction-prompt"),this[i]=this.shadowRoot.querySelector("#prompt"),this[s]=[this.shadowRoot.querySelector("#finger0"),this.shadowRoot.querySelector("#finger1")],this[r]=this.shadowRoot.querySelector(".pan-target"),this[n]=0,this[a]=1/0,this[A]=!1,this[o]=!1,this[l]=new oo(this[n8].camera,this[n3],this[n8]),this[h]=new el.$V,this[c]=!1,this[g]=!1,this[d]=!1,this[p]=({source:e})=>{this[oN](),this[n5](),e===oA.USER_INTERACTION&&(this[oq]=!0,this[oU]()),this.dispatchEvent(new CustomEvent("camera-change",{detail:{source:e}}))},this[m]=e=>{"pointer-change-start"===e.type?this[n2].classList.add("pointer-tumbling"):this[n2].classList.remove("pointer-tumbling")}}get inputSensitivity(){return this[oT].inputSensitivity}set inputSensitivity(e){this[oT].inputSensitivity=e}getCameraOrbit(){let{theta:e,phi:t,radius:i}=this[oJ];return{theta:e,phi:t,radius:i,toString(){return`${this.theta}rad ${this.phi}rad ${this.radius}m`}}}getCameraTarget(){return an(this[ae].isPresenting?this[ae].arRenderer.target:this[n8].getTarget())}getFieldOfView(){return this[oT].getFieldOfView()}getMinimumFieldOfView(){return this[oT].options.minimumFieldOfView}getMaximumFieldOfView(){return this[oT].options.maximumFieldOfView}getIdealAspect(){return this[n8].idealAspect}jumpCameraToGoal(){this[oY]=!0,this.requestUpdate(oY,!1)}resetInteractionPrompt(){this[oV]=0,this[oK]=1/0,this[oq]=!1,this[oH]=this.interactionPrompt===oE.AUTO&&this.cameraControls}zoom(e){let t=new WheelEvent("wheel",{deltaY:-30*e});this[n3].dispatchEvent(t)}connectedCallback(){super.connectedCallback(),this[oT].addEventListener("change",this[oP]),this[oT].addEventListener("pointer-change-start",this[oO]),this[oT].addEventListener("pointer-change-end",this[oO])}disconnectedCallback(){super.disconnectedCallback(),this[oT].removeEventListener("change",this[oP]),this[oT].removeEventListener("pointer-change-start",this[oO]),this[oT].removeEventListener("pointer-change-end",this[oO])}updated(e){super.updated(e);let t=this[oT],i=this[n8];if(e.has("cameraControls")&&(this.cameraControls?(t.enableInteraction(),this.interactionPrompt===oE.AUTO&&(this[oH]=!0)):(t.disableInteraction(),this[oU]()),this[n3].setAttribute("aria-label",this[nz])),e.has("disableZoom")&&(t.disableZoom=this.disableZoom),e.has("disablePan")&&(t.enablePan=!this.disablePan),e.has("disableTap")&&(t.enableTap=!this.disableTap),(e.has("interactionPrompt")||e.has("cameraControls")||e.has("src"))&&(this.interactionPrompt===oE.AUTO&&this.cameraControls&&!this[oq]?this[oH]=!0:this[oU]()),e.has("interactionPromptStyle")&&(this[ok].style.opacity=this.interactionPromptStyle==oC.BASIC?"1":"0"),e.has("touchAction")){let s=this.touchAction;t.applyOptions({touchAction:s}),t.updateTouchActionStyle()}e.has("orbitSensitivity")&&(t.orbitSensitivity=this.orbitSensitivity),e.has("interpolationDecay")&&(t.setDamperDecayTime(this.interpolationDecay),i.setTargetDamperDecayTime(this.interpolationDecay)),!0===this[oY]&&Promise.resolve().then(()=>{t.jumpToGoal(),i.jumpToGoal(),this[oY]=!1})}async updateFraming(){let e=this[n8],t=e.adjustedFoV(e.framedFoVDeg);await e.updateFraming();let i=e.adjustedFoV(e.framedFoVDeg),s=this[oT].getFieldOfView()/t;this[oT].setFieldOfView(i*s),this[oz]=!0,this.requestUpdate("maxFieldOfView"),this.requestUpdate("fieldOfView"),this.requestUpdate("minCameraOrbit"),this.requestUpdate("maxCameraOrbit"),this.requestUpdate("cameraOrbit"),await this.updateComplete}interact(e,t,i){let s=this[n3],r=this[o_];if("1"===r[0].style.opacity){console.warn("interact() failed because an existing interaction is running.");return}let n=[];n.push({x:ou(t.x),y:ou(t.y)});let a=[{x:n[0].x(0),y:n[0].y(0)}];null!=i&&(n.push({x:ou(i.x),y:ou(i.y)}),a.push({x:n[1].x(0),y:n[1].y(0)}));let A=performance.now(),{width:o,height:l}=this[n8],h=e=>{for(let[t,i]of a.entries()){let{style:n}=r[t];n.transform=`translateX(${o*i.x}px) translateY(${l*i.y}px)`,"pointerdown"===e?n.opacity="1":"pointerup"===e&&(n.opacity="0");let A={pointerId:t-5678,pointerType:"touch",target:s,clientX:o*i.x,clientY:l*i.y,altKey:!0};s.dispatchEvent(new PointerEvent(e,A))}},c=()=>{let{changeSource:t}=this[oT];if(t!==oA.AUTOMATIC||!s.isConnected){for(let i of this[o_])i.style.opacity="0";h("pointercancel"),this.dispatchEvent(new CustomEvent("interact-stopped",{detail:{source:t}})),document.removeEventListener("visibilitychange",u);return}let r=Math.min(1,(performance.now()-A)/e);for(let[o,l]of a.entries())l.x=n[o].x(r),l.y=n[o].y(r);h("pointermove"),r<1?requestAnimationFrame(c):(h("pointerup"),this.dispatchEvent(new CustomEvent("interact-stopped",{detail:{source:t}})),document.removeEventListener("visibilitychange",u))},u=()=>{let e=0;"hidden"===document.visibilityState?e=performance.now()-A:A=performance.now()-e};document.addEventListener("visibilitychange",u),h("pointerdown"),requestAnimationFrame(c)}[(t=oF,i=ok,s=o_,r=oL,n=oV,a=oK,A=oq,o=oH,l=oT,h=oJ,c=oY,g=oj,d=oz,oW)](e){let t=this[n8];t.framedFoVDeg=180*e[0]/Math.PI,this[oT].setFieldOfView(t.adjustedFoV(t.framedFoVDeg))}[o$](e){let t=this[oT];if(this[oz]){let{theta:i,phi:s}=this.getCameraOrbit();e[0]=i,e[1]=s,this[oz]=!1}t.changeSource=oA.NONE,t.setOrbit(e[0],e[1],e[2])}[oZ](e){this[oT].applyOptions({minimumAzimuthalAngle:e[0],minimumPolarAngle:e[1],minimumRadius:e[2]}),this.jumpCameraToGoal()}[o0](e){this[oT].applyOptions({maximumAzimuthalAngle:e[0],maximumPolarAngle:e[1],maximumRadius:e[2]}),this[oG](e[2]),this.jumpCameraToGoal()}[o1](e){this[oT].applyOptions({minimumFieldOfView:180*e[0]/Math.PI}),this.jumpCameraToGoal()}[o2](e){let t=this[n8].adjustedFoV(180*e[0]/Math.PI);this[oT].applyOptions({maximumFieldOfView:t}),this.jumpCameraToGoal()}[oX](e){let[t,i,s]=e;this[ae].arRenderer.isPresenting||this[n8].setTarget(t,i,s),this[oT].changeSource=oA.NONE,this[ae].arRenderer.updateTarget()}[n6](e,t){if(super[n6](e,t),this[ae].isPresenting||!this[as]())return;let i=this[oT],s=this[n8],r=performance.now();if(this[oH]&&this.loaded&&r>this[nZ]+this.interactionPromptThreshold&&(this[oH]=!1,this[oK]=r,this[oF].classList.add("visible")),isFinite(this[oK])&&this.interactionPromptStyle===oC.WIGGLE){let n=(r-this[oK])/5e3%1,a=od(n),A=op(n);if(this[ok].style.opacity=`${A}`,a!==this[oV]){let o=a*s.width*.05,l=(a-this[oV])*Math.PI/16;this[ok].style.transform=`translateX(${o}px)`,i.changeSource=oA.AUTOMATIC,i.adjustOrbit(l,0,0),this[oV]=a}}i.update(e,t),s.updateTarget(t)&&this[oP]({type:"change",source:i.changeSource})}[oU](){this[oH]=!1,this[oF].classList.remove("visible"),this[oK]=1/0}[oG](e){let t=Math.max(this[n8].boundingSphere.radius,e);this[oT].updateNearFar(0,2*t)}[oN](){let{theta:e,phi:t}=this[oT].getCameraSpherical(this[oJ]),i=oI[(4+Math.floor((e%oD+oR)/ox))%4],s=of[Math.floor(t/oM)];this[nX](`View from stage ${s}${i}`)}get[nz](){return super[nz]+(this.cameraControls?". Use mouse, touch or arrow keys to move.":"")}async [n7](e){let t=this[oT],i=this[n8],s=i.adjustedFoV(i.framedFoVDeg);super[n7](e);let r=i.adjustedFoV(i.framedFoVDeg)/s,n=t.getFieldOfView()*(isFinite(r)?r:1);t.updateAspect(this[n8].aspect),this.requestUpdate("maxFieldOfView",this.maxFieldOfView),await this.updateComplete,this[oT].setFieldOfView(n),this.jumpCameraToGoal()}[n9](){super[n9](),this[oj]?this[oz]=!0:this[oj]=!0,this.requestUpdate("maxFieldOfView",this.maxFieldOfView),this.requestUpdate("fieldOfView",this.fieldOfView),this.requestUpdate("minCameraOrbit",this.minCameraOrbit),this.requestUpdate("maxCameraOrbit",this.maxCameraOrbit),this.requestUpdate("cameraOrbit",this.cameraOrbit),this.requestUpdate("cameraTarget",this.cameraTarget),this.jumpCameraToGoal()}}return p=oP,m=oO,og([u({type:Boolean,attribute:"camera-controls"})],I.prototype,"cameraControls",void 0),og([oi({intrinsics:ow,observeEffects:!0,updateHandler:o$}),u({type:String,attribute:"camera-orbit",hasChanged:()=>!0})],I.prototype,"cameraOrbit",void 0),og([oi({intrinsics:ob,observeEffects:!0,updateHandler:oX}),u({type:String,attribute:"camera-target",hasChanged:()=>!0})],I.prototype,"cameraTarget",void 0),og([oi({intrinsics:oy,observeEffects:!0,updateHandler:oW}),u({type:String,attribute:"field-of-view",hasChanged:()=>!0})],I.prototype,"fieldOfView",void 0),og([oi({intrinsics:ov,updateHandler:oZ}),u({type:String,attribute:"min-camera-orbit",hasChanged:()=>!0})],I.prototype,"minCameraOrbit",void 0),og([oi({intrinsics:oS,updateHandler:o0}),u({type:String,attribute:"max-camera-orbit",hasChanged:()=>!0})],I.prototype,"maxCameraOrbit",void 0),og([oi({intrinsics:oQ,updateHandler:o1}),u({type:String,attribute:"min-field-of-view",hasChanged:()=>!0})],I.prototype,"minFieldOfView",void 0),og([oi({intrinsics:oy,updateHandler:o2}),u({type:String,attribute:"max-field-of-view",hasChanged:()=>!0})],I.prototype,"maxFieldOfView",void 0),og([u({type:Number,attribute:"interaction-prompt-threshold"})],I.prototype,"interactionPromptThreshold",void 0),og([u({type:String,attribute:"interaction-prompt"})],I.prototype,"interactionPrompt",void 0),og([u({type:String,attribute:"interaction-prompt-style"})],I.prototype,"interactionPromptStyle",void 0),og([u({type:Number,attribute:"orbit-sensitivity"})],I.prototype,"orbitSensitivity",void 0),og([u({type:String,attribute:"touch-action"})],I.prototype,"touchAction",void 0),og([u({type:Boolean,attribute:"disable-zoom"})],I.prototype,"disableZoom",void 0),og([u({type:Boolean,attribute:"disable-pan"})],I.prototype,"disablePan",void 0),og([u({type:Boolean,attribute:"disable-tap"})],I.prototype,"disableTap",void 0),og([u({type:Number,attribute:"interpolation-decay"})],I.prototype,"interpolationDecay",void 0),I})((e=>{var t,i,s,r,n,a,A,o,l,h;class c extends e{constructor(){super(...arguments),this.ar=!1,this.arScale="auto",this.arPlacement="floor",this.arModes="webxr scene-viewer quick-look",this.iosSrc=null,this.xrEnvironment=!1,this[t]=!1,this[i]=this.shadowRoot.querySelector(".ar-button"),this[s]=document.createElement("a"),this[r]=new Set,this[n]=AC.NONE,this[a]=!1,this[A]=e=>{e.preventDefault(),this.activateAR()},this[o]=({status:e})=>{(e===sQ.NOT_PRESENTING||this[ae].arRenderer.presentedScene===this[n8])&&(this.setAttribute("ar-status",e),this.dispatchEvent(new CustomEvent("ar-status",{detail:{status:e}})),e===sQ.NOT_PRESENTING?this.removeAttribute("ar-tracking"):e===sQ.SESSION_STARTED&&this.setAttribute("ar-tracking",sw.TRACKING))},this[l]=({status:e})=>{this.setAttribute("ar-tracking",e),this.dispatchEvent(new CustomEvent("ar-tracking",{detail:{status:e}}))},this[h]=e=>{"_apple_ar_quicklook_button_tapped"==e.data&&this.dispatchEvent(new CustomEvent("quick-look-button-tapped"))}}get canActivateAR(){return this[AS]!==AC.NONE}connectedCallback(){super.connectedCallback(),this[ae].arRenderer.addEventListener("status",this[AD]),this.setAttribute("ar-status",sQ.NOT_PRESENTING),this[ae].arRenderer.addEventListener("tracking",this[AT]),this[Ax].addEventListener("message",this[AL])}disconnectedCallback(){super.disconnectedCallback(),this[ae].arRenderer.removeEventListener("status",this[AD]),this[ae].arRenderer.removeEventListener("tracking",this[AT]),this[Ax].removeEventListener("message",this[AL])}update(e){super.update(e),e.has("arScale")&&(this[n8].canScale="fixed"!==this.arScale),e.has("arPlacement")&&(this[n8].updateShadow(),this[n5]()),e.has("arModes")&&(this[Ab]=AE(this.arModes)),(e.has("ar")||e.has("arModes")||e.has("src")||e.has("iosSrc"))&&this[AF]()}async activateAR(){switch(this[AS]){case AC.QUICK_LOOK:this[Aw]();break;case AC.WEBXR:await this[Ay]();break;case AC.SCENE_VIEWER:this[AQ]();break;default:console.warn("No AR Mode can be activated. This is probably due to missing configuration or device capabilities")}}async [(t=Av,i=AB,s=Ax,r=Ab,n=AS,a=AM,A=AR,o=AD,l=AT,h=AL,AF)](){let e=AC.NONE;if(this.ar){if(null!=this.src)for(let t of this[Ab]){if("webxr"===t&&ti&&!Am&&await this[ae].arRenderer.supportsPresentation()){e=AC.WEBXR;break}if("scene-viewer"===t&&tl&&!AI){e=AC.SCENE_VIEWER;break}if("quick-look"===t&&tc){e=AC.QUICK_LOOK;break}}e===AC.NONE&&null!=this.iosSrc&&tc&&(e=AC.QUICK_LOOK)}if(e!==AC.NONE)this[AB].classList.add("enabled"),this[AB].addEventListener("click",this[AR]);else if(this[AB].classList.contains("enabled")){this[AB].removeEventListener("click",this[AR]),this[AB].classList.remove("enabled");let i=sQ.FAILED;this.setAttribute("ar-status",i),this.dispatchEvent(new CustomEvent("ar-status",{detail:{status:i}}))}this[AS]=e}async [Ay](){console.log("Attempting to present in AR with WebXR..."),await this[Ak]();try{this[AB].removeEventListener("click",this[AR]);let{arRenderer:e}=this[ae];e.placeOnWall="wall"===this.arPlacement,await e.present(this[n8],this.xrEnvironment)}catch(t){console.warn("Error while trying to present in AR with WebXR"),console.error(t),await this[ae].arRenderer.stopPresenting(),Am=!0,console.warn("Falling back to next ar-mode"),await this[AF](),this.activateAR()}finally{this[AF]()}}async [Ak](){this.loaded||(this[AM]=!0,this[n0](),await tB(this,"load"),this[AM]=!1)}[ar](){return super[ar]()||this[AM]}[AQ](){let e=self.location.toString(),t=new URL(e),i=new URL(this.src,e),s=new URLSearchParams(i.search);if(t.hash=Af,s.set("mode","ar_preferred"),s.has("disable_occlusion")||s.set("disable_occlusion","true"),"fixed"===this.arScale&&s.set("resizable","false"),"wall"===this.arPlacement&&s.set("enable_vertical_placement","true"),s.has("sound")){let r=new URL(s.get("sound"),e);s.set("sound",r.toString())}if(s.has("link")){let n=new URL(s.get("link"),e);s.set("link",n.toString())}let a=`intent://arvr.google.com/scene-viewer/1.0?${s.toString()+"&file="+encodeURIComponent(i.toString())}#Intent;scheme=https;package=com.google.ar.core;action=android.intent.action.VIEW;S.browser_fallback_url=${encodeURIComponent(t.toString())};end;`,A=()=>{self.location.hash===Af&&(AI=!0,self.history.back(),console.warn("Error while trying to present in AR with Scene Viewer"),console.warn("Falling back to next ar-mode"),this[AF]())};self.addEventListener("hashchange",A,{once:!0}),this[Ax].setAttribute("href",a),console.log("Attempting to present in AR with Scene Viewer..."),this[Ax].click()}async [Aw](){let e=!this.iosSrc;this[AB].classList.remove("enabled");let t=e?await this.prepareUSDZ():this.iosSrc,i=new URL(t,self.location.toString());if(e){let s=self.location.toString(),r=new URL(s),n=new URL(this.src,r);n.hash&&(i.hash=n.hash)}"fixed"===this.arScale&&(i.hash&&(i.hash+="&"),i.hash+="allowsContentScaling=0");let a=this[Ax];a.setAttribute("rel","ar");let A=document.createElement("img");a.appendChild(A),a.setAttribute("href",i.toString()),e&&a.setAttribute("download","model.usdz"),a.style.display="none",a.isConnected||this.shadowRoot.appendChild(a),console.log("Attempting to present in AR with Quick Look..."),a.click(),a.removeChild(A),e&&URL.revokeObjectURL(t),this[AB].classList.add("enabled")}async prepareUSDZ(){let e=this[at].beginActivity();await this[Ak]();let{model:t,shadow:i}=this[n8];if(null==t)return"";let s=!1;null!=i&&(s=i.visible,i.visible=!1),e(.2);let r=new Ao,n=await r.parse(t),a=new Blob([n],{type:"model/vnd.usdz+zip"}),A=URL.createObjectURL(a);return e(1),null!=i&&(i.visible=s),A}}return Ap([u({type:Boolean,attribute:"ar"})],c.prototype,"ar",void 0),Ap([u({type:String,attribute:"ar-scale"})],c.prototype,"arScale",void 0),Ap([u({type:String,attribute:"ar-placement"})],c.prototype,"arPlacement",void 0),Ap([u({type:String,attribute:"ar-modes"})],c.prototype,"arModes",void 0),Ap([u({type:String,attribute:"ios-src"})],c.prototype,"iosSrc",void 0),Ap([u({type:Boolean,attribute:"xr-environment"})],c.prototype,"xrEnvironment",void 0),c})((e=>{var t,i,s,r,n,a,A,o;class l extends e{constructor(...e){super(...e),this.poster=null,this.reveal=o4.AUTO,this.loading=o8.AUTO,this[t]=!1,this[i]=!1,this[s]=this.shadowRoot.querySelector(".slot.poster"),this[r]=this.shadowRoot.querySelector("#default-poster"),this[n]=this.shadowRoot.querySelector("#default-progress-bar > .bar"),this[a]=this[o9].getAttribute("aria-label"),this[A]=tp(e=>{let t=this[o5].parentNode;requestAnimationFrame(()=>{this[o5].style.transform=`scaleX(${e})`,0===e&&(t.removeChild(this[o5]),t.appendChild(this[o5])),1===e?this[o5].classList.add("hide"):this[o5].classList.remove("hide")})},100),this[o]=e=>{let t=e.detail.totalProgress;1===t&&(this[li].flush(),this.loaded&&(this[o7]||this.reveal===o4.AUTO)&&this[le]()),this[li](t),this.dispatchEvent(new CustomEvent("progress",{detail:{totalProgress:t}}))};let l=self.ModelViewerElement||{},h=l.dracoDecoderLocation||"https://www.gstatic.com/draco/versioned/decoders/1.4.1/";iX.setDRACODecoderLocation(h);let c=l.ktx2TranscoderLocation||"https://www.gstatic.com/basis-universal/versioned/2021-04-15-ba1c3e4/";iX.setKTX2TranscoderLocation(c),l.meshoptDecoderLocation&&iX.setMeshoptDecoderLocation(l.meshoptDecoderLocation)}static set dracoDecoderLocation(e){iX.setDRACODecoderLocation(e)}static get dracoDecoderLocation(){return iX.getDRACODecoderLocation()}static set ktx2TranscoderLocation(e){iX.setKTX2TranscoderLocation(e)}static get ktx2TranscoderLocation(){return iX.getKTX2TranscoderLocation()}static set meshoptDecoderLocation(e){iX.setMeshoptDecoderLocation(e)}static get meshoptDecoderLocation(){return iX.getMeshoptDecoderLocation()}static mapURLs(e){s3.singleton.loader[iz].manager.setURLModifier(e)}dismissPoster(){this.loaded?this[le]():(this[o7]=!0,this[n0]())}showPoster(){let e=this[o6];if(e.classList.contains("show"))return;e.classList.add("show"),this[n3].classList.remove("show");let t=this[o9];t.removeAttribute("tabindex"),t.removeAttribute("aria-hidden");let i=this.modelIsVisible;this[lt]=!1,this[nj](i)}getDimensions(){return an(this[n8].size)}getBoundingBoxCenter(){return an(this[n8].boundingBox.getCenter(new el.Pa4))}connectedCallback(){super.connectedCallback(),this.showPoster(),this[at].addEventListener("progress",this[lr])}disconnectedCallback(){super.disconnectedCallback(),this[at].removeEventListener("progress",this[lr])}async updated(e){super.updated(e),e.has("poster")&&null!=this.poster&&(this[o9].style.backgroundImage=`url(${this.poster})`),e.has("alt")&&this[o9].setAttribute("aria-label",this[n$]),(e.has("reveal")||e.has("loading"))&&this[n0]()}[(t=lt,i=o7,s=o6,r=o9,n=o5,a=ls,A=li,o=lr,ar)](){return!!this.src&&(this[o7]||this.loading===o8.EAGER||this.reveal===o4.AUTO&&this[nY])}[le](){this[o7]=!1;let e=this[o6];if(!e.classList.contains("show"))return;e.classList.remove("show"),this[n3].classList.add("show");let t=this.modelIsVisible;this[lt]=!0,this[nj](t);let i=this.getRootNode();i&&i.activeElement===this&&this[n3].focus();let s=this[o9];s.setAttribute("aria-hidden","true"),s.tabIndex=-1,this.dispatchEvent(new CustomEvent("poster-dismissed"))}[as](){return super[as]()&&this[lt]}}return o3([u({type:String})],l.prototype,"poster",void 0),o3([u({type:String})],l.prototype,"reveal",void 0),o3([u({type:String})],l.prototype,"loading",void 0),l})((e=>{var t;class i extends e{constructor(...e){super(e),this.autoplay=!1,this.animationName=void 0,this.animationCrossfadeDuration=300,this[t]=!0,this[n8].subscribeMixerEvent("loop",e=>{let t=e.action._loopCount;this.dispatchEvent(new CustomEvent("loop",{detail:{count:t}}))}),this[n8].subscribeMixerEvent("finished",()=>{this[ah]=!0,this.dispatchEvent(new CustomEvent("finished"))})}get availableAnimations(){return this.loaded?this[n8].animationNames:[]}get duration(){return this[n8].duration}get paused(){return this[ah]}get currentTime(){return this[n8].animationTime}set currentTime(e){this[n8].animationTime=e,this[n5]()}get timeScale(){return this[n8].animationTimeScale}set timeScale(e){this[n8].animationTimeScale=e}pause(){this[ah]||(this[ah]=!0,this.dispatchEvent(new CustomEvent("pause")))}play(e){this.availableAnimations.length>0&&(this[ah]=!1,this[al](e),this.dispatchEvent(new CustomEvent("play")))}[(t=ah,n9)](){super[n9](),this[ah]=!0,this.autoplay&&this.play()}[n6](e,t){super[n6](e,t),!this[ah]&&(this[as]()||this[ae].isPresenting)&&(this[n8].updateAnimation(t/1e3),this[n5]())}updated(e){super.updated(e),e.has("autoplay")&&this.autoplay&&this.play(),e.has("animationName")&&this[al]()}[al](e=ac){var t;let i=null!==(t=e.repetitions)&&void 0!==t?t:1/0,s=e.pingpong?el.uEv:1===i?el.jAl:el.YKA;this[n8].playAnimation(this.animationName,this.animationCrossfadeDuration/1e3,s,i),this[ah]&&(this[n8].updateAnimation(0),this[n5]())}}return ao([u({type:Boolean})],i.prototype,"autoplay",void 0),ao([u({type:String,attribute:"animation-name"})],i.prototype,"animationName",void 0),ao([u({type:Number,attribute:"animation-crossfade-duration"})],i.prototype,"animationCrossfadeDuration",void 0),i})((e=>{let t=e=>{if(null==e.shadowRoot||e.hasAttribute("data-js-focus-visible"))return()=>{};if(self.applyFocusVisiblePolyfill)self.applyFocusVisiblePolyfill(e.shadowRoot);else{let t=()=>{self.applyFocusVisiblePolyfill(e.shadowRoot)};return self.addEventListener("focus-visible-polyfill-ready",t,{once:!0}),()=>{self.removeEventListener("focus-visible-polyfill-ready",t)}}return()=>{}},i=Symbol("endPolyfillCoordination");return class extends e{constructor(){super(...arguments),this[i]=null}connectedCallback(){super.connectedCallback&&super.connectedCallback(),null==this[i]&&(this[i]=t(this))}disconnectedCallback(){super.disconnectedCallback&&super.disconnectedCallback(),null!=this[i]&&(this[i](),this[i]=null)}}})(aA)))))))));customElements.define("model-viewer",lc)}}]); //# sourceMappingURL=258.53d25aa602c4d686.js.map