sceneview-web 4.8.0 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sceneview-web",
3
- "version": "4.8.0",
3
+ "version": "4.9.0",
4
4
  "description": "SceneView for Web — 3D rendering with Filament.js (WebGL2/WASM)",
5
5
  "main": "sceneview-web.js",
6
6
  "types": "sceneview-web.d.ts",
package/sceneview-web.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("Filament")):"function"==typeof define&&define.amd?define(["Filament"],n):"object"==typeof exports?exports["sceneview-web"]=n(require("Filament")):t["sceneview-web"]=n(t.Filament)}(globalThis,t=>{return n={883(t,n,e){var r,i,o;i=[n,e(580),e(36)],void 0===(o="function"==typeof(r=function(t,n,e){"use strict";var r=Math.imul,i=n.$_$.e,o=e.$_$.a,u=n.$_$.b,_=n.$_$.a,s=e.$_$.f,a=e.$_$.c,c=(e.$_$.b,n.$_$.c),h=e.$_$.s,f=e.$_$.p,l=e.$_$.i,v=n.$_$.d,w=e.$_$.z;function d(t,n){this.l2_1=t,this.m2_1=n}function g(t,n,e,r){t=t===o?new u:t,n=n===o?null:n,e=e===o?null:e,r=r===o?null:r,this.n2_1=t,this.o2_1=n,this.p2_1=e,this.q2_1=r}return l(d,"GeometryData"),l(g,"Vertex",g),f(d).toString=function(){return"GeometryData(vertices="+h(this.l2_1)+", indices="+h(this.m2_1)+")"},f(g).toString=function(){return"Vertex(position="+this.n2_1.toString()+", normal="+w(this.o2_1)+", uvCoordinate="+w(this.p2_1)+", color="+w(this.q2_1)+")"},t.$_$=t.$_$||{},t.$_$.a=function(t,n){t=t===o?i(1):t,n=n===o?i(0):n;var e=new u(.5*t.g2_1,.5*t.h2_1,.5*t.i2_1),c=new u(-e.g2_1,-e.h2_1,e.i2_1),h=new u(n.g2_1+c.g2_1,n.h2_1+c.h2_1,n.i2_1+c.i2_1),f=new u(e.g2_1,-e.h2_1,e.i2_1),l=new u(n.g2_1+f.g2_1,n.h2_1+f.h2_1,n.i2_1+f.i2_1),v=new u(e.g2_1,-e.h2_1,-e.i2_1),w=new u(n.g2_1+v.g2_1,n.h2_1+v.h2_1,n.i2_1+v.i2_1),p=new u(-e.g2_1,-e.h2_1,-e.i2_1),m=new u(n.g2_1+p.g2_1,n.h2_1+p.h2_1,n.i2_1+p.i2_1),$=new u(-e.g2_1,e.h2_1,e.i2_1),b=new u(n.g2_1+$.g2_1,n.h2_1+$.h2_1,n.i2_1+$.i2_1),y=new u(e.g2_1,e.h2_1,e.i2_1),x=new u(n.g2_1+y.g2_1,n.h2_1+y.h2_1,n.i2_1+y.i2_1),S=new u(e.g2_1,e.h2_1,-e.i2_1),A=new u(n.g2_1+S.g2_1,n.h2_1+S.h2_1,n.i2_1+S.i2_1),M=new u(-e.g2_1,e.h2_1,-e.i2_1),E=new u(n.g2_1+M.g2_1,n.h2_1+M.h2_1,n.i2_1+M.i2_1),j=new u(o,1),k=new u(o,-1),C=new u(o,o,-1),z=new u(o,o,1),V=new u(-1),L=new u(1),q=new _(0,0),F=new _(1,0),O=new _(0,1),I=new _(1,1),R=s([new g(h,k,O),new g(l,k,I),new g(w,k,F),new g(m,k,q),new g(E,V,O),new g(b,V,I),new g(h,V,F),new g(m,V,q),new g(b,z,O),new g(x,z,I),new g(l,z,F),new g(h,z,q),new g(A,C,O),new g(E,C,I),new g(m,C,F),new g(w,C,q),new g(x,L,O),new g(A,L,I),new g(w,L,F),new g(l,L,q),new g(E,j,O),new g(A,j,I),new g(x,j,F),new g(b,j,q)]),B=a(),T=0;if(T<6)do{var U=T;T=T+1|0;var N=r(4,U);B.r(3+N|0),B.r(1+N|0),B.r(0+N|0),B.r(3+N|0),B.r(2+N|0),B.r(1+N|0)}while(T<6);return new d(R,B.s1())},t.$_$.b=function(t,n,e,s){t=t===o?1:t,n=n===o?2:n,e=e===o?i(0):e,s=s===o?24:s;var h=a(),f=n/2,l=6.2831855/s,v=0,w=1/s,p=a(),m=a(),$=a(),b=0;if(b<=s)do{var y=b;b=b+1|0;var x=v,S=t*Math.cos(x),A=-f,M=v,E=Math.sin(M),j=new u(S,A,t*E),k=new u(j.g2_1+e.g2_1,j.h2_1+e.h2_1,j.i2_1+e.i2_1);h.r(new g(k,c(new u(k.g2_1-e.g2_1,0,k.i2_1-e.i2_1)),new _(w*y,0))),p.r(new g(k,new u(o,-1),new _(w*y,0)));var C=v,z=t*Math.cos(C),V=v,L=Math.sin(V),q=new u(z,f,t*L),F=new u(q.g2_1+e.g2_1,q.h2_1+e.h2_1,q.i2_1+e.i2_1);$.r(new g(F,c(new u(F.g2_1-e.g2_1,0,F.i2_1-e.i2_1)),new _(w*y,1)));var O=new u(o,1),I=v,R=(Math.cos(I)+1)/2,B=v,T=Math.sin(B);m.r(new g(F,O,new _(R,(T+1)/2))),v+=l}while(y!==s);h.s($);var U=new u(o,-f),N=new u(e.g2_1+U.g2_1,e.h2_1+U.h2_1,e.i2_1+U.i2_1);h.r(new g(N,new u(o,-1),new _(.5,.5))),h.s(p);var D=new u(o,f),P=new u(e.g2_1+D.g2_1,e.h2_1+D.h2_1,e.i2_1+D.i2_1);h.r(new g(P,new u(o,1),new _(.5,.5))),h.s(m);var Y=h.s1(),W=a(),X=0;if(X<s)do{var K=X;X=X+1|0;var G=K+1|0,H=1+(K+s|0)|0,J=2+(K+s|0)|0,Z=r(2,s+1|0),Q=2+(Z+s|0)|0;W.r(K),W.r(J),W.r(G),W.r(K),W.r(H),W.r(J),W.r(Z),W.r(1+(Z+K|0)|0),W.r(2+(Z+K|0)|0),W.r(Q),W.r(2+(Q+K|0)|0),W.r(1+(Q+K|0)|0)}while(X<s);return new d(Y,W.s1())},t.$_$.c=function(t,n,e){t=t===o?v(1):t,n=n===o?i(0):n,e=e===o?new u(o,1):e;var r=new u(t.j2_1,t.k2_1,0),a=new u(r.g2_1/2,r.h2_1/2,r.i2_1/2),c=new u(-a.g2_1,-a.h2_1,a.i2_1),h=new g(new u(n.g2_1+c.g2_1,n.h2_1+c.h2_1,n.i2_1+c.i2_1),e,new _(0,0)),f=new u(-a.g2_1,a.h2_1,-a.i2_1),l=new g(new u(n.g2_1+f.g2_1,n.h2_1+f.h2_1,n.i2_1+f.i2_1),e,new _(0,1)),w=new u(a.g2_1,a.h2_1,-a.i2_1),p=new g(new u(n.g2_1+w.g2_1,n.h2_1+w.h2_1,n.i2_1+w.i2_1),e,new _(1,1)),m=new u(a.g2_1,-a.h2_1,a.i2_1),$=new u(n.g2_1+m.g2_1,n.h2_1+m.h2_1,n.i2_1+m.i2_1);return new d(s([h,l,p,new g($,e,new _(1,0))]),s([3,1,0,3,2,1]))},t.$_$.d=function(t,n,e,r){t=t===o?1:t,n=n===o?i(0):n,e=e===o?24:e,r=r===o?24:r;var s=a(),h=0;if(h<=e)do{var f=h;h=h+1|0;var l=3.1415927*f/e,v=0;if(v<=r)do{var w=v;v=v+1|0;var p=6.2831855*(w===r?0:w)/r,m=Math.sin(l)*Math.cos(p),$=Math.cos(l),b=Math.sin(l),y=Math.sin(p),x=new u(m,$,b*y),S=new u(x.g2_1*t,x.h2_1*t,x.i2_1*t),A=c(S),M=S;S=new u(M.g2_1+n.g2_1,M.h2_1+n.h2_1,M.i2_1+n.i2_1);var E=new _(1-w/r,1-f/e);s.r(new g(S,A,E))}while(w!==r)}while(f!==e);var j=s.s1(),k=a(),C=0,z=0;if(z<e)do{var V=z;z=z+1|0;var L=0;if(L<r)do{var q=L;L=L+1|0;var F=V===(e-1|0),O=q+1|0;0===V||(k.r(C+q|0),k.r(C+O|0),k.r(1+((C+q|0)+r|0)|0)),F||(k.r(C+O|0),k.r(1+((C+O|0)+r|0)|0),k.r(1+((C+q|0)+r|0)|0))}while(L<r);C=C+(r+1|0)|0}while(z<e);return new d(j,k.s1())},t})?r.apply(n,i):r)||(t.exports=o)},36(t,n){var e,r;"object"!=typeof globalThis&&(Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__),void 0===Math.imul&&(Math.imul=function(t,n){return(4294901760&t)*(65535&n)+(65535&t)*(0|n)|0}),void 0===ArrayBuffer.isView&&(ArrayBuffer.isView=function(t){return null!=t&&null!=t.__proto__&&t.__proto__.__proto__===Int8Array.prototype.__proto__}),void 0===(r="function"==typeof(e=function(t){"use strict";var n,e,r,i,o,u,_,s,a,c,h,f,l,v,w,d,g,p,m,$,b,y,x=Math.imul,S=ArrayBuffer.isView;function A(){}function M(){}function E(t,n,e,r,i,o,u){return n=n===c?", ":n,e=e===c?"":e,r=r===c?"":r,i=i===c?-1:i,o=o===c?"...":o,u=u===c?null:u,function(t,n,e,r,i,o,u,_){e=e===c?", ":e,r=r===c?"":r,i=i===c?"":i,o=o===c?-1:o,u=u===c?"...":u,_=_===c?null:_,n.c(r);var s=0,a=0,h=t.length;t:for(;a<h;){var f=t[a];if(a=a+1|0,(s=s+1|0)>1&&n.c(e),!(o<0||s<=o))break t;jn(n,f,_)}return o>=0&&s>o&&n.c(u),n.c(i),n}(t,pn(),n,e,r,i,o,u).toString()}function j(t,n,e,r,i,o,u){return n=n===c?", ":n,e=e===c?"":e,r=r===c?"":r,i=i===c?-1:i,o=o===c?"...":o,u=u===c?null:u,function(t,n,e,r,i,o,u,_){e=e===c?", ":e,r=r===c?"":r,i=i===c?"":i,o=o===c?-1:o,u=u===c?"...":u,_=_===c?null:_,n.c(r);var s=0,a=t.d();t:for(;a.e();){var h=a.f();if((s=s+1|0)>1&&n.c(e),!(o<0||s<=o))break t;jn(n,h,_)}return o>=0&&s>o&&n.c(u),n.c(i),n}(t,pn(),n,e,r,i,o,u).toString()}function k(t,n){return t-n|0}function C(t){return String.fromCharCode(t)}function z(){}function V(){}function L(t,n){this.g_1=t,this.h_1=n}function q(t){return(null==t?null:dt(t))??"null"}function F(){n=this,this.k_1=new O(0,-2147483648),this.l_1=new O(-1,2147483647),this.m_1=8,this.n_1=64}function O(t,e){null==n&&new F,M.call(this),this.o_1=t,this.p_1=e}function I(){return _t(),e}function R(){return _t(),r}function B(){return _t(),i}function T(){return _t(),u}function U(){return _t(),_}function N(t,n){if(_t(),W(t,n))return 0;var e=K(t),r=K(n);return e&&!r?-1:!e&&r?1:K(G(t,n))?-1:1}function D(t){return _t(),t.o_1}function P(t){return _t(),4294967296*t.p_1+function(t){return _t(),t.o_1>=0?t.o_1:4294967296+t.o_1}(t)}function Y(t,n){if(_t(),H(t))return"0";if(K(t)){if(W(t,T())){var e=X(n),r=rt(t,e),i=D(G(J(r,e),t));return Y(r,n)+i.toString(n)}return"-"+Y(Z(t),n)}for(var o=2===n?31:n<=10?9:n<=21?7:n<=35?6:5,u=Q(Math.pow(n,o)),_=t,s="";;){var a=rt(_,u),c=D(G(_,J(a,u))).toString(n);if(H(_=a))return c+s;for(;c.length<o;)c="0"+c;s=c+s}}function W(t,n){return _t(),t.p_1===n.p_1&&t.o_1===n.o_1}function X(t){return _t(),new O(t,t<0?-1:0)}function K(t){return _t(),t.p_1<0}function G(t,n){return _t(),tt(t,Z(n))}function H(t){return _t(),0===t.p_1&&0===t.o_1}function J(t,n){if(_t(),H(t))return I();if(H(n))return I();if(W(t,T()))return nt(n)?T():I();if(W(n,T()))return nt(t)?T():I();if(K(t))return K(n)?J(Z(t),Z(n)):Z(J(Z(t),n));if(K(n))return Z(J(t,Z(n)));if(et(t,U())&&et(n,U()))return Q(P(t)*P(n));var e=t.p_1>>>16|0,r=65535&t.p_1,i=t.o_1>>>16|0,o=65535&t.o_1,u=n.p_1>>>16|0,_=65535&n.p_1,s=n.o_1>>>16|0,a=65535&n.o_1,c=0,h=0,f=0,l=0;return f=f+((l=l+x(o,a)|0)>>>16|0)|0,l&=65535,h=(h=h+((f=f+x(i,a)|0)>>>16|0)|0)+((f=(f&=65535)+x(o,s)|0)>>>16|0)|0,f&=65535,c=(c=(c=c+((h=h+x(r,a)|0)>>>16|0)|0)+((h=(h&=65535)+x(i,s)|0)>>>16|0)|0)+((h=(h&=65535)+x(o,_)|0)>>>16|0)|0,h&=65535,c=c+(((x(e,a)+x(r,s)|0)+x(i,_)|0)+x(o,u)|0)|0,new O(f<<16|l,(c&=65535)<<16|h)}function Z(t){return _t(),tt(function(t){return _t(),new O(~t.o_1,~t.p_1)}(t),new O(1,0))}function Q(t){if(_t(),Ct(t))return I();if(t<=-0x8000000000000000)return T();if(t+1>=0x8000000000000000)return _t(),o;if(t<0)return Z(Q(-t));var n=4294967296;return new O(t%n|0,t/n|0)}function tt(t,n){_t();var e=t.p_1>>>16|0,r=65535&t.p_1,i=t.o_1>>>16|0,o=65535&t.o_1,u=n.p_1>>>16|0,_=65535&n.p_1,s=n.o_1>>>16|0,a=0,c=0,h=0,f=0;return a=(a=a+((c=(c=c+((h=(h=h+((f=f+(o+(65535&n.o_1)|0)|0)>>>16|0)|0)+(i+s|0)|0)>>>16|0)|0)+(r+_|0)|0)>>>16|0)|0)+(e+u|0)|0,new O((h&=65535)<<16|(f&=65535),(a&=65535)<<16|(c&=65535))}function nt(t){return _t(),!(1&~t.o_1)}function et(t,n){return _t(),N(t,n)<0}function rt(t,n){if(_t(),H(n))throw tn("division by zero");if(H(t))return I();if(W(t,T())){if(W(n,R())||W(n,B()))return T();if(W(n,T()))return R();var e=function(t,n){_t();var e=63&n;return 0===e?t:e<32?new O(t.o_1<<e,t.p_1<<e|t.o_1>>>(32-e|0)):new O(0,t.o_1<<(e-32|0))}(rt(function(t,n){_t();var e=63&n;return 0===e?t:e<32?new O(t.o_1>>>e|t.p_1<<(32-e|0),t.p_1>>e):new O(t.p_1>>(e-32|0),t.p_1>=0?0:-1)}(t,1),n),1);return W(e,I())?K(n)?R():B():tt(e,rt(G(t,J(n,e)),n))}if(W(n,T()))return I();if(K(t))return K(n)?rt(Z(t),Z(n)):Z(rt(Z(t),n));if(K(n))return Z(rt(t,Z(n)));for(var r=I(),i=t;ot(i,n);){for(var o=P(i)/P(n),u=Math.max(1,Math.floor(o)),_=Math.ceil(Math.log(u)/Math.LN2),s=_<=48?1:Math.pow(2,_-48),a=Q(u),c=J(a,n);K(c)||it(c,i);)c=J(a=Q(u-=s),n);H(a)&&(a=R()),r=tt(r,a),i=G(i,c)}return r}function it(t,n){return _t(),N(t,n)>0}function ot(t,n){return _t(),N(t,n)>=0}function ut(t){return _t(),null!=t&&(n=t,_t(),kt(n)&&"LongArray"===n.$type$);var n}function _t(){s||(s=!0,e=X(0),r=X(1),i=X(-1),o=new O(-1,2147483647),u=new O(0,-2147483648),_=X(16777216),new dn(Array,"LongArray",ut))}function st(t,n){return at(t)?ct(t,n):t.b(n)}function at(t){return"string"==typeof t}function ct(t,n){return t.charCodeAt(n)}function ht(t){return at(t)?t.length:t.a()}function ft(t){return dt(t)}function lt(t,n){var e;switch(typeof t){case"number":e="number"==typeof n?vt(t,n):n instanceof O?vt(t,P(n)):wt(t,n);break;case"string":case"boolean":case"bigint":e=wt(t,n);break;default:e=function(t,n){return t.j(n)}(t,n)}return e}function vt(t,n){var e;if(t<n)e=-1;else if(t>n)e=1;else if(t===n){var r;if(0!==t)r=0;else{var i=1/t;r=i===1/n?0:i<0?-1:1}e=r}else e=t!=t?n!=n?0:1:-1;return e}function wt(t,n){return t<n?-1:t>n?1:0}function dt(t){return null==t?"null":function(t){return kt(t)||S(t)}(t)?"[...]":"function"!=typeof t.toString?function(t){return Object.prototype.toString.call(t)}(t):t.toString()}function gt(t){return t=t===c?null:t,Object.create(t)}function pt(t,n){null!=Error.captureStackTrace?Error.captureStackTrace(t,n):t.stack=(new Error).stack}function mt(t){return t.prototype}function $t(t,n){var e;if(bt(t)){var r;if(bt(n))r=t;else r=(null==n?null:n.toString())??c;e=r}else e=t??c;return e}function bt(t){return t===c}function yt(t,n,e){xt(t,"message",$t(n,e)),xt(t,"cause",e),xt(t,"name",Object.getPrototypeOf(t).constructor.name)}function xt(t,n,e){Object.defineProperty(t,n,{configurable:!0,writable:!0,value:e})}function St(){throw vn()}function At(t,n,e,r,i,o,u,_){Mt("class",t,n,e,r,i,o,u,_)}function Mt(t,n,e,r,i,o,u,_,s){null!=i&&(n.prototype=Object.create(i.prototype),n.prototype.constructor=n);var h=function(t,n,e,r,i,o){return{kind:t,simpleName:n,associatedObjectKey:r,associatedObjects:i,suspendArity:o,$kClass$:c,defaultConstructor:e}}(t,e,r,_,s,u);n.$metadata$=h;var f=n.prototype;if(null!=o)for(var l=0,v=o.length;l<v;){var w=o[l];l=l+1|0,Object.assign(f,w.prototype),f[w.Symbol]=!0}"interface"===t&&(n.Symbol="#__interface_"+(a===c&&(a=0),a=a+1|0))}function Et(t,n,e,r,i,o,u,_){Mt("object",t,n,e,r,i,o,u,_)}function jt(t,n,e,r){Et(t,"Companion",c,n,e,r,c,c)}function kt(t){return Array.isArray(t)}function Ct(t){return!(t==t)}function zt(){}function Vt(t){return function(t){if(t.v())return[];for(var n=t.u(),e=Array(n),r=t.d(),i=0;r.e();){var o=i;i=o+1|0,e[o]=r.f()}return e}(t)}function Lt(t){return t<0&&function(){throw sn("Index overflow has happened.")}(),t}function qt(){Sn.call(this)}function Ft(t){this.y_1=t,this.w_1=0,this.x_1=-1}function Ot(t,n){this.g1_1=t,Ft.call(this,t),v.i1(n,this.g1_1.u()),this.w_1=n}function It(){qt.call(this),this.b1_1=0}function Rt(){f=this;var t=function(t,n){var e=[];if(Nt.call(n,e),!(t>=0))throw Xt(dt("Negative initial capacity: "+t));return n}(0,gt(mt(Nt)));t.p1_1=!0,this.q1_1=t}function Bt(){return null==f&&new Rt,f}function Tt(){return t=gt(mt(Nt)),Nt.call(t,[]),t;var t}function Ut(t,n){return v.r1(n,t.u()),n}function Nt(t){Bt(),It.call(this),this.o1_1=t,this.p1_1=!1}function Dt(){var t,n=(Gt(t=gt(mt(Pt))),Pt.call(t),t);return pt(n,Dt),n}function Pt(){pt(this,Pt)}function Yt(t){var n=function(t,n){return Ht(t,n),Wt.call(n),n}(t,gt(mt(Wt)));return pt(n,Yt),n}function Wt(){pt(this,Wt)}function Xt(t){var n=function(t,n){return Ht(t,n),Kt.call(n),n}(t,gt(mt(Kt)));return pt(n,Xt),n}function Kt(){pt(this,Kt)}function Gt(t){return Zt(t),Jt.call(t),t}function Ht(t,n){return Qt(t,n),Jt.call(n),n}function Jt(){pt(this,Jt)}function Zt(t){return yt(t),nn.call(t),t}function Qt(t,n){return yt(n,t),nn.call(n),n}function tn(t){var n=Qt(t,gt(mt(nn)));return pt(n,tn),n}function nn(){pt(this,nn)}function en(){var t,n=(Gt(t=gt(mt(on))),on.call(t),t);return pt(n,en),n}function rn(t){var n=function(t,n){return Ht(t,n),on.call(n),n}(t,gt(mt(on)));return pt(n,rn),n}function on(){pt(this,on)}function un(t){var n=function(t,n){return Ht(t,n),_n.call(n),n}(t,gt(mt(_n)));return pt(n,un),n}function _n(){pt(this,_n)}function sn(t){var n=function(t,n){return Ht(t,n),an.call(n),n}(t,gt(mt(an)));return pt(n,sn),n}function an(){pt(this,an)}function cn(){var t,n=(Gt(t=gt(mt(hn))),hn.call(t),t);return pt(n,cn),n}function hn(){pt(this,hn)}function fn(){var t,n=(Gt(t=gt(mt(ln))),ln.call(t),t);return pt(n,fn),n}function ln(){pt(this,ln)}function vn(){var t,n=(Gt(t=gt(mt(wn))),wn.call(t),t);return pt(n,vn),n}function wn(){pt(this,wn)}function dn(t,n,e){gn.call(this),this.w1_1=t,this.x1_1=n,this.y1_1=e}function gn(){}function pn(){return t=gt(mt(mn)),mn.call(t,""),t;var t}function mn(t){this.a2_1=t}function $n(t){var n=C(t).toUpperCase();return n.length>1?t:ct(n,0)}function bn(t){this.c2_1=t}function yn(t,n){return xn(),function(t,n,e){if(e=e!==c&&e,xn(),e){var r=t.length,i=n.length,o=Math.min(r,i);if(0===o)return r-i|0;var u=0;if(u<o)do{var _=u;u=u+1|0;var s=ct(t,_),a=ct(n,_);if(s!==a&&(s=$n(s))!==(a=$n(a))&&(s=ct(C(s).toLowerCase(),0))!==(a=ct(C(a).toLowerCase(),0)))return k(s,a)}while(u<o);return r-i|0}return lt(t,n)}(t,n,!0)}function xn(){l||(l=!0,new bn(yn))}function Sn(){}function An(){this.h1_1=2147483639}function Mn(){}function En(){d=this,this.e2_1=new O(-1478467534,-1720727600)}function jn(t,n,e){var r;null!=e?t.c(e(n)):null==n||("string"==typeof(r=n)||!0===r[A.Symbol])?t.c(n):n instanceof z?t.b2(n.f2_1):t.c(dt(n))}function kn(t,n,e){if(t===n)return!0;if(!(e=e!==c&&e))return!1;var r=$n(t),i=$n(n);return r===i||ct(C(r).toLowerCase(),0)===ct(C(i).toLowerCase(),0)}function Cn(t){return ht(t)-1|0}return Mt("interface",A,"CharSequence",g,p,m,$,b,y),At(M,"Number"),At(z,"Char"),jt(V),At(L,"Enum"),jt(F),At(O,"Long",c,M),Et(zt,"Unit"),At(Sn,"AbstractCollection"),At(qt,"AbstractMutableCollection",c,Sn),At(Ft,"IteratorImpl"),At(Ot,"ListIteratorImpl",c,Ft),At(It,"AbstractMutableList",c,qt),jt(Rt),At(Nt,"ArrayList",Tt,It),At(nn,"Exception",function t(){var n=Zt(gt(mt(nn)));return pt(n,t),n},Error),At(Jt,"RuntimeException",function t(){var n=Gt(gt(mt(Jt)));return pt(n,t),n},nn),At(Pt,"UnsupportedOperationException",Dt,Jt),At(Wt,"IllegalStateException",function t(){var n,e=(Gt(n=gt(mt(Wt))),Wt.call(n),n);return pt(e,t),e},Jt),At(Kt,"IllegalArgumentException",function t(){var n,e=(Gt(n=gt(mt(Kt))),Kt.call(n),n);return pt(e,t),e},Jt),At(on,"NoSuchElementException",en,Jt),At(_n,"IndexOutOfBoundsException",function t(){var n,e=(Gt(n=gt(mt(_n))),_n.call(n),n);return pt(e,t),e},Jt),At(an,"ArithmeticException",function t(){var n,e=(Gt(n=gt(mt(an))),an.call(n),n);return pt(e,t),e},Jt),At(hn,"NoWhenBranchMatchedException",cn,Jt),At(ln,"NullPointerException",fn,Jt),At(wn,"ClassCastException",vn,Jt),At(gn,"KClassImpl"),At(dn,"PrimitiveKClassImpl",c,gn),At(mn,"StringBuilder",pn,c,[A]),At(bn,"sam$kotlin_Comparator$0"),jt(An),Et(Mn,"EmptyIterator"),Et(En,"EmptyList"),mt(L).i=function(t){return lt(this.h_1,t.h_1)},mt(L).j=function(t){return this.i(t instanceof L?t:St())},mt(L).equals=function(t){return this===t},mt(L).toString=function(){return this.g_1},mt(O).q=function(t){return N(this,t)},mt(O).j=function(t){return this.q(t instanceof O?t:St())},mt(O).toString=function(){return Y(this,10)},mt(O).valueOf=function(){return P(this)},mt(zt).toString=function(){return"kotlin.Unit"},mt(qt).s=function(t){this.t();for(var n=!1,e=t.d();e.e();){var r=e.f();this.r(r)&&(n=!0)}return n},mt(qt).toJSON=function(){return this.toArray()},mt(qt).t=function(){},mt(Ft).e=function(){return this.w_1<this.y_1.u()},mt(Ft).f=function(){if(!this.e())throw en();var t=this.w_1;return this.w_1=t+1|0,this.x_1=t,this.y_1.z(this.x_1)},mt(Ft).a1=function(){if(-1===this.x_1)throw Yt(dt("Call next() or previous() before removing element from the iterator."));this.y_1.c1(this.x_1),this.w_1=this.x_1,this.x_1=-1},mt(It).r=function(t){return this.t(),this.j1(this.u(),t),!0},mt(It).k1=function(){this.t(),this.l1(0,this.u())},mt(It).d=function(){return new Ft(this)},mt(It).m1=function(t){return new Ot(this,t)},mt(It).l1=function(t,n){var e=this.m1(t),r=n-t|0,i=0;if(i<r)do{i=i+1|0,e.f(),e.a1()}while(i<r)},mt(Nt).s1=function(){return this.t(),this.p1_1=!0,this.u()>0?this:Bt().q1_1},mt(Nt).u=function(){return this.o1_1.length},mt(Nt).z=function(t){return this.o1_1[Ut(this,t)]},mt(Nt).r=function(t){return this.t(),this.o1_1.push(t),this.b1_1=this.b1_1+1|0,!0},mt(Nt).j1=function(t,n){this.t(),this.o1_1.splice(function(t,n){return v.i1(n,t.u()),n}(this,t),0,n),this.b1_1=this.b1_1+1|0},mt(Nt).s=function(t){if(this.t(),t.v())return!1;for(var n=(_=this,s=t.u(),a=void 0,a=_.u(),_.o1_1.length=_.u()+s|0,a),e=0,r=t.d();r.e();){var i=r.f(),o=e;e=o+1|0;var u=Lt(o);this.o1_1[n+u|0]=i}var _,s,a;return this.b1_1=this.b1_1+1|0,!0},mt(Nt).c1=function(t){return this.t(),Ut(this,t),this.b1_1=this.b1_1+1|0,t===(this.u()-1|0)?this.o1_1.pop():this.o1_1.splice(t,1)[0]},mt(Nt).l1=function(t,n){this.t(),this.b1_1=this.b1_1+1|0,this.o1_1.splice(t,n-t|0)},mt(Nt).k1=function(){this.t(),this.o1_1=[],this.b1_1=this.b1_1+1|0},mt(Nt).toString=function(){return E(this.o1_1,", ","[","]",c,c,ft)},mt(Nt).t1=function(){return[].slice.call(this.o1_1)},mt(Nt).toArray=function(){return this.t1()},mt(Nt).t=function(){if(this.p1_1)throw Dt()},mt(dn).z1=function(){return this.x1_1},mt(gn).toString=function(){return"class "+this.z1()},mt(mn).a=function(){return this.a2_1.length},mt(mn).b=function(t){var n=this.a2_1;if(!(0<=t&&t<=(ht(n)-1|0)))throw un("index: "+t+", length: "+this.a()+"}");return st(n,t)},mt(mn).b2=function(t){return this.a2_1=this.a2_1+C(t),this},mt(mn).c=function(t){return this.a2_1=this.a2_1+q(t),this},mt(mn).toString=function(){return this.a2_1},mt(bn).d2=function(t,n){return this.c2_1(t,n)},mt(bn).compare=function(t,n){return this.d2(t,n)},mt(Sn).v=function(){return 0===this.u()},mt(Sn).toString=function(){return j(this,", ","[","]",c,c,(t=this,function(n){return n===t?"(this Collection)":q(n)}));var t},mt(Sn).toArray=function(){return Vt(this)},mt(An).r1=function(t,n){if(t<0||t>=n)throw un("index: "+t+", size: "+n)},mt(An).i1=function(t,n){if(t<0||t>n)throw un("index: "+t+", size: "+n)},mt(Mn).e=function(){return!1},mt(Mn).f=function(){throw en()},mt(En).toString=function(){return"[]"},mt(En).u=function(){return 0},mt(En).v=function(){return!0},mt(En).z=function(t){throw un("Empty list doesn't contain element at index "+t+".")},mt(En).d=function(){return w},new V,h=new zt,v=new An,w=new Mn,t.$_$=t.$_$||{},t.$_$.a=c,t.$_$.b=h,t.$_$.c=Tt,t.$_$.d=function(t){return t},t.$_$.e=function(t){return t},t.$_$.f=function(t){return t.length>0?new Nt(t):(null==d&&new En,d)},t.$_$.g=ct,t.$_$.h=ht,t.$_$.i=At,t.$_$.j=jt,t.$_$.k=Et,t.$_$.l=function(t){return"number"==typeof t||t instanceof O},t.$_$.m=function(t,n){var e=new Error;return e.message=$t(t,n),e.cause=n,e.name="Throwable",e},t.$_$.n=function(t){return Number(t)},t.$_$.o=gt,t.$_$.p=mt,t.$_$.q=function(t){return t<<24>>24},t.$_$.r=function(t){return t<<16>>16},t.$_$.s=dt,t.$_$.t=function(t,n,e){e=e===c?t:e;var r=function(t,n,e,r){var i;if(e=e===c?Cn(t):e,(r=r!==c&&r)||"string"!=typeof t)i=function(t,n,e,r){if(e=e===c?Cn(t):e,!(r=r!==c&&r)&&1===n.length&&"string"==typeof t){var i=C(function(t){var n;switch(t.length){case 0:throw rn("Array is empty.");case 1:n=t[0];break;default:throw Xt("Array has more than one element.")}return n}(n));return t.lastIndexOf(i,e)}var o=function(t,n){return t>n?n:t}(e,Cn(t));if(0<=o)do{var u=o;o=o+-1|0;var _,s=st(t,u);t:{for(var a=0,h=n.length;a<h;){var f=n[a];if(a=a+1|0,kn(f,s,r)){_=!0;break t}}_=!1}if(_)return u}while(0<=o);return-1}(t,(u=[n],_=new Uint16Array(u),_.$type$="CharArray",_),e,r);else{var o=C(n);i=t.lastIndexOf(o,e)}var u,_;return i}(t,n);return-1===r?e:function(t,n,e){return xn(),t.substring(n,e)}(t,0,r)},t.$_$.u=L,t.$_$.v=St,t.$_$.w=function(t){var n;return null==t?function(){throw fn()}():n=t,n},t.$_$.x=function(t){return!function(t){return t===1/0||t===-1/0}(t)&&!Ct(t)},t.$_$.y=function(){throw cn()},t.$_$.z=q,t})?e.apply(n,[n]):e)||(t.exports=r)},580(t,n,e){var r,i,o;i=[n,e(36)],void 0===(o="function"==typeof(r=function(t,n){"use strict";var e=n.$_$.p,r=n.$_$.o,i=n.$_$.a,o=n.$_$.i;function u(t,n,e){t=t===i?0:t,n=n===i?0:n,e=e===i?0:e,this.g2_1=t,this.h2_1=n,this.i2_1=e}function _(t,n){t=t===i?0:t,n=n===i?0:n,this.j2_1=t,this.k2_1=n}return o(u,"Float3",u),o(_,"Float2",_),e(u).toString=function(){return"Float3(x="+this.g2_1+", y="+this.h2_1+", z="+this.i2_1+")"},e(_).toString=function(){return"Float2(x="+this.j2_1+", y="+this.k2_1+")"},t.$_$=t.$_$||{},t.$_$.a=_,t.$_$.b=u,t.$_$.c=function(t){var n=t.g2_1*t.g2_1+t.h2_1*t.h2_1+t.i2_1*t.i2_1,e=1/Math.sqrt(n);return new u(t.g2_1*e,t.h2_1*e,t.i2_1*e)},t.$_$.d=function(t){return function(t,n){return _.call(n,t,t),n}(t,r(e(_)))},t.$_$.e=function(t){return function(t,n){return u.call(n,t,t,t),n}(t,r(e(u)))},t})?r.apply(n,i):r)||(t.exports=o)},607(t,n,e){var r,i,o;i=[n,e(650),e(36),e(580),e(883)],void 0===(o="function"==typeof(r=function(t,n,e,r,i){"use strict";var o,u,_,s,a,c=Math.imul,h=n.Entity,f=n.init,l=n.LightManager,v=e.$_$.p,w=e.$_$.i,d=e.$_$.s,g=e.$_$.x,p=e.$_$.k,m=e.$_$.b,$=r.$_$.b,b=i.$_$.a,y=i.$_$.d,x=i.$_$.b,S=r.$_$.a,A=i.$_$.c,M=e.$_$.y,E=e.$_$.h,j=e.$_$.g,k=e.$_$.e,C=e.$_$.q,z=e.$_$.r,V=e.$_$.a,L=e.$_$.m,q=e.$_$.v,F=e.$_$.l,O=e.$_$.n,I=e.$_$.j,R=e.$_$.c,B=e.$_$.d,T=e.$_$.t,U=e.$_$.w,N=e.$_$.u;function D(){this.r2_1=!1}function P(t,n){this.v2_1=t,this.w2_1=n}function Y(){this.x2_1=.001}function W(t){this.c3_1=t,this.d3_1=null}function X(){}function K(){var t,n={version:"4.8.0"};n.createViewer=((t=function(t){return G(t,!0,!0)}).callableName="jsCreateViewer",t),n.createViewerAutoRotate=function(){var t=function(t,n){return G(t,n,!0)};return t.callableName="jsCreateViewerAutoRotate",t}(),n.createViewerFull=function(){var t=function(t,n,e,r,i,o,u,_){return G(t,n,e,r,i,o,u,_)};return t.callableName="jsCreateViewerFull",t}(),n.modelViewer=function(){var t=function(t,n){return e=n,G(t,!0,!0).then((r=e,function(t){return t.loadModel(r),t}));var e,r};return t.callableName="jsModelViewer",t}(),n.modelViewerAutoRotate=function(){var t=function(t,n,e){return r=n,G(t,e,!0).then((i=r,function(t){return t.loadModel(i),t}));var r,i};return t.callableName="jsModelViewerAutoRotate",t}(),window.sceneview=n,console.log("SceneView Web v4.8.0 loaded")}function G(t,n,e,r,i,o,u,s){r=r===V?0:r,i=i===V?1.5:i,o=o===V?5:o,u=u===V?45:u,s=s===V?5e4:s;var a=document.getElementById(t),c=a instanceof HTMLCanvasElement?a:null;if(null==c)return Promise.reject(L("Canvas element '"+t+"' not found"));var h,f,l,v,w,d,g,p,$=c;return 0!==$.width&&0!==$.height||($.width=$.clientWidth,$.height=$.clientHeight),new Promise((h=$,f=n,l=e,v=r,w=i,d=o,g=u,p=s,function(t,n){try{var e=_,r=function(t,n,e,r,i,o,u){return function(_){return _.u5(function(t,n,e,r){return function(i){return i.s4(t,n,e),i.t4(0,0,0),i.u4(r),m}}(e,r,i,o)),_.v5(function(t){return function(n){return n.g5(),n.h5(t),n.i5(.6,-1,-.8),m}}(u)),_.w5(t),_.x5(n),m}}(f,l,v,w,d,g,p);e.y6(h,V,r,function(t,n){return function(e){e.s6(),window.addEventListener("resize",function(t){return function(n){return t.width=t.clientWidth,t.height=t.clientHeight,m}}(n));var r=new ht;return r.v6(e),t(r),m}}(t,h))}catch(t){if(!(t instanceof Error))throw t;n(t)}return m}))}function H(t){var n;t.z6_1.addEventListener("mousedown",(n=t,function(t){var e=t instanceof MouseEvent?t:q(),r=e.button;return 0===r?n.u7_1=!0:2===r&&(n.v7_1=!0),n.w7_1=e.clientX,n.x7_1=e.clientY,e.preventDefault(),m})),t.z6_1.addEventListener("mousemove",function(t){return function(n){var e=n instanceof MouseEvent?n:q(),r=e.clientX-t.w7_1,i=e.clientY-t.x7_1;return t.w7_1=e.clientX,t.x7_1=e.clientY,t.u7_1?t.q7_1?(t.s7_1=-r*t.l7_1,t.t7_1=-i*t.l7_1):(t.b7_1=t.b7_1-r*t.l7_1,t.c7_1=t.c7_1-i*t.l7_1):t.v7_1&&(t.e7_1=t.e7_1+r*t.n7_1*t.d7_1,t.f7_1=t.f7_1-i*t.n7_1*t.d7_1),m}}(t)),t.z6_1.addEventListener("mouseup",function(t){return function(n){return t.u7_1=!1,t.v7_1=!1,m}}(t)),t.z6_1.addEventListener("mouseleave",function(t){return function(n){return t.u7_1=!1,t.v7_1=!1,m}}(t)),t.z6_1.addEventListener("wheel",function(t){return function(n){var e=n instanceof WheelEvent?n:q(),r=e.deltaY>0?1:-1;t.d7_1=t.d7_1*(1+r*t.m7_1);var i=t,o=t.h7_1,u=t.i7_1,_=t.d7_1,s=Math.min(u,_);return i.d7_1=Math.max(o,s),e.preventDefault(),m}}(t),{passive:!1}),t.z6_1.addEventListener("contextmenu",J),t.z6_1.addEventListener("touchstart",function(t){return function(n){var e=n;if(1==e.touches.length){t.u7_1=!0;var r=t,i=e.touches[0].clientX;r.w7_1=O(F(i)?i:q());var o=t,u=e.touches[0].clientY;o.x7_1=O(F(u)?u:q())}return n.preventDefault(),m}}(t),{passive:!1}),t.z6_1.addEventListener("touchmove",function(t){return function(n){var e=n;if(t.u7_1&&1==e.touches.length){var r=e.touches[0].clientX,i=O(F(r)?r:q())-t.w7_1,o=e.touches[0].clientY,u=O(F(o)?o:q())-t.x7_1,_=t,s=e.touches[0].clientX;_.w7_1=O(F(s)?s:q());var a=t,c=e.touches[0].clientY;a.x7_1=O(F(c)?c:q()),t.q7_1?(t.s7_1=-i*t.l7_1,t.t7_1=-u*t.l7_1):(t.b7_1=t.b7_1-i*t.l7_1,t.c7_1=t.c7_1-u*t.l7_1)}else if(2==e.touches.length){var h=e.touches[0].clientX,f=O(F(h)?h:q()),l=e.touches[1].clientX,v=f-O(F(l)?l:q()),w=e.touches[0].clientY,d=O(F(w)?w:q()),g=e.touches[1].clientY,p=d-O(F(g)?g:q()),$=v*v+p*p,b=Math.sqrt($);if(t.y7_1>0){var y=t.y7_1-b;t.d7_1=t.d7_1*(1+.005*y);var x=t,S=t.h7_1,A=t.i7_1,M=t.d7_1,E=Math.min(A,M);x.d7_1=Math.max(S,E)}t.y7_1=b}return n.preventDefault(),m}}(t),{passive:!1}),t.z6_1.addEventListener("touchend",function(t){return function(n){return t.u7_1=!1,t.y7_1=-1,m}}(t))}function J(t){return t.preventDefault(),m}function Z(t,n){this.z6_1=t,this.a7_1=n,this.b7_1=.7853981633974483,this.c7_1=1.2217304763960306,this.d7_1=5,this.e7_1=0,this.f7_1=0,this.g7_1=0,this.h7_1=.5,this.i7_1=50,this.j7_1=.1,this.k7_1=3.041592653589793,this.l7_1=.005,this.m7_1=.1,this.n7_1=.003,this.o7_1=!1,this.p7_1=.008726646259971648,this.q7_1=!0,this.r7_1=.95,this.s7_1=0,this.t7_1=0,this.u7_1=!1,this.v7_1=!1,this.w7_1=0,this.x7_1=0,H(this),this.y7_1=-1}function Q(t){return m}function tt(t,n,e){e=e===V?0:e,this.c8_1=t,this.d8_1=n,this.e8_1=e}function nt(){this.w6_1="https://sceneview.github.io/assets/environments/neutral_ibl.ktx",this.x6_1="https://sceneview.github.io/assets/environments/neutral_skybox.ktx"}function et(t,n,e){var r=[],i=0;if(i<16)do{var o=i;i=i+1|0;var u=n[o];r.push(O(F(u)?u:q()))}while(i<16);var _=r[12];r[12]=O(F(_)?_:q())+e[0];var s=r[13];r[13]=O(F(s)?s:q())+e[1];var a=r[14];return r[14]=O(F(a)?a:q())+e[2],r}function rt(t,n){if(!t.h6_1)return m;if(t.r6_1){var e=t.y5_1.clientWidth,r=t.y5_1.clientHeight;e>0&&r>0&&(e!==t.y5_1.width||r!==t.y5_1.height)&&t.g8(e,r)}!function(t){var n=t.o6_1,e=!t.j6_1.v();if(!t.p6_1.s2(n,e))return m;for(var r=t.j6_1,i=R(),u=r.d();u.e();){var _,s=u.f();try{var a=s.c8_1.getBoundingBox(),c=a.min,h=a.max,f=c[0],l=O(F(f)?f:q()),v=c[1],w=O(F(v)?v:q()),d=c[2],g=new Float64Array([l,w,O(F(d)?d:q())]),p=h[0],$=O(F(p)?p:q()),b=h[1],y=O(F(b)?b:q()),x=h[2];_=new P(g,new Float64Array([$,y,O(F(x)?x:q())]))}catch(t){if(!(t instanceof Error))throw t;var S=t;console.warn("SceneView: skipping a model in auto-center (bounds not ready)",S),_=null}var A=_;null==A||i.r(A)}var M=i,E=o.b3(o.y2(M));if(null==E)return m;for(var j=E,k=t.z5_1.getTransformManager(),C=t.j6_1.d();C.e();){var z=C.f();try{var V=z.c8_1.getRoot();k.hasComponent(V)||k.create(V);var L=k.getInstance(V),I=k.getTransform(L);k.setTransform(L,et(0,I,j))}catch(t){if(!(t instanceof Error))throw t;var B=t;console.error("SceneView: auto-center failed for a model",B)}}t.p6_1.t2(),console.log("SceneView: auto-centered content (offset "+j[0]+", "+j[1]+", "+j[2]+")")}(t);var i=t.q6_1;null==i||i.z7();var u=t.i6_1>0?(n-t.i6_1)/1e3:0;t.i6_1=n;for(var _=t.j6_1.d();_.e();){var s=_.f(),a=s.d8_1;if(null==a);else if(a.getAnimationCount()>0){s.e8_1=s.e8_1+u;var c=a.getAnimationDuration(0);c>0&&(s.e8_1=s.e8_1%c),a.applyAnimation(0),a.updateBoneMatrices()}}t.z5_1.execute(),t.a6_1.beginFrame(t.e6_1)&&(t.a6_1.renderView(t.c6_1),t.a6_1.endFrame());var h,f,l=window;t.g6_1=l.requestAnimationFrame((h=t,(f=function(t){return rt(h,t),m}).callableName="renderLoop",f))}function it(t){return t.arrayBuffer()}function ot(t,n,e,r,i){return function(o){var u=t.createAsset(o);if(null!=u){var _,s=u.getEntities();n.b6_1.addEntities(s);try{_=u.getInstance().getAnimator()}catch(t){if(!(t instanceof Error))throw t;_=null}var a=new tt(u,_);n.j6_1.r(a),n.p6_1.u2(),u.loadResources(function(t,n,e,r){return function(){return t.releaseSourceData(),console.log("SceneView: Model loaded from "+n+" ("+e.length+" entities)"),null==r||r(t),m}}(u,r,s,i),null,e,null)}else console.error("SceneView: AssetLoader failed to parse model from "+r);return m}}function ut(t){return t.arrayBuffer()}function _t(t){return t.arrayBuffer()}function st(t,n,e,r,i,o,u,_){var s;this.y5_1=t,this.z5_1=n,this.a6_1=e,this.b6_1=r,this.c6_1=i,this.d6_1=o,this.e6_1=u,this.f6_1=_,this.g6_1=null,this.h6_1=!1,this.i6_1=0,this.j6_1=R(),this.k6_1=null,this.l6_1=R(),this.m6_1=new W((s=this,function(t){return s.z5_1.destroyIndirectLight(t),m})),this.n6_1=new W(function(t){return function(n){return t.z5_1.destroySkybox(n),m}}(this)),this.o6_1=!0,this.p6_1=new D,this.q6_1=null,this.r6_1=!0}function at(t){this.j5_1=t,this.k5_1=null,this.l5_1=null,this.m5_1=R(),this.n5_1=R(),this.o5_1=null,this.p5_1=null,this.q5_1=!0,this.r5_1=!1,this.s5_1=!0,this.t5_1=!0}function ct(t,n){return function(e,r){try{t.j8(n,function(t,n){return function(e){return t(n),m}}(e,n))}catch(t){if(!(t instanceof Error))throw t;r(t)}return m}}function ht(){this.t6_1=null,this.u6_1=!1}function ft(t,n,e){var r=[];return r.push(t,n,e),r}function lt(t,n,e,r){var i=[];return i.push(t,n,e,r),i}function vt(){this.b4_1=0,this.c4_1=1.5,this.d4_1=5,this.e4_1=0,this.f4_1=0,this.g4_1=0,this.h4_1=0,this.i4_1=1,this.j4_1=0,this.k4_1=45,this.l4_1=.1,this.m4_1=1e3,this.n4_1=16,this.o4_1=.008,this.p4_1=100,this.q4_1=1.1,this.r4_1=!0}function wt(){this.v4_1=gt(),this.w4_1=1e5,this.x4_1=1,this.y4_1=1,this.z4_1=1,this.a5_1=0,this.b5_1=-1,this.c5_1=-.5,this.d5_1=0,this.e5_1=3,this.f5_1=0}function dt(t,n){N.call(this,t,n)}function gt(){return function(){if(a)return m;a=!0,s=new dt("DIRECTIONAL",0),new dt("POINT",1),new dt("SPOT",2)}(),s}return w(D,"AutoCenterGate",D),w(P,"Aabb"),p(Y,"ContentCentering"),w(W,"EnvironmentResourceTracker"),p(X,"GeometryGLBBuilder"),w(Z,"OrbitCameraController"),w(tt,"LoadedModel"),I(nt),w(st,"SceneView"),w(at,"SceneViewBuilder"),w(ht,"SceneViewJS",ht),w(vt,"CameraConfig",vt),w(wt,"LightConfig",wt),w(dt,"LightType",V,N),v(D).s2=function(t,n){return t&&n&&!this.r2_1},v(D).t2=function(){this.r2_1=!0},v(D).u2=function(){this.r2_1=!1},v(P).toString=function(){return"Aabb(min="+d(this.v2_1)+", max="+d(this.w2_1)+")"},v(Y).y2=function(t){if(t.v())return null;for(var n=17976931348623157e292,e=17976931348623157e292,r=17976931348623157e292,i=-17976931348623157e292,o=-17976931348623157e292,u=-17976931348623157e292,_=t.d();_.e();){var s=_.f();s.v2_1[0]<n&&(n=s.v2_1[0]),s.v2_1[1]<e&&(e=s.v2_1[1]),s.v2_1[2]<r&&(r=s.v2_1[2]),s.w2_1[0]>i&&(i=s.w2_1[0]),s.w2_1[1]>o&&(o=s.w2_1[1]),s.w2_1[2]>u&&(u=s.w2_1[2])}return new P(new Float64Array([n,e,r]),new Float64Array([i,o,u]))},v(Y).z2=function(t){return new Float64Array([(t.v2_1[0]+t.w2_1[0])/2,(t.v2_1[1]+t.w2_1[1])/2,(t.v2_1[2]+t.w2_1[2])/2])},v(Y).a3=function(t){var n=t.w2_1[0]-t.v2_1[0],e=t.w2_1[1]-t.v2_1[1],r=t.w2_1[2]-t.v2_1[2];return!!(g(n)&&g(e)&&g(r))&&Math.max(n,e,r)>.001},v(Y).b3=function(t){if(null==t||!this.a3(t))return null;var n=this.z2(t);return new Float64Array([0-n[0],0-n[1],0-n[2]])},v(W).e3=function(t){var n=this.d3_1;null==n||this.c3_1(n),this.d3_1=t},v(W).f3=function(){var t=this.d3_1;null==t||this.c3_1(t),this.d3_1=null},v(X).a4=function(t){var n=function(t,n){var e;switch(n.g3_1.h_1){case 0:e=b(new $(n.h3_1,n.i3_1,n.j3_1));break;case 1:e=y(n.k3_1);break;case 2:e=x(n.k3_1,n.l3_1);break;case 3:e=A(new S(n.h3_1,n.i3_1));break;default:M()}return e}(0,t),e=n.l2_1,r=n.m2_1,i=e.u(),o=r.u(),u=new Float32Array(c(i,3)),_=new Float32Array(c(i,3)),s=34028235e31,a=34028235e31,h=34028235e31,f=-34028235e31,l=-34028235e31,v=-34028235e31,w=0,d=e.u()-1|0;if(w<=d)do{var g=w;w=w+1|0;var p=e.z(g),m=p.n2_1.g2_1,V=p.n2_1.h2_1,L=p.n2_1.i2_1;u[c(g,3)]=m,u[c(g,3)+1|0]=V,u[c(g,3)+2|0]=L;var q=p.o2_1??new $(0,1,0);_[c(g,3)]=q.g2_1,_[c(g,3)+1|0]=q.h2_1,_[c(g,3)+2|0]=q.i2_1,m<s&&(s=m),V<a&&(a=V),L<h&&(h=L),m>f&&(f=m),V>l&&(l=V),L>v&&(v=L)}while(w<=d);var F=new Uint16Array(o),O=0,I=r.u()-1|0;if(O<=I)do{var R=O;O=O+1|0,F[R]=z(r.z(R))}while(O<=I);return function(t,n,e,r,i,o,u,_,s){var a=c(c(o,3),4),h=c(c(o,3),4),f=c(u,2),l=n.g3_1.g_1.toLowerCase(),v={mesh:0};if(v.name=l,0===n.r3_1&&0===n.s3_1&&0===n.t3_1||(v.translation=[],v.translation.push(n.r3_1,n.s3_1,n.t3_1)),1===n.x3_1&&1===n.y3_1&&1===n.z3_1||(v.scale=[],v.scale.push(n.x3_1,n.y3_1,n.z3_1)),0!==n.u3_1||0!==n.v3_1||0!==n.w3_1){var w=3.141592653589793*n.u3_1/180,d=3.141592653589793*n.v3_1/180,g=3.141592653589793*n.w3_1/180,p=w/2,m=Math.cos(p),$=w/2,b=Math.sin($),y=d/2,x=Math.cos(y),S=d/2,A=Math.sin(S),M=g/2,z=Math.cos(M),V=g/2,L=Math.sin(V),q=b*x*z-m*A*L,F=m*A*z+b*x*L,O=m*x*L-b*A*z,I=m*x*z+b*A*L;v.rotation=[],v.rotation.push(q,F,O,I)}var R={asset:{version:"2.0",generator:"SceneView-Web"},scene:0,scenes:[{nodes:[0]}],nodes:[]};R.nodes.push(v),R.meshes=[{primitives:[{attributes:{POSITION:0,NORMAL:1},indices:2,material:0,mode:4}]}];var B={};B.name=l+"_mat",B.pbrMetallicRoughness={},B.pbrMetallicRoughness.baseColorFactor=[],B.pbrMetallicRoughness.baseColorFactor.push(n.m3_1,n.n3_1,n.o3_1,n.p3_1),B.pbrMetallicRoughness.metallicFactor=.1,B.pbrMetallicRoughness.roughnessFactor=.6,B.doubleSided=n.q3_1&&n.p3_1<1,n.q3_1&&(B.extensions={},B.extensions.KHR_materials_unlit={}),R.materials=[],R.materials.push(B),n.q3_1&&(R.extensionsUsed=[],R.extensionsUsed.push("KHR_materials_unlit"));var T={bufferView:0,componentType:5126};T.count=o,T.type="VEC3",T.min=[],T.min.push(_[0],_[1],_[2]),T.max=[],T.max.push(s[0],s[1],s[2]);var U={bufferView:1,componentType:5126};U.count=o,U.type="VEC3";var N={bufferView:2,componentType:5123};N.count=u,N.type="SCALAR",R.accessors=[],R.accessors.push(T,U,N);var D={buffer:0,byteOffset:0};D.byteLength=a,D.target=34962;var P={buffer:0};P.byteOffset=a,P.byteLength=h,P.target=34962;var Y={buffer:0};Y.byteOffset=a+h|0,Y.byteLength=f,Y.target=34963,R.bufferViews=[],R.bufferViews.push(D,P,Y);var W=(a+h|0)+f|0,X=(4-(W%4|0)|0)%4|0,K=W+X|0;R.buffers=[];var G={};G.byteLength=W,R.buffers.push(G);for(var H=JSON.stringify(R);H.length%4|0;)H+=" ";var J=H.length,Z=(8+(20+J|0)|0)+K|0,Q=new ArrayBuffer(Z),tt=new DataView(Q),nt=0;tt.setUint32(nt,1179937895,!0),nt=nt+4|0,tt.setUint32(nt,2,!0),nt=nt+4|0,tt.setUint32(nt,Z,!0),nt=nt+4|0,tt.setUint32(nt,J,!0),nt=nt+4|0,tt.setUint32(nt,1313821514,!0),nt=nt+4|0;var et=0,rt=E(H)-1|0;if(et<=rt)do{var it=et;et=et+1|0;var ot=nt;nt=ot+1|0;var ut=j(H,it),_t=k(ut);tt.setUint8(ot,C(_t))}while(et<=rt);tt.setUint32(nt,K,!0),nt=nt+4|0,tt.setUint32(nt,5130562,!0),nt=nt+4|0;var st=new Uint8Array(Q),at=new Uint8Array(e.buffer),ct=0;if(ct<a)do{var ht=ct;ct=ct+1|0,st[nt+ht|0]=at[ht]}while(ct<a);nt=nt+a|0;var ft=new Uint8Array(r.buffer),lt=0;if(lt<h)do{var vt=lt;lt=lt+1|0,st[nt+vt|0]=ft[vt]}while(lt<h);nt=nt+h|0;var wt=new Uint8Array(i.buffer),dt=0;if(dt<f)do{var gt=dt;dt=dt+1|0,st[nt+gt|0]=wt[gt]}while(dt<f);nt=nt+f|0;var pt=0;if(pt<X)do{pt=pt+1|0;var mt=nt;nt=mt+1|0,tt.setUint8(mt,0)}while(pt<X);return Q}(0,t,u,_,F,i,o,new Float32Array([s,a,h]),new Float32Array([f,l,v]))},v(Z).t4=function(t,n,e){this.e7_1=t,this.f7_1=n,this.g7_1=e},v(Z).z7=function(){this.o7_1&&!this.u7_1&&(this.b7_1=this.b7_1+this.p7_1),this.q7_1&&(this.b7_1=this.b7_1+this.s7_1,this.c7_1=this.c7_1+this.t7_1,this.s7_1=this.s7_1*this.r7_1,this.t7_1=this.t7_1*this.r7_1);var t=this.j7_1,n=this.k7_1,e=this.c7_1,r=Math.min(n,e);this.c7_1=Math.max(t,r);var i=this.h7_1,o=this.i7_1,u=this.d7_1,_=Math.min(o,u);this.d7_1=Math.max(i,_);var s=this.e7_1,a=this.d7_1,c=this.c7_1,h=a*Math.sin(c),f=this.b7_1,l=s+h*Math.sin(f),v=this.f7_1,w=this.d7_1,d=this.c7_1,g=v+w*Math.cos(d),p=this.g7_1,m=this.d7_1,$=this.c7_1,b=m*Math.sin($),y=this.b7_1,x=p+b*Math.cos(y);this.a7_1.lookAt(ft(l,g,x),ft(this.e7_1,this.f7_1,this.g7_1),ft(0,1,0))},v(Z).a8=function(){},v(nt).f8=function(t,n,e,r){var i,o,u;f(n,(i=t,o=e,u=r,function(){try{var t=Filament.Engine.create(i),n=t.createRenderer(),e=t.createScene(),r=t.createSwapChain(),_=t.createView(),s=Filament.EntityManager.get().create(),a=s instanceof h?s:q(),c=t.createCamera(a);_.setCamera(c),_.setScene(e);var f=i.width,l=i.height;_.setViewport(lt(0,0,f,l));var v=l>0?f/l:1;c.setProjectionFov(45,v,.1,1e3),c.lookAt(ft(0,1.5,5),ft(0,0,0),ft(0,1,0)),c.setExposureDirect(1.1),n.setClearOptions({clearColor:[.05,.05,.07,1],clear:!0}),_.setAmbientOcclusionOptions({enabled:!0,radius:.3,bias:5e-4,intensity:1,quality:1}),_.setBloomOptions({enabled:!0,strength:.1,threshold:!0,levels:4}),_.setTemporalAntiAliasingOptions({enabled:!0});var w=new st(i,t,n,e,_,c,r,a),d=new at(w);o(d),d.b8(),u(w)}catch(t){if(!(t instanceof Error))throw t;var g=t;console.error("SceneView: Failed to initialize Filament engine",g)}return m}))},v(nt).y6=function(t,n,e,r,i){var o;return n=n===V?[]:n,e=e===V?Q:e,i===V?(this.f8(t,n,e,r),o=m):o=i.f8.call(this,t,n,e,r),o},v(st).h8=function(t,n,e,r,i){var o=new Z(this.y5_1,this.d6_1);o.d7_1=t,o.t4(n,e,r),o.o7_1=i;var u=o;return this.q6_1=u,u},v(st).g8=function(t,n){if(t<=0||n<=0)return m;this.y5_1.width=t,this.y5_1.height=n,this.c6_1.setViewport(lt(0,0,t,n)),this.d6_1.setProjectionFov(45,t/n,.1,1e3)},v(st).s6=function(){if(this.h6_1)return m;this.h6_1=!0,this.i6_1=0,rt(this,0)},v(st).i8=function(){this.h6_1=!1;var t=this.g6_1;null==t||window.cancelAnimationFrame(t),this.g6_1=null},v(st).j8=function(t,n){var e,r=this.k6_1;if(null==r){var i=this.z5_1.createAssetLoader();this.k6_1=i,e=i}else e=r;var o,u=e,_=T(t,B(47))+"/",s=window.fetch(t).then(it),a=ot(u,this,_,t,n);s.then(a).catch((o=t,function(t){return console.error("SceneView: Error fetching model from "+o,t),m}))},v(st).k8=function(){this.l8("https://sceneview.github.io/assets/environments/neutral_ibl.ktx")},v(st).m8=function(t,n){var e,r,i,o=window.fetch(t).then(ut),u=(e=this,r=t,function(t){var n=e.z5_1.createIblFromKtx1(t);return e.m6_1.e3(n),e.b6_1.setIndirectLight(n),console.log("SceneView: IBL loaded from "+r),m});if(o.then(u).catch(function(t){return function(n){return console.error("SceneView: Error loading IBL from "+t,n),m}}(t)),null==n);else{var _=window.fetch(n).then(_t),s=function(t,n){return function(e){var r=t.z5_1.createSkyFromKtx1(e);return t.n6_1.e3(r),t.b6_1.setSkybox(r),console.log("SceneView: Skybox loaded from "+n),m}}(this,n);_.then(s).catch((i=n,function(t){return console.error("SceneView: Error loading skybox from "+i,t),m}))}},v(st).l8=function(t,n,e){var r;return n=n===V?null:n,e===V?(this.m8(t,n),r=m):r=e.m8.call(this,t,n),r},v(st).n8=function(t){var n,e=Filament.EntityManager.get().create(),r=e instanceof h?e:q();switch(t.v4_1.h_1){case 0:n=1;break;case 1:n=2;break;case 2:n=4;break;default:M()}var i=n,o=l.Builder(i);o.intensity(t.w4_1),o.color(ft(t.x4_1,t.y4_1,t.z4_1)),o.castShadows(!0),t.v4_1.equals(gt())?o.direction(ft(t.a5_1,t.b5_1,t.c5_1)):(o.position(ft(t.d5_1,t.e5_1,t.f5_1)),o.falloff(10)),o.build(this.z5_1,r),this.b6_1.addEntity(r),this.l6_1.r(r)},v(st).o8=function(t){var n,e=u.a4(t),r=this.k6_1;if(null==r){var i=this.z5_1.createAssetLoader();this.k6_1=i,n=i}else n=r;var o,_=n;try{var s=_.createAsset(e);if(null!=s){var a,c=s.getEntities();this.b6_1.addEntities(c);try{a=s.getInstance().getAnimator()}catch(t){if(!(t instanceof Error))throw t;a=null}var h=a;this.j6_1.r(new tt(s,h)),s.loadResources((o=s,function(){return o.releaseSourceData(),m}),null,"",null);var f=console,l=t.g3_1.g_1.toLowerCase();f.log("SceneView: Geometry '"+l+"' added")}else console.error("SceneView: Failed to create geometry asset for "+t.g3_1.toString())}catch(n){if(!(n instanceof Error))throw n;var v=n;console.error("SceneView: Error creating geometry "+t.g3_1.toString(),v)}},v(st).p8=function(){if(this.j6_1.v())return m;var t=this.q6_1;if(null==t)return m;for(var n=t,e=17976931348623157e292,r=17976931348623157e292,i=17976931348623157e292,o=-17976931348623157e292,u=-17976931348623157e292,_=-17976931348623157e292,s=this.j6_1.d();s.e();){var a=s.f().c8_1.getBoundingBox(),c=a.min,h=a.max,f=c[0];if(O(F(f)?f:q())<e){var l=c[0];e=O(F(l)?l:q())}var v=c[1];if(O(F(v)?v:q())<r){var w=c[1];r=O(F(w)?w:q())}var d=c[2];if(O(F(d)?d:q())<i){var g=c[2];i=O(F(g)?g:q())}var p=h[0];if(O(F(p)?p:q())>o){var $=h[0];o=O(F($)?$:q())}var b=h[1];if(O(F(b)?b:q())>u){var y=h[1];u=O(F(y)?y:q())}var x=h[2];if(O(F(x)?x:q())>_){var S=h[2];_=O(F(S)?S:q())}}var A=(e+o)/2,M=(r+u)/2,E=(i+_)/2,j=o-e,k=u-r,C=_-i,z=j*j+k*k+C*C,V=Math.sqrt(z)/2;n.t4(A,M,E),n.d7_1=2.5*V,n.h7_1=.5*V,n.i7_1=10*V},v(st).q8=function(){this.i8();var t=this.q6_1;null==t||t.a8();var n=this.k6_1;if(null==n);else{for(var e=this.j6_1.d();e.e();){var r=e.f();n.destroyAsset(r.c8_1)}n.delete()}this.j6_1.k1();for(var i=this.l6_1.d();i.e();){var o=i.f();this.z5_1.destroyEntity(o)}this.l6_1.k1(),null!=this.m6_1.d3_1&&this.b6_1.setIndirectLight(null),this.m6_1.f3(),null!=this.n6_1.d3_1&&this.b6_1.setSkybox(null),this.n6_1.f3(),this.z5_1.destroyRenderer(this.a6_1),this.z5_1.destroyView(this.c6_1),this.z5_1.destroyScene(this.b6_1),this.z5_1.destroyCameraComponent(this.f6_1),this.z5_1.destroySwapChain(this.e6_1),Filament.Engine.destroy(this.z5_1)},v(at).u5=function(t){var n=new vt;t(n),this.k5_1=n},v(at).v5=function(t){var n=new wt;t(n),this.l5_1=n},v(at).x5=function(t){this.q5_1=t},v(at).w5=function(t){this.r5_1=t},v(at).b8=function(){this.j5_1.o6_1=this.t5_1;var t=this.k5_1;if(null==t||t.r8(this.j5_1.d6_1),null!=this.l5_1)this.j5_1.n8(U(this.l5_1));else{var n=new wt;n.g5(),n.h5(5e4),n.i5(.6,-1,-.8);var e=n;this.j5_1.n8(e);var r=new wt;r.g5(),r.h5(25e3),r.i5(-.6,-.5,.8);var i=r;this.j5_1.n8(i);var o=new wt;o.g5(),o.h5(3e4),o.s8(.85,.9,1),o.i5(0,-.3,1);var u=o;this.j5_1.n8(u)}null!=this.o5_1?this.j5_1.m8(U(this.o5_1),this.p5_1):this.s5_1&&this.j5_1.k8();for(var _=this.m5_1.d();_.e();){var s=_.f();this.j5_1.j8(s.t8_1,s.u8_1)}for(var a=this.n5_1.d();a.e();){var c=a.f();this.j5_1.o8(c)}if(this.q5_1){var h=this.k5_1,f=(null==h?null:h.d4_1)??5,l=(null==h?null:h.e4_1)??0,v=(null==h?null:h.f4_1)??0,w=null==h?null:h.g4_1;this.j5_1.h8(f,l,v,w??0,this.r5_1)}},v(ht).v6=function(t){this.t6_1=t},v(ht).loadModel=function(t){var n=this.t6_1;return null==n?Promise.reject(L("SceneViewer not initialized")):new Promise(ct(n,t))},v(ht).setEnvironment=function(t){var n=this.t6_1;null==n||n.m8(t,null)},v(ht).setEnvironmentWithSkybox=function(t,n){var e=this.t6_1;null==e||e.m8(t,n)},v(ht).setCameraOrbit=function(t,n,e){var r=this.t6_1,i=null==r?null:r.q6_1;null==i||(i.b7_1=t,i.c7_1=n,i.d7_1=e)},v(ht).setCameraTarget=function(t,n,e){var r=this.t6_1,i=null==r?null:r.q6_1;null==i||i.t4(t,n,e)},v(ht).setAutoRotate=function(t){var n=this.t6_1,e=null==n?null:n.q6_1;null==e||(e.o7_1=t)},v(ht).setAutoRotateSpeed=function(t){var n=this.t6_1,e=null==n?null:n.q6_1;null==e||(e.p7_1=t)},v(ht).setZoomLimits=function(t,n){var e=this.t6_1,r=null==e?null:e.q6_1;null==r||(r.h7_1=t,r.i7_1=n)},v(ht).startRendering=function(){var t=this.t6_1;null==t||t.s6()},v(ht).stopRendering=function(){var t=this.t6_1;null==t||t.i8()},v(ht).resize=function(t,n){var e=this.t6_1;null==e||e.g8(t,n)},v(ht).setBackgroundColor=function(t,n,e,r){var i=this.t6_1;if(null==i)return m;var o=i,u={},_=[];_.push(t,n,e,r),u.clearColor=_,u.clear=!0,o.a6_1.setClearOptions(u)},v(ht).fitToModels=function(){var t=this.t6_1;null==t||t.p8()},v(ht).setAutoCenterContent=function(t){var n=this.t6_1;null==n||(n.o6_1=t)},v(ht).dispose=function(){if(!this.u6_1){this.u6_1=!0;var t=this.t6_1;null==t||t.q8(),this.t6_1=null}},v(vt).s4=function(t,n,e){this.b4_1=t,this.c4_1=n,this.d4_1=e},v(vt).t4=function(t,n,e){this.e4_1=t,this.f4_1=n,this.g4_1=e},v(vt).u4=function(t){this.k4_1=t},v(vt).r8=function(t){t.lookAt(ft(this.b4_1,this.c4_1,this.d4_1),ft(this.e4_1,this.f4_1,this.g4_1),ft(this.h4_1,this.i4_1,this.j4_1)),this.r4_1&&null!=this.q4_1?t.setExposureDirect(U(this.q4_1)):t.setExposure(this.n4_1,this.o4_1,this.p4_1)},v(wt).g5=function(){this.v4_1=gt()},v(wt).h5=function(t){this.w4_1=t},v(wt).s8=function(t,n,e){this.x4_1=t,this.y4_1=n,this.z4_1=e},v(wt).i5=function(t,n,e){this.a5_1=t,this.b5_1=n,this.c5_1=e},o=new Y,u=new X,_=new nt,function(t){var n=t.io||(t.io={}),e=n.github||(n.github={}),r=e.sceneview||(e.sceneview={});(r.web||(r.web={})).SceneViewer=ht}(t),K(),t})?r.apply(n,i):r)||(t.exports=o)},650(n){"use strict";n.exports=t}},e={},function t(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={exports:{}};return n[r](o,o.exports,t),o.exports}(607);var n,e});
1
+ !function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("Filament")):"function"==typeof define&&define.amd?define(["Filament"],n):"object"==typeof exports?exports["sceneview-web"]=n(require("Filament")):t["sceneview-web"]=n(t.Filament)}(globalThis,t=>{return n={883(t,n,e){var i,r,o;r=[n,e(580),e(36)],void 0===(o="function"==typeof(i=function(t,n,e){"use strict";var i=Math.imul,r=n.$_$.e,o=e.$_$.a,u=n.$_$.b,_=n.$_$.a,s=e.$_$.f,a=e.$_$.c,h=(e.$_$.b,n.$_$.c),c=e.$_$.s,f=e.$_$.p,l=e.$_$.i,v=n.$_$.d,w=e.$_$.z;function g(t,n){this.l2_1=t,this.m2_1=n}function d(t,n,e,i){t=t===o?new u:t,n=n===o?null:n,e=e===o?null:e,i=i===o?null:i,this.n2_1=t,this.o2_1=n,this.p2_1=e,this.q2_1=i}return l(g,"GeometryData"),l(d,"Vertex",d),f(g).toString=function(){return"GeometryData(vertices="+c(this.l2_1)+", indices="+c(this.m2_1)+")"},f(d).toString=function(){return"Vertex(position="+this.n2_1.toString()+", normal="+w(this.o2_1)+", uvCoordinate="+w(this.p2_1)+", color="+w(this.q2_1)+")"},t.$_$=t.$_$||{},t.$_$.a=function(t,n){t=t===o?r(1):t,n=n===o?r(0):n;var e=new u(.5*t.g2_1,.5*t.h2_1,.5*t.i2_1),h=new u(-e.g2_1,-e.h2_1,e.i2_1),c=new u(n.g2_1+h.g2_1,n.h2_1+h.h2_1,n.i2_1+h.i2_1),f=new u(e.g2_1,-e.h2_1,e.i2_1),l=new u(n.g2_1+f.g2_1,n.h2_1+f.h2_1,n.i2_1+f.i2_1),v=new u(e.g2_1,-e.h2_1,-e.i2_1),w=new u(n.g2_1+v.g2_1,n.h2_1+v.h2_1,n.i2_1+v.i2_1),p=new u(-e.g2_1,-e.h2_1,-e.i2_1),m=new u(n.g2_1+p.g2_1,n.h2_1+p.h2_1,n.i2_1+p.i2_1),y=new u(-e.g2_1,e.h2_1,e.i2_1),$=new u(n.g2_1+y.g2_1,n.h2_1+y.h2_1,n.i2_1+y.i2_1),b=new u(e.g2_1,e.h2_1,e.i2_1),x=new u(n.g2_1+b.g2_1,n.h2_1+b.h2_1,n.i2_1+b.i2_1),S=new u(e.g2_1,e.h2_1,-e.i2_1),M=new u(n.g2_1+S.g2_1,n.h2_1+S.h2_1,n.i2_1+S.i2_1),A=new u(-e.g2_1,e.h2_1,-e.i2_1),k=new u(n.g2_1+A.g2_1,n.h2_1+A.h2_1,n.i2_1+A.i2_1),E=new u(o,1),C=new u(o,-1),j=new u(o,o,-1),z=new u(o,o,1),V=new u(-1),L=new u(1),F=new _(0,0),q=new _(1,0),O=new _(0,1),I=new _(1,1),R=s([new d(c,C,O),new d(l,C,I),new d(w,C,q),new d(m,C,F),new d(k,V,O),new d($,V,I),new d(c,V,q),new d(m,V,F),new d($,z,O),new d(x,z,I),new d(l,z,q),new d(c,z,F),new d(M,j,O),new d(k,j,I),new d(m,j,q),new d(w,j,F),new d(x,L,O),new d(M,L,I),new d(w,L,q),new d(l,L,F),new d(k,E,O),new d(M,E,I),new d(x,E,q),new d($,E,F)]),B=a(),T=0;if(T<6)do{var U=T;T=T+1|0;var N=i(4,U);B.r(3+N|0),B.r(1+N|0),B.r(0+N|0),B.r(3+N|0),B.r(2+N|0),B.r(1+N|0)}while(T<6);return new g(R,B.s1())},t.$_$.b=function(t,n,e,s){t=t===o?1:t,n=n===o?2:n,e=e===o?r(0):e,s=s===o?24:s;var c=a(),f=n/2,l=6.2831855/s,v=0,w=1/s,p=a(),m=a(),y=a(),$=0;if($<=s)do{var b=$;$=$+1|0;var x=v,S=t*Math.cos(x),M=-f,A=v,k=Math.sin(A),E=new u(S,M,t*k),C=new u(E.g2_1+e.g2_1,E.h2_1+e.h2_1,E.i2_1+e.i2_1);c.r(new d(C,h(new u(C.g2_1-e.g2_1,0,C.i2_1-e.i2_1)),new _(w*b,0))),p.r(new d(C,new u(o,-1),new _(w*b,0)));var j=v,z=t*Math.cos(j),V=v,L=Math.sin(V),F=new u(z,f,t*L),q=new u(F.g2_1+e.g2_1,F.h2_1+e.h2_1,F.i2_1+e.i2_1);y.r(new d(q,h(new u(q.g2_1-e.g2_1,0,q.i2_1-e.i2_1)),new _(w*b,1)));var O=new u(o,1),I=v,R=(Math.cos(I)+1)/2,B=v,T=Math.sin(B);m.r(new d(q,O,new _(R,(T+1)/2))),v+=l}while(b!==s);c.s(y);var U=new u(o,-f),N=new u(e.g2_1+U.g2_1,e.h2_1+U.h2_1,e.i2_1+U.i2_1);c.r(new d(N,new u(o,-1),new _(.5,.5))),c.s(p);var D=new u(o,f),P=new u(e.g2_1+D.g2_1,e.h2_1+D.h2_1,e.i2_1+D.i2_1);c.r(new d(P,new u(o,1),new _(.5,.5))),c.s(m);var Y=c.s1(),W=a(),X=0;if(X<s)do{var K=X;X=X+1|0;var G=K+1|0,H=1+(K+s|0)|0,J=2+(K+s|0)|0,Z=i(2,s+1|0),Q=2+(Z+s|0)|0;W.r(K),W.r(J),W.r(G),W.r(K),W.r(H),W.r(J),W.r(Z),W.r(1+(Z+K|0)|0),W.r(2+(Z+K|0)|0),W.r(Q),W.r(2+(Q+K|0)|0),W.r(1+(Q+K|0)|0)}while(X<s);return new g(Y,W.s1())},t.$_$.c=function(t,n,e){t=t===o?v(1):t,n=n===o?r(0):n,e=e===o?new u(o,1):e;var i=new u(t.j2_1,t.k2_1,0),a=new u(i.g2_1/2,i.h2_1/2,i.i2_1/2),h=new u(-a.g2_1,-a.h2_1,a.i2_1),c=new d(new u(n.g2_1+h.g2_1,n.h2_1+h.h2_1,n.i2_1+h.i2_1),e,new _(0,0)),f=new u(-a.g2_1,a.h2_1,-a.i2_1),l=new d(new u(n.g2_1+f.g2_1,n.h2_1+f.h2_1,n.i2_1+f.i2_1),e,new _(0,1)),w=new u(a.g2_1,a.h2_1,-a.i2_1),p=new d(new u(n.g2_1+w.g2_1,n.h2_1+w.h2_1,n.i2_1+w.i2_1),e,new _(1,1)),m=new u(a.g2_1,-a.h2_1,a.i2_1),y=new u(n.g2_1+m.g2_1,n.h2_1+m.h2_1,n.i2_1+m.i2_1);return new g(s([c,l,p,new d(y,e,new _(1,0))]),s([3,1,0,3,2,1]))},t.$_$.d=function(t,n,e,i){t=t===o?1:t,n=n===o?r(0):n,e=e===o?24:e,i=i===o?24:i;var s=a(),c=0;if(c<=e)do{var f=c;c=c+1|0;var l=3.1415927*f/e,v=0;if(v<=i)do{var w=v;v=v+1|0;var p=6.2831855*(w===i?0:w)/i,m=Math.sin(l)*Math.cos(p),y=Math.cos(l),$=Math.sin(l),b=Math.sin(p),x=new u(m,y,$*b),S=new u(x.g2_1*t,x.h2_1*t,x.i2_1*t),M=h(S),A=S;S=new u(A.g2_1+n.g2_1,A.h2_1+n.h2_1,A.i2_1+n.i2_1);var k=new _(1-w/i,1-f/e);s.r(new d(S,M,k))}while(w!==i)}while(f!==e);var E=s.s1(),C=a(),j=0,z=0;if(z<e)do{var V=z;z=z+1|0;var L=0;if(L<i)do{var F=L;L=L+1|0;var q=V===(e-1|0),O=F+1|0;0===V||(C.r(j+F|0),C.r(j+O|0),C.r(1+((j+F|0)+i|0)|0)),q||(C.r(j+O|0),C.r(1+((j+O|0)+i|0)|0),C.r(1+((j+F|0)+i|0)|0))}while(L<i);j=j+(i+1|0)|0}while(z<e);return new g(E,C.s1())},t})?i.apply(n,r):i)||(t.exports=o)},36(t,n){var e,i;"object"!=typeof globalThis&&(Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__),void 0===Math.imul&&(Math.imul=function(t,n){return(4294901760&t)*(65535&n)+(65535&t)*(0|n)|0}),void 0===ArrayBuffer.isView&&(ArrayBuffer.isView=function(t){return null!=t&&null!=t.__proto__&&t.__proto__.__proto__===Int8Array.prototype.__proto__}),void 0===(i="function"==typeof(e=function(t){"use strict";var n,e,i,r,o,u,_,s,a,h,c,f,l,v,w,g,d,p,m,y,$,b,x=Math.imul,S=ArrayBuffer.isView;function M(){}function A(){}function k(t,n,e,i,r,o,u){return n=n===h?", ":n,e=e===h?"":e,i=i===h?"":i,r=r===h?-1:r,o=o===h?"...":o,u=u===h?null:u,function(t,n,e,i,r,o,u,_){e=e===h?", ":e,i=i===h?"":i,r=r===h?"":r,o=o===h?-1:o,u=u===h?"...":u,_=_===h?null:_,n.c(i);var s=0,a=0,c=t.length;t:for(;a<c;){var f=t[a];if(a=a+1|0,(s=s+1|0)>1&&n.c(e),!(o<0||s<=o))break t;En(n,f,_)}return o>=0&&s>o&&n.c(u),n.c(r),n}(t,pn(),n,e,i,r,o,u).toString()}function E(t,n,e,i,r,o,u){return n=n===h?", ":n,e=e===h?"":e,i=i===h?"":i,r=r===h?-1:r,o=o===h?"...":o,u=u===h?null:u,function(t,n,e,i,r,o,u,_){e=e===h?", ":e,i=i===h?"":i,r=r===h?"":r,o=o===h?-1:o,u=u===h?"...":u,_=_===h?null:_,n.c(i);var s=0,a=t.d();t:for(;a.e();){var c=a.f();if((s=s+1|0)>1&&n.c(e),!(o<0||s<=o))break t;En(n,c,_)}return o>=0&&s>o&&n.c(u),n.c(r),n}(t,pn(),n,e,i,r,o,u).toString()}function C(t,n){return t-n|0}function j(t){return String.fromCharCode(t)}function z(){}function V(){}function L(t,n){this.g_1=t,this.h_1=n}function F(t){return(null==t?null:gt(t))??"null"}function q(){n=this,this.k_1=new O(0,-2147483648),this.l_1=new O(-1,2147483647),this.m_1=8,this.n_1=64}function O(t,e){null==n&&new q,A.call(this),this.o_1=t,this.p_1=e}function I(){return _t(),e}function R(){return _t(),i}function B(){return _t(),r}function T(){return _t(),u}function U(){return _t(),_}function N(t,n){if(_t(),W(t,n))return 0;var e=K(t),i=K(n);return e&&!i?-1:!e&&i?1:K(G(t,n))?-1:1}function D(t){return _t(),t.o_1}function P(t){return _t(),4294967296*t.p_1+function(t){return _t(),t.o_1>=0?t.o_1:4294967296+t.o_1}(t)}function Y(t,n){if(_t(),H(t))return"0";if(K(t)){if(W(t,T())){var e=X(n),i=it(t,e),r=D(G(J(i,e),t));return Y(i,n)+r.toString(n)}return"-"+Y(Z(t),n)}for(var o=2===n?31:n<=10?9:n<=21?7:n<=35?6:5,u=Q(Math.pow(n,o)),_=t,s="";;){var a=it(_,u),h=D(G(_,J(a,u))).toString(n);if(H(_=a))return h+s;for(;h.length<o;)h="0"+h;s=h+s}}function W(t,n){return _t(),t.p_1===n.p_1&&t.o_1===n.o_1}function X(t){return _t(),new O(t,t<0?-1:0)}function K(t){return _t(),t.p_1<0}function G(t,n){return _t(),tt(t,Z(n))}function H(t){return _t(),0===t.p_1&&0===t.o_1}function J(t,n){if(_t(),H(t))return I();if(H(n))return I();if(W(t,T()))return nt(n)?T():I();if(W(n,T()))return nt(t)?T():I();if(K(t))return K(n)?J(Z(t),Z(n)):Z(J(Z(t),n));if(K(n))return Z(J(t,Z(n)));if(et(t,U())&&et(n,U()))return Q(P(t)*P(n));var e=t.p_1>>>16|0,i=65535&t.p_1,r=t.o_1>>>16|0,o=65535&t.o_1,u=n.p_1>>>16|0,_=65535&n.p_1,s=n.o_1>>>16|0,a=65535&n.o_1,h=0,c=0,f=0,l=0;return f=f+((l=l+x(o,a)|0)>>>16|0)|0,l&=65535,c=(c=c+((f=f+x(r,a)|0)>>>16|0)|0)+((f=(f&=65535)+x(o,s)|0)>>>16|0)|0,f&=65535,h=(h=(h=h+((c=c+x(i,a)|0)>>>16|0)|0)+((c=(c&=65535)+x(r,s)|0)>>>16|0)|0)+((c=(c&=65535)+x(o,_)|0)>>>16|0)|0,c&=65535,h=h+(((x(e,a)+x(i,s)|0)+x(r,_)|0)+x(o,u)|0)|0,new O(f<<16|l,(h&=65535)<<16|c)}function Z(t){return _t(),tt(function(t){return _t(),new O(~t.o_1,~t.p_1)}(t),new O(1,0))}function Q(t){if(_t(),jt(t))return I();if(t<=-0x8000000000000000)return T();if(t+1>=0x8000000000000000)return _t(),o;if(t<0)return Z(Q(-t));var n=4294967296;return new O(t%n|0,t/n|0)}function tt(t,n){_t();var e=t.p_1>>>16|0,i=65535&t.p_1,r=t.o_1>>>16|0,o=65535&t.o_1,u=n.p_1>>>16|0,_=65535&n.p_1,s=n.o_1>>>16|0,a=0,h=0,c=0,f=0;return a=(a=a+((h=(h=h+((c=(c=c+((f=f+(o+(65535&n.o_1)|0)|0)>>>16|0)|0)+(r+s|0)|0)>>>16|0)|0)+(i+_|0)|0)>>>16|0)|0)+(e+u|0)|0,new O((c&=65535)<<16|(f&=65535),(a&=65535)<<16|(h&=65535))}function nt(t){return _t(),!(1&~t.o_1)}function et(t,n){return _t(),N(t,n)<0}function it(t,n){if(_t(),H(n))throw tn("division by zero");if(H(t))return I();if(W(t,T())){if(W(n,R())||W(n,B()))return T();if(W(n,T()))return R();var e=function(t,n){_t();var e=63&n;return 0===e?t:e<32?new O(t.o_1<<e,t.p_1<<e|t.o_1>>>(32-e|0)):new O(0,t.o_1<<(e-32|0))}(it(function(t,n){_t();var e=63&n;return 0===e?t:e<32?new O(t.o_1>>>e|t.p_1<<(32-e|0),t.p_1>>e):new O(t.p_1>>(e-32|0),t.p_1>=0?0:-1)}(t,1),n),1);return W(e,I())?K(n)?R():B():tt(e,it(G(t,J(n,e)),n))}if(W(n,T()))return I();if(K(t))return K(n)?it(Z(t),Z(n)):Z(it(Z(t),n));if(K(n))return Z(it(t,Z(n)));for(var i=I(),r=t;ot(r,n);){for(var o=P(r)/P(n),u=Math.max(1,Math.floor(o)),_=Math.ceil(Math.log(u)/Math.LN2),s=_<=48?1:Math.pow(2,_-48),a=Q(u),h=J(a,n);K(h)||rt(h,r);)h=J(a=Q(u-=s),n);H(a)&&(a=R()),i=tt(i,a),r=G(r,h)}return i}function rt(t,n){return _t(),N(t,n)>0}function ot(t,n){return _t(),N(t,n)>=0}function ut(t){return _t(),null!=t&&(n=t,_t(),Ct(n)&&"LongArray"===n.$type$);var n}function _t(){s||(s=!0,e=X(0),i=X(1),r=X(-1),o=new O(-1,2147483647),u=new O(0,-2147483648),_=X(16777216),new gn(Array,"LongArray",ut))}function st(t,n){return at(t)?ht(t,n):t.b(n)}function at(t){return"string"==typeof t}function ht(t,n){return t.charCodeAt(n)}function ct(t){return at(t)?t.length:t.a()}function ft(t){return gt(t)}function lt(t,n){var e;switch(typeof t){case"number":e="number"==typeof n?vt(t,n):n instanceof O?vt(t,P(n)):wt(t,n);break;case"string":case"boolean":case"bigint":e=wt(t,n);break;default:e=function(t,n){return t.j(n)}(t,n)}return e}function vt(t,n){var e;if(t<n)e=-1;else if(t>n)e=1;else if(t===n){var i;if(0!==t)i=0;else{var r=1/t;i=r===1/n?0:r<0?-1:1}e=i}else e=t!=t?n!=n?0:1:-1;return e}function wt(t,n){return t<n?-1:t>n?1:0}function gt(t){return null==t?"null":function(t){return Ct(t)||S(t)}(t)?"[...]":"function"!=typeof t.toString?function(t){return Object.prototype.toString.call(t)}(t):t.toString()}function dt(t){return t=t===h?null:t,Object.create(t)}function pt(t,n){null!=Error.captureStackTrace?Error.captureStackTrace(t,n):t.stack=(new Error).stack}function mt(t){return t.prototype}function yt(t,n){var e;if($t(t)){var i;if($t(n))i=t;else i=(null==n?null:n.toString())??h;e=i}else e=t??h;return e}function $t(t){return t===h}function bt(t,n,e){xt(t,"message",yt(n,e)),xt(t,"cause",e),xt(t,"name",Object.getPrototypeOf(t).constructor.name)}function xt(t,n,e){Object.defineProperty(t,n,{configurable:!0,writable:!0,value:e})}function St(){throw vn()}function Mt(t,n,e,i,r,o,u,_){At("class",t,n,e,i,r,o,u,_)}function At(t,n,e,i,r,o,u,_,s){null!=r&&(n.prototype=Object.create(r.prototype),n.prototype.constructor=n);var c=function(t,n,e,i,r,o){return{kind:t,simpleName:n,associatedObjectKey:i,associatedObjects:r,suspendArity:o,$kClass$:h,defaultConstructor:e}}(t,e,i,_,s,u);n.$metadata$=c;var f=n.prototype;if(null!=o)for(var l=0,v=o.length;l<v;){var w=o[l];l=l+1|0,Object.assign(f,w.prototype),f[w.Symbol]=!0}"interface"===t&&(n.Symbol="#__interface_"+(a===h&&(a=0),a=a+1|0))}function kt(t,n,e,i,r,o,u,_){At("object",t,n,e,i,r,o,u,_)}function Et(t,n,e,i){kt(t,"Companion",h,n,e,i,h,h)}function Ct(t){return Array.isArray(t)}function jt(t){return!(t==t)}function zt(){}function Vt(t){return function(t){if(t.v())return[];for(var n=t.u(),e=Array(n),i=t.d(),r=0;i.e();){var o=r;r=o+1|0,e[o]=i.f()}return e}(t)}function Lt(t){return t<0&&function(){throw sn("Index overflow has happened.")}(),t}function Ft(){Sn.call(this)}function qt(t){this.y_1=t,this.w_1=0,this.x_1=-1}function Ot(t,n){this.g1_1=t,qt.call(this,t),v.i1(n,this.g1_1.u()),this.w_1=n}function It(){Ft.call(this),this.b1_1=0}function Rt(){f=this;var t=function(t,n){var e=[];if(Nt.call(n,e),!(t>=0))throw Xt(gt("Negative initial capacity: "+t));return n}(0,dt(mt(Nt)));t.p1_1=!0,this.q1_1=t}function Bt(){return null==f&&new Rt,f}function Tt(){return t=dt(mt(Nt)),Nt.call(t,[]),t;var t}function Ut(t,n){return v.r1(n,t.u()),n}function Nt(t){Bt(),It.call(this),this.o1_1=t,this.p1_1=!1}function Dt(){var t,n=(Gt(t=dt(mt(Pt))),Pt.call(t),t);return pt(n,Dt),n}function Pt(){pt(this,Pt)}function Yt(t){var n=function(t,n){return Ht(t,n),Wt.call(n),n}(t,dt(mt(Wt)));return pt(n,Yt),n}function Wt(){pt(this,Wt)}function Xt(t){var n=function(t,n){return Ht(t,n),Kt.call(n),n}(t,dt(mt(Kt)));return pt(n,Xt),n}function Kt(){pt(this,Kt)}function Gt(t){return Zt(t),Jt.call(t),t}function Ht(t,n){return Qt(t,n),Jt.call(n),n}function Jt(){pt(this,Jt)}function Zt(t){return bt(t),nn.call(t),t}function Qt(t,n){return bt(n,t),nn.call(n),n}function tn(t){var n=Qt(t,dt(mt(nn)));return pt(n,tn),n}function nn(){pt(this,nn)}function en(){var t,n=(Gt(t=dt(mt(on))),on.call(t),t);return pt(n,en),n}function rn(t){var n=function(t,n){return Ht(t,n),on.call(n),n}(t,dt(mt(on)));return pt(n,rn),n}function on(){pt(this,on)}function un(t){var n=function(t,n){return Ht(t,n),_n.call(n),n}(t,dt(mt(_n)));return pt(n,un),n}function _n(){pt(this,_n)}function sn(t){var n=function(t,n){return Ht(t,n),an.call(n),n}(t,dt(mt(an)));return pt(n,sn),n}function an(){pt(this,an)}function hn(){var t,n=(Gt(t=dt(mt(cn))),cn.call(t),t);return pt(n,hn),n}function cn(){pt(this,cn)}function fn(){var t,n=(Gt(t=dt(mt(ln))),ln.call(t),t);return pt(n,fn),n}function ln(){pt(this,ln)}function vn(){var t,n=(Gt(t=dt(mt(wn))),wn.call(t),t);return pt(n,vn),n}function wn(){pt(this,wn)}function gn(t,n,e){dn.call(this),this.w1_1=t,this.x1_1=n,this.y1_1=e}function dn(){}function pn(){return t=dt(mt(mn)),mn.call(t,""),t;var t}function mn(t){this.a2_1=t}function yn(t){var n=j(t).toUpperCase();return n.length>1?t:ht(n,0)}function $n(t){this.c2_1=t}function bn(t,n){return xn(),function(t,n,e){if(e=e!==h&&e,xn(),e){var i=t.length,r=n.length,o=Math.min(i,r);if(0===o)return i-r|0;var u=0;if(u<o)do{var _=u;u=u+1|0;var s=ht(t,_),a=ht(n,_);if(s!==a&&(s=yn(s))!==(a=yn(a))&&(s=ht(j(s).toLowerCase(),0))!==(a=ht(j(a).toLowerCase(),0)))return C(s,a)}while(u<o);return i-r|0}return lt(t,n)}(t,n,!0)}function xn(){l||(l=!0,new $n(bn))}function Sn(){}function Mn(){this.h1_1=2147483639}function An(){}function kn(){g=this,this.e2_1=new O(-1478467534,-1720727600)}function En(t,n,e){var i;null!=e?t.c(e(n)):null==n||("string"==typeof(i=n)||!0===i[M.Symbol])?t.c(n):n instanceof z?t.b2(n.f2_1):t.c(gt(n))}function Cn(t,n,e){if(t===n)return!0;if(!(e=e!==h&&e))return!1;var i=yn(t),r=yn(n);return i===r||ht(j(i).toLowerCase(),0)===ht(j(r).toLowerCase(),0)}function jn(t){return ct(t)-1|0}return At("interface",M,"CharSequence",d,p,m,y,$,b),Mt(A,"Number"),Mt(z,"Char"),Et(V),Mt(L,"Enum"),Et(q),Mt(O,"Long",h,A),kt(zt,"Unit"),Mt(Sn,"AbstractCollection"),Mt(Ft,"AbstractMutableCollection",h,Sn),Mt(qt,"IteratorImpl"),Mt(Ot,"ListIteratorImpl",h,qt),Mt(It,"AbstractMutableList",h,Ft),Et(Rt),Mt(Nt,"ArrayList",Tt,It),Mt(nn,"Exception",function t(){var n=Zt(dt(mt(nn)));return pt(n,t),n},Error),Mt(Jt,"RuntimeException",function t(){var n=Gt(dt(mt(Jt)));return pt(n,t),n},nn),Mt(Pt,"UnsupportedOperationException",Dt,Jt),Mt(Wt,"IllegalStateException",function t(){var n,e=(Gt(n=dt(mt(Wt))),Wt.call(n),n);return pt(e,t),e},Jt),Mt(Kt,"IllegalArgumentException",function t(){var n,e=(Gt(n=dt(mt(Kt))),Kt.call(n),n);return pt(e,t),e},Jt),Mt(on,"NoSuchElementException",en,Jt),Mt(_n,"IndexOutOfBoundsException",function t(){var n,e=(Gt(n=dt(mt(_n))),_n.call(n),n);return pt(e,t),e},Jt),Mt(an,"ArithmeticException",function t(){var n,e=(Gt(n=dt(mt(an))),an.call(n),n);return pt(e,t),e},Jt),Mt(cn,"NoWhenBranchMatchedException",hn,Jt),Mt(ln,"NullPointerException",fn,Jt),Mt(wn,"ClassCastException",vn,Jt),Mt(dn,"KClassImpl"),Mt(gn,"PrimitiveKClassImpl",h,dn),Mt(mn,"StringBuilder",pn,h,[M]),Mt($n,"sam$kotlin_Comparator$0"),Et(Mn),kt(An,"EmptyIterator"),kt(kn,"EmptyList"),mt(L).i=function(t){return lt(this.h_1,t.h_1)},mt(L).j=function(t){return this.i(t instanceof L?t:St())},mt(L).equals=function(t){return this===t},mt(L).toString=function(){return this.g_1},mt(O).q=function(t){return N(this,t)},mt(O).j=function(t){return this.q(t instanceof O?t:St())},mt(O).toString=function(){return Y(this,10)},mt(O).valueOf=function(){return P(this)},mt(zt).toString=function(){return"kotlin.Unit"},mt(Ft).s=function(t){this.t();for(var n=!1,e=t.d();e.e();){var i=e.f();this.r(i)&&(n=!0)}return n},mt(Ft).toJSON=function(){return this.toArray()},mt(Ft).t=function(){},mt(qt).e=function(){return this.w_1<this.y_1.u()},mt(qt).f=function(){if(!this.e())throw en();var t=this.w_1;return this.w_1=t+1|0,this.x_1=t,this.y_1.z(this.x_1)},mt(qt).a1=function(){if(-1===this.x_1)throw Yt(gt("Call next() or previous() before removing element from the iterator."));this.y_1.c1(this.x_1),this.w_1=this.x_1,this.x_1=-1},mt(It).r=function(t){return this.t(),this.j1(this.u(),t),!0},mt(It).k1=function(){this.t(),this.l1(0,this.u())},mt(It).d=function(){return new qt(this)},mt(It).m1=function(t){return new Ot(this,t)},mt(It).l1=function(t,n){var e=this.m1(t),i=n-t|0,r=0;if(r<i)do{r=r+1|0,e.f(),e.a1()}while(r<i)},mt(Nt).s1=function(){return this.t(),this.p1_1=!0,this.u()>0?this:Bt().q1_1},mt(Nt).u=function(){return this.o1_1.length},mt(Nt).z=function(t){return this.o1_1[Ut(this,t)]},mt(Nt).r=function(t){return this.t(),this.o1_1.push(t),this.b1_1=this.b1_1+1|0,!0},mt(Nt).j1=function(t,n){this.t(),this.o1_1.splice(function(t,n){return v.i1(n,t.u()),n}(this,t),0,n),this.b1_1=this.b1_1+1|0},mt(Nt).s=function(t){if(this.t(),t.v())return!1;for(var n=(_=this,s=t.u(),a=void 0,a=_.u(),_.o1_1.length=_.u()+s|0,a),e=0,i=t.d();i.e();){var r=i.f(),o=e;e=o+1|0;var u=Lt(o);this.o1_1[n+u|0]=r}var _,s,a;return this.b1_1=this.b1_1+1|0,!0},mt(Nt).c1=function(t){return this.t(),Ut(this,t),this.b1_1=this.b1_1+1|0,t===(this.u()-1|0)?this.o1_1.pop():this.o1_1.splice(t,1)[0]},mt(Nt).l1=function(t,n){this.t(),this.b1_1=this.b1_1+1|0,this.o1_1.splice(t,n-t|0)},mt(Nt).k1=function(){this.t(),this.o1_1=[],this.b1_1=this.b1_1+1|0},mt(Nt).toString=function(){return k(this.o1_1,", ","[","]",h,h,ft)},mt(Nt).t1=function(){return[].slice.call(this.o1_1)},mt(Nt).toArray=function(){return this.t1()},mt(Nt).t=function(){if(this.p1_1)throw Dt()},mt(gn).z1=function(){return this.x1_1},mt(dn).toString=function(){return"class "+this.z1()},mt(mn).a=function(){return this.a2_1.length},mt(mn).b=function(t){var n=this.a2_1;if(!(0<=t&&t<=(ct(n)-1|0)))throw un("index: "+t+", length: "+this.a()+"}");return st(n,t)},mt(mn).b2=function(t){return this.a2_1=this.a2_1+j(t),this},mt(mn).c=function(t){return this.a2_1=this.a2_1+F(t),this},mt(mn).toString=function(){return this.a2_1},mt($n).d2=function(t,n){return this.c2_1(t,n)},mt($n).compare=function(t,n){return this.d2(t,n)},mt(Sn).v=function(){return 0===this.u()},mt(Sn).toString=function(){return E(this,", ","[","]",h,h,(t=this,function(n){return n===t?"(this Collection)":F(n)}));var t},mt(Sn).toArray=function(){return Vt(this)},mt(Mn).r1=function(t,n){if(t<0||t>=n)throw un("index: "+t+", size: "+n)},mt(Mn).i1=function(t,n){if(t<0||t>n)throw un("index: "+t+", size: "+n)},mt(An).e=function(){return!1},mt(An).f=function(){throw en()},mt(kn).toString=function(){return"[]"},mt(kn).u=function(){return 0},mt(kn).v=function(){return!0},mt(kn).z=function(t){throw un("Empty list doesn't contain element at index "+t+".")},mt(kn).d=function(){return w},new V,c=new zt,v=new Mn,w=new An,t.$_$=t.$_$||{},t.$_$.a=h,t.$_$.b=c,t.$_$.c=Tt,t.$_$.d=function(t){return t},t.$_$.e=function(t){return t},t.$_$.f=function(t){return t.length>0?new Nt(t):(null==g&&new kn,g)},t.$_$.g=ht,t.$_$.h=ct,t.$_$.i=Mt,t.$_$.j=Et,t.$_$.k=kt,t.$_$.l=function(t){return"number"==typeof t||t instanceof O},t.$_$.m=function(t,n){var e=new Error;return e.message=yt(t,n),e.cause=n,e.name="Throwable",e},t.$_$.n=function(t){return Number(t)},t.$_$.o=dt,t.$_$.p=mt,t.$_$.q=function(t){return t<<24>>24},t.$_$.r=function(t){return t<<16>>16},t.$_$.s=gt,t.$_$.t=function(t,n,e){e=e===h?t:e;var i=function(t,n,e,i){var r;if(e=e===h?jn(t):e,(i=i!==h&&i)||"string"!=typeof t)r=function(t,n,e,i){if(e=e===h?jn(t):e,!(i=i!==h&&i)&&1===n.length&&"string"==typeof t){var r=j(function(t){var n;switch(t.length){case 0:throw rn("Array is empty.");case 1:n=t[0];break;default:throw Xt("Array has more than one element.")}return n}(n));return t.lastIndexOf(r,e)}var o=function(t,n){return t>n?n:t}(e,jn(t));if(0<=o)do{var u=o;o=o+-1|0;var _,s=st(t,u);t:{for(var a=0,c=n.length;a<c;){var f=n[a];if(a=a+1|0,Cn(f,s,i)){_=!0;break t}}_=!1}if(_)return u}while(0<=o);return-1}(t,(u=[n],_=new Uint16Array(u),_.$type$="CharArray",_),e,i);else{var o=j(n);r=t.lastIndexOf(o,e)}var u,_;return r}(t,n);return-1===i?e:function(t,n,e){return xn(),t.substring(n,e)}(t,0,i)},t.$_$.u=L,t.$_$.v=St,t.$_$.w=function(t){var n;return null==t?function(){throw fn()}():n=t,n},t.$_$.x=function(t){return!function(t){return t===1/0||t===-1/0}(t)&&!jt(t)},t.$_$.y=function(){throw hn()},t.$_$.z=F,t})?e.apply(n,[n]):e)||(t.exports=i)},580(t,n,e){var i,r,o;r=[n,e(36)],void 0===(o="function"==typeof(i=function(t,n){"use strict";var e=n.$_$.p,i=n.$_$.o,r=n.$_$.a,o=n.$_$.i;function u(t,n,e){t=t===r?0:t,n=n===r?0:n,e=e===r?0:e,this.g2_1=t,this.h2_1=n,this.i2_1=e}function _(t,n){t=t===r?0:t,n=n===r?0:n,this.j2_1=t,this.k2_1=n}return o(u,"Float3",u),o(_,"Float2",_),e(u).toString=function(){return"Float3(x="+this.g2_1+", y="+this.h2_1+", z="+this.i2_1+")"},e(_).toString=function(){return"Float2(x="+this.j2_1+", y="+this.k2_1+")"},t.$_$=t.$_$||{},t.$_$.a=_,t.$_$.b=u,t.$_$.c=function(t){var n=t.g2_1*t.g2_1+t.h2_1*t.h2_1+t.i2_1*t.i2_1,e=1/Math.sqrt(n);return new u(t.g2_1*e,t.h2_1*e,t.i2_1*e)},t.$_$.d=function(t){return function(t,n){return _.call(n,t,t),n}(t,i(e(_)))},t.$_$.e=function(t){return function(t,n){return u.call(n,t,t,t),n}(t,i(e(u)))},t})?i.apply(n,r):i)||(t.exports=o)},607(t,n,e){var i,r,o;r=[n,e(650),e(36),e(580),e(883)],void 0===(o="function"==typeof(i=function(t,n,e,i,r){"use strict";var o,u,_,s,a,h=Math.imul,c=n.Entity,f=n.init,l=n.LightManager,v=e.$_$.p,w=e.$_$.j,g=e.$_$.i,d=e.$_$.s,p=e.$_$.x,m=e.$_$.k,y=e.$_$.b,$=i.$_$.b,b=r.$_$.a,x=r.$_$.d,S=r.$_$.b,M=i.$_$.a,A=r.$_$.c,k=e.$_$.y,E=e.$_$.h,C=e.$_$.g,j=e.$_$.e,z=e.$_$.q,V=e.$_$.r,L=e.$_$.a,F=e.$_$.m,q=e.$_$.v,O=e.$_$.l,I=e.$_$.n,R=e.$_$.c,B=e.$_$.d,T=e.$_$.t,U=e.$_$.w,N=e.$_$.u;function D(){this.r2_1=.01}function P(){this.s2_1=!1,this.t2_1=-1}function Y(t,n){this.y2_1=t,this.z2_1=n}function W(){this.a3_1=.001}function X(t){this.h3_1=t,this.i3_1=null}function K(){}function G(){var t,n={version:"4.9.0"};n.createViewer=((t=function(t){return H(t,!0,!0)}).callableName="jsCreateViewer",t),n.createViewerAutoRotate=function(){var t=function(t,n){return H(t,n,!0)};return t.callableName="jsCreateViewerAutoRotate",t}(),n.createViewerFull=function(){var t=function(t,n,e,i,r,o,u,_){return H(t,n,e,i,r,o,u,_)};return t.callableName="jsCreateViewerFull",t}(),n.modelViewer=function(){var t=function(t,n){return e=n,H(t,!0,!0).then((i=e,function(t){return t.loadModel(i),t}));var e,i};return t.callableName="jsModelViewer",t}(),n.modelViewerAutoRotate=function(){var t=function(t,n,e){return i=n,H(t,e,!0).then((r=i,function(t){return t.loadModel(r),t}));var i,r};return t.callableName="jsModelViewerAutoRotate",t}(),window.sceneview=n,console.log("SceneView Web v4.9.0 loaded")}function H(t,n,e,i,r,o,u,s){i=i===L?0:i,r=r===L?1.5:r,o=o===L?5:o,u=u===L?45:u,s=s===L?5e4:s;var a=document.getElementById(t),h=a instanceof HTMLCanvasElement?a:null;if(null==h)return Promise.reject(F("Canvas element '"+t+"' not found"));var c,f,l,v,w,g,d,p,m=h;return 0!==m.width&&0!==m.height||(m.width=m.clientWidth,m.height=m.clientHeight),new Promise((c=m,f=n,l=e,v=i,w=r,g=o,d=u,p=s,function(t,n){try{var e=_,i=function(t,n,e,i,r,o,u){return function(_){return _.z5(function(t,n,e,i){return function(r){return r.x4(t,n,e),r.y4(0,0,0),r.z4(i),y}}(e,i,r,o)),_.a6(function(t){return function(n){return n.l5(),n.m5(t),n.n5(.6,-1,-.8),y}}(u)),_.b6(t),_.c6(n),y}}(f,l,v,w,g,d,p);e.d7(c,L,i,function(t,n){return function(e){e.x6(),window.addEventListener("resize",function(t){return function(n){return t.width=t.clientWidth,t.height=t.clientHeight,y}}(n));var i=new wt;return i.a7(e),t(i),y}}(t,c))}catch(t){if(!(t instanceof Error))throw t;n(t)}return y}))}function J(t){var n;t.e7_1.addEventListener("mousedown",(n=t,function(t){var e=t instanceof MouseEvent?t:q(),i=e.button;return 0===i?n.z7_1=!0:2===i&&(n.a8_1=!0),n.b8_1=e.clientX,n.c8_1=e.clientY,e.preventDefault(),y})),t.e7_1.addEventListener("mousemove",function(t){return function(n){var e=n instanceof MouseEvent?n:q(),i=e.clientX-t.b8_1,r=e.clientY-t.c8_1;return t.b8_1=e.clientX,t.c8_1=e.clientY,t.z7_1?t.v7_1?(t.x7_1=-i*t.q7_1,t.y7_1=-r*t.q7_1):(t.g7_1=t.g7_1-i*t.q7_1,t.h7_1=t.h7_1-r*t.q7_1):t.a8_1&&(t.j7_1=t.j7_1+i*t.s7_1*t.i7_1,t.k7_1=t.k7_1-r*t.s7_1*t.i7_1),y}}(t)),t.e7_1.addEventListener("mouseup",function(t){return function(n){return t.z7_1=!1,t.a8_1=!1,y}}(t)),t.e7_1.addEventListener("mouseleave",function(t){return function(n){return t.z7_1=!1,t.a8_1=!1,y}}(t)),t.e7_1.addEventListener("wheel",function(t){return function(n){var e=n instanceof WheelEvent?n:q(),i=e.deltaY>0?1:-1;t.i7_1=t.i7_1*(1+i*t.r7_1);var r=t,o=t.m7_1,u=t.n7_1,_=t.i7_1,s=Math.min(u,_);return r.i7_1=Math.max(o,s),e.preventDefault(),y}}(t),{passive:!1}),t.e7_1.addEventListener("contextmenu",Z),t.e7_1.addEventListener("touchstart",function(t){return function(n){var e=n;if(1==e.touches.length){t.z7_1=!0;var i=t,r=e.touches[0].clientX;i.b8_1=I(O(r)?r:q());var o=t,u=e.touches[0].clientY;o.c8_1=I(O(u)?u:q())}return n.preventDefault(),y}}(t),{passive:!1}),t.e7_1.addEventListener("touchmove",function(t){return function(n){var e=n;if(t.z7_1&&1==e.touches.length){var i=e.touches[0].clientX,r=I(O(i)?i:q())-t.b8_1,o=e.touches[0].clientY,u=I(O(o)?o:q())-t.c8_1,_=t,s=e.touches[0].clientX;_.b8_1=I(O(s)?s:q());var a=t,h=e.touches[0].clientY;a.c8_1=I(O(h)?h:q()),t.v7_1?(t.x7_1=-r*t.q7_1,t.y7_1=-u*t.q7_1):(t.g7_1=t.g7_1-r*t.q7_1,t.h7_1=t.h7_1-u*t.q7_1)}else if(2==e.touches.length){var c=e.touches[0].clientX,f=I(O(c)?c:q()),l=e.touches[1].clientX,v=f-I(O(l)?l:q()),w=e.touches[0].clientY,g=I(O(w)?w:q()),d=e.touches[1].clientY,p=g-I(O(d)?d:q()),m=v*v+p*p,$=Math.sqrt(m);if(t.d8_1>0){var b=t.d8_1-$;t.i7_1=t.i7_1*(1+.005*b);var x=t,S=t.m7_1,M=t.n7_1,A=t.i7_1,k=Math.min(M,A);x.i7_1=Math.max(S,k)}t.d8_1=$}return n.preventDefault(),y}}(t),{passive:!1}),t.e7_1.addEventListener("touchend",function(t){return function(n){return t.z7_1=!1,t.d8_1=-1,y}}(t))}function Z(t){return t.preventDefault(),y}function Q(t,n){this.e7_1=t,this.f7_1=n,this.g7_1=.7853981633974483,this.h7_1=1.2217304763960306,this.i7_1=5,this.j7_1=0,this.k7_1=0,this.l7_1=0,this.m7_1=.5,this.n7_1=50,this.o7_1=.1,this.p7_1=3.041592653589793,this.q7_1=.005,this.r7_1=.1,this.s7_1=.003,this.t7_1=!1,this.u7_1=.008726646259971648,this.v7_1=!0,this.w7_1=.95,this.x7_1=0,this.y7_1=0,this.z7_1=!1,this.a8_1=!1,this.b8_1=0,this.c8_1=0,J(this),this.d8_1=-1}function tt(t){return y}function nt(t,n,e){e=e===L?0:e,this.h8_1=t,this.i8_1=n,this.j8_1=e,this.k8_1=null}function et(){this.b7_1="https://sceneview.github.io/assets/environments/neutral_ibl.ktx",this.c7_1="https://sceneview.github.io/assets/environments/neutral_skybox.ktx"}function it(t){for(var n=t.o6_1,e=R(),i=n.d();i.e();){var r,o=i.f();try{var u=o.h8_1.getBoundingBox(),_=u.min,s=u.max,a=_[0],h=I(O(a)?a:q()),c=_[1],f=I(O(c)?c:q()),l=_[2],v=new Float64Array([h,f,I(O(l)?l:q())]),w=s[0],g=I(O(w)?w:q()),d=s[1],p=I(O(d)?d:q()),m=s[2];r=new Y(v,new Float64Array([g,p,I(O(m)?m:q())]))}catch(t){if(!(t instanceof Error))throw t;var y=t;console.warn("SceneView: skipping a model in auto-center (bounds not ready)",y),r=null}var $=r;null==$||e.r($)}return e}function rt(t,n){if(null==n)return y;var e=t.v6_1;if(null==e)return y;var i=e,r=o.c3(n),u=o.e3(n)/2;if(u<=0)return y;i.y4(r[0],r[1],r[2]),i.i7_1=2.5*u,i.m7_1=.5*u,i.n7_1=10*u}function ot(t,n){var e=[],i=0;if(i<16)do{var r=i;i=i+1|0;var o=n[r];e.push(I(O(o)?o:q()))}while(i<16);return e}function ut(t,n,e){var i=ot(0,n),r=i[12];i[12]=I(O(r)?r:q())+e[0];var o=i[13];i[13]=I(O(o)?o:q())+e[1];var u=i[14];return i[14]=I(O(u)?u:q())+e[2],i}function _t(t,n){if(!t.m6_1)return y;if(t.w6_1){var e=t.d6_1.clientWidth,i=t.d6_1.clientHeight;e>0&&i>0&&(e!==t.d6_1.width||i!==t.d6_1.height)&&t.m8(e,i)}!function(t){var n=t.t6_1,e=!t.o6_1.v();if(!t.u6_1.u2(n,e))return y;var i=o.b3(it(t)),r=o.g3(i);if(null==r)return y;var u=r,_=o.e3(i);if(!t.u6_1.v2(_))return t.u6_1.w2(_),y;for(var s=t.e6_1.getTransformManager(),a=t.o6_1.d();a.e();){var h=a.f();try{var c=h.h8_1.getRoot();s.hasComponent(c)||s.create(c);var f=s.getInstance(c);null==h.k8_1&&(h.k8_1=ot(0,s.getTransform(f))),s.setTransform(f,ut(0,h.k8_1,u))}catch(t){if(!(t instanceof Error))throw t;var l=t;console.error("SceneView: auto-center failed for a model",l)}}rt(t,i),t.u6_1.w2(_),console.log("SceneView: auto-centered content (offset "+u[0]+", "+u[1]+", "+u[2]+", diagonal "+_+")")}(t);var r=t.v6_1;null==r||r.e8();var u=t.n6_1>0?(n-t.n6_1)/1e3:0;t.n6_1=n;for(var _=t.o6_1.d();_.e();){var s=_.f(),a=s.i8_1;if(null==a);else if(a.getAnimationCount()>0){s.j8_1=s.j8_1+u;var h=a.getAnimationDuration(0);h>0&&(s.j8_1=s.j8_1%h),a.applyAnimation(0),a.updateBoneMatrices()}}t.e6_1.execute(),t.f6_1.beginFrame(t.j6_1)&&(t.f6_1.renderView(t.h6_1),t.f6_1.endFrame());var c,f,l=window;t.l6_1=l.requestAnimationFrame((c=t,(f=function(t){return _t(c,t),y}).callableName="renderLoop",f))}function st(t){return t.arrayBuffer()}function at(t,n,e,i,r){return function(o){var u=t.createAsset(o);if(null!=u){var _,s=u.getEntities();n.g6_1.addEntities(s);try{_=u.getInstance().getAnimator()}catch(t){if(!(t instanceof Error))throw t;_=null}var a=new nt(u,_);n.o6_1.r(a),n.u6_1.x2(),u.loadResources(function(t,n,e,i){return function(){return t.releaseSourceData(),console.log("SceneView: Model loaded from "+n+" ("+e.length+" entities)"),null==i||i(t),y}}(u,i,s,r),null,e,null)}else console.error("SceneView: AssetLoader failed to parse model from "+i);return y}}function ht(t){return t.arrayBuffer()}function ct(t){return t.arrayBuffer()}function ft(t,n,e,i,r,o,u,_){var s;this.d6_1=t,this.e6_1=n,this.f6_1=e,this.g6_1=i,this.h6_1=r,this.i6_1=o,this.j6_1=u,this.k6_1=_,this.l6_1=null,this.m6_1=!1,this.n6_1=0,this.o6_1=R(),this.p6_1=null,this.q6_1=R(),this.r6_1=new X((s=this,function(t){return s.e6_1.destroyIndirectLight(t),y})),this.s6_1=new X(function(t){return function(n){return t.e6_1.destroySkybox(n),y}}(this)),this.t6_1=!0,this.u6_1=new P,this.v6_1=null,this.w6_1=!0}function lt(t){this.o5_1=t,this.p5_1=null,this.q5_1=null,this.r5_1=R(),this.s5_1=R(),this.t5_1=null,this.u5_1=null,this.v5_1=!0,this.w5_1=!1,this.x5_1=!0,this.y5_1=!0}function vt(t,n){return function(e,i){try{t.p8(n,function(t,n){return function(e){return t(n),y}}(e,n))}catch(t){if(!(t instanceof Error))throw t;i(t)}return y}}function wt(){this.y6_1=null,this.z6_1=!1}function gt(t,n,e){var i=[];return i.push(t,n,e),i}function dt(t,n,e,i){var r=[];return r.push(t,n,e,i),r}function pt(){this.g4_1=0,this.h4_1=1.5,this.i4_1=5,this.j4_1=0,this.k4_1=0,this.l4_1=0,this.m4_1=0,this.n4_1=1,this.o4_1=0,this.p4_1=45,this.q4_1=.1,this.r4_1=1e3,this.s4_1=16,this.t4_1=.008,this.u4_1=100,this.v4_1=1.1,this.w4_1=!0}function mt(){this.a5_1=$t(),this.b5_1=1e5,this.c5_1=1,this.d5_1=1,this.e5_1=1,this.f5_1=0,this.g5_1=-1,this.h5_1=-.5,this.i5_1=0,this.j5_1=3,this.k5_1=0}function yt(t,n){N.call(this,t,n)}function $t(){return function(){if(a)return y;a=!0,s=new yt("DIRECTIONAL",0),new yt("POINT",1),new yt("SPOT",2)}(),s}return w(D),g(P,"AutoCenterGate",P),g(Y,"Aabb"),m(W,"ContentCentering"),g(X,"EnvironmentResourceTracker"),m(K,"GeometryGLBBuilder"),g(Q,"OrbitCameraController"),g(nt,"LoadedModel"),w(et),g(ft,"SceneView"),g(lt,"SceneViewBuilder"),g(wt,"SceneViewJS",wt),g(pt,"CameraConfig",pt),g(mt,"LightConfig",mt),g(yt,"LightType",L,N),v(P).u2=function(t,n){return t&&n&&!this.s2_1},v(P).v2=function(t){if(this.t2_1<0)return!0;var n=t-this.t2_1,e=Math.abs(n),i=this.t2_1;return e>.01*Math.max(t,i)},v(P).w2=function(t){var n;if(this.t2_1>=0){var e=t-this.t2_1,i=Math.abs(e),r=this.t2_1;n=i<=.01*Math.max(t,r)}else n=!1;var o=n;this.t2_1=t,o&&(this.s2_1=!0)},v(P).x2=function(){this.s2_1=!1,this.t2_1=-1},v(Y).toString=function(){return"Aabb(min="+d(this.y2_1)+", max="+d(this.z2_1)+")"},v(W).b3=function(t){if(t.v())return null;for(var n=17976931348623157e292,e=17976931348623157e292,i=17976931348623157e292,r=-17976931348623157e292,o=-17976931348623157e292,u=-17976931348623157e292,_=t.d();_.e();){var s=_.f();s.y2_1[0]<n&&(n=s.y2_1[0]),s.y2_1[1]<e&&(e=s.y2_1[1]),s.y2_1[2]<i&&(i=s.y2_1[2]),s.z2_1[0]>r&&(r=s.z2_1[0]),s.z2_1[1]>o&&(o=s.z2_1[1]),s.z2_1[2]>u&&(u=s.z2_1[2])}return new Y(new Float64Array([n,e,i]),new Float64Array([r,o,u]))},v(W).c3=function(t){return new Float64Array([(t.y2_1[0]+t.z2_1[0])/2,(t.y2_1[1]+t.z2_1[1])/2,(t.y2_1[2]+t.z2_1[2])/2])},v(W).d3=function(t){return new Float64Array([t.z2_1[0]-t.y2_1[0],t.z2_1[1]-t.y2_1[1],t.z2_1[2]-t.y2_1[2]])},v(W).e3=function(t){if(null==t)return 0;var n=this.d3(t),e=n[0]*n[0]+n[1]*n[1]+n[2]*n[2];return Math.sqrt(e)},v(W).f3=function(t){var n=t.z2_1[0]-t.y2_1[0],e=t.z2_1[1]-t.y2_1[1],i=t.z2_1[2]-t.y2_1[2];return!!(p(n)&&p(e)&&p(i))&&Math.max(n,e,i)>.001},v(W).g3=function(t){if(null==t||!this.f3(t))return null;var n=this.c3(t);return new Float64Array([0-n[0],0-n[1],0-n[2]])},v(X).j3=function(t){var n=this.i3_1;null==n||this.h3_1(n),this.i3_1=t},v(X).k3=function(){var t=this.i3_1;null==t||this.h3_1(t),this.i3_1=null},v(K).f4=function(t){var n=function(t,n){var e;switch(n.l3_1.h_1){case 0:e=b(new $(n.m3_1,n.n3_1,n.o3_1));break;case 1:e=x(n.p3_1);break;case 2:e=S(n.p3_1,n.q3_1);break;case 3:e=A(new M(n.m3_1,n.n3_1));break;default:k()}return e}(0,t),e=n.l2_1,i=n.m2_1,r=e.u(),o=i.u(),u=new Float32Array(h(r,3)),_=new Float32Array(h(r,3)),s=34028235e31,a=34028235e31,c=34028235e31,f=-34028235e31,l=-34028235e31,v=-34028235e31,w=0,g=e.u()-1|0;if(w<=g)do{var d=w;w=w+1|0;var p=e.z(d),m=p.n2_1.g2_1,y=p.n2_1.h2_1,L=p.n2_1.i2_1;u[h(d,3)]=m,u[h(d,3)+1|0]=y,u[h(d,3)+2|0]=L;var F=p.o2_1??new $(0,1,0);_[h(d,3)]=F.g2_1,_[h(d,3)+1|0]=F.h2_1,_[h(d,3)+2|0]=F.i2_1,m<s&&(s=m),y<a&&(a=y),L<c&&(c=L),m>f&&(f=m),y>l&&(l=y),L>v&&(v=L)}while(w<=g);var q=new Uint16Array(o),O=0,I=i.u()-1|0;if(O<=I)do{var R=O;O=O+1|0,q[R]=V(i.z(R))}while(O<=I);return function(t,n,e,i,r,o,u,_,s){var a=h(h(o,3),4),c=h(h(o,3),4),f=h(u,2),l=n.l3_1.g_1.toLowerCase(),v={mesh:0};if(v.name=l,0===n.w3_1&&0===n.x3_1&&0===n.y3_1||(v.translation=[],v.translation.push(n.w3_1,n.x3_1,n.y3_1)),1===n.c4_1&&1===n.d4_1&&1===n.e4_1||(v.scale=[],v.scale.push(n.c4_1,n.d4_1,n.e4_1)),0!==n.z3_1||0!==n.a4_1||0!==n.b4_1){var w=3.141592653589793*n.z3_1/180,g=3.141592653589793*n.a4_1/180,d=3.141592653589793*n.b4_1/180,p=w/2,m=Math.cos(p),y=w/2,$=Math.sin(y),b=g/2,x=Math.cos(b),S=g/2,M=Math.sin(S),A=d/2,k=Math.cos(A),V=d/2,L=Math.sin(V),F=$*x*k-m*M*L,q=m*M*k+$*x*L,O=m*x*L-$*M*k,I=m*x*k+$*M*L;v.rotation=[],v.rotation.push(F,q,O,I)}var R={asset:{version:"2.0",generator:"SceneView-Web"},scene:0,scenes:[{nodes:[0]}],nodes:[]};R.nodes.push(v),R.meshes=[{primitives:[{attributes:{POSITION:0,NORMAL:1},indices:2,material:0,mode:4}]}];var B={};B.name=l+"_mat",B.pbrMetallicRoughness={},B.pbrMetallicRoughness.baseColorFactor=[],B.pbrMetallicRoughness.baseColorFactor.push(n.r3_1,n.s3_1,n.t3_1,n.u3_1),B.pbrMetallicRoughness.metallicFactor=.1,B.pbrMetallicRoughness.roughnessFactor=.6,B.doubleSided=n.v3_1&&n.u3_1<1,n.v3_1&&(B.extensions={},B.extensions.KHR_materials_unlit={}),R.materials=[],R.materials.push(B),n.v3_1&&(R.extensionsUsed=[],R.extensionsUsed.push("KHR_materials_unlit"));var T={bufferView:0,componentType:5126};T.count=o,T.type="VEC3",T.min=[],T.min.push(_[0],_[1],_[2]),T.max=[],T.max.push(s[0],s[1],s[2]);var U={bufferView:1,componentType:5126};U.count=o,U.type="VEC3";var N={bufferView:2,componentType:5123};N.count=u,N.type="SCALAR",R.accessors=[],R.accessors.push(T,U,N);var D={buffer:0,byteOffset:0};D.byteLength=a,D.target=34962;var P={buffer:0};P.byteOffset=a,P.byteLength=c,P.target=34962;var Y={buffer:0};Y.byteOffset=a+c|0,Y.byteLength=f,Y.target=34963,R.bufferViews=[],R.bufferViews.push(D,P,Y);var W=(a+c|0)+f|0,X=(4-(W%4|0)|0)%4|0,K=W+X|0;R.buffers=[];var G={};G.byteLength=W,R.buffers.push(G);for(var H=JSON.stringify(R);H.length%4|0;)H+=" ";var J=H.length,Z=(8+(20+J|0)|0)+K|0,Q=new ArrayBuffer(Z),tt=new DataView(Q),nt=0;tt.setUint32(nt,1179937895,!0),nt=nt+4|0,tt.setUint32(nt,2,!0),nt=nt+4|0,tt.setUint32(nt,Z,!0),nt=nt+4|0,tt.setUint32(nt,J,!0),nt=nt+4|0,tt.setUint32(nt,1313821514,!0),nt=nt+4|0;var et=0,it=E(H)-1|0;if(et<=it)do{var rt=et;et=et+1|0;var ot=nt;nt=ot+1|0;var ut=C(H,rt),_t=j(ut);tt.setUint8(ot,z(_t))}while(et<=it);tt.setUint32(nt,K,!0),nt=nt+4|0,tt.setUint32(nt,5130562,!0),nt=nt+4|0;var st=new Uint8Array(Q),at=new Uint8Array(e.buffer),ht=0;if(ht<a)do{var ct=ht;ht=ht+1|0,st[nt+ct|0]=at[ct]}while(ht<a);nt=nt+a|0;var ft=new Uint8Array(i.buffer),lt=0;if(lt<c)do{var vt=lt;lt=lt+1|0,st[nt+vt|0]=ft[vt]}while(lt<c);nt=nt+c|0;var wt=new Uint8Array(r.buffer),gt=0;if(gt<f)do{var dt=gt;gt=gt+1|0,st[nt+dt|0]=wt[dt]}while(gt<f);nt=nt+f|0;var pt=0;if(pt<X)do{pt=pt+1|0;var mt=nt;nt=mt+1|0,tt.setUint8(mt,0)}while(pt<X);return Q}(0,t,u,_,q,r,o,new Float32Array([s,a,c]),new Float32Array([f,l,v]))},v(Q).y4=function(t,n,e){this.j7_1=t,this.k7_1=n,this.l7_1=e},v(Q).e8=function(){this.t7_1&&!this.z7_1&&(this.g7_1=this.g7_1+this.u7_1),this.v7_1&&(this.g7_1=this.g7_1+this.x7_1,this.h7_1=this.h7_1+this.y7_1,this.x7_1=this.x7_1*this.w7_1,this.y7_1=this.y7_1*this.w7_1);var t=this.o7_1,n=this.p7_1,e=this.h7_1,i=Math.min(n,e);this.h7_1=Math.max(t,i);var r=this.m7_1,o=this.n7_1,u=this.i7_1,_=Math.min(o,u);this.i7_1=Math.max(r,_);var s=this.j7_1,a=this.i7_1,h=this.h7_1,c=a*Math.sin(h),f=this.g7_1,l=s+c*Math.sin(f),v=this.k7_1,w=this.i7_1,g=this.h7_1,d=v+w*Math.cos(g),p=this.l7_1,m=this.i7_1,y=this.h7_1,$=m*Math.sin(y),b=this.g7_1,x=p+$*Math.cos(b);this.f7_1.lookAt(gt(l,d,x),gt(this.j7_1,this.k7_1,this.l7_1),gt(0,1,0))},v(Q).f8=function(){},v(et).l8=function(t,n,e,i){var r,o,u;f(n,(r=t,o=e,u=i,function(){try{var t=Filament.Engine.create(r),n=t.createRenderer(),e=t.createScene(),i=t.createSwapChain(),_=t.createView(),s=Filament.EntityManager.get().create(),a=s instanceof c?s:q(),h=t.createCamera(a);_.setCamera(h),_.setScene(e);var f=r.width,l=r.height;_.setViewport(dt(0,0,f,l));var v=l>0?f/l:1;h.setProjectionFov(45,v,.1,1e3),h.lookAt(gt(0,1.5,5),gt(0,0,0),gt(0,1,0)),h.setExposureDirect(1.1),n.setClearOptions({clearColor:[.05,.05,.07,1],clear:!0}),_.setAmbientOcclusionOptions({enabled:!0,radius:.3,bias:5e-4,intensity:1,quality:1}),_.setBloomOptions({enabled:!0,strength:.1,threshold:!0,levels:4}),_.setTemporalAntiAliasingOptions({enabled:!0});var w=new ft(r,t,n,e,_,h,i,a),g=new lt(w);o(g),g.g8(),u(w)}catch(t){if(!(t instanceof Error))throw t;var d=t;console.error("SceneView: Failed to initialize Filament engine",d)}return y}))},v(et).d7=function(t,n,e,i,r){var o;return n=n===L?[]:n,e=e===L?tt:e,r===L?(this.l8(t,n,e,i),o=y):o=r.l8.call(this,t,n,e,i),o},v(ft).n8=function(t,n,e,i,r){var o=new Q(this.d6_1,this.i6_1);o.i7_1=t,o.y4(n,e,i),o.t7_1=r;var u=o;return this.v6_1=u,u},v(ft).m8=function(t,n){if(t<=0||n<=0)return y;this.d6_1.width=t,this.d6_1.height=n,this.h6_1.setViewport(dt(0,0,t,n)),this.i6_1.setProjectionFov(45,t/n,.1,1e3)},v(ft).x6=function(){if(this.m6_1)return y;this.m6_1=!0,this.n6_1=0,_t(this,0)},v(ft).o8=function(){this.m6_1=!1;var t=this.l6_1;null==t||window.cancelAnimationFrame(t),this.l6_1=null},v(ft).p8=function(t,n){var e,i=this.p6_1;if(null==i){var r=this.e6_1.createAssetLoader();this.p6_1=r,e=r}else e=i;var o,u=e,_=T(t,B(47))+"/",s=window.fetch(t).then(st),a=at(u,this,_,t,n);s.then(a).catch((o=t,function(t){return console.error("SceneView: Error fetching model from "+o,t),y}))},v(ft).q8=function(){this.r8("https://sceneview.github.io/assets/environments/neutral_ibl.ktx")},v(ft).s8=function(t,n){var e,i,r,o=window.fetch(t).then(ht),u=(e=this,i=t,function(t){var n=e.e6_1.createIblFromKtx1(t);return e.r6_1.j3(n),e.g6_1.setIndirectLight(n),console.log("SceneView: IBL loaded from "+i),y});if(o.then(u).catch(function(t){return function(n){return console.error("SceneView: Error loading IBL from "+t,n),y}}(t)),null==n);else{var _=window.fetch(n).then(ct),s=function(t,n){return function(e){var i=t.e6_1.createSkyFromKtx1(e);return t.s6_1.j3(i),t.g6_1.setSkybox(i),console.log("SceneView: Skybox loaded from "+n),y}}(this,n);_.then(s).catch((r=n,function(t){return console.error("SceneView: Error loading skybox from "+r,t),y}))}},v(ft).r8=function(t,n,e){var i;return n=n===L?null:n,e===L?(this.s8(t,n),i=y):i=e.s8.call(this,t,n),i},v(ft).t8=function(t){var n,e=Filament.EntityManager.get().create(),i=e instanceof c?e:q();switch(t.a5_1.h_1){case 0:n=1;break;case 1:n=2;break;case 2:n=4;break;default:k()}var r=n,o=l.Builder(r);o.intensity(t.b5_1),o.color(gt(t.c5_1,t.d5_1,t.e5_1)),o.castShadows(!0),t.a5_1.equals($t())?o.direction(gt(t.f5_1,t.g5_1,t.h5_1)):(o.position(gt(t.i5_1,t.j5_1,t.k5_1)),o.falloff(10)),o.build(this.e6_1,i),this.g6_1.addEntity(i),this.q6_1.r(i)},v(ft).u8=function(t){var n,e=u.f4(t),i=this.p6_1;if(null==i){var r=this.e6_1.createAssetLoader();this.p6_1=r,n=r}else n=i;var o,_=n;try{var s=_.createAsset(e);if(null!=s){var a,h=s.getEntities();this.g6_1.addEntities(h);try{a=s.getInstance().getAnimator()}catch(t){if(!(t instanceof Error))throw t;a=null}var c=a;this.o6_1.r(new nt(s,c)),this.u6_1.x2(),s.loadResources((o=s,function(){return o.releaseSourceData(),y}),null,"",null);var f=console,l=t.l3_1.g_1.toLowerCase();f.log("SceneView: Geometry '"+l+"' added")}else console.error("SceneView: Failed to create geometry asset for "+t.l3_1.toString())}catch(n){if(!(n instanceof Error))throw n;var v=n;console.error("SceneView: Error creating geometry "+t.l3_1.toString(),v)}},v(ft).v8=function(){if(this.o6_1.v())return y;rt(this,o.b3(it(this)))},v(ft).w8=function(){this.o8();var t=this.v6_1;null==t||t.f8();var n=this.p6_1;if(null==n);else{for(var e=this.o6_1.d();e.e();){var i=e.f();n.destroyAsset(i.h8_1)}n.delete()}this.o6_1.k1();for(var r=this.q6_1.d();r.e();){var o=r.f();this.e6_1.destroyEntity(o)}this.q6_1.k1(),null!=this.r6_1.i3_1&&this.g6_1.setIndirectLight(null),this.r6_1.k3(),null!=this.s6_1.i3_1&&this.g6_1.setSkybox(null),this.s6_1.k3(),this.e6_1.destroyRenderer(this.f6_1),this.e6_1.destroyView(this.h6_1),this.e6_1.destroyScene(this.g6_1),this.e6_1.destroyCameraComponent(this.k6_1),this.e6_1.destroySwapChain(this.j6_1),Filament.Engine.destroy(this.e6_1)},v(lt).z5=function(t){var n=new pt;t(n),this.p5_1=n},v(lt).a6=function(t){var n=new mt;t(n),this.q5_1=n},v(lt).c6=function(t){this.v5_1=t},v(lt).b6=function(t){this.w5_1=t},v(lt).g8=function(){this.o5_1.t6_1=this.y5_1;var t=this.p5_1;if(null==t||t.x8(this.o5_1.i6_1),null!=this.q5_1)this.o5_1.t8(U(this.q5_1));else{var n=new mt;n.l5(),n.m5(5e4),n.n5(.6,-1,-.8);var e=n;this.o5_1.t8(e);var i=new mt;i.l5(),i.m5(25e3),i.n5(-.6,-.5,.8);var r=i;this.o5_1.t8(r);var o=new mt;o.l5(),o.m5(3e4),o.y8(.85,.9,1),o.n5(0,-.3,1);var u=o;this.o5_1.t8(u)}null!=this.t5_1?this.o5_1.s8(U(this.t5_1),this.u5_1):this.x5_1&&this.o5_1.q8();for(var _=this.r5_1.d();_.e();){var s=_.f();this.o5_1.p8(s.z8_1,s.a9_1)}for(var a=this.s5_1.d();a.e();){var h=a.f();this.o5_1.u8(h)}if(this.v5_1){var c=this.p5_1,f=(null==c?null:c.i4_1)??5,l=(null==c?null:c.j4_1)??0,v=(null==c?null:c.k4_1)??0,w=null==c?null:c.l4_1;this.o5_1.n8(f,l,v,w??0,this.w5_1)}},v(wt).a7=function(t){this.y6_1=t},v(wt).loadModel=function(t){var n=this.y6_1;return null==n?Promise.reject(F("SceneViewer not initialized")):new Promise(vt(n,t))},v(wt).setEnvironment=function(t){var n=this.y6_1;null==n||n.s8(t,null)},v(wt).setEnvironmentWithSkybox=function(t,n){var e=this.y6_1;null==e||e.s8(t,n)},v(wt).setCameraOrbit=function(t,n,e){var i=this.y6_1,r=null==i?null:i.v6_1;null==r||(r.g7_1=t,r.h7_1=n,r.i7_1=e)},v(wt).setCameraTarget=function(t,n,e){var i=this.y6_1,r=null==i?null:i.v6_1;null==r||r.y4(t,n,e)},v(wt).setAutoRotate=function(t){var n=this.y6_1,e=null==n?null:n.v6_1;null==e||(e.t7_1=t)},v(wt).setAutoRotateSpeed=function(t){var n=this.y6_1,e=null==n?null:n.v6_1;null==e||(e.u7_1=t)},v(wt).setZoomLimits=function(t,n){var e=this.y6_1,i=null==e?null:e.v6_1;null==i||(i.m7_1=t,i.n7_1=n)},v(wt).startRendering=function(){var t=this.y6_1;null==t||t.x6()},v(wt).stopRendering=function(){var t=this.y6_1;null==t||t.o8()},v(wt).resize=function(t,n){var e=this.y6_1;null==e||e.m8(t,n)},v(wt).setBackgroundColor=function(t,n,e,i){var r=this.y6_1;if(null==r)return y;var o=r,u={},_=[];_.push(t,n,e,i),u.clearColor=_,u.clear=!0,o.f6_1.setClearOptions(u)},v(wt).fitToModels=function(){var t=this.y6_1;null==t||t.v8()},v(wt).setAutoCenterContent=function(t){var n=this.y6_1;null==n||(n.t6_1=t)},v(wt).dispose=function(){if(!this.z6_1){this.z6_1=!0;var t=this.y6_1;null==t||t.w8(),this.y6_1=null}},v(pt).x4=function(t,n,e){this.g4_1=t,this.h4_1=n,this.i4_1=e},v(pt).y4=function(t,n,e){this.j4_1=t,this.k4_1=n,this.l4_1=e},v(pt).z4=function(t){this.p4_1=t},v(pt).x8=function(t){t.lookAt(gt(this.g4_1,this.h4_1,this.i4_1),gt(this.j4_1,this.k4_1,this.l4_1),gt(this.m4_1,this.n4_1,this.o4_1)),this.w4_1&&null!=this.v4_1?t.setExposureDirect(U(this.v4_1)):t.setExposure(this.s4_1,this.t4_1,this.u4_1)},v(mt).l5=function(){this.a5_1=$t()},v(mt).m5=function(t){this.b5_1=t},v(mt).y8=function(t,n,e){this.c5_1=t,this.d5_1=n,this.e5_1=e},v(mt).n5=function(t,n,e){this.f5_1=t,this.g5_1=n,this.h5_1=e},new D,o=new W,u=new K,_=new et,function(t){var n=t.io||(t.io={}),e=n.github||(n.github={}),i=e.sceneview||(e.sceneview={});(i.web||(i.web={})).SceneViewer=wt}(t),G(),t})?i.apply(n,r):i)||(t.exports=o)},650(n){"use strict";n.exports=t}},e={},function t(i){var r=e[i];if(void 0!==r)return r.exports;var o=e[i]={exports:{}};return n[i](o,o.exports,t),o.exports}(607);var n,e});
2
2
  //# sourceMappingURL=sceneview-web.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sceneview-web.js","mappings":"CAAA,SAAAA,EAAAC,GACA,iBAAAC,SAAA,iBAAAC,OACAA,OAAAD,QAAAD,EAAAG,QAAA,aACA,mBAAAC,QAAAA,OAAAC,IACAD,OAAA,aAAAJ,GACA,iBAAAC,QACAA,QAAA,iBAAAD,EAAAG,QAAA,aAEAJ,EAAA,iBAAAC,EAAAD,EAAA,SACC,CATD,CASCO,WAAAC,IACD,6QCKIC,EACAC,GADAC,KAAAC,KAAAH,EACAE,KAAAE,KAAAH,CAFmB,YCKnBI,EACAC,EACAC,EACAC,WAHyB,IAAAC,YACA,eACG,eACR,OAHpBP,KAAAQ,KAAAL,EACAH,KAAAS,KAAAL,EACAJ,KAAAU,KAAAL,EACAL,KAAAW,KAAAL,CAJa,qEDlBjB,+BAAAM,EAAAZ,KAAAC,MAAA,aAAAW,EAAAZ,KAAAE,MAAA,8BCAA,yBAAAF,KAAAQ,KAAAI,WAAA,YAAAC,EAAAb,KAAAS,MAAA,kBAAAI,EAAAb,KAAAU,MAAA,WAAAG,EAAAb,KAAAW,MAAA,sCCgBIG,EACAC,WADeC,EAAO,aACLA,EAAO,SAExBC,EC8hBsC,IAAAV,ED9hBjB,GAAPO,EC8hB+BI,KD9hBxB,GAAPJ,EC8hBsCK,KD9hB/B,GAAPL,EC8hB6CM,QD5hBzC,IAAAb,GAAQU,EAAQC,MAAID,EAAQE,KAAGF,EAAQG,MAAzDC,ECykBsC,IAAAd,EDzkB7BQ,ECykBoCG,KAAII,EAAEJ,KDzkB1CH,ECykB6CI,KAAIG,EAAEH,KDzkBnDJ,ECykBsDK,KAAIE,EAAEF,QDxkBnD,IAAAb,EAAOU,EAAQC,MAAID,EAAQE,KAAGF,EAAQG,MAAxDG,ECwkBsC,IAAAhB,EDxkB7BQ,ECwkBoCG,KAAIM,EAAEN,KDxkB1CH,ECwkB6CI,KAAIK,EAAEL,KDxkBnDJ,ECwkBsDK,KAAII,EAAEJ,QDvkBnD,IAAAb,EAAOU,EAAQC,MAAID,EAAQE,MAAIF,EAAQG,MAAzDK,ECukBsC,IAAAlB,EDvkB7BQ,ECukBoCG,KAAIQ,EAAER,KDvkB1CH,ECukB6CI,KAAIO,EAAEP,KDvkBnDJ,ECukBsDK,KAAIM,EAAEN,QDtkBnD,IAAAb,GAAQU,EAAQC,MAAID,EAAQE,MAAIF,EAAQG,MAA1DO,ECskBsC,IAAApB,EDtkB7BQ,ECskBoCG,KAAIU,EAAEV,KDtkB1CH,ECskB6CI,KAAIS,EAAET,KDtkBnDJ,ECskBsDK,KAAIQ,EAAER,QDrkBnD,IAAAb,GAAQU,EAAQC,KAAGD,EAAQE,KAAGF,EAAQG,MAAxDS,ECqkBsC,IAAAtB,EDrkB7BQ,ECqkBoCG,KAAIY,EAAEZ,KDrkB1CH,ECqkB6CI,KAAIW,EAAEX,KDrkBnDJ,ECqkBsDK,KAAIU,EAAEV,QDpkBnD,IAAAb,EAAOU,EAAQC,KAAGD,EAAQE,KAAGF,EAAQG,MAAvDW,ECokBsC,IAAAxB,EDpkB7BQ,ECokBoCG,KAAIc,EAAEd,KDpkB1CH,ECokB6CI,KAAIa,EAAEb,KDpkBnDJ,ECokBsDK,KAAIY,EAAEZ,QDnkBnD,IAAAb,EAAOU,EAAQC,KAAGD,EAAQE,MAAIF,EAAQG,MAAxDa,ECmkBsC,IAAA1B,EDnkB7BQ,ECmkBoCG,KAAIgB,EAAEhB,KDnkB1CH,ECmkB6CI,KAAIe,EAAEf,KDnkBnDJ,ECmkBsDK,KAAIc,EAAEd,QDlkBnD,IAAAb,GAAQU,EAAQC,KAAGD,EAAQE,MAAIF,EAAQG,MAAzDe,ECkkBsC,IAAA5B,EDlkB7BQ,ECkkBoCG,KAAIkB,EAAElB,KDlkB1CH,ECkkB6CI,KAAIiB,EAAEjB,KDlkBnDJ,ECkkBsDK,KAAIgB,EAAEhB,MDhkBrEiB,EAAS,IAAA9B,EAAA+B,EAAW,GACpBC,EAAW,IAAAhC,EAAA+B,GAAY,GACvBE,EAAY,IAAAjC,EAAA+B,EAAAA,GAAY,GACxBG,EAAW,IAAAlC,EAAA+B,EAAAA,EAAW,GACtBI,EAAW,IAAAnC,GAAY,GACvBoC,EAAY,IAAApC,EAAW,GAEvBqC,EAAW,IAAAC,EAAO,EAAI,GACtBC,EAAW,IAAAD,EAAO,EAAI,GACtBE,EAAW,IAAAF,EAAO,EAAI,GACtBG,EAAW,IAAAH,EAAO,EAAI,GAEtB/C,EAAemD,EAEX,KAAAC,EAAkB7B,EAAakB,EAAqBQ,GACpD,IAAAG,EAAkB3B,EAAagB,EAAqBS,GACpD,IAAAE,EAAkBzB,EAAac,EAAqBO,GACpD,IAAAI,EAAkBvB,EAAaY,EAAqBK,GAEpD,IAAAM,EAAkBf,EAAaO,EAAqBK,GACpD,IAAAG,EAAkBrB,EAAaa,EAAqBM,GACpD,IAAAE,EAAkB7B,EAAaqB,EAAqBI,GACpD,IAAAI,EAAkBvB,EAAae,EAAqBE,GAEpD,IAAAM,EAAkBrB,EAAaY,EAAqBM,GACpD,IAAAG,EAAkBnB,EAAaU,EAAqBO,GACpD,IAAAE,EAAkB3B,EAAakB,EAAqBK,GACpD,IAAAI,EAAkB7B,EAAaoB,EAAqBG,GAEpD,IAAAM,EAAkBjB,EAAaO,EAAsBO,GACrD,IAAAG,EAAkBf,EAAaK,EAAsBQ,GACrD,IAAAE,EAAkBvB,EAAaa,EAAsBM,GACrD,IAAAI,EAAkBzB,EAAae,EAAsBI,GAErD,IAAAM,EAAkBnB,EAAaY,EAAsBI,GACrD,IAAAG,EAAkBjB,EAAaU,EAAsBK,GACrD,IAAAE,EAAkBzB,EAAakB,EAAsBG,GACrD,IAAAI,EAAkB3B,EAAaoB,EAAsBC,GAErD,IAAAM,EAAkBf,EAAaE,EAAmBU,GAClD,IAAAG,EAAkBjB,EAAaI,EAAmBW,GAClD,IAAAE,EAAkBnB,EAAaM,EAAmBS,GAClD,IAAAI,EAAkBrB,EAAaQ,EAAmBO,OEX/CO,IFiBOC,EAAA,EAAV,GAAAA,EAFgB,IAEhB,KAAKC,EAAKD,EAAAA,EAAAA,EAAA,QACNE,EAAWC,EAFO,EAEWF,GAE7BG,EAAAC,EAAI,EAAIH,EAAR,GAAeE,EAAAC,EAAI,EAAIH,EAAR,GAAeE,EAAAC,EAAI,EAAIH,EAAR,GAE9BE,EAAAC,EAAI,EAAIH,EAAR,GAAeE,EAAAC,EAAI,EAAIH,EAAR,GAAeE,EAAAC,EAAI,EAAIH,EAAR,SALlCF,EAFgB,GAWpB,OAAO,IAAAM,EAAa5D,EGAb0D,ED1BoCG,KF2B/C,mBInEIC,EACAC,EACA9C,EACA+C,WAHgB,YACA,YACC9C,EAAO,aACP,WFqCVmC,IElCHY,EAAiBF,EAAS,EAC1BG,EAAqB,UAASF,EAC9BG,EAAY,EACZC,EAAY,EAAKJ,EAEjBK,ECyEgDhB,IDxEhDiB,ECwEgDjB,IDvEhDkB,ECuEgDlB,IDrEnCC,EAAA,EAAb,GAAAA,GAAgBU,IAAhB,KAAKQ,EAAQlB,EAAAA,EAAAA,EAAA,UAGYa,IAAbL,EEukB4BW,KAAWC,IAAIC,MFvkBjBV,IAA6BE,EE8jBWS,EAAtCH,KAAWI,IAAIC,KF/jB/B,IAAArE,EAAAsE,EAAAC,EAC8BlB,EAASc,GAD3DK,EHwjB8B,IAAAxE,EAAOyE,EAAA9D,KGtjBjCH,EHsjBuCG,KAAG8D,EAAA7D,KGtjB1CJ,EHsjBgDI,KAAG6D,EAAA5D,KGtjBnDL,EHsjByDK,MGrjB7DoC,EAAAC,EACI,IAAAP,EACe6B,EACFE,EAAU,IAAA1E,EAAWwE,EAAc7D,KAAIH,EAAOG,KAAO,EAAQ6D,EAAc3D,KAAIL,EAAOK,OAChF,IAAAyB,EAAWqB,EAAQI,EAAU,KAKpDH,EAAiBV,EACb,IAAAP,EACe6B,EACF,IAAAxE,EAAA+B,GAAY,GACN,IAAAO,EAAWqB,EAAQI,EAAU,WAM/BL,IAAbL,EEkjB4BW,KAAWC,IAAIU,KFljBWjB,EEyiBYkB,EAAtCZ,KAAWI,IAAIS,KF1iB/B,IAAA7E,EAAA8E,EACatB,EAAgBH,EAASuB,GAD1DG,EHmiB8B,IAAA/E,EAAOgF,EAAArE,KGjiBjCH,EHiiBuCG,KAAGqE,EAAApE,KGjiB1CJ,EHiiBgDI,KAAGoE,EAAAnE,KGjiBnDL,EHiiByDK,MGhiB7DiD,EAAkBZ,EACd,IAAAP,EACeoC,EACFL,EAAU,IAAA1E,EAAW+E,EAAcpE,KAAIH,EAAOG,KAAO,EAAQoE,EAAclE,KAAIL,EAAOK,OAChF,IAAAyB,EAAWqB,EAAQI,EAAU,WAQnC,IAAA/D,EAAA+B,EAAW,KAEP2B,KEkiBeM,KAAWC,IAAIgB,GFliBrB,GAAM,IACfvB,EEwhBqDwB,EAAtClB,KAAWI,IAAIe,GF9hBnDtB,EAAiBX,EACb,IAAAP,EACeoC,EADfK,EAGmB,IAAA9C,EAAA+C,GAENH,EAAa,GAAM,KAIpCxB,GAASD,QA7CbM,IAAgBR,GAgDhBN,EAAAqC,EAAOxB,SAKqB,IAAA9D,EAAA+B,GAAYyB,GHqgB2B+B,EAAjC,IAAAvF,EGrgBfQ,EHqgBsBG,KAAII,EAAEJ,KGrgB5BH,EHqgB+BI,KAAIG,EAAEH,KGrgBrCJ,EHqgBwCK,KAAIE,EAAEF,MGvgBjEoC,EAAAC,EACI,IAAAP,EACe4C,EACF,IAAAvF,EAAA+B,GAAY,GACN,IAAAO,EAAW,GAAU,MAG5CW,EAAAqC,EAAO1B,SAKqB,IAAA5D,EAAA+B,EAAWyB,GH2f4BgC,EAAjC,IAAAxF,EG3ffQ,EH2fsBG,KAAIM,EAAEN,KG3f5BH,EH2f+BI,KAAIK,EAAEL,KG3frCJ,EH2fwCK,KAAII,EAAEJ,MG7fjEoC,EAAAC,EACI,IAAAP,EACe6C,EACF,IAAAxF,EAAA+B,EAAW,GACL,IAAAO,EAAW,GAAU,MAG5CW,EAAAqC,EAAOzB,OA9EXtE,ED6DO0D,ED1BoCG,OAApCR,IE+CU6C,EAAA,EAAb,GAAAA,EAAqBlC,IAArB,KAAKQ,EAAQ0B,EAAAA,EAAAA,EAAA,QACTC,EAAkBC,EAAO,EAAzBD,EACAE,EAAiC,GAAnBD,EAAOpC,EAAP,GAAdqC,EACAC,EAAkC,GAAnBF,EAAOpC,EAAP,GAAfsC,EACAC,EAAuB9C,EAAA,EAAKO,EAAY,EAAjB,GACvBwC,EAAsD,GAA/BD,EAAmBvC,EAAnB,GAAvBwC,EAGAC,EAAA9C,EAAIyC,GAAOK,EAAA9C,EAAI2C,GAAWG,EAAA9C,EAAIwC,GAE9BM,EAAA9C,EAAIyC,GAAOK,EAAA9C,EAAI0C,GAAUI,EAAA9C,EAAI2C,GAE7BG,EAAA9C,EAAI4C,GAAmBE,EAAA9C,EAA8B,GAA1B4C,EAAmBH,EAAnB,GAAJ,GAAkCK,EAAA9C,EAA8B,GAA1B4C,EAAmBH,EAAnB,GAAJ,GAEzDK,EAAA9C,EAAI6C,GAAmBC,EAAA9C,EAA8B,GAA1B6C,EAAmBJ,EAAnB,GAAJ,GAAkCK,EAAA9C,EAA8B,GAA1B6C,EAAmBJ,EAAnB,GAAJ,SAd7DF,EAAqBlC,GAkBzB,OAAO,IAAAJ,EAAa5D,EDvCbyG,ED1BoC5C,KEkE/C,mBG/GI7C,EACAC,EACAX,WAFeoG,EAAO,aACLxF,EAAO,aACP,IAAAT,EAAA+B,EAAW,WAEd,IAAA/B,EAAOO,EAAK2F,KAAG3F,EAAK4F,KAAG,GAArCzF,ENkiBoC,IAAAV,EAAOiD,EAAAtC,KMliBA,ENkiBOsC,EAAArC,KMliBP,ENkiBcqC,EAAApC,KMliBd,KAIf,IAAAb,GAAYU,EAAQC,MAAQD,EAAQE,KAAOF,EAAQG,QAD3E,IAAA8B,ENukBkC,IAAA3C,EMtkBnBQ,ENskB0BG,KAAII,EAAEJ,KMtkBhCH,ENskBmCI,KAAIG,EAAEH,KMtkBzCJ,ENskB4CK,KAAIE,EAAEF,MMrkBpDhB,EACM,IAAAyC,EAAO,EAAI,MAGN,IAAAtC,GAAYU,EAAQC,KAAOD,EAAQE,MAAQF,EAAQG,QAD3E,IAAA8B,ENkkBkC,IAAA3C,EMjkBnBQ,ENikB0BG,KAAIM,EAAEN,KMjkBhCH,ENikBmCI,KAAIK,EAAEL,KMjkBzCJ,ENikB4CK,KAAII,EAAEJ,MMhkBpDhB,EACM,IAAAyC,EAAO,EAAI,MAGN,IAAAtC,EAAWU,EAAQC,KAAOD,EAAQE,MAAQF,EAAQG,QAD1E,IAAA8B,EN6jBkC,IAAA3C,EM5jBnBQ,EN4jB0BG,KAAIQ,EAAER,KM5jBhCH,EN4jBmCI,KAAIO,EAAEP,KM5jBzCJ,EN4jB4CK,KAAIM,EAAEN,MM3jBpDhB,EACM,IAAAyC,EAAO,EAAI,MAGN,IAAAtC,EAAWU,EAAQC,MAAQD,EAAQE,KAAOF,EAAQG,MNujBPuF,EAAjC,IAAApG,EMvjBnBQ,ENujB0BG,KAAIU,EAAEV,KMvjBhCH,ENujBmCI,KAAIS,EAAET,KMvjBzCJ,ENujB4CK,KAAIQ,EAAER,MM5iBrE,OAAO,IAAAsC,EA5BQT,EACX,CAAA4B,EAAAC,EAAAO,EAeA,IAAAnC,EACeyD,EACFvG,EACM,IAAAyC,EAAO,EAAI,MAIpBI,EACV,GAAG,EAAG,EACN,EAAG,EAAG,IAId,mBC/BIW,EACA7C,EACA6F,EACAC,WAHgB,YACC7F,EAAO,aACV,aACA,WNsCPmC,IMnCWC,EAAA,EAAd,GAAAA,GAAiBwD,IAAjB,KAAKE,EAAS1D,EAAAA,EAAAA,EAAA,QACV2D,EAAU,UAAKD,EAAkBF,EACnBZ,EAAA,EAAd,GAAAA,GAAiBa,IAAjB,KAAKG,EAAShB,EAAAA,EAAAA,EAAA,QACV/B,EAAY,WAAc+C,IAASH,EAAQ,EAAOG,GAAmBH,IFwkBrCtC,KAAWI,IEtkB/BoC,GF+kBoBxC,KAAWC,IE/kBpBP,KF+kBSM,KAAWC,IE9kB/BuC,KFqkBoBxC,KAAWI,IEpkB/BoC,GFokB0DrC,EAAtCH,KAAWI,IEpkBpBV,KAHR,IAAA1D,EAAAuE,EAAAO,EAGPM,EAAWjB,GAHnBvE,EPmhB0B,IAAAI,EAAOyE,EAAA9D,KO/gB7B0C,EP+gBoCoB,EAAA7D,KO/gBpCyC,EP+gB2CoB,EAAA5D,KO/gB3CwC,GACJxD,EAAa6E,EAAU9E,KACvBA,EAAAA,EP0jB0B,IAAAI,EAAOgF,EAAArE,KO1jBrBH,EP0jB2BG,KAAGqE,EAAApE,KO1jB9BJ,EP0jBoCI,KAAGoE,EAAAnE,KO1jBvCL,EP0jB6CK,UOzjBzDf,EAAmB,IAAAwC,EACX,EAAKmE,EAAkBH,EACvB,EAAKC,EAAkBF,GAE/BpD,EAAAC,EAAI,IAAAP,EAAkB/C,EAAmBC,EAAuBC,UAbpE2G,IAAiBH,SAFrBC,IAAiBF,OADrB9G,EL8DO0D,ED1BoCG,OAApCR,IMdH7B,EAAQ,EACM2F,EAAA,EAAd,GAAAA,EAAsBL,IAAtB,KAAKE,EAASG,EAAAA,EAAAA,EAAA,QACIC,EAAA,EAAd,GAAAA,EAAsBL,IAAtB,KAAKG,EAASE,EAAAA,EAAAA,EAAA,QAEVC,EAAgBC,KAASR,EAAS,EAAlB,GAChBS,EAAWC,EAAQ,EAAnBD,EAFsB,IAATD,IAITb,EAAA9C,EAAInC,EAAIgG,EAAR,GACAf,EAAA9C,EAAInC,EAAI+F,EAAR,GACAd,EAAA9C,EAAyB,IAArBnC,EAAIgG,EAAJ,GAAYT,EAAZ,GAAJ,IAECM,IACDZ,EAAA9C,EAAInC,EAAI+F,EAAR,GACAd,EAAA9C,EAAwB,IAApBnC,EAAI+F,EAAJ,GAAWR,EAAX,GAAJ,GACAN,EAAA9C,EAAyB,IAArBnC,EAAIgG,EAAJ,GAAYT,EAAZ,GAAJ,UAZRK,EAAsBL,GAetBvF,EAAAA,GAAKuF,EAAS,EAAd,WAhBJI,EAAsBL,GAoB1B,OAAO,IAAAlD,EAAa5D,ELmBbyG,ED1BoC5C,KMQ/C,sDC1D0C,iBAAf/D,aACX2H,OAAOC,eAAeD,OAAOE,UAAW,YAAa,CACjDC,IAAA,WACI,OAAO1H,IAAP,EAEJ2H,cAAc,IAElBC,UAAUhI,WAAagI,iBAChBL,OAAOE,UAAUG,gBCTH,IAAdrD,KAAKhB,OACdgB,KAAKhB,KAAK,SAAgBsE,EAAGC,GAC3B,OAAa,WAAJD,IAAuB,MAAJC,IAAmB,MAAJD,IAAmB,EAAJC,GAAU,CAApE,QCF8B,IAAvBC,YAAYC,SACnBD,YAAYC,OAAO,SAAWH,GAC1B,OAAY,MAALA,GAA4B,MAAfA,EAAEI,WAAqBJ,EAAEI,UAAUA,YAAcC,UAAUT,UAAUQ,SAAzF,iGC2GhBE,EACAC,EACAC,EACAC,EACAC,EACAC,8DC/GJ,YC8sxBeC,EAA0BC,EAAgCC,EAA2BC,EAA4BC,EAAiBC,EAAiCC,GAC9K,eAD+D,eAA6B,aAA4B,cAAiB,YAA8B,gBAA2C,gBAtPvLN,EAAoBO,EAAWN,EAAgCC,EAA2BC,EAA4BC,EAAiBC,EAAiCC,WAA/G,eAA6B,aAA4B,cAAiB,YAA8B,gBAA2C,OACvOC,EAAOC,EAAON,OACdO,EAAY,EACI9F,EAAA,EAAA+F,EAAAC,EAAAC,cAAhBjG,EAAgB+F,GAAhB,KAAKG,EAAWF,EAAAhG,GAER,GAFQA,EAAAA,EAAA,KACN8F,EAAAA,EAAF,EAAE,GAAQ,GAAGF,EAAOC,EAAOP,KAC3BG,EAAQ,GAAKK,GAASL,GAEnB,MAAAU,EADIC,GAAPR,EAAqBM,EAASP,GAKtC,OAFIF,GAAS,GAAKK,EAAQL,GAAOG,EAAOC,EAAOH,GAC/CE,EAAOC,EAAOL,GACPI,CACX,CA2OWS,CAAAL,EAAOM,KAAiBhB,EAAWC,EAAQC,EAASC,EAAOC,EAAWC,GAAWnI,UAC5F,YC5oqBe6H,EAAyBC,EAAgCC,EAA2BC,EAA4BC,EAAiBC,EAAiCC,GAC7K,eAD8D,eAA6B,aAA4B,cAAiB,YAA8B,gBAA2C,gBAtBtLN,EAAmBO,EAAWN,EAAgCC,EAA2BC,EAA4BC,EAAiBC,EAAiCC,WAA/G,eAA6B,aAA4B,cAAiB,YAA8B,gBAA2C,OACtOC,EAAOC,EAAON,OACdO,EAAY,EACIS,EAAAP,EAAAQ,WAAAD,EAAAE,KAAM,KAAjBP,EAAWK,EAAAG,IAER,IADEZ,EAAAA,EAAF,EAAE,GAAQ,GAAGF,EAAOC,EAAOP,KAC3BG,EAAQ,GAAKK,GAASL,GAEnB,MAAAU,EADIC,GAAPR,EAAqBM,EAASP,EAEtC,CAGA,OAFIF,GAAS,GAAKK,EAAQL,GAAOG,EAAOC,EAAOH,GAC/CE,EAAOC,EAAOL,GACPI,CACX,CAWWe,CAAAX,EAAOM,KAAiBhB,EAAWC,EAAQC,EAASC,EAAOC,EAAWC,GAAWnI,UAC5F,YCvjH2BoJ,EAAcC,GACd,OAAnBD,EAAcC,EAAK,aAkGAD,GACnB,OAAOE,OAAaC,aAAaH,8BC7GrC,YAVsHI,EAAgCC,GAAxFrK,KAAAsK,IAAAF,EAA0EpK,KAAAuK,IAAAF,CAAtF,YCMpC5B,GAAoD,OAApB,MAANW,EAAM,KAAAoB,GAANpB,KAAoB,MAAK,qBCipCnBpJ,KAAAyK,IAAA,IAAAC,EAAA,eAKA1K,KAAA2K,IAAA,IAAAD,GAAA,cAMA1K,KAAA4K,IAAA,EAMD5K,KAAA6K,IAAA,EArB7C,YADiDC,EAA8CC,kBAHnGC,EAAAC,KAAAjL,MAGqBA,KAAAkL,IAAAJ,EAA8C9K,KAAAmL,IAAAJ,CAA1D,cCppBD,YAAAK,CAAO,cAIN,YAAAC,CAAM,cAGP,YAAAC,CAAU,cAMV,YAAAC,CAAY,cAGZ,YAAAC,CAAc,YA/WT/C,EAAawB,GAClB,QAAAwB,EAAArC,EAAWa,GACX,OAAO,MAGXyB,EAAcC,EAAAvC,GACdwC,EAAqBD,EAAN1B,GAEf,OACIyB,IAAYE,GAAY,GACvBF,GAAWE,EAAY,EAERD,EAAhBE,EAAAzC,EAASa,KAAuB,EACxB,CAEhB,YAhHaxB,GAA8B,YAAHW,EAAA8B,GAAE,YA5B7BzC,GAA+D,YAAtC,WAAPW,EAAA+B,aA+BnB1C,GAAmF,YAAnDW,EAAA8B,KAAO,EAAG9B,EAAA8B,IAAoB,WAAkB9B,EAAA8B,GAAE,CA/BtCY,CAAA1C,EAAmB,YA0C9DX,EAAkBsD,GACvB,QAAAC,EAAA5C,GACA,MAAO,IAGP,GAAAuC,EAAAvC,GAAc,CACV,GAAAqC,EAAArC,EAAW6C,UAGXC,EAAgBC,EAAQJ,GACxBK,EAAUC,GAAAjD,EAAI8C,GACdI,EAAiDC,EAAfV,EAApBW,EAAJJ,EAAaF,GAAoB9C,IAE3C,OAAWqD,EAAJL,EAAiBL,GAASO,EAAgB1L,SAASmL,GAE1D,MAAQ,IAAYU,EAATC,EAAAtD,GAAsB2C,EAEzC,SAIAY,EACa,IAATZ,EAAc,GACdA,GAAS,GAAM,EACfA,GAAS,GAAM,EACfA,GAAS,GAAM,EACP,EAEZa,EAAmBC,EAAWtI,KAAOuI,IAAIf,EAAkBY,IAE3DL,EAAUlD,EACV2D,EAAa,KACA,KACTC,EAAiBX,GAAJY,EAAQL,GAErBM,EADyDX,EAAxCV,EAAJoB,EAAoBT,EAAPQ,EAAgBJ,KACVhM,SAASmL,GAGrC,GAAIC,EADRiB,EAAMD,GAEF,OAAOE,EAASH,OAETG,EAAO7D,OAASsD,GACnBO,EAAS,IAAMA,EAEnBH,EAASG,EAASH,CAE1B,CACJ,YAoBatE,EAAgBwB,GAAqD,YAAtCb,EAAA+B,MAAQlB,EAAMkB,KAAQ/B,EAAA8B,MAAOjB,EAAMiB,GAAE,YAmU5DiC,GAAuD,YAArC,IAAAzC,EAAKyC,EAAWA,EAAQ,GAAG,EAAQ,EAAC,YA1U/D1E,GAA4B,YAARW,EAAA+B,IAAO,aAiF1B1C,EAAcwB,GAAsC,YAAvBmD,GAAAhE,EAAUsD,EAANzC,GAAkB,YApFpDxB,GAAqC,YAAb,IAARW,EAAA+B,KAAoB,IAAP/B,EAAA8B,GAAO,YA2FnCzC,EAAcwB,GACnB,QAAA+B,EAAA5C,GACA,OAAOiE,IACA,GAAMrB,EAAN/B,GACP,OAAOoD,IAGP,GAAA5B,EAAArC,EAAW6C,KACX,OAAiBqB,GAANrD,GAAegC,IAAeoB,IAClC,GAAM5B,EAANxB,EAAiBgC,KACxB,OAAWqB,GAAAlE,GAAS6C,IAAeoB,IAGnC,GAAA1B,EAAAvC,GACA,OAAiBuC,EAAN1B,GACEuC,EAATE,EAAAtD,GAAwBsD,EAANzC,IAEOyC,EAAhBF,EAATE,EAAAtD,GAAkBa,IAEf,GAAM0B,EAAN1B,GACP,OAAgCyC,EAAzBF,EAAApD,EAAesD,EAANzC,KAIhB,GAAAsD,GAAAnE,EAASoE,MAAsBD,GAANtD,EAAeuD,KACxC,OAAOX,EAAWY,EAAArE,GAAmBqE,EAANxD,QAMnCyD,EAAUtE,EAAA+B,MAAU,GAApBuC,EACAC,EAAmB,MAATvE,EAAA+B,IACVyC,EAAUxE,EAAA8B,MAAS,GAAnB0C,EACAC,EAAkB,MAARzE,EAAA8B,IAEV4C,EAAU7D,EAAMkB,MAAU,GAA1B2C,EACAC,EAAyB,MAAf9D,EAAMkB,IAChB6C,EAAU/D,EAAMiB,MAAS,GAAzB8C,EACAC,EAAwB,MAAdhE,EAAMiB,IAEhBgD,EAAU,EACVC,EAAU,EACVC,EAAU,EACVC,EAAU,EAqBV,OAnBAD,EAAAA,IADAC,EAAAA,EAAO9K,EAAAsK,EAAMI,GAAb,KACgB,GAAhB,KACAI,GAAc,MAKdF,GAHAA,EAAAA,IADAC,EAAAA,EAAO7K,EAAAqK,EAAMK,GAAb,KACgB,GAAhB,QAEAG,GADAA,GAAc,OACP7K,EAAAsK,EAAMG,GAAb,KACgB,GAAhB,KACAI,GAAc,MAQdF,GAHAA,GAHAA,EAAAA,IADAC,EAAAA,EAAO5K,EAAAoK,EAAMM,GAAb,KACgB,GAAhB,QAEAE,GADAA,GAAc,OACP5K,EAAAqK,EAAMI,GAAb,KACgB,GAAhB,QAEAG,GADAA,GAAc,OACP5K,EAAAsK,EAAME,GAAb,KACgB,GAAhB,KACAI,GAAc,MACdD,EAAAA,KAAO3K,EAAAmK,EAAMO,GAAM1K,EAAAoK,EAAMK,GAAlB,GAAwBzK,EAAAqK,EAAMG,GAA9B,GAAoCxK,EAAAsK,EAAMC,GAAjD,KAEO,IAAApD,EAAK0D,GAAQ,GAAMC,GAD1BH,GAAc,QACyB,GAAMC,EACjD,YAhKa1F,GAAmC,YAAb2E,YAoUtB3E,GAAqD,YAArC,IAAAiC,GAAKtB,EAAK8B,KAAW9B,EAAK+B,IAAU,CApU9BmD,CAAAlF,GAAW,IAAAsB,EAAA,KAAC,YAmWvByC,GAChB,QAAMoB,GAANpB,GACA,OAAOE,IACA,GAAAF,IAAU,mBACjB,OAAOlB,IACA,GAAAkB,EAAQ,GAAK,mBACpB,YA6BAqB,EA5BO,GAAArB,EAAQ,EACf,OAA0BT,EAAnBG,GAAYM,QAEnBsB,EAAe,WACf,OAAO,IAAA/D,EACSyC,EAAUsB,EAAW,EACrBtB,EAAQsB,EAAU,EAG1C,aAhUahG,EAASwB,YAGlByD,EAAUtE,EAAA+B,MAAU,GAApBuC,EACAC,EAAmB,MAATvE,EAAA+B,IACVyC,EAAUxE,EAAA8B,MAAS,GAAnB0C,EACAC,EAAkB,MAARzE,EAAA8B,IAEV4C,EAAU7D,EAAMkB,MAAU,GAA1B2C,EACAC,EAAyB,MAAf9D,EAAMkB,IAChB6C,EAAU/D,EAAMiB,MAAS,GAAzB8C,EAGAE,EAAU,EACVC,EAAU,EACVC,EAAU,EACVC,EAAU,EAYV,OAFAH,GAFAA,EAAAA,IADAC,GAFAA,EAAAA,IADAC,GAFAA,EAAAA,IADAC,EAAAA,GAAOR,GANiB,MAAd5D,EAAMiB,KAMhB,QACgB,GAAhB,OAEO0C,EAAMI,EAAb,QACgB,GAAhB,OAEOL,EAAMI,EAAb,QACgB,GAAhB,OAEOL,EAAMI,EAAb,KAEO,IAAApD,GANP0D,GAAc,QAMO,IATrBC,GAAc,QAQdH,GAAc,QAC4B,IAH1CC,GAAc,OAIlB,aAvEY1F,GAA6B,cAAD,GAAbW,EAAA8B,IAAa,aAQ5BzC,EAAcwB,GAAiC,YAAlByE,EAAAtF,EAAQa,GAAS,cAsJ7CxB,EAAYwB,GACjB,QAAM+B,EAAN/B,GACA,MAAM0E,GAAU,oBACT,GAAA3C,EAAA5C,GACP,OAAOiE,IAGP,GAAA5B,EAAArC,EAAW6C,KAAY,CACnB,GAAMR,EAANxB,EAAiB2E,MAAcnD,EAANxB,EAAiB4E,KAC1C,OAAO5C,IACA,GAAMR,EAANxB,EAAiBgC,KACxB,OAAO2C,QAIPE,WA0ECrG,EAAesG,YAExBA,EAA0B,GAAZA,EACV,OAAW,IAAXC,EACO5F,EAEH4F,EAAU,GACH,IAAAtE,EAAKtB,EAAA8B,KAAQ8D,EAAU5F,EAAA+B,KAAS6D,EAAa5F,EAAA8B,OAAU,GAAK8D,EAAf,IAE7C,IAAAtE,EAAK,EAAGtB,EAAA8B,MAAS8D,EAAU,GAAnB,GAG3B,CAtF6CC,CAAX5C,YA6FrB5D,EAAgBsG,YAEzBA,EAA0B,GAAZA,EACV,OAAW,IAAXC,EACO5F,EAEH4F,EAAU,GACH,IAAAtE,EAAMtB,EAAA8B,MAAS8D,EAAa5F,EAAA+B,MAAU,GAAK6D,EAAf,GAA0B5F,EAAA+B,KAAS6D,GAE/D,IAAAtE,EAAKtB,EAAA+B,MAAU6D,EAAU,GAApB,GAA6B5F,EAAA+B,KAAQ,EAAG,GAAO,EAGvE,CA1G2B+D,CAAA9F,EAAW,GACAa,GAAiB,GACvC,OAAOwB,EAAPqD,EAAkBzB,KACD1B,EAAN1B,GAAoB2E,IAASC,IAG1BzB,GAAP0B,EAAezC,GADZR,EAAAzC,EAAeoD,EAANvC,EAAe6E,IACR7E,GAGtC,CAAW,GAAMwB,EAANxB,EAAiBgC,KACxB,OAAOoB,IAGP,GAAA1B,EAAAvC,GACA,OAAiBuC,EAAN1B,GACEoC,GAATK,EAAAtD,GAAmBsD,EAANzC,IAEOyC,EAAXL,GAATK,EAAAtD,GAAaa,IAEV,GAAM0B,EAAN1B,GACP,OAA2ByC,EAApBL,GAAAjD,EAAUsD,EAANzC,aAQfkF,EAAU9B,IACVf,EAAUlD,EACCgG,GAAJnC,EAAuBhD,IAAQ,SAGlCoF,EAAuB5B,EAAJR,GAAuBQ,EAANxD,GACpCqF,EAAc/K,KAAOgL,IAAI,EAAKhL,KAAOiL,MAAMH,IAI3CI,EAAWlL,KAAOmL,KAAKnL,KAAOoL,IAAIL,GAAW/K,KAAOqL,KACpDC,EAAgBJ,GAAQ,GAAI,EAASlL,KAAOuI,IAAI,EAAK2C,EAAO,IAI5DK,EAAgBjD,EAAWyC,GAC3BS,EAA0BvD,EAAVsD,EAAmB7F,GAClB0B,EAAVoE,IAAoCC,GAAVD,EAAsB9C,IAGnD8C,EAAsBvD,EADtBsD,EAAYjD,EADZyC,GAAWO,GAEoB5F,GAKrB+B,EAAV8D,KACAA,EAAYlB,KAGhBO,EAAU/B,GAAJ+B,EAAQW,GACd7C,EAAUpB,EAAJoB,EAAa8C,EACvB,CACA,OAAOZ,CACX,aA7NY1G,EAAiBwB,GAAiC,YAAlByE,EAAAtF,EAAQa,GAAS,cAIjDxB,EAAwBwB,GAAkC,YAAnByE,EAAAtF,EAAQa,IAAU,cAuXwCgG,GAAiB,kBAAfA,IAItFpI,EAJsFoI,OAI/DC,GAAUrI,IAAqB,cAAfA,EAAEsI,YAAzCtI,CAJsG,0BApB5GsE,EAAQ,KAIRA,EAAQ,KAGLA,GAAQ,KAGN,IAAAzB,GAAK,EAAI,cAGT,IAAAA,EAAK,GAAG,cAGNyB,EAAQ,UAIJ,IAAAiE,GAAgCC,MAAkC,YAAaC,iBCzgBhFzI,EAAiB0I,GAC1C,OAAWC,GAAS3I,GACd4I,GAAF5I,EAAa0I,GAEb1I,EAAAC,EAAEyI,EAEV,aAyBsB1I,GAElB,uBAAOA,CACX,aAvCaY,EAAkB8H,GAAiD,OAA7BnH,EAAYqH,WAAWF,EAAK,aAgB/C1I,GAC5B,OAAW2I,GAAS3I,GAChBA,EAAqBwB,OAErBxB,EAAEA,GAEV,aC1BiFoI,GAAc,OAAZzF,GAASyF,EAAI,aCIzEpI,EAAYC,SAAmB,cAAeD,OACjE,WACmB,iBAANC,EACL4I,GAAgB7I,EAAGC,GACvBA,aAAA4C,EACIgG,GAAgB7I,EAAK4F,EAAF3F,IAEnB6I,GAAmB9I,EAAGC,aAG9B,aAAU,cAAW,WAAY6I,GAAmB9I,EAAGC,4BAMAD,EAAkBC,GAC3D,OAAdD,EAAE+I,EAAU9I,EAAC,CALL+I,CAA2BhJ,EAAGC,GACzC,OAAAjD,CAAD,aAa6BgD,EAAYC,SAEjC,GAAAD,EAAIC,KAAK,OACT,GAAAD,EAAIC,IAAK,OAET,GAAAD,IAAMC,SACE,GAAM,IAAND,IACA,WAEAiJ,EAAS,EAAgBjJ,IACrBiJ,IAAO,EAAgBhJ,EACvB,EACOgJ,EAAK,GACZ,EAEA,aAKZjJ,GAAMA,EACEC,GAAMA,EAAG,EAAO,GAEhB,EACX,OAAAjD,CAAD,aA/B4BgD,EAAYC,GAKvC,OAHGD,EAAIC,GAAK,EACTD,EAAIC,EAAK,EACD,CACZ,aCHkBiJ,GAKrB,OAJQ,MAALA,EAAa,gBC4COA,GAAkD,OAApCb,GAAUa,IAAM/I,EAAkB+I,EAAC,CD3CrEC,CAAWD,GAAM,QACO,mBAAfA,EAAEnQ,kBAKUmQ,GAA6D,OAAvCxJ,OAAaE,UAAU7G,SAASqK,KAAK8F,EAAC,CAL3CE,CAAYF,GACzCA,EAAEnQ,UACf,aA4L8BsQ,GACA,eADY,OECnC3J,OAAO4J,OAAOD,EFAQ,aA3EHE,EAAqBC,GACN,MAAjCC,MAAYC,kBACZD,MAAYC,kBAAkBH,EAAUC,GAExCD,EAAAtK,OAAA,IAAoCwK,OAAWxK,KAEvD,aA+DqB0K,GACU,OEAxBA,EAAY/J,SFAW,aA9DJgK,EAAkBC,SACpC,GAAAC,GAAYF,UACR,GAAAE,GAAYD,KAAQD,UAAoB,MAAPC,EAAO,KAAPA,EAAO9Q,aAAc0B,aACvDmP,GAAWnP,EAAI,OAAAuC,CAAD,aAgDAsI,GAAyC,OAAdA,IAAU7K,CAAG,aArBpCsP,EAAgBH,EAAkBC,GAC3DG,GAAsBD,EAAO,UAAWE,GAAcL,EAASC,IAC/DG,GAAsBD,EAAO,QAASF,GACtCG,GAAsBD,EAAO,OAAQrK,OAASwK,eAAeH,GAAOJ,YAAYpH,KACpF,aATkCwH,EAAgBxH,EAAc+C,GECzD5F,OAAOC,eAAeoK,EAAOxH,EAAM,CAAEzC,cAAc,EAAMqK,UAAU,EAAM7E,MAAOA,GFCvF,eGrKI,MAAM8E,IACV,af+DIC,EACA9H,EACAjC,EACAC,EACAC,EACAC,EACAC,EACAC,GAGA2J,GADW,QACWD,EAAM9H,EAAMjC,EAAoBC,EAAQC,EAAYC,EAAcC,EAAqBC,EACjH,aA/CI4J,EACAF,EACA9H,EACAjC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEc,MAAVJ,IgBEa8J,EAAKzK,UAAYF,OAAO4J,OAAO/I,EAAOX,WAAtCyK,EACKzK,UAAU+J,YADfU,OhBKjBG,WAqFAD,EACAhI,EACAjC,EACAI,EACAC,EACAF,GAGA,MAAO,CgBCO8J,KAAMA,EACNE,WAAYlI,EACZ7B,oBAAqBA,EACrBC,kBAAmBA,EACnBF,aAAcA,EACdiK,ShBPFjQ,EgBQE6F,mBAAoBA,EhBEtC,CAtGmBqK,CAAeJ,EAAMhI,EAAMjC,EAAoBI,EAAqBC,EAAmBF,GACtG4J,EAAKO,WAAeJ,MAEpB5K,EAAgByK,EAAKzK,UAEjB,GAAc,MAAdY,UACUjF,EAAA,EAAA+F,EAAAd,EAAAgB,OAAVjG,EAAU+F,GAAV,KAAK9F,EAAKgF,EAAAjF,GAAAA,EAAAA,EAAA,IgBCHmE,OAAOmL,OAAOjL,EAAWpE,EAAEoE,WhBC9BA,EAAUpE,EAAEsP,SAAU,EAIjB,cAATP,IACAF,EAAKS,OAvDD,iBATJC,IAAsBtQ,IACtBsQ,EAAoB,GAExBA,EAAsCA,EAAoB,EAA1D,GA+DJ,aAmBIV,EACA9H,EACAjC,EACAC,EACAC,EACAC,EACAC,EACAC,GAGA2J,GADW,SACWD,EAAM9H,EAAMjC,EAAoBC,EAAQC,EAAYC,EAAcC,EAAqBC,EACjH,aAiCsC0J,EAAY9J,EAAeC,EAA6BC,GAC1FuK,GAAsBX,EAAM,YAAa5P,EAAM8F,EAAQC,EAAYC,EAAchG,EAAMA,EAC3F,aa9EuBwQ,GACnB,OAAOzC,MAAY0C,QAAQD,EAC/B,aI3DkBrK,GAAsC,QAAZW,GAAQA,EAAG,eCHvD,a5B2BsC4J,GAAiF,gBGoc9EA,GACjC,GAAAA,EAAW1R,IAAW,M0B9dwB,a1Bged0R,EAAWC,IAA/CC,Eahd8D7C,MAAUvP,GbkdxEqS,EAAeH,EAAWpJ,IAC1B2G,EAAY,EACL4C,EAAStJ,KAAW,KACXuJ,EAAA7C,EAAAA,EAAA6C,EAAK,EAAL,EAAZF,EAAYE,GAAWD,EAASrJ,GACpC,CAEA,OAAOoJ,CACX,CHhdgFG,CAA4BL,EAAU,aA8K/EzC,GAInC,OAHIA,EAAQ,cG8QoB,MAAM+C,GAAoB,+BAAgC,CH7QtFC,GAEGhD,CACX,e8B1MAiD,GAAAvI,KAAAjL,KAA2E,gBCoHvEA,KAAAyT,IAAAC,EAE0B1T,KAAA2T,IAAA,EAKD3T,KAAAkF,KAAA,CAPzB,eA6BqCqL,GAADvQ,KAAA4T,KAAAF,EAApCG,GAAA5I,KAAAjL,KAAmD0T,GAG9BI,EAAAC,GAAmBxD,EAAOvQ,KAAA4T,KAAyBX,KAChEjT,KAAK2T,IAAQpD,CAJe,eA5IxCyD,GAAA/I,KAAAjL,MAWyCA,KAAAiU,KAAA,CAX4B,qCCsCvCC,SH7CgCC,EAAR,GIuB9C,GDsB8CC,GAAAnJ,KAAAjB,EAAKmK,KAC3CD,GAAmB,GCrB3B,MAAMG,GAAiC7J,GDqBN,8BAA4B0J,cAvBtB,c/BmErC1Q,E+BnEkD8Q,MAAa,EAAvBtU,KAAAuU,K/BoEvC/Q,C+BrEP,0EAS8B4Q,GAAAnJ,KAAAjB,EH/BoB,wBGyM1CA,EAAeuG,GAEtB,OADgBuD,EAAAU,GAAkBjE,EAAOvG,EAAAiJ,KADL1C,CAErC,aAtL+DkE,GAAnEC,KAAAC,GAAA1J,KAAAjL,MAA2DA,KAAA4U,KAAAH,EAKrBzU,KAAAsU,MAAA,CALS,wBEsBbO,iBAAhBC,GAAA7J,KAAAjB,iDADlB,aAjB8ByH,kBAAAA,YAAoBsD,GAAMtD,EAANzH,GAAhCgL,GAAA/J,KAAAjB,+DAFlB,aAL8ByH,kBAAAA,YAAoBsD,GAAMtD,EAANzH,GAAhCiL,GAAAhK,KAAAjB,+DAFlB,uBANkCkL,GAAAlL,GAAhBmL,GAAAlK,KAAAjB,iBACYyH,YAAoB2D,GAAM3D,EAANzH,GAAhCmL,GAAAlK,KAAAjB,8BAFlB,uBANkCqL,GAAArL,GAAhBsL,GAAArK,KAAAjB,iBACYyH,YAAoB4D,GAAArL,EAAMyH,GAAtC6D,GAAArK,KAAAjB,iBAAYyH,qEAF9B,wBAyEkCoD,iBAAhBU,GAAAtK,KAAAjB,oCACYyH,kBAAAA,YAAoBsD,GAAMtD,EAANzH,GAAhCuL,GAAAtK,KAAAjB,+DAFlB,aA1C8ByH,kBAAAA,YAAoBsD,GAAMtD,EAANzH,GAAhCwL,GAAAvK,KAAAjB,+DAFlB,aAoD8ByH,kBAAAA,YAAoBsD,GAAMtD,EAANzH,GAAhCyL,GAAAxK,KAAAjB,+DAHlB,wBAOkC6K,iBAAhBa,GAAAzK,KAAAjB,iDADlB,wBA5BkC6K,iBAAhBc,GAAA1K,KAAAjB,iDADlB,wBAMkC6K,iBAAhBe,GAAA3K,KAAAjB,iDADlB,aCzBa6L,EACDC,EACAC,GAHZC,GAAA/K,KAAAjL,MACIA,KAAAiW,KAAAJ,EACA7V,KAAAkW,KAAAJ,EACA9V,KAAAmW,KAAAJ,CAHuC,eAtC3C,mCCgBkCK,GAAAnL,KAAAjB,EAAK,wBAbqBqM,GAe3BrW,KAAAsW,KAAAD,CAfe,aCgD9B5N,OACd8N,EAgBgD3V,EAhBhCwI,GAgBuDoN,cAfvE,OAAWD,EAAUlN,OAAS,EAAGD,EAAUqH,GAAA8F,EAAU,EACzD,gBCoS4CvW,KAAAyW,KAAAC,CAAA,aAAqB7O,EAAGC,GAAsC,qBAvDxFW,EAAiBwB,EAAe0M,GAC1C,mBAAAA,OACAC,EAASxN,EAAKC,OACdwN,EAAS5M,EAAMZ,OACfyN,EC5CGvS,KAAOuS,ID4CMF,EAAIC,GAChB,GAAO,IAAPC,EAAU,OAAOF,EAAKC,EAAZ,MACAzT,EAAA,EAAd,GAAAA,EAAsB0T,IAAtB,KAAKvG,EAASnN,EAAAA,EAAAA,EAAA,QACV2T,EAAetG,GAAArH,EAAKmH,GACpByG,EAAgBvG,GAAAxG,EAAMsG,GAElB,GAAAwG,IAAYC,IACZD,EAAoBE,GAATF,OACXC,EAAsBC,GAAVD,MAGRD,EDjSkCtG,GAcF7P,ECmRrBmW,GDnR4CG,cAdT,OCkS9CF,EDlSkCvG,GAcF7P,ECoRpBoW,GDpR2CE,cAdT,ICqS1C,OAAgBC,EAATJ,EAAmBC,SAb1C5T,EAAsB0T,GAkBtB,OAAOF,EAAKC,EAAZ,EAEA,OAAOO,GAAAhO,EAAUa,EAEzB,CA2B2EoN,CAAFxP,EAAYC,GAAgB,EAAM,wBAA5C,IAAAwP,GAAAC,mBErVL,eCmIjBvX,KAAAwX,KAAA,UA/BrC,etCnGJ,sBAU+CxX,KAAAyX,KAAA,IAAA/M,GAAA,uBAD/C,auCiEiBjC,EAAyBa,EAAYP,OnBmE1BoE,EmBjEP,MAAbpE,EAAqBK,EAAAH,EAAOF,EAAUO,IACtC,MAAAA,InBiEe,iBADK6D,EmBhEpB7D,KnB9CkB,IA+GqB6D,EAAOuK,EA/GxC/E,SmB8CsBvJ,EAAAH,EAAOK,GACnCA,aAAAqO,EAAmBvO,EAAAwO,GAAOtO,EAAPuO,MACXzO,EAAAH,EAAeuB,GAARlB,GAEvB,aC8HWb,EAAYwB,EAAa0M,GAC5B,GAAAvN,IAAQa,EAAO,OAAO,EACtB,iBAAa,OAAO,MAExB6N,EAAqBb,GAAL7N,GAChB2O,EAAuBd,GAANhN,GAEjB,OAAO6N,IAAaC,GN3M8BtH,GAcF7P,EM6LdkX,GN7LqCZ,cAdT,KAAZzG,GAcF7P,EM6LemX,GN7LQb,cAdT,EM4MlE,aC6JWzO,GACgB,OAAVuP,GAAL5O,GAAc,EAAC,CAAD,QlCrQtB+I,GADW,6BACuBhK,EAAoBC,EAAQC,EAAYC,EAAcC,EAAqBC,ihBwB3F/EqM,iBAAhBG,GAAA/J,KAAAjB,mFAPgB6K,iBAAhBI,GAAAhK,KAAAjB,0HAcgB6K,iBAAhBW,GAAAvK,KAAAjB,8EAkDgB6K,iBAAhBY,GAAAxK,KAAAjB,uUnBlFsBC,GAAiD,OAAxBmN,GAARpX,KAAAuK,IAAkBN,EAAMM,IAAO,kFAEnDN,GAAsC,OAAdjK,OAASiK,CAAI,4BAIzB,OAAJjK,KAAAsK,GAAG,mBE2sCEL,GACvB,OAAdyE,EAAL1O,KAAaiK,EAAK,sFA4bW,OAAxBwC,EAALzM,KAA0B,GAAE,2BAiClB,OAAVyN,EAAAzN,KAAS,6BW/qDkC,MAAb,aAAY,oBEsBnBiY,GACvBjY,KAAAkY,YACAC,GAAe,EACCxO,EAAAsO,EAAArO,IAAAD,EAAAE,KAAU,KAArBP,EAAWK,EAAAG,IACR9J,KAAAyD,EAAI6F,KAAU6O,GAAW,EACjC,CACA,OAAOA,CACX,2BAyB4C,OAAdnY,KAAKoY,SAAQ,sBAOA,sBCmEO,OAAZpY,KAAA2T,IAAQ3T,KAAAyT,IAAAR,GAAG,sBAGrC,IAACjT,KAAA6J,IAAW,MAAMwO,SACfjF,EAAApT,KAAA2T,IACP,OADO3T,KAAA2T,IAAAP,EAAK,EAAL,EAAPpT,KAAAkF,IAAOkO,EACApT,KAAAyT,IAAA6E,EAAItY,KAAAkF,IACf,uBE9CA,IFiDkB,IAARlF,KAAAkF,IE/CV,MAAMqT,GAA8B/N,GF+CZ,yEAEpBxK,KAAAyT,IAAA+E,GAASxY,KAAAkF,KACTlF,KAAA2T,IAAQ3T,KAAAkF,IACRlF,KAAAkF,KAAO,CACX,oBA7GoBoE,GAGpB,OAFAtJ,KAAAkY,IACAlY,KAAAyY,GAAIzY,KAAAiT,IAAM3J,IACH,CACX,uBAiBItJ,KAAAkY,IACAlY,KAAA0Y,GAAY,EAAG1Y,KAAAiT,IACnB,sBAemE,OAAd,IAAAY,GAAA7T,KAAa,qBASjCuQ,GAA6D,OAAvB,IAAAoI,GAAA3Y,KAAiBuQ,EAAK,qBAQvDqI,EAAgBC,OAClD1F,EAAenT,KAAA8Y,GAAaF,KACrBC,EAAUD,I9B4DPxV,EAAA,EAAd,GAAAA,EAAsB2V,KAAR3V,EAAAA,EAAA,I8B3DE+P,EAASrJ,IACjBqJ,EAAS6F,W9B0DjB5V,EAAsB2V,E8BxDtB,uBCjCI,OAFA/Y,KAAAkY,IACAlY,KAAAsU,MAAa,EACFtU,KAAAiT,IAAO,EAAGjT,KAAV0U,KAAoBH,IACnC,sBAQgD,OAAVvU,KAAA4U,KAAMvL,MAAG,oBAEvBkH,GAA8C,OAA7BvQ,KAAA4U,KAAMqE,GAAAjZ,KAAWuQ,GAAW,oBAU7CjH,GAIpB,OAHAtJ,KAAAkY,IACAlY,KAAA4U,KAAkBsE,KAAK5P,GACvBtJ,KAAAiU,KAAAjU,KAAAiU,KAAQ,EAAR,GACO,CACX,qBAEwB1D,EAAYjH,GAChCtJ,KAAAkY,IACAlY,KAAA4U,KAAkBuE,gBAoHdnP,EAAwBuG,GAE/B,OADgBuD,EAAAC,GAAmBxD,EAAOvG,EAAAiJ,KADG1C,CAE9C,CAtH6B6I,CAAApZ,KAAoBuQ,GAAQ,EAAGjH,GACxDtJ,KAAAiU,KAAAjU,KAAAiU,KAAQ,EAAR,CACJ,oBAS2BgE,GAEnB,GADJjY,KAAAkY,IACID,EAAS3W,IAAW,OAAO,UAE/B+X,GAXIrP,EAWShK,KAXUsZ,EAWKrB,EAAShF,IAVrCsG,WAAevP,EAAAiJ,IACfjJ,EAAA4K,KAAAvL,OAA2BW,EAAAiJ,IAAOqG,EAAlC,EACOC,GnBsxDXhJ,EAAY,EACC5G,EmB9wDTsO,EnB8wDSrO,IAAAD,EAAAE,KAAM,KAAd2P,EAAQ7P,EAAAG,IAAgCsJ,EAAA7C,EAAAA,EAAA6C,EAAK,EAAL,QAAnBqG,GAAmBrG,GmB7wDrCpT,KAAA4U,KAAMyE,EAASK,EAAf,GnB6wD+CF,CAAI,KmB1xDnDxP,EAAmBsP,EACvBC,EAeA,OADAvZ,KAAAiU,KAAAjU,KAAAiU,KAAQ,EAAR,GACO,CACX,qBAuB6B1D,GAIzB,OAHAvQ,KAAAkY,IACAe,GAAAjZ,KAAWuQ,GACXvQ,KAAAiU,KAAAjU,KAAAiU,KAAQ,EAAR,EACW1D,KAASvQ,K7BsFXiT,IAAO,EAAC,G6BrFbjT,KAAA4U,KAAkB+E,MAElB3Z,KAAA4U,KAAkBuE,OAAO5I,EAAO,GAAG,EAC3C,qBAeyBqI,EAAgBC,GACrC7Y,KAAAkY,IACAlY,KAAAiU,KAAAjU,KAAAiU,KAAQ,EAAR,EACAjU,KAAA4U,KAAkBuE,OAAOP,EAAWC,EAAUD,EAA5B,EACtB,uBAGI5Y,KAAAkY,IACAlY,KAAA4U,KHrK8C,GGsK9C5U,KAAAiU,KAAAjU,KAAAiU,KAAQ,EAAR,CACJ,6BAOsD,OZjLN2F,EYiLA5Z,KAAA4U,KZjLa,KAAM,IAAK,IAAxBtS,EAAAA,EAA6BuX,GYiLxB,uBAcjD,MAAO,GAAS7S,MAAMiE,KAAKjL,KAAA4U,KAC/B,kEAQQ,GAAA5U,KAAAsU,KAAY,MAAMwF,IAC1B,uBGnJwD,OAAf9Z,KAAAkW,IAAc,6BA5BnD,MAAQ,SAAOlW,KAAA+Z,IACnB,sBCNqC,OAAzB/Z,KAAAsW,KAAmBjN,MAAK,oBAEZkH,SACpBvQ,KAAAsW,KS+GO,KAAS,GT/GC/F,GAAAA,IS+GDyH,GAAAxU,GAAA,EAAT,IT/GmB,MAAMwW,GAA2B,UAAQzJ,EAAK,aAAWvQ,KAAA6H,IAAM,KAAK,OS+GrEoS,GAAAzW,ET/GR+M,EAA4E,qBAKtEpD,GAEvB,OADAnN,KAAAsW,KAAAtW,KAAAsW,KAAA1V,EAAUuM,GACHnN,IACX,oBAG2BmN,GAEvB,OADAnN,KAAAsW,KAAAtW,KAAAsW,KAAgBzV,EAANsM,GACHnN,IACX,6BAubwC,OAANA,KAAAsW,IAAK,qBEzdlCzO,EAAMC,gGEUgC,OAAD,IAAR9H,KAAAiT,GAAQ,6BAIzC,OAFiCiH,EAAAla,KAAa,KAAM,IAAK,IAAxBsC,EAAAA,KAA6BtC,cAAAiQ,GACJ,OAAnDA,IAAOkK,EAAM,oBAA4BtZ,EAAHoP,EAC9C,qCAMmE,OAAvBmK,GAAkBpa,KAAI,qBCkF/BuQ,EAAYzP,GACnC,GAAAyP,EAAQ,GAAKA,GAASzP,EACtB,MAAMkZ,GAA2B,UAAQzJ,EAAK,WAASzP,EAE/D,qBAEgCyP,EAAYzP,GACpC,GAAAyP,EAAQ,GAAKA,EAAQzP,EACrB,MAAMkZ,GAA2B,UAAQzJ,EAAK,WAASzP,EAE/D,sBtC7GmC,OAAL,CAAI,sBAIP,MAAMuX,IAAuB,6BAStB,MAAJ,IAAG,sBAEL,OAAD,uBACO,OAAJ,CAAG,oBAIpB9H,GAAuB,MAAMyJ,GAA2B,+CAA6CzJ,EAAK,IAAE,sBAInE,OAAA8J,CAAD,mGWvBhClN,GAApB,OAAAA,oBAkFSnD,GACL,OAALA,oBXpBciO,GAAwF,OAArDA,EAAS5O,OAAO,E2CuB9D,IAAA+K,G3CvBiE6D,sBAAiC,0EoB6DvFpQ,GAAkD,MAArB,iBAANA,GAAkBA,cAAQ,mBD0B7C4J,EAAkBC,OACxC4I,EAAgB,IAAOhJ,MAIvB,OAHAgJ,EAAA7I,QAAoBK,GAAcL,EAASC,GAC3C4I,EAAA5I,MAAkBA,EAClB4I,EAAAlQ,KAAiB,YACAkQ,CACrB,mByBjK4BzS,GAAwF,OCAjC0S,OAAO1S,EDAyB,yCAU/FA,GAAwF,OCAnCA,GAAK,IAAM,EDAuB,mBAGtFA,GAA0F,OCApCA,GAAK,IAAM,EDAwB,8BHkcnGY,EAA2B+R,EAAiBC,WAAgCrR,QACnFmH,WAmqBO9H,EAAyBiS,EAAYC,EAA6BhE,SAC9D,WADmDiE,GAAAxR,oCACrCA,aAlKlBX,EAA4BoS,EAAkBF,EAA6BhE,GAC9E,WADmEiE,GAAAxR,oBACtC,IAAdyR,EAAMxR,yBAAaD,EAAgB,OKl9BgDxI,WrCo9F/F6H,SACA,OAAMW,EAAAC,aACT,EAAK,MAAMyR,GAAuB,wBAClC,IAAK1R,EAAK,iBACF,MAAMiL,GAAyB,oCAH3C,OAAAxP,CAKJ,CgCvgEyBkW,CAANF,IACX,OAAOzR,ENjvBqF4R,YAAYC,EMivBzEN,EACnC,KAGyBvX,WMsWlBqF,EAAiByS,GACxB,OAAW9R,EAAO8R,EAAcA,EAAkB9R,CACtD,CNxW6B+R,CAAXR,EAAwBC,GAAAxR,IAAtC,GAAwD,GAAxDhG,IAAA,KAAKmN,EAASnN,EAAAA,EAAAA,GAAA,UACVgY,EAAkBnB,GAAA7Q,EAAImH,chCsgYVvK,EAAA,EAAAmD,EgCrgYR0R,EhCqgYQxR,OAAhBrD,EAAgBmD,GAAhB,KAAKG,EgCrgYGuR,EhCqgYQ7U,GAAU,GAAVA,EAAAA,EAAA,IgCrgYOqV,GhCqgYa/R,EgCrgYN8R,EAAazE,IhCqgYG2E,GAAO,WACrDA,GAAO,EgCtgYC,GAAMA,EACN,OAAO/K,QAHyC,GAAxDnN,GAMA,OAAO,CACX,CAqJQmY,CAAAnS,GOplCiBoS,EPolCU,CAAAd,KQplC8C,IAAIe,YAAYD,GCa7F/G,EAAAtE,OFb6D,YEctDsE,GTskC+BkG,EAAYhE,cKpnCoD/V,ELsnChF8Z,KAAlBtR,ENn5B4F4R,YAAYC,EMm5BhFN,OOtlCPa,IPmlCrB,OAAA3W,CAIJ,CAxqBgBmW,CAAA5R,EAAYoR,GACxB,OAAoB,IAATjK,EAAakK,WN1MVhS,EAAiBkS,EAAiBe,GAAoE,YAA3CtS,EAAYuS,UAAUhB,EAAYe,EAAQ,CM0MhEC,CAAAvS,EAAU,EAAGmH,EACpE,wCnBzbmCjP,SAA6C,OAAxB,MAALA,aAT/C,MAAMsa,IACV,CAQ8DC,KAAiBva,EAACuD,CAAD,mBEH7D4D,GAAsD,gBAVtDA,GAAmG,OAApEW,IAAe0S,KAAqB1S,KAAe,GAAgB,CAUpE2S,CAAA3S,KAAiBmF,GAAAnF,EAAM,qBFpBhB,MAAM4S,IAA6B,sM1BuRxEvX,EAAqBwX,EAAqB3D,WAA3B,YAAqB,YAAqB,IAAzDtY,KAAAkB,KAAAuD,EAAqBzE,KAAAmB,KAAA8a,EAAqBjc,KAAAoB,KAAAkX,CAA3C,YA1PC7T,EAAqBwX,WAAN,YAAqB,IAApCjc,KAAAyG,KAAAhC,EAAqBzE,KAAA0G,KAAAuV,CAAtB,iEA3CjB,kBAAAjc,KAAAkB,KAAA,OAAAlB,KAAAmB,KAAA,OAAAnB,KAAAoB,KAAA,gDAAApB,KAAAyG,KAAA,OAAAzG,KAAA0G,KAAA,0DAkgDcpF,SACYA,EAjCYJ,KAiCZI,EAjCkBJ,KAiClBI,EAjCwBH,KAiCxBG,EAjC8BH,KAiC9BG,EAjCoCF,KAiCpCE,EAjC0CF,KAiChE8a,EAAQ,EKhvBqC3X,KAAW4X,KAAK1X,GLivB7D,OAAO,IAAAlE,EAAOe,EAAEJ,KAAIgb,EAAG5a,EAAEH,KAAI+a,EAAG5a,EAAEF,KAAI8a,EAC1C,mBAt9CgB5a,mBAAAA,YAAYuB,EAAAoI,KAAAjB,EAAK1I,EAAGA,mCA0PpBA,mBAAAA,YAAYf,EAAA0K,KAAAjB,EAAK1I,EAAGA,EAAGA,4hBuDrRVtB,KAAAoc,MAAA,CAH7B,YCCoBtF,EAAsBvH,GAAtBvP,KAAAqc,KAAAvF,EAAsB9W,KAAAsc,KAAA/M,CAAvB,cAHuBvP,KAAAuc,KAAA,IAN1C,YCiBYC,GAARxc,KAAAyc,KAAAD,EAIkBxc,KAAA0c,KAAA,IALsB,cCI5C,oBCNIC,EAAmB,CAEnBA,QAAiB,SACjBA,EAAA,oCAeOC,EAfevb,GAeyB,GAAuB,EAfjC,oCACrCsb,EAAA,6DAkBOC,EAlByBvb,EAAAE,GAkB4C,EAlBnB,qDAAzBsb,GAChCF,EAAA,mEA8BOC,EA9BmBvb,EAAAE,EAAAE,EAAAE,EAAAE,EAAAE,EAAAE,EAAAE,EAAmB,+CAAnB2a,GAC1BH,EAAA,kDAgCgCI,EAhCXxb,EAiCdqb,EAjCcvb,GAiC0B,GAAuB,GAAM2b,QAAKD,WAAEE,GAEzE,OADNA,EAAOC,UAAUC,GACjBF,CACJ,QAJgCF,GAhCG,0CAAdK,GACrBT,EAAA,8DAsC0CI,EAtCXxb,EAuCxBqb,EAvCwBvb,EAAAI,GAuC6C,GAAMub,QAAKD,WAAEE,GAE/E,OADNA,EAAOC,UAAUC,GACjBF,CACJ,QAJ0CF,GAtCa,oDAAxBM,GAE/BC,OAAA,UAA4BX,EAE5BY,QAAQ5N,IAAI,8BAChB,YA2CI6N,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,WAJkB,YACA,cACA,YACJ,aACW,YAEZC,SAASC,eAAeT,GAAxBU,EAAArZ,aAAAsZ,kBAAAtZ,EAAA,cAAAqZ,EACN,OAAOE,QAAQC,OAAOC,EAAW,mBAAiBd,EAAQ,oCADjEe,EAAaL,EASb,OALoB,IAAhBK,EAAOC,OAA+B,IAAjBD,EAAO1a,SAC5B0a,EAAOC,MAAQD,EAAOE,YACtBF,EAAO1a,OAAS0a,EAAOG,cAGpB,IAAAN,WAAQG,IAAAd,IAAAC,IAAAC,IAAAC,IAAAC,IAAAC,IAAAC,WAAEY,EAASN,GACtB,sDAGoBO,GAaZ,OAZIA,EAAAC,qCAAOC,GAIP,OAHIA,EAAAC,GAAIC,EAASC,EAASC,GACtBJ,EAAAK,GAAO,EAAK,EAAK,GACjBL,EAAAM,GAAIC,GACRC,CAAA,EAJOC,CAAAP,EAAAC,EAAAC,EAAAG,IAKPT,EAAAY,+BAAMC,GAIN,OAHIA,EAAAC,KACAD,EAAAE,GAAUC,GACVH,EAAAI,GAAU,IAAO,GAAO,IAC5BP,CAAA,EAJMQ,CAAAF,IAKNhB,EAAAmB,GAAWC,GACXpB,EAAAqB,GAAeC,GACnBZ,CAAA,EAbYa,CAAAH,EAAAE,EAAAlB,EAAAC,EAAAC,EAAAG,EAAAO,GAFN9a,EAAAsb,GACGC,EADH/d,EAAA+C,gCAgBMib,GACRA,EAAUC,KAGVjD,OAAOkD,iBAAiB,qCAAUvQ,GAGlC,OAFIoQ,EAAO7B,MAAQ6B,EAAO5B,YACtB4B,EAAOxc,OAASwc,EAAO3B,aAC3BY,CAAA,EAHkCmB,CAAAJ,QAKlCpD,EAAa,IAAAyD,GAGjB,OAFIzD,EAAO0D,GAAOL,GACdM,EAAQ3D,GACZqC,CAAA,EAZUuB,CAAAlC,EAAA0B,8CAedhC,EADKxU,GAGb,OAAAyV,CAAA,GACJ,YCZYtV,SAEJA,EAAA8W,KAAON,iBAAiB,eAAaxW,WAAE+W,OACnClX,EAAQkX,aAAAC,WAAAD,EAAAE,IACOC,EAATrX,EAAEsX,OAOZ,OANQ,IAAAD,EAAO/G,EAAAiH,MAAa,EACpB,IAAAF,IAAO/G,EAAAkH,MAAkB,GAE7BlH,EAAAmH,KAAQzX,EAAE0X,QACVpH,EAAAqH,KAAQ3X,EAAE4X,QACV5X,EAAE6X,iBACNpC,CAAA,IAGAtV,EAAA8W,KAAON,iBAAiB,wCAAeO,OACnClX,EAAQkX,aAAAC,WAAAD,EAAAE,IACRU,EAAS9X,EAAE0X,QAAqBpH,EAAAmH,KAChCM,EAAS/X,EAAE4X,QAAqBtH,EAAAqH,KAkBpC,OAjBIrH,EAAAmH,KAAQzX,EAAE0X,QACVpH,EAAAqH,KAAQ3X,EAAE4X,QAENtH,EAAAiH,KAEIjH,EAAA0H,MACA1H,EAAA2H,MAAiBH,EAAKxH,EAAA4H,KACtB5H,EAAA6H,MAAeJ,EAAKzH,EAAA4H,OAEpB5H,EAAA8H,KAAA9H,EAAA8H,KAASN,EAAKxH,EAAA4H,KACd5H,EAAA+H,KAAA/H,EAAA+H,KAAON,EAAKzH,EAAA4H,MAET5H,EAAAkH,OAEPlH,EAAAgI,KAAAhI,EAAAgI,KAAWR,EAAKxH,EAAAiI,KAAiBjI,EAAAkI,KACjClI,EAAAmI,KAAAnI,EAAAmI,KAAWV,EAAKzH,EAAAiI,KAAiBjI,EAAAkI,MAEzC/C,CAAA,EArBqCiD,CAAAvY,IAwBrCA,EAAA8W,KAAON,iBAAiB,sCAAWvQ,GAGnC,OAFIkK,EAAAiH,MAAa,EACbjH,EAAAkH,MAAkB,EACtB/B,CAAA,EAHmCkD,CAAAxY,IAKnCA,EAAA8W,KAAON,iBAAiB,yCAAcvQ,GAGtC,OAFIkK,EAAAiH,MAAa,EACbjH,EAAAkH,MAAkB,EACtB/B,CAAA,EAHsCmD,CAAAzY,IAMtCA,EAAA8W,KAAON,iBAAiB,oCAAWO,OAC/BlX,EAAQkX,aAAA2B,WAAA3B,EAAAE,IACRpR,EAAgBhG,EAAE8Y,OAAS,EAAG,GAAU,EACxCxI,EAAAkI,KAAAlI,EAAAkI,MAAY,EAAMxS,EAAQsK,EAAAyI,YAC1BzI,IAAeA,EAAA0I,OAAiB1I,EAAA2I,OAAa3I,EAAAkI,OvDmOI9d,KAAWuS,IAAAiM,EAAOjb,GuDjOvE,OAFIjD,EAAAwd,KvD4OiD9d,KAAWgL,IAAAyT,EAAOC,GuD3OnEpZ,EAAE6X,iBACNpC,CAAA,EANiC4D,CAAAlZ,GAM9B,CAAImZ,SAAS,IAGhBnZ,EAAA8W,KAAON,iBAAiB,cAAe4C,GAKvCpZ,EAAA8W,KAAON,iBAAiB,yCAAgBO,OACpClX,EAAQkX,EACJ,GAAoB,GAApBlX,EAAEwZ,QAAQha,QACV8Q,EAAAiH,MAAa,QACbjH,IAAStQ,EAAEwZ,QAAQ,GAAG9B,QAAtBzc,EAAAwc,KAAyCgC,EAAhCC,EAAAle,GAAAA,EAAA4b,WACT9G,IAAStQ,EAAEwZ,QAAQ,GAAG5B,QAAtB9b,EAAA6b,KAAyC8B,EAAhCC,EAAA3d,GAAAA,EAAAqb,KAGjB,OADIF,EAAMW,iBACVpC,CAAA,EARsCkE,CAAAxZ,GAQnC,CAAImZ,SAAS,IAEhBnZ,EAAA8W,KAAON,iBAAiB,wCAAeO,OACnClX,EAAQkX,EACJ,GAAA5G,EAAAiH,MAAkC,GAApBvX,EAAEwZ,QAAQha,cACdQ,EAAEwZ,QAAQ,GAAG9B,QAAvBI,EAA0C2B,EAAhCC,EAAAze,GAAAA,EAAAmc,KAA6C9G,EAAAmH,OAC7CzX,EAAEwZ,QAAQ,GAAG5B,QAAvBG,EAA0C0B,EAAhCC,EAAAle,GAAAA,EAAA4b,KAA6C9G,EAAAqH,OACvDrH,IAAStQ,EAAEwZ,QAAQ,GAAG9B,QAAtB5b,EAAA2b,KAAyCgC,EAAhCC,EAAA3d,GAAAA,EAAAqb,WACT9G,IAAStQ,EAAEwZ,QAAQ,GAAG5B,QAAtBgC,EAAAjC,KAAyC8B,EAAhCC,EAAAG,GAAAA,EAAAzC,KAEL9G,EAAA0H,MACA1H,EAAA2H,MAAiBH,EAAKxH,EAAA4H,KACtB5H,EAAA6H,MAAeJ,EAAKzH,EAAA4H,OAEpB5H,EAAA8H,KAAA9H,EAAA8H,KAASN,EAAKxH,EAAA4H,KACd5H,EAAA+H,KAAA/H,EAAA+H,KAAON,EAAKzH,EAAA4H,WAET,GAAoB,GAApBlY,EAAEwZ,QAAQha,cAEPQ,EAAEwZ,QAAQ,GAAG9B,UAAmB+B,EAAhCC,EAAAI,GAAAA,EAAA1C,OAA8CpX,EAAEwZ,QAAQ,GAAG9B,QAArEI,EAASiC,EAA+EN,EAAhCC,EAAAM,GAAAA,EAAA5C,OAC9CpX,EAAEwZ,QAAQ,GAAG5B,UAAmB6B,EAAhCC,EAAAO,GAAAA,EAAA7C,OAA8CpX,EAAEwZ,QAAQ,GAAG5B,QAArEG,EAASmC,EAA+ET,EAAhCC,EAAAS,GAAAA,EAAA/C,OACnBgD,EAAKA,EAAKC,EAAKA,EAApDC,EvDlBmC5f,KAAW4X,KAAK1X,GuDoB/C,GAAA0V,EAAAiK,KAAoB,EAAG,KACvBvU,EAAYsK,EAAAiK,KAAoBD,EAChChK,EAAAkI,KAAAlI,EAAAkI,MAAY,EAAc,KAARxS,SAClBsK,IAAeA,EAAA0I,OAAiB1I,EAAA2I,OAAa3I,EAAAkI,OvDuLJ9d,KAAWuS,IAAAiM,EAAOjb,GuDvL3Duc,EAAAhC,KvDgMyC9d,KAAWgL,IAAAyT,EAAOC,EuD/L/D,CACA9I,EAAAiK,KAAoBD,EAG5B,OADIpD,EAAMW,iBACVpC,CAAA,EA7BqCgF,CAAAta,GA6BlC,CAAImZ,SAAS,IAEhBnZ,EAAA8W,KAAON,iBAAiB,uCAAYvQ,GAGpC,OAFIkK,EAAAiH,MAAa,EACbjH,EAAAiK,MAAqB,EACzB9E,CAAA,EAHoCiF,CAAAva,GAIxC,YAlD6C+W,GAEzC,OADIA,EAAMW,iBACVpC,CAAA,YAvJIf,EACAiG,GADRxkB,KAAA8gB,KAAAvC,EACAve,KAAAykB,KAAAD,EAGYxkB,KAAAiiB,KAAA,kBACFjiB,KAAAkiB,KAAA,mBACKliB,KAAAqiB,KAAA,EAGDriB,KAAAmiB,KAAA,EACAniB,KAAAsiB,KAAA,EACAtiB,KAAA0kB,KAAA,EAGI1kB,KAAA6iB,KAAA,GACA7iB,KAAA8iB,KAAA,GACL9iB,KAAA2kB,KAAA,GACA3kB,KAAA4kB,KAAA,kBAGW5kB,KAAA+hB,KAAA,KACF/hB,KAAA4iB,KAAA,GACD5iB,KAAAoiB,KAAA,KAGJpiB,KAAA6kB,MAAA,EACK7kB,KAAA8kB,KAAA,oBAGF9kB,KAAA6hB,MAAA,EACA7hB,KAAA+kB,KAAA,IACQ/kB,KAAA8hB,KAAA,EACF9hB,KAAAgiB,KAAA,EAGDhiB,KAAAohB,MAAA,EACKphB,KAAAqhB,MAAA,EACVrhB,KAAAshB,KAAA,EACAthB,KAAAwhB,KAAA,EAGhBwD,EAAAhlB,MAgK4BA,KAAAokB,MAAC,CA1MV,YCsH0Bhb,GAAE,OAAAkW,CAAD,aAjD9C2F,EACAC,EACAC,WAA4B,IAF5BnlB,KAAAolB,KAAAH,EACAjlB,KAAAqlB,KAAAH,EACAllB,KAAAslB,KAAAH,CAHqB,eA6BOnlB,KAAAulB,KAAA,kEACGvlB,KAAAwlB,KAAA,oEAHnC,aAscQxb,EAAmByb,EAAcpM,OACrCqM,EAAU,GACAtiB,EAAA,EAAV,GAAAA,EAAkB,KAAlB,KAAKC,EAAKD,EAAAA,EAAAA,EAAA,UACIqiB,EAAIpiB,GAAdqiB,EAAIxM,KAAwBoK,EAAlBC,EAAA1e,GAAAA,EAAAoc,YADd7d,EAAkB,UAGPsiB,EAAI,IAAfA,EAAI,IAA0BpC,EAAnBC,EAAAze,GAAAA,EAAAmc,KAAgC5H,EAAO,SACvCqM,EAAI,IAAfA,EAAI,IAA0BpC,EAAnBC,EAAAle,GAAAA,EAAA4b,KAAgC5H,EAAO,SACvCqM,EAAI,IACf,OADAA,EAAI,IAA0BpC,EAAnBC,EAAA5d,GAAAA,EAAAsb,KAAgC5H,EAAO,GAC3CqM,CACX,aA8CQ1b,EAAe2b,GACf,IAAC3b,EAAA4b,KAAW,OAAAtG,EAGZ,GAAAtV,EAAA6b,KAAY,KACZC,EAAQ9b,EAAA+b,KAAOtH,YACfuH,EAAQhc,EAAA+b,KAAOrH,aACXoH,EAAI,GAAKE,EAAI,IAAMF,IAAK9b,EAAA+b,KAAOvH,OAASwH,IAAKhc,EAAA+b,KAAOliB,SACpDmG,EAAAic,GAAOH,EAAGE,EAElB,WA3HIhc,SAC6BA,EAAAkc,KzDrR6B/R,GyDqRVnK,EAAAmc,KzDrRC7kB,IyDqRjD,IAAC0I,EAAAoc,KAAeC,GAAAxhB,EAAuCsP,GAAe,OAAAmL,YAK9DtV,EAAAmc,O/C4lCIhjB,IAiRJwG,EAAAqZ,EAAApZ,IAAAD,EAAAE,KAAM,OAAjBP,EAAWK,EAAAG,I+C52CR,QACIwc,E/C22CiBhd,E+C32CA8b,KAAMmB,iBACvBC,EAAkBF,EAAKxP,IACvB2P,EAAkBH,EAAK/W,MAGdiX,EAAG,KAAclD,EAAjBC,EAAAle,GAAAA,EAAA4b,OACAuF,EAAG,KAAclD,EAAjBC,EAAA3d,GAAAA,EAAAqb,OACAuF,EAAG,KAFJ,IAAAE,aAAA,CAAA/gB,EAAA8d,EAEkBH,EAAjBC,EAAAG,GAAAA,EAAAzC,SAGAwF,EAAG,KAAcnD,EAAjBC,EAAAI,GAAAA,EAAA1C,OACAwF,EAAG,KAAcnD,EAAjBC,EAAAM,GAAAA,EAAA5C,OACAwF,EAAG,KATK,IAAAE,EAAAC,EAOT,IAAAF,aAAA,CAAA9C,EAAAE,EAEkBR,EAAjBC,EAAAQ,GAAAA,EAAA9C,sDAGJpX,EAAAA,EAIL0T,QAAQsJ,KAAK,gEAAiEhd,KAC9E,S/C+kCSid,E+CpmCbhiB,E/ComCiC,MAAAgiB,GAAM5T,EAAYzP,EAAtCqjB,EAwQe,K+C72ChCC,E/CsmCG7T,E+C5kCUgL,EAAiB8I,EAAAC,GAAiCD,EAAAE,GAAMH,IAAxD,SAAA7I,EAAmE,OAAAoB,UAAhFjG,EAAa6E,EAKbiJ,EAASnd,EAAAod,KAAOC,sBACFC,EAAAtd,EAAAmc,KAAAvc,IAAA0d,EAAAzd,KAAQ,KAAjB0d,EAASD,EAAAxd,IACV,QACIzK,EAAWkoB,EAAMnC,KAAMoC,UAClBL,EAAGM,aAAapoB,IAAO8nB,EAAGhW,OAAO9R,OACtC+R,EAAe+V,EAAGO,YAAYroB,GAC9BsoB,EAAuBR,EAAGS,aAAaxW,GACvC+V,EAAGU,aAAazW,EAAU0W,GAAA9d,EAAe2d,EAAStO,GACtD,+CAASxP,EAAAA,EACL0T,QAAQwK,MAAM,4CAA6CC,GAEnE,CACAhe,EAAAoc,KAAe6B,KACf1K,QAAQ5N,IAAK,4CAA2C0J,EAAO,GAAG,KAAIA,EAAO,GAAG,KAAIA,EAAO,GAAG,IAClG,CA6EI6O,CAAAle,OAGA8c,EAAA9c,EAAAme,KAAkB,MAAArB,GAAlBA,EAAkBsB,SAGlBC,EAAuBre,EAAAse,KAAgB,GAAI3C,EAAY3b,EAAAse,MAAiB,IAAY,EACpFte,EAAAse,KAAgB3C,U/C4uCJhc,E+CzuCZK,EAAAmc,K/CyuCYvc,IAAAD,EAAAE,KAAM,KAAjBP,EAAWK,EAAAG,I+CxuCFye,E/CwuCejf,E+CxuCf+b,KAAU,SAAAkD,QAER,GAFRA,EACyBC,oBACT,EAAG,C/CsuCElf,E+CruCPgc,K/CquCOhc,E+CruCPgc,KAAiB+C,MACvBI,EAJRF,EAIgCG,qBAAqB,GACzCD,EAAW,I/CmuCFnf,E+CjuCHgc,K/CiuCGhc,E+CjuCmBgc,KAAgBmD,GAPxDF,EAgBiBI,eAAe,GAhBhCJ,EAiBiBK,oBACb,C/CstCwB,C+CjtChC5e,EAAAod,KAAOyB,UAGH7e,EAAA8e,KAASC,WAAW/e,EAAAgf,QACpBhf,EAAA8e,KAASG,WAAWjf,EAAAkf,MACpBlf,EAAA8e,KAASK,gBAGmC9nB,MAA7Bic,OAAnBtT,EAAAof,KAA0BtkB,EAAAukB,uBAAsBhoB,EAAA2I,wBAAAsf,KAAAlgB,IAAW,gCAC/D,aA9Y6BmgB,GACC,OAAtBA,EAASC,aACb,wCAASxgB,OACLic,EAAYwE,EAAOC,YAAY1gB,GAC3B,GAAS,MAATic,SAEA0E,EAAe1E,EAAM2E,cACrBzP,EAAA0P,KAAMC,YAAYH,GAGH,MACX1E,EAAMyC,cAAcqC,0DAEpB,SAGJC,EAAkB,IAAAC,GAAYhF,EAN9BC,GAOA/K,EAAAgM,KAAO1iB,EAAIumB,GAMX7P,EAAAiM,KAAe8D,KAIfjF,EAAMkF,kDAMF,OAHIC,EAAMC,oBACN9M,QAAQ5N,IAAK,gCAA8B2a,EAAG,KAAIC,EAASlhB,OAAK,cACtD,MAAVmhB,KAAiBJ,GACrB9K,CAAA,EALSmL,CAAAxF,EAAAqF,EAAAX,EAAAa,GAMG,KACDE,EACK,WAGpBnN,QAAQwK,MAAO,qDAAmDuC,GAE1E,OAAAhL,CAAA,cAiB0BrP,GAAkB,OAAhBA,EAAGuZ,aAAc,aAclBvZ,GAAkB,OAAhBA,EAAGuZ,aAAc,aAxUlDjL,EACAoM,EACAC,EACAC,EACAC,EACAtG,EACAuG,EACQC,SAPRhrB,KAAA+lB,KAAAxH,EACAve,KAAAonB,KAAAuD,EACA3qB,KAAA8oB,KAAA8B,EACA5qB,KAAA6pB,KAAAgB,EACA7qB,KAAAkpB,KAAA4B,EACA9qB,KAAAirB,KAAAzG,EACAxkB,KAAAgpB,KAAA+B,EACA/qB,KAAAkrB,KAAAF,EAEqChrB,KAAAopB,KAAA,KACbppB,KAAA4lB,MAAA,EACI5lB,KAAAsoB,KAAA,EAEPtoB,KAAAmmB,KzDwD+BhjB,IyDvDZnD,KAAAmrB,KAAA,KACZnrB,KAAAorB,KzDsDwBjoB,IyD9CxBnD,KAAAqrB,KAAA,IAAAC,KAA0CtrB,cAAAiQ,GAEtE,OADIkK,EAAAiN,KAAOmE,qBAAqBtb,GAChCqP,CAAA,IAOqBtf,KAAAwrB,KAAA,IAAAF,8BAAmCrb,GAExD,OADIkK,EAAAiN,KAAOqE,cAAcxb,GACzBqP,CAAA,EAFwDoM,CAAA1rB,OAiBvBA,KAAAkmB,MAAA,EAQJlmB,KAAAomB,KAAA,IAAAuF,EAUkB3rB,KAAAmoB,KAAA,KAsJ9BnoB,KAAA6lB,MAAA,CA1NG,aAqpBOvF,GAARtgB,KAAA4rB,KAAAtL,EACuBtgB,KAAA6rB,KAAA,KACF7rB,KAAA8rB,KAAA,KACb9rB,KAAA+rB,KzDllByB5oB,IyDmlBtBnD,KAAAgsB,KzDnlBsB7oB,IyDolBtBnD,KAAAisB,KAAA,KACGjsB,KAAAksB,KAAA,KACGlsB,KAAAmsB,MAAA,EACJnsB,KAAAosB,MAAA,EACIpsB,KAAAqsB,MAAA,EACGrsB,KAAAssB,MAAA,CAVrB,kCCtpBG3N,EAASN,GACtB,IACIkO,EAAGC,GAAUlC,gCAAKra,GAElB,OADI2Q,EAAQ0J,GACZhL,CAAA,EAFkBmN,CAAA9N,EAAA2L,8CAIlBjM,EADKxU,GAGb,OAAAyV,CAAA,gBAtBiCtf,KAAA0sB,KAAA,KACd1sB,KAAA2sB,MAAA,CAJ3B,aCAWloB,EAAWwX,EAAW3D,OAC7BkD,EAAU,GAEV,OADAA,EAAItC,KAAKzU,EAAGwX,EAAG3D,GACRkD,CACX,aAgBa/W,EAAQwX,EAAQuC,EAAY3a,OACrC2X,EAAU,GAEV,OADAA,EAAItC,KAAKzU,EAAGwX,EAAGuC,EAAO3a,GACf2X,CACX,eCrBexb,KAAA4sB,KAAA,EACA5sB,KAAA6sB,KAAA,IACA7sB,KAAA8sB,KAAA,EACG9sB,KAAA+sB,KAAA,EACA/sB,KAAAgtB,KAAA,EACAhtB,KAAAitB,KAAA,EACJjtB,KAAAktB,KAAA,EACAltB,KAAAmtB,KAAA,EACAntB,KAAAotB,KAAA,EACOptB,KAAAqtB,KAAA,GACDrtB,KAAAstB,KAAA,GACDttB,KAAAutB,KAAA,IAEAvtB,KAAAwtB,KAAA,GACIxtB,KAAAytB,KAAA,KACDztB,KAAA0tB,KAAA,IACY1tB,KAAA2tB,KAAA,IACN3tB,KAAA4tB,MAAA,CAlB5B,eCJyB5tB,KAAA6tB,KAAAC,KACL9tB,KAAA+tB,KAAA,IACH/tB,KAAAguB,KAAA,EACAhuB,KAAAiuB,KAAA,EACAjuB,KAAAkuB,KAAA,EACIluB,KAAAmuB,KAAA,EACAnuB,KAAAouB,MAAC,EACDpuB,KAAAquB,MAAC,GACFruB,KAAAsuB,KAAA,EACAtuB,KAAAuuB,KAAA,EACAvuB,KAAAwuB,KAAA,CAXpB,kCAgCA,sDACI,IAAAC,GA/CJ,iBAgDI,IAAAA,GAhDJ,WAiDI,IAAAA,GAjDJ,6VV6BqBC,EAAkBC,GACI,OAAnCD,GAAWC,IAAe3uB,KAAAoc,IAAQ,qBAIlCpc,KAAAoc,MAAY,CAChB,qBAQIpc,KAAAoc,MAAY,CAChB,2BC5CJ,kBAAAxb,EAAAZ,KAAAqc,MAAA,SAAAzb,EAAAZ,KAAAsc,MAAA,sBA6BcyK,GACF,GAAAA,EAAMzlB,IAAW,OAAO,aAC5BstB,EAAkB,sBAAWC,EAAkB,sBAAWC,EAAkB,sBAC5EC,GAAmB,sBAAWC,GAAmB,sBAAWC,GAAmB,sBACrEtlB,EAAAod,EAAAnd,IAAAD,EAAAE,KAAO,KAAZ/B,EAAK6B,EAAAG,IACFhC,EAAEuU,KAAI,GAAKuS,IAAMA,EAAO9mB,EAAEuU,KAAI,IAC9BvU,EAAEuU,KAAI,GAAKwS,IAAMA,EAAO/mB,EAAEuU,KAAI,IAC9BvU,EAAEuU,KAAI,GAAKyS,IAAMA,EAAOhnB,EAAEuU,KAAI,IAC9BvU,EAAEwU,KAAI,GAAKyS,IAAMA,EAAOjnB,EAAEwU,KAAI,IAC9BxU,EAAEwU,KAAI,GAAK0S,IAAMA,EAAOlnB,EAAEwU,KAAI,IAC9BxU,EAAEwU,KAAI,GAAK2S,IAAMA,EAAOnnB,EAAEwU,KAAI,GACtC,CACA,OAAO,IAAAqK,EAAmB,IAAAD,aAAA,CAAAkI,EAAMC,EAAMC,IAAqB,IAAApI,aAAA,CAAAqI,EAAMC,EAAMC,IAC3E,mBAGWC,GAIV,OAHG,IAAAxI,aAAA,EAACwI,EAAI7S,KAAI,GAAK6S,EAAI5S,KAAI,IAAM,GAC3B4S,EAAI7S,KAAI,GAAK6S,EAAI5S,KAAI,IAAM,GAC3B4S,EAAI7S,KAAI,GAAK6S,EAAI5S,KAAI,IAAM,GAChC,mBAUa4S,OACTC,EAASD,EAAI5S,KAAI,GAAK4S,EAAI7S,KAAI,GAC9B+S,EAASF,EAAI5S,KAAI,GAAK4S,EAAI7S,KAAI,GAC9BgT,EAASH,EAAI5S,KAAI,GAAK4S,EAAI7S,KAAI,GAC1B,SAAIiT,EAAHH,IAAqBG,EAAHF,IAAqBE,EAAHD,KhBoFtC9qB,KAAOgL,IgBnFY4f,EAAIC,EAAIC,GACX,IACvB,mBAOoBH,GACZ,GAAO,MAAPA,IAAgBlvB,KAAAuvB,GAASL,GAAM,OAAO,SAC1CjmB,EAAQjJ,KAAAwvB,GAAON,GAIf,OAAqB,IAAAxI,aAAA,CAAQ,EAAPzd,EAAE,GAAkB,EAAPA,EAAE,GAAkB,EAAPA,EAAE,IACtD,mBC1CgBwmB,OACZ3I,EAAA9mB,KAAA0c,KAAS,MAAAoK,GAAI9mB,KAAAyc,KAAbqK,GACA9mB,KAAA0c,KAAU+S,CACd,yBAOI3I,EAAA9mB,KAAA0c,KAAS,MAAAoK,GAAI9mB,KAAAyc,KAAbqK,GACA9mB,KAAA0c,KAAU,IACd,mBCVagT,OACTC,WAyDI3lB,EAAyB0lB,SACtB,OAAMA,EAAOE,KAAArlB,UACH,IAAQslB,EACV,IAAAtvB,EACHmvB,EAAOI,KACPJ,EAAOK,KACPL,EAAOM,kBAIF,IAAUC,EACVP,EAAOQ,iBAGP,IAAYC,EACZT,EAAOQ,KACPR,EAAOU,iBAGP,IAASC,EACX,IAAAxtB,EACH6sB,EAAOI,KACPJ,EAAOK,qBArBZO,IAAP,OAAAzrB,CAyBJ,CAnFuB0rB,CAAAvwB,EAAqB0vB,GACxC5vB,EAAe6vB,EAAa1vB,KAC5BF,EAAc4vB,EAAazvB,KAE3BswB,EAAkB1wB,EAASmT,IAC3Bwd,EAAiB1wB,EAAQkT,IAGzByd,EAAgB,IAAAC,aAAaptB,EAAAitB,EAAc,IAC3CI,EAAc,IAAAD,aAAaptB,EAAAitB,EAAc,IAGzC5B,EAAiB,YAAWC,EAAiB,YAAWC,EAAiB,YACzEC,GAAkB,YAAWC,GAAkB,YAAWC,GAAkB,YAEzD7rB,EAAA,EAAA+F,EAATrJ,EAASmT,IAAA,IAAnB,GAAA7P,GAAU+F,IAAV,KAAK9F,EAAKD,EAAAA,EAAAA,EAAS,EAAT,MACN9B,EAAQxB,EAAAwY,EAASjV,GACjBwtB,EAASvvB,EAAEd,KAASU,KACpB4vB,EAASxvB,EAAEd,KAASW,KACpB4vB,EAASzvB,EAAEd,KAASY,KAEpBsvB,EAAUntB,EAAAF,EAAI,IAAKwtB,EACnBH,EAAUntB,EAAAF,EAAI,GAAI,EQskC0C,GRtkCrCytB,EACvBJ,EAAUntB,EAAAF,EAAI,GAAI,EQqkC0C,GRrkCrC0tB,MAEvBC,EAAQ1vB,EAAEb,MAAU,IAAAF,EAAO,EAAI,EAAI,GACnCqwB,EAAQrtB,EAAAF,EAAI,IAAK2tB,EAAE9vB,KACnB0vB,EAAQrtB,EAAAF,EAAI,GAAI,EQikC4C,GRjkCvC2tB,EAAE7vB,KACvByvB,EAAQrtB,EAAAF,EAAI,GAAI,EQgkC4C,GRhkCvC2tB,EAAE5vB,KAEnByvB,EAAKjC,IAAMA,EAAOiC,GAClBC,EAAKjC,IAAMA,EAAOiC,GAClBC,EAAKjC,IAAMA,EAAOiC,GAClBF,EAAK9B,IAAMA,EAAO8B,GAClBC,EAAK9B,IAAMA,EAAO8B,GAClBC,EAAK9B,IAAMA,EAAO8B,SApB1B3tB,GAAU+F,OAwBV8nB,EAAiB,IAAAxV,YAAYgV,GACXzqB,EAAA,EAAAkrB,EAARnxB,EAAQkT,IAAA,IAAlB,GAAAjN,GAAUkrB,IAAV,KAAK7tB,EAAK2C,EAAAA,EAAAA,EAAQ,EAAR,EACNirB,EAAWE,GAAgBC,EAAXrxB,EAAAuY,EAAQ6Y,UAD5BnrB,GAAUkrB,GAKV,gBAwCIlnB,EACJ0lB,EACAgB,EACAE,EACA7wB,EACAywB,EACAC,EACAY,EACAC,OAEAC,EAAgBhuB,EAAAA,EAAAitB,EAAc,GAAI,GAClCgB,EAAiBjuB,EAAAA,EAAAitB,EAAc,GAAI,GACnCiB,EAAgBluB,EAAAktB,EAAa,GAE7BiB,EAAehC,EAAOE,KAAatlB,InB8FuB4M,cmB3F1Dya,EAAW,CACXA,KAAY,GAgBR,GAfJA,EAAAvnB,KAAYsnB,EAGY,IAApBhC,EAAOkC,MAAwC,IAApBlC,EAAOmC,MAAwC,IAApBnC,EAAOoC,OAC7DH,EAAAI,YAAmB,GACnBJ,EAAKI,YAAY7Y,KAAKwW,EAAOkC,KAAWlC,EAAOmC,KAAWnC,EAAOoC,OAIhD,IAAjBpC,EAAOsC,MAAkC,IAAjBtC,EAAOuC,MAAkC,IAAjBvC,EAAOwC,OACvDP,EAAAQ,MAAa,GACbR,EAAKQ,MAAMjZ,KAAKwW,EAAOsC,KAAQtC,EAAOuC,KAAQvC,EAAOwC,OAIjC,IAApBxC,EAAO0C,MAAwC,IAApB1C,EAAO2C,MAAwC,IAApB3C,EAAO4C,KAAkB,KAC/EC,EAAwC,kBAA/B7C,EAAO0C,KAA6B,IAC7CI,EAAwC,kBAA/B9C,EAAO2C,KAA6B,IAC7CI,EAAwC,kBAA/B/C,EAAO4C,KAA6B,MAEpBC,EAAK,EAA9BG,ErDxIsCnuB,KAAWC,IAAIC,KqDwIM8tB,EAAK,EAA9BI,ErDjJIpuB,KAAWI,IAAIC,KqDkJ5B4tB,EAAK,EAA9BI,ErDzIsCruB,KAAWC,IAAIU,KqDyIMstB,EAAK,EAA9BK,ErDlJItuB,KAAWI,IAAIS,KqDmJ5BqtB,EAAK,EAA9BK,ErD1IsCvuB,KAAWC,IAAIgB,KqD0IMitB,EAAK,EAA9BM,ErDnJIxuB,KAAWI,IAAIe,GqDoJrDstB,EAASL,EAAKC,EAAKE,EAAKJ,EAAKG,EAAKE,EAClCE,EAASP,EAAKG,EAAKC,EAAKH,EAAKC,EAAKG,EAClCG,EAASR,EAAKE,EAAKG,EAAKJ,EAAKE,EAAKC,EAClCK,EAAST,EAAKE,EAAKE,EAAKH,EAAKE,EAAKE,EAClCpB,EAAAyB,SAAgB,GAChBzB,EAAKyB,SAASla,KAAK8Z,EAAIC,EAAIC,EAAIC,EACnC,KAGAE,EAAW,CACXA,MAAa,CAAKC,QAAS,MAAOC,UAAW,iBAC7CF,MAAa,EACbA,OAAc,CAAK,CAACG,MAAO,CAAC,KAE5BH,MAAa,IACbA,EAAKG,MAAMta,KAAKyY,GAGhB0B,EAAAI,OAAc,CAAK,CAACC,WAAY,CAAC,CAACC,WAAY,CAACC,SAAU,EAAGC,OAAQ,GAAI9zB,QAAS,EAAG+zB,SAAU,EAAGC,KAAM,UAQvGD,EAAe,GACfA,EAAA1pB,KAAmBsnB,EAAS,OAC5BoC,EAAAE,qBAAgC,GAChCF,EAASE,qBAATC,gBAAgD,GAChDH,EAASE,qBAAqBC,gBAAgB/a,KAAKwW,EAAOwE,KAAQxE,EAAOyE,KAAQzE,EAAO0E,KAAQ1E,EAAO2E,MACvGP,EAASE,qBAATM,eAA+C,GAC/CR,EAASE,qBAATO,gBAAgD,GAGhDT,EAAAU,YAAuB9E,EAAO+E,MAAS/E,EAAO2E,KAAS,EACnD3E,EAAO+E,OACPX,EAAAY,WAAsB,GACtBZ,EAASY,WAAT,oBAA6C,IAGjDrB,EAAAsB,UAAiB,GACjBtB,EAAKsB,UAAUzb,KAAK4a,GAKhBpE,EAAO+E,OACPpB,EAAAuB,eAAsB,GACtBvB,EAAKuB,eAAe1b,KAAK,4BAI7B2b,EAAkB,CAClBA,WAAyB,EACzBA,cAA4B,MAC5BA,EAAA3rB,MAAoBsnB,EACpBqE,EAAAC,KAAmB,OACnBD,EAAA/d,IAAkB,GAClB+d,EAAY/d,IAAIoC,KAAKmY,EAAQ,GAAIA,EAAQ,GAAIA,EAAQ,IACrDwD,EAAAtlB,IAAkB,GAClBslB,EAAYtlB,IAAI2J,KAAKoY,EAAQ,GAAIA,EAAQ,GAAIA,EAAQ,QAErDyD,EAAmB,CACnBA,WAA0B,EAC1BA,cAA6B,MAC7BA,EAAA7rB,MAAqBsnB,EACrBuE,EAAAD,KAAoB,WAEpBE,EAAkB,CAClBA,WAAyB,EACzBA,cAA4B,MAC5BA,EAAA9rB,MAAoBunB,EACpBuE,EAAAF,KAAmB,SAEnBzB,EAAA4B,UAAiB,GACjB5B,EAAK4B,UAAU/b,KAAK2b,EAAaE,EAAcC,OAG/CE,EAAU,CACVA,OAAa,EAAGA,WAAiB,GAAGA,EAAAC,WAAiB5D,EAAU2D,EAAAE,OAAa,UAE5EC,EAAU,CACVA,OAAa,GAAGA,EAAAC,WAAiB/D,EAAU8D,EAAAF,WAAiB3D,EAAW6D,EAAAD,OAAa,UAEpFG,EAAU,CACVA,OAAa,GAAGA,EAAAD,WAAiB/D,EAAWC,EAA5B,EAAuC+D,EAAAJ,WAAiB1D,EAAU8D,EAAAH,OAAa,MAE/F/B,EAAAmC,YAAmB,GACnBnC,EAAKmC,YAAYtc,KAAKgc,EAAKG,EAAKE,OAGhCE,GAAgBlE,EAAWC,EAAX,GAAuBC,EAAvCgE,EACAC,GAAc,GAAKD,EAAY,EAAjB,GAAD,GAAwB,EAArCC,EACAC,EAAuBF,EAAYC,EAAnCC,EAEAtC,EAAAuC,QAAe,OACfC,EAAU,GACVA,EAAAV,WAAiBM,EACjBpC,EAAKuC,QAAQ1c,KAAK2c,WAGlBC,EAAsBC,KAAKC,UAAU3C,GAC9ByC,EAAQzsB,OAAS,EAAjB,GAAyBysB,GAAW,QAC3CG,EAAiBH,EAAQzsB,OAGzB6sB,GAAwC,GAAtB,GAASD,EAAT,MAA0BN,EAA5CO,EAEAC,EAAU,IAAApuB,YAAYmuB,GACtBpL,GAAW,IAAAsL,SAASD,GACpB9c,GAAa,EAGbyR,GAAKuL,UAAUhd,GAAQ,YAAY,GAAOA,GAAAA,GAAU,EAAV,EAC1CyR,GAAKuL,UAAUhd,GAAQ,GAAG,GAAOA,GAAAA,GAAU,EAAV,EACjCyR,GAAKuL,UAAUhd,GAAQ6c,GAAa,GAAO7c,GAAAA,GAAU,EAAV,EAG3CyR,GAAKuL,UAAUhd,GAAQ4c,GAAY,GAAO5c,GAAAA,GAAU,EAAV,EAC1CyR,GAAKuL,UAAUhd,GAAQ,YAAY,GAAOA,GAAAA,GAAU,EAAV,MACxBjW,GAAA,EAAA+F,GAAA6O,EAAR8d,GAAQ,IAAlB,GAAA1yB,IAAU+F,KAAV,KAAK9F,GAAKD,GAAAA,GAAAA,GAAQ,EAAR,MACQgQ,GAAAiG,GAAAA,GAAAjG,GAAM,EAAN,SAAU3C,EAAAqlB,EAAQzyB,ISrPSqB,GAAP4xB,EAAL9yB,ITqP7BsnB,GAAKyL,SAASnjB,GAA0BojB,EAAL9xB,WADvCtB,IAAU+F,IAKV2hB,GAAKuL,UAAUhd,GAAQsc,GAAkB,GAAOtc,GAAAA,GAAU,EAAV,EAChDyR,GAAKuL,UAAUhd,GAAQ,SAAY,GAAOA,GAAAA,GAAU,EAAV,MAG1Cod,GAAe,IAAAC,WAAWP,GAC1BQ,GAAgB,IAAAD,WAAWhG,EAAU1nB,QAC3BhD,GAAA,EAAV,GAAAA,GAAkBurB,IAAlB,KAAKluB,GAAK2C,GAAAA,GAAAA,GAAA,IACNywB,GAASpd,GAAS8X,GQ0qBuC,GR1qBlCwF,GAAUxF,UADrCnrB,GAAkBurB,GAGlBlY,GAAAA,GAAUkY,EAAV,MAGAqF,GAAiB,IAAAF,WAAW9F,EAAQ5nB,QAC1B/B,GAAA,EAAV,GAAAA,GAAkBuqB,IAAlB,KAAKnuB,GAAK4D,GAAAA,GAAAA,GAAA,IACNwvB,GAASpd,GAASwd,GQmqBuC,GRnqBlCD,GAAWC,UADtC5vB,GAAkBuqB,GAGlBnY,GAAAA,GAAUmY,EAAV,MAGAsF,GAAgB,IAAAJ,WAAW32B,EAAQiJ,QACzB9B,GAAA,EAAV,GAAAA,GAAkBuqB,IAAlB,KAAKpuB,GAAK6D,GAAAA,GAAAA,GAAA,IACNuvB,GAASpd,GAAS0d,GQ4pBuC,GR5pBlCD,GAAUC,UADrC7vB,GAAkBuqB,GAGlBpY,GAAAA,GAAUoY,EAAV,MAGUuF,GAAA,EAAV,GAAAA,GAAkBtB,IAAlB,CAAUsB,GAAAA,GAAA,QACQC,GAAA5d,GAAAA,GAAA4d,GAAM,EAAN,EAAdnM,GAAKyL,SAASU,GAAY,SAD9BD,GAAkBtB,GAIlB,OAAOS,CACX,CA/OWe,CAAAl3B,EACM0vB,EACGgB,EACFE,EACAK,EACIT,EACDC,EACU,IAAAE,aAAA,CAAA/B,EAAMC,EAAMC,IACZ,IAAA6B,aAAA,CAAA5B,EAAMC,EAAMC,IAE3C,mBEvBWxqB,EAAWwX,EAAW3D,GAC7BtY,KAAAmiB,KAAU1d,EAAGzE,KAAAsiB,KAAUrG,EAAGjc,KAAA0kB,KAAUpM,CACxC,qBAWQtY,KAAA6kB,OAAe7kB,KAAAohB,OACfphB,KAAAiiB,KAAAjiB,KAAAiiB,KAASjiB,KAAA8kB,MAIT9kB,KAAA6hB,OACA7hB,KAAAiiB,KAAAjiB,KAAAiiB,KAASjiB,KAAA8hB,KACT9hB,KAAAkiB,KAAAliB,KAAAkiB,KAAOliB,KAAAgiB,KACPhiB,KAAA8hB,KAAA9hB,KAAA8hB,KAAiB9hB,KAAA+kB,KACjB/kB,KAAAgiB,KAAAhiB,KAAAgiB,KAAehiB,KAAA+kB,YAIT/kB,KAAA2kB,OAAY3kB,KAAA4kB,OAAQ5kB,KAAAkiB,OvD6SuB3d,KAAWuS,IAAAiM,EAAOjb,GuD7SvE9H,KAAAkiB,KvDsTqD3d,KAAWgL,IAAAyT,EAAOC,SuDrTxDjjB,KAAA6iB,OAAiB7iB,KAAA8iB,OAAa9iB,KAAAqiB,OvD4SQ9d,KAAWuS,IAAAqgB,EAAOC,GuD5SvEp3B,KAAAqiB,KvDqTqD9d,KAAWgL,IAAA8nB,EAAOC,SuDlT5Dt3B,KAAAmiB,OAAUniB,KAAAqiB,OAAeriB,KAAAkiB,OAAfvc,EvDnFqBpB,KAAWI,IAAIF,KuDmFVzE,KAAAiiB,KAA/CsV,EAAWlyB,EAAUO,EvDnFqBrB,KAAWI,IAAIC,KuDoF9C5E,KAAAsiB,OAAUtiB,KAAAqiB,OAAeriB,KAAAkiB,KAApCsV,EAAW/T,EAAUC,EvD3EqBnf,KAAWC,IAAIU,KuD4E9ClF,KAAA0kB,OAAU1kB,KAAAqiB,OAAeriB,KAAAkiB,OAAfyB,EvDrFqBpf,KAAWI,IAAIS,KuDqFVpF,KAAAiiB,KAA/CwV,EAAW7Q,EAAUhD,EvD5EqBrf,KAAWC,IAAIgB,GuD+EzDxF,KAAAykB,KAAOiT,OACHC,GAAOJ,EAAMC,EAAMC,GACnBE,GAAO33B,KAAAmiB,KAASniB,KAAAsiB,KAAStiB,KAAA0kB,MACzBiT,GAAO,EAAK,EAAK,GAEzB,qBAKA,oBC0BQpZ,EACAqZ,EACAC,EACAC,aAGAC,EAAKH,KAAQrZ,IAAAsZ,IAAAC,aACT,QAKInN,EADwBqN,SACMC,OAAO9mB,OAAOkP,GAC5CuK,EAAeD,EAAOuN,iBACtBrN,EAAYF,EAAOwN,cACnBpN,EAAgBJ,EAAOyN,kBACvBtN,EAAWH,EAAO0N,eAGKL,SAASM,cAAc5wB,MAAMyJ,SAApD6Z,EAAoBlmB,aAAAyzB,EAAAzzB,EAAAmc,IACpBuD,EAAamG,EAAO6N,aAAaxN,GAGjCF,EAAK2N,UAAUjU,GACfsG,EAAK4N,SAAS7N,OAGdrM,EAAY6B,EAAO7B,MACnB3a,EAAawc,EAAOxc,OACpBinB,EAAK6N,YAAYC,GAAS,EAAG,EAAGpa,EAAO3a,QAGvCg1B,EAAiBh1B,EAAS,EAAG2a,EAAmB3a,EAAuB,EACvE2gB,EAAOsU,iBACY,GACND,EACF,GACD,KAIVrU,EAAOkT,OACHC,GAAO,EAAK,IAAK,GACjBA,GAAO,EAAK,EAAK,GACjBA,GAAO,EAAK,EAAK,IAKrBnT,EAAOuU,kBAAkB,KAGzBnO,EAASoO,gBAAgB,CAAKC,WAAY,CAAC,IAAM,IAAM,IAAM,GAAMC,OAAO,IAI1EpO,EAAKqO,2BAA2B,CAC2BzK,SAAS,EACT9qB,OAAQ,GACRw1B,KAAM,KACNC,UAAW,EACXC,QAAS,IAIpExO,EAAKyO,gBAAgB,CAC2B7K,SAAS,EACT8K,SAAU,GACVC,WAAW,EACXC,OAAQ,IAIxD5O,EAAK6O,+BAA+B,CAC2BjL,SAAS,QAGxEpO,EAAgB,IAAAsZ,GACZvZ,EAAQsK,EAAQC,EAAUC,EAAOC,EAAMtG,EAAQuG,EAAWC,GAI9D6O,EAAc,IAAAC,GAAiBxZ,GACvByZ,EAARF,GACAA,EAAQG,KAERC,EAAQ3Z,iDACHzW,EAAAA,EACL0T,QAAQwK,MAAM,kDAAmDle,GAEzE,OAAAyV,CAAA,GACJ,oBA3FIf,EACAqZ,EACAC,EACAC,0B/BvI0C,a+BsIDoC,gFAtC7CC,EACAC,EACAC,EACAC,EACA7c,SAEiB,IAAA8c,EAAsBv6B,KAAA+lB,KAAQ/lB,KAAAirB,MACtCznB,EAAA6e,KAAW8X,EAChB32B,EAAA2b,GAAOib,EAASC,EAASC,GACpB92B,EAAAqhB,KAAapH,MAHtB+c,E3D3BGh3B,E2DiCH,OADAxD,KAAAmoB,KAAmBqS,EACZA,CACX,oBAsHWhc,EAAiC3a,GACpC,GAAA2a,GAAS,GAAK3a,GAAU,EAAG,OAAAyb,EAC/Btf,KAAA+lB,KAAOvH,MAAQA,EACfxe,KAAA+lB,KAAOliB,OAASA,EAChB7D,KAAAkpB,KAAKyP,YAAYC,GAAS,EAAG,EAAGpa,EAAO3a,IACvC7D,KAAAirB,KAAO6N,iBACY,GACNta,EAAmB3a,EACrB,GACD,IAEd,sBAOQ,GAAA7D,KAAA4lB,KAAW,OAAAtG,EACftf,KAAA4lB,MAAY,EACZ5lB,KAAAsoB,KAAgB,EAChBgB,GAAAtpB,KAAW,EACf,sBAIIA,KAAA4lB,MAAY,MACZkB,EAAA9mB,KAAAopB,KAAkB,MAAAtC,GAAMxJ,OAAOmd,qBAA/B3T,GACA9mB,KAAAopB,KAAmB,IACvB,oBAgBIsR,EACAC,SAEazc,EAAAle,KAAAmrB,KAAA,SAAAjN,SAAele,KAAAonB,KAAOwT,oBAA2B56B,KAAAmrB,K3DzL5D3nB,IACCA,S2DwLU0a,QAAb2c,EAAAA,EAGAC,EAAmBC,EAAJL,EAAwBM,EAAA,KAAO,MAE9C1d,OAAO2d,MAAMP,GAAK1d,KAAKke,MAEhBC,GAAAN,EAAA76B,KAAA86B,EAAAJ,EAAAC,GO3P0B3X,EAAAhG,KAAKoe,GPkSpCC,SAAMX,WAAE3S,GAEV,OADIxK,QAAQwK,MAAO,wCAAsCuC,EAAMvC,GAC/DzI,CAAA,GACJ,sBAQItf,KAAAs7B,GAAgB,kEACpB,oBAGoBC,EAAgBC,eAEhCle,OAAO2d,MAAMM,GAAQve,KAAKye,SAA0Bz7B,OAAAu7B,WAAEvyB,OAClD0yB,EAAUvhB,EAAAiN,KAAOuU,kBAAkB3yB,GAOvC,OAHImR,EAAAkR,KAAcuQ,GAAYF,GAC1BvhB,EAAA0P,KAAMgS,iBAAiBH,GACvBne,QAAQ5N,IAAK,8BAA4BmsB,GAC7Cxc,CAAA,GAKW,GOhUsB0D,EAAAhG,KAAKoe,GP2TpCC,kCAAQtT,GAEV,OADIxK,QAAQwK,MAAO,qCAAmC+T,EAAS/T,GAC/DzI,CAAA,EAFQyc,CAAAR,IAKG,MAAXC,OAAW,OACPle,OAAO2d,MADXO,GACsBxe,KAAKgf,oCAA4BhzB,OAC/CizB,EAAU9hB,EAAAiN,KAAO8U,kBAAkBlzB,GAKvC,OAHImR,EAAAqR,KAAOoQ,GAAYK,GACnB9hB,EAAA0P,KAAMsS,UAAUF,GAChB1e,QAAQ5N,IAAK,iCAA+B2a,GAChDhL,CAAA,EANiD8c,CAAAp8B,KADrDw7B,GOhUiCzY,EAAA/F,KAAKqf,GPuUhChB,SAPNG,WAOczT,GAEV,OADIxK,QAAQwK,MAAO,wCAAsCuC,EAAMvC,GAC/DzI,CAAA,GACJ,CACJ,oBA1BoBic,EAAgBC,0BAAqB,2EAkC5C9L,WACQsI,SAASM,cAAc5wB,MAAMyJ,SAA9CmrB,EAAcz3B,aAAA0zB,EAAA1zB,EAAAoc,IAIE,OAAMyO,EAAO7B,KAAAtjB,UACf,IAAe,aACf,IAAS,aACT,IAAQ,gBAHN+lB,QAAhBiM,EAAAA,EAOA1C,EAAc2C,EAAaC,QAAQF,GACnC1C,EAAQR,UAAU3J,EAAO3B,MACzB8L,EAAQv5B,MAAMq3B,GACVjI,EAAO1B,KACP0B,EAAOzB,KACPyB,EAAOxB,OAEX2L,EAAQ6C,aAAY,GAEhBhN,EAAO7B,KAAPxS,OAAyByS,MACzB+L,EAAQ8C,UAAUhF,GACdjI,EAAOvB,KACPuB,EAAOtB,KACPsB,EAAOrB,QAGXwL,EAAQ15B,SAASw3B,GACbjI,EAAOpB,KACPoB,EAAOnB,KACPmB,EAAOlB,OAEXqL,EAAQ+C,QAAQ,KAGpB/C,EAAQgD,MAAM78B,KAAAonB,KAAQkV,GACtBt8B,KAAA6pB,KAAMiT,UAAUR,GAChBt8B,KAAAorB,KAAc3nB,EAAI64B,EACtB,oBAWgB5M,SACZqN,EAAmCC,EAAAC,GAASvN,GAC/BxR,EAAAle,KAAAmrB,KAAA,SAAAjN,SAAele,KAAAonB,KAAOwT,oBAA2B56B,KAAAmrB,K3D5U5D3nB,IACCA,S2D2UU0a,QAAb2c,EAAAA,EAEA,QACI5V,EAAY4V,EAAOnR,YAAYqT,GAC3B,GAAS,MAAT9X,EAAe,OACf0E,EAAe1E,EAAM2E,cACrB5pB,KAAA6pB,KAAMC,YAAYH,GAEH,MACX1E,EAAMyC,cAAcqC,0DAEpB,SAHJ7E,EAAAA,EAMAllB,KAAAmmB,KAAO1iB,EAAI,IAAAwmB,GAAYhF,EAAOC,IAI9BD,EAAMkF,iBACOlF,aAA4B,OAA1BmF,EAAMC,oBAAoB/K,CAAA,GACzB,KACD,GACK,YAEpB/B,QtBhO+D2f,EsBgO3BxN,EAAOE,KAAatlB,ItBhON4M,csBgO1CvR,EAAAgK,IAAK,wBAAgDutB,EAAY,UAC7E,MACI3f,QAAQwK,MAAO,kDAAiD2H,EAAOE,KAA/DhvB,WAEhB,+CAASiJ,EAAAA,EACL0T,QAAQwK,MAAO,sCAAqC2H,EAAOE,KAAnDhvB,WAAmEonB,GAEnF,sBAOQ,GAAAhoB,KAAAmmB,KAAO7kB,IAAW,OAAAge,MACLpB,EAAAle,KAAAmoB,KAAA,SAAAjK,EAAoB,OAAAoB,UAArCkb,EAAiBtc,EAGjB0Q,EAAkB,sBAAWC,EAAkB,sBAAWC,EAAkB,sBAC5EC,GAAmB,sBAAWC,GAAmB,sBAAWC,GAAmB,sBAEjEtlB,EAAA3J,KAAAmmB,KAAAvc,IAAAD,EAAAE,KAAQ,KAClByc,EADU3c,EAAAG,IACOsb,KAAMmB,iBACvBC,EAAkBF,EAAKxP,IACvB2P,EAAkBH,EAAK/W,MAClBiX,EAAG,GAAJ,GAAkBlD,EAAjBC,EAAAze,GAAAA,EAAAmc,KAA8B2N,EAA+B,OAAjBpI,EAAG,GAAXoI,EAAyBtL,EAAjBC,EAAAle,GAAAA,EAAA4b,WAC5CuF,EAAG,GAAJ,GAAkBlD,EAAjBC,EAAA5d,GAAAA,EAAAsb,KAA8B4N,EAA+B,OAAjBrI,EAAG,GAAXqI,EAAyBvL,EAAjBC,EAAA3d,GAAAA,EAAAqb,WAC5CuF,EAAG,GAAJ,GAAkBlD,EAAjBC,EAAAE,GAAAA,EAAAxC,KAA8B6N,EAA+B,OAAjBtI,EAAG,GAAXsI,EAAyBxL,EAAjBC,EAAAG,GAAAA,EAAAzC,WAC5CwF,EAAG,GAAJ,GAAkBnD,EAAjBC,EAAAqD,GAAAA,EAAA3F,KAA8B8N,EAA+B,OAAjBtI,EAAG,GAAXsI,EAAyBzL,EAAjBC,EAAAI,GAAAA,EAAA1C,WAC5CwF,EAAG,GAAJ,GAAkBnD,EAAjBC,EAAAK,GAAAA,EAAA3C,KAA8B+N,EAA+B,OAAjBvI,EAAG,GAAXuI,EAAyB1L,EAAjBC,EAAAM,GAAAA,EAAA5C,WAC5CwF,EAAG,GAAJ,GAAkBnD,EAAjBC,EAAAO,GAAAA,EAAA7C,KAA8BgO,EAA+B,OAAjBxI,EAAG,GAAXwI,EAAyB3L,EAAjBC,EAAAQ,GAAAA,EAAA9C,KACrD,KAEAyR,GAAU9D,EAAOG,GAAQ,EACzB6D,GAAU/D,EAAOG,GAAQ,EACzB8D,GAAUhE,EAAOG,GAAQ,EACzBtN,EAASoN,EAAOH,EAChBhN,EAASoN,EAAOH,EAChBsO,EAASlO,EAAOH,IACcnN,EAAKA,EAAKC,EAAKA,EAAKub,EAAKA,EAAvDv5B,ExD/S2CW,KAAW4X,KAAK1X,GwD+SE,EAE7D+1B,EAAWrb,GAAOuT,EAAIE,EAAIE,GAC1B0H,EAAWnY,KAAoB,IAATze,EACtB42B,EAAW3X,KAAuB,GAATjf,EACzB42B,EAAW1X,KAAuB,GAATlf,CAC7B,sBAuFI5D,KAAAo9B,SACAtW,EAAA9mB,KAAAmoB,KAAkB,MAAArB,GAAlBA,EAAkBuW,SAGlBC,EAAAt9B,KAAAmrB,KAAa,SAAAmS,gB/CwyCD3zB,E+CvyCR3J,KAAAmmB,K/CuyCQvc,IAAAD,EAAAE,KAAM,KAAjBP,EAAWK,EAAAG,I+CxyCZwzB,EAC4BC,a/CuyCHj0B,E+CvyCmB8b,K/CuyCZ,C+CxyChCkY,EAEWE,SAEXx9B,KAAAmmB,KAAOsX,a/CoyCKnW,E+CjyCZtnB,KAAAorB,K/CiyCYxhB,IAAA0d,EAAAzd,KAAM,KAAjBP,EAAWge,EAAAxd,I+CjyCY9J,KAAAonB,KAAOsW,c/CiyCNC,EAAO,C+ChyChC39B,KAAAorB,KAAcqS,KAKe,MAAzBz9B,KAAAqrB,KAAc3O,MAAiB1c,KAAA6pB,KAAMgS,iBAAiB,MAC1D77B,KAAAqrB,KAAcuS,KACQ,MAAlB59B,KAAAwrB,KAAO9O,MAAiB1c,KAAA6pB,KAAMsS,UAAU,MAC5Cn8B,KAAAwrB,KAAOoS,KAGP59B,KAAAonB,KAAOyW,gBAAgB79B,KAAA8oB,MACvB9oB,KAAAonB,KAAO0W,YAAY99B,KAAAkpB,MACnBlpB,KAAAonB,KAAO2W,aAAa/9B,KAAA6pB,MACpB7pB,KAAAonB,KAAO4W,uBAAuBh+B,KAAAkrB,MAC9BlrB,KAAAonB,KAAO6W,iBAAiBj+B,KAAAgpB,MACAgP,SACfC,OAAOiG,QAAQl+B,KAAAonB,KAC5B,oBAyFW+W,SACQ,IAAAC,GAAqBD,E3DhnBxC36B,G2DgnBIxD,KAAA6rB,K3D/mBGroB,C2DgnBP,oBAGU26B,SACQ,IAAAE,GAAoBF,E3DrnBtC36B,G2DqnBIxD,KAAA8rB,K3DpnBGtoB,C2DqnBP,oBAyBmBkrB,GACf1uB,KAAAmsB,KAAwBuC,CAC5B,oBAGeA,GACX1uB,KAAAosB,KAAoBsC,CACxB,sBAcI1uB,KAAA4rB,KAAU1F,KAAoBlmB,KAAAssB,SAC9BxF,EAAA9mB,KAAA6rB,KAGI,GAHU,MAAA/E,GAAdA,EAAcwX,GAAQt+B,KAAA4rB,KAAUX,MAGb,MAAfjrB,KAAA8rB,KACA9rB,KAAA4rB,KAAU2S,GAASC,EAAAx+B,KAAA8rB,WAChB,OAEY,IAAAuS,GACX76B,EAAAkc,KACAlc,EAAAmc,GAAU,KACVnc,EAAAqc,GAAU,IAAO,GAAO,QAH5B4e,E3D3qBDj7B,E2DgrBCxD,KAAA4rB,KAAU2S,GAASE,SAGH,IAAAJ,GACZr5B,EAAA0a,KACA1a,EAAA2a,GAAU,MACV3a,EAAA6a,IAAW,IAAO,GAAM,QAH5B6e,E3DnrBD15B,E2DwrBChF,KAAA4rB,KAAU2S,GAASG,SAGJ,IAAAL,GACX94B,EAAAma,KACAna,EAAAoa,GAAU,KACVpa,EAAAo5B,GAAM,IAAO,GAAM,GACnBp5B,EAAAsa,GAAU,GAAO,GAAM,OAJ3B+e,E3D3rBDr5B,E2DisBCvF,KAAA4rB,KAAU2S,GAASK,EACvB,CAGc,MAAV5+B,KAAAisB,KACAjsB,KAAA4rB,KAAUiT,GAAgBL,EAAAx+B,KAAAisB,MAAUjsB,KAAAksB,MAC7BlsB,KAAAqsB,MAEPrsB,KAAA4rB,KAAUkT,a/C0lCFn1B,E+CvlCZ3J,KAAA+rB,K/CulCYniB,IAAAD,EAAAE,KAAM,KAAjBP,EAAWK,EAAAG,I+CtlCR9J,KAAA4rB,KAAUY,G/CslCWljB,E+CtlCMy1B,K/CslCNz1B,E+CtlCkB01B,K/CslCX,SAApB1X,E+CplCZtnB,KAAAgsB,K/ColCYpiB,IAAA0d,EAAAzd,KAAM,KAAjBP,EAAWge,EAAAxd,I+CnlCR9J,KAAA4rB,KAAUqT,G/CmlCWtB,EAAO,C+CjlC5B,GAAA39B,KAAAmsB,KAAuB,KACvB+S,EAAUl/B,KAAA6rB,QAEU,MAALqT,EAAK,KAALA,EAAKpS,OAAQ,KACT,MAALoS,EAAK,KAALA,EAAKnS,OAAW,KACX,MAALmS,EAAK,KAALA,EAAKlS,OAAW,EAChBmS,EAAK,MAALD,EAAK,KAALA,EAAKjS,KAJnBjtB,KAAA4rB,KAAUwT,GAAAv6B,EAAAC,EAAAO,EAII85B,GAAgB,EACbn/B,KAAAosB,KAErB,CACJ,oBC5xBoBiT,GAChBr/B,KAAA0sB,KAAa2S,CACjB,2BAOc3E,OACDxc,EAAAle,KAAA0sB,KAAA,aAAAxO,EAAqBE,QAAQC,OAAOC,EAAU,gCAChD,IAAAF,QAAQkhB,GADNphB,EACMwc,GASnB,gCAMmBa,OACfzU,EAAA9mB,KAAA0sB,KAAY,MAAA5F,GAAZA,EAAY+X,GAAgBtD,EAAQ,KACxC,0CAM6BA,EAAgBC,OACzC1U,EAAA9mB,KAAA0sB,KAAY,MAAA5F,GAAZA,EAAY+X,GAAgBtD,EAAQC,EACxC,gCASmBv3B,EAAe8C,EAAaozB,OAC3CrT,EAAA9mB,KAAA0sB,KAAY4Q,EAAA,MAAAxW,EAAA,KAAZA,EAAYqB,KAAkB,MAAAmV,IAA9BA,EACOrb,KAAQhe,EADfq5B,EAEOpb,KAAMnb,EAFbu2B,EAGOjb,KAAW8X,EAEtB,iCAMoB11B,EAAWwX,EAAW3D,OACtCwO,EAAA9mB,KAAA0sB,KAAY4Q,EAAA,MAAAxW,EAAA,KAAZA,EAAYqB,KAAkB,MAAAmV,GAA9BA,EAA8Bne,GAAO1a,EAAGwX,EAAG3D,EAC/C,+BAMkBoW,OACd5H,EAAA9mB,KAAA0sB,KAAY4Q,EAAA,MAAAxW,EAAA,KAAZA,EAAYqB,KAAkB,MAAAmV,IAA9BA,EAA8BzY,KAAa6J,EAC/C,oCAMuB6Q,OACnBzY,EAAA9mB,KAAA0sB,KAAY4Q,EAAA,MAAAxW,EAAA,KAAZA,EAAYqB,KAAkB,MAAAmV,IAA9BA,EAA8BxY,KAAkBya,EACpD,+BAMkBzoB,EAAavH,OAC3BuX,EAAA9mB,KAAA0sB,KAAY4Q,EAAA,MAAAxW,EAAA,KAAZA,EAAYqB,KAAkB,MAAAmV,IAA9BA,EACOza,KAAc/L,EADrBwmB,EAEOxa,KAAcvT,EAEzB,sCAOIuX,EAAA9mB,KAAA0sB,KAAY,MAAA5F,GAAZA,EAAYvG,IAChB,qCAOIuG,EAAA9mB,KAAA0sB,KAAY,MAAA5F,GAAZA,EAAYsW,IAChB,wBAMW5e,EAAY3a,OACnBijB,EAAA9mB,KAAA0sB,KAAY,MAAA5F,GAAZA,EAAYb,GAAOzH,EAAO3a,EAC9B,oCAOuBJ,EAAW+7B,EAAW13B,EAAWD,OAC3CqW,EAAAle,KAAA0sB,KAAA,SAAAxO,EAAc,OAAAoB,MAAvB+f,EAASnhB,EACTuhB,EAAW,GACXn/B,EAAY,GACZA,EAAM4Y,KAAKzV,EAAG+7B,EAAG13B,EAAGD,GACpB43B,EAAA,WAAqBn/B,EACrBm/B,EAAA,OAAgB,EAChBJ,EAAGvW,KAASkQ,gBAAgByG,EAChC,mCAOI3Y,EAAA9mB,KAAA0sB,KAAY,MAAA5F,GAAZA,EAAY4Y,IAChB,sCAWyBhR,OACrB5H,EAAA9mB,KAAA0sB,KAAY,MAAA5F,IAAZA,EAAYZ,KAAoBwI,EACpC,2BAOQ,IAAC1uB,KAAA2sB,KAAU,CACX3sB,KAAA2sB,MAAW,MACX7F,EAAA9mB,KAAA0sB,KAAY,MAAA5F,GAAZA,EAAY6Y,KACZ3/B,KAAA0sB,KAAa,IACjB,CACJ,oBE9IQjoB,EAAWwX,EAAW3D,GAC1BtY,KAAA4sB,KAAOnoB,EAAGzE,KAAA6sB,KAAO5Q,EAAGjc,KAAA8sB,KAAOxU,CAC/B,oBAEW7T,EAAWwX,EAAW3D,GAC7BtY,KAAA+sB,KAAUtoB,EAAGzE,KAAAgtB,KAAU/Q,EAAGjc,KAAAitB,KAAU3U,CACxC,oBAMQsnB,GAAmB5/B,KAAAqtB,KAAauS,CAAQ,oBAkBpCpb,GACRA,EAAOkT,OACHC,GAAO33B,KAAA4sB,KAAM5sB,KAAA6sB,KAAM7sB,KAAA8sB,MACnB6K,GAAO33B,KAAA+sB,KAAS/sB,KAAAgtB,KAAShtB,KAAAitB,MACzB0K,GAAO33B,KAAAktB,KAAKltB,KAAAmtB,KAAKntB,KAAAotB,OAEjBptB,KAAA4tB,MAAuC,MAAlB5tB,KAAA2tB,KACrBnJ,EAAOuU,kBAAkByF,EAAAx+B,KAAA2tB,OAEzBnJ,EAAOqb,YAAY7/B,KAAAwtB,KAAUxtB,KAAAytB,KAAcztB,KAAA0tB,KAEnD,sBCrDoB1tB,KAAA6tB,KAAiBC,IAAY,oBAInC3gB,GAAiBnN,KAAA+tB,KAAY5gB,CAAM,oBAEvC1J,EAAU+7B,EAAU13B,GAC1B9H,KAAAguB,KAASvqB,EAAGzD,KAAAiuB,KAASuR,EAAGx/B,KAAAkuB,KAASpmB,CACrC,oBAEcrD,EAAUwX,EAAU3D,GAC9BtY,KAAAmuB,KAAa1pB,EAAGzE,KAAAouB,KAAanS,EAAGjc,KAAAquB,KAAa/V,CACjD,0NIvCJ9Y,EAAAD,QAAAM,ICCAigC,EAAA,GAGA,SAAAC,EAAAC,GAEA,IAAAC,EAAAH,EAAAE,GACA,QAAAE,IAAAD,EACA,OAAAA,EAAA1gC,QAGA,IAAAC,EAAAsgC,EAAAE,GAAA,CAGAzgC,QAAA,IAOA,OAHA4gC,EAAAH,GAAAxgC,EAAAA,EAAAD,QAAAwgC,GAGAvgC,EAAAD,OACA,CCnBAwgC,CAAA,WDFAD","sources":["webpack://sceneview-web/webpack/universalModuleDefinition","webpack://sceneview-web/../sceneview-core/src/commonMain/kotlin/io/github/sceneview/geometries/GeometryData.kt","webpack://sceneview-web/../sceneview-core/src/commonMain/kotlin/io/github/sceneview/rendering/Vertex.kt","webpack://sceneview-web/../sceneview-core/src/commonMain/kotlin/io/github/sceneview/geometries/CubeGeometry.kt","webpack://sceneview-web/../Users/romainguy/Source/kotlin-math/src/commonMain/kotlin/dev/romainguy/kotlin/math/Vector.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/collectionJs.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/util/Standard.kt","webpack://sceneview-web/../sceneview-core/src/commonMain/kotlin/io/github/sceneview/geometries/CylinderGeometry.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/collections/Collections.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/math.kt","webpack://sceneview-web/../sceneview-core/src/commonMain/kotlin/io/github/sceneview/geometries/PlaneGeometry.kt","webpack://sceneview-web/../sceneview-core/src/commonMain/kotlin/io/github/sceneview/geometries/SphereGeometry.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/globalThis.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/math.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/ArrayBuffer.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/metadataUtils.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/js-builtin-sources/libraries/stdlib/jvm/builtins/Number.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/common/src/generated/_Arrays.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/common/src/generated/_Collections.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/builtins/Char.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/builtins/Enum.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/builtins/Library.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/builtins/Primitives.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/boxedLong.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/charSequenceJs.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/collectionsHacks.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/compareTo.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/coreRuntime.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/typeCheckUtils.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/coreRuntime.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/hacks.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/metadataUtils.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/NumbersJs.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/Unit.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/kotlin.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/collections/AbstractMutableCollection.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/collections/AbstractMutableList.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/collections/ArrayList.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/util/Preconditions.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/exceptions.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/reflect/KClassImpl.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/text/StringBuilderJs.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/text/charJs.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/text/stringJs.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/generated/_ComparisonsJs.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/collections/AbstractCollection.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/collections/AbstractList.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/text/Appendable.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/text/Char.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/text/Strings.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/common/src/generated/_Strings.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/generated/_ArraysJs.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/numberConversion.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/numberConversion.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/text/stringsCode.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/common/src/generated/_Ranges.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/arrays.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/arrays.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/noPackageHacks.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/AutoCenterGate.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/ContentCentering.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/EnvironmentResourceTracker.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/GeometryGLBBuilder.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/Main.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/OrbitCameraController.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/SceneView.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/SceneViewJS.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/bindings/FilamentHelpers.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/nodes/CameraConfig.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/nodes/LightConfig.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/libraries/stdlib/js/src/org.w3c/org.khronos.webgl.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/CharCode.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/Promise.kt","webpack://sceneview-web/external umd \"Filament\"","webpack://sceneview-web/webpack/bootstrap","webpack://sceneview-web/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Filament\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Filament\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sceneview-web\"] = factory(require(\"Filament\"));\n\telse\n\t\troot[\"sceneview-web\"] = factory(root[\"Filament\"]);\n})(globalThis, (__WEBPACK_EXTERNAL_MODULE__650__) => {\nreturn ","package io.github.sceneview.geometries\n\nimport dev.romainguy.kotlin.math.Float3\nimport dev.romainguy.kotlin.math.max\nimport dev.romainguy.kotlin.math.min\nimport io.github.sceneview.math.Position\nimport io.github.sceneview.math.Size\nimport io.github.sceneview.rendering.Vertex\n\n/**\n * Pure geometry data — vertices and triangle indices — with no rendering-engine dependency.\n *\n * Platform-specific code converts this into native vertex/index buffers.\n */\ndata class GeometryData(\n val vertices: List<Vertex>,\n val indices: List<Int>\n)\n\n/**\n * Axis-aligned bounding box computed from vertex positions.\n */\ndata class BoundingBox(\n val center: Position,\n val halfExtent: Size\n) {\n val min: Position get() = center - halfExtent\n val max: Position get() = center + halfExtent\n}\n\n/**\n * Computes the axis-aligned bounding box of this geometry's vertices.\n */\nfun GeometryData.boundingBox(): BoundingBox {\n require(vertices.isNotEmpty()) { \"Cannot compute bounding box of empty geometry\" }\n var minPos = Float3(vertices.first().position)\n var maxPos = Float3(vertices.first().position)\n for (vertex in vertices) {\n minPos = min(minPos, vertex.position)\n maxPos = max(maxPos, vertex.position)\n }\n val halfExtent = (maxPos - minPos) / 2.0f\n val center = minPos + halfExtent\n return BoundingBox(center, halfExtent)\n}\n\n/**\n * Whether any vertex has a normal defined.\n */\nval GeometryData.hasNormals: Boolean get() = vertices.any { it.normal != null }\n\n/**\n * Whether any vertex has UV coordinates defined.\n */\nval GeometryData.hasUvCoordinates: Boolean get() = vertices.any { it.uvCoordinate != null }\n\n/**\n * Whether any vertex has color defined.\n */\nval GeometryData.hasColors: Boolean get() = vertices.any { it.color != null }\n","package io.github.sceneview.rendering\n\nimport dev.romainguy.kotlin.math.Float2\nimport io.github.sceneview.math.Color\nimport io.github.sceneview.math.Direction\nimport io.github.sceneview.math.Position\n\n/**\n * Cross-platform vertex definition for geometry construction.\n *\n * Used to define the vertices of a mesh in a platform-agnostic way.\n * Platform-specific geometry builders convert these to native vertex buffers.\n *\n * @param position The position of the vertex in local space.\n * @param normal The surface normal direction at this vertex (for lighting).\n * @param uvCoordinate Texture coordinate. Values should be between 0 and 1.\n * @param color Per-vertex color (RGBA).\n */\ndata class Vertex(\n val position: Position = Position(),\n val normal: Direction? = null,\n val uvCoordinate: Float2? = null,\n val color: Color? = null\n)\n\nval List<Vertex>.hasNormals get() = any { it.normal != null }\nval List<Vertex>.hasUvCoordinates get() = any { it.uvCoordinate != null }\nval List<Vertex>.hasColors get() = any { it.color != null }\n\n/**\n * Computes primitive offset ranges from a list of index lists.\n */\nfun List<List<Int>>.getOffsets(): List<IntRange> {\n var indexStart = 0\n return map { primitiveIndices ->\n (indexStart until indexStart + primitiveIndices.size).also {\n indexStart += primitiveIndices.size\n }\n }\n}\n","package io.github.sceneview.geometries\n\nimport dev.romainguy.kotlin.math.Float2\nimport dev.romainguy.kotlin.math.Float3\nimport io.github.sceneview.rendering.Vertex\n\n/**\n * Generates a unit cube (or sized box) as a list of vertices and triangle indices.\n *\n * Each face has 4 unique vertices (with per-face normals), giving 24 vertices total.\n * Indices form 12 triangles (2 per face), giving 36 indices.\n *\n * @param size Full extents along each axis. Default is 1x1x1.\n * @param center Offset applied to every vertex position.\n */\nfun generateCube(\n size: Float3 = Float3(1f),\n center: Float3 = Float3(0f)\n): GeometryData {\n val extents = size * 0.5f\n\n val p0 = center + Float3(-extents.x, -extents.y, extents.z)\n val p1 = center + Float3(extents.x, -extents.y, extents.z)\n val p2 = center + Float3(extents.x, -extents.y, -extents.z)\n val p3 = center + Float3(-extents.x, -extents.y, -extents.z)\n val p4 = center + Float3(-extents.x, extents.y, extents.z)\n val p5 = center + Float3(extents.x, extents.y, extents.z)\n val p6 = center + Float3(extents.x, extents.y, -extents.z)\n val p7 = center + Float3(-extents.x, extents.y, -extents.z)\n\n val up = Float3(y = 1f)\n val down = Float3(y = -1f)\n val front = Float3(z = -1f)\n val back = Float3(z = 1f)\n val left = Float3(x = -1f)\n val right = Float3(x = 1f)\n\n val uv00 = Float2(0f, 0f)\n val uv10 = Float2(1f, 0f)\n val uv01 = Float2(0f, 1f)\n val uv11 = Float2(1f, 1f)\n\n val vertices = listOf(\n // Bottom\n Vertex(position = p0, normal = down, uvCoordinate = uv01),\n Vertex(position = p1, normal = down, uvCoordinate = uv11),\n Vertex(position = p2, normal = down, uvCoordinate = uv10),\n Vertex(position = p3, normal = down, uvCoordinate = uv00),\n // Left\n Vertex(position = p7, normal = left, uvCoordinate = uv01),\n Vertex(position = p4, normal = left, uvCoordinate = uv11),\n Vertex(position = p0, normal = left, uvCoordinate = uv10),\n Vertex(position = p3, normal = left, uvCoordinate = uv00),\n // Back\n Vertex(position = p4, normal = back, uvCoordinate = uv01),\n Vertex(position = p5, normal = back, uvCoordinate = uv11),\n Vertex(position = p1, normal = back, uvCoordinate = uv10),\n Vertex(position = p0, normal = back, uvCoordinate = uv00),\n // Front\n Vertex(position = p6, normal = front, uvCoordinate = uv01),\n Vertex(position = p7, normal = front, uvCoordinate = uv11),\n Vertex(position = p3, normal = front, uvCoordinate = uv10),\n Vertex(position = p2, normal = front, uvCoordinate = uv00),\n // Right\n Vertex(position = p5, normal = right, uvCoordinate = uv01),\n Vertex(position = p6, normal = right, uvCoordinate = uv11),\n Vertex(position = p2, normal = right, uvCoordinate = uv10),\n Vertex(position = p1, normal = right, uvCoordinate = uv00),\n // Top\n Vertex(position = p7, normal = up, uvCoordinate = uv01),\n Vertex(position = p6, normal = up, uvCoordinate = uv11),\n Vertex(position = p5, normal = up, uvCoordinate = uv10),\n Vertex(position = p4, normal = up, uvCoordinate = uv00)\n )\n\n val indices = buildList {\n val sideCount = 6\n val verticesPerSide = 4\n for (i in 0 until sideCount) {\n val base = verticesPerSide * i\n // First triangle\n add(3 + base); add(1 + base); add(0 + base)\n // Second triangle\n add(3 + base); add(2 + base); add(1 + base)\n }\n }\n\n return GeometryData(vertices, indices)\n}\n",null,null,null,"package io.github.sceneview.geometries\n\nimport dev.romainguy.kotlin.math.Float2\nimport dev.romainguy.kotlin.math.Float3\nimport dev.romainguy.kotlin.math.TWO_PI\nimport dev.romainguy.kotlin.math.normalize\nimport io.github.sceneview.rendering.Vertex\nimport kotlin.math.cos\nimport kotlin.math.sin\n\n/**\n * Generates a capped cylinder as a list of vertices and triangle indices.\n *\n * The cylinder is centred at [center] with its axis along Y.\n *\n * @param radius Cylinder radius. Default 1.\n * @param height Full height along Y. Default 2.\n * @param center Offset applied to every vertex position.\n * @param sideCount Number of radial subdivisions. Default 24.\n */\nfun generateCylinder(\n radius: Float = 1f,\n height: Float = 2f,\n center: Float3 = Float3(0f),\n sideCount: Int = 24\n): GeometryData {\n val vertices = buildList {\n val halfHeight = height / 2f\n val thetaIncrement = TWO_PI / sideCount\n var theta = 0f\n val uStep = 1f / sideCount\n\n val lowerCapVertices = mutableListOf<Vertex>()\n val upperCapVertices = mutableListOf<Vertex>()\n val upperEdgeVertices = mutableListOf<Vertex>()\n\n for (side in 0..sideCount) {\n // Lower edge vertex (side normal)\n val lowerPosition = Float3(\n x = radius * cos(theta), y = -halfHeight, z = radius * sin(theta)\n ) + center\n add(\n Vertex(\n position = lowerPosition,\n normal = normalize(Float3(x = lowerPosition.x - center.x, y = 0f, z = lowerPosition.z - center.z)),\n uvCoordinate = Float2(x = uStep * side, y = 0f)\n )\n )\n\n // Lower cap copy (downward normal)\n lowerCapVertices.add(\n Vertex(\n position = lowerPosition,\n normal = Float3(y = -1f),\n uvCoordinate = Float2(x = uStep * side, y = 0f)\n )\n )\n\n // Upper edge vertex (side normal)\n val upperPosition = Float3(\n x = radius * cos(theta), y = halfHeight, z = radius * sin(theta)\n ) + center\n upperEdgeVertices.add(\n Vertex(\n position = upperPosition,\n normal = normalize(Float3(x = upperPosition.x - center.x, y = 0f, z = upperPosition.z - center.z)),\n uvCoordinate = Float2(x = uStep * side, y = 1f)\n )\n )\n\n // Upper cap copy (upward normal)\n upperCapVertices.add(\n Vertex(\n position = upperPosition,\n normal = Float3(y = 1f),\n uvCoordinate = Float2(\n x = (cos(theta) + 1f) / 2f,\n y = (sin(theta) + 1f) / 2f\n )\n )\n )\n theta += thetaIncrement\n }\n\n addAll(upperEdgeVertices)\n\n // Lower cap center\n add(\n Vertex(\n position = center + Float3(y = -halfHeight),\n normal = Float3(y = -1f),\n uvCoordinate = Float2(x = 0.5f, y = 0.5f)\n )\n )\n addAll(lowerCapVertices)\n\n // Upper cap center\n add(\n Vertex(\n position = center + Float3(y = halfHeight),\n normal = Float3(y = 1f),\n uvCoordinate = Float2(x = 0.5f, y = 0.5f)\n )\n )\n addAll(upperCapVertices)\n }\n\n val indices = buildList {\n for (side in 0 until sideCount) {\n val bottomRight = side + 1\n val topLeft = side + sideCount + 1\n val topRight = side + sideCount + 2\n val lowerCenterIndex = 2 * (sideCount + 1)\n val upperCenterIndex = lowerCenterIndex + sideCount + 2\n\n // First triangle of side\n add(side); add(topRight); add(bottomRight)\n // Second triangle of side\n add(side); add(topLeft); add(topRight)\n // Bottom cap triangle\n add(lowerCenterIndex); add(lowerCenterIndex + side + 1); add(lowerCenterIndex + side + 2)\n // Top cap triangle\n add(upperCenterIndex); add(upperCenterIndex + side + 2); add(upperCenterIndex + side + 1)\n }\n }\n\n return GeometryData(vertices, indices)\n}\n",null,null,"package io.github.sceneview.geometries\n\nimport dev.romainguy.kotlin.math.Float2\nimport dev.romainguy.kotlin.math.Float3\nimport io.github.sceneview.rendering.Vertex\n\n/**\n * Generates a quad (two-triangle plane) as a list of vertices and triangle indices.\n *\n * The plane lies in the XY plane (z = 0) by default.\n *\n * @param size Width (X) and height (Y) of the plane.\n * @param center Offset applied to every vertex position.\n * @param normal Surface normal for all four vertices. Default is +Y.\n */\nfun generatePlane(\n size: Float2 = Float2(1f),\n center: Float3 = Float3(0f),\n normal: Float3 = Float3(y = 1f)\n): GeometryData {\n val extents = Float3(size.x, size.y, 0f) / 2f\n\n val vertices = listOf(\n Vertex(\n position = center + Float3(x = -extents.x, y = -extents.y, z = extents.z),\n normal = normal,\n uvCoordinate = Float2(0f, 0f)\n ),\n Vertex(\n position = center + Float3(x = -extents.x, y = extents.y, z = -extents.z),\n normal = normal,\n uvCoordinate = Float2(0f, 1f)\n ),\n Vertex(\n position = center + Float3(x = extents.x, y = extents.y, z = -extents.z),\n normal = normal,\n uvCoordinate = Float2(1f, 1f)\n ),\n Vertex(\n position = center + Float3(x = extents.x, y = -extents.y, z = extents.z),\n normal = normal,\n uvCoordinate = Float2(1f, 0f)\n )\n )\n\n val indices = listOf(\n 3, 1, 0, // First triangle\n 3, 2, 1 // Second triangle\n )\n\n return GeometryData(vertices, indices)\n}\n","package io.github.sceneview.geometries\n\nimport dev.romainguy.kotlin.math.Float2\nimport dev.romainguy.kotlin.math.Float3\nimport dev.romainguy.kotlin.math.PI\nimport dev.romainguy.kotlin.math.TWO_PI\nimport dev.romainguy.kotlin.math.normalize\nimport io.github.sceneview.rendering.Vertex\nimport kotlin.math.cos\nimport kotlin.math.sin\n\n/**\n * Generates a UV sphere as a list of vertices and triangle indices.\n *\n * @param radius Sphere radius. Default 1.\n * @param center Offset applied to every vertex position.\n * @param stacks Number of horizontal subdivisions (latitude). Default 24.\n * @param slices Number of vertical subdivisions (longitude). Default 24.\n */\nfun generateSphere(\n radius: Float = 1f,\n center: Float3 = Float3(0f),\n stacks: Int = 24,\n slices: Int = 24\n): GeometryData {\n val vertices = buildList {\n for (stack in 0..stacks) {\n val phi = PI * stack.toFloat() / stacks.toFloat()\n for (slice in 0..slices) {\n val theta = TWO_PI * (if (slice == slices) 0 else slice).toFloat() / slices\n var position = Float3(\n x = sin(phi) * cos(theta),\n y = cos(phi),\n z = sin(phi) * sin(theta)\n ) * radius\n val normal = normalize(position)\n position += center\n val uvCoordinate = Float2(\n x = 1f - slice.toFloat() / slices,\n y = 1f - stack.toFloat() / stacks\n )\n add(Vertex(position = position, normal = normal, uvCoordinate = uvCoordinate))\n }\n }\n }\n\n val indices = buildList {\n var v = 0\n for (stack in 0 until stacks) {\n for (slice in 0 until slices) {\n val topCap = stack == 0\n val bottomCap = stack == stacks - 1\n val next = slice + 1\n if (!topCap) {\n add(v + slice)\n add(v + next)\n add(v + slice + slices + 1)\n }\n if (!bottomCap) {\n add(v + next)\n add(v + next + slices + 1)\n add(v + slice + slices + 1)\n }\n }\n v += slices + 1\n }\n }\n\n return GeometryData(vertices, indices)\n}\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"package io.github.sceneview.web\n\n/**\n * One-shot gate for the library-level `autoCenterContent` pass.\n *\n * The auto-centre pass ([SceneView.refreshContentCentering]) must run exactly\n * once per \"content generation\": after a model finishes loading, the first\n * render frame with non-degenerate bounds translates the content to the\n * origin, and every later frame is a cheap no-op — until *new* content is\n * loaded, which starts a fresh generation.\n *\n * This class isolates that state machine from any Filament.js binding so the\n * #1357 regression (`didCenterContent` never reset on a 2nd `loadModel`, so\n * the second model stayed off-centre) is directly unit-testable without a\n * WebGL context. Mirrors iOS's `didCenterContent` flag and Android's\n * `SceneAutoCenterState`.\n */\ninternal class AutoCenterGate {\n\n /** `true` once the current content generation has been centred. */\n var didCenter: Boolean = false\n private set\n\n /**\n * Whether the centring pass should run this frame.\n *\n * @param enabled the consumer-facing `autoCenterContent` toggle\n * @param hasContent whether any model is currently loaded\n */\n fun shouldCenter(enabled: Boolean, hasContent: Boolean): Boolean =\n enabled && hasContent && !didCenter\n\n /** Mark the current content generation as centred — subsequent frames no-op. */\n fun markCentered() {\n didCenter = true\n }\n\n /**\n * Start a new content generation. Called whenever a model is added\n * (`loadModel` / `addGeometry`): the union bounds changed, so the one-shot\n * pass must run again. This is the exact reset that fixes #1357.\n */\n fun reset() {\n didCenter = false\n }\n}\n","package io.github.sceneview.web\n\n/**\n * Pure, renderer-agnostic bounding-box math for the library-level\n * `autoCenterContent` feature (issue #1052 — web port of iOS #1026).\n *\n * Kept free of any Filament.js binding so the centring math can be unit-tested\n * on the JVM-free `jsTest` Karma target without a WebGL context.\n */\ninternal object ContentCentering {\n\n /** Smallest mesh extent (in metres) the auto-centre pass accepts as\n * \"content has loaded enough to be centred\". Below this the bounds are\n * assumed to come from an async load that hasn't populated yet, so the\n * pass is deferred to the next frame. Mirrors iOS `minVisualExtent`. */\n const val MIN_VISUAL_EXTENT: Double = 0.001\n\n /** An axis-aligned bounding box. `min`/`max` are `[x, y, z]`. */\n data class Aabb(val min: DoubleArray, val max: DoubleArray) {\n override fun equals(other: Any?): Boolean =\n other is Aabb && min.contentEquals(other.min) && max.contentEquals(other.max)\n\n override fun hashCode(): Int = 31 * min.contentHashCode() + max.contentHashCode()\n }\n\n /**\n * Compute the union of [boxes]. Returns `null` when the list is empty —\n * there is nothing to centre yet.\n */\n fun union(boxes: List<Aabb>): Aabb? {\n if (boxes.isEmpty()) return null\n var minX = Double.MAX_VALUE; var minY = Double.MAX_VALUE; var minZ = Double.MAX_VALUE\n var maxX = -Double.MAX_VALUE; var maxY = -Double.MAX_VALUE; var maxZ = -Double.MAX_VALUE\n for (b in boxes) {\n if (b.min[0] < minX) minX = b.min[0]\n if (b.min[1] < minY) minY = b.min[1]\n if (b.min[2] < minZ) minZ = b.min[2]\n if (b.max[0] > maxX) maxX = b.max[0]\n if (b.max[1] > maxY) maxY = b.max[1]\n if (b.max[2] > maxZ) maxZ = b.max[2]\n }\n return Aabb(doubleArrayOf(minX, minY, minZ), doubleArrayOf(maxX, maxY, maxZ))\n }\n\n /** Geometric centroid `(min + max) / 2` of [box]. */\n fun center(box: Aabb): DoubleArray = doubleArrayOf(\n (box.min[0] + box.max[0]) / 2.0,\n (box.min[1] + box.max[1]) / 2.0,\n (box.min[2] + box.max[2]) / 2.0,\n )\n\n /**\n * Whether [box]'s extents are finite and large enough to be considered\n * loaded content worth centring.\n *\n * An empty / degenerate box (e.g. before async resources finish loading)\n * has non-finite or zero extents — both are rejected so the centring pass\n * is deferred to a later frame. Mirrors iOS `refreshContentCentering`.\n */\n fun isStable(box: Aabb): Boolean {\n val ex = box.max[0] - box.min[0]\n val ey = box.max[1] - box.min[1]\n val ez = box.max[2] - box.min[2]\n if (!ex.isFinite() || !ey.isFinite() || !ez.isFinite()) return false\n val extentMax = maxOf(ex, ey, ez)\n return extentMax > MIN_VISUAL_EXTENT\n }\n\n /**\n * The translation that, applied to content currently centred at the\n * centroid of [box], moves that centroid to the world origin. Equal to\n * `-center(box)`. Returns `null` when [box] is not yet stable.\n */\n fun centeringOffset(box: Aabb?): DoubleArray? {\n if (box == null || !isStable(box)) return null\n val c = center(box)\n // `+ 0.0` normalises a negated zero (`-0.0`) back to `0.0`: an\n // already-centred axis must report a plain `0.0` translation, not the\n // signed-zero that `-(0.0)` produces.\n return doubleArrayOf(-c[0] + 0.0, -c[1] + 0.0, -c[2] + 0.0)\n }\n}\n","package io.github.sceneview.web\n\n/**\n * Tracks a single GPU resource handle and guarantees leak-free replacement\n * and teardown.\n *\n * The web `SceneView` creates a Filament `IndirectLight` and `Skybox` in\n * [SceneView.loadEnvironment]. Before issue #1496 those handles were never\n * stored, so:\n *\n * 1. [SceneView.destroy] tore down the renderer/view/scene but never called\n * `engine.destroyIndirectLight` / `engine.destroySkybox` — every web\n * `SceneView` leaked its IBL + skybox GPU memory.\n * 2. Calling `loadEnvironment` twice (or `loadDefaultEnvironment` after a\n * manual one) overwrote `scene.setIndirectLight` / `setSkybox` with a fresh\n * handle while the previous one was silently orphaned — a second leak.\n *\n * This class isolates the \"destroy the old handle before adopting a new one,\n * destroy whatever is held on teardown\" state machine from the Filament.js\n * bindings so it is directly unit-testable without a WebGL context — the same\n * approach [AutoCenterGate] uses for the auto-centre pass.\n *\n * @param T the handle type (`IndirectLight` or `Skybox`)\n * @param destroyer invoked with a handle that must be released on the GPU\n */\ninternal class EnvironmentResourceTracker<T>(\n private val destroyer: (T) -> Unit,\n) {\n\n /** The handle currently held, or `null` if none has been adopted. */\n var current: T? = null\n private set\n\n /**\n * Adopt [handle] as the current resource, destroying the previously held\n * handle (if any) first. This is the leak-free replacement path for a 2nd\n * `loadEnvironment` call.\n */\n fun replaceWith(handle: T) {\n current?.let(destroyer)\n current = handle\n }\n\n /**\n * Destroy the currently held handle (if any) and clear the slot. Idempotent\n * — a second call is a no-op. Called from [SceneView.destroy].\n */\n fun release() {\n current?.let(destroyer)\n current = null\n }\n}\n","package io.github.sceneview.web\n\nimport dev.romainguy.kotlin.math.Float2\nimport dev.romainguy.kotlin.math.Float3\nimport io.github.sceneview.geometries.GeometryData\nimport io.github.sceneview.geometries.generateCube\nimport io.github.sceneview.geometries.generateCylinder\nimport io.github.sceneview.geometries.generatePlane\nimport io.github.sceneview.geometries.generateSphere\nimport io.github.sceneview.web.nodes.GeometryConfig\nimport io.github.sceneview.web.nodes.GeometryType\nimport org.khronos.webgl.ArrayBuffer\nimport org.khronos.webgl.DataView\nimport org.khronos.webgl.Float32Array\nimport org.khronos.webgl.Uint16Array\nimport org.khronos.webgl.Uint8Array\nimport org.khronos.webgl.get\nimport org.khronos.webgl.set\n\n/**\n * Builds an in-memory GLB (glTF-Binary) from a [GeometryConfig] using the KMP core\n * geometry generators.\n *\n * The generated GLB is loaded through gltfio's UbershaderProvider pipeline,\n * which means geometry nodes get the same PBR material system as loaded models.\n *\n * This approach avoids the need for custom `.filamat` material files and reuses\n * the existing [SceneView.loadModel] infrastructure.\n */\ninternal object GeometryGLBBuilder {\n\n /**\n * Generate a GLB [ArrayBuffer] for the given geometry config.\n *\n * The GLB contains a single mesh node with:\n * - Position and normal vertex attributes\n * - A PBR material with the configured baseColorFactor\n * - A translation matching the configured position\n * - A scale matching the configured scale\n */\n fun buildGLB(config: GeometryConfig): ArrayBuffer {\n val geometryData = generateGeometryData(config)\n val vertices = geometryData.vertices\n val indices = geometryData.indices\n\n val vertexCount = vertices.size\n val indexCount = indices.size\n\n // Extract positions and normals into flat Float32Arrays\n val positions = Float32Array(vertexCount * 3)\n val normals = Float32Array(vertexCount * 3)\n\n // Track bounding box\n var minX = Float.MAX_VALUE; var minY = Float.MAX_VALUE; var minZ = Float.MAX_VALUE\n var maxX = -Float.MAX_VALUE; var maxY = -Float.MAX_VALUE; var maxZ = -Float.MAX_VALUE\n\n for (i in vertices.indices) {\n val v = vertices[i]\n val px = v.position.x\n val py = v.position.y\n val pz = v.position.z\n\n positions[i * 3] = px\n positions[i * 3 + 1] = py\n positions[i * 3 + 2] = pz\n\n val n = v.normal ?: Float3(0f, 1f, 0f)\n normals[i * 3] = n.x\n normals[i * 3 + 1] = n.y\n normals[i * 3 + 2] = n.z\n\n if (px < minX) minX = px\n if (py < minY) minY = py\n if (pz < minZ) minZ = pz\n if (px > maxX) maxX = px\n if (py > maxY) maxY = py\n if (pz > maxZ) maxZ = pz\n }\n\n // Build index buffer\n val indexArray = Uint16Array(indexCount)\n for (i in indices.indices) {\n indexArray[i] = indices[i].toShort()\n }\n\n // Build the GLB from positions, normals, indices\n return buildGLBFromArrays(\n config = config,\n positions = positions,\n normals = normals,\n indices = indexArray,\n vertexCount = vertexCount,\n indexCount = indexCount,\n bboxMin = floatArrayOf(minX, minY, minZ),\n bboxMax = floatArrayOf(maxX, maxY, maxZ)\n )\n }\n\n private fun generateGeometryData(config: GeometryConfig): GeometryData {\n return when (config.geometryType) {\n GeometryType.CUBE -> generateCube(\n size = Float3(\n config.sizeX.toFloat(),\n config.sizeY.toFloat(),\n config.sizeZ.toFloat()\n )\n )\n\n GeometryType.SPHERE -> generateSphere(\n radius = config.radius.toFloat()\n )\n\n GeometryType.CYLINDER -> generateCylinder(\n radius = config.radius.toFloat(),\n height = config.height.toFloat()\n )\n\n GeometryType.PLANE -> generatePlane(\n size = Float2(\n config.sizeX.toFloat(),\n config.sizeY.toFloat()\n )\n )\n }\n }\n\n private fun buildGLBFromArrays(\n config: GeometryConfig,\n positions: Float32Array,\n normals: Float32Array,\n indices: Uint16Array,\n vertexCount: Int,\n indexCount: Int,\n bboxMin: FloatArray,\n bboxMax: FloatArray\n ): ArrayBuffer {\n val posBytes = (vertexCount * 3 * 4) // Float32 = 4 bytes\n val normBytes = (vertexCount * 3 * 4)\n val idxBytes = (indexCount * 2) // Uint16 = 2 bytes\n\n val typeName = config.geometryType.name.lowercase()\n\n // Build the node transform: translation + scale\n val node = js(\"{}\")\n node.mesh = 0\n node.name = typeName\n\n // Set translation if non-zero\n if (config.positionX != 0.0 || config.positionY != 0.0 || config.positionZ != 0.0) {\n node.translation = js(\"[]\")\n node.translation.push(config.positionX, config.positionY, config.positionZ)\n }\n\n // Set scale if non-uniform\n if (config.scaleX != 1.0 || config.scaleY != 1.0 || config.scaleZ != 1.0) {\n node.scale = js(\"[]\")\n node.scale.push(config.scaleX, config.scaleY, config.scaleZ)\n }\n\n // Set rotation (Euler degrees → quaternion for glTF)\n if (config.rotationX != 0.0 || config.rotationY != 0.0 || config.rotationZ != 0.0) {\n val rx = config.rotationX * kotlin.math.PI / 180.0\n val ry = config.rotationY * kotlin.math.PI / 180.0\n val rz = config.rotationZ * kotlin.math.PI / 180.0\n // Euler XYZ to quaternion\n val cx = kotlin.math.cos(rx / 2); val sx = kotlin.math.sin(rx / 2)\n val cy = kotlin.math.cos(ry / 2); val sy = kotlin.math.sin(ry / 2)\n val cz = kotlin.math.cos(rz / 2); val sz = kotlin.math.sin(rz / 2)\n val qx = sx * cy * cz - cx * sy * sz\n val qy = cx * sy * cz + sx * cy * sz\n val qz = cx * cy * sz - sx * sy * cz\n val qw = cx * cy * cz + sx * sy * sz\n node.rotation = js(\"[]\")\n node.rotation.push(qx, qy, qz, qw)\n }\n\n // Build glTF JSON\n val gltf = js(\"{}\")\n gltf.asset = js(\"({version: '2.0', generator: 'SceneView-Web'})\")\n gltf.scene = 0\n gltf.scenes = js(\"([{nodes: [0]}])\")\n\n gltf.nodes = js(\"[]\")\n gltf.nodes.push(node)\n\n // Mesh with position + normal attributes\n gltf.meshes = js(\"([{primitives: [{attributes: {POSITION: 0, NORMAL: 1}, indices: 2, material: 0, mode: 4}]}])\")\n\n // Material with the configured color. When `config.unlit` is true we add the\n // `KHR_materials_unlit` extension — Filament.js supports it natively and the\n // shader skips PBR / IBL evaluation entirely, matching `createUnlitColorInstance`\n // on Android and `CustomMaterial.unlit(color:)` on Apple. The pbrMetallicRoughness\n // baseColorFactor is still authoritative for the colour value (the extension just\n // changes how it's lit).\n val material = js(\"{}\")\n material.name = \"${typeName}_mat\"\n material.pbrMetallicRoughness = js(\"{}\")\n material.pbrMetallicRoughness.baseColorFactor = js(\"[]\")\n material.pbrMetallicRoughness.baseColorFactor.push(config.colorR, config.colorG, config.colorB, config.colorA)\n material.pbrMetallicRoughness.metallicFactor = 0.1\n material.pbrMetallicRoughness.roughnessFactor = 0.6\n // Transparent unlit benefits from being doubleSided (overlay use case),\n // matching the Android `transparent_unlit_colored.mat` definition.\n material.doubleSided = config.unlit && config.colorA < 1.0\n if (config.unlit) {\n material.extensions = js(\"{}\")\n material.extensions[\"KHR_materials_unlit\"] = js(\"{}\")\n }\n\n gltf.materials = js(\"[]\")\n gltf.materials.push(material)\n\n // Declare the unlit extension at the glTF root when used (per spec — unused\n // extensions in extensionsUsed are tolerated but using one without declaring\n // breaks loaders that strictly validate.)\n if (config.unlit) {\n gltf.extensionsUsed = js(\"[]\")\n gltf.extensionsUsed.push(\"KHR_materials_unlit\")\n }\n\n // Accessors: position (VEC3), normal (VEC3), indices (SCALAR)\n val posAccessor = js(\"{}\")\n posAccessor.bufferView = 0\n posAccessor.componentType = 5126 // FLOAT\n posAccessor.count = vertexCount\n posAccessor.type = \"VEC3\"\n posAccessor.min = js(\"[]\")\n posAccessor.min.push(bboxMin[0], bboxMin[1], bboxMin[2])\n posAccessor.max = js(\"[]\")\n posAccessor.max.push(bboxMax[0], bboxMax[1], bboxMax[2])\n\n val normAccessor = js(\"{}\")\n normAccessor.bufferView = 1\n normAccessor.componentType = 5126 // FLOAT\n normAccessor.count = vertexCount\n normAccessor.type = \"VEC3\"\n\n val idxAccessor = js(\"{}\")\n idxAccessor.bufferView = 2\n idxAccessor.componentType = 5123 // UNSIGNED_SHORT\n idxAccessor.count = indexCount\n idxAccessor.type = \"SCALAR\"\n\n gltf.accessors = js(\"[]\")\n gltf.accessors.push(posAccessor, normAccessor, idxAccessor)\n\n // Buffer views\n val bv0 = js(\"{}\")\n bv0.buffer = 0; bv0.byteOffset = 0; bv0.byteLength = posBytes; bv0.target = 34962\n\n val bv1 = js(\"{}\")\n bv1.buffer = 0; bv1.byteOffset = posBytes; bv1.byteLength = normBytes; bv1.target = 34962\n\n val bv2 = js(\"{}\")\n bv2.buffer = 0; bv2.byteOffset = posBytes + normBytes; bv2.byteLength = idxBytes; bv2.target = 34963\n\n gltf.bufferViews = js(\"[]\")\n gltf.bufferViews.push(bv0, bv1, bv2)\n\n // Binary data length (padded to 4-byte alignment)\n val binLength = posBytes + normBytes + idxBytes\n val binPad = (4 - (binLength % 4)) % 4\n val binLengthAligned = binLength + binPad\n\n gltf.buffers = js(\"[]\")\n val buf = js(\"{}\")\n buf.byteLength = binLength // glTF spec: logical buffer size, not padded chunk size\n gltf.buffers.push(buf)\n\n // Serialize JSON chunk (padded to 4-byte alignment with spaces)\n var jsonStr: String = JSON.stringify(gltf)\n while (jsonStr.length % 4 != 0) jsonStr += \" \"\n val jsonLength = jsonStr.length\n\n // Total GLB size: header(12) + JSON chunk header(8) + JSON + BIN chunk header(8) + BIN\n val totalLength = 12 + 8 + jsonLength + 8 + binLengthAligned\n\n val glb = ArrayBuffer(totalLength)\n val view = DataView(glb)\n var offset = 0\n\n // GLB header: magic + version + length\n view.setUint32(offset, 0x46546C67, true); offset += 4 // \"glTF\"\n view.setUint32(offset, 2, true); offset += 4 // version 2\n view.setUint32(offset, totalLength, true); offset += 4\n\n // JSON chunk: length + type + data\n view.setUint32(offset, jsonLength, true); offset += 4\n view.setUint32(offset, 0x4E4F534A, true); offset += 4 // \"JSON\"\n for (i in jsonStr.indices) {\n view.setUint8(offset++, jsonStr[i].code.toByte())\n }\n\n // BIN chunk: length + type + data\n view.setUint32(offset, binLengthAligned, true); offset += 4\n view.setUint32(offset, 0x004E4942, true); offset += 4 // \"BIN\\0\"\n\n // Copy position data\n val glbBytes = Uint8Array(glb)\n val posBytes8 = Uint8Array(positions.buffer)\n for (i in 0 until posBytes) {\n glbBytes[offset + i] = posBytes8[i]\n }\n offset += posBytes\n\n // Copy normal data\n val normBytes8 = Uint8Array(normals.buffer)\n for (i in 0 until normBytes) {\n glbBytes[offset + i] = normBytes8[i]\n }\n offset += normBytes\n\n // Copy index data\n val idxBytes8 = Uint8Array(indices.buffer)\n for (i in 0 until idxBytes) {\n glbBytes[offset + i] = idxBytes8[i]\n }\n offset += idxBytes\n\n // Pad remaining bytes with zeros\n for (p in 0 until binPad) {\n view.setUint8(offset++, 0.toByte())\n }\n\n return glb\n }\n}\n","package io.github.sceneview.web\n\nimport kotlinx.browser.document\nimport kotlinx.browser.window\nimport org.w3c.dom.HTMLCanvasElement\nimport kotlin.js.Promise\n\n/**\n * Entry point for the SceneView Web library.\n *\n * Registers the SceneView API on `window.sceneview` so it can be used\n * from plain JavaScript after loading via `<script>` tag.\n *\n * Usage:\n * ```html\n * <script src=\"sceneview-web.js\"></script>\n * <script>\n * sceneview.createViewer(\"canvas\").then(sv => sv.loadModel(\"model.glb\"));\n * </script>\n * ```\n */\nfun main() {\n // Register the API on the global window object\n val api: dynamic = js(\"{}\")\n\n api[\"version\"] = SCENEVIEW_VERSION\n api[\"createViewer\"] = ::jsCreateViewer\n api[\"createViewerAutoRotate\"] = ::jsCreateViewerAutoRotate\n api[\"createViewerFull\"] = ::jsCreateViewerFull\n api[\"modelViewer\"] = ::jsModelViewer\n api[\"modelViewerAutoRotate\"] = ::jsModelViewerAutoRotate\n\n js(\"window\")[\"sceneview\"] = api\n\n console.log(\"SceneView Web v$SCENEVIEW_VERSION loaded\")\n}\n\n// --- JS-callable bridge functions ---\n// These use explicit types that map cleanly to JavaScript\n\nfun jsCreateViewer(canvasId: String): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate = true, cameraControls = true)\n}\n\nfun jsCreateViewerAutoRotate(canvasId: String, autoRotate: Boolean): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate = autoRotate, cameraControls = true)\n}\n\nfun jsCreateViewerFull(\n canvasId: String,\n autoRotate: Boolean,\n cameraControls: Boolean,\n cameraX: Double,\n cameraY: Double,\n cameraZ: Double,\n fov: Double,\n lightIntensity: Double\n): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate, cameraControls, cameraX, cameraY, cameraZ, fov, lightIntensity)\n}\n\nfun jsModelViewer(canvasId: String, modelUrl: String): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate = true, cameraControls = true).then { viewer ->\n viewer.loadModel(modelUrl)\n viewer\n }\n}\n\nfun jsModelViewerAutoRotate(canvasId: String, modelUrl: String, autoRotate: Boolean): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate = autoRotate, cameraControls = true).then { viewer ->\n viewer.loadModel(modelUrl)\n viewer\n }\n}\n\n// --- Internal implementation ---\n\ninternal fun createViewerImpl(\n canvasId: String,\n autoRotate: Boolean,\n cameraControls: Boolean,\n cameraX: Double = 0.0,\n cameraY: Double = 1.5,\n cameraZ: Double = 5.0,\n fov: Double = 45.0,\n lightIntensity: Double = 50_000.0\n): Promise<SceneViewJS> {\n val canvas = document.getElementById(canvasId) as? HTMLCanvasElement\n ?: return Promise.reject(Throwable(\"Canvas element '$canvasId' not found\"))\n\n // Ensure canvas has physical pixel dimensions\n if (canvas.width == 0 || canvas.height == 0) {\n canvas.width = canvas.clientWidth\n canvas.height = canvas.clientHeight\n }\n\n return Promise { resolve, reject ->\n try {\n SceneView.create(\n canvas = canvas,\n configure = {\n camera {\n eye(cameraX, cameraY, cameraZ)\n target(0.0, 0.0, 0.0)\n fov(fov)\n }\n light {\n directional()\n intensity(lightIntensity)\n direction(0.6f, -1.0f, -0.8f)\n }\n autoRotate(autoRotate)\n cameraControls(cameraControls)\n },\n onReady = { sceneView ->\n sceneView.startRendering()\n\n // Auto-resize on window resize\n window.addEventListener(\"resize\", {\n canvas.width = canvas.clientWidth\n canvas.height = canvas.clientHeight\n })\n\n val viewer = SceneViewJS()\n viewer.attach(sceneView)\n resolve(viewer)\n }\n )\n } catch (e: Throwable) {\n reject(e)\n }\n }\n}\n","package io.github.sceneview.web\n\nimport io.github.sceneview.web.bindings.Camera\nimport io.github.sceneview.web.bindings.float3\nimport kotlinx.browser.window\nimport org.w3c.dom.HTMLCanvasElement\nimport org.w3c.dom.events.MouseEvent\nimport org.w3c.dom.events.WheelEvent\nimport kotlin.math.PI\nimport kotlin.math.cos\nimport kotlin.math.max\nimport kotlin.math.min\nimport kotlin.math.sin\n\n/**\n * Orbit camera controller for SceneView Web.\n *\n * Provides mouse/touch-based orbit, zoom, and pan controls similar to\n * three.js OrbitControls or Google model-viewer's camera-controls.\n *\n * Usage:\n * ```kotlin\n * val controller = OrbitCameraController(canvas, sceneView.camera)\n * controller.target(0.0, 0.0, 0.0)\n * controller.distance = 5.0\n * // Call update() each frame in the render loop\n * ```\n */\nclass OrbitCameraController(\n private val canvas: HTMLCanvasElement,\n private val camera: Camera\n) {\n // Spherical coordinates — defaults match model-viewer's \"45deg 70deg 2.5m\"\n var theta = 45.0 * PI / 180.0 // horizontal angle (radians) — 45° like model-viewer\n var phi = 70.0 * PI / 180.0 // vertical angle (radians) — 70° like model-viewer\n var distance = 5.0 // distance from target\n\n // Target point (orbit center)\n var targetX = 0.0\n var targetY = 0.0\n var targetZ = 0.0\n\n // Limits\n var minDistance = 0.5\n var maxDistance = 50.0\n var minPhi = 0.1 // prevent looking straight down\n var maxPhi = PI - 0.1 // prevent looking straight up\n\n // Sensitivity\n var rotateSensitivity = 0.005\n var zoomSensitivity = 0.1\n var panSensitivity = 0.003\n\n // Auto-rotation — default speed matches model-viewer's 30deg/sec at 60fps\n var autoRotate = false\n var autoRotateSpeed = 30.0 * PI / 180.0 / 60.0 // 30°/sec ÷ 60fps ≈ 0.00873 rad/frame\n\n // Damping (inertia) — higher factor = smoother, more model-viewer-like\n var enableDamping = true\n var dampingFactor = 0.95\n private var velocityTheta = 0.0\n private var velocityPhi = 0.0\n\n // Mouse state\n private var isDragging = false\n private var isRightDragging = false\n private var lastX = 0.0\n private var lastY = 0.0\n\n init {\n setupEventListeners()\n }\n\n fun target(x: Double, y: Double, z: Double) {\n targetX = x; targetY = y; targetZ = z\n }\n\n /**\n * Update camera position from spherical coordinates.\n * Call this every frame in the render loop.\n *\n * Converts spherical coordinates (theta, phi, distance) to Cartesian\n * and calls camera.lookAt() with float3 arrays as required by Filament.js.\n */\n fun update() {\n // Apply auto-rotation\n if (autoRotate && !isDragging) {\n theta += autoRotateSpeed\n }\n\n // Apply damping\n if (enableDamping) {\n theta += velocityTheta\n phi += velocityPhi\n velocityTheta *= dampingFactor\n velocityPhi *= dampingFactor\n }\n\n // Clamp phi\n phi = max(minPhi, min(maxPhi, phi))\n distance = max(minDistance, min(maxDistance, distance))\n\n // Convert spherical to cartesian\n val eyeX = targetX + distance * sin(phi) * sin(theta)\n val eyeY = targetY + distance * cos(phi)\n val eyeZ = targetZ + distance * sin(phi) * cos(theta)\n\n // Filament.js Camera.lookAt takes float3 arrays, not 9 separate doubles\n camera.lookAt(\n float3(eyeX, eyeY, eyeZ), // eye\n float3(targetX, targetY, targetZ), // center\n float3(0.0, 1.0, 0.0) // up\n )\n }\n\n /** Remove all event listeners. Call when destroying the SceneView. */\n fun dispose() {\n // Event listeners are attached to the canvas and will be GC'd with it\n }\n\n private fun setupEventListeners() {\n // Mouse down\n canvas.addEventListener(\"mousedown\", { event ->\n val e = event as MouseEvent\n when (e.button.toInt()) {\n 0 -> { isDragging = true } // Left button = orbit\n 2 -> { isRightDragging = true } // Right button = pan\n }\n lastX = e.clientX.toDouble()\n lastY = e.clientY.toDouble()\n e.preventDefault()\n })\n\n // Mouse move\n canvas.addEventListener(\"mousemove\", { event ->\n val e = event as MouseEvent\n val dx = e.clientX.toDouble() - lastX\n val dy = e.clientY.toDouble() - lastY\n lastX = e.clientX.toDouble()\n lastY = e.clientY.toDouble()\n\n if (isDragging) {\n // Orbit\n if (enableDamping) {\n velocityTheta = -dx * rotateSensitivity\n velocityPhi = -dy * rotateSensitivity\n } else {\n theta -= dx * rotateSensitivity\n phi -= dy * rotateSensitivity\n }\n } else if (isRightDragging) {\n // Pan\n targetX += dx * panSensitivity * distance\n targetY -= dy * panSensitivity * distance\n }\n })\n\n // Mouse up\n canvas.addEventListener(\"mouseup\", {\n isDragging = false\n isRightDragging = false\n })\n\n canvas.addEventListener(\"mouseleave\", {\n isDragging = false\n isRightDragging = false\n })\n\n // Scroll wheel = zoom\n canvas.addEventListener(\"wheel\", { event ->\n val e = event as WheelEvent\n val delta = if (e.deltaY > 0) 1.0 else -1.0\n distance *= 1.0 + delta * zoomSensitivity\n distance = max(minDistance, min(maxDistance, distance))\n e.preventDefault()\n }, js(\"{passive: false}\"))\n\n // Prevent context menu on right-click\n canvas.addEventListener(\"contextmenu\", { event ->\n event.preventDefault()\n })\n\n // Touch support\n canvas.addEventListener(\"touchstart\", { event ->\n val e = event.asDynamic()\n if (e.touches.length == 1) {\n isDragging = true\n lastX = (e.touches[0].clientX as Number).toDouble()\n lastY = (e.touches[0].clientY as Number).toDouble()\n }\n event.preventDefault()\n }, js(\"{passive: false}\"))\n\n canvas.addEventListener(\"touchmove\", { event ->\n val e = event.asDynamic()\n if (isDragging && e.touches.length == 1) {\n val dx = (e.touches[0].clientX as Number).toDouble() - lastX\n val dy = (e.touches[0].clientY as Number).toDouble() - lastY\n lastX = (e.touches[0].clientX as Number).toDouble()\n lastY = (e.touches[0].clientY as Number).toDouble()\n\n if (enableDamping) {\n velocityTheta = -dx * rotateSensitivity\n velocityPhi = -dy * rotateSensitivity\n } else {\n theta -= dx * rotateSensitivity\n phi -= dy * rotateSensitivity\n }\n } else if (e.touches.length == 2) {\n // Pinch-to-zoom\n val dx = (e.touches[0].clientX as Number).toDouble() - (e.touches[1].clientX as Number).toDouble()\n val dy = (e.touches[0].clientY as Number).toDouble() - (e.touches[1].clientY as Number).toDouble()\n val pinchDistance = kotlin.math.sqrt(dx * dx + dy * dy)\n\n if (lastPinchDistance > 0) {\n val delta = lastPinchDistance - pinchDistance\n distance *= 1.0 + delta * 0.005\n distance = max(minDistance, min(maxDistance, distance))\n }\n lastPinchDistance = pinchDistance\n }\n event.preventDefault()\n }, js(\"{passive: false}\"))\n\n canvas.addEventListener(\"touchend\", {\n isDragging = false\n lastPinchDistance = -1.0\n })\n }\n\n private var lastPinchDistance = -1.0\n}\n","package io.github.sceneview.web\n\nimport io.github.sceneview.web.bindings.*\nimport io.github.sceneview.web.nodes.CameraConfig\nimport io.github.sceneview.web.nodes.GeometryConfig\nimport io.github.sceneview.web.nodes.LightConfig\nimport io.github.sceneview.web.nodes.LightType\nimport io.github.sceneview.web.nodes.ModelConfig\nimport kotlinx.browser.window\nimport org.w3c.dom.HTMLCanvasElement\n\n/**\n * SceneView for Web -- Filament.js based 3D viewer.\n *\n * Uses the same Filament rendering engine as SceneView Android,\n * compiled to WebAssembly for browser execution.\n *\n * This class actually initializes the Filament WASM module, creates a real\n * WebGL2 rendering context, and renders 3D content using the GPU.\n *\n * Basic usage:\n * ```kotlin\n * SceneView.create(canvas) {\n * camera {\n * eye(0.0, 1.5, 5.0)\n * target(0.0, 0.0, 0.0)\n * }\n * light {\n * directional()\n * intensity(100_000.0)\n * }\n * model(\"models/damaged_helmet.glb\")\n * }\n * ```\n */\nclass SceneView private constructor(\n val canvas: HTMLCanvasElement,\n val engine: Engine,\n val renderer: Renderer,\n val scene: Scene,\n val view: View,\n val camera: Camera,\n val swapChain: SwapChain,\n private val cameraEntity: Entity\n) {\n private var animationFrameId: Int? = null\n private var isRunning = false\n private var lastTimestamp = 0.0\n\n private val models = mutableListOf<LoadedModel>()\n private var assetLoader: AssetLoader? = null\n private val lightEntities = mutableListOf<Entity>()\n\n /**\n * Tracks the Filament `IndirectLight` (IBL) handle currently bound to the\n * scene so [loadEnvironment] can destroy a previous IBL before binding a\n * new one and [destroy] can release it — without this the GPU resource\n * leaks (issue #1496).\n */\n private val indirectLight = EnvironmentResourceTracker<IndirectLight> {\n engine.destroyIndirectLight(it)\n }\n\n /**\n * Tracks the Filament `Skybox` handle currently bound to the scene, for the\n * same leak-free replacement / teardown reason as [indirectLight]\n * (issue #1496).\n */\n private val skybox = EnvironmentResourceTracker<Skybox> {\n engine.destroySkybox(it)\n }\n\n /**\n * When `true` (default), the first render frame where the loaded content's\n * union bounding box becomes non-degenerate triggers a one-time translation\n * of every loaded asset's root entity so the scene's centroid lands at the\n * world origin — i.e. at the orbit-camera target.\n *\n * Library-level port of the iOS `autoCenterContent` (issue #1026): demos\n * that place models at non-origin positions (e.g. `z = -2`) then render\n * visually centred in the canvas without each demo having to re-centre\n * itself. Set to `false` for narrative scenes that rely on intentional\n * off-centre placement. Cross-platform parity with iOS #1026 and the\n * Android sibling #1051. Closes #1052.\n */\n var autoCenterContent: Boolean = true\n\n /**\n * One-shot gate for [refreshContentCentering]: tracks whether the current\n * content generation has been centred so subsequent frames are a cheap\n * no-op, and is [AutoCenterGate.reset] whenever new content is loaded so a\n * 2nd model re-centres (regression #1357). Mirrors iOS's `didCenterContent`.\n */\n private val autoCenterGate = AutoCenterGate()\n\n /** Tracks a loaded glTF asset with its animation state. */\n private class LoadedModel(\n val asset: FilamentAsset,\n val animator: Animator?,\n var animationTime: Double = 0.0\n )\n\n /** Orbit camera controller -- initialized when cameraControls is enabled. */\n var cameraController: OrbitCameraController? = null\n private set\n\n /** Enable orbit camera controls (mouse drag to orbit, scroll to zoom, touch support). */\n fun enableCameraControls(\n distance: Double = 5.0,\n targetX: Double = 0.0,\n targetY: Double = 0.0,\n targetZ: Double = 0.0,\n autoRotate: Boolean = false\n ): OrbitCameraController {\n val controller = OrbitCameraController(canvas, camera).apply {\n this.distance = distance\n target(targetX, targetY, targetZ)\n this.autoRotate = autoRotate\n }\n cameraController = controller\n return controller\n }\n\n companion object {\n /** Default IBL URL — same \"neutral\" environment as SceneView Android. */\n const val DEFAULT_IBL_URL = \"https://sceneview.github.io/assets/environments/neutral_ibl.ktx\"\n const val DEFAULT_SKYBOX_URL = \"https://sceneview.github.io/assets/environments/neutral_skybox.ktx\"\n\n /**\n * Initialize Filament WASM and create a SceneView instance.\n *\n * This is the main entry point. It:\n * 1. Calls Filament.init() to load and compile the WASM module\n * 2. Creates a Filament Engine with a WebGL2 context on the canvas\n * 3. Sets up Scene, View, Camera, Renderer, and SwapChain\n * 4. Applies the user's configuration (camera, lights, models)\n * 5. Calls onReady with the fully initialized SceneView\n *\n * @param canvas The HTML canvas element to render into\n * @param assets List of asset URLs to preload (IBL, skybox KTX files)\n * @param configure DSL block to configure the scene\n * @param onReady Callback when the SceneView is fully initialized\n */\n fun create(\n canvas: HTMLCanvasElement,\n assets: Array<String> = emptyArray(),\n configure: SceneViewBuilder.() -> Unit = {},\n onReady: (SceneView) -> Unit\n ) {\n // Step 1: Initialize Filament WASM module and preload any assets\n init(assets) {\n try {\n // Step 2: Create the Filament engine with WebGL2 context\n // Use dynamic call because webpack externals + Kotlin companion objects\n // don't resolve correctly for Filament's static Engine.create()\n val filament: dynamic = js(\"Filament\")\n val engine: Engine = filament.Engine.create(canvas).unsafeCast<Engine>()\n val renderer = engine.createRenderer()\n val scene = engine.createScene()\n val swapChain = engine.createSwapChain()\n val view = engine.createView()\n\n // Step 3: Create camera entity and camera\n val cameraEntity = (js(\"Filament.EntityManager.get().create()\") as Entity)\n val camera = engine.createCamera(cameraEntity)\n\n // Step 4: Connect view to camera and scene\n view.setCamera(camera)\n view.setScene(scene)\n\n // Step 5: Set viewport to canvas pixel dimensions\n val width = canvas.width\n val height = canvas.height\n view.setViewport(viewport(0, 0, width, height))\n\n // Step 6: Default camera setup -- perspective projection\n val aspect = if (height > 0) width.toDouble() / height.toDouble() else 1.0\n camera.setProjectionFov(\n fovInDegrees = 45.0,\n aspect = aspect,\n near = 0.1,\n far = 1000.0\n )\n\n // Default camera position: slightly above and back, looking at origin\n camera.lookAt(\n float3(0.0, 1.5, 5.0), // eye\n float3(0.0, 0.0, 0.0), // center\n float3(0.0, 1.0, 0.0) // up\n )\n\n // Default exposure matching model-viewer's exposure=1.1\n // This makes IBL-lit models look bright and vibrant\n camera.setExposureDirect(1.1)\n\n // Set clear color to near-black (clean dark background)\n renderer.setClearOptions(js(\"({clearColor: [0.05, 0.05, 0.07, 1.0], clear: true})\"))\n\n // --- Quality defaults for PBR rendering ---\n // Screen-space ambient occlusion (soft contact shadows)\n view.setAmbientOcclusionOptions(js(\"\"\"({\n enabled: true,\n radius: 0.3,\n bias: 0.0005,\n intensity: 1.0,\n quality: 1\n })\"\"\"))\n\n // Subtle bloom for emissive/bright highlights\n view.setBloomOptions(js(\"\"\"({\n enabled: true,\n strength: 0.1,\n threshold: true,\n levels: 4\n })\"\"\"))\n\n // Temporal anti-aliasing for smooth edges\n view.setTemporalAntiAliasingOptions(js(\"\"\"({\n enabled: true\n })\"\"\"))\n\n val sceneView = SceneView(\n canvas, engine, renderer, scene, view, camera, swapChain, cameraEntity\n )\n\n // Step 7: Apply user configuration (camera, lights, models, environment)\n val builder = SceneViewBuilder(sceneView)\n builder.configure()\n builder.apply()\n\n onReady(sceneView)\n } catch (e: Throwable) {\n console.error(\"SceneView: Failed to initialize Filament engine\", e)\n }\n }\n }\n }\n\n /** Resize the viewport to match the canvas dimensions. Call on window resize. */\n fun resize(width: Int = canvas.clientWidth, height: Int = canvas.clientHeight) {\n if (width <= 0 || height <= 0) return\n canvas.width = width\n canvas.height = height\n view.setViewport(viewport(0, 0, width, height))\n camera.setProjectionFov(\n fovInDegrees = 45.0,\n aspect = width.toDouble() / height.toDouble(),\n near = 0.1,\n far = 1000.0\n )\n }\n\n /** Enable automatic viewport resizing when the canvas CSS size changes. */\n var autoResize = true\n\n /** Start the render loop using requestAnimationFrame. */\n fun startRendering() {\n if (isRunning) return\n isRunning = true\n lastTimestamp = 0.0\n renderLoop(0.0)\n }\n\n /** Stop the render loop. */\n fun stopRendering() {\n isRunning = false\n animationFrameId?.let { window.cancelAnimationFrame(it) }\n animationFrameId = null\n }\n\n /**\n * Load a glTF/GLB model from a URL and add it to the scene.\n *\n * This performs the full loading pipeline:\n * 1. Fetch the .glb/.gltf file as an ArrayBuffer\n * 2. Create a FilamentAsset via the AssetLoader\n * 3. Add all renderable entities to the scene\n * 4. Call loadResources() to fetch external textures/buffers\n * 5. Release source data to free memory\n *\n * @param url URL to the .glb or .gltf file\n * @param onLoaded Optional callback when the model is fully loaded (with resources)\n */\n fun loadModel(\n url: String,\n onLoaded: ((FilamentAsset) -> Unit)? = null\n ) {\n val loader = assetLoader ?: engine.createAssetLoader().also { assetLoader = it }\n\n // Derive the base path for resolving relative resource URIs\n val basePath = url.substringBeforeLast('/') + \"/\"\n\n window.fetch(url).then { response ->\n response.arrayBuffer()\n }.then { buffer ->\n val asset = loader.createAsset(buffer)\n if (asset != null) {\n // Add all entities to the scene so they become visible\n val entities = asset.getEntities()\n scene.addEntities(entities)\n\n // Get the animator from the asset instance for animation playback\n val animator = try {\n asset.getInstance().getAnimator()\n } catch (e: Throwable) {\n null\n }\n\n val loadedModel = LoadedModel(asset, animator)\n models.add(loadedModel)\n\n // A new model changes the content bounds, so the one-shot auto-center\n // pass must run again — otherwise a 2nd model loaded after the 1st\n // centered would stay off-center. Mirrors Android's\n // `SceneAutoCenterState.reset()`.\n autoCenterGate.reset()\n\n // Load external resources (textures, buffers) referenced by the glTF.\n // This is REQUIRED for models to render with correct materials.\n asset.loadResources(\n onDone = {\n // Release the source glTF data now that resources are loaded\n asset.releaseSourceData()\n console.log(\"SceneView: Model loaded from $url (${entities.size} entities)\")\n onLoaded?.invoke(asset)\n },\n onFetched = null,\n basePath = basePath,\n asyncInterval = null\n )\n } else {\n console.error(\"SceneView: AssetLoader failed to parse model from $url\")\n }\n }.catch { error ->\n console.error(\"SceneView: Error fetching model from $url\", error)\n }\n }\n\n /**\n * Load the default neutral IBL environment.\n * Provides physically-correct PBR reflections without a visible skybox —\n * models look like they're in a photography studio.\n */\n fun loadDefaultEnvironment() {\n loadEnvironment(DEFAULT_IBL_URL)\n }\n\n /** Load an IBL (Image-Based Lighting) from a KTX file URL. */\n fun loadEnvironment(iblUrl: String, skyboxUrl: String? = null) {\n // Fetch and create IBL (indirect lighting) from a KTX1 file\n window.fetch(iblUrl).then { it.arrayBuffer() }.then { buffer ->\n val ibl = engine.createIblFromKtx1(buffer)\n // Destroy the previous IBL (if any) before swapping it out, so a\n // 2nd loadEnvironment / loadDefaultEnvironment call does not leak\n // the prior GPU resource (issue #1496).\n indirectLight.replaceWith(ibl)\n scene.setIndirectLight(ibl)\n console.log(\"SceneView: IBL loaded from $iblUrl\")\n }.catch { error ->\n console.error(\"SceneView: Error loading IBL from $iblUrl\", error)\n }\n\n // Optionally load a skybox from a separate KTX file\n skyboxUrl?.let { url ->\n window.fetch(url).then { it.arrayBuffer() }.then { buffer ->\n val sky = engine.createSkyFromKtx1(buffer)\n // Same leak-free swap as the IBL above (issue #1496).\n skybox.replaceWith(sky)\n scene.setSkybox(sky)\n console.log(\"SceneView: Skybox loaded from $url\")\n }.catch { error ->\n console.error(\"SceneView: Error loading skybox from $url\", error)\n }\n }\n }\n\n /**\n * Add a light to the scene using the Filament LightManager Builder API.\n *\n * The Filament.js LightManager.Builder is accessed via:\n * Filament.LightManager.Builder(type).intensity(n).direction([x,y,z]).build(engine, entity)\n */\n fun addLight(config: LightConfig) {\n val entity = (js(\"Filament.EntityManager.get().create()\") as Entity)\n\n // Map our LightType enum to Filament's numeric type constants\n // In Filament.js: 0 = SUN, 1 = DIRECTIONAL, 2 = POINT, 3 = FOCUSED_SPOT, 4 = SPOT\n val lightType = when (config.type) {\n LightType.DIRECTIONAL -> 1\n LightType.POINT -> 2\n LightType.SPOT -> 4\n }\n\n // Use the Builder pattern: LightManager.Builder(type).intensity(...).build(engine, entity)\n val builder = LightManager.Builder(lightType)\n builder.intensity(config.intensity)\n builder.color(float3(\n config.colorR.toDouble(),\n config.colorG.toDouble(),\n config.colorB.toDouble()\n ))\n builder.castShadows(true)\n\n if (config.type == LightType.DIRECTIONAL) {\n builder.direction(float3(\n config.directionX.toDouble(),\n config.directionY.toDouble(),\n config.directionZ.toDouble()\n ))\n } else {\n builder.position(float3(\n config.positionX.toDouble(),\n config.positionY.toDouble(),\n config.positionZ.toDouble()\n ))\n builder.falloff(10.0)\n }\n\n builder.build(engine, entity)\n scene.addEntity(entity)\n lightEntities.add(entity)\n }\n\n /**\n * Add a procedural geometry primitive to the scene.\n *\n * Generates an in-memory GLB from the KMP core geometry generators\n * and loads it through the gltfio pipeline, giving geometry nodes\n * the same PBR material system as loaded glTF models.\n *\n * @param config Geometry configuration (type, size, color, position, scale)\n */\n fun addGeometry(config: GeometryConfig) {\n val glbBuffer = GeometryGLBBuilder.buildGLB(config)\n val loader = assetLoader ?: engine.createAssetLoader().also { assetLoader = it }\n\n try {\n val asset = loader.createAsset(glbBuffer)\n if (asset != null) {\n val entities = asset.getEntities()\n scene.addEntities(entities)\n\n val animator = try {\n asset.getInstance().getAnimator()\n } catch (e: Throwable) {\n null\n }\n\n models.add(LoadedModel(asset, animator))\n\n // Finalize the asset — loadResources uploads vertex/index buffers to GPU.\n // Even for self-contained GLBs (no external resources), this step is required.\n asset.loadResources(\n onDone = { asset.releaseSourceData() },\n onFetched = null,\n basePath = \"\",\n asyncInterval = null\n )\n console.log(\"SceneView: Geometry '${config.geometryType.name.lowercase()}' added\")\n } else {\n console.error(\"SceneView: Failed to create geometry asset for ${config.geometryType}\")\n }\n } catch (e: Throwable) {\n console.error(\"SceneView: Error creating geometry ${config.geometryType}\", e)\n }\n }\n\n /**\n * Auto-fit the camera to frame all loaded models.\n * Computes the bounding box of all assets and adjusts the orbit controller distance.\n */\n fun fitToModels() {\n if (models.isEmpty()) return\n val controller = cameraController ?: return\n\n // Compute the union bounding box of all loaded models\n var minX = Double.MAX_VALUE; var minY = Double.MAX_VALUE; var minZ = Double.MAX_VALUE\n var maxX = -Double.MAX_VALUE; var maxY = -Double.MAX_VALUE; var maxZ = -Double.MAX_VALUE\n\n for (model in models) {\n val aabb = model.asset.getBoundingBox()\n val mn: dynamic = aabb.min\n val mx: dynamic = aabb.max\n if ((mn[0] as Number).toDouble() < minX) minX = (mn[0] as Number).toDouble()\n if ((mn[1] as Number).toDouble() < minY) minY = (mn[1] as Number).toDouble()\n if ((mn[2] as Number).toDouble() < minZ) minZ = (mn[2] as Number).toDouble()\n if ((mx[0] as Number).toDouble() > maxX) maxX = (mx[0] as Number).toDouble()\n if ((mx[1] as Number).toDouble() > maxY) maxY = (mx[1] as Number).toDouble()\n if ((mx[2] as Number).toDouble() > maxZ) maxZ = (mx[2] as Number).toDouble()\n }\n\n val cx = (minX + maxX) / 2.0\n val cy = (minY + maxY) / 2.0\n val cz = (minZ + maxZ) / 2.0\n val dx = maxX - minX\n val dy = maxY - minY\n val dz = maxZ - minZ\n val radius = kotlin.math.sqrt(dx * dx + dy * dy + dz * dz) / 2.0\n\n controller.target(cx, cy, cz)\n controller.distance = radius * 2.5\n controller.minDistance = radius * 0.5\n controller.maxDistance = radius * 10.0\n }\n\n /**\n * Translate every loaded asset's root entity so the union bounding box of\n * all content lands centred on the world origin (the orbit-camera target).\n *\n * Runs once, on the first render frame where the content bounds are\n * non-degenerate — most async model loads complete within a handful of\n * frames after [loadModel]. A no-op once [didCenterContent] is set, and a\n * no-op entirely when [autoCenterContent] is `false`.\n *\n * Library-level port of the iOS `refreshContentCentering` (#1026): on iOS\n * an intermediate `contentRoot` Entity is translated; the web Filament\n * `Scene` has no parent root, so each asset's own root entity is offset\n * instead — the visual result is identical. Closes #1052.\n */\n private fun refreshContentCentering() {\n if (!autoCenterGate.shouldCenter(autoCenterContent, models.isNotEmpty())) return\n\n // Gather each asset's bounding box. `getBoundingBox()` reports the\n // asset-space AABB, which is empty/degenerate until loadResources()\n // has populated the renderables.\n val boxes = models.mapNotNull { model ->\n try {\n val aabb = model.asset.getBoundingBox()\n val mn: dynamic = aabb.min\n val mx: dynamic = aabb.max\n ContentCentering.Aabb(\n doubleArrayOf(\n (mn[0] as Number).toDouble(),\n (mn[1] as Number).toDouble(),\n (mn[2] as Number).toDouble(),\n ),\n doubleArrayOf(\n (mx[0] as Number).toDouble(),\n (mx[1] as Number).toDouble(),\n (mx[2] as Number).toDouble(),\n ),\n )\n } catch (e: Throwable) {\n // The asset's bounds are not readable yet (resources still loading) — skip this\n // model for now. Surface it once so a genuine failure is not invisible; the pass\n // re-runs on later frames until `didCenterContent` is set.\n console.warn(\"SceneView: skipping a model in auto-center (bounds not ready)\", e)\n null\n }\n }\n\n val offset = ContentCentering.centeringOffset(ContentCentering.union(boxes)) ?: return\n\n // Apply the centring translation to each asset's root entity via the\n // TransformManager. Composing onto the existing transform keeps any\n // per-model scale/position the consumer set themselves intact.\n val tm = engine.getTransformManager()\n for (model in models) {\n try {\n val root = model.asset.getRoot()\n if (!tm.hasComponent(root)) tm.create(root)\n val instance = tm.getInstance(root)\n val current: dynamic = tm.getTransform(instance)\n tm.setTransform(instance, translatedMat4(current, offset))\n } catch (e: Throwable) {\n console.error(\"SceneView: auto-center failed for a model\", e)\n }\n }\n autoCenterGate.markCentered()\n console.log(\"SceneView: auto-centered content (offset ${offset[0]}, ${offset[1]}, ${offset[2]})\")\n }\n\n /**\n * Return a copy of the column-major 4x4 [mat] with [offset] added to its\n * translation column (indices 12, 13, 14). Filament.js represents a mat4\n * as a flat 16-element `number[]`.\n */\n private fun translatedMat4(mat: dynamic, offset: DoubleArray): dynamic {\n val out = js(\"[]\")\n for (i in 0 until 16) {\n out.push((mat[i] as Number).toDouble())\n }\n out[12] = (out[12] as Number).toDouble() + offset[0]\n out[13] = (out[13] as Number).toDouble() + offset[1]\n out[14] = (out[14] as Number).toDouble() + offset[2]\n return out\n }\n\n /** Clean up all Filament resources. */\n fun destroy() {\n stopRendering()\n cameraController?.dispose()\n\n // Destroy loaded assets\n assetLoader?.let { loader ->\n models.forEach { loader.destroyAsset(it.asset) }\n loader.delete()\n }\n models.clear()\n\n // Destroy light entities\n lightEntities.forEach { engine.destroyEntity(it) }\n lightEntities.clear()\n\n // Destroy the environment GPU resources — IBL + skybox (issue #1496).\n // Detach from the scene first so the engine never holds a dangling\n // reference, then destroy the handles.\n if (indirectLight.current != null) scene.setIndirectLight(null)\n indirectLight.release()\n if (skybox.current != null) scene.setSkybox(null)\n skybox.release()\n\n // Destroy core Filament objects\n engine.destroyRenderer(renderer)\n engine.destroyView(view)\n engine.destroyScene(scene)\n engine.destroyCameraComponent(cameraEntity)\n engine.destroySwapChain(swapChain)\n val filament: dynamic = js(\"Filament\")\n filament.Engine.destroy(engine)\n }\n\n /**\n * The render loop -- called every frame via requestAnimationFrame.\n *\n * Each frame:\n * 1. Auto-resizes viewport if CSS size changed\n * 2. Updates orbit camera controller (rotation, damping)\n * 3. Advances glTF animations\n * 4. Calls engine.execute() to process pending async operations\n * 5. Renders the frame via beginFrame/renderView/endFrame\n */\n private fun renderLoop(timestamp: Double) {\n if (!isRunning) return\n\n // Auto-resize viewport if canvas CSS size changed\n if (autoResize) {\n val w = canvas.clientWidth\n val h = canvas.clientHeight\n if (w > 0 && h > 0 && (w != canvas.width || h != canvas.height)) {\n resize(w, h)\n }\n }\n\n // Auto-center content on the first frame its bounds are non-degenerate\n // (i.e. async-loaded models have populated). No-op once centered or\n // when autoCenterContent is disabled. Port of iOS #1026 — closes #1052.\n refreshContentCentering()\n\n // Update orbit camera\n cameraController?.update()\n\n // Track animation time\n val deltaSeconds = if (lastTimestamp > 0) (timestamp - lastTimestamp) / 1000.0 else 0.0\n lastTimestamp = timestamp\n\n // Update glTF animations for all loaded models\n models.forEach { model ->\n model.animator?.let { animator ->\n val count = animator.getAnimationCount()\n if (count > 0) {\n model.animationTime += deltaSeconds\n val duration = animator.getAnimationDuration(0)\n if (duration > 0) {\n // Loop the animation\n model.animationTime = model.animationTime % duration\n }\n // In Filament.js, applyAnimation only takes the index.\n // The animation time is set by calling the animator at the right moment.\n // Actually, the gltfio$Animator.applyAnimation(index) applies the animation\n // at the CURRENT time set internally -- we need to advance it.\n // The proper way is: animator.applyAnimation(index) after setting time\n // via the asset's animation system.\n // For Filament.js, we use the asset instance animator which tracks time internally.\n animator.applyAnimation(0)\n animator.updateBoneMatrices()\n }\n }\n }\n\n // Process any pending async Filament operations (texture uploads, etc.)\n engine.execute()\n\n // Render frame\n if (renderer.beginFrame(swapChain)) {\n renderer.renderView(view)\n renderer.endFrame()\n }\n\n animationFrameId = window.requestAnimationFrame(::renderLoop)\n }\n}\n\n/**\n * DSL builder for SceneView configuration.\n */\nclass SceneViewBuilder(private val sceneView: SceneView) {\n private var cameraConfig: CameraConfig? = null\n private var lightConfig: LightConfig? = null\n private val modelConfigs = mutableListOf<ModelConfig>()\n private val geometryConfigs = mutableListOf<GeometryConfig>()\n private var iblUrl: String? = null\n private var skyboxUrl: String? = null\n private var cameraControlsEnabled = true\n private var autoRotateEnabled = false\n private var useDefaultEnvironment = true\n private var autoCenterContentEnabled = true\n\n /** Configure the camera. */\n fun camera(block: CameraConfig.() -> Unit) {\n cameraConfig = CameraConfig().apply(block)\n }\n\n /** Configure a directional light. */\n fun light(block: LightConfig.() -> Unit) {\n lightConfig = LightConfig().apply(block)\n }\n\n /** Add a glTF/GLB model by URL. */\n fun model(url: String, block: ModelConfig.() -> Unit = {}) {\n modelConfigs.add(ModelConfig(url).apply(block))\n }\n\n /** Add a procedural geometry primitive (cube, sphere, cylinder, plane). */\n fun geometry(block: GeometryConfig.() -> Unit) {\n geometryConfigs.add(GeometryConfig().apply(block))\n }\n\n /** Set environment lighting from KTX IBL files. */\n fun environment(iblUrl: String, skyboxUrl: String? = null) {\n this.iblUrl = iblUrl\n this.skyboxUrl = skyboxUrl\n this.useDefaultEnvironment = false\n }\n\n /** Disable the default neutral IBL environment. */\n fun noEnvironment() {\n this.useDefaultEnvironment = false\n }\n\n /** Enable orbit camera controls (drag to orbit, scroll to zoom, touch). Enabled by default. */\n fun cameraControls(enabled: Boolean = true) {\n cameraControlsEnabled = enabled\n }\n\n /** Enable auto-rotation of the camera around the target. */\n fun autoRotate(enabled: Boolean = true) {\n autoRotateEnabled = enabled\n }\n\n /**\n * Auto-centre loaded content on the world origin once it has finished\n * loading. Enabled by default — pass `false` for narrative scenes that\n * rely on intentional off-centre placement.\n *\n * Library-level port of iOS `autoCenterContent` (#1026). Closes #1052.\n */\n fun autoCenterContent(enabled: Boolean = true) {\n autoCenterContentEnabled = enabled\n }\n\n internal fun apply() {\n sceneView.autoCenterContent = autoCenterContentEnabled\n cameraConfig?.applyTo(sceneView.camera)\n\n // If no explicit light was configured, add model-viewer-like 3-point lighting\n if (lightConfig != null) {\n sceneView.addLight(lightConfig!!)\n } else {\n // Key light — main directional, slightly warm\n val keyLight = LightConfig().apply {\n directional()\n intensity(50_000.0)\n direction(0.6f, -1.0f, -0.8f)\n }\n sceneView.addLight(keyLight)\n\n // Fill light — softer, from the opposite side\n val fillLight = LightConfig().apply {\n directional()\n intensity(25_000.0)\n direction(-0.6f, -0.5f, 0.8f)\n }\n sceneView.addLight(fillLight)\n\n // Rim/back light — highlights edges, cool tint\n val rimLight = LightConfig().apply {\n directional()\n intensity(30_000.0)\n color(0.85f, 0.9f, 1.0f) // slight cool tint\n direction(0.0f, -0.3f, 1.0f)\n }\n sceneView.addLight(rimLight)\n }\n\n // Load IBL environment for physically-correct PBR reflections\n if (iblUrl != null) {\n sceneView.loadEnvironment(iblUrl!!, skyboxUrl)\n } else if (useDefaultEnvironment) {\n // Load the bundled neutral IBL — same as Android SceneView default\n sceneView.loadDefaultEnvironment()\n }\n\n modelConfigs.forEach { config ->\n sceneView.loadModel(config.url, config.onLoaded)\n }\n geometryConfigs.forEach { config ->\n sceneView.addGeometry(config)\n }\n if (cameraControlsEnabled) {\n val cam = cameraConfig\n sceneView.enableCameraControls(\n distance = cam?.eyeZ ?: 5.0,\n targetX = cam?.targetX ?: 0.0,\n targetY = cam?.targetY ?: 0.0,\n targetZ = cam?.targetZ ?: 0.0,\n autoRotate = autoRotateEnabled\n )\n }\n }\n}\n","package io.github.sceneview.web\n\nimport kotlin.js.Promise\n\n/**\n * SceneViewer — the JavaScript-facing 3D viewer class.\n *\n * Instances are created via `sceneview.createViewer()` or `sceneview.modelViewer()`.\n * All methods use `@JsName` to ensure stable, unmangled names in compiled JS.\n *\n * ```js\n * sceneview.createViewer(\"canvas\").then(function(sv) {\n * sv.loadModel(\"model.glb\");\n * sv.setAutoRotate(true);\n * });\n * ```\n */\n@JsExport\n@JsName(\"SceneViewer\")\nclass SceneViewJS {\n private var _sceneView: SceneView? = null\n private var disposed = false\n\n internal fun attach(sv: SceneView) {\n _sceneView = sv\n }\n\n /**\n * Load a glTF/GLB model from a URL.\n * Returns a Promise that resolves with the URL when loaded.\n */\n @JsName(\"loadModel\")\n fun loadModel(url: String): Promise<String> {\n val sv = _sceneView ?: return Promise.reject(Throwable(\"SceneViewer not initialized\"))\n return Promise { resolve, reject ->\n try {\n sv.loadModel(url) {\n resolve(url)\n }\n } catch (e: Throwable) {\n reject(e)\n }\n }\n }\n\n /**\n * Load environment lighting from a KTX IBL file URL.\n */\n @JsName(\"setEnvironment\")\n fun setEnvironment(iblUrl: String) {\n _sceneView?.loadEnvironment(iblUrl, null)\n }\n\n /**\n * Load environment lighting with skybox.\n */\n @JsName(\"setEnvironmentWithSkybox\")\n fun setEnvironmentWithSkybox(iblUrl: String, skyboxUrl: String) {\n _sceneView?.loadEnvironment(iblUrl, skyboxUrl)\n }\n\n /**\n * Set the camera orbit position in spherical coordinates.\n * @param theta Horizontal angle in radians\n * @param phi Vertical angle in radians\n * @param distance Distance from target\n */\n @JsName(\"setCameraOrbit\")\n fun setCameraOrbit(theta: Double, phi: Double, distance: Double) {\n _sceneView?.cameraController?.let {\n it.theta = theta\n it.phi = phi\n it.distance = distance\n }\n }\n\n /**\n * Set the camera orbit target (look-at point).\n */\n @JsName(\"setCameraTarget\")\n fun setCameraTarget(x: Double, y: Double, z: Double) {\n _sceneView?.cameraController?.target(x, y, z)\n }\n\n /**\n * Enable or disable auto-rotation.\n */\n @JsName(\"setAutoRotate\")\n fun setAutoRotate(enabled: Boolean) {\n _sceneView?.cameraController?.autoRotate = enabled\n }\n\n /**\n * Set auto-rotation speed in radians per frame.\n */\n @JsName(\"setAutoRotateSpeed\")\n fun setAutoRotateSpeed(speed: Double) {\n _sceneView?.cameraController?.autoRotateSpeed = speed\n }\n\n /**\n * Set minimum and maximum zoom distances.\n */\n @JsName(\"setZoomLimits\")\n fun setZoomLimits(min: Double, max: Double) {\n _sceneView?.cameraController?.let {\n it.minDistance = min\n it.maxDistance = max\n }\n }\n\n /**\n * Start the render loop. Called automatically by createViewer().\n */\n @JsName(\"startRendering\")\n fun startRendering() {\n _sceneView?.startRendering()\n }\n\n /**\n * Stop the render loop.\n */\n @JsName(\"stopRendering\")\n fun stopRendering() {\n _sceneView?.stopRendering()\n }\n\n /**\n * Resize the viewport. Normally handled automatically.\n */\n @JsName(\"resize\")\n fun resize(width: Int, height: Int) {\n _sceneView?.resize(width, height)\n }\n\n /**\n * Set the background clear color (RGBA, 0-1 range).\n * Use this to sync the 3D canvas background with your page theme.\n */\n @JsName(\"setBackgroundColor\")\n fun setBackgroundColor(r: Double, g: Double, b: Double, a: Double) {\n val sv = _sceneView ?: return\n val opts = js(\"{}\")\n val color = js(\"[]\")\n color.push(r, g, b, a)\n opts[\"clearColor\"] = color\n opts[\"clear\"] = true\n sv.renderer.setClearOptions(opts)\n }\n\n /**\n * Fit the camera to frame all loaded models.\n */\n @JsName(\"fitToModels\")\n fun fitToModels() {\n _sceneView?.fitToModels()\n }\n\n /**\n * Toggle library-level auto-centring of loaded content.\n *\n * When enabled (the default), content is translated so its bounding box\n * is centred on the orbit-camera target the first frame it finishes\n * loading. Pass `false` for narrative scenes with intentional off-centre\n * placement. Port of iOS `autoCenterContent` (#1026).\n */\n @JsName(\"setAutoCenterContent\")\n fun setAutoCenterContent(enabled: Boolean) {\n _sceneView?.autoCenterContent = enabled\n }\n\n /**\n * Clean up all GPU resources. Call when removing the viewer.\n */\n @JsName(\"dispose\")\n fun dispose() {\n if (!disposed) {\n disposed = true\n _sceneView?.destroy()\n _sceneView = null\n }\n }\n}\n\n/**\n * Library version.\n *\n * Kept in lockstep with the repo-wide `VERSION_NAME` (`gradle.properties`) — `sceneview-web` has no\n * Gradle `buildConfig` plugin, so this literal is the single source of truth for the JS surface.\n * Bump it together with every other version location (see CLAUDE.md \"Version Location Map\").\n */\nconst val SCENEVIEW_VERSION = \"4.8.0\"\n","package io.github.sceneview.web.bindings\n\n// -----------------------------------------------------------------------\n// Helper functions for creating Filament.js array types.\n//\n// Filament.js uses number[] (JavaScript arrays) for float3, float4, mat4, etc.\n// These helpers create the arrays in a Kotlin/JS-friendly way.\n//\n// NOTE: These MUST NOT be in the @JsModule(\"filament\") file (Filament.kt)\n// because non-external declarations are not allowed in @JsModule files.\n// -----------------------------------------------------------------------\n\n/**\n * Create a float3 array [x, y, z] for Filament.js API calls.\n *\n * Used by Camera.lookAt, LightManager.Builder.direction/position/color, etc.\n */\nfun float3(x: Double, y: Double, z: Double): dynamic {\n val arr = js(\"[]\")\n arr.push(x, y, z)\n return arr\n}\n\n/**\n * Create a float4 array [x, y, z, w] for Filament.js API calls.\n *\n * Used by Renderer.setClearOptions, Skybox.setColor, etc.\n */\nfun float4(x: Double, y: Double, z: Double, w: Double): dynamic {\n val arr = js(\"[]\")\n arr.push(x, y, z, w)\n return arr\n}\n\n/**\n * Create a viewport array [x, y, width, height] for View.setViewport().\n */\nfun viewport(x: Int, y: Int, width: Int, height: Int): dynamic {\n val arr = js(\"[]\")\n arr.push(x, y, width, height)\n return arr\n}\n","package io.github.sceneview.web.nodes\n\nimport io.github.sceneview.web.bindings.Camera\nimport io.github.sceneview.web.bindings.float3\n\n/**\n * Camera configuration for SceneView web.\n *\n * ```kotlin\n * camera {\n * eye(0.0, 1.5, 5.0)\n * target(0.0, 0.0, 0.0)\n * up(0.0, 1.0, 0.0)\n * fov(45.0)\n * near(0.1)\n * far(1000.0)\n * }\n * ```\n */\nclass CameraConfig {\n var eyeX = 0.0; private set\n var eyeY = 1.5; private set\n var eyeZ = 5.0; private set\n var targetX = 0.0; private set\n var targetY = 0.0; private set\n var targetZ = 0.0; private set\n var upX = 0.0; private set\n var upY = 1.0; private set\n var upZ = 0.0; private set\n var fovDegrees = 45.0; private set\n var nearPlane = 0.1; private set\n var farPlane = 1000.0; private set\n // Exposure defaults — matching model-viewer's exposure=1.1\n var aperture = 16.0; private set\n var shutterSpeed = 1.0 / 125.0; private set\n var sensitivity = 100.0; private set\n var directExposure: Double? = 1.1; private set\n var useDirectExposure = true; private set\n\n fun eye(x: Double, y: Double, z: Double) {\n eyeX = x; eyeY = y; eyeZ = z\n }\n\n fun target(x: Double, y: Double, z: Double) {\n targetX = x; targetY = y; targetZ = z\n }\n\n fun up(x: Double, y: Double, z: Double) {\n upX = x; upY = y; upZ = z\n }\n\n fun fov(degrees: Double) { fovDegrees = degrees }\n fun near(value: Double) { nearPlane = value }\n fun far(value: Double) { farPlane = value }\n\n fun exposure(aperture: Double, shutterSpeed: Double, sensitivity: Double) {\n this.aperture = aperture\n this.shutterSpeed = shutterSpeed\n this.sensitivity = sensitivity\n this.useDirectExposure = false\n }\n\n /** Set exposure directly (model-viewer-style, default 1.1). Higher = brighter. */\n fun exposure(value: Double) {\n this.directExposure = value\n this.useDirectExposure = true\n }\n\n /** Apply this config to a Filament.js Camera using float3 arrays for lookAt. */\n fun applyTo(camera: Camera) {\n camera.lookAt(\n float3(eyeX, eyeY, eyeZ),\n float3(targetX, targetY, targetZ),\n float3(upX, upY, upZ)\n )\n if (useDirectExposure && directExposure != null) {\n camera.setExposureDirect(directExposure!!)\n } else {\n camera.setExposure(aperture, shutterSpeed, sensitivity)\n }\n }\n}\n","package io.github.sceneview.web.nodes\n\n/**\n * Light configuration for SceneView web.\n *\n * ```kotlin\n * light {\n * directional()\n * intensity(100_000.0)\n * color(1.0f, 1.0f, 1.0f)\n * direction(0.0f, -1.0f, -0.5f)\n * }\n * ```\n */\nclass LightConfig {\n var type = LightType.DIRECTIONAL; private set\n var intensity = 100_000.0; private set\n var colorR = 1.0f; private set\n var colorG = 1.0f; private set\n var colorB = 1.0f; private set\n var directionX = 0.0f; private set\n var directionY = -1.0f; private set\n var directionZ = -0.5f; private set\n var positionX = 0.0f; private set\n var positionY = 3.0f; private set\n var positionZ = 0.0f; private set\n\n fun directional() { type = LightType.DIRECTIONAL }\n fun point() { type = LightType.POINT }\n fun spot() { type = LightType.SPOT }\n\n fun intensity(value: Double) { intensity = value }\n\n fun color(r: Float, g: Float, b: Float) {\n colorR = r; colorG = g; colorB = b\n }\n\n fun direction(x: Float, y: Float, z: Float) {\n directionX = x; directionY = y; directionZ = z\n }\n\n fun position(x: Float, y: Float, z: Float) {\n positionX = x; positionY = y; positionZ = z\n }\n}\n\nenum class LightType {\n DIRECTIONAL,\n POINT,\n SPOT\n}\n",null,null,null,"module.exports = __WEBPACK_EXTERNAL_MODULE__650__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module used 'module' so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(607);\n"],"names":["root","factory","exports","module","require","define","amd","globalThis","__WEBPACK_EXTERNAL_MODULE__650__","vertices","indices","this","l2_1","m2_1","position","normal","uvCoordinate","color","Float3","n2_1","o2_1","p2_1","q2_1","toString","toString_0","size","center","Float3_init_$Create$","extents","g2_1","h2_1","i2_1","p0","v","p1","v_0","p2","v_1","p3","v_2","p4","v_3","p5","v_4","p6","v_5","p7","v_6","up","VOID","down","front","back","left","right","uv00","Float2","uv10","uv01","uv11","listOf","Vertex","ArrayList_init_$Create$","inductionVariable","i","base","imul","this_0","r","GeometryData","s1","radius","height","sideCount","halfHeight","thetaIncrement","theta","uStep","lowerCapVertices","upperCapVertices","upperEdgeVertices","side","Math","cos","x","tmp$ret$8","sin","x_0","tmp","tmp_0","lowerPosition","this_1","normalize","x_1","tmp$ret$11","x_2","tmp_1","upperPosition","this_2","x_3","tmp$ret$14","x_4","tmp_2","tmp_3","s","tmp$ret$15","tmp$ret$16","inductionVariable_0","bottomRight","side_0","topLeft","topRight","lowerCenterIndex","upperCenterIndex","this_3","Float2_init_$Create$","j2_1","k2_1","tmp$ret$4","stacks","slices","stack","phi","slice","inductionVariable_1","inductionVariable_2","bottomCap","stack_0","next","slice_0","Object","defineProperty","prototype","get","configurable","__magic__","a","b","ArrayBuffer","isView","__proto__","Int8Array","defaultConstructor","parent","interfaces","suspendArity","associatedObjectKey","associatedObjects","<this>","separator","prefix","postfix","limit","truncated","transform","buffer","c","count","last","_this__u8e3s4","length","element","$l$loop","appendElement","joinTo","StringBuilder_init_$Create$","_iterator__ex2g4s","d","e","f","joinTo_0","$this","other","String","fromCharCode","name","ordinal","g_1","h_1","toString_1","k_1","Long","l_1","m_1","n_1","low","high","Number_0","call","o_1","p_1","ZERO","ONE","NEG_ONE","MIN_VALUE","TWO_PWR_24_","equalsLong","thisNeg","isNegative","otherNeg","subtract","getLowBitsUnsigned","radix","isZero","get_MIN_VALUE","radixLong","fromInt","div","divide","rem","convertToInt","multiply","toStringImpl","negate","digitsPerTime","radixToPower","fromNumber","pow","result","remDiv","rem_0","digits","value","add","get_ZERO","isOdd","lessThan","get_TWO_PWR_24_","toNumber","a48","a32","a16","a00","b48","b32","b16","b00","c48","c32","c16","c00","invert","isNaN_0","MAX_VALUE","twoPwr32","compare","Exception_init_$Create$_0","get_ONE","get_NEG_ONE","approx","numBits","numBits_0","shiftLeft","shiftRight","res","greaterThanOrEqual","approxDouble","approx2","max","floor","log2","ceil","log","LN2","delta","approxRes","approxRem","greaterThan","it","isJsArray","$type$","PrimitiveKClassImpl","Array","longArrayClass$lambda","index","isString","charCodeAt","doubleCompareTo","primitiveCompareTo","j","compareToDoNotIntrinsicify","ia","o","isArrayish","anyToString","proto","create","instance","constructorFunction","Error","captureStackTrace","constructor","message","cause","isUndefined","this_","defineFieldOnInstance","defineMessage","getPrototypeOf","writable","ClassCastException_init_$Create$","ctor","initMetadataFor","kind","metadata","simpleName","$kClass$","createMetadata","$metadata$","assign","Symbol","globalInterfaceId","initMetadataForObject","obj","isArray","collection","u","destination","iterator","_unary__edvuaz","collectionToArrayCommonImpl","ArithmeticException_init_$Create$_0","throwIndexOverflow","AbstractCollection","y_1","$outer","w_1","g1_1","IteratorImpl","Companion_instance_2","i1","AbstractMutableCollection","b1_1","initialCapacity","tmp$ret$0","ArrayList","IllegalArgumentException_init_$Create$_0","p1_1","q1_1","r1","array","Companion_getInstance_1","AbstractMutableList","o1_1","RuntimeException_init_$Init$","UnsupportedOperationException","RuntimeException_init_$Init$_0","IllegalStateException","IllegalArgumentException","Exception_init_$Init$","RuntimeException","Exception_init_$Init$_0","extendThrowable","Exception","NoSuchElementException","IndexOutOfBoundsException","ArithmeticException","NoWhenBranchMatchedException","NullPointerException","ClassCastException","jClass","givenSimpleName","isInstanceFunction","KClassImpl","w1_1","x1_1","y1_1","StringBuilder","content","a2_1","uppercase","toUpperCase","c2_1","function_0","ignoreCase","n1","n2","min","thisChar","otherChar","uppercaseChar","toLowerCase","Char__compareTo_impl_ypi4mb","compareTo","compareTo_0","sam$kotlin_Comparator$0","STRING_CASE_INSENSITIVE_ORDER$lambda","h1_1","e2_1","CharSequence","Char","b2","f2_1","thisUpper","otherUpper","charSequenceLength","elements","t","modified","toArray","NoSuchElementException_init_$Create$","z","IllegalStateException_init_$Create$_0","c1","j1","l1","ListIteratorImpl","fromIndex","toIndex","m1","times","a1","rangeCheck","push","splice","insertionRangeCheck","offset","amount","previous","item","checkIndexOverflow","index_0","pop","joinToString","arrayToString$lambda","UnsupportedOperationException_init_$Create$","z1","IndexOutOfBoundsException_init_$Create$_0","charSequenceGet","joinToString_0","this$0","collectionToArray","EmptyIterator_instance","throwable","Number","delimiter","missingDelimiterValue","char","startIndex","get_lastIndex_0","chars","NoSuchElementException_init_$Create$_0","single","lastIndexOf","str","maximumValue","coerceAtMost","charAtIndex","equals","tmp$ret$3","lastIndexOfAny","arr","Uint16Array","endIndex","substring","NullPointerException_init_$Create$","THROW_NPE","Infinity","isInfinite","NoWhenBranchMatchedException_init_$Create$","y","l","sqrt","r2_1","v2_1","w2_1","x2_1","destroyer","c3_1","d3_1","api","createViewerImpl","jsCreateViewerAutoRotate$ref","jsCreateViewerFull$ref","modelUrl","then","viewer","loadModel","$modelUrl","jsModelViewer$ref","jsModelViewerAutoRotate$ref","window","console","canvasId","autoRotate","cameraControls","cameraX","cameraY","cameraZ","fov","lightIntensity","document","getElementById","tmp0_elvis_lhs","HTMLCanvasElement","Promise","reject","newThrowable","canvas","width","clientWidth","clientHeight","resolve","$this$create","u5","$this$camera","s4","$cameraX","$cameraY","$cameraZ","t4","u4","$fov","Unit_instance","createViewerImpl$lambda$lambda$lambda","v5","$this$light","g5","h5","$lightIntensity","i5","createViewerImpl$lambda$lambda$lambda_0","w5","$autoRotate","x5","$cameraControls","createViewerImpl$lambda$lambda","y6","$canvas","sceneView","s6","addEventListener","createViewerImpl$lambda$lambda$lambda_1","SceneViewer","v6","$resolve","createViewerImpl$lambda$lambda_0","z6_1","event","MouseEvent","THROW_CCE","tmp0_subject","button","u7_1","v7_1","w7_1","clientX","x7_1","clientY","preventDefault","dx","dy","q7_1","s7_1","l7_1","t7_1","b7_1","c7_1","e7_1","n7_1","d7_1","f7_1","OrbitCameraController$setupEventListeners$lambda_0","OrbitCameraController$setupEventListeners$lambda_1","OrbitCameraController$setupEventListeners$lambda_2","WheelEvent","deltaY","m7_1","h7_1","i7_1","tmp0_0","tmp0","b_0","OrbitCameraController$setupEventListeners$lambda_3","passive","OrbitCameraController$setupEventListeners$lambda_4","touches","numberToDouble","isNumber","OrbitCameraController$setupEventListeners$lambda_5","tmp_4","tmp_5","tmp_7","tmp_8","tmp_9","tmp_10","tmp_11","tmp_12","dx_0","dy_0","pinchDistance","y7_1","tmp_13","OrbitCameraController$setupEventListeners$lambda_6","OrbitCameraController$setupEventListeners$lambda_7","camera","a7_1","g7_1","j7_1","k7_1","o7_1","p7_1","r7_1","setupEventListeners","asset","animator","animationTime","c8_1","d8_1","e8_1","w6_1","x6_1","mat","out","timestamp","h6_1","r6_1","w","y5_1","h","g8","o6_1","j6_1","p6_1","s2","aabb","getBoundingBox","mn","mx","Float64Array","Aabb","tmp_6","warn","tmp0_safe_receiver","boxes","ContentCentering_instance","b3","y2","tm","z5_1","getTransformManager","_iterator__ex2g4s_0","model","getRoot","hasComponent","getInstance","current","getTransform","setTransform","translatedMat4","error","e_0","t2","refreshContentCentering","q6_1","z7","deltaSeconds","i6_1","tmp0_safe_receiver_0","getAnimationCount","duration","getAnimationDuration","applyAnimation","updateBoneMatrices","execute","a6_1","beginFrame","e6_1","renderView","c6_1","endFrame","g6_1","requestAnimationFrame","renderLoop","response","arrayBuffer","$loader","createAsset","entities","getEntities","b6_1","addEntities","getAnimator","loadedModel","LoadedModel","u2","loadResources","$asset","releaseSourceData","$url","$entities","$onLoaded","SceneView$loadModel$lambda$lambda","$basePath","engine","renderer","scene","view","swapChain","cameraEntity","d6_1","f6_1","k6_1","l6_1","m6_1","EnvironmentResourceTracker","destroyIndirectLight","n6_1","destroySkybox","SceneView$skybox$lambda","AutoCenterGate","j5_1","k5_1","l5_1","m5_1","n5_1","o5_1","p5_1","q5_1","r5_1","s5_1","t5_1","$sv","j8","SceneViewJS$loadModel$lambda$lambda","t6_1","u6_1","b4_1","c4_1","d4_1","e4_1","f4_1","g4_1","h4_1","i4_1","j4_1","k4_1","l4_1","m4_1","n4_1","o4_1","p4_1","q4_1","r4_1","v4_1","LightType_DIRECTIONAL_getInstance","w4_1","x4_1","y4_1","z4_1","a5_1","b5_1","c5_1","d5_1","e5_1","f5_1","LightType","enabled","hasContent","minX","minY","minZ","maxX","maxY","maxZ","box","ex","ey","ez","isFinite","a3","z2","handle","config","geometryData","g3_1","generateCube","h3_1","i3_1","j3_1","generateSphere","k3_1","generateCylinder","l3_1","generatePlane","noWhenBranchMatchedException","generateGeometryData","vertexCount","indexCount","positions","Float32Array","normals","px","py","pz","n","indexArray","last_0","i_0","toShort","bboxMin","bboxMax","posBytes","normBytes","idxBytes","typeName","node","r3_1","s3_1","t3_1","translation","x3_1","y3_1","z3_1","scale","u3_1","v3_1","w3_1","rx","ry","rz","cx","sx","cy","sy","cz","sz","qx","qy","qz","qw","rotation","gltf","version","generator","nodes","meshes","primitives","attributes","POSITION","NORMAL","material","mode","pbrMetallicRoughness","baseColorFactor","m3_1","n3_1","o3_1","p3_1","metallicFactor","roughnessFactor","doubleSided","q3_1","extensions","materials","extensionsUsed","posAccessor","type","normAccessor","idxAccessor","accessors","bv0","byteLength","target","bv1","byteOffset","bv2","bufferViews","binLength","binPad","binLengthAligned","buffers","buf","jsonStr","JSON","stringify","jsonLength","totalLength","glb","DataView","setUint32","Char__toInt_impl_vasixd","setUint8","toByte","glbBytes","Uint8Array","posBytes8","normBytes8","i_1","idxBytes8","i_2","inductionVariable_3","_unary__edvuaz_0","buildGLBFromArrays","tmp0_2","b_1","tmp0_1","b_2","eyeX","eyeY","eyeZ","lookAt","float3","assets","configure","onReady","init","Filament","Engine","createRenderer","createScene","createSwapChain","createView","EntityManager","Entity","createCamera","setCamera","setScene","setViewport","viewport","aspect","setProjectionFov","setExposureDirect","setClearOptions","clearColor","clear","setAmbientOcclusionOptions","bias","intensity","quality","setBloomOptions","strength","threshold","levels","setTemporalAntiAliasingOptions","SceneView","builder","SceneViewBuilder","$configure","b8","$onReady","SceneView$Companion$create$lambda","distance","targetX","targetY","targetZ","OrbitCameraController","controller","cancelAnimationFrame","url","onLoaded","createAssetLoader","loader","basePath","substringBeforeLast","_Char___init__impl__6a9atx","fetch","SceneView$loadModel$lambda","SceneView$loadModel$lambda_0","onFulfilled","catch","l8","iblUrl","skyboxUrl","SceneView$loadEnvironment$lambda","ibl","createIblFromKtx1","e3","setIndirectLight","$iblUrl","SceneView$loadEnvironment$lambda_1","SceneView$loadEnvironment$lambda_2","sky","createSkyFromKtx1","setSkybox","SceneView$loadEnvironment$lambda_3","onFulfilled_0","entity","lightType","LightManager","Builder","castShadows","direction","falloff","build","addEntity","glbBuffer","GeometryGLBBuilder_instance","a4","tmp$ret$2","dz","i8","a8","tmp1_safe_receiver","destroyAsset","delete","k1","destroyEntity","element_0","f3","destroyRenderer","destroyView","destroyScene","destroyCameraComponent","destroySwapChain","destroy","block","CameraConfig","LightConfig","r8","n8","ensureNotNull","keyLight","fillLight","s8","rimLight","m8","k8","t8_1","u8_1","o8","cam","tmp8_elvis_lhs","h8","sv","SceneViewJS$loadModel$lambda","speed","g","opts","p8","q8","degrees","setExposure","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__"],"sourceRoot":""}
1
+ {"version":3,"file":"sceneview-web.js","mappings":"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","sources":["webpack://sceneview-web/webpack/universalModuleDefinition","webpack://sceneview-web/../sceneview-core/src/commonMain/kotlin/io/github/sceneview/geometries/GeometryData.kt","webpack://sceneview-web/../sceneview-core/src/commonMain/kotlin/io/github/sceneview/rendering/Vertex.kt","webpack://sceneview-web/../sceneview-core/src/commonMain/kotlin/io/github/sceneview/geometries/CubeGeometry.kt","webpack://sceneview-web/../Users/romainguy/Source/kotlin-math/src/commonMain/kotlin/dev/romainguy/kotlin/math/Vector.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/collectionJs.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/util/Standard.kt","webpack://sceneview-web/../sceneview-core/src/commonMain/kotlin/io/github/sceneview/geometries/CylinderGeometry.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/collections/Collections.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/math.kt","webpack://sceneview-web/../sceneview-core/src/commonMain/kotlin/io/github/sceneview/geometries/PlaneGeometry.kt","webpack://sceneview-web/../sceneview-core/src/commonMain/kotlin/io/github/sceneview/geometries/SphereGeometry.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/globalThis.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/math.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/ArrayBuffer.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/metadataUtils.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/js-builtin-sources/libraries/stdlib/jvm/builtins/Number.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/common/src/generated/_Arrays.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/common/src/generated/_Collections.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/builtins/Char.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/builtins/Enum.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/builtins/Library.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/builtins/Primitives.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/boxedLong.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/charSequenceJs.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/collectionsHacks.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/compareTo.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/coreRuntime.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/typeCheckUtils.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/coreRuntime.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/hacks.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/metadataUtils.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/NumbersJs.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/Unit.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/kotlin.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/collections/AbstractMutableCollection.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/collections/AbstractMutableList.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/collections/ArrayList.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/util/Preconditions.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/exceptions.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/reflect/KClassImpl.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/text/StringBuilderJs.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/text/charJs.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/text/stringJs.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/generated/_ComparisonsJs.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/collections/AbstractCollection.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/collections/AbstractList.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/text/Appendable.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/text/Char.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/text/Strings.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/common/src/generated/_Strings.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/generated/_ArraysJs.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/numberConversion.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/numberConversion.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/text/stringsCode.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/common/src/generated/_Ranges.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/arrays.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/arrays.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/noPackageHacks.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/AutoCenterGate.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/ContentCentering.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/EnvironmentResourceTracker.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/GeometryGLBBuilder.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/Main.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/OrbitCameraController.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/SceneView.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/SceneViewJS.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/bindings/FilamentHelpers.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/nodes/CameraConfig.kt","webpack://sceneview-web/../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/nodes/LightConfig.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/libraries/stdlib/js/src/org.w3c/org.khronos.webgl.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/CharCode.kt","webpack://sceneview-web/../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/Promise.kt","webpack://sceneview-web/external umd \"Filament\"","webpack://sceneview-web/webpack/bootstrap","webpack://sceneview-web/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Filament\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Filament\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sceneview-web\"] = factory(require(\"Filament\"));\n\telse\n\t\troot[\"sceneview-web\"] = factory(root[\"Filament\"]);\n})(globalThis, (__WEBPACK_EXTERNAL_MODULE__650__) => {\nreturn ","package io.github.sceneview.geometries\n\nimport dev.romainguy.kotlin.math.Float3\nimport dev.romainguy.kotlin.math.max\nimport dev.romainguy.kotlin.math.min\nimport io.github.sceneview.math.Position\nimport io.github.sceneview.math.Size\nimport io.github.sceneview.rendering.Vertex\n\n/**\n * Pure geometry data — vertices and triangle indices — with no rendering-engine dependency.\n *\n * Platform-specific code converts this into native vertex/index buffers.\n */\ndata class GeometryData(\n val vertices: List<Vertex>,\n val indices: List<Int>\n)\n\n/**\n * Axis-aligned bounding box computed from vertex positions.\n */\ndata class BoundingBox(\n val center: Position,\n val halfExtent: Size\n) {\n val min: Position get() = center - halfExtent\n val max: Position get() = center + halfExtent\n}\n\n/**\n * Computes the axis-aligned bounding box of this geometry's vertices.\n */\nfun GeometryData.boundingBox(): BoundingBox {\n require(vertices.isNotEmpty()) { \"Cannot compute bounding box of empty geometry\" }\n var minPos = Float3(vertices.first().position)\n var maxPos = Float3(vertices.first().position)\n for (vertex in vertices) {\n minPos = min(minPos, vertex.position)\n maxPos = max(maxPos, vertex.position)\n }\n val halfExtent = (maxPos - minPos) / 2.0f\n val center = minPos + halfExtent\n return BoundingBox(center, halfExtent)\n}\n\n/**\n * Whether any vertex has a normal defined.\n */\nval GeometryData.hasNormals: Boolean get() = vertices.any { it.normal != null }\n\n/**\n * Whether any vertex has UV coordinates defined.\n */\nval GeometryData.hasUvCoordinates: Boolean get() = vertices.any { it.uvCoordinate != null }\n\n/**\n * Whether any vertex has color defined.\n */\nval GeometryData.hasColors: Boolean get() = vertices.any { it.color != null }\n","package io.github.sceneview.rendering\n\nimport dev.romainguy.kotlin.math.Float2\nimport io.github.sceneview.math.Color\nimport io.github.sceneview.math.Direction\nimport io.github.sceneview.math.Position\n\n/**\n * Cross-platform vertex definition for geometry construction.\n *\n * Used to define the vertices of a mesh in a platform-agnostic way.\n * Platform-specific geometry builders convert these to native vertex buffers.\n *\n * @param position The position of the vertex in local space.\n * @param normal The surface normal direction at this vertex (for lighting).\n * @param uvCoordinate Texture coordinate. Values should be between 0 and 1.\n * @param color Per-vertex color (RGBA).\n */\ndata class Vertex(\n val position: Position = Position(),\n val normal: Direction? = null,\n val uvCoordinate: Float2? = null,\n val color: Color? = null\n)\n\nval List<Vertex>.hasNormals get() = any { it.normal != null }\nval List<Vertex>.hasUvCoordinates get() = any { it.uvCoordinate != null }\nval List<Vertex>.hasColors get() = any { it.color != null }\n\n/**\n * Computes primitive offset ranges from a list of index lists.\n */\nfun List<List<Int>>.getOffsets(): List<IntRange> {\n var indexStart = 0\n return map { primitiveIndices ->\n (indexStart until indexStart + primitiveIndices.size).also {\n indexStart += primitiveIndices.size\n }\n }\n}\n","package io.github.sceneview.geometries\n\nimport dev.romainguy.kotlin.math.Float2\nimport dev.romainguy.kotlin.math.Float3\nimport io.github.sceneview.rendering.Vertex\n\n/**\n * Generates a unit cube (or sized box) as a list of vertices and triangle indices.\n *\n * Each face has 4 unique vertices (with per-face normals), giving 24 vertices total.\n * Indices form 12 triangles (2 per face), giving 36 indices.\n *\n * @param size Full extents along each axis. Default is 1x1x1.\n * @param center Offset applied to every vertex position.\n */\nfun generateCube(\n size: Float3 = Float3(1f),\n center: Float3 = Float3(0f)\n): GeometryData {\n val extents = size * 0.5f\n\n val p0 = center + Float3(-extents.x, -extents.y, extents.z)\n val p1 = center + Float3(extents.x, -extents.y, extents.z)\n val p2 = center + Float3(extents.x, -extents.y, -extents.z)\n val p3 = center + Float3(-extents.x, -extents.y, -extents.z)\n val p4 = center + Float3(-extents.x, extents.y, extents.z)\n val p5 = center + Float3(extents.x, extents.y, extents.z)\n val p6 = center + Float3(extents.x, extents.y, -extents.z)\n val p7 = center + Float3(-extents.x, extents.y, -extents.z)\n\n val up = Float3(y = 1f)\n val down = Float3(y = -1f)\n val front = Float3(z = -1f)\n val back = Float3(z = 1f)\n val left = Float3(x = -1f)\n val right = Float3(x = 1f)\n\n val uv00 = Float2(0f, 0f)\n val uv10 = Float2(1f, 0f)\n val uv01 = Float2(0f, 1f)\n val uv11 = Float2(1f, 1f)\n\n val vertices = listOf(\n // Bottom\n Vertex(position = p0, normal = down, uvCoordinate = uv01),\n Vertex(position = p1, normal = down, uvCoordinate = uv11),\n Vertex(position = p2, normal = down, uvCoordinate = uv10),\n Vertex(position = p3, normal = down, uvCoordinate = uv00),\n // Left\n Vertex(position = p7, normal = left, uvCoordinate = uv01),\n Vertex(position = p4, normal = left, uvCoordinate = uv11),\n Vertex(position = p0, normal = left, uvCoordinate = uv10),\n Vertex(position = p3, normal = left, uvCoordinate = uv00),\n // Back\n Vertex(position = p4, normal = back, uvCoordinate = uv01),\n Vertex(position = p5, normal = back, uvCoordinate = uv11),\n Vertex(position = p1, normal = back, uvCoordinate = uv10),\n Vertex(position = p0, normal = back, uvCoordinate = uv00),\n // Front\n Vertex(position = p6, normal = front, uvCoordinate = uv01),\n Vertex(position = p7, normal = front, uvCoordinate = uv11),\n Vertex(position = p3, normal = front, uvCoordinate = uv10),\n Vertex(position = p2, normal = front, uvCoordinate = uv00),\n // Right\n Vertex(position = p5, normal = right, uvCoordinate = uv01),\n Vertex(position = p6, normal = right, uvCoordinate = uv11),\n Vertex(position = p2, normal = right, uvCoordinate = uv10),\n Vertex(position = p1, normal = right, uvCoordinate = uv00),\n // Top\n Vertex(position = p7, normal = up, uvCoordinate = uv01),\n Vertex(position = p6, normal = up, uvCoordinate = uv11),\n Vertex(position = p5, normal = up, uvCoordinate = uv10),\n Vertex(position = p4, normal = up, uvCoordinate = uv00)\n )\n\n val indices = buildList {\n val sideCount = 6\n val verticesPerSide = 4\n for (i in 0 until sideCount) {\n val base = verticesPerSide * i\n // First triangle\n add(3 + base); add(1 + base); add(0 + base)\n // Second triangle\n add(3 + base); add(2 + base); add(1 + base)\n }\n }\n\n return GeometryData(vertices, indices)\n}\n",null,null,null,"package io.github.sceneview.geometries\n\nimport dev.romainguy.kotlin.math.Float2\nimport dev.romainguy.kotlin.math.Float3\nimport dev.romainguy.kotlin.math.TWO_PI\nimport dev.romainguy.kotlin.math.normalize\nimport io.github.sceneview.rendering.Vertex\nimport kotlin.math.cos\nimport kotlin.math.sin\n\n/**\n * Generates a capped cylinder as a list of vertices and triangle indices.\n *\n * The cylinder is centred at [center] with its axis along Y.\n *\n * @param radius Cylinder radius. Default 1.\n * @param height Full height along Y. Default 2.\n * @param center Offset applied to every vertex position.\n * @param sideCount Number of radial subdivisions. Default 24.\n */\nfun generateCylinder(\n radius: Float = 1f,\n height: Float = 2f,\n center: Float3 = Float3(0f),\n sideCount: Int = 24\n): GeometryData {\n val vertices = buildList {\n val halfHeight = height / 2f\n val thetaIncrement = TWO_PI / sideCount\n var theta = 0f\n val uStep = 1f / sideCount\n\n val lowerCapVertices = mutableListOf<Vertex>()\n val upperCapVertices = mutableListOf<Vertex>()\n val upperEdgeVertices = mutableListOf<Vertex>()\n\n for (side in 0..sideCount) {\n // Lower edge vertex (side normal)\n val lowerPosition = Float3(\n x = radius * cos(theta), y = -halfHeight, z = radius * sin(theta)\n ) + center\n add(\n Vertex(\n position = lowerPosition,\n normal = normalize(Float3(x = lowerPosition.x - center.x, y = 0f, z = lowerPosition.z - center.z)),\n uvCoordinate = Float2(x = uStep * side, y = 0f)\n )\n )\n\n // Lower cap copy (downward normal)\n lowerCapVertices.add(\n Vertex(\n position = lowerPosition,\n normal = Float3(y = -1f),\n uvCoordinate = Float2(x = uStep * side, y = 0f)\n )\n )\n\n // Upper edge vertex (side normal)\n val upperPosition = Float3(\n x = radius * cos(theta), y = halfHeight, z = radius * sin(theta)\n ) + center\n upperEdgeVertices.add(\n Vertex(\n position = upperPosition,\n normal = normalize(Float3(x = upperPosition.x - center.x, y = 0f, z = upperPosition.z - center.z)),\n uvCoordinate = Float2(x = uStep * side, y = 1f)\n )\n )\n\n // Upper cap copy (upward normal)\n upperCapVertices.add(\n Vertex(\n position = upperPosition,\n normal = Float3(y = 1f),\n uvCoordinate = Float2(\n x = (cos(theta) + 1f) / 2f,\n y = (sin(theta) + 1f) / 2f\n )\n )\n )\n theta += thetaIncrement\n }\n\n addAll(upperEdgeVertices)\n\n // Lower cap center\n add(\n Vertex(\n position = center + Float3(y = -halfHeight),\n normal = Float3(y = -1f),\n uvCoordinate = Float2(x = 0.5f, y = 0.5f)\n )\n )\n addAll(lowerCapVertices)\n\n // Upper cap center\n add(\n Vertex(\n position = center + Float3(y = halfHeight),\n normal = Float3(y = 1f),\n uvCoordinate = Float2(x = 0.5f, y = 0.5f)\n )\n )\n addAll(upperCapVertices)\n }\n\n val indices = buildList {\n for (side in 0 until sideCount) {\n val bottomRight = side + 1\n val topLeft = side + sideCount + 1\n val topRight = side + sideCount + 2\n val lowerCenterIndex = 2 * (sideCount + 1)\n val upperCenterIndex = lowerCenterIndex + sideCount + 2\n\n // First triangle of side\n add(side); add(topRight); add(bottomRight)\n // Second triangle of side\n add(side); add(topLeft); add(topRight)\n // Bottom cap triangle\n add(lowerCenterIndex); add(lowerCenterIndex + side + 1); add(lowerCenterIndex + side + 2)\n // Top cap triangle\n add(upperCenterIndex); add(upperCenterIndex + side + 2); add(upperCenterIndex + side + 1)\n }\n }\n\n return GeometryData(vertices, indices)\n}\n",null,null,"package io.github.sceneview.geometries\n\nimport dev.romainguy.kotlin.math.Float2\nimport dev.romainguy.kotlin.math.Float3\nimport io.github.sceneview.rendering.Vertex\n\n/**\n * Generates a quad (two-triangle plane) as a list of vertices and triangle indices.\n *\n * The plane lies in the XY plane (z = 0) by default.\n *\n * @param size Width (X) and height (Y) of the plane.\n * @param center Offset applied to every vertex position.\n * @param normal Surface normal for all four vertices. Default is +Y.\n */\nfun generatePlane(\n size: Float2 = Float2(1f),\n center: Float3 = Float3(0f),\n normal: Float3 = Float3(y = 1f)\n): GeometryData {\n val extents = Float3(size.x, size.y, 0f) / 2f\n\n val vertices = listOf(\n Vertex(\n position = center + Float3(x = -extents.x, y = -extents.y, z = extents.z),\n normal = normal,\n uvCoordinate = Float2(0f, 0f)\n ),\n Vertex(\n position = center + Float3(x = -extents.x, y = extents.y, z = -extents.z),\n normal = normal,\n uvCoordinate = Float2(0f, 1f)\n ),\n Vertex(\n position = center + Float3(x = extents.x, y = extents.y, z = -extents.z),\n normal = normal,\n uvCoordinate = Float2(1f, 1f)\n ),\n Vertex(\n position = center + Float3(x = extents.x, y = -extents.y, z = extents.z),\n normal = normal,\n uvCoordinate = Float2(1f, 0f)\n )\n )\n\n val indices = listOf(\n 3, 1, 0, // First triangle\n 3, 2, 1 // Second triangle\n )\n\n return GeometryData(vertices, indices)\n}\n","package io.github.sceneview.geometries\n\nimport dev.romainguy.kotlin.math.Float2\nimport dev.romainguy.kotlin.math.Float3\nimport dev.romainguy.kotlin.math.PI\nimport dev.romainguy.kotlin.math.TWO_PI\nimport dev.romainguy.kotlin.math.normalize\nimport io.github.sceneview.rendering.Vertex\nimport kotlin.math.cos\nimport kotlin.math.sin\n\n/**\n * Generates a UV sphere as a list of vertices and triangle indices.\n *\n * @param radius Sphere radius. Default 1.\n * @param center Offset applied to every vertex position.\n * @param stacks Number of horizontal subdivisions (latitude). Default 24.\n * @param slices Number of vertical subdivisions (longitude). Default 24.\n */\nfun generateSphere(\n radius: Float = 1f,\n center: Float3 = Float3(0f),\n stacks: Int = 24,\n slices: Int = 24\n): GeometryData {\n val vertices = buildList {\n for (stack in 0..stacks) {\n val phi = PI * stack.toFloat() / stacks.toFloat()\n for (slice in 0..slices) {\n val theta = TWO_PI * (if (slice == slices) 0 else slice).toFloat() / slices\n var position = Float3(\n x = sin(phi) * cos(theta),\n y = cos(phi),\n z = sin(phi) * sin(theta)\n ) * radius\n val normal = normalize(position)\n position += center\n val uvCoordinate = Float2(\n x = 1f - slice.toFloat() / slices,\n y = 1f - stack.toFloat() / stacks\n )\n add(Vertex(position = position, normal = normal, uvCoordinate = uvCoordinate))\n }\n }\n }\n\n val indices = buildList {\n var v = 0\n for (stack in 0 until stacks) {\n for (slice in 0 until slices) {\n val topCap = stack == 0\n val bottomCap = stack == stacks - 1\n val next = slice + 1\n if (!topCap) {\n add(v + slice)\n add(v + next)\n add(v + slice + slices + 1)\n }\n if (!bottomCap) {\n add(v + next)\n add(v + next + slices + 1)\n add(v + slice + slices + 1)\n }\n }\n v += slices + 1\n }\n }\n\n return GeometryData(vertices, indices)\n}\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"package io.github.sceneview.web\n\nimport kotlin.math.abs\nimport kotlin.math.max\n\n/**\n * Union-diagonal-stability gate for the library-level `autoCenterContent` pass.\n *\n * The auto-centre pass ([SceneView.refreshContentCentering]) must re-frame the\n * scene every time the loaded content's union bounding box materially grows —\n * i.e. each time an async-loaded model finishes and adds to the combined\n * extent — and may stop running (latch) only once that union diagonal has\n * settled across consecutive render frames.\n *\n * ## Why a first-stable-frame latch is wrong (#1540)\n *\n * The previous design latched `didCenter` on the **first** render frame with\n * non-degenerate bounds, and relied on [reset] being called from\n * `loadModel`/`addGeometry` at *call* time to re-arm. That works for models\n * that are all loaded up front, but an async model that finishes *after* a\n * sibling has already centred never re-centres: by the time its bounds are\n * populated the gate is already latched and no further `reset()` happens. The\n * result is the multi-model \"bunched-in-the-corner\" regression that #1391\n * fixed on iOS.\n *\n * ## The #1391 port\n *\n * This gate mirrors iOS's `lastFramedDiagonal` + `framingStabilityEpsilon`\n * logic: every frame the pass measures the union diagonal and calls\n * [shouldFrame]. The pass re-frames whenever the diagonal moved by more than\n * [STABILITY_EPSILON] (relative) since the last fitted diagonal — a freshly\n * streamed model always grows the union materially, so it always re-frames.\n * [recordFraming] latches `didCenter` only once a frame sees the diagonal\n * stable versus the previous fitted diagonal, so deferred async models keep\n * the pass alive until the whole scene has settled.\n *\n * Isolating the state machine from any Filament.js binding keeps it directly\n * unit-testable without a WebGL context.\n */\ninternal class AutoCenterGate {\n\n /**\n * Fraction of the union diagonal below which a frame-to-frame change is\n * treated as sub-millimetre jitter rather than a genuine content change.\n * Tolerant enough to ignore floating-point noise, tight enough that a\n * freshly streamed model (which grows the union materially) always\n * re-frames. Mirrors iOS `framingStabilityEpsilon`.\n */\n companion object {\n const val STABILITY_EPSILON: Double = 0.01\n }\n\n /** `true` once the union diagonal has stabilised and the pass has latched. */\n var didCenter: Boolean = false\n private set\n\n /**\n * Union diagonal of the content the pass last framed, or `< 0` when no\n * frame has run yet. Compared against the current diagonal to decide\n * whether a streamed model just landed.\n */\n private var lastFramedDiagonal: Double = -1.0\n\n /**\n * Whether the centring pass should run this frame.\n *\n * Returns `false` once the pass has latched ([didCenter]) so subsequent\n * frames are a cheap no-op, or when the consumer disabled the feature /\n * no content is loaded.\n *\n * @param enabled the consumer-facing `autoCenterContent` toggle\n * @param hasContent whether any model is currently loaded\n */\n fun shouldRun(enabled: Boolean, hasContent: Boolean): Boolean =\n enabled && hasContent && !didCenter\n\n /**\n * Whether the pass should re-apply the centre + dolly for the given union\n * [diagonal] this frame.\n *\n * A freshly streamed model grows the union, moving the diagonal by more\n * than [STABILITY_EPSILON] — that always re-frames. Once the diagonal is\n * within tolerance of [lastFramedDiagonal] the scene has settled, so the\n * frame is skipped (the latch happens in [recordFraming]).\n */\n fun shouldFrame(diagonal: Double): Boolean {\n if (lastFramedDiagonal < 0.0) return true\n val delta = abs(diagonal - lastFramedDiagonal)\n return delta > STABILITY_EPSILON * max(diagonal, lastFramedDiagonal)\n }\n\n /**\n * Record that the pass framed the content at union [diagonal].\n *\n * Latches [didCenter] once this diagonal is stable versus the previously\n * recorded one — i.e. the scene has settled across consecutive ticks and\n * no more async models are growing the union. Until then the pass keeps\n * running so deferred async models re-frame the scene.\n */\n fun recordFraming(diagonal: Double) {\n val stable = lastFramedDiagonal >= 0.0 &&\n abs(diagonal - lastFramedDiagonal) <=\n STABILITY_EPSILON * max(diagonal, lastFramedDiagonal)\n lastFramedDiagonal = diagonal\n if (stable) didCenter = true\n }\n\n /**\n * Start a fresh content generation — clears the latch and the recorded\n * diagonal so the next frame re-frames from scratch.\n *\n * With the #1391 diagonal-stability logic the pass already re-frames\n * automatically whenever an async model grows the union, so an explicit\n * `reset()` from `loadModel`/`addGeometry` is no longer required for the\n * deferred-async case. It is still called when content is *replaced* so a\n * shrinking union (which would otherwise look stable) re-frames.\n */\n fun reset() {\n didCenter = false\n lastFramedDiagonal = -1.0\n }\n}\n","package io.github.sceneview.web\n\n/**\n * Pure, renderer-agnostic bounding-box math for the library-level\n * `autoCenterContent` feature (issue #1052 — web port of iOS #1026).\n *\n * Kept free of any Filament.js binding so the centring math can be unit-tested\n * on the JVM-free `jsTest` Karma target without a WebGL context.\n */\ninternal object ContentCentering {\n\n /** Smallest mesh extent (in metres) the auto-centre pass accepts as\n * \"content has loaded enough to be centred\". Below this the bounds are\n * assumed to come from an async load that hasn't populated yet, so the\n * pass is deferred to the next frame. Mirrors iOS `minVisualExtent`. */\n const val MIN_VISUAL_EXTENT: Double = 0.001\n\n /** An axis-aligned bounding box. `min`/`max` are `[x, y, z]`. */\n data class Aabb(val min: DoubleArray, val max: DoubleArray) {\n override fun equals(other: Any?): Boolean =\n other is Aabb && min.contentEquals(other.min) && max.contentEquals(other.max)\n\n override fun hashCode(): Int = 31 * min.contentHashCode() + max.contentHashCode()\n }\n\n /**\n * Compute the union of [boxes]. Returns `null` when the list is empty —\n * there is nothing to centre yet.\n */\n fun union(boxes: List<Aabb>): Aabb? {\n if (boxes.isEmpty()) return null\n var minX = Double.MAX_VALUE; var minY = Double.MAX_VALUE; var minZ = Double.MAX_VALUE\n var maxX = -Double.MAX_VALUE; var maxY = -Double.MAX_VALUE; var maxZ = -Double.MAX_VALUE\n for (b in boxes) {\n if (b.min[0] < minX) minX = b.min[0]\n if (b.min[1] < minY) minY = b.min[1]\n if (b.min[2] < minZ) minZ = b.min[2]\n if (b.max[0] > maxX) maxX = b.max[0]\n if (b.max[1] > maxY) maxY = b.max[1]\n if (b.max[2] > maxZ) maxZ = b.max[2]\n }\n return Aabb(doubleArrayOf(minX, minY, minZ), doubleArrayOf(maxX, maxY, maxZ))\n }\n\n /** Geometric centroid `(min + max) / 2` of [box]. */\n fun center(box: Aabb): DoubleArray = doubleArrayOf(\n (box.min[0] + box.max[0]) / 2.0,\n (box.min[1] + box.max[1]) / 2.0,\n (box.min[2] + box.max[2]) / 2.0,\n )\n\n /** Per-axis extents `(max - min)` of [box], `[ex, ey, ez]`. */\n fun extents(box: Aabb): DoubleArray = doubleArrayOf(\n box.max[0] - box.min[0],\n box.max[1] - box.min[1],\n box.max[2] - box.min[2],\n )\n\n /**\n * Length of [box]'s space diagonal — the single scalar the auto-centre\n * gate uses to detect \"the union grew\" when an async model lands and to\n * decide when the framing has settled. Mirrors iOS `simd_length(extents)`.\n * Returns `0.0` for a `null` box (nothing loaded yet).\n */\n fun diagonal(box: Aabb?): Double {\n if (box == null) return 0.0\n val e = extents(box)\n return kotlin.math.sqrt(e[0] * e[0] + e[1] * e[1] + e[2] * e[2])\n }\n\n /**\n * Whether [box]'s extents are finite and large enough to be considered\n * loaded content worth centring.\n *\n * An empty / degenerate box (e.g. before async resources finish loading)\n * has non-finite or zero extents — both are rejected so the centring pass\n * is deferred to a later frame. Mirrors iOS `refreshContentCentering`.\n */\n fun isStable(box: Aabb): Boolean {\n val ex = box.max[0] - box.min[0]\n val ey = box.max[1] - box.min[1]\n val ez = box.max[2] - box.min[2]\n if (!ex.isFinite() || !ey.isFinite() || !ez.isFinite()) return false\n val extentMax = maxOf(ex, ey, ez)\n return extentMax > MIN_VISUAL_EXTENT\n }\n\n /**\n * The translation that, applied to content currently centred at the\n * centroid of [box], moves that centroid to the world origin. Equal to\n * `-center(box)`. Returns `null` when [box] is not yet stable.\n */\n fun centeringOffset(box: Aabb?): DoubleArray? {\n if (box == null || !isStable(box)) return null\n val c = center(box)\n // `+ 0.0` normalises a negated zero (`-0.0`) back to `0.0`: an\n // already-centred axis must report a plain `0.0` translation, not the\n // signed-zero that `-(0.0)` produces.\n return doubleArrayOf(-c[0] + 0.0, -c[1] + 0.0, -c[2] + 0.0)\n }\n}\n","package io.github.sceneview.web\n\n/**\n * Tracks a single GPU resource handle and guarantees leak-free replacement\n * and teardown.\n *\n * The web `SceneView` creates a Filament `IndirectLight` and `Skybox` in\n * [SceneView.loadEnvironment]. Before issue #1496 those handles were never\n * stored, so:\n *\n * 1. [SceneView.destroy] tore down the renderer/view/scene but never called\n * `engine.destroyIndirectLight` / `engine.destroySkybox` — every web\n * `SceneView` leaked its IBL + skybox GPU memory.\n * 2. Calling `loadEnvironment` twice (or `loadDefaultEnvironment` after a\n * manual one) overwrote `scene.setIndirectLight` / `setSkybox` with a fresh\n * handle while the previous one was silently orphaned — a second leak.\n *\n * This class isolates the \"destroy the old handle before adopting a new one,\n * destroy whatever is held on teardown\" state machine from the Filament.js\n * bindings so it is directly unit-testable without a WebGL context — the same\n * approach [AutoCenterGate] uses for the auto-centre pass.\n *\n * @param T the handle type (`IndirectLight` or `Skybox`)\n * @param destroyer invoked with a handle that must be released on the GPU\n */\ninternal class EnvironmentResourceTracker<T>(\n private val destroyer: (T) -> Unit,\n) {\n\n /** The handle currently held, or `null` if none has been adopted. */\n var current: T? = null\n private set\n\n /**\n * Adopt [handle] as the current resource, destroying the previously held\n * handle (if any) first. This is the leak-free replacement path for a 2nd\n * `loadEnvironment` call.\n */\n fun replaceWith(handle: T) {\n current?.let(destroyer)\n current = handle\n }\n\n /**\n * Destroy the currently held handle (if any) and clear the slot. Idempotent\n * — a second call is a no-op. Called from [SceneView.destroy].\n */\n fun release() {\n current?.let(destroyer)\n current = null\n }\n}\n","package io.github.sceneview.web\n\nimport dev.romainguy.kotlin.math.Float2\nimport dev.romainguy.kotlin.math.Float3\nimport io.github.sceneview.geometries.GeometryData\nimport io.github.sceneview.geometries.generateCube\nimport io.github.sceneview.geometries.generateCylinder\nimport io.github.sceneview.geometries.generatePlane\nimport io.github.sceneview.geometries.generateSphere\nimport io.github.sceneview.web.nodes.GeometryConfig\nimport io.github.sceneview.web.nodes.GeometryType\nimport org.khronos.webgl.ArrayBuffer\nimport org.khronos.webgl.DataView\nimport org.khronos.webgl.Float32Array\nimport org.khronos.webgl.Uint16Array\nimport org.khronos.webgl.Uint8Array\nimport org.khronos.webgl.get\nimport org.khronos.webgl.set\n\n/**\n * Builds an in-memory GLB (glTF-Binary) from a [GeometryConfig] using the KMP core\n * geometry generators.\n *\n * The generated GLB is loaded through gltfio's UbershaderProvider pipeline,\n * which means geometry nodes get the same PBR material system as loaded models.\n *\n * This approach avoids the need for custom `.filamat` material files and reuses\n * the existing [SceneView.loadModel] infrastructure.\n */\ninternal object GeometryGLBBuilder {\n\n /**\n * Generate a GLB [ArrayBuffer] for the given geometry config.\n *\n * The GLB contains a single mesh node with:\n * - Position and normal vertex attributes\n * - A PBR material with the configured baseColorFactor\n * - A translation matching the configured position\n * - A scale matching the configured scale\n */\n fun buildGLB(config: GeometryConfig): ArrayBuffer {\n val geometryData = generateGeometryData(config)\n val vertices = geometryData.vertices\n val indices = geometryData.indices\n\n val vertexCount = vertices.size\n val indexCount = indices.size\n\n // Extract positions and normals into flat Float32Arrays\n val positions = Float32Array(vertexCount * 3)\n val normals = Float32Array(vertexCount * 3)\n\n // Track bounding box\n var minX = Float.MAX_VALUE; var minY = Float.MAX_VALUE; var minZ = Float.MAX_VALUE\n var maxX = -Float.MAX_VALUE; var maxY = -Float.MAX_VALUE; var maxZ = -Float.MAX_VALUE\n\n for (i in vertices.indices) {\n val v = vertices[i]\n val px = v.position.x\n val py = v.position.y\n val pz = v.position.z\n\n positions[i * 3] = px\n positions[i * 3 + 1] = py\n positions[i * 3 + 2] = pz\n\n val n = v.normal ?: Float3(0f, 1f, 0f)\n normals[i * 3] = n.x\n normals[i * 3 + 1] = n.y\n normals[i * 3 + 2] = n.z\n\n if (px < minX) minX = px\n if (py < minY) minY = py\n if (pz < minZ) minZ = pz\n if (px > maxX) maxX = px\n if (py > maxY) maxY = py\n if (pz > maxZ) maxZ = pz\n }\n\n // Build index buffer\n val indexArray = Uint16Array(indexCount)\n for (i in indices.indices) {\n indexArray[i] = indices[i].toShort()\n }\n\n // Build the GLB from positions, normals, indices\n return buildGLBFromArrays(\n config = config,\n positions = positions,\n normals = normals,\n indices = indexArray,\n vertexCount = vertexCount,\n indexCount = indexCount,\n bboxMin = floatArrayOf(minX, minY, minZ),\n bboxMax = floatArrayOf(maxX, maxY, maxZ)\n )\n }\n\n private fun generateGeometryData(config: GeometryConfig): GeometryData {\n return when (config.geometryType) {\n GeometryType.CUBE -> generateCube(\n size = Float3(\n config.sizeX.toFloat(),\n config.sizeY.toFloat(),\n config.sizeZ.toFloat()\n )\n )\n\n GeometryType.SPHERE -> generateSphere(\n radius = config.radius.toFloat()\n )\n\n GeometryType.CYLINDER -> generateCylinder(\n radius = config.radius.toFloat(),\n height = config.height.toFloat()\n )\n\n GeometryType.PLANE -> generatePlane(\n size = Float2(\n config.sizeX.toFloat(),\n config.sizeY.toFloat()\n )\n )\n }\n }\n\n private fun buildGLBFromArrays(\n config: GeometryConfig,\n positions: Float32Array,\n normals: Float32Array,\n indices: Uint16Array,\n vertexCount: Int,\n indexCount: Int,\n bboxMin: FloatArray,\n bboxMax: FloatArray\n ): ArrayBuffer {\n val posBytes = (vertexCount * 3 * 4) // Float32 = 4 bytes\n val normBytes = (vertexCount * 3 * 4)\n val idxBytes = (indexCount * 2) // Uint16 = 2 bytes\n\n val typeName = config.geometryType.name.lowercase()\n\n // Build the node transform: translation + scale\n val node = js(\"{}\")\n node.mesh = 0\n node.name = typeName\n\n // Set translation if non-zero\n if (config.positionX != 0.0 || config.positionY != 0.0 || config.positionZ != 0.0) {\n node.translation = js(\"[]\")\n node.translation.push(config.positionX, config.positionY, config.positionZ)\n }\n\n // Set scale if non-uniform\n if (config.scaleX != 1.0 || config.scaleY != 1.0 || config.scaleZ != 1.0) {\n node.scale = js(\"[]\")\n node.scale.push(config.scaleX, config.scaleY, config.scaleZ)\n }\n\n // Set rotation (Euler degrees → quaternion for glTF)\n if (config.rotationX != 0.0 || config.rotationY != 0.0 || config.rotationZ != 0.0) {\n val rx = config.rotationX * kotlin.math.PI / 180.0\n val ry = config.rotationY * kotlin.math.PI / 180.0\n val rz = config.rotationZ * kotlin.math.PI / 180.0\n // Euler XYZ to quaternion\n val cx = kotlin.math.cos(rx / 2); val sx = kotlin.math.sin(rx / 2)\n val cy = kotlin.math.cos(ry / 2); val sy = kotlin.math.sin(ry / 2)\n val cz = kotlin.math.cos(rz / 2); val sz = kotlin.math.sin(rz / 2)\n val qx = sx * cy * cz - cx * sy * sz\n val qy = cx * sy * cz + sx * cy * sz\n val qz = cx * cy * sz - sx * sy * cz\n val qw = cx * cy * cz + sx * sy * sz\n node.rotation = js(\"[]\")\n node.rotation.push(qx, qy, qz, qw)\n }\n\n // Build glTF JSON\n val gltf = js(\"{}\")\n gltf.asset = js(\"({version: '2.0', generator: 'SceneView-Web'})\")\n gltf.scene = 0\n gltf.scenes = js(\"([{nodes: [0]}])\")\n\n gltf.nodes = js(\"[]\")\n gltf.nodes.push(node)\n\n // Mesh with position + normal attributes\n gltf.meshes = js(\"([{primitives: [{attributes: {POSITION: 0, NORMAL: 1}, indices: 2, material: 0, mode: 4}]}])\")\n\n // Material with the configured color. When `config.unlit` is true we add the\n // `KHR_materials_unlit` extension — Filament.js supports it natively and the\n // shader skips PBR / IBL evaluation entirely, matching `createUnlitColorInstance`\n // on Android and `CustomMaterial.unlit(color:)` on Apple. The pbrMetallicRoughness\n // baseColorFactor is still authoritative for the colour value (the extension just\n // changes how it's lit).\n val material = js(\"{}\")\n material.name = \"${typeName}_mat\"\n material.pbrMetallicRoughness = js(\"{}\")\n material.pbrMetallicRoughness.baseColorFactor = js(\"[]\")\n material.pbrMetallicRoughness.baseColorFactor.push(config.colorR, config.colorG, config.colorB, config.colorA)\n material.pbrMetallicRoughness.metallicFactor = 0.1\n material.pbrMetallicRoughness.roughnessFactor = 0.6\n // Transparent unlit benefits from being doubleSided (overlay use case),\n // matching the Android `transparent_unlit_colored.mat` definition.\n material.doubleSided = config.unlit && config.colorA < 1.0\n if (config.unlit) {\n material.extensions = js(\"{}\")\n material.extensions[\"KHR_materials_unlit\"] = js(\"{}\")\n }\n\n gltf.materials = js(\"[]\")\n gltf.materials.push(material)\n\n // Declare the unlit extension at the glTF root when used (per spec — unused\n // extensions in extensionsUsed are tolerated but using one without declaring\n // breaks loaders that strictly validate.)\n if (config.unlit) {\n gltf.extensionsUsed = js(\"[]\")\n gltf.extensionsUsed.push(\"KHR_materials_unlit\")\n }\n\n // Accessors: position (VEC3), normal (VEC3), indices (SCALAR)\n val posAccessor = js(\"{}\")\n posAccessor.bufferView = 0\n posAccessor.componentType = 5126 // FLOAT\n posAccessor.count = vertexCount\n posAccessor.type = \"VEC3\"\n posAccessor.min = js(\"[]\")\n posAccessor.min.push(bboxMin[0], bboxMin[1], bboxMin[2])\n posAccessor.max = js(\"[]\")\n posAccessor.max.push(bboxMax[0], bboxMax[1], bboxMax[2])\n\n val normAccessor = js(\"{}\")\n normAccessor.bufferView = 1\n normAccessor.componentType = 5126 // FLOAT\n normAccessor.count = vertexCount\n normAccessor.type = \"VEC3\"\n\n val idxAccessor = js(\"{}\")\n idxAccessor.bufferView = 2\n idxAccessor.componentType = 5123 // UNSIGNED_SHORT\n idxAccessor.count = indexCount\n idxAccessor.type = \"SCALAR\"\n\n gltf.accessors = js(\"[]\")\n gltf.accessors.push(posAccessor, normAccessor, idxAccessor)\n\n // Buffer views\n val bv0 = js(\"{}\")\n bv0.buffer = 0; bv0.byteOffset = 0; bv0.byteLength = posBytes; bv0.target = 34962\n\n val bv1 = js(\"{}\")\n bv1.buffer = 0; bv1.byteOffset = posBytes; bv1.byteLength = normBytes; bv1.target = 34962\n\n val bv2 = js(\"{}\")\n bv2.buffer = 0; bv2.byteOffset = posBytes + normBytes; bv2.byteLength = idxBytes; bv2.target = 34963\n\n gltf.bufferViews = js(\"[]\")\n gltf.bufferViews.push(bv0, bv1, bv2)\n\n // Binary data length (padded to 4-byte alignment)\n val binLength = posBytes + normBytes + idxBytes\n val binPad = (4 - (binLength % 4)) % 4\n val binLengthAligned = binLength + binPad\n\n gltf.buffers = js(\"[]\")\n val buf = js(\"{}\")\n buf.byteLength = binLength // glTF spec: logical buffer size, not padded chunk size\n gltf.buffers.push(buf)\n\n // Serialize JSON chunk (padded to 4-byte alignment with spaces)\n var jsonStr: String = JSON.stringify(gltf)\n while (jsonStr.length % 4 != 0) jsonStr += \" \"\n val jsonLength = jsonStr.length\n\n // Total GLB size: header(12) + JSON chunk header(8) + JSON + BIN chunk header(8) + BIN\n val totalLength = 12 + 8 + jsonLength + 8 + binLengthAligned\n\n val glb = ArrayBuffer(totalLength)\n val view = DataView(glb)\n var offset = 0\n\n // GLB header: magic + version + length\n view.setUint32(offset, 0x46546C67, true); offset += 4 // \"glTF\"\n view.setUint32(offset, 2, true); offset += 4 // version 2\n view.setUint32(offset, totalLength, true); offset += 4\n\n // JSON chunk: length + type + data\n view.setUint32(offset, jsonLength, true); offset += 4\n view.setUint32(offset, 0x4E4F534A, true); offset += 4 // \"JSON\"\n for (i in jsonStr.indices) {\n view.setUint8(offset++, jsonStr[i].code.toByte())\n }\n\n // BIN chunk: length + type + data\n view.setUint32(offset, binLengthAligned, true); offset += 4\n view.setUint32(offset, 0x004E4942, true); offset += 4 // \"BIN\\0\"\n\n // Copy position data\n val glbBytes = Uint8Array(glb)\n val posBytes8 = Uint8Array(positions.buffer)\n for (i in 0 until posBytes) {\n glbBytes[offset + i] = posBytes8[i]\n }\n offset += posBytes\n\n // Copy normal data\n val normBytes8 = Uint8Array(normals.buffer)\n for (i in 0 until normBytes) {\n glbBytes[offset + i] = normBytes8[i]\n }\n offset += normBytes\n\n // Copy index data\n val idxBytes8 = Uint8Array(indices.buffer)\n for (i in 0 until idxBytes) {\n glbBytes[offset + i] = idxBytes8[i]\n }\n offset += idxBytes\n\n // Pad remaining bytes with zeros\n for (p in 0 until binPad) {\n view.setUint8(offset++, 0.toByte())\n }\n\n return glb\n }\n}\n","package io.github.sceneview.web\n\nimport kotlinx.browser.document\nimport kotlinx.browser.window\nimport org.w3c.dom.HTMLCanvasElement\nimport kotlin.js.Promise\n\n/**\n * Entry point for the SceneView Web library.\n *\n * Registers the SceneView API on `window.sceneview` so it can be used\n * from plain JavaScript after loading via `<script>` tag.\n *\n * Usage:\n * ```html\n * <script src=\"sceneview-web.js\"></script>\n * <script>\n * sceneview.createViewer(\"canvas\").then(sv => sv.loadModel(\"model.glb\"));\n * </script>\n * ```\n */\nfun main() {\n // Register the API on the global window object\n val api: dynamic = js(\"{}\")\n\n api[\"version\"] = SCENEVIEW_VERSION\n api[\"createViewer\"] = ::jsCreateViewer\n api[\"createViewerAutoRotate\"] = ::jsCreateViewerAutoRotate\n api[\"createViewerFull\"] = ::jsCreateViewerFull\n api[\"modelViewer\"] = ::jsModelViewer\n api[\"modelViewerAutoRotate\"] = ::jsModelViewerAutoRotate\n\n js(\"window\")[\"sceneview\"] = api\n\n console.log(\"SceneView Web v$SCENEVIEW_VERSION loaded\")\n}\n\n// --- JS-callable bridge functions ---\n// These use explicit types that map cleanly to JavaScript\n\nfun jsCreateViewer(canvasId: String): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate = true, cameraControls = true)\n}\n\nfun jsCreateViewerAutoRotate(canvasId: String, autoRotate: Boolean): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate = autoRotate, cameraControls = true)\n}\n\nfun jsCreateViewerFull(\n canvasId: String,\n autoRotate: Boolean,\n cameraControls: Boolean,\n cameraX: Double,\n cameraY: Double,\n cameraZ: Double,\n fov: Double,\n lightIntensity: Double\n): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate, cameraControls, cameraX, cameraY, cameraZ, fov, lightIntensity)\n}\n\nfun jsModelViewer(canvasId: String, modelUrl: String): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate = true, cameraControls = true).then { viewer ->\n viewer.loadModel(modelUrl)\n viewer\n }\n}\n\nfun jsModelViewerAutoRotate(canvasId: String, modelUrl: String, autoRotate: Boolean): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate = autoRotate, cameraControls = true).then { viewer ->\n viewer.loadModel(modelUrl)\n viewer\n }\n}\n\n// --- Internal implementation ---\n\ninternal fun createViewerImpl(\n canvasId: String,\n autoRotate: Boolean,\n cameraControls: Boolean,\n cameraX: Double = 0.0,\n cameraY: Double = 1.5,\n cameraZ: Double = 5.0,\n fov: Double = 45.0,\n lightIntensity: Double = 50_000.0\n): Promise<SceneViewJS> {\n val canvas = document.getElementById(canvasId) as? HTMLCanvasElement\n ?: return Promise.reject(Throwable(\"Canvas element '$canvasId' not found\"))\n\n // Ensure canvas has physical pixel dimensions\n if (canvas.width == 0 || canvas.height == 0) {\n canvas.width = canvas.clientWidth\n canvas.height = canvas.clientHeight\n }\n\n return Promise { resolve, reject ->\n try {\n SceneView.create(\n canvas = canvas,\n configure = {\n camera {\n eye(cameraX, cameraY, cameraZ)\n target(0.0, 0.0, 0.0)\n fov(fov)\n }\n light {\n directional()\n intensity(lightIntensity)\n direction(0.6f, -1.0f, -0.8f)\n }\n autoRotate(autoRotate)\n cameraControls(cameraControls)\n },\n onReady = { sceneView ->\n sceneView.startRendering()\n\n // Auto-resize on window resize\n window.addEventListener(\"resize\", {\n canvas.width = canvas.clientWidth\n canvas.height = canvas.clientHeight\n })\n\n val viewer = SceneViewJS()\n viewer.attach(sceneView)\n resolve(viewer)\n }\n )\n } catch (e: Throwable) {\n reject(e)\n }\n }\n}\n","package io.github.sceneview.web\n\nimport io.github.sceneview.web.bindings.Camera\nimport io.github.sceneview.web.bindings.float3\nimport kotlinx.browser.window\nimport org.w3c.dom.HTMLCanvasElement\nimport org.w3c.dom.events.MouseEvent\nimport org.w3c.dom.events.WheelEvent\nimport kotlin.math.PI\nimport kotlin.math.cos\nimport kotlin.math.max\nimport kotlin.math.min\nimport kotlin.math.sin\n\n/**\n * Orbit camera controller for SceneView Web.\n *\n * Provides mouse/touch-based orbit, zoom, and pan controls similar to\n * three.js OrbitControls or Google model-viewer's camera-controls.\n *\n * Usage:\n * ```kotlin\n * val controller = OrbitCameraController(canvas, sceneView.camera)\n * controller.target(0.0, 0.0, 0.0)\n * controller.distance = 5.0\n * // Call update() each frame in the render loop\n * ```\n */\nclass OrbitCameraController(\n private val canvas: HTMLCanvasElement,\n private val camera: Camera\n) {\n // Spherical coordinates — defaults match model-viewer's \"45deg 70deg 2.5m\"\n var theta = 45.0 * PI / 180.0 // horizontal angle (radians) — 45° like model-viewer\n var phi = 70.0 * PI / 180.0 // vertical angle (radians) — 70° like model-viewer\n var distance = 5.0 // distance from target\n\n // Target point (orbit center)\n var targetX = 0.0\n var targetY = 0.0\n var targetZ = 0.0\n\n // Limits\n var minDistance = 0.5\n var maxDistance = 50.0\n var minPhi = 0.1 // prevent looking straight down\n var maxPhi = PI - 0.1 // prevent looking straight up\n\n // Sensitivity\n var rotateSensitivity = 0.005\n var zoomSensitivity = 0.1\n var panSensitivity = 0.003\n\n // Auto-rotation — default speed matches model-viewer's 30deg/sec at 60fps\n var autoRotate = false\n var autoRotateSpeed = 30.0 * PI / 180.0 / 60.0 // 30°/sec ÷ 60fps ≈ 0.00873 rad/frame\n\n // Damping (inertia) — higher factor = smoother, more model-viewer-like\n var enableDamping = true\n var dampingFactor = 0.95\n private var velocityTheta = 0.0\n private var velocityPhi = 0.0\n\n // Mouse state\n private var isDragging = false\n private var isRightDragging = false\n private var lastX = 0.0\n private var lastY = 0.0\n\n init {\n setupEventListeners()\n }\n\n fun target(x: Double, y: Double, z: Double) {\n targetX = x; targetY = y; targetZ = z\n }\n\n /**\n * Update camera position from spherical coordinates.\n * Call this every frame in the render loop.\n *\n * Converts spherical coordinates (theta, phi, distance) to Cartesian\n * and calls camera.lookAt() with float3 arrays as required by Filament.js.\n */\n fun update() {\n // Apply auto-rotation\n if (autoRotate && !isDragging) {\n theta += autoRotateSpeed\n }\n\n // Apply damping\n if (enableDamping) {\n theta += velocityTheta\n phi += velocityPhi\n velocityTheta *= dampingFactor\n velocityPhi *= dampingFactor\n }\n\n // Clamp phi\n phi = max(minPhi, min(maxPhi, phi))\n distance = max(minDistance, min(maxDistance, distance))\n\n // Convert spherical to cartesian\n val eyeX = targetX + distance * sin(phi) * sin(theta)\n val eyeY = targetY + distance * cos(phi)\n val eyeZ = targetZ + distance * sin(phi) * cos(theta)\n\n // Filament.js Camera.lookAt takes float3 arrays, not 9 separate doubles\n camera.lookAt(\n float3(eyeX, eyeY, eyeZ), // eye\n float3(targetX, targetY, targetZ), // center\n float3(0.0, 1.0, 0.0) // up\n )\n }\n\n /** Remove all event listeners. Call when destroying the SceneView. */\n fun dispose() {\n // Event listeners are attached to the canvas and will be GC'd with it\n }\n\n private fun setupEventListeners() {\n // Mouse down\n canvas.addEventListener(\"mousedown\", { event ->\n val e = event as MouseEvent\n when (e.button.toInt()) {\n 0 -> { isDragging = true } // Left button = orbit\n 2 -> { isRightDragging = true } // Right button = pan\n }\n lastX = e.clientX.toDouble()\n lastY = e.clientY.toDouble()\n e.preventDefault()\n })\n\n // Mouse move\n canvas.addEventListener(\"mousemove\", { event ->\n val e = event as MouseEvent\n val dx = e.clientX.toDouble() - lastX\n val dy = e.clientY.toDouble() - lastY\n lastX = e.clientX.toDouble()\n lastY = e.clientY.toDouble()\n\n if (isDragging) {\n // Orbit\n if (enableDamping) {\n velocityTheta = -dx * rotateSensitivity\n velocityPhi = -dy * rotateSensitivity\n } else {\n theta -= dx * rotateSensitivity\n phi -= dy * rotateSensitivity\n }\n } else if (isRightDragging) {\n // Pan\n targetX += dx * panSensitivity * distance\n targetY -= dy * panSensitivity * distance\n }\n })\n\n // Mouse up\n canvas.addEventListener(\"mouseup\", {\n isDragging = false\n isRightDragging = false\n })\n\n canvas.addEventListener(\"mouseleave\", {\n isDragging = false\n isRightDragging = false\n })\n\n // Scroll wheel = zoom\n canvas.addEventListener(\"wheel\", { event ->\n val e = event as WheelEvent\n val delta = if (e.deltaY > 0) 1.0 else -1.0\n distance *= 1.0 + delta * zoomSensitivity\n distance = max(minDistance, min(maxDistance, distance))\n e.preventDefault()\n }, js(\"{passive: false}\"))\n\n // Prevent context menu on right-click\n canvas.addEventListener(\"contextmenu\", { event ->\n event.preventDefault()\n })\n\n // Touch support\n canvas.addEventListener(\"touchstart\", { event ->\n val e = event.asDynamic()\n if (e.touches.length == 1) {\n isDragging = true\n lastX = (e.touches[0].clientX as Number).toDouble()\n lastY = (e.touches[0].clientY as Number).toDouble()\n }\n event.preventDefault()\n }, js(\"{passive: false}\"))\n\n canvas.addEventListener(\"touchmove\", { event ->\n val e = event.asDynamic()\n if (isDragging && e.touches.length == 1) {\n val dx = (e.touches[0].clientX as Number).toDouble() - lastX\n val dy = (e.touches[0].clientY as Number).toDouble() - lastY\n lastX = (e.touches[0].clientX as Number).toDouble()\n lastY = (e.touches[0].clientY as Number).toDouble()\n\n if (enableDamping) {\n velocityTheta = -dx * rotateSensitivity\n velocityPhi = -dy * rotateSensitivity\n } else {\n theta -= dx * rotateSensitivity\n phi -= dy * rotateSensitivity\n }\n } else if (e.touches.length == 2) {\n // Pinch-to-zoom\n val dx = (e.touches[0].clientX as Number).toDouble() - (e.touches[1].clientX as Number).toDouble()\n val dy = (e.touches[0].clientY as Number).toDouble() - (e.touches[1].clientY as Number).toDouble()\n val pinchDistance = kotlin.math.sqrt(dx * dx + dy * dy)\n\n if (lastPinchDistance > 0) {\n val delta = lastPinchDistance - pinchDistance\n distance *= 1.0 + delta * 0.005\n distance = max(minDistance, min(maxDistance, distance))\n }\n lastPinchDistance = pinchDistance\n }\n event.preventDefault()\n }, js(\"{passive: false}\"))\n\n canvas.addEventListener(\"touchend\", {\n isDragging = false\n lastPinchDistance = -1.0\n })\n }\n\n private var lastPinchDistance = -1.0\n}\n","package io.github.sceneview.web\n\nimport io.github.sceneview.web.bindings.*\nimport io.github.sceneview.web.nodes.CameraConfig\nimport io.github.sceneview.web.nodes.GeometryConfig\nimport io.github.sceneview.web.nodes.LightConfig\nimport io.github.sceneview.web.nodes.LightType\nimport io.github.sceneview.web.nodes.ModelConfig\nimport kotlinx.browser.window\nimport org.w3c.dom.HTMLCanvasElement\n\n/**\n * SceneView for Web -- Filament.js based 3D viewer.\n *\n * Uses the same Filament rendering engine as SceneView Android,\n * compiled to WebAssembly for browser execution.\n *\n * This class actually initializes the Filament WASM module, creates a real\n * WebGL2 rendering context, and renders 3D content using the GPU.\n *\n * Basic usage:\n * ```kotlin\n * SceneView.create(canvas) {\n * camera {\n * eye(0.0, 1.5, 5.0)\n * target(0.0, 0.0, 0.0)\n * }\n * light {\n * directional()\n * intensity(100_000.0)\n * }\n * model(\"models/damaged_helmet.glb\")\n * }\n * ```\n */\nclass SceneView private constructor(\n val canvas: HTMLCanvasElement,\n val engine: Engine,\n val renderer: Renderer,\n val scene: Scene,\n val view: View,\n val camera: Camera,\n val swapChain: SwapChain,\n private val cameraEntity: Entity\n) {\n private var animationFrameId: Int? = null\n private var isRunning = false\n private var lastTimestamp = 0.0\n\n private val models = mutableListOf<LoadedModel>()\n private var assetLoader: AssetLoader? = null\n private val lightEntities = mutableListOf<Entity>()\n\n /**\n * Tracks the Filament `IndirectLight` (IBL) handle currently bound to the\n * scene so [loadEnvironment] can destroy a previous IBL before binding a\n * new one and [destroy] can release it — without this the GPU resource\n * leaks (issue #1496).\n */\n private val indirectLight = EnvironmentResourceTracker<IndirectLight> {\n engine.destroyIndirectLight(it)\n }\n\n /**\n * Tracks the Filament `Skybox` handle currently bound to the scene, for the\n * same leak-free replacement / teardown reason as [indirectLight]\n * (issue #1496).\n */\n private val skybox = EnvironmentResourceTracker<Skybox> {\n engine.destroySkybox(it)\n }\n\n /**\n * When `true` (default), the first render frame where the loaded content's\n * union bounding box becomes non-degenerate triggers a one-time translation\n * of every loaded asset's root entity so the scene's centroid lands at the\n * world origin — i.e. at the orbit-camera target.\n *\n * Library-level port of the iOS `autoCenterContent` (issue #1026): demos\n * that place models at non-origin positions (e.g. `z = -2`) then render\n * visually centred in the canvas without each demo having to re-centre\n * itself. Set to `false` for narrative scenes that rely on intentional\n * off-centre placement. Cross-platform parity with iOS #1026 and the\n * Android sibling #1051. Closes #1052.\n */\n var autoCenterContent: Boolean = true\n\n /**\n * Union-diagonal-stability gate for [refreshContentCentering]: re-frames\n * the scene on every union-bounds growth (so a deferred async model still\n * re-centres — #1540), and latches only once the union diagonal has\n * settled across consecutive frames. Mirrors iOS's `lastFramedDiagonal` +\n * `framingStabilityEpsilon` logic (#1391).\n */\n private val autoCenterGate = AutoCenterGate()\n\n /** Tracks a loaded glTF asset with its animation state. */\n private class LoadedModel(\n val asset: FilamentAsset,\n val animator: Animator?,\n var animationTime: Double = 0.0\n ) {\n /**\n * The asset's root-entity transform *before* any auto-center offset\n * was applied — captured the first frame [refreshContentCentering]\n * touches this model. The auto-center pass re-runs every time a\n * deferred async sibling grows the union (#1540), so it must compose\n * each new offset onto this stored base rather than onto the\n * already-offset transform — otherwise the translation accumulates.\n * Filament.js represents a mat4 as a flat 16-element `number[]`.\n */\n var baseTransform: dynamic = null\n }\n\n /** Orbit camera controller -- initialized when cameraControls is enabled. */\n var cameraController: OrbitCameraController? = null\n private set\n\n /** Enable orbit camera controls (mouse drag to orbit, scroll to zoom, touch support). */\n fun enableCameraControls(\n distance: Double = 5.0,\n targetX: Double = 0.0,\n targetY: Double = 0.0,\n targetZ: Double = 0.0,\n autoRotate: Boolean = false\n ): OrbitCameraController {\n val controller = OrbitCameraController(canvas, camera).apply {\n this.distance = distance\n target(targetX, targetY, targetZ)\n this.autoRotate = autoRotate\n }\n cameraController = controller\n return controller\n }\n\n companion object {\n /** Default IBL URL — same \"neutral\" environment as SceneView Android. */\n const val DEFAULT_IBL_URL = \"https://sceneview.github.io/assets/environments/neutral_ibl.ktx\"\n const val DEFAULT_SKYBOX_URL = \"https://sceneview.github.io/assets/environments/neutral_skybox.ktx\"\n\n /**\n * Initialize Filament WASM and create a SceneView instance.\n *\n * This is the main entry point. It:\n * 1. Calls Filament.init() to load and compile the WASM module\n * 2. Creates a Filament Engine with a WebGL2 context on the canvas\n * 3. Sets up Scene, View, Camera, Renderer, and SwapChain\n * 4. Applies the user's configuration (camera, lights, models)\n * 5. Calls onReady with the fully initialized SceneView\n *\n * @param canvas The HTML canvas element to render into\n * @param assets List of asset URLs to preload (IBL, skybox KTX files)\n * @param configure DSL block to configure the scene\n * @param onReady Callback when the SceneView is fully initialized\n */\n fun create(\n canvas: HTMLCanvasElement,\n assets: Array<String> = emptyArray(),\n configure: SceneViewBuilder.() -> Unit = {},\n onReady: (SceneView) -> Unit\n ) {\n // Step 1: Initialize Filament WASM module and preload any assets\n init(assets) {\n try {\n // Step 2: Create the Filament engine with WebGL2 context\n // Use dynamic call because webpack externals + Kotlin companion objects\n // don't resolve correctly for Filament's static Engine.create()\n val filament: dynamic = js(\"Filament\")\n val engine: Engine = filament.Engine.create(canvas).unsafeCast<Engine>()\n val renderer = engine.createRenderer()\n val scene = engine.createScene()\n val swapChain = engine.createSwapChain()\n val view = engine.createView()\n\n // Step 3: Create camera entity and camera\n val cameraEntity = (js(\"Filament.EntityManager.get().create()\") as Entity)\n val camera = engine.createCamera(cameraEntity)\n\n // Step 4: Connect view to camera and scene\n view.setCamera(camera)\n view.setScene(scene)\n\n // Step 5: Set viewport to canvas pixel dimensions\n val width = canvas.width\n val height = canvas.height\n view.setViewport(viewport(0, 0, width, height))\n\n // Step 6: Default camera setup -- perspective projection\n val aspect = if (height > 0) width.toDouble() / height.toDouble() else 1.0\n camera.setProjectionFov(\n fovInDegrees = 45.0,\n aspect = aspect,\n near = 0.1,\n far = 1000.0\n )\n\n // Default camera position: slightly above and back, looking at origin\n camera.lookAt(\n float3(0.0, 1.5, 5.0), // eye\n float3(0.0, 0.0, 0.0), // center\n float3(0.0, 1.0, 0.0) // up\n )\n\n // Default exposure matching model-viewer's exposure=1.1\n // This makes IBL-lit models look bright and vibrant\n camera.setExposureDirect(1.1)\n\n // Set clear color to near-black (clean dark background)\n renderer.setClearOptions(js(\"({clearColor: [0.05, 0.05, 0.07, 1.0], clear: true})\"))\n\n // --- Quality defaults for PBR rendering ---\n // Screen-space ambient occlusion (soft contact shadows)\n view.setAmbientOcclusionOptions(js(\"\"\"({\n enabled: true,\n radius: 0.3,\n bias: 0.0005,\n intensity: 1.0,\n quality: 1\n })\"\"\"))\n\n // Subtle bloom for emissive/bright highlights\n view.setBloomOptions(js(\"\"\"({\n enabled: true,\n strength: 0.1,\n threshold: true,\n levels: 4\n })\"\"\"))\n\n // Temporal anti-aliasing for smooth edges\n view.setTemporalAntiAliasingOptions(js(\"\"\"({\n enabled: true\n })\"\"\"))\n\n val sceneView = SceneView(\n canvas, engine, renderer, scene, view, camera, swapChain, cameraEntity\n )\n\n // Step 7: Apply user configuration (camera, lights, models, environment)\n val builder = SceneViewBuilder(sceneView)\n builder.configure()\n builder.apply()\n\n onReady(sceneView)\n } catch (e: Throwable) {\n console.error(\"SceneView: Failed to initialize Filament engine\", e)\n }\n }\n }\n }\n\n /** Resize the viewport to match the canvas dimensions. Call on window resize. */\n fun resize(width: Int = canvas.clientWidth, height: Int = canvas.clientHeight) {\n if (width <= 0 || height <= 0) return\n canvas.width = width\n canvas.height = height\n view.setViewport(viewport(0, 0, width, height))\n camera.setProjectionFov(\n fovInDegrees = 45.0,\n aspect = width.toDouble() / height.toDouble(),\n near = 0.1,\n far = 1000.0\n )\n }\n\n /** Enable automatic viewport resizing when the canvas CSS size changes. */\n var autoResize = true\n\n /** Start the render loop using requestAnimationFrame. */\n fun startRendering() {\n if (isRunning) return\n isRunning = true\n lastTimestamp = 0.0\n renderLoop(0.0)\n }\n\n /** Stop the render loop. */\n fun stopRendering() {\n isRunning = false\n animationFrameId?.let { window.cancelAnimationFrame(it) }\n animationFrameId = null\n }\n\n /**\n * Load a glTF/GLB model from a URL and add it to the scene.\n *\n * This performs the full loading pipeline:\n * 1. Fetch the .glb/.gltf file as an ArrayBuffer\n * 2. Create a FilamentAsset via the AssetLoader\n * 3. Add all renderable entities to the scene\n * 4. Call loadResources() to fetch external textures/buffers\n * 5. Release source data to free memory\n *\n * @param url URL to the .glb or .gltf file\n * @param onLoaded Optional callback when the model is fully loaded (with resources)\n */\n fun loadModel(\n url: String,\n onLoaded: ((FilamentAsset) -> Unit)? = null\n ) {\n val loader = assetLoader ?: engine.createAssetLoader().also { assetLoader = it }\n\n // Derive the base path for resolving relative resource URIs\n val basePath = url.substringBeforeLast('/') + \"/\"\n\n window.fetch(url).then { response ->\n response.arrayBuffer()\n }.then { buffer ->\n val asset = loader.createAsset(buffer)\n if (asset != null) {\n // Add all entities to the scene so they become visible\n val entities = asset.getEntities()\n scene.addEntities(entities)\n\n // Get the animator from the asset instance for animation playback\n val animator = try {\n asset.getInstance().getAnimator()\n } catch (e: Throwable) {\n null\n }\n\n val loadedModel = LoadedModel(asset, animator)\n models.add(loadedModel)\n\n // A new model changes the content bounds, so the auto-center pass\n // must re-frame. The #1391-style diagonal-stability gate already\n // re-frames on every union growth (so a deferred async model is\n // covered even without this call — that is the #1540 fix), but an\n // explicit reset still handles content *replacement*: a shrinking\n // union would otherwise look \"stable\" and never re-frame.\n autoCenterGate.reset()\n\n // Load external resources (textures, buffers) referenced by the glTF.\n // This is REQUIRED for models to render with correct materials.\n asset.loadResources(\n onDone = {\n // Release the source glTF data now that resources are loaded\n asset.releaseSourceData()\n console.log(\"SceneView: Model loaded from $url (${entities.size} entities)\")\n onLoaded?.invoke(asset)\n },\n onFetched = null,\n basePath = basePath,\n asyncInterval = null\n )\n } else {\n console.error(\"SceneView: AssetLoader failed to parse model from $url\")\n }\n }.catch { error ->\n console.error(\"SceneView: Error fetching model from $url\", error)\n }\n }\n\n /**\n * Load the default neutral IBL environment.\n * Provides physically-correct PBR reflections without a visible skybox —\n * models look like they're in a photography studio.\n */\n fun loadDefaultEnvironment() {\n loadEnvironment(DEFAULT_IBL_URL)\n }\n\n /** Load an IBL (Image-Based Lighting) from a KTX file URL. */\n fun loadEnvironment(iblUrl: String, skyboxUrl: String? = null) {\n // Fetch and create IBL (indirect lighting) from a KTX1 file\n window.fetch(iblUrl).then { it.arrayBuffer() }.then { buffer ->\n val ibl = engine.createIblFromKtx1(buffer)\n // Destroy the previous IBL (if any) before swapping it out, so a\n // 2nd loadEnvironment / loadDefaultEnvironment call does not leak\n // the prior GPU resource (issue #1496).\n indirectLight.replaceWith(ibl)\n scene.setIndirectLight(ibl)\n console.log(\"SceneView: IBL loaded from $iblUrl\")\n }.catch { error ->\n console.error(\"SceneView: Error loading IBL from $iblUrl\", error)\n }\n\n // Optionally load a skybox from a separate KTX file\n skyboxUrl?.let { url ->\n window.fetch(url).then { it.arrayBuffer() }.then { buffer ->\n val sky = engine.createSkyFromKtx1(buffer)\n // Same leak-free swap as the IBL above (issue #1496).\n skybox.replaceWith(sky)\n scene.setSkybox(sky)\n console.log(\"SceneView: Skybox loaded from $url\")\n }.catch { error ->\n console.error(\"SceneView: Error loading skybox from $url\", error)\n }\n }\n }\n\n /**\n * Add a light to the scene using the Filament LightManager Builder API.\n *\n * The Filament.js LightManager.Builder is accessed via:\n * Filament.LightManager.Builder(type).intensity(n).direction([x,y,z]).build(engine, entity)\n */\n fun addLight(config: LightConfig) {\n val entity = (js(\"Filament.EntityManager.get().create()\") as Entity)\n\n // Map our LightType enum to Filament's numeric type constants\n // In Filament.js: 0 = SUN, 1 = DIRECTIONAL, 2 = POINT, 3 = FOCUSED_SPOT, 4 = SPOT\n val lightType = when (config.type) {\n LightType.DIRECTIONAL -> 1\n LightType.POINT -> 2\n LightType.SPOT -> 4\n }\n\n // Use the Builder pattern: LightManager.Builder(type).intensity(...).build(engine, entity)\n val builder = LightManager.Builder(lightType)\n builder.intensity(config.intensity)\n builder.color(float3(\n config.colorR.toDouble(),\n config.colorG.toDouble(),\n config.colorB.toDouble()\n ))\n builder.castShadows(true)\n\n if (config.type == LightType.DIRECTIONAL) {\n builder.direction(float3(\n config.directionX.toDouble(),\n config.directionY.toDouble(),\n config.directionZ.toDouble()\n ))\n } else {\n builder.position(float3(\n config.positionX.toDouble(),\n config.positionY.toDouble(),\n config.positionZ.toDouble()\n ))\n builder.falloff(10.0)\n }\n\n builder.build(engine, entity)\n scene.addEntity(entity)\n lightEntities.add(entity)\n }\n\n /**\n * Add a procedural geometry primitive to the scene.\n *\n * Generates an in-memory GLB from the KMP core geometry generators\n * and loads it through the gltfio pipeline, giving geometry nodes\n * the same PBR material system as loaded glTF models.\n *\n * @param config Geometry configuration (type, size, color, position, scale)\n */\n fun addGeometry(config: GeometryConfig) {\n val glbBuffer = GeometryGLBBuilder.buildGLB(config)\n val loader = assetLoader ?: engine.createAssetLoader().also { assetLoader = it }\n\n try {\n val asset = loader.createAsset(glbBuffer)\n if (asset != null) {\n val entities = asset.getEntities()\n scene.addEntities(entities)\n\n val animator = try {\n asset.getInstance().getAnimator()\n } catch (e: Throwable) {\n null\n }\n\n models.add(LoadedModel(asset, animator))\n\n // Re-arm the auto-center pass — a new primitive grows the union\n // bounds. The diagonal-stability gate also re-frames on its own\n // (#1540), but resetting keeps geometry added after a latched\n // pass consistent with `loadModel`.\n autoCenterGate.reset()\n\n // Finalize the asset — loadResources uploads vertex/index buffers to GPU.\n // Even for self-contained GLBs (no external resources), this step is required.\n asset.loadResources(\n onDone = { asset.releaseSourceData() },\n onFetched = null,\n basePath = \"\",\n asyncInterval = null\n )\n console.log(\"SceneView: Geometry '${config.geometryType.name.lowercase()}' added\")\n } else {\n console.error(\"SceneView: Failed to create geometry asset for ${config.geometryType}\")\n }\n } catch (e: Throwable) {\n console.error(\"SceneView: Error creating geometry ${config.geometryType}\", e)\n }\n }\n\n /**\n * Auto-fit the camera to frame all loaded models.\n * Computes the bounding box of all assets and adjusts the orbit controller distance.\n */\n fun fitToModels() {\n if (models.isEmpty()) return\n fitToBounds(ContentCentering.union(contentBoxes()))\n }\n\n /**\n * Read every loaded asset's asset-space AABB as [ContentCentering.Aabb]s.\n *\n * `getBoundingBox()` reports a degenerate/empty box until `loadResources()`\n * has populated the renderables; an unreadable box (resources still in\n * flight) is surfaced once and skipped so the pass retries next frame.\n * Shared by [fitToModels] and [refreshContentCentering] so the union-AABB\n * read happens exactly once per call site instead of being duplicated.\n */\n private fun contentBoxes(): List<ContentCentering.Aabb> = models.mapNotNull { model ->\n try {\n val aabb = model.asset.getBoundingBox()\n val mn: dynamic = aabb.min\n val mx: dynamic = aabb.max\n ContentCentering.Aabb(\n doubleArrayOf(\n (mn[0] as Number).toDouble(),\n (mn[1] as Number).toDouble(),\n (mn[2] as Number).toDouble(),\n ),\n doubleArrayOf(\n (mx[0] as Number).toDouble(),\n (mx[1] as Number).toDouble(),\n (mx[2] as Number).toDouble(),\n ),\n )\n } catch (e: Throwable) {\n // The asset's bounds are not readable yet (resources still loading) — skip\n // this model for now. Surface it once so a genuine failure is not invisible;\n // the pass re-runs on later frames until the framing has settled.\n console.warn(\"SceneView: skipping a model in auto-center (bounds not ready)\", e)\n null\n }\n }\n\n /**\n * Dolly the orbit controller so [bounds] (the union AABB of all content)\n * fits the frustum. A no-op when [bounds] is `null` (nothing loaded) or\n * camera controls are disabled. Extracted so [fitToModels] and the\n * auto-centre path ([refreshContentCentering]) share one implementation\n * and one union-AABB read.\n */\n private fun fitToBounds(bounds: ContentCentering.Aabb?) {\n if (bounds == null) return\n val controller = cameraController ?: return\n val center = ContentCentering.center(bounds)\n val radius = ContentCentering.diagonal(bounds) / 2.0\n if (radius <= 0.0) return\n\n controller.target(center[0], center[1], center[2])\n controller.distance = radius * 2.5\n controller.minDistance = radius * 0.5\n controller.maxDistance = radius * 10.0\n }\n\n /**\n * Translate every loaded asset's root entity so the union bounding box of\n * all content lands centred on the world origin (the orbit-camera target),\n * then dolly the orbit camera so that union fits the frustum.\n *\n * Runs every render frame until the content's union diagonal has settled\n * across consecutive frames — see [AutoCenterGate]. A no-op once the gate\n * has latched, and a no-op entirely when [autoCenterContent] is `false`.\n *\n * ## #1540: deferred async models re-frame\n *\n * The previous design latched on the **first** non-degenerate frame, so an\n * async model that finished *after* a sibling had already centred never\n * re-centred — the multi-model \"bunched-in-the-corner\" bug #1391 fixed on\n * iOS. This port mirrors that fix: every frame the union diagonal is\n * measured and the pass re-frames whenever it grew (a streamed model just\n * landed), latching only once the diagonal is stable. So a 2nd model\n * loaded async always pulls the framing back to the combined extent.\n *\n * ## #1540: auto-dolly, not just auto-centre\n *\n * The pass now also calls [fitToBounds] with the same union AABB so the\n * web viewer auto-DOLLIES the orbit camera to fit content size — small and\n * large models were previously mis-framed because only auto-centring ran.\n *\n * Library-level port of the iOS `refreshContentCentering` (#1026 / #1391):\n * on iOS an intermediate `contentRoot` Entity is translated; the web\n * Filament `Scene` has no parent root, so each asset's own root entity is\n * offset instead — the visual result is identical. Closes #1052, #1540.\n */\n private fun refreshContentCentering() {\n if (!autoCenterGate.shouldRun(autoCenterContent, models.isNotEmpty())) return\n\n // Single union-AABB read, shared with the dolly fit below (#1540 de-dup).\n val union = ContentCentering.union(contentBoxes())\n val offset = ContentCentering.centeringOffset(union) ?: return\n\n // Skip frames where the union diagonal has not moved since the last\n // framed pass — the scene is already settled and the gate will latch.\n // A freshly streamed model grows the diagonal and forces a re-frame.\n val diagonal = ContentCentering.diagonal(union)\n if (!autoCenterGate.shouldFrame(diagonal)) {\n autoCenterGate.recordFraming(diagonal)\n return\n }\n\n // Apply the centring translation to each asset's root entity via the\n // TransformManager. The first time this model is touched its current\n // transform is captured as `baseTransform`; every subsequent re-frame\n // (a deferred async sibling grew the union — #1540) composes the new\n // offset onto that *base* rather than onto the already-offset\n // transform, so the translation never accumulates. Composing onto the\n // base keeps any per-model scale/position the consumer set intact.\n val tm = engine.getTransformManager()\n for (model in models) {\n try {\n val root = model.asset.getRoot()\n if (!tm.hasComponent(root)) tm.create(root)\n val instance = tm.getInstance(root)\n if (model.baseTransform == null) {\n model.baseTransform = copyMat4(tm.getTransform(instance))\n }\n tm.setTransform(instance, translatedMat4(model.baseTransform, offset))\n } catch (e: Throwable) {\n console.error(\"SceneView: auto-center failed for a model\", e)\n }\n }\n\n // Auto-dolly: fit the orbit camera to the content size (#1540). The\n // union is already centred on the origin by the offset above, so the\n // fit's own target re-aims at the (now origin) centroid harmlessly.\n fitToBounds(union)\n\n // Record this framing — latches the gate once the diagonal stabilises.\n autoCenterGate.recordFraming(diagonal)\n console.log(\n \"SceneView: auto-centered content (offset ${offset[0]}, ${offset[1]}, \" +\n \"${offset[2]}, diagonal $diagonal)\",\n )\n }\n\n /**\n * Return a fresh flat 16-element `number[]` copy of the column-major 4x4\n * [mat]. Used to snapshot a model's base transform before the auto-center\n * pass first offsets it (#1540), so later re-frames compose onto an\n * immutable base.\n */\n private fun copyMat4(mat: dynamic): dynamic {\n val out = js(\"[]\")\n for (i in 0 until 16) {\n out.push((mat[i] as Number).toDouble())\n }\n return out\n }\n\n /**\n * Return a copy of the column-major 4x4 [mat] with [offset] added to its\n * translation column (indices 12, 13, 14). Filament.js represents a mat4\n * as a flat 16-element `number[]`.\n */\n private fun translatedMat4(mat: dynamic, offset: DoubleArray): dynamic {\n val out = copyMat4(mat)\n out[12] = (out[12] as Number).toDouble() + offset[0]\n out[13] = (out[13] as Number).toDouble() + offset[1]\n out[14] = (out[14] as Number).toDouble() + offset[2]\n return out\n }\n\n /** Clean up all Filament resources. */\n fun destroy() {\n stopRendering()\n cameraController?.dispose()\n\n // Destroy loaded assets\n assetLoader?.let { loader ->\n models.forEach { loader.destroyAsset(it.asset) }\n loader.delete()\n }\n models.clear()\n\n // Destroy light entities\n lightEntities.forEach { engine.destroyEntity(it) }\n lightEntities.clear()\n\n // Destroy the environment GPU resources — IBL + skybox (issue #1496).\n // Detach from the scene first so the engine never holds a dangling\n // reference, then destroy the handles.\n if (indirectLight.current != null) scene.setIndirectLight(null)\n indirectLight.release()\n if (skybox.current != null) scene.setSkybox(null)\n skybox.release()\n\n // Destroy core Filament objects\n engine.destroyRenderer(renderer)\n engine.destroyView(view)\n engine.destroyScene(scene)\n engine.destroyCameraComponent(cameraEntity)\n engine.destroySwapChain(swapChain)\n val filament: dynamic = js(\"Filament\")\n filament.Engine.destroy(engine)\n }\n\n /**\n * The render loop -- called every frame via requestAnimationFrame.\n *\n * Each frame:\n * 1. Auto-resizes viewport if CSS size changed\n * 2. Updates orbit camera controller (rotation, damping)\n * 3. Advances glTF animations\n * 4. Calls engine.execute() to process pending async operations\n * 5. Renders the frame via beginFrame/renderView/endFrame\n */\n private fun renderLoop(timestamp: Double) {\n if (!isRunning) return\n\n // Auto-resize viewport if canvas CSS size changed\n if (autoResize) {\n val w = canvas.clientWidth\n val h = canvas.clientHeight\n if (w > 0 && h > 0 && (w != canvas.width || h != canvas.height)) {\n resize(w, h)\n }\n }\n\n // Auto-center content on the first frame its bounds are non-degenerate\n // (i.e. async-loaded models have populated). No-op once centered or\n // when autoCenterContent is disabled. Port of iOS #1026 — closes #1052.\n refreshContentCentering()\n\n // Update orbit camera\n cameraController?.update()\n\n // Track animation time\n val deltaSeconds = if (lastTimestamp > 0) (timestamp - lastTimestamp) / 1000.0 else 0.0\n lastTimestamp = timestamp\n\n // Update glTF animations for all loaded models\n models.forEach { model ->\n model.animator?.let { animator ->\n val count = animator.getAnimationCount()\n if (count > 0) {\n model.animationTime += deltaSeconds\n val duration = animator.getAnimationDuration(0)\n if (duration > 0) {\n // Loop the animation\n model.animationTime = model.animationTime % duration\n }\n // In Filament.js, applyAnimation only takes the index.\n // The animation time is set by calling the animator at the right moment.\n // Actually, the gltfio$Animator.applyAnimation(index) applies the animation\n // at the CURRENT time set internally -- we need to advance it.\n // The proper way is: animator.applyAnimation(index) after setting time\n // via the asset's animation system.\n // For Filament.js, we use the asset instance animator which tracks time internally.\n animator.applyAnimation(0)\n animator.updateBoneMatrices()\n }\n }\n }\n\n // Process any pending async Filament operations (texture uploads, etc.)\n engine.execute()\n\n // Render frame\n if (renderer.beginFrame(swapChain)) {\n renderer.renderView(view)\n renderer.endFrame()\n }\n\n animationFrameId = window.requestAnimationFrame(::renderLoop)\n }\n}\n\n/**\n * DSL builder for SceneView configuration.\n */\nclass SceneViewBuilder(private val sceneView: SceneView) {\n private var cameraConfig: CameraConfig? = null\n private var lightConfig: LightConfig? = null\n private val modelConfigs = mutableListOf<ModelConfig>()\n private val geometryConfigs = mutableListOf<GeometryConfig>()\n private var iblUrl: String? = null\n private var skyboxUrl: String? = null\n private var cameraControlsEnabled = true\n private var autoRotateEnabled = false\n private var useDefaultEnvironment = true\n private var autoCenterContentEnabled = true\n\n /** Configure the camera. */\n fun camera(block: CameraConfig.() -> Unit) {\n cameraConfig = CameraConfig().apply(block)\n }\n\n /** Configure a directional light. */\n fun light(block: LightConfig.() -> Unit) {\n lightConfig = LightConfig().apply(block)\n }\n\n /** Add a glTF/GLB model by URL. */\n fun model(url: String, block: ModelConfig.() -> Unit = {}) {\n modelConfigs.add(ModelConfig(url).apply(block))\n }\n\n /** Add a procedural geometry primitive (cube, sphere, cylinder, plane). */\n fun geometry(block: GeometryConfig.() -> Unit) {\n geometryConfigs.add(GeometryConfig().apply(block))\n }\n\n /** Set environment lighting from KTX IBL files. */\n fun environment(iblUrl: String, skyboxUrl: String? = null) {\n this.iblUrl = iblUrl\n this.skyboxUrl = skyboxUrl\n this.useDefaultEnvironment = false\n }\n\n /** Disable the default neutral IBL environment. */\n fun noEnvironment() {\n this.useDefaultEnvironment = false\n }\n\n /** Enable orbit camera controls (drag to orbit, scroll to zoom, touch). Enabled by default. */\n fun cameraControls(enabled: Boolean = true) {\n cameraControlsEnabled = enabled\n }\n\n /** Enable auto-rotation of the camera around the target. */\n fun autoRotate(enabled: Boolean = true) {\n autoRotateEnabled = enabled\n }\n\n /**\n * Auto-centre loaded content on the world origin once it has finished\n * loading. Enabled by default — pass `false` for narrative scenes that\n * rely on intentional off-centre placement.\n *\n * Library-level port of iOS `autoCenterContent` (#1026). Closes #1052.\n */\n fun autoCenterContent(enabled: Boolean = true) {\n autoCenterContentEnabled = enabled\n }\n\n internal fun apply() {\n sceneView.autoCenterContent = autoCenterContentEnabled\n cameraConfig?.applyTo(sceneView.camera)\n\n // If no explicit light was configured, add model-viewer-like 3-point lighting\n if (lightConfig != null) {\n sceneView.addLight(lightConfig!!)\n } else {\n // Key light — main directional, slightly warm\n val keyLight = LightConfig().apply {\n directional()\n intensity(50_000.0)\n direction(0.6f, -1.0f, -0.8f)\n }\n sceneView.addLight(keyLight)\n\n // Fill light — softer, from the opposite side\n val fillLight = LightConfig().apply {\n directional()\n intensity(25_000.0)\n direction(-0.6f, -0.5f, 0.8f)\n }\n sceneView.addLight(fillLight)\n\n // Rim/back light — highlights edges, cool tint\n val rimLight = LightConfig().apply {\n directional()\n intensity(30_000.0)\n color(0.85f, 0.9f, 1.0f) // slight cool tint\n direction(0.0f, -0.3f, 1.0f)\n }\n sceneView.addLight(rimLight)\n }\n\n // Load IBL environment for physically-correct PBR reflections\n if (iblUrl != null) {\n sceneView.loadEnvironment(iblUrl!!, skyboxUrl)\n } else if (useDefaultEnvironment) {\n // Load the bundled neutral IBL — same as Android SceneView default\n sceneView.loadDefaultEnvironment()\n }\n\n modelConfigs.forEach { config ->\n sceneView.loadModel(config.url, config.onLoaded)\n }\n geometryConfigs.forEach { config ->\n sceneView.addGeometry(config)\n }\n if (cameraControlsEnabled) {\n val cam = cameraConfig\n sceneView.enableCameraControls(\n distance = cam?.eyeZ ?: 5.0,\n targetX = cam?.targetX ?: 0.0,\n targetY = cam?.targetY ?: 0.0,\n targetZ = cam?.targetZ ?: 0.0,\n autoRotate = autoRotateEnabled\n )\n }\n }\n}\n","package io.github.sceneview.web\n\nimport kotlin.js.Promise\n\n/**\n * SceneViewer — the JavaScript-facing 3D viewer class.\n *\n * Instances are created via `sceneview.createViewer()` or `sceneview.modelViewer()`.\n * All methods use `@JsName` to ensure stable, unmangled names in compiled JS.\n *\n * ```js\n * sceneview.createViewer(\"canvas\").then(function(sv) {\n * sv.loadModel(\"model.glb\");\n * sv.setAutoRotate(true);\n * });\n * ```\n */\n@JsExport\n@JsName(\"SceneViewer\")\nclass SceneViewJS {\n private var _sceneView: SceneView? = null\n private var disposed = false\n\n internal fun attach(sv: SceneView) {\n _sceneView = sv\n }\n\n /**\n * Load a glTF/GLB model from a URL.\n * Returns a Promise that resolves with the URL when loaded.\n */\n @JsName(\"loadModel\")\n fun loadModel(url: String): Promise<String> {\n val sv = _sceneView ?: return Promise.reject(Throwable(\"SceneViewer not initialized\"))\n return Promise { resolve, reject ->\n try {\n sv.loadModel(url) {\n resolve(url)\n }\n } catch (e: Throwable) {\n reject(e)\n }\n }\n }\n\n /**\n * Load environment lighting from a KTX IBL file URL.\n */\n @JsName(\"setEnvironment\")\n fun setEnvironment(iblUrl: String) {\n _sceneView?.loadEnvironment(iblUrl, null)\n }\n\n /**\n * Load environment lighting with skybox.\n */\n @JsName(\"setEnvironmentWithSkybox\")\n fun setEnvironmentWithSkybox(iblUrl: String, skyboxUrl: String) {\n _sceneView?.loadEnvironment(iblUrl, skyboxUrl)\n }\n\n /**\n * Set the camera orbit position in spherical coordinates.\n * @param theta Horizontal angle in radians\n * @param phi Vertical angle in radians\n * @param distance Distance from target\n */\n @JsName(\"setCameraOrbit\")\n fun setCameraOrbit(theta: Double, phi: Double, distance: Double) {\n _sceneView?.cameraController?.let {\n it.theta = theta\n it.phi = phi\n it.distance = distance\n }\n }\n\n /**\n * Set the camera orbit target (look-at point).\n */\n @JsName(\"setCameraTarget\")\n fun setCameraTarget(x: Double, y: Double, z: Double) {\n _sceneView?.cameraController?.target(x, y, z)\n }\n\n /**\n * Enable or disable auto-rotation.\n */\n @JsName(\"setAutoRotate\")\n fun setAutoRotate(enabled: Boolean) {\n _sceneView?.cameraController?.autoRotate = enabled\n }\n\n /**\n * Set auto-rotation speed in radians per frame.\n */\n @JsName(\"setAutoRotateSpeed\")\n fun setAutoRotateSpeed(speed: Double) {\n _sceneView?.cameraController?.autoRotateSpeed = speed\n }\n\n /**\n * Set minimum and maximum zoom distances.\n */\n @JsName(\"setZoomLimits\")\n fun setZoomLimits(min: Double, max: Double) {\n _sceneView?.cameraController?.let {\n it.minDistance = min\n it.maxDistance = max\n }\n }\n\n /**\n * Start the render loop. Called automatically by createViewer().\n */\n @JsName(\"startRendering\")\n fun startRendering() {\n _sceneView?.startRendering()\n }\n\n /**\n * Stop the render loop.\n */\n @JsName(\"stopRendering\")\n fun stopRendering() {\n _sceneView?.stopRendering()\n }\n\n /**\n * Resize the viewport. Normally handled automatically.\n */\n @JsName(\"resize\")\n fun resize(width: Int, height: Int) {\n _sceneView?.resize(width, height)\n }\n\n /**\n * Set the background clear color (RGBA, 0-1 range).\n * Use this to sync the 3D canvas background with your page theme.\n */\n @JsName(\"setBackgroundColor\")\n fun setBackgroundColor(r: Double, g: Double, b: Double, a: Double) {\n val sv = _sceneView ?: return\n val opts = js(\"{}\")\n val color = js(\"[]\")\n color.push(r, g, b, a)\n opts[\"clearColor\"] = color\n opts[\"clear\"] = true\n sv.renderer.setClearOptions(opts)\n }\n\n /**\n * Fit the camera to frame all loaded models.\n */\n @JsName(\"fitToModels\")\n fun fitToModels() {\n _sceneView?.fitToModels()\n }\n\n /**\n * Toggle library-level auto-centring of loaded content.\n *\n * When enabled (the default), content is translated so its bounding box\n * is centred on the orbit-camera target the first frame it finishes\n * loading. Pass `false` for narrative scenes with intentional off-centre\n * placement. Port of iOS `autoCenterContent` (#1026).\n */\n @JsName(\"setAutoCenterContent\")\n fun setAutoCenterContent(enabled: Boolean) {\n _sceneView?.autoCenterContent = enabled\n }\n\n /**\n * Clean up all GPU resources. Call when removing the viewer.\n */\n @JsName(\"dispose\")\n fun dispose() {\n if (!disposed) {\n disposed = true\n _sceneView?.destroy()\n _sceneView = null\n }\n }\n}\n\n/**\n * Library version.\n *\n * Kept in lockstep with the repo-wide `VERSION_NAME` (`gradle.properties`) — `sceneview-web` has no\n * Gradle `buildConfig` plugin, so this literal is the single source of truth for the JS surface.\n * Bump it together with every other version location (see CLAUDE.md \"Version Location Map\").\n */\nconst val SCENEVIEW_VERSION = \"4.9.0\"\n","package io.github.sceneview.web.bindings\n\n// -----------------------------------------------------------------------\n// Helper functions for creating Filament.js array types.\n//\n// Filament.js uses number[] (JavaScript arrays) for float3, float4, mat4, etc.\n// These helpers create the arrays in a Kotlin/JS-friendly way.\n//\n// NOTE: These MUST NOT be in the @JsModule(\"filament\") file (Filament.kt)\n// because non-external declarations are not allowed in @JsModule files.\n// -----------------------------------------------------------------------\n\n/**\n * Create a float3 array [x, y, z] for Filament.js API calls.\n *\n * Used by Camera.lookAt, LightManager.Builder.direction/position/color, etc.\n */\nfun float3(x: Double, y: Double, z: Double): dynamic {\n val arr = js(\"[]\")\n arr.push(x, y, z)\n return arr\n}\n\n/**\n * Create a float4 array [x, y, z, w] for Filament.js API calls.\n *\n * Used by Renderer.setClearOptions, Skybox.setColor, etc.\n */\nfun float4(x: Double, y: Double, z: Double, w: Double): dynamic {\n val arr = js(\"[]\")\n arr.push(x, y, z, w)\n return arr\n}\n\n/**\n * Create a viewport array [x, y, width, height] for View.setViewport().\n */\nfun viewport(x: Int, y: Int, width: Int, height: Int): dynamic {\n val arr = js(\"[]\")\n arr.push(x, y, width, height)\n return arr\n}\n","package io.github.sceneview.web.nodes\n\nimport io.github.sceneview.web.bindings.Camera\nimport io.github.sceneview.web.bindings.float3\n\n/**\n * Camera configuration for SceneView web.\n *\n * ```kotlin\n * camera {\n * eye(0.0, 1.5, 5.0)\n * target(0.0, 0.0, 0.0)\n * up(0.0, 1.0, 0.0)\n * fov(45.0)\n * near(0.1)\n * far(1000.0)\n * }\n * ```\n */\nclass CameraConfig {\n var eyeX = 0.0; private set\n var eyeY = 1.5; private set\n var eyeZ = 5.0; private set\n var targetX = 0.0; private set\n var targetY = 0.0; private set\n var targetZ = 0.0; private set\n var upX = 0.0; private set\n var upY = 1.0; private set\n var upZ = 0.0; private set\n var fovDegrees = 45.0; private set\n var nearPlane = 0.1; private set\n var farPlane = 1000.0; private set\n // Exposure defaults — matching model-viewer's exposure=1.1\n var aperture = 16.0; private set\n var shutterSpeed = 1.0 / 125.0; private set\n var sensitivity = 100.0; private set\n var directExposure: Double? = 1.1; private set\n var useDirectExposure = true; private set\n\n fun eye(x: Double, y: Double, z: Double) {\n eyeX = x; eyeY = y; eyeZ = z\n }\n\n fun target(x: Double, y: Double, z: Double) {\n targetX = x; targetY = y; targetZ = z\n }\n\n fun up(x: Double, y: Double, z: Double) {\n upX = x; upY = y; upZ = z\n }\n\n fun fov(degrees: Double) { fovDegrees = degrees }\n fun near(value: Double) { nearPlane = value }\n fun far(value: Double) { farPlane = value }\n\n fun exposure(aperture: Double, shutterSpeed: Double, sensitivity: Double) {\n this.aperture = aperture\n this.shutterSpeed = shutterSpeed\n this.sensitivity = sensitivity\n this.useDirectExposure = false\n }\n\n /** Set exposure directly (model-viewer-style, default 1.1). Higher = brighter. */\n fun exposure(value: Double) {\n this.directExposure = value\n this.useDirectExposure = true\n }\n\n /** Apply this config to a Filament.js Camera using float3 arrays for lookAt. */\n fun applyTo(camera: Camera) {\n camera.lookAt(\n float3(eyeX, eyeY, eyeZ),\n float3(targetX, targetY, targetZ),\n float3(upX, upY, upZ)\n )\n if (useDirectExposure && directExposure != null) {\n camera.setExposureDirect(directExposure!!)\n } else {\n camera.setExposure(aperture, shutterSpeed, sensitivity)\n }\n }\n}\n","package io.github.sceneview.web.nodes\n\n/**\n * Light configuration for SceneView web.\n *\n * ```kotlin\n * light {\n * directional()\n * intensity(100_000.0)\n * color(1.0f, 1.0f, 1.0f)\n * direction(0.0f, -1.0f, -0.5f)\n * }\n * ```\n */\nclass LightConfig {\n var type = LightType.DIRECTIONAL; private set\n var intensity = 100_000.0; private set\n var colorR = 1.0f; private set\n var colorG = 1.0f; private set\n var colorB = 1.0f; private set\n var directionX = 0.0f; private set\n var directionY = -1.0f; private set\n var directionZ = -0.5f; private set\n var positionX = 0.0f; private set\n var positionY = 3.0f; private set\n var positionZ = 0.0f; private set\n\n fun directional() { type = LightType.DIRECTIONAL }\n fun point() { type = LightType.POINT }\n fun spot() { type = LightType.SPOT }\n\n fun intensity(value: Double) { intensity = value }\n\n fun color(r: Float, g: Float, b: Float) {\n colorR = r; colorG = g; colorB = b\n }\n\n fun direction(x: Float, y: Float, z: Float) {\n directionX = x; directionY = y; directionZ = z\n }\n\n fun position(x: Float, y: Float, z: Float) {\n positionX = x; positionY = y; positionZ = z\n }\n}\n\nenum class LightType {\n DIRECTIONAL,\n POINT,\n SPOT\n}\n",null,null,null,"module.exports = __WEBPACK_EXTERNAL_MODULE__650__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module used 'module' so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(607);\n"],"names":["root","factory","exports","module","require","define","amd","globalThis","__WEBPACK_EXTERNAL_MODULE__650__","vertices","indices","this","l2_1","m2_1","position","normal","uvCoordinate","color","Float3","n2_1","o2_1","p2_1","q2_1","toString","toString_0","size","center","Float3_init_$Create$","extents","g2_1","h2_1","i2_1","p0","v","p1","v_0","p2","v_1","p3","v_2","p4","v_3","p5","v_4","p6","v_5","p7","v_6","up","VOID","down","front","back","left","right","uv00","Float2","uv10","uv01","uv11","listOf","Vertex","ArrayList_init_$Create$","inductionVariable","i","base","imul","this_0","r","GeometryData","s1","radius","height","sideCount","halfHeight","thetaIncrement","theta","uStep","lowerCapVertices","upperCapVertices","upperEdgeVertices","side","Math","cos","x","tmp$ret$8","sin","x_0","tmp","tmp_0","lowerPosition","this_1","normalize","x_1","tmp$ret$11","x_2","tmp_1","upperPosition","this_2","x_3","tmp$ret$14","x_4","tmp_2","tmp_3","s","tmp$ret$15","tmp$ret$16","inductionVariable_0","bottomRight","side_0","topLeft","topRight","lowerCenterIndex","upperCenterIndex","this_3","Float2_init_$Create$","j2_1","k2_1","tmp$ret$4","stacks","slices","stack","phi","slice","inductionVariable_1","inductionVariable_2","bottomCap","stack_0","next","slice_0","Object","defineProperty","prototype","get","configurable","__magic__","a","b","ArrayBuffer","isView","__proto__","Int8Array","defaultConstructor","parent","interfaces","suspendArity","associatedObjectKey","associatedObjects","<this>","separator","prefix","postfix","limit","truncated","transform","buffer","c","count","last","_this__u8e3s4","length","element","$l$loop","appendElement","joinTo","StringBuilder_init_$Create$","_iterator__ex2g4s","d","e","f","joinTo_0","$this","other","String","fromCharCode","name","ordinal","g_1","h_1","toString_1","k_1","Long","l_1","m_1","n_1","low","high","Number_0","call","o_1","p_1","ZERO","ONE","NEG_ONE","MIN_VALUE","TWO_PWR_24_","equalsLong","thisNeg","isNegative","otherNeg","subtract","getLowBitsUnsigned","radix","isZero","get_MIN_VALUE","radixLong","fromInt","div","divide","rem","convertToInt","multiply","toStringImpl","negate","digitsPerTime","radixToPower","fromNumber","pow","result","remDiv","rem_0","digits","value","add","get_ZERO","isOdd","lessThan","get_TWO_PWR_24_","toNumber","a48","a32","a16","a00","b48","b32","b16","b00","c48","c32","c16","c00","invert","isNaN_0","MAX_VALUE","twoPwr32","compare","Exception_init_$Create$_0","get_ONE","get_NEG_ONE","approx","numBits","numBits_0","shiftLeft","shiftRight","res","greaterThanOrEqual","approxDouble","approx2","max","floor","log2","ceil","log","LN2","delta","approxRes","approxRem","greaterThan","it","isJsArray","$type$","PrimitiveKClassImpl","Array","longArrayClass$lambda","index","isString","charCodeAt","doubleCompareTo","primitiveCompareTo","j","compareToDoNotIntrinsicify","ia","o","isArrayish","anyToString","proto","create","instance","constructorFunction","Error","captureStackTrace","constructor","message","cause","isUndefined","this_","defineFieldOnInstance","defineMessage","getPrototypeOf","writable","ClassCastException_init_$Create$","ctor","initMetadataFor","kind","metadata","simpleName","$kClass$","createMetadata","$metadata$","assign","Symbol","globalInterfaceId","initMetadataForObject","obj","isArray","collection","u","destination","iterator","_unary__edvuaz","collectionToArrayCommonImpl","ArithmeticException_init_$Create$_0","throwIndexOverflow","AbstractCollection","y_1","$outer","w_1","g1_1","IteratorImpl","Companion_instance_2","i1","AbstractMutableCollection","b1_1","initialCapacity","tmp$ret$0","ArrayList","IllegalArgumentException_init_$Create$_0","p1_1","q1_1","r1","array","Companion_getInstance_1","AbstractMutableList","o1_1","RuntimeException_init_$Init$","UnsupportedOperationException","RuntimeException_init_$Init$_0","IllegalStateException","IllegalArgumentException","Exception_init_$Init$","RuntimeException","Exception_init_$Init$_0","extendThrowable","Exception","NoSuchElementException","IndexOutOfBoundsException","ArithmeticException","NoWhenBranchMatchedException","NullPointerException","ClassCastException","jClass","givenSimpleName","isInstanceFunction","KClassImpl","w1_1","x1_1","y1_1","StringBuilder","content","a2_1","uppercase","toUpperCase","c2_1","function_0","ignoreCase","n1","n2","min","thisChar","otherChar","uppercaseChar","toLowerCase","Char__compareTo_impl_ypi4mb","compareTo","compareTo_0","sam$kotlin_Comparator$0","STRING_CASE_INSENSITIVE_ORDER$lambda","h1_1","e2_1","CharSequence","Char","b2","f2_1","thisUpper","otherUpper","charSequenceLength","elements","t","modified","toArray","NoSuchElementException_init_$Create$","z","IllegalStateException_init_$Create$_0","c1","j1","l1","ListIteratorImpl","fromIndex","toIndex","m1","times","a1","rangeCheck","push","splice","insertionRangeCheck","offset","amount","previous","item","checkIndexOverflow","index_0","pop","joinToString","arrayToString$lambda","UnsupportedOperationException_init_$Create$","z1","IndexOutOfBoundsException_init_$Create$_0","charSequenceGet","joinToString_0","this$0","collectionToArray","EmptyIterator_instance","throwable","Number","delimiter","missingDelimiterValue","char","startIndex","get_lastIndex_0","chars","NoSuchElementException_init_$Create$_0","single","lastIndexOf","str","maximumValue","coerceAtMost","charAtIndex","equals","tmp$ret$3","lastIndexOfAny","arr","Uint16Array","endIndex","substring","NullPointerException_init_$Create$","THROW_NPE","Infinity","isInfinite","NoWhenBranchMatchedException_init_$Create$","y","l","sqrt","r2_1","s2_1","t2_1","y2_1","z2_1","a3_1","destroyer","h3_1","i3_1","api","createViewerImpl","jsCreateViewerAutoRotate$ref","jsCreateViewerFull$ref","modelUrl","then","viewer","loadModel","$modelUrl","jsModelViewer$ref","jsModelViewerAutoRotate$ref","window","console","canvasId","autoRotate","cameraControls","cameraX","cameraY","cameraZ","fov","lightIntensity","document","getElementById","tmp0_elvis_lhs","HTMLCanvasElement","Promise","reject","newThrowable","canvas","width","clientWidth","clientHeight","resolve","$this$create","z5","$this$camera","x4","$cameraX","$cameraY","$cameraZ","y4","z4","$fov","Unit_instance","createViewerImpl$lambda$lambda$lambda","a6","$this$light","l5","m5","$lightIntensity","n5","createViewerImpl$lambda$lambda$lambda_0","b6","$autoRotate","c6","$cameraControls","createViewerImpl$lambda$lambda","d7","$canvas","sceneView","x6","addEventListener","createViewerImpl$lambda$lambda$lambda_1","SceneViewer","a7","$resolve","createViewerImpl$lambda$lambda_0","e7_1","event","MouseEvent","THROW_CCE","tmp0_subject","button","z7_1","a8_1","b8_1","clientX","c8_1","clientY","preventDefault","dx","dy","v7_1","x7_1","q7_1","y7_1","g7_1","h7_1","j7_1","s7_1","i7_1","k7_1","OrbitCameraController$setupEventListeners$lambda_0","OrbitCameraController$setupEventListeners$lambda_1","OrbitCameraController$setupEventListeners$lambda_2","WheelEvent","deltaY","r7_1","m7_1","n7_1","tmp0_0","tmp0","b_0","OrbitCameraController$setupEventListeners$lambda_3","passive","OrbitCameraController$setupEventListeners$lambda_4","touches","numberToDouble","isNumber","OrbitCameraController$setupEventListeners$lambda_5","tmp_4","tmp_5","tmp_7","tmp_8","tmp_9","tmp_10","tmp_11","tmp_12","dx_0","dy_0","pinchDistance","d8_1","tmp_13","OrbitCameraController$setupEventListeners$lambda_6","OrbitCameraController$setupEventListeners$lambda_7","camera","f7_1","l7_1","o7_1","p7_1","t7_1","u7_1","w7_1","setupEventListeners","asset","animator","animationTime","h8_1","i8_1","j8_1","k8_1","b7_1","c7_1","o6_1","aabb","getBoundingBox","mn","mx","Float64Array","tmp_6","Aabb","warn","tmp0_safe_receiver","bounds","v6_1","controller","ContentCentering_instance","c3","e3","mat","out","copyMat4","timestamp","m6_1","w6_1","w","d6_1","h","m8","t6_1","u6_1","u2","union","b3","contentBoxes","g3","diagonal","v2","w2","tm","e6_1","getTransformManager","model","getRoot","hasComponent","getInstance","getTransform","setTransform","translatedMat4","error","fitToBounds","refreshContentCentering","e8","deltaSeconds","n6_1","tmp0_safe_receiver_0","getAnimationCount","duration","getAnimationDuration","applyAnimation","updateBoneMatrices","execute","f6_1","beginFrame","j6_1","renderView","h6_1","endFrame","l6_1","requestAnimationFrame","renderLoop","response","arrayBuffer","$loader","createAsset","entities","getEntities","g6_1","addEntities","getAnimator","loadedModel","LoadedModel","x2","loadResources","$asset","releaseSourceData","$url","$entities","$onLoaded","SceneView$loadModel$lambda$lambda","$basePath","engine","renderer","scene","view","swapChain","cameraEntity","i6_1","k6_1","p6_1","q6_1","r6_1","EnvironmentResourceTracker","destroyIndirectLight","s6_1","destroySkybox","SceneView$skybox$lambda","AutoCenterGate","o5_1","p5_1","q5_1","r5_1","s5_1","t5_1","u5_1","v5_1","w5_1","x5_1","y5_1","$sv","p8","SceneViewJS$loadModel$lambda$lambda","y6_1","z6_1","g4_1","h4_1","i4_1","j4_1","k4_1","l4_1","m4_1","n4_1","o4_1","p4_1","q4_1","r4_1","s4_1","t4_1","u4_1","v4_1","w4_1","a5_1","LightType_DIRECTIONAL_getInstance","b5_1","c5_1","d5_1","e5_1","f5_1","g5_1","h5_1","i5_1","j5_1","k5_1","LightType","enabled","hasContent","abs","stable","boxes","minX","minY","minZ","maxX","maxY","maxZ","box","d3","ex","ey","ez","isFinite","f3","handle","config","geometryData","l3_1","generateCube","m3_1","n3_1","o3_1","generateSphere","p3_1","generateCylinder","q3_1","generatePlane","noWhenBranchMatchedException","generateGeometryData","vertexCount","indexCount","positions","Float32Array","normals","px","py","pz","n","indexArray","last_0","i_0","toShort","bboxMin","bboxMax","posBytes","normBytes","idxBytes","typeName","node","w3_1","x3_1","y3_1","translation","c4_1","d4_1","e4_1","scale","z3_1","a4_1","b4_1","rx","ry","rz","cx","sx","cy","sy","cz","sz","qx","qy","qz","qw","rotation","gltf","version","generator","nodes","meshes","primitives","attributes","POSITION","NORMAL","material","mode","pbrMetallicRoughness","baseColorFactor","r3_1","s3_1","t3_1","u3_1","metallicFactor","roughnessFactor","doubleSided","v3_1","extensions","materials","extensionsUsed","posAccessor","type","normAccessor","idxAccessor","accessors","bv0","byteLength","target","bv1","byteOffset","bv2","bufferViews","binLength","binPad","binLengthAligned","buffers","buf","jsonStr","JSON","stringify","jsonLength","totalLength","glb","DataView","setUint32","Char__toInt_impl_vasixd","setUint8","toByte","glbBytes","Uint8Array","posBytes8","normBytes8","i_1","idxBytes8","i_2","inductionVariable_3","_unary__edvuaz_0","buildGLBFromArrays","tmp0_2","b_1","tmp0_1","b_2","eyeX","eyeY","eyeZ","lookAt","float3","assets","configure","onReady","init","Filament","Engine","createRenderer","createScene","createSwapChain","createView","EntityManager","Entity","createCamera","setCamera","setScene","setViewport","viewport","aspect","setProjectionFov","setExposureDirect","setClearOptions","clearColor","clear","setAmbientOcclusionOptions","bias","intensity","quality","setBloomOptions","strength","threshold","levels","setTemporalAntiAliasingOptions","SceneView","builder","SceneViewBuilder","$configure","g8","$onReady","SceneView$Companion$create$lambda","distance","targetX","targetY","targetZ","OrbitCameraController","cancelAnimationFrame","url","onLoaded","createAssetLoader","loader","basePath","substringBeforeLast","_Char___init__impl__6a9atx","fetch","SceneView$loadModel$lambda","SceneView$loadModel$lambda_0","onFulfilled","catch","r8","iblUrl","skyboxUrl","SceneView$loadEnvironment$lambda","ibl","createIblFromKtx1","j3","setIndirectLight","$iblUrl","SceneView$loadEnvironment$lambda_1","SceneView$loadEnvironment$lambda_2","sky","createSkyFromKtx1","setSkybox","SceneView$loadEnvironment$lambda_3","onFulfilled_0","entity","lightType","LightManager","Builder","castShadows","direction","falloff","build","addEntity","glbBuffer","GeometryGLBBuilder_instance","f4","tmp$ret$2","e_0","o8","f8","tmp1_safe_receiver","destroyAsset","delete","k1","_iterator__ex2g4s_0","destroyEntity","element_0","k3","destroyRenderer","destroyView","destroyScene","destroyCameraComponent","destroySwapChain","destroy","block","CameraConfig","LightConfig","x8","t8","ensureNotNull","keyLight","fillLight","y8","rimLight","s8","q8","z8_1","a9_1","u8","cam","tmp8_elvis_lhs","n8","sv","SceneViewJS$loadModel$lambda","speed","g","opts","v8","w8","degrees","setExposure","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__"],"sourceRoot":""}