brepjs-cad 0.76.0 → 0.78.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.
@@ -1,60 +0,0 @@
1
- var e=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);function t(e,t){return e[t]}function n(e,t=0){return[e[t],e[t+1],e[t+2]]}var r={exact:!0,brepExport:!0,exactMeasurement:!0,tessellationModel:`extract-time`},i={exact:!0,brepExport:!0,exactMeasurement:!0,tessellationModel:`none`};function a(e,t){return{x:e.x-t.x,y:e.y-t.y,z:e.z-t.z}}function o(e,t){return{x:e.y*t.z-e.z*t.y,y:e.z*t.x-e.x*t.z,z:e.x*t.y-e.y*t.x}}function s(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function c(e){return Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z)}function l(e,t){let n=e.x-t.x,r=e.y-t.y,i=e.z-t.z;return n*n+r*r+i*i}function u(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function d(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function f(e,t,n,r){let i=o(a(u(e,n),u(e,t)),a(u(e,r),u(e,t))),l=c(i),d=l>1e-14?{x:i.x/l,y:i.y/l,z:i.z/l}:i;return{a:t,b:n,c:r,normal:d,offset:s(d,u(e,t)),alive:!0,outsidePoints:[]}}function p(e,t){return s(e.normal,t)-e.offset}function m(e,t){let n=t*t,r=[];for(let t of e){let e=!1;for(let i of r)if(l(t,i)<n){e=!0;break}e||r.push(t)}return r}function h(e){let t=e.length;if(t<4)return null;let n=0,r=1,i=l(u(e,0),u(e,1));for(let a=0;a<t;a++)for(let o=a+1;o<t;o++){let t=l(u(e,a),u(e,o));t>i&&(i=t,n=a,r=o)}if(i<1e-20)return null;let d=a(u(e,r),u(e,n)),f=-1,p=-1;for(let i=0;i<t;i++){if(i===n||i===r)continue;let t=o(d,a(u(e,i),u(e,n))),c=s(t,t);c>p&&(p=c,f=i)}if(f===-1||p<1e-20)return null;let m=o(a(u(e,r),u(e,n)),a(u(e,f),u(e,n))),h=c(m);if(h<1e-14)return null;let g={x:m.x/h,y:m.y/h,z:m.z/h},_=s(g,u(e,n)),v=-1,y=-1;for(let i=0;i<t;i++){if(i===n||i===r||i===f)continue;let t=Math.abs(s(g,u(e,i))-_);t>y&&(y=t,v=i)}return v===-1||y<1e-14?null:s(g,u(e,v))-_>0?[n,f,r,v]:[n,r,f,v]}function g(e,t){let n=m(e,t);if(n.length<4)throw Error(n.length===0?`No points provided for convex hull`:`Fewer than 4 non-coincident points; cannot form a 3D convex hull`);let r=h(n);if(r===null)throw Error(`All points are coplanar; cannot form a 3D convex hull`);let[i,o,c,l]=r,g={x:(u(n,i).x+u(n,o).x+u(n,c).x+u(n,l).x)/4,y:(u(n,i).y+u(n,o).y+u(n,c).y+u(n,l).y)/4,z:(u(n,i).z+u(n,o).z+u(n,c).z+u(n,l).z)/4};function _(e,t,r){let i=f(n,e,t,r),o={x:(u(n,e).x+u(n,t).x+u(n,r).x)/3,y:(u(n,e).y+u(n,t).y+u(n,r).y)/3,z:(u(n,e).z+u(n,t).z+u(n,r).z)/3},c=a(g,o);return s(i.normal,c)>0?f(n,e,r,t):i}let v=[_(i,o,c),_(i,c,l),_(i,l,o),_(o,l,c)],y=new Set([i,o,c,l]),b=1e-10;for(let e=0;e<n.length;e++)if(!y.has(e)){for(let t of v)if(p(t,u(n,e))>b){t.outsidePoints.push(e);break}}for(let e=0;e<n.length*4;e++){let e=null;for(let t of v)if(t.alive&&t.outsidePoints.length>0){e=t;break}if(e===null)break;let t=d(e.outsidePoints,0),r=p(e,u(n,t));for(let i=1;i<e.outsidePoints.length;i++){let a=d(e.outsidePoints,i),o=p(e,u(n,a));o>r&&(r=o,t=a)}let i=[];for(let e of v)e.alive&&p(e,u(n,t))>b&&i.push(e);let a=new Map;for(let e of i){let t=[[e.a,e.b],[e.b,e.c],[e.c,e.a]];for(let[e,n]of t){let t=e<n?`${e}-${n}`:`${n}-${e}`,r=a.get(t);r?r.count++:a.set(t,{a:e,b:n,count:1})}}let o=[];for(let e of a.values())e.count===1&&o.push({a:e.a,b:e.b});let s=[];for(let e of i){for(let n of e.outsidePoints)n!==t&&s.push(n);e.alive=!1,e.outsidePoints=[]}let c=[];for(let e of o){let r=f(n,e.a,e.b,t);c.push(r),v.push(r)}for(let e of s)for(let t of c)if(p(t,u(n,e))>b){t.outsidePoints.push(e);break}}let x=[];for(let e of v)e.alive&&x.push([e.a,e.b,e.c]);return{faces:x,points:n}}function _(e,t){switch(e.__bk2d){case`line`:return[e.ox+e.dx*t,e.oy+e.dy*t];case`circle`:{let n=e.sense?t:-t;return[e.cx+e.radius*Math.cos(n),e.cy+e.radius*Math.sin(n)]}case`ellipse`:{let n=e.sense?t:-t,r=Math.cos(e.xDirAngle),i=Math.sin(e.xDirAngle),a=e.majorRadius*Math.cos(n),o=e.minorRadius*Math.sin(n);return[e.cx+a*r-o*i,e.cy+a*i+o*r]}case`bezier`:return be(e.poles,t);case`bspline`:return xe(e,t);case`trimmed`:{let n=e.tStart+t*(e.tEnd-e.tStart);return _(e.basis,n)}}}function v(e,t){switch(e.__bk2d){case`line`:return[e.dx,e.dy];case`circle`:{let n=e.sense?t:-t,r=e.sense?1:-1;return[-e.radius*Math.sin(n)*r,e.radius*Math.cos(n)*r]}case`ellipse`:{let n=e.sense?t:-t,r=e.sense?1:-1,i=Math.cos(e.xDirAngle),a=Math.sin(e.xDirAngle),o=-e.majorRadius*Math.sin(n)*r,s=e.minorRadius*Math.cos(n)*r;return[o*i-s*a,o*a+s*i]}case`bezier`:{let n=1e-8,r=be(e.poles,Math.max(0,t-n)),i=be(e.poles,Math.min(1,t+n)),a=Math.min(1,t+n)-Math.max(0,t-n);return[(i[0]-r[0])/a,(i[1]-r[1])/a]}case`bspline`:{let n=1e-8,r=e.knots[0],i=e.knots[e.knots.length-1],a=xe(e,Math.max(r,t-n)),o=xe(e,Math.min(i,t+n)),s=Math.min(i,t+n)-Math.max(r,t-n);return[(o[0]-a[0])/s,(o[1]-a[1])/s]}case`trimmed`:{let n=e.tStart+t*(e.tEnd-e.tStart),r=v(e.basis,n),i=e.tEnd-e.tStart;return[r[0]*i,r[1]*i]}}}function y(e){switch(e.__bk2d){case`line`:return{first:0,last:e.len};case`circle`:case`ellipse`:return{first:0,last:2*Math.PI};case`bezier`:return{first:0,last:1};case`bspline`:return{first:e.knots[0],last:e.knots[e.knots.length-1]};case`trimmed`:return{first:0,last:1}}}function b(e){switch(e.__bk2d){case`line`:return`LINE`;case`circle`:return`CIRCLE`;case`ellipse`:return`ELLIPSE`;case`bezier`:return`BEZIER_CURVE`;case`bspline`:return`BSPLINE_CURVE`;case`trimmed`:return`TRIMMED_`+b(e.basis)}}function x(e,t,n,r){let i=n-e,a=r-t,o=Math.sqrt(i*i+a*a);return{__bk2d:`line`,ox:e,oy:t,dx:o>0?i/o:1,dy:o>0?a/o:0,len:o}}function S(e,t,n,r=!0){return{__bk2d:`circle`,cx:e,cy:t,radius:n,sense:r}}function C(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));if(Math.abs(o)<1e-12)return x(e,t,i,a);let s=((e*e+t*t)*(r-a)+(n*n+r*r)*(a-t)+(i*i+a*a)*(t-r))/o,c=((e*e+t*t)*(i-n)+(n*n+r*r)*(e-i)+(i*i+a*a)*(n-e))/o,l=Math.sqrt((e-s)**2+(t-c)**2),u=Math.atan2(t-c,e-s),d=Math.atan2(r-c,n-s),f=Math.atan2(a-c,i-s),p=d-u;p<0&&(p+=2*Math.PI);let m=f-u;m<0&&(m+=2*Math.PI);let h=p<m,g=S(s,c,l,h);if(!h){let e=-u,t=-f;return t<e-1e-9&&(t+=2*Math.PI),{__bk2d:`trimmed`,basis:g,tStart:e,tEnd:t}}let _=f;return _<u-1e-9&&(_+=2*Math.PI),{__bk2d:`trimmed`,basis:g,tStart:u,tEnd:_}}function w(e,t,n,r,i,a){let o=Math.sqrt(n*n+r*r),s=o>0?n/o:0,c=o>0?r/o:0,l=e-i,u=t-a,d=2*(u*s-l*c);if(Math.abs(d)<1e-12)return x(e,t,i,a);let f=-(l*l+u*u)/d,p=e-f*c,m=t+f*s,h=Math.abs(f),g=Math.atan2(t-m,e-p),_=Math.atan2(a-m,i-p),v=-(t-m)/h,y=(e-p)/h,b=s*v+c*y,S;if(b>0){let e=_-g;e<=0&&(e+=2*Math.PI),S=g+e/2}else{let e=_-g;e>=0&&(e-=2*Math.PI),S=g+e/2}return C(e,t,p+h*Math.cos(S),m+h*Math.sin(S),i,a)}function ee(e,t,n,r,i=1,a=0,o=!0){return{__bk2d:`ellipse`,cx:e,cy:t,majorRadius:n,minorRadius:r,xDirAngle:Math.atan2(a,i),sense:o}}function te(e){return{__bk2d:`bezier`,poles:[...e]}}function ne(e,t,n){switch(e.__bk2d){case`line`:return{...e,ox:e.ox+t,oy:e.oy+n};case`circle`:return{...e,cx:e.cx+t,cy:e.cy+n};case`ellipse`:return{...e,cx:e.cx+t,cy:e.cy+n};case`bezier`:return{...e,poles:e.poles.map(([e,r])=>[e+t,r+n])};case`bspline`:return{...e,poles:e.poles.map(([e,r])=>[e+t,r+n])};case`trimmed`:return{...e,basis:ne(e.basis,t,n)}}}function re(e,t,n,r){let i=Math.cos(t),a=Math.sin(t),o=(e,t)=>{let o=e-n,s=t-r;return[n+o*i-s*a,r+o*a+s*i]};switch(e.__bk2d){case`line`:{let[t,n]=o(e.ox,e.oy),r=e.dx*i-e.dy*a,s=e.dx*a+e.dy*i;return{...e,ox:t,oy:n,dx:r,dy:s}}case`circle`:{let[t,n]=o(e.cx,e.cy);return{...e,cx:t,cy:n}}case`ellipse`:{let[n,r]=o(e.cx,e.cy);return{...e,cx:n,cy:r,xDirAngle:e.xDirAngle+t}}case`bezier`:return{...e,poles:e.poles.map(([e,t])=>o(e,t))};case`bspline`:return{...e,poles:e.poles.map(([e,t])=>o(e,t))};case`trimmed`:return{...e,basis:re(e.basis,t,n,r)}}}function ie(e,t,n,r){let i=(e,i)=>[n+(e-n)*t,r+(i-r)*t];switch(e.__bk2d){case`line`:{let[t,n]=i(e.ox,e.oy),[r,a]=i(e.ox+e.dx*e.len,e.oy+e.dy*e.len),o=r-t,s=a-n,c=Math.sqrt(o*o+s*s);return{...e,ox:t,oy:n,dx:c>0?o/c:e.dx,dy:c>0?s/c:e.dy,len:c}}case`circle`:{let[n,r]=i(e.cx,e.cy);return{...e,cx:n,cy:r,radius:e.radius*Math.abs(t)}}case`ellipse`:{let[n,r]=i(e.cx,e.cy);return{...e,cx:n,cy:r,majorRadius:e.majorRadius*Math.abs(t),minorRadius:e.minorRadius*Math.abs(t)}}case`bezier`:return{...e,poles:e.poles.map(([e,t])=>i(e,t))};case`bspline`:return{...e,poles:e.poles.map(([e,t])=>i(e,t))};case`trimmed`:return{...e,basis:ie(e.basis,t,n,r)}}}function ae(e,t,n){return ie(e,-1,t,n)}function oe(e,t,n,r,i){let a=Math.sqrt(r*r+i*i),o=r/a,s=i/a,c=(e,r)=>{let i=e-t,a=r-n,c=i*o+a*s;return[t+2*c*o-i,n+2*c*s-a]};switch(e.__bk2d){case`line`:{let[t,n]=c(e.ox,e.oy),r=2*(e.dx*o+e.dy*s)*o-e.dx,i=2*(e.dx*o+e.dy*s)*s-e.dy;return{...e,ox:t,oy:n,dx:r,dy:i}}case`circle`:{let[t,n]=c(e.cx,e.cy);return{...e,cx:t,cy:n,sense:!e.sense}}case`ellipse`:{let[t,n]=c(e.cx,e.cy),r=o*o-s*s,i=2*o*s,a=Math.atan2(i*Math.cos(e.xDirAngle)-r*Math.sin(e.xDirAngle),r*Math.cos(e.xDirAngle)+i*Math.sin(e.xDirAngle));return{...e,cx:t,cy:n,xDirAngle:a,sense:!e.sense}}case`bezier`:return{...e,poles:e.poles.map(([e,t])=>c(e,t))};case`bspline`:return{...e,poles:e.poles.map(([e,t])=>c(e,t))};case`trimmed`:return{...e,basis:oe(e.basis,t,n,r,i)}}}function se(e,t,n){let r=ce(e),i=ce(t);return r.__bk2d===`line`&&i.__bk2d===`line`?de(e,r,t,i,n):r.__bk2d===`line`&&i.__bk2d===`circle`?{points:fe(e,r,t,i,n),segments:[]}:r.__bk2d===`circle`&&i.__bk2d===`line`?{points:fe(t,i,e,r,n),segments:[]}:r.__bk2d===`circle`&&i.__bk2d===`circle`?{points:me(e,r,t,i,n),segments:[]}:he(e,t,n,e===t)}function ce(e){let t=e;for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function le(e,t,n){let r=y(e);return t>=r.first-n&&t<=r.last+n}function ue(e,t,n){let r=y(e);if(!isFinite(r.first)||!isFinite(r.last))return null;let i=(r.last-r.first)/80,a=r.first,o=1/0;for(let s=0;s<=80;s++){let c=r.first+s*i,[l,u]=_(e,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}let[s,c]=_(e,r.first),[l,u]=_(e,r.last),[d,f]=_(e,(r.first+r.last)/2),p=Math.max(Math.sqrt((l-s)**2+(u-c)**2),Math.sqrt((d-s)**2+(f-c)**2),1e-6)*.1;return o<p*p?a:null}function de(e,t,n,r,i){let a=t.dx*r.dy-t.dy*r.dx;if(Math.abs(a)>=1e-14){let o=r.ox-t.ox,s=r.oy-t.oy,c=(o*r.dy-s*r.dx)/a,l=(o*t.dy-s*t.dx)/a;return!le(e,c,i)||!le(n,l,i)?{points:[],segments:[]}:{points:[[t.ox+c*t.dx,t.oy+c*t.dy]],segments:[]}}let o=r.ox-t.ox,s=r.oy-t.oy,c=o*t.dy-s*t.dx;if(Math.abs(c)>i)return{points:[],segments:[]};let l=y(e),u=y(n),d=_(n,u.first),f=_(n,u.last),p=(d[0]-t.ox)*t.dx+(d[1]-t.oy)*t.dy,m=(f[0]-t.ox)*t.dx+(f[1]-t.oy)*t.dy,h=Math.max(l.first,Math.min(p,m)),g=Math.min(l.last,Math.max(p,m));return g-h<i?{points:[],segments:[]}:{points:[],segments:[x(t.ox+h*t.dx,t.oy+h*t.dy,t.ox+g*t.dx,t.oy+g*t.dy)]}}function fe(e,t,n,r,i){let a=t.ox-r.cx,o=t.oy-r.cy,s=t.dx*t.dx+t.dy*t.dy,c=2*(a*t.dx+o*t.dy),l=a*a+o*o-r.radius*r.radius,u=c*c-4*s*l;if(u<-i)return[];let d=[],f=Math.sqrt(Math.max(0,u)),p=(-c-f)/(2*s),m=(-c+f)/(2*s);for(let r of u<i*i?[p]:[p,m]){if(!le(e,r,i))continue;let a=t.ox+r*t.dx,o=t.oy+r*t.dy,s=ue(n,a,o);if(s===null)continue;let[c,l]=_(n,s);(c-a)**2+(l-o)**2>i*i*1e6||d.push([a,o])}return d}function pe(e,t,n){let r=y(e),i=y(t),a=Math.abs(r.last-r.first-2*Math.PI)<1e-10,o=Math.abs(i.last-i.first-2*Math.PI)<1e-10;if(a&&o)return[];if(a)return[_(t,i.first),_(t,i.last)];if(o)return[_(e,r.first),_(e,r.last)];let s=[],c=[[t,_(e,r.first)],[t,_(e,r.last)],[e,_(t,i.first)],[e,_(t,i.last)]];for(let[e,t]of c){let r=ue(e,t[0],t[1]);if(r!==null){let[i,a]=_(e,r);(i-t[0])**2+(a-t[1])**2<n*n*100&&s.push(t)}}let l=[];for(let e of s)l.some(([t,r])=>(t-e[0])**2+(r-e[1])**2<n*n*100)||l.push(e);return l}function me(e,t,n,r,i){let a=r.cx-t.cx,o=r.cy-t.cy,s=Math.sqrt(a*a+o*o);if(s>t.radius+r.radius+i||s<Math.abs(t.radius-r.radius)-i)return[];if(s<1e-14)return Math.abs(t.radius-r.radius)>i?[]:pe(e,n,i);let c=(t.radius*t.radius-r.radius*r.radius+s*s)/(2*s),l=t.radius*t.radius-c*c,u=Math.sqrt(Math.max(0,l)),d=t.cx+c*a/s,f=t.cy+c*o/s,p=u<i?[[d,f]]:[[d+u*o/s,f-u*a/s],[d-u*o/s,f+u*a/s]],m=[];for(let[t,r]of p){let a=ue(e,t,r),o=ue(n,t,r);if(a===null||o===null)continue;let[s,c]=_(e,a),[l,u]=_(n,o),d=(i*10)**2;(s-t)**2+(c-r)**2>d||(l-t)**2+(u-r)**2>d||m.push([t,r])}return m}function he(e,t,n,r=!1){let i=y(e),a=y(t);if(!isFinite(i.first)||!isFinite(i.last)||!isFinite(a.first)||!isFinite(a.last))return{points:[],segments:[]};let o=[],s=[];for(let n=0;n<=100;n++){let r=i.first+(i.last-i.first)*n/100,[c,l]=_(e,r);o.push({t:r,x:c,y:l});let u=a.first+(a.last-a.first)*n/100,[d,f]=_(t,u);s.push({t:u,x:d,y:f})}let c=Math.max(n*100,.5),l=new Float64Array(600);for(let e=0;e<100;e++){let t=s[e],n=s[e+1],r=e*6;l[r]=Math.min(t.x,n.x),l[r+1]=Math.max(t.x,n.x),l[r+2]=Math.min(t.y,n.y),l[r+3]=Math.max(t.y,n.y),l[r+4]=(t.t+n.t)/2}let u=[],d=(i.last-i.first)/5;for(let e=0;e<100;e++){let t=o[e],n=o[e+1],i=Math.min(t.x,n.x)-c,a=Math.max(t.x,n.x)+c,s=Math.min(t.y,n.y)-c,f=Math.max(t.y,n.y)+c,p=(t.t+n.t)/2;for(let e=0;e<100;e++){let t=e*6;if(a<l[t]||l[t+1]<i||f<l[t+2]||l[t+3]<s)continue;let n=l[t+4];r&&Math.abs(p-n)<d||u.push({t1:p,t2:n})}}let f=n*n,p=[];for(let{t1:o,t2:s}of u){let c=o,l=s;for(let n=0;n<20;n++){let[n,r]=_(e,c),[o,s]=_(t,l),u=n-o,d=r-s;if(u*u+d*d<f)break;let p=v(e,c),m=v(t,l),h=p[0]*-m[1]- -m[0]*p[1];if(Math.abs(h)<1e-14)break;let g=(-u*-m[1]- -d*-m[0])/h,y=(p[0]*-d-p[1]*-u)/h;c+=g,l+=y,c=Math.max(i.first,Math.min(i.last,c)),l=Math.max(a.first,Math.min(a.last,l))}let[u,d]=_(e,c),[m,h]=_(t,l);if(!(r&&Math.abs(c-l)<(i.last-i.first)*.05)&&(u-m)**2+(d-h)**2<n*n*1e6){let e=(u+m)/2,t=(d+h)/2,r=!1;for(let[i,a]of p)if((i-e)**2+(a-t)**2<n*n*1e4){r=!0;break}r||p.push([e,t])}}return{points:p,segments:[]}}function ge(e){return JSON.stringify(e)}function _e(e){return JSON.parse(e)}function ve(){return{__bk2d_bbox:!0,xMin:1/0,yMin:1/0,xMax:-1/0,yMax:-1/0}}function ye(e,t,n){let r=t.__bk2d===`trimmed`?t.basis:t;if(r.__bk2d===`line`){let n=y(t);if(!isFinite(n.first)||!isFinite(n.last))return;let[r,i]=_(t,n.first),[a,o]=_(t,n.last);e.xMin=Math.min(e.xMin,r,a),e.yMin=Math.min(e.yMin,i,o),e.xMax=Math.max(e.xMax,r,a),e.yMax=Math.max(e.yMax,i,o);return}if(r.__bk2d===`circle`){let n=y(t);if(!isFinite(n.first)||!isFinite(n.last))return;let{cx:i,cy:a,radius:o,sense:s}=r,[c,l]=_(t,n.first),[u,d]=_(t,n.last),f=Math.min(c,u),p=Math.max(c,u),m=Math.min(l,d),h=Math.max(l,d),g=t.__bk2d===`trimmed`?t.tStart:n.first,v=t.__bk2d===`trimmed`?t.tEnd:n.last;for(let e=0;e<4;e++){let t=e*Math.PI/2,n=s?t:-t;for(let e=0;e<=1;e++){let r=n+e*2*Math.PI;if(r>=g-1e-10&&r<=v+1e-10){let e=i+o*Math.cos(t),n=a+o*Math.sin(t);f=Math.min(f,e),p=Math.max(p,e),m=Math.min(m,n),h=Math.max(h,n);break}}}e.xMin=Math.min(e.xMin,f),e.yMin=Math.min(e.yMin,m),e.xMax=Math.max(e.xMax,p),e.yMax=Math.max(e.yMax,h);return}let i=y(t);if(!isFinite(i.first)||!isFinite(i.last))return;let a=(i.last-i.first)/20;for(let n=0;n<=20;n++){let[r,o]=_(t,i.first+n*a);r<e.xMin&&(e.xMin=r),o<e.yMin&&(e.yMin=o),r>e.xMax&&(e.xMax=r),o>e.yMax&&(e.yMax=o)}}function be(e,t){let n=e.length,r=e.map(([e,t])=>[e,t]);for(let e=1;e<n;e++)for(let i=0;i<n-e;i++){let e=r[i],n=r[i+1];e[0]=(1-t)*e[0]+t*n[0],e[1]=(1-t)*e[1]+t*n[1]}return r[0]}function xe(e,t){let n=[];for(let t=0;t<e.knots.length;t++){let r=e.multiplicities[t]??1;for(let i=0;i<r;i++)n.push(e.knots[t])}let r=e.degree,i=e.poles.length,a=n.length,o=Math.max(n[r],Math.min(n[a-r-1],t)),s=r;for(let e=r;e<a-r-1;e++)if(o>=n[e]&&o<n[e+1]){s=e;break}o>=n[a-r-1]&&(s=a-r-2);let c=[];for(let t=0;t<=r;t++){let n=Math.min(s-r+t,i-1),a=e.poles[Math.max(0,n)];c.push([a[0],a[1]])}for(let e=1;e<=r;e++)for(let t=r;t>=e;t--){let i=s-r+t,a=n[i]??0,l=(n[i+r-e+1]??1)-a,u=l>1e-15?(o-a)/l:0,d=c[t],f=c[t-1];d[0]=(1-u)*f[0]+u*d[0],d[1]=(1-u)*f[1]+u*d[1]}return c[r]}var Se=.001,Ce=.1,we={nx:0,ny:0,nz:0,ax:0,ay:0,az:0,bx:0,by:0,bz:0,cx:0,cy:0,cz:0};function Te(e,t,n){let r=(t[n*3]??0)*3,i=(t[n*3+1]??0)*3,a=(t[n*3+2]??0)*3,o=e[r]??0,s=e[r+1]??0,c=e[r+2]??0,l=e[i]??0,u=e[i+1]??0,d=e[i+2]??0,f=e[a]??0,p=e[a+1]??0,m=e[a+2]??0,h=l-o,g=u-s,_=d-c,v=f-o,y=p-s,b=m-c,x=g*b-_*y,S=_*v-h*b,C=h*y-g*v,w=Math.hypot(x,S,C)||1;return x/=w,S/=w,C/=w,we.nx=x,we.ny=S,we.nz=C,we.ax=o,we.ay=s,we.az=c,we.bx=l,we.by=u,we.bz=d,we.cx=f,we.cy=p,we.cz=m,we}function Ee(e,t){let n=Math.floor(t.length/3),r=new ArrayBuffer(84+n*50),i=new DataView(r);i.setUint32(80,n,!0);let a=84;for(let r=0;r<n;r++){let n=Te(e,t,r);i.setFloat32(a,n.nx,!0),i.setFloat32(a+4,n.ny,!0),i.setFloat32(a+8,n.nz,!0),i.setFloat32(a+12,n.ax,!0),i.setFloat32(a+16,n.ay,!0),i.setFloat32(a+20,n.az,!0),i.setFloat32(a+24,n.bx,!0),i.setFloat32(a+28,n.by,!0),i.setFloat32(a+32,n.bz,!0),i.setFloat32(a+36,n.cx,!0),i.setFloat32(a+40,n.cy,!0),i.setFloat32(a+44,n.cz,!0),i.setUint16(a+48,0,!0),a+=50}return r}function De(e,t){let n=Math.floor(t.length/3),r=[`solid brepjs`];for(let i=0;i<n;i++){let n=Te(e,t,i);r.push(`facet normal ${n.nx} ${n.ny} ${n.nz}`),r.push(`outer loop`),r.push(`vertex ${n.ax} ${n.ay} ${n.az}`),r.push(`vertex ${n.bx} ${n.by} ${n.bz}`),r.push(`vertex ${n.cx} ${n.cy} ${n.cz}`),r.push(`endloop`),r.push(`endfacet`)}return r.push(`endsolid brepjs`),r.join(`
2
- `)+`
3
- `}var Oe=()=>{};function T(e,t){return{__occtWasm:!0,type:e,id:t,delete:Oe,HashCode(e){return t%e},IsNull(){return!1}}}function ke(e){return typeof e==`object`&&!!e&&e.__occtWasm}function E(e){if(ke(e))return e.id;if(typeof e==`number`)return e;throw Error(`occt-wasm: expected an OcctWasmHandle or number, got `+typeof e)}function Ae(e){switch(e.toLowerCase()){case`vertex`:return`vertex`;case`edge`:return`edge`;case`wire`:return`wire`;case`face`:return`face`;case`shell`:return`shell`;case`solid`:return`solid`;case`compsolid`:return`compsolid`;case`compound`:return`compound`;default:return`compound`}}function D(e,t){return T(Ae(e.getShapeType(t)),t)}function je(e,t){let n=new e.VectorUint32;for(let e of t)n.push_back(e);return n}function Me(e,t){let n=new e.VectorInt;for(let e of t)n.push_back(e);return n}function Ne(e,t){let n=new e.VectorDouble;for(let e of t)n.push_back(e);return n}function Pe(e){let t=[],n=e.size();for(let r=0;r<n;r++)t.push(e.get(r));return t}function Fe(e,t){let n=Array(16).fill(0);for(let r=0;r<4;r++)for(let i=0;i<4;i++)for(let a=0;a<4;a++)n[r*4+i]=n[r*4+i]+e[r*4+a]*t[a*4+i];return n}function Ie(e,t){if(typeof t==`number`)return t;if(Array.isArray(t))return t[0];if(e.length===0)throw Error(`occt-wasm: no edges provided`);let n=t(e[0]);return typeof n==`number`?n:n[0]}function Le(e,t,n){let[r,i,a]=n,o=Math.sqrt(r*r+i*i+a*a);if(o<1e-10)return t;let s=r/o,c=i/o,l=a/o;if(Math.abs(l-1)<1e-10)return t;if(Math.abs(l+1)<1e-10)return e.rotate(t,0,0,0,1,0,0,Math.PI);let u=-c,d=s,f=Math.sqrt(u*u+d*d);if(f<1e-10)return t;let p=Math.acos(Math.max(-1,Math.min(1,l)));return e.rotate(t,0,0,0,u/f,d/f,0,p)}function Re(e,t){return new Proxy(e,{get(e,n,r){let i=Reflect.get(e,n,r);return typeof i==`function`?function(...n){try{return i.apply(e,n)}catch(e){let n=WebAssembly.Exception;if(n&&e instanceof n)try{let[,n]=t.getExceptionMessage(e);throw Error(n,{cause:e})}catch(e){if(e instanceof Error&&!(e instanceof n))throw e}throw e}}:i}})}function ze(e,t){let n=function(){return T(`compound`,t.makeNullShape())};return Object.assign(Object.create(e),{TopoDS_Solid:n,TopoDS_Face:n,TopoDS_Shape:n,TopoDS_Wire:n,TopoDS_Edge:n,TopoDS_Vertex:n,TopoDS_Shell:n,TopoDS_Compound:n,gp_Pnt_3:function(e,n,r){return T(`vertex`,t.makeVertex(e,n,r))},BRepBuilderAPI_MakeEdge_3:function(e,n){let r=e,i=n,a=t.vertexPosition(r.id),o=t.vertexPosition(i.id),s=t.makeLineEdge(a.get(0),a.get(1),a.get(2),o.get(0),o.get(1),o.get(2));return a.delete(),o.delete(),{Edge:()=>T(`edge`,s),delete(){}}}})}function Be(e,t){let n=E(t),r=e.getSubShapes(n,`solid`);try{if(r.size()>1){let t=e.fuseAll(r);return{id:t,dispose:()=>{e.release(t)}}}return{id:n,dispose:()=>{}}}finally{for(let t=0,i=r.size();t<i;t++){let i=r.get(t);i!==n&&e.release(i)}r.delete()}}function Ve(e,t,n,r){return D(e,e.fuse(E(t),E(n)))}function He(e,t,n,r){let i=Be(e,n);try{return D(e,e.cut(E(t),i.id))}finally{i.dispose()}}function Ue(e,t,n,r){let i=Be(e,n);try{return D(e,e.intersect(E(t),i.id))}finally{i.dispose()}}function We(e,t,n,r){return D(e,e.section(E(t),E(n)))}function Ge(e,t,n,r){let i=je(t,n.map(E));try{return D(e,e.fuseAll(i))}finally{i.delete()}}function Ke(e,t,n,r,i){let a=je(t,r.map(E));try{return D(e,e.cutAll(E(n),a))}finally{a.delete()}}function qe(e,t,n,r){let i=je(t,r.map(E));try{return D(e,e.split(E(n),i))}finally{i.delete()}}function Je(e,t,n,r){let i=[];return e.isNull(E(t))&&i.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),e.isNull(E(n))&&i.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),i.length===0&&!e.isValid(E(t))&&i.push({operand:`base`,issue:`not-valid`,message:`Base shape is not valid`}),i.length===0&&!e.isValid(E(n))&&i.push({operand:`tool`,issue:`not-valid`,message:`Tool shape is not valid`}),{valid:i.length===0,issues:i}}function Ye(e,t,n,r,i,a){throw Error(`occt-wasm: meshBoolean is not supported (use brepkit for mesh booleans)`)}function Xe(e,t,n){return n!==t&&e.release(t),n}function Ze(e,t,n,r){return T(`solid`,e.makeBox(t,n,r))}function Qe(e,t,n,r,i){let a=e.makeCylinder(t,n);return i&&(a=Xe(e,a,Le(e,a,i))),r&&(r[0]!==0||r[1]!==0||r[2]!==0)&&(a=Xe(e,a,e.translate(a,r[0],r[1],r[2]))),T(`solid`,a)}function $e(e,t,n){let r=e.makeSphere(t);return n&&(n[0]!==0||n[1]!==0||n[2]!==0)&&(r=Xe(e,r,e.translate(r,n[0],n[1],n[2]))),T(`solid`,r)}function et(e,t,n,r,i,a){let o=e.makeCone(t,n,r);return a&&(o=Xe(e,o,Le(e,o,a))),i&&(i[0]!==0||i[1]!==0||i[2]!==0)&&(o=Xe(e,o,e.translate(o,i[0],i[1],i[2]))),T(`solid`,o)}function tt(e,t,n,r,i){let a=e.makeTorus(t,n);return i&&(a=Xe(e,a,Le(e,a,i))),r&&(r[0]!==0||r[1]!==0||r[2]!==0)&&(a=Xe(e,a,e.translate(a,r[0],r[1],r[2]))),T(`solid`,a)}function nt(e,t,n,r){return T(`solid`,e.makeEllipsoid(t,n,r))}function rt(e,t,n){return T(`solid`,e.makeBoxFromCorners(t[0],t[1],t[2],n[0],n[1],n[2]))}function it(e,t,n){return T(`face`,e.makeRectangle(t,n))}function at(e,t,n){let r=e.getSubShapes(E(t),n),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(n,r.get(t)))}finally{r.delete()}return i}function ot(e,t){return ke(t)?t.type:Ae(e.getShapeType(E(t)))}function st(e,t,n){return e.isSame(E(t),E(n))}function ct(e,t,n){return e.isEqual(E(t),E(n))}function lt(e,t,n){return n?T(n,e.downcast(E(t),n)):t}function ut(e,t){return D(e,e.copy(E(t)))}function dt(e,t,n){return e.hashCode(E(t),n)}function ft(e,t){return e.isNull(E(t))}function pt(e,t){return e.shapeOrientation(E(t)).toLowerCase()}function mt(e,n){let r=e.edgeToFaceMap(E(n),1e6),i;try{i=Pe(r)}finally{r.delete()}let a={};for(let e=0;e+1<i.length;e+=2){let n=t(i,e),r=t(i,e+1);a[n]||(a[n]=[]),a[n].push(r)}return JSON.stringify(a)}function ht(e,t,n){let r=e.sharedEdges(E(t),E(n)),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(`edge`,r.get(t)))}finally{r.delete()}return i}function gt(e,t,n){let r=e.adjacentFaces(E(t),E(n)),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(`face`,r.get(t)))}finally{r.delete()}return i}function _t(e,t,n,r){let i=je(t,n.map(E));try{return D(e,e.sew(i,r??1e-6))}finally{i.delete()}}var vt=1e-6;function yt(e,t){return e.isValid(E(t))}function bt(e,t){let n=e.healSolid(E(t),vt);return n===0?null:D(e,n)}function xt(e,t){return D(e,e.healFace(E(t),vt))}function St(e,t,n){return D(e,e.healWire(E(t),vt))}function Ct(e,t,n){return 0}function wt(e,t,n){return e.removeDegenerateEdges(E(t)),0}function Tt(e,t){return e.fixFaceOrientations(E(t)),0}function Et(e,t){return D(e,e.fixShape(E(t)))}function Dt(e,t,n,r){let i=e.tessellate(E(n),r.tolerance,r.angularTolerance);try{let e=i.positionCount,n=i.normalCount,a=i.indexCount,o=i.getPositionsPtr()>>2,s=i.getNormalsPtr()>>2,c=i.getIndicesPtr()>>2,l=new Float32Array(e);for(let n=0;n<e;n++)l[n]=t.HEAPF32[o+n]??0;let u=new Float32Array(n);if(!r.skipNormals)for(let e=0;e<n;e++)u[e]=t.HEAPF32[s+e]??0;let d=i.uvCount,f=new Float32Array(r.includeUVs?d:0);if(r.includeUVs&&d>0){let e=i.getUvsPtr()>>2;for(let n=0;n<d;n++)f[n]=t.HEAPF32[e+n]??0}let p=new Uint32Array(a);for(let e=0;e<a;e++)p[e]=t.HEAPU32[c+e]??0;let m=[],h=i.faceGroupCount;if(h>0){let e=i.getFaceGroupsPtr()>>2;for(let n=0;n<h;n+=3)m.push({start:t.HEAP32[e+n]??0,count:t.HEAP32[e+n+1]??0,faceHash:t.HEAP32[e+n+2]??0})}return{vertices:l,normals:r.skipNormals?new Float32Array:u,triangles:p,uvs:f,faceGroups:m}}finally{i.delete()}}function Ot(e,t,n,r){for(let i=0;i+1<n;i++){let n=t+i*3,a=e[n]??0,o=e[n+1]??0,s=e[n+2]??0,c=e[n+3]??0,l=e[n+4]??0,u=e[n+5]??0;a===c&&o===l&&s===u||r.push(a,o,s,c,l,u)}}function kt(e,t,n,r,i){let a=e.wireframe(E(n),r);try{let e=t.HEAPF32,n=a.getPointsPtr()>>2,r=[],i=[],o=a.edgeGroupCount,s=o>0?a.getEdgeGroupsPtr()>>2:0;for(let a=0;a<o;a+=3){let o=n+(t.HEAP32[s+a]??0),c=Math.floor((t.HEAP32[s+a+1]??0)/3),l=r.length/3;Ot(e,o,c,r),i.push({start:l,count:r.length/3-l,edgeHash:t.HEAP32[s+a+2]??0})}return{lines:new Float32Array(r),edgeGroups:i}}finally{a.delete()}}function At(e,t){return e.hasTriangulation(E(t))}function jt(e,t,n,r){e.meshShape(E(t),n,r).delete()}var Mt={line:`LINE`,circle:`CIRCLE`,ellipse:`ELLIPSE`,hyperbola:`HYPERBOLA`,parabola:`PARABOLA`,bezier:`BEZIER_CURVE`,bspline:`BSPLINE_CURVE`,offset:`OFFSET_CURVE`,other:`OTHER_CURVE`};function Nt(e,t){let n=e.curveType(E(t));return Mt[n]??n.toUpperCase()}function Pt(e,t){let n=e.curveParameters(E(t));try{return[n.get(0),n.get(1)]}finally{n.delete()}}function Ft(e,t,n){let r=e.curvePointAtParam(E(t),n);try{return[r.get(0),r.get(1),r.get(2)]}finally{r.delete()}}function It(e,t,n){let r=e.curveTangent(E(t),n);try{let i=e.curvePointAtParam(E(t),n);try{return{point:[i.get(0),i.get(1),i.get(2)],tangent:[r.get(0),r.get(1),r.get(2)]}}finally{i.delete()}}finally{r.delete()}}function Lt(e,t){return e.curveIsClosed(E(t))}function Rt(e,t){return e.curveIsPeriodic(E(t))}function zt(e,t){return 2*Math.PI}function Bt(e,t,n,r){let i=[];for(let e of n)i.push(e[0],e[1],e[2]);let a=Ne(t,i);try{return T(`edge`,e.interpolatePoints(a,r?.periodic??!1))}finally{a.delete()}}function Vt(e,t,n,r){let i=[];for(let e of n)i.push(e[0],e[1],e[2]);let a=Ne(t,i);try{return T(`edge`,e.approximatePoints(a,r?.tolerance??.001))}finally{a.delete()}}function Ht(e,t,n){return T(`edge`,e.curveDegreeElevate(E(t),n))}function Ut(e,t,n,r){return T(`edge`,e.curveKnotInsert(E(t),n,r))}function Wt(e,t,n,r){return T(`edge`,e.curveKnotRemove(E(t),n,r))}function Gt(e,t,n){let r=e.curveSplit(E(t),n);try{return[T(`edge`,r.get(0)),T(`edge`,r.get(1))]}finally{r.delete()}}function Kt(e,t){let n=qt(e,t);if(!n||n.poles.length<2)return null;let r=n.poles[n.poles.length-2];return r?[r[0],r[1],r[2]]:null}function qt(e,t){try{let n=e.getNurbsCurveData(E(t));try{let e=n.poles.size()/3,t=[];for(let r=0;r<e;r++)t.push([n.poles.get(r*3),n.poles.get(r*3+1),n.poles.get(r*3+2)]);let r=[];for(let e=0;e<n.knots.size();e++)r.push(n.knots.get(e));let i=[];for(let e=0;e<n.multiplicities.size();e++)i.push(n.multiplicities.get(e));let a=[];if(n.rational)for(let e=0;e<n.weights.size();e++)a.push(n.weights.get(e));else for(let t=0;t<e;t++)a.push(1);return{degree:n.degree,poles:t,weights:a,knots:r,multiplicities:i,isPeriodic:n.periodic,isRational:n.rational}}finally{n.delete()}}catch{return null}}function Jt(e,t){let n=e.vertexPosition(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function Yt(e,t){return e.surfaceType(E(t)).toLowerCase()}function Xt(e,t){let n=e.uvBounds(E(t));try{return{uMin:n.get(0),uMax:n.get(1),vMin:n.get(2),vMax:n.get(3)}}finally{n.delete()}}function Zt(e,t){return T(`wire`,e.outerWire(E(t)))}function Qt(e,t,n,r){let i=e.surfaceNormal(E(t),n,r);try{return[i.get(0),i.get(1),i.get(2)]}finally{i.delete()}}function $t(e,t,n,r){let i=e.pointOnSurface(E(t),n,r);try{return[i.get(0),i.get(1),i.get(2)]}finally{i.delete()}}var en=(e,t)=>[e[0]-t[0],e[1]-t[1],e[2]-t[2]],tn=(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2],nn=e=>Math.hypot(e[0],e[1],e[2]),rn=(e,t)=>[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]];function an(e,t){if(Yt(e,t)!==`cylinder`)return null;let n=Xt(e,t),r=.5*(n.vMin+n.vMax),i=n.uMin+.25*(n.uMax-n.uMin),a=n.uMin+.5*(n.uMax-n.uMin),o=Qt(e,t,i,r),s=Qt(e,t,a,r),c=$t(e,t,i,r),l=$t(e,t,a,r),u=rn(o,s),d=nn(u),f=nn(en(o,s));if(d<1e-9||f<1e-9)return null;let p=[u[0]/d,u[1]/d,u[2]/d],m=nn(en(c,l))/f,h=[c[0]-m*o[0],c[1]-m*o[1],c[2]-m*o[2]],g=nn(en(h,[l[0]-m*s[0],l[1]-m*s[1],l[2]-m*s[2]]))<1e-6?h:[c[0]+m*o[0],c[1]+m*o[1],c[2]+m*o[2]];return{origin:g,direction:p,radius:m,isDirect:(pt(e,t)===`reversed`?-1:1)*tn(o,en(c,g))>0}}function on(e,t,n){let r=en(t,e),i=en(n,e),a=rn(r,i),o=tn(a,a);if(o<1e-18)return null;let s=tn(r,r),c=tn(i,i),l=rn([s*i[0]-c*r[0],s*i[1]-c*r[1],s*i[2]-c*r[2]],a),u=1/(2*o);return[e[0]+l[0]*u,e[1]+l[1]*u,e[2]+l[2]*u]}function sn(e,t,n,r,i){return on($t(e,t,n+.1*(r-n),i),$t(e,t,n+.45*(r-n),i),$t(e,t,n+.8*(r-n),i))}function cn(e,t){let n=Xt(e,t),r=[.2,.5,.8].map(r=>sn(e,t,n.uMin,n.uMax,n.vMin+r*(n.vMax-n.vMin))).filter(e=>e!==null);if(r.length<2)return null;let i=null,a=1e-9;for(let e=0;e<r.length;e++)for(let t=e+1;t<r.length;t++){let n=r[e],o=r[t];if(!n||!o)continue;let s=en(o,n),c=nn(s);c>a&&(a=c,i={origin:n,direction:[s[0]/c,s[1]/c,s[2]/c]})}return i}function ln(e,t){let n=Yt(e,t);if(n===`cylinder`){let n=an(e,t);return n?{origin:n.origin,direction:n.direction}:null}return n===`cone`||n===`torus`||n===`revolution`?cn(e,t):null}function un(e,t){let n=an(e,t);return n?{radius:n.radius,isDirect:n.isDirect}:null}function dn(e,t,n){let r=e.uvFromPoint(E(t),n[0],n[1],n[2]);try{return r.size()<2?null:[r.get(0),r.get(1)]}finally{r.delete()}}function fn(e,t,n){let r=e.projectPointOnFace(E(t),n[0],n[1],n[2]);try{return[r.get(0),r.get(1),r.get(2)]}finally{r.delete()}}function pn(e,t,n,r,i){return e.classifyPointOnFace(E(t),n,r).toLowerCase()}function mn(e,t,n,r,i,a){let[o,s,c]=r,[l,u,d]=i,f=!!a,[p,m,h]=a??[1,0,0],g=e.projectEdges(E(n),o,s,c,l,u,d,p,m,h,f),_=n=>n===0?T(`compound`,e.makeCompound(new t.VectorUint32)):T(`compound`,n);return{visible:{outline:_(g.visibleOutline),smooth:_(g.visibleSmooth),sharp:_(g.visibleSharp)},hidden:{outline:_(g.hiddenOutline),smooth:_(g.hiddenSmooth),sharp:_(g.hiddenSharp)}}}function hn(e,t){return e.getVolume(E(t))}function gn(e,t){return e.getSurfaceArea(E(t))}function _n(e,t){return e.getLength(E(t))}function vn(e,t){let n=e.getCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function yn(e,t){let n=e.getLinearCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function bn(e,t){let n=e.getBoundingBox(E(t),!0);return{min:[n.xmin,n.ymin,n.zmin],max:[n.xmax,n.ymax,n.zmax]}}function xn(e,t){try{let n=e.getSurfaceCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}catch{return[0,0,0]}}function Sn(e,t,n){return{volume:hn(e,t),area:gn(e,t),length:n?_n(e,t):0,centerOfMass:vn(e,t),boundingBox:bn(e,t)}}function Cn(e,t){let n=E(t);return{distanceTo(t){return{value:e.distanceBetween(n,E(t)),point1:[0,0,0],point2:[0,0,0]}},dispose:Oe}}var wn=256;function Tn(e,t,n){let r=[],i=e.getSubShapes(n,`vertex`);try{let t=i.size();for(let n=0;n<t;n++){let t=e.vertexPosition(i.get(n));r.push([t.get(0),t.get(1),t.get(2)]),t.delete()}}finally{i.delete()}let a=e.getBoundingBox(n,!0),o=Math.sqrt((a.xmax-a.xmin)**2+(a.ymax-a.ymin)**2+(a.zmax-a.zmin)**2),s=Math.max(o*.01,1e-4),c;try{c=e.tessellate(n,s,.5)}catch{return r}try{let e=c.positionCount;if(e>0){let n=c.getPositionsPtr()>>2,i=t.HEAPF32,a=Math.floor(e/3),o=(a>wn?Math.ceil(a/wn):1)*3;for(let t=0;t<e;t+=o)r.push([i[n+t]??0,i[n+t+1]??0,i[n+t+2]??0])}}finally{c.delete()}return r}function En(e,t,n,r){let i=E(n),a=E(r),o=e.distanceBetween(i,a),s=Tn(e,t,i),c=Tn(e,t,a);if(s.length===0||c.length===0)return{value:o,point1:[0,0,0],point2:[0,0,0]};let l=1/0,u=s[0]??[0,0,0],d=c[0]??[0,0,0];for(let e of s)for(let t of c){let n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2],a=n*n+r*r+i*i;a<l&&(l=a,u=e,d=t)}return{value:o,point1:u,point2:d}}function Dn(e,t,n,r){let i=e.pointOnSurface(t,n,r),a=[i.get(0),i.get(1),i.get(2)];return i.delete(),a}function On(e,t,n,r){let i=e.uvBounds(t),a=i.get(0),o=i.get(1),s=i.get(2),c=i.get(3);i.delete();let l=Math.max(Math.max(o-a,1e-12)*.001,1e-6),u=Math.max(Math.max(c-s,1e-12)*.001,1e-6),d=Math.min(Math.max(n,a+l),o-l),f=Math.min(Math.max(r,s+u),c-u),p=Dn(e,t,d,f),m=Dn(e,t,d+l,f),h=Dn(e,t,d-l,f),g=Dn(e,t,d,f+u),_=Dn(e,t,d,f-u),v=Dn(e,t,d+l,f+u),y=Dn(e,t,d+l,f-u),b=Dn(e,t,d-l,f+u),x=Dn(e,t,d-l,f-u),S=l*l,C=u*u,w=4*l*u;return{Pu:[(m[0]-h[0])/(2*l),(m[1]-h[1])/(2*l),(m[2]-h[2])/(2*l)],Pv:[(g[0]-_[0])/(2*u),(g[1]-_[1])/(2*u),(g[2]-_[2])/(2*u)],Puu:[(m[0]-2*p[0]+h[0])/S,(m[1]-2*p[1]+h[1])/S,(m[2]-2*p[2]+h[2])/S],Pvv:[(g[0]-2*p[0]+_[0])/C,(g[1]-2*p[1]+_[1])/C,(g[2]-2*p[2]+_[2])/C],Puv:[(v[0]-y[0]-b[0]+x[0])/w,(v[1]-y[1]-b[1]+x[1])/w,(v[2]-y[2]-b[2]+x[2])/w]}}function kn(e,t,n,r){return Math.abs(e)+Math.abs(t)>=Math.abs(n)+Math.abs(r)?Math.abs(e)+Math.abs(t)<1e-12?[1,0]:[-t,e]:Math.abs(n)+Math.abs(r)<1e-12?[0,1]:[-r,n]}function An(e,t,n){let r=e[0]*t[0]+e[1]*n[0],i=e[0]*t[1]+e[1]*n[1],a=e[0]*t[2]+e[1]*n[2],o=Math.sqrt(r*r+i*i+a*a);return o<1e-12?[1,0,0]:[r/o,i/o,a/o]}function jn(e,t){let n=Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);if(n<1e-12)return{maxDirection:[1,0,0],minDirection:[0,1,0]};let r=e[0]/n,i=e[1]/n,a=e[2]/n,o=r*t[0]+i*t[1]+a*t[2],s=t[0]-o*r,c=t[1]-o*i,l=t[2]-o*a,u=Math.sqrt(s*s+c*c+l*l);if(u<1e-12){let e=Math.abs(r)<.9?[1,0,0]:[0,1,0],t=i*e[2]-a*e[1],n=a*e[0]-r*e[2],o=r*e[1]-i*e[0],s=Math.sqrt(t*t+n*n+o*o)||1;return{maxDirection:[r,i,a],minDirection:[t/s,n/s,o/s]}}return{maxDirection:[r,i,a],minDirection:[s/u,c/u,l/u]}}function Mn(e,t,n,r,i,a){let{Pu:o,Pv:s,Puu:c,Pvv:l,Puv:u}=On(e,t,n,r),d=o[1]*s[2]-o[2]*s[1],f=o[2]*s[0]-o[0]*s[2],p=o[0]*s[1]-o[1]*s[0],m=Math.sqrt(d*d+f*f+p*p),h=o[0]*o[0]+o[1]*o[1]+o[2]*o[2],g=o[0]*s[0]+o[1]*s[1]+o[2]*s[2],_=s[0]*s[0]+s[1]*s[1]+s[2]*s[2];if(m<1e-12||h*_-g*g<1e-24)return jn(o,s);let v=(c[0]*d+c[1]*f+c[2]*p)/m,y=(u[0]*d+u[1]*f+u[2]*p)/m,b=(l[0]*d+l[1]*f+l[2]*p)/m,x=h*_-g*g,S=(v*_-y*g)/x,C=(y*_-b*g)/x,w=(y*h-v*g)/x,ee=(b*h-y*g)/x;if(Math.abs(i-a)<1e-9*(Math.abs(i)+Math.abs(a)+1))return jn(o,s);let te=kn(S-i,C,w,ee-i),ne=kn(S-a,C,w,ee-a);return{maxDirection:An(te,o,s),minDirection:An(ne,o,s)}}function Nn(e,t,n,r){let i=E(t),a=e.surfaceCurvature(i,n,r),o=a.get(0),s=a.get(1),c=a.get(2),l=a.get(3);a.delete();let{maxDirection:u,minDirection:d}=Mn(e,i,n,r,c,l);return{gaussian:s,mean:o,max:c,min:l,maxDirection:u,minDirection:d}}function Pn(e,t,n,r,i){let a=Ie(r,i),o=je(t,r.map(E));try{return D(e,e.fillet(E(n),o,a))}finally{o.delete()}}function Fn(e,t,n,r,i){let a=Ie(r,i),o=je(t,r.map(E));try{return D(e,e.chamfer(E(n),o,a))}finally{o.delete()}}function In(e,t,n,r,i,a){let o=je(t,r.map(E));try{return D(e,e.chamferDistAngle(E(n),o,i,a))}finally{o.delete()}}function Ln(e,t,n,r,i,a){let o=je(t,r.map(E));try{return D(e,e.shell(E(n),o,i,a??.001))}finally{o.delete()}}function Rn(e,t,n){return D(e,e.thicken(E(t),n,.001))}function zn(e,t,n,r){return D(e,e.offset(E(t),n,r??1e-6))}function Bn(e,t,n){let r=JSON.parse(n);if(r.edgeId!==void 0&&r.startRadius!==void 0&&r.endRadius!==void 0)return D(e,e.filletVariable(E(t),r.edgeId,r.startRadius,r.endRadius));throw Error(`occt-wasm: filletVariable (complex spec) not implemented`)}function Vn(e,t,n,r,i,a){let o=E(t);for(let t of n){let n=(typeof a==`function`?a(t):a)*Math.PI/180;o=e.draft(o,E(t),n,r[0],r[1],r[2])}return D(e,o)}function Hn(e,t,n,r){let i=je(t,r.map(E));try{return D(e,e.defeature(E(n),i,.001))}finally{i.delete()}}function Un(e,t,n,r){let i=0;return r===`intersection`||r===1?i=1:r===`tangent`||r===2?i=2:typeof r==`number`&&(i=r),D(e,e.offsetWire2D(E(t),n,i))}function Wn(e,t){return D(e,e.simplify(E(t)))}function Gn(e,t){return D(e,e.reverseShape(E(t)))}function Kn(e,t,n,r){let i=n[0]*r,a=n[1]*r,o=n[2]*r;return D(e,e.extrude(E(t),i,a,o))}function qn(e,t,n,r){let i=n.origin,a=n.direction;return D(e,e.revolve(E(t),i.x,i.y,i.z,a.x,a.y,a.z,r))}function Jn(e,t,n,r,i,a){let o=i?E(i):0,s=a?E(a):0,c=je(t,n.map(E));try{return o||s?D(e,e.loftWithVertices(c,!0,r??!1,o,s)):D(e,e.loft(c,!0,r??!1))}finally{c.delete()}}function Yn(e,t,n,r){let i=r?.transitionMode??0;return D(e,e.sweep(E(t),E(n),i))}function Xn(e,t,n){return D(e,e.simplePipe(E(t),E(n)))}function Zn(e,t,n,r){let i=r?.frenet??!1,a=r?.transitionMode===`round`,o=r?.shellMode??!1,s=D(e,e.sweepPipeShell(E(t),E(n),i,a));if(o){let t=e.getSubShapes(E(s),`wire`);try{return{shape:s,firstShape:t.size()>0?D(e,t.get(0)):s,lastShape:t.size()>1?D(e,t.get(t.size()-1)):s}}finally{t.delete()}}return s}function Qn(e,t,n,r){let i=r?.solid??!0,a=r?.ruled??!1,o=r?.startVertex?E(r.startVertex):0,s=r?.endVertex?E(r.endVertex):0,c=je(t,n.map(E));try{return o||s?D(e,e.loftWithVertices(c,i,a,o,s)):D(e,e.loft(c,i,a))}finally{c.delete()}}function $n(e,t,n,r){let i={__occtWasmLaw:!0,profile:t,length:n,endFactor:r,Trim(e,t,n){return{...i,trimFirst:e,trimLast:t}},delete(){}};return i}function er(e,t,n,r,i){return D(e,e.revolveVec(E(t),n[0],n[1],n[2],r[0],r[1],r[2],i))}function tr(e,t,n,r,i,a,o){let s=i??10;return D(e,e.draftPrism(E(t),0,0,s,a))}function nr(e){let t=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];for(let n of e)if(n.type===`translate`)t=Fe([1,0,0,n.x,0,1,0,n.y,0,0,1,n.z,0,0,0,1],t);else{let e=n.axis??[0,0,1],r=n.center??[0,0,0],i=n.angle*Math.PI/180,a=Math.cos(i),o=Math.sin(i),s=1-a,c=Math.sqrt(e[0]**2+e[1]**2+e[2]**2),[l,u,d]=[e[0]/c,e[1]/c,e[2]/c],f=s*l*l+a,p=s*l*u-o*d,m=s*l*d+o*u,h=s*u*l+o*d,g=s*u*u+a,_=s*u*d-o*l,v=s*d*l-o*u,y=s*d*u+o*l,b=s*d*d+a;t=Fe([f,p,m,r[0]-(f*r[0]+p*r[1]+m*r[2]),h,g,_,r[1]-(h*r[0]+g*r[1]+_*r[2]),v,y,b,r[2]-(v*r[0]+y*r[1]+b*r[2]),0,0,0,1],t)}return{handle:{__type:`transform_matrix`,matrix:t,delete:Oe},dispose:Oe}}function rr(e){let t=e,n;return Array.isArray(t)?n=t:typeof t==`object`&&t&&(Array.isArray(t.matrix)?n=t.matrix:Array.isArray(t.elements)&&(n=t.elements)),n&&n.length===16&&(n=n.slice(0,12)),n&&n.length>=12?n:void 0}function ir(e,t,n,r){let i=rr(r);if(i){let r=Ne(t,i);try{return D(e,e.transform(E(n),r))}finally{r.delete()}}return T(e.getShapeType(E(n)),e.copy(E(n)))}function ar(e,t,n,r){if(typeof e.located==`function`){let i=rr(r);if(i){let r=Ne(t,i);try{return D(e,e.located(E(n),r))}finally{r.delete()}}}return ir(e,t,n,r)}function or(e,t,n,r,i){return D(e,e.translate(E(t),n,r,i))}function sr(e,t,n,r,i){let a=r??[0,0,1],o=i??[0,0,0];return D(e,e.rotate(E(t),o[0],o[1],o[2],a[0],a[1],a[2],n))}function cr(e,t,n,r){return D(e,e.mirror(E(t),n[0],n[1],n[2],r[0],r[1],r[2]))}function lr(e,t,n,r){return D(e,e.scale(E(t),n[0],n[1],n[2],r))}function ur(e,t,n,r,i,a){let o=Ne(t,[r[0],r[1],r[2],i[0],r[3],r[4],r[5],i[1],r[6],r[7],r[8],i[2]]);try{return D(e,e.generalTransform(E(n),o))}finally{o.delete()}}function dr(e,t,n,r,i){let a=e.curvePointAtParam(E(r),i),[o,s,c]=(()=>{try{return[a.get(0),a.get(1),a.get(2)]}finally{a.delete()}})(),l=e.curveTangent(E(r),i),[u,d,f]=(()=>{try{return[l.get(0),l.get(1),l.get(2)]}finally{l.delete()}})(),p,m,h;Math.abs(u)<.9?(p=0,m=f,h=-d):(p=-f,m=0,h=u);let g=Math.sqrt(p*p+m*m+h*h);p/=g,m/=g,h/=g;let _=d*h-f*m,v=f*p-u*h,y=u*m-d*p,b=new t.VectorDouble;b.push_back(p),b.push_back(_),b.push_back(u),b.push_back(o),b.push_back(m),b.push_back(v),b.push_back(d),b.push_back(s),b.push_back(h),b.push_back(y),b.push_back(f),b.push_back(c);try{return D(e,e.transform(E(n),b))}finally{b.delete()}}function fr(e,t,n,r,i){let a=e.linearPattern(E(t),n[0],n[1],n[2],r,i),o=e.getSubShapes(a,`solid`),s=[];try{let e=o.size();for(let t=0;t<e;t++)s.push(T(`solid`,o.get(t)))}finally{o.delete()}if(s.length===0){let t=e.iterShapes(a);try{let n=t.size();for(let r=0;r<n;r++)s.push(D(e,t.get(r)))}finally{t.delete()}}return e.release(a),s}function pr(e,t,n,r,i,a){let o=e.circularPattern(E(t),n[0],n[1],n[2],r[0],r[1],r[2],i,a),s=e.getSubShapes(o,`solid`),c=[];try{let e=s.size();for(let t=0;t<e;t++)c.push(T(`solid`,s.get(t)))}finally{s.delete()}if(c.length===0){let t=e.iterShapes(o);try{let n=t.size();for(let r=0;r<n;r++)c.push(D(e,t.get(r)))}finally{t.delete()}}return e.release(o),c}function mr(e,t){return t.map(t=>{switch(t.type){case`translate`:return or(e,t.shape,t.x,t.y,t.z);case`rotate`:return sr(e,t.shape,t.angle,t.axis,t.center);case`scale`:return lr(e,t.shape,t.center,t.factor);case`mirror`:return cr(e,t.shape,t.origin,t.normal);default:throw Error(`occt-wasm: transformBatch unknown type`)}})}function hr(e,t){if(t===0)return{min:[0,0,0],max:[0,0,0]};let n=1/0,r=1/0,i=1/0,a=-1/0,o=-1/0,s=-1/0;for(let c=0;c<t;c++){let t=c*3,l=e[t]??0,u=e[t+1]??0,d=e[t+2]??0;l<n&&(n=l),u<r&&(r=u),d<i&&(i=d),l>a&&(a=l),u>o&&(o=u),d>s&&(s=d)}return{min:[n,r,i],max:[a,o,s]}}function gr(e,t,n,r,i,a,o,s){return{asset:{version:`2.0`,generator:`brepjs occt-wasm`},scene:0,scenes:[{nodes:[0]}],nodes:[{mesh:0}],meshes:[{primitives:[{attributes:{POSITION:0,NORMAL:1},indices:2,mode:4}]}],buffers:[{byteLength:o}],bufferViews:[{buffer:0,byteOffset:0,byteLength:r,target:34962},{buffer:0,byteOffset:r,byteLength:i,target:34962},{buffer:0,byteOffset:r+i,byteLength:a,target:34963}],accessors:[{bufferView:0,componentType:5126,count:e,type:`VEC3`,min:s.min,max:s.max},{bufferView:1,componentType:5126,count:t,type:`VEC3`},{bufferView:2,componentType:5125,count:n,type:`SCALAR`}]}}function _r(e,t,n){if(n.length===1)return e.exportStep(E(n[0]));let r=t(n);return e.exportStep(E(r))}function vr(e,t,n,r=Se,i=Ce){let{vertices:a,triangles:o}=e(t,{tolerance:r,angularTolerance:i,skipNormals:!0});return n?Ee(a,o):De(a,o)}function yr(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(t);return[D(e,e.importStep(n))]}function br(e,t,n){let r=typeof n==`string`?new TextEncoder().encode(n):new Uint8Array(n),i=t;if(i.FS)i.FS.writeFile(`/tmp/import.stl`,r);else{let t=Array.from(r,e=>String.fromCharCode(e)).join(``);return D(e,e.importStl(t))}return D(e,e.importStl(``))}function xr(e,t,n){if(n.length===1)return e.exportIges(E(n[0]));let r=t(n);return e.exportIges(E(r))}function Sr(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(t);return[D(e,e.importIges(n))]}function Cr(e,t,n,r){if(n.length===0)return``;let i=kr(e,t,n);try{return Ar(e,i)}finally{i.delete()}}function wr(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=i.length/3,c=a.length/3,l=o.length,u=i.byteLength,d=a.byteLength,f=o.byteLength,p=u+d+f,m=p+(4-p%4)%4,h=gr(s,c,l,u,d,f,m,hr(i,s)),g=new TextEncoder().encode(JSON.stringify(h)),_=g.byteLength+(4-g.byteLength%4)%4,v=20+_+8+m,y=new ArrayBuffer(v),b=new DataView(y);b.setUint32(0,1179937895,!0),b.setUint32(4,2,!0),b.setUint32(8,v,!0),b.setUint32(12,_,!0),b.setUint32(16,1313821514,!0);let x=new Uint8Array(y,20,_);x.set(g);for(let e=g.byteLength;e<_;e++)x[e]=32;let S=20+_;b.setUint32(S,m,!0),b.setUint32(S+4,5130562,!0);let C=S+8;return new Uint8Array(y,C,u).set(new Uint8Array(i.buffer,i.byteOffset,u)),new Uint8Array(y,C+u,d).set(new Uint8Array(a.buffer,a.byteOffset,d)),new Uint8Array(y,C+u+d,f).set(new Uint8Array(o.buffer,o.byteOffset,f)),y}function Tr(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=[`# brepjs OBJ export`],c=i.length/3;for(let e=0;e<c;e++){let t=e*3;s.push(`v ${i[t]??0} ${i[t+1]??0} ${i[t+2]??0}`)}let l=a.length/3;for(let e=0;e<l;e++){let t=e*3;s.push(`vn ${a[t]??0} ${a[t+1]??0} ${a[t+2]??0}`)}let u=e=>{let t=(o[e]??0)+1,n=(o[e+1]??0)+1,r=(o[e+2]??0)+1;s.push(`f ${t}//${t} ${n}//${n} ${r}//${r}`)};if(r.faceGroups.length>0)for(let e of r.faceGroups){s.push(`g face_${e.faceHash}`);let t=e.count/3;for(let n=0;n<t;n++)u(e.start+n*3)}else{let e=o.length/3;for(let t=0;t<e;t++)u(t*3)}return new TextEncoder().encode(s.join(`
4
- `)+`
5
- `).buffer}function Er(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=i.length/3,c=o.length/3,l=a.length===i.length,u=[`ply`,`format ascii 1.0`,`comment brepjs PLY export`,`element vertex ${s}`,`property float x`,`property float y`,`property float z`];l&&u.push(`property float nx`,`property float ny`,`property float nz`),u.push(`element face ${c}`,`property list uchar int vertex_index`,`end_header`);for(let e=0;e<s;e++){let t=e*3,n=i[t]??0,r=i[t+1]??0,o=i[t+2]??0;if(l){let e=a[t]??0,i=a[t+1]??0,s=a[t+2]??0;u.push(`${n} ${r} ${o} ${e} ${i} ${s}`)}else u.push(`${n} ${r} ${o}`)}for(let e=0;e<c;e++){let t=o[e*3]??0,n=o[e*3+1]??0,r=o[e*3+2]??0;u.push(`3 ${t} ${n} ${r}`)}return new TextEncoder().encode(u.join(`
6
- `)+`
7
- `).buffer}function Dr(e,t){return e.toBREP(E(t))}function Or(e,t){return D(e,e.fromBREP(t))}function kr(e,t,n){let r=e.xcafNewDocument();for(let t of n){let n=e.xcafAddShape(r,E(t.shape));if(t.name&&e.xcafSetName(r,n,t.name),t.color){let[i,a,o]=t.color;e.xcafSetColor(r,n,i/255,a/255,o/255)}}return T(`compound`,r)}function Ar(e,t,n){let r=E(t),i=e.xcafGetRootLabels(r),a=(()=>{try{return i.size()>0}finally{i.delete()}})();try{return a?e.xcafExportSTEP(r):``}finally{e.xcafClose(r)}}function jr(e,t,n,r){if(n.length===0)return``;let i=kr(e,t,n.map(e=>({shape:e.shape,name:e.name??``,color:e.color})));try{return Ar(e,i)}finally{i.delete()}}function Mr(e,t,n,r){return T(`vertex`,e.makeVertex(t,n,r))}function Nr(e,t){throw ke(t)?Error(`occt-wasm: makeEdge from curve handle is not implemented`):Error(`occt-wasm: makeEdge is not implemented`)}function Pr(e,t,n){let r=je(t,n.map(E));try{return T(`wire`,e.makeWire(r))}finally{r.delete()}}function Fr(e,t,n){let r=[],i=new Set(n.map(e=>E(e)));for(let t of n){let n=e.getSubShapes(E(t),`edge`);try{let e=n.size();for(let t=0;t<e;t++)r.push(n.get(t))}finally{n.delete()}}let a=je(t,r);try{return T(`wire`,e.makeWire(a))}finally{a.delete();for(let t of r)i.has(t)||e.release(t)}}function Ir(e,t,n){return T(`face`,e.makeFace(E(t)))}function Lr(e,t,n){return T(`edge`,e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function Rr(e,t,n,r){return T(`edge`,e.makeCircleEdge(t[0],t[1],t[2],n[0],n[1],n[2],r))}function zr(e,t,n,r,i,a){return T(`edge`,e.makeCircleArc(t[0],t[1],t[2],n[0],n[1],n[2],r,i,a))}function Br(e,t,n,r){return T(`edge`,e.makeArcEdge(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]))}function Vr(e,t,n,r,i){return T(`edge`,e.makeEllipseEdge(t[0],t[1],t[2],n[0],n[1],n[2],r,i))}function Hr(e,t,n,r,i,a,o){return T(`edge`,e.makeEllipseArc(t[0],t[1],t[2],n[0],n[1],n[2],r,i,a,o))}function Ur(e,t,n){let r=[];for(let e of n)r.push(e[0],e[1],e[2]);let i=Ne(t,r);try{return T(`edge`,e.makeBezierEdge(i))}finally{i.delete()}}function Wr(e,t,n,r){let[i,a,o]=t,[s,c,l]=n,[u,d,f]=r;return T(`edge`,e.makeTangentArc(i,a,o,s,c,l,u,d,f))}function Gr(e,t,n,r,i,a){let o=i?i[0]:0,s=i?i[1]:0,c=i?i[2]:0,l=a?a[0]:0,u=a?a[1]:0,d=a?a[2]:1,f=e.makeHelixWire(o,s,c,l,u,d,t,n,r);return e.buildCurves3d(f),T(`wire`,f)}function Kr(e,t,n){let r=je(t,n.map(E));try{return T(`compound`,e.makeCompound(r))}finally{r.delete()}}function qr(e,t){return T(`solid`,e.solidFromShell(E(t)))}function Jr(e,t,n,r,i){let a=[];for(let[t,i,o]of r){let r=n[t],s=n[i],c=n[o];!r||!s||!c||a.push(e.buildTriFace(r.x,r.y,r.z,s.x,s.y,s.z,c.x,c.y,c.z))}let o=je(t,a);try{let t=e.sewAndSolidify(o,i),n=e.fixFaceOrientations(t);return n!==t&&e.release(t),D(e,n)}finally{o.delete();for(let t of a)e.release(t)}}function Yr(e,t){return T(`face`,e.makeNonPlanarFace(E(t)))}function Xr(e,t,n,r){let i=je(t,r.map(E));try{return T(`face`,e.addHolesInFace(E(n),i))}finally{i.delete()}}function Zr(e,t,n){let r=e.getSubShapes(E(n),`wire`),i=(()=>{try{return r.size()-1}finally{r.delete()}})(),a=[];for(let e=0;e<i;e++)a.push(e);let o=Me(t,a);try{return T(`face`,e.removeHolesFromFace(E(n),o))}finally{o.delete()}}function Qr(e,t,n){let r=E(t);return T(`face`,e.makeFaceOnSurface(r,E(n)))}function $r(e,t,n,r,i){let a=new t.VectorDouble;for(let[e,t,r]of n)a.push_back(e),a.push_back(t),a.push_back(r);try{return T(`face`,e.bsplineSurface(a,r,i))}finally{a.delete()}}function ei(e,t,n,r,i){let a=[];for(let t=0;t<r-1;t++)for(let r=0;r<i-1;r++){let o=t*i+r,s=(t+1)*i+r,c=t*i+(r+1),l=(t+1)*i+(r+1),u=n[o],d=n[s],f=n[c],p=n[l];u&&d&&f&&a.push(e.buildTriFace(u[0],u[1],u[2],d[0],d[1],d[2],f[0],f[1],f[2])),d&&p&&f&&a.push(e.buildTriFace(d[0],d[1],d[2],p[0],p[1],p[2],f[0],f[1],f[2]))}let o=je(t,a);try{return D(e,e.sewAndSolidify(o,.001))}finally{o.delete();for(let t of a)e.release(t)}}function ti(e,t,n,r){let i=e.buildTriFace(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]);return i===0?null:T(`face`,i)}function ni(e,t,n,r){let i=je(t,n.map(E));try{let t=e.sewAndSolidify(i,r),n=e.fixFaceOrientations(t);return n!==t&&e.release(t),T(`solid`,n)}finally{i.delete()}}function ri(e,t,n){return{x:e,y:t,z:n,__type:`point3d`,delete:Oe}}function ii(e,t,n){return{x:e,y:t,z:n,__type:`direction3d`,delete:Oe}}function ai(e,t,n){return{x:e,y:t,z:n,__type:`vector3d`,delete:Oe}}function oi(e,t,n,r,i,a){return{origin:{x:e,y:t,z:n},direction:{x:r,y:i,z:a},__type:`axis1`,delete:Oe}}function si(e,t,n,r,i,a,o,s,c){return{origin:{x:e,y:t,z:n},zDir:{x:r,y:i,z:a},xDir:o===void 0?void 0:{x:o,y:s,z:c},__type:`axis2`,delete:Oe}}function ci(e,t,n,r,i,a,o,s,c){return{origin:{x:e,y:t,z:n},zDir:{x:r,y:i,z:a},xDir:o===void 0?void 0:{x:o,y:s,z:c},__type:`axis3`,delete:Oe}}function li(e){return e}function ui(e){return e}function di(e,t){return{x:e,y:t}}function fi(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`occt-wasm: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function pi(e,t){return{x:e,y:t}}function mi(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete(){}}}function hi(e){return e}function gi(e,t,n,r){return ui(x(e,t,n,r))}function _i(e,t,n,r){return ui(S(e,t,n,r))}function vi(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));if(Math.abs(o)<1e-12)return ui(x(e,t,i,a));let s=((e*e+t*t)*(r-a)+(n*n+r*r)*(a-t)+(i*i+a*a)*(t-r))/o,c=((e*e+t*t)*(i-n)+(n*n+r*r)*(e-i)+(i*i+a*a)*(n-e))/o,l=Math.sqrt((e-s)**2+(t-c)**2),u=Math.atan2(t-c,e-s),d=Math.atan2(r-c,n-s),f=Math.atan2(a-c,i-s),p=d-u;p<0&&(p+=2*Math.PI);let m=f-u;m<0&&(m+=2*Math.PI);let h=p<m,g=S(s,c,l,h);if(!h){let e=-u,t=-f;return t<e-1e-9&&(t+=2*Math.PI),ui({__bk2d:`trimmed`,basis:g,tStart:e,tEnd:t})}let _=f;return _<u-1e-9&&(_+=2*Math.PI),ui({__bk2d:`trimmed`,basis:g,tStart:u,tEnd:_})}function yi(e,t,n,r,i,a){let o=Math.sqrt(n*n+r*r),s=o>0?n/o:0,c=o>0?r/o:0,l=e-i,u=t-a,d=2*(u*s-l*c);if(Math.abs(d)<1e-12)return ui(x(e,t,i,a));let f=-(l*l+u*u)/d,p=e-f*c,m=t+f*s,h=Math.abs(f),g=Math.atan2(t-m,e-p),_=Math.atan2(a-m,i-p),v=-(t-m)/h,y=(e-p)/h,b=v*s+y*c>0,C=S(p,m,h,b);if(!b){let e=-g,t=-_;return t<e-1e-9&&(t+=2*Math.PI),ui({__bk2d:`trimmed`,basis:C,tStart:e,tEnd:t})}let w=_;return w<g-1e-9&&(w+=2*Math.PI),ui({__bk2d:`trimmed`,basis:C,tStart:g,tEnd:w})}function bi(e,t,n,r,i,a,o){return ui(ee(e,t,n,r,i??1,a??0,o??!0))}function xi(e,t,n,r,i,a,o,s,c){return ui({...ee(e,t,n,r,o??1,s??0,c??!0),__bk2d:`ellipse`,startAngle:i,endAngle:a})}function Si(e){return ui(te(e))}function Ci(e,t){let n=e,r=n.length,i=Math.max(1,Math.min(t?.degMax??3,r-1)),a=[0],o=[i+1],s=r-i-1;for(let e=1;e<=s;e++)a.push(e/(s+1)),o.push(1);return a.push(1),o.push(i+1),ui({__bk2d:`bspline`,poles:n,knots:a,multiplicities:o,degree:i,isPeriodic:!1})}function wi(e,t){return _(li(e),t)}function Ti(e,t){return{point:_(li(e),t),tangent:v(li(e),t)}}function Ei(e){return y(li(e))}function Di(e){let t=li(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return b(t)}function Oi(e,t,n){return ui({__bk2d:`trimmed`,basis:li(e),tStart:t,tEnd:n})}function ki(e){return ui(JSON.parse(JSON.stringify(li(e))))}function Ai(e,t){let n=li(e),r=y(n),i=[];for(let e=0;e<=20;e++){let a=r.first+(r.last-r.first)*e/20,[o,s]=_(n,a),[c,l]=v(n,a),u=Math.sqrt(c*c+l*l)||1;i.push([o-l/u*t,s+c/u*t])}return ui(te(i.length<=25?i:i.filter((e,t)=>t%2==0||t===i.length-1)))}function ji(e,t,n){return ui(ne(li(e),t,n))}function Mi(e,t,n,r){return ui(re(li(e),t,n,r))}function Ni(e,t,n,r){return ui(ie(li(e),t,n,r))}function Pi(e,t,n){return ui(ae(li(e),t,n))}function Fi(e,t,n,r,i){return ui(oe(li(e),t,n,r,i))}function Ii(e,t,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return e;let s=-i/o,c=r/o,l=a-1,u=1+l*s*s,d=l*s*c,f=l*c*s,p=1+l*c*c,m=t-u*t-d*n,h=n-f*t-p*n,g=li(e),v=y(g),b=[];for(let e=0;e<=20;e++){let[t,n]=_(g,v.first+(v.last-v.first)*e/20);b.push([u*t+d*n+m,f*t+p*n+h])}return ui(te(b))}function Li(e,t,n,r,i,a){return Ii(e,t,n,r,i,a)}function Ri(){return{type:`identity2d`,delete(){}}}function zi(e,t,n,r,i){return{type:`affinity2d`,axOriginX:e,axOriginY:t,axDirX:n,axDirY:r,ratio:i,delete(){}}}function Bi(e,t){return{type:`translate2d`,dx:e,dy:t,delete(){}}}function Vi(e,t,n,r,i,a,o){return{type:`mirror2d`,cx:e,cy:t,mode:n,originX:r,originY:i,dirX:a,dirY:o,delete(){}}}function Hi(e,t,n){return{type:`rotate2d`,angle:e,cx:t,cy:n,delete(){}}}function Ui(e,t,n){return{type:`scale2d`,sx:e,sy:e,cx:t,cy:n,delete(){}}}function Wi(e,t,n){let r=e;r.dx=(Number(r.dx)||0)+t,r.dy=(Number(r.dy)||0)+n}function Gi(e,t){let n=e,r=t;n.dx=(Number(n.dx)||0)+(Number(r.dx)||0),n.dy=(Number(n.dy)||0)+(Number(r.dy)||0),r.type===`scale2d`&&(n.type=`scale2d`,n.sx=r.sx,n.sy=r.sy)}function Ki(e,t){let n=t;return n.type===`translate2d`?ji(e,Number(n.dx)||0,Number(n.dy)||0):n.type===`rotate2d`?Mi(e,Number(n.angle)||0,Number(n.cx)||0,Number(n.cy)||0):n.type===`scale2d`?Ni(e,Number(n.sx)||1,Number(n.cx)||0,Number(n.cy)||0):n.type===`mirror2d`?Pi(e,Number(n.ox)||0,Number(n.oy)||0):n.type===`affinity2d`?Ii(e,Number(n.axOriginX)||0,Number(n.axOriginY)||0,Number(n.axDirX)||0,Number(n.axDirY)||0,Number(n.ratio)||1):Number(n.dx)||Number(n.dy)?ji(e,Number(n.dx)||0,Number(n.dy)||0):e}function qi(e,t,n){let r=se(li(e),li(t),n);return{points:r.points,segments:r.segments.map(e=>ui(e))}}function Ji(e,t,n){let r=li(e),i=y(r),a=(e,r,i)=>{if(e.__bk2d===`line`){let a=(t-e.ox)*e.dx+(n-e.oy)*e.dy,o=Math.max(r,Math.min(i,a)),[s,c]=_(e,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}let a=r,o=1/0;for(let s=0;s<=200;s++){let c=r+(i-r)*s/200,[l,u]=_(e,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}return{param:a,distance:Math.sqrt(o)}};if(r.__bk2d===`trimmed`){let e=r.tStart,t=r.tEnd,n=a(r.basis,e,t);if(!n)return null;let i=t-e,o=i>1e-15?(n.param-e)/i:0;return{param:Math.max(0,Math.min(1,o)),distance:n.distance}}return a(r,i.first,i.last)}function Yi(e,t,n,r,i,a){let o=1/0;for(let s=0;s<=20;s++){let c=n+(r-n)*(s/20),[l,u]=_(li(e),c);for(let e=0;e<=20;e++){let n=i+(a-i)*(e/20),[r,s]=_(li(t),n),c=Math.sqrt((r-l)**2+(s-u)**2);c<o&&(o=c)}}return o}function Xi(e,t){let n=li(e),r=y(n),i=Math.min(Math.max(t+1,10),100),a=[];for(let e=0;e<i;e++){let t=r.first+(r.last-r.first)*e/(i-1);a.push(_(n,t))}let o=Math.min(3,i-1),s=a.length,c=[],l=[],u=s-o-1;c.push(0),l.push(o+1);for(let e=1;e<=u;e++)c.push(e/(u+1)),l.push(1);return c.push(1),l.push(o+1),ui({__bk2d:`bspline`,poles:a,knots:c,multiplicities:l,degree:o,isPeriodic:!1})}function Zi(e){let t=li(e);for(;t.__bk2d===`trimmed`;)t=t.basis;if(t.__bk2d!==`bspline`)return[e];let n=t.poles,r=t.degree,i=[];for(let e=0;e<t.knots.length;e++){let n=t.knots[e]??0,r=t.multiplicities[e]??0;for(let e=0;e<r;e++)i.push(n)}let a=n.length-1+r+1;if(r<1||i.length!==a+1)return[ui(te(n))];let o=e=>[e[0],e[1]],s=[],c=r,l=r+1,u=[];for(let e=0;e<=r;e++)u[e]=o(n[e]);let d=[];for(;l<a;){let e=l;for(;l<a&&i[l+1]===i[l];)l++;let t=l-e+1;if(t<r){let e=i[l]-i[c],n=[];for(let a=r;a>t;a--)n[a-t-1]=e/(i[c+a]-i[c]);let s=r-t;for(let e=1;e<=s;e++){let i=s-e,c=t+e;for(let e=r;e>=c;e--){let t=n[e-c],r=u[e],i=u[e-1];u[e]=[t*r[0]+(1-t)*i[0],t*r[1]+(1-t)*i[1]]}l<a&&(d[i]=o(u[r]))}}if(s.push(u),l<a){for(let e=r-t;e<=r;e++)d[e]=o(n[l-r+e]);u=d,d=[],c=l,l++}}return s.map(e=>ui(te(e)))}function Qi(){return ve()}function $i(e,t,n){ye(e,li(t),n)}function ea(e){return{xMin:e.xMin,yMin:e.yMin,xMax:e.xMax,yMax:e.yMax}}function ta(e,t){e.xMin=Math.min(e.xMin,t.xMin),e.yMin=Math.min(e.yMin,t.yMin),e.xMax=Math.max(e.xMax,t.xMax),e.yMax=Math.max(e.yMax,t.yMax)}function na(e,t){return e.xMax<t.xMin||e.xMin>t.xMax||e.yMax<t.yMin||e.yMin>t.yMax}function ra(e,t,n){return t<e.xMin||t>e.xMax||n<e.yMin||n>e.yMax}function ia(e){let t=li(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function aa(e){let t=li(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function oa(e){let t=li(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`bezier`?t.poles:null}function sa(e){let t=li(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`bezier`?t.poles.length-1:null}function ca(e){return ge(li(e))}function la(e){return ui(_e(e))}function ua(e,t){let n=y(li(e)),r=[n.first,...t.sort((e,t)=>e-t),n.last],i=[];for(let t=0;t<r.length-1;t++){let a=r[t]??n.first,o=r[t+1]??n.last;i.push(Oi(e,a,o))}return i}function da(e,t,n,r,i,a){let o=li(n),[s,c,l]=r,[u,d,f]=i,[p,m,h]=a,g=d*h-f*m,v=f*p-u*h,b=u*m-d*p,x=(e,t)=>[s+e*p+t*g,c+e*m+t*v,l+e*h+t*b],S=o.__bk2d;if(S===`line`){let t=y(o),[n,r]=_(o,t.first),[i,a]=_(o,t.last),s=x(n,r),c=x(i,a);return T(`edge`,e.makeLineEdge(s[0],s[1],s[2],c[0],c[1],c[2]))}if(S===`trimmed`){let t=o;if(t.basis&&t.basis.__bk2d===`line`){let[t,n]=_(o,0),[r,i]=_(o,1),a=x(t,n),s=x(r,i);return T(`edge`,e.makeLineEdge(a[0],a[1],a[2],s[0],s[1],s[2]))}if(t.basis&&t.basis.__bk2d===`circle`){let t=y(o),[n,r]=_(o,t.first),[i,a]=_(o,(t.first+t.last)/2),[s,c]=_(o,t.last),l=x(n,r),u=x(i,a),d=x(s,c);return T(`edge`,e.makeArcEdge(l[0],l[1],l[2],u[0],u[1],u[2],d[0],d[1],d[2]))}}if(S===`circle`){let t=o;if(t.cx!==void 0&&t.radius!==void 0){let[n,r,i]=x(t.cx,t.cy);return T(`edge`,e.makeCircleEdge(n,r,i,u,d,f,t.radius))}let n=y(o),[r,i]=_(o,n.first),[a,s]=_(o,(n.first+n.last)/2),[c,l]=_(o,n.last),p=x(r,i),m=x(a,s),h=x(c,l);return T(`edge`,e.makeArcEdge(p[0],p[1],p[2],m[0],m[1],m[2],h[0],h[1],h[2]))}let C=y(o),w=(C.last-C.first)/24,ee=[];for(let e=0;e<=24;e++){let[t,n]=_(o,C.first+e*w),[r,i,a]=x(t,n);ee.push(r,i,a)}let te=new t.VectorDouble;for(let e of ee)te.push_back(e);try{return T(`edge`,e.interpolatePoints(te,!1))}finally{te.delete()}}function fa(e,t,n,r){let i=li(n),a=y(i),o=E(r),s=new t.VectorDouble;for(let t=0;t<=30;t++){let[n,r]=_(i,a.first+(a.last-a.first)*t/30),c=e.pointOnSurface(o,n,r);try{s.push_back(c.get(0)),s.push_back(c.get(1)),s.push_back(c.get(2))}finally{c.delete()}}try{return T(`edge`,e.interpolatePoints(s,!1))}finally{s.delete()}}function pa(e){return e}function ma(){return ui(x(0,0,1,0))}function ha(e,t){e.buildCurves3d(E(t))}function ga(e,t,n,r){return T(`wire`,e.fixWireOnFace(E(t),E(n),r))}function _a(e){try{let t=Pe(e.modified),n=Pe(e.generated),r=Pe(e.deleted),i=e=>{let t=new Map,n=0;for(;n+1<e.length;){let r=e[n]??0,i=e[n+1]??0;n+=2;let a=[];for(let t=0;t<i&&n<e.length;t++,n++)a.push(e[n]??0);t.set(r,a)}return t};return{id:e.resultId,evolution:{modified:i(t),generated:i(n),deleted:new Set(r)}}}finally{e.delete()}}function va(e,t,n,r,i,a,o,s){let c=Me(t,o);try{let{id:t,evolution:o}=_a(e.translateWithHistory(E(n),r,i,a,c,s));return{shape:D(e,t),evolution:o}}finally{c.delete()}}function ya(e,t,n,r,i,a,o,s){let c=o??[0,0,1],l=s??[0,0,0],u=Me(t,i);try{let{id:t,evolution:i}=_a(e.rotateWithHistory(E(n),l[0],l[1],l[2],c[0],c[1],c[2],r,u,a));return{shape:D(e,t),evolution:i}}finally{u.delete()}}function ba(e,t,n,r,i,a,o){let s=Me(t,a);try{let{id:t,evolution:a}=_a(e.mirrorWithHistory(E(n),r[0],r[1],r[2],i[0],i[1],i[2],s,o));return{shape:D(e,t),evolution:a}}finally{s.delete()}}function xa(e,t,n,r,i,a,o){let s=Me(t,a);try{let{id:t,evolution:a}=_a(e.scaleWithHistory(E(n),r[0],r[1],r[2],i,s,o));return{shape:D(e,t),evolution:a}}finally{s.delete()}}function Sa(e,t,n,r,i,a){let o=e(t,n,r,i),s=new Map;for(let e of a)s.set(e,[e]);return{shape:o,evolution:{modified:s,generated:new Map,deleted:new Set}}}function Ca(e,t,n,r,i,a,o){let s=Me(t,i);try{let{id:t,evolution:i}=_a(e.fuseWithHistory(E(n),E(r),s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete()}}function wa(e,t,n,r,i,a,o){let s=Me(t,i),c;try{c=Be(e,r);let{id:t,evolution:i}=_a(e.cutWithHistory(E(n),c.id,s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete(),c?.dispose()}}function Ta(e,t,n,r,i,a,o){let s=Me(t,i),c;try{c=Be(e,r);let{id:t,evolution:i}=_a(e.intersectWithHistory(E(n),c.id,s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete(),c?.dispose()}}function Ea(e,t,n,r,i,a,o){let s=Ie(r,i),c=je(t,r.map(E)),l=Me(t,a);try{let{id:t,evolution:r}=_a(e.filletWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function Da(e,t,n,r,i,a,o){let s=Ie(r,i),c=je(t,r.map(E)),l=Me(t,a);try{let{id:t,evolution:r}=_a(e.chamferWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function Oa(e,t,n,r,i,a,o,s){let c=je(t,r.map(E)),l=Me(t,a);try{let{id:t,evolution:r}=_a(e.shellWithHistory(E(n),c,i,s??.001,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function ka(e,t,n,r,i,a){let o=Me(t,i);try{let{id:t,evolution:i}=_a(e.thickenWithHistory(E(n),r,.001,o,a));return{shape:D(e,t),evolution:i}}finally{o.delete()}}function Aa(e,t,n,r,i,a,o){let s=Me(t,i);try{let{id:t,evolution:i}=_a(e.offsetWithHistory(E(n),r,o??1e-6,s,a));return{shape:D(e,t),evolution:i}}finally{s.delete()}}function ja(e,t,n,r,i){let[a,o,s]=r,c=E(t);for(let t of n){let n=(typeof i==`number`?i:i(t))*Math.PI/180;c=e.draft(c,E(t),n,a,o,s)}return{shape:D(e,c),evolution:{modified:new Map,generated:new Map,deleted:new Set}}}function Ma(e,t,n,r,i,a,o){let s=e(r,i),c=t(s,`face`),l=new Map,u=Math.min(a.length,c.length);for(let e=0;e<u;e++){let t=c[e],r=a[e];t!==void 0&&r!==void 0&&l.set(r,[n(t,o)])}return{shape:s,evolution:{modified:l,generated:new Map,deleted:new Set}}}function Na(e,t,n,r){if(n.length<4)throw Error(`hullFromPoints: need at least 4 points`);let{points:i,faces:a}=g(n,r);if(a.length<4)throw Error(`hullFromPoints: degenerate hull (fewer than 4 faces)`);return Jr(e,t,[...i],[...a],r)}function Pa(e,t,n,r){let i=Math.max(r,1),a=[];for(let r of n){let n=e.tessellate(E(r),i,i*.5);try{let e=n.positionCount,r=n.getPositionsPtr()>>2;for(let n=0;n<e;n+=3)a.push({x:t.HEAPF32[r+n]??0,y:t.HEAPF32[r+n+1]??0,z:t.HEAPF32[r+n+2]??0})}finally{n.delete()}}return a}function Fa(e,t,n,r){if(n.length===0)throw Error(`hull: no shapes provided`);let i=Pa(e,t,n,r);if(i.length<4)throw Error(`hull: fewer than 4 vertices extracted from input shapes`);return Na(e,t,i,r)}function Ia(e){throw Error(`occt-wasm: ${e} is not yet implemented`)}var La=class e{oc;kernelId=`occt-wasm`;capabilities=r;Module;k;owner;constructor(e,t,n){this.Module=e,this.k=Re(t,e),this.oc=ze(e,this.k),this.owner=n}static fromKernel(t){let n=t.getRawModule(),r=t.getRawKernel();return new e(n,r,t)}get retainedKernelOwner(){return this.owner}dispose(e){ke(e)?this.k.release(e.id):typeof e.delete==`function`&&e.delete()}executeBatch(e){Ia(`executeBatch`)}checkpoint(){Ia(`checkpoint`)}checkpointCount(){Ia(`checkpointCount`)}restoreCheckpoint(e){Ia(`restoreCheckpoint`)}discardCheckpoint(e){Ia(`discardCheckpoint`)}makeBox(e,t,n){return Ze(this.k,e,t,n)}makeCylinder(e,t,n,r){return Qe(this.k,e,t,n,r)}makeSphere(e,t){return $e(this.k,e,t)}makeCone(e,t,n,r,i){return et(this.k,e,t,n,r,i)}makeTorus(e,t,n,r){return tt(this.k,e,t,n,r)}makeEllipsoid(e,t,n){return nt(this.k,e,t,n)}makeBoxFromCorners(e,t){return rt(this.k,e,t)}makeRectangle(e,t){return it(this.k,e,t)}fuse(e,t,n){return Ve(this.k,e,t,n)}cut(e,t,n){return He(this.k,e,t,n)}intersect(e,t,n){return Ue(this.k,e,t,n)}section(e,t,n){return We(this.k,e,t,n)}fuseAll(e,t){return Ge(this.k,this.Module,e,t)}cutAll(e,t,n){return Ke(this.k,this.Module,e,t,n)}split(e,t){return qe(this.k,this.Module,e,t)}checkBoolean(e,t,n){return Je(this.k,e,t,n)}meshBoolean(e,t,n,r,i,a){return Ye(e,t,n,r,i,a)}makeVertex(e,t,n){return Mr(this.k,e,t,n)}makeEdge(e,t,n){return Nr(this.k,e)}makeWire(e){return Pr(this.k,this.Module,e)}makeFace(e,t){return Ir(this.k,e,t)}makeLineEdge(e,t){return Lr(this.k,e,t)}makeCircleEdge(e,t,n){return Rr(this.k,e,t,n)}makeCircleArc(e,t,n,r,i){return zr(this.k,e,t,n,r,i)}makeArcEdge(e,t,n){return Br(this.k,e,t,n)}makeEllipseEdge(e,t,n,r,i){return Vr(this.k,e,t,n,r)}makeEllipseArc(e,t,n,r,i,a,o){return Hr(this.k,e,t,n,r,i,a)}makeBezierEdge(e){return Ur(this.k,this.Module,e)}makeTangentArc(e,t,n){return Wr(this.k,e,t,n)}makeHelixWire(e,t,n,r,i,a){return Gr(this.k,e,t,n,r,i)}makeWireFromMixed(e){return Fr(this.k,this.Module,e)}makeCompound(e){return Kr(this.k,this.Module,e)}solidFromShell(e){return qr(this.k,e)}hull(e,t){return Fa(this.k,this.Module,e,t)}hullFromPoints(e,t){return Na(this.k,this.Module,e,t)}buildSolidFromFaces(e,t,n){return Jr(this.k,this.Module,e,t,n)}makeNonPlanarFace(e){return Yr(this.k,e)}addHolesInFace(e,t){return Xr(this.k,this.Module,e,t)}removeHolesFromFace(e){return Zr(this.k,this.Module,e)}makeFaceOnSurface(e,t){return Qr(this.k,e,t)}bsplineSurface(e,t,n){return $r(this.k,this.Module,e,t,n)}triangulatedSurface(e,t,n){return ei(this.k,this.Module,e,t,n)}buildTriFace(e,t,n){return ti(this.k,e,t,n)}sewAndSolidify(e,t){return ni(this.k,this.Module,e,t)}createPoint3d(e,t,n){return ri(e,t,n)}createDirection3d(e,t,n){return ii(e,t,n)}createVector3d(e,t,n){return ai(e,t,n)}createAxis1(e,t,n,r,i,a){return oi(e,t,n,r,i,a)}createAxis2(e,t,n,r,i,a,o,s,c){return si(e,t,n,r,i,a,o,s,c)}createAxis3(e,t,n,r,i,a,o,s,c){return ci(e,t,n,r,i,a,o,s,c)}extrude(e,t,n){return Kn(this.k,e,t,n)}revolve(e,t,n){return qn(this.k,e,t,n)}loft(e,t,n,r){return Jn(this.k,this.Module,e,t,n,r)}sweep(e,t,n){return Yn(this.k,e,t,n)}simplePipe(e,t){return Xn(this.k,e,t)}helicalSweep(e,t,n,r,i,a){throw Error(`helicalSweep on occt-wasm requires profile positioning+orientation logic not yet implemented; brepkit has a native implementation`)}sweepWithOptions(e,t,n,r,i){Ia(`sweepWithOptions`)}sweepPipeShell(e,t,n){return Zn(this.k,e,t,n)}loftAdvanced(e,t){return Qn(this.k,this.Module,e,t)}buildExtrusionLaw(e,t,n){return $n(this.k,e,t,n)}revolveVec(e,t,n,r){return er(this.k,e,t,n,r)}draftPrism(e,t,n,r,i,a){return tr(this.k,e,t,n,r,i,a)}fillet(e,t,n){return Pn(this.k,this.Module,e,t,n)}chamfer(e,t,n){return Fn(this.k,this.Module,e,t,n)}chamferDistAngle(e,t,n,r){return In(this.k,this.Module,e,t,n,r)}shell(e,t,n,r){return Ln(this.k,this.Module,e,t,n,r)}thicken(e,t){return Rn(this.k,e,t)}offset(e,t,n){return zn(this.k,e,t,n)}filletVariable(e,t){return Bn(this.k,e,t)}draft(e,t,n,r,i){return Vn(this.k,e,t,n,r,i)}defeature(e,t){return Hn(this.k,this.Module,e,t)}offsetWire2D(e,t,n){return Un(this.k,e,t,n)}simplify(e){return Wn(this.k,e)}reverseShape(e){return Gn(this.k,e)}composeTransform(e){return nr(e)}transform(e,t){return ir(this.k,this.Module,e,t)}locate(e,t){return ar(this.k,this.Module,e,t)}translate(e,t,n,r){return or(this.k,e,t,n,r)}rotate(e,t,n,r){return sr(this.k,e,t,n,r)}mirror(e,t,n){return cr(this.k,e,t,n)}scale(e,t,n){return lr(this.k,e,t,n)}generalTransform(e,t,n,r){return ur(this.k,this.Module,e,t,n,r)}generalTransformNonOrthogonal(e,t,n){return ur(this.k,this.Module,e,t,n,!1)}positionOnCurve(e,t,n){return dr(this.k,this.Module,e,t,n)}linearPattern(e,t,n,r){return fr(this.k,e,t,n,r)}circularPattern(e,t,n,r,i){return pr(this.k,e,t,n,r,i)}transformBatch(e){return mr(this.k,e)}translateWithHistory(e,t,n,r,i,a){return va(this.k,this.Module,e,t,n,r,i,a)}rotateWithHistory(e,t,n,r,i,a){return ya(this.k,this.Module,e,t,n,r,i,a)}mirrorWithHistory(e,t,n,r,i){return ba(this.k,this.Module,e,t,n,r,i)}scaleWithHistory(e,t,n,r,i){return xa(this.k,this.Module,e,t,n,r,i)}generalTransformWithHistory(e,t,n,r,i,a){return Sa((e,t,n,r)=>this.generalTransform(e,t,n,r),e,t,n,r,i)}fuseWithHistory(e,t,n,r,i){return Ca(this.k,this.Module,e,t,n,r,i)}cutWithHistory(e,t,n,r,i){return wa(this.k,this.Module,e,t,n,r,i)}intersectWithHistory(e,t,n,r,i){return Ta(this.k,this.Module,e,t,n,r,i)}filletWithHistory(e,t,n,r,i){return Ea(this.k,this.Module,e,t,n,r,i)}chamferWithHistory(e,t,n,r,i){return Da(this.k,this.Module,e,t,n,r,i)}shellWithHistory(e,t,n,r,i,a){return Oa(this.k,this.Module,e,t,n,r,i,a)}thickenWithHistory(e,t,n,r){return ka(this.k,this.Module,e,t,n,r)}offsetWithHistory(e,t,n,r,i){return Aa(this.k,this.Module,e,t,n,r,i)}draftWithHistory(e,t,n,r,i,a,o){return ja(this.k,e,t,n,i)}applyComposedTransformWithHistory(e,t,n,r){return Ma((e,t)=>this.transform(e,t),(e,t)=>this.iterShapes(e,t),(e,t)=>this.hashCode(e,t),e,t,n,r)}mesh(e,t){return Dt(this.k,this.Module,e,t)}meshEdges(e,t,n){return kt(this.k,this.Module,e,t,n)}hasTriangulation(e){return At(this.k,e)}meshShape(e,t,n){jt(this.k,e,t,n)}exportSTEP(e){return _r(this.k,this.makeCompound.bind(this),e)}exportSTL(e,t,n,r){return vr(this.mesh.bind(this),e,t,n,r)}importSTEP(e){return yr(this.k,e)}importSTL(e){return br(this.k,this.Module,e)}exportIGES(e){return xr(this.k,this.makeCompound.bind(this),e)}importIGES(e){return Sr(this.k,e)}exportSTEPAssembly(e,t){return Cr(this.k,this.Module,e,t)}export3MF(e,t){throw Error(`export3MF is only available with the brepkit kernel`)}exportGLB(e,t){return wr(this.mesh.bind(this),e,t)}exportOBJ(e,t){return Tr(this.mesh.bind(this),e,t)}exportPLY(e,t){return Er(this.mesh.bind(this),e,t)}import3MF(e){throw Error(`import3MF is only available with the brepkit kernel`)}importOBJ(e){throw Error(`importOBJ is only available with the brepkit kernel`)}importGLB(e){throw Error(`importGLB is only available with the brepkit kernel`)}toBREP(e){return Dr(this.k,e)}fromBREP(e){return Or(this.k,e)}createXCAFDocument(e){return kr(this.k,this.Module,e)}writeXCAFToSTEP(e,t){return Ar(this.k,e,t)}exportSTEPConfigured(e,t){return jr(this.k,this.Module,e,t)}volume(e){return hn(this.k,e)}area(e){return gn(this.k,e)}length(e){return _n(this.k,e)}centerOfMass(e){return vn(this.k,e)}linearCenterOfMass(e){return yn(this.k,e)}boundingBox(e){return bn(this.k,e)}distance(e,t){return En(this.k,this.Module,e,t)}surfaceCurvature(e,t,n){return Nn(this.k,e,t,n)}surfaceCenterOfMass(e){return xn(this.k,e)}measureBulk(e,t){return Sn(this.k,e,t)}createDistanceQuery(e){return Cn(this.k,e)}iterShapes(e,t){return at(this.k,e,t)}iterShapeList(e,t){throw Error(`iterShapeList is not applicable to occt-wasm: the arena model has no TopTools_ListOfShape handles`)}shapeType(e){return ot(this.k,e)}isSame(e,t){return st(this.k,e,t)}isEqual(e,t){return ct(this.k,e,t)}downcast(e,t){return lt(this.k,e,t)}copyShape(e){return ut(this.k,e)}hashCode(e,t){return dt(this.k,e,t)}isNull(e){return ft(this.k,e)}shapeOrientation(e){return pt(this.k,e)}edgeToFaceMap(e){return mt(this.k,e)}sharedEdges(e,t){return ht(this.k,e,t)}adjacentFaces(e,t){return gt(this.k,e,t)}sew(e,t){return _t(this.k,this.Module,e,t)}curveType(e){return Nt(this.k,e)}curveParameters(e){return Pt(this.k,e)}curvePointAtParam(e,t){return Ft(this.k,e,t)}curveTangent(e,t){return It(this.k,e,t)}curveIsClosed(e){return Lt(this.k,e)}curveIsPeriodic(e){return Rt(this.k,e)}curvePeriod(e){return zt(this.k,e)}interpolatePoints(e,t){return Bt(this.k,this.Module,e,t)}approximatePoints(e,t){return Vt(this.k,this.Module,e,t)}curveDegreeElevate(e,t){return Ht(this.k,e,t)}curveKnotInsert(e,t,n){return Ut(this.k,e,t,n)}curveKnotRemove(e,t,n){return Wt(this.k,e,t,n)}curveSplit(e,t){return Gt(this.k,e,t)}getBezierPenultimatePole(e){return Kt(this.k,e)}createCurveAdaptor(e){Ia(`createCurveAdaptor`)}vertexPosition(e){return Jt(this.k,e)}surfaceType(e){return Yt(this.k,e)}uvBounds(e){return Xt(this.k,e)}outerWire(e){return Zt(this.k,e)}surfaceNormal(e,t,n){return Qt(this.k,e,t,n)}pointOnSurface(e,t,n){return $t(this.k,e,t,n)}uvFromPoint(e,t){return dn(this.k,e,t)}projectPointOnFace(e,t){return fn(this.k,e,t)}classifyPointOnFace(e,t,n,r){return pn(this.k,e,t,n,r)}classifyPointRobust(e,t,n){Ia(`classifyPointRobust`)}classifyPointWinding(e,t,n){Ia(`classifyPointWinding`)}approximateSurfaceLspia(e,t,n,r,i,a,o,s,c){Ia(`approximateSurfaceLspia`)}untrimFace(e,t,n){Ia(`untrimFace`)}getSurfaceCylinderData(e){return un(this.k,e)}getSurfaceAxis(e){return ln(this.k,e)}reverseSurfaceU(e){Ia(`reverseSurfaceU`)}detectSmallFeatures(e,t,n){Ia(`detectSmallFeatures`)}recognizeFeatures(e,t){Ia(`recognizeFeatures`)}projectEdges(e,t,n,r){return mn(this.k,this.Module,e,t,n,r)}isValid(e){return yt(this.k,e)}healSolid(e){return bt(this.k,e)}healFace(e){return xt(this.k,e)}healWire(e,t){return St(this.k,e,t)}mergeCoincidentVertices(e,t){return Ct(this.k,e,t)}removeDegenerateEdges(e,t){return wt(this.k,e,t)}fixFaceOrientations(e){return Tt(this.k,e)}fixShape(e){return Et(this.k,e)}fixSelfIntersection(e){Ia(`fixSelfIntersection`)}createPoint2d(e,t){return di(e,t)}createDirection2d(e,t){return fi(e,t)}createVector2d(e,t){return pi(e,t)}createAxis2d(e,t,n,r){return mi(e,t,n,r)}wrapCurve2dHandle(e){return hi(e)}createCurve2dAdaptor(e){Ia(`createCurve2dAdaptor`)}makeLine2d(e,t,n,r){return gi(e,t,n,r)}makeCircle2d(e,t,n,r){return _i(e,t,n,r)}makeArc2dThreePoints(e,t,n,r,i,a){return vi(e,t,n,r,i,a)}makeArc2dTangent(e,t,n,r,i,a){return yi(e,t,n,r,i,a)}makeEllipse2d(e,t,n,r,i,a,o){return bi(e,t,n,r,i,a,o)}makeEllipseArc2d(e,t,n,r,i,a,o,s,c){return xi(e,t,n,r,i,a,o,s,c)}makeBezier2d(e){return Si(e)}makeBSpline2d(e,t){return Ci(e)}evaluateCurve2d(e,t){return wi(e,t)}evaluateCurve2dD1(e,t){return Ti(e,t)}getCurve2dBounds(e){return Ei(e)}getCurve2dType(e){return Di(e)}trimCurve2d(e,t,n){return Oi(e,t,n)}reverseCurve2d(e){}copyCurve2d(e){return ki(e)}offsetCurve2d(e,t){return Ai(e,t)}translateCurve2d(e,t,n){return ji(e,t,n)}rotateCurve2d(e,t,n,r){return Mi(e,t,n,r)}scaleCurve2d(e,t,n,r){return Ni(e,t,n,r)}mirrorCurve2dAtPoint(e,t,n){return Pi(e,t,n)}mirrorCurve2dAcrossAxis(e,t,n,r,i){return Fi(e,t,n,r,i)}affinityTransform2d(e,t,n,r,i,a){return Li(e,t,n,r,i,a)}createIdentityGTrsf2d(){return Ri()}createAffinityGTrsf2d(e,t,n,r,i){return zi(e,t,n,r,i)}createTranslationGTrsf2d(e,t){return Bi(e,t)}createMirrorGTrsf2d(e,t,n,r,i,a,o){return Vi(e,t,n,r,i,a,o)}createRotationGTrsf2d(e,t,n){return Hi(e,t,n)}createScaleGTrsf2d(e,t,n){return Ui(e,t,n)}setGTrsf2dTranslationPart(e,t,n){Wi(e,t,n)}multiplyGTrsf2d(e,t){Gi(e,t)}transformCurve2dGeneral(e,t){return Ki(e,t)}intersectCurves2d(e,t,n){return qi(e,t,n)}projectPointOnCurve2d(e,t,n){return Ji(e,t,n)}distanceBetweenCurves2d(e,t,n,r,i,a){return Yi(e,t,n,r,i,a)}approximateCurve2dAsBSpline(e,t,n,r){return Xi(e,r)}decomposeBSpline2dToBeziers(e){return Zi(e)}createBoundingBox2d(){return Qi()}addCurveToBBox2d(e,t,n){$i(e,t,n)}getBBox2dBounds(e){return ea(e)}mergeBBox2d(e,t){ta(e,t)}isBBox2dOut(e,t){return na(e,t)}isBBox2dOutPoint(e,t,n){return ra(e,t,n)}getCurve2dCircleData(e){return ia(e)}getCurve2dEllipseData(e){return aa(e)}getCurve2dBezierPoles(e){return oa(e)}getCurve2dBezierDegree(e){return sa(e)}getCurve2dBSplineData(e){Ia(`getCurve2dBSplineData`)}serializeCurve2d(e){return ca(e)}deserializeCurve2d(e){return la(e)}splitCurve2d(e,t){return ua(e,t)}liftCurve2dToPlane(e,t,n,r){return da(this.k,this.Module,e,t,n,r)}buildEdgeOnSurface(e,t){return fa(this.k,this.Module,e,t)}extractSurfaceFromFace(e){return pa(e)}extractCurve2dFromEdge(e,t){return ma()}buildCurves3d(e){ha(this.k,e)}fixWireOnFace(e,t,n){return ga(this.k,e,t,n)}fillSurface(e,t){Ia(`fillSurface`)}getNurbsCurveData(e){return qt(this.k,e)}};function O(e){return{ok:!0,value:e}}function k(e){return{ok:!1,error:e}}var Ra=O(void 0);function za(e){return e.ok}function A(e){return!e.ok}function Ba(e,t){return e.ok?O(t(e.value)):e}function Va(e,t){return e.ok?e:k(t(e.error))}function Ha(e,t){return e.ok?t(e.value):e}var Ua=Ha;function Wa(e,t){return e.ok?e:t}function Ga(e,t){return e.ok?e:t(e.error)}function Ka(e,t){return e.ok?t.ok?O([e.value,t.value]):t:e}var qa=io;function Ja(e,t){return e.ok&&t(e.value),e}function Ya(e,t){return e.ok||t(e.error),e}function Xa(e){return e.ok?e.value:e}function Za(e,t,n){return e.ok?O(t(e.value)):k(n(e.error))}function Qa(e,t){return e==null?k(t()):O(e)}function $a(e){if(typeof e==`object`&&e&&`kind`in e&&`code`in e&&`message`in e){let t=e;return`[${t.kind}] ${t.code}: ${t.message}`}return String(e)}function j(e){if(e.ok)return e.value;throw Error(`Called unwrap() on an Err: ${$a(e.error)}`)}function eo(e,t){return e.ok?e.value:t}function to(e,t){return e.ok?e.value:t(e.error)}function no(e){if(!e.ok)return e.error;throw Error(`Called unwrapErr() on an Ok: ${String(e.value)}`)}function ro(e,t){return e.ok?t.ok(e.value):t.err(e.error)}function io(e){let t=[];for(let n of e){if(!n.ok)return n;t.push(n.value)}return O(t)}function ao(e,t){try{return O(e())}catch(e){return k(t(e))}}async function oo(e,t){try{return O(await e())}catch(e){return k(t(e))}}function so(e){function t(e){return typeof e==`object`&&!!e&&`ok`in e&&typeof e.ok==`boolean`}let n=t(e)?e:O(e);function r(e){return{then(t){return e.ok?r(t(e.value)):r(e)},get result(){return e}}}return r(n)}var co=class extends Error{location;constructor(e,t){super(`Bug in ${e}: ${t}`),this.name=`BrepBugError`,this.location=e}};function M(e,t){throw new co(e,t)}var lo=[{pattern:/invalid edge configuration|edges?.*(not|fail|invalid)/i,translation:`The edges may not form a continuous loop. Check that edges connect end-to-end without gaps.`},{pattern:/BRepAlgoAPI.*failed|boolean.*operation.*failed/i,translation:`Boolean operation failed. Common causes: overlapping faces, zero-thickness geometry, or degenerate shapes. Try healing input shapes first.`},{pattern:/fillet.*radius.*too.*large|fillet.*failed/i,translation:`Fillet operation failed. The radius may be too large for the selected edges. Try reducing the radius or check that edges have enough room.`},{pattern:/chamfer.*failed|chamfer.*distance.*too.*large/i,translation:`Chamfer operation failed. The distance may be too large for the selected edges. Try reducing the distance or check edge geometry.`},{pattern:/shell.*failed|offset.*failed/i,translation:`Shell/offset operation failed. The thickness may be too large, or the shape may have complex geometry. Try reducing thickness.`},{pattern:/sweep.*failed|pipe.*failed/i,translation:`Sweep operation failed. Check that the profile and spine are compatible, and that the spine has no sharp twists or self-intersections.`},{pattern:/loft.*failed/i,translation:`Loft operation failed. Profiles may be incompatible or have different orientations. Ensure profiles are ordered consistently.`},{pattern:/extrude.*failed|prism.*failed/i,translation:`Extrusion failed. The profile may be invalid or self-intersecting. Check that the profile forms a valid closed wire.`},{pattern:/revolve.*failed|revolution.*failed/i,translation:`Revolution operation failed. The profile may intersect the axis of revolution, or the angle may be invalid.`},{pattern:/self.*intersect|self-intersect/i,translation:`Shape has self-intersections. The operation resulted in overlapping geometry. Simplify the input or adjust parameters.`},{pattern:/degener|degenerat/i,translation:`Degenerate geometry detected. The shape has edges or faces with zero length/area. Check input geometry for collapsed elements.`},{pattern:/BRepCheck.*fail|shape.*invalid|shape.*not.*valid/i,translation:`Shape validation failed. The resulting shape has invalid topology. Try healing the shape or checking input geometry.`}],uo={FUSE_FAILED:`Try autoHeal() on both operands before the boolean operation. Check for overlapping faces or zero-thickness geometry.`,CUT_FAILED:`Try autoHeal() on both operands before the boolean operation. Check for overlapping faces or zero-thickness geometry.`,FUSE_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,CUT_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,INTERSECT_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,SWEEP_FAILED:`Ensure the spine curve has no sharp corners or self-intersections. Try simplifying the profile or using a smoother path.`,LOFT_FAILED:`Check that all profiles have the same number of edges and consistent orientation. Try reordering profiles.`,FILLET_NOT_3D:`The fillet radius may be too large for the selected edges. Try a smaller radius or check that adjacent faces have enough room.`,CHAMFER_NOT_3D:`The chamfer distance may be too large. Try a smaller distance or check edge geometry.`,SHELL_NOT_3D:`The shell thickness may be too large for the shape. Try reducing thickness or removing problematic faces.`,OFFSET_NOT_3D:`The offset distance may be too large for the shape geometry. Try a smaller distance.`,DRAFT_FAILED:`The draft angle may be too large or the selected faces incompatible. Try a smaller angle or different faces.`};function fo(e){return uo[e]}function po(e){for(let{pattern:t,translation:n}of lo)if(t.test(e))return`${n} (kernel: ${e})`;return e}var N={BSPLINE_FAILED:`BSPLINE_FAILED`,FACE_BUILD_FAILED:`FACE_BUILD_FAILED`,SWEEP_FAILED:`SWEEP_FAILED`,LOFT_FAILED:`LOFT_FAILED`,FUSE_FAILED:`FUSE_FAILED`,CUT_FAILED:`CUT_FAILED`,HEAL_NO_EFFECT:`HEAL_NO_EFFECT`,BOOLEAN_HAS_ERRORS:`BOOLEAN_HAS_ERRORS`,VARIABLE_FILLET_FAILED:`VARIABLE_FILLET_FAILED`,POSITION_ON_CURVE_FAILED:`POSITION_ON_CURVE_FAILED`,FIX_SHAPE_FAILED:`FIX_SHAPE_FAILED`,SOLID_FROM_SHELL_FAILED:`SOLID_FROM_SHELL_FAILED`,FIX_SELF_INTERSECTION_FAILED:`FIX_SELF_INTERSECTION_FAILED`,ELLIPSE_RADII:`ELLIPSE_RADII`,FUSE_ALL_EMPTY:`FUSE_ALL_EMPTY`,FILLET_NO_EDGES:`FILLET_NO_EDGES`,CHAMFER_NO_EDGES:`CHAMFER_NO_EDGES`,CHAMFER_ANGLE_NO_EDGES:`CHAMFER_ANGLE_NO_EDGES`,CHAMFER_ANGLE_BAD_DISTANCE:`CHAMFER_ANGLE_BAD_DISTANCE`,CHAMFER_ANGLE_BAD_ANGLE:`CHAMFER_ANGLE_BAD_ANGLE`,BEZIER_MIN_POINTS:`BEZIER_MIN_POINTS`,POLYGON_MIN_POINTS:`POLYGON_MIN_POINTS`,ZERO_LENGTH_EXTRUSION:`ZERO_LENGTH_EXTRUSION`,ZERO_TWIST_ANGLE:`ZERO_TWIST_ANGLE`,LOFT_EMPTY:`LOFT_EMPTY`,UNSUPPORTED_PROFILE:`UNSUPPORTED_PROFILE`,UNKNOWN_PLANE:`UNKNOWN_PLANE`,NULL_SHAPE_INPUT:`NULL_SHAPE_INPUT`,INVALID_FILLET_RADIUS:`INVALID_FILLET_RADIUS`,INVALID_CHAMFER_DISTANCE:`INVALID_CHAMFER_DISTANCE`,INVALID_THICKNESS:`INVALID_THICKNESS`,ZERO_OFFSET:`ZERO_OFFSET`,NO_EDGES:`NO_EDGES`,NO_FACES:`NO_FACES`,DRAFT_NO_FACES:`DRAFT_NO_FACES`,DRAFT_INVALID_ANGLE:`DRAFT_INVALID_ANGLE`,DRAFT_NOT_3D:`DRAFT_NOT_3D`,DRAFT_FAILED:`DRAFT_FAILED`,FUSE_NOT_3D:`FUSE_NOT_3D`,CUT_NOT_3D:`CUT_NOT_3D`,INTERSECT_NOT_3D:`INTERSECT_NOT_3D`,FUSE_ALL_NOT_3D:`FUSE_ALL_NOT_3D`,CUT_ALL_NOT_3D:`CUT_ALL_NOT_3D`,LOFT_NOT_3D:`LOFT_NOT_3D`,SWEEP_NOT_3D:`SWEEP_NOT_3D`,REVOLUTION_NOT_3D:`REVOLUTION_NOT_3D`,FILLET_NOT_3D:`FILLET_NOT_3D`,CHAMFER_NOT_3D:`CHAMFER_NOT_3D`,CHAMFER_ANGLE_NOT_3D:`CHAMFER_ANGLE_NOT_3D`,CHAMFER_ANGLE_FAILED:`CHAMFER_ANGLE_FAILED`,CSG_NOT_3D:`CSG_NOT_3D`,SHELL_NOT_3D:`SHELL_NOT_3D`,OFFSET_NOT_3D:`OFFSET_NOT_3D`,NULL_SHAPE:`NULL_SHAPE`,NO_WRAPPER:`NO_WRAPPER`,WELD_NOT_SHELL:`WELD_NOT_SHELL`,SOLID_BUILD_FAILED:`SOLID_BUILD_FAILED`,OFFSET_NOT_WIRE:`OFFSET_NOT_WIRE`,UNKNOWN_SURFACE_TYPE:`UNKNOWN_SURFACE_TYPE`,UNKNOWN_CURVE_TYPE:`UNKNOWN_CURVE_TYPE`,SWEEP_START_NOT_WIRE:`SWEEP_START_NOT_WIRE`,SWEEP_END_NOT_WIRE:`SWEEP_END_NOT_WIRE`,STEP_EXPORT_FAILED:`STEP_EXPORT_FAILED`,STEP_EXPORT_CONFIGURED_FAILED:`STEP_EXPORT_CONFIGURED_FAILED`,STEP_FILE_READ_ERROR:`STEP_FILE_READ_ERROR`,STEP_EXPORT_CRASHED:`STEP_EXPORT_CRASHED`,STEP_EXPORT_UNSERIALIZABLE:`STEP_EXPORT_UNSERIALIZABLE`,STL_EXPORT_FAILED:`STL_EXPORT_FAILED`,STL_FILE_READ_ERROR:`STL_FILE_READ_ERROR`,STL_EXPORT_CRASHED:`STL_EXPORT_CRASHED`,STL_EXPORT_UNSERIALIZABLE:`STL_EXPORT_UNSERIALIZABLE`,STEP_IMPORT_FAILED:`STEP_IMPORT_FAILED`,STL_IMPORT_FAILED:`STL_IMPORT_FAILED`,IGES_EXPORT_FAILED:`IGES_EXPORT_FAILED`,IGES_IMPORT_FAILED:`IGES_IMPORT_FAILED`,DXF_IMPORT_FAILED:`DXF_IMPORT_FAILED`,OBJ_IMPORT_FAILED:`OBJ_IMPORT_FAILED`,THREEMF_IMPORT_FAILED:`THREEMF_IMPORT_FAILED`,PARAMETER_NOT_FOUND:`PARAMETER_NOT_FOUND`,INTERSECTION_FAILED:`INTERSECTION_FAILED`,SELF_INTERSECTION_FAILED:`SELF_INTERSECTION_FAILED`,STRAIGHT_SKELETON_FAILED:`STRAIGHT_SKELETON_FAILED`,CENTER_OF_MASS_FAILED:`CENTER_OF_MASS_FAILED`,COMPOUND_NO_FACES:`COMPOUND_NO_FACES`,COMPOUND_FACE_NOT_FOUND:`COMPOUND_FACE_NOT_FOUND`,FINDER_NOT_UNIQUE:`FINDER_NOT_UNIQUE`,HULL_EMPTY_INPUT:`HULL_EMPTY_INPUT`,HULL_FAILED:`HULL_FAILED`,HULL_DEGENERATE:`HULL_DEGENERATE`,HULL_NOT_3D:`HULL_NOT_3D`,MINKOWSKI_FAILED:`MINKOWSKI_FAILED`,MINKOWSKI_NULL_TOOL:`MINKOWSKI_NULL_TOOL`,MINKOWSKI_NOT_3D:`MINKOWSKI_NOT_3D`,POLYHEDRON_INSUFFICIENT_POINTS:`POLYHEDRON_INSUFFICIENT_POINTS`,POLYHEDRON_INSUFFICIENT_FACES:`POLYHEDRON_INSUFFICIENT_FACES`,POLYHEDRON_INVALID_INDEX:`POLYHEDRON_INVALID_INDEX`,POLYHEDRON_FAILED:`POLYHEDRON_FAILED`,VALIDATION_FAILED:`VALIDATION_FAILED`,ROOF_FAILED:`ROOF_FAILED`,MULTI_SWEEP_INSUFFICIENT_SECTIONS:`MULTI_SWEEP_INSUFFICIENT_SECTIONS`,MULTI_SWEEP_FAILED:`MULTI_SWEEP_FAILED`,GUIDED_SWEEP_FAILED:`GUIDED_SWEEP_FAILED`,SURFACE_GRID_TOO_SMALL:`SURFACE_GRID_TOO_SMALL`,SURFACE_GRID_JAGGED:`SURFACE_GRID_JAGGED`,SURFACE_FAILED:`SURFACE_FAILED`,ASSEMBLY_MATE_INVALID:`ASSEMBLY_MATE_INVALID`,ASSEMBLY_SOLVE_FAILED:`ASSEMBLY_SOLVE_FAILED`,ASSEMBLY_NOT_CONVERGED:`ASSEMBLY_NOT_CONVERGED`,BLUEPRINT_EMPTY_CURVES:`BLUEPRINT_EMPTY_CURVES`,COMPOUND_BLUEPRINT_EMPTY:`COMPOUND_BLUEPRINT_EMPTY`,GLB_IMPORT_FAILED:`GLB_IMPORT_FAILED`,FONT_FETCH_FAILED:`FONT_FETCH_FAILED`,FONT_PARSE_FAILED:`FONT_PARSE_FAILED`,NO_FONT_LOADED:`NO_FONT_LOADED`,CURVE2D_CONSTRUCTION_FAILED:`CURVE2D_CONSTRUCTION_FAILED`,CURVE2D_INVALID_RADIUS:`CURVE2D_INVALID_RADIUS`,CURVE2D_TRANSFORM_FAILED:`CURVE2D_TRANSFORM_FAILED`,CURVE2D_QUERY_FAILED:`CURVE2D_QUERY_FAILED`,CURVE2D_INTERSECTION_FAILED:`CURVE2D_INTERSECTION_FAILED`,CURVE2D_BRIDGE_FAILED:`CURVE2D_BRIDGE_FAILED`,CLONE_FAILED:`CLONE_FAILED`,SIMPLIFY_FAILED:`SIMPLIFY_FAILED`,TO_BREP_FAILED:`TO_BREP_FAILED`,UNSUPPORTED_CAPABILITY:`UNSUPPORTED_CAPABILITY`};function mo(e,t,n,r,i,a){let o={kind:e,code:t,message:n,cause:r};if(a){let e={...o,suggestion:a};return i?{...e,metadata:i}:e}return i?{...o,metadata:i}:o}function P(e,t,n,r,i){return mo(`KERNEL_OPERATION`,e,t,n,r,i)}function F(e,t,n,r,i){return mo(`VALIDATION`,e,t,n,r,i)}function ho(e,t,n,r,i){return mo(`TYPE_CAST`,e,t,n,r,i)}function go(e,t,n,r,i){return mo(`SKETCHER_STATE`,e,t,n,r,i)}function _o(e,t,n,r,i){return mo(`MODULE_INIT`,e,t,n,r,i)}function I(e,t,n,r,i){return mo(`COMPUTATION`,e,t,n,r,i)}function vo(e,t,n,r,i){return mo(`IO`,e,t,n,r,i)}function yo(e,t,n,r,i){return mo(`QUERY`,e,t,n,r,i)}function bo(e,t,n,r,i){return mo(`UNSUPPORTED`,e,t,n,r,i)}function xo(e,n,r){return(n<0||n>=e.length)&&M(r??`safeIndex`,`Index ${n} is out of bounds (array length ${e.length})`),t(e,n)}var So={draft:{tolerance:.01,angularTolerance:.5},standard:{tolerance:.001,angularTolerance:.1},fine:{tolerance:1e-4,angularTolerance:.05}},Co=`standard`;function wo(){return Co}function To(e=Co){return So[e]}function Eo(e){Co=e}function Do(e){return`makeLine2d`in e}var Oo=[`boolean`,`loft`,`extrude`,`shell`,`fillet`,`mesh`,`edgeMesh`,`transform`],ko=Object.create(null),Ao=Object.create(null);function jo(){for(let e of Oo)ko[e]=0,Ao[e]=0}jo();function Mo(e){let t=performance.now();return()=>{ko[e]=(ko[e]??0)+(performance.now()-t),Ao[e]=(Ao[e]??0)+1}}function No(){let e={};for(let t of Oo)e[t]={totalMs:ko[t]??0,count:Ao[t]??0};return e}function Po(){jo()}var Fo;function Io(){Fo=void 0}function Lo(e){return Fo??=typeof e.BooleanBatch==`function`,Fo}function Ro(e){return e===`commonFace`?1:e===`sameFace`?2:0}function zo(e,t,n={}){if(!Lo(e))return null;let r=Mo(`boolean`),i=new e.BooleanBatch;try{for(let e of t)i.addShape(e);return i.fuseAll(Ro(n.optimisation),!!n.simplify,n.fuzzyValue??0)}finally{i.delete(),r()}}function Bo(e,t,n,r={}){if(!Lo(e))return null;if(n.length===0)return t;let i=Mo(`boolean`),a=new e.BooleanBatch;try{for(let e of n)a.addShape(e);return a.cutAll(t,Ro(r.optimisation),!!r.simplify,r.fuzzyValue??0)}finally{a.delete(),i()}}var Vo=2147483647,Ho;function Uo(){Ho=void 0}function Wo(e){return Ho??=typeof e.MeasurementExtractor?.extract==`function`,Ho}function Go(e,t,n=!1){if(Wo(e)){let r=e.MeasurementExtractor.extract(t,n);try{let t=r.getDataPtr()/8,n=r.getDataSize(),i=e.HEAPF64.slice(t,t+n);return{volume:i[0]??0,area:i[1]??0,length:i[2]??0,centerOfMass:[i[3]??0,i[4]??0,i[5]??0],boundingBox:{min:[i[6]??0,i[7]??0,i[8]??0],max:[i[9]??0,i[10]??0,i[11]??0]}}}finally{r.delete()}}return{volume:Ko(e,t),area:qo(e,t),length:n?Jo(e,t):0,centerOfMass:Yo(e,t),boundingBox:Zo(e,t)}}function Ko(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(t,n,!0,!1,!1);let r=n.Mass();return n.delete(),r}function qo(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.SurfaceProperties_2(t,n,1e-7,!0);let r=n.Mass();return n.delete(),r}function Jo(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.LinearProperties(t,n,!0,!1);let r=n.Mass();return n.delete(),r}function Yo(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(t,n,!0,!1,!1);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function Xo(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.LinearProperties(t,n,!0,!1);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function Zo(e,t){let n=new e.Bnd_Box;e.BRepBndLib.Add(t,n,!0);let r={min:[n.GetXMin(),n.GetYMin(),n.GetZMin()],max:[n.GetXMax(),n.GetYMax(),n.GetZMax()]};return n.delete(),r}function Qo(e,t,n){let r=new e.BRepExtrema_DistShapeShape_1;r.LoadS1(t),r.LoadS2(n);let i=new e.Message_ProgressRange_1;if(r.Perform(i),!r.IsDone())throw i.delete(),r.delete(),Error(`BRepExtrema_DistShapeShape failed`);let a=r.Value(),o=r.PointOnShape1(1),s=r.PointOnShape2(1),c={value:a,point1:[o.X(),o.Y(),o.Z()],point2:[s.X(),s.Y(),s.Z()]};return o.delete(),s.delete(),i.delete(),r.delete(),c}function $o(e,t,n,r,i=1e-6){if(!e.BRepClass_FaceClassifier)throw Error(`BRepClass_FaceClassifier not available in this WASM build`);let a=new e.gp_Pnt2d_3(n,r),o=new e.BRepClass_FaceClassifier_3(t,a,i),s=o.State();a.delete(),o.delete();let c=e.TopAbs_State;return s===c.TopAbs_IN?`in`:s===c.TopAbs_ON?`on`:`out`}function es(e){return{volume:t=>Ko(e,t),area:t=>qo(e,t),length:t=>Jo(e,t),centerOfMass:t=>Yo(e,t),linearCenterOfMass:t=>Xo(e,t),boundingBox:t=>Zo(e,t),distance:(t,n)=>Qo(e,t,n),classifyPointOnFace:(t,n,r,i)=>$o(e,t,n,r,i),measureBulk:(t,n)=>Go(e,t,n)}}var ts={vertex:7,edge:6,wire:5,face:4,shell:3,solid:2,compsolid:1,compound:0};function ns(e,t,n){let r=e.TopologyExtractor.extract(t,ts[n]),i=r.getShapesCount(),a=[];for(let e=0;e<i;e++)a.push(r.getShape(e));return r.delete(),a}var rs=new WeakMap;function is(e,t,n){let r=rs.get(e);if(!r){let t=e.TopAbs_ShapeEnum;r={vertex:t.TopAbs_VERTEX,edge:t.TopAbs_EDGE,wire:t.TopAbs_WIRE,face:t.TopAbs_FACE,shell:t.TopAbs_SHELL,solid:t.TopAbs_SOLID,compsolid:t.TopAbs_COMPSOLID,compound:t.TopAbs_COMPOUND},rs.set(e,r)}let i=new e.TopExp_Explorer_2(t,r[n],e.TopAbs_ShapeEnum.TopAbs_SHAPE),a=[],o=new Map;for(;i.More();){let t=i.Current(),n=e.shapeHashCode(t,Vo),r=o.get(n);r?r.some(e=>e.IsSame(t))||(r.push(t),a.push(t)):(o.set(n,[t]),a.push(t)),i.Next()}return i.delete(),a}function as(e,t,n){return e.TopologyExtractor?ns(e,t,n):is(e,t,n)}var os=new WeakMap;function ss(e){let t=os.get(e);if(!t){let n=e.TopAbs_ShapeEnum;t=new Map([[n.TopAbs_VERTEX,`vertex`],[n.TopAbs_EDGE,`edge`],[n.TopAbs_WIRE,`wire`],[n.TopAbs_FACE,`face`],[n.TopAbs_SHELL,`shell`],[n.TopAbs_SOLID,`solid`],[n.TopAbs_COMPSOLID,`compsolid`],[n.TopAbs_COMPOUND,`compound`]]),os.set(e,t)}return t}function cs(e,t){if(t.IsNull())throw Error(`Cannot determine shape type: shape is null`);let n=ss(e).get(t.ShapeType());if(!n)throw Error(`Unknown shape type enum value`);return n}function ls(e,t){let n=new e.BRepCheck_Analyzer(t,!0,!1,!1),r=n.IsValid_2();return n.delete(),r}function us(e,t,n=1e-6){let r=new e.BRepBuilderAPI_Sewing(n,!0,!0,!0,!1);for(let e of t)r.Add(e);let i=new e.Message_ProgressRange_1;r.Perform(i);let a=r.SewedShape();return i.delete(),r.delete(),a}function ds(e,t,n){if(e.TopTools_ListIteratorOfListOfShape){let r=new e.TopTools_ListIteratorOfListOfShape(t);for(;r.More();)n(r.Value()),r.Next();r.delete()}else{let r=new e.TopTools_ListOfShape_3(t);for(;r.Size()>0;)n(r.First_1()),r.RemoveFirst();r.delete()}}function fs(e,t){return e.IsSame(t)}function ps(e,t){return e.IsEqual(t)}function ms(e){return{iterShapes:(t,n)=>as(e,t,n),iterShapeList:(t,n)=>{ds(e,t,n)},shapeType:t=>cs(e,t),isSame:(e,t)=>fs(e,t),isEqual:(e,t)=>ps(e,t),isValid:t=>ls(e,t),sew:(t,n)=>us(e,t,n)}}var hs=.001;function gs(e,t,n){n===`commonFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueShift),n===`sameFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueFull)}function _s(e,t){e.SetRunParallel(!0),e.SetUseOBB?.(!0),t!==void 0&&t>0&&e.SetFuzzyValue?.(t)}function vs(e,t){if(t.length<3)return 0;let n=t[0];if(!n)return 0;let r=new e.Bnd_Box;if(e.BRepBndLib.Add(n,r,!0),r.IsVoid())return r.delete(),0;let i=r.CornerMin(),a=r.CornerMax(),o=a.X()-i.X(),s=a.Y()-i.Y(),c=a.Z()-i.Z();return i.delete(),a.delete(),r.delete(),Math.sqrt(o*o+s*s+c*c)>1?1e-5:0}function ys(e,t){let n=new e.TopoDS_Builder,r=new e.TopoDS_Compound;n.MakeCompound(r);for(let e of t)n.Add(r,e);return n.delete(),r}function bs(e,t,n,r={}){let i=Mo(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Fuse_3(t,n,s);gs(e,c,i),_s(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,hs);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function xs(e,t,n,r={}){let i=Mo(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Cut_3(t,n,s);gs(e,c,i),_s(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,hs);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function Ss(e,t,n,r={}){let i=Mo(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Common_3(t,n,s);gs(e,c,i),_s(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,hs);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function Cs(e,t,n,r=!0){let i=new e.Message_ProgressRange_1,a=new e.BRepAlgoAPI_Section_3(t,n,!1);if(a.Approximation(r),_s(a),a.Build(i),!a.IsDone())throw a.delete(),i.delete(),Error(`BRepAlgoAPI_Section build failed`);let o=a.Shape();return a.delete(),i.delete(),o}function ws(e,t,n={}){let r=zo(e,t,n);if(r!==null)return r;let i=Mo(`boolean`);try{let{optimisation:r,simplify:i=!1}=n,a=n.fuzzyValue??vs(e,t),o=new e.TopTools_ListOfShape_1;for(let e of t)o.Append_1(e);let s=new e.BRepAlgoAPI_BuilderAlgo_1;s.SetArguments(o),gs(e,s,r),_s(s,a);let c=new e.Message_ProgressRange_1;s.Build(c);let l=s.Shape();if(i){let t=new e.ShapeUpgrade_UnifySameDomain_2(l,!0,!0,!1);t.Build(),l=t.Shape(),t.delete()}return o.delete(),s.delete(),c.delete(),l}finally{i()}}function Ts(e,n,r,i,a){a.signal?.throwIfAborted();let o=i-r;if(o===1)return t(n,r);if(o===2)return bs(e,n[r],n[r+1],{...a,simplify:!1});let s=r+Math.ceil(o/2);return bs(e,Ts(e,n,r,s,a),Ts(e,n,s,i,a),{...a,simplify:!1})}function Es(e,t,n={}){let r=Ts(e,t,0,t.length,n);if(n.simplify){let t=new e.ShapeUpgrade_UnifySameDomain_2(r,!0,!0,!1);t.Build();let n=t.Shape();return t.delete(),n}return r}function Ds(e,n,r={}){if(n.length===0)throw Error(`fuseAll requires at least one shape`);if(n.length===1)return t(n,0);let{strategy:i=`native`}=r;return i===`pairwise`?Es(e,n,r):ws(e,n,r)}function Os(e,t,n){if(!e.BRepAlgoAPI_Splitter)throw Error(`BRepAlgoAPI_Splitter not available in this WASM build`);let r=new e.TopTools_ListOfShape_1;r.Append_1(t);let i=new e.TopTools_ListOfShape_1;for(let e of n)i.Append_1(e);let a=new e.BRepAlgoAPI_Splitter;a.SetArguments(r),a.SetTools(i),_s(a);let o=new e.Message_ProgressRange_1;a.Build(o);let s=a.Shape();return a.delete(),o.delete(),r.delete(),i.delete(),s}function ks(e,t,n,r={}){if(n.length===0)return t;let i=Bo(e,t,n,r);if(i!==null)return i;let a=ys(e,n),o=xs(e,t,a,r);return a.delete(),o}function As(e,t,n,r,i){let a=[];return t.IsNull()&&a.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),n.IsNull()&&a.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),a.length>0?{valid:!1,issues:a}:(i(t)||a.push({operand:`base`,issue:`not-valid`,message:`Base shape fails BRepCheck validation. Try autoHeal() first.`}),i(n)||a.push({operand:`tool`,issue:`not-valid`,message:`Tool shape fails BRepCheck validation. Try autoHeal() first.`}),{valid:a.length===0,issues:a})}function js(e){return{fuse:(t,n,r)=>bs(e,t,n,r),cut:(t,n,r)=>xs(e,t,n,r),intersect:(t,n,r)=>Ss(e,t,n,r),section:(t,n,r)=>Cs(e,t,n,r),fuseAll:(t,n)=>Ds(e,t,n),cutAll:(t,n,r)=>ks(e,t,n,r),split:(t,n)=>Os(e,t,n),checkBoolean:(t,n,r)=>As(e,t,n,r,t=>ls(e,t))}}var Ms={fuse:0,cut:1,intersect:2};function Ns(e,t,n,r={}){let{glueMode:i=0,fuzzyValue:a=0}=r;if(typeof e.BooleanPipeline==`function`){let r=new e.BooleanPipeline;try{for(let e of n)r.addStep(Ms[e.op],e.tool);let e=r.execute(t,i,a);return e.IsNull()?null:e}finally{r.delete()}}}function Ps(e){return{booleanPipeline:(t,n,r)=>Ns(e,t,n,r)??null}}function Fs(e,t,n,r){let i=new e.gp_Pnt_3(t,n,r),a=new e.BRepBuilderAPI_MakeVertex(i),o=a.Vertex();return a.delete(),i.delete(),o}function Is(e,t,n,r){let i=n!==void 0&&r!==void 0?new e.BRepBuilderAPI_MakeEdge_24(t,n,r):new e.BRepBuilderAPI_MakeEdge_24(t),a=i.Edge();return i.delete(),a}function Ls(e,t){let n=new e.BRepBuilderAPI_MakeWire_1;for(let e of t)n.Add_1(e);let r=new e.Message_ProgressRange_1;n.Build(r);let i=n.Wire();return n.delete(),r.delete(),i}function Rs(e,t,n=!0){if(n){let n=new e.BRepBuilderAPI_MakeFace_15(t,!1),r=n.Face();return n.delete(),r}let r=new e.BRepOffsetAPI_MakeFilling(3,15,2,!1,1e-5,1e-4,.01,.1,8,9),i=as(e,t,`edge`);for(let t of i)r.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,!0);let a=new e.Message_ProgressRange_1;r.Build(a);let o=r.Shape();return r.delete(),a.delete(),o}function zs(e,t,n,r){let i=new e.BRepPrimAPI_MakeBox_2(t,n,r),a=i.Solid();return i.delete(),a}function Bs(e,t,n,r=[0,0,0],i=[0,0,1]){let a=new e.gp_Pnt_3(...r),o=new e.gp_Dir_5(...i),s=new e.gp_Ax2_4(a,o),c=new e.BRepPrimAPI_MakeCylinder_3(s,t,n),l=c.Shape();return c.delete(),s.delete(),a.delete(),o.delete(),l}function Vs(e,t,n=[0,0,0]){if(n[0]===0&&n[1]===0&&n[2]===0){let n=new e.BRepPrimAPI_MakeSphere_1(t),r=n.Shape();return n.delete(),r}let r=new e.gp_Pnt_3(...n),i=new e.BRepPrimAPI_MakeSphere_2(r,t),a=i.Shape();return i.delete(),r.delete(),a}function Hs(e,t,n,r,i=[0,0,0],a=[0,0,1]){let o=new e.gp_Pnt_3(...i),s=new e.gp_Dir_5(...a),c=new e.gp_Ax2_4(o,s),l=new e.BRepPrimAPI_MakeCone_3(c,t,n,r),u=l.Shape();return l.delete(),c.delete(),o.delete(),s.delete(),u}function Us(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.BRepBuilderAPI_MakeEdge_3(i,a),c=new e.BRepBuilderAPI_MakeEdge_3(a,o),l=new e.BRepBuilderAPI_MakeEdge_3(o,i),u=new e.BRepBuilderAPI_MakeWire_1;u.Add_1(s.Edge()),u.Add_1(c.Edge()),u.Add_1(l.Edge());let d=null;if(u.IsDone()){let t=new e.BRepBuilderAPI_MakeFace_15(u.Wire(),!1);t.IsDone()&&(d=t.Face()),t.delete()}return u.delete(),s.delete(),c.delete(),l.delete(),i.delete(),a.delete(),o.delete(),d}function Ws(e,t){let n=new e.BRepBuilderAPI_MakeWire_1;for(let r of t){let t=r.ShapeType();t===e.TopAbs_ShapeEnum.TopAbs_EDGE?n.Add_1(r):t===e.TopAbs_ShapeEnum.TopAbs_WIRE&&n.Add_2(r)}let r=new e.Message_ProgressRange_1;n.Build(r);let i=n.Wire();return n.delete(),r.delete(),i}function Gs(e,t,n,r=[0,0,0],i=[0,0,1]){let a=new e.gp_Pnt_3(...r),o=new e.gp_Dir_5(...i),s=new e.gp_Ax2_4(a,o),c=new e.BRepPrimAPI_MakeTorus_5(s,t,n),l=c.Shape();return c.delete(),s.delete(),a.delete(),o.delete(),l}function Ks(e){return{makeVertex:(t,n,r)=>Fs(e,t,n,r),makeEdge:(t,n,r)=>Is(e,t,n,r),makeWire:t=>Ls(e,t),makeWireFromMixed:t=>Ws(e,t),makeFace:(t,n)=>Rs(e,t,n),makeBox:(t,n,r)=>zs(e,t,n,r),makeCylinder:(t,n,r,i)=>Bs(e,t,n,r,i),makeSphere:(t,n)=>Vs(e,t,n),makeCone:(t,n,r,i,a)=>Hs(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>Gs(e,t,n,r,i),buildTriFace:(t,n,r)=>Us(e,t,n,r)}}function qs(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function Js(e,t,n){let r=[],i=Math.max(n,1);for(let n of t){new e.BRepMesh_IncrementalMeshWrapper(n,i,!1,i*.5,!1).delete();let t=new e.TopExp_Explorer_2(n,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;t.More();){let n=e.TopoDS_Cast.Face(t.Current()),i=new e.TopLoc_Location_1,a=e.BRep_Tool_Triangulation(n,i,0);if(!a.IsNull()){let e=i.Transformation(),t=a.get().NbNodes();for(let n=1;n<=t;n++){let t=a.get().Node(n),i=t.Transformed(e);r.push({x:i.X(),y:i.Y(),z:i.Z()}),i.delete(),t.delete()}e.delete()}i.delete(),t.Next()}t.delete()}return r}function Ys(e,t,n){let{faces:r,points:i}=t,a=[];for(let[t,n,o]of r){let r=qs(i,t),s=qs(i,n),c=qs(i,o),l=Us(e,[r.x,r.y,r.z],[s.x,s.y,s.z],[c.x,c.y,c.z]);l!==null&&a.push(l)}if(a.length<4)throw Error(`hull: only ${a.length} faces built, need at least 4 for a solid`);let o=Math.max(n,1e-4),s=new e.BRepBuilderAPI_Sewing(o,!0,!0,!0,!1);for(let e of a)s.Add(e);let c=new e.Message_ProgressRange_1;s.Perform(c),c.delete();let l=s.SewedShape();s.delete();let u=new e.TopExp_Explorer_2(l,e.TopAbs_ShapeEnum.TopAbs_SHELL,e.TopAbs_ShapeEnum.TopAbs_SHAPE);if(u.More()){let t=e.TopoDS_Cast.Shell(u.Current());u.delete();let n=new e.BRepBuilderAPI_MakeSolid_1;n.Add(t);let r=new e.Message_ProgressRange_1;if(n.Build(r),r.delete(),n.IsDone()){let r=n.Solid();n.delete(),t.delete();let i=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(r,i,!1,!1,!1);let a=i.Mass();return i.delete(),a<0&&r.Complement(),r}return t.delete(),n.delete(),l}return u.delete(),l}function Xs(e,t,n){if(t.length===0)throw Error(`hull: no shapes provided`);let r=Js(e,t,n);if(r.length<4)throw Error(`hull: fewer than 4 vertices extracted from input shapes`);let i=g(r,n);if(i.faces.length<4)throw Error(`hull: degenerate hull (fewer than 4 faces)`);return Ys(e,i,n)}function Zs(e,t,n,r){return Ys(e,{points:t,faces:n},r)}function Qs(e,t,n){if(t.length<4)throw Error(`hullFromPoints: fewer than 4 points`);let r=g(t,n);if(r.faces.length<4)throw Error(`hullFromPoints: degenerate hull (fewer than 4 faces)`);return Ys(e,r,n)}function $s(e){return{hull:(t,n)=>Xs(e,t,n),hullFromPoints:(t,n)=>Qs(e,t,n),buildSolidFromFaces:(t,n,r)=>Zs(e,t,n,r)}}function ec(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepBuilderAPI_MakeEdge_3(r,i),o=a.Edge();return a.delete(),r.delete(),i.delete(),o}function tc(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Dir_5(n[0],n[1],n[2]),o=new e.gp_Ax2_4(i,a),s=new e.gp_Circ_2(o,r),c=new e.BRepBuilderAPI_MakeEdge_8(s),l=c.Edge();return c.delete(),s.delete(),o.delete(),a.delete(),i.delete(),l}function nc(e,t,n,r,i,a){let o=new e.gp_Pnt_3(t[0],t[1],t[2]),s=new e.gp_Dir_5(n[0],n[1],n[2]),c=new e.gp_Ax2_4(o,s),l=new e.gp_Circ_2(c,r),u=new e.BRepBuilderAPI_MakeEdge_9(l,i,a),d=u.Edge();return u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),d}function rc(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_4(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function ic(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Vec_4(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_5(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function ac(e,t,n,r,i,a){let o=new e.gp_Pnt_3(t[0],t[1],t[2]),s=new e.gp_Dir_5(n[0],n[1],n[2]),c;if(a){let t=new e.gp_Dir_5(a[0],a[1],a[2]);c=new e.gp_Ax2_2(o,s,t),t.delete()}else c=new e.gp_Ax2_4(o,s);let l=new e.gp_Elips_2(c,r,i),u=new e.BRepBuilderAPI_MakeEdge_12(l),d=u.Edge();return u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),d}function oc(e,t,n,r,i,a,o,s){let c=new e.gp_Pnt_3(t[0],t[1],t[2]),l=new e.gp_Dir_5(n[0],n[1],n[2]),u;if(s){let t=new e.gp_Dir_5(s[0],s[1],s[2]);u=new e.gp_Ax2_2(c,l,t),t.delete()}else u=new e.gp_Ax2_4(c,l);let d=new e.gp_Elips_2(u,r,i),f=new e.BRepBuilderAPI_MakeEdge_13(d,a,o),p=f.Edge();return f.delete(),d.delete(),u.delete(),l.delete(),c.delete(),p}function sc(e,n){let r=new e.TColgp_Array1OfPnt_2(1,n.length);for(let i=0;i<n.length;i++){let a=t(n,i),o=new e.gp_Pnt_3(a[0],a[1],a[2]);r.SetValue_1(i+1,o),o.delete()}let i=new e.Geom_BezierCurve_1(r),a=new e.Handle_Geom_Curve_2(i),o=new e.BRepBuilderAPI_MakeEdge_24(a),s=o.Edge();return o.delete(),a.delete(),r.delete(),s}function cc(e,t,n,r,i=[0,0,0],a=[0,0,1],o=!1){let s=e.HelixWireBuilder;if(typeof s?.build==`function`){let e=s.build(r,t,n,i[0],i[1],i[2],a[0],a[1],a[2],o);if(!e.IsNull())return e}let c=n/t,l=o?-2*Math.PI:2*Math.PI,u=new e.gp_Pnt_3(i[0],i[1],i[2]),d=new e.gp_Dir_5(a[0],a[1],a[2]),f=new e.gp_Ax3_5(u,d),p=new e.Geom_CylindricalSurface_1(f,r);f.delete();let m=new e.gp_Pnt2d_3(0,0),h=new e.gp_Dir2d_5(l,t),g=new e.Geom2d_Line_3(m,h),_=g.Value(0),v=g.Value(c*Math.sqrt((2*Math.PI)**2+t**2)),y=new e.GCE2d_MakeSegment_1(_,v),b=new e.Handle_Geom2d_Curve_2(y.Value().get()),x=new e.Handle_Geom_Surface_2(p),S=new e.BRepBuilderAPI_MakeEdge_30(b,x),C=S.Edge();e.BRepLib.BuildCurves3d_2(C);let w=new e.BRepBuilderAPI_MakeWire_2(C),ee=w.Wire();return w.delete(),S.delete(),b.delete(),x.delete(),_.delete(),v.delete(),g.delete(),m.delete(),h.delete(),d.delete(),u.delete(),ee}function lc(e,t,n,r){let i=Math.sqrt(t*n/r),a=t/i,o=n/i,s=new e.gp_Pnt_3(0,0,0),c=new e.gp_Dir_5(0,1,0),l=new e.gp_Ax1_2(s,c),u=new e.gp_Dir_5(0,0,1),d=new e.gp_Ax1_2(s,u),f=new e.gp_Dir_5(1,0,0),p=new e.gp_Ax1_2(s,f),m=new e.gp_GTrsf_1;m.SetAffinity_1(l,a);let h=new e.gp_GTrsf_1;h.SetAffinity_1(d,i);let g=new e.gp_GTrsf_1;return g.SetAffinity_1(p,o),m.Multiply(h),m.Multiply(g),h.delete(),g.delete(),l.delete(),d.delete(),p.delete(),c.delete(),u.delete(),f.delete(),s.delete(),{transform:m,applyToPoint(t){let n=t.XYZ();m.Transforms_1(n);let r=new e.gp_Pnt_2(n);return n.delete(),r}}}function uc(e,t,n,r){let i=new e.gp_Sphere_1;i.SetRadius(1);let a=new e.Geom_SphericalSurface_2(i),o=e.GeomConvert.SurfaceToBSplineSurface(a.UReversed()).get();i.delete(),a.delete();try{let i=lc(e,t,n,r),a=o.NbUPoles(),s=o.NbVPoles();for(let t=1;t<=a;t++)for(let n=1;n<=s;n++){let r=e.bsplineSurfacePole(o,t,n),a=i.applyToPoint(r);o.SetPole_1(t,n,a),r.delete(),a.delete()}i.transform.delete();let c=new e.BRepBuilderAPI_MakeShell_2(o.UReversed(),!1),l=c.Shell();c.delete();let u=new e.ShapeFix_Solid_1,d=u.SolidFromShell(l);return u.delete(),d}finally{o.delete()}}function dc(e,t){let n=new e.TopoDS_Builder,r=new e.TopoDS_Compound;n.MakeCompound(r);for(let e of t)n.Add(r,e);return n.delete(),r}function fc(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepPrimAPI_MakeBox_4(r,i),o=a.Solid();return a.delete(),r.delete(),i.delete(),o}function pc(e,t){let n=new e.ShapeFix_Solid_1,r=n.SolidFromShell(e.TopoDS_Cast.Shell(t));return n.delete(),r}function mc(e,t){return e.BRepToolsWrapper.Write(t)}function hc(e,t){return e.BRepToolsWrapper.Read(t)}function gc(e,t,n={}){let r=n.unit??`MM`;e.Interface_Static.SetCVal(`xstep.cascade.unit`,r),e.Interface_Static.SetCVal(`write.step.unit`,r),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,5),new e.STEPCAFControl_Writer_1().delete();let i=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),a=new e.TDocStd_Document(i);i.delete();let o=a.Main(),s=e.XCAFDoc_DocumentTool.ShapeTool(o).get(),c=e.XCAFDoc_DocumentTool.ColorTool(o).get();e.XCAFDoc_ShapeTool.SetAutoNaming(!1);for(let n of t){let t=s.AddShape(n.shape,!1,!0),r=new e.TCollection_ExtendedString_2(n.name,!0);if(e.TDataStd_Name.Set_1(t,r),r.delete(),n.color){let[r,i,a,o]=n.color,s=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,o/255);c.SetColor_6(t,s,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),s.delete()}}let l=new e.XSControl_WorkSession,u=new e.Handle_XSControl_WorkSession_2(l),d=new e.STEPCAFControl_Writer_2(u,!1),f=new e.Handle_TDocStd_Document_2(a),p=new e.Message_ProgressRange_1;d.Transfer_1(f,e.STEPControl_StepModelType.STEPControl_AsIs,null,p),p.delete();let m=`assembly_export_${Date.now()}.step`,h=d.Write_1(m),g=``;if(h===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+m);g=new TextDecoder().decode(t),e.FS.unlink(`/`+m)}return d.delete(),u.delete(),f.delete(),a.delete(),g}function _c(e,t){try{t.delete()}catch{}}function vc(e,t,n){let r=ec(e,[0,0,0],[t,0,0]),i=ec(e,[t,0,0],[t,n,0]),a=ec(e,[t,n,0],[0,n,0]),o=ec(e,[0,n,0],[0,0,0]),s=new e.BRepBuilderAPI_MakeWire_1;s.Add_1(r),s.Add_1(i),s.Add_1(a),s.Add_1(o);let c=s.Wire();s.delete(),r.delete(),i.delete(),a.delete(),o.delete();let l=new e.BRepBuilderAPI_MakeFace_15(c,!1),u=l.Face();return l.delete(),u}function yc(e,t,n,r){return new e.gp_Pnt_3(t,n,r)}function bc(e,t,n,r){return new e.gp_Dir_5(t,n,r)}function xc(e,t,n,r){return new e.gp_Vec_4(t,n,r)}function Sc(e,t,n,r,i,a,o){let s=new e.gp_Pnt_3(t,n,r),c=new e.gp_Dir_5(i,a,o),l=new e.gp_Ax1_2(s,c);return s.delete(),c.delete(),l}function Cc(e,t,n,r,i,a,o,s,c,l){let u=new e.gp_Pnt_3(t,n,r),d=new e.gp_Dir_5(i,a,o),f;if(s!==void 0&&c!==void 0&&l!==void 0){let t=new e.gp_Dir_5(s,c,l);f=new e.gp_Ax2_2(u,d,t),t.delete()}else f=new e.gp_Ax2_4(u,d);return u.delete(),d.delete(),f}function wc(e,t,n,r,i,a,o,s,c,l){let u=new e.gp_Pnt_3(t,n,r),d=new e.gp_Dir_5(i,a,o),f;if(s!==void 0&&c!==void 0&&l!==void 0){let t=new e.gp_Dir_5(s,c,l);f=new e.gp_Ax3_3(u,d,t),t.delete()}else f=new e.gp_Ax3_5(u,d);return u.delete(),d.delete(),f}function Tc(e){return{makeLineEdge:(t,n)=>ec(e,t,n),makeCircleEdge:(t,n,r)=>tc(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>nc(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>rc(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>ac(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>oc(e,t,n,r,i,a,o,s),makeBezierEdge:t=>sc(e,t),makeTangentArc:(t,n,r)=>ic(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>cc(e,t,n,r,i,a,o),makeCompound:t=>dc(e,t),makeBoxFromCorners:(t,n)=>fc(e,t,n),makeRectangle:(t,n)=>vc(e,t,n),solidFromShell:t=>pc(e,t),makeEllipsoid:(t,n,r)=>uc(e,t,n,r),toBREP:t=>mc(e,t),fromBREP:t=>hc(e,t),exportSTEPAssembly:(t,n)=>gc(e,t,n??{}),dispose:t=>{_c(e,t)},createPoint3d:(t,n,r)=>yc(e,t,n,r),createDirection3d:(t,n,r)=>bc(e,t,n,r),createVector3d:(t,n,r)=>xc(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>Sc(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>Cc(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>wc(e,t,n,r,i,a,o,s,c,l)}}function Ec(e,t,n,r){let i=Mo(`extrude`);try{let i=new e.gp_Vec_4(n[0]*r,n[1]*r,n[2]*r),a=new e.BRepPrimAPI_MakePrism_1(t,i,!1,!0),o=a.Shape();return a.delete(),i.delete(),o}finally{i()}}function Dc(e,t,n,r){let i=new e.BRepPrimAPI_MakeRevol_1(t,n,r,!1),a=i.Shape();return i.delete(),a}function Oc(e,t,n=!1,r,i){let a=Mo(`loft`);try{let a=new e.BRepOffsetAPI_ThruSections(!0,n,1e-6);r&&a.AddVertex(r);for(let e of t)a.AddWire(e);i&&a.AddVertex(i);let o=new e.Message_ProgressRange_1;a.Build(o);let s=a.Shape();return a.delete(),o.delete(),s}finally{a()}}function kc(e,t,n,r={}){let{transitionMode:i}=r,a=new e.BRepOffsetAPI_MakePipeShell(n);typeof a.SetIsBuildHistory==`function`&&a.SetIsBuildHistory(!1),i!==void 0&&a.SetTransitionMode(i),a.Add_1(t,!1,!1);let o=new e.Message_ProgressRange_1;if(a.Build(o),o.delete(),!a.IsDone())throw a.delete(),Error(`Sweep build failed (IsDone=false)`);a.MakeSolid();let s=a.Shape();return a.delete(),s}function Ac(e,t,n){let r=new e.BRepOffsetAPI_MakePipe_1(n,t),i=new e.Message_ProgressRange_1;r.Build(i),i.delete();let a=r.Shape();if(a.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_SHELL){let t=new e.BRepBuilderAPI_MakeSolid_1,n=e.TopoDS_Cast.Shell(a);t.Add(n);let i=new e.Message_ProgressRange_1;t.Build(i),i.delete();let o=a;if(t.IsDone()){let n=t.Solid(),r=new e.BRepCheck_Analyzer(n,!0,!1,!1);r.IsValid_2()?o=n:n.delete(),r.delete()}return n.delete(),t.delete(),r.delete(),o}return r.delete(),a}var jc,Mc;function Nc(){jc=void 0}function Pc(){Mc=void 0}function Fc(e){return jc??=typeof e.LoftBatch==`function`,jc}function Ic(e){return Mc??=typeof e.ExtrudeBatch==`function`,Mc}function Lc(e,t){if(t.length===0)return[];if(Fc(e)){let n=Mo(`loft`),r=new e.LoftBatch;try{for(let e of t){let t=r.beginLoft(e.solid??!0,e.ruled??!1,e.tolerance??1e-6);e.startVertex&&r.setStartVertex(t,e.startVertex);for(let n of e.wires)r.addWire(t,n);e.endVertex&&r.setEndVertex(t,e.endVertex)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Oc(e,t.wires,t.ruled??!1,t.startVertex,t.endVertex))}function Rc(e,t){if(t.length===0)return[];if(Ic(e)){let n=Mo(`extrude`),r=new e.ExtrudeBatch;try{for(let e of t)r.addExtrude(e.face,e.direction[0]*e.length,e.direction[1]*e.length,e.direction[2]*e.length);let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Ec(e,t.face,t.direction,t.length))}function zc(e){return{extrude:(t,n,r)=>Ec(e,t,n,r),revolve:(t,n,r)=>Dc(e,t,n,r),loft:(t,n,r,i)=>Oc(e,t,n,r,i),sweep:(t,n,r)=>kc(e,t,n,r??{}),simplePipe:(t,n)=>Ac(e,t,n),loftBatch:t=>Lc(e,t),extrudeBatch:t=>Rc(e,t)}}function Bc(e,t,n,r){let i=Mo(`fillet`);try{let i=new e.BRepFilletAPI_MakeFillet(t,e.ChFi3d_FilletShape.ChFi3d_Rational);for(let t of n){let n=typeof r==`function`?r(t):r,a=e.TopoDS_Cast.Edge(t);if(typeof n==`number`)n>0&&i.Add_2(n,a);else{let[e,t]=n;e>0&&t>0&&i.Add_3(e,t,a)}}let a=i.Shape();return i.delete(),a}finally{i()}}function Vc(e,t,n,r){let i=new e.BRepFilletAPI_MakeChamfer(t),a=null;function o(){if(a)return a;a=new Map;let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let t=e.TopoDS_Cast.Face(n.Current()),r=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;r.More();){let n=e.shapeHashCode(r.Current(),2147483647);a.has(n)||a.set(n,t),r.Next()}r.delete(),n.Next()}return n.delete(),a}function s(t){return o().get(e.shapeHashCode(t,2147483647))??null}for(let t of n){let n=typeof r==`function`?r(t):r,a=e.TopoDS_Cast.Edge(t);if(typeof n==`number`)n>0&&i.Add_2(n,a);else{let[e,r]=n;if(e>0&&r>0){let n=s(t);n&&i.Add_3(e,r,a,n)}}}let c=i.Shape();return i.delete(),c}function Hc(e,t,n,r,i=.001){let a=Mo(`shell`);try{let a=new e.TopTools_ListOfShape_1;for(let e of n)a.Append_1(e);let o=new e.Message_ProgressRange_1,s=new e.BRepOffsetAPI_MakeThickSolid;s.MakeThickSolidByJoin(t,a,-r,i,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,o);let c=s.Shape();return s.delete(),a.delete(),o.delete(),c}finally{a()}}function Uc(e,t,n){let r=new e.BRepOffsetAPI_MakeThickSolid;r.MakeThickSolidBySimple(t,n);let i=new e.Message_ProgressRange_1;r.Build(i);let a=r.Shape();return r.delete(),i.delete(),a}function Wc(e,t,n,r,i){let a=new e.BRepFilletAPI_MakeChamfer(t),o=i*Math.PI/180,s=new Map,c=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;c.More();){let t=e.TopoDS_Cast.Face(c.Current()),n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let r=e.shapeHashCode(n.Current(),2147483647);s.has(r)||s.set(r,t),n.Next()}n.delete(),c.Next()}c.delete();for(let t of n){let n=s.get(e.shapeHashCode(t,2147483647))??null;n&&r>0&&a.AddDA(r,o,e.TopoDS_Cast.Edge(t),n)}let l=a.Shape();return a.delete(),l}function Gc(e,t,n,r){let i;i=typeof r==`string`?{arc:e.GeomAbs_JoinType.GeomAbs_Arc,intersection:e.GeomAbs_JoinType.GeomAbs_Intersection,tangent:e.GeomAbs_JoinType.GeomAbs_Tangent}[r]??e.GeomAbs_JoinType.GeomAbs_Arc:r??e.GeomAbs_JoinType.GeomAbs_Arc;let a=new e.BRepOffsetAPI_MakeOffset_3(t,i,!1);a.Perform(n,0);let o=a.Shape();return a.delete(),o}function Kc(e,t,n,r=1e-6){let i=new e.Message_ProgressRange_1,a=new e.BRepOffsetAPI_MakeOffsetShape;a.PerformByJoin(t,n,r,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,i);let o=a.Shape();return a.delete(),i.delete(),o}var qc,Jc;function Yc(){qc=void 0}function Xc(){Jc=void 0}function Zc(e){return qc??=typeof e.ShellBatch==`function`,qc}function Qc(e){return Jc??=typeof e.FilletBatch==`function`,Jc}function $c(e,t){if(t.length===0)return[];if(Zc(e)){let n=Mo(`shell`),r=new e.ShellBatch;try{for(let e of t){let t=r.beginShell(e.shape,e.thickness,e.tolerance??.001);for(let n of e.faces)r.addFaceToRemove(t,n)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Hc(e,t.shape,t.faces,t.thickness,t.tolerance??.001))}function el(e,t){if(t.length===0)return[];if(Qc(e)){let n=Mo(`fillet`),r=new e.FilletBatch;try{for(let e of t){let t=r.beginFillet(e.shape);for(let n of e.edges)n.r2===void 0?r.addEdge(t,n.edge,n.radius):r.addEdgeVariable(t,n.edge,n.radius,n.r2)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>{let n=t.edges.map(e=>e.edge);return Bc(e,t.shape,n,e=>{let n=t.edges.find(t=>t.edge===e);return n?n.r2===void 0?n.radius:[n.radius,n.r2]:0})})}function tl(e){return{fillet:(t,n,r)=>Bc(e,t,n,r),chamfer:(t,n,r)=>Vc(e,t,n,r),chamferDistAngle:(t,n,r,i)=>Wc(e,t,n,r,i),shell:(t,n,r,i)=>Hc(e,t,n,r,i),thicken:(t,n)=>Uc(e,t,n),offset:(t,n,r)=>Kc(e,t,n,r),offsetWire2D:(t,n,r)=>Gc(e,t,n,r),shellBatch:t=>$c(e,t),filletBatch:t=>el(e,t)}}var nl;function rl(){nl=void 0}function il(e){return nl??=typeof e.TransformBatch==`function`,nl}function al(e,t){if(t.length===0)return[];let n=Mo(`transform`);try{if(il(e)){let n=new e.TransformBatch;try{for(let e of t)switch(e.type){case`translate`:n.addTranslate(e.shape,e.x,e.y,e.z);break;case`rotate`:n.addRotate(e.shape,e.angle*Math.PI/180,...e.axis,...e.center);break;case`scale`:n.addScale(e.shape,...e.center,e.factor);break;case`mirror`:n.addMirror(e.shape,...e.origin,...e.normal);break}let e=n.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{n.delete()}}return t.map(t=>{switch(t.type){case`translate`:return cl(e,t.shape,t.x,t.y,t.z);case`rotate`:return ll(e,t.shape,t.angle,[...t.axis],[...t.center]);case`scale`:return dl(e,t.shape,[...t.center],t.factor);case`mirror`:return ul(e,t.shape,[...t.origin],[...t.normal])}})}finally{n()}}function ol(e,t,n){let r=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),i=r.ModifiedShape(t);return r.delete(),i}function sl(e,t,n){let r=new e.BRepBuilderAPI_Transform_2(t,n,!1,!1);try{return r.ModifiedShape(t)}finally{r.delete()}}function cl(e,t,n,r,i){let a=new e.gp_Trsf_1,o=new e.gp_Vec_4(n,r,i);a.SetTranslation_1(o);let s=ol(e,t,a);return a.delete(),o.delete(),s}function ll(e,t,n,r=[0,0,1],i=[0,0,0]){let a=new e.gp_Trsf_1,o=new e.gp_Pnt_3(...i),s=new e.gp_Dir_5(...r),c=new e.gp_Ax1_2(o,s);a.SetRotation_1(c,n*Math.PI/180);let l=ol(e,t,a);return a.delete(),c.delete(),o.delete(),s.delete(),l}function ul(e,t,n,r){let i=new e.gp_Trsf_1,a=new e.gp_Pnt_3(...n),o=new e.gp_Dir_5(...r),s=new e.gp_Ax2_4(a,o);i.SetMirror_3(s);let c=ol(e,t,i);return i.delete(),s.delete(),a.delete(),o.delete(),c}function dl(e,t,n,r){let i=new e.gp_Trsf_1,a=new e.gp_Pnt_3(...n);i.SetScale(a,r);let o=ol(e,t,i);return i.delete(),a.delete(),o}function fl(e,t,n,r,i){if(i){let i=new e.gp_Trsf_1;i.SetValues(n[0],n[1],n[2],r[0],n[3],n[4],n[5],r[1],n[6],n[7],n[8],r[2]);let a=new e.BRepBuilderAPI_Transform_2(t,i,!0,!1),o=a.ModifiedShape(t);return a.delete(),i.delete(),o}let a=new e.gp_GTrsf_1;for(let e=0;e<3;e++)for(let t=0;t<3;t++)a.SetValue(e+1,t+1,n[e*3+t]);let o=new e.gp_XYZ_2(r[0],r[1],r[2]);a.SetTranslationPart(o),o.delete();let s=new e.BRepBuilderAPI_GTransform_2(t,a,!0),c=s.ModifiedShape(t);return s.delete(),a.delete(),c}function pl(e,t){let n=new e.ShapeUpgrade_UnifySameDomain_2(t,!0,!0,!1);n.Build();let r=n.Shape();return n.delete(),r}function ml(e){return{transform:(t,n)=>ol(e,t,n),locate:(t,n)=>sl(e,t,n),translate:(t,n,r,i)=>cl(e,t,n,r,i),rotate:(t,n,r,i)=>ll(e,t,n,r,i),mirror:(t,n,r)=>ul(e,t,n,r),scale:(t,n,r)=>dl(e,t,n,r),transformBatch:t=>al(e,t),generalTransform:(t,n,r,i)=>fl(e,t,n,r,i),simplify:t=>pl(e,t)}}function hl(e,t,n){if(n===0)return new Float32Array;let r=t/4;return e.slice(r,r+n)}function gl(e,t,n){let r=Mo(`mesh`);try{let r=e.MeshExtractor.extract(t,n.tolerance,n.angularTolerance,!!n.skipNormals,!!n.includeUVs),i=r.getVerticesSize(),a=r.getNormalsSize(),o=r.getTrianglesSize(),s=r.getFaceGroupsSize(),c=r.getUvsSize(),l=hl(e.HEAPF32,r.getVerticesPtr(),i),u=n.skipNormals||a===0?new Float32Array:hl(e.HEAPF32,r.getNormalsPtr(),a),d=r.getTrianglesPtr()/4,f=e.HEAPU32.slice(d,d+o),p=c>0?hl(e.HEAPF32,r.getUvsPtr(),c):new Float32Array,m=[];if(s>0){let t=r.getFaceGroupsPtr()/4,n=e.HEAP32.slice(t,t+s);for(let e=0;e<n.length;e+=3)m.push({start:n[e],count:n[e+1],faceHash:n[e+2]})}return r.delete(),{vertices:l,normals:u,triangles:f,uvs:p,faceGroups:m}}finally{r()}}function _l(e,t,n,r){let i=Mo(`edgeMesh`);try{let i=e.EdgeMeshExtractor.extract(t,n,r),a=i.getLinesSize(),o=i.getEdgeGroupsSize(),s=hl(e.HEAPF32,i.getLinesPtr(),a),c=[];if(o>0){let t=i.getEdgeGroupsPtr()/4,n=e.HEAP32.slice(t,t+o);for(let e=0;e<n.length;e+=3)c.push({start:n[e],count:n[e+1],edgeHash:n[e+2]})}return i.delete(),{lines:s,edgeGroups:c}}finally{i()}}function vl(e){return{mesh:(t,n)=>gl(e,t,n),meshEdges:(t,n,r)=>_l(e,t,n,r)}}var yl=0;function bl(e,t){return`${e}_${++yl}.${t}`}function xl(e,t){let n=e.StepStreamIO;if(typeof n?.exportSTEP==`function`&&t.length===1)return n.exportSTEP(t[0],5);let r=new e.STEPControl_Writer_1;e.Interface_Static.SetIVal(`write.step.schema`,5),r.Model(!0).delete();let i=new e.Message_ProgressRange_1;for(let n of t)r.Transfer_1(n,e.STEPControl_StepModelType.STEPControl_AsIs,!0,i);let a=bl(`_export`,`step`),o=r.Write(a);if(r.delete(),i.delete(),o===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+a);return e.FS.unlink(`/`+a),new TextDecoder().decode(t)}throw Error(`STEP export failed: writer did not complete successfully`)}function Sl(e,t,n=!1){let r=bl(`_export`,`stl`);if(e.StlAPI.Write(t,r,!n)){let t=e.FS.readFile(`/`+r);return e.FS.unlink(`/`+r),n?t.buffer:new TextDecoder().decode(t)}throw Error(`STL export failed: StlAPI.Write returned false`)}function Cl(e,t){let n=new e.IGESControl_Writer_1;for(let e of t)n.AddShape(e);n.ComputeModel();let r=bl(`_export`,`iges`),i=n.Write_2(r);if(n.delete(),i){let t=e.FS.readFile(`/`+r);return e.FS.unlink(`/`+r),new TextDecoder().decode(t)}throw Error(`IGES export failed: writer did not complete successfully`)}function wl(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(new Uint8Array(t)),r=e.StepStreamIO;if(typeof r?.importSTEP==`function`){let e=r.importSTEP(n);if(e.IsNull())throw Error(`Failed to import STEP file: stream reader could not parse the input data`);return[e]}let i=bl(`_import`,`step`),a=new TextEncoder().encode(n);e.FS.writeFile(`/`+i,a);let o=new e.STEPControl_Reader_1;if(o.ReadFile(i)){e.FS.unlink(`/`+i);let t=new e.Message_ProgressRange_1;o.TransferRoots(t),t.delete();let n=o.OneShape();return o.delete(),[n]}throw e.FS.unlink(`/`+i),o.delete(),Error(`Failed to import STEP file: reader could not parse the input data`)}function Tl(e,t){let n=bl(`_import`,`stl`),r=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);e.FS.writeFile(`/`+n,r);let i=new e.StlAPI_Reader,a=new e.TopoDS_Shape;if(i.Read_1(a,`/`+n)){e.FS.unlink(`/`+n);let t=new e.ShapeUpgrade_UnifySameDomain_2(a,!0,!0,!1);t.Build();let r=t.Shape(),o=new e.BRepBuilderAPI_MakeSolid_1;o.Add(e.TopoDS_Cast.Shell(r));let s=o.Solid();return a.delete(),t.delete(),o.delete(),i.delete(),s}throw e.FS.unlink(`/`+n),a.delete(),i.delete(),Error(`Failed to import STL file: reader could not parse the input data`)}function El(e,t){let n=bl(`_import`,`iges`),r=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);e.FS.writeFile(`/`+n,r);let i=new e.IGESControl_Reader_1;if(i.ReadFile(n)===e.IFSelect_ReturnStatus.IFSelect_RetDone){e.FS.unlink(`/`+n);let t=new e.Message_ProgressRange_1;i.TransferRoots(t),t.delete();let r=i.OneShape();return i.delete(),[r]}throw e.FS.unlink(`/`+n),i.delete(),Error(`Failed to import IGES file: reader could not parse the input data`)}function Dl(e){return{exportSTEP:t=>xl(e,t),exportSTL:(t,n)=>Sl(e,t,n),importSTEP:t=>wl(e,t),importSTL:t=>Tl(e,t),exportIGES:t=>Cl(e,t),importIGES:t=>El(e,t)}}function Ol(e,t){let n=e.BRep_Tool.Pnt(t),r=[n.X(),n.Y(),n.Z()];return n.delete(),r}function kl(e){let t=e.GeomAbs_SurfaceType;return new Map([[t.GeomAbs_Plane,`plane`],[t.GeomAbs_Cylinder,`cylinder`],[t.GeomAbs_Cone,`cone`],[t.GeomAbs_Sphere,`sphere`],[t.GeomAbs_Torus,`torus`],[t.GeomAbs_BezierSurface,`bezier`],[t.GeomAbs_BSplineSurface,`bspline`],[t.GeomAbs_SurfaceOfRevolution,`revolution`],[t.GeomAbs_SurfaceOfExtrusion,`extrusion`],[t.GeomAbs_OffsetSurface,`offset`],[t.GeomAbs_OtherSurface,`other`]])}var Al=new WeakMap;function jl(e,t){let n=Al.get(e);n||(n=kl(e),Al.set(e,n));let r=new e.BRepAdaptor_Surface_2(t,!1),i=r.GetType();return r.delete(),n.get(i)??`other`}function Ml(e,t){let n=e.BRepTools.UVBounds_1(t);return{uMin:n.UMin,uMax:n.UMax,vMin:n.VMin,vMax:n.VMax}}function Nl(e,t){return e.BRepTools.OuterWire(t)}function Pl(e,t,n,r){let i=new e.BRepGProp_Face_2(t,!1),a=new e.gp_Pnt_1,o=new e.gp_Vec_1;i.Normal(n,r,a,o);let s=[o.X(),o.Y(),o.Z()];return i.delete(),a.delete(),o.delete(),s}function Fl(e,t,n,r){let i=new e.BRepAdaptor_Surface_2(t,!1),a=new e.gp_Pnt_1;i.D0(n,r,a);let o=[a.X(),a.Y(),a.Z()];return i.delete(),a.delete(),o}function Il(e,t,n){let r=e.BRep_Tool.Surface_2(t),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.GeomAPI_ProjectPointOnSurf_2(i,r,e.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad),o=null;if(a.NbPoints()>0){let e=a.LowerDistanceParameters();o=[e.U,e.V]}return a.delete(),i.delete(),o}function Ll(e,t,n){let r=e.BRep_Tool.Surface_2(t),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.GeomAPI_ProjectPointOnSurf_2(i,r,e.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad),o;if(a.NbPoints()>0){let e=a.NearestPoint();o=[e.X(),e.Y(),e.Z()],e.delete()}else o=n;return a.delete(),i.delete(),o}function Rl(e,t,n){let r=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),i=new e.gp_Pnt_1,a=new e.gp_Vec_1;r.D1(n,i,a);let o={point:[i.X(),i.Y(),i.Z()],tangent:[a.X(),a.Y(),a.Z()]};return r.delete(),i.delete(),a.delete(),o}function zl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=[n.FirstParameter(),n.LastParameter()];return n.delete(),r}function Bl(e,t,n){let r=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),i=r.Value(n),a=[i.X(),i.Y(),i.Z()];return i.delete(),r.delete(),a}function Vl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.IsClosed();return n.delete(),r}function Hl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.IsPeriodic();return n.delete(),r}function Ul(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.Period();return n.delete(),r}function Wl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.GetType();return n.delete(),{0:`LINE`,1:`CIRCLE`,2:`ELLIPSE`,3:`HYPERBOLA`,4:`PARABOLA`,5:`BEZIER_CURVE`,6:`BSPLINE_CURVE`,7:`OFFSET_CURVE`,8:`OTHER_CURVE`}[typeof r==`number`?r:Number(r?.value??r)]??`OTHER_CURVE`}function Gl(e,t){let n=t.Orientation_1(),r=e.TopAbs_Orientation;return n===r.TopAbs_FORWARD?`forward`:n===r.TopAbs_REVERSED?`reversed`:n===r.TopAbs_INTERNAL?`internal`:`external`}function Kl(e,t,n){switch(n??ql(e,t)){case`vertex`:return e.TopoDS_Cast.Vertex(t);case`edge`:return e.TopoDS_Cast.Edge(t);case`wire`:return e.TopoDS_Cast.Wire(t);case`face`:return e.TopoDS_Cast.Face(t);case`shell`:return e.TopoDS_Cast.Shell(t);case`solid`:return e.TopoDS_Cast.Solid(t);case`compsolid`:return e.TopoDS_Cast.CompSolid(t);default:return e.TopoDS_Cast.Compound(t)}}function ql(e,t){let n=t.ShapeType(),r=e.TopAbs_ShapeEnum;return n===r.TopAbs_VERTEX?`vertex`:n===r.TopAbs_EDGE?`edge`:n===r.TopAbs_WIRE?`wire`:n===r.TopAbs_FACE?`face`:n===r.TopAbs_SHELL?`shell`:n===r.TopAbs_SOLID?`solid`:n===r.TopAbs_COMPSOLID?`compsolid`:`compound`}function Jl(e,t,n){return e.shapeHashCode(t,n)}function Yl(e,t){return t.IsNull()}function Xl(e,t){return t.Reversed()}function Zl(e,t){let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE),r=new e.TopLoc_Location_1,i=!1;for(;n.More();){let t=e.TopoDS_Cast.Face(n.Current());if(!e.BRep_Tool_Triangulation(t,r,0).IsNull()){i=!0;break}n.Next()}return n.delete(),r.delete(),i}function Ql(e,t,n,r){new e.BRepMesh_IncrementalMeshWrapper(t,n,!1,r,!1).delete()}function $l(e,t){let n=new e.BRepAdaptor_Curve_2(t);try{let e=n.Bezier().get(),t=e.NbPoles();if(t<2)return null;let r=e.Pole(t-1),i=[r.X(),r.Y(),r.Z()];return r.delete(),i}catch{return null}finally{n.delete()}}function eu(e,t){return t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t)}function tu(e,t){let n=t.get();if(typeof n.Cylinder!=`function`)return null;let r=n.Cylinder(),i={radius:r.Radius(),isDirect:r.Direct()};return r.delete(),i}function nu(e,t){let n=null;try{if(t===7)return e.AxeOfRevolution();if(t===1)n=e.Cylinder();else if(t===2)n=e.Cone();else if(t===4)n=e.Torus();else return null;let r=n.Axis();return n.delete(),r}catch{return n?.delete?.(),null}}function ru(e,t){let n=new e.BRepAdaptor_Surface_2(t,!1);try{let e=n.GetType(),t=nu(n,typeof e==`number`?e:Number(e?.value??e));if(!t)return null;let r=null,i=null;try{return r=t.Location(),i=t.Direction(),{origin:[r.X(),r.Y(),r.Z()],direction:[i.X(),i.Y(),i.Z()]}}finally{r?.delete?.(),i?.delete?.(),t.delete()}}finally{n.delete()}}function iu(e,t){return t.get().UReversed()}function au(e){return{vertexPosition:t=>Ol(e,t),surfaceType:t=>jl(e,t),uvBounds:t=>Ml(e,t),outerWire:t=>Nl(e,t),surfaceNormal:(t,n,r)=>Pl(e,t,n,r),pointOnSurface:(t,n,r)=>Fl(e,t,n,r),uvFromPoint:(t,n)=>Il(e,t,n),projectPointOnFace:(t,n)=>Ll(e,t,n),curveTangent:(t,n)=>Rl(e,t,n),curveParameters:t=>zl(e,t),shapeOrientation:t=>Gl(e,t),downcast:(t,n)=>Kl(e,t,n),copyShape:t=>Kl(e,t),hashCode:(t,n)=>Jl(e,t,n),isNull:t=>Yl(e,t),hasTriangulation:t=>Zl(e,t),meshShape:(t,n,r)=>{Ql(e,t,n,r)},getBezierPenultimatePole:t=>$l(e,t),createCurveAdaptor:t=>eu(e,t),reverseShape:t=>Xl(e,t),curvePointAtParam:(t,n)=>Bl(e,t,n),curveIsClosed:t=>Vl(e,t),curveIsPeriodic:t=>Hl(e,t),curvePeriod:t=>Ul(e,t),curveType:t=>Wl(e,t),getSurfaceCylinderData:t=>tu(e,t),getSurfaceAxis:t=>ru(e,t),reverseSurfaceU:t=>iu(e,t)}}function ou(e,t){let n=new e.BRepAdaptor_Curve_2(t);try{let t=n.GetType(),r=typeof t==`number`?t:Number(t?.value??t),i=e.GeomAbs_CurveType,a=typeof i.GeomAbs_BSplineCurve==`number`?i.GeomAbs_BSplineCurve:Number(i.GeomAbs_BSplineCurve?.value??i.GeomAbs_BSplineCurve),o=typeof i.GeomAbs_BezierCurve==`number`?i.GeomAbs_BezierCurve:Number(i.GeomAbs_BezierCurve?.value??i.GeomAbs_BezierCurve);if(r!==a&&r!==o)return null;let s=n.BSpline(),c=s.get(),l=c.Degree(),u=c.NbPoles(),d=c.NbKnots(),f=c.IsPeriodic(),p=c.IsRational(),m=[];for(let e=1;e<=u;e++){let t=c.Pole(e);m.push([t.X(),t.Y(),t.Z()]),t.delete()}let h=[];for(let e=1;e<=u;e++)h.push(c.Weight(e));let g=[],_=[];for(let e=1;e<=d;e++)g.push(c.Knot(e)),_.push(c.Multiplicity(e));let v={degree:l,poles:m,weights:h,knots:g,multiplicities:_,isPeriodic:f,isRational:p};return s.delete(),v}catch{return null}finally{n.delete()}}function su(e,t){let n=new e.BRepAdaptor_Surface_2(t,!1);try{let t=n.GetType(),r=typeof t==`number`?t:Number(t?.value??t),i=e.GeomAbs_SurfaceType;if(r!==(typeof i.GeomAbs_BSplineSurface==`number`?i.GeomAbs_BSplineSurface:Number(i.GeomAbs_BSplineSurface?.value??i.GeomAbs_BSplineSurface)))return null;let a=n.BSpline(),o=a.get(),s=o.UDegree(),c=o.VDegree(),l=o.NbUPoles(),u=o.NbVPoles(),d=o.IsUPeriodic(),f=o.IsVPeriodic(),p=o.IsURational()||o.IsVRational(),m=[],h=[];for(let e=1;e<=l;e++){let t=[],n=[];for(let r=1;r<=u;r++){let i=o.Pole(e,r);t.push([i.X(),i.Y(),i.Z()]),i.delete(),n.push(o.Weight(e,r))}m.push(t),h.push(n)}let g=o.NbUKnots(),_=[],v=[];for(let e=1;e<=g;e++)_.push(o.UKnot(e)),v.push(o.UMultiplicity(e));let y=o.NbVKnots(),b=[],x=[];for(let e=1;e<=y;e++)b.push(o.VKnot(e)),x.push(o.VMultiplicity(e));let S={degreeU:s,degreeV:c,nbPolesU:l,nbPolesV:u,poles:m,weights:h,knotsU:_,knotsV:b,multiplicitiesU:v,multiplicitiesV:x,isPeriodicU:d,isPeriodicV:f,isRational:p};return a.delete(),S}catch{return null}finally{n.delete()}}function cu(e){return{getNurbsCurveData:t=>ou(e,t),getNurbsSurfaceData:t=>su(e,t)}}function lu(e,t,n={}){let{tolerance:r=1e-8}=n,i=new e.TColgp_Array1OfPnt_2(1,t.length),a=new e.gp_Pnt_1,o=1;for(let e of t)a.SetCoord_2(e[0],e[1],e[2]),i.SetValue_1(o++,a);a.delete();let s=new e.GeomAPI_PointsToBSpline_2(i,3,8,e.GeomAbs_Shape.GeomAbs_C2,r);if(i.delete(),!s.IsDone())throw s.delete(),Error(`Interpolation failed — GeomAPI_PointsToBSpline did not converge`);let c=s.Curve(),l=new e.Handle_Geom_Curve_2(c.get()),u=new e.BRepBuilderAPI_MakeEdge_24(l),d=u.Edge();return u.delete(),s.delete(),d}function uu(e,t,n={}){let{tolerance:r=.001,degMin:i=1,degMax:a=6,smoothing:o=null}=n,s=new e.TColgp_Array1OfPnt_2(1,t.length),c=new e.gp_Pnt_1,l=1;for(let e of t)c.SetCoord_2(e[0],e[1],e[2]),s.SetValue_1(l++,c);c.delete();let u;if(u=o?new e.GeomAPI_PointsToBSpline_5(s,o[0],o[1],o[2],a,e.GeomAbs_Shape.GeomAbs_C2,r):new e.GeomAPI_PointsToBSpline_2(s,i,a,e.GeomAbs_Shape.GeomAbs_C2,r),s.delete(),!u.IsDone())throw u.delete(),Error(`Approximation failed — GeomAPI_PointsToBSpline did not converge`);let d=u.Curve(),f=new e.Handle_Geom_Curve_2(d.get()),p=new e.BRepBuilderAPI_MakeEdge_24(f),m=p.Edge();return p.delete(),u.delete(),m}function du(e){return{interpolatePoints:(t,n)=>lu(e,t,n??{}),approximatePoints:(t,n)=>uu(e,t,n??{})}}function fu(e,t){let n=new e.ShapeFix_Solid_2(t),r=new e.Message_ProgressRange_1;n.Perform(r),r.delete();let i=n.Solid();return n.delete(),i.IsNull()?null:i}function pu(e,t){let n=new e.ShapeFix_Face_2(t);n.Perform();let r=n.Face();return n.delete(),r}function mu(e,t,n){let r;n?r=new e.ShapeFix_Wire_2(t,n,1e-6):(r=new e.ShapeFix_Wire_1,r.Load_1(t)),r.Perform();let i=r.Wire();return r.delete(),i}function hu(e){return{healSolid:t=>fu(e,t),healFace:t=>pu(e,t),healWire:(t,n)=>mu(e,t,n)}}var gu={modified:new Map,generated:new Map,deleted:new Set};function _u(e,t,n){let r=new Map;if(n===0)return r;let i=e.slice(t/4,t/4+n),a=0;for(;a+1<i.length;){let e=i[a++],t=i[a++];if(t<0||a+t>i.length)break;let n=[];for(let e=0;e<t;e++)n.push(i[a++]);r.set(e,n)}return r}function vu(e,t){try{let n=_u(e.HEAP32,t.getModifiedPtr(),t.getModifiedSize()),r=_u(e.HEAP32,t.getGeneratedPtr(),t.getGeneratedSize()),i=new Set,a=t.getDeletedSize();if(a>0){let n=t.getDeletedPtr()/4,r=e.HEAP32.slice(n,n+a);for(let e=0;e<r.length;e++)i.add(r[e])}return{modified:n,generated:r,deleted:i}}finally{t.delete()}}function yu(e,t,n){let r=[];if(t.Size()===0)return r;if(e.TopTools_ListIteratorOfListOfShape){let i=new e.TopTools_ListIteratorOfListOfShape(t);for(;i.More();)r.push(e.shapeHashCode(i.Value(),n)),i.Next();i.delete()}else{let i=new e.TopTools_ListOfShape_3(t);for(;i.Size()>0;)r.push(e.shapeHashCode(i.First_1(),n)),i.RemoveFirst();i.delete()}return r}function bu(e,t,n,r,i){if(r.length===0)return gu;let a=Array.isArray(n)?n:[n];if(e.EvolutionExtractor){let n,r,o;if(a.length===1)n=a[0];else{r=new e.TopoDS_Builder,o=new e.TopoDS_Compound,r.MakeCompound(o);for(let e of a)r.Add(o,e);n=o}let s;try{s=e.EvolutionExtractor.extract(t,n,i)}catch{}finally{r?.delete(),o?.delete()}if(s!==void 0)return vu(e,s)}let o=new Map,s=new Map,c=new Set,l=new Set(r),u=new Map;for(let t of a){let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let t=n.Current(),r=e.shapeHashCode(t,i);l.has(r)&&u.set(r,t),n.Next()}n.delete()}for(let[n,r]of u){if(t.IsDeleted?.(r)){c.add(n);continue}let a=t.Modified(r);a.Size()>0&&o.set(n,yu(e,a,i));let l=t.Generated(r);l.Size()>0&&s.set(n,yu(e,l,i))}return{modified:o,generated:s,deleted:c}}function xu(e,t,n,r,i){let a=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),o=a.Shape(),s=r.length===0?gu:bu(e,a,t,r,i);return a.delete(),{shape:o,evolution:s}}function Su(e,t,n,r,i,a,o){return a&&t.SimplifyResult(!0,!0,.001),{shape:t.Shape(),evolution:bu(e,t,n,r,i),diagnostics:o??{hasErrors:!1,hasWarnings:!1,messages:[]}}}function Cu(e,t,n,r,i){return{shape:t.Shape(),evolution:bu(e,t,n,r,i)}}function wu(e,t,n,r,i,a,o){let s=new e.gp_Trsf_1,c=new e.gp_Vec_4(n,r,i);s.SetTranslation_1(c),c.delete();let l=xu(e,t,s,a,o);return s.delete(),l}function Tu(e,t,n,r,i,a=[0,0,1],o=[0,0,0]){let s=new e.gp_Trsf_1,c=new e.gp_Pnt_3(o[0],o[1],o[2]),l=new e.gp_Dir_5(a[0],a[1],a[2]),u=new e.gp_Ax1_2(c,l);s.SetRotation_1(u,n),c.delete(),l.delete(),u.delete();let d=xu(e,t,s,r,i);return s.delete(),d}function Eu(e,t,n,r,i,a){let o=new e.gp_Trsf_1,s=new e.gp_Pnt_3(n[0],n[1],n[2]),c=new e.gp_Dir_5(r[0],r[1],r[2]),l=new e.gp_Ax2_4(s,c);o.SetMirror_3(l),s.delete(),c.delete(),l.delete();let u=xu(e,t,o,i,a);return o.delete(),u}function Du(e,t,n,r,i,a){let o=new e.gp_Trsf_1,s=new e.gp_Pnt_3(n[0],n[1],n[2]);o.SetScale(s,r),s.delete();let c=xu(e,t,o,i,a);return o.delete(),c}function Ou(e,t,n,r,i,a,o){let s=new e.gp_Trsf_1;s.SetValues(n[0],n[1],n[2],r[0],n[3],n[4],n[5],r[1],n[6],n[7],n[8],r[2]);let c=xu(e,t,s,a,o);return s.delete(),c}function ku(e){return{hasErrors:e.HasErrors(),hasWarnings:e.HasWarnings(),messages:[]}}function Au(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Fuse_3(t,n,o);gs(e,s,a.optimisation),_s(s,a.fuzzyValue),s.Build(o);let c=ku(s),l=Su(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function ju(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Cut_3(t,n,o);gs(e,s,a.optimisation),_s(s,a.fuzzyValue),s.Build(o);let c=ku(s),l=Su(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function Mu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Common_3(t,n,o);gs(e,s,a.optimisation),_s(s,a.fuzzyValue),s.Build(o);let c=ku(s),l=Su(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function Nu(e,t,n,r,i,a){let o=new e.BRepFilletAPI_MakeFillet(t,e.ChFi3d_FilletShape.ChFi3d_Rational);for(let t of n){let n=typeof r==`function`?r(t):r;Array.isArray(n)?o.Add_3(n[0],n[1],e.TopoDS_Cast.Edge(t)):o.Add_2(n,e.TopoDS_Cast.Edge(t))}let s=new e.Message_ProgressRange_1;o.Build(s),s.delete();let c=Cu(e,o,t,i,a);return o.delete(),c}function Pu(e,t,n,r,i,a){let o=new e.BRepFilletAPI_MakeChamfer(t),s=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE),c=new Map;for(;s.More();){let t=e.TopoDS_Cast.Face(s.Current()),n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();)c.set(e.shapeHashCode(n.Current(),a),t),n.Next();n.delete(),s.Next()}s.delete();for(let t of n){let n=typeof r==`function`?r(t):r,i=c.get(e.shapeHashCode(t,a));if(Array.isArray(n)&&i)o.Add_3(n[0],n[1],e.TopoDS_Cast.Edge(t),i);else{let r=Array.isArray(n)?n[0]:n;o.Add_2(r,e.TopoDS_Cast.Edge(t))}}let l=new e.Message_ProgressRange_1;o.Build(l),l.delete();let u=Cu(e,o,t,i,a);return o.delete(),u}function Fu(e,t,n,r,i,a,o=.001){let s=new e.BRepOffsetAPI_MakeThickSolid,c=new e.TopTools_ListOfShape_1;for(let e of n)c.Append_1(e);let l=new e.Message_ProgressRange_1;s.MakeThickSolidByJoin(t,c,-r,o,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,l),l.delete(),c.delete();let u=Cu(e,s,t,i,a);return s.delete(),u}function Iu(e,t,n,r,i){let a=new e.BRepOffsetAPI_MakeThickSolid;a.MakeThickSolidBySimple(t,n);let o=new e.Message_ProgressRange_1;a.Build(o),o.delete();let s=Cu(e,a,t,r,i);return a.delete(),s}function Lu(e,t,n,r,i,a=1e-6){let o=new e.BRepOffsetAPI_MakeOffsetShape,s=new e.Message_ProgressRange_1;o.PerformByJoin(t,n,a,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,s),s.delete();let c=Cu(e,o,t,r,i);return o.delete(),c}function Ru(e,t,n,r,i,a,o,s){if(!e.BRepOffsetAPI_DraftAngle)throw Error(`BRepOffsetAPI_DraftAngle not available in this WASM build. Rebuild brepjs-opencascade with the updated build config.`);let[c,l,u]=r,[d,f,p]=i,m=new e.gp_Dir_5(c,l,u),h=new e.gp_Pnt_3(d,f,p),g=new e.gp_Pln_3(h,m),_=new e.BRepOffsetAPI_DraftAngle_2(t);try{for(let t of n){let n=(typeof a==`function`?a(t):a)*Math.PI/180;_.Add(e.TopoDS_Cast.Face(t),m,n,g,!0)}let r=new e.Message_ProgressRange_1;return _.Build(r),r.delete(),Cu(e,_,t,o,s)}finally{_.delete(),g.delete(),h.delete(),m.delete()}}function zu(e){return{translateWithHistory:(t,n,r,i,a,o)=>wu(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>Tu(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>Eu(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>Du(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>Ou(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>Au(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>ju(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>Mu(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>Nu(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>Pu(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>Fu(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>Iu(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>Lu(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>Ru(e,t,n,r,i,a,o,s)}}function Bu(e,t,n,r){let i=new e.gp_GTrsf_1;for(let e=0;e<3;e++)for(let t=0;t<3;t++)i.SetValue(e+1,t+1,n[e*3+t]);let a=new e.gp_XYZ_2(r[0],r[1],r[2]);i.SetTranslationPart(a),a.delete();let o=new e.BRepBuilderAPI_GTransform_2(t,i,!0),s=o.Shape();return o.delete(),i.delete(),s}function Vu(e,t){let n=new e.gp_Trsf_1;for(let r of t){let t=new e.gp_Trsf_1;if(r.type===`translate`){let n=new e.gp_Vec_4(r.x,r.y,r.z);t.SetTranslation_1(n),n.delete()}else{let n=r.axis??[0,0,1],i=r.center??[0,0,0],a=new e.gp_Pnt_3(i[0],i[1],i[2]),o=new e.gp_Dir_5(n[0],n[1],n[2]),s=new e.gp_Ax1_2(a,o);t.SetRotation_1(s,r.angle*Math.PI/180),s.delete(),o.delete(),a.delete()}n.PreMultiply(t),t.delete()}return{handle:n,dispose:()=>n.delete()}}function Hu(e,t,n,r,i){return xu(e,t,n,r,i)}function Uu(e,t){if(!t)return;let n=e.BRepBuilderAPI_TransitionMode;switch(t){case`transformed`:return n.BRepBuilderAPI_Transformed;case`round`:return n.BRepBuilderAPI_RoundCorner;case`right`:return n.BRepBuilderAPI_RightCorner}}function Wu(e,t,n,r={}){let i=new e.BRepOffsetAPI_MakePipeShell(n);typeof i.SetIsBuildHistory==`function`&&i.SetIsBuildHistory(!1),r.tolerance!==void 0&&i.SetTolerance(r.tolerance,r.boundTolerance??r.tolerance,r.angularTolerance??1e-7),r.maxDegree!==void 0&&i.SetMaxDegree(r.maxDegree),r.maxSegments!==void 0&&i.SetMaxSegments(r.maxSegments);let a=Uu(e,r.transitionMode);a!==void 0&&i.SetTransitionMode(a),r.support?i.SetMode_4(r.support):r.frenet&&i.SetMode_1(!0),r.auxiliary&&i.SetMode_5(r.auxiliary,!1,e.BRepFill_TypeOfContact.BRepFill_NoContact);let o=!!r.contact,s=!!r.correction;r.law?i.SetLaw_1(t,r.law,o,s):i.Add_1(t,o,s);let c=new e.Message_ProgressRange_1;if(i.Build(c),c.delete(),!i.IsDone())throw i.delete(),Error(`Sweep pipe shell build failed (IsDone=false)`);if(r.shellMode){let e=i.Shape(),t=i.FirstShape(),n=i.LastShape();return i.delete(),{shape:e,firstShape:t,lastShape:n}}i.MakeSolid();let l=i.Shape();return i.delete(),l}function Gu(e,t,n={}){let r=n.solid??!0,i=n.ruled??!1,a=new e.BRepOffsetAPI_ThruSections(r,i,n.tolerance??1e-6);n.startVertex&&a.AddVertex(n.startVertex);for(let e of t)a.AddWire(e);n.endVertex&&a.AddVertex(n.endVertex);let o=new e.Message_ProgressRange_1;a.Build(o),o.delete();let s=a.Shape();return a.delete(),s}function Ku(e,t,n,r){if(t===`linear`){let t=new e.Law_Linear;return t.Set(0,1,n,r),t}let i=new e.Law_S;return i.Set_1(0,1,n,r),i}function qu(e,t,n,r,i){let a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Dir_5(r[0],r[1],r[2]),s=new e.gp_Ax1_2(a,o),c=new e.BRepPrimAPI_MakeRevol_1(t,s,i,!1),l=c.Shape();return c.delete(),s.delete(),o.delete(),a.delete(),l}function Ju(e,t,n,r,i){let a=[],o=new e.gp_Trsf_1;for(let s=0;s<i;s++){let i=n[0]*r*s,c=n[1]*r*s,l=n[2]*r*s,u=new e.gp_Vec_4(i,c,l);o.SetTranslation_1(u),u.delete();let d=new e.BRepBuilderAPI_Transform_2(t,o,!0,!1);a.push(d.Shape()),d.delete()}return o.delete(),a}function Yu(e,t,n,r,i,a){let o=[],s=new e.gp_Pnt_3(n[0],n[1],n[2]),c=new e.gp_Dir_5(r[0],r[1],r[2]),l=new e.gp_Ax1_2(s,c),u=new e.gp_Trsf_1;for(let n=0;n<a;n++){let r=i*n*Math.PI/180;u.SetRotation_1(l,r);let a=new e.BRepBuilderAPI_Transform_2(t,u,!0,!1);o.push(a.Shape()),a.delete()}return u.delete(),l.delete(),c.delete(),s.delete(),o}function Xu(e,t,n,r){let i=n.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(n,!1):new e.BRepAdaptor_Curve_2(n),a=new e.gp_Pnt_1,o=new e.gp_Vec_1;try{i.D1(r,a,o);let n=new e.gp_Dir_2(o),s=new(e.gp_Ax3_5??e.gp_Ax3_4)(a,n),c=new e.gp_Trsf_1;c.SetTransformation_2(s),c.Invert();let l=new e.BRepBuilderAPI_Transform_2(t,c,!0,!1),u=l.Shape();return l.delete(),c.delete(),s.delete(),n.delete(),u}finally{o.delete(),a.delete(),i.delete()}}function Zu(e,t){let n=new e.BRepOffsetAPI_MakeFilling(3,15,2,!1,1e-5,1e-4,.01,.1,8,9),r=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;r.More();){let t=e.TopoDS_Cast.Edge(r.Current());n.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,!0),r.Next()}r.delete();let i=new e.Message_ProgressRange_1;n.Build(i),i.delete();let a=n.Shape();return n.delete(),a}function Qu(e,t,n){let r=new e.BRepBuilderAPI_MakeFace_2(t);for(let e of n)r.Add(e);let i=r.Face();r.delete();let a=new e.ShapeFix_Face_2(i);a.FixOrientation_1(),a.Perform();let o=a.Face();return a.delete(),o}function $u(e,t){let n=e.BRepTools.OuterWire(t),r=e.BRep_Tool.Surface_2(t);try{let t=new e.BRepBuilderAPI_MakeFace_21(r,n,!0),i=t.Face();t.delete();let a=new e.ShapeFix_Face_2(i);a.FixOrientation_1(),a.Perform();let o=a.Face();return a.delete(),o}finally{r.delete(),n.delete()}}function ed(e,t,n){let r=t,i=!1;try{t.ShapeType!==void 0&&(r=e.BRep_Tool.Surface_2(t),i=!0)}catch{}let a=new e.BRepBuilderAPI_MakeFace_21(r,n,!0),o=a.Face();return a.delete(),i&&r.delete(),o}function td(e,n,r,i){let a=new e.TColgp_Array2OfPnt_2(1,r,1,i);for(let o=0;o<r;o++)for(let r=0;r<i;r++){let s=t(n,o*i+r),c=new e.gp_Pnt_3(s[0],s[1],s[2]);a.SetValue_1(o+1,r+1,c),c.delete()}let o=new e.GeomAPI_PointsToBSplineSurface_2(a,3,8,e.GeomAbs_Shape.GeomAbs_C2,.001),s=o.Surface();a.delete();let c=new e.BRepBuilderAPI_MakeFace_8(s,1e-6),l=c.Face();return c.delete(),o.delete(),l}function nd(e,n,r,i){let a=new e.BRepBuilderAPI_Sewing(1e-6,!0,!0,!0,!1);for(let o=0;o<r-1;o++)for(let r=0;r<i-1;r++){let s=o*i+r,c=(o+1)*i+r,l=o*i+(r+1),u=(o+1)*i+(r+1),d=t(n,s),f=t(n,c),p=t(n,l),m=t(n,u),h=rd(e,d,f,p);a.Add(h);let g=rd(e,f,m,p);a.Add(g)}let o=new e.Message_ProgressRange_1;a.Perform(o),o.delete();let s=a.SewedShape();return a.delete(),s}function rd(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.BRepBuilderAPI_MakeEdge_3(i,a),c=new e.BRepBuilderAPI_MakeEdge_3(a,o),l=new e.BRepBuilderAPI_MakeEdge_3(o,i),u=new e.BRepBuilderAPI_MakeWire_4(s.Edge(),c.Edge(),l.Edge()),d=u.Wire(),f=new e.BRepBuilderAPI_MakeFace_15(d,!0),p=f.Face();return f.delete(),u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),a.delete(),i.delete(),p}function id(e,t,n){let r=new e.BRepBuilderAPI_Sewing(n,!0,!0,!0,!1);for(let e of t)r.Add(e);let i=new e.Message_ProgressRange_1;r.Perform(i),i.delete();let a=r.SewedShape();r.delete();let o=new e.ShapeFix_Solid_1;try{let t=e.TopoDS_Cast.Shell(a);return o.SolidFromShell(t)}catch{return a}finally{o.delete()}}function ad(e,t){let n=new e.ShapeFix_Shape_1(t),r=new e.Message_ProgressRange_1;n.Perform(r);let i=n.Shape();return r.delete(),n.delete(),i}function od(e,t){let n=new e.ShapeFix_Wire_1;n.Load_1(t),n.FixSelfIntersection();let r=n.Wire();return n.delete(),r}function sd(){return{gaussian:0,mean:0,max:0,min:0,maxDirection:[1,0,0],minDirection:[0,1,0]}}function cd(e,t,n,r,i,a){let o=e*n-t*t;if(Math.abs(o)<1e-15)return null;let s=(e*a-2*t*i+n*r)/(2*o),c=(r*a-i*i)/o,l=Math.sqrt(Math.max(0,s*s-c)),u=s+l,d=s-l,f=(n*i-t*a)/o,p=(e*i-t*r)/o,m=(n*r-t*i)/o,h,g;return Math.abs(f)>1e-15?(h=f,g=u-m):Math.abs(p)>1e-15?(h=u-(e*a-t*i)/o,g=p):(h=1,g=0),{mean:s,gaussian:c,k1:u,k2:d,du1:h,dv1:g}}function ld(e,t,n,r){let i=new e.BRepAdaptor_Surface_2(t,!1),a=new e.gp_Pnt_1,o=new e.gp_Vec_1,s=new e.gp_Vec_1,c=new e.gp_Vec_1,l=new e.gp_Vec_1,u=new e.gp_Vec_1;i.D2(n,r,a,o,s,c,l,u);let d=o.Dot(o),f=o.Dot(s),p=s.Dot(s),m=o.Crossed(s),h=m.Magnitude(),g=sd();if(h>=1e-15){m.Divide(h);let e=cd(d,f,p,c.Dot(m),u.Dot(m),l.Dot(m));e&&(g={gaussian:e.gaussian,mean:e.mean,max:e.k1,min:e.k2,maxDirection:ud(o,s,e.du1,e.dv1),minDirection:ud(o,s,-e.dv1,e.du1)})}return a.delete(),o.delete(),s.delete(),c.delete(),l.delete(),u.delete(),m.delete(),i.delete(),g}function ud(e,t,n,r){let i=n*e.X()+r*t.X(),a=n*e.Y()+r*t.Y(),o=n*e.Z()+r*t.Z(),s=Math.sqrt(i*i+a*a+o*o);return s<1e-15?[1,0,0]:[i/s,a/s,o/s]}function dd(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.SurfaceProperties_2(t,n,1e-7,!0);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function fd(e,t){let n=new e.BRepExtrema_DistShapeShape_1;return n.LoadS1(t),{distanceTo(t){n.LoadS2(t);let r=new e.Message_ProgressRange_1;if(n.Perform(r),r.delete(),!n.IsDone())throw Error(`BRepExtrema_DistShapeShape failed`);let i=n.Value(),a=n.PointOnShape1(1),o=n.PointOnShape2(1),s={value:i,point1:[a.X(),a.Y(),a.Z()],point2:[o.X(),o.Y(),o.Z()]};return a.delete(),o.delete(),s},dispose(){n.delete()}}}function pd(e,t,n,r,i){let a=new e.HLRBRep_Algo_1;a.Add_2(t,0);let o=new e.gp_Pnt_3(n[0],n[1],n[2]),s=new e.gp_Dir_5(r[0],r[1],r[2]),c;if(i){let t=new e.gp_Dir_5(i[0],i[1],i[2]);c=new e.gp_Ax2_2(o,s,t),t.delete()}else c=new e.gp_Ax2_4(o,s);let l=new e.HLRAlgo_Projector_2(c);a.Projector_1(l),a.Update(),a.Hide_1();let u=new e.Handle_HLRBRep_Algo_2(a),d=new e.HLRBRep_HLRToShape(u),f={visible:{outline:d.OutLineVCompound_1(),smooth:d.Rg1LineVCompound_1(),sharp:d.VCompound_1()},hidden:{outline:d.OutLineHCompound_1(),smooth:d.Rg1LineHCompound_1(),sharp:d.HCompound_1()}};for(let t of[f.visible,f.hidden])for(let n of[t.outline,t.smooth,t.sharp])n.IsNull()||e.BRepLib.BuildCurves3d_2(n);return d.delete(),u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),f}function md(e,t,n,r,i,a,o){let s=a*Math.PI/180,c=+!!o,l=new e.BRepFeat_MakeDPrism(t,n,r,s,c,!0);if(i!==null){let t=new e.Message_ProgressRange_1;l.Perform_1(i,t),t.delete()}else l.PerformThruAll();let u=l.Shape();return l.delete(),u}function hd(e,t){let n=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),r=new e.TDocStd_Document(n);n.delete(),e.XCAFDoc_ShapeTool.SetAutoNaming(!1);let i=r.Main(),a=e.XCAFDoc_DocumentTool.ShapeTool(i).get(),o=e.XCAFDoc_DocumentTool.ColorTool(i).get();for(let n of t){let t=a.NewShape();a.SetShape(t,n.shape);let r=new e.TCollection_ExtendedString_2(n.name,!0);if(e.TDataStd_Name.Set_1(t,r),r.delete(),n.color){let[r,i,a,s]=n.color,c=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,s/255);o.SetColor_3(t,c,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),c.delete()}}return a.UpdateAssemblies(),r}function gd(e,t,n={}){if(n.unit||n.modelUnit){new e.STEPCAFControl_Writer_1().delete();let t=(n.modelUnit??n.unit??`MM`).toUpperCase(),r=(n.unit??n.modelUnit??`MM`).toUpperCase();e.Interface_Static.SetCVal(`xstep.cascade.unit`,t),e.Interface_Static.SetCVal(`write.step.unit`,r)}let r=new e.XSControl_WorkSession,i=new e.Handle_XSControl_WorkSession_2(r),a=new e.STEPCAFControl_Writer_2(i,!1);a.SetColorMode(!0),a.SetLayerMode(!0),a.SetNameMode(!0),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,!0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,5);let o=new e.Handle_TDocStd_Document_2(t),s=new e.Message_ProgressRange_1;a.Transfer_1(o,e.STEPControl_StepModelType.STEPControl_AsIs,null,s),s.delete();let c=bl(`_xcaf_export`,`step`),l=a.Write(c),u=``;if(l===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+c);u=new TextDecoder().decode(t),e.FS.unlink(`/`+c)}return a.delete(),i.delete(),u}function _d(e,t){new e.STEPCAFControl_Writer_1().delete();let n=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),r=new e.TDocStd_Document(n);n.delete();let i=r.Main(),a=e.XCAFDoc_DocumentTool.ShapeTool(i).get(),o=e.XCAFDoc_DocumentTool.ColorTool(i).get();e.XCAFDoc_ShapeTool.SetAutoNaming(!1);for(let n of t){let t=a.AddShape(n.shape,!1,!0);if(n.name){let r=new e.TCollection_ExtendedString_2(n.name,!0);e.TDataStd_Name.Set_1(t,r),r.delete()}if(n.color){let[r,i,a,s]=n.color,c=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,s/255);o.SetColor_3(t,c,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),c.delete()}}let s=new e.XSControl_WorkSession,c=new e.Handle_XSControl_WorkSession_2(s),l=new e.STEPCAFControl_Writer_2(c,!1),u=new e.Handle_TDocStd_Document_2(r),d=new e.Message_ProgressRange_1;l.Transfer_1(u,e.STEPControl_StepModelType.STEPControl_AsIs,null,d),d.delete();let f=bl(`_step_cfg_export`,`step`),p=l.Write(f),m=``;if(p===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+f);m=new TextDecoder().decode(t),e.FS.unlink(`/`+f)}return l.delete(),c.delete(),u.delete(),r.delete(),m}function vd(e,t){let n=new e.STEPControl_Writer_1;n.Model(!0).delete();let r=new e.Message_ProgressRange_1;for(let i of t)n.Transfer(i.shape,e.STEPControl_StepModelType.STEPControl_AsIs,!0,r);let i=bl(`_step_cfg_export`,`step`),a=n.Write(i);if(n.delete(),r.delete(),a===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+i);return e.FS.unlink(`/`+i),new TextDecoder().decode(t)}throw Error(`STEP configured export failed: writer did not complete successfully`)}function yd(e,t,n={}){let r=n.unit??`MM`,i=n.modelUnit??r,a=n.schema??5;return e.Interface_Static.SetCVal(`xstep.cascade.unit`,i),e.Interface_Static.SetCVal(`write.step.unit`,r),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,!0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,a),t.some(e=>e.name||e.color)?_d(e,t):vd(e,t)}function bd(e){return{composeTransform:t=>Vu(e,t),applyComposedTransformWithHistory:(t,n,r,i)=>Hu(e,t,n,r,i),sweepPipeShell:(t,n,r)=>Wu(e,t,n,r??{}),loftAdvanced:(t,n)=>Gu(e,t,n??{}),buildExtrusionLaw:(t,n,r)=>Ku(e,t,n,r),revolveVec:(t,n,r,i)=>qu(e,t,n,r,i),positionOnCurve:(t,n,r)=>Xu(e,t,n,r),linearPattern:(t,n,r,i)=>Ju(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>Yu(e,t,n,r,i,a),makeNonPlanarFace:t=>Zu(e,t),addHolesInFace:(t,n)=>Qu(e,t,n),removeHolesFromFace:t=>$u(e,t),makeFaceOnSurface:(t,n)=>ed(e,t,n),bsplineSurface:(t,n,r)=>td(e,t,n,r),triangulatedSurface:(t,n,r)=>nd(e,t,n,r),sewAndSolidify:(t,n)=>id(e,t,n),fixShape:t=>ad(e,t),fixSelfIntersection:t=>od(e,t),surfaceCurvature:(t,n,r)=>ld(e,t,n,r),surfaceCenterOfMass:t=>dd(e,t),createDistanceQuery:t=>fd(e,t),projectEdges:(t,n,r,i)=>pd(e,t,n,r,i),draftPrism:(t,n,r,i,a,o)=>md(e,t,n,r,i,a,o),generalTransformNonOrthogonal:(t,n,r)=>Bu(e,t,n,r),createXCAFDocument:t=>hd(e,t),writeXCAFToSTEP:(t,n)=>gd(e,t,n??{}),exportSTEPConfigured:(t,n)=>yd(e,t,n??{})}}var xd=()=>{};function Sd(e){return e}function Cd(e){let t=Sd(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function wd(e){return e}function Td(e,t){return{x:e,y:t}}function Ed(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`occt: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function Dd(e,t){return{x:e,y:t}}function Od(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:xd}}function kd(e){return e}function Ad(e){return e}function jd(e,t,n,r){return x(e,t,n,r)}function Md(e,t,n,r){return S(e,t,n,r)}function Nd(e,t,n,r,i,a,o){return ee(e,t,n,r,i,a,o)}function Pd(e,t,n,r,i,a,o,s,c){return{__bk2d:`trimmed`,basis:ee(e,t,n,r,o,s,c),tStart:i,tEnd:a}}function Fd(e){return te(e)}function Id(e,t){let n=e.length,r=Math.min(3,n-1),i=[],a=[];i.push(0),a.push(r+1);let o=n-r-1;for(let e=1;e<=o;e++)i.push(e/(o+1)),a.push(1);return i.push(1),a.push(r+1),{__bk2d:`bspline`,poles:[...e],knots:i,multiplicities:a,degree:r,isPeriodic:!1}}function Ld(e,t){return _(Sd(e),t)}function Rd(e,t){return{point:_(Sd(e),t),tangent:v(Sd(e),t)}}function zd(e){return y(Sd(e))}function Bd(e){return b(Cd(e))}function Vd(e,t,n){return{__bk2d:`trimmed`,basis:Sd(e),tStart:t,tEnd:n}}function Hd(e){return JSON.parse(JSON.stringify(e))}function Ud(e,t){let n=Sd(e),r=y(n),i=[];for(let e=0;e<=30;e++){let a=r.first+(r.last-r.first)*e/30,[o,s]=_(n,a),[c,l]=v(n,a),u=Math.sqrt(c*c+l*l);u>1e-12?i.push([o-l/u*t,s+c/u*t]):i.push([o,s])}return Id(i)}function Wd(e,t,n){return ne(Sd(e),t,n)}function Gd(e,t,n,r){return re(Sd(e),t,n,r)}function Kd(e,t,n,r){return ie(Sd(e),t,n,r)}function qd(e,t,n){return ae(Sd(e),t,n)}function Jd(e,t,n,r,i){return oe(Sd(e),t,n,r,i)}function Yd(e,t,n,r,i,a){return of(e,Qd(t,n,r,i,a))}function Xd(e,t,n){return{m:e,tx:t,ty:n,delete:xd}}function Zd(){return Xd([1,0,0,0,1,0,0,0,1],0,0)}function Qd(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return Zd();let s=-i/o,c=r/o,l=a-1,u=[1+l*s*s,l*s*c,0,l*c*s,1+l*c*c,0,0,0,1];return Xd(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function $d(e,t){return Xd([1,0,0,0,1,0,0,0,1],e,t)}function ef(e,n,r,i,a,o,s){if(r===`axis`&&o!==void 0&&s!==void 0){let r=Math.sqrt(o*o+s*s),c=o/r,l=s/r,u=[2*c*c-1,2*c*l,0,2*c*l,2*l*l-1,0,0,0,1],d=i??e,f=a??n;return Xd(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return Xd([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function tf(e,t,n){let r=Math.cos(e),i=Math.sin(e);return Xd([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function nf(e,t,n){return Xd([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function rf(e,t,n){e.tx=t,e.ty=n}function af(e,n){let r=e.m,i=n.m,a=e=>t(r,e),o=e=>t(i,e);e.m=[a(0)*o(0)+a(1)*o(3)+a(2)*o(6),a(0)*o(1)+a(1)*o(4)+a(2)*o(7),a(0)*o(2)+a(1)*o(5)+a(2)*o(8),a(3)*o(0)+a(4)*o(3)+a(5)*o(6),a(3)*o(1)+a(4)*o(4)+a(5)*o(7),a(3)*o(2)+a(4)*o(5)+a(5)*o(8),a(6)*o(0)+a(7)*o(3)+a(8)*o(6),a(6)*o(1)+a(7)*o(4)+a(8)*o(7),a(6)*o(2)+a(7)*o(5)+a(8)*o(8)];let s=e.tx,c=e.ty,l=Number(n.tx)||0,u=Number(n.ty)||0;e.tx=a(0)*l+a(1)*u+s,e.ty=a(3)*l+a(4)*u+c}function of(e,n){let r=Sd(e),i=n.m??[1,0,0,0,1,0,0,0,1],a=Number(n.tx)||0,o=Number(n.ty)||0,s=t(i,0),c=t(i,1),l=t(i,3),u=t(i,4);if(Math.abs(s-1)<1e-12&&Math.abs(u-1)<1e-12&&Math.abs(c)<1e-12&&Math.abs(l)<1e-12)return ne(r,a,o);let d=y(r),f=[];for(let e=0;e<=20;e++){let[t,n]=_(r,d.first+(d.last-d.first)*e/20);f.push([s*t+c*n+a,l*t+u*n+o])}return te(f)}function sf(e,t,n){let r=se(Sd(e),Sd(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function cf(e,t,n){let r=Sd(e),i=y(r);if(r.__bk2d===`line`){let e=t-r.ox,a=n-r.oy,o=Math.max(i.first,Math.min(i.last,e*r.dx+a*r.dy)),[s,c]=_(r,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}if(r.__bk2d===`circle`){let e=Math.atan2(n-r.cy,t-r.cx),i=r.sense?e:-e;for(;i<0;)i+=2*Math.PI;for(;i>2*Math.PI;)i-=2*Math.PI;let[a,o]=_(r,i);return{param:i,distance:Math.sqrt((a-t)**2+(o-n)**2)}}if(!isFinite(i.first)||!isFinite(i.last))return null;let a=i.first,o=1/0,s=(i.last-i.first)/200;for(let e=0;e<=200;e++){let c=i.first+e*s,[l,u]=_(r,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}for(let e=0;e<10;e++){let[e,o]=_(r,a),[s,c]=v(r,a),l=(e-t)*s+(o-n)*c,u=s*s+c*c;if(u<1e-20)break;let d=l/u,f=Math.max(i.first,Math.min(i.last,a-d));if(Math.abs(f-a)<1e-14)break;a=f}let[c,l]=_(r,a);return{param:a,distance:Math.sqrt((c-t)**2+(l-n)**2)}}function lf(e,t,n,r,i,a){let o=Sd(e),s=Sd(t),c=n,l=i,u=1/0;for(let e=0;e<=50;e++){let t=n+(r-n)*e/50,[d,f]=_(o,t);for(let e=0;e<=50;e++){let n=i+(a-i)*e/50,[r,o]=_(s,n),p=(r-d)**2+(o-f)**2;p<u&&(u=p,c=t,l=n)}}let d=c,f=l;for(let c=0;c<20;c++){let[c,l]=_(s,f),u=cf(e,c,l);if(u){let e=Math.max(n,Math.min(r,u.param)),t=Math.abs(e-d)<1e-12;if(d=e,t)break}let[p,m]=_(o,d),h=cf(t,p,m);if(h){let e=Math.max(i,Math.min(a,h.param)),t=Math.abs(e-f)<1e-12;if(f=e,t)break}}let[p,m]=_(o,d),[h,g]=_(s,f);return Math.sqrt((h-p)**2+(g-m)**2)}function uf(e,n,r,i){let a=Sd(e),o=y(a),s=Math.max(3,{C0:1,C1:2,C2:3,C3:4}[r]??4),c=Math.max(100,i*10),l=[],u=1/0;for(let e=0;e<3&&u>n;e++){l=[];for(let e=0;e<=c;e++){let t=o.first+(o.last-o.first)*e/c;l.push(_(a,t))}u=0;for(let e=0;e<c;e++){let[n,r]=_(a,o.first+(o.last-o.first)*(e+.5)/c),i=t(l,e),s=t(l,e+1),d=(i[0]+s[0])/2,f=(i[1]+s[1])/2,p=Math.sqrt((n-d)**2+(r-f)**2);p>u&&(u=p)}u>n&&(c=Math.min(c*2,500))}return Id(l,{degMax:s})}function df(e){let n=Cd(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return df(uf(e,1e-6,`C2`,10));let r=y(Sd(e)),i=r.first,a=r.last,o=[];for(let e of n.knots)e>i+1e-12&&e<a-1e-12&&o.push(e);let s=[i,...o,a],c=[];for(let e=0;e<s.length-1;e++){let r=t(s,e),i=t(s,e+1),a=i-r;if(a<1e-15)continue;let o=_(n,r),l=_(n,i),u=v(n,r),d=v(n,i),f=a/3,p={__bk2d:`bezier`,poles:[o,[o[0]+u[0]*f,o[1]+u[1]*f],[l[0]-d[0]*f,l[1]-d[1]*f],l]};c.push(p)}return c.length>0?c:[e]}function ff(){return ve()}function pf(e,t,n){ye(wd(e),Sd(t),n)}function mf(e){let t=wd(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function hf(e,t){let n=wd(e),r=wd(t);n.xMin=Math.min(n.xMin,r.xMin),n.yMin=Math.min(n.yMin,r.yMin),n.xMax=Math.max(n.xMax,r.xMax),n.yMax=Math.max(n.yMax,r.yMax)}function gf(e,t){let n=wd(e),r=wd(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function _f(e,t,n){let r=wd(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function vf(e){let t=Cd(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function yf(e){let t=Cd(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function bf(e){let t=Cd(e);return t.__bk2d===`bezier`?[...t.poles]:null}function xf(e){let t=Cd(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function Sf(e){let t=Cd(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function Cf(e){return ge(Sd(e))}function wf(e){return _e(e)}function Tf(e,t){let n=Sd(e),r=y(n),i=[r.first,...[...t].sort((e,t)=>e-t),r.last],a=[];for(let e=0;e<i.length-1;e++)a.push({__bk2d:`trimmed`,basis:n,tStart:i[e],tEnd:i[e+1]});return a}function Ef(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepBuilderAPI_MakeEdge_3(r,i),o=a.Edge();return a.delete(),r.delete(),i.delete(),o}function Df(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_4(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function Of(e,n){let r=new e.TColgp_Array1OfPnt_2(1,n.length),i=new e.gp_Pnt_1;for(let e=0;e<n.length;e++){let a=t(n,e);i.SetCoord_2(a[0],a[1],a[2]),r.SetValue_1(e+1,i)}i.delete();let a=new e.GeomAPI_PointsToBSpline_2(r,3,8,e.GeomAbs_Shape.GeomAbs_C2,1e-6);if(r.delete(),!a.IsDone())throw a.delete(),Error(`Interpolation failed — GeomAPI_PointsToBSpline did not converge`);let o=a.Curve(),s=new e.Handle_Geom_Curve_2(o.get()),c=new e.BRepBuilderAPI_MakeEdge_24(s),l=c.Edge();return c.delete(),a.delete(),l}function kf(e,n,r,i,a){let o=Sd(n),s=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],c=(e,t)=>[r[0]+e*a[0]+t*s[0],r[1]+e*a[1]+t*s[1],r[2]+e*a[2]+t*s[2]];if(o.__bk2d===`line`)return Ef(e,c(o.ox,o.oy),c(o.ox+o.dx*o.len,o.oy+o.dy*o.len));if(o.__bk2d===`circle`||o.__bk2d===`trimmed`){let t=o;for(;t.__bk2d===`trimmed`;)t=t.basis;if(t.__bk2d===`circle`){let n=t,r=c(n.cx,n.cy),a=n.sense?i:[-i[0],-i[1],-i[2]];if(o.__bk2d===`circle`){let t=new e.gp_Pnt_3(r[0],r[1],r[2]),i=new e.gp_Dir_5(a[0],a[1],a[2]),o=new e.gp_Ax2_4(t,i),s=new e.gp_Circ_2(o,n.radius),c=new e.BRepBuilderAPI_MakeEdge_8(s),l=c.Edge();return c.delete(),s.delete(),o.delete(),i.delete(),t.delete(),l}let s=y(o),[l,u]=_(o,s.first),[d,f]=_(o,(s.first+s.last)/2),[p,m]=_(o,s.last);return Df(e,c(l,u),c(d,f),c(p,m))}}if(o.__bk2d===`bezier`||o.__bk2d===`bspline`){let n=o.poles.map(([e,t])=>c(e,t));return n.length===2?Ef(e,t(n,0),t(n,1)):Of(e,n)}let l=y(o),u=[];for(let e=0;e<=60;e++){let[t,n]=_(o,l.first+(l.last-l.first)*e/60);u.push(c(t,n))}return Of(e,u)}function Af(e,t,n){let r=Sd(t),i=y(r),a=[];for(let e=0;e<=60;e++){let[t,o]=_(r,i.first+(i.last-i.first)*e/60),s=n.get().Value(t,o);a.push([s.X(),s.Y(),s.Z()]),s.delete()}return Of(e,a)}function jf(e,t){return e.BRep_Tool.Surface_2(t)}function Mf(e,t,n){let r=new e.BRepAdaptor_Curve2d_2(t,n),i=Number(r.FirstParameter()),a=Number(r.LastParameter()),o=[];for(let e=0;e<=30;e++){let t=i+(a-i)*e/30,n=r.Value(t);o.push([n.X(),n.Y()]),n.delete()}return r.delete(),Id(o)}function Nf(e,t){e.BRepLib.BuildCurves3d_2(t)}function Pf(e,t,n,r){let i=new e.ShapeFix_Wire_2(t,n,r);i.FixEdgeCurves();let a=i.Wire();return i.delete(),a}function Ff(e,t,n={}){let{order:r=3,nbPtsOnCur:i=15,nbIter:a=2,tol3d:o=1e-5,tol2d:s=1e-4,maxDeg:c=8,maxSeg:l=9}=n,u=new e.BRepOffsetAPI_MakeFilling(r,i,a,!1,o,s,.01,.1,c,l);for(let n=0;n<t.length;n++){let r=as(e,t[n],`edge`);for(let t of r)u.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,n===0)}let d=new e.Message_ProgressRange_1;u.Build(d);let f=u.Shape();return u.delete(),d.delete(),f}function If(e){return{wrapCurve2dHandle:e=>kd(e),createCurve2dAdaptor:e=>Ad(e),createPoint2d:(e,t)=>Td(e,t),createDirection2d:(e,t)=>Ed(e,t),createVector2d:(e,t)=>Dd(e,t),createAxis2d:(e,t,n,r)=>Od(e,t,n,r),makeLine2d:(e,t,n,r)=>jd(e,t,n,r),makeCircle2d:(e,t,n,r)=>Md(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>C(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>w(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>Nd(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>Pd(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>Fd(e),makeBSpline2d:(e,t)=>Id(e,t),evaluateCurve2d:(e,t)=>Ld(e,t),evaluateCurve2dD1:(e,t)=>Rd(e,t),getCurve2dBounds:e=>zd(e),getCurve2dType:e=>Bd(e),trimCurve2d:(e,t,n)=>Vd(e,t,n),reverseCurve2d:e=>{},copyCurve2d:e=>Hd(e),offsetCurve2d:(e,t)=>Ud(e,t),translateCurve2d:(e,t,n)=>Wd(e,t,n),rotateCurve2d:(e,t,n,r)=>Gd(e,t,n,r),scaleCurve2d:(e,t,n,r)=>Kd(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>qd(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>Jd(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>Yd(e,t,n,r,i,a),createIdentityGTrsf2d:()=>Zd(),createAffinityGTrsf2d:(e,t,n,r,i)=>Qd(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>$d(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>ef(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>tf(e,t,n),createScaleGTrsf2d:(e,t,n)=>nf(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{rf(e,t,n)},multiplyGTrsf2d:(e,t)=>{af(e,t)},transformCurve2dGeneral:(e,t)=>of(e,t),intersectCurves2d:(e,t,n)=>sf(e,t,n),projectPointOnCurve2d:(e,t,n)=>cf(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>lf(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>uf(e,t,n,r),decomposeBSpline2dToBeziers:e=>df(e),createBoundingBox2d:()=>ff(),addCurveToBBox2d:(e,t,n)=>{pf(e,t,n)},getBBox2dBounds:e=>mf(e),mergeBBox2d:(e,t)=>{hf(e,t)},isBBox2dOut:(e,t)=>gf(e,t),isBBox2dOutPoint:(e,t,n)=>_f(e,t,n),getCurve2dCircleData:e=>vf(e),getCurve2dEllipseData:e=>yf(e),getCurve2dBezierPoles:e=>bf(e),getCurve2dBezierDegree:e=>xf(e),getCurve2dBSplineData:e=>Sf(e),serializeCurve2d:e=>Cf(e),deserializeCurve2d:e=>wf(e),splitCurve2d:(e,t)=>Tf(e,t),liftCurve2dToPlane:(t,n,r,i)=>kf(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>Af(e,t,n),extractSurfaceFromFace:t=>jf(e,t),extractCurve2dFromEdge:(t,n)=>Mf(e,t,n),buildCurves3d:t=>{Nf(e,t)},fixWireOnFace:(t,n,r)=>Pf(e,t,n,r),fillSurface:(t,n)=>Ff(e,t,n)}}function Lf(){let e=e=>()=>{throw Error(`${e} is only available with the brepkit kernel`)};return{export3MF:e(`export3MF`),exportGLB:e(`exportGLB`),exportOBJ:e(`exportOBJ`),exportPLY:e(`exportPLY`),import3MF:e(`import3MF`),importOBJ:e(`importOBJ`),importGLB:e(`importGLB`),filletVariable:e(`filletVariable`),helicalSweep:e(`helicalSweep`),sweepWithOptions:e(`sweepWithOptions`),defeature:e(`defeature`),detectSmallFeatures:e(`detectSmallFeatures`),recognizeFeatures:e(`recognizeFeatures`),meshBoolean:(()=>{throw Error(`meshBoolean is only available with the brepkit kernel`)}),edgeToFaceMap:e(`edgeToFaceMap`),sharedEdges:e(`sharedEdges`),adjacentFaces:e(`adjacentFaces`),curveDegreeElevate:e(`curveDegreeElevate`),curveKnotInsert:e(`curveKnotInsert`),curveKnotRemove:e(`curveKnotRemove`),curveSplit:e(`curveSplit`),approximateSurfaceLspia:e(`approximateSurfaceLspia`),untrimFace:e(`untrimFace`),mergeCoincidentVertices:e(`mergeCoincidentVertices`),removeDegenerateEdges:e(`removeDegenerateEdges`),fixFaceOrientations:e(`fixFaceOrientations`),classifyPointRobust:e(`classifyPointRobust`),classifyPointWinding:e(`classifyPointWinding`),executeBatch:e(`executeBatch`),checkpoint:e(`checkpoint`),checkpointCount:e(`checkpointCount`),restoreCheckpoint:e(`restoreCheckpoint`),discardCheckpoint:e(`discardCheckpoint`)}}function Rf(e){return{draft:(t,n,r,i,a)=>Ru(e,t,n,r,i,a,[],1).shape}}var zf=class{oc;kernelId=`occt`;capabilities=r;constructor(e){this.oc=e,Object.assign(this,js(e),Ps(e),$s(e),Ks(e),Tc(e),zc(e),tl(e),ml(e),vl(e),Dl(e),es(e),ms(e),au(e),cu(e),du(e),hu(e),zu(e),bd(e),If(e),Rf(e),Lf())}},Bf=()=>{};function Vf(e){return typeof e==`object`&&!!e&&e.__brepkit}function Hf(e,t){return{__brepkit:!0,type:e,id:t,delete:Bf,HashCode(e){return t%e},IsNull(){return!1}}}function L(e){return Hf(`solid`,e)}function Uf(e){return Hf(`face`,e)}function Wf(e){return Hf(`edge`,e)}function Gf(e){return Hf(`wire`,e)}function Kf(e){return Hf(`shell`,e)}function qf(e){let t=Hf(`compound`,e);return lp.has(e)?{...t,delete:()=>lp.delete(e)}:t}function Jf(e){return Hf(`vertex`,e)}function R(e,t){if(!Vf(e))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof e);if(t&&e.type!==t)throw Error(`brepkit: expected ${t} handle, got ${e.type}`);return e.id}function z(e){return Array.from(e)}function Yf(e,t){if(!Vf(e))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof e);if(e.type!==`solid`)throw Error(`brepkit: ${t} requires a solid, got ${e.type}. Consider using makeCompound() to combine shapes first.`);return e.id}function Xf(e,t,n){if(!Vf(t))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof t);if(t.type===`solid`)return[t.id];if(t.type===`compound`){let r=z(e.getCompoundSolids(t.id));if(r.length>0)return r;throw Error(`brepkit: ${n} received a compound with no solids.`)}throw Error(`brepkit: ${n} requires a solid or compound of solids, got ${t.type}.`)}function Zf(e,t,n,r,i,a){let o=e-r,s=t-i,c=n-a;return Math.sqrt(o*o+s*s+c*c)}function Qf(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function $f(e,t,n){return[1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1]}function ep(e,t){if(!Array.isArray(e)||e.length<3)return t;let[n,r,i]=e;return typeof n==`number`&&typeof r==`number`&&typeof i==`number`&&Number.isFinite(n)&&Number.isFinite(r)&&Number.isFinite(i)?[n,r,i]:t}function tp(e,t=[0,0,1],n=[0,0,0]){let r=ep(t,[0,0,1]),i=r[0]===0&&r[1]===0&&r[2]===0?[0,0,1]:r,a=ep(n,[0,0,0]),o=e*Math.PI/180,s=Math.cos(o),c=Math.sin(o),l=1-s,u=Math.sqrt(i[0]**2+i[1]**2+i[2]**2),[d,f,p]=[i[0]/u,i[1]/u,i[2]/u],m=l*d*d+s,h=l*d*f-c*p,g=l*d*p+c*f,_=l*f*d+c*p,v=l*f*f+s,y=l*f*p-c*d,b=l*p*d-c*f,x=l*p*f+c*d,S=l*p*p+s,[C,w,ee]=a;return[m,h,g,C-(m*C+h*w+g*ee),_,v,y,w-(_*C+v*w+y*ee),b,x,S,ee-(b*C+x*w+S*ee),0,0,0,1]}function np(e,t){let[n,r,i]=ep(e,[0,0,0]);return[t,0,0,n*(1-t),0,t,0,r*(1-t),0,0,t,i*(1-t),0,0,0,1]}function rp(e,n){let r=n=>t(e,n);return[r(0),r(1),r(2),n[0],r(3),r(4),r(5),n[1],r(6),r(7),r(8),n[2],0,0,0,1]}function ip(e,t){let[n,r,i]=e,a=Math.sqrt(t[0]**2+t[1]**2+t[2]**2),o=t[0]/a,s=t[1]/a,c=t[2]/a,l=2*(n*o+r*s+i*c);return[1-2*o*o,-2*o*s,-2*o*c,l*o,-2*s*o,1-2*s*s,-2*s*c,l*s,-2*c*o,-2*c*s,1-2*c*c,l*c,0,0,0,1]}function ap(e,t){let n=Array(16).fill(0);for(let r=0;r<4;r++)for(let i=0;i<4;i++)for(let a=0;a<4;a++)n[r*4+i]=n[r*4+i]+e[r*4+a]*t[a*4+i];return n}var op=.01,sp=9e5;function cp(){return sp++}var lp=new Map,up=new Set;function dp(e,t){up.has(e)||(up.add(e),console.warn(`brepkit: ${t}`))}function fp(e){return e.optimisation!==void 0||e.simplify!==void 0||e.strategy!==void 0||e.fuzzyValue!==void 0}function pp(e){return e}function mp(e){let t=e;for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function hp(e){return e}function gp(e,t){if(typeof t!=`function`)return t;let n;for(let r of e){let e;try{e=t(r)}catch{throw Error(`brepkit does not support variable draft with multiple distinct angles. Use the OCCT kernel for per-face angle variation, or use a uniform angle.`)}if(n===void 0)n=e;else if(e!==n)throw Error(`brepkit does not support variable draft with multiple distinct angles. Use the OCCT kernel for per-face angle variation, or use a uniform angle.`)}if(n===void 0)throw Error(`draft: no faces provided`);return n}function _p(e,t,n){let r=lp.get(t);return r?r.flatMap(t=>t.type===n?[t]:Tp(e,t,n)):n===`solid`?z(e.getCompoundSolids(t)).map(L):n===`face`||n===`edge`||n===`vertex`||n===`wire`?z(e.getCompoundSolids(t)).map(L).flatMap(t=>Tp(e,t,n)):[]}function vp(e,t,n,r){switch(r){case`solid`:return[t];case`shell`:return z(e.getSolidShells(n)).map(Kf);case`face`:return z(e.getSolidFaces(n)).map(Uf);case`edge`:return z(e.getSolidEdges(n)).map(Wf);case`vertex`:return z(e.getSolidVertices(n)).map(Jf);case`wire`:return z(e.getSolidFaces(n)).flatMap(t=>z(e.getFaceWires(t)).map(Gf));default:return[]}}function yp(e,t,n){let r=z(e.getShellFaces(t)).map(Uf),i=new Set,a=[];for(let t of r)for(let r of Tp(e,t,n)){let e=R(r);i.has(e)||(i.add(e),a.push(r))}return a}function bp(e,t,n,r){return r===`shell`?[t]:r===`face`?z(e.getShellFaces(n)).map(Uf):r===`edge`||r===`vertex`?yp(e,n,r):[]}function xp(e,t,n,r){return r===`face`?[t]:r===`edge`?z(e.getFaceEdges(n)).map(Wf):r===`vertex`?z(e.getFaceVertices(n)).map(Jf):r===`wire`?z(e.getFaceWires(n)).map(Gf):[]}function Sp(e,n){let r=z(e.getWireEdges(n)),i=new Set,a=[];for(let n of r){let r=e.getEdgeVertices(n),o=[[t(r,0),t(r,1),t(r,2)],[t(r,3),t(r,4),t(r,5)]];for(let[t,n,r]of o){let o=`${t},${n},${r}`;i.has(o)||(i.add(o),a.push(Jf(e.makeVertex(t,n,r))))}}return a}function Cp(e,t,n,r){return r===`wire`?[t]:r===`edge`?z(e.getWireEdges(n)).map(Wf):r===`vertex`?Sp(e,n):[]}function wp(e,n,r,i){if(i===`edge`)return[n];if(i===`vertex`){let n=e.getEdgeVertices(r),i=e.makeVertex(t(n,0),t(n,1),t(n,2)),a=e.makeVertex(t(n,3),t(n,4),t(n,5));return[Jf(i),Jf(a)]}return[]}function Tp(e,t,n){let r=R(t);switch(t.type){case`compound`:return _p(e,r,n);case`solid`:return vp(e,t,r,n);case`shell`:return bp(e,t,r,n);case`face`:return xp(e,t,r,n);case`wire`:return Cp(e,t,r,n);case`edge`:return wp(e,t,r,n);default:return[]}}function Ep(e,t,n){if(Array.isArray(t))for(let e of t)n(e)}function Dp(e,t){if(Vf(t))return t.type;throw Error(`brepkit: cannot determine shape type of non-brepkit handle`)}function Op(e,t,n){return Vf(t)&&Vf(n)&&t.id===n.id&&t.type===n.type}function kp(e,t,n){return Op(e,t,n)}function Ap(e,t,n){return t}function jp(e,t,n){return Vf(t)?t.id%n:0}function Mp(e,t){return!t||!Vf(t)}function Np(e,t){let n=R(t);return e.getShapeOrientation(n)}function Pp(e,t){let n=Yf(t,`edgeToFaceMap`);return e.edgeToFaceMap(n)}function Fp(e,t,n){let r=R(t,`face`),i=R(n,`face`);return Array.from(e.sharedEdges(r,i)).map(e=>Wf(e))}function Ip(e,t,n){let r=Yf(t,`adjacentFaces`),i=R(n,`face`);return Array.from(e.adjacentFaces(r,i)).map(e=>Uf(e))}function Lp(e,t){let n=t;return n.type===`face`?[n.id]:n.type===`solid`?z(e.getSolidFaces(n.id)):n.type===`shell`?z(e.getShellFaces(n.id)):[]}function Rp(e,t,n){let r=t.flatMap(t=>Lp(e,t)),i=n??1e-7;try{return Kf(e.weldShellsAndFaces(r,i))}catch(e){console.warn(`brepkit: weldShellsAndFaces failed, falling back to sewFaces:`,e)}return Kf(e.sewFaces(r,i))}function zp(e){return{iterShapes:(t,n)=>Tp(e,t,n),iterShapeList:(t,n)=>{Ep(e,t,n)},shapeType:t=>Dp(e,t),isSame:(t,n)=>Op(e,t,n),isEqual:(t,n)=>kp(e,t,n),downcast:(t,n)=>Ap(e,t,n),copyShape:t=>Ap(e,t),hashCode:(t,n)=>jp(e,t,n),isNull:t=>Mp(e,t),shapeOrientation:t=>Np(e,t),edgeToFaceMap:t=>Pp(e,t),sharedEdges:(t,n)=>Fp(e,t,n),adjacentFaces:(t,n)=>Ip(e,t,n),sew:(t,n)=>Rp(e,t,n)}}function Bp(e,t){return n(e.getVertexPosition(R(t,`vertex`)))}function Vp(e,t){return e.getSurfaceType(R(t,`face`))}function Hp(e,n){let r=e.getSurfaceDomain(R(n,`face`));return{uMin:t(r,0),uMax:t(r,1),vMin:t(r,2),vMax:t(r,3)}}function Up(e,t){return Gf(e.getFaceOuterWire(R(t,`face`)))}function Wp(e,t,r,i){return n(e.evaluateSurfaceNormal(R(t,`face`),r,i))}function Gp(e,t,r,i){return n(e.evaluateSurface(R(t,`face`),r,i))}function Kp(e,n,r){try{let i=e.projectPointOnSurface(R(n,`face`),r[0],r[1],r[2]);return[t(i,0),t(i,1)]}catch(e){return console.warn(`brepkit: uvFromPoint failed:`,e),null}}function qp(e,t,r){return n(e.projectPointOnSurface(R(t,`face`),r[0],r[1],r[2]),2)}function Jp(e,r,i){let a=r,o,s=i;if(a.type===`wire`){let n=z(e.getWireEdges(a.id));o=t(n,n.length-1);let r=0;for(let a of n){let n=e.getEdgeCurveParameters(a),c=t(n,1)-t(n,0);if(i<=r+c||a===o){o=a,s=Math.min(t(n,0)+(i-r),t(n,1));break}r+=c}}else o=R(r,`edge`);let c=e.evaluateEdgeCurveD1(o,s);return{point:n(c,0),tangent:n(c,3)}}function Yp(e,n){let r=n;if(r.type===`wire`){let n=z(e.getWireEdges(r.id));if(n.length===0)return[0,0];let i=0;for(let r of n){let n=e.getEdgeCurveParameters(r);i+=t(n,1)-t(n,0)}return[0,i]}let i=e.getEdgeCurveParameters(R(n,`edge`));return[t(i,0),t(i,1)]}function Xp(e,r,i){let a=r;if(a.type===`wire`){let r=z(e.getWireEdges(a.id)),o=0;for(let a of r){let s=e.getEdgeCurveParameters(a),c=t(s,1)-t(s,0);if(i<=o+c||a===r[r.length-1]){let r=t(s,0)+(i-o);return n(e.evaluateEdgeCurve(a,Math.min(r,t(s,1))))}o+=c}return n(e.evaluateEdgeCurve(t(r,0),i))}return n(e.evaluateEdgeCurve(R(r,`edge`),i))}function Zp(e,r){let i=r;if(i.type===`wire`){let r=z(e.getWireEdges(i.id));if(r.length===0)return!1;if(r.length===1)return Qp(e.getEdgeVertices(t(r,0)));let a=[];for(let t of r){let r=e.getEdgeVertices(t);a.push(n(r,0)),a.push(n(r,3))}let o=[];for(let e of a){let t=o.findIndex(t=>Zf(t[0],t[1],t[2],e[0],e[1],e[2])<1e-7);t>=0?o.splice(t,1):o.push(e)}return o.length===0}return Qp(e.getEdgeVertices(R(r,`edge`)))}function Qp(e){return Zf(t(e,0),t(e,1),t(e,2),t(e,3),t(e,4),t(e,5))<1e-7}function $p(e,t){let n=t;try{if(n.type===`edge`||n.type===`wire`&&z(e.getWireEdges(n.id)).length===1)return Zp(e,t)}catch{}return!1}function em(e,t){try{if($p(e,t)){let n=Yp(e,t);return n[1]-n[0]}}catch{}return 0}function tm(e,t){if(t.type===`wire`){let n=Tp(e,t,`edge`)[0];return n?e.getEdgeCurveType(R(n,`edge`)):`LINE`}return e.getEdgeCurveType(R(t,`edge`))}function nm(e,t,n){let r=R(t,`edge`);return Wf(e.curveDegreeElevate(r,n))}function rm(e,t,n,r){let i=R(t,`edge`);return Wf(e.curveKnotInsert(i,n,r))}function im(e,t,n,r){let i=R(t,`edge`);return Wf(e.curveKnotRemove(i,n,r))}function am(e,n,r){let i=R(n,`edge`),a=e.curveSplit(i,r);return[Wf(t(a,0)),Wf(t(a,1))]}function om(e,t,n,r,i,a,o,s,c,l){return Uf(e.approximateSurfaceLspia(t,n,r,i,a,o,s,c,l))}function sm(e,t,n,r){let i=R(t,`face`);return Uf(e.untrimFace(i,n,r))}function cm(e,t){return t}function lm(e,t){let r=zm(e,t);return!r||r.controlPoints.length<6?null:n(r.controlPoints,r.controlPoints.length-6)}function um(e,t){if(Vf(t)&&t.type===`face`){let n=t.id,r=JSON.parse(e.getAnalyticSurfaceParams(n));if(r.type===`cylinder`)return{radius:r.radius,isDirect:!0}}return null}function dm(e,t){let n=JSON.parse(e.getAnalyticSurfaceParams(R(t,`face`))),r=n.type===`cylinder`?n.origin:n.type===`cone`?n.apex:null;if(!r||!n.axis)return null;let[i,a,o]=r,[s,c,l]=n.axis,u=Math.hypot(s,c,l);return u<1e-12?null:{origin:[i,a,o],direction:[s/u,c/u,l/u]}}function fm(e,t){return t}function pm(e,n,r,i,a){a!==void 0&&dp(`classify-tolerance`,`classifyPointOnFace() tolerance parameter is not supported; brepkit uses domain-based classification.`);let o=R(n,`face`),s=e.getSurfaceDomain(o);return r<t(s,0)||r>t(s,1)||i<t(s,2)||i>t(s,3)?`out`:`in`}function mm(e,t,n,r){let i=Yf(t,`classifyPointRobust`);return e.classifyPointRobust(i,n[0],n[1],n[2],r)}function hm(e,t,n,r){let i=Yf(t,`classifyPointWinding`);return e.classifyPointWinding(i,n[0],n[1],n[2],r)}function gm(e,t,n,r){let i=Yf(t,`detectSmallFeatures`);return Array.from(e.detectSmallFeatures(i,n,r)).map(e=>Uf(e))}function _m(e,t,n){let r=Yf(t,`recognizeFeatures`);return e.recognizeFeatures(r,n)}function vm(e,t,r,i,a){let o=R(t),[s,c,l]=r,[u,d,f]=i,[p,m,h]=a??[1,0,0],g=.1;try{let t=e.boundingBox(o),[r,i,a]=n(t,0),[s,c,l]=n(t,3),u=Zf(r,i,a,s,c,l);u>0&&(g=Math.max(u*.001,1e-6))}catch{}let _=e.projectEdges(o,s,c,l,u,d,f,p,m,h,!0,g),v;try{v=JSON.parse(_)}catch{v={visible:[],hidden:[]}}let y=t=>{let n=[];for(let r of t)for(let t=0;t+3<r.length;t+=2){let i=r[t],a=r[t+1],o=r[t+2],s=r[t+3];i===void 0||a===void 0||o===void 0||s===void 0||i===o&&a===s||n.push(Wf(e.makeLineEdge(i,a,0,o,s,0)))}let r=cp();return lp.set(r,n),qf(r)},b=()=>{let e=cp();return lp.set(e,[]),qf(e)};return{visible:{outline:y(v.visible),smooth:b(),sharp:b()},hidden:{outline:y(v.hidden),smooth:b(),sharp:b()}}}function ym(e,t){let n=R(t,`edge`),r=e.getNurbsCurveData(n);if(!r)return null;let i=JSON.parse(r);return{degree:i.degree,poles:i.controlPoints,weights:i.weights,knots:i.distinctKnots,multiplicities:i.multiplicities,isPeriodic:i.periodic,isRational:i.rational}}function bm(e,t){return JSON.parse(e.getNurbsSurfaceDataParity(R(t,`face`)))}function xm(e){return{vertexPosition:t=>Bp(e,t),surfaceType:t=>Vp(e,t),uvBounds:t=>Hp(e,t),outerWire:t=>Up(e,t),surfaceNormal:(t,n,r)=>Wp(e,t,n,r),pointOnSurface:(t,n,r)=>Gp(e,t,n,r),uvFromPoint:(t,n)=>Kp(e,t,n),projectPointOnFace:(t,n)=>qp(e,t,n),curveTangent:(t,n)=>Jp(e,t,n),curveParameters:t=>Yp(e,t),curvePointAtParam:(t,n)=>Xp(e,t,n),curveIsClosed:t=>Zp(e,t),curveIsPeriodic:t=>$p(e,t),curvePeriod:t=>em(e,t),curveType:t=>tm(e,t),curveDegreeElevate:(t,n)=>nm(e,t,n),curveKnotInsert:(t,n,r)=>rm(e,t,n,r),curveKnotRemove:(t,n,r)=>im(e,t,n,r),curveSplit:(t,n)=>am(e,t,n),approximateSurfaceLspia:(t,n,r,i,a,o,s,c,l)=>om(e,t,n,r,i,a,o,s,c,l),untrimFace:(t,n,r)=>sm(e,t,n,r),createCurveAdaptor:t=>cm(e,t),getBezierPenultimatePole:t=>lm(e,t),getSurfaceCylinderData:t=>um(e,t),getSurfaceAxis:t=>dm(e,t),reverseSurfaceU:t=>fm(e,t),classifyPointOnFace:(t,n,r,i)=>pm(e,t,n,r,i),classifyPointRobust:(t,n,r)=>mm(e,t,n,r),classifyPointWinding:(t,n,r)=>hm(e,t,n,r),detectSmallFeatures:(t,n,r)=>gm(e,t,n,r),recognizeFeatures:(t,n)=>_m(e,t,n),projectEdges:(t,n,r,i)=>vm(e,t,n,r,i),getNurbsCurveData:t=>ym(e,t),getNurbsSurfaceData:t=>bm(e,t)}}function Sm(e,t,n){if(Array.isArray(n)&&n.length===16)return Fm(e,t,n);throw Error(`brepkit: transform expects a 16-element matrix array`)}function Cm(e,t,n,r,i){return Fm(e,t,$f(n,r,i))}function wm(e,t,n,r,i){return Fm(e,t,tp(n,r,i))}function Tm(e,t,n,r){let i=t;return i.type===`solid`?L(e.mirror(i.id,n[0],n[1],n[2],r[0],r[1],r[2])):Fm(e,t,ip(n,r))}function Em(e,t,n,r){return Fm(e,t,np(n,r))}function Dm(e,t,n,r,i){return Fm(e,t,rp(n,r))}function Om(e,t,n,r){return Fm(e,t,rp(n,r))}function km(e,t,n,r){let{point:i,tangent:a}=Jp(e,n,r),[o,s,c]=a,l=Math.sqrt(o*o+s*s+c*c);if(l<1e-12)return Cm(e,t,i[0],i[1],i[2]);let u=o/l,d=s/l,f=c/l,p=t;if(Math.abs(f+1)<1e-10)p=wm(e,p,180,[1,0,0]);else if(Math.abs(f-1)>1e-10){let t=[-d,u,0],n=180/Math.PI*Math.acos(Math.max(-1,Math.min(1,f)));p=wm(e,p,n,t)}return Cm(e,p,i[0],i[1],i[2])}function Am(e,t,n,r,i){let a=[t];for(let o=1;o<i;o++){let i=r*o;a.push(Cm(e,t,n[0]*i,n[1]*i,n[2]*i))}return a}function jm(e,t,n,r,i,a){let o=[t];for(let s=1;s<a;s++)o.push(wm(e,t,i*s,r,n));return o}function Mm(e,t,n,r,i,a,o,s){return qf(e.gridPattern(Yf(t,`gridPattern`),n[0],n[1],n[2],r[0],r[1],r[2],i,a,o,s))}function Nm(e,t){return t.map(t=>{switch(t.type){case`translate`:return Cm(e,t.shape,t.x,t.y,t.z);case`rotate`:return wm(e,t.shape,t.angle,t.axis,t.center);case`scale`:return Em(e,t.shape,t.center,t.factor);case`mirror`:return Tm(e,t.shape,t.origin,t.normal)}})}function Pm(e){return{transform:(t,n)=>Sm(e,t,n),locate:(t,n)=>Sm(e,t,n),translate:(t,n,r,i)=>Cm(e,t,n,r,i),rotate:(t,n,r,i)=>wm(e,t,n,r,i),mirror:(t,n,r)=>Tm(e,t,n,r),scale:(t,n,r)=>Em(e,t,n,r),generalTransform:(t,n,r,i)=>Dm(e,t,n,r,i),generalTransformNonOrthogonal:(t,n,r)=>Om(e,t,n,r),positionOnCurve:(t,n,r)=>km(e,t,n,r),linearPattern:(t,n,r,i)=>Am(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>jm(e,t,n,r,i,a),gridPattern:(t,n,r,i,a,o,s)=>Mm(e,t,n,r,i,a,o,s),transformBatch:t=>Nm(e,t)}}function Fm(e,t,n){let r=t;if(!Vf(t))throw Error(`brepkit: applyMatrix requires a BrepkitHandle`);switch(r.type){case`solid`:{let t=e.copySolid(r.id);return e.transformSolid(t,n),L(t)}case`face`:{if(typeof e.copyFace!=`function`)throw Error(`brepkit: applyMatrix for faces requires copyFace/transformFace WASM exports`);let t=e.copyFace(r.id);return e.transformFace(t,n),Uf(t)}case`wire`:{if(typeof e.copyWire!=`function`||typeof e.transformWire!=`function`)throw Error(`brepkit: applyMatrix for wires requires copyWire/transformWire WASM exports`);let t=e.copyWire(r.id);return e.transformWire(t,n),Gf(t)}case`edge`:{if(typeof e.copyEdge!=`function`||typeof e.transformEdge!=`function`)throw Error(`brepkit: applyMatrix for edges requires copyEdge/transformEdge WASM exports`);let t=e.copyEdge(r.id);return e.transformEdge(t,n),Wf(t)}default:throw Error(`brepkit: applyMatrix does not support '${r.type}' shapes`)}}function Im(e,t){return!!(e&&(e[0]!==0||e[1]!==0||e[2]!==0)||t&&(t[0]!==0||t[1]!==0||t[2]!==1))}function Lm(e,t,n,r){let i=t;if(r&&(r[0]!==0||r[1]!==0||r[2]!==1)){let[t,n,a]=r,o=Math.sqrt(t*t+n*n+a*a),s=t/o,c=n/o,l=a/o;if(Math.abs(l+1)<1e-10)i=wm(e,i,180,[1,0,0]);else if(Math.abs(l-1)>1e-10){let t=[-c,s,0],n=180/Math.PI*Math.acos(Math.max(-1,Math.min(1,l)));i=wm(e,i,n,t)}}return n&&(n[0]!==0||n[1]!==0||n[2]!==0)&&(i=Cm(e,i,n[0],n[1],n[2])),i}function Rm(e,t){let r,i=t;if(i.type===`solid`||i.type===`compound`){let n=Tp(e,t,`face`);if(n.length===0)throw Error(`brepkit: extractPlaneFromFace: no faces found`);let i=n[0];if(!i)throw Error(`brepkit: extractPlaneFromFace: no faces found`);let a=R(i,`face`),o=0;for(let t of n){let n=R(t,`face`);try{let t=e.faceArea(n,op);t>o&&(o=t,a=n)}catch{}}r=a}else r=R(t,`face`);let a=n(e.getFaceNormal(r)),o=e.tessellateFace(r,1).positions;return o.length>=3?{point:n(o),normal:a}:{point:[0,0,0],normal:a}}function zm(e,n){let r=n;if(r.type!==`edge`)return null;let i=e.getEdgeNurbsData(r.id);if(i){let e=JSON.parse(i);return{degree:e.degree,knots:e.knots,controlPoints:e.controlPoints,weights:e.weights}}let a=e.getEdgeVertices(r.id);return{degree:1,knots:[0,0,1,1],controlPoints:[t(a,0),t(a,1),t(a,2),t(a,3),t(a,4),t(a,5)],weights:[1,1]}}function Bm(e,t){if(!Vf(t))return!1;if(t.type!==`solid`)return!0;try{return e.validateSolidRelaxed(t.id)===0}catch(e){return console.warn(`brepkit: isValid check failed:`,e),!1}}function Vm(e,t){if(!Vf(t))return!1;if(t.type!==`solid`)return!0;try{return e.validateSolid(t.id)===0}catch(e){return console.warn(`brepkit: isValidStrict check failed:`,e),!1}}function Hm(e,t){let n=t;if(n.type!==`solid`)throw Error(`brepkit: healSolid requires a solid, got ${n.type}. Consider using makeCompound() to combine shapes first.`);try{let n=e.repairSolid(R(t));return n>0&&console.warn(`brepkit: repairSolid left ${n} error(s) on solid.`),t}catch(n){try{return e.healSolid(R(t)),t}catch(e){return console.warn(`brepkit: healSolid failed (repairSolid error:`,n,`, healSolid error:`,e,`)`),null}}}function Um(e,t){return t}function Wm(e,t,n){return t}function Gm(e,t,n){let r=Yf(t,`mergeCoincidentVertices`);return e.mergeCoincidentVertices(r,n)}function Km(e,t,n){let r=Yf(t,`removeDegenerateEdges`);return e.removeDegenerateEdges(r,n)}function qm(e,t){let n=Yf(t,`fixFaceOrientations`);return e.fixFaceOrientations(n)}function Jm(e,t){let n=t;return n.type===`solid`&&e.healSolid(n.id),t}function Ym(e,t){return t}function Xm(e,t){if(!Vf(t)||t.type!==`solid`)return null;try{return typeof e.validateSolidDetails==`function`?e.validateSolidDetails(t.id):null}catch{return null}}function Zm(e){return{isValid:t=>Bm(e,t),isValidStrict:t=>Vm(e,t),healSolid:t=>Hm(e,t),healFace:t=>Um(e,t),healWire:(t,n)=>Wm(e,t,n),fixShape:t=>Jm(e,t),fixSelfIntersection:t=>Ym(e,t),mergeCoincidentVertices:(t,n)=>Gm(e,t,n),removeDegenerateEdges:(t,n)=>Km(e,t,n),fixFaceOrientations:t=>qm(e,t),validationDetails:t=>Xm(e,t)}}function Qm(e){if(!(e instanceof Error))return!1;let t=e.message;return t.startsWith(`empty result:`)||t.includes(`produced empty result`)||t.includes(`produces empty result`)}function $m(e,t){return t.type===`compound`?z(e.getCompoundSolids(t.id)).length===0:!1}function eh(e){return qf(e.makeCompound([]))}function th(e,t,n,r){if(r&&fp(r)&&dp(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),$m(e,t))return n;if($m(e,n))return t;let i=Yf(t,`fuse`),a=n;if(a.type===`compound`){let t=z(e.getCompoundSolids(a.id)),n=i;for(let r of t)n=e.fuse(n,r);return L(n)}return L(e.fuse(i,Yf(n,`fuse`)))}function nh(e,t,n,r){if(r&&fp(r)&&dp(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),$m(e,t))return eh(e);if($m(e,n))return t;let i=Yf(t,`cut`),a=n;if(a.type===`compound`){let t=z(e.getCompoundSolids(a.id)),n=i;for(let r of t)try{n=e.cut(n,r)}catch(t){if(Qm(t))return eh(e);throw t}return L(n)}try{return L(e.cut(i,Yf(n,`cut`)))}catch(t){if(Qm(t))return eh(e);throw t}}function rh(e,t,n,r){if(r&&fp(r)&&dp(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),$m(e,t)||$m(e,n))return eh(e);try{return L(e.intersect(Yf(t,`intersect`),Yf(n,`intersect`)))}catch(t){if(Qm(t))return eh(e);throw t}}function ih(e,n,r,i){let{point:a,normal:o}=Rm(e,r),s=Vf(n)&&n.type===`solid`?n.id:R(n,`solid`),c=z(e.section(s,a[0],a[1],a[2],o[0],o[1],o[2]));if(c.length===0)return qf(e.makeCompound([]));let l=[];for(let n=0;n<c.length;n++){let r=z(e.getFaceWires(t(c,n)));for(let e=0;e<r.length;e++)l.push(Gf(t(r,e)))}let[u]=l;if(l.length===1&&u!==void 0)return u;let d=cp();return lp.set(d,l),qf(d)}function ah(e,n,r){if(n.length===0)throw Error(`brepkit: fuseAll requires at least one shape`);if(n.length===1)return t(n,0);if(e.compoundFuse){let t=[];for(let r of n){let n=r;n.type===`compound`?t.push(...z(e.getCompoundSolids(n.id))):t.push(Yf(r,`fuseAll`))}if(t.length===0)throw Error(`brepkit: fuseAll resolved to zero solid IDs`);return L(e.compoundFuse(new Uint32Array(t)))}let i=[...n];for(;i.length>1;){let t=[];for(let n=0;n<i.length;n+=2)n+1<i.length?t.push(th(e,i[n],i[n+1],r)):t.push(i[n]);i=t}return t(i,0)}function oh(e,t,n,r){if(n.length===0)return t;if(n.length===1)return nh(e,t,n[0],r);let i=Yf(t,`cutAll`),a=[];for(let t of n){let n=t;n.type===`compound`?a.push(...z(e.getCompoundSolids(n.id))):a.push(Yf(t,`cutAll`))}return a.length===0?t:L(e.compoundCut(i,new Uint32Array(a)))}function sh(e,t,n){if(n.length===0)throw Error(`brepkit: split requires at least one tool`);let{point:r,normal:i}=Rm(e,n[0]),a=z(e.split(R(t,`solid`),r[0],r[1],r[2],i[0],i[1],i[2]));return qf(e.makeCompound(a))}function ch(e,t,n,r,i,a,o){let s=e.meshBoolean(t,n,r,i,a,o);return{vertices:new Float32Array(s.positions),normals:new Float32Array(s.normals),triangles:new Uint32Array(s.indices),uvs:new Float32Array,faceGroups:[{start:0,count:s.indices.length,faceHash:0}]}}function lh(e,t,n,r,i){let a=[];return(!Vf(t)||t.IsNull())&&a.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),(!Vf(n)||n.IsNull())&&a.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),a.length>0?{valid:!1,issues:a}:(i(t)||a.push({operand:`base`,issue:`not-valid`,message:`Base shape fails BRepCheck validation. Try autoHeal() first.`}),i(n)||a.push({operand:`tool`,issue:`not-valid`,message:`Tool shape fails BRepCheck validation. Try autoHeal() first.`}),{valid:a.length===0,issues:a})}function uh(e,n,r){let i=[];for(let r of n){let n=r;if(n.type===`solid`){let r=z(e.getSolidVertices(n.id));for(let n of r){let r=e.getVertexPosition(n);i.push(t(r,0),t(r,1),t(r,2))}}else if(n.type===`vertex`){let r=e.getVertexPosition(n.id);i.push(t(r,0),t(r,1),t(r,2))}}if(i.length<12)throw Error(`brepkit: hull requires enough points`);return L(e.convexHull(i))}function dh(e,t,n){if(t.length<4)throw Error(`brepkit: hull needs at least 4 points`);let r=[];for(let e of t)r.push(e.x,e.y,e.z);return L(e.convexHull(r))}function fh(e,n,r,i){let a=new Float64Array(n.length*3);for(let e=0;e<n.length;e++){let r=t(n,e);a[e*3]=r.x,a[e*3+1]=r.y,a[e*3+2]=r.z}let o=new Uint32Array(r.length*3);for(let e=0;e<r.length;e++){let n=t(r,e);o[e*3]=n[0],o[e*3+1]=n[1],o[e*3+2]=n[2]}return L(e.importIndexedMesh(a,o))}function ph(e){return{fuse:(t,n,r)=>th(e,t,n,r),cut:(t,n,r)=>nh(e,t,n,r),intersect:(t,n,r)=>rh(e,t,n,r),section:(t,n,r)=>ih(e,t,n,r),fuseAll:(t,n)=>ah(e,t,n),cutAll:(t,n,r)=>oh(e,t,n,r),split:(t,n)=>sh(e,t,n),meshBoolean:(t,n,r,i,a,o)=>ch(e,t,n,r,i,a,o),checkBoolean:(t,n,r)=>lh(e,t,n,r,t=>Bm(e,t)),hull:(t,n)=>uh(e,t,n),hullFromPoints:(t,n)=>dh(e,t,n),buildSolidFromFaces:(t,n,r)=>fh(e,t,n,r)}}function mh(e,t,n,r){return Jf(e.makeVertex(t,n,r))}function hh(e,t,n,r){if(t&&typeof t==`object`&&`origin`in t&&`direction`in t){let{origin:i,direction:a}=t,o=n??0,s=r??1;return Th(e,[i[0]+a[0]*o,i[1]+a[1]*o,i[2]+a[2]*o],[i[0]+a[0]*s,i[1]+a[1]*s,i[2]+a[2]*s])}if(Vf(t)&&t.type===`edge`)return t;throw Error(`brepkit: makeEdge requires a curve with origin/direction, or an edge handle`)}function gh(e,t){let n=[];for(let r of t){let t=r;if(t.type===`wire`)for(let r of z(e.getWireEdges(t.id)))n.push(r);else n.push(R(r,`edge`))}return Gf(e.makeWire(n,!0))}function _h(e,t,n){let r=t,i=r.type===`edge`?e.makeWire([r.id],!0):R(t,`wire`);return Uf(n?e.makePlanarFaceFromWire(i):e.makeFaceFromWire(i))}function vh(e,t,n,r){return L(e.makeBox(t,n,r))}function yh(e,t,n){return Uf(e.makeRectangle(t,n))}function bh(e,t,n,r,i){let a=L(e.makeCylinder(t,n));return Im(r,i)?Lm(e,a,r,i):a}function xh(e,t,n){let r=L(e.makeSphere(t,32));return n&&(n[0]!==0||n[1]!==0||n[2]!==0)?Cm(e,r,n[0],n[1],n[2]):r}function Sh(e,t,n,r,i,a){let o=L(e.makeCone(t,n,r));return Im(i,a)?Lm(e,o,i,a):o}function Ch(e,t,n,r,i){let a=L(e.makeTorus(t,n,32));return Im(r,i)?Lm(e,a,r,i):a}function wh(e,t,n,r){let i=Math.max(t,n,r);return Dm(e,xh(e,i),[t/i,0,0,0,n/i,0,0,0,r/i],[0,0,0],!1)}function Th(e,t,n){return Wf(e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function Eh(e,t,n,r){let i=Math.sqrt(n[0]**2+n[1]**2+n[2]**2);return Wf(e.makeCircleEdge(t[0],t[1],t[2],n[0]/i,n[1]/i,n[2]/i,r))}function Dh(e,t,n,r,i,a){let o=a-i,s=1e-9;if(o>s&&o<2*Math.PI-s){let o=Math.hypot(n[0],n[1],n[2]),s=[n[0]/o,n[1]/o,n[2]/o],c=Math.abs(s[0])<.9?[1,0,0]:[0,1,0],l=[s[1]*c[2]-s[2]*c[1],s[2]*c[0]-s[0]*c[2],s[0]*c[1]-s[1]*c[0]],u=Math.hypot(l[0],l[1],l[2]),d=[l[0]/u,l[1]/u,l[2]/u],f=[s[1]*d[2]-s[2]*d[1],s[2]*d[0]-s[0]*d[2],s[0]*d[1]-s[1]*d[0]],p=e=>{let n=Math.cos(e),i=Math.sin(e);return[t[0]+r*(n*d[0]+i*f[0]),t[1]+r*(n*d[1]+i*f[1]),t[2]+r*(n*d[2]+i*f[2])]},m=p(i),h=p(a);return Wf(e.makeCircleArc3d(m[0],m[1],m[2],h[0],h[1],h[2],t[0],t[1],t[2],s[0],s[1],s[2]))}return tg(e,t,n,r,i,a)}function Oh(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));return Math.abs(o)<1e-12?null:[((e**2+t**2)*(r-a)+(n**2+r**2)*(a-t)+(i**2+a**2)*(t-r))/o,((e**2+t**2)*(i-n)+(n**2+r**2)*(e-i)+(i**2+a**2)*(n-e))/o]}function kh(e,t,n,r){let i=[n[0]-t[0],n[1]-t[1],n[2]-t[2]],a=[r[0]-t[0],r[1]-t[1],r[2]-t[2]],o=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],s=Math.sqrt(o[0]**2+o[1]**2+o[2]**2);if(s<1e-12)return Th(e,t,r);let c=[o[0]/s,o[1]/s,o[2]/s],l=Math.sqrt(i[0]**2+i[1]**2+i[2]**2),u=[i[0]/l,i[1]/l,i[2]/l],d=[c[1]*u[2]-c[2]*u[1],c[2]*u[0]-c[0]*u[2],c[0]*u[1]-c[1]*u[0]],f=e=>{let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return[n*u[0]+r*u[1]+i*u[2],n*d[0]+r*d[1]+i*d[2]]},[p,m]=f(t),[h,g]=f(n),[_,v]=f(r),y=Oh(p,m,h,g,_,v);if(!y)return Th(e,t,r);let[b,x]=y,S=[t[0]+b*u[0]+x*d[0],t[1]+b*u[1]+x*d[1],t[2]+b*u[2]+x*d[2]];return Wf(e.makeCircleArc3d(t[0],t[1],t[2],r[0],r[1],r[2],S[0],S[1],S[2],c[0],c[1],c[2]))}function Ah(e,t,n,r,i,a){let o=Math.sqrt(n[0]**2+n[1]**2+n[2]**2);if(a!==void 0){let s=Math.sqrt(a[0]**2+a[1]**2+a[2]**2);return Wf(e.makeEllipseEdgeWithRef(t[0],t[1],t[2],n[0]/o,n[1]/o,n[2]/o,r,i,a[0]/s,a[1]/s,a[2]/s))}return Wf(e.makeEllipseEdge(t[0],t[1],t[2],n[0]/o,n[1]/o,n[2]/o,r,i))}function jh(e,t,n,r,i,a,o,s){return ng(e,t,n,r,i,a,o,s)}function Mh(e,n){if(n.length<2)throw Error(`brepkit: bezier requires at least 2 points`);let r=n.length-1,i=n.length,a=[...Array(r+1).fill(0),...Array(r+1).fill(1)],o=Array(i).fill(1),s=n.flatMap(([e,t,n])=>[e,t,n]),c=t(n,0),l=t(n,i-1);return Wf(e.makeNurbsEdge(c[0],c[1],c[2],l[0],l[1],l[2],r,a,s,o))}function Nh(e,t,n,r){return Wf(e.makeTangentArc3d(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]))}function Ph(e,t,n,r,i,a,o){let s=n/t,c=Math.max(4,Math.ceil(s*16)),l=i?.[0]??0,u=i?.[1]??0,d=i?.[2]??0,f=o?-1:1,p=[];for(let e=0;e<=c;e++){let t=e/c,i=f*2*Math.PI*s*t;p.push([l+r*Math.cos(i),u+r*Math.sin(i),d+n*t])}return gh(e,[qh(e,p)])}function Fh(e,t){let n=[];for(let r of t){let t=r;if(t.type===`edge`)n.push(t.id);else if(t.type===`wire`)for(let r of z(e.getWireEdges(t.id)))n.push(r)}if(n.length===0)throw Error(`brepkit: makeWireFromMixed requires at least one edge`);return Gf(e.makeWire(n,!1))}function Ih(e,t){let n=t.filter(Vf);if(n.length===0)throw Error(`brepkit: makeCompound requires at least one shape`);if(n.every(e=>e.type===`solid`))return qf(e.makeCompound(n.map(e=>e.id)));let r=cp();return lp.set(r,n),qf(r)}function Lh(e,t,n){let r=vh(e,Math.abs(n[0]-t[0]),Math.abs(n[1]-t[1]),Math.abs(n[2]-t[2])),i=Math.min(t[0],n[0]),a=Math.min(t[1],n[1]),o=Math.min(t[2],n[2]);return i!==0||a!==0||o!==0?Cm(e,r,i,a,o):r}function Rh(e,t){let n=t;if(n.type===`solid`)return t;if(n.type===`shell`){try{return e.getSolidFaces(n.id),L(n.id)}catch{}return L(e.solidFromShell(n.id))}return L(e.solidFromShell(R(t,`shell`)))}function zh(e,t){return _h(e,t,!1)}function Bh(e,t,n){let r=n.map(e=>R(e,`wire`));return Uf(e.addHolesToFace(R(t,`face`),r))}function Vh(e,t){return Uf(e.removeHolesFromFace(R(t,`face`)))}function Hh(e,t,n){return _h(e,n,!1)}function Uh(e,t,n,r){let i=[];for(let[e,n,r]of t)i.push(e,n,r);let a=Math.min(3,n-1),o=Math.min(3,r-1);try{return Uf(e.interpolateSurface(i,n,r,a,o))}catch{return Wh(e,t,n,r)}}function Wh(e,n,r,i){let a=[];for(let o=0;o<r-1;o++)for(let r=0;r<i-1;r++){let s=o*i+r,c=(o+1)*i+r,l=o*i+(r+1),u=(o+1)*i+(r+1),d=Gh(e,t(n,s),t(n,c),t(n,l));d&&a.push(d);let f=Gh(e,t(n,c),t(n,u),t(n,l));f&&a.push(f)}if(a.length===0)throw Error(`brepkit: no valid faces in surface grid`);return Rp(e,a,1e-6)}function Gh(e,t,n,r){let i=n[0]-t[0],a=n[1]-t[1],o=n[2]-t[2],s=r[0]-t[0],c=r[1]-t[1],l=r[2]-t[2],u=a*l-o*c,d=o*s-i*l,f=i*c-a*s;if(Math.sqrt(u*u+d*d+f*f)<1e-12)return null;try{return _h(e,gh(e,[Th(e,t,n),Th(e,n,r),Th(e,r,t)]))}catch(e){return console.warn(`brepkit: makeNonPlanarFace failed:`,e),null}}function Kh(e,t,n){let r=t.map(e=>R(e,`face`));return L(e.sewFaces(r,n))}function qh(e,n,r){if(r?.tolerance!==void 0&&dp(`interpolate-tolerance`,`interpolatePoints() tolerance parameter is not supported; brepkit uses chord-length parameterisation.`),n.length<2)throw Error(`brepkit: need at least 2 points`);if(n.length===2)return Th(e,t(n,0),t(n,1));let i=Math.min(3,n.length-1),a=n.flatMap(([e,t,n])=>[e,t,n]);return Wf(e.interpolatePoints(a,i))}function Jh(e,t,n){let r=n?.degMax??3,i=n?.tolerance??1e-6,a=[];for(let e of t)a.push(e[0],e[1],e[2]);let o=Math.max(r+1,Math.min(t.length,Math.ceil(t.length*.7)));return Wf(e.approximateCurveLspia(a,r,o,i,100))}function Yh(e,t,n,r){return{x:t,y:n,z:r}}function Xh(e,t,n,r){let i=Math.sqrt(t*t+n*n+r*r);return{x:t/i,y:n/i,z:r/i}}function Zh(e,t,n,r){return{x:t,y:n,z:r}}function Qh(e,t,n,r,i,a,o){return{origin:[t,n,r],direction:[i,a,o]}}function $h(e,t,n,r,i,a,o,s,c,l){return{origin:[t,n,r],z:[i,a,o],x:s===void 0?void 0:[s,c,l]}}function eg(e,t,n,r,i,a,o,s,c,l){return{origin:[t,n,r],z:[i,a,o],x:s===void 0?void 0:[s,c,l]}}function tg(e,n,r,i,a,o){let s=Math.sqrt(r[0]**2+r[1]**2+r[2]**2),c=[r[0]/s,r[1]/s,r[2]/s],l=Math.abs(c[0])<.9?[1,0,0]:[0,1,0],u=[c[1]*l[2]-c[2]*l[1],c[2]*l[0]-c[0]*l[2],c[0]*l[1]-c[1]*l[0]],d=Math.sqrt(u[0]**2+u[1]**2+u[2]**2),f=[u[0]/d,u[1]/d,u[2]/d],p=[c[1]*f[2]-c[2]*f[1],c[2]*f[0]-c[0]*f[2],c[0]*f[1]-c[1]*f[0]],m=Math.ceil(Math.abs(o-a)/(Math.PI/2)),h=(o-a)/m,g=[],_=[];for(let e=0;e<=m;e++){let t=a+e*h,r=Math.cos(t),o=Math.sin(t),s=n[0]+i*(r*f[0]+o*p[0]),c=n[1]+i*(r*f[1]+o*p[1]),l=n[2]+i*(r*f[2]+o*p[2]);if(e>0){let t=a+(e-.5)*h,r=Math.cos(t),o=Math.sin(t),s=i/Math.cos(h/2),c=n[0]+s*(r*f[0]+o*p[0]),l=n[1]+s*(r*f[1]+o*p[1]),u=n[2]+s*(r*f[2]+o*p[2]);g.push(c,l,u),_.push(Math.cos(h/2))}g.push(s,c,l),_.push(1)}let v=[,,,].fill(0);for(let e=1;e<m;e++)v.push(e,e);v.push(...[,,,].fill(m));let y=t(v,v.length-1);for(let e=0;e<v.length;e++)v[e]=t(v,e)/y;let b=t(g,0),x=t(g,1),S=t(g,2),C=t(g,g.length-3),w=t(g,g.length-2),ee=t(g,g.length-1);return Wf(e.makeNurbsEdge(b,x,S,C,w,ee,2,v,g,_))}function ng(e,n,r,i,a,o,s,c){let l=Math.sqrt(r[0]**2+r[1]**2+r[2]**2),u=[r[0]/l,r[1]/l,r[2]/l],d;if(c){let e=Math.sqrt(c[0]**2+c[1]**2+c[2]**2);d=[c[0]/e,c[1]/e,c[2]/e]}else{let e=Math.abs(u[0])<.9?[1,0,0]:[0,1,0],t=[u[1]*e[2]-u[2]*e[1],u[2]*e[0]-u[0]*e[2],u[0]*e[1]-u[1]*e[0]],n=Math.sqrt(t[0]**2+t[1]**2+t[2]**2);d=[t[0]/n,t[1]/n,t[2]/n]}let f=[u[1]*d[2]-u[2]*d[1],u[2]*d[0]-u[0]*d[2],u[0]*d[1]-u[1]*d[0]],p=Math.ceil(Math.abs(s-o)/(Math.PI/2)),m=(s-o)/p,h=[],g=[];for(let e=0;e<=p;e++){let t=o+e*m,r=Math.cos(t),s=Math.sin(t),c=n[0]+i*r*d[0]+a*s*f[0],l=n[1]+i*r*d[1]+a*s*f[1],u=n[2]+i*r*d[2]+a*s*f[2];if(e>0){let t=o+(e-.5)*m,r=Math.cos(t),s=Math.sin(t),c=1/Math.cos(m/2),l=n[0]+i*c*r*d[0]+a*c*s*f[0],u=n[1]+i*c*r*d[1]+a*c*s*f[1],p=n[2]+i*c*r*d[2]+a*c*s*f[2];h.push(l,u,p),g.push(Math.cos(m/2))}h.push(c,l,u),g.push(1)}let _=[,,,].fill(0);for(let e=1;e<p;e++)_.push(e,e);_.push(...[,,,].fill(p));let v=t(_,_.length-1);for(let e=0;e<_.length;e++)_[e]=t(_,e)/v;let y=t(h,0),b=t(h,1),x=t(h,2),S=t(h,h.length-3),C=t(h,h.length-2),w=t(h,h.length-1);return Wf(e.makeNurbsEdge(y,b,x,S,C,w,2,_,h,g))}function rg(e){return{makeVertex:(t,n,r)=>mh(e,t,n,r),makeEdge:(t,n,r)=>hh(e,t,n,r),makeWire:t=>gh(e,t),makeWireFromMixed:t=>Fh(e,t),makeFace:(t,n)=>_h(e,t,n),makeBox:(t,n,r)=>vh(e,t,n,r),makeRectangle:(t,n)=>yh(e,t,n),makeCylinder:(t,n,r,i)=>bh(e,t,n,r,i),makeSphere:(t,n)=>xh(e,t,n),makeCone:(t,n,r,i,a)=>Sh(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>Ch(e,t,n,r,i),makeEllipsoid:(t,n,r)=>wh(e,t,n,r),makeLineEdge:(t,n)=>Th(e,t,n),makeCircleEdge:(t,n,r)=>Eh(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>Dh(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>kh(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>Ah(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>jh(e,t,n,r,i,a,o,s),makeBezierEdge:t=>Mh(e,t),makeTangentArc:(t,n,r)=>Nh(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>Ph(e,t,n,r,i,a,o),makeCompound:t=>Ih(e,t),makeBoxFromCorners:(t,n)=>Lh(e,t,n),solidFromShell:t=>Rh(e,t),makeNonPlanarFace:t=>zh(e,t),addHolesInFace:(t,n)=>Bh(e,t,n),removeHolesFromFace:t=>Vh(e,t),makeFaceOnSurface:(t,n)=>Hh(e,t,n),bsplineSurface:(t,n,r)=>Uh(e,t,n,r),triangulatedSurface:(t,n,r)=>Wh(e,t,n,r),buildTriFace:(t,n,r)=>Gh(e,t,n,r),sewAndSolidify:(t,n)=>Kh(e,t,n),interpolatePoints:(t,n)=>qh(e,t,n),approximatePoints:(t,n)=>Jh(e,t,n),createPoint3d:(t,n,r)=>Yh(e,t,n,r),createDirection3d:(t,n,r)=>Xh(e,t,n,r),createVector3d:(t,n,r)=>Zh(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>Qh(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>$h(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>eg(e,t,n,r,i,a,o,s,c,l)}}function ig(e,t,n,r){let i=Yf(t,`fillet`),a=n.map(e=>R(e,`edge`));if(typeof r==`number`)return L(e.fillet(i,a,r));let o=[];for(let[e,t]of n.entries()){let n=a[e]??0,i;i=typeof r==`function`?r(t):r;let[s,c]=Array.isArray(i)?i:[i,i];o.push({edge:n,startRadius:s,endRadius:c})}return L(e.filletVariable(i,JSON.stringify(o)))}function ag(e,t,n,r){let i=Yf(t,`chamfer`),a=n.map(e=>R(e,`edge`));if(typeof r==`number`)return L(e.chamfer(i,a,r));if(Array.isArray(r)){let[t,n]=r;return typeof e.chamferAsymmetric==`function`?L(e.chamferAsymmetric(i,a,t,n)):(dp(`chamfer-asymmetric`,`chamferAsymmetric not available; using averaged distance.`),L(e.chamfer(i,a,(t+n)/2)))}let o=new Map;for(let[e,t]of n.entries()){let n=r(t),i=a[e];if(i===void 0)continue;let[s,c]=Array.isArray(n)?n:[n,n],l=`${s},${c}`,u=o.get(l);u?u.ids.push(i):o.set(l,{ids:[i],d1:s,d2:c})}let s=i;for(let t of o.values())t.d1===t.d2?s=e.chamfer(s,t.ids,t.d1):typeof e.chamferAsymmetric==`function`?s=e.chamferAsymmetric(s,t.ids,t.d1,t.d2):(dp(`chamfer-callback`,`chamferAsymmetric not available; asymmetric edges use averaged distance.`),s=e.chamfer(s,t.ids,(t.d1+t.d2)/2));return L(s)}function og(e,t,n,r,i){let a=r*Math.tan(i*Math.PI/180),o=Yf(t,`chamferDistAngle`),s=n.map(e=>R(e,`edge`));return typeof e.chamferAsymmetric==`function`?L(e.chamferAsymmetric(o,s,r,a)):(dp(`chamfer-dist-angle`,`chamferAsymmetric not available; using averaged distance.`),L(e.chamfer(o,s,(r+a)/2)))}function sg(e,n){let r=z(e.getFaceVertices(n));if(r.length<1)return null;let i=0,a=0,o=0;for(let n of r){let r=e.getVertexPosition(n);i+=t(r,0),a+=t(r,1),o+=t(r,2)}let s=r.length;return{x:i/s,y:a/s,z:o/s}}function cg(e,t,n){try{let r=e.getFaceNormal(t),i=-1,a=-2;for(let t of n)try{let n=e.getFaceNormal(t),o=(r[0]??0)*(n[0]??0)+(r[1]??0)*(n[1]??0)+(r[2]??0)*(n[2]??0);o>a&&(a=o,i=t)}catch{}if(i>=0&&a>.99)return i}catch{}return null}function lg(e,t,n){try{let r=sg(e,t);if(r===null)return null;let i=-1,a=1/0;for(let t of n)try{let n=sg(e,t);if(n===null)continue;let o=Math.sqrt((r.x-n.x)**2+(r.y-n.y)**2+(r.z-n.z)**2);o<a&&(a=o,i=t)}catch{}if(i>=0&&a<.001)return i}catch{}return null}function ug(e,t,n,r){if(r.has(t))return t;let i=cg(e,t,n);if(i!==null)return i;let a=lg(e,t,n);return a===null?t:a}function dg(e,t,n,r,i){i!==void 0&&dp(`shell-tolerance`,`shell() tolerance parameter is not supported; brepkit uses its own internal tolerance.`);let a=Yf(t,`shell`),o=z(e.getSolidFaces(a)),s=new Set(o),c=n.map(t=>ug(e,R(t,`face`),o,s));return L(e.shell(a,r,c))}function fg(e,t,n){let r=t;if(r.type===`face`)return L(e.thicken(r.id,n));throw Error(`brepkit: thicken() requires a face`)}function pg(e,t,n,r){r!==void 0&&dp(`offset-tolerance`,`offset() tolerance parameter is not supported; brepkit uses its own internal tolerance.`);let i=t;if(i.type===`face`)return L(e.thicken(i.id,n));let a=Yf(t,`offset`);return L(e.offsetSolidV2(a,n))}function mg(e,t,n){let r=Yf(t,`filletVariable`);return L(e.filletVariable(r,n))}function hg(e,t,n,r,i,a){let o=Yf(t,`draft`),s=n.map(e=>R(e,`face`));return L(e.draft(o,s,r[0],r[1],r[2],i[0],i[1],i[2],a))}function gg(e,t,n){let r=Yf(t,`defeature`),i=n.map(e=>R(e,`face`));return L(e.defeature(r,i))}function _g(e){switch(e){case`arc`:case`tangent`:return`arc`;case`intersection`:return`intersection`;default:return`intersection`}}function vg(e,n,r,i){if(typeof e.offsetWire2DWithJoin==`function`)return Gf(e.offsetWire2DWithJoin(R(n,`wire`),r,_g(i)));let a=Tp(e,n,`edge`);if(a.length===0)return n;let o=[];for(let n of a){let r=e.getEdgeVertices(R(n,`edge`));o.push(t(r,0),t(r,1))}if(o.length<6)return n;let s=e.offsetPolygon2d(o,r,1e-10),c=[];for(let e=0;e<s.length;e+=2)c.push(t(s,e),t(s,e+1),0);return Gf(e.makePolygonWire(c))}function yg(e,t){if(t.type===`solid`)try{e.healSolid(R(t))}catch(e){console.warn(`brepkit: healing failed in simplify:`,e)}return t}function bg(e,t){let n=t,r=e.reverseShape(n.id);return Hf(n.type,r)}function xg(e){return{fillet:(t,n,r)=>ig(e,t,n,r),chamfer:(t,n,r)=>ag(e,t,n,r),chamferDistAngle:(t,n,r,i)=>og(e,t,n,r,i),shell:(t,n,r,i)=>dg(e,t,n,r,i),thicken:(t,n)=>fg(e,t,n),offset:(t,n,r)=>pg(e,t,n,r),filletVariable:(t,n)=>mg(e,t,n),draft:(t,n,r,i,a)=>hg(e,t,n,r,i,gp(n,a)),defeature:(t,n)=>gg(e,t,n),offsetWire2D:(t,n,r)=>vg(e,t,n,r),simplify:t=>yg(e,t),reverseShape:t=>bg(e,t)}}function Sg(e,t){let n=JSON.parse(e),r=n.evolution;if(!r||typeof r.modified!=`object`||typeof r.generated!=`object`)throw Error(`brepkit: invalid evolution JSON structure`);let i=L(n.solid),a=e=>{let n=new Map;for(let[r,i]of Object.entries(e)){let e=Number(r)%t,a=i.map(e=>e%t),o=n.get(e);o?o.push(...a):n.set(e,a)}return n},o=a(r.modified),s=a(r.generated),c=new Set;for(let e of r.deleted)c.add(e%t);return{shape:i,evolution:{modified:o,generated:s,deleted:c}}}function Cg(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i}function wg(e,n){try{let r=e.tessellateFace(n,1).positions;if(r.length<3)return[0,0,0];let i=0,a=0,o=0,s=r.length/3;for(let e=0;e<r.length;e+=3)i+=t(r,e),a+=t(r,e+1),o+=t(r,e+2);return[i/s,a/s,o/s]}catch{return[0,0,0]}}function Tg(e,t,n){try{return{hash:n,normal:e.getFaceNormal(t),centroid:wg(e,t)}}catch{return{hash:n,normal:[0,0,0],centroid:wg(e,t)}}}var Eg=.707,Dg=100,Og=.05;function kg(e,n){let r=-1/0,i=[];for(let a=0;a<n.length;a++){let o=t(n,a),s=(e.normal[0]??0)*(o.normal[0]??0)+(e.normal[1]??0)*(o.normal[1]??0)+(e.normal[2]??0)*(o.normal[2]??0);if(s<Eg)continue;let c=Cg(e.centroid,o.centroid);if(c>Dg)continue;let l=s-c/Dg;l>r&&(r=l),i.push({idx:a,score:l})}return{matches:i,bestScore:r}}function Ag(e,t){let n=1/0,r;for(let i of t){let t=Cg(e.centroid,i.centroid);t<n&&(n=t,r=i)}return r}function jg(e,n,r,i,a,o,s,c){let l=n;if(l.type!==`solid`)return;let u=z(e.getSolidFaces(l.id)),d=Math.min(u.length,r.length),f=[];for(let n=0;n<d;n++){let i=t(u,n);f.push(Tg(e,i,r[n]??i%a))}let p=i.map(t=>Tg(e,t,t%a)),m=new Set;for(let e of p){let{matches:n,bestScore:r}=kg(e,f);if(n.length>0){for(let i of n)if(i.score>=r-Og){let n=t(f,i.idx),r=o.get(n.hash)??[];r.push(e.hash),o.set(n.hash,r),m.add(i.idx)}}else{let t=Ag(e,f);if(t){let n=s.get(t.hash)??[];n.push(e.hash),s.set(t.hash,n)}}}for(let e=0;e<f.length;e++)m.has(e)||c.add(t(f,e).hash)}function Mg(e,t,n,r,i,a,o,s){let c=new Set(s),l=new Map(a);jg(e,t,n,r,i,a,o,s),s.clear();for(let e of c)s.add(e);for(let e of n){let t=!l.has(e)&&a.has(e)&&(a.get(e)?.length??0)>0,n=o.has(e)&&(o.get(e)?.length??0)>0;!t&&!n&&s.add(e)}}function Ng(e,n,r,i,a,o){let s=n.filter(e=>!r.has(e));s.length>0&&e.length>0&&a.set(t(e,0),s);for(let t of e)i.has(t)||o.add(t)}function Pg(e,n,r,i,a,o,s,c,l){let u=new Set(i);if(r.some(e=>u.has(e))){let t=new Set(r);for(let e of r)u.has(e)&&o.set(e,[e]);let d=i.filter(e=>!t.has(e)),f=n.filter(e=>!u.has(e%a));l&&d.length>0&&f.length>0?Mg(e,l,d,f,a,o,s,c):Ng(i,r,u,t,s,c)}else if(l)jg(e,l,i,n,a,o,s,c);else{for(let e=0;e<i.length&&e<r.length;e++)o.set(t(i,e),[t(r,e)]);r.length>i.length&&i.length>0&&s.set(t(i,0),r.slice(i.length))}}function Fg(e,n,r,i,a,o){let s=n,c=new Map,l=new Map,u=new Set;if(s.type===`solid`){let n=z(e.getSolidFaces(s.id)),d=n.map(e=>e%i);if(a)for(let e=0;e<r.length&&e<d.length;e++)c.set(t(r,e),[t(d,e)]);else Pg(e,n,d,r,i,c,l,u,o)}return{shape:n,evolution:{modified:c,generated:l,deleted:u}}}function Ig(e,t,n,r,i){for(let[a,o]of e){let s=[];for(let e of o){r.add(e);let i=t.get(e);i?s.push(...i):n.has(e)||s.push(e)}s.length>0?e.set(a,s):(e.delete(a),i?.add(a))}}function Lg(e,t){let n=new Set;Ig(t.combinedModified,e.evolution.modified,e.evolution.deleted,n,t.combinedDeleted),Ig(t.combinedGenerated,e.evolution.modified,e.evolution.deleted,n);for(let[r,i]of e.evolution.modified)t.combinedModified.has(r)||n.has(r)||t.combinedModified.set(r,[...i]);for(let[r,i]of e.evolution.generated){if(n.has(r))continue;let e=t.combinedGenerated.get(r)??[];t.combinedGenerated.set(r,[...e,...i])}for(let n of e.evolution.deleted)t.inputFaceHashSet.has(n)&&t.combinedDeleted.add(n)}function Rg(e,t,n,r,i,a){let o=z(e.getCompoundSolids(n)),s=t,c={combinedModified:new Map,combinedGenerated:new Map,combinedDeleted:new Set,inputFaceHashSet:new Set(r)};for(let e of o){let t=s;if(t.type!==`solid`)break;let n=Sg(a(t.id,e),i);s=n.shape,Lg(n,c)}return{shape:s,accum:c}}function zg(e,t,n,r,i,a,o,s,c){let l={hasErrors:!1,hasWarnings:!1,messages:[]},u=t,d=n;if(r.length>0&&u.type===`solid`){if(d.type===`solid`)try{return{...Sg(o(u.id,d.id),i),diagnostics:l}}catch(e){if(!Qm(e))throw e}if(d.type===`compound`){let{shape:n,accum:a}=Rg(e,t,d.id,r,i,o);return{shape:n,evolution:{modified:a.combinedModified,generated:a.combinedGenerated,deleted:a.combinedDeleted},diagnostics:l}}}return{...Fg(e,s(t,n,a),r,i,!1,t),diagnostics:l}}function Bg(e,t,n,r,i,a,o){return Fg(e,Cm(e,t,n,r,i),a,o,!0)}function Vg(e,t,n,r,i,a,o){return Fg(e,wm(e,t,n*180/Math.PI,a,o),r,i,!0)}function Hg(e,t,n,r,i,a){return Fg(e,Tm(e,t,n,r),i,a,!0)}function Ug(e,t,n,r,i,a){return Fg(e,Em(e,t,n,r),i,a,!0)}function Wg(e,t,n,r,i,a,o){return Fg(e,Dm(e,t,n,r,i),a,o,!0)}function Gg(e,t,n,r,i,a){return zg(e,t,n,r,i,a,(t,n)=>e.fuseWithEvolution(t,n),(t,n,r)=>th(e,t,n,r),`fuseWithHistory`)}function Kg(e,t,n,r,i,a){return zg(e,t,n,r,i,a,(t,n)=>e.cutWithEvolution(t,n),(t,n,r)=>nh(e,t,n,r),`cutWithHistory`)}function qg(e,t,n,r,i,a){return zg(e,t,n,r,i,a,(t,n)=>e.intersectWithEvolution(t,n),(t,n,r)=>rh(e,t,n,r),`intersectWithHistory`)}function Jg(e,t,n,r,i,a){return Fg(e,ig(e,t,n,r),i,a,!1,t)}function Yg(e,t,n,r,i,a){return Fg(e,ag(e,t,n,r),i,a,!1,t)}function Xg(e,t,n,r,i,a,o){return Fg(e,dg(e,t,n,r,o),i,a,!1,t)}function Zg(e,t,n,r,i){return Fg(e,fg(e,t,n),r,i,!1,t)}function Qg(e,t,n,r,i,a){return Fg(e,pg(e,t,n,a),r,i,!1,t)}function $g(e,t,n,r,i,a,o,s){return Fg(e,hg(e,t,n,r,i,a),o,s,!1,t)}function e_(e,t,n,r,i){return Fg(e,Fm(e,t,n),r,i,!0)}function t_(e,t){let n=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];for(let e of t)n=ap(e.type===`translate`?$f(e.x,e.y,e.z):tp(e.angle,e.axis,e.center),n);return{handle:n,dispose:()=>{}}}function n_(e){return{translateWithHistory:(t,n,r,i,a,o)=>Bg(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>Vg(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>Hg(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>Ug(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>Wg(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>Gg(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>Kg(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>qg(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>Jg(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>Yg(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>Xg(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>Zg(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>Qg(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>$g(e,t,n,r,i,gp(n,a),o,s),applyComposedTransformWithHistory:(t,n,r,i)=>e_(e,t,n,r,i),composeTransform:t=>t_(e,t)}}function r_(e,t,n){let r=R(t),i=t,a=n.tolerance||.01,o=n.angularTolerance>0?n.angularTolerance:void 0,s;if(i.type===`solid`)s=o_(e,r,a,!!n.includeUVs,o);else if(i.type===`face`)s=d_(e,r,a,0,o);else throw Error(`brepkit: cannot mesh shape of type '${i.type}'`);return n.skipNormals&&(s.normals=new Float32Array),n.includeUVs||(s.uvs=new Float32Array),s}function i_(e,n,r,i){let a=n;if(a.type!==`solid`)return{lines:new Float32Array,edgeGroups:[]};let o=i>0?i:void 0,s=e.meshEdgesAll(a.id,r,o),c=s.positions,l=s.offsets,u=s.edgeCount,d=[];for(let e=0;e<u;e++){let n=t(l,e),r=((e+1<u?t(l,e+1):c.length)-n)/3;d.push({start:n/3,count:r,edgeHash:e})}return{lines:new Float32Array(c),edgeGroups:d}}function a_(e,t){return!1}function o_(e,t,n,r,i){try{return s_(e,t,n,r,i)}catch(r){return console.warn(`brepkit: tessellateSolidGrouped failed (solidId=${t}), falling back to per-face:`,r),u_(e,t,n,i)}}function s_(e,t,n,r,i){return typeof e.tessellateSolidGroupedBinary==`function`?c_(e,t,n,r,i,e.tessellateSolidGroupedBinary(t,n,i)):l_(e,t,n,r,i)}function c_(e,n,r,i,a,o){let s=o.positions,c=o.normals,l=o.indices,u=o.faceOffsets,d=z(e.getSolidFaces(n)),f=u.length-1;if(f!==d.length)throw Error(`faceOffsets/faceIds length mismatch: ${f} groups vs ${d.length} faces`);let p=[];for(let e=0;e<u.length-1;e++){let n=t(u,e),r=t(u,e+1)-n;r!==0&&p.push({start:n,count:r,faceHash:d[e]??0})}let m=new Float32Array;if(i){let t=s.length/3*2;try{let i=e.tessellateSolidUV(n,r,a),o=JSON.parse(i);m=o.uvs.length===t?new Float32Array(o.uvs):new Float32Array(t)}catch{m=new Float32Array(t)}}return{vertices:s,normals:c,triangles:l,uvs:m,faceGroups:p}}function l_(e,n,r,i,a){let o=e.tessellateSolidGrouped(n,r,a),s=JSON.parse(o),c=z(e.getSolidFaces(n)),l=s.faceOffsets.length-1;if(l!==c.length)throw Error(`faceOffsets/faceIds length mismatch: ${l} groups vs ${c.length} faces`);let u=[];for(let e=0;e<s.faceOffsets.length-1;e++){let n=t(s.faceOffsets,e),r=t(s.faceOffsets,e+1)-n;r!==0&&u.push({start:n,count:r,faceHash:c[e]??0})}let d=new Float32Array;if(i){let t=s.positions.length/3*2;try{let i=e.tessellateSolidUV(n,r,a),o=JSON.parse(i);d=o.uvs.length===t?new Float32Array(o.uvs):new Float32Array(t)}catch{d=new Float32Array(t)}}return{vertices:new Float32Array(s.positions),normals:new Float32Array(s.normals),triangles:new Uint32Array(s.indices),uvs:d,faceGroups:u}}function u_(e,t,n,r){let i=z(e.getSolidFaces(t)),a=[],o=[],s=[],c=[],l=[],u=0;for(let t of i)try{let i=e.tessellateFace(t,n,r),d=i.positions,f=i.normals,p=i.indices,m=d.length/3;if(m===0)continue;let h=s.length;for(let e of d)a.push(e);for(let e of f)o.push(e);for(let e of p)s.push(e+u);for(let e=0;e<m;e++)c.push(0,0);l.push({start:h,count:p.length,faceHash:t}),u+=m}catch(e){console.warn(`brepkit: face tessellation failed (faceId=${t}):`,e)}return{vertices:new Float32Array(a),normals:new Float32Array(o),triangles:new Uint32Array(s),uvs:new Float32Array(c),faceGroups:l}}function d_(e,t,n,r,i){let a=e.tessellateFace(t,n,i),o=a.positions,s=a.normals,c=a.indices,l=o.length/3,u=[];for(let e=0;e<l;e++)u.push(0,0);return{vertices:new Float32Array(o),normals:new Float32Array(s),triangles:new Uint32Array(c),uvs:new Float32Array(u),faceGroups:[{start:0,count:c.length,faceHash:r}]}}function f_(e){return{mesh:(t,n)=>r_(e,t,n),meshEdges:(t,n,r)=>i_(e,t,n,r),hasTriangulation:t=>a_(e,t),meshShape:(e,t,n)=>{}}}function p_(e,t){if(t.length===0)return``;let n=[];for(let r of t){let t=Xf(e,r,`exportSTEP`);for(let r of t){let t=e.exportStep(r);n.push(new TextDecoder().decode(t))}}return n.join(`
8
- `)}function m_(e,n,r,i=Se,a=Ce){let{vertices:o,triangles:s}=r_(e,L(t(Xf(e,n,`exportSTL`),0)),{tolerance:i,angularTolerance:a,skipNormals:!0});return r?Ee(o,s):De(o,s)}function h_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return z(e.importStep(n)).map(L)}function g_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return L(e.importStl(n))}function __(e,t){if(t.length===0)return``;let n=[];for(let r of t){let t=Xf(e,r,`exportIGES`);for(let r of t){let t=e.exportIges(r);n.push(new TextDecoder().decode(t))}}return n.join(`
9
- `)}function v_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return z(e.importIges(n)).map(L)}function y_(e,t,n){return t.length===0?``:p_(e,t.map(e=>e.shape))}function b_(e,t,n){let r=Yf(t,`export3MF`);return Qf(e.export3mf(r,n))}function x_(e,t,n){let r=Yf(t,`exportGLB`);return Qf(e.exportGlb(r,n))}function S_(e,t,n){let r=Yf(t,`exportOBJ`);return Qf(e.exportObj(r,n))}function C_(e,t,n){let r=Yf(t,`exportPLY`);return Qf(e.exportPly(r,n))}function w_(e,t){return z(e.import3mf(new Uint8Array(t))).map(e=>L(e))}function T_(e,t){return L(e.importObj(new Uint8Array(t)))}function E_(e,t){return L(e.importGlb(new Uint8Array(t)))}function D_(e,t){let n=t;return n.type===`solid`?e.toBREP(n.id):(dp(`brep-non-solid`,`toBREP for non-solid shapes uses STEP format.`),p_(e,[t]))}function O_(e,t){if(typeof e.fromBREP==`function`&&t.trimStart().startsWith(`{`))return L(e.fromBREP(t));let n=h_(e,t)[0];if(!n)throw Error(`brepkit: fromBREP produced no shapes`);return n}function k_(e,t){return{__brepkit_xcaf:!0,shapes:t,delete:Bf}}function A_(e,t,n){return t&&t.__brepkit_xcaf&&Array.isArray(t.shapes)?p_(e,t.shapes.map(e=>e.shape)):``}function j_(e,t,n){return p_(e,t.map(e=>e.shape))}function M_(e){return{exportSTEP:t=>p_(e,t),exportSTL:(t,n,r,i)=>m_(e,t,n,r,i),importSTEP:t=>h_(e,t),importSTL:t=>g_(e,t),exportIGES:t=>__(e,t),importIGES:t=>v_(e,t),exportSTEPAssembly:(t,n)=>y_(e,t,n),export3MF:(t,n)=>b_(e,t,n),exportGLB:(t,n)=>x_(e,t,n),exportOBJ:(t,n)=>S_(e,t,n),exportPLY:(t,n)=>C_(e,t,n),import3MF:t=>w_(e,t),importOBJ:t=>T_(e,t),importGLB:t=>E_(e,t),toBREP:t=>D_(e,t),fromBREP:t=>O_(e,t),createXCAFDocument:t=>k_(e,t),writeXCAFToSTEP:(t,n)=>A_(e,t,n),exportSTEPConfigured:(t,n)=>j_(e,t,n)}}function N_(e,t){return{x:e,y:t}}function P_(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`brepkit: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function F_(e,t){return{x:e,y:t}}function I_(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:Bf}}function L_(e){return e}function R_(e){return e}function z_(e,t,n,r){return x(e,t,n,r)}function B_(e,t,n,r){return S(e,t,n,r)}function V_(e,t,n,r,i,a,o){return ee(e,t,n,r,i,a,o)}function H_(e,t,n,r,i,a,o,s,c){let l=ee(e,t,n,r,o,s,c),u=c!==!1,d=u?i:-i,f=u?a:-a;return f<d-1e-9&&(f+=2*Math.PI),{__bk2d:`trimmed`,basis:l,tStart:d,tEnd:f}}function U_(e){return te(e)}function W_(e,t){let n=e.length,r=Math.min(3,n-1),i=[],a=[];i.push(0),a.push(r+1);let o=n-r-1;for(let e=1;e<=o;e++)i.push(e/(o+1)),a.push(1);return i.push(1),a.push(r+1),{__bk2d:`bspline`,poles:[...e],knots:i,multiplicities:a,degree:r,isPeriodic:!1}}function G_(e,t){return _(pp(e),t)}function K_(e,t){return{point:_(pp(e),t),tangent:v(pp(e),t)}}function q_(e){return y(pp(e))}function J_(e){return b(mp(e))}function Y_(e,t,n){return{__bk2d:`trimmed`,basis:pp(e),tStart:t,tEnd:n}}function X_(e){let t=e;switch(t.__bk2d){case`line`:{let e=t;e.ox+=e.dx*e.len,e.oy+=e.dy*e.len,e.dx=-e.dx,e.dy=-e.dy;break}case`circle`:case`ellipse`:{let e=t;e.sense=!e.sense;break}case`trimmed`:{let e=t;[e.tStart,e.tEnd]=[e.tEnd,e.tStart];break}case`bezier`:{let e=t;e.poles=[...e.poles].reverse();break}case`bspline`:{let e=t;e.poles=[...e.poles].reverse();let n=e.knots[0],r=e.knots[e.knots.length-1];n!==void 0&&r!==void 0&&(e.knots=e.knots.map(e=>n+r-e).reverse()),Array.isArray(e.weights)&&(e.weights=[...e.weights].reverse());break}default:break}}function Z_(e){return JSON.parse(JSON.stringify(e))}function Q_(e,t){let n=pp(e),r=y(n),i=[];for(let e=0;e<=30;e++){let a=r.first+(r.last-r.first)*e/30,[o,s]=_(n,a),[c,l]=v(n,a),u=Math.sqrt(c*c+l*l);u>1e-12?i.push([o-l/u*t,s+c/u*t]):i.push([o,s])}return W_(i)}function $_(e,t,n){return ne(pp(e),t,n)}function ev(e,t,n,r){return re(pp(e),t,n,r)}function tv(e,t,n,r){return ie(pp(e),t,n,r)}function nv(e,t,n){return ae(pp(e),t,n)}function rv(e,t,n,r,i){return oe(pp(e),t,n,r,i)}function iv(e,t,n,r,i,a){return mv(e,sv(t,n,r,i,a))}function av(e,t,n){return{m:e,tx:t,ty:n,delete:Bf}}function ov(){return av([1,0,0,0,1,0,0,0,1],0,0)}function sv(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return ov();let s=-i/o,c=r/o,l=a-1,u=[1+l*s*s,l*s*c,0,l*c*s,1+l*c*c,0,0,0,1];return av(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function cv(e,t){return av([1,0,0,0,1,0,0,0,1],e,t)}function lv(e,n,r,i,a,o,s){if(r===`axis`&&o!==void 0&&s!==void 0){let r=Math.sqrt(o*o+s*s),c=o/r,l=s/r,u=[2*c*c-1,2*c*l,0,2*c*l,2*l*l-1,0,0,0,1],d=i??e,f=a??n;return av(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return av([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function uv(e,t,n){let r=Math.cos(e),i=Math.sin(e);return av([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function dv(e,t,n){return av([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function fv(e,t,n){e.tx=t,e.ty=n}function pv(e,n){let r=e.m,i=n.m,a=e=>t(r,e),o=e=>t(i,e);e.m=[a(0)*o(0)+a(1)*o(3)+a(2)*o(6),a(0)*o(1)+a(1)*o(4)+a(2)*o(7),a(0)*o(2)+a(1)*o(5)+a(2)*o(8),a(3)*o(0)+a(4)*o(3)+a(5)*o(6),a(3)*o(1)+a(4)*o(4)+a(5)*o(7),a(3)*o(2)+a(4)*o(5)+a(5)*o(8),a(6)*o(0)+a(7)*o(3)+a(8)*o(6),a(6)*o(1)+a(7)*o(4)+a(8)*o(7),a(6)*o(2)+a(7)*o(5)+a(8)*o(8)];let s=e.tx,c=e.ty,l=Number(n.tx)||0,u=Number(n.ty)||0;e.tx=a(0)*l+a(1)*u+s,e.ty=a(3)*l+a(4)*u+c}function mv(e,n){let r=pp(e),i=n.m??[1,0,0,0,1,0,0,0,1],a=Number(n.tx)||0,o=Number(n.ty)||0,s=t(i,0),c=t(i,1),l=t(i,3),u=t(i,4);if(Math.abs(s-1)<1e-12&&Math.abs(u-1)<1e-12&&Math.abs(c)<1e-12&&Math.abs(l)<1e-12)return ne(r,a,o);let d=y(r),f=[];for(let e=0;e<=20;e++){let[t,n]=_(r,d.first+(d.last-d.first)*e/20);f.push([s*t+c*n+a,l*t+u*n+o])}return te(f)}function hv(e,t,n){let r=se(pp(e),pp(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function gv(e,t,n){let r=pp(e),i=y(r);if(r.__bk2d===`line`){let e=t-r.ox,a=n-r.oy,o=Math.max(i.first,Math.min(i.last,e*r.dx+a*r.dy)),[s,c]=_(r,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}if(r.__bk2d===`circle`){let e=Math.atan2(n-r.cy,t-r.cx),i=r.sense?e:-e;for(;i<0;)i+=2*Math.PI;for(;i>2*Math.PI;)i-=2*Math.PI;let[a,o]=_(r,i);return{param:i,distance:Math.sqrt((a-t)**2+(o-n)**2)}}if(!isFinite(i.first)||!isFinite(i.last))return null;let a=i.first,o=1/0,s=(i.last-i.first)/200;for(let e=0;e<=200;e++){let c=i.first+e*s,[l,u]=_(r,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}for(let e=0;e<10;e++){let[e,o]=_(r,a),[s,c]=v(r,a),l=(e-t)*s+(o-n)*c,u=s*s+c*c;if(u<1e-20)break;let d=l/u,f=Math.max(i.first,Math.min(i.last,a-d));if(Math.abs(f-a)<1e-14)break;a=f}let[c,l]=_(r,a);return{param:a,distance:Math.sqrt((c-t)**2+(l-n)**2)}}function _v(e,t,n,r,i,a){let o=pp(e),s=pp(t),c=n,l=i,u=1/0;for(let e=0;e<=50;e++){let t=n+(r-n)*e/50,[d,f]=_(o,t);for(let e=0;e<=50;e++){let n=i+(a-i)*e/50,[r,o]=_(s,n),p=(r-d)**2+(o-f)**2;p<u&&(u=p,c=t,l=n)}}let d=c,f=l;for(let c=0;c<20;c++){let[c,l]=_(s,f),u=gv(e,c,l);if(u){let e=Math.max(n,Math.min(r,u.param)),t=Math.abs(e-d)<1e-12;if(d=e,t)break}let[p,m]=_(o,d),h=gv(t,p,m);if(h){let e=Math.max(i,Math.min(a,h.param)),t=Math.abs(e-f)<1e-12;if(f=e,t)break}}let[p,m]=_(o,d),[h,g]=_(s,f);return Math.sqrt((h-p)**2+(g-m)**2)}function vv(e,n,r,i){let a=pp(e),o=y(a),s=Math.max(3,{C0:1,C1:2,C2:3,C3:4}[r]??4),c=Math.max(100,i*10),l=[],u=1/0;for(let e=0;e<3&&u>n;e++){l=[];for(let e=0;e<=c;e++){let t=o.first+(o.last-o.first)*e/c;l.push(_(a,t))}u=0;for(let e=0;e<c;e++){let[n,r]=_(a,o.first+(o.last-o.first)*(e+.5)/c),i=t(l,e),s=t(l,e+1),d=(i[0]+s[0])/2,f=(i[1]+s[1])/2,p=Math.sqrt((n-d)**2+(r-f)**2);p>u&&(u=p)}u>n&&(c=Math.min(c*2,500))}return W_(l,{degMax:s})}function yv(e){let n=mp(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return yv(vv(e,1e-6,`C2`,10));let r=y(pp(e)),i=r.first,a=r.last,o=[];for(let e of n.knots)e>i+1e-12&&e<a-1e-12&&o.push(e);let s=[i,...o,a],c=[];for(let e=0;e<s.length-1;e++){let r=t(s,e),i=t(s,e+1),a=i-r;if(a<1e-15)continue;let o=_(n,r),l=_(n,i),u=v(n,r),d=v(n,i),f=a/3,p={__bk2d:`bezier`,poles:[o,[o[0]+u[0]*f,o[1]+u[1]*f],[l[0]-d[0]*f,l[1]-d[1]*f],l]};c.push(p)}return c.length>0?c:[e]}function bv(){return ve()}function xv(e,t,n){ye(hp(e),pp(t),n)}function Sv(e){let t=hp(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function Cv(e,t){let n=hp(e),r=hp(t);n.xMin=Math.min(n.xMin,r.xMin),n.yMin=Math.min(n.yMin,r.yMin),n.xMax=Math.max(n.xMax,r.xMax),n.yMax=Math.max(n.yMax,r.yMax)}function wv(e,t){let n=hp(e),r=hp(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function Tv(e,t,n){let r=hp(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function Ev(e){let t=mp(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function Dv(e){let t=mp(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function Ov(e){let t=mp(e);return t.__bk2d===`bezier`?[...t.poles]:null}function kv(e){let t=mp(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function Av(e){let t=mp(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function jv(e){return ge(pp(e))}function Mv(e){return _e(e)}function Nv(e,t){let n=pp(e),r=y(n),i=[r.first,...[...t].sort((e,t)=>e-t),r.last],a=[];for(let e=0;e<i.length-1;e++)a.push({__bk2d:`trimmed`,basis:n,tStart:i[e],tEnd:i[e+1]});return a}function Pv(e,n,r,i,a){let o=pp(n),s=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],c=(e,t)=>[r[0]+e*a[0]+t*s[0],r[1]+e*a[1]+t*s[1],r[2]+e*a[2]+t*s[2]];if(o.__bk2d===`line`)return Th(e,c(o.ox,o.oy),c(o.ox+o.dx*o.len,o.oy+o.dy*o.len));if(o.__bk2d===`circle`||o.__bk2d===`trimmed`){let n=o;for(;n.__bk2d===`trimmed`;)n=n.basis;if(n.__bk2d===`circle`){let r=n,a=c(r.cx,r.cy),s=r.sense?i:[-i[0],-i[1],-i[2]],l=y(o),u;u=o.__bk2d===`trimmed`?Math.abs(o.tEnd-o.tStart):2*Math.PI;let d=u>Math.PI?4:u>Math.PI/2?2:1,f=(l.last-l.first)/d,p=[];for(let t=0;t<d;t++){let[n,r]=_(o,l.first+t*f),[i,u]=_(o,l.first+(t+1)*f);p.push(e.makeCircleArc3d(...c(n,r),...c(i,u),...a,...s))}return p.length===1?Wf(t(p,0)):Gf(e.makeWire(p,!1))}if(n.__bk2d===`ellipse`){let r=n,l=c(r.cx,r.cy),u=Math.cos(r.xDirAngle),d=Math.sin(r.xDirAngle),f=[u*a[0]+d*s[0],u*a[1]+d*s[1],u*a[2]+d*s[2]],p=y(o),m=p.last-p.first,h=m*1e-4,[g,v]=_(o,p.first),[b,x]=_(o,p.first+h),S=(g-r.cx)*(x-r.cy)-(v-r.cy)*(b-r.cx)>=0?i:[-i[0],-i[1],-i[2]],C=o.__bk2d===`trimmed`?Math.abs(o.tEnd-o.tStart):2*Math.PI,w=C>Math.PI?4:C>Math.PI/2?2:1,ee=m/w,te=[];for(let t=0;t<w;t++){let[n,i]=_(o,p.first+t*ee),[a,s]=_(o,p.first+(t+1)*ee);te.push(e.makeEllipseArc3d(...c(n,i),...c(a,s),...l,...S,...f,r.majorRadius,r.minorRadius))}return te.length===1?Wf(t(te,0)):Gf(e.makeWire(te,!1))}}if(o.__bk2d===`bezier`||o.__bk2d===`bspline`){let n=o.poles.map(([e,t])=>c(e,t));if(n.length===2)return Th(e,t(n,0),t(n,1));let r=Math.min(3,n.length-1),i=n.flatMap(([e,t,n])=>[e,t,n]);return Wf(e.interpolatePoints(i,r))}let l=y(o),u=[];for(let e=0;e<=100;e++){let[t,n]=_(o,l.first+(l.last-l.first)*e/100);u.push(c(t,n))}return qh(e,u)}function Fv(e,t,r){if(!Vf(r))throw Error(`brepkit: buildEdgeOnSurface requires a face handle as surface`);let i=R(r,`face`),a=pp(t),o=y(a),s=e.getSurfaceType(i)===`plane`?50:100,c=[];for(let t=0;t<=s;t++){let[r,l]=_(a,o.first+(o.last-o.first)*t/s);c.push(n(e.evaluateSurface(i,r,l)))}return qh(e,c)}function Iv(e){return e}function Lv(e,n,r,i){let a=0;for(;e.length<r;){let o=[];for(let r=0;r<e.length-1;r++){let a=t(e,r),s=t(e,r+1),c=(a.t+s.t)/2,l=n(c),u=(a.uv[0]+s.uv[0])/2,d=(a.uv[1]+s.uv[1])/2;Math.sqrt((l[0]-u)**2+(l[1]-d)**2)>i&&o.push({index:r+1,t:c,uv:l})}if(o.length===0)break;let s=r-e.length;for(let n=o.length-1;n>=0&&s>0;n--){let r=t(o,n);e.splice(r.index,0,{t:r.t,uv:r.uv}),s--}if(a++,a>3)break}}function Rv(e,n,r){let i=R(n,`edge`),a=R(r,`face`),o=e.getEdgeCurveParameters(i),s=o[0]??0,c=o[1]??1,l=[];for(let e=0;e<=20;e++)l.push(s+(c-s)*e/20);let u=n=>{let r=e.evaluateEdgeCurve(i,n),o=e.projectPointOnSurface(a,t(r,0),t(r,1),t(r,2));return[t(o,0),t(o,1)]},d=l.map(e=>({t:e,uv:u(e)}));Lv(d,u,80,.05);let f=d.map(e=>e.uv);if(f.length>=2)return W_(f);let p=e.getEdgeVertices(i);if(p.length>=6){let n=e.projectPointOnSurface(a,t(p,0),t(p,1),t(p,2)),r=e.projectPointOnSurface(a,t(p,3),t(p,4),t(p,5));return x(t(n,0),t(n,1),t(r,0),t(r,1))}throw Error(`brepkit: extractCurve2dFromEdge: degenerate edge (${p.length} coords)`)}function zv(e,t,n){return e}function Bv(e,n,r){if(n.length>=1){let r=Tp(e,n[0],`edge`);if(r.length===4){let n=[],i=[];for(let a of r){let r=R(a,`edge`),o=e.getEdgeCurveParameters(r),s=t(o,0),c=t(o,1),l=[];for(let n=0;n<=10;n++){let i=s+(c-s)*n/10,a=e.evaluateEdgeCurve(r,i);l.push(t(a,0),t(a,1),t(a,2))}n.push(...l),i.push(11)}try{return Uf(e.fillCoonsPatch(n,i))}catch(e){console.warn(`brepkit: Coons patch failed, falling back:`,e)}}}let i=n[0];if(!i)throw Error(`fillSurface: no wires provided`);return zh(e,i)}function Vv(e){return{createPoint2d:(e,t)=>N_(e,t),createDirection2d:(e,t)=>P_(e,t),createVector2d:(e,t)=>F_(e,t),createAxis2d:(e,t,n,r)=>I_(e,t,n,r),wrapCurve2dHandle:e=>L_(e),createCurve2dAdaptor:e=>R_(e),makeLine2d:(e,t,n,r)=>z_(e,t,n,r),makeCircle2d:(e,t,n,r)=>B_(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>C(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>w(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>V_(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>H_(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>U_(e),makeBSpline2d:(e,t)=>W_(e,t),evaluateCurve2d:(e,t)=>G_(e,t),evaluateCurve2dD1:(e,t)=>K_(e,t),getCurve2dBounds:e=>q_(e),getCurve2dType:e=>J_(e),trimCurve2d:(e,t,n)=>Y_(e,t,n),reverseCurve2d:e=>{X_(e)},copyCurve2d:e=>Z_(e),offsetCurve2d:(e,t)=>Q_(e,t),translateCurve2d:(e,t,n)=>$_(e,t,n),rotateCurve2d:(e,t,n,r)=>ev(e,t,n,r),scaleCurve2d:(e,t,n,r)=>tv(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>nv(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>rv(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>iv(e,t,n,r,i,a),createIdentityGTrsf2d:()=>ov(),createAffinityGTrsf2d:(e,t,n,r,i)=>sv(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>cv(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>lv(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>uv(e,t,n),createScaleGTrsf2d:(e,t,n)=>dv(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{fv(e,t,n)},multiplyGTrsf2d:(e,t)=>{pv(e,t)},transformCurve2dGeneral:(e,t)=>mv(e,t),intersectCurves2d:(e,t,n)=>hv(e,t,n),projectPointOnCurve2d:(e,t,n)=>gv(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>_v(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>vv(e,t,n,r),decomposeBSpline2dToBeziers:e=>yv(e),createBoundingBox2d:()=>bv(),addCurveToBBox2d:(e,t,n)=>{xv(e,t,n)},getBBox2dBounds:e=>Sv(e),mergeBBox2d:(e,t)=>{Cv(e,t)},isBBox2dOut:(e,t)=>wv(e,t),isBBox2dOutPoint:(e,t,n)=>Tv(e,t,n),getCurve2dCircleData:e=>Ev(e),getCurve2dEllipseData:e=>Dv(e),getCurve2dBezierPoles:e=>Ov(e),getCurve2dBezierDegree:e=>kv(e),getCurve2dBSplineData:e=>Av(e),serializeCurve2d:e=>jv(e),deserializeCurve2d:e=>Mv(e),splitCurve2d:(e,t)=>Nv(e,t),liftCurve2dToPlane:(t,n,r,i)=>Pv(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>Fv(e,t,n),extractSurfaceFromFace:e=>Iv(e),extractCurve2dFromEdge:(t,n)=>Rv(e,t,n),buildCurves3d:e=>{},fixWireOnFace:(e,t,n)=>zv(e,t,n),fillSurface:(t,n)=>Bv(e,t,n)}}function Hv(e,t){let n=t;if(n.type===`solid`)return e.volume(R(t),op);if(n.type===`compound`){let n=Tp(e,t,`solid`),r=0;for(let t of n)r+=e.volume(R(t),op);return r}return 0}function Uv(e,t){let n=t;if(n.type===`face`)return e.faceArea(R(t),op);if(n.type===`solid`)return e.surfaceArea(R(t),op);if(n.type===`compound`){let n=Tp(e,t,`face`),r=0;for(let t of n)r+=e.faceArea(R(t),op);return r}return 0}function Wv(e,t){let n=t;if(n.type===`edge`)return e.edgeLength(R(t));if(n.type===`face`)return e.facePerimeter(R(t));if(n.type===`wire`)return e.wireLength(n.id);throw Error(`brepkit: length() requires an edge, wire, or face`)}function Gv(e,n){let r=e.getEdgeVertices(n);return[(t(r,0)+t(r,3))/2,(t(r,1)+t(r,4))/2,(t(r,2)+t(r,5))/2]}function Kv(e,t){let r=t;if(r.type===`solid`)return n(e.centerOfMass(R(t),op));if(r.type===`face`){let n=Hp(e,t);return Gp(e,t,(n.uMin+n.uMax)/2,(n.vMin+n.vMax)/2)}if(r.type===`edge`)return Gv(e,r.id);if(r.type===`vertex`)return Bp(e,t);let i=Tp(e,t,`vertex`);if(i.length>0){let t=0,n=0,r=0;for(let a of i){let i=Bp(e,a);t+=i[0],n+=i[1],r+=i[2]}return[t/i.length,n/i.length,r/i.length]}return[0,0,0]}function qv(e,t){let n=t;return n.type===`edge`?Gv(e,n.id):Kv(e,t)}function Jv(e,t){let r=t;if(r.type===`solid`){let r=e.boundingBox(R(t));return{min:n(r,0),max:n(r,3)}}if(r.type===`vertex`){let n=Bp(e,t);return{min:[...n],max:[...n]}}let i=Tp(e,t,`vertex`);if(i.length===0)return{min:[0,0,0],max:[0,0,0]};let a=Bp(e,i[0]),o=a[0],s=a[1],c=a[2],l=a[0],u=a[1],d=a[2];for(let t=1;t<i.length;t++){let n=Bp(e,i[t]);n[0]<o&&(o=n[0]),n[0]>l&&(l=n[0]),n[1]<s&&(s=n[1]),n[1]>u&&(u=n[1]),n[2]<c&&(c=n[2]),n[2]>d&&(d=n[2])}return{min:[o,s,c],max:[l,u,d]}}function Yv(e,r,i){let a=r,o=i;if(a.type===`solid`&&o.type===`solid`){let r=e.solidToSolidDistance(a.id,o.id);return{value:t(r,0),point1:n(r,1),point2:n(r,4)}}if(a.type===`vertex`&&(o.type===`solid`||o.type===`face`||o.type===`edge`)){let r=n(e.getVertexPosition(a.id)),i=o.type===`solid`?e.pointToSolidDistance(r[0],r[1],r[2],o.id):o.type===`face`?e.pointToFaceDistance(r[0],r[1],r[2],o.id):e.pointToEdgeDistance(r[0],r[1],r[2],o.id);return{value:t(i,0),point1:r,point2:n(i,1)}}let s=r=>{if(r.type===`vertex`)return n(e.getVertexPosition(r.id));if(r.type===`solid`){let n=e.boundingBox(r.id);return[(t(n,0)+t(n,3))/2,(t(n,1)+t(n,4))/2,(t(n,2)+t(n,5))/2]}return[0,0,0]},c=s(a),l=s(o),u=l[0]-c[0],d=l[1]-c[1],f=l[2]-c[2];return{value:Math.sqrt(u*u+d*d+f*f),point1:c,point2:l}}function Xv(e,r,i,a){let o=R(r,`face`),s=e.measureCurvatureAtSurface(o,i,a);if(s.length<8)throw Error(`brepkit: measureCurvatureAtSurface returned ${s.length} values, expected 8`);let c=t(s,0),l=t(s,1);return{gaussian:c*l,mean:(c+l)/2,max:Math.max(c,l),min:Math.min(c,l),maxDirection:n(s,2),minDirection:n(s,5)}}function Zv(e,n){let r=e.tessellateFace(R(n,`face`),.1),i=r.positions,a=r.indices,o=0,s=0,c=0,l=0;for(let e=0;e<a.length;e+=3){let n=t(a,e)*3,r=t(a,e+1)*3,u=t(a,e+2)*3,d=t(i,n),f=t(i,n+1),p=t(i,n+2),m=t(i,r),h=t(i,r+1),g=t(i,r+2),_=t(i,u),v=t(i,u+1),y=t(i,u+2),b=(d+m+_)/3,x=(f+h+v)/3,S=(p+g+y)/3,C=m-d,w=h-f,ee=g-p,te=_-d,ne=v-f,re=y-p,ie=.5*Math.sqrt((w*re-ee*ne)**2+(ee*te-C*re)**2+(C*ne-w*te)**2);o+=b*ie,s+=x*ie,c+=S*ie,l+=ie}return l<1e-30?[0,0,0]:[o/l,s/l,c/l]}function Qv(e,t){let n=n=>Yv(e,t,n);return{distanceTo(e){return n(e)},dispose(){}}}function $v(e,t,n=!1){let r=t,i=r.type===`edge`||r.type===`wire`||r.type===`face`;return{volume:Hv(e,t),area:Uv(e,t),length:n&&i?Wv(e,t):0,centerOfMass:Kv(e,t),boundingBox:Jv(e,t)}}function ey(e){return{volume:t=>Hv(e,t),area:t=>Uv(e,t),length:t=>Wv(e,t),centerOfMass:t=>Kv(e,t),linearCenterOfMass:t=>qv(e,t),boundingBox:t=>Jv(e,t),distance:(t,n)=>Yv(e,t,n),surfaceCurvature:(t,n,r)=>Xv(e,t,n,r),surfaceCenterOfMass:t=>Zv(e,t),createDistanceQuery:t=>Qv(e,t),measureBulk:(t,n)=>$v(e,t,n)}}function ty(e){return e.sketchNew()}function ny(e,t,n,r,i){return e.sketchAddPoint(t,n,r,i)}function ry(e,t,n){e.sketchAddConstraint(t,n)}function iy(e,t,n,r){return e.sketchSolve(t,n,r)}function ay(e,t,n,r,i){return e.sketchAddArc(t,n,r,i)}function oy(e,t){let n=e.sketchDof(t);return typeof n==`string`?n:String(n)}function sy(e){return{sketchNew:()=>ty(e),sketchAddPoint:(t,n,r,i)=>ny(e,t,n,r,i),sketchAddArc:(t,n,r,i)=>ay(e,t,n,r,i),sketchAddConstraint:(t,n)=>{ry(e,t,n)},sketchSolve:(t,n,r)=>iy(e,t,n,r),sketchDof:t=>oy(e,t)}}function cy(e,t,n,r){return L(e.extrude(R(t,`face`),n[0],n[1],n[2],r))}function ly(e,t,n,r){if(n&&typeof n==`object`&&`origin`in n&&`direction`in n){let{origin:i,direction:a}=n,o=180/Math.PI*r;return o>360&&(o=360),L(e.revolve(R(t,`face`),i[0],i[1],i[2],a[0],a[1],a[2],o))}throw Error(`brepkit: revolve requires axis with origin and direction`)}function uy(e,t,n,r,i){let a=180/Math.PI*i;return a>360&&(a=360),L(e.revolve(R(t,`face`),n[0],n[1],n[2],r[0],r[1],r[2],a))}function dy(e,t,n,r,i){(n!==void 0||r!==void 0||i!==void 0)&&dp(`loft-options`,`Loft options (ruled, startShape, endShape) not supported; ignored.`);let a=t.map(t=>{let n=t;return n.type===`wire`?e.makeFaceFromWire(n.id):R(t,`face`)});return L(e.loft(a))}function fy(e){switch(e){case 0:return`rmf`;case 1:return`rightCorner`;case 2:return`roundCorner`;default:return}}function py(e,t,n,r){let i=r?.transitionMode===void 0?void 0:fy(r.transitionMode),a=t,o=a.type===`wire`?e.makeFaceFromWire(a.id):R(t,`face`);if(n.type===`wire`){let t=Tp(e,n,`edge`).map(e=>R(e,`edge`));if(i&&t.length===1){let n=t[0];if(n!==void 0)return L(e.sweepWithOptions(o,n,i,[],0,`transformed`))}return i&&t.length>1&&dp(`sweep-transition-multi-edge`,`Sweep transition mode not supported for multi-edge wires; ignored.`),L(e.sweepAlongEdges(o,t))}if(i){let t=R(n,`edge`);return L(e.sweepWithOptions(o,t,i,[],0,`transformed`))}let s=zm(e,n);if(!s)throw Error(`brepkit: sweep spine must be an edge or wire`);return L(e.sweep(o,s.degree,s.knots,s.controlPoints,s.weights))}function my(e,t,n){let r=t,i=r.type===`wire`?e.makeFaceFromWire(r.id):R(t,`face`);if(n.type===`wire`){let t=Tp(e,n,`edge`).map(e=>R(e,`edge`));return L(e.sweepAlongEdges(i,t))}let a=zm(e,n);if(!a)throw Error(`brepkit: pipe spine must be an edge or wire`);return L(e.pipe(i,a.degree,a.knots,a.controlPoints,a.weights))}function hy(e,t,n,r,i,a,o){let s=R(t,`face`);return L(e.helicalSweep(s,n[0],n[1],n[2],r[0],r[1],r[2],i,a,o))}function gy(e,t,n,r,i,a){let o=R(t,`face`),s=R(n,`edge`);return L(e.sweepWithOptions(o,s,r,i,a,`transformed`))}function _y(e){switch(e){case`right`:return`rightCorner`;case`round`:return`roundCorner`;case`transformed`:return`rmf`;default:return}}function vy(e,t,n){return n?{shape:e,firstShape:t,lastShape:t}:e}function yy(e,t,n,r){try{return L(e.sweepWithOptions(t,n,r,[],0,`transformed`))}catch(e){console.warn(`brepkit: sweepWithOptions failed, falling back to sweepSmooth/simplePipe:`,e);return}}function by(e,t){try{if(t.type!==`wire`)return{edgeId:R(t,`edge`)};let n=Tp(e,t,`edge`);if(n.length===1){let e=n[0];return e?{edgeId:R(e,`edge`)}:void 0}dp(`sweepPipeShell-transition-multi-edge`,`sweepPipeShell transition mode not supported for multi-edge wires; ignored.`);return}catch(e){console.warn(`brepkit: resolveContactModeEdge failed for unexpected spine type, falling through:`,e);return}}function xy(e,t,n,r){let i=by(e,n);if(i)return yy(e,t,i.edgeId,r)}function Sy(e,t,n){let r=zm(e,n);if(!(!r||r.degree<=1))try{return L(e.sweepSmooth(t,r.degree,r.knots,r.controlPoints,r.weights))}catch(e){console.warn(`brepkit: sweepSmooth failed, falling back to simplePipe:`,e);return}}function Cy(e,t,n,r){let i=t,a=i.type===`wire`?e.makeFaceFromWire(i.id):R(t,`face`),o=!!(r&&r.shellMode),s=r?.transitionMode,c=s?_y(s):void 0;if(c){let r=xy(e,a,n,c);if(r)return vy(r,t,o)}return vy(Sy(e,a,n)||my(e,t,n),t,o)}function wy(e,t,n){let r=t.map(t=>{let n=t;return n.type===`wire`?e.makeFaceFromWire(n.id):R(t,`face`)});try{let t={};if(n?.ruled!==void 0&&(t.ruled=n.ruled),n?.solid!==void 0&&(t.solid=n.solid),n?.tolerance!==void 0&&(t.tolerance=n.tolerance),n?.startVertex){let r=e.getVertexPosition(R(n.startVertex,`vertex`));t.startPoint=[r[0],r[1],r[2]]}if(n?.endVertex){let r=e.getVertexPosition(R(n.endVertex,`vertex`));t.endPoint=[r[0],r[1],r[2]]}return L(e.loftWithOptions(r,JSON.stringify(t)))}catch(e){console.warn(`brepkit: loftWithOptions failed, falling back to smooth/basic loft:`,e)}if(!n?.ruled)try{return L(e.loftSmooth(r))}catch(e){console.warn(`brepkit: loftSmooth failed, falling back to basic loft:`,e)}return dy(e,t)}function Ty(e,t,n,r){let i={type:`extrusionLaw`,profile:t,length:n,endFactor:r,Trim(e,t,n){return i},delete:Bf};return i}function Ey(e,t,n,r,i,a,o){if(i!==null){let r=cy(e,n,Wp(e,n,0,0),i);return o?th(e,t,r):r}return t}function Dy(e){return{extrude:(t,n,r)=>cy(e,t,n,r),revolve:(t,n,r)=>ly(e,t,n,r),revolveVec:(t,n,r,i)=>uy(e,t,n,r,i),loft:(t,n,r,i)=>dy(e,t,n,r,i),sweep:(t,n,r)=>py(e,t,n,r),simplePipe:(t,n)=>my(e,t,n),helicalSweep:(t,n,r,i,a,o)=>hy(e,t,n,r,i,a,o),sweepWithOptions:(t,n,r,i,a)=>gy(e,t,n,r,i,a),sweepPipeShell:(t,n,r)=>Cy(e,t,n,r),loftAdvanced:(t,n)=>wy(e,t,n),buildExtrusionLaw:(t,n,r)=>Ty(e,t,n,r),draftPrism:(t,n,r,i,a,o)=>Ey(e,t,n,r,i,a,o)}}function Oy(e){return{dispose:()=>{},executeBatch:t=>e.executeBatch(t),checkpoint:()=>e.checkpoint(),checkpointCount:()=>e.checkpointCount(),restoreCheckpoint:t=>{e.restore(t)},discardCheckpoint:t=>{e.discardCheckpoint(t)}}}var ky=class{oc;kernelId=`brepkit`;capabilities=r;bk;constructor(e){this.bk=e,this.oc=e;let t=this.bk;Object.assign(this,ph(t),rg(t),Dy(t),xg(t),Pm(t),f_(t),M_(t),ey(t),zp(t),xm(t),Zm(t),n_(t),sy(t),Vv(t),Oy(t))}};function Ay(e){throw Error(`manifold: ${e} is not implemented`)}var jy=new Set(`makeBox.makeBoxWithCorners.makeCylinder.makeSphere.makeCone.makeTorus.makeEllipsoid.makeFuse.makeCut.makeCommon.translateShape.rotateShape.scaleShape.mirrorShape.transformShape.generalTransform.generalTransformNonOrthogonal.gridPattern.extrude.revolve.revolveVec.loft.loftAdvanced.sweep.simplePipe.sweepWithOptions.sweepPipeShell.helicalSweep.draftPrism.fillet.chamfer.chamferDistAngle.shell.thicken.offset.filletVariable.draft.defeature.simplify.reverseShape.hull.hullFromPoints.sewAndSolidify.profileEdge.profileWire.profileFace`.split(`.`));function My(e){return jy.has(e)}function B(e,t,n){return{op:e,params:t,inputs:n,replayable:My(e)&&n.every(e=>e.replayable)}}function Ny(e,t){return{manifold:e,node:t}}function V(e){return e.manifold}function H(e){return e.node}function Py(e){if(e&&typeof e==`object`&&`manifold`in e&&`node`in e)return e}var Fy=[`occt`,`occt-wasm`];function Iy(){for(let e of Fy)try{return U(e)}catch{}}function Ly(e){let t=Iy();if(!t)throw Error(`manifold: ${e} requires a registered occt kernel; none is available`);return t}var Ry=new WeakMap,zy=[0,0,0],By=[0,0,1];function Vy(e){return Math.hypot(e[0],e[1],e[2])}function Hy(e){let t=Vy(e);return t===0?[...By]:[e[0]/t,e[1]/t,e[2]/t]}function Uy(e){let[t,n,r]=Hy(e);return[0,180/Math.PI*Math.atan2(Math.hypot(t,n),r),180/Math.PI*Math.atan2(n,t)]}function Wy(e){let t=e.Manifold;function n(e,t,n){let r=e;return n[0]===0&&n[1]===0&&n[2]>0||(r=r.rotate(Uy(n))),(t[0]!==0||t[1]!==0||t[2]!==0)&&(r=r.translate(t)),r}return{makeBox:(e,n,r)=>Ny(t.cube([e,n,r],!1),B(`makeBox`,{width:e,height:n,depth:r},[])),makeBoxFromCorners:(e,n)=>{let r=[Math.abs(n[0]-e[0]),Math.abs(n[1]-e[1]),Math.abs(n[2]-e[2])],i=[Math.min(e[0],n[0]),Math.min(e[1],n[1]),Math.min(e[2],n[2])];return Ny(t.cube(r,!1).translate(i),B(`makeBoxWithCorners`,{p1:e,p2:n},[]))},makeCylinder:(e,r,i=zy,a=By)=>Ny(n(t.cylinder(r,e,e,0,!1),i,a),B(`makeCylinder`,{radius:e,height:r,center:i,direction:a},[])),makeSphere:(e,n=zy)=>{let r=t.sphere(e,0);return(n[0]!==0||n[1]!==0||n[2]!==0)&&(r=r.translate(n)),Ny(r,B(`makeSphere`,{radius:e,center:n},[]))},makeCone:(e,r,i,a=zy,o=By)=>Ny(n(t.cylinder(i,e,r,0,!1),a,o),B(`makeCone`,{radius1:e,radius2:r,height:i,center:a,direction:o},[])),makeTorus:(r,i,a=zy,o=By)=>{let s=Math.max(3,e.getCircularSegments(i)),c=[];for(let e=0;e<s;e++){let t=e/s*Math.PI*2;c.push([r+i*Math.cos(t),i*Math.sin(t)])}return Ny(n(t.revolve([c],0),a,o),B(`makeTorus`,{majorRadius:r,minorRadius:i,center:a,direction:o},[]))},makeEllipsoid:(e,n,r)=>Ny(t.sphere(1,0).scale([e,n,r]),B(`makeEllipsoid`,{aLength:e,bLength:n,cLength:r},[])),makeRectangle:()=>Ay(`makeRectangle`)}}function Gy(e){return e}function Ky(e,t,n){switch(n){case`cut`:case`subtract`:case`difference`:return e.subtract(t);case`intersect`:case`common`:case`intersection`:return e.intersect(t);default:return e.add(t)}}function qy(e){let t=H(Gy(e)).params,n=t.normal,r=t.origin;if(!n||!r)throw Error(`manifold: section/split plane must carry normal+origin params`);return{normal:n,offset:n[0]*r[0]+n[1]*r[1]+n[2]*r[2]}}function Jy(e){let t=new Uint32Array(e.triVerts),n=e.vertProperties.length/3,r=new Float32Array(n*3);for(let t=0;t<n;t++)r[t*3]=e.vertProperties[t*3]??0,r[t*3+1]=e.vertProperties[t*3+1]??0,r[t*3+2]=e.vertProperties[t*3+2]??0;return{vertices:r,normals:new Float32Array,triangles:t,uvs:new Float32Array,faceGroups:[{start:0,count:t.length,faceHash:0}]}}function Yy(e){let t=e.Manifold;function n(e,t,n){let r=Gy(e),i=Gy(t);return Ny(V(r).add(V(i)),B(`makeFuse`,{},[H(r),H(i)]))}function r(e,t,n){let r=Gy(e),i=Gy(t);return Ny(V(r).subtract(V(i)),B(`makeCut`,{},[H(r),H(i)]))}function i(e,t,n){let r=Gy(e),i=Gy(t);return Ny(V(r).intersect(V(i)),B(`makeCommon`,{},[H(r),H(i)]))}function a(e,n){if(e.length===0)throw Error(`manifold: fuseAll requires at least one shape`);let r=e.map(Gy),[i]=r;if(i===void 0)throw Error(`manifold: fuseAll requires at least one shape`);return r.length===1?i:Ny(t.union(r.map(V)),B(`makeFuse`,{},r.map(H)))}function o(e,n,r){let i=Gy(e);if(n.length===0)return i;let a=n.map(Gy);return Ny(t.difference([V(i),...a.map(V)]),B(`makeCut`,{},[H(i),...a.map(H)]))}function s(e,t,n){let r=Gy(e),{normal:i,offset:a}=qy(t),[o]=V(r).splitByPlane(i,a);return Ny(o,B(`section`,{normal:i,offset:a},[H(r),H(Gy(t))]))}function c(e,n){let r=Gy(e),[i]=n;if(i===void 0)throw Error(`manifold: split requires at least one tool`);let a=Gy(i),{normal:o,offset:s}=qy(i),[c,l]=V(r).splitByPlane(o,s);return Ny(t.union([c,l]),B(`split`,{normal:o,offset:s},[H(r),H(a)]))}function l(e,t,n){let r=[],i=Gy(e),a=Gy(t);return(V(i)===void 0||V(i).isEmpty())&&r.push({operand:`base`,issue:`null-shape`,message:`Base shape is empty`}),(V(a)===void 0||V(a).isEmpty())&&r.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is empty`}),{valid:r.length===0,issues:r}}function u(n,r,i,a,o,s){let c=new e.Mesh({numProp:3,vertProperties:new Float32Array(n),triVerts:new Uint32Array(r)}),l=new e.Mesh({numProp:3,vertProperties:new Float32Array(i),triVerts:new Uint32Array(a)});return Jy(Ky(t.ofMesh(c),t.ofMesh(l),o).getMesh())}return{fuse:n,cut:r,intersect:i,section:s,fuseAll:a,cutAll:o,split:c,checkBoolean:l,meshBoolean:u}}function Xy(e){return e}function Zy(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Qy(e){let t=Math.hypot(e[0],e[1],e[2]);return t<1e-12?[0,0,1]:[e[0]/t,e[1]/t,e[2]/t]}function $y(e,t,n){let r=Zy();return r[12]=e,r[13]=t,r[14]=n,r}function eb(e,t,n){let r=e,[i,a,o]=Qy(t),s=Math.cos(r),c=Math.sin(r),l=1-s,u=l*i*i+s,d=l*i*a+c*o,f=l*i*o-c*a,p=l*i*a-c*o,m=l*a*a+s,h=l*a*o+c*i,g=l*i*o+c*a,_=l*a*o-c*i,v=l*o*o+s,y=Zy();return y[0]=u,y[1]=d,y[2]=f,y[4]=p,y[5]=m,y[6]=h,y[8]=g,y[9]=_,y[10]=v,y[12]=n[0]-(u*n[0]+p*n[1]+g*n[2]),y[13]=n[1]-(d*n[0]+m*n[1]+_*n[2]),y[14]=n[2]-(f*n[0]+h*n[1]+v*n[2]),y}function tb(e,t){let n=Zy();return n[0]=t,n[5]=t,n[10]=t,n[12]=e[0]*(1-t),n[13]=e[1]*(1-t),n[14]=e[2]*(1-t),n}function nb(e,t){let[n,r,i]=Qy(t),a=1-2*n*n,o=1-2*r*r,s=1-2*i*i,c=-2*n*r,l=-2*n*i,u=-2*r*i,d=Zy();d[0]=a,d[1]=c,d[2]=l,d[4]=c,d[5]=o,d[6]=u,d[8]=l,d[9]=u,d[10]=s;let f=e[0]*n+e[1]*r+e[2]*i;return d[12]=2*f*n,d[13]=2*f*r,d[14]=2*f*i,d}function rb(e,t){let n=Zy();return n[0]=e[0],n[1]=e[3],n[2]=e[6],n[4]=e[1],n[5]=e[4],n[6]=e[7],n[8]=e[2],n[9]=e[5],n[10]=e[8],n[12]=t[0],n[13]=t[1],n[14]=t[2],n}function ib(e,t,n,r,i){return Ny(e.transform(t),B(n,r,[i]))}function ab(e,t,n,r){let i=Xy(e);return ib(V(i),$y(t,n,r),`translateShape`,{x:t,y:n,z:r},H(i))}function ob(e,t,n=[0,0,1],r=[0,0,0]){let i=Xy(e);return ib(V(i),eb(t,n,r),`rotateShape`,{angle:t,axis:n,center:r},H(i))}function sb(e,t,n){let r=Xy(e);return ib(V(r),nb(t,n),`mirrorShape`,{origin:t,normal:n},H(r))}function cb(e,t,n){let r=Xy(e);return ib(V(r),tb(t,n),`scaleShape`,{center:t,factor:n},H(r))}function lb(e,t){if(!Array.isArray(t)||t.length!==16)throw Error(`manifold: transform expects a 16-element column-major matrix`);let n=Xy(e);return ib(V(n),t,`transformShape`,{matrix:[...t]},H(n))}function ub(e,t,n,r){let i=Xy(e);return ib(V(i),rb(t,n),`generalTransform`,{linear:t,translation:n,isOrthogonal:r},H(i))}function db(e,t,n){let r=Xy(e);return ib(V(r),rb(t,n),`generalTransformNonOrthogonal`,{linear:t,translation:n},H(r))}function fb(e){let t=Zy();for(let n of e)t=vb(n.type===`translate`?$y(n.x,n.y,n.z):eb(n.angle*Math.PI/180,n.axis??[0,0,1],n.center??[0,0,0]),t);return{handle:t,dispose:()=>{}}}function pb(e,t,n,r){let i=[e];for(let a=1;a<r;a++){let r=n*a;i.push(ab(e,t[0]*r,t[1]*r,t[2]*r))}return i}function mb(e,t,n,r,i){let a=[e];for(let o=1;o<i;o++)a.push(ob(e,r*o*Math.PI/180,n,t));return a}function hb(e,t,n,r,i,a,o,s){let c=Xy(t),l=[],u=[];for(let e=0;e<o;e++)for(let t=0;t<s;t++){let o=n[0]*i*e+r[0]*a*t,s=n[1]*i*e+r[1]*a*t,d=n[2]*i*e+r[2]*a*t;l.push(V(c).transform($y(o,s,d))),u.push(H(c))}return Ny(l.length===1?l[0]:e.Manifold.union(l),B(`gridPattern`,{directionX:n,directionY:r,spacingX:i,spacingY:a,countX:o,countY:s},u))}function gb(e){return e.map(e=>{switch(e.type){case`translate`:return ab(e.shape,e.x,e.y,e.z);case`rotate`:return ob(e.shape,e.angle*Math.PI/180,e.axis,e.center);case`scale`:return cb(e.shape,e.center,e.factor);case`mirror`:return sb(e.shape,e.origin,e.normal)}})}function _b(e){return{composeTransform:fb,transform:lb,locate:lb,translate:ab,rotate:ob,mirror:sb,scale:cb,generalTransform:ub,generalTransformNonOrthogonal:db,positionOnCurve:()=>Ay(`positionOnCurve`),linearPattern:pb,circularPattern:mb,gridPattern:(t,n,r,i,a,o,s)=>hb(e,t,n,r,i,a,o,s),transformBatch:gb}}function vb(e,t){let n=Zy();for(let r=0;r<4;r++)for(let i=0;i<4;i++){let a=0;for(let n=0;n<4;n++){let o=e[n*4+i]??0,s=t[r*4+n]??0;a+=o*s}n[r*4+i]=a}return n}var yb=2*Math.PI,bb=e=>Math.hypot(e[0],e[1],e[2]),xb=(e,t)=>[e[0]-t[0],e[1]-t[1],e[2]-t[2]];function Sb(e){return bb(xb(e.p2,e.p1))}function Cb(e,t){let n=e.map(e=>[e[0],e[1],e[2]]);for(let e=1;e<n.length;e++)for(let r=0;r<n.length-e;r++){let e=n[r]??[0,0,0],i=n[r+1]??[0,0,0];n[r]=[e[0]*(1-t)+i[0]*t,e[1]*(1-t)+i[1]*t,e[2]*(1-t)+i[2]*t]}return n[0]??[0,0,0]}function wb(e){return e.k===`line`?`LINE`:e.k===`bezier`?`BEZIER`:e.k===`helix`?`BSPLINE`:Math.abs(e.rx-e.ry)<1e-9*Math.max(1,e.rx)?`CIRCLE`:`ELLIPSE`}function Tb(e){return e.k===`line`?{first:0,last:Sb(e)}:e.k===`conic`?{first:e.a0,last:e.a1}:e.k===`helix`?{first:0,last:yb*e.turns}:{first:0,last:1}}function Eb(e,t){if(e.k===`line`){let n=t/(Sb(e)||1);return[e.p1[0]+(e.p2[0]-e.p1[0])*n,e.p1[1]+(e.p2[1]-e.p1[1])*n,e.p1[2]+(e.p2[2]-e.p1[2])*n]}if(e.k===`bezier`)return Cb(e.points,t);if(e.k===`helix`){let n=Math.cos(t),r=Math.sin(t),i=e.pitch*t/yb;return[e.center[0]+e.radius*(n*e.x[0]+r*e.y[0])+i*e.axis[0],e.center[1]+e.radius*(n*e.x[1]+r*e.y[1])+i*e.axis[1],e.center[2]+e.radius*(n*e.x[2]+r*e.y[2])+i*e.axis[2]]}let n=Math.cos(t),r=Math.sin(t);return[e.center[0]+e.rx*n*e.x[0]+e.ry*r*e.y[0],e.center[1]+e.rx*n*e.x[1]+e.ry*r*e.y[1],e.center[2]+e.rx*n*e.x[2]+e.ry*r*e.y[2]]}function Db(e,t){let n;if(e.k===`line`)n=xb(e.p2,e.p1);else if(e.k===`bezier`){let r=Cb(e.points,Math.max(0,t-1e-4));n=xb(Cb(e.points,Math.min(1,t+1e-4)),r)}else if(e.k===`helix`){let r=Math.cos(t),i=Math.sin(t),a=e.pitch/yb;n=[e.radius*(-i*e.x[0]+r*e.y[0])+a*e.axis[0],e.radius*(-i*e.x[1]+r*e.y[1])+a*e.axis[1],e.radius*(-i*e.x[2]+r*e.y[2])+a*e.axis[2]]}else{let r=Math.cos(t),i=Math.sin(t);n=[-e.rx*i*e.x[0]+e.ry*r*e.y[0],-e.rx*i*e.x[1]+e.ry*r*e.y[1],-e.rx*i*e.x[2]+e.ry*r*e.y[2]]}let r=bb(n)||1;return[n[0]/r,n[1]/r,n[2]/r]}function Ob(e){if(e.k===`line`)return Sb(e);if(e.k===`helix`){let t=yb*e.radius;return e.turns*Math.sqrt(t*t+e.pitch*e.pitch)}if(e.k===`conic`){let t=Math.abs(e.a1-e.a0);if(Math.abs(e.rx-e.ry)<1e-9*Math.max(1,e.rx))return e.rx*t;if(Math.abs(t-yb)<1e-9){let t=e.rx,n=e.ry,r=(t-n)*(t-n)/((t+n)*(t+n));return Math.PI*(t+n)*(1+3*r/(10+Math.sqrt(4-3*r)))}return Mb(t=>Eb(e,t),e.a0,e.a1,256)}return Mb(t=>Eb(e,t),0,1,128)}function kb(e){return e.k===`conic`?Math.abs(Math.abs(e.a1-e.a0)-yb)<1e-9:!1}function Ab(e){return kb(e)}function jb(e){return e.k===`conic`?yb:0}function Mb(e,t,n,r){let i=0,a=e(t);for(let o=1;o<=r;o++){let s=e(t+(n-t)*o/r);i+=bb(xb(s,a)),a=s}return i}function Nb(e){return e}function Pb(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Fb(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function Ib(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function Lb(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function Rb(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function zb(e){return Math.hypot(e[0],e[1],e[2])}function Bb(e){let t=zb(e);return t<1e-12?[0,0,1]:[e[0]/t,e[1]/t,e[2]/t]}function Vb(e){return Bb(Fb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function Hb(e){let t=Bb(e),n=Vb(t);return{xAxis:n,yAxis:Bb(Fb(t,n))}}function Ub(e){let t=0;for(let n=0;n<e.length;n++){let r=e[n]??[0,0],i=e[(n+1)%e.length]??[0,0];t+=r[0]*i[1]-i[0]*r[1]}return t/2}function Wb(e){return Ub(e)<0?[...e].reverse():e}function Gb(e){return Ub(e)>0?[...e].reverse():e}function Kb(e){return e.node?.params}function qb(e){let t=Nb(e),n=Kb(t),r=n?.outline??n?.polygon??n?.points;if(r&&r.length>=3){let e=n?.origin??[0,0,0],t=Wb(r.map(e=>[e[0],e[1]])),i=(n?.holes)?.filter(e=>e.length>=3).map(e=>Gb(e.map(e=>[e[0],e[1]])));if(n?.xAxis&&n.yAxis)return{outline:t,holes:i,origin:e,xAxis:n.xAxis,yAxis:n.yAxis};let{xAxis:a,yAxis:o}=Hb(n?.normal??[0,0,1]);return{outline:t,holes:i,origin:e,xAxis:a,yAxis:o}}return Jb(t)}function Jb(e){let t=V(e)?.getMesh?.();if(!t)throw Error(`manifold: profile carries no recorded outline and no mesh to derive one`);let n=t.numProp,r=Math.floor(t.vertProperties.length/n),i=[],a=0;for(let e=0;e<r;e++)i.push([t.vertProperties[e*n]??0,t.vertProperties[e*n+1]??0]),a+=t.vertProperties[e*n+2]??0;a/=Math.max(1,r);let o=Yb(i);return{outline:Wb(o.length>=3?o:[[-.5,-.5],[.5,-.5],[0,.5]]),origin:[0,0,a],xAxis:[1,0,0],yAxis:[0,1,0]}}function Yb(e){let t=[...e].sort((e,t)=>e[0]===t[0]?e[1]-t[1]:e[0]-t[0]);if(t.length<3)return[...t];let n=(e,t,n)=>(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0]),r=[];for(let e of t){for(;r.length>=2&&n(r[r.length-2]??e,r[r.length-1]??e,e)<=0;)r.pop();r.push(e)}let i=[];for(let e=t.length-1;e>=0;e--){let r=t[e]??[0,0];for(;i.length>=2&&n(i[i.length-2]??r,i[i.length-1]??r,r)<=0;)i.pop();i.push(r)}return r.pop(),i.pop(),[...r,...i]}function Xb(e){let t=[];for(let n=1;n+1<e;n++)t.push(0,n,n+1);return t}function Zb(e,t){let n=e.length;if(n<2||t<=n)return e.map(e=>[e[0],e[1]]);let r=[],i=0;for(let t=0;t<n;t++){let a=e[t]??[0,0],o=e[(t+1)%n]??[0,0],s=Math.hypot(o[0]-a[0],o[1]-a[1]);r.push(s),i+=s}if(i===0)return e.map(e=>[e[0],e[1]]);let a=t-n,o=r.map(e=>a*e/i),s=o.map(e=>Math.floor(e)),c=s.reduce((e,t)=>e+t,0),l=o.map((e,t)=>({i:t,f:e-Math.floor(e)})).sort((e,t)=>t.f-e.f);for(let e=0;c<a;e++,c++){let t=l[e%l.length]?.i??0;s[t]=(s[t]??0)+1}let u=[];for(let t=0;t<n;t++){let r=e[t]??[0,0],i=e[(t+1)%n]??[0,0];u.push([r[0],r[1]]);let a=s[t]??0;for(let e=1;e<=a;e++){let t=e/(a+1);u.push([r[0]+(i[0]-r[0])*t,r[1]+(i[1]-r[1])*t])}}return u}function Qb(e,t,n=1){return e.outline.map(e=>{let r=e[0]*n,i=e[1]*n;return[t.origin[0]+t.xAxis[0]*r+t.yAxis[0]*i,t.origin[1]+t.xAxis[1]*r+t.yAxis[1]*i,t.origin[2]+t.xAxis[2]*r+t.yAxis[2]*i]})}function $b(e,t){if(t.length<2)throw Error(`manifold: skinning requires at least two rings`);let n=t[0]?.length??0;if(n<3)throw Error(`manifold: skinning requires rings of at least three points`);let r=[];for(let e of t){if(e.length!==n)throw Error(`manifold: skinning requires all rings to share a vertex count`);for(let t of e)r.push(t[0],t[1],t[2])}let i=tx(t.length,n),a=new e.Mesh({numProp:3,vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)});return ex(e,new e.Manifold(a))}function ex(e,t){if(typeof t.volume!=`function`||t.volume()>=0)return t;let n=t.getMesh(),r=n.triVerts;for(let e=0;e+2<r.length;e+=3){let t=r[e+1]??0;r[e+1]=r[e+2]??0,r[e+2]=t}let i=new e.Mesh({numProp:n.numProp,vertProperties:n.vertProperties,triVerts:r}),a=new e.Manifold(i);return typeof t.delete==`function`&&t.delete(),a}function tx(e,t){let n=[];for(let r=0;r+1<e;r++){let e=r*t,i=(r+1)*t;for(let r=0;r<t;r++){let a=(r+1)%t;n.push(e+r,e+a,i+a),n.push(e+r,i+a,i+r)}}let r=Xb(t);for(let e=0;e<r.length;e+=3)n.push(r[e]??0,r[e+2]??0,r[e+1]??0);let i=(e-1)*t,a=Xb(t);for(let e=0;e<a.length;e+=3)n.push(i+(a[e]??0),i+(a[e+1]??0),i+(a[e+2]??0));return n}function nx(e,t){let n=[];if(e.length===0)return n;let r=t=>{let n=e[Math.max(0,t-1)]??e[t]??[0,0,0];return Bb(Ib(e[Math.min(e.length-1,t+1)]??e[t]??[0,0,0],n))},i=r(0),a=Bb(Ib(t,Rb(i,Pb(t,i))));zb(a)<1e-9&&(a=Vb(i)),n.push({origin:e[0]??[0,0,0],xAxis:a,yAxis:Bb(Fb(i,a)),tangent:i});for(let t=1;t<e.length;t++){let o=e[t-1]??[0,0,0],s=e[t]??[0,0,0],c=Ib(s,o),l=Pb(c,c),u=a;if(l>1e-18){let e=Ib(a,Rb(c,2/l*Pb(c,a))),n=Ib(i,Rb(c,2/l*Pb(c,i))),o=Ib(r(t),n),s=Pb(o,o);u=s>1e-18?Ib(e,Rb(o,2/s*Pb(o,e))):e}let d=r(t),f=Bb(Ib(u,Rb(d,Pb(u,d)))),p=Bb(Fb(d,f));n.push({origin:s,xAxis:f,yAxis:p,tangent:d}),i=d,a=f}return n}var rx=24,ix=24,ax=null;function ox(e){let t=ax?ax(Math.max(Math.abs(e),1e-6)):rx;return Math.max(rx,t)}var sx=[0,0,0],cx=1e-6,lx={delete:()=>{},isEmpty:()=>!1};function ux(e,t){return e[t]??sx}function dx(e,t=1){return Math.max(2,Math.ceil(Math.abs(e)/(2*Math.PI)*ox(t)))}function fx(e){return Bb(Fb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function px(e,t,n,r,i,a){let o=Bb(t),s=a?Bb(a):fx(o),c=Bb(Fb(o,s)),l=i-r,u=dx(l,n),d=[];for(let t=0;t<=u;t++){let i=r+l*t/u;d.push(Lb(e,Lb(Rb(s,n*Math.cos(i)),Rb(c,n*Math.sin(i)))))}return d}function mx(e,t,n){let r=Ib(t,e),i=Ib(n,e),a=Fb(r,i);if(zb(a)<1e-12)return[e,t,n];let o=Bb(a),s=Pb(r,r),c=Pb(i,i),l=Pb(r,i),u=2*(s*c-l*l);if(Math.abs(u)<1e-18)return[e,t,n];let d=c*(s-l)/u,f=s*(c-l)/u,p=Lb(e,Lb(Rb(r,d),Rb(i,f))),m=zb(Ib(e,p)),h=Bb(Ib(e,p)),g=Bb(Fb(o,h)),_=(e=>Math.atan2(Pb(Ib(e,p),g),Pb(Ib(e,p),h)))(n);return _<0&&(_+=2*Math.PI),px(p,o,m,0,_,h)}function hx(e){let t=[];for(let n=0;n<=ix;n++){let r=n/ix,i=e.map(e=>[...e]);for(let e=1;e<i.length;e++)for(let t=0;t<i.length-e;t++){let e=ux(i,t),n=ux(i,t+1);i[t]=[e[0]*(1-r)+n[0]*r,e[1]*(1-r)+n[1]*r,e[2]*(1-r)+n[2]*r]}t.push(ux(i,0))}return t}function gx(e){let t=0,n=0,r=0;for(let i=0;i<e.length;i++){let a=ux(e,i),o=ux(e,(i+1)%e.length);t+=(a[1]-o[1])*(a[2]+o[2]),n+=(a[2]-o[2])*(a[0]+o[0]),r+=(a[0]-o[0])*(a[1]+o[1])}let i=[t,n,r];return zb(i)<1e-12?[0,0,1]:Bb(i)}function _x(e,t){return zb(Ib(e,t))<cx}function vx(e){let t=e[0];if(!t)return[];let n=[...t];for(let t=1;t<e.length;t++){let r=e[t]??[];if(r.length===0)continue;let i=ux(n,n.length-1),a=_x(ux(r,0),i),o=_x(ux(r,r.length-1),i);!a&&o&&(r=[...r].reverse());let s=_x(ux(r,0),i);for(let e=+!!s;e<r.length;e++)n.push(ux(r,e))}return n.length>1&&_x(ux(n,0),ux(n,n.length-1))&&n.pop(),n}function yx(e){let t=gx(e),n=ux(e,0),r=e.length>1?Bb(Ib(ux(e,1),n)):fx(t);r=Bb(Ib(r,Rb(t,Pb(r,t)))),zb(r)<1e-9&&(r=fx(t));let i=Bb(Fb(t,r));return{outline:Wb(e.map(e=>{let t=Ib(e,n);return[Pb(t,r),Pb(t,i)]})),origin:n,xAxis:r,yAxis:i}}var bx=12;function xx(e,t){let[n,r]=e.curveParameters(t),i=bx;try{e.curveType(t)===`line`&&(i=1)}catch{}let a=[];for(let o=0;o<=i;o++)a.push(e.curvePointAtParam(t,n+(r-n)*o/i));return a}function Sx(e,t){return vx(e.iterShapes(t,`edge`).map(t=>xx(e,t)))}function Cx(e){let t=e.getCircularSegments;typeof t==`function`&&(ax=e=>t(e));function n(e,t){return Ny(lx,B(`profileEdge`,t?{pts:e,curve:t}:{pts:e},[]))}function r(e,t){let n=Bb(e),r=t?Bb(t):fx(n);return{x:r,y:Bb(Fb(n,r))}}function i(e,t,n){let r=Ib(t,e),i=Ib(n,e),a=Fb(r,i);if(zb(a)<1e-12)return;let o=Bb(a),s=Pb(r,r),c=Pb(i,i),l=Pb(r,i),u=2*(s*c-l*l);if(Math.abs(u)<1e-18)return;let d=c*(s-l)/u,f=s*(c-l)/u,p=Lb(e,Lb(Rb(r,d),Rb(i,f))),m=zb(Ib(e,p)),h=Bb(Ib(e,p)),g=Bb(Fb(o,h)),_=Math.atan2(Pb(Ib(n,p),g),Pb(Ib(n,p),h));return _<0&&(_+=2*Math.PI),{k:`conic`,center:p,x:h,y:g,rx:m,ry:m,a0:0,a1:_}}function a(e){let t=Py(e);if(t){let e=t.node.params;return e?.ring??e?.pts??[]}let n=Iy();return n?xx(n,e):[]}function o(e){let t=[];for(let n of e){let e=Py(n);e&&t.push(H(e))}return t}function s(e){let t=vx(e.map(e=>a(e)));return Ny(lx,B(`profileWire`,{ring:t,...t.length>=3?yx(t):void 0},o(e)))}function c(e,t){let{outline:n,origin:r,xAxis:i,yAxis:a}=yx(e);return Ny(lx,B(`profileFace`,{outline:n,origin:r,xAxis:i,yAxis:a},t?[t]:[]))}function l(e){let t=Py(e);if(t){let e=t.node.params?.ring??[];if(e.length>=3)return c(e,H(t))}let n=Iy();return c(n?Sx(n,e):[],t?H(t):void 0)}function u(e,t){let n=Py(e),r=n?.node?.params??{},i=r.origin??sx,a=r.xAxis??[1,0,0],s=r.yAxis??[0,1,0],c=e=>{let t=Ib(e,i);return[Pb(t,a),Pb(t,s)]},l=[];for(let e of t){let t=Py(e),n;if(t)n=t.node.params?.ring??[];else{let t=Iy();n=t?Sx(t,e):[]}n.length>=3&&l.push(n.map(c))}let u=[...r.holes??[],...l],d=n?[H(n),...o(t)]:o(t);return Ny(lx,B(`profileFace`,{outline:r.outline??[],holes:u,origin:i,xAxis:a,yAxis:s},d))}function d(e,t,n,r,i){let a=Bb(t),o=i?Bb(i):fx(a),s=Bb(Fb(a,o)),c=[],l=ox(Math.max(n,r));for(let t=0;t<=l;t++){let i=2*Math.PI*t/l;c.push(Lb(e,Lb(Rb(o,n*Math.cos(i)),Rb(s,r*Math.sin(i)))))}return c}return{makeVertex:(e,t,r)=>n([[e,t,r]]),makeLineEdge:(e,t)=>n([e,t],{k:`line`,p1:e,p2:t}),makeCircleEdge:(e,t,i)=>{let{x:a,y:o}=r(t);return n(px(e,t,i,0,2*Math.PI),{k:`conic`,center:e,x:a,y:o,rx:i,ry:i,a0:0,a1:2*Math.PI})},makeCircleArc:(e,t,i,a,o)=>{let{x:s,y:c}=r(t);return n(px(e,t,i,a,o),{k:`conic`,center:e,x:s,y:c,rx:i,ry:i,a0:a,a1:o})},makeArcEdge:(e,t,r)=>n(mx(e,t,r),i(e,t,r)),makeEllipseEdge:(e,t,i,a,o)=>{let{x:s,y:c}=r(t,o);return n(d(e,t,i,a,o),{k:`conic`,center:e,x:s,y:c,rx:i,ry:a,a0:0,a1:2*Math.PI})},makeBezierEdge:e=>n(hx(e),{k:`bezier`,points:e.map(e=>[...e])}),makeTangentArc:(e,t,r)=>n([e,r],{k:`line`,p1:e,p2:r}),makeHelixWire:(e,t,r,i=[0,0,0],a=[0,0,1],o=!1)=>{let s=Bb(a),c=fx(s),l=Bb(Fb(s,c)),u=o?Rb(l,-1):l,d=e===0?0:t/e,f={k:`helix`,center:i,axis:s,x:c,y:u,radius:r,pitch:e,turns:d},p=Math.max(8,Math.ceil(d*rx)),m=[];for(let e=0;e<=p;e++)m.push(Eb(f,2*Math.PI*d*e/p));return n(m,f)},makeWire:e=>s(e),makeWireFromMixed:e=>s(e),makeFace:l,addHolesInFace:u,makePolygonFace:e=>c(e)}}function wx(e){let t=e.Manifold,n=Cx(e);function r(e,n){let r=e.map(e=>[e.x,e.y,e.z]);return Ny(t.hull(r),B(`hullFromPoints`,{points:r,tolerance:n},[]))}function i(e,n){let r=e.map(e=>V(e));return Ny(t.hull(r),B(`hull`,{tolerance:n},e.map(e=>H(e))))}function a(e){let n=e.map(e=>V(e)),r=n[0];if(!r)throw Error(`manifold: makeCompound requires at least one input shape`);return Ny(n.length===1?r:t.union(n),B(`makeCompound`,{},e.map(e=>H(e))))}function o(e,t){let n=e[0];return n||Ay(`sewAndSolidify (no input faces on manifold kernel)`),Ny(V(n),B(`sewAndSolidify`,{tolerance:t},e.map(e=>H(e))))}return{makeVertex:(e,t,r)=>n.makeVertex(e,t,r),makeEdge:()=>Ay(`makeEdge`),makeWire:e=>n.makeWire(e),makeFace:(e,t)=>n.makeFace(e,t),makeLineEdge:(e,t)=>n.makeLineEdge(e,t),makeCircleEdge:(e,t,r)=>n.makeCircleEdge(e,t,r),makeCircleArc:(e,t,r,i,a)=>n.makeCircleArc(e,t,r,i,a),makeArcEdge:(e,t,r)=>n.makeArcEdge(e,t,r),makeEllipseEdge:(e,t,r,i,a)=>n.makeEllipseEdge(e,t,r,i,a),makeEllipseArc:()=>Ay(`makeEllipseArc`),makeBezierEdge:e=>n.makeBezierEdge(e),makeTangentArc:(e,t,r)=>n.makeTangentArc(e,t,r),makeHelixWire:(e,t,r,i,a,o)=>n.makeHelixWire(e,t,r,i,a,o),makeWireFromMixed:e=>n.makeWireFromMixed(e),makeCompound:a,solidFromShell:()=>Ay(`solidFromShell`),hull:i,hullFromPoints:r,buildSolidFromFaces:()=>Ay(`buildSolidFromFaces`),makeNonPlanarFace:()=>Ay(`makeNonPlanarFace`),addHolesInFace:(e,t)=>n.addHolesInFace(e,t),removeHolesFromFace:()=>Ay(`removeHolesFromFace`),makeFaceOnSurface:()=>Ay(`makeFaceOnSurface`),bsplineSurface:(e,t,n)=>Ly(`bsplineSurface`).bsplineSurface(e,t,n),triangulatedSurface:(e,t,n)=>Ly(`triangulatedSurface`).triangulatedSurface(e,t,n),buildTriFace:()=>Ay(`buildTriFace`),sewAndSolidify:o,createPoint3d:()=>Ay(`createPoint3d`),createDirection3d:()=>Ay(`createDirection3d`),createVector3d:()=>Ay(`createVector3d`),createAxis1:()=>Ay(`createAxis1`),createAxis2:()=>Ay(`createAxis2`),createAxis3:()=>Ay(`createAxis3`)}}var Tx=Math.PI/180;function Ex(e){return e}function Dx(e){let t=180/Math.PI*e;return t>360?360:t}function Ox(e){let t=e;if(t&&typeof t.X==`function`&&typeof t.Y==`function`&&typeof t.Z==`function`)return[t.X(),t.Y(),t.Z()]}function kx(e){if(e&&typeof e==`object`){let t=e;if(`origin`in t&&`direction`in t)return{origin:t.origin,direction:t.direction};let n=e;if(typeof n.Location==`function`&&typeof n.Direction==`function`){let e=Ox(n.Location()),t=Ox(n.Direction());if(e&&t)return{origin:e,direction:t}}}}function Ax(e){return e.outline.map(e=>[e[0],e[1]])}function jx(e){return{outline:e.outline,origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis}}function Mx(e){return{origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis,tangent:Bb(Fb(e.xAxis,e.yAxis))}}function Nx(e){let t=0;for(let n of e.outline)t=Math.max(t,Math.hypot(n[0],n[1]));return t||1}function Px(e){let t=V(e)?.getMesh?.();if(!t)return[];let n=t.numProp,r=Math.floor(t.vertProperties.length/n),i=[];for(let e=0;e<r;e++)i.push([t.vertProperties[e*n]??0,t.vertProperties[e*n+1]??0,t.vertProperties[e*n+2]??0]);return i}function Fx(e,t){let n=Ex(e),r=n.node?.params,i=r?.path??r?.points;if(i&&i.length>=2)return i.map(e=>[e[0],e[1],e[2]]);let a=Px(n);if(a.length>=2)return a;let o=[],s=Math.max(2,t);for(let e=0;e<s;e++)o.push([0,0,e/(s-1)]);return o}function Ix(e){return e?.node??B(`spine`,{},[])}function Lx(e,t,n){let r=t.xAxis,i=t.yAxis,a=t.origin,o=[r[0],r[1],r[2],0,i[0],i[1],i[2],0,n[0],n[1],n[2],0,a[0],a[1],a[2],1];return e.transform(o)}function Rx(e,t,n){let r=Bb(n);return e.outline.map(n=>{let i=Ib(Lb(e.origin,Lb(Rb(e.xAxis,n[0]),Rb(e.yAxis,n[1]))),t),a=i[0]*r[0]+i[1]*r[1]+i[2]*r[2];return[zb(Ib(i,Rb(r,a))),a]})}function zx(e,t,n){let r=e,i=Bb(n);if(!(Math.abs(i[0])<1e-9&&Math.abs(i[2])<1e-9&&i[1]>0)){let e=Math.acos(Math.max(-1,Math.min(1,i[1])))*(180/Math.PI),t=Fb([0,1,0],i);zb(t)<1e-9&&(t=[1,0,0]),t=Bb(t),r=r.rotate([t[0]*e,t[1]*e,t[2]*e])}return(t[0]!==0||t[1]!==0||t[2]!==0)&&(r=r.translate([t[0],t[1],t[2]])),r}function Bx(e,t,n,r,i){let a=Bb(t),{xAxis:o,yAxis:s}=Hb(a),c=i*2*Math.PI,l=Math.max(8,Math.ceil(Math.abs(i)*24)),u=r*i,d=[];for(let t=0;t<=l;t++){let r=t/l,i=c*r,f=Lb(Rb(o,n*Math.cos(i)),Rb(s,n*Math.sin(i)));d.push(Lb(e,Lb(f,Rb(a,u*r))))}return d}function Vx(e){if(e.length!==0)return t=>{let n=t*(e.length-1),r=Math.floor(n),i=Math.min(e.length-1,r+1),a=n-r;return(e[r]??1)*(1-a)+(e[i]??1)*a}}function Hx(e,t,n,r){let i=qb(t),a=Bb([n[0],n[1],n[2]]),o=zb([n[0]*r,n[1]*r,n[2]*r]),s=[Ax(i),...(i.holes??[]).map(e=>e.map(e=>[e[0],e[1]]))];return Ny(Lx(ex(e,e.Manifold.extrude(s,o)),i,a),B(`extrude`,{outline:i.outline,holes:i.holes,origin:i.origin,xAxis:i.xAxis,yAxis:i.yAxis,direction:[n[0],n[1],n[2]],length:r},[H(Ex(t))]))}function Ux(e,t,n,r,i,a,o){let s=qb(t),c=Dx(i),l=Rx(s,n,r);return Ny(zx(e.Manifold.revolve([l],0,c),n,r),B(a,o,[H(Ex(t))]))}function Wx(e,t){let n=e.length;if(n===0||t.length!==n)return e;let r=0,i=1/0;for(let a=0;a<n;a++){let o=0;for(let r=0;r<n&&o<i;r++){let i=e[(r+a)%n]??[0,0,0],s=t[r]??[0,0,0],c=i[0]-s[0],l=i[1]-s[1],u=i[2]-s[2];o+=c*c+l*l+u*u}o<i&&(i=o,r=a)}if(r===0)return e;let a=[];for(let t=0;t<n;t++)a.push(e[(t+r)%n]??[0,0,0]);return a}function Gx(e,t,n,r){if(t.length<2)throw Error(`manifold: loft requires at least two profiles`);let i=t.map(qb),a=i.reduce((e,t)=>Math.max(e,t.outline.length),0),o=i.map(e=>Qb({...e,outline:Zb(e.outline,a)},Mx(e)));for(let e=1;e<o.length;e++)o[e]=Wx(o[e]??[],o[e-1]??[]);return Ny($b(e,o),B(n,{sections:i.map(jx),...r},t.map(e=>H(Ex(e)))))}function Kx(e,t,n,r,i,a,o){let s=qb(t),c=nx(n,s.xAxis),l=c.length;return Ny($b(e,c.map((e,t)=>{let n=o?o(l>1?t/(l-1):0):1;return Qb(s,e,n)})),B(i,{section:jx(s),path:n.map(e=>[e[0],e[1],e[2]]),...a},[H(Ex(t)),r]))}function qx(e,t,n,r,i,a){if(r===null)return t;let o=qb(n),s=Bb(Fb(o.xAxis,o.yAxis)),c=Math.tan(i*Tx),l={origin:Lb(o.origin,Rb(s,r)),xAxis:o.xAxis,yAxis:o.yAxis,tangent:s},u=1+c*r/Nx(o),d=$b(e,[Qb(o,Mx(o),1),Qb(o,l,u)]),f=B(`draftPrism`,{outline:o.outline,origin:o.origin,xAxis:o.xAxis,yAxis:o.yAxis,height:r,angleDeg:i,fuse:a},[H(Ex(n))]);if(a){let e=Ex(t);return Ny(V(e).add(d),B(`makeFuse`,{},[H(e),f]))}return Ny(d,f)}function Jx(e){return{revolve:(t,n,r)=>{let i=kx(n);if(!i)throw Error(`manifold: revolve could not read the axis; pass {origin,direction}, a gp_Ax1, or use revolveVec`);let{origin:a,direction:o}=i;return Ux(e,t,a,o,r,`revolve`,{...jx(qb(t)),axisOrigin:[a[0],a[1],a[2]],axisDirection:[o[0],o[1],o[2]],angleDeg:Dx(r)})},revolveVec:(t,n,r,i)=>Ux(e,t,n,r,i,`revolveVec`,{...jx(qb(t)),center:[n[0],n[1],n[2]],direction:[r[0],r[1],r[2]],angleDeg:Dx(i)})}}function Yx(e){return{sweep:(t,n,r)=>{let i={};return r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode),Kx(e,t,Fx(n,16),Ix(n),`sweep`,i)},simplePipe:(t,n)=>Kx(e,t,Fx(n,16),Ix(n),`simplePipe`,{}),sweepWithOptions:(t,n,r,i,a)=>Kx(e,t,Fx(n,Math.max(2,a||16)),Ix(n),`sweepWithOptions`,{contactMode:r,scaleValues:[...i],segments:a},Vx(i)),sweepPipeShell:(t,n,r)=>{let i={};r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode);let a=Kx(e,t,Fx(n,16),Ix(n),`sweepPipeShell`,i);return r?.shellMode?{shape:a,firstShape:t,lastShape:t}:a},helicalSweep:(t,n,r,i,a,o)=>Kx(e,t,Bx(n,r,i,a,o),Ix(t),`helicalSweep`,{axisOrigin:[n[0],n[1],n[2]],axisDirection:[r[0],r[1],r[2]],radius:i,pitch:a,turns:o})}}function Xx(e){return{extrude:(t,n,r)=>Hx(e,t,n,r),...Jx(e),loft:(t,n)=>Gx(e,t,`loft`,{ruled:n??!1}),loftAdvanced:(t,n)=>Gx(e,t,`loftAdvanced`,{solid:n?.solid??!0,ruled:n?.ruled??!1,tolerance:n?.tolerance}),...Yx(e),draftPrism:(t,n,r,i,a,o)=>qx(e,t,n,i,a,o),buildExtrusionLaw:(e,t,n)=>({type:`extrusionLaw`,profile:e,length:t,endFactor:n}),loftBatch:()=>Ay(`loftBatch`),extrudeBatch:t=>t.map(t=>Hx(e,t.face,t.direction,t.length))}}var Zx=16;function Qx(e){return typeof e?.translate==`function`?e.translate([0,0,0]):e}function $x(e,t,n){if(!(n>0))return Qx(t);let r=nS(e,n);return r===void 0||typeof t?.minkowskiDifference!=`function`||typeof t?.minkowskiSum!=`function`?Qx(t):t.minkowskiDifference(r).minkowskiSum(r)}function eS(e,t,n){if(n===0)return Qx(t);let r=nS(e,Math.abs(n));return r===void 0?Qx(t):n>0?typeof t?.minkowskiSum==`function`?t.minkowskiSum(r):Qx(t):typeof t?.minkowskiDifference==`function`?t.minkowskiDifference(r):Qx(t)}function tS(e,t,n,r){if(n===0)return Qx(t);if(r)return eS(e,t,Math.abs(n));let i=eS(e,t,-Math.abs(n));return typeof t?.subtract==`function`?t.subtract(i):Qx(t)}function nS(e,t){let n=e?.Manifold;if(typeof n?.sphere==`function`)return n.sphere(t,Zx)}function rS(e){return e}function iS(e){let t=e;if(t!=null){if(typeof t.index==`number`)return t.index;if(typeof t.id==`number`)return t.id}}function aS(e){let{min:t,max:n}=e;if(!(t===void 0||n===void 0||t.length<3||n.length<3))return[((t[0]??0)+(n[0]??0))/2,((t[1]??0)+(n[1]??0))/2,((t[2]??0)+(n[2]??0))/2]}function oS(e){let t=e;if(t?.box!==void 0)return aS(t.box);let n=(e?.manifold)?.boundingBox?.();return n===void 0?void 0:aS(n)}function sS(e){let t=e.length;if(t===0)return{kind:`all`,count:t};let n=[];for(let t of e){let e=oS(t);if(e===void 0){n.length=0;break}n.push(e)}if(n.length===t)return{kind:`witness`,count:t,points:n};let r=[];for(let t of e){let e=iS(t);if(e===void 0){r.length=0;break}r.push(e)}return r.length===t?{kind:`index`,count:t,indices:r}:{kind:`all`,count:t}}function cS(e){return typeof e==`function`&&Ay(`fillet (per-edge radius callback)`),e}function lS(e){return typeof e==`number`?e:e[0]}function uS(e){let t=e.match(/[-+]?\d*\.?\d+/);return t?Number(t[0]):0}function dS(e,t,n,r,i){let a=rS(n),o=cS(i),s=sS(r);return Ny($x(e,V(a),lS(o)),B(t,{radius:o,selection:s},[H(a)]))}function fS(e,t,n,r,i){let a=rS(t),o=sS(n);return Ny($x(e,V(a),r),B(`chamferDistAngle`,{distance:r,angleDeg:i,selection:o},[H(a)]))}function pS(e,t,n){let r=t.node;if(r?.op!==`extrude`)return;let i=r.params??{},a=i.outline,o=i.origin,s=i.direction,c=i.length;if(!a||a.length<3||!o||!s||typeof c!=`number`)return;let l=Math.abs(n);try{let n=new e.CrossSection([a.map(e=>[e[0],e[1]])]).offset(-l);if(typeof n.isEmpty==`function`&&n.isEmpty())return;let r=e.Manifold.extrude(n,c),i=Math.hypot(s[0],s[1],s[2])||1,u=Math.abs(s[0])<1e-9&&Math.abs(s[1])<1e-9&&s[2]>0,d=r;if(!u){let e=Math.atan2(Math.hypot(s[0],s[1]),s[2])*(180/Math.PI),t=Math.atan2(s[1],s[0])*(180/Math.PI);d=d.rotate([0,e,t])}return d=d.translate([o[0]+s[0]/i*l,o[1]+s[1]/i*l,o[2]+s[2]/i*l]),ex(e,V(t).subtract(d))}catch{return}}function mS(e,t,n,r,i){let a=rS(t),o=sS(n);return Ny(pS(e,a,r)??tS(e,V(a),r,!1),B(`shell`,i===void 0?{thickness:r,selection:o}:{thickness:r,selection:o,tolerance:i},[H(a)]))}function hS(e,t,n){let r=rS(t);return Ny(tS(e,V(r),n,!0),B(`thicken`,{thickness:n},[H(r)]))}function gS(e,t,n,r){let i=rS(t);return Ny(eS(e,V(i),n),B(`offset`,r===void 0?{distance:n}:{distance:n,tolerance:r},[H(i)]))}function _S(e,t,n){let r=rS(t);return Ny($x(e,V(r),uS(n)),B(`filletVariable`,{spec:n},[H(r)]))}function vS(e,t,n,r,i){typeof i==`function`&&Ay(`draft (per-face angle callback)`);let a=rS(e),o=sS(t);return Ny(Qx(V(a)),B(`draft`,{pullDirection:n,neutralPlane:r,angleDeg:i,selection:o},[H(a)]))}function yS(e,t){let n=rS(e),r=sS(t);return Ny(Qx(V(n)),B(`defeature`,{selection:r},[H(n)]))}function bS(e){let t=rS(e),n=V(t);return Ny(typeof n?.simplify==`function`?n.simplify():Qx(n),B(`simplify`,{},[H(t)]))}function xS(e){let t=rS(e),n=V(t);return Ny(typeof n?.mirror==`function`?n.mirror([1,0,0]):Qx(n),B(`reverseShape`,{},[H(t)]))}function SS(e,t){let n=rS(t.shape),r=sS(t.edges.map(e=>e.edge)),i=t.edges.map(e=>e.r2===void 0?e.radius:[e.radius,e.r2]),a=t.edges[0]?.radius??0;return Ny($x(e,V(n),a),B(`fillet`,{radii:i,selection:r},[H(n)]))}function CS(e){return{fillet:(t,n,r)=>dS(e,`fillet`,t,n,r),chamfer:(t,n,r)=>dS(e,`chamfer`,t,n,r),chamferDistAngle:(t,n,r,i)=>fS(e,t,n,r,i),shell:(t,n,r,i)=>mS(e,t,n,r,i),thicken:(t,n)=>hS(e,t,n),offset:(t,n,r)=>gS(e,t,n,r),filletVariable:(t,n)=>_S(e,t,n),draft:(e,t,n,r,i)=>vS(e,t,n,r,i),defeature:(e,t)=>yS(e,t),offsetWire2D:()=>Ay(`offsetWire2D`),simplify:e=>bS(e),reverseShape:e=>xS(e),shellBatch:t=>t.map(t=>mS(e,t.shape,t.faces,t.thickness,t.tolerance)),filletBatch:t=>t.map(t=>SS(e,t))}}function wS(e){return V(e).getMesh()}function TS(e){let t=e.numProp,n=e.vertProperties.length/t;if(t===3)return new Float32Array(e.vertProperties);let r=new Float32Array(n*3);for(let i=0;i<n;i++)r[i*3]=e.vertProperties[i*t]??0,r[i*3+1]=e.vertProperties[i*t+1]??0,r[i*3+2]=e.vertProperties[i*t+2]??0;return r}function ES(e,t){let n=new Float32Array(e.length);for(let r=0;r<t.length;r+=3){let i=(t[r]??0)*3,a=(t[r+1]??0)*3,o=(t[r+2]??0)*3,s=e[i]??0,c=e[i+1]??0,l=e[i+2]??0,u=(e[a]??0)-s,d=(e[a+1]??0)-c,f=(e[a+2]??0)-l,p=(e[o]??0)-s,m=(e[o+1]??0)-c,h=(e[o+2]??0)-l,g=d*h-f*m,_=f*p-u*h,v=u*m-d*p;for(let e of[i,a,o])n[e]=(n[e]??0)+g,n[e+1]=(n[e+1]??0)+_,n[e+2]=(n[e+2]??0)+v}for(let e=0;e<n.length;e+=3){let t=n[e]??0,r=n[e+1]??0,i=n[e+2]??0,a=Math.sqrt(t*t+r*r+i*i);a>1e-12&&(n[e]=t/a,n[e+1]=r/a,n[e+2]=i/a)}return n}function DS(e){let t=e.triVerts.length/3,{runIndex:n,runOriginalID:r}=e;if(!n||!r||n.length<2)return[{start:0,count:e.triVerts.length,faceHash:0}];let i=[];for(let e=0;e+1<n.length;e++){let a=n[e]??0,o=(n[e+1]??t*3)-a;o!==0&&i.push({start:a,count:o,faceHash:r[e]??0})}return i}function OS(e,t){let n=wS(e),r=TS(n),i=new Uint32Array(n.triVerts);return{vertices:r,normals:t.skipNormals?new Float32Array:ES(r,i),triangles:i,uvs:t.includeUVs?new Float32Array(r.length/3*2):new Float32Array,faceGroups:DS(n)}}function kS(e,t,n){let r=wS(e),i=TS(r),a=r.triVerts,o=[],s=[],c=new Set,l=i.length/3,u=e=>{o.push(i[e*3]??0,i[e*3+1]??0,i[e*3+2]??0)};for(let e=0;e<a.length;e+=3){let t=a[e]??0,n=a[e+1]??0,r=a[e+2]??0;for(let[e,i]of[[t,n],[n,r],[r,t]]){let t=Math.min(e,i),n=Math.max(e,i),r=t*l+n;if(c.has(r))continue;c.add(r);let a=o.length/3;u(t),u(n),s.push({start:a,count:2,edgeHash:r})}}return{lines:new Float32Array(o),edgeGroups:s}}function AS(e){return!0}function jS(e){return{mesh:(e,t)=>OS(e,t),meshEdges:(e,t,n)=>kS(e,t,n),hasTriangulation:e=>AS(e),meshShape:(e,t,n)=>{}}}function MS(e,t=[0,0,0]){return Array.isArray(e)&&e.length>=3?[Number(e[0]),Number(e[1]),Number(e[2])]:[...t]}function NS(e,t=0){return typeof e==`number`?e:t}function PS(e,t=``){return typeof e==`string`?e:t}function FS(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function IS(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function LS(e,t,n,r){return FS(t,FS(IS(n,e[0]),IS(r,e[1])))}function RS(e,t){let n=t.outline??[];if(n.length<3)throw Error(`manifold replay: profile outline needs at least three points`);let r=MS(t.origin),i=MS(t.xAxis,[1,0,0]),a=MS(t.yAxis,[0,1,0]),o=n.map(e=>LS(e,r,i,a)),s=[];for(let t=0;t<o.length;t++){let n=o[t]??r,i=o[(t+1)%o.length]??r;s.push(e.makeLineEdge([n[0],n[1],n[2]],[i[0],i[1],i[2]]))}let c=e.makeWire(s),l=e.makeFace(c,!0);for(let t of s)e.dispose(t);return l}function zS(e,t){return RS(e,t)}function BS(e,t){let n=e.boundingBox(t);return[(n.min[0]+n.max[0])/2,(n.min[1]+n.max[1])/2,(n.min[2]+n.max[2])/2]}function VS(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i}function HS(e,t,n,r){let i=e.iterShapes(t,r);if(!n||n.kind===`all`)return i;if(n.kind===`witness`){let t=n.points??[],r=i.map(t=>BS(e,t)),a=[],o=new Set;for(let e of t){let t=-1,n=1/0;for(let a=0;a<i.length;a++){if(o.has(a))continue;let i=VS(e,r[a]??[0,0,0]);i<n&&(n=i,t=a)}let s=i[t];t>=0&&s!==void 0&&(o.add(t),a.push(s))}return a}if(n.kind===`index`){let e=n.indices??[],t=[];for(let n of e){let e=i[n];e!==void 0&&t.push(e)}return t}let a=n.regions??[],o=e=>a.some(t=>e[0]>=t.min[0]&&e[0]<=t.max[0]&&e[1]>=t.min[1]&&e[1]<=t.max[1]&&e[2]>=t.min[2]&&e[2]<=t.max[2]);return i.filter(t=>o(BS(e,t)))}function US(e){let t=e.selection;return t===void 0?void 0:t}function WS(e){let t=e[0];if(t===void 0)throw Error(`manifold replay: op requires an input shape`);return t}function GS(e,t,n){return e.createAxis1(t[0],t[1],t[2],n[0],n[1],n[2])}function KS(e,t){return(n,r)=>{let i=RS(n,r),a=MS(r[e]),o=MS(r[t],[0,0,1]),s=NS(r.angleDeg,360);return n.revolve(i,GS(n,a,o),Math.PI/180*s)}}var qS={makeBox:(e,t)=>e.makeBox(NS(t.width),NS(t.height),NS(t.depth)),makeBoxWithCorners:(e,t)=>e.makeBoxFromCorners(MS(t.p1),MS(t.p2)),makeCylinder:(e,t)=>e.makeCylinder(NS(t.radius),NS(t.height),MS(t.center),MS(t.direction,[0,0,1])),makeSphere:(e,t)=>e.makeSphere(NS(t.radius),MS(t.center)),makeCone:(e,t)=>e.makeCone(NS(t.radius1),NS(t.radius2),NS(t.height),MS(t.center),MS(t.direction,[0,0,1])),makeTorus:(e,t)=>e.makeTorus(NS(t.majorRadius),NS(t.minorRadius),MS(t.center),MS(t.direction,[0,0,1])),makeEllipsoid:(e,t)=>e.makeEllipsoid(NS(t.aLength),NS(t.bLength),NS(t.cLength)),makeFuse:(e,t,n)=>{if(n.length<2)return WS(n);let r=WS(n);for(let t of n.slice(1))r=e.fuse(r,t);return r},makeCut:(e,t,n)=>{let r=WS(n);return e.cutAll(r,n.slice(1))},makeCommon:(e,t,n)=>{let r=WS(n);for(let t of n.slice(1))r=e.intersect(r,t);return r},translateShape:(e,t,n)=>e.translate(WS(n),NS(t.x),NS(t.y),NS(t.z)),rotateShape:(e,t,n)=>e.rotate(WS(n),NS(t.angle),MS(t.axis,[0,0,1]),MS(t.center)),scaleShape:(e,t,n)=>e.scale(WS(n),MS(t.center),NS(t.factor,1)),mirrorShape:(e,t,n)=>e.mirror(WS(n),MS(t.origin),MS(t.normal,[1,0,0])),transformShape:(e,t,n)=>e.transform(WS(n),t.matrix),generalTransform:(e,t,n)=>e.generalTransform(WS(n),t.linear,MS(t.translation),!!t.isOrthogonal),generalTransformNonOrthogonal:(e,t,n)=>e.generalTransformNonOrthogonal(WS(n),t.linear,MS(t.translation)),gridPattern:(e,t,n)=>{if(typeof e.gridPattern!=`function`)throw Error(`manifold replay: target kernel lacks gridPattern`);return e.gridPattern(WS(n),MS(t.directionX),MS(t.directionY),NS(t.spacingX),NS(t.spacingY),NS(t.countX,1),NS(t.countY,1))},profileEdge:(e,t)=>{let n=t.pts??[],r=n[0]??[0,0,0],i=n.length>1?n[n.length-1]??r:[r[0]+.001,r[1],r[2]];return e.makeLineEdge([r[0],r[1],r[2]],[i[0],i[1],i[2]])},profileWire:(e,t)=>{let n=t.ring??[],r=[];for(let t=0;t<n.length;t++){let i=n[t]??[0,0,0],a=n[(t+1)%n.length]??i;r.push(e.makeLineEdge([i[0],i[1],i[2]],[a[0],a[1],a[2]]))}let i=e.makeWire(r);for(let t of r)e.dispose(t);return i},profileFace:(e,t)=>RS(e,t),extrude:(e,t)=>{let n=RS(e,t);return e.extrude(n,MS(t.direction,[0,0,1]),NS(t.length,1))},revolve:KS(`axisOrigin`,`axisDirection`),revolveVec:KS(`center`,`direction`),loft:(e,t)=>{let n=(t.sections??[]).map(t=>JS(e,t));return e.loft(n,!!t.ruled)},loftAdvanced:(e,t)=>{let n=(t.sections??[]).map(t=>JS(e,t)),r={solid:t.solid!==!1,ruled:!!t.ruled};return typeof t.tolerance==`number`&&(r.tolerance=t.tolerance),e.loftAdvanced(n,r)},sweep:(e,t)=>e.sweep(YS(e,t),XS(e,t)),simplePipe:(e,t)=>e.simplePipe(YS(e,t),XS(e,t)),sweepWithOptions:(e,t)=>e.sweepWithOptions(YS(e,t),XS(e,t),PS(t.contactMode),t.scaleValues??[],NS(t.segments,0)),sweepPipeShell:(e,t)=>{let n=e.sweepPipeShell(YS(e,t),XS(e,t));return ZS(n)?n.shape:n},helicalSweep:(e,t)=>e.helicalSweep(YS(e,t),MS(t.axisOrigin),MS(t.axisDirection,[0,0,1]),NS(t.radius),NS(t.pitch),NS(t.turns,1)),draftPrism:(e,t)=>{let n=RS(e,t);return e.draftPrism(n,n,n,NS(t.height),NS(t.angleDeg),!!t.fuse)},fillet:(e,t,n)=>{let r=WS(n),i=HS(e,r,US(t),`edge`),a=t.radii,o=t.radius;if(a&&a.length>1){let t=new Map;for(let e=0;e<i.length;e++){let n=i[e],r=a[e]??a[a.length-1];n!==void 0&&r!==void 0&&t.set(n,r)}return e.fillet(r,i,e=>t.get(e)??0)}let s=a?.[0]??o;return e.fillet(r,i,s??0)},chamfer:(e,t,n)=>{let r=WS(n),i=HS(e,r,US(t),`edge`);return e.chamfer(r,i,t.radius)},chamferDistAngle:(e,t,n)=>{let r=WS(n),i=HS(e,r,US(t),`edge`);return e.chamferDistAngle(r,i,NS(t.distance),NS(t.angleDeg))},shell:(e,t,n)=>{let r=WS(n),i=HS(e,r,US(t),`face`);return typeof t.tolerance==`number`?e.shell(r,i,NS(t.thickness),t.tolerance):e.shell(r,i,NS(t.thickness))},thicken:(e,t,n)=>e.thicken(WS(n),NS(t.thickness)),offset:(e,t,n)=>typeof t.tolerance==`number`?e.offset(WS(n),NS(t.distance),t.tolerance):e.offset(WS(n),NS(t.distance)),filletVariable:(e,t,n)=>e.filletVariable(WS(n),PS(t.spec)),draft:(e,t,n)=>{let r=WS(n),i=HS(e,r,US(t),`face`);return e.draft(r,i,MS(t.pullDirection,[0,0,1]),MS(t.neutralPlane),NS(t.angleDeg))},defeature:(e,t,n)=>{let r=WS(n),i=HS(e,r,US(t),`face`);return e.defeature(r,i)},simplify:(e,t,n)=>e.simplify(WS(n)),reverseShape:(e,t,n)=>e.reverseShape(WS(n)),hull:(e,t,n)=>e.hull([...n],NS(t.tolerance)),hullFromPoints:(e,t)=>{let n=t.points??[];return e.hullFromPoints(n.map(e=>({x:e[0],y:e[1],z:e[2]})),NS(t.tolerance))},sewAndSolidify:(e,t,n)=>e.sewAndSolidify([...n],NS(t.tolerance))};function JS(e,t){let n=zS(e,t);return e.iterShapes(n,`wire`)[0]??n}function YS(e,t){let n=t.section;return n?zS(e,n):RS(e,t)}function XS(e,t){let n=t.path??[];if(n.length<2)throw Error(`manifold replay: sweep spine needs at least two path points`);let r=[];for(let t=0;t+1<n.length;t++){let i=n[t]??[0,0,0],a=n[t+1]??[0,0,0];r.push(e.makeLineEdge([i[0],i[1],i[2]],[a[0],a[1],a[2]]))}let i=e.makeWire(r);for(let t of r)e.dispose(t);return i}function ZS(e){return typeof e==`object`&&!!e&&`shape`in e&&`firstShape`in e&&`lastShape`in e}function QS(e,t,n,r){let i=n.get(e);if(i!==void 0)return i;if(!e.replayable)throw Error(`manifold replay: op '${e.op}' is not replayable (raw-mesh origin or unsupported)`);let a=qS[e.op];if(!a)throw Error(`manifold replay: no replay handler for op '${e.op}'`);let o=e.inputs.map(e=>QS(e,t,n,r)),s=a(t,e.params,o);return n.set(e,s),r.add(s),s}function $S(e,t,n=new Map){let r=new Set,i=QS(e,t,n,r);for(let e of r)e!==i&&t.dispose(e);return i}function eC(e){return V(e)}function tC(e){let t=e?.node?.params;if(!t)return;let n=t.pts??t.ring;if(n&&n.length)return n;let r=t.outline;if(r&&r.length){let e=t.origin??[0,0,0],n=t.xAxis??[1,0,0],i=t.yAxis??[0,1,0];return r.map(t=>[e[0]+n[0]*t[0]+i[0]*t[1],e[1]+n[1]*t[0]+i[1]*t[1],e[2]+n[2]*t[0]+i[2]*t[1]])}}function nC(e){let t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(let r of e)for(let e=0;e<3;e++){let i=r[e]??0;i<(t[e]??1/0)&&(t[e]=i),i>(n[e]??-1/0)&&(n[e]=i)}return{min:t,max:n}}function rC(e){let t=e;if(t&&t.__manifoldSub&&t.box)return t.box;let n=tC(e);return n?nC(n):eC(e).boundingBox()}function iC(e){return eC(e)?.getMesh?.()}function aC(e,t){let n=t*e.numProp;return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function oC(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function sC(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function cC(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function lC(e){let t=rC(e);return[(t.min[0]+t.max[0])/2,(t.min[1]+t.max[1])/2,(t.min[2]+t.max[2])/2]}function uC(e){let t=Math.floor(e.vertProperties.length/e.numProp);if(t===0)return[0,0,0];let n=[0,0,0];for(let r=0;r<t;r++){let t=aC(e,r);n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}return[n[0]/t,n[1]/t,n[2]/t]}function dC(e){let t=iC(e);if(!t)return lC(e);let n=Math.floor(t.triVerts.length/3),r=0,i=[0,0,0];for(let e=0;e<n;e++){let[n,a,o]=oC(t,e),s=aC(t,n),c=aC(t,a),l=aC(t,o),u=cC(s,sC(c,l))/6;r+=u,i[0]+=(s[0]+c[0]+l[0])/4*u,i[1]+=(s[1]+c[1]+l[1])/4*u,i[2]+=(s[2]+c[2]+l[2])/4*u}return Math.abs(r)<1e-12?uC(t):[i[0]/r,i[1]/r,i[2]/r]}function fC(e){let t=iC(e);if(!t)return lC(e);let n=Math.floor(t.triVerts.length/3),r=0,i=[0,0,0];for(let e=0;e<n;e++){let[n,a,o]=oC(t,e),s=aC(t,n),c=aC(t,a),l=aC(t,o),u=sC([c[0]-s[0],c[1]-s[1],c[2]-s[2]],[l[0]-s[0],l[1]-s[1],l[2]-s[2]]),d=Math.hypot(u[0],u[1],u[2])/2;r+=d,i[0]+=(s[0]+c[0]+l[0])/3*d,i[1]+=(s[1]+c[1]+l[1])/3*d,i[2]+=(s[2]+c[2]+l[2])/3*d}return r<1e-12?uC(t):[i[0]/r,i[1]/r,i[2]/r]}function pC(e){return eC(e).volume()}function mC(e){let t=e;return t&&t.__nativeFace&&typeof t.area==`number`?t.area:eC(e).surfaceArea()}function hC(e){let t=e;if(t&&t.__manifoldSub&&t.box)return{min:[...t.box.min],max:[...t.box.max]};let n=rC(e);return{min:[...n.min],max:[...n.max]}}function gC(e){return dC(e)}function _C(e,t){let n=(e,t,n,r)=>{if(t<n)return[t,n];if(r<e)return[e,r];let i=(Math.max(e,n)+Math.min(t,r))/2;return[i,i]},[r,i]=n(e.min[0],e.max[0],t.min[0],t.max[0]),[a,o]=n(e.min[1],e.max[1],t.min[1],t.max[1]),[s,c]=n(e.min[2],e.max[2],t.min[2],t.max[2]),l=i-r,u=o-a,d=c-s;return{value:Math.sqrt(l*l+u*u+d*d),point1:[r,a,s],point2:[i,o,c]}}function vC(e,t){return _C(rC(e),rC(t))}function yC(e,t=!1){return{volume:pC(e),area:mC(e),length:0,centerOfMass:gC(e),boundingBox:hC(e)}}function bC(e,t,n){let r=Iy();if(!r)throw Error(`manifold: surfaceCurvature requires a registered occt kernel; none is available`);let i=Py(e);if(!i)return r.surfaceCurvature(e,t,n);if(!i.node.replayable)throw Error(`manifold: surfaceCurvature unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let a=Ry.get(i.node)??(()=>{let e=$S(i.node,r);return Ry.set(i.node,e),e})();return r.surfaceCurvature(a,t,n)}function xC(e){return{volume:e=>pC(e),area:e=>mC(e),length:e=>{let t=e;if(t&&t.__nativeEdge&&typeof t.length==`number`)return t.length;let n=Py(e)?.node;return n?.op===`profileEdge`&&n.params?.curve?Ob(n.params.curve):Ay(`length`)},centerOfMass:e=>gC(e),linearCenterOfMass:e=>gC(e),boundingBox:e=>hC(e),distance:(e,t)=>vC(e,t),surfaceCurvature:(e,t,n)=>bC(e,t,n),surfaceCenterOfMass:e=>fC(e),measureBulk:(e,t)=>yC(e,t),createDistanceQuery:e=>({distanceTo:t=>vC(e,t),dispose:()=>{}})}}function SC(e,t){let{runIndex:n,runOriginalID:r}=e;if(!n||!r)return 0;let i=t*3;for(let e=0;e<r.length;e++){let t=n[e]??0,a=n[e+1]??2**53-1;if(i>=t&&i<a)return r[e]??0}return 0}function CC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID,o=n.length/3,s=e=>{let t=e*i;return[r[t]??0,r[t+1]??0,r[t+2]??0]},c=new Map;for(let e=0;e<o;e++){let t=a?a[e]??e:e,n=c.get(t);n||(n=[],c.set(t,n)),n.push(e)}let l=[];for(let[e,r]of c){let i=0,a=0,o=0,c=0,u=0,d=0,f=0,p=1/0,m=1/0,h=1/0,g=-1/0,_=-1/0,v=-1/0,y=new Float32Array(r.length*9),b=0;for(let e of r){let t=s(n[e*3]??0),r=s(n[e*3+1]??0),l=s(n[e*3+2]??0),x=r[0]-t[0],S=r[1]-t[1],C=r[2]-t[2],w=l[0]-t[0],ee=l[1]-t[1],te=l[2]-t[2],ne=S*te-C*ee,re=C*w-x*te,ie=x*ee-S*w;i+=ne,a+=re,o+=ie;let ae=.5*Math.hypot(ne,re,ie);f+=ae;let oe=(t[0]+r[0]+l[0])/3,se=(t[1]+r[1]+l[1])/3,ce=(t[2]+r[2]+l[2])/3;c+=ae*oe,u+=ae*se,d+=ae*ce;for(let e of[t,r,l])e[0]<p&&(p=e[0]),e[1]<m&&(m=e[1]),e[2]<h&&(h=e[2]),e[0]>g&&(g=e[0]),e[1]>_&&(_=e[1]),e[2]>v&&(v=e[2]),y[b++]=e[0],y[b++]=e[1],y[b++]=e[2]}let x=Math.hypot(i,a,o)||1,S=[i/x,a/x,o/x],C=f>0?[c/f,u/f,d/f]:[0,0,0];l.push({__nativeFace:!0,faceId:e,originId:SC(t,r[0]??0),normal:S,center:C,area:f,min:[p,m,h],max:[g,_,v],tris:y})}return l}function wC(e){return!!e&&typeof e==`object`&&e.__nativeFace===!0}var TC=Math.cos(45*Math.PI/180),EC=(e,t)=>e<t?e*1e9+t:t*1e9+e,DC=(e,t)=>e<t?`${e},${t}`:`${t},${e}`;function OC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID,o=n.length/3;if(!a)return[];let s=e=>{let t=e*i;return[r[t]??0,r[t+1]??0,r[t+2]??0]},c=e=>{let t=s(n[e*3]??0),r=s(n[e*3+1]??0),i=s(n[e*3+2]??0),a=r[0]-t[0],o=r[1]-t[1],c=r[2]-t[2],l=i[0]-t[0],u=i[1]-t[1],d=i[2]-t[2],f=o*d-c*u,p=c*l-a*d,m=a*u-o*l,h=Math.hypot(f,p,m)||1;return[f/h,p/h,m/h]},l=new Map;for(let e=0;e<o;e++){let t=n[e*3]??0,r=n[e*3+1]??0,i=n[e*3+2]??0,o=a[e]??e,s=c(e);for(let[e,n]of[[t,r],[r,i],[i,t]]){let t=EC(e,n),r=l.get(t);r||(r={v:[e,n],faces:[],nrm:[]},l.set(t,r)),r.faces.push(o),r.nrm.push(s)}}let u=new Map;for(let{v:e,faces:t,nrm:n}of l.values()){if(t.length!==2)continue;let[r,i]=t;if(r===i)continue;let[a,o]=n;if(a[0]*o[0]+a[1]*o[1]+a[2]*o[2]>TC)continue;let s=DC(r,i),c=u.get(s);c||(c={faces:r<i?[r,i]:[i,r],segs:[]},u.set(s,c)),c.segs.push(e)}let d=[];for(let{faces:e,segs:t}of u.values())for(let n of kC(t))d.push(AC(e,n,s));return d}function kC(e){let t=new Map,n=new Set,r=(e,n)=>{let r=t.get(e);r||(r=[],t.set(e,r)),r.push(n)};e.forEach(([e,t],n)=>{r(e,n),r(t,n)});let i=(t,n)=>{let r=e[t]??[n,n];return r[0]===n?r[1]:r[0]},a=[];for(let r=0;r<e.length;r++){if(n.has(r))continue;n.add(r);let o=e[r]??[0,0],s=[o[0],o[1]];for(let r=0;r<e.length;r++){let e=s[s.length-1]??0,r=(t.get(e)??[]).find(e=>!n.has(e));if(r===void 0)break;n.add(r),s.push(i(r,e))}for(let r=0;r<e.length;r++){let e=s[0]??0,r=(t.get(e)??[]).find(e=>!n.has(e));if(r===void 0)break;n.add(r),s.unshift(i(r,e))}a.push(s)}return a}function AC(e,t,n){let r=t.length,i=new Float32Array(r*3),a=new Float32Array(r),o=1/0,s=1/0,c=1/0,l=-1/0,u=-1/0,d=-1/0,f=0,p=null;for(let e=0;e<r;e++){let r=n(t[e]??0);i[e*3]=r[0],i[e*3+1]=r[1],i[e*3+2]=r[2],p&&(f+=Math.hypot(r[0]-p[0],r[1]-p[1],r[2]-p[2])),a[e]=f,p=r,r[0]<o&&(o=r[0]),r[1]<s&&(s=r[1]),r[2]<c&&(c=r[2]),r[0]>l&&(l=r[0]),r[1]>u&&(u=r[1]),r[2]>d&&(d=r[2])}return{__nativeEdge:!0,faces:e,pts:i,arc:a,length:f,min:[o,s,c],max:[l,u,d],curveType:jC(i)?`LINE`:`CIRCLE`}}function jC(e){let t=e.length/3;if(t<=2)return!0;let n=e[0]??0,r=e[1]??0,i=e[2]??0,a=e[(t-1)*3]??0,o=e[(t-1)*3+1]??0,s=e[(t-1)*3+2]??0,c=a-n,l=o-r,u=s-i,d=Math.hypot(c,l,u)||1;c/=d,l/=d,u/=d;for(let a=1;a<t-1;a++){let t=(e[a*3]??0)-n,o=(e[a*3+1]??0)-r,s=(e[a*3+2]??0)-i,f=t*c+o*l+s*u,p=t-f*c,m=o-f*l,h=s-f*u;if(Math.hypot(p,m,h)>1e-6*Math.max(1,d))return!1}return!0}function MC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID;if(!a)return[];let o=n.length/3,s=new Map;for(let e=0;e<o;e++){let t=a[e]??e;for(let r=0;r<3;r++){let i=n[e*3+r]??0,a=s.get(i);a||(a=new Set,s.set(i,a)),a.add(t)}}let c=[];for(let[e,t]of s){if(t.size<3)continue;let n=e*i;c.push({__nativeVertex:!0,point:[r[n]??0,r[n+1]??0,r[n+2]??0]})}return c}function NC(e){return!!e&&typeof e==`object`&&e.__nativeVertex===!0}function PC(e){return!!e&&typeof e==`object`&&e.__nativeEdge===!0}function FC(e,t){let{pts:n,arc:r}=e,i=r.length;if(i===0)return[0,0,0];if(t<=0)return[n[0]??0,n[1]??0,n[2]??0];if(t>=e.length)return[n[(i-1)*3]??0,n[(i-1)*3+1]??0,n[(i-1)*3+2]??0];let a=1;for(;a<i&&(r[a]??0)<t;)a++;let o=r[a-1]??0,s=r[a]??o,c=s>o?(t-o)/(s-o):0,l=(a-1)*3,u=a*3;return[(n[l]??0)+((n[u]??0)-(n[l]??0))*c,(n[l+1]??0)+((n[u+1]??0)-(n[l+1]??0))*c,(n[l+2]??0)+((n[u+2]??0)-(n[l+2]??0))*c]}function IC(e,t){let{pts:n,arc:r}=e,i=r.length;if(i<2)return[1,0,0];let a=1;for(;a<i-1&&(r[a]??0)<t;)a++;let o=(a-1)*3,s=a*3,c=(n[s]??0)-(n[o]??0),l=(n[s+1]??0)-(n[o+1]??0),u=(n[s+2]??0)-(n[o+2]??0),d=Math.hypot(c,l,u)||1;return[c/d,l/d,u/d]}function LC(e,t){let n=Py(e);if(!n)throw Error(`manifold: ${t} requires a manifold shape handle`);if(!n.node.replayable)throw Error(`manifold: ${t} unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let r=Ly(t),i=Ry.get(n.node);if(i!==void 0)return{occt:r,brep:i};let a=$S(n.node,r);return Ry.set(n.node,a),{occt:r,brep:a}}function RC(e){if(Py(e))return`solid`;let{occt:t,brep:n}=LC(e,`shapeType`);return t.shapeType(n)}function zC(e,t){let n=Py(e),r=Py(t);return!n||!r?!1:n.manifold===r.manifold}function BC(e,t){if(!Py(e))return 0;let{occt:n,brep:r}=LC(e,`hashCode`);return n.hashCode(r,t)}function VC(e){let t=Py(e);return t?!V(t):!0}function HC(e,t){let n=Py(e);if(!n)return[];if(t===`solid`)return[e];if(t===`vertex`){let e=V(n);return e&&typeof e.getMesh==`function`?MC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.point,max:e.point},parent:n.node,subType:`vertex`})):[]}if(t!==`edge`&&t!==`face`)return[];if(t===`face`){let e=V(n);if(e&&typeof e.getMesh==`function`)return CC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.min,max:e.max},parent:n.node,subType:`face`}))}if(t===`edge`){let e=V(n);if(e&&typeof e.getMesh==`function`)return OC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.min,max:e.max},parent:n.node,subType:`edge`}))}if(!n.node.replayable)return[];let r=Iy();if(!r)return[];let i=Ry.get(n.node)??(()=>{let e=$S(n.node,r);return Ry.set(n.node,e),e})();return r.iterShapes(i,t).map((e,i)=>({__manifoldSub:!0,index:i,box:r.boundingBox(e),occt:e,parent:n.node,subType:t}))}function UC(e){let{occt:t,brep:n}=LC(e,`edgeToFaceMap`);return t.edgeToFaceMap(n)}function WC(e,t){let{occt:n,brep:r}=LC(e,`adjacentFaces`);return n.adjacentFaces(r,t)}function GC(e){return{iterShapes:HC,iterShapeList:(e,t)=>{Ly(`iterShapeList`).iterShapeList(e,t)},shapeType:RC,isSame:zC,isEqual:zC,downcast:e=>e,copyShape:e=>e,hashCode:BC,isNull:VC,shapeOrientation:e=>`forward`,edgeToFaceMap:UC,sharedEdges:(e,t)=>Ly(`sharedEdges`).sharedEdges(e,t),adjacentFaces:WC,sew:()=>{throw Error(`manifold: sew is unsupported on the mesh kernel; use a B-rep kernel`)}}}function KC(e){return V(e).getMesh()}function qC(e){return e.numProp&&e.numProp>=3?e.numProp:3}function JC(e){return Math.floor(e.vertProperties.length/qC(e))}function YC(e,t){let n=t*qC(e);return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function XC(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function ZC(e,t,n){let r=t[0]-e[0],i=t[1]-e[1],a=t[2]-e[2],o=n[0]-e[0],s=n[1]-e[1],c=n[2]-e[2],l=i*c-a*s,u=a*o-r*c,d=r*s-i*o,f=Math.hypot(l,u,d)||1;return[l/f,u/f,d/f]}function QC(e,t){let n=KC(e),r=Math.floor(n.triVerts.length/3);if(t){let e=new ArrayBuffer(84+r*50),t=new DataView(e);t.setUint32(80,r,!0);let i=84;for(let e=0;e<r;e++){let[r,a,o]=XC(n,e),s=YC(n,r),c=YC(n,a),l=YC(n,o),u=ZC(s,c,l);t.setFloat32(i,u[0],!0),t.setFloat32(i+4,u[1],!0),t.setFloat32(i+8,u[2],!0),i+=12;for(let e of[s,c,l])t.setFloat32(i,e[0],!0),t.setFloat32(i+4,e[1],!0),t.setFloat32(i+8,e[2],!0),i+=12;t.setUint16(i,0,!0),i+=2}return e}let i=[`solid manifold`];for(let e=0;e<r;e++){let[t,r,a]=XC(n,e),o=YC(n,t),s=YC(n,r),c=YC(n,a),l=ZC(o,s,c);i.push(` facet normal ${l[0]} ${l[1]} ${l[2]}`),i.push(` outer loop`);for(let e of[o,s,c])i.push(` vertex ${e[0]} ${e[1]} ${e[2]}`);i.push(` endloop`),i.push(` endfacet`)}return i.push(`endsolid manifold`),i.join(`
10
- `)}function $C(e){let t=KC(e),n=JC(t),r=Math.floor(t.triVerts.length/3),i=[`# exported by brepjs manifold kernel`];for(let e=0;e<n;e++){let n=YC(t,e);i.push(`v ${n[0]} ${n[1]} ${n[2]}`)}for(let e=0;e<r;e++){let[n,r,a]=XC(t,e);i.push(`f ${n+1} ${r+1} ${a+1}`)}return new TextEncoder().encode(i.join(`
11
- `)).buffer}function ew(e){let t=KC(e),n=JC(t),r=Math.floor(t.triVerts.length/3),i=`ply\nformat binary_little_endian 1.0\nelement vertex ${n}\nproperty float x\nproperty float y\nproperty float z\nelement face ${r}\nproperty list uchar uint vertex_indices\nend_header\n`,a=new TextEncoder().encode(i),o=new ArrayBuffer(n*12+r*13),s=new DataView(o),c=0;for(let e=0;e<n;e++){let n=YC(t,e);s.setFloat32(c,n[0],!0),s.setFloat32(c+4,n[1],!0),s.setFloat32(c+8,n[2],!0),c+=12}for(let e=0;e<r;e++){let[n,r,i]=XC(t,e);s.setUint8(c,3),c+=1,s.setUint32(c,n,!0),s.setUint32(c+4,r,!0),s.setUint32(c+8,i,!0),c+=12}let l=new Uint8Array(a.length+o.byteLength);return l.set(a,0),l.set(new Uint8Array(o),a.length),l.buffer}function tw(e,t,n=`importMesh`){let r=new e.Mesh({numProp:3,vertProperties:t.vertProperties,triVerts:t.triVerts});return Ny(new e.Manifold(r),B(n,{},[]))}function nw(e,t){let n=new TextDecoder().decode(new Uint8Array(t)),r=[],i=[];for(let e of n.split(`
12
- `)){let t=e.trim();if(t.startsWith(`v `)){let e=t.slice(2).trim().split(/\s+/);r.push(Number(e[0]),Number(e[1]),Number(e[2]))}else if(t.startsWith(`f `)){let e=t.slice(2).trim().split(/\s+/).map(e=>{let t=e.split(`/`)[0]??``,n=Number(t);return n>0?n-1:r.length/3+n});for(let t=1;t+1<e.length;t++)i.push(e[0]??0,e[t]??0,e[t+1]??0)}}return tw(e,{vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)})}function rw(e,t){let n=new Uint8Array(t),r=new TextDecoder().decode(n.subarray(0,Math.min(n.length,80))).trimStart().toLowerCase().startsWith(`solid`)&&ow(n),i=[];if(r){let e=new TextDecoder().decode(n).match(/vertex\s+(\S+)\s+(\S+)\s+(\S+)/g)??[];for(let t of e){let e=t.trim().split(/\s+/);i.push(Number(e[1]),Number(e[2]),Number(e[3]))}}else{let e=new DataView(t),n=e.getUint32(80,!0),r=84;for(let t=0;t<n;t++){r+=12;for(let t=0;t<3;t++)i.push(e.getFloat32(r,!0),e.getFloat32(r+4,!0),e.getFloat32(r+8,!0)),r+=12;r+=2}}let a=aw(i);return tw(e,{vertProperties:Float32Array.from(a.vertices),triVerts:Uint32Array.from(a.indices)})}var iw=1e6;function aw(e){let t=[],n=[],r=new Map;for(let i=0;i+2<e.length;i+=3){let a=e[i]??0,o=e[i+1]??0,s=e[i+2]??0,c=`${Math.round(a*iw)},${Math.round(o*iw)},${Math.round(s*iw)}`,l=r.get(c);l===void 0&&(l=t.length/3,r.set(c,l),t.push(a,o,s)),n.push(l)}return{vertices:t,indices:n}}function ow(e){return e.length<84?!0:84+new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(80,!0)*50!==e.length}var sw=1e-6;function cw(e,t){let n=H(t);if(n.replayable)return $S(n,e)}function lw(e,t){let n=KC(t),r=Math.floor(n.triVerts.length/3),i=[];for(let t=0;t<r;t++){let[r,a,o]=XC(n,t),s=e.buildTriFace(YC(n,r),YC(n,a),YC(n,o));s&&i.push(s)}if(i.length===0)throw Error(`manifold: cannot export — shape has no triangles to facet`);return e.sewAndSolidify(i,sw)}function uw(e){let t=Ly(`B-rep export`),n=cw(t,e);return n===void 0?(console.warn(`manifold: exact B-rep unavailable (non-replayable op-graph); exporting faceted approximation`),{occt:t,brep:lw(t,e)}):{occt:t,brep:n}}function dw(e,t,n,r){let i=t.mesh(n,{tolerance:.01,angularTolerance:.5});return tw(e,{vertProperties:Float32Array.from(i.vertices),triVerts:Uint32Array.from(i.triangles)},r)}var fw=1179937895,pw=2,mw=1313821514,hw=5130562,gw=5126,_w=5125,vw=5123,yw=5121,bw=34962,xw=34963,Sw=4;function Cw(e){return e+3&-4}function ww(e){let t=KC(e),n=t.numProp&&t.numProp>=3?t.numProp:3,r=Math.floor(t.vertProperties.length/n),i=t.triVerts.length,a=new Float32Array(r*3),o=1/0,s=1/0,c=1/0,l=-1/0,u=-1/0,d=-1/0;for(let e=0;e<r;e++){let r=t.vertProperties[e*n]??0,i=t.vertProperties[e*n+1]??0,f=t.vertProperties[e*n+2]??0;a[e*3]=r,a[e*3+1]=i,a[e*3+2]=f,r<o&&(o=r),i<s&&(s=i),f<c&&(c=f),r>l&&(l=r),i>u&&(u=i),f>d&&(d=f)}r===0&&(o=s=c=l=u=d=0);let f=Uint32Array.from(t.triVerts),p=a.byteLength,m=Cw(p),h=m+f.byteLength,g={asset:{version:`2.0`,generator:`brepjs manifold kernel`},scene:0,scenes:[{nodes:[0]}],nodes:[{mesh:0}],meshes:[{primitives:[{attributes:{POSITION:0},indices:1,mode:Sw}]}],accessors:[{bufferView:0,componentType:gw,count:r,type:`VEC3`,min:[o,s,c],max:[l,u,d]},{bufferView:1,componentType:_w,count:i,type:`SCALAR`}],bufferViews:[{buffer:0,byteOffset:0,byteLength:p,target:bw},{buffer:0,byteOffset:m,byteLength:f.byteLength,target:xw}],buffers:[{byteLength:h}]},_=new TextEncoder().encode(JSON.stringify(g)),v=Cw(_.length),y=Cw(h),b=20+v+8+y,x=new ArrayBuffer(b),S=new DataView(x),C=new Uint8Array(x);S.setUint32(0,fw,!0),S.setUint32(4,pw,!0),S.setUint32(8,b,!0);let w=12;S.setUint32(w,v,!0),S.setUint32(w+4,mw,!0),w+=8,C.set(_,w);for(let e=_.length;e<v;e++)C[w+e]=32;return w+=v,S.setUint32(w,y,!0),S.setUint32(w+4,hw,!0),w+=8,C.set(new Uint8Array(a.buffer,a.byteOffset,p),w),C.set(new Uint8Array(f.buffer,f.byteOffset,f.byteLength),w+m),x}function Tw(e,t){let n=new DataView(t);if(n.getUint32(0,!0)!==fw)throw Error(`manifold: importGLB — not a binary glTF (bad magic)`);let r=n.getUint32(8,!0),i,a,o=12;for(;o<r;){let e=n.getUint32(o,!0),r=n.getUint32(o+4,!0),s=new Uint8Array(t,o+8,e);r===mw?i=JSON.parse(new TextDecoder().decode(s)):r===hw&&(a=s),o+=8+e}if(!i||typeof i!=`object`||!a)throw Error(`manifold: importGLB — missing JSON or BIN chunk`);let s=i,c=s.meshes?.[0]?.primitives[0],l=s.accessors??[],u=s.bufferViews??[];if(!c||c.attributes.POSITION===void 0)throw Error(`manifold: importGLB — no POSITION attribute`);let d=l[c.attributes.POSITION];if(!d)throw Error(`manifold: importGLB — invalid POSITION accessor`);let f=u[d.bufferView];if(!f)throw Error(`manifold: importGLB — invalid POSITION bufferView`);let p=new Float32Array(a.buffer.slice(a.byteOffset+(f.byteOffset??0),a.byteOffset+(f.byteOffset??0)+d.count*3*4)),m;if(c.indices!==void 0){let e=l[c.indices];if(!e)throw Error(`manifold: importGLB — invalid indices accessor`);let t=u[e.bufferView];if(!t)throw Error(`manifold: importGLB — invalid indices bufferView`);let n=e.componentType===_w?4:e.componentType===vw?2:+(e.componentType===yw);if(n===0)throw Error(`manifold: importGLB — unsupported index component type ${e.componentType}`);let r=a.byteOffset+(t.byteOffset??0),i=new DataView(a.buffer,r,e.count*n);m=new Uint32Array(e.count);for(let t=0;t<e.count;t++){let e=t*n;m[t]=n===4?i.getUint32(e,!0):n===2?i.getUint16(e,!0):i.getUint8(e)}}else m=Uint32Array.from({length:d.count},(e,t)=>t);return tw(e,{vertProperties:p,triVerts:m},`importGLB`)}function Ew(e){return{exportSTL:(e,t)=>QC(e,t),exportOBJ:e=>$C(e),exportPLY:e=>ew(e),importSTL:t=>rw(e,typeof t==`string`?new TextEncoder().encode(t).buffer:t),importOBJ:t=>nw(e,t),exportSTEP:e=>Ly(`exportSTEP`).exportSTEP(e.map(e=>uw(e).brep)),exportIGES:e=>Ly(`exportIGES`).exportIGES(e.map(e=>uw(e).brep)),toBREP:e=>{let{occt:t,brep:n}=uw(e);return t.toBREP(n)},exportSTEPAssembly:(e,t)=>{let n=Ly(`exportSTEPAssembly`),r=e.map(e=>{let t={shape:uw(e.shape).brep,name:e.name};return e.color===void 0?t:{...t,color:e.color}});return n.exportSTEPAssembly(r,t)},createXCAFDocument:e=>{let t=Ly(`createXCAFDocument`),n=e.map(e=>{let t={shape:uw(e.shape).brep,name:e.name};return e.color===void 0?t:{...t,color:e.color}});return t.createXCAFDocument(n)},writeXCAFToSTEP:(e,t)=>Ly(`writeXCAFToSTEP`).writeXCAFToSTEP(e,t),exportSTEPConfigured:(e,t)=>{let n=Ly(`exportSTEPConfigured`),r=e.map(e=>{let t={shape:uw(e.shape).brep},n=e.name===void 0?t:{...t,name:e.name};return e.color===void 0?n:{...n,color:e.color}});return n.exportSTEPConfigured(r,t)},importSTEP:t=>{let n=Ly(`importSTEP`);return n.importSTEP(t).map(t=>dw(e,n,t,`importSTEP`))},importIGES:t=>{let n=Ly(`importIGES`);return n.importIGES(t).map(t=>dw(e,n,t,`importIGES`))},fromBREP:t=>{let n=Ly(`fromBREP`);return dw(e,n,n.fromBREP(t),`fromBREP`)},exportGLB:e=>ww(e),importGLB:t=>Tw(e,t),export3MF:()=>{throw Error(`manifold: 3MF IO is unsupported on the mesh kernel; export GLB/STL/OBJ or use a B-rep kernel`)},import3MF:()=>{throw Error(`manifold: 3MF IO is unsupported on the mesh kernel; export GLB/STL/OBJ or use a B-rep kernel`)}}}function Dw(e){return V(e).getMesh()}function Ow(e,t){let n=t*(e.numProp&&e.numProp>=3?e.numProp:3);return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function kw(e,t){let n=e;if(n&&n.__manifoldSub&&n.occt){let e=Iy();if(!e)throw Error(`manifold: sub-shape geometry query requires a registered occt kernel`);return t(n.occt,e)}let r=Py(e);if(!r)throw Error(`manifold: exact geometry query requires a manifold shape handle`);let i=Iy();if(!i)throw Error(`manifold: exact geometry query unsupported on manifold kernel; no B-rep kernel registered`);if(!r.node.replayable)throw Error(`manifold: exact geometry query unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let a=Ry.get(r.node);return a===void 0&&(a=$S(r.node,i),Ry.set(r.node,a)),t(a,i)}function Aw(e){let t=Py(e);if(!t)return;let n=t.node;return n.op===`profileEdge`?n.params?.curve:void 0}function jw(e){return{curveType:e=>{let t=Aw(e);return t?wb(t):PC(e)?e.curveType:kw(e,(e,t)=>t.curveType(e))},curveParameters:e=>{let t=Aw(e);if(t){let e=Tb(t);return[e.first,e.last]}return PC(e)?[0,e.length]:kw(e,(e,t)=>t.curveParameters(e))},curvePointAtParam:(e,t)=>{let n=Aw(e);return n?Eb(n,t):PC(e)?FC(e,t):kw(e,(e,n)=>n.curvePointAtParam(e,t))},curveTangent:(e,t)=>{let n=Aw(e);return n?{point:Eb(n,t),tangent:Db(n,t)}:PC(e)?{point:FC(e,t),tangent:IC(e,t)}:kw(e,(e,n)=>n.curveTangent(e,t))},curveIsClosed:e=>{let t=Aw(e);return t?kb(t):kw(e,(e,t)=>t.curveIsClosed(e))},curveIsPeriodic:e=>{let t=Aw(e);return t?Ab(t):kw(e,(e,t)=>t.curveIsPeriodic(e))},curvePeriod:e=>{let t=Aw(e);return t?jb(t):kw(e,(e,t)=>t.curvePeriod(e))},interpolatePoints:(e,t)=>Ly(`interpolatePoints`).interpolatePoints(e,t),approximatePoints:(e,t)=>Ly(`approximatePoints`).approximatePoints(e,t),curveDegreeElevate:(e,t)=>kw(e,(e,n)=>n.curveDegreeElevate(e,t)),curveKnotInsert:(e,t,n)=>kw(e,(e,r)=>r.curveKnotInsert(e,t,n)),curveKnotRemove:(e,t,n)=>kw(e,(e,r)=>r.curveKnotRemove(e,t,n)),curveSplit:(e,t)=>kw(e,(e,n)=>n.curveSplit(e,t)),createCurveAdaptor:e=>kw(e,(e,t)=>t.createCurveAdaptor(e)),getBezierPenultimatePole:e=>kw(e,(e,t)=>t.getBezierPenultimatePole(e)),getNurbsCurveData:e=>kw(e,(e,t)=>t.getNurbsCurveData?.(e)??null),vertexPosition:e=>NC(e)?e.point:Py(e)?Ow(Dw(e),0):kw(e,(e,t)=>t.vertexPosition(e)),surfaceType:e=>{if(wC(e))return`plane`;let t=Py(e);return t&&t.node.op===`profileFace`?`plane`:kw(e,(e,t)=>t.surfaceType(e))},uvBounds:e=>wC(e)?{uMin:0,uMax:1,vMin:0,vMax:1}:kw(e,(e,t)=>t.uvBounds(e)),outerWire:e=>kw(e,(e,t)=>t.outerWire(e)),surfaceNormal:(e,t,n)=>wC(e)?e.normal:kw(e,(e,r)=>r.surfaceNormal(e,t,n)),pointOnSurface:(e,t,n)=>kw(e,(e,r)=>r.pointOnSurface(e,t,n)),uvFromPoint:(e,t)=>kw(e,(e,n)=>n.uvFromPoint(e,t)),projectPointOnFace:(e,t)=>kw(e,(e,n)=>n.projectPointOnFace(e,t)),classifyPointOnFace:(e,t,n,r)=>kw(e,(e,i)=>i.classifyPointOnFace(e,t,n,r)),classifyPointRobust:(e,t,n)=>kw(e,(e,r)=>r.classifyPointRobust(e,t,n)),classifyPointWinding:(e,t,n)=>kw(e,(e,r)=>r.classifyPointWinding(e,t,n)),approximateSurfaceLspia:(e,t,n,r,i,a,o,s,c)=>Ly(`approximateSurfaceLspia`).approximateSurfaceLspia(e,t,n,r,i,a,o,s,c),untrimFace:(e,t,n)=>kw(e,(e,r)=>r.untrimFace(e,t,n)),getSurfaceCylinderData:e=>kw(e,(e,t)=>t.getSurfaceCylinderData(e)),getSurfaceAxis:e=>kw(e,(e,t)=>t.getSurfaceAxis(e)),reverseSurfaceU:e=>Ly(`reverseSurfaceU`).reverseSurfaceU(e),detectSmallFeatures:(e,t,n)=>kw(e,(e,r)=>r.detectSmallFeatures(e,t,n)),recognizeFeatures:(e,t)=>kw(e,(e,n)=>n.recognizeFeatures(e,t)),projectEdges:(e,t,n,r)=>kw(e,(e,i)=>i.projectEdges(e,t,n,r)),getNurbsSurfaceData:e=>kw(e,(e,t)=>t.getNurbsSurfaceData?.(e)??null)}}var Mw={hasErrors:!1,hasWarnings:!1,messages:[]};function Nw(){return{modified:new Map,generated:new Map,deleted:new Set}}function Pw(e){return{shape:e,evolution:Nw()}}function Fw(e){return{shape:e,evolution:Nw(),diagnostics:Mw}}function Iw(e){let t=_b(e),n=Yy(e),r=CS(e);return{translateWithHistory:(e,n,r,i)=>Pw(t.translate(e,n,r,i)),rotateWithHistory:(e,n,r,i,a,o)=>Pw(t.rotate(e,n,a,o)),mirrorWithHistory:(e,n,r)=>Pw(t.mirror(e,n,r)),scaleWithHistory:(e,n,r)=>Pw(t.scale(e,n,r)),generalTransformWithHistory:(e,n,r,i)=>Pw(t.generalTransform(e,n,r,i)),fuseWithHistory:(e,t,r,i,a)=>Fw(n.fuse(e,t,a)),cutWithHistory:(e,t,r,i,a)=>Fw(n.cut(e,t,a)),intersectWithHistory:(e,t,r,i,a)=>Fw(n.intersect(e,t,a)),filletWithHistory:(e,t,n)=>Pw(r.fillet(e,t,n)),chamferWithHistory:(e,t,n)=>Pw(r.chamfer(e,t,n)),shellWithHistory:(e,t,n,i,a,o)=>Pw(r.shell(e,t,n,o)),thickenWithHistory:(e,t)=>Pw(r.thicken(e,t)),offsetWithHistory:(e,t,n,i,a)=>Pw(r.offset(e,t,a)),draftWithHistory:(e,t,n,i,a)=>Pw(r.draft(e,t,n,i,a)),applyComposedTransformWithHistory:(e,n)=>Pw(t.transform(e,n))}}function Lw(e){let t=e?.manifold;if(!t||typeof t.isEmpty==`function`&&t.isEmpty())return!1;if(typeof t.status==`function`){let e=t.status(),n=typeof e==`number`?e:Number(e?.value??e);if(!Number.isNaN(n)&&n!==0)return!1}return!0}function Rw(e){return{isValid:e=>Lw(e),isValidStrict:e=>Lw(e),healSolid:e=>Lw(e)?e:null,healFace:e=>e,healWire:e=>e,mergeCoincidentVertices:()=>0,removeDegenerateEdges:()=>0,fixFaceOrientations:()=>0,fixShape:e=>e,fixSelfIntersection:e=>e}}var zw=.004;function Bw(e){return!!e&&typeof e==`object`&&e.__nativeC2d===!0}function Vw(e,t){return{__nativeC2d:!0,k:`line`,p1:e,p2:t}}function Hw(e,t,n,r,i){return{__nativeC2d:!0,k:`conic`,c:e,u:t,v:n,a0:r,a1:i}}function Uw(e,[t,n]){return[e.a*t+e.b*n+e.tx,e.c*t+e.d*n+e.ty]}function Ww(e,[t,n]){return[e.a*t+e.b*n,e.c*t+e.d*n]}function Gw(e,t){return{a:e.a*t.a+e.b*t.c,b:e.a*t.b+e.b*t.d,c:e.c*t.a+e.d*t.c,d:e.c*t.b+e.d*t.d,tx:e.a*t.tx+e.b*t.ty+e.tx,ty:e.c*t.tx+e.d*t.ty+e.ty}}function Kw(e,t){return e.k===`line`?Vw(Uw(t,e.p1),Uw(t,e.p2)):e.k===`bezier`?{__nativeC2d:!0,k:`bezier`,pts:e.pts.map(e=>Uw(t,e))}:Hw(Uw(t,e.c),Ww(t,e.u),Ww(t,e.v),e.a0,e.a1)}function qw(e,t){let n=e.map(e=>[e[0],e[1]]);for(let e=1;e<n.length;e++)for(let r=0;r<n.length-e;r++){let e=n[r]??[0,0],i=n[r+1]??[0,0];n[r]=[e[0]*(1-t)+i[0]*t,e[1]*(1-t)+i[1]*t]}return n[0]??[0,0]}function Jw(e,t){let n=Math.cos(t),r=Math.sin(t);return[e.c[0]+e.u[0]*n+e.v[0]*r,e.c[1]+e.u[1]*n+e.v[1]*r]}function Yw(e,t){let n=e.length-1;if(n<1)return[0,0];let r=[];for(let t=0;t<n;t++){let i=e[t]??[0,0],a=e[t+1]??[0,0];r.push([n*(a[0]-i[0]),n*(a[1]-i[1])])}return qw(r,t)}function Xw(e){let t=Math.abs(e.a1-e.a0),n=Math.hypot(e.u[0],e.u[1]),r=Math.hypot(e.v[0],e.v[1]),i=Math.max(n,r);if(i<=zw)return Math.max(2,Math.ceil(t/(2*Math.PI)*8));let a=2*Math.acos(Math.max(-1,1-zw/i));return Math.max(2,Math.ceil(t/a))}function Zw(e){if(e.k===`line`)return[e.p1,e.p2];if(e.k===`bezier`){let t=[];for(let n=0;n<=24;n++)t.push(qw(e.pts,n/24));return t}let t=e.a1-e.a0,n=Xw(e),r=[];for(let i=0;i<=n;i++){let a=e.a0+t*i/n,o=Math.cos(a),s=Math.sin(a);r.push([e.c[0]+e.u[0]*o+e.v[0]*s,e.c[1]+e.u[1]*o+e.v[1]*s])}return r}function Qw(e,t,n){let r=e[0],i=e[1],a=t[0],o=t[1],s=n[0],c=n[1],l=2*(r*(o-c)+a*(c-i)+s*(i-o));if(Math.abs(l)<1e-12)return Vw(e,n);let u=((r*r+i*i)*(o-c)+(a*a+o*o)*(c-i)+(s*s+c*c)*(i-o))/l,d=((r*r+i*i)*(s-a)+(a*a+o*o)*(r-s)+(s*s+c*c)*(a-r))/l,f=[u,d],p=Math.hypot(r-u,i-d),m=e=>Math.atan2(e[1]-d,e[0]-u),h=m(e),g=m(t),_=m(n),v=e=>(e%(2*Math.PI)+2*Math.PI)%(2*Math.PI),y=v(g-h),b=v(_-h);return _=y<=b?h+b:h-v(h-_),Hw(f,[p,0],[0,p],h,_)}function $w(e,t){let n={delete:()=>{},isEmpty:()=>!1};function r(e,...n){let r=t(),i=r?.[e];if(!i)throw Error(`manifold 2D: ${e} needs an OCCT kernel (none registered)`);return i.call(r,...n)}let i=e=>e;function a(e){let n=t();if(!n)throw Error(`manifold 2D: ${e} needs an OCCT kernel (none registered)`);return n}function o(e){if(!Bw(e))return e;let t=a(`toOcct`),n=i(e);if(n.k===`line`)return t.makeLine2d(n.p1[0],n.p1[1],n.p2[0],n.p2[1]);if(n.k===`bezier`)return t.makeBezier2d(n.pts);let r=Math.hypot(n.u[0],n.u[1]),o=Math.hypot(n.v[0],n.v[1]),s=Math.abs(Math.abs(n.a1-n.a0)-2*Math.PI)<1e-9,c=n.u[0]*n.v[1]-n.u[1]*n.v[0]>=0;if(Math.abs(r-o)<1e-9*Math.max(1,r)){if(s)return t.makeCircle2d(n.c[0],n.c[1],r,c);let e=Jw(n,n.a0),i=Jw(n,(n.a0+n.a1)/2),a=Jw(n,n.a1);return t.makeArc2dThreePoints(e[0],e[1],i[0],i[1],a[0],a[1])}let l=n.u[0]*n.v[0]+n.u[1]*n.v[1];if(Math.abs(l)<1e-9*Math.max(1,r*o)){let e=n.u[0]/r,i=n.u[1]/r;return s?t.makeEllipse2d(n.c[0],n.c[1],r,o,e,i,c):t.makeEllipseArc2d(n.c[0],n.c[1],r,o,n.a0,n.a1,e,i,c)}return t.makeBSpline2d(Zw(n).map(e=>[e[0],e[1]]))}let s={createPoint2d:(e,t)=>({x:e,y:t}),createDirection2d:(e,t)=>({x:e,y:t}),createVector2d:(e,t)=>({x:e,y:t}),createAxis2d:(e,t,n,r)=>({px:e,py:t,dx:n,dy:r}),wrapCurve2dHandle:e=>e,createCurve2dAdaptor:e=>e,makeLine2d:(e,t,n,r)=>Vw([e,t],[n,r]),makeCircle2d:(e,t,n,r=!0)=>Hw([e,t],[n,0],r?[0,n]:[0,-n],0,2*Math.PI),makeArc2dThreePoints:(e,t,n,r,i,a)=>Qw([e,t],[n,r],[i,a]),makeArc2dTangent:(e,t,n,r,i,a)=>{let o=Math.hypot(n,r)||1,s=-r/o,c=n/o,l=[i-e,a-t],u=s*l[0]+c*l[1];if(Math.abs(u)<1e-12)return Vw([e,t],[i,a]);let d=(l[0]*l[0]+l[1]*l[1])/(2*u),f=e+s*d,p=t+c*d,m=Math.hypot(e-f,t-p),h=Math.atan2(t-p,e-f),g=Math.atan2(a-p,i-f);s*n+c*r;let _=e=>(e%(2*Math.PI)+2*Math.PI)%(2*Math.PI),v=[-(t-p),e-f];return g=v[0]*n+v[1]*r>=0?h+_(g-h):h-_(h-g),Hw([f,p],[m,0],[0,m],h,g)},makeEllipse2d:(e,t,n,r,i=1,a=0,o=!0)=>{let s=Math.hypot(i,a)||1,c=i/s*n,l=a/s*n,u=-a/s*r*(o?1:-1),d=i/s*r*(o?1:-1);return Hw([e,t],[c,l],[u,d],0,2*Math.PI)},makeEllipseArc2d:(e,t,n,r,i,a,o=1,s=0,c=!0)=>{let l=Math.hypot(o,s)||1,u=o/l*n,d=s/l*n,f=-s/l*r*(c?1:-1),p=o/l*r*(c?1:-1);return Hw([e,t],[u,d],[f,p],i,a)},makeBezier2d:e=>({__nativeC2d:!0,k:`bezier`,pts:e.map(e=>[e[0],e[1]])}),evaluateCurve2d:(e,t)=>{let n=i(e);if(n.k===`line`){let e=n.p2[0]-n.p1[0],r=n.p2[1]-n.p1[1],i=Math.hypot(e,r)||1;return[n.p1[0]+e*t/i,n.p1[1]+r*t/i]}return n.k===`bezier`?qw(n.pts,t):[n.c[0]+n.u[0]*Math.cos(t)+n.v[0]*Math.sin(t),n.c[1]+n.u[1]*Math.cos(t)+n.v[1]*Math.sin(t)]},evaluateCurve2dD1:(e,t)=>{let n=i(e);if(n.k===`line`){let e=n.p2[0]-n.p1[0],r=n.p2[1]-n.p1[1],i=Math.hypot(e,r)||1;return{point:[n.p1[0]+e*t/i,n.p1[1]+r*t/i],tangent:[e/i,r/i]}}if(n.k===`bezier`)return{point:qw(n.pts,t),tangent:Yw(n.pts,t)};let r=Math.cos(t),a=Math.sin(t);return{point:[n.c[0]+n.u[0]*r+n.v[0]*a,n.c[1]+n.u[1]*r+n.v[1]*a],tangent:[-n.u[0]*a+n.v[0]*r,-n.u[1]*a+n.v[1]*r]}},getCurve2dBounds:e=>{let t=i(e);return t.k===`conic`?{first:t.a0,last:t.a1}:t.k===`line`?{first:0,last:Math.hypot(t.p2[0]-t.p1[0],t.p2[1]-t.p1[1])}:{first:0,last:1}},getCurve2dType:e=>{let t=i(e);return t.k===`line`?`LINE`:t.k===`bezier`?`BEZIER`:`CIRCLE`},reverseCurve2d:e=>{let t=i(e);if(t.k===`line`){let e=t.p1;t.p1=t.p2,t.p2=e}else if(t.k===`bezier`)t.pts.reverse();else{let e=t.a0;t.a0=t.a1,t.a1=e}},copyCurve2d:e=>structuredClone(i(e)),trimCurve2d:(e,t,n)=>{let r=i(e);if(r.k===`conic`)return Hw(r.c,r.u,r.v,t,n);if(r.k===`line`){let e=r.p2[0]-r.p1[0],i=r.p2[1]-r.p1[1],a=Math.hypot(e,i)||1;return Vw([r.p1[0]+e*t/a,r.p1[1]+i*t/a],[r.p1[0]+e*n/a,r.p1[1]+i*n/a])}return structuredClone(r)},createIdentityGTrsf2d:()=>({a:1,b:0,c:0,d:1,tx:0,ty:0}),createTranslationGTrsf2d:(e,t)=>({a:1,b:0,c:0,d:1,tx:e,ty:t}),createRotationGTrsf2d:(e,t,n)=>{let r=Math.cos(e),i=Math.sin(e);return{a:r,b:-i,c:i,d:r,tx:t-(r*t-i*n),ty:n-(i*t+r*n)}},createScaleGTrsf2d:(e,t,n)=>({a:e,b:0,c:0,d:e,tx:t-e*t,ty:n-e*n}),createMirrorGTrsf2d:(e,t,n,r=0,i=0,a=1,o=0)=>{if(n===`point`)return{a:-1,b:0,c:0,d:-1,tx:2*e,ty:2*t};let s=Math.hypot(a,o)||1,c=a/s,l=o/s,u=c*c-l*l,d=2*c*l;return{a:u,b:d,c:d,d:-u,tx:r-(u*r+d*i),ty:i-(d*r-u*i)}},createAffinityGTrsf2d:(e,t,n,r,i)=>{let a=Math.hypot(n,r)||1,o=n/a,s=r/a,c=-s,l=o,u=o*o+i*c*c,d=o*s+i*c*l,f=s*o+i*l*c,p=s*s+i*l*l;return{a:u,b:d,c:f,d:p,tx:e-(u*e+d*t),ty:t-(f*e+p*t)}},setGTrsf2dTranslationPart:(e,t,n)=>{let r=e;r.tx=t,r.ty=n},multiplyGTrsf2d:(e,t)=>{let n=Gw(e,t);Object.assign(e,n)},transformCurve2dGeneral:(e,t)=>Kw(i(e),t),translateCurve2d:(e,t,n)=>Kw(i(e),{a:1,b:0,c:0,d:1,tx:t,ty:n}),rotateCurve2d:(e,t,n,r)=>{let a=Math.cos(t),o=Math.sin(t);return Kw(i(e),{a,b:-o,c:o,d:a,tx:n-(a*n-o*r),ty:r-(o*n+a*r)})},scaleCurve2d:(e,t,n,r)=>Kw(i(e),{a:t,b:0,c:0,d:t,tx:n-t*n,ty:r-t*r}),mirrorCurve2dAtPoint:(e,t,n)=>Kw(i(e),{a:-1,b:0,c:0,d:-1,tx:2*t,ty:2*n}),mirrorCurve2dAcrossAxis:(e,t,n,r,a)=>{let o=Math.hypot(r,a)||1,s=r/o,c=a/o,l=s*s-c*c,u=2*s*c;return Kw(i(e),{a:l,b:u,c:u,d:-l,tx:t-(l*t+u*n),ty:n-(u*t-l*n)})},affinityTransform2d:(e,t,n,r,a,o)=>{let s=Math.hypot(r,a)||1,c=r/s,l=a/s,u=-l,d=c,f=c*c+o*u*u,p=c*l+o*u*d,m=l*c+o*d*u,h=l*l+o*d*d;return Kw(i(e),{a:f,b:p,c:m,d:h,tx:t-(f*t+p*n),ty:n-(m*t+h*n)})},createBoundingBox2d:()=>({min:[1/0,1/0],max:[-1/0,-1/0]}),addCurveToBBox2d:(e,t)=>{let n=e,r;if(Bw(t))r=Zw(i(t));else{let e=a(`addCurveToBBox2d`),{first:n,last:i}=e.getCurve2dBounds(t);r=[];for(let a=0;a<=32;a++)r.push(e.evaluateCurve2d(t,n+(i-n)*a/32))}for(let[e,t]of r)e<n.min[0]&&(n.min[0]=e),t<n.min[1]&&(n.min[1]=t),e>n.max[0]&&(n.max[0]=e),t>n.max[1]&&(n.max[1]=t)},getBBox2dBounds:e=>{let t=e;return{xMin:t.min[0],yMin:t.min[1],xMax:t.max[0],yMax:t.max[1]}},mergeBBox2d:(e,t)=>{let n=e,r=t;n.min[0]=Math.min(n.min[0],r.min[0]),n.min[1]=Math.min(n.min[1],r.min[1]),n.max[0]=Math.max(n.max[0],r.max[0]),n.max[1]=Math.max(n.max[1],r.max[1])},isBBox2dOut:(e,t)=>{let n=e,r=t;return n.max[0]<r.min[0]||n.min[0]>r.max[0]||n.max[1]<r.min[1]||n.min[1]>r.max[1]},isBBox2dOutPoint:(e,t,n)=>{let r=e;return t<r.min[0]||t>r.max[0]||n<r.min[1]||n>r.max[1]},getCurve2dCircleData:e=>{let t=i(e);if(t.k!==`conic`)return null;let n=Math.hypot(t.u[0],t.u[1]),r=Math.hypot(t.v[0],t.v[1]);return Math.abs(n-r)>1e-6?null:{cx:t.c[0],cy:t.c[1],radius:n,isDirect:!0}},liftCurve2dToPlane:(e,t,r,a)=>{let o=r[0],s=r[1],c=r[2],l=a[0],u=a[1],d=a[2],f=s*d-c*u,p=c*l-o*d,m=o*u-s*l,h=Zw(i(e)).map(([e,n])=>[t[0]+l*e+f*n,t[1]+u*e+p*n,t[2]+d*e+m*n]);return Ny(n,B(`profileEdge`,{pts:h},[]))},makeBSpline2d:(e,t)=>a(`makeBSpline2d`).makeBSpline2d(e,t),offsetCurve2d:(e,t)=>a(`offsetCurve2d`).offsetCurve2d(o(e),t),intersectCurves2d:(e,t,n)=>a(`intersectCurves2d`).intersectCurves2d(o(e),o(t),n),projectPointOnCurve2d:(e,t,n)=>a(`projectPointOnCurve2d`).projectPointOnCurve2d(o(e),t,n),distanceBetweenCurves2d:(e,t,n,r,i,s)=>a(`distanceBetweenCurves2d`).distanceBetweenCurves2d(o(e),o(t),n,r,i,s),approximateCurve2dAsBSpline:(e,t,n,r)=>a(`approximateCurve2dAsBSpline`).approximateCurve2dAsBSpline(o(e),t,n,r),decomposeBSpline2dToBeziers:e=>a(`decomposeBSpline2dToBeziers`).decomposeBSpline2dToBeziers(o(e)),serializeCurve2d:e=>a(`serializeCurve2d`).serializeCurve2d(o(e)),deserializeCurve2d:e=>a(`deserializeCurve2d`).deserializeCurve2d(e),splitCurve2d:(e,t)=>a(`splitCurve2d`).splitCurve2d(o(e),t),getCurve2dEllipseData:e=>a(`getCurve2dEllipseData`).getCurve2dEllipseData(o(e)),getCurve2dBezierPoles:e=>a(`getCurve2dBezierPoles`).getCurve2dBezierPoles(o(e)),getCurve2dBezierDegree:e=>a(`getCurve2dBezierDegree`).getCurve2dBezierDegree(o(e)),getCurve2dBSplineData:e=>a(`getCurve2dBSplineData`).getCurve2dBSplineData(o(e)),buildEdgeOnSurface:(e,t)=>a(`buildEdgeOnSurface`).buildEdgeOnSurface(o(e),t),extractSurfaceFromFace:e=>a(`extractSurfaceFromFace`).extractSurfaceFromFace(e),extractCurve2dFromEdge:(e,t)=>a(`extractCurve2dFromEdge`).extractCurve2dFromEdge(e,t),buildCurves3d:e=>{a(`buildCurves3d`).buildCurves3d(e)},fixWireOnFace:(e,t,n)=>a(`fixWireOnFace`).fixWireOnFace(e,t,n),fillSurface:(e,t)=>a(`fillSurface`).fillSurface(e,t)};for(let e of[`evaluateCurve2d`,`evaluateCurve2dD1`,`getCurve2dBounds`,`getCurve2dType`,`reverseCurve2d`,`copyCurve2d`,`trimCurve2d`,`transformCurve2dGeneral`,`translateCurve2d`,`rotateCurve2d`,`scaleCurve2d`,`mirrorCurve2dAtPoint`,`mirrorCurve2dAcrossAxis`,`affinityTransform2d`,`getCurve2dCircleData`,`liftCurve2dToPlane`]){let t=s[e];t&&(s[e]=((n,...i)=>Bw(n)?t(n,...i):r(e,n,...i)))}return s}var eT=`createPoint2d.createDirection2d.createVector2d.createAxis2d.wrapCurve2dHandle.createCurve2dAdaptor.makeLine2d.makeCircle2d.makeArc2dThreePoints.makeArc2dTangent.makeEllipse2d.makeEllipseArc2d.makeBezier2d.makeBSpline2d.evaluateCurve2d.evaluateCurve2dD1.getCurve2dBounds.getCurve2dType.trimCurve2d.reverseCurve2d.copyCurve2d.offsetCurve2d.translateCurve2d.rotateCurve2d.scaleCurve2d.mirrorCurve2dAtPoint.mirrorCurve2dAcrossAxis.affinityTransform2d.createIdentityGTrsf2d.createAffinityGTrsf2d.createTranslationGTrsf2d.createMirrorGTrsf2d.createRotationGTrsf2d.createScaleGTrsf2d.setGTrsf2dTranslationPart.multiplyGTrsf2d.transformCurve2dGeneral.intersectCurves2d.projectPointOnCurve2d.distanceBetweenCurves2d.approximateCurve2dAsBSpline.decomposeBSpline2dToBeziers.createBoundingBox2d.addCurveToBBox2d.getBBox2dBounds.mergeBBox2d.isBBox2dOut.isBBox2dOutPoint.getCurve2dCircleData.getCurve2dEllipseData.getCurve2dBezierPoles.getCurve2dBezierDegree.getCurve2dBSplineData.serializeCurve2d.deserializeCurve2d.splitCurve2d.liftCurve2dToPlane.buildEdgeOnSurface.extractSurfaceFromFace.extractCurve2dFromEdge.buildCurves3d.fixWireOnFace.fillSurface`.split(`.`);function tT(e){let t=Iy();if(!t)throw Error(`manifold: ${e} unsupported on manifold kernel; no B-rep kernel registered`);return t}function nT(e){let t={};for(let e of eT)t[e]=(...t)=>tT(e)[e](...t);let n=$w(e,()=>Iy());return Object.assign(t,n),t}function rT(e){return{sketchNew:()=>Ay(`sketchNew`),sketchAddPoint:()=>Ay(`sketchAddPoint`),sketchAddArc:()=>Ay(`sketchAddArc`),sketchAddConstraint:()=>Ay(`sketchAddConstraint`),sketchSolve:()=>Ay(`sketchSolve`),sketchDof:()=>Ay(`sketchDof`)}}function iT(e){return{projectEdges:()=>Ay(`projectEdges`)}}function aT(e){return{dispose(e){let t=Py(e);if(t){let e=Ry.get(t.node);e!==void 0&&(Iy()?.dispose(e),Ry.delete(t.node))}(e?.manifold)?.delete?.()},executeBatch:()=>Ay(`executeBatch`),checkpoint:()=>Ay(`checkpoint`),checkpointCount:()=>0,restoreCheckpoint:()=>Ay(`restoreCheckpoint`),discardCheckpoint:()=>Ay(`discardCheckpoint`)}}var oT={draft:30,standard:10,fine:3},sT=class{oc;kernelId=`manifold`;capabilities={exact:!1,brepExport:!1,exactMeasurement:!1,tessellationModel:`build-time`};setQuality(e){let t=this.oc;t.setCircularSegments?.(0),t.setMinCircularEdgeLength?.(0),t.setMinCircularAngle?.(oT[e])}constructor(e){this.oc=e,Object.assign(this,Wy(e),Yy(e),_b(e),wx(e),Xx(e),CS(e),jS(e),xC(e),GC(e),Ew(e),jw(e),Iw(e),Rw(e),nT(e),rT(e),iT(e),aT(e))}};function cT(e){return import(e)}function lT(e){return`projectEdges`in e}function uT(e){return`sketchNew`in e&&`sketchDof`in e}var dT=new Map,fT=null,pT=null;function mT(e){hT(`manifold`,new sT(e))}function hT(e,t){dT.set(e,t),fT||=e,e===fT&&(pT=t)}function U(e){if(!e&&pT)return pT;let t=e??fT;if(!t)throw Error(`brepjs kernel not initialized. Call initFromOC() or registerKernel() before using the library.`);let n=dT.get(t);if(!n)throw Error(`brepjs: kernel '${t}' is not registered.`);return n}function gT(e){let t=U(e);if(!Do(t))throw Error(`brepjs: current kernel does not support 2D operations.`);return t}function _T(){return fT}function vT(e,t){let n=fT;fT=e,pT=dT.get(e)??null;try{let e=t();if(e instanceof Promise)throw Error(`withKernel() callback returned a Promise. Async code must use getKernel(id) directly — the kernel override is restored synchronously in finally.`);return e}finally{fT=n,pT=n?dT.get(n)??null:null}}function yT(e){return U(e).capabilities}function bT(e,t){let n=wo();try{Eo(e),U().setQuality?.(e);let n=t();if(n instanceof Promise)throw Error(`withQuality() callback returned a Promise. Async code must read currentQuality()/getKernel() directly.`);return n}finally{Eo(n),U().setQuality?.(n)}}var xT=new Map;function ST(e,t){xT.set(e,t)}function CT(e){return xT.get(e)}function wT(e,t){let n=xT.get(e);if(!n)throw Error(`withTier: no tier registered for "${e}". Call registerKernelTier("${e}", { kernel, quality }) first.`);return vT(n.kernel,()=>bT(n.quality,t))}function TT(e){Uo(),rl(),Io(),Nc(),Pc(),Yc(),Xc();let t=new zf(e);hT(`occt`,t),fT=`occt`,pT=t}function ET(){let e=U(),t=e.makeBox(1,1,1);try{e.dispose(t)}catch{}}async function DT(){if(fT)return fT;try{let{OcctKernel:e}=await cT(`occt-wasm`),t=await e.init();return hT(`occt-wasm`,La.fromKernel(t)),`occt-wasm`}catch{}try{return TT(await(await cT(`brepjs-opencascade`)).default()),`occt`}catch{}try{let e=await cT(`brepkit-wasm`);return typeof e.default==`function`&&await e.default(),hT(`brepkit`,new ky(new e.BrepKernel)),`brepkit`}catch{}throw Error(`brepjs: no kernel package found. Install one of:
13
- npm install occt-wasm (recommended, default)
14
- npm install brepjs-opencascade
15
- npm install brepkit-wasm`)}function OT(){var e=typeof SuppressedError==`function`?SuppressedError:function(e,t){var n=Error();return n.name=`SuppressedError`,n.error=e,n.suppressed=t,n},t={},n=[];function r(e,t){if(t!=null){if(Object(t)!==t)throw TypeError(`using declarations can only be used with objects, functions, null, or undefined.`);if(e)var r=t[Symbol.asyncDispose||Symbol.for(`Symbol.asyncDispose`)];if(r===void 0&&(r=t[Symbol.dispose||Symbol.for(`Symbol.dispose`)],e))var i=r;if(typeof r!=`function`)throw TypeError(`Object is not disposable.`);i&&(r=function(){try{i.call(t)}catch(e){return Promise.reject(e)}}),n.push({v:t,d:r,a:e})}else e&&n.push({d:t,a:e});return t}return{e:t,u:r.bind(null,!1),a:r.bind(null,!0),d:function(){var r,i=this.e,a=0;function o(){for(;r=n.pop();)try{if(!r.a&&a===1)return a=0,n.push(r),Promise.resolve().then(o);if(r.d){var e=r.d.call(r.v);if(r.a)return a|=2,Promise.resolve(e).then(o,s)}else a|=1}catch(e){return s(e)}if(a===1)return i===t?Promise.resolve():Promise.reject(i);if(i!==t)throw i}function s(n){return i=i===t?n:new e(n,i),o()}return o()}}}var kT=Symbol;kT.dispose??=Symbol.for(`Symbol.dispose`),kT.asyncDispose??=Symbol.for(`Symbol.asyncDispose`);var AT=globalThis;AT.FinalizationRegistry||=(console.warn(`brepjs: FinalizationRegistry unavailable — garbage collection will not work`),class{register(e,t,n){}unregister(e){return!1}});var jT={liveHandles:0,peakHandles:0,gcCollected:0,scopeEnters:0,scopeExits:0};function MT(){return{...jT}}function NT(){jT.liveHandles=0,jT.peakHandles=0,jT.gcCollected=0,jT.scopeEnters=0,jT.scopeExits=0}function PT(){jT.liveHandles++,jT.liveHandles>jT.peakHandles&&(jT.peakHandles=jT.liveHandles)}function FT(){jT.liveHandles--}function IT(){jT.gcCollected++,jT.liveHandles--}var LT=new FinalizationRegistry(e=>{IT();try{e.delete()}catch{}});function RT(e){let t=U(),n=!1,r,i=()=>{if(r){for(let e of r)try{e()}catch{}r=void 0}},a=()=>{if(!n){n=!0,FT(),LT.unregister(o),i();try{t.dispose(e)}catch{}}},o={get wrapped(){if(n)throw Error(`Shape handle has been disposed`);return e},get disposed(){return n},[Symbol.dispose](){a()},delete(){a()},onDispose(e){if(n){e();return}(r??=[]).push(e)}};return PT(),LT.register(o,{delete:()=>{t.dispose(e)}},o),o}function zT(e){let t=()=>{};return{get wrapped(){return e},get disposed(){return!1},[Symbol.dispose]:t,delete:t,onDispose:t}}function BT(e){let t=!1,n={get value(){if(t)throw Error(`kernel handle has been disposed`);return e},get disposed(){return t},[Symbol.dispose](){if(!t){t=!0,FT(),LT.unregister(n);try{e.delete()}catch{}}}};return PT(),LT.register(n,e,n),n}var VT=class{handles=[];constructor(){jT.scopeEnters++}register(e){return this.handles.push(()=>{try{let t=e[Symbol.dispose];typeof t==`function`?t.call(e):e.delete()}catch{}}),e}track(e){return this.handles.push(()=>{try{e[Symbol.dispose]()}catch{}}),e}[Symbol.dispose](){jT.scopeExits++;for(let e=this.handles.length-1;e>=0;e--)this.handles[e]?.();this.handles.length=0}};function HT(e){try{var t=OT();return e(t.u(new VT))}catch(e){t.e=e}finally{t.d()}}function UT(e,t){LT.register(e,t,t)}function WT(e){LT.unregister(e)}function GT(e){try{var t=OT();return e(t.u(new VT))}catch(e){t.e=e}finally{t.d()}}async function KT(e){try{var t=OT();return await e(t.u(new VT))}catch(e){t.e=e}finally{t.d()}}function qT(e){return!e.disposed}function JT(e){return e.__is2D!==!0}function YT(e){return e.__is2D===!0}function XT(e){if(!JT(e))throw Error(`Expected 3D shape, got 2D`);return e}function ZT(e){if(!YT(e))throw Error(`Expected 2D shape, got 3D`);return e}var QT=new WeakMap;function $T(e,t){QT.set(e,t)}function eE(e,t){let n=QT.get(t);if(n!==void 0)return n;let r=e.shapeType(t);return QT.set(t,r),r}function tE(e){return eE(U(),e.wrapped)}function nE(e){return U().curveIsClosed(e.wrapped)}function rE(e){return U().isValid(e.wrapped)}function iE(e){let t=U();if(!t.isValid(e.wrapped))return!1;let n=t.isValidStrict?.bind(t)??t.isValid.bind(t);try{let r=t.solidFromShell(e.wrapped),i=n(r);try{t.dispose(r)}catch{}return i}catch{return!1}}function aE(e){return U().isValid(e.wrapped)}function oE(e){return nE(e)?O(e):k(`Wire is not closed: start and end points do not coincide`)}function sE(e){return rE(e)?O(e):k(`Face orientation is inconsistent or face is invalid`)}function cE(e){return iE(e)?O(e):k(`Shell is not manifold: has free edges or is invalid`)}function lE(e){return aE(e)?O(e):k(`Solid failed BRepCheck validation`)}function uE(e){return U().surfaceType(e.wrapped)===`plane`}function dE(e){let t=U(),n=n=>{try{let r=t.makeFace(e.wrapped,n),i=t.surfaceType(r);try{t.dispose(r)}catch{}return i===`plane`}catch{return!1}};return n(!0)?!0:n(!1)}function fE(e){return uE(e)?O(e):k(`Face is not planar: underlying surface is not a geometric plane`)}function pE(e){return dE(e)?O(e):k(`Wire is not planar: edges do not lie in a common plane`)}function mE(e,t){return t===`2D`&&(e.__is2D=!0),e}function hE(e,t){return mE(RT(e),t)}function gE(e,t){return mE(RT(e),t)}function _E(e,t){return mE(RT(e),t)}function vE(e,t){return mE(RT(e),t)}function yE(e){return mE(RT(e))}function bE(e){return mE(RT(e))}function xE(e){return mE(RT(e))}function SE(e,t){return mE(RT(e),t)}function CE(e){return tE(e)===`vertex`}function wE(e){return tE(e)===`edge`}function TE(e){return tE(e)===`wire`}function EE(e){return tE(e)===`face`}function DE(e){return tE(e)===`shell`}function OE(e){return tE(e)===`solid`}function kE(e){return tE(e)===`compound`}function AE(e){let t=tE(e);return t===`shell`||t===`solid`||t===`compsolid`?!0:t===`compound`?JT(e):!1}function jE(e){let t=tE(e);return t===`edge`||t===`wire`}function ME(e,t){let n=U(),r=eE(n,e),i=n.downcast(e,r);return r===`vertex`?hE(i,t):r===`edge`?gE(i,t):r===`wire`?_E(i,t):r===`face`?vE(i,t):r===`shell`?yE(i):r===`solid`?bE(i):r===`compsolid`?xE(i):SE(i,t)}function NE(e){return ME(e)}function PE(e,t){let n=e.id,r=t.wrapped.id;(n!==void 0&&r!==void 0?n===r:t.wrapped===e)||U().dispose(e)}function W(e,t){let n=ME(e,t);return PE(e,n),n}function FE(e,t){let n=e.wrapped;if(e[Symbol.dispose](),n!==t){let e=U();e.dispose(n),e.dispose(t)}}function IE(e){U().dispose(e.wrapped),e[Symbol.dispose]()}function LE(e,t,n){$T(e,t);let r=U().downcast(e,t);return t===`vertex`?hE(r,n):t===`edge`?gE(r,n):t===`wire`?_E(r,n):t===`face`?vE(r,n):t===`shell`?yE(r):t===`solid`?bE(r):t===`compsolid`?xE(r):SE(r,n)}function RE(e,t,n){let r=LE(e,t,n);return PE(e,r),r}function zE(e,t,n){return $T(e,t),mE(zT(e),n)}function BE(e,t,n,r,i){let a={kind:e,code:t,message:n,cause:r};return i?{...a,suggestion:i}:a}var VE={KERNEL_OPERATION:(e,t,n,r)=>BE(`KERNEL_OPERATION`,e,t,n,r),VALIDATION:(e,t,n,r)=>BE(`VALIDATION`,e,t,n,r),TYPE_CAST:(e,t,n,r)=>BE(`TYPE_CAST`,e,t,n,r),SKETCHER_STATE:(e,t,n,r)=>BE(`SKETCHER_STATE`,e,t,n,r),MODULE_INIT:(e,t,n,r)=>BE(`MODULE_INIT`,e,t,n,r),COMPUTATION:(e,t,n,r)=>BE(`COMPUTATION`,e,t,n,r),IO:(e,t,n,r)=>BE(`IO`,e,t,n,r),QUERY:(e,t,n,r)=>BE(`QUERY`,e,t,n,r),UNSUPPORTED:(e,t,n,r)=>BE(`UNSUPPORTED`,e,t,n,r)};function HE(e,t,n,r=`KERNEL_OPERATION`){try{return O(W(e()))}catch(e){let i=e instanceof Error?e.message:String(e),a=r===`KERNEL_OPERATION`?po(i):i,o=fo(t);return k(VE[r](t,`${n}: ${a}`,e,o))}}function UE(e,t,n,r=`KERNEL_OPERATION`){try{return O(e())}catch(e){let i=e instanceof Error?e.message:String(e),a=r===`KERNEL_OPERATION`?po(i):i,o=fo(t);return k(VE[r](t,`${n}: ${a}`,e,o))}}function WE(e,t,n,r=`KERNEL_OPERATION`){try{var i=OT();let a=i.u(new VT);return HE(()=>e(a),t,n,r)}catch(e){i.e=e}finally{i.d()}}function GE(e,t){let n=U().iterShapes(e,t),r=Array(n.length);for(let e=0;e<n.length;e++)r[e]=RE(n[e],t);return r}var KE=new WeakMap;function qE(e){let t=KE.get(e);if(!t)return;KE.delete(e);let n=[t.edges,t.faces,t.wires,t.vertices,t.shells,t.solids,t.compSolids];for(let e of n)if(e)for(let t of e)t[Symbol.dispose]()}var JE=new WeakSet;function YE(e){let t=e.wrapped,n=KE.get(t);return n||(n={},KE.set(t,n)),JE.has(e)||(JE.add(e),e.onDispose(()=>{qE(t)})),n}function XE(e){return KE.get(e.wrapped)}function ZE(e){qE(e.wrapped)}function QE(e){let t=YE(e);if(t.edges)return t.edges;let n=GE(e.wrapped,`edge`);return t.edges=n,n}function $E(e){let t=YE(e);if(t.faces)return t.faces;let n=GE(e.wrapped,`face`);return t.faces=n,n}function eD(e){let t=YE(e);if(t.wires)return t.wires;let n=GE(e.wrapped,`wire`);return t.wires=n,n}function tD(e){let t=YE(e);if(t.vertices)return t.vertices;let n=GE(e.wrapped,`vertex`);return t.vertices=n,n}function nD(e){let t=YE(e);if(t.solids)return t.solids;let n=GE(e.wrapped,`solid`);return t.solids=n,n}function rD(e){let t=YE(e);if(t.shells)return t.shells;let n=GE(e.wrapped,`shell`);return t.shells=n,n}function iD(e){let t=YE(e);if(t.compSolids)return t.compSolids;let n=GE(e.wrapped,`compsolid`);return t.compSolids=n,n}function*aD(e){for(let t of U().iterShapes(e.wrapped,`edge`))yield RE(t,`edge`)}function*oD(e){for(let t of U().iterShapes(e.wrapped,`face`))yield RE(t,`face`)}function*sD(e){for(let t of U().iterShapes(e.wrapped,`wire`))yield RE(t,`wire`)}function*cD(e){for(let t of U().iterShapes(e.wrapped,`vertex`))yield RE(t,`vertex`)}function*lD(e){for(let t of U().iterShapes(e.wrapped,`solid`))yield RE(t,`solid`)}function*uD(e){for(let t of U().iterShapes(e.wrapped,`shell`))yield RE(t,`shell`)}function*dD(e){for(let t of U().iterShapes(e.wrapped,`compsolid`))yield RE(t,`compsolid`)}function fD(e){let t=YE(e);if(t.bounds)return t.bounds;let{min:n,max:r}=U().boundingBox(e.wrapped),i={xMin:n[0],xMax:r[0],yMin:n[1],yMax:r[1],zMin:n[2],zMax:r[2]};return t.bounds=i,i}function pD(e){return eE(U(),e.wrapped)}function mD(e){let t=YE(e);if(t.surfaceType!==void 0)return t.surfaceType;let n=U().surfaceType(e.wrapped);return t.surfaceType=n,n}function hD(e){let t=YE(e);if(t.isValid!==void 0)return t.isValid;let n=U().isValid(e.wrapped);return t.isValid=n,n}function gD(e){return{kind:pD(e),faceCount:$E(e).length,edgeCount:QE(e).length,wireCount:eD(e).length,vertexCount:tD(e).length,valid:hD(e),bounds:fD(e)}}function _D(e){return U().vertexPosition(e.wrapped)}var G=2147483647,vD=Math.PI/180,yD=180/Math.PI;function bD(e){return e.length===2?[e[0],e[1],0]:[e[0],e[1],e[2]]}function xD(e){return[e[0],e[1]]}var SD={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function CD(e){if(typeof e==`string`){let t=SD[e];if(!t)throw Error(`Unknown direction: ${e}`);return t}return e}function wD(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function TD(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function ED(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function DD(e){return[-e[0],-e[1],-e[2]]}function OD(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function kD(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function AD(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2])}function jD(e){return e[0]*e[0]+e[1]*e[1]+e[2]*e[2]}function MD(e,t){return AD(TD(e,t))}function ND(e){let t=AD(e);return t<1e-10?[0,0,0]:[e[0]/t,e[1]/t,e[2]/t]}function PD(e,t,n=1e-5){return Math.abs(e[0]-t[0])<n&&Math.abs(e[1]-t[1])<n&&Math.abs(e[2]-t[2])<n}function FD(e,t=1e-10){return jD(e)<t*t}function ID(e,t){let n=OD(e,t),r=AD(e),i=AD(t);if(r<1e-10||i<1e-10)return 0;let a=Math.max(-1,Math.min(1,n/(r*i)));return Math.acos(a)}function LD(e,t,n){let r=TD(e,t),i=jD(n);return i<1e-20?e:TD(e,ED(n,OD(r,n)/i))}function RD(e,t,n){let r=ND(t),i=Math.cos(n),a=Math.sin(n),o=OD(e,r),s=kD(r,e);return[e[0]*i+s[0]*a+r[0]*o*(1-i),e[1]*i+s[1]*a+r[1]*o*(1-i),e[2]*i+s[2]*a+r[2]*o*(1-i)]}var zD=e=>Math.round(e*1e3)/1e3;function BD(e){return`x: ${zD(e[0])}, y: ${zD(e[1])}, z: ${zD(e[2])}`}function VD(e,t=null,n=[0,0,1]){let r=ND(n);if(FD(r))throw Error(`Plane normal must be non-zero`);let i;if(t)i=ND(t);else{let[e,t,n]=r,a=Math.abs(e),o=Math.abs(t),s=Math.abs(n),c;c=a<=o&&a<=s?[1,0,0]:o<=s?[0,1,0]:[0,0,1];let l=c[1]*n-c[2]*t,u=c[2]*e-c[0]*n,d=c[0]*t-c[1]*e;i=Math.sqrt(l*l+u*u+d*d)>1e-12?ND([l,u,d]):[1,0,0]}if(FD(i))throw Error(`Plane xDir must be non-zero`);let a=ND(kD(r,i));return{origin:e,xDir:i,yDir:a,zDir:r}}var HD={XY:{xDir:[1,0,0],normal:[0,0,1]},YZ:{xDir:[0,1,0],normal:[1,0,0]},ZX:{xDir:[0,0,1],normal:[0,1,0]},XZ:{xDir:[1,0,0],normal:[0,-1,0]},YX:{xDir:[0,1,0],normal:[0,0,-1]},ZY:{xDir:[0,0,1],normal:[-1,0,0]},front:{xDir:[1,0,0],normal:[0,0,1]},back:{xDir:[-1,0,0],normal:[0,0,-1]},left:{xDir:[0,0,1],normal:[-1,0,0]},right:{xDir:[0,0,-1],normal:[1,0,0]},top:{xDir:[1,0,0],normal:[0,1,0]},bottom:{xDir:[1,0,0],normal:[0,-1,0]}};function UD(e,t=[0,0,0]){let n=HD[e];if(!n)return k(F(`UNKNOWN_PLANE`,`Could not find plane ${e}`));let r;return r=typeof t==`number`?ED(n.normal,t):bD(t),O(VD(r,n.xDir,n.normal))}function WD(e,t){return typeof e==`string`?UD(e,t):O(e)}function GD(e,t){return e&&typeof e!=`string`?{...e}:j(WD(e??`XY`,t))}function KD(e,t){let[n,r]=t;return wD(wD(e.origin,ED(e.xDir,n)),ED(e.yDir,r))}function qD(e,t){return{...e,origin:wD(e.origin,t)}}function JD(e,t,n=[1,0,0]){let r=t*vD,i=RD(e.zDir,n,r),a=RD(e.xDir,n,r),o=ND(kD(i,a));return{origin:e.origin,xDir:a,yDir:o,zDir:i}}var YD={compound:0,solidCompound:1,solid:2,shell:3,face:4,wire:5,edge:6,vertex:7,shape:8},XD=e=>YD[e],ZD={vertex:`vertex`,edge:`edge`,wire:`wire`,face:`face`,shell:`shell`,solid:`solid`,solidCompound:`compsolid`,compound:`compound`,shape:`compound`},QD=function*(e,t){let n=U().iterShapes(e,ZD[t]);for(let e of n)yield e},$D=e=>U().isNull(e)?k(ho(`NULL_SHAPE`,`This shape has no type, it is null`)):O(e.ShapeType());function eO(e){if(U().isNull(e))return k(ho(`NULL_SHAPE`,`This shape has no type, it is null`));try{return O(U().downcast(e))}catch(e){return k(ho(`NO_WRAPPER`,`Could not find a wrapper for this shape type`,e))}}function tO(e){if(U().isNull(e))return k(ho(`NULL_SHAPE`,`Cannot copy a null shape`));try{return O(U().copyShape(e))}catch(e){return k(ho(`NO_WRAPPER`,`Could not copy this shape`,e))}}function nO(e){return U().isNull(e)?k(ho(`NULL_SHAPE`,`Cannot cast a null shape`)):O(ME(e))}function rO(e){return U().shapeType(e.wrapped)===`compsolid`}function iO(e){return nO(U().fromBREP(e))}var aO={plane:`PLANE`,cylinder:`CYLINDRE`,cone:`CONE`,sphere:`SPHERE`,torus:`TORUS`,bezier:`BEZIER_SURFACE`,bspline:`BSPLINE_SURFACE`,revolution:`REVOLUTION_SURFACE`,extrusion:`EXTRUSION_SURFACE`,offset:`OFFSET_SURFACE`,other:`OTHER_SURFACE`};function oO(e){return O(aO[mD(e)])}function sO(e){return j(oO(e))}function cO(e){return U().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function lO(e){return ME(U().reverseShape(e.wrapped))}function uO(e){return U().uvBounds(e.wrapped)}function dO(e,t,n){let r=uO(e),i=t*(r.uMax-r.uMin)+r.uMin,a=n*(r.vMax-r.vMin)+r.vMin;return U().pointOnSurface(e.wrapped,i,a)}function fO(e,t){let n=bD(t);return U().uvFromPoint(e.wrapped,n)||[0,0]}function pO(e,t){let n=bD(t);try{let t=n,r=U().uvFromPoint(e.wrapped,t);if(!r)return k(ho(`PROJECTION_FAILED`,`No projection found on the face`));let i=U().projectPointOnFace(e.wrapped,t),a=n[0]-i[0],o=n[1]-i[1],s=n[2]-i[2];return O({uv:r,point:i,distance:Math.sqrt(a*a+o*o+s*s)})}catch(e){return k(ho(`PROJECTION_FAILED`,`Point projection failed: ${e instanceof Error?e.message:String(e)}`))}}function mO(e,t){let n,r;if(t)[n,r]=fO(e,t);else{let t=uO(e);n=.5*(t.uMin+t.uMax),r=.5*(t.vMin+t.vMax)}return U().surfaceNormal(e.wrapped,n,r)}function hO(e){return U().surfaceCenterOfMass(e.wrapped)}function gO(e){return U().getSurfaceAxis(e.wrapped)}function _O(e,t,n=1e-6){let[r,i]=fO(e,t);return U().classifyPointOnFace(e.wrapped,r,i,n)}function vO(e){return ME(U().outerWire(e.wrapped))}function yO(e){return ME(U().removeHolesFromFace(e.wrapped))}function bO(e){let t=vO(e);return Array.from(QD(e.wrapped,`wire`)).map(e=>ME(j(eO(e)))).filter(e=>!U().isSame(e.wrapped,t.wrapped))}function xO(e,t){let n=YE(e),r=U(),i=new Map;for(let n of r.iterShapes(e.wrapped,`face`))i.set(r.hashCode(n,G),t),r.dispose(n);n.faceOrigins=i}function SO(e){return XE(e)?.faceOrigins}function CO(e,t,n){let r=new Map;for(let e of t){let t=SO(e);if(t)for(let[e,n]of t)r.set(e,n)}if(r.size===0)return;let i=new Map;for(let[t,n]of r){if(e.deleted.has(t))continue;let r=e.modified.get(t);if(r&&r.length>0)for(let e of r)i.set(e,n);else i.set(t,n);let a=e.generated.get(t);if(a)for(let e of a)i.has(e)||i.set(e,n)}if(i.size>0){let e=YE(n);e.faceOrigins=i}}var wO=100,TO=.985,EO=.1;function DO(e,t,n,r){let i=-1/0,a;for(let n of r){let r=e[0]*n.normal[0]+e[1]*n.normal[1]+e[2]*n.normal[2];if(r<.707)continue;let o=t[0]-n.centroid[0],s=t[1]-n.centroid[1],c=t[2]-n.centroid[2],l=o*o+s*s+c*c;if(l>wO)continue;let u=r-l/wO;u>i&&(i=u,a=n.origin)}if(a!==void 0)return a;if(!n)return;let o=1/0,s;for(let n of r){if(!n.planar)continue;let r=e[0]*n.normal[0]+e[1]*n.normal[1]+e[2]*n.normal[2];if(Math.abs(r)<TO)continue;let i=t[0]-n.centroid[0],a=t[1]-n.centroid[1],c=t[2]-n.centroid[2],l=i*n.normal[0]+a*n.normal[1]+c*n.normal[2];if(l*l>EO)continue;let u=Math.max(0,i*i+a*a+c*c-l*l);u<o&&(o=u,s=n.origin)}return s}function OO(e,t){let n=new Map;for(let t of e){let e=SO(t);if(e)for(let[t,r]of e)n.set(t,r)}if(n.size===0)return;let r=U(),i=new Map,a=$E(t),o=[];for(let e of a){let t=r.hashCode(e.wrapped,G),a=n.get(t);a===void 0?o.push(e):i.set(t,a)}if(o.length>0){let t=[];for(let n of e){let e=SO(n);if(e)for(let i of $E(n)){let n=r.hashCode(i.wrapped,G),a=e.get(n);if(a!==void 0)try{let e=r.uvBounds(i.wrapped),n=r.surfaceNormal(i.wrapped,.5*(e.uMin+e.uMax),.5*(e.vMin+e.vMax)),o=r.surfaceCenterOfMass(i.wrapped),s=r.surfaceType(i.wrapped)===`plane`;t.push({origin:a,normal:n,centroid:o,planar:s})}catch{}}}if(t.length>0)for(let e of o){let n=r.hashCode(e.wrapped,G);try{let a=r.uvBounds(e.wrapped),o=DO(r.surfaceNormal(e.wrapped,.5*(a.uMin+a.uMax),.5*(a.vMin+a.vMax)),r.surfaceCenterOfMass(e.wrapped),r.surfaceType(e.wrapped)===`plane`,t);o!==void 0&&i.set(n,o)}catch{}}}if(i.size>0){let e=YE(t);e.faceOrigins=i}}var kO=new WeakMap,AO=new WeakMap;function jO(e){return kO.has(e.wrapped)}function MO(e){let t=kO.get(e.wrapped);return t||(t=new Map,kO.set(e.wrapped,t)),t}function NO(e){let t=AO.get(e.wrapped);return t||(t=new Map,AO.set(e.wrapped,t)),t}function PO(e,t,n){let r=Array.isArray(t)?t:$E(e).filter(t),i=MO(e),a=i.get(n)??new Set;for(let e of r)a.add(U().hashCode(e.wrapped,G));return i.set(n,a),e}function FO(e,t){let n=kO.get(e.wrapped);if(!n)return[];let r=n.get(t);if(!r||r.size===0)return[];let i=[];for(let t of $E(e)){let e=U().hashCode(t.wrapped,G);r.has(e)&&i.push(t)}return i}function IO(e){let t=new Map,n=kO.get(e.wrapped);if(!n)return t;let r=$E(e),i=new Map;for(let e of r)i.set(U().hashCode(e.wrapped,G),e);for(let[e,r]of n){let n=[];for(let e of r){let t=i.get(e);t&&n.push(t)}n.length>0&&t.set(e,n)}return t}function LO(e,t,n){return NO(e).set(t,n),e}function RO(e,t){return AO.get(e.wrapped)?.get(t)}function zO(e,t,n){let r=e.get(t)??new Set;r.add(n),e.set(t,r)}function BO(e,t,n){let r=MO(n);for(let i of t){let t=kO.get(i.wrapped);if(!t)continue;let a=new Map;for(let[e,n]of t)for(let t of n){let n=a.get(t)??[];n.push(e),a.set(t,n)}for(let[t,n]of a){if(e.deleted.has(t))continue;let i=e.modified.get(t),a=i&&i.length>0?i:[t];for(let e of a)for(let t of n)zO(r,t,e)}let o=AO.get(i.wrapped);if(o){let e=NO(n);for(let[t,n]of o)e.has(t)||e.set(t,n)}}}var VO=new WeakMap,HO=new WeakMap;function UO(e){return VO.has(e.wrapped)||HO.has(e.wrapped)}function WO(e){let t=HO.get(e.wrapped);return t||(t=new Map,HO.set(e.wrapped,t)),t}function GO(e){if(typeof e==`string`){let t=e.startsWith(`#`)?e.slice(1):e;return t.length===3&&(t=t.charAt(0)+t.charAt(0)+t.charAt(1)+t.charAt(1)+t.charAt(2)+t.charAt(2)),[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,1]}return e.length===3?[e[0],e[1],e[2],1]:[e[0],e[1],e[2],e[3]]}function KO(e,t){return VO.set(e.wrapped,GO(t)),e}function qO(e,t,n){let r=GO(n),i=WO(e);for(let e of t)i.set(U().hashCode(e.wrapped,G),r);return e}function JO(e){return VO.get(e.wrapped)}function YO(e,t){let n=HO.get(e.wrapped);if(n)return n.get(U().hashCode(t.wrapped,G))}function XO(e,t,n){for(let e of t){let t=VO.get(e.wrapped);if(t){VO.set(n.wrapped,t);break}}let r=WO(n);for(let n of t){let t=HO.get(n.wrapped);if(!(!t||t.size===0))for(let[n,i]of t){if(e.deleted.has(n))continue;let t=e.modified.get(n);if(t&&t.length>0)for(let e of t)r.set(e,i);else r.set(n,i)}}}function ZO(e){return SO(e)!==void 0||jO(e)||UO(e)}function QO(e){if(!e.some(ZO))return[];let t=U(),n=[];for(let r of e){let e=t.iterShapes(r.wrapped,`face`);for(let r of e)n.push(t.hashCode(r,G)),t.dispose(r)}return n}function $O(e,t,n){CO(e,t,n),BO(e,t,n),XO(e,t,n)}function ek(e,t){OO(e,t)}function tk(e,t){let n=U(),r=[...n.iterShapes(e.wrapped,`face`)],i=[...n.iterShapes(t.wrapped,`face`)];if(r.length!==i.length)return;let a=new Map;for(let e=0;e<r.length;e++){let t=r[e],o=i[e];t===void 0||o===void 0||a.set(n.hashCode(t,G),[n.hashCode(o,G)])}for(let e of r)n.dispose(e);for(let e of i)n.dispose(e);$O({modified:a,generated:new Map,deleted:new Set},[e],t)}function nk(e,t){let n=QO([e]),{shape:r,evolution:i}=U().translateWithHistory(e.wrapped,t[0],t[1],t[2],n,G),a=W(r);return $O(i,[e],a),a}function rk(e,t,n=[0,0,0],r=[0,0,1]){let i=QO([e]),{shape:a,evolution:o}=U().rotateWithHistory(e.wrapped,t*vD,i,G,r,n),s=W(a);return $O(o,[e],s),s}function ik(e,t=[0,1,0],n=[0,0,0]){let r=QO([e]),{shape:i,evolution:a}=U().mirrorWithHistory(e.wrapped,n,t,r,G),o=W(i);return $O(a,[e],o),o}function ak(e,t,n=[0,0,0]){let r=QO([e]),{shape:i,evolution:a}=U().scaleWithHistory(e.wrapped,n,t,r,G),o=W(i);return $O(a,[e],o),o}function ok(e,t,n){let r=U().boundingBox(e.wrapped),i=[r.max[0]-r.min[0],r.max[1]-r.min[1],r.max[2]-r.min[2]],a=n?.auto===!0;function o(e,t,n){return e!==void 0&&t>1e-12?e/t:e===void 0&&a?n:1}let s=1;a&&(t[0]!==void 0&&i[0]>1e-12?s=t[0]/i[0]:t[1]!==void 0&&i[1]>1e-12?s=t[1]/i[1]:t[2]!==void 0&&i[2]>1e-12&&(s=t[2]/i[2]));let c=[o(t[0],i[0],s),o(t[1],i[1],s),o(t[2],i[2],s)];return Math.abs(c[0]-c[1])<1e-6&&Math.abs(c[1]-c[2])<1e-6?O(ak(e,c[0])):k(F(N.VALIDATION_FAILED,`resize: non-uniform scaling is not supported (WASM build lacks BRepBuilderAPI_GTransform).`,void 0,void 0,`Use auto: true to scale proportionally, or set all three dimensions to achieve uniform scaling.`))}function sk(e){if(`linear`in e)return O({linear:e.linear,translation:e.translation});let[t,n,r,i]=e,a=1e-10;return Math.abs(i[0])>a||Math.abs(i[1])>a||Math.abs(i[2])>a||Math.abs(i[3]-1)>a?k(F(N.VALIDATION_FAILED,`applyMatrix: invalid bottom row [${String(i[0])}, ${String(i[1])}, ${String(i[2])}, ${String(i[3])}]. Must be [0, 0, 0, 1] for an affine transform.`)):O({linear:[t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]],translation:[t[3],n[3],r[3]]})}function ck(e){return e[0]*(e[4]*e[8]-e[5]*e[7])-e[1]*(e[3]*e[8]-e[5]*e[6])+e[2]*(e[3]*e[7]-e[4]*e[6])}function lk(e){let t=1e-8,n=e[0]*e[0]+e[3]*e[3]+e[6]*e[6],r=e[1]*e[1]+e[4]*e[4]+e[7]*e[7],i=e[2]*e[2]+e[5]*e[5]+e[8]*e[8],a=e[0]*e[1]+e[3]*e[4]+e[6]*e[7],o=e[0]*e[2]+e[3]*e[5]+e[6]*e[8],s=e[1]*e[2]+e[4]*e[5]+e[7]*e[8];return!(Math.abs(a)>t||Math.abs(o)>t||Math.abs(s)>t||Math.abs(n-r)>t||Math.abs(n-i)>t)}function uk(e,t){let n=sk(t);if(!n.ok)return n;let{linear:r,translation:i}=n.value,a=ck(r);if(Math.abs(a)<1e-12)return k(F(N.VALIDATION_FAILED,`applyMatrix: singular matrix (determinant ≈ 0). Cannot apply a non-invertible transform.`));if(lk(r)){let t=QO([e]),{shape:n,evolution:a}=U().generalTransformWithHistory(e.wrapped,r,i,!0,t,G),o=W(n);return $O(a,[e],o),O(o)}let o=W(U().generalTransformNonOrthogonal(e.wrapped,r,i));return ek([e],o),O(o)}function dk(e){let t=e.map(e=>e.type===`translate`?{type:`translate`,x:e.v[0],y:e.v[1],z:e.v[2]}:{type:`rotate`,angle:e.angle,axis:e.axis,center:e.center}),{handle:n,dispose:r}=U().composeTransform(t);return{trsf:n,cleanup:r}}function fk(e,t){let{trsf:n,cleanup:r}=dk(`type`in t?[t]:t),i;try{i=W(U().locate(e.wrapped,n))}finally{r()}return ZO(e)&&tk(e,i),i}function pk(e,t){let n=QO([e]),{shape:r,evolution:i}=U().applyComposedTransformWithHistory(e.wrapped,t.trsf,n,G),a=W(r);return $O(i,[e],a),a}function mk(e){return HE(()=>U().copyShape(e.wrapped),N.CLONE_FAILED,`Failed to clone shape`)}function hk(e){return UE(()=>U().toBREP(e.wrapped),N.TO_BREP_FAILED,`Failed to serialize shape to BREP`)}function gk(e){return U().hashCode(e.wrapped,G)}function _k(e){return U().isNull(e.wrapped)}function vk(e,t){return U().isSame(e.wrapped,t.wrapped)}function yk(e,t){return U().isEqual(e.wrapped,t.wrapped)}function bk(e){return HE(()=>U().simplify(e.wrapped),N.SIMPLIFY_FAILED,`Failed to simplify shape`)}function xk(e){return U().curveType(e.wrapped)}function Sk(e){let[t]=U().curveParameters(e.wrapped);return U().curvePointAtParam(e.wrapped,t)}function Ck(e){let[,t]=U().curveParameters(e.wrapped);return U().curvePointAtParam(e.wrapped,t)}function wk(e,t=.5){let[n,r]=U().curveParameters(e.wrapped),i=n+(r-n)*t;return U().curvePointAtParam(e.wrapped,i)}function Tk(e,t=.5){let[n,r]=U().curveParameters(e.wrapped),i=n+(r-n)*t;return U().curveTangent(e.wrapped,i).tangent}function Ek(e){return U().length(e.wrapped)}function Dk(e){if(xk(e)!==`CIRCLE`)return null;let t=wk(e,0),n=wk(e,1/3),r=wk(e,2/3),i=[n[0]-t[0],n[1]-t[1],n[2]-t[2]],a=[r[0]-t[0],r[1]-t[1],r[2]-t[2]],o=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],s=o[0]*o[0]+o[1]*o[1]+o[2]*o[2];if(s<1e-18)return null;let c=i[0]*i[0]+i[1]*i[1]+i[2]*i[2],l=a[0]*a[0]+a[1]*a[1]+a[2]*a[2],u=[c*a[0]-l*i[0],c*a[1]-l*i[1],c*a[2]-l*i[2]],d=[u[1]*o[2]-u[2]*o[1],u[2]*o[0]-u[0]*o[2],u[0]*o[1]-u[1]*o[0]],f=1/(2*s),p=[t[0]+d[0]*f,t[1]+d[1]*f,t[2]+d[2]*f],m=Math.sqrt(s);return{origin:p,direction:[o[0]/m,o[1]/m,o[2]/m]}}function Ok(e){return U().curveIsClosed(e.wrapped)}function kk(e){return U().curveIsPeriodic(e.wrapped)}function Ak(e){return U().curvePeriod(e.wrapped)}function jk(e){return U().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function Mk(e){return W(U().reverseShape(e.wrapped))}function Nk(e,t={}){if(e.length<2)return k(ho(`INTERPOLATE_MIN_POINTS`,`Interpolation requires at least 2 points`));try{let n=W(U().interpolatePoints(e,t));return wE(n)?O(n):(IE(n),k(ho(`INTERPOLATE_NOT_EDGE`,`Interpolation did not produce an edge`)))}catch(e){return k(ho(`INTERPOLATE_FAILED`,`Interpolation failed: ${e instanceof Error?e.message:String(e)}`))}}function Pk(e,t={}){if(e.length<2)return k(ho(`APPROXIMATE_MIN_POINTS`,`Approximation requires at least 2 points`));try{let n=W(U().approximatePoints(e,t));return wE(n)?O(n):(IE(n),k(ho(`APPROXIMATE_NOT_EDGE`,`Approximation did not produce an edge`)))}catch(e){return k(ho(`APPROXIMATE_FAILED`,`Approximation failed: ${e instanceof Error?e.message:String(e)}`))}}function Fk(e,t,n=`arc`){let r=W(U().offsetWire2D(e.wrapped,t,{arc:`arc`,intersection:`intersection`,tangent:`tangent`,chamfer:`intersection`}[n]));return TE(r)?O(r):(IE(r),k(ho(`OFFSET_NOT_WIRE`,`Offset did not produce a Wire`)))}function Ik(e,t,n,r=!1){return`${e}:${t}:${n}:${r}`}function Lk(e,t){return`edge:${e}:${t}`}var Rk=new WeakMap,zk=new WeakMap;function Bk(e,t){let n=Rk.get(e);if(n)return n.get(t)}function Vk(e,t,n){let r=Rk.get(e);r||(r=new Map,Rk.set(e,r)),r.set(t,n)}function Hk(e,t){let n=zk.get(e);if(n)return n.get(t)}function Uk(e,t,n){let r=zk.get(e);r||(r=new Map,zk.set(e,r)),r.set(t,n)}function Wk(){Rk=new WeakMap,zk=new WeakMap}function Gk(){let e=new WeakMap,t=new WeakMap;return{getMesh(t,n){return e.get(t)?.get(n)},setMesh(t,n,r){let i=e.get(t);i||(i=new Map,e.set(t,i)),i.set(n,r)},getEdgeMesh(e,n){return t.get(e)?.get(n)},setEdgeMesh(e,n,r){let i=t.get(e);i||(i=new Map,t.set(e,i)),i.set(n,r)},clear(){e=new WeakMap,t=new WeakMap}}}function Kk(e,t={}){let n=To(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,skipNormals:a=!1,includeUVs:o=!1,cache:s=!0,signal:c}=t;c?.throwIfAborted();let l=Ik(r,i,a,o);if(s){let t=Bk(e.wrapped,l);if(t)return t}let u=U().mesh(e.wrapped,{tolerance:r,angularTolerance:i,skipNormals:a,includeUVs:o,...c?{signal:c}:{}}),d=SO(e),f={vertices:u.vertices,normals:u.normals,triangles:u.triangles,uvs:u.uvs,faceGroups:u.faceGroups.map(e=>({start:e.start,count:e.count,faceId:e.faceHash,origin:d?.get(e.faceHash)??0}))};return s&&Vk(e.wrapped,l,f),f}function qk(e,t={}){let n=To(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,cache:a=!0}=t,o=Lk(r,i);if(a){let t=Hk(e.wrapped,o);if(t)return t}let s=U().meshEdges(e.wrapped,r,i),c={lines:s.lines,edgeGroups:s.edgeGroups.map(e=>({start:e.start,count:e.count,edgeId:e.edgeHash}))};return a&&Uk(e.wrapped,o,c),c}function Jk(e,t){return e instanceof Error&&e.message.startsWith(`${t} export failed`)?vo(`${t}_EXPORT_FAILED`,`Failed to write ${t} file`,e):e instanceof WebAssembly.RuntimeError?vo(`${t}_EXPORT_CRASHED`,`${t} export crashed the kernel (${e.message}); the shape likely contains geometry the ${t} writer cannot serialize`,e):vo(`${t}_FILE_READ_ERROR`,`Failed to read exported ${t} file`,e)}function Yk(e){let t;try{t=nD(e)}catch{return``}if(t.length<=1)return``;let n=[];return t.forEach((e,t)=>{try{fD(e)}catch(e){if(e instanceof TypeError)throw e;n.push(t)}}),n.length===0?`; could not localize the offending sub-solid among ${t.length} solids`:`; offending sub-solid${n.length>1?`s`:``} (of ${t.length}): index ${n.join(`, `)}`}function Xk(e,t){try{return fD(e),null}catch(n){if(n instanceof TypeError)throw n;return vo(`${t}_EXPORT_UNSERIALIZABLE`,`${t} export aborted: the shape contains degenerate geometry the ${t} writer cannot serialize (bounding-box evaluation failed); export was skipped to avoid crashing the kernel${Yk(e)}`,n)}}function Zk(e){let t=Xk(e,`STEP`);if(t)return k(t);try{let t=U().exportSTEP([e.wrapped]);return O(new Blob([t],{type:`application/STEP`}))}catch(e){return k(Jk(e,`STEP`))}}function Qk(e,t={}){let n=To(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,binary:a=!1}=t,o=Xk(e,`STL`);if(o)return k(o);try{U().hasTriangulation(e.wrapped)||U().meshShape(e.wrapped,r,i);let t=U().exportSTL(e.wrapped,a,r,i);return O(new Blob([t],{type:`application/sla`}))}catch(e){return k(Jk(e,`STL`))}}function $k(e){try{let t=U().exportIGES([e.wrapped]);return O(new Blob([t],{type:`application/iges`}))}catch(e){return k(vo(`IGES_EXPORT_FAILED`,`Failed to write IGES file`,e))}}function eA(e,t){let n=t?.coarseTolerance??.5,r=t?.fineTolerance??.05,i=t?.angularTolerance??.5;return{coarse:Kk(e,{tolerance:n,angularTolerance:i}),fine:Kk(e,{tolerance:r,angularTolerance:i*.2})}}function tA(e){let t=fD(e),n=t.xMax-t.xMin,r=t.yMax-t.yMin,i=t.zMax-t.zMin;return Math.sqrt(n*n+r*r+i*i)||1}function nA(e,t){let n;if(t.tolerances&&t.tolerances.length>0)n=[...t.tolerances];else{let r=Math.max(1,Math.floor(t.levels??3)),i=t.spacing??4,a=(t.relativeTolerance??5e-4)*tA(e)||2**-52;n=[];for(let e=r-1;e>=0;e--)n.push(a*i**e)}return n.sort((e,t)=>t-e),n}function rA(e,t,n){return Math.min(e/t*n,1)}function iA(e,t={}){let n=t.angularTolerance??To().angularTolerance,r=t.cache??!0,i=nA(e,t),a=Math.min(...i);return i.map(i=>{let o=rA(i,a,n);return{tolerance:i,angularTolerance:o,mesh:Kk(e,{tolerance:i,angularTolerance:o,cache:r,...t.signal?{signal:t.signal}:{}})}})}function aA(){return new Promise(e=>{setTimeout(e,0)})}async function oA(e,t={}){let n=t.angularTolerance??To().angularTolerance,r=t.cache??!0,i=t.meshLevel??((e,n,i)=>Kk(e,{tolerance:n,angularTolerance:i,cache:r,...t.signal?{signal:t.signal}:{}})),a=nA(e,t),o=Math.min(...a),s=[];for(let[r,c]of a.entries()){if(t.signal?.aborted)break;let l=rA(c,o,n),u;try{u=await i(e,c,l)}catch(e){if(t.signal?.aborted)break;throw e}let d={tolerance:c,angularTolerance:l,mesh:u};if(s.push(d),t.onLevel?.(d,r),t.signal?.aborted||r===a.length-1)break;await aA()}return s}function sA(e,t,n){if(t<0||t>=e.length)throw Error(n??`Index ${t} out of bounds (length ${e.length})`);return e[t]}function cA(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[0]}function lA(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[e.length-1]}function uA(e){return Array.from(Array(e).keys())}function dA(e){return uA(Math.min(...e.map(e=>e.length))).map(t=>e.map(e=>e[t]))}function fA(e,t){return gE(U().makeLineEdge([...e],[...t]))}function pA(e,t=[0,0,0],n=[0,0,1]){return gE(U().makeCircleEdge([...t],[...n],e))}function mA(e,t,n=[0,0,0],r=[0,0,1],i){return t>e?k(F(`ELLIPSE_RADII`,`The minor radius must be smaller than the major one`)):O(gE(U().makeEllipseEdge([...n],[...r],e,t,i?[...i]:void 0)))}function hA(e,t,n,r=[0,0,0],i=[0,0,1],a=!1){return _E(U().makeHelixWire(e,t,n,[...r],[...i],a))}function gA(e,t,n){return gE(U().makeArcEdge([...e],[...t],[...n]))}function _A(e,t,n,r,i=[0,0,0],a=[0,0,1],o){return t>e?k(F(`ELLIPSE_RADII`,`The minor radius must be smaller than the major one`)):O(gE(U().makeEllipseArc([...i],[...a],e,t,n,r,o?[...o]:void 0)))}function vA(e,{tolerance:t=.001,smoothing:n=null,degMax:r=6,degMin:i=1}={}){try{let a=e.map(e=>[...e]);return O(gE(U().approximatePoints(a,{tolerance:t,degMin:i,degMax:r,smoothing:n})))}catch(e){return k(P(`BSPLINE_FAILED`,`B-spline approximation failed`,e))}}function yA(e,{periodic:t=!1,tolerance:n=1e-7}={}){try{let r=e.map(e=>[...e]);return O(gE(U().interpolatePoints(r,{periodic:t,tolerance:n})))}catch(e){return k(P(`BSPLINE_INTERP_FAILED`,`B-spline interpolation failed`,e))}}function bA(e){if(e.length<2)return k(F(`BEZIER_MIN_POINTS`,`Need at least 2 points for a Bezier curve, got ${e.length}`,void 0,{pointCount:e.length}));let t=e.map(e=>[...e]);return O(gE(U().makeBezierEdge(t)))}function xA(e,t,n){return gE(U().makeTangentArc([...e],[...t],[...n]))}function SA(e){try{return O(_E(U().makeWireFromMixed(e.map(e=>e.wrapped))))}catch(e){return k(P(`WIRE_BUILD_FAILED`,`Failed to build the wire: ${e instanceof Error?e.message:`unknown error`}`))}}function CA(e,t){try{let n=U().makeFace(e.wrapped,!0);if(t&&t.length>0){let e=DA(vE(n),t);return uE(e)?O(e):k(F(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}let r=vE(n);return uE(r)?O(r):k(F(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}catch(e){return k(P(`FACE_BUILD_FAILED`,`Failed to build the face. Your wire might be non planar.`,e))}}function wA(e){return CA(vO(e))}function TA(e,t){return vE(U().makeFaceOnSurface(e.wrapped,t.wrapped))}function EA(e){try{return Ha(nO(U().makeNonPlanarFace(e.wrapped)),e=>EE(e)?O(e):k(P(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`)))}catch(e){return k(P(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`,e))}}function DA(e,t){return vE(U().addHolesInFace(e.wrapped,t.map(e=>e.wrapped)))}function OA(e){try{var t=OT();if(e.length<3)return k(F(`POLYGON_MIN_POINTS`,`You need at least 3 points to make a polygon`));let n=[...e.slice(1),e[0]],r=t.u(new VT);return Ha(SA(dA([e,n]).map(([e,t])=>r.register(fA(e,t)))),e=>CA(r.register(e)))}catch(e){t.e=e}finally{t.d()}}function kA(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function AA(e,t,n,r,i){let a=ME(e);if(!AE(a)){let o=tE(a).toUpperCase();return PE(e,a),IE(a),k(ho(t,`${n}. Got ${o} instead.`,void 0,i?{diagnostics:i}:void 0,r))}return PE(e,a),O(a)}function jA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;let c=kA(e,`fuse: first operand`);if(A(c))return c;let l=kA(t,`fuse: second operand`);if(A(l))return l;if(!s)return AA(U().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);let u=QO([e,t]),{shape:d,evolution:f,diagnostics:p}=U().fuseWithHistory(e.wrapped,t.wrapped,u,G,{optimisation:n,simplify:r,fuzzyValue:a});if(p.hasErrors){if(U().isNull(d))return U().dispose(d),console.warn(`brepjs: fuse history path produced null result; retrying without evolution tracking.`,p),AA(U().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);console.warn(`brepjs: fuse reported OCCT warnings/errors but produced a shape. Continuing with result.`,p)}let m=AA(d,`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`,`Common causes: overlapping coplanar faces, zero-thickness geometry, or non-manifold input. Try autoHeal() on inputs first.`,p);return m.ok&&$O(f,[e,t],m.value),m}function MA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;let c=kA(e,`cut: base`);if(A(c))return c;let l=kA(t,`cut: tool`);if(A(l))return l;if(!s)return AA(U().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);let u=QO([e,t]),{shape:d,evolution:f,diagnostics:p}=U().cutWithHistory(e.wrapped,t.wrapped,u,G,{optimisation:n,simplify:r,fuzzyValue:a});if(p.hasErrors){if(U().isNull(d))return U().dispose(d),console.warn(`brepjs: cut history path produced null result; retrying without evolution tracking.`,p),AA(U().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);console.warn(`brepjs: cut reported OCCT warnings/errors but produced a shape. Continuing with result.`,p)}let m=AA(d,`CUT_NOT_3D`,`Cut did not produce a 3D shape`,`Common causes: tool does not fully intersect the base, or produces a zero-thickness sliver. Ensure the tool extends through the shape.`,p);return m.ok&&$O(f,[e,t],m.value),m}function NA(e,t,{simplify:n=!1,signal:r,fuzzyValue:i,unsafe:a,trackEvolution:o=!0}={}){if(r?.aborted)throw r.reason;let s=kA(e,`intersect: first operand`);if(A(s))return s;let c=kA(t,`intersect: second operand`);if(A(c))return c;if(!o)return AA(U().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);let l=QO([e,t]),{shape:u,evolution:d,diagnostics:f}=U().intersectWithHistory(e.wrapped,t.wrapped,l,G,{simplify:n,fuzzyValue:i});if(f.hasErrors){if(U().isNull(u))return U().dispose(u),console.warn(`brepjs: intersect history path produced null result; retrying without evolution tracking.`,f),AA(U().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);console.warn(`brepjs: intersect reported OCCT warnings/errors but produced a shape. Continuing with result.`,f)}let p=AA(u,`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`,`Shapes may not overlap. Verify they share a common volume before intersecting.`,f);return p.ok&&$O(d,[e,t],p.value),p}function PA(e,t,n,r,i,a,o,s){if(o?.aborted)throw o.reason;let c=n-t;if(c===1)return O(sA(e,t));if(c===2)return jA(sA(e,t),sA(e,t+1),{optimisation:r,simplify:!1,trackEvolution:a,fuzzyValue:s,unsafe:!0,...o?{signal:o}:{}});let l=t+Math.ceil(c/2),u=PA(e,t,l,r,i,a,o,s);if(A(u))return u;let d=PA(e,l,n,r,i,a,o,s);return A(d)?d:jA(u.value,d.value,{optimisation:r,simplify:i,trackEvolution:a,fuzzyValue:s,unsafe:!0,...o?{signal:o}:{}})}function FA(e,{optimisation:t=`none`,simplify:n=!1,strategy:r=`native`,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;if(e.length===0)return k(F(`FUSE_ALL_EMPTY`,`fuseAll requires at least one shape`));if(e.length===1)return O(cA(e));for(let t=0;t<e.length;t++){let n=kA(sA(e,t),`fuseAll: shape at index ${t}`);if(A(n))return n}if(r===`native`){let o=AA(U().fuseAll(e.map(e=>e.wrapped),{optimisation:t,simplify:n,strategy:r,fuzzyValue:a,...i?{signal:i}:{}}),`FUSE_ALL_NOT_3D`,`fuseAll did not produce a 3D shape`);return o.ok&&s&&ek(e,o.value),o}return PA(e,0,e.length,t,n,s,i,a)}function IA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;if(t.length===0)return O(e);let c=kA(e,`cutAll: base`);if(A(c))return c;for(let e=0;e<t.length;e++){let n=kA(sA(t,e),`cutAll: tool at index ${e}`);if(A(n))return n}let l=[e,...t],u=AA(U().cutAll(e.wrapped,t.map(e=>e.wrapped),{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_ALL_NOT_3D`,`cutAll did not produce a 3D shape`);return u.ok&&s&&ek(l,u.value),u}function LA(e,t){let n=U(),r=ED(e.xDir,t),i=ED(e.yDir,t),a=ED(e.xDir,-t),o=ED(e.yDir,-t),s=e.origin,c=[...wD(wD(s,a),o)],l=[...wD(wD(s,r),o)],u=[...wD(wD(s,r),i)],d=[...wD(wD(s,a),i)],f=[n.makeLineEdge(c,l),n.makeLineEdge(l,u),n.makeLineEdge(u,d),n.makeLineEdge(d,c)],p=n.makeWire(f),m=n.makeFace(p,!0);for(let e of f)n.dispose(e);return n.dispose(p),m}function RA(e,t,{approximation:n=!0,planeSize:r=1e4}={}){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`section: shape is a null shape`));let i=LA(typeof t==`string`?j(WD(t)):t,r);try{return O(W(U().section(e.wrapped,i,n)))}catch(e){let n=e instanceof Error?e.message:String(e),r=typeof t==`string`?t:`custom`;return k(P(`SECTION_FAILED`,`Section with ${r} plane failed: ${n}`,e,{operation:`section`,plane:r},`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`))}finally{U().dispose(i)}}function zA(e){let t=U(),n=new Map,r=new Map;for(let i of e){let e=tD(i),a=e[0]?t.hashCode(e[0].wrapped,G):-1,o=e.length>1&&e[1]?t.hashCode(e[1].wrapped,G):a;r.set(i,[a,o]);for(let e of[a,o]){let t=n.get(e)??[];t.push(i),n.set(e,t)}}return{vertexToEdges:n,edgeVertexHashes:r}}function BA(e,t,n){let r=t.vertexToEdges.get(e);if(r)for(let i of r){if(n.has(i))continue;let r=t.edgeVertexHashes.get(i);if(r)return n.add(i),{edge:i,nextTip:r[0]===e?r[1]:r[0]}}}function VA(e,t,n){n.add(e);let r=[e],i=t.edgeVertexHashes.get(e);if(!i)return r;let a=[i[1],i[0]];for(let e=0;e<2;e++){let i=a[e];if(i===void 0)continue;let o=BA(i,t,n);for(;o;)e===0?r.push(o.edge):r.unshift(o.edge),i=o.nextTip,o=BA(i,t,n)}return r}function HA(e){let t=U(),n=zA(e),r=new Set,i=[];for(let a of e){if(r.has(a))continue;let e=VA(a,n,r);try{let n=t.makeWire(e.map(e=>e.wrapped));i.push(W(n))}catch{}}return i}function UA(e){let t=U(),n=0,r=-1;for(let i=0;i<e.length;i++){let a=e[i];if(!a)continue;let o=t.boundingBox(a.wrapped),s=o.max[0]-o.min[0],c=o.max[1]-o.min[1],l=o.max[2]-o.min[2],u=s*s+c*c+l*l;u>r&&(r=u,n=i)}return n}function WA(e,t,n={}){let r=RA(e,t,n);if(!r.ok)return r;let i=eD(r.value);if(i.length===0){let e=QE(r.value);if(e.length===0)return k(P(`SECTION_FAILED`,`sectionToFace: section produced no geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));i.push(...HA(e))}if(i.length===0)return k(P(`SECTION_FAILED`,`sectionToFace: section produced no usable geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));let a=UA(i),o=sA(i,a),s=i.filter((e,t)=>t!==a);return CA(o,s.length>0?s:void 0)}function GA(e,t){if(t.length===0)return O(e);if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`split: shape is a null shape`));for(let e=0;e<t.length;e++)if(U().isNull(sA(t,e).wrapped))return k(F(N.NULL_SHAPE_INPUT,`splitShape: tool at index ${e} is a null shape`));try{return O(W(U().split(e.wrapped,t.map(e=>e.wrapped))))}catch(e){let n=e instanceof Error?e.message:String(e);return k(P(`SPLIT_FAILED`,`Split operation failed on ${t.length} tool(s): ${n}`,e,{operation:`split`,toolCount:t.length},`The splitting tools may not intersect the shape. Ensure tools cross through the shape's interior.`))}}function KA(e,t,n={}){let r=[];for(let i of t){let t=RA(e,i,n);if(A(t))return t;r.push(t.value)}return O(r)}function qA(e,t,n){if(t.length===0)return O(e);let r=n?.optimisation===`commonFace`?1:n?.optimisation===`sameFace`?2:0,i=U(),a=t.map(e=>({op:e.op,tool:e.tool.wrapped}));try{let o=i.booleanPipeline?.(e.wrapped,a,{glueMode:r});if(o===void 0)return JA(e,t,n);if(o===null)return k(P(`BOOLEAN_PIPELINE_FAILED`,`Boolean pipeline returned null shape`));let s=W(o);return AE(s)?O(s):(IE(s),k(ho(`BOOLEAN_PIPELINE_NOT_3D`,`Pipeline result is not a 3D shape`)))}catch(e){return k(P(`BOOLEAN_PIPELINE_FAILED`,e instanceof Error?e.message:String(e)))}}function JA(e,t,n){let r=e,i={...n?.optimisation?{optimisation:n.optimisation}:{},unsafe:!0};for(let e of t){let t=e.op===`fuse`?jA(r,e.tool,i):e.op===`cut`?MA(r,e.tool,i):NA(r,e.tool,i);if(A(t))return t;r=j(t)}return O(r)}function YA(e){return W(U().sew(e.map(e=>e.wrapped)))}function XA(e,t=!1){let n=YA(e);return!t&&!DE(n)?k(ho(`WELD_NOT_SHELL`,`Could not make a shell from faces and shells`)):O(n)}function ZA(e,t,n=[0,0,0],r=[0,0,1]){return bE(U().makeCylinder(e,t,[...n],[...r]))}function QA(e){return bE(U().makeSphere(e))}function $A(e,t,n,r=[0,0,0],i=[0,0,1]){return bE(U().makeCone(e,t,n,[...r],[...i]))}function ej(e,t,n=[0,0,0],r=[0,0,1]){return bE(U().makeTorus(e,t,[...n],[...r]))}function tj(e,t,n){return bE(U().makeEllipsoid(e,t,n))}function nj(e){return hE(U().makeVertex(e[0],e[1],e[2]))}function rj(e,t,n=1e-6){return Ha(eO(U().offset(e.wrapped,t,n)),e=>Ha(nO(e),e=>AE(e)?O(e):k(ho(`OFFSET_NOT_3D`,`Could not offset to a 3d shape`))))}function ij(e){return SE(U().makeCompound(e.map(e=>e.wrapped)))}function aj(e){try{var t=OT();let n=t.u(YA(e)),r=W(U().solidFromShell(n.wrapped));return OE(r)?O(r):(IE(r),k(ho(`SOLID_BUILD_FAILED`,`Could not make a solid of faces and shells`)))}catch(e){t.e=e}finally{t.d()}}function oj(e){return{position:e.vertices,normal:e.normals,index:e.triangles}}function sj(e){return{position:e.vertices,normal:e.normals,index:e.triangles,groups:e.faceGroups.map((e,t)=>({start:e.start,count:e.count,materialIndex:t,faceId:e.faceId}))}}function cj(e){return{position:e.lines}}function lj(e,t){return{coarse:oj(e.coarse),fine:oj(e.fine),coarseDistance:t?.coarse??50,fineDistance:t?.fine??0}}function uj(e,t){let n=t?.step??50,r=t?.distances;if(r&&r.length!==e.length)throw Error(`toLODGeometryLevels: distances must have one entry per level (got ${r.length} for ${e.length} levels)`);let i=e.length-1;return e.map((e,t)=>({geometry:oj(e.mesh),distance:r?.[t]??(i-t)*n}))}function dj(e,t,n,r){if(t.length===0)return k(F(`CHAMFER_ANGLE_NO_EDGES`,`chamferDistAngle requires at least one edge`,void 0,{edgeCount:0}));if(n<=0)return k(F(`CHAMFER_ANGLE_BAD_DISTANCE`,`distance must be positive, got ${n}`,void 0,{distance:n}));if(r<=0||r>=90)return k(F(`CHAMFER_ANGLE_BAD_ANGLE`,`angleDeg must be in range (0, 90), got ${r}`,void 0,{angleDeg:r}));let i;try{let a=U(),o=t.map(e=>e.wrapped);i=a.chamferDistAngle(e.wrapped,o,n,r)}catch(e){return k(P(`CHAMFER_ANGLE_FAILED`,`chamferDistAngle kernel call failed: ${e instanceof Error?e.message:String(e)}`,e,{distance:n,angleDeg:r,edgeCount:t.length}))}let a=eO(i);if(A(a))return U().dispose(i),a;let o=W(a.value);return PE(i,o),AE(o)?O(o):(IE(o),k(ho(`CHAMFER_ANGLE_NOT_3D`,`chamferDistAngle did not produce a 3D shape`)))}function fj(e){let t=U();return t.getNurbsCurveData?t.getNurbsCurveData(e.wrapped):null}function pj(e){let t=U();return t.getNurbsSurfaceData?t.getNurbsSurfaceData(e.wrapped):null}var mj={cut:MA,cutAll:IA,fuse:jA,fuseAll:FA};function hj(e){return{totalInputs:e.totalInputs,batchAttempts:e.batchAttempts,batchSucceeded:e.batchSucceeded,singletonFallbacks:e.singletonFallbacks,failedInputs:[...e.failedInputs].sort((e,t)=>e-t)}}function gj(e,t,n={}){return _j(mj,e,t,n)}function _j(e,t,n,r={}){if(r.signal?.aborted)throw r.signal.reason;let i={totalInputs:n.length,batchAttempts:0,batchSucceeded:0,singletonFallbacks:0,failedInputs:new Set},a=vj(e,t,n,0,r,i);return A(a)?a:O({shape:a.value,telemetry:hj(i)})}function vj(e,t,n,r,i,a){if(n.length===0)return O(t);if(n.length===1)return yj(e,t,n,r,i,a);a.batchAttempts++;let o=wj(()=>e.cutAll(t,n,i));if(o&&o.ok)return a.batchSucceeded++,o;if(i.signal?.aborted)throw i.signal.reason;let s=Math.floor(n.length/2),c=vj(e,t,n.slice(0,s),r,i,a);return c.ok?vj(e,c.value,n.slice(s),r+s,i,a):c}function yj(e,t,n,r,i,a){a.singletonFallbacks++;let o=cA(n),s=wj(()=>e.cut(t,o,i));if(s&&s.ok)return s;if(i.signal?.aborted)throw i.signal.reason;return a.failedInputs.add(r),O(t)}function bj(e,t={}){return xj(mj,e,t)}function xj(e,t,n={}){if(n.signal?.aborted)throw n.signal.reason;if(t.length===0)return k(F(N.FUSE_ALL_EMPTY,`fuseAllBisect requires at least one shape`));let r={totalInputs:t.length,batchAttempts:0,batchSucceeded:0,singletonFallbacks:0,failedInputs:new Set},i=Sj(e,t,0,n,r);return A(i)?i:O({shape:i.value,telemetry:hj(r)})}function Sj(e,t,n,r,i){if(t.length===1)return O(cA(t));i.batchAttempts++;let a=wj(()=>e.fuseAll(t,r));if(a&&a.ok)return i.batchSucceeded++,a;if(r.signal?.aborted)throw r.signal.reason;let o=Math.floor(t.length/2);return Cj(e,Sj(e,t.slice(0,o),n,r,i),Sj(e,t.slice(o),n+o,r,i),t,n,o,r,i)}function Cj(e,t,n,r,i,a,o,s){if(t.ok&&n.ok){s.singletonFallbacks++;let c=wj(()=>e.fuse(t.value,n.value,o));if(c&&c.ok)return c;for(let e=a;e<r.length;e++)s.failedInputs.add(i+e);return t}if(t.ok){for(let e=a;e<r.length;e++)s.failedInputs.add(i+e);return t}if(n.ok){for(let e=0;e<a;e++)s.failedInputs.add(i+e);return n}return t}function wj(e){try{return e()}catch{return null}}function Tj(e,t,n){return U().checkBoolean(e.wrapped,t.wrapped,n)}function Ej(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Dj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Oj(e,t,n,r){let i=ME(e);if(!AE(i)){let a=tE(i).toUpperCase();return PE(e,i),IE(i),k(ho(t,`${n}. Got ${a} instead.`,void 0,void 0,r))}return PE(e,i),O(i)}function kj(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>r.get(U().hashCode(e,2147483647))??1}}function Aj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=Ej(e,`fuseWithEvolution: first operand`);if(A(o))return o;let s=Ej(t,`fuseWithEvolution: second operand`);if(A(s))return s;let c=QO([e,t]),{shape:l,evolution:u}=U().fuseWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=Oj(l,`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`,`Common causes: overlapping coplanar faces, zero-thickness geometry, or non-manifold input. Try autoHeal() on inputs first.`);return d.ok?($O(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function jj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=Ej(e,`cutWithEvolution: base`);if(A(o))return o;let s=Ej(t,`cutWithEvolution: tool`);if(A(s))return s;let c=QO([e,t]),{shape:l,evolution:u}=U().cutWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=Oj(l,`CUT_NOT_3D`,`Cut did not produce a 3D shape`,`Common causes: tool does not fully intersect the base, or produces a zero-thickness sliver. Ensure the tool extends through the shape.`);return d.ok?($O(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function Mj(e,t,{simplify:n=!1,signal:r,fuzzyValue:i}={}){if(r?.aborted)throw r.reason;let a=Ej(e,`intersectWithEvolution: first operand`);if(A(a))return a;let o=Ej(t,`intersectWithEvolution: second operand`);if(A(o))return o;let s=QO([e,t]),{shape:c,evolution:l}=U().intersectWithHistory(e.wrapped,t.wrapped,s,G,{simplify:n,fuzzyValue:i}),u=Oj(c,`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`,`Shapes may not overlap. Verify they share a common volume before intersecting.`);return u.ok?($O(l,[e,t],u.value),O({shape:u.value,evolution:l})):u}function Nj(e,t,n){let r=Dj(e,`filletWithEvolution: shape`);if(A(r))return r;if(typeof n==`number`&&n<=0)return k(F(`INVALID_FILLET_RADIUS`,`Fillet radius must be positive`,void 0,void 0,`Provide a positive radius value greater than 0`));if(Array.isArray(n)&&(n[0]<=0||n[1]<=0))return k(F(`INVALID_FILLET_RADIUS`,`Fillet radii must both be positive`,void 0,void 0,`Both radius values must be greater than 0`));let i=t??QE(e);if(i.length===0)return k(F(N.FILLET_NO_EDGES,`No edges found for fillet`,void 0,void 0,`Check that the shape has edges, or adjust your edge finder criteria`));try{let t,r;if(typeof n==`function`){let e=kj(i,n);if(!e)return k(F(N.FILLET_NO_EDGES,`No edges with positive radius for fillet`,void 0,void 0,`Check that the radius callback returns positive values`));t=e.edges,r=e.kernelParam}else t=[...i],r=n;let a=QO([e]),{shape:o,evolution:s}=U().filletWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=W(o);return AE(c)?($O(s,[e],c),O({shape:c,evolution:s})):(IE(c),k(P(N.FILLET_NOT_3D,`Fillet result is not a 3D shape`)))}catch(e){return k(P(`FILLET_FAILED`,`Fillet operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`fillet`,edgeCount:i.length,radius:n}))}}function Pj(e,t,n){let r=Dj(e,`chamferWithEvolution: shape`);if(A(r))return r;if(typeof n==`number`&&n<=0)return k(F(`INVALID_CHAMFER_DISTANCE`,`Chamfer distance must be positive`,void 0,void 0,`Provide a positive distance value greater than 0`));if(Array.isArray(n)&&(n[0]<=0||n[1]<=0))return k(F(`INVALID_CHAMFER_DISTANCE`,`Chamfer distances must both be positive`,void 0,void 0,`Both distance values must be greater than 0`));let i=t??QE(e);if(i.length===0)return k(F(N.CHAMFER_NO_EDGES,`No edges found for chamfer`));try{let t,r;if(typeof n==`function`){let e=kj(i,n);if(!e)return k(F(N.CHAMFER_NO_EDGES,`No edges with positive distance for chamfer`));t=e.edges,r=e.kernelParam}else t=[...i],r=n;let a=QO([e]),{shape:o,evolution:s}=U().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=W(o);return AE(c)?($O(s,[e],c),O({shape:c,evolution:s})):(IE(c),k(P(N.CHAMFER_NOT_3D,`Chamfer result is not a 3D shape`)))}catch(e){return k(P(`CHAMFER_FAILED`,`Chamfer operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`chamfer`,edgeCount:i.length,distance:n}))}}function Fj(e,t,n,r=.001){let i=Dj(e,`shellWithEvolution: shape`);if(A(i))return i;if(n<=0)return k(F(`INVALID_THICKNESS`,`Shell thickness must be positive`));if(t.length===0)return k(F(`NO_FACES`,`At least one face must be specified for shell`));try{let i=QO([e]),{shape:a,evolution:o}=U().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,i,G,r),s=W(a);return AE(s)?($O(o,[e],s),O({shape:s,evolution:o})):(IE(s),k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`)))}catch(e){return k(P(`SHELL_FAILED`,`Shell operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`shell`,faceCount:t.length,thickness:n}))}}function Ij(e,t,n){try{let r=W(U().positionOnCurve(e.wrapped,t.wrapped,n));return AE(r)?O(r):(IE(r),k(P(N.POSITION_ON_CURVE_FAILED,`positionOnCurve did not produce a 3D shape`)))}catch(e){return k(P(N.POSITION_ON_CURVE_FAILED,`Failed to position shape on curve at param ${n}`,e))}}function Lj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Rj(e,t){if(typeof e==`number`&&e<=0)return k(F(t.code,t.scalar,void 0,void 0,t.scalarHint));if(Array.isArray(e)&&(e[0]<=0||e[1]<=0))return k(F(t.code,t.pair,void 0,void 0,t.pairHint))}function zj(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>{let t=r.get(U().hashCode(e,G));if(t===void 0)throw Error(`fillet/chamfer: edge hash not found — possible hash collision`);return t}}}function Bj(e,t,n,r,i){let a=W(t);return AE(a)?($O(e,n,a),O(a)):(IE(a),k(P(r,i)))}function Vj(e,t){if(typeof t!=`function`)return{filteredFaces:[...e],kernelAngle:t};let n=[],r=new Map;for(let i of e){let e=t(i);e===null||e===0||Math.abs(e)>=90||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return{filteredFaces:n,kernelAngle:e=>{let t=r.get(U().hashCode(e,G));if(t===void 0)throw Error(`draft: face hash not found — possible hash collision`);return t}}}function Hj(e,t){let n=Lj(e,`thicken: shape`);if(A(n))return n;try{let n=QO([e]),{shape:r,evolution:i}=U().thickenWithHistory(e.wrapped,t,n,G),a=W(r);return $O(i,[e],a),O(a)}catch(e){return k(P(`THICKEN_FAILED`,`Thicken operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function Uj(e,t,n){let r=Lj(e,`fillet: shape`);if(A(r))return r;let i=Rj(n,{code:`INVALID_FILLET_RADIUS`,scalar:`Fillet radius must be positive`,pair:`Fillet radii must both be positive`,scalarHint:`Provide a positive radius value greater than 0`,pairHint:`Both radius values must be greater than 0`});if(i)return i;let a=t??QE(e);if(a.length===0)return k(F(N.FILLET_NO_EDGES,`No edges found for fillet`,void 0,void 0,`Check that the shape has edges, or adjust your edge finder criteria`));if(typeof n==`function`){let e=zj(a,n);return e?O({filteredEdges:e.edges,kernelRadius:e.kernelParam,selectedCount:a.length}):k(F(N.FILLET_NO_EDGES,`No edges with positive radius for fillet`,void 0,void 0,`Check that the radius callback returns positive values`))}return O({filteredEdges:[...a],kernelRadius:n,selectedCount:a.length})}function Wj(e,t,n,{trackEvolution:r=!0}={}){let i=Uj(e,t,n);if(A(i))return i;let{filteredEdges:a,kernelRadius:o,selectedCount:s}=i.value;try{let t=a.map(e=>e.wrapped);if(!r){let n=W(U().fillet(e.wrapped,t,o));return AE(n)?O(n):k(P(N.FILLET_NOT_3D,`Fillet result is not a 3D shape`))}let n=QO([e]),{shape:i,evolution:s}=U().filletWithHistory(e.wrapped,t,o,n,G);return Bj(s,i,[e],N.FILLET_NOT_3D,`Fillet result is not a 3D shape`)}catch(e){return k(P(`FILLET_FAILED`,`Fillet operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`fillet`,edgeCount:s,radius:n}))}}function Gj(e,t,n){let r=Lj(e,`chamfer: shape`);if(A(r))return r;let i=Rj(n,{code:`INVALID_CHAMFER_DISTANCE`,scalar:`Chamfer distance must be positive`,pair:`Chamfer distances must both be positive`,scalarHint:`Provide a positive distance value greater than 0`,pairHint:`Both distance values must be greater than 0`});if(i)return i;let a=t??QE(e);if(a.length===0)return k(F(N.CHAMFER_NO_EDGES,`No edges found for chamfer`));try{let t,r;if(typeof n==`function`){let e=zj(a,n);if(!e)return k(F(N.CHAMFER_NO_EDGES,`No edges with positive distance for chamfer`));t=e.edges,r=e.kernelParam}else t=[...a],r=n;let i=QO([e]),{shape:o,evolution:s}=U().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,i,G);return Bj(s,o,[e],N.CHAMFER_NOT_3D,`Chamfer result is not a 3D shape`)}catch(e){return k(P(`CHAMFER_FAILED`,`Chamfer operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`chamfer`,edgeCount:a.length,distance:n}))}}function Kj(e,t,n,r=.001,{trackEvolution:i=!0}={}){let a=Lj(e,`shell: shape`);if(A(a))return a;if(n<=0)return k(F(`INVALID_THICKNESS`,`Shell thickness must be positive`));if(t.length===0)return k(F(`NO_FACES`,`At least one face must be specified for shell`));try{if(!i){let i=W(U().shell(e.wrapped,t.map(e=>e.wrapped),n,r));return AE(i)?O(i):k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`))}let a=QO([e]),{shape:o,evolution:s}=U().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,a,G,r),c=W(o);return AE(c)?($O(s,[e],c),O(c)):k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`))}catch(e){return k(P(`SHELL_FAILED`,`Shell operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`shell`,faceCount:t.length,thickness:n}))}}function qj(e,t,n=1e-6){let r=Lj(e,`offset: shape`);if(A(r))return r;if(Math.abs(t)<1e-10)return k(F(`ZERO_OFFSET`,`Offset distance cannot be zero`));try{let r=QO([e]),{shape:i,evolution:a}=U().offsetWithHistory(e.wrapped,t,r,G,n),o=W(i);return AE(o)?($O(a,[e],o),O(o)):k(P(`OFFSET_RESULT_NOT_3D`,`Offset result is not a 3D shape`))}catch(e){return k(P(`OFFSET_FAILED`,`Offset operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function Jj(e,t,n){let r=Lj(e,`draft: shape`);if(A(r))return r;if(typeof n==`number`){if(Math.abs(n)<1e-10)return k(F(N.DRAFT_INVALID_ANGLE,`Draft angle cannot be zero`,void 0,void 0,`Provide a non-zero angle in degrees`));if(Math.abs(n)>=90)return k(F(N.DRAFT_INVALID_ANGLE,`Draft angle must be between -90 and 90 degrees (exclusive)`,void 0,void 0,`Typical draft angles are 1-5 degrees for injection molding`))}if(t.length===0)return k(F(N.DRAFT_NO_FACES,`No faces specified for draft`,void 0,void 0,`Select at least one face to apply the draft angle to`))}function Yj(e,t,n,r,i){let a=Jj(e,t,i);if(a)return a;try{let{filteredFaces:a,kernelAngle:o}=Vj(t,i);if(a.length===0)return k(F(N.DRAFT_NO_FACES,`No faces with valid draft angle`,void 0,void 0,`Check that the angle callback returns non-zero values between -90 and 90 degrees`));let s=QO([e]),{shape:c,evolution:l}=U().draftWithHistory(e.wrapped,a.map(e=>e.wrapped),[n[0],n[1],n[2]],[r[0],r[1],r[2]],o,s,G);return Bj(l,c,[e],N.DRAFT_NOT_3D,`Draft result is not a 3D shape`)}catch(e){let n=e instanceof Error?e.message:String(e);return k(P(N.DRAFT_FAILED,`Draft operation failed: ${n}`,e,{operation:`draft`,faceCount:t.length,angle:i}))}}function Xj(e,t,n){if(n.length===0)return k(F(N.VARIABLE_FILLET_FAILED,`radii must contain at least one radius spec`));for(let e of n)if(e.radius<=0)return k(F(N.VARIABLE_FILLET_FAILED,`All radius values must be positive`));let r=U();try{let i=JSON.stringify({edge:r.hashCode(t.wrapped,G),radii:n.map(e=>({param:e.param,radius:e.radius}))}),a=W(r.filletVariable(e.wrapped,i));return AE(a)?OE(a)?O(a):(IE(a),k(P(N.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a solid`))):(IE(a),k(P(N.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a 3D shape`)))}catch(e){return k(P(N.VARIABLE_FILLET_FAILED,`Variable-radius fillet failed`,e))}}function Zj(e){return hD(e)}function Qj(e){if(!OE(e))return k(F(`NOT_A_SOLID`,`Input shape is not a solid`));let t=Zj(e);try{let n=U().healSolid(e.wrapped);if(!n)return t?O(e):k(P(N.HEAL_NO_EFFECT,`Solid healing had no effect — shape is still invalid`));let r=W(n);return OE(r)?(ZE(r),Zj(r)?O(r):(IE(r),k(P(`HEAL_SOLID_INCOMPLETE`,`Healed result is still invalid after ShapeFix_Solid`)))):(IE(r),k(P(`HEAL_RESULT_NOT_SOLID`,`Healed result is not a solid`)))}catch(e){return k(P(`HEAL_SOLID_FAILED`,`Solid healing failed`,e))}}function $j(e){if(!EE(e))return k(F(`NOT_A_FACE`,`Input shape is not a face`));try{let t=W(U().healFace(e.wrapped));return EE(t)?O(t):(IE(t),k(P(`HEAL_RESULT_NOT_FACE`,`Healed result is not a face`)))}catch(e){return k(P(`HEAL_FACE_FAILED`,`Face healing failed`,e))}}function eM(e,t){if(!TE(e))return k(F(`NOT_A_WIRE`,`Input shape is not a wire`));try{let n=W(U().healWire(e.wrapped,t?.wrapped));return TE(n)?O(n):(IE(n),k(P(`HEAL_RESULT_NOT_WIRE`,`Healed result is not a wire`)))}catch(e){return k(P(`HEAL_WIRE_FAILED`,`Wire healing failed`,e))}}function tM(e){return OE(e)?Qj(e):EE(e)?$j(e):TE(e)?eM(e):O(e)}function nM(e,t){let n=t?.fixWires!==!1,r=t?.fixFaces!==!1,i=t?.fixSolids!==!1,a=t?.fixSelfIntersection===!0,o=t?.sewTolerance,s=[],c=[];if(Zj(e))return O({shape:e,report:{isValid:!0,alreadyValid:!0,wiresHealed:0,facesHealed:0,solidHealed:!1,steps:[`Shape already valid`],diagnostics:[{name:`validation`,attempted:!0,succeeded:!0}]}});s.push(`Shape invalid — applying shape-level healing`);let l=eD(e).length,u=$E(e).length,d=e,f=!1,p=t=>{let n=d;d=t,n!==e&&n.wrapped!==t.wrapped&&IE(n)};if(o!==void 0)try{p(W(U().sew([d.wrapped],o))),s.push(`Applied sewing with tolerance ${o}`),c.push({name:`sew`,attempted:!0,succeeded:!0,detail:`tolerance=${o}`})}catch(e){let t=e instanceof Error?e.message:String(e);s.push(`Sewing failed: ${t}`),c.push({name:`sew`,attempted:!0,succeeded:!1,detail:t})}if(a&&n){let e=eD(d),t=0;for(let n of e)try{U().fixSelfIntersection(n.wrapped),t++}catch{}s.push(`Self-intersection fix: ${t}/${e.length} wires`),c.push({name:`fixSelfIntersection`,attempted:!0,succeeded:t>0,detail:`${t}/${e.length} wires fixed`})}if(OE(d)&&i||EE(d)&&r||TE(d)&&n){let t=tM(d);za(t)?(p(t.value),OE(e)?(f=!0,s.push(`Applied ShapeFix_Solid`),c.push({name:`healSolid`,attempted:!0,succeeded:!0})):EE(e)?(s.push(`Applied ShapeFix_Face`),c.push({name:`healFace`,attempted:!0,succeeded:!0})):(s.push(`Applied ShapeFix_Wire`),c.push({name:`healWire`,attempted:!0,succeeded:!0}))):(s.push(`Shape-level healing failed`),c.push({name:`healShape`,attempted:!0,succeeded:!1}))}else c.push({name:`healShape`,attempted:!1,succeeded:!1,detail:`skipped by options`});let m=eD(d).length,h=$E(d).length,g=Math.abs(m-l),_=Math.abs(h-u);g>0&&s.push(`Wire count changed by ${g}`),_>0&&s.push(`Face count changed by ${_}`);let v=Zj(d);return s.push(v?`Final validation: valid`:`Final validation: still invalid`),c.push({name:`finalValidation`,attempted:!0,succeeded:v}),O({shape:d,report:{isValid:v,alreadyValid:!1,wiresHealed:g,facesHealed:_,solidHealed:f,steps:s,diagnostics:c}})}function rM(e){try{return O(W(U().fixShape(e.wrapped)))}catch(e){return k(P(N.FIX_SHAPE_FAILED,`ShapeFix_Shape failed`,e))}}function iM(e){try{let t=W(U().solidFromShell(e.wrapped));return OE(t)?Zj(t)?O(t):(IE(t),k(P(N.SOLID_FROM_SHELL_FAILED,`solidFromShell produced an invalid solid`))):(IE(t),k(P(N.SOLID_FROM_SHELL_FAILED,`solidFromShell did not produce a solid`)))}catch(e){return k(P(N.SOLID_FROM_SHELL_FAILED,`Failed to create solid from shell`,e))}}function aM(e){try{let t=W(U().fixSelfIntersection(e.wrapped));return TE(t)?O(t):(IE(t),k(P(N.FIX_SELF_INTERSECTION_FAILED,`Result is not a wire`)))}catch(e){return k(P(N.FIX_SELF_INTERSECTION_FAILED,`Failed to fix wire self-intersection`,e))}}function oM(e,{profile:t,endFactor:n=1}){return e<1e-10?k(F(`INVALID_EXTRUSION_LENGTH`,`Extrusion length too small (< 1e-10)`)):t!==`s-curve`&&t!==`linear`?k(F(`UNSUPPORTED_PROFILE`,`Unsupported extrusion profile: ${String(t)}`)):O(U().buildExtrusionLaw(t,e,n).Trim(0,e,1e-6))}function sM(e,t){let n=U(),r=n.makeLineEdge([...e],[...t]),i=n.makeWire([r]);return n.dispose(r),W(i)}function cM(e,t,n,r,i,a=!1){return W(U().makeHelixWire(e,t,n,[...r],[...i],a))}function lM(e){let t=W(e.shape),n=W(e.firstShape),r=W(e.lastShape),i=()=>{IE(t),IE(n),IE(r)};return AE(t)?TE(n)?TE(r)?O([t,n,r]):(i(),k(ho(`SWEEP_END_NOT_WIRE`,`Sweep did not produce an end Wire`))):(i(),k(ho(`SWEEP_START_NOT_WIRE`,`Sweep did not produce a start Wire`))):(i(),k(ho(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`)))}function uM(e,t,n={},r=!1){if(n.mode===`simple`&&!r){let n=W(U().simplePipe(e.wrapped,t.wrapped));return AE(n)?O(n):(IE(n),k(ho(`SWEEP_NOT_3D`,`Simple pipe did not produce a 3D shape`)))}let{frenet:i=!1,auxiliarySpine:a,law:o=null,transitionMode:s=`right`,withContact:c,support:l,forceProfileSpineOthogonality:u,tolerance:d,boundTolerance:f,angularTolerance:p,maxDegree:m,maxSegments:h}=n,g=U(),_=s===`round`?!0:!!u,v=g.sweepPipeShell(e.wrapped,t.wrapped,{transitionMode:s,contact:!!c,correction:_,frenet:i,shellMode:r,...a?.wrapped?{auxiliary:a.wrapped}:{},...o===null?{}:{law:o},...l===null?{}:{support:l},tolerance:d,boundTolerance:f,angularTolerance:p,maxDegree:m,maxSegments:h});if(r&&typeof v==`object`&&`firstShape`in v)return lM(v);let y=W(v);return AE(y)?O(y):(IE(y),k(ho(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`)))}function dM(e,t,n,r){return uM(e,sM(t,wD(t,n)),{support:r})}function fM(e,t,n,r,i=!1){try{var a=OT();let o=AD(n);if(o<1e-10)return k(F(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let s=wD(t,n),c=a.u(sM(t,s)),l=null;if(r){let e=oM(o,r);if(A(e))return e;l=e.value}return uM(e,c,{law:l},i)}catch(e){a.e=e}finally{a.d()}}function pM(e,t,n,r,i,a=!1){try{var o=OT();if(Math.abs(t)<1e-10)return k(F(`ZERO_TWIST_ANGLE`,`Twist angle cannot be zero`));let s=AD(r);if(s<1e-10)return k(F(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let c=wD(n,r),l=o.u(sM(n,c)),u=t<0,d=360/Math.abs(t)*s,f=o.u(cM(d,s,1,n,r,u)),p=null;if(i){let e=oM(s,i);if(A(e))return e;p=e.value}return uM(e,l,{auxiliarySpine:f,law:p},a)}catch(e){o.e=e}finally{o.d()}}function mM(e){let t=e.map(e=>e.location);for(let e=0;e<t.length;e++){let n=t[e];if(n!==void 0&&(n<0||n>1))return F(N.MULTI_SWEEP_FAILED,`Section ${e} location ${n} is out of range [0, 1]`)}let n=t.filter(e=>e!==void 0);for(let e=1;e<n.length;e++)if((n[e]??0)<=(n[e-1]??0))return F(N.MULTI_SWEEP_FAILED,`Section locations must be strictly increasing`)}function hM(e,t,n){let[r,i]=n.curveParameters(t.wrapped),a=i-r,o=Array(e.length);for(let t=0;t<e.length;t++){let n=e[t]?.location;o[t]=n===void 0?NaN:r+n*a}let s=-1,c=r;for(let t=0;t<=e.length;t++){let n=t===e.length;if(!n&&!Number.isNaN(o[t]??NaN)||n){let e=n?i:o[t]??i,a=t-s-1;for(let t=1;t<=a;t++)o[s+t]=c+t/(a+1)*(e-c);n||(s=t,c=o[t]??r)}}for(let e=1;e<o.length;e++)if((o[e]??0)<=(o[e-1]??0))return k(F(N.MULTI_SWEEP_FAILED,`Computed section parameters are not strictly increasing at index ${e} (${o[e-1]?.toFixed(4)} >= ${o[e]?.toFixed(4)})`));return O(o)}function gM(e,t,n){if(e.length<2)return k(F(N.MULTI_SWEEP_INSUFFICIENT_SECTIONS,`Multi-section sweep requires at least 2 sections, got ${e.length}`));let{solid:r=!0,ruled:i=!1,tolerance:a=1e-6}=n??{},o=mM(e);if(o)return k(o);try{let n=U(),o=hM(e,t,n);if(A(o))return o;let s=o.value,c=[],l=[];try{for(let r=0;r<e.length;r++){let i=s[r],a=e[r];if(i===void 0||a===void 0)continue;let o=n.positionOnCurve(a.wire.wrapped,t.wrapped,i);c.push(o),l.push(n.downcast(o,`wire`))}let o=W(n.loftAdvanced(l,{solid:r,ruled:i,tolerance:a}));return AE(o)?O(o):(IE(o),k(ho(`MULTI_SWEEP_NOT_3D`,`Multi-section sweep did not produce a 3D shape`)))}finally{for(let e of l)n.dispose(e);for(let e of c)n.dispose(e)}}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.MULTI_SWEEP_FAILED,`Multi-section sweep failed: ${t}`,e,void 0,`Common causes: profile too large for path curvature, self-intersecting result, or discontinuous path. Try simplifying the profile or path.`))}}function _M(e,t,n,r={}){let{transition:i=`transformed`,solid:a=!0,tolerance:o}=r;try{let r=U(),s=!a,c=n.length>0?n[0]?.wrapped:void 0,l=r.sweepPipeShell(e.wrapped,t.wrapped,{transitionMode:i,...c?{auxiliary:c}:{},shellMode:s,...o===void 0?{}:{tolerance:o,boundTolerance:o}}),u=W(typeof l==`object`&&`shape`in l?l.shape:l);return AE(u)?O(u):(IE(u),k(ho(`GUIDED_SWEEP_NOT_3D`,`Guided sweep did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.GUIDED_SWEEP_FAILED,`Guided sweep failed: ${t}`,e,void 0,`Common causes: profile too large for path curvature, self-intersecting result, or discontinuous path. Try simplifying the profile or path.`))}}function vM(e,t){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`extrude: face is a null shape`));if(AD(t)<1e-10)return k(F(`EXTRUDE_ZERO_VECTOR`,`extrude: extrusion vector has zero length`));try{let n=U(),r=AD(t),i=ND(t),a=n.extrude(e.wrapped,[...i],r),o=bE(n.downcast(a,`solid`));return PE(a,o),O(o)}catch(e){return k(P(`EXTRUDE_FAILED`,`Extrusion operation failed`,e,{operation:`extrude`,vectorLength:AD(t)}))}}function yM(e,t=[0,0,0],n=[0,0,1],r=2*Math.PI){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`revolve: face is a null shape`));try{let i=W(U().revolveVec(e.wrapped,[...t],[...n],r));return AE(i)?O(i):(IE(i),k(ho(`REVOLUTION_NOT_3D`,`Revolution did not produce a 3D shape`)))}catch(e){return k(P(`REVOLVE_FAILED`,`Revolution operation failed`,e,{operation:`revolve`,angle:r}))}}function bM(e){if(e.length===0)return O([]);let t=U(),n=[];for(let t=0;t<e.length;t++){let r=e[t];if(!r)continue;let i=typeof r.height==`number`?[0,0,r.height]:r.height,a=AD(i);if(a<1e-10)return k(F(`EXTRUDE_ALL_ZERO_VECTOR`,`extrudeAll: entry ${t} has zero-length extrusion vector`));let o=[...ND(i)];n.push({face:r.face.wrapped,direction:o,length:a})}try{return O((t.extrudeBatch?.(n)??n.map(e=>t.extrude(e.face,e.direction,e.length))).map(e=>{let n=bE(t.downcast(e,`solid`));return PE(e,n),n}))}catch(e){return k(P(`EXTRUDE_ALL_FAILED`,`Batch extrusion operation failed`,e))}}function xM(e,{ruled:t=!0,startPoint:n,endPoint:r,tolerance:i=1e-6}={},a=!1){if(e.length===0&&!n&&!r)return k(F(`LOFT_EMPTY`,`Loft requires at least one wire or start/end point`));let o=U(),s=n?o.makeVertex(...bD(n)):void 0,c=r?o.makeVertex(...bD(r)):void 0;try{let n=W(o.loftAdvanced(e.map(e=>e.wrapped),{solid:!a,ruled:t,tolerance:i,...s?{startVertex:s}:{},...c?{endVertex:c}:{}}));return AE(n)?O(n):(IE(n),k(ho(`LOFT_NOT_3D`,`Loft did not produce a 3D shape`)))}catch(e){return k(P(`LOFT_FAILED`,`Loft operation failed`,e,void 0,`Common causes: wire profiles with different edge counts, self-intersecting result, or profiles too far apart. Ensure profiles are compatible and ordered.`))}}function SM(e){if(e.length===0)return O([]);let t=U(),n=[],r=e.map(e=>{let r=e.startPoint?t.makeVertex(...bD(e.startPoint)):void 0,i=e.endPoint?t.makeVertex(...bD(e.endPoint)):void 0;return r&&n.push(r),i&&n.push(i),{wires:e.wires.map(e=>e.wrapped),solid:!0,ruled:e.ruled??!0,tolerance:e.tolerance??1e-6,startVertex:r,endVertex:i}});try{let e=t.loftBatch?.(r)??r.map(e=>t.loftAdvanced(e.wires,{solid:e.solid,ruled:e.ruled,tolerance:e.tolerance,startVertex:e.startVertex,endVertex:e.endVertex})),n=[];for(let t of e){let e=W(t);if(!AE(e))return IE(e),k(ho(`LOFT_ALL_NOT_3D`,`Batch loft entry did not produce a 3D shape`));n.push(e)}return O(n)}catch(e){return k(P(`LOFT_ALL_FAILED`,`Batch loft operation failed`,e))}finally{for(let e of n)t.dispose(e)}}var CM=new WeakMap;function wM(e,t){return CM.get(e)?.get(t)}function TM(e,t,n){let r=CM.get(e);r||(r=new Map,CM.set(e,r)),r.set(t,n)}function EM(e){return U().isNull(e.wrapped)}function DM(e){return k(F(N.NULL_SHAPE_INPUT,`${e}: shape is a null shape`))}function OM(e){let t=wM(e.wrapped,`volume`);if(t)return O(t);if(EM(e))return DM(`measureVolumeProps`);let n=U(),r=n.shapeType(e.wrapped);if(r!==`solid`&&r!==`compsolid`&&r!==`compound`){let t={mass:0,volume:0,centerOfMass:[0,0,0]};return TM(e.wrapped,`volume`,t),O(t)}let i=n.volume(e.wrapped),a=UE(()=>n.centerOfMass(e.wrapped),N.CENTER_OF_MASS_FAILED,`Failed to compute center of mass`);if(!a.ok)return a;let o={mass:i,volume:i,centerOfMass:a.value};return TM(e.wrapped,`volume`,o),O(o)}function kM(e){let t=wM(e.wrapped,`surface`);if(t)return O(t);if(EM(e))return DM(`measureSurfaceProps`);let n=U(),r=n.area(e.wrapped),i=UE(()=>n.centerOfMass(e.wrapped),N.CENTER_OF_MASS_FAILED,`Failed to compute center of mass`);if(!i.ok)return i;let a={mass:r,area:r,centerOfMass:i.value};return TM(e.wrapped,`surface`,a),O(a)}function AM(e){let t=wM(e.wrapped,`linear`);if(t)return O(t);if(EM(e))return DM(`measureLinearProps`);let n=U(),r=n.length(e.wrapped),i={mass:r,length:r,centerOfMass:n.linearCenterOfMass(e.wrapped)};return TM(e.wrapped,`linear`,i),O(i)}function jM(e){let t=OM(e);return t.ok?O(t.value.mass):t}function MM(e){let t=kM(e);return t.ok?O(t.value.mass):t}function NM(e){let t=AM(e);return t.ok?O(t.value.mass):t}function PM(e,t){return EM(e)||EM(t)?DM(`measureDistance`):O(U().distance(e.wrapped,t.wrapped).value)}function FM(e,t){if(EM(e)||EM(t))return DM(`measureDistanceProps`);let n=U().distance(e.wrapped,t.wrapped);return O({distance:n.value,point1:n.point1,point2:n.point2})}function IM(e){if(EM(e))return DM(`createDistanceQuery`);let t=U().createDistanceQuery(e.wrapped);return O({distanceTo(e){return EM(e)?DM(`createDistanceQuery.distanceTo`):O(t.distanceTo(e.wrapped).value)},dispose(){t.dispose()}})}function LM(e,t,n){if(EM(e))return DM(`measureCurvatureAt`);let r=U().surfaceCurvature(e.wrapped,t,n);return O({mean:r.mean,gaussian:r.gaussian,maxCurvature:r.max,minCurvature:r.min,maxDirection:r.maxDirection,minDirection:r.minDirection})}function RM(e){if(EM(e))return DM(`measureCurvatureAtMid`);let t=uO(e),n=(t.uMin+t.uMax)/2,r=(t.vMin+t.vMax)/2,i=U().surfaceCurvature(e.wrapped,n,r);return O({mean:i.mean,gaussian:i.gaussian,maxCurvature:i.max,minCurvature:i.min,maxDirection:i.maxDirection,minDirection:i.minDirection})}function zM(e,t){return e.map(e=>zE(e,t))}function BM(e,t){let n=U(),r=n.iterShapes(e,t),i=[],a=new Map;for(let e of r){let r=n.hashCode(e,G),o=a.get(r);if(o?.some(t=>n.isSame(t,e))){n.dispose(e);continue}let s=RE(e,t);i.push(s),o?o.push(s.wrapped):a.set(r,[s.wrapped])}return i}function VM(e){let t=U(),n=new Map;for(let r of e){let e=t.hashCode(r.wrapped,G),i=n.get(e);i?i.push(r):n.set(e,[r])}return n}function HM(e,t,n){let r=U();return e.get(n)?.find(e=>r.isSame(e.wrapped,t))}function UM(e){let t=YE(e);if(t.edgeToFaces)return t.edgeToFaces;let n=U(),r=$E(e),i=VM(QE(e)),a=new Map;for(let e of r)for(let t of n.iterShapes(e.wrapped,`edge`)){let r=n.hashCode(t,G),o=HM(i,t,r);if(n.dispose(t),!o)continue;let s=a.get(r);s||(s=[],a.set(r,s)),s.some(t=>n.isSame(t.edge,o.wrapped)&&n.isSame(t.face,e.wrapped))||s.push({edge:o.wrapped,face:e.wrapped})}return t.edgeToFaces=a,a}function WM(e){let t=YE(e);if(t.vertexToFaces)return t.vertexToFaces;let n=U(),r=$E(e),i=VM(tD(e)),a=new Map;for(let e of r)for(let t of n.iterShapes(e.wrapped,`vertex`)){let r=n.hashCode(t,G),o=HM(i,t,r);if(n.dispose(t),!o)continue;let s=a.get(r);s||(s=[],a.set(r,s)),s.some(t=>n.isSame(t.vertex,o.wrapped)&&n.isSame(t.face,e.wrapped))||s.push({vertex:o.wrapped,face:e.wrapped})}return t.vertexToFaces=a,a}function GM(e,t){let n=U(),r=UM(e),i=n.hashCode(t.wrapped,G),a=r.get(i)??[],o=[],s=new Map;for(let e of a){if(!n.isSame(e.edge,t.wrapped))continue;let r=n.hashCode(e.face,G),i=s.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),o.push(e.face)):(s.set(r,[e.face]),o.push(e.face))}return zM(o,`face`)}function KM(e,t){let n=U(),r=WM(e),i=n.hashCode(t.wrapped,G),a=r.get(i)??[],o=[],s=new Map;for(let e of a){if(!n.isSame(e.vertex,t.wrapped))continue;let r=n.hashCode(e.face,G),i=s.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),o.push(e.face)):(s.set(r,[e.face]),o.push(e.face))}return zM(o,`face`)}function qM(e){return BM(e.wrapped,`edge`)}function JM(e){return BM(e.wrapped,`vertex`)}function YM(e){return BM(e.wrapped,`wire`)}function XM(e){return BM(e.wrapped,`vertex`)}function ZM(e,t){let n=U(),r=UM(e),i=BM(t.wrapped,`edge`),a=[],o=new Map;for(let e of i){let i=n.hashCode(e.wrapped,G),s=r.get(i)??[];for(let e of s){if(n.isSame(e.face,t.wrapped))continue;let r=n.hashCode(e.face,G),i=o.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),a.push(e.face)):(o.set(r,[e.face]),a.push(e.face))}}for(let e of i)e[Symbol.dispose]();return zM(a,`face`)}var QM=new Map;function $M(e){let t=e instanceof Error?e.message:``;return/is only available with the|is not yet implemented|requires a registered occt kernel/.test(t)}function eN(e,t){let n=U(),r=_T()??``;if(QM.get(r)!==!1){let i;try{i=n.sharedEdges(e.wrapped,t.wrapped);let a=i.map(e=>RE(e,`edge`));return QM.set(r,!0),a}catch(e){if(i)for(let e of i)n.dispose(e);if(!$M(e))throw e;QM.set(r,!1)}}return tN(e,t)}function tN(e,t){let n=U(),r=n.iterShapes(e.wrapped,`edge`),i=n.iterShapes(t.wrapped,`edge`),a=new Map;for(let e of i){let t=n.hashCode(e,G),r=a.get(t);r||(r=[],a.set(t,r)),r.push(e)}let o=[];for(let e of r)a.get(n.hashCode(e,2147483647))?.some(t=>n.isSame(e,t))?o.push(RE(e,`edge`)):n.dispose(e);for(let e of i)n.dispose(e);return o}function nN(e,t){let n=0,r=sO(t);if(e.surfaceType!==void 0)if(r===e.surfaceType)n+=1;else return-1/0;if(e.normal!==void 0){let r=mO(t),i=e.normal[0]*r[0]+e.normal[1]*r[1]+e.normal[2]*r[2];if(i<.707)return-1/0;n+=i}if(e.centroid!==void 0){let r=hO(t),i=e.centroid[0]-r[0],a=e.centroid[1]-r[1],o=e.centroid[2]-r[2],s=i*i+a*a+o*o;if(s>100)return-1/0;n-=s/100}if(e.area!==void 0&&e.area>0){let r=MM(t);if(r.ok&&r.value>0){let t=Math.abs(Math.log(e.area/r.value));t>1&&(n-=t)}}return n}function rN(e){let t=sO(e),n=mO(e),r=hO(e),i=MM(e);return{entityType:`face`,surfaceType:t,normal:n,centroid:r,area:i.ok?i.value:void 0}}var iN=.9;function aN(e){if(e[2]>iN)return`box:top`;if(e[2]<-.9)return`box:bottom`;if(e[1]>iN)return`box:back`;if(e[1]<-.9)return`box:front`;if(e[0]>iN)return`box:right`;if(e[0]<-.9)return`box:left`}function oN(e,t){if(sO(t)!==`PLANE`)return;let n=mO(t)[2];if(n>iN)return`${e}:top`;if(n<-.9)return`${e}:bottom`}function sN(e){return sO(e)===`CYLINDRE`?`cylinder:lateral`:oN(`cylinder`,e)}function cN(e){return sO(e)===`CONE`?`cone:lateral`:oN(`cone`,e)}function lN(e){return sO(e)===`SPHERE`?`sphere:surface`:void 0}var uN={box:e=>aN(mO(e)),cylinder:sN,cone:cN,sphere:lN};function dN(e,t){let n=new Map,r=uN[t],i=U(),a=0;for(let o of i.iterShapes(e.wrapped,`face`)){let e=LE(o,`face`);try{let i=r?.(e),o=i!==void 0&&!n.has(i)?i:`${t}:face_${a}`;n.set(o,[gk(e)]),a++}finally{FE(e,o)}}return n}function fN(e,t,n){return{origin:e,role:t,hint:rN(n)}}function pN(e,t){let n=[];for(let r of e){if(t.deleted.has(r))continue;let e=t.modified.get(r),i=e&&e.length>0?e:[r];for(let e of i)n.includes(e)||n.push(e)}return n}function mN(e,t,n){let r=e.get(t);if(!r)return e;let i=new Map;for(let[e,t]of r){let r=pN(t,n);r.length>0&&i.set(e,r)}let a=new Map;for(let[n,r]of e)a.set(n,n===t?i:r);return a}var hN=.1,gN=.5;function _N(e,t,n){let r=-1/0,i,a=-1/0,o=[];for(let s of t){let t=n(e,s);t>gN&&o.push([s,t]),t>r?(a=r,r=t,i=s):t>a&&(a=t)}return i!==void 0&&r>gN?r-a<hN&&o.length>1?{kind:`ambiguous`,candidates:o.filter(([,e])=>e>=r-hN).map(([e])=>e)}:{kind:`match`,face:i}:{kind:`none`}}function vN(e,t,n,r){let i=$E(n),a=r??nN,o=t.get(e.origin)?.get(e.role);if(o!==void 0&&o.length>0){let t=i.filter(e=>o.includes(gk(e)));if(t.length===1){let[e]=t;if(e!==void 0)return{face:e,confidence:`exact`}}else if(t.length===0)return{ref:e,reason:`deleted`};else{let n=_N(e.hint,t,a);if(n.kind===`match`)return{face:n.face,confidence:`geometric-fallback`};if(n.kind===`ambiguous`)return{ref:e,reason:`ambiguous`,candidates:n.candidates}}}let s=_N(e.hint,i,a);return s.kind===`match`?{face:s.face,confidence:`geometric-fallback`}:s.kind===`ambiguous`?{ref:e,reason:`ambiguous`,candidates:s.candidates}:{ref:e,reason:`not-found`}}function yN(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(n*n+r*r+i*i)}function bN(e){if(e.length===0)return;let t=0,n=0,r=0;for(let i of e){let e=_D(i);t+=e[0],n+=e[1],r+=e[2]}let i=e.length;return[t/i,n/i,r/i]}function xN(e,t,n){let r=n.get(t);if(!r)return;let i=gk(e);for(let[e,t]of r)if(t.includes(i))return e}function SN(e,t,n,r){let i=r.get(t)?.get(n);return i===void 0||i.length===0?[]:$E(e).filter(e=>i.includes(gk(e)))}function CN(e){let t=NM(e);return{entityType:`edge`,length:t.ok?t.value:void 0,midpoint:bN(XM(e))}}function wN(e){let t=new Set,n=[];for(let r of e){let e=gk(r);t.has(e)||(t.add(e),n.push(r))}return n}var TN=1e-6;function EN(e,t){if(t.length===void 0&&t.midpoint===void 0)return;let n,r=1/0,i=1/0;for(let a of e){let e=0;if(t.length!==void 0){let n=NM(a);n.ok&&(e+=Math.abs(n.value-t.length))}if(t.midpoint!==void 0){let n=bN(XM(a));n!==void 0&&(e+=yN(t.midpoint,n))}e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<TN))return n}function DN(e,t,n,r){let[i,a]=GM(n,t);if(i===void 0||a===void 0)return;let o=xN(i,e,r),s=xN(a,e,r);if(!(o===void 0||s===void 0))return{origin:e,faceRoles:[o,s],hint:CN(t)}}function ON(e,t,n){let[r,i]=e.faceRoles,a=SN(n,e.origin,r,t),o=SN(n,e.origin,i,t);if(a.length===0||o.length===0)return{ref:e,reason:`not-found`};let s=[];for(let e of a)for(let t of o)s.push(...eN(e,t));let c=wN(s);if(c.length===1){let[e]=c;if(e!==void 0)return{edge:e,confidence:`exact`}}if(c.length>1){let t=EN(c,e.hint);return t===void 0?{ref:e,reason:`ambiguous`,candidates:c}:{edge:t,confidence:`geometric-fallback`}}return{ref:e,reason:`not-found`}}var kN=3,AN=1e-6;function jN(e,t){let n=new Set;for(let r of e)for(let e of JM(r)){let r=gk(e);n.add(r),t.has(r)||t.set(r,e)}return n}function MN(e,t){let n=new Set;for(let r of e)t.has(r)&&n.add(r);return n}function NN(e){let t=new Map,n;for(let r of e){let e=jN(r,t);n=n===void 0?e:MN(n,e)}if(n===void 0)return[];let r=[];for(let e of n){let n=t.get(e);n!==void 0&&r.push(n)}return r}function PN(e,t){if(t.position===void 0)return;let n,r=1/0,i=1/0;for(let a of e){let e=yN(_D(a),t.position);e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<AN))return n}function FN(e,t,n,r){let i=KM(n,t);if(i.length<kN)return;let a=new Set;for(let t of i){let n=xN(t,e,r);n!==void 0&&a.add(n)}if(!(a.size<kN))return{origin:e,faceRoles:[...a].sort(),hint:{entityType:`vertex`,position:_D(t)}}}function IN(e,t,n){let r=[];for(let i of e.faceRoles){let a=SN(n,e.origin,i,t);if(a.length===0)return{ref:e,reason:`not-found`};r.push(a)}let i=NN(r);if(i.length===1){let[e]=i;if(e!==void 0)return{vertex:e,confidence:`exact`}}if(i.length>1){let t=PN(i,e.hint);return t===void 0?{ref:e,reason:`ambiguous`,candidates:i}:{vertex:t,confidence:`geometric-fallback`}}return{ref:e,reason:`not-found`}}var LN=.99,RN=.1,zN=1e-6;function BN(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function VN(e,t){return $E(e).filter(e=>BN(mO(e),t)>LN)}function HN(e,t,n){let r=new Set([...t,...n].map(gk)),i=new Set;for(let n of t)for(let t of ZM(e,n))i.add(gk(t));let a=[],o=new Set;for(let t of n)for(let n of ZM(e,t)){let e=gk(n);r.has(e)||o.has(e)||!i.has(e)||(o.add(e),a.push(n))}return a}function UN(e,t){let n,r=1/0,i=1/0;for(let a of e){let e=yN(hO(a),t);e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<zN))return n}function WN(e,t,n,r,i){let[a,o]=GM(r,n);if(a===void 0||o===void 0)return;let s=xN(a,e,i),c=xN(o,e,i);if(!(s===void 0||c===void 0))return{origin:e,op:t,betweenRoles:[s,c],hint:{entityType:`derived-face`,normalA:mO(a),normalB:mO(o),edgeMidpoint:bN(XM(n))}}}function GN(e,t,n){let r=SN(n,e.origin,e.betweenRoles[0],t);r.length===0&&(r=VN(n,e.hint.normalA));let i=SN(n,e.origin,e.betweenRoles[1],t);if(i.length===0&&(i=VN(n,e.hint.normalB)),r.length===0||i.length===0)return{ref:e,reason:`not-found`};let a=HN(n,r,i).filter(t=>BN(mO(t),e.hint.normalA)>RN&&BN(mO(t),e.hint.normalB)>RN);if(a.length===1){let[e]=a;if(e!==void 0)return{face:e,confidence:`geometric-fallback`}}if(a.length>1){let t=e.hint.edgeMidpoint&&UN(a,e.hint.edgeMidpoint);return t?{face:t,confidence:`geometric-fallback`}:{ref:e,reason:`ambiguous`,candidates:a}}return{ref:e,reason:`not-found`}}function KN(e){return typeof e==`object`&&!!e&&`origin`in e}function qN(e){return KN(e)&&`betweenRoles`in e&&`op`in e}function JN(e){return KN(e)&&Array.isArray(e.faceRoles)&&e.faceRoles.length===2}function YN(e){return KN(e)&&Array.isArray(e.faceRoles)&&e.faceRoles.length>=3}function XN(e){return KN(e)&&typeof e.role==`string`}function ZN(e){return XN(e)||JN(e)||YN(e)||qN(e)}function QN(e,t){return t===void 0?{ok:!1,reason:e}:{ok:!1,reason:e,candidates:t}}function $N(e,t,n){if(qN(e)){let r=GN(e,t,n);return`face`in r?{ok:!0,entity:r.face}:QN(r.reason,r.candidates)}if(JN(e)){let r=ON(e,t,n);return`edge`in r?{ok:!0,entity:r.edge}:QN(r.reason,r.candidates)}if(YN(e)){let r=IN(e,t,n);return`vertex`in r?{ok:!0,entity:r.vertex}:QN(r.reason,r.candidates)}let r=vN(e,t,n);return`face`in r?{ok:!0,entity:r.face}:QN(r.reason,r.candidates)}function eP(e,t,n){let r=n.get(e.origin);if(r!==void 0)return r;let i=new Map([[e.origin,dN(t,e.origin)]]);return n.set(e.origin,i),i}function tP(e,t){return $N(e,eP(e,t,new Map),t)}function nP(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t!==Object.prototype&&t!==null?!1:!(`wrapped`in e)}function rP(e,t){let n=new Map,r=e=>{if(ZN(e)){let r=$N(e,eP(e,t,n),t);return r.ok?r.entity:e}if(Array.isArray(e))return e.map(r);if(nP(e)){let t={};for(let[n,i]of Object.entries(e))t[n]=r(i);return t}return e},i={...e};for(let[t,n]of Object.entries(e))i[t]=r(n);return i}function iP(e,t,n,r){let i=bE(U().makeBox(e,t,n)),a=r?.at??(r?.centered?[0,0,0]:void 0);if(a)try{var o=OT();return nk(o.u(i),[a[0]-e/2,a[1]-t/2,a[2]-n/2])}catch(e){o.e=e}finally{o.d()}return i}function aP(e,t,n){let r=n?.at??[0,0,0],i=n?.axis??[0,0,1],a=ZA(e,t,r,i);if(n?.centered)try{var o=OT();let e=[-i[0]*t*.5,-i[1]*t*.5,-i[2]*t*.5];return nk(o.u(a),e)}catch(e){o.e=e}finally{o.d()}return a}function oP(e,t){let n=QA(e);if(t?.at)try{var r=OT();return nk(r.u(n),t.at)}catch(e){r.e=e}finally{r.d()}return n}function sP(e,t,n,r){let i=r?.at??[0,0,0],a=r?.axis??[0,0,1],o=$A(e,t,n,i,a);if(r?.centered)try{var s=OT();let e=[-a[0]*n*.5,-a[1]*n*.5,-a[2]*n*.5];return nk(s.u(o),e)}catch(e){s.e=e}finally{s.d()}return o}function cP(e,t,n){return ej(e,t,n?.at??[0,0,0],n?.axis??[0,0,1])}function lP(e,t,n,r){let i=tj(e,t,n);if(r?.at)try{var a=OT();return nk(a.u(i),r.at)}catch(e){a.e=e}finally{a.d()}return i}function uP(e,t){return fA(e,t)}function dP(e,t){let n=t?.axis??[0,0,1];return pA(e,t?.at??[0,0,0],n)}function fP(e,t,n){let r=n?.axis??[0,0,1];return mA(e,t,n?.at??[0,0,0],r,n?.xDir)}function pP(e,t,n,r){return hA(e,t,n,r?.at??[0,0,0],r?.axis??[0,0,1],r?.lefthand??!1)}function mP(e,t,n){return gA(e,t,n)}function hP(e,t,n,r,i){let a=i?.axis??[0,0,1];return _A(e,t,n*vD,r*vD,i?.at??[0,0,0],a,i?.xDir)}function gP(e,t){return vA(e,t)}function _P(e){return bA(e)}function vP(e,t,n){return xA(e,t,n)}function yP(e){return SA(e)}function bP(e){return Ha(SA(e),e=>nE(e)?O(e):k(F(`WIRE_NOT_CLOSED`,`Assembled wire is not closed: start and end points do not coincide`)))}function xP(e,t){return CA(e,t)}function SP(e){return EA(e)}function CP(e,t){return TA(e,t)}function wP(e){return OA(e)}function TP(e){return nj(e)}function EP(e){return ij(e)}function DP(e){return aj(e)}function OP(e,t,n){return rj(e,t,n)}function kP(e,t){return XA(e,t)}function AP(e,t){return DA(e,t)}function jP(){return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(Number(e)^crypto.getRandomValues(new Uint8Array(1))[0]&15>>Number(e)/4).toString(16))}function MP(e=[]){let t=e.map(({shape:e,name:t,color:n,alpha:r})=>{let i=n??`#f00`;i.indexOf(`#`)===0&&(i=i.slice(1)),i.length===3&&(i=i.replace(/([0-9a-f])/gi,`$1$1`));let a=parseInt(i.substring(0,2),16),o=parseInt(i.substring(2,4),16),s=parseInt(i.substring(4,6),16),c=Math.round((r??1)*255);return{shape:e.wrapped,name:t??jP(),color:[a,o,s,c]}});return BT(U().createXCAFDocument(t))}function NP(e=[],{unit:t,modelUnit:n}={}){let r=e=>{let t=e;return t.indexOf(`#`)===0&&(t=t.slice(1)),t.length===3&&(t=t.replace(/([0-9a-f])/gi,`$1$1`)),[parseInt(t.substring(0,2),16),parseInt(t.substring(2,4),16),parseInt(t.substring(4,6),16)]},i=U(),a=e.map(({shape:e,name:t,color:n,alpha:i})=>{let[a,o,s]=r(n??`#f00`);return{shape:e.wrapped,name:t??jP(),color:[a,o,s,Math.round((i??1)*255)]}}),o=i.createXCAFDocument(a);try{let e=i.writeXCAFToSTEP(o,{unit:t,modelUnit:n});return e?O(new Blob([e],{type:`application/STEP`})):k(vo(`STEP_EXPORT_FAILED`,`Failed to write STEP file`))}finally{o.delete()}}function PP(e,t,n,r,i){if(n<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern count must be at least 1`));if(n===1)return O(e);if(FD(t))return k(F(`PATTERN_ZERO_DIRECTION`,`Pattern direction cannot be zero`));let a=ND(t),o=U().linearPattern(e.wrapped,[...a],r,n).map(e=>W(e));try{return FA(o,{optimisation:`sameFace`,...i,unsafe:!0})}finally{for(let e of o)e[Symbol.dispose]()}}function FP(e,t,n,r=360,i=[0,0,0],a){if(n<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern count must be at least 1`));if(n===1)return O(e);if(FD(t))return k(F(`PATTERN_ZERO_AXIS`,`Pattern axis cannot be zero`));let o=r/n,s=U().circularPattern(e.wrapped,[...i],[...t],o,n).map(e=>W(e));try{return FA(s,{optimisation:`sameFace`,...a,unsafe:!0})}finally{for(let e of s)e[Symbol.dispose]()}}function IP(e,t,n,r,i,a,o,s){if(r<1||i<1)return k(F(`PATTERN_INVALID_COUNT`,`Grid pattern counts must be at least 1`));if(r===1&&i===1)return O(e);if(FD(t))return k(F(`PATTERN_ZERO_DIRECTION`,`Grid directionX cannot be zero`));if(FD(n))return k(F(`PATTERN_ZERO_DIRECTION`,`Grid directionY cannot be zero`));let c=U(),l=ND(t),u=ND(n);if(typeof c.gridPattern==`function`)return O(W(c.gridPattern(e.wrapped,[...l],[...u],a,o,r,i)));let d=PP(e,t,r,a,s);if(!d.ok)return d;let f=d.value,p=PP(f,n,i,o,s),m=p.ok&&p.value===f;return f!==e&&!m&&f[Symbol.dispose](),p}function LP(e,t={}){return{name:e,children:[],...t.shape===void 0?{}:{shape:t.shape},...t.translate===void 0?{}:{translate:t.translate},...t.rotate===void 0?{}:{rotate:t.rotate},...t.metadata===void 0?{}:{metadata:t.metadata}}}function RP(e,t){return{...e,children:[...e.children,t]}}function zP(e,t){let n=e.children.findIndex(e=>e.name===t);if(n===-1)return e;let r=[...e.children];return r.splice(n,1),{...e,children:r}}function BP(e,t){return{...e,...t.shape===void 0?{}:{shape:t.shape},...t.translate===void 0?{}:{translate:t.translate},...t.rotate===void 0?{}:{rotate:t.rotate},...t.metadata===void 0?{}:{metadata:t.metadata}}}function VP(e,t){if(e.name===t)return e;for(let n of e.children){let e=VP(n,t);if(e)return e}}function HP(e,t,n=0){t(e,n);for(let r of e.children)HP(r,t,n+1)}function UP(e){let t=1;for(let n of e.children)t+=UP(n);return t}function WP(e){let t=[];return HP(e,e=>{e.shape&&t.push(e.shape)}),t}function GP(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function KP(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function qP(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function JP(e){return qP(KP(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function YP(e,t){let[n,r,i,a]=e,o=2*(i*t[2]-a*t[1]),s=2*(a*t[0]-r*t[2]),c=2*(r*t[1]-i*t[0]);return[t[0]+n*o+(i*c-a*s),t[1]+n*s+(a*o-r*c),t[2]+n*c+(r*s-i*o)]}function XP(e,t){let n=t/2,r=Math.sin(n),i=qP(e);return[Math.cos(n),i[0]*r,i[1]*r,i[2]*r]}function ZP(e,t){let n=qP(e),r=qP(t),i=GP(n,r);if(i>=.999999999)return[1,0,0,0];if(i<=-.999999999)return XP(JP(n),Math.PI);let a=KP(n,r),o=Math.hypot(1+i,a[0],a[1],a[2])||1;return[(1+i)/o,a[0]/o,a[1]/o,a[2]/o]}function QP(e,t){let[n,r,i,a]=e,[o,s,c,l]=t;return[n*o-r*s-i*c-a*l,n*s+r*o+i*l-a*c,n*c-r*l+i*o+a*s,n*l+r*c-i*s+a*o]}var $P=Math.PI/180;function eF(e,t,n){return Math.min(n,Math.max(t,e))}function tF(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function nF(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function rF(e){return tF(nF(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function iF(e,t,n,r,i){let a=n.min??r,o=n.max??i,s=Math.min(a,o),c=Math.max(a,o);return{kind:e,axis:tF(t),min:s,max:c,value:eF(n.value??0,s,c)}}function aF(e,t,n,r,i){let a=i[0]??{kind:`rotation`,axis:[0,0,1],min:0,max:0,value:0};return{type:e,parent:t,child:n,axis:{origin:r.origin,direction:tF(r.direction)},min:a.min,max:a.max,value:a.value,dofs:i}}function oF(e,t,n,r={}){return aF(`revolute`,e,t,n,[iF(`rotation`,n.direction,r,-180,180)])}function sF(e,t,n,r={}){return aF(`prismatic`,e,t,n,[iF(`translation`,n.direction,r,0,100)])}function cF(e,t,n,r={}){return aF(`cylindrical`,e,t,n,[iF(`rotation`,n.direction,r.rotation??{},-180,180),iF(`translation`,n.direction,r.translation??{},0,100)])}function lF(e,t,n,r={}){let i=tF(n.direction),a;if(r.uDirection){let e=r.uDirection,t=e[0]*i[0]+e[1]*i[1]+e[2]*i[2],n=[e[0]-t*i[0],e[1]-t*i[1],e[2]-t*i[2]];a=Math.hypot(n[0],n[1],n[2])<1e-9?rF(i):tF(n)}else a=rF(i);let o=tF(nF(i,a));return aF(`planar`,e,t,{origin:n.origin,direction:i},[iF(`translation`,a,r.u??{},-100,100),iF(`translation`,o,r.v??{},-100,100),iF(`rotation`,i,r.rotation??{},-180,180)])}function uF(e,t,n,r={}){return aF(`spherical`,e,t,{origin:n,direction:[0,0,1]},[iF(`rotation`,[1,0,0],r.x??{},-180,180),iF(`rotation`,[0,1,0],r.y??{},-180,180),iF(`rotation`,[0,0,1],r.z??{},-180,180)])}function dF(e,t){let n=e.dofs.map((e,n)=>{let r=t[n];return r===void 0?e:{...e,value:eF(r,e.min,e.max)}}),r=n[0];return r?{...e,dofs:n,value:r.value}:{...e,dofs:n}}function fF(e,t){return dF(e,[t])}function pF(e,t,n){if(t.kind===`translation`)return{position:[t.axis[0]*n,t.axis[1]*n,t.axis[2]*n],rotation:[1,0,0,0]};let r=XP(t.axis,n*$P),i=YP(r,e);return{position:[e[0]-i[0],e[1]-i[1],e[2]-i[2]],rotation:r}}function mF(e,t=e.value){let n=Array.isArray(t)?t:void 0,r=n?void 0:t,i=e.axis.origin,a=gF;for(let t=0;t<e.dofs.length;t++){let o=e.dofs[t];if(!o)continue;let s=n?n[t]??o.value:t===0?r??o.value:o.value;a=_F(a,pF(i,o,eF(s,o.min,o.max)))}return a}function hF(e,t){let n=e.joints??[];return{...e,joints:[...n,t]}}var gF={position:[0,0,0],rotation:[1,0,0,0]};function _F(e,t){let n=YP(e.rotation,t.position);return{position:[e.position[0]+n[0],e.position[1]+n[1],e.position[2]+n[2]],rotation:QP(e.rotation,t.rotation)}}function vF(e){let t=[];return HP(e,e=>{e.joints&&t.push(...e.joints)}),t}function yF(e,t={}){let n=[],r=new Set;HP(e,e=>{r.add(e.name),e.joints&&n.push(...e.joints)});let i=new Map;for(let e of n)i.set(e.child,e),r.add(e.parent),r.add(e.child);let a=new Map;for(let e of r)i.has(e)||a.set(e,gF);let o=[...n],s=!0;for(;s&&o.length>0;){s=!1;for(let e=o.length-1;e>=0;e--){let n=o[e];if(!n)continue;let r=a.get(n.parent);if(!r||(o.splice(e,1),s=!0,a.has(n.child)))continue;let i=t[n.child]??n.value,c=n.offset?_F(mF(n,i),n.offset):mF(n,i);a.set(n.child,_F(r,c))}}for(let e of o)a.has(e.child)||a.set(e.child,gF);return a}function bF(e){return vF(e).reduce((e,t)=>e+t.dofs.length,0)}var xF={position:[0,0,0],rotation:[1,0,0,0]};function SF(e,t){let n=YP(e.rotation,t);return[n[0]+e.position[0],n[1]+e.position[1],n[2]+e.position[2]]}function CF(e){return[e[0],-e[1],-e[2],-e[3]]}function wF(e,t){let[n,r,i,a]=QP(t,CF(e)),o=Math.hypot(n,r,i,a)||1;n/=o,r/=o,i/=o,a/=o,n<0&&(n=-n,r=-r,i=-i,a=-a);let s=Math.hypot(r,i,a);if(s<1e-12)return[0,0,0];let c=2*Math.atan2(s,n)/s;return[r*c,i*c,a*c]}function TF(e,t){let n=[];HP(e,e=>{e.joints&&n.push(...e.joints)});let r=new Map;for(let e of n)r.set(e.child,e);let i=[],a=new Set,o=t;for(;o&&r.has(o)&&!a.has(o);){a.add(o);let e=r.get(o);if(!e)break;i.push(e),o=e.parent}return i.reverse()}function EF(e,t){return e[t]??0}function DF(e,t,n){let r=n+1,i=new Float64Array(n*r);for(let a=0;a<n;a++){for(let t=0;t<n;t++)i[a*r+t]=EF(e,a*n+t);i[a*r+n]=EF(t,a)}for(let e=0;e<n;e++){let t=e;for(let a=e+1;a<n;a++)Math.abs(EF(i,a*r+e))>Math.abs(EF(i,t*r+e))&&(t=a);if(Math.abs(EF(i,t*r+e))<1e-12)return null;if(t!==e)for(let n=e;n<r;n++){let a=EF(i,e*r+n);i[e*r+n]=EF(i,t*r+n),i[t*r+n]=a}let a=EF(i,e*r+e);for(let t=e;t<r;t++)i[e*r+t]=EF(i,e*r+t)/a;for(let t=0;t<n;t++){if(t===e)continue;let n=EF(i,t*r+e);if(n!==0)for(let a=e;a<r;a++)i[t*r+a]=EF(i,t*r+a)-n*EF(i,e*r+a)}}let a=new Float64Array(n);for(let e=0;e<n;e++)a[e]=EF(i,e*r+n);return a}function OF(e,t){let n=[],r=[],i=[],a=[];for(let o of e){let e=t?.[o.child];n.push({child:o.child,count:o.dofs.length}),o.dofs.forEach((t,n)=>{let o=(Array.isArray(e)?e[n]:n===0?e:void 0)??t.value;r.push(Math.min(t.max,Math.max(t.min,o))),i.push(t.min),a.push(t.max)})}return{segments:n,q:Float64Array.from(r),lo:Float64Array.from(i),hi:Float64Array.from(a)}}function kF(e,t){let n={},r=0;for(let i of e){let e=[];for(let n=0;n<i.count;n++)e.push(EF(t,r++));n[i.child]=e}return n}function AF(e,t,n,r,i){let a=SF(t,r);if(e[0]=n.position[0]-a[0],e[1]=n.position[1]-a[1],e[2]=n.position[2]-a[2],i===6&&n.rotation){let r=wF(t.rotation,n.rotation);e[3]=r[0],e[4]=r[1],e[5]=r[2]}let o=0;for(let t=0;t<i;t++)o+=EF(e,t)**2;return Math.sqrt(o)}function jF(e,t,n,r,i,a,o,s,c,l){let u=SF(o,s);for(let d=0;d<n;d++){let f=EF(t,d),p=f+c>EF(a,d)&&f-c>=EF(i,d)?-c:c;t[d]=f+p;let m=l(t);t[d]=f;let h=SF(m,s);if(e[d]=(h[0]-u[0])/p,e[n+d]=(h[1]-u[1])/p,e[2*n+d]=(h[2]-u[2])/p,r===6){let t=wF(o.rotation,m.rotation);e[3*n+d]=t[0]/p,e[4*n+d]=t[1]/p,e[5*n+d]=t[2]/p}}}function MF(e,t,n,r,i){let a=new Float64Array(r*r),o=i*i;for(let t=0;t<r;t++)for(let i=0;i<r;i++){let s=0;for(let r=0;r<n;r++)s+=EF(e,t*n+r)*EF(e,i*n+r);a[t*r+i]=s+(t===i?o:0)}let s=DF(a,t,r);if(!s)return null;let c=new Float64Array(n);for(let t=0;t<n;t++){let i=0;for(let a=0;a<r;a++)i+=EF(e,a*n+t)*EF(s,a);c[t]=i}return c}function NF(e,t,n,r={}){let i=r.maxIterations??200,a=r.tolerance??1e-5,o=r.damping??.05,s=r.tip??[0,0,0],c=n.rotation===void 0?3:6,{segments:l,q:u,lo:d,hi:f}=OF(TF(e,t),r.seed),p=u.length,m=n=>yF(e,kF(l,n)).get(t)??xF,h=new Float64Array(c),g=new Float64Array(c*p),_=m(u),v=AF(h,_,n,s,c),y=0;for(;y<i&&p>0&&v>a;y++){jF(g,u,p,c,d,f,_,s,1e-6,m);let e=MF(g,h,p,c,o);if(!e)break;for(let t=0;t<p;t++){let n=EF(u,t)+EF(e,t);u[t]=Math.min(EF(f,t),Math.max(EF(d,t),n))}_=m(u),v=AF(h,_,n,s,c)}return{values:kF(l,u),converged:v<=a,iterations:y,error:v}}function PF(e,t){return e.dofs.map((e,n)=>{let r=(Array.isArray(t)?t[n]:n===0?t:void 0)??e.value;return Math.min(e.max,Math.max(e.min,r))})}function FF(e,t,n,r){let i=[];HP(e,e=>{e.joints&&i.push(...e.joints)});let a=i.map(e=>({child:e.child,a:PF(e,t[e.child]),b:PF(e,n[e.child])})),o=Math.max(1,Math.floor(r)),s=[];for(let t=0;t<=o;t++){let n=t/o,r={};for(let e of a)r[e.child]=e.a.map((t,r)=>t+((e.b[r]??t)-t)*n);s.push({t:n,values:r,poses:yF(e,r)})}return s}var IF=Math.PI/180;function LF(e,t,n,r){let i=e*IF,a=r*IF,o=QP(XP([0,0,1],i),XP([1,0,0],a));return{position:[n*Math.cos(i),n*Math.sin(i),t],rotation:o}}function RF(e,t={}){let n=t.base??`base`,r=e.map((e,t)=>e.name??`link${t+1}`);return e.map((e,t)=>{let i=t===0?n:r[t-1]??`link${t}`,a=r[t]??`link${t+1}`,o=LF(e.theta,e.d,e.a,e.alpha),s={origin:[0,0,0],direction:[0,0,1]},c={...e.min===void 0?{}:{min:e.min},...e.max===void 0?{}:{max:e.max},...e.value===void 0?{}:{value:e.value}};return{...e.type===`prismatic`?sF(i,a,s,c):oF(i,a,s,c),offset:o}})}var zF=Math.PI/180,BF=180/Math.PI;function VF(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function HF(e){return String(e===0?0:e)}function UF(e){return`${HF(e[0])} ${HF(e[1])} ${HF(e[2])}`}function WF(e,t={}){let n=t.name??`robot`,r=t.effort??0,i=t.velocity??0,a=t.meshes??{},o=[],s=[];HP(e,e=>{o.push(e.name),e.joints&&s.push(...e.joints)});for(let e of s){if(e.type!==`revolute`&&e.type!==`prismatic`)return k(F(N.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' is '${e.type}'; URDF supports only revolute and prismatic joints`));if(e.offset)return k(F(N.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' carries a fixed offset (e.g. a DH link) that URDF cannot represent as a single joint`))}let c=[`<?xml version="1.0"?>`,`<robot name="${VF(n)}">`];for(let e of o){let t=a[e];t?c.push(` <link name="${VF(e)}">`,` <visual><geometry><mesh filename="${VF(t)}"/></geometry></visual>`,` </link>`):c.push(` <link name="${VF(e)}"/>`)}for(let e of s){let t=e.type===`revolute`,n=t?e.min*zF:e.min,a=t?e.max*zF:e.max,o=e.type===`prismatic`?[0,0,0]:e.axis.origin;c.push(` <joint name="${VF(`${e.parent}_to_${e.child}`)}" type="${e.type}">`,` <parent link="${VF(e.parent)}"/>`,` <child link="${VF(e.child)}"/>`,` <origin xyz="${UF(o)}" rpy="0 0 0"/>`,` <axis xyz="${UF(e.axis.direction)}"/>`,` <limit lower="${HF(n)}" upper="${HF(a)}" effort="${HF(r)}" velocity="${HF(i)}"/>`,` </joint>`)}return c.push(`</robot>`,``),O(c.join(`
16
- `))}function GF(e,t){return RegExp(`\\b${t}\\s*=\\s*"([^"]*)"`).exec(e)?.[1]}function KF(e,t){if(!e)return t;let n=e.trim().split(/\s+/).map(Number);return[n[0]??0,n[1]??0,n[2]??0]}function qF(e,t){return YP(QP(QP(XP([0,0,1],t[2]),XP([0,1,0],t[1])),XP([1,0,0],t[0])),e)}function JF(e){let t=/<robot\b([^>]*)>/.exec(e);if(!t)return k(F(N.VALIDATION_FAILED,`importURDF: no <robot> element found`));let n=GF(t[1]??``,`name`)??`robot`,r=[],i=/<link\b([^>]*?)(?:\/>|>)/g;for(let t=i.exec(e);t;t=i.exec(e)){let e=GF(t[1]??``,`name`);e&&r.push(e)}let a=[],o=/<joint\b([^>]*)>([\s\S]*?)<\/joint>/g;for(let t=o.exec(e);t;t=o.exec(e)){let e=t[1]??``,n=t[2]??``,r=GF(e,`type`)??`fixed`;if(r===`fixed`||r===`floating`||r===`planar`)continue;let i=/<parent\b([^>]*?)\/?>/.exec(n),o=/<child\b([^>]*?)\/?>/.exec(n),s=GF(i?.[1]??``,`link`),c=GF(o?.[1]??``,`link`);if(!s||!c)return k(F(N.VALIDATION_FAILED,`importURDF: joint missing parent/child link (${GF(e,`name`)??`unnamed`})`));let l=/<origin\b([^>]*?)\/?>/.exec(n),u=/<axis\b([^>]*?)\/?>/.exec(n),d=/<limit\b([^>]*?)\/?>/.exec(n),f=KF(GF(l?.[1]??``,`xyz`),[0,0,0]),p=KF(GF(l?.[1]??``,`rpy`),[0,0,0]),m=qF(KF(GF(u?.[1]??``,`xyz`),[1,0,0]),p),h=Number(GF(d?.[1]??``,`lower`)??NaN),g=Number(GF(d?.[1]??``,`upper`)??NaN);if(r===`prismatic`){let e=Number.isFinite(h)&&Number.isFinite(g)?{min:h,max:g}:{};a.push(sF(s,c,{origin:f,direction:m},e))}else if(r===`revolute`||r===`continuous`){let e=r===`continuous`||!Number.isFinite(h)||!Number.isFinite(g)?{min:-180,max:180}:{min:h*BF,max:g*BF};a.push(oF(s,c,{origin:f,direction:m},e))}else return k(F(N.VALIDATION_FAILED,`importURDF: joint '${GF(e,`name`)??`unnamed`}' has unrecognized type '${r}'`))}return O({name:n,links:r,joints:a})}function YF(){return{steps:[],shapes:new Map}}function XF(e,t,n){let r={...t,timestamp:Date.now()},i=new Map(e.shapes);return i.set(t.outputId,n),{steps:[...e.steps,r],shapes:i}}function ZF(e){if(e.steps.length===0)return e;let t=e.steps.slice(0,-1),n=new Set;for(let e of t){n.add(e.outputId);for(let t of e.inputIds)n.add(t)}let r=new Map;for(let[t,i]of e.shapes)n.has(t)&&r.set(t,i);return{steps:t,shapes:r}}function QF(e,t){return e.steps.find(e=>e.id===t)}function $F(e,t){return e.shapes.get(t)}function eI(e){return e.steps.length}function tI(e,t){let n=e.steps.findIndex(e=>e.id===t);return n===-1?[]:e.steps.slice(n)}function nI(e,t,n){let r=new Map(e.shapes);return r.set(t,n),{...e,shapes:r}}function rI(){return{operations:new Map}}function iI(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function aI(e,t){let[n,r]=t;return n!==void 0&&r===void 0&&AE(n)?rP(e,n):{...e}}function oI(e,t){let n=new Set(e.steps.map(e=>e.outputId)),r={steps:[],shapes:new Map};for(let[t,i]of e.shapes)n.has(t)||(r=nI(r,t,i));for(let n of e.steps){let e=t.operations.get(n.type);if(!e)return k(I(`REPLAY_UNKNOWN_OP`,`Unknown operation type: ${n.type}`));let i=[];for(let e of n.inputIds){let t=r.shapes.get(e);if(!t)return k(I(`REPLAY_MISSING_INPUT`,`Missing input shape: ${e} for step ${n.id}`));i.push(t)}try{let t=e(i,aI(n.parameters,i));r=XF(r,{id:n.id,type:n.type,parameters:n.parameters,inputIds:n.inputIds,outputId:n.outputId},t)}catch(e){return k(I(`REPLAY_STEP_FAILED`,`Step ${n.id} (${n.type}) failed: ${e instanceof Error?e.message:String(e)}`))}}return O(r)}function sI(e,t,n){let r=e.steps.findIndex(e=>e.id===t);if(r===-1)return k(I(`REPLAY_STEP_NOT_FOUND`,`Step not found: ${t}`));let i=new Map(e.shapes);for(let t=r;t<e.steps.length;t++){let n=e.steps[t];n&&i.delete(n.outputId)}let a={steps:e.steps.slice(0,r),shapes:i};for(let t=r;t<e.steps.length;t++){let r=e.steps[t];if(!r)continue;let i=n.operations.get(r.type);if(!i)return k(I(`REPLAY_UNKNOWN_OP`,`Unknown operation type: ${r.type}`));let o=[];for(let e of r.inputIds){let t=a.shapes.get(e);if(!t)return k(I(`REPLAY_MISSING_INPUT`,`Missing input shape: ${e} for step ${r.id}`));o.push(t)}try{let e=i(o,aI(r.parameters,o));a=XF(a,{id:r.id,type:r.type,parameters:r.parameters,inputIds:r.inputIds,outputId:r.outputId},e)}catch(e){return k(I(`REPLAY_STEP_FAILED`,`Step ${r.id} (${r.type}) failed: ${e instanceof Error?e.message:String(e)}`))}}return O(a)}function cI(e,t,n,r){return e.steps.findIndex(e=>e.id===t)===-1?k(I(`MODIFY_STEP_NOT_FOUND`,`Step not found: ${t}`)):sI({steps:e.steps.map(e=>e.id===t?{...e,parameters:n}:e),shapes:e.shapes},t,r)}function lI(e){let t={};for(let[n,r]of e.shapes){let e=hk(r);if(!e.ok)return k(I(`SERIALIZE_SHAPE_FAILED`,`Failed to serialize shape "${n}": ${e.error.message}`));t[n]=e.value}return O({steps:e.steps,shapes:t})}function uI(e){let t=new Map;for(let[n,r]of Object.entries(e.shapes))try{let e=iO(r);if(!e.ok)return k(I(`DESERIALIZE_SHAPE_FAILED`,`Failed to deserialize shape "${n}": ${e.error.message}`));t.set(n,e.value)}catch(e){return k(I(`DESERIALIZE_SHAPE_FAILED`,`Failed to deserialize shape "${n}": ${e instanceof Error?e.message:String(e)}`))}return O({steps:e.steps,shapes:t})}function dI(e){try{var t=OT();let{radius:n,pitch:r,height:i,depth:a=.6*r,toothHalfWidth:o=.42*r,crest:s=0,sectionsPerTurn:c=20,lefthand:l=!1,inward:u=!1}=e;if(!(n>0))return k(F(`THREAD_INVALID_RADIUS`,`radius must be > 0`));if(!(r>0))return k(F(`THREAD_INVALID_PITCH`,`pitch must be > 0`));if(!(i>0))return k(F(`THREAD_INVALID_HEIGHT`,`height must be > 0`));if(!(a>0))return k(F(`THREAD_INVALID_DEPTH`,`depth must be > 0`));if(s<0||s>=o)return k(F(`THREAD_INVALID_CREST`,`crest must be >= 0 and < toothHalfWidth`));if(c<3)return k(F(`THREAD_TOO_FEW_SECTIONS`,`sectionsPerTurn must be >= 3`));let d=i/r,f=Math.max(2,Math.round(d*c)),p=l?-1:1,m=u?-a:a,h=u?.3:-.3,g=o,_=t.u(new VT),v=[];for(let e=0;e<=f;e++){let t=p*e*2*Math.PI/c,i=r*Math.abs(t)/(2*Math.PI),a=n*Math.cos(t),o=n*Math.sin(t),l=Math.cos(t),u=Math.sin(t),d=(e,t)=>[a+e*l,o+e*u,i+t],f=s>0?[d(h,-g),d(m,-s),d(m,s),d(h,g)]:[d(h,-g),d(m,0),d(h,g)],y=yP(f.map((e,t)=>_.register(uP(e,f[(t+1)%f.length]))));if(!za(y))return y;v.push(_.register(y.value))}return xM(v,{ruled:!0})}catch(e){t.e=e}finally{t.d()}}var fI=1e-9,pI=1e-8,mI=1e-6,hI=([e,t],[n,r],i=mI)=>Math.abs(e-n)<=i&&Math.abs(t-r)<=i,gI=([e,t],[n,r])=>[e+n,t+r],_I=([e,t],[n,r])=>[e-n,t-r],vI=([e,t],n)=>[e*n,t*n],yI=([e,t],[n,r]=[0,0])=>Math.sqrt((e-n)**2+(t-r)**2),bI=([e,t],[n,r]=[0,0])=>(e-n)**2+(t-r)**2;function xI([e,t],[n,r]){return e*r-t*n}var SI=([e,t],[n,r]=[0,0])=>Math.atan2(r*e-t*n,e*n+t*r),CI=([e,t],[n,r]=[0,0])=>Math.atan2(r-t,n-e),wI=(e,t,n=[0,0])=>{let[r,i]=e,[a,o]=n,s=r-a,c=i-o,l=Math.sin(t),u=Math.cos(t),d=s*u-c*l,f=s*l+c*u;return[d+a,f+o]};function TI([e,t]){let n=Math.sqrt(e*e+t*t);return n<1e-12?[0,0]:[e/n,t/n]}var EI=(e,t)=>[Math.cos(t)*e,Math.sin(t)*e],DI=([e,t])=>[Math.sqrt(e*e+t*t),Math.atan2(t,e)],OI=([e,t])=>{let n=TI([e,t]);return n[0]===0&&n[1]===0&&M(`normalize2d`,`Cannot normalize zero-length vector`),n};function kI(e,t){let n,r=0;for(let i=0;i<e.length;i++){let a=e[i];if(t(a))if(r++,r===1)n=a;else break}return r===1?O(n):k(yo(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found ${r===0?0:`2+`} element(s)`))}function AI(e,t,n,r){let i=e=>n([...t,e]),a=e=>t.every(t=>t(e));function o(t){switch(e){case`edge`:return QE(t);case`face`:return $E(t);case`wire`:return eD(t);case`vertex`:return tD(t)}}let s=e=>{let n=o(e);return t.length===0?n.slice():n.filter(a)},c=()=>AI(e,[],n,r),l={_filters:t,_topoKind:e,when:e=>i(e),inList:e=>{let t=new Map;for(let n of e){let e=gk(n),r=t.get(e);r?r.push(n):t.set(e,[n])}return i(e=>{let n=t.get(gk(e));return!!n&&n.some(t=>vk(t,e))})},not:e=>{let t=e(c());return i(e=>!t.shouldKeep(e))},either:e=>{let t=e.map(e=>e(c()));return i(e=>t.some(t=>t.shouldKeep(e)))},findAll:e=>s(e),findUnique:e=>kI(o(e),a),shouldKeep:a,and:e=>i(t=>e.shouldKeep(t)),or:e=>{let t=a;return n([n=>t(n)||e.shouldKeep(n)])},negate:()=>{let e=a;return n([t=>!e(t)])}},u=r(l,i);return{...l,...u}}var jI={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function MI(e){return typeof e==`string`?jI[e]??[0,0,1]:e}function NI(e,t,n){let r=U(),i=r.makeVertex(t[0],t[1],t[2]);return t=>{let a=r.distance(i,t.wrapped).value;return Math.abs(a-e)<n}}function PI(e,t){let n=ND(MI(e));return e=>{let r=U(),[i,a]=r.curveParameters(e.wrapped),o=(i+a)/2,{tangent:s}=r.curveTangent(e.wrapped,o),c=ND(s),l=Math.acos(Math.min(1,Math.abs(OD(c,n))));return Math.abs(l-vD*t)<1e-6}}function FI(e){return AI(`edge`,e,FI,(t,n)=>({inDirection:(e=`Z`,t=0)=>n(PI(e,t)),ofLength:(e,t=.001)=>n(n=>Math.abs(Ek(n)-e)<t),ofCurveType:e=>n(t=>xk(t)===e),parallelTo:(t=`Z`)=>FI(e).inDirection(t,0),atDistance:(e,t=[0,0,0])=>n(NI(e,t,1e-6))}))}function II(){return FI([])}function LI(e,t){let n=ND(MI(e));return e=>{let r=mO(e),i=Math.acos(Math.min(1,Math.abs(OD(ND(r),n))));return Math.abs(i-vD*t)<1e-6}}function RI(e){return AI(`face`,e,RI,(t,n)=>({inDirection:(e=`Z`,t=0)=>n(LI(e,t)),parallelTo:(t=`Z`)=>RI(e).inDirection(t,0),ofSurfaceType:e=>n(t=>{let n=oO(t);return za(n)&&n.value===e}),ofArea:(e,t=.001)=>n(n=>{let r=MM(n);return za(r)&&Math.abs(r.value-e)<t}),atDistance:(e,t=[0,0,0])=>n(NI(e,t,1e-6))}))}function zI(){return RI([])}function BI(e){return AI(`wire`,e,BI,(e,t)=>({isClosed:()=>t(e=>Ok(e)),isOpen:()=>t(e=>!Ok(e)),ofEdgeCount:e=>t(t=>QE(t).length===e)}))}function VI(){return BI([])}function HI(e,t){return typeof e==`object`&&`_topoKind`in e?e.findUnique(t):typeof e!=`function`&&EE(e)?O(e):e(zI()).findUnique(t)}function UI(e){return Array.isArray(e)&&e.length===2&&typeof e[0]==`number`&&typeof e[1]==`number`}function WI(e,t){let n=10**t,r=t<0?e:.01/n+e;return Math.round(r*n)/n}function GI(e){return Math.round(e*100)/100}function KI(e){return Math.round(e*1e5)/1e5}var qI=([e,t])=>`(${GI(e)},${GI(t)})`,JI=(e,t=1e-9)=>{let n=e;return Math.abs(e)<t&&(n=0),n.toFixed(-Math.log10(t))},YI=(e,t=1e-9)=>Array.from(new Map(e.map(([e,n])=>[`[${JI(e,t)},${JI(n,t)}]`,[e,n]])).values()),XI=class{_wrapped;_deleted=!1;constructor(e){this._wrapped=e??gT().createBoundingBox2d(),UT(this,this._wrapped)}get wrapped(){if(this._deleted)throw Error(`This object has been deleted`);return this._wrapped}delete(){this._deleted||(this._deleted=!0,WT(this._wrapped),typeof this._wrapped.delete==`function`&&this._wrapped.delete())}[Symbol.dispose](){this.delete()}get repr(){let[e,t]=this.bounds;return`${qI(e)} - ${qI(t)}`}get bounds(){let{xMin:e,yMin:t,xMax:n,yMax:r}=gT().getBBox2dBounds(this.wrapped);return[[e,t],[n,r]]}get center(){let[[e,t],[n,r]]=this.bounds;return[e+(n-e)/2,t+(r-t)/2]}get width(){let[[e],[t]]=this.bounds;return Math.abs(t-e)}get height(){let[[,e],[,t]]=this.bounds;return Math.abs(t-e)}outsidePoint(e=1){let[t,n]=this.bounds,r=n[0]-t[0],i=n[1]-t[1];return[n[0]+r/100*e,n[1]+i/100*e*.9]}add(e){gT().mergeBBox2d(this.wrapped,e.wrapped)}isOut(e){return gT().isBBox2dOut(this.wrapped,e.wrapped)}containsPoint(e){return!gT().isBBox2dOutPoint(this.wrapped,e[0],e[1])}};function ZI(e){return new QI(U().deserializeCurve2d(e))}var QI=class e{_wrapped;_deleted=!1;_boundingBox;_firstPoint=null;_lastPoint=null;_firstParameter=null;_lastParameter=null;constructor(e){this._wrapped=U().wrapCurve2dHandle(e),this._boundingBox=null,typeof this._wrapped.delete==`function`&&UT(this,this._wrapped)}get wrapped(){if(this._deleted)throw Error(`This object has been deleted`);return this._wrapped}delete(){this._deleted||(this._deleted=!0,typeof this._wrapped.delete==`function`&&(WT(this._wrapped),this._wrapped.delete()))}[Symbol.dispose](){this.delete()}get boundingBox(){if(this._boundingBox)return this._boundingBox;let e=U(),t=e.createBoundingBox2d();return e.addCurveToBBox2d(t,this.wrapped,1e-6),this._boundingBox=new XI(t),this._boundingBox}get repr(){return`${this.geomType} ${qI(this.firstPoint)} - ${qI(this.lastPoint)}`}serialize(){return U().serializeCurve2d(this.wrapped)}value(e){return U().evaluateCurve2d(this.wrapped,e)}get firstPoint(){return this._firstPoint===null&&(this._firstPoint=this.value(this.firstParameter)),this._firstPoint}get lastPoint(){return this._lastPoint===null&&(this._lastPoint=this.value(this.lastParameter)),this._lastPoint}get firstParameter(){return this._firstParameter===null&&(this._firstParameter=U().getCurve2dBounds(this.wrapped).first),this._firstParameter}get lastParameter(){return this._lastParameter===null&&(this._lastParameter=U().getCurve2dBounds(this.wrapped).last),this._lastParameter}get geomType(){return U().getCurve2dType(this.wrapped)}clone(){let t=new e(U().copyCurve2d(this.wrapped));return t._firstPoint=this._firstPoint,t._lastPoint=this._lastPoint,t._firstParameter=this._firstParameter,t._lastParameter=this._lastParameter,t}reverse(){U().reverseCurve2d(this.wrapped);let e=this._firstPoint;this._firstPoint=this._lastPoint,this._lastPoint=e;let t=this._firstParameter;this._firstParameter=this._lastParameter,this._lastParameter=t}distanceFromPoint(e){let t=U().projectPointOnCurve2d(this.wrapped,e[0],e[1]),n=t?t.distance:1/0;return Math.min(n,yI(e,this.firstPoint),yI(e,this.lastPoint))}distanceFromCurve(e){let t;try{t=U().distanceBetweenCurves2d(this.wrapped,e.wrapped,this.firstParameter,this.lastParameter,e.firstParameter,e.lastParameter)}catch{t=1/0}return Math.min(t,this.distanceFromPoint(e.firstPoint),this.distanceFromPoint(e.lastPoint),e.distanceFromPoint(this.firstPoint),e.distanceFromPoint(this.lastPoint))}distanceFrom(e){return UI(e)?this.distanceFromPoint(e):this.distanceFromCurve(e)}isOnCurve(e){return this.distanceFromPoint(e)<1e-9}parameter(e,t=1e-9){let n,r,i=!1;try{let t=U().projectPointOnCurve2d(this.wrapped,e[0],e[1]);t?(n=t.distance,r=t.param):i=!0}catch{i=!0}return i?hI(e,this.firstPoint,t)?O(this.firstParameter):hI(e,this.lastPoint,t)?O(this.lastParameter):k(I(`PARAMETER_NOT_FOUND`,`Failed to find parameter`)):n===void 0||r===void 0?k(I(`PARAMETER_NOT_FOUND`,`Failed to find parameter`)):n>t?k(I(`POINT_NOT_ON_CURVE`,`Point ${qI(e)} not on curve ${this.repr}, ${n.toFixed(9)}`)):O(r)}tangentAt(e){let t;if(Array.isArray(e))t=j(this.parameter(e));else{let n=U().getCurve2dBounds(this.wrapped);t=(n.last-n.first)*e+n.first}return U().evaluateCurve2dD1(this.wrapped,t).tangent}splitAt(n,r=1e-9){let i=n.map(e=>UI(e)?j(this.parameter(e,r)):e);i=Array.from(new Map(i.map(e=>[WI(e,-Math.log10(r)),e])).values()).sort((e,t)=>e-t);let a=this.firstParameter,o=this.lastParameter;return a>o&&i.reverse(),Math.abs(t(i,0)-a)<r*100&&(i=i.slice(1)),!i.length||(Math.abs(t(i,i.length-1)-o)<r*100&&(i=i.slice(0,-1)),!i.length)?[this]:U().splitCurve2d(this.wrapped,i).map(t=>new e(t))}},$I=(e,t=1e-4,n=`C0`,r=200)=>new QI(gT().approximateCurve2dAsBSpline(e.wrapped,t,n,r)),eL=e=>(e.geomType!==`BSPLINE_CURVE`&&M(`BSplineToBezier`,`You can only convert a Bspline`),gT().decomposeBSpline2dToBeziers(e.wrapped).map(e=>new QI(e)));function tL(e,t={tolerance:1e-4,continuity:`C0`,maxSegments:300}){let n=gT();return e.flatMap(e=>{let r=e.geomType;if(r===`ELLIPSE`||r===`CIRCLE`&&hI(e.firstPoint,e.lastPoint))return e.splitAt([.5]);if([`LINE`,`ELLIPSE`,`CIRCLE`].includes(r))return e;if(r===`BEZIER_CURVE`){let t=n.getCurve2dBezierDegree(e.wrapped);if(t!==null&&[1,2,3].includes(t))return e}return tL(eL(r===`BSPLINE_CURVE`?e:$I(e,t.tolerance,t.continuity,t.maxSegments)),t)})}var nL=(e,t)=>{let n=new QI(U().makeLine2d(e[0],e[1],t[0],t[1]));return hI(n.firstPoint,e)||n.reverse(),n},rL=(e,t,n)=>{let r=new QI(U().makeArc2dThreePoints(e[0],e[1],t[0],t[1],n[0],n[1]));if(!hI(r.firstPoint,e)){let e=U().trimCurve2d(r.wrapped,r.lastParameter,r.firstParameter);r.delete(),r=new QI(e)}return r},iL=(e,t,n)=>{let r=new QI(U().makeArc2dTangent(e[0],e[1],t[0],t[1],n[0],n[1]));if(!hI(r.firstPoint,e)){let e=U().trimCurve2d(r.wrapped,r.lastParameter,r.firstParameter);r.delete(),r=new QI(e)}return r},aL=(e,t=[0,0])=>new QI(U().makeCircle2d(t[0],t[1],e,!0)),oL=(e,t,n=[1,0],r=[0,0],i=!0)=>new QI(U().makeEllipse2d(r[0],r[1],e,t,n[0],n[1],i)),sL=(e,t,n,r,i=[0,0],a,o=!0)=>new QI(U().makeEllipseArc2d(i[0],i[1],e,t,n,r,a[0],a[1],o)),cL=(e,t,n)=>{let r=[[e[0],e[1]],...t.map(e=>[e[0],e[1]]),[n[0],n[1]]];return new QI(U().makeBezier2d(r))};function lL(e,{tolerance:t=.001,smoothing:n=null,degMax:r=3,degMin:i=1}={}){try{let a=e.map(e=>[e[0],e[1]]);return O(new QI(U().makeBSpline2d(a,{tolerance:t,smoothing:n,degMax:r,degMin:i,continuity:`C2`})))}catch(e){return k(I(`BSPLINE_2D_FAILED`,`B-spline approximation failed`,e))}}var uL=(e,t,n,r=!1)=>{let i=vI(gI(e,t),.5),a=yI(n,e)*(r?-1:1);return rL(e,gI(vI(OI(_I(i,n)),a),n),t)},dL=(e,n)=>{let r=gT(),i=e.geomType,[a,o]=n,s=`${KI(a)} ${KI(o)}`;if(i===`LINE`)return`L ${s}`;if(i===`BEZIER_CURVE`){let n=r.getCurve2dBezierPoles(e.wrapped);n||M(`adaptedCurveToPathElem`,`Expected Bezier poles`);let i=n.length-1;if(i===1)return`L ${s}`;if(i===2){let[e,r]=t(n,1);return`Q ${GI(e)} ${GI(r)} ${s}`}if(i===3){let[e,r]=t(n,1),[i,a]=t(n,2);return`C ${GI(e)} ${GI(r)} ${GI(i)} ${GI(a)} ${s}`}}if(i===`CIRCLE`){let t=r.getCurve2dCircleData(e.wrapped);t||M(`adaptedCurveToPathElem`,`Expected circle data`);let{radius:n,isDirect:i}=t,c=r.getCurve2dBounds(e.wrapped),l=(c.last-c.first)*yD,u=l===360?`${KI(a)} ${KI(o+1e-4)}`:s;return`A ${n} ${n} 0 ${Math.abs(l)>180?`1`:`0`} ${i?`1`:`0`} ${u}`}if(i===`ELLIPSE`){let t=r.getCurve2dEllipseData(e.wrapped);t||M(`adaptedCurveToPathElem`,`Expected ellipse data`);let{majorRadius:n,minorRadius:i,xAxisAngle:c,isDirect:l}=t,u=r.getCurve2dBounds(e.wrapped),d=(u.last-u.first)*yD,f=d===360?`${KI(a)} ${KI(o+1e-4)}`:s,p=180-c*yD;return`A ${KI(n)} ${KI(i)} ${KI(p)} ${Math.abs(d)>180?`1`:`0`} ${l?`1`:`0`} ${f}`}M(`adaptedCurveToPathElem`,`Unsupported curve type: ${i}`)},fL=e=>{let t=U(),n=t.createBoundingBox2d();return e.forEach(e=>{t.addCurveToBBox2d(n,e.wrapped,1e-6)}),new XI(n)};function pL(e,t){let n=U();return e.map(e=>gE(n.liftCurve2dToPlane(e.wrapped,[...t.origin],[...t.zDir],[...t.xDir])))}var mL=(e,t)=>{let n=U();return e.map(e=>gE(n.buildEdgeOnSurface(e.wrapped,t)))},hL=(e,t)=>{let n=U();return e.map(e=>t?new QI(n.transformCurve2dGeneral(e.wrapped,t)):e.clone())},gL=(e,t,n=[0,0])=>U().createAffinityGTrsf2d(n[0],n[1],-t[1],t[0],e),_L=e=>U().createTranslationGTrsf2d(e[0],e[1]),vL=(e,t=[0,0],n=`center`)=>n===`center`?U().createMirrorGTrsf2d(e[0],e[1],`point`):U().createMirrorGTrsf2d(0,0,`axis`,t[0],t[1],e[0],e[1]),yL=(e,t=[0,0])=>U().createRotationGTrsf2d(e,t[0],t[1]),bL=(e,t=[0,0])=>U().createScaleGTrsf2d(e,t[0],t[1]);function xL(e,t,n=`original`){let r=U(),i=r.extractSurfaceFromFace(t.wrapped),a=uO(t),o=null;if(n===`original`&&sO(t)!==`PLANE`){if(sO(t)!==`CYLINDRE`)return k(F(`UNSUPPORTED_FACE_TYPE`,`Only planar and cylindrical faces can be unwrapped for sketching`));let e=r.getSurfaceCylinderData(i);if(!e)return k(F(`UNSUPPORTED_FACE_TYPE`,`Could not extract cylinder data from face surface`));e.isDirect||(i=r.reverseSurfaceU(i)),o=gL(1/e.radius,[1,0])}if(n===`bounds`){o=r.createIdentityGTrsf2d();try{r.setGTrsf2dTranslationPart(o,0,0);let e=r.createAffinityGTrsf2d(0,0,0,1,a.uMax-a.uMin);if(r.multiplyGTrsf2d(o,e),e.delete(),a.uMin!==0){let e=r.createIdentityGTrsf2d();r.setGTrsf2dTranslationPart(e,-a.uMin,0),r.multiplyGTrsf2d(o,e),e.delete()}let t=r.createAffinityGTrsf2d(0,0,1,0,a.vMax-a.vMin);if(r.multiplyGTrsf2d(o,t),t.delete(),a.vMin!==0){let e=r.createIdentityGTrsf2d();r.setGTrsf2dTranslationPart(e,0,-a.vMin),r.multiplyGTrsf2d(o,e),e.delete()}}catch(e){throw o.delete(),e}}let s=mL(hL(e,o),i);return o&&o.delete(),O(s)}function SL(e,t){let n=U(),r=new QI(n.extractCurve2dFromEdge(e.wrapped,t.wrapped));return jk(e)===`backward`&&n.reverseCurve2d(r.wrapped),r}var CL=(e,t=1)=>`${e.bounds[0][0]-t} ${-e.bounds[1][1]-t} ${e.width+2*t} ${e.height+2*t}`,wL=(e,t,n=1)=>`<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="${CL(t,n)}" fill="none" stroke="black" stroke-width="0.6%" vector-effect="non-scaling-stroke">
17
- ${e}
18
- </svg>`;function TL(e){let t=e.map(e=>e.wrapped);return _E(U().makeWire(t))}var EL=class e{curves;_boundingBox;_orientation;_guessedOrientation;constructor(e){e.length===0&&M(`Blueprint`,`requires at least one curve — use createBlueprint() for Result-based validation`),this.curves=e,this._boundingBox=null,this._orientation=null,this._guessedOrientation=null}delete(){this.curves.forEach(e=>{e.delete()}),this._boundingBox&&this._boundingBox.delete()}[Symbol.dispose](){this.delete()}clone(){return new e(this.curves.map(e=>e.clone()))}get repr(){return[`Blueprint`,...this.curves.map(e=>e.repr)].join(`
19
- `)}get boundingBox(){return this._boundingBox||=fL(this.curves),this._boundingBox}get orientation(){if(this._orientation)return this._orientation;if(this._guessedOrientation)return this._guessedOrientation;let e=this.curves.flatMap(e=>e.geomType===`LINE`?[e.firstPoint]:[e.firstPoint,e.value(.5)]),t=e.map((t,n)=>{let r=sA(e,(n+1)%e.length);return(r[0]-t[0])*(r[1]+t[1])}).reduce((e,t)=>e+t,0);return this._guessedOrientation=t>0?`clockwise`:`counterClockwise`,this._guessedOrientation}stretch(t,n,r=[0,0]){let i=hL(this.curves,gL(t,n,r));return new e(i)}scale(t,n){let r=n||this.boundingBox.center,i=hL(this.curves,bL(t,r));return new e(i)}rotate(t,n){let r=hL(this.curves,yL(t*vD,n));return new e(r)}translate(t,n=0){let r=UI(t)?t:[t,n],i=hL(this.curves,_L(r));return new e(i)}mirror(t,n=[0,0],r=`center`){let i=hL(this.curves,vL(t,n,r));return new e(i)}sketchOnPlane(e,t){let n=e&&typeof e!=`string`?{...e}:GD(e,t),r=pL(this.curves,n),i=TL(r);for(let e of r)e[Symbol.dispose]();return{wire:i,defaultOrigin:n.origin,defaultDirection:n.zDir}}sketchOnFace(e,t){let n=U(),r=j(xL(this.curves,e,t)),i=TL(r);for(let e of r)e[Symbol.dispose]();n.buildCurves3d(i.wrapped);let a=n.fixWireOnFace(i.wrapped,e.wrapped,1e-9);return i[Symbol.dispose](),{wire:_E(a),baseFace:e}}subFace(e,t){let n=bD(t||[...hO(e)]);return j(CA(this.translate(fO(e,n)).sketchOnFace(e,`original`).wire))}punchHole(e,t,{height:n=null,origin:r=null,draftAngle:i=0}={}){let a=j(HI(t,e)),o=this.subFace(a,r);return j(nO(U().draftPrism(e.wrapped,o.wrapped,a.wrapped,n,i,!1)))}toSVGPathD(){let e=this.clone().mirror([1,0],[0,0],`plane`),t=tL(e.curves).flatMap(e=>dL(e,e.lastPoint)),[n,r]=cA(e.curves).firstPoint;return`M ${KI(n)} ${KI(r)} ${t.join(` `)}${e.isClosed()?` Z`:``}`}toSVGPath(){return`<path d="${this.toSVGPathD()}" />`}toSVGViewBox(e=1){return CL(this.boundingBox,e)}toSVGPaths(){return[this.toSVGPathD()]}toSVG(e=1){return wL(this.toSVGPath(),this.boundingBox,e)}get firstPoint(){return cA(this.curves).firstPoint}get lastPoint(){return lA(this.curves).lastPoint}isInside(e){if(!this.boundingBox.containsPoint(e))return!1;let t=U(),n=nL(e,this.boundingBox.outsidePoint());try{if(this.curves.find(t=>t.isOnCurve(e)))return!1;let r=[],i=0;return this.curves.forEach(e=>{if(e.boundingBox.isOut(n.boundingBox))return;let a=t.intersectCurves2d(n.wrapped,e.wrapped,1e-9);for(let e of a.points)r.some(t=>hI(t,e,1e-9))||(r.push(e),i++);for(let e of a.segments)e.delete()}),!!(i%2)}finally{n.delete()}}isClosed(){return hI(this.firstPoint,this.lastPoint)}intersects(e){if(this.boundingBox.isOut(e.boundingBox))return!1;let t=U();for(let n of this.curves)for(let r of e.curves){if(n.boundingBox.isOut(r.boundingBox))continue;let e=t.intersectCurves2d(n.wrapped,r.wrapped,1e-9);if(e.points.length||e.segments.length)return!0}return!1}},DL=class{constructor(e=1/0,t=Float64Array,n=Uint32Array){let r=e!==1/0;this.ids=r?new n(e):[],this.values=r?new t(e):[],this.capacity=e,this.length=0}clear(){this.length=0}push(e,t){if(this.length===this.capacity)throw RangeError(`Queue is at capacity.`);let n=this.length++;for(;n>0;){let e=n-1>>1,r=this.values[e];if(t>=r)break;this.ids[n]=this.ids[e],this.values[n]=r,n=e}this.ids[n]=e,this.values[n]=t}pop(){if(this.length===0)return;let e=this.ids,t=this.values,n=e[0],r=--this.length;if(r>0){let n=e[r],i=t[r],a=0,o=r>>1;for(;a<o;){let n=(a<<1)+1,o=n+1,s=n+(o<r&+(t[o]<t[n]));if(t[s]>=i)break;e[a]=e[s],t[a]=t[s],a=s}e[a]=n,t[a]=i}return n}peek(){return this.length>0?this.ids[0]:void 0}peekValue(){return this.length>0?this.values[0]:void 0}shrink(){Array.isArray(this.ids)&&(this.ids.length=this.length),Array.isArray(this.values)&&(this.values.length=this.length)}},OL=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],kL=3,AL=class e{static from(t,n=0){if(n%8!=0)throw Error(`byteOffset must be 8-byte aligned.`);if(!t||t.byteLength===void 0||`buffer`in t)throw Error(`Data must be an instance of ArrayBuffer or SharedArrayBuffer.`);let[r,i]=new Uint8Array(t,n+0,2);if(r!==251)throw Error(`Data does not appear to be in a Flatbush format.`);let a=i>>4;if(a!==kL)throw Error(`Got v${a} data when expected v${kL}.`);let o=OL[i&15];if(!o)throw Error(`Unrecognized array type.`);let[s]=new Uint16Array(t,n+2,1),[c]=new Uint32Array(t,n+4,1);return new e(c,s,o,void 0,t,n)}constructor(e,t=16,n=Float64Array,r=ArrayBuffer,i,a=0){if(e===void 0)throw Error(`Missing required argument: numItems.`);if(isNaN(e)||e<=0)throw Error(`Unexpected numItems value: ${e}.`);this.numItems=+e,this.nodeSize=Math.min(Math.max(+t,2),65535),this.byteOffset=a;let o=e,s=o;this._levelBounds=[o*4];do o=Math.ceil(o/this.nodeSize),s+=o,this._levelBounds.push(s*4);while(o!==1);this.ArrayType=n,this.IndexArrayType=s<16384?Uint16Array:Uint32Array;let c=OL.indexOf(n),l=s*4*n.BYTES_PER_ELEMENT;if(c<0)throw Error(`Unexpected typed array class: ${n}.`);let u=n,d=this.IndexArrayType;if(i)this.data=i,this._boxes=new u(i,a+8,s*4),this._indices=new d(i,a+8+l,s),this._pos=s*4,this.minX=this._boxes[this._pos-4],this.minY=this._boxes[this._pos-3],this.maxX=this._boxes[this._pos-2],this.maxY=this._boxes[this._pos-1];else{let n=this.data=new r(8+l+s*this.IndexArrayType.BYTES_PER_ELEMENT);this._boxes=new u(n,8,s*4),this._indices=new d(n,8+l,s),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(n,0,2).set([251,(kL<<4)+c]),new Uint16Array(n,2,1)[0]=t,new Uint32Array(n,4,1)[0]=e}this._queue=new DL}add(e,t,n=e,r=t){let i=this._pos,a=i>>2,o=this._boxes;return this._indices[a]=a,o[i]=e,o[i+1]=t,o[i+2]=n,o[i+3]=r,this._pos=i+4,e<this.minX&&(this.minX=e),t<this.minY&&(this.minY=t),n>this.maxX&&(this.maxX=n),r>this.maxY&&(this.maxY=r),a}finish(){if(this._pos>>2!==this.numItems)throw Error(`Added ${this._pos>>2} items when expected ${this.numItems}.`);let e=this._boxes;if(this.numItems<=this.nodeSize){e[this._pos++]=this.minX,e[this._pos++]=this.minY,e[this._pos++]=this.maxX,e[this._pos++]=this.maxY;return}let{numItems:t,minX:n,minY:r,nodeSize:i,_indices:a,_levelBounds:o}=this,s=this.maxX-n||1,c=this.maxY-r||1,l=new Int32Array(t),u=65535,d=u/s,f=u/c;for(let i=0,a=0;i<t;i++){let t=e[a++],o=e[a++],s=e[a++],c=e[a++];l[i]=PL(d*((t+s)/2-n)|0,f*((o+c)/2-r)|0)}ML(l,e,a,0,t-1,i);let p=t*4;for(let t=0,n=0;t<o.length-1;t++){let r=o[t];for(;n<r;){let t=n,o=e[n++],s=e[n++],c=e[n++],l=e[n++];for(let t=1;t<i&&n<r;t++)o=Math.min(o,e[n++]),s=Math.min(s,e[n++]),c=Math.max(c,e[n++]),l=Math.max(l,e[n++]);a[p>>2]=t,e[p++]=o,e[p++]=s,e[p++]=c,e[p++]=l}}this._pos=p}search(e,t,n,r,i){if(this._pos!==this._boxes.length)throw Error(`Data not yet indexed - call index.finish().`);let{_boxes:a,_levelBounds:o,_indices:s,nodeSize:c}=this,l=this.numItems*4,u=a.length-4,d=o.length-1,f=[],p=[],m=!1;for(;u!==void 0;){let h=Math.min(u+c*4,o[d]),g=u>=l;if(m)this._collectContained(u,h,d,l,p,i);else for(let o=u;o<h;o+=4){let c=a[o];if(n<c)continue;let l=a[o+1];if(r<l)continue;let u=a[o+2];if(e>u)continue;let m=a[o+3];if(t>m)continue;let h=s[o>>2]|0;if(g){let i=+(e<=c&&t<=l&&n>=u&&r>=m);f.push(h|i,d-1)}else(i===void 0||i(h,c,l,u,m))&&p.push(h)}d=f.pop(),u=f.pop(),u!==void 0&&(m=(u&1)==1,u&=-2)}return p}_collectContained(e,t,n,r,i,a){let o=this._boxes,s=this._indices,c=e;for(let e=n;e>0;e--)c=s[c>>2];let l=Math.min(c+(t-e)*this.nodeSize**n,r);if(a===void 0)for(;c<l;c+=4)i.push(s[c>>2]|0);else for(;c<l;c+=4){let e=s[c>>2]|0;a(e,o[c],o[c+1],o[c+2],o[c+3])&&i.push(e)}}neighbors(e,t,n=1/0,r=1/0,i){if(this._pos!==this._boxes.length)throw Error(`Data not yet indexed - call index.finish().`);let{_boxes:a,_levelBounds:o,_indices:s,_queue:c,nodeSize:l}=this,u=this.numItems*4,d=l*4,f=[],p=r*r,m=n===1,h=p;for(c.push(a.length-4<<1,0);c.length;){let r=c.ids[0];if(r&1){if(c.pop(),f.push(r>>1),f.length===n)break;continue}c.pop();let l=r>>1,p=l<u,g=Math.min(l+d,jL(l,o));for(let n=l;n<g;n+=4){let r=a[n],o=a[n+1],l=a[n+2],u=a[n+3],d=Math.max(Math.max(r-e,e-l),0),f=Math.max(Math.max(o-t,t-u),0),g=d*d+f*f;if(g>h)continue;let _=s[n>>2]|0;p?(i===void 0||i(_))&&(c.push(_<<1|1,g),m&&g<h&&(h=g)):c.push(_<<1,g)}}return c.clear(),f}};function jL(e,t){let n=0,r=t.length-1;for(;n<r;){let i=n+r>>1;t[i]>e?r=i:n=i+1}return t[n]}function ML(e,t,n,r,i,a){let o=[r,i];for(;o.length;){let r=o.pop()||0,i=o.pop()||0;if(r-i<=a&&Math.floor(i/a)>=Math.floor(r/a))continue;let s=e[i],c=e[i+r>>1],l=e[r],u=s>c==s>l?c<s==c<l?l:c:s,d=i-1,f=r+1;for(;;){do d++;while(e[d]<u);do f--;while(e[f]>u);if(d>=f)break;NL(e,t,n,d,f)}o.push(i,f,f+1,r)}}function NL(e,t,n,r,i){let a=e[r];e[r]=e[i],e[i]=a;let o=4*r,s=4*i,c=t[o],l=t[o+1],u=t[o+2],d=t[o+3];t[o]=t[s],t[o+1]=t[s+1],t[o+2]=t[s+2],t[o+3]=t[s+3],t[s]=c,t[s+1]=l,t[s+2]=u,t[s+3]=d;let f=n[r];n[r]=n[i],n[i]=f}function PL(e,t){let n=e^t,r=65535^n,i=65535^(e|t),a=e&(t^65535),o=n|r>>1,s=n>>1^n,c=i^(i>>1^r&a>>1),l=a^(n&i>>1^a>>1);return n=o&o>>2^s&s>>2,r=o&s>>2^s&(o^s)>>2,i=c^(o&c>>2^s&l>>2),a=l^(s&c>>2^(o^s)&l>>2),o=n&n>>4^r&r>>4,s=n&r>>4^r&(n^r)>>4,c=i^(n&i>>4^r&a>>4),l=a^(r&i>>4^(n^r)&a>>4),i=c^(o&c>>8^s&l>>8),a=l^(s&c>>8^(o^s)&l>>8),i^=i>>1,a^=a>>1,n=e^t,r=a|65535^(n|i),n=(n|n<<8)&16711935,n=(n|n<<4)&252645135,n=(n|n<<2)&858993459,n=(n|n<<1)&1431655765,r=(r|r<<8)&16711935,r=(r|r<<4)&252645135,r=(r|r<<2)&858993459,r=(r|r<<1)&1431655765,((r<<1|n)>>>0)-2147483648}var FL=(e,t,n=1e-9)=>{if(e.boundingBox.isOut(t.boundingBox))return O({intersections:[],commonSegments:[],commonSegmentsPoints:[]});let r=gT(),i,a;try{let o=r.intersectCurves2d(e.wrapped,t.wrapped,n);i=o.points,a=o.segments.map(e=>new QI(e))}catch(e){return k(I(`INTERSECTION_FAILED`,`Intersections failed between curves`,e))}let o=a.filter(e=>hI(e.firstPoint,e.lastPoint,n)).map(e=>e.firstPoint);o.length&&(i.push(...o),a=a.filter(e=>!hI(e.firstPoint,e.lastPoint,n)));let s=a.flatMap(e=>[e.firstPoint,e.lastPoint]);return O({intersections:i,commonSegments:a,commonSegmentsPoints:s})},IL=(e,t=1e-9)=>{let n=gT(),r;try{let i=n.intersectCurves2d(e.wrapped,e.wrapped,t);r=i.points;for(let e of i.segments)e.delete()}catch(e){return k(I(`SELF_INTERSECTION_FAILED`,`Self intersection failed`,e))}return O(r)},LL=(e,n,r)=>{let i=OI(_I(n,e)),a=[i[1],-i[0]],o=[t(a,0)*r,t(a,1)*r];return{firstPoint:gI(e,o),lastPoint:gI(n,o)}},RL=(e,t)=>{let n=e.geomType,r=gT();if(n===`CIRCLE`){let n=r.getCurve2dCircleData(e.wrapped);if(!n)return nL(e.firstPoint,e.lastPoint);let{cx:i,cy:a,radius:o,isDirect:s}=n,c=t*(s?1:-1),l=o+c;if(l<1e-10){let t=[i,a],n=e=>{let[n,r]=OI(_I(e,t));return gI(e,[c*n,c*r])};return{collapsed:!0,firstPoint:n(e.firstPoint),lastPoint:n(e.lastPoint)}}let u=new QI(r.makeCircle2d(i,a,l,s)),d;try{d=r.trimCurve2d(u.wrapped,e.firstParameter,e.lastParameter)}finally{u.delete()}return new QI(d)}if(n===`LINE`){let{firstPoint:n,lastPoint:r}=LL(e.firstPoint,e.lastPoint,t);return nL(n,r)}let i=new QI(r.offsetCurve2d(e.wrapped,t)),a=$I(i);if(i.delete(),j(IL(a)).length){let e=a.firstPoint,t=a.lastPoint;return a.delete(),{collapsed:!0,firstPoint:e,lastPoint:t}}return a};function zL(e,n,r){let i=xI(e.tangentAt(1),n.tangentAt(0));if(Math.abs(i)<1e-10)return null;let a=Math.abs(r)*(i>0?-1:1),o=RL(e,a),s=RL(n,a);if(!(o instanceof QI)||!(s instanceof QI))return null;let c=FL(o,s,1e-9);if(!za(c))return null;let l=c.value.intersections.at(-1);if(!UI(l))return null;let u=l,d=(e,t)=>{let[n,r]=t.tangentAt(u),i=OI([-r,n]),o=gI(u,vI(i,a)),s=j(e.parameter(o,1e-6));return e.splitAt([s])},f=d(e,o),p=d(n,s);return{first:t(f,0),second:t(p,1),center:u}}function BL(e,t,n){let r=zL(e,t,n);if(!r)return[e,t];let{first:i,second:a,center:o}=r;return[i,uL(i.lastPoint,a.firstPoint,o),a]}function VL(e,t,n){let r=zL(e,t,n);if(!r)return[e,t];let{first:i,second:a}=r;return[i,nL(i.lastPoint,a.firstPoint),a]}function HL(e,n,r){let i=xI(OI(e.tangentAt(1)),OI(n.tangentAt(0))),a=Math.asin(i);if(Math.abs(i)<1e-10)return[e,n];let o=i>0?-1:1,s=Math.abs(r)*Math.sin(a/2)*o,c=RL(e,s),l=RL(n,s);if(!(c instanceof QI)||!(l instanceof QI))return[e,n];let u=FL(c,l,1e-9);if(!za(u))return[e,n];let d=u.value.intersections.at(-1);if(!UI(d))return[e,n];let f=aL(r,d),p=j(FL(e,f)).intersections[0],m=j(FL(n,f)).intersections.at(-1);if(!p||!m)return[e,n];let h=e.splitAt([p]),g=n.splitAt([m]),_=t(h,0),v=t(g,g.length-1);try{return[_,rL(_.lastPoint,e.lastPoint,v.firstPoint),v]}catch{return[e,n]}}var UL=class e{blueprints;_boundingBox;constructor(e){this.blueprints=e,this._boundingBox=null}get repr(){return[`Blueprints`,...this.blueprints.map(e=>e.repr)].join(`
20
- `)}clone(){return new e(this.blueprints.map(e=>e.clone()))}get boundingBox(){if(!this._boundingBox){let e=new XI;this.blueprints.forEach(t=>{e.add(t.boundingBox)}),this._boundingBox=e}return this._boundingBox}stretch(t,n,r){return new e(this.blueprints.map(e=>e.stretch(t,n,r)))}rotate(t,n){return new e(this.blueprints.map(e=>e.rotate(t,n)))}scale(t,n){let r=n||this.boundingBox.center;return new e(this.blueprints.map(e=>e.scale(t,r)))}translate(t,n=0){return new e(this.blueprints.map(e=>typeof t==`number`?e.translate(t,n):e.translate(t)))}mirror(t,n,r){return new e(this.blueprints.map(e=>e.mirror(t,n,r)))}sketchOnPlane(e,t){return this.blueprints.map(n=>n.sketchOnPlane(e,t))}sketchOnFace(e,t){return this.blueprints.map(n=>n.sketchOnFace(e,t))}punchHole(e,t,n={}){let r=e;return this.blueprints.forEach(e=>{r=e.punchHole(r,t,n)}),r}toSVGViewBox(e=1){return CL(this.boundingBox,e)}toSVGPaths(){return this.blueprints.map(e=>e.toSVGPaths())}toSVG(e=1){return wL(this.blueprints.map(e=>e instanceof EL?e.toSVGPath():e.toSVGGroup()).join(`
21
- `),this.boundingBox,e)}},WL=class e{blueprints;_boundingBox;constructor(e){e.length===0&&M(`CompoundBlueprint`,`requires at least one blueprint (the outer boundary) — use createCompoundBlueprint() for Result-based validation`),this.blueprints=e,this._boundingBox=null}clone(){return new e(this.blueprints.map(e=>e.clone()))}get boundingBox(){if(!this._boundingBox){let e=new XI;this.blueprints.forEach(t=>{e.add(t.boundingBox)}),this._boundingBox=e}return this._boundingBox}get repr(){return[`Compound Blueprints`,`-- Outline`,cA(this.blueprints).repr,`-- Holes`,...this.blueprints.slice(1).map(e=>e.repr)].join(`
22
- `)}stretch(t,n,r){return new e(this.blueprints.map(e=>e.stretch(t,n,r)))}rotate(t,n){return new e(this.blueprints.map(e=>e.rotate(t,n)))}scale(t,n){let r=n||this.boundingBox.center;return new e(this.blueprints.map(e=>e.scale(t,r)))}translate(t,n=0){return new e(this.blueprints.map(e=>typeof t==`number`?e.translate(t,n):e.translate(t)))}mirror(t,n,r){return new e(this.blueprints.map(e=>e.mirror(t,n,r)))}sketchOnPlane(e,t){return this.blueprints.map(n=>n.sketchOnPlane(e,t))}sketchOnFace(e,t){return this.blueprints.map(n=>n.sketchOnFace(e,t))}punchHole(e,t,n={}){return cA(this.blueprints).punchHole(e,t,n)}toSVGViewBox(e=1){return CL(this.boundingBox,e)}toSVGPaths(){return this.blueprints.flatMap(e=>e.toSVGPaths())}toSVGGroup(){return`<g>${this.blueprints.map(e=>e.toSVGPath()).join(``)}</g>`}toSVG(e=1){return wL(this.toSVGGroup(),this.boundingBox,e)}},GL=e=>{if(e.length===0)return[];if(e.length===1)return[[xo(e,0,`groupByBoundingBoxOverlap`)]];let t=new AL(e.length);for(let n of e){let[[e,r],[i,a]]=n.boundingBox.bounds;t.add(e,r,i,a)}t.finish();let n=e.map((n,r)=>{let[[i,a],[o,s]]=n.boundingBox.bounds;return t.search(i,a,o,s).filter(t=>t>r&&!n.boundingBox.isOut(xo(e,t,`groupByBoundingBoxOverlap`).boundingBox))}),r=[],i=Array(n.length);return n.forEach((t,n)=>{let a=i[n];a||(a=[],r.push(a)),a.push(xo(e,n,`groupByBoundingBoxOverlap`)),t.length&&t.forEach(e=>{i[e]=a})}),r},KL=e=>e.map((t,n)=>{let r=xo(t.curves,0,`addContainmentInfo`),i=r.value((r.lastParameter+r.firstParameter)/2);return{blueprint:t,isIn:e.filter((e,t)=>n===t?!1:e.isInside(i))}}),qL=(e,t)=>e.flatMap(({blueprint:e})=>YL(t.filter(({blueprint:t,isIn:n})=>t===e||n.indexOf(e)!==-1))),JL=(e,t)=>[t.filter(({isIn:e})=>e.length<=1),...YL(KL(e.map(({blueprint:e})=>e)))],YL=e=>{if(!e.length)return[];let t=e.filter(({isIn:e})=>!e.length),n=e.filter(({isIn:e})=>e.length>1);return t.length===1&&n.length===0?[e]:t.length>1?qL(t,e):JL(n,e)},XL=e=>new UL(GL(e).map(KL).flatMap(YL).map(e=>e.length===1?xo(e,0,`organiseBlueprints`).blueprint:(e.sort((e,t)=>e.isIn.length-t.isIn.length),new WL(e.map(({blueprint:e})=>e))))),ZL=e=>e===`symmetric`||typeof e==`number`||Array.isArray(e)&&e.length===2,QL=e=>{let t;t=e?ZL(e)?{endTangent:e}:{endTangent:0,...e}:{endTangent:[1,0]};let{endTangent:n,startFactor:r=1,endFactor:i=1,startTangent:a}=t,o;o=typeof n==`number`?EI(1,n*vD):n;let s;return s=typeof a==`number`?EI(1,a*vD):a,{endTangent:o,startFactor:r,endFactor:i,startTangent:s}};function $L(e,t,n){return e<t?{majorRadius:t,minorRadius:e,rotationAngle:n+90}:{majorRadius:e,minorRadius:t,rotationAngle:n}}function eR(e,t,n,r,i,a,o,s){let c=i*vD,l=e=>yI(s(e)),u=l(EI(n,c)),d=l(EI(r,c+Math.PI/2)),f=OI(s(wI([1,0],c))),[,p]=DI(f),{cx:m,cy:h,startAngle:g,endAngle:_,clockwise:v,rx:y,ry:b}=rR(e,t,u,d,p,a,o),x=sL(y,b,v?g:_,v?_:g,[m,h],f);return v||x.reverse(),x}function tR(e,t,n,r,i){let a=Math.PI*2,o=nR(1,0,e,t),s=nR(e,t,-n,-r);for(;s>a;)s-=a;for(;s<0;)s+=a;i||(s-=a);let c=o+s;for(;c>a;)c-=a;for(;c<0;)c+=a;return{startAngle:o,deltaAngle:s,endAngle:c}}function nR(e,t,n,r){let i=e*n+t*r,a=Math.sqrt((e*e+t*t)*(n*n+r*r));a<1e-12&&M(`radianAngle`,`Cannot compute angle between zero-length vectors`);let o=Math.acos(Math.max(-1,Math.min(1,i/a)));return e*r-t*n<0&&(o=-o),o}function rR([e,t],[n,r],i,a,o,s,c){i<0&&(i=-i),a<0&&(a=-a),(i<1e-10||a<1e-10)&&M(`convertSvgEllipseParams`,`rx and ry cannot be 0`);let l=Math.sin(o),u=Math.cos(o),d=(e-n)/2,f=(t-r)/2,p=(e+n)/2,m=(t+r)/2,h=u*d+l*f,g=u*f-l*d,_=h*h/(i*i)+g*g/(a*a);_>1&&(i*=Math.sqrt(_),a*=Math.sqrt(_));let v=i*a,y=i*g,b=a*h,x=y*y+b*b;x||M(`convertSvgEllipseParams`,`Start point cannot be same as end point`);let S=Math.sqrt(Math.abs((v*v-x)/x));s===c&&(S=-S);let C=S*y/a,w=-S*b/i,ee=u*C-l*w+p,te=l*C+u*w+m,ne=(h-C)/i,re=(h+C)/i,{startAngle:ie,deltaAngle:ae,endAngle:oe}=tR(ne,(g-w)/a,re,(g+w)/a,c);return{cx:ee,cy:te,startAngle:ie,deltaAngle:ae,endAngle:oe,clockwise:c,rx:i,ry:a}}var iR={chamfer:VL,dogbone:HL,fillet:BL};function aR(e,t){if(typeof e==`function`)return e;let n=iR[t];return(t,r)=>n(t,r,e)}var oR=class{pointer;firstPoint;pendingCurves;_nextCorner;constructor(e=[0,0]){this.pointer=e,this.firstPoint=e,this._nextCorner=null,this.pendingCurves=[]}_convertToUV([e,t]){return[e,t]}_convertFromUV([e,t]){return[e,t]}_lastCurve(){let e=this.pendingCurves.length;return e===0?null:this.pendingCurves[e-1]}_requireLastCurve(e,t){let n=this._lastCurve();return n||M(e,`You need a previous curve to ${t}`),n}_resolveRelative(e,t){return[this.pointer[0]+e,this.pointer[1]+t]}_saveCurveAndAdvance(e,t){return this.saveCurve(e),this.pointer=t,this}get penPosition(){return this.pointer}get penAngle(){let e=this._lastCurve();if(!e)return 0;let[t,n]=e.tangentAt(1);return Math.atan2(n,t)*yD}movePointerTo(e){return this.pendingCurves.length&&M(`Sketcher2d.movePointerTo`,`You can only move the pointer if there is no curve defined`),this.pointer=e,this.firstPoint=e,this}saveCurve(e){if(!this._nextCorner){this.pendingCurves.push(e);return}let t=this.pendingCurves.pop();t||M(`Sketcher2d.saveCurve`,`No previous curve available for custom corner`),this.pendingCurves.push(...this._nextCorner(t,e)),this._nextCorner=null}lineTo(e){let t=nL(this._convertToUV(this.pointer),this._convertToUV(e));return this._saveCurveAndAdvance(t,e)}line(e,t){return this.lineTo(this._resolveRelative(e,t))}vLine(e){return this.line(0,e)}hLine(e){return this.line(e,0)}vLineTo(e){return this.lineTo([this.pointer[0],e])}hLineTo(e){return this.lineTo([e,this.pointer[1]])}polarLineTo([e,t]){return this.lineTo(EI(e,t*vD))}polarLine(e,t){let[n,r]=EI(e,t*vD);return this.line(n,r)}tangentLine(e){let t=this._requireLastCurve(`Sketcher2d.tangentLine`,`sketch a tangent line`),n=OI(this._convertFromUV(t.tangentAt(1)));return this.line(n[0]*e,n[1]*e)}threePointsArcTo(e,t){let n=rL(this._convertToUV(this.pointer),this._convertToUV(t),this._convertToUV(e));return this._saveCurveAndAdvance(n,e)}threePointsArc(e,t,n,r){let[i,a]=this.pointer;return this.threePointsArcTo([i+e,a+t],[i+n,a+r])}sagittaArcTo(e,t){let[n,r]=this.pointer,[i,a]=e,o=(n+i)/2,s=(r+a)/2,c=-(a-r),l=i-n,u=Math.sqrt(c**2+l**2);u<1e-12&&M(`sagittaArcTo`,`Start and end points cannot be identical`);let d=[o+c/u*t,s+l/u*t],f=rL(this._convertToUV(this.pointer),this._convertToUV(d),this._convertToUV(e));return this._saveCurveAndAdvance(f,e)}sagittaArc(e,t,n){return this.sagittaArcTo(this._resolveRelative(e,t),n)}vSagittaArc(e,t){return this.sagittaArc(0,e,t)}hSagittaArc(e,t){return this.sagittaArc(e,0,t)}bulgeArcTo(e,t){if(!t)return this.lineTo(e);let n=yI(this.pointer,e)/2;return this.sagittaArcTo(e,-t*n)}bulgeArc(e,t,n){return this.bulgeArcTo(this._resolveRelative(e,t),n)}vBulgeArc(e,t){return this.bulgeArc(0,e,t)}hBulgeArc(e,t){return this.bulgeArc(e,0,t)}tangentArcTo(e){let t=this._requireLastCurve(`Sketcher2d.tangentArc`,`sketch a tangent arc`),n=iL(this._convertToUV(this.pointer),t.tangentAt(1),this._convertToUV(e));return this._saveCurveAndAdvance(n,e)}tangentArc(e,t){return this.tangentArcTo(this._resolveRelative(e,t))}ellipseTo(e,t,n,r=0,i=!1,a=!1){let{majorRadius:o,minorRadius:s,rotationAngle:c}=$L(t,n,r),l=eR(this._convertToUV(this.pointer),this._convertToUV(e),o,s,c,i,a,e=>this._convertToUV(e));return this._saveCurveAndAdvance(l,e)}ellipse(e,t,n,r,i=0,a=!1,o=!1){return this.ellipseTo(this._resolveRelative(e,t),n,r,i,a,o)}halfEllipseTo(e,t,n=!1){let r=CI(e,this.pointer),i=yI(e,this.pointer);return this.ellipseTo(e,i/2,t,r*yD,!0,n)}halfEllipse(e,t,n,r=!1){return this.halfEllipseTo(this._resolveRelative(e,t),n,r)}bezierCurveTo(e,t){let n=t.length===2&&!Array.isArray(t[0])?[t]:t,r=cL(this._convertToUV(this.pointer),n.map(e=>this._convertToUV(e)),this._convertToUV(e));return this._saveCurveAndAdvance(r,e)}quadraticBezierCurveTo(e,t){return this.bezierCurveTo(e,[t])}cubicBezierCurveTo(e,t,n){return this.bezierCurveTo(e,[t,n])}smoothSplineTo(e,t){let{endTangent:n,startTangent:r,startFactor:i,endFactor:a}=QL(t),o=this._lastCurve(),s=yI(this.pointer,e)*.25,c;c=r||(o?this._convertFromUV(o.tangentAt(1)):[1,0]),c=OI(c);let l=[this.pointer[0]+c[0]*i*s,this.pointer[1]+c[1]*i*s],u;u=n===`symmetric`?[-c[0],-c[1]]:n,u=OI(u);let d=[e[0]-u[0]*a*s,e[1]-u[1]*a*s];return this.cubicBezierCurveTo(e,l,d)}smoothSpline(e,t,n){return this.smoothSplineTo(this._resolveRelative(e,t),n)}customCorner(e,t=`fillet`){return this.pendingCurves.length||M(`Sketcher2d.customCorner`,`You need a curve defined to fillet the angle`),this._nextCorner=aR(e,t),this}_customCornerLastWithFirst(e,t=`fillet`){if(!e)return;let n=this.pendingCurves.pop(),r=this.pendingCurves.shift();(!n||!r)&&M(`Sketcher2d._customCornerLastWithFirst`,`Not enough curves to close and fillet`),this.pendingCurves.push(...aR(e,t)(n,r))}_closeSketch(){hI(this.pointer,this.firstPoint)||this.lineTo(this.firstPoint)}_closeWithMirror(){hI(this.pointer,this.firstPoint)&&M(`Sketcher2d._closeWithMirror`,`Cannot close with a mirror when the sketch is already closed`);let e=[this.pointer[0]-this.firstPoint[0],this.pointer[1]-this.firstPoint[1]],t=this._convertToUV(this.pointer),n=this._convertToUV(e),r=this.pendingCurves.map(e=>new QI(U().mirrorCurve2dAcrossAxis(e.wrapped,t[0],t[1],n[0],n[1])));r.reverse();for(let e of r)e.reverse();this.pendingCurves.push(...r),this.pointer=this.firstPoint}},sR=class extends oR{constructor(e=[0,0]){super(),this.pointer=e,this.firstPoint=e,this.pendingCurves=[]}done(){return new EL(this.pendingCurves)}close(){return this._closeSketch(),this.done()}closeWithMirror(){return this._closeWithMirror(),this.close()}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}},cR=2*Math.PI;function lR(e){let t=e%cR,n=t<0?t+cR:t;return n<Math.PI?n:n===Math.PI?0:Math.abs(n-cR)}function uR(e){return e.curves.map((t,n)=>({firstCurve:t,secondCurve:sA(e.curves,(n+1)%e.curves.length),point:t.lastPoint}))}function dR(e){let t=t=>dR([...e,t]),n=t=>e.every(e=>e(t));return{shouldKeep:n,when:e=>t(e),inList:e=>t(t=>e.some(e=>hI(e,t.point))),atDistance:(e,n=[0,0])=>t(t=>Math.abs(yI(n,t.point)-e)<1e-9),atPoint:e=>t(t=>hI(e,t.point)),inBox:(e,n)=>{let r=Math.min(e[0],n[0]),i=Math.max(e[0],n[0]),a=Math.min(e[1],n[1]),o=Math.max(e[1],n[1]);return t(e=>{let[t,n]=e.point;return t>=r&&t<=i&&n>=a&&n<=o})},ofAngle:e=>t(t=>{let n=t.firstCurve.tangentAt(1),r=t.secondCurve.tangentAt(0);return Math.abs(lR(SI(n,r))-lR(vD*e))<1e-9}),not:e=>{let n=e(dR([]));return t(e=>!n.shouldKeep(e))},either:e=>{let n=e.map(e=>e(dR([])));return t(e=>n.some(t=>t.shouldKeep(e)))},find:e=>uR(e).filter(n)}}function fR(){return dR([])}var pR=(e,t,n=0)=>{let r=[...Array(t).keys()].map(n=>{let r=-(Math.PI*2/t)*n;return[e*Math.sin(r),e*Math.cos(r)]}),i=lA(r),a=new sR().movePointerTo([i[0],i[1]]);return n?r.forEach(([e,t])=>a.sagittaArcTo([e,t],n)):r.forEach(([e,t])=>a.lineTo([e,t])),a.done()},mR=(e,t,n=0)=>{let{rx:r=0,ry:i=0}=typeof n==`number`?{ry:n,rx:n}:n,a=Math.min(r,e/2),o=Math.min(i,t/2),s=a&&o;s||(a=0,o=0);let c=a===o,l=new sR([Math.min(0,-(e/2-a)),-t/2]),u=(e,t)=>{s&&(c?l.tangentArc(e,t):l.ellipse(e,t,a,o,0,!1,!0))};return a<e/2&&l.hLine(e-2*a),u(a,o),o<t/2&&l.vLine(t-2*o),u(-a,o),a<e/2&&l.hLine(-(e-2*a)),u(-a,-o),o<t/2&&l.vLine(-(t-2*o)),u(a,-o),l.close()},hR=(e,t)=>hI(e,t,fI);function gR(e){return`${e[0].toFixed(9)},${e[1].toFixed(9)}`}function _R(e,t){let n=gR(e),r=gR(t);return n<r?`${n}|${r}`:`${r}|${n}`}function vR(e){let t=e[0];return t===void 0&&M(`startOfSegment`,`empty segment`),t.firstPoint}function yR(e){let t=e[e.length-1];return t===void 0&&M(`endOfSegment`,`empty segment`),t.lastPoint}function bR(e){return[...e].reverse().map(e=>{let t=e.clone();return t.reverse(),t})}function xR(e){return[...e].reverse().map(bR)}function SR(e){let t=(e.lastParameter+e.firstParameter)/2;return e.value(t)}function CR(e,t){let n=gR(t);for(let r=0;r<e.length;r++){let i=e[r];if(i!==void 0&&gR(i.firstPoint)===n&&hR(t,i.firstPoint))return r}for(let n=0;n<e.length;n++){let r=e[n];if(r!==void 0&&hR(t,r.firstPoint))return n}return-1}function wR(e,t,n,r){for(let i=0;i<e.length;i++){let a=e[i];if(a!==void 0&&gR(a.firstPoint)===t&&gR(a.lastPoint)===n&&r(a))return i}for(let t=0;t<e.length;t++){let n=e[t];if(n!==void 0&&r(n))return t}return-1}function TR(e,t){return t<=0?e:e.slice(t).concat(e.slice(0,t))}function ER(e,t){return TR(e,CR(e,t))}function DR(e,t){let n=gR(t.firstPoint),r=gR(t.lastPoint),i=e=>hR(t.firstPoint,e.firstPoint)&&hR(t.lastPoint,e.lastPoint),a=e=>hR(t.lastPoint,e.firstPoint)&&hR(t.firstPoint,e.lastPoint);function o(e,t,n,r){let i=wR(e,t,n,r);return i===-1?null:TR(e,i)}let s=o(e,n,r,i);if(s!==null)return s;let c=o(e,r,n,a);if(c!==null)return c;let l=bR(e),u=o(l,n,r,i);if(u!==null)return u;let d=o(l,r,n,a);if(d!==null)return d;M(`rotateToStartAtSegment`,`failed to rotate to segment start`)}function*OR(e,t,n){let r=new Set(t.map(gR)),i=new Set(n.map(e=>_R(e.firstPoint,e.lastPoint))),a=e=>r.has(gR(e))?!0:t.some(t=>hR(t,e)),o=(e,t)=>i.has(_R(e,t))?!0:n.some(n=>hR(n.firstPoint,e)&&hR(n.lastPoint,t)||hR(n.firstPoint,t)&&hR(n.lastPoint,e)),s=[];for(let t of e){if(hR(t.firstPoint,t.lastPoint)){s.push(t);continue}let e=a(t.lastPoint),n=o(t.firstPoint,t.lastPoint);e?(s.push(t),yield s,s=[]):n?(s.length&&(yield s,s=[]),yield[t]):s.push(t)}s.length&&(yield s)}function kR(e,t,n){return e.filter(e=>{let r=t.filter(t=>hR(t.firstPoint,e)||hR(t.lastPoint,e)),i=r.length%2?r.filter(t=>!(hR(t.firstPoint,e)&&hR(t.lastPoint,e))):r;if(i.length===0||i.length%2)return!1;let a=i.map(e=>n.isInside(SR(e)));return!(a.every(Boolean)||a.every(e=>!e))})}function AR(e,n){let r=[],i=[],a=e.curves.map(()=>[]),o=n.curves.map(()=>[]),s=new AL(n.curves.length);for(let e of n.curves){let[[t,n],[r,i]]=e.boundingBox.bounds;s.add(t,n,r,i)}return s.finish(),e.curves.forEach((e,c)=>{let[[l,u],[d,f]]=e.boundingBox.bounds,p=s.search(l,u,d,f);for(let s of p){let{intersections:l,commonSegments:u,commonSegmentsPoints:d}=j(FL(e,t(n.curves,s),fI/100));r.push(...l),a[c]?.push(...l),o[s]?.push(...l),i.push(...u),r.push(...d),a[c]?.push(...d),o[s]?.push(...d)}}),{allIntersections:YI(r,fI),allCommonSegments:i,firstCurvePoints:a,secondCurvePoints:o}}function jR(e,t){return dA([e,t]).flatMap(([e,t])=>t.length===0?[e]:e.splitAt(t,fI/100))}function MR(e,t,n){return e.some(([e,r])=>e===void 0||r===void 0?!1:hR(e,t)&&hR(r,n)||hR(e,n)&&hR(r,t))}function NR(e,t){let{allIntersections:n,allCommonSegments:r,firstCurvePoints:i,secondCurvePoints:a}=AR(e,t);if(n.length<=1)return null;let o=jR(e.curves,i),s=jR(t.curves,a),c=r.map(e=>[e.firstPoint,e.lastPoint]),l=kR(kR(n,o,t),s,e);if(l.length===0&&r.length===0)return null;if(r.length===0){let e=l[0];if(e===void 0)return null;o=ER(o,e),s=ER(s,e)}else{let e=r[0];if(e===void 0)return null;o=DR(o,e),s=DR(s,e)}let u=Array.from(OR(o,l,r)),d=Array.from(OR(s,l,r)),f=u[0],p=d[0];if(f!==void 0&&p!==void 0){let e=!hR(yR(p),yR(f)),t=r.length>0&&p.length!==1;(e||t)&&(d=xR(d))}let m=Math.max(u.length,d.length),h=[];for(let e=0;e<m;e++){let t=u[e],n=d[e];if(t===void 0||n===void 0){let e=t??n;if(e===void 0)continue;h.push([e,e]);continue}MR(c,vR(t),yR(t))?h.push([t,`same`]):h.push([t,n])}return h}function PR(e){if(e.length<2)return e;let n=[],r=0;for(;r<e.length;){let i=t(e,r);if(i.geomType!==`LINE`){n.push(i),r++;continue}let a=i.lastPoint,o=r+1;for(;o<e.length;){let n=t(e,o);if(n.geomType!==`LINE`||!hR(a,n.firstPoint))break;let r=_I(a,i.firstPoint),s=_I(n.lastPoint,n.firstPoint);if(Math.abs(xI(r,s))>1e-9)break;a=n.lastPoint,o++}o>r+1?n.push(nL(i.firstPoint,a)):n.push(i),r=o}return n}function FR(e){let t=e.map(e=>e.firstPoint),n=e.map(e=>e.lastPoint),r=dA([t,n.slice(-1).concat(n.slice(0,-1))]).map(([e,t],n)=>e===void 0||t===void 0||hR(e,t)?null:n).filter(e=>e!==null);if(r.length===0)return[e];let i=dA([r.slice(0,-1),r.slice(1)]).map(([t,n])=>e.slice(t,n)),a=e.slice(r[r.length-1]),o=r[0];return o!==void 0&&o!==0&&(a=a.concat(e.slice(0,o))),i.push(a),i}function IR(e,t,n){return t===1?{curves:[...e],segmentsIn:1,lastWasSame:null}:t===2||t===0?{curves:[],segmentsIn:null,lastWasSame:null}:t===null?{curves:[],segmentsIn:null,lastWasSame:n?[...n,...e]:e}:{curves:[],segmentsIn:t,lastWasSame:n}}function LR(e,t,n,r,i,a,o){let s=[],c=0,l=e[0];if(l!==void 0){let t=SR(l),n=r.isInside(t);(i.firstInside===`keep`&&n||i.firstInside===`remove`&&!n)&&(c+=1,s.push(...e))}let u=t[0];if(u!==void 0){let e=SR(u),r=n.isInside(e);if(i.secondInside===`keep`&&r||i.secondInside===`remove`&&!r){let e=t;c===1&&(e=bR(t)),c+=1,s.push(...e)}}return a===null&&c===1&&o!==null&&(s=[...o,...s]),{curves:s,segmentsIn:c===1?c:a,lastWasSame:c===1?null:o}}function RR(e,t,n){let r=NR(e,t);if(r===null)return zR(e,t);if(r.every(([,e])=>e===`same`))return{identical:!0};let i=null,a=null,o=r.flatMap(([r,o])=>{if(o===`same`){let e=IR(r,i,a);return i=e.segmentsIn,a=e.lastWasSame,e.curves}let s=LR(r,o,e,t,n,i,a);return i=s.segmentsIn,a=s.lastWasSame,s.curves}),s=a;s!==null&&i===1&&(o=[...s,...o]);let c=FR(PR(o)).filter(e=>e.length>0).map(e=>new EL(e));if(c.length===0)return null;if(c.length===1){let e=c[0];return e===void 0?null:e}return XL(c)}function zR(e,t){let n=e.curves[0],r=t.curves[0];return{identical:!1,firstCurveInSecond:n!==void 0&&t.isInside(SR(n)),secondCurveInFirst:r!==void 0&&e.isInside(SR(r))}}function BR(e,t){let n=RR(e,t,{firstInside:`remove`,secondInside:`remove`});return n===null||n instanceof EL||n instanceof UL?n:n.identical?e.clone():n.firstCurveInSecond?t.clone():n.secondCurveInFirst?e.clone():new UL([e,t])}function VR(e,t){let n=RR(e,t,{firstInside:`remove`,secondInside:`keep`});return n===null||n instanceof EL||n instanceof UL?n:n.identical||n.firstCurveInSecond?null:n.secondCurveInFirst?new UL([new WL([e,t])]):e.clone()}function HR(e,t){let n=RR(e,t,{firstInside:`keep`,secondInside:`keep`});return n===null||n instanceof EL||n instanceof UL?n:n.identical||n.firstCurveInSecond?e.clone():n.secondCurveInFirst?t.clone():null}var UR=(e,t)=>{if(e instanceof EL&&t instanceof EL){let n=[];return e.curves.forEach(e=>{t.curves.forEach(t=>{let{intersections:r,commonSegmentsPoints:i}=j(FL(e,t));n.push(...r),n.push(...i)})}),n=YI(n),n.length>1}if(e instanceof WL||e instanceof UL)return e.blueprints.some(e=>UR(e,t));if(t instanceof WL||t instanceof UL)return t.blueprints.some(t=>UR(e,t));M(`genericIntersects`,`Unhandled shape combination in genericIntersects`)},WR=(e,t)=>{if(e instanceof WL){if(t instanceof EL)return qR(t,e);if(t instanceof WL)return YR(e,t)}if(t instanceof WL){if(e instanceof EL)return qR(e,t);if(e instanceof WL)return YR(e,t)}if(e instanceof EL&&t instanceof EL)return BR(e,t);M(`genericFuse`,`Unhandled shape combination in genericFuse`)},GR=e=>{let t=new Map,n=[];return e.forEach((r,i)=>{let a;t.has(i)?a=t.get(i):(a={current:r,fusedWith:new Set([i])},n.push(a)),e.slice(i+1).forEach((e,n)=>{let r=a.current,o=i+n+1;if(a.fusedWith.has(o))return;let s=e,c=!1;if(t.has(o)&&(s=t.get(o).current,c=!0),r.boundingBox.isOut(s.boundingBox)||!UR(r,s))return;let l;if(r instanceof UL||s instanceof UL){let e=XR(r,s);e===null&&M(`fuseIntersectingBlueprints`,`fuse2D returned null for non-null inputs`),l=e}else l=WR(r,s);if(!(l instanceof EL||l instanceof WL)){if(l instanceof UL&&l.blueprints.length===2)return;l instanceof UL&&l.blueprints.length===1?l=xo(l.blueprints,0,`fuseIntersectingBlueprints`):l instanceof UL||M(`fuseIntersectingBlueprints`,`Fuse produced unexpected non-blueprint result`)}a.fusedWith.add(o),a.current=l,c||t.set(o,a)})}),XL(n.map(({current:e})=>e).flatMap(e=>KR(e)))},KR=e=>e instanceof EL?[e]:e instanceof WL?e.blueprints:e instanceof UL?e.blueprints.flatMap(e=>KR(e)):[],qR=(e,t)=>{let n=BR(e,xo(t.blueprints,0,`fuseBlueprintWithCompound`)),r=t.blueprints.slice(1).map(t=>VR(t,e));return XL([...KR(n),...r.flatMap(e=>KR(e))])};function JR(e,t){let n=[];for(let r of e)for(let e of t)n.push([r,e]);return n}var YR=(e,t)=>{let n=xo(e.blueprints,0,`fuseCompoundWithCompound`),r=xo(t.blueprints,0,`fuseCompoundWithCompound`),i=BR(n,r),a=t.blueprints.slice(1).map(e=>VR(e,n)),o=e.blueprints.slice(1).map(e=>VR(e,r)),s=JR(e.blueprints.slice(1),t.blueprints.slice(1)).flatMap(([e,t])=>KR(HR(e,t)));return XL([...KR(i),...a.flatMap(e=>KR(e)),...o.flatMap(e=>KR(e)),...s])},XR=(e,t)=>{if(e===null)return t?.clone()??null;if(t===null)return e.clone();if(!(e instanceof UL)&&t instanceof UL)return GR([e,...t.blueprints]);if(!(t instanceof UL)&&e instanceof UL)return GR([t,...e.blueprints]);if(e instanceof UL&&t instanceof UL){let n=XR(xo(e.blueprints,0,`fuse2D`),t);return e.blueprints.slice(1).forEach(e=>{n=XR(e,n)}),n}if(e instanceof WL){if(t instanceof UL)return XR(t,e);if(t instanceof EL)return qR(t,e);if(t instanceof WL)return YR(e,t)}if(t instanceof WL){if(e instanceof UL)return XR(e,t);if(e instanceof EL)return qR(e,t);if(e instanceof WL)return YR(e,t)}return e instanceof EL&&t instanceof EL?BR(e,t):null},ZR=e=>{let t=e.flatMap(e=>e===null?[]:e instanceof UL?e.blueprints:e);return t.length===1?xo(t,0,`mergeNonIntersecting`):new UL(t)},QR=(e,t)=>{if(e===null)return null;if(t===null)return e.clone();if(e instanceof UL)return ZR(e.blueprints.map(e=>QR(e,t)));if(e instanceof WL){let n=xo(e.blueprints,0,`cut2D`);if(t instanceof EL&&!t.intersects(n))return n.isInside(t.firstPoint)?XL([n,...KR(XR(t,new UL(e.blueprints.slice(1))))]):e.clone();{let r=QR(n,t);return e.blueprints.slice(1).forEach(e=>{r=QR(r,e)}),r}}if(t instanceof UL){let n=e;for(let e of t.blueprints)n=QR(n,e);return n}if(t instanceof WL){let n=VR(e,xo(t.blueprints,0,`cut2D`));return t.blueprints.slice(1).forEach(t=>{n=XR(n,HR(t,e))}),n}return VR(e,t)};function $R(e,t){if(e===null||t===null)return null;if(e instanceof EL&&t instanceof EL)return HR(e,t);if(e instanceof UL)return ZR(e.blueprints.map(e=>$R(e,t)));if(e instanceof WL){let n=xo(e.blueprints,0,`intersect2D`),r=e.blueprints.slice(1);if(r.length===0)return $R(n,t);let i=$R(n,t);for(let e of r)i=QR(i,e);return i}if(t instanceof UL)return ZR(t.blueprints.map(t=>$R(e,t)));if(t instanceof WL){let n=xo(t.blueprints,0,`intersect2D`),r=t.blueprints.slice(1);if(r.length===0)return $R(n,e);let i=$R(n,e);for(let e of r)i=QR(i,e);return i}M(`intersect2D`,`Unhandled Shape2D combination`)}var ez=e(((e,t)=>{t.exports={}}));
23
- /*! https://mths.be/codepointat v0.2.0 by @mathias */
24
- String.prototype.codePointAt||(function(){var e=function(){try{var e={},t=Object.defineProperty,n=t(e,e,e)&&t}catch{}return n}(),t=function(e){if(this==null)throw TypeError();var t=String(this),n=t.length,r=e?Number(e):0;if(r!=r&&(r=0),!(r<0||r>=n)){var i=t.charCodeAt(r),a;return i>=55296&&i<=56319&&n>r+1&&(a=t.charCodeAt(r+1),a>=56320&&a<=57343)?(i-55296)*1024+a-56320+65536:i}};e?e(String.prototype,`codePointAt`,{value:t,configurable:!0,writable:!0}):String.prototype.codePointAt=t})();var tz=0,nz=-3;function rz(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function iz(e,t){this.source=e,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=t,this.destLen=0,this.ltree=new rz,this.dtree=new rz}var az=new rz,oz=new rz,sz=new Uint8Array(30),cz=new Uint16Array(30),lz=new Uint8Array(30),uz=new Uint16Array(30),dz=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),fz=new rz,pz=new Uint8Array(320);function mz(e,t,n,r){var i,a;for(i=0;i<n;++i)e[i]=0;for(i=0;i<30-n;++i)e[i+n]=i/n|0;for(a=r,i=0;i<30;++i)t[i]=a,a+=1<<e[i]}function hz(e,t){var n;for(n=0;n<7;++n)e.table[n]=0;for(e.table[7]=24,e.table[8]=152,e.table[9]=112,n=0;n<24;++n)e.trans[n]=256+n;for(n=0;n<144;++n)e.trans[24+n]=n;for(n=0;n<8;++n)e.trans[168+n]=280+n;for(n=0;n<112;++n)e.trans[176+n]=144+n;for(n=0;n<5;++n)t.table[n]=0;for(t.table[5]=32,n=0;n<32;++n)t.trans[n]=n}var gz=new Uint16Array(16);function _z(e,t,n,r){var i,a;for(i=0;i<16;++i)e.table[i]=0;for(i=0;i<r;++i)e.table[t[n+i]]++;for(e.table[0]=0,a=0,i=0;i<16;++i)gz[i]=a,a+=e.table[i];for(i=0;i<r;++i)t[n+i]&&(e.trans[gz[t[n+i]]++]=i)}function vz(e){e.bitcount--||(e.tag=e.source[e.sourceIndex++],e.bitcount=7);var t=e.tag&1;return e.tag>>>=1,t}function yz(e,t,n){if(!t)return n;for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<<e.bitcount,e.bitcount+=8;var r=e.tag&65535>>>16-t;return e.tag>>>=t,e.bitcount-=t,r+n}function bz(e,t){for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<<e.bitcount,e.bitcount+=8;var n=0,r=0,i=0,a=e.tag;do r=2*r+(a&1),a>>>=1,++i,n+=t.table[i],r-=t.table[i];while(r>=0);return e.tag=a,e.bitcount-=i,t.trans[n+r]}function xz(e,t,n){var r=yz(e,5,257),i=yz(e,5,1),a=yz(e,4,4),o,s,c;for(o=0;o<19;++o)pz[o]=0;for(o=0;o<a;++o){var l=yz(e,3,0);pz[dz[o]]=l}for(_z(fz,pz,0,19),s=0;s<r+i;){var u=bz(e,fz);switch(u){case 16:var d=pz[s-1];for(c=yz(e,2,3);c;--c)pz[s++]=d;break;case 17:for(c=yz(e,3,3);c;--c)pz[s++]=0;break;case 18:for(c=yz(e,7,11);c;--c)pz[s++]=0;break;default:pz[s++]=u;break}}_z(t,pz,0,r),_z(n,pz,r,i)}function Sz(e,t,n){for(;;){var r=bz(e,t);if(r===256)return tz;if(r<256)e.dest[e.destLen++]=r;else{var i,a,o,s;for(r-=257,i=yz(e,sz[r],cz[r]),a=bz(e,n),o=e.destLen-yz(e,lz[a],uz[a]),s=o;s<o+i;++s)e.dest[e.destLen++]=e.dest[s]}}}function Cz(e){for(var t,n,r;e.bitcount>8;)e.sourceIndex--,e.bitcount-=8;if(t=e.source[e.sourceIndex+1],t=256*t+e.source[e.sourceIndex],n=e.source[e.sourceIndex+3],n=256*n+e.source[e.sourceIndex+2],t!==(~n&65535))return nz;for(e.sourceIndex+=4,r=t;r;--r)e.dest[e.destLen++]=e.source[e.sourceIndex++];return e.bitcount=0,tz}function wz(e,t){var n=new iz(e,t),r,i,a;do{switch(r=vz(n),i=yz(n,2,0),i){case 0:a=Cz(n);break;case 1:a=Sz(n,az,oz);break;case 2:xz(n,n.ltree,n.dtree),a=Sz(n,n.ltree,n.dtree);break;default:a=nz}if(a!==tz)throw Error(`Data error`)}while(!r);return n.destLen<n.dest.length?typeof n.dest.slice==`function`?n.dest.slice(0,n.destLen):n.dest.subarray(0,n.destLen):n.dest}hz(az,oz),mz(sz,cz,4,3),mz(lz,uz,2,1),sz[28]=0,cz[28]=258;var Tz=wz;function Ez(e,t,n,r,i){return(1-i)**3*e+3*(1-i)**2*i*t+3*(1-i)*i**2*n+i**3*r}function Dz(){this.x1=NaN,this.y1=NaN,this.x2=NaN,this.y2=NaN}Dz.prototype.isEmpty=function(){return isNaN(this.x1)||isNaN(this.y1)||isNaN(this.x2)||isNaN(this.y2)},Dz.prototype.addPoint=function(e,t){typeof e==`number`&&((isNaN(this.x1)||isNaN(this.x2))&&(this.x1=e,this.x2=e),e<this.x1&&(this.x1=e),e>this.x2&&(this.x2=e)),typeof t==`number`&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=t,this.y2=t),t<this.y1&&(this.y1=t),t>this.y2&&(this.y2=t))},Dz.prototype.addX=function(e){this.addPoint(e,null)},Dz.prototype.addY=function(e){this.addPoint(null,e)},Dz.prototype.addBezier=function(e,t,n,r,i,a,o,s){var c=[e,t],l=[n,r],u=[i,a],d=[o,s];this.addPoint(e,t),this.addPoint(o,s);for(var f=0;f<=1;f++){var p=6*c[f]-12*l[f]+6*u[f],m=-3*c[f]+9*l[f]-9*u[f]+3*d[f],h=3*l[f]-3*c[f];if(m===0){if(p===0)continue;var g=-h/p;0<g&&g<1&&(f===0&&this.addX(Ez(c[f],l[f],u[f],d[f],g)),f===1&&this.addY(Ez(c[f],l[f],u[f],d[f],g)));continue}var _=p**2-4*h*m;if(!(_<0)){var v=(-p+Math.sqrt(_))/(2*m);0<v&&v<1&&(f===0&&this.addX(Ez(c[f],l[f],u[f],d[f],v)),f===1&&this.addY(Ez(c[f],l[f],u[f],d[f],v)));var y=(-p-Math.sqrt(_))/(2*m);0<y&&y<1&&(f===0&&this.addX(Ez(c[f],l[f],u[f],d[f],y)),f===1&&this.addY(Ez(c[f],l[f],u[f],d[f],y)))}}},Dz.prototype.addQuad=function(e,t,n,r,i,a){var o=e+2/3*(n-e),s=t+2/3*(r-t),c=o+1/3*(i-e),l=s+1/3*(a-t);this.addBezier(e,t,o,s,c,l,i,a)};function Oz(){this.commands=[],this.fill=`black`,this.stroke=null,this.strokeWidth=1}Oz.prototype.moveTo=function(e,t){this.commands.push({type:`M`,x:e,y:t})},Oz.prototype.lineTo=function(e,t){this.commands.push({type:`L`,x:e,y:t})},Oz.prototype.curveTo=Oz.prototype.bezierCurveTo=function(e,t,n,r,i,a){this.commands.push({type:`C`,x1:e,y1:t,x2:n,y2:r,x:i,y:a})},Oz.prototype.quadTo=Oz.prototype.quadraticCurveTo=function(e,t,n,r){this.commands.push({type:`Q`,x1:e,y1:t,x:n,y:r})},Oz.prototype.close=Oz.prototype.closePath=function(){this.commands.push({type:`Z`})},Oz.prototype.extend=function(e){if(e.commands)e=e.commands;else if(e instanceof Dz){var t=e;this.moveTo(t.x1,t.y1),this.lineTo(t.x2,t.y1),this.lineTo(t.x2,t.y2),this.lineTo(t.x1,t.y2),this.close();return}Array.prototype.push.apply(this.commands,e)},Oz.prototype.getBoundingBox=function(){for(var e=new Dz,t=0,n=0,r=0,i=0,a=0;a<this.commands.length;a++){var o=this.commands[a];switch(o.type){case`M`:e.addPoint(o.x,o.y),t=r=o.x,n=i=o.y;break;case`L`:e.addPoint(o.x,o.y),r=o.x,i=o.y;break;case`Q`:e.addQuad(r,i,o.x1,o.y1,o.x,o.y),r=o.x,i=o.y;break;case`C`:e.addBezier(r,i,o.x1,o.y1,o.x2,o.y2,o.x,o.y),r=o.x,i=o.y;break;case`Z`:r=t,i=n;break;default:throw Error(`Unexpected path command `+o.type)}}return e.isEmpty()&&e.addPoint(0,0),e},Oz.prototype.draw=function(e){e.beginPath();for(var t=0;t<this.commands.length;t+=1){var n=this.commands[t];n.type===`M`?e.moveTo(n.x,n.y):n.type===`L`?e.lineTo(n.x,n.y):n.type===`C`?e.bezierCurveTo(n.x1,n.y1,n.x2,n.y2,n.x,n.y):n.type===`Q`?e.quadraticCurveTo(n.x1,n.y1,n.x,n.y):n.type===`Z`&&e.closePath()}this.fill&&(e.fillStyle=this.fill,e.fill()),this.stroke&&(e.strokeStyle=this.stroke,e.lineWidth=this.strokeWidth,e.stroke())},Oz.prototype.toPathData=function(e){e=e===void 0?2:e;function t(t){return Math.round(t)===t?``+Math.round(t):t.toFixed(e)}function n(){for(var e=arguments,n=``,r=0;r<arguments.length;r+=1){var i=e[r];i>=0&&r>0&&(n+=` `),n+=t(i)}return n}for(var r=``,i=0;i<this.commands.length;i+=1){var a=this.commands[i];a.type===`M`?r+=`M`+n(a.x,a.y):a.type===`L`?r+=`L`+n(a.x,a.y):a.type===`C`?r+=`C`+n(a.x1,a.y1,a.x2,a.y2,a.x,a.y):a.type===`Q`?r+=`Q`+n(a.x1,a.y1,a.x,a.y):a.type===`Z`&&(r+=`Z`)}return r},Oz.prototype.toSVG=function(e){var t=`<path d="`;return t+=this.toPathData(e),t+=`"`,this.fill&&this.fill!==`black`&&(this.fill===null?t+=` fill="none"`:t+=` fill="`+this.fill+`"`),this.stroke&&(t+=` stroke="`+this.stroke+`" stroke-width="`+this.strokeWidth+`"`),t+=`/>`,t},Oz.prototype.toDOMElement=function(e){var t=this.toPathData(e),n=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);return n.setAttribute(`d`,t),n};function kz(e){throw Error(e)}function Az(e,t){e||kz(t)}var K={fail:kz,argument:Az,assert:Az},jz=32768,Mz=2147483648,Nz={},q={},J={};function Pz(e){return function(){return e}}q.BYTE=function(e){return K.argument(e>=0&&e<=255,`Byte value should be between 0 and 255.`),[e]},J.BYTE=Pz(1),q.CHAR=function(e){return[e.charCodeAt(0)]},J.CHAR=Pz(1),q.CHARARRAY=function(e){e===void 0&&(e=``,console.warn(`Undefined CHARARRAY encountered and treated as an empty string. This is probably caused by a missing glyph name.`));for(var t=[],n=0;n<e.length;n+=1)t[n]=e.charCodeAt(n);return t},J.CHARARRAY=function(e){return e===void 0?0:e.length},q.USHORT=function(e){return[e>>8&255,e&255]},J.USHORT=Pz(2),q.SHORT=function(e){return e>=jz&&(e=-(2*jz-e)),[e>>8&255,e&255]},J.SHORT=Pz(2),q.UINT24=function(e){return[e>>16&255,e>>8&255,e&255]},J.UINT24=Pz(3),q.ULONG=function(e){return[e>>24&255,e>>16&255,e>>8&255,e&255]},J.ULONG=Pz(4),q.LONG=function(e){return e>=Mz&&(e=-(2*Mz-e)),[e>>24&255,e>>16&255,e>>8&255,e&255]},J.LONG=Pz(4),q.FIXED=q.ULONG,J.FIXED=J.ULONG,q.FWORD=q.SHORT,J.FWORD=J.SHORT,q.UFWORD=q.USHORT,J.UFWORD=J.USHORT,q.LONGDATETIME=function(e){return[0,0,0,0,e>>24&255,e>>16&255,e>>8&255,e&255]},J.LONGDATETIME=Pz(8),q.TAG=function(e){return K.argument(e.length===4,`Tag should be exactly 4 ASCII characters.`),[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)]},J.TAG=Pz(4),q.Card8=q.BYTE,J.Card8=J.BYTE,q.Card16=q.USHORT,J.Card16=J.USHORT,q.OffSize=q.BYTE,J.OffSize=J.BYTE,q.SID=q.USHORT,J.SID=J.USHORT,q.NUMBER=function(e){return e>=-107&&e<=107?[e+139]:e>=108&&e<=1131?(e-=108,[(e>>8)+247,e&255]):e>=-1131&&e<=-108?(e=-e-108,[(e>>8)+251,e&255]):e>=-32768&&e<=32767?q.NUMBER16(e):q.NUMBER32(e)},J.NUMBER=function(e){return q.NUMBER(e).length},q.NUMBER16=function(e){return[28,e>>8&255,e&255]},J.NUMBER16=Pz(3),q.NUMBER32=function(e){return[29,e>>24&255,e>>16&255,e>>8&255,e&255]},J.NUMBER32=Pz(5),q.REAL=function(e){var t=e.toString(),n=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(t);if(n){var r=parseFloat(`1e`+((n[2]?+n[2]:0)+n[1].length));t=(Math.round(e*r)/r).toString()}for(var i=``,a=0,o=t.length;a<o;a+=1){var s=t[a];s===`e`?i+=t[++a]===`-`?`c`:`b`:s===`.`?i+=`a`:s===`-`?i+=`e`:i+=s}i+=i.length&1?`f`:`ff`;for(var c=[30],l=0,u=i.length;l<u;l+=2)c.push(parseInt(i.substr(l,2),16));return c},J.REAL=function(e){return q.REAL(e).length},q.NAME=q.CHARARRAY,J.NAME=J.CHARARRAY,q.STRING=q.CHARARRAY,J.STRING=J.CHARARRAY,Nz.UTF8=function(e,t,n){for(var r=[],i=n,a=0;a<i;a++,t+=1)r[a]=e.getUint8(t);return String.fromCharCode.apply(null,r)},Nz.UTF16=function(e,t,n){for(var r=[],i=n/2,a=0;a<i;a++,t+=2)r[a]=e.getUint16(t);return String.fromCharCode.apply(null,r)},q.UTF16=function(e){for(var t=[],n=0;n<e.length;n+=1){var r=e.charCodeAt(n);t[t.length]=r>>8&255,t[t.length]=r&255}return t},J.UTF16=function(e){return e.length*2};var Fz={"x-mac-croatian":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ\xA0ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ`,"x-mac-cyrillic":`АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»…\xA0ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю`,"x-mac-gaelic":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»…\xA0ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ`,"x-mac-greek":`Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»…\xA0ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­`,"x-mac-icelandic":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ`,"x-mac-inuit":`ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ…\xA0ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł`,"x-mac-ce":`ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»…\xA0ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ`,macintosh:`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ`,"x-mac-romanian":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ`,"x-mac-turkish":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ`};Nz.MACSTRING=function(e,t,n,r){var i=Fz[r];if(i!==void 0){for(var a=``,o=0;o<n;o++){var s=e.getUint8(t+o);s<=127?a+=String.fromCharCode(s):a+=i[s&127]}return a}};var Iz=typeof WeakMap==`function`&&new WeakMap,Lz,Rz=function(e){if(!Lz)for(var t in Lz={},Fz)Lz[t]=new String(t);var n=Lz[e];if(n!==void 0){if(Iz){var r=Iz.get(n);if(r!==void 0)return r}var i=Fz[e];if(i!==void 0){for(var a={},o=0;o<i.length;o++)a[i.charCodeAt(o)]=o+128;return Iz&&Iz.set(n,a),a}}};q.MACSTRING=function(e,t){var n=Rz(t);if(n!==void 0){for(var r=[],i=0;i<e.length;i++){var a=e.charCodeAt(i);if(a>=128&&(a=n[a],a===void 0))return;r[i]=a}return r}},J.MACSTRING=function(e,t){var n=q.MACSTRING(e,t);return n===void 0?0:n.length};function zz(e){return e>=-128&&e<=127}function Bz(e,t,n){for(var r=0,i=e.length;t<i&&r<64&&e[t]===0;)++t,++r;return n.push(128|r-1),t}function Vz(e,t,n){for(var r=0,i=e.length,a=t;a<i&&r<64;){var o=e[a];if(!zz(o)||o===0&&a+1<i&&e[a+1]===0)break;++a,++r}n.push(r-1);for(var s=t;s<a;++s)n.push(e[s]+256&255);return a}function Hz(e,t,n){for(var r=0,i=e.length,a=t;a<i&&r<64;){var o=e[a];if(o===0||zz(o)&&a+1<i&&zz(e[a+1]))break;++a,++r}n.push(64|r-1);for(var s=t;s<a;++s){var c=e[s];n.push(c+65536>>8&255,c+256&255)}return a}q.VARDELTAS=function(e){for(var t=0,n=[];t<e.length;){var r=e[t];t=r===0?Bz(e,t,n):r>=-128&&r<=127?Vz(e,t,n):Hz(e,t,n)}return n},q.INDEX=function(e){for(var t=1,n=[t],r=[],i=0;i<e.length;i+=1){var a=q.OBJECT(e[i]);Array.prototype.push.apply(r,a),t+=a.length,n.push(t)}if(r.length===0)return[0,0];for(var o=[],s=1+Math.floor(Math.log(t)/Math.log(2))/8|0,c=[void 0,q.BYTE,q.USHORT,q.UINT24,q.ULONG][s],l=0;l<n.length;l+=1){var u=c(n[l]);Array.prototype.push.apply(o,u)}return Array.prototype.concat(q.Card16(e.length),q.OffSize(s),o,r)},J.INDEX=function(e){return q.INDEX(e).length},q.DICT=function(e){for(var t=[],n=Object.keys(e),r=n.length,i=0;i<r;i+=1){var a=parseInt(n[i],0),o=e[a];t=t.concat(q.OPERAND(o.value,o.type)),t=t.concat(q.OPERATOR(a))}return t},J.DICT=function(e){return q.DICT(e).length},q.OPERATOR=function(e){return e<1200?[e]:[12,e-1200]},q.OPERAND=function(e,t){var n=[];if(Array.isArray(t))for(var r=0;r<t.length;r+=1)K.argument(e.length===t.length,`Not enough arguments given for type`+t),n=n.concat(q.OPERAND(e[r],t[r]));else if(t===`SID`)n=n.concat(q.NUMBER(e));else if(t===`offset`)n=n.concat(q.NUMBER32(e));else if(t===`number`)n=n.concat(q.NUMBER(e));else if(t===`real`)n=n.concat(q.REAL(e));else throw Error(`Unknown operand type `+t);return n},q.OP=q.BYTE,J.OP=J.BYTE;var Uz=typeof WeakMap==`function`&&new WeakMap;q.CHARSTRING=function(e){if(Uz){var t=Uz.get(e);if(t!==void 0)return t}for(var n=[],r=e.length,i=0;i<r;i+=1){var a=e[i];n=n.concat(q[a.type](a.value))}return Uz&&Uz.set(e,n),n},J.CHARSTRING=function(e){return q.CHARSTRING(e).length},q.OBJECT=function(e){var t=q[e.type];return K.argument(t!==void 0,`No encoding function for type `+e.type),t(e.value)},J.OBJECT=function(e){var t=J[e.type];return K.argument(t!==void 0,`No sizeOf function for type `+e.type),t(e.value)},q.TABLE=function(e){for(var t=[],n=e.fields.length,r=[],i=[],a=0;a<n;a+=1){var o=e.fields[a],s=q[o.type];K.argument(s!==void 0,`No encoding function for field type `+o.type+` (`+o.name+`)`);var c=e[o.name];c===void 0&&(c=o.value);var l=s(c);o.type===`TABLE`?(i.push(t.length),t=t.concat([0,0]),r.push(l)):t=t.concat(l)}for(var u=0;u<r.length;u+=1){var d=i[u],f=t.length;K.argument(f<65536,`Table `+e.tableName+` too big.`),t[d]=f>>8,t[d+1]=f&255,t=t.concat(r[u])}return t},J.TABLE=function(e){for(var t=0,n=e.fields.length,r=0;r<n;r+=1){var i=e.fields[r],a=J[i.type];K.argument(a!==void 0,`No sizeOf function for field type `+i.type+` (`+i.name+`)`);var o=e[i.name];o===void 0&&(o=i.value),t+=a(o),i.type===`TABLE`&&(t+=2)}return t},q.RECORD=q.TABLE,J.RECORD=J.TABLE,q.LITERAL=function(e){return e},J.LITERAL=function(e){return e.length};function Wz(e,t,n){if(t.length&&(t[0].name!==`coverageFormat`||t[0].value===1))for(var r=0;r<t.length;r+=1){var i=t[r];this[i.name]=i.value}if(this.tableName=e,this.fields=t,n)for(var a=Object.keys(n),o=0;o<a.length;o+=1){var s=a[o],c=n[s];this[s]!==void 0&&(this[s]=c)}}Wz.prototype.encode=function(){return q.TABLE(this)},Wz.prototype.sizeOf=function(){return J.TABLE(this)};function Gz(e,t,n){n===void 0&&(n=t.length);var r=Array(t.length+1);r[0]={name:e+`Count`,type:`USHORT`,value:n};for(var i=0;i<t.length;i++)r[i+1]={name:e+i,type:`USHORT`,value:t[i]};return r}function Kz(e,t,n){var r=t.length,i=Array(r+1);i[0]={name:e+`Count`,type:`USHORT`,value:r};for(var a=0;a<r;a++)i[a+1]={name:e+a,type:`TABLE`,value:n(t[a],a)};return i}function qz(e,t,n){var r=t.length,i=[];i[0]={name:e+`Count`,type:`USHORT`,value:r};for(var a=0;a<r;a++)i=i.concat(n(t[a],a));return i}function Jz(e){e.format===1?Wz.call(this,`coverageTable`,[{name:`coverageFormat`,type:`USHORT`,value:1}].concat(Gz(`glyph`,e.glyphs))):e.format===2?Wz.call(this,`coverageTable`,[{name:`coverageFormat`,type:`USHORT`,value:2}].concat(qz(`rangeRecord`,e.ranges,function(e){return[{name:`startGlyphID`,type:`USHORT`,value:e.start},{name:`endGlyphID`,type:`USHORT`,value:e.end},{name:`startCoverageIndex`,type:`USHORT`,value:e.index}]}))):K.assert(!1,`Coverage format must be 1 or 2.`)}Jz.prototype=Object.create(Wz.prototype),Jz.prototype.constructor=Jz;function Yz(e){Wz.call(this,`scriptListTable`,qz(`scriptRecord`,e,function(e,t){var n=e.script,r=n.defaultLangSys;return K.assert(!!r,`Unable to write GSUB: script `+e.tag+` has no default language system.`),[{name:`scriptTag`+t,type:`TAG`,value:e.tag},{name:`script`+t,type:`TABLE`,value:new Wz(`scriptTable`,[{name:`defaultLangSys`,type:`TABLE`,value:new Wz(`defaultLangSys`,[{name:`lookupOrder`,type:`USHORT`,value:0},{name:`reqFeatureIndex`,type:`USHORT`,value:r.reqFeatureIndex}].concat(Gz(`featureIndex`,r.featureIndexes)))}].concat(qz(`langSys`,n.langSysRecords,function(e,t){var n=e.langSys;return[{name:`langSysTag`+t,type:`TAG`,value:e.tag},{name:`langSys`+t,type:`TABLE`,value:new Wz(`langSys`,[{name:`lookupOrder`,type:`USHORT`,value:0},{name:`reqFeatureIndex`,type:`USHORT`,value:n.reqFeatureIndex}].concat(Gz(`featureIndex`,n.featureIndexes)))}]})))}]}))}Yz.prototype=Object.create(Wz.prototype),Yz.prototype.constructor=Yz;function Xz(e){Wz.call(this,`featureListTable`,qz(`featureRecord`,e,function(e,t){var n=e.feature;return[{name:`featureTag`+t,type:`TAG`,value:e.tag},{name:`feature`+t,type:`TABLE`,value:new Wz(`featureTable`,[{name:`featureParams`,type:`USHORT`,value:n.featureParams}].concat(Gz(`lookupListIndex`,n.lookupListIndexes)))}]}))}Xz.prototype=Object.create(Wz.prototype),Xz.prototype.constructor=Xz;function Zz(e,t){Wz.call(this,`lookupListTable`,Kz(`lookup`,e,function(e){var n=t[e.lookupType];return K.assert(!!n,`Unable to write GSUB lookup type `+e.lookupType+` tables.`),new Wz(`lookupTable`,[{name:`lookupType`,type:`USHORT`,value:e.lookupType},{name:`lookupFlag`,type:`USHORT`,value:e.lookupFlag}].concat(Kz(`subtable`,e.subtables,n)))}))}Zz.prototype=Object.create(Wz.prototype),Zz.prototype.constructor=Zz;var Y={Table:Wz,Record:Wz,Coverage:Jz,ScriptList:Yz,FeatureList:Xz,LookupList:Zz,ushortList:Gz,tableList:Kz,recordList:qz};function Qz(e,t){return e.getUint8(t)}function $z(e,t){return e.getUint16(t,!1)}function eB(e,t){return e.getInt16(t,!1)}function tB(e,t){return e.getUint32(t,!1)}function nB(e,t){return e.getInt16(t,!1)+e.getUint16(t+2,!1)/65535}function rB(e,t){for(var n=``,r=t;r<t+4;r+=1)n+=String.fromCharCode(e.getInt8(r));return n}function iB(e,t,n){for(var r=0,i=0;i<n;i+=1)r<<=8,r+=e.getUint8(t+i);return r}function aB(e,t,n){for(var r=[],i=t;i<n;i+=1)r.push(e.getUint8(i));return r}function oB(e){for(var t=``,n=0;n<e.length;n+=1)t+=String.fromCharCode(e[n]);return t}var sB={byte:1,uShort:2,short:2,uLong:4,fixed:4,longDateTime:8,tag:4};function X(e,t){this.data=e,this.offset=t,this.relativeOffset=0}X.prototype.parseByte=function(){var e=this.data.getUint8(this.offset+this.relativeOffset);return this.relativeOffset+=1,e},X.prototype.parseChar=function(){var e=this.data.getInt8(this.offset+this.relativeOffset);return this.relativeOffset+=1,e},X.prototype.parseCard8=X.prototype.parseByte,X.prototype.parseUShort=function(){var e=this.data.getUint16(this.offset+this.relativeOffset);return this.relativeOffset+=2,e},X.prototype.parseCard16=X.prototype.parseUShort,X.prototype.parseSID=X.prototype.parseUShort,X.prototype.parseOffset16=X.prototype.parseUShort,X.prototype.parseShort=function(){var e=this.data.getInt16(this.offset+this.relativeOffset);return this.relativeOffset+=2,e},X.prototype.parseF2Dot14=function(){var e=this.data.getInt16(this.offset+this.relativeOffset)/16384;return this.relativeOffset+=2,e},X.prototype.parseULong=function(){var e=tB(this.data,this.offset+this.relativeOffset);return this.relativeOffset+=4,e},X.prototype.parseOffset32=X.prototype.parseULong,X.prototype.parseFixed=function(){var e=nB(this.data,this.offset+this.relativeOffset);return this.relativeOffset+=4,e},X.prototype.parseString=function(e){var t=this.data,n=this.offset+this.relativeOffset,r=``;this.relativeOffset+=e;for(var i=0;i<e;i++)r+=String.fromCharCode(t.getUint8(n+i));return r},X.prototype.parseTag=function(){return this.parseString(4)},X.prototype.parseLongDateTime=function(){var e=tB(this.data,this.offset+this.relativeOffset+4);return e-=2082844800,this.relativeOffset+=8,e},X.prototype.parseVersion=function(e){var t=$z(this.data,this.offset+this.relativeOffset),n=$z(this.data,this.offset+this.relativeOffset+2);return this.relativeOffset+=4,e===void 0&&(e=4096),t+n/e/10},X.prototype.skip=function(e,t){t===void 0&&(t=1),this.relativeOffset+=sB[e]*t},X.prototype.parseULongList=function(e){e===void 0&&(e=this.parseULong());for(var t=Array(e),n=this.data,r=this.offset+this.relativeOffset,i=0;i<e;i++)t[i]=n.getUint32(r),r+=4;return this.relativeOffset+=e*4,t},X.prototype.parseOffset16List=X.prototype.parseUShortList=function(e){e===void 0&&(e=this.parseUShort());for(var t=Array(e),n=this.data,r=this.offset+this.relativeOffset,i=0;i<e;i++)t[i]=n.getUint16(r),r+=2;return this.relativeOffset+=e*2,t},X.prototype.parseShortList=function(e){for(var t=Array(e),n=this.data,r=this.offset+this.relativeOffset,i=0;i<e;i++)t[i]=n.getInt16(r),r+=2;return this.relativeOffset+=e*2,t},X.prototype.parseByteList=function(e){for(var t=Array(e),n=this.data,r=this.offset+this.relativeOffset,i=0;i<e;i++)t[i]=n.getUint8(r++);return this.relativeOffset+=e,t},X.prototype.parseList=function(e,t){t||(t=e,e=this.parseUShort());for(var n=Array(e),r=0;r<e;r++)n[r]=t.call(this);return n},X.prototype.parseList32=function(e,t){t||(t=e,e=this.parseULong());for(var n=Array(e),r=0;r<e;r++)n[r]=t.call(this);return n},X.prototype.parseRecordList=function(e,t){t||(t=e,e=this.parseUShort());for(var n=Array(e),r=Object.keys(t),i=0;i<e;i++){for(var a={},o=0;o<r.length;o++){var s=r[o];a[s]=t[s].call(this)}n[i]=a}return n},X.prototype.parseRecordList32=function(e,t){t||(t=e,e=this.parseULong());for(var n=Array(e),r=Object.keys(t),i=0;i<e;i++){for(var a={},o=0;o<r.length;o++){var s=r[o];a[s]=t[s].call(this)}n[i]=a}return n},X.prototype.parseStruct=function(e){if(typeof e==`function`)return e.call(this);for(var t=Object.keys(e),n={},r=0;r<t.length;r++){var i=t[r];n[i]=e[i].call(this)}return n},X.prototype.parseValueRecord=function(e){if(e===void 0&&(e=this.parseUShort()),e!==0){var t={};return e&1&&(t.xPlacement=this.parseShort()),e&2&&(t.yPlacement=this.parseShort()),e&4&&(t.xAdvance=this.parseShort()),e&8&&(t.yAdvance=this.parseShort()),e&16&&(t.xPlaDevice=void 0,this.parseShort()),e&32&&(t.yPlaDevice=void 0,this.parseShort()),e&64&&(t.xAdvDevice=void 0,this.parseShort()),e&128&&(t.yAdvDevice=void 0,this.parseShort()),t}},X.prototype.parseValueRecordList=function(){for(var e=this.parseUShort(),t=this.parseUShort(),n=Array(t),r=0;r<t;r++)n[r]=this.parseValueRecord(e);return n},X.prototype.parsePointer=function(e){var t=this.parseOffset16();if(t>0)return new X(this.data,this.offset+t).parseStruct(e)},X.prototype.parsePointer32=function(e){var t=this.parseOffset32();if(t>0)return new X(this.data,this.offset+t).parseStruct(e)},X.prototype.parseListOfLists=function(e){for(var t=this.parseOffset16List(),n=t.length,r=this.relativeOffset,i=Array(n),a=0;a<n;a++){var o=t[a];if(o===0){i[a]=void 0;continue}if(this.relativeOffset=o,e){for(var s=this.parseOffset16List(),c=Array(s.length),l=0;l<s.length;l++)this.relativeOffset=o+s[l],c[l]=e.call(this);i[a]=c}else i[a]=this.parseUShortList()}return this.relativeOffset=r,i},X.prototype.parseCoverage=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort(),n=this.parseUShort();if(t===1)return{format:1,glyphs:this.parseUShortList(n)};if(t===2){for(var r=Array(n),i=0;i<n;i++)r[i]={start:this.parseUShort(),end:this.parseUShort(),index:this.parseUShort()};return{format:2,ranges:r}}throw Error(`0x`+e.toString(16)+`: Coverage format must be 1 or 2.`)},X.prototype.parseClassDef=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{format:1,startGlyph:this.parseUShort(),classes:this.parseUShortList()};if(t===2)return{format:2,ranges:this.parseRecordList({start:X.uShort,end:X.uShort,classId:X.uShort})};throw Error(`0x`+e.toString(16)+`: ClassDef format must be 1 or 2.`)},X.list=function(e,t){return function(){return this.parseList(e,t)}},X.list32=function(e,t){return function(){return this.parseList32(e,t)}},X.recordList=function(e,t){return function(){return this.parseRecordList(e,t)}},X.recordList32=function(e,t){return function(){return this.parseRecordList32(e,t)}},X.pointer=function(e){return function(){return this.parsePointer(e)}},X.pointer32=function(e){return function(){return this.parsePointer32(e)}},X.tag=X.prototype.parseTag,X.byte=X.prototype.parseByte,X.uShort=X.offset16=X.prototype.parseUShort,X.uShortList=X.prototype.parseUShortList,X.uLong=X.offset32=X.prototype.parseULong,X.uLongList=X.prototype.parseULongList,X.struct=X.prototype.parseStruct,X.coverage=X.prototype.parseCoverage,X.classDef=X.prototype.parseClassDef;var cB={reserved:X.uShort,reqFeatureIndex:X.uShort,featureIndexes:X.uShortList};X.prototype.parseScriptList=function(){return this.parsePointer(X.recordList({tag:X.tag,script:X.pointer({defaultLangSys:X.pointer(cB),langSysRecords:X.recordList({tag:X.tag,langSys:X.pointer(cB)})})}))||[]},X.prototype.parseFeatureList=function(){return this.parsePointer(X.recordList({tag:X.tag,feature:X.pointer({featureParams:X.offset16,lookupListIndexes:X.uShortList})}))||[]},X.prototype.parseLookupList=function(e){return this.parsePointer(X.list(X.pointer(function(){var t=this.parseUShort();K.argument(1<=t&&t<=9,`GPOS/GSUB lookup type `+t+` unknown.`);var n=this.parseUShort(),r=n&16;return{lookupType:t,lookupFlag:n,subtables:this.parseList(X.pointer(e[t])),markFilteringSet:r?this.parseUShort():void 0}})))||[]},X.prototype.parseFeatureVariationsList=function(){return this.parsePointer32(function(){var e=this.parseUShort(),t=this.parseUShort();return K.argument(e===1&&t<1,`GPOS/GSUB feature variations table unknown.`),this.parseRecordList32({conditionSetOffset:X.offset32,featureTableSubstitutionOffset:X.offset32})})||[]};var Z={getByte:Qz,getCard8:Qz,getUShort:$z,getCard16:$z,getShort:eB,getULong:tB,getFixed:nB,getTag:rB,getOffset:iB,getBytes:aB,bytesToString:oB,Parser:X};function lB(e,t){t.parseUShort(),e.length=t.parseULong(),e.language=t.parseULong();var n;e.groupCount=n=t.parseULong(),e.glyphIndexMap={};for(var r=0;r<n;r+=1)for(var i=t.parseULong(),a=t.parseULong(),o=t.parseULong(),s=i;s<=a;s+=1)e.glyphIndexMap[s]=o,o++}function uB(e,t,n,r,i){e.length=t.parseUShort(),e.language=t.parseUShort();var a;e.segCount=a=t.parseUShort()>>1,t.skip(`uShort`,3),e.glyphIndexMap={};for(var o=new Z.Parser(n,r+i+14),s=new Z.Parser(n,r+i+16+a*2),c=new Z.Parser(n,r+i+16+a*4),l=new Z.Parser(n,r+i+16+a*6),u=r+i+16+a*8,d=0;d<a-1;d+=1)for(var f=void 0,p=o.parseUShort(),m=s.parseUShort(),h=c.parseShort(),g=l.parseUShort(),_=m;_<=p;_+=1)g===0?f=_+h&65535:(u=l.offset+l.relativeOffset-2,u+=g,u+=(_-m)*2,f=Z.getUShort(n,u),f!==0&&(f=f+h&65535)),e.glyphIndexMap[_]=f}function dB(e,t){var n={};n.version=Z.getUShort(e,t),K.argument(n.version===0,`cmap table version should be 0.`),n.numTables=Z.getUShort(e,t+2);for(var r=-1,i=n.numTables-1;i>=0;--i){var a=Z.getUShort(e,t+4+i*8),o=Z.getUShort(e,t+4+i*8+2);if(a===3&&(o===0||o===1||o===10)||a===0&&(o===0||o===1||o===2||o===3||o===4)){r=Z.getULong(e,t+4+i*8+4);break}}if(r===-1)throw Error(`No valid cmap sub-tables found.`);var s=new Z.Parser(e,t+r);if(n.format=s.parseUShort(),n.format===12)lB(n,s);else if(n.format===4)uB(n,s,e,t,r);else throw Error(`Only format 4 and 12 cmap tables are supported (found format `+n.format+`).`);return n}function fB(e,t,n){e.segments.push({end:t,start:t,delta:-(t-n),offset:0,glyphIndex:n})}function pB(e){e.segments.push({end:65535,start:65535,delta:1,offset:0})}function mB(e){var t=!0,n;for(n=e.length-1;n>0;--n)if(e.get(n).unicode>65535){console.log(`Adding CMAP format 12 (needed!)`),t=!1;break}var r=[{name:`version`,type:`USHORT`,value:0},{name:`numTables`,type:`USHORT`,value:t?1:2},{name:`platformID`,type:`USHORT`,value:3},{name:`encodingID`,type:`USHORT`,value:1},{name:`offset`,type:`ULONG`,value:t?12:20}];t||(r=r.concat([{name:`cmap12PlatformID`,type:`USHORT`,value:3},{name:`cmap12EncodingID`,type:`USHORT`,value:10},{name:`cmap12Offset`,type:`ULONG`,value:0}])),r=r.concat([{name:`format`,type:`USHORT`,value:4},{name:`cmap4Length`,type:`USHORT`,value:0},{name:`language`,type:`USHORT`,value:0},{name:`segCountX2`,type:`USHORT`,value:0},{name:`searchRange`,type:`USHORT`,value:0},{name:`entrySelector`,type:`USHORT`,value:0},{name:`rangeShift`,type:`USHORT`,value:0}]);var i=new Y.Table(`cmap`,r);for(i.segments=[],n=0;n<e.length;n+=1){for(var a=e.get(n),o=0;o<a.unicodes.length;o+=1)fB(i,a.unicodes[o],n);i.segments=i.segments.sort(function(e,t){return e.start-t.start})}pB(i);var s=i.segments.length,c=0,l=[],u=[],d=[],f=[],p=[],m=[];for(n=0;n<s;n+=1){var h=i.segments[n];h.end<=65535&&h.start<=65535?(l=l.concat({name:`end_`+n,type:`USHORT`,value:h.end}),u=u.concat({name:`start_`+n,type:`USHORT`,value:h.start}),d=d.concat({name:`idDelta_`+n,type:`SHORT`,value:h.delta}),f=f.concat({name:`idRangeOffset_`+n,type:`USHORT`,value:h.offset}),h.glyphId!==void 0&&(p=p.concat({name:`glyph_`+n,type:`USHORT`,value:h.glyphId}))):c+=1,!t&&h.glyphIndex!==void 0&&(m=m.concat({name:`cmap12Start_`+n,type:`ULONG`,value:h.start}),m=m.concat({name:`cmap12End_`+n,type:`ULONG`,value:h.end}),m=m.concat({name:`cmap12Glyph_`+n,type:`ULONG`,value:h.glyphIndex}))}if(i.segCountX2=(s-c)*2,i.searchRange=2**Math.floor(Math.log(s-c)/Math.log(2))*2,i.entrySelector=Math.log(i.searchRange/2)/Math.log(2),i.rangeShift=i.segCountX2-i.searchRange,i.fields=i.fields.concat(l),i.fields.push({name:`reservedPad`,type:`USHORT`,value:0}),i.fields=i.fields.concat(u),i.fields=i.fields.concat(d),i.fields=i.fields.concat(f),i.fields=i.fields.concat(p),i.cmap4Length=14+l.length*2+2+u.length*2+d.length*2+f.length*2+p.length*2,!t){var g=16+m.length*4;i.cmap12Offset=20+i.cmap4Length,i.fields=i.fields.concat([{name:`cmap12Format`,type:`USHORT`,value:12},{name:`cmap12Reserved`,type:`USHORT`,value:0},{name:`cmap12Length`,type:`ULONG`,value:g},{name:`cmap12Language`,type:`ULONG`,value:0},{name:`cmap12nGroups`,type:`ULONG`,value:m.length/3}]),i.fields=i.fields.concat(m)}return i}var hB={parse:dB,make:mB},gB=`.notdef,space,exclam,quotedbl,numbersign,dollar,percent,ampersand,quoteright,parenleft,parenright,asterisk,plus,comma,hyphen,period,slash,zero,one,two,three,four,five,six,seven,eight,nine,colon,semicolon,less,equal,greater,question,at,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,bracketleft,backslash,bracketright,asciicircum,underscore,quoteleft,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,braceleft,bar,braceright,asciitilde,exclamdown,cent,sterling,fraction,yen,florin,section,currency,quotesingle,quotedblleft,guillemotleft,guilsinglleft,guilsinglright,fi,fl,endash,dagger,daggerdbl,periodcentered,paragraph,bullet,quotesinglbase,quotedblbase,quotedblright,guillemotright,ellipsis,perthousand,questiondown,grave,acute,circumflex,tilde,macron,breve,dotaccent,dieresis,ring,cedilla,hungarumlaut,ogonek,caron,emdash,AE,ordfeminine,Lslash,Oslash,OE,ordmasculine,ae,dotlessi,lslash,oslash,oe,germandbls,onesuperior,logicalnot,mu,trademark,Eth,onehalf,plusminus,Thorn,onequarter,divide,brokenbar,degree,thorn,threequarters,twosuperior,registered,minus,eth,multiply,threesuperior,copyright,Aacute,Acircumflex,Adieresis,Agrave,Aring,Atilde,Ccedilla,Eacute,Ecircumflex,Edieresis,Egrave,Iacute,Icircumflex,Idieresis,Igrave,Ntilde,Oacute,Ocircumflex,Odieresis,Ograve,Otilde,Scaron,Uacute,Ucircumflex,Udieresis,Ugrave,Yacute,Ydieresis,Zcaron,aacute,acircumflex,adieresis,agrave,aring,atilde,ccedilla,eacute,ecircumflex,edieresis,egrave,iacute,icircumflex,idieresis,igrave,ntilde,oacute,ocircumflex,odieresis,ograve,otilde,scaron,uacute,ucircumflex,udieresis,ugrave,yacute,ydieresis,zcaron,exclamsmall,Hungarumlautsmall,dollaroldstyle,dollarsuperior,ampersandsmall,Acutesmall,parenleftsuperior,parenrightsuperior,266 ff,onedotenleader,zerooldstyle,oneoldstyle,twooldstyle,threeoldstyle,fouroldstyle,fiveoldstyle,sixoldstyle,sevenoldstyle,eightoldstyle,nineoldstyle,commasuperior,threequartersemdash,periodsuperior,questionsmall,asuperior,bsuperior,centsuperior,dsuperior,esuperior,isuperior,lsuperior,msuperior,nsuperior,osuperior,rsuperior,ssuperior,tsuperior,ff,ffi,ffl,parenleftinferior,parenrightinferior,Circumflexsmall,hyphensuperior,Gravesmall,Asmall,Bsmall,Csmall,Dsmall,Esmall,Fsmall,Gsmall,Hsmall,Ismall,Jsmall,Ksmall,Lsmall,Msmall,Nsmall,Osmall,Psmall,Qsmall,Rsmall,Ssmall,Tsmall,Usmall,Vsmall,Wsmall,Xsmall,Ysmall,Zsmall,colonmonetary,onefitted,rupiah,Tildesmall,exclamdownsmall,centoldstyle,Lslashsmall,Scaronsmall,Zcaronsmall,Dieresissmall,Brevesmall,Caronsmall,Dotaccentsmall,Macronsmall,figuredash,hypheninferior,Ogoneksmall,Ringsmall,Cedillasmall,questiondownsmall,oneeighth,threeeighths,fiveeighths,seveneighths,onethird,twothirds,zerosuperior,foursuperior,fivesuperior,sixsuperior,sevensuperior,eightsuperior,ninesuperior,zeroinferior,oneinferior,twoinferior,threeinferior,fourinferior,fiveinferior,sixinferior,seveninferior,eightinferior,nineinferior,centinferior,dollarinferior,periodinferior,commainferior,Agravesmall,Aacutesmall,Acircumflexsmall,Atildesmall,Adieresissmall,Aringsmall,AEsmall,Ccedillasmall,Egravesmall,Eacutesmall,Ecircumflexsmall,Edieresissmall,Igravesmall,Iacutesmall,Icircumflexsmall,Idieresissmall,Ethsmall,Ntildesmall,Ogravesmall,Oacutesmall,Ocircumflexsmall,Otildesmall,Odieresissmall,OEsmall,Oslashsmall,Ugravesmall,Uacutesmall,Ucircumflexsmall,Udieresissmall,Yacutesmall,Thornsmall,Ydieresissmall,001.000,001.001,001.002,001.003,Black,Bold,Book,Light,Medium,Regular,Roman,Semibold`.split(`,`),_B=`................................space.exclam.quotedbl.numbersign.dollar.percent.ampersand.quoteright.parenleft.parenright.asterisk.plus.comma.hyphen.period.slash.zero.one.two.three.four.five.six.seven.eight.nine.colon.semicolon.less.equal.greater.question.at.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.bracketleft.backslash.bracketright.asciicircum.underscore.quoteleft.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.braceleft.bar.braceright.asciitilde...................................exclamdown.cent.sterling.fraction.yen.florin.section.currency.quotesingle.quotedblleft.guillemotleft.guilsinglleft.guilsinglright.fi.fl..endash.dagger.daggerdbl.periodcentered..paragraph.bullet.quotesinglbase.quotedblbase.quotedblright.guillemotright.ellipsis.perthousand..questiondown..grave.acute.circumflex.tilde.macron.breve.dotaccent.dieresis..ring.cedilla..hungarumlaut.ogonek.caron.emdash.................AE..ordfeminine.....Lslash.Oslash.OE.ordmasculine......ae....dotlessi...lslash.oslash.oe.germandbls`.split(`.`),vB=`................................space.exclamsmall.Hungarumlautsmall..dollaroldstyle.dollarsuperior.ampersandsmall.Acutesmall.parenleftsuperior.parenrightsuperior.twodotenleader.onedotenleader.comma.hyphen.period.fraction.zerooldstyle.oneoldstyle.twooldstyle.threeoldstyle.fouroldstyle.fiveoldstyle.sixoldstyle.sevenoldstyle.eightoldstyle.nineoldstyle.colon.semicolon.commasuperior.threequartersemdash.periodsuperior.questionsmall..asuperior.bsuperior.centsuperior.dsuperior.esuperior...isuperior...lsuperior.msuperior.nsuperior.osuperior...rsuperior.ssuperior.tsuperior..ff.fi.fl.ffi.ffl.parenleftinferior..parenrightinferior.Circumflexsmall.hyphensuperior.Gravesmall.Asmall.Bsmall.Csmall.Dsmall.Esmall.Fsmall.Gsmall.Hsmall.Ismall.Jsmall.Ksmall.Lsmall.Msmall.Nsmall.Osmall.Psmall.Qsmall.Rsmall.Ssmall.Tsmall.Usmall.Vsmall.Wsmall.Xsmall.Ysmall.Zsmall.colonmonetary.onefitted.rupiah.Tildesmall...................................exclamdownsmall.centoldstyle.Lslashsmall...Scaronsmall.Zcaronsmall.Dieresissmall.Brevesmall.Caronsmall..Dotaccentsmall...Macronsmall...figuredash.hypheninferior...Ogoneksmall.Ringsmall.Cedillasmall....onequarter.onehalf.threequarters.questiondownsmall.oneeighth.threeeighths.fiveeighths.seveneighths.onethird.twothirds...zerosuperior.onesuperior.twosuperior.threesuperior.foursuperior.fivesuperior.sixsuperior.sevensuperior.eightsuperior.ninesuperior.zeroinferior.oneinferior.twoinferior.threeinferior.fourinferior.fiveinferior.sixinferior.seveninferior.eightinferior.nineinferior.centinferior.dollarinferior.periodinferior.commainferior.Agravesmall.Aacutesmall.Acircumflexsmall.Atildesmall.Adieresissmall.Aringsmall.AEsmall.Ccedillasmall.Egravesmall.Eacutesmall.Ecircumflexsmall.Edieresissmall.Igravesmall.Iacutesmall.Icircumflexsmall.Idieresissmall.Ethsmall.Ntildesmall.Ogravesmall.Oacutesmall.Ocircumflexsmall.Otildesmall.Odieresissmall.OEsmall.Oslashsmall.Ugravesmall.Uacutesmall.Ucircumflexsmall.Udieresissmall.Yacutesmall.Thornsmall.Ydieresissmall`.split(`.`),yB=`.notdef,.null,nonmarkingreturn,space,exclam,quotedbl,numbersign,dollar,percent,ampersand,quotesingle,parenleft,parenright,asterisk,plus,comma,hyphen,period,slash,zero,one,two,three,four,five,six,seven,eight,nine,colon,semicolon,less,equal,greater,question,at,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,bracketleft,backslash,bracketright,asciicircum,underscore,grave,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,braceleft,bar,braceright,asciitilde,Adieresis,Aring,Ccedilla,Eacute,Ntilde,Odieresis,Udieresis,aacute,agrave,acircumflex,adieresis,atilde,aring,ccedilla,eacute,egrave,ecircumflex,edieresis,iacute,igrave,icircumflex,idieresis,ntilde,oacute,ograve,ocircumflex,odieresis,otilde,uacute,ugrave,ucircumflex,udieresis,dagger,degree,cent,sterling,section,bullet,paragraph,germandbls,registered,copyright,trademark,acute,dieresis,notequal,AE,Oslash,infinity,plusminus,lessequal,greaterequal,yen,mu,partialdiff,summation,product,pi,integral,ordfeminine,ordmasculine,Omega,ae,oslash,questiondown,exclamdown,logicalnot,radical,florin,approxequal,Delta,guillemotleft,guillemotright,ellipsis,nonbreakingspace,Agrave,Atilde,Otilde,OE,oe,endash,emdash,quotedblleft,quotedblright,quoteleft,quoteright,divide,lozenge,ydieresis,Ydieresis,fraction,currency,guilsinglleft,guilsinglright,fi,fl,daggerdbl,periodcentered,quotesinglbase,quotedblbase,perthousand,Acircumflex,Ecircumflex,Aacute,Edieresis,Egrave,Iacute,Icircumflex,Idieresis,Igrave,Oacute,Ocircumflex,apple,Ograve,Uacute,Ucircumflex,Ugrave,dotlessi,circumflex,tilde,macron,breve,dotaccent,ring,cedilla,hungarumlaut,ogonek,caron,Lslash,lslash,Scaron,scaron,Zcaron,zcaron,brokenbar,Eth,eth,Yacute,yacute,Thorn,thorn,minus,multiply,onesuperior,twosuperior,threesuperior,onehalf,onequarter,threequarters,franc,Gbreve,gbreve,Idotaccent,Scedilla,scedilla,Cacute,cacute,Ccaron,ccaron,dcroat`.split(`,`);function bB(e){this.font=e}bB.prototype.charToGlyphIndex=function(e){var t=e.codePointAt(0),n=this.font.glyphs;if(n){for(var r=0;r<n.length;r+=1)for(var i=n.get(r),a=0;a<i.unicodes.length;a+=1)if(i.unicodes[a]===t)return r}return null};function xB(e){this.cmap=e}xB.prototype.charToGlyphIndex=function(e){return this.cmap.glyphIndexMap[e.codePointAt(0)]||0};function SB(e,t){this.encoding=e,this.charset=t}SB.prototype.charToGlyphIndex=function(e){var t=e.codePointAt(0),n=this.encoding[t];return this.charset.indexOf(n)};function CB(e){switch(e.version){case 1:this.names=yB.slice();break;case 2:this.names=Array(e.numberOfGlyphs);for(var t=0;t<e.numberOfGlyphs;t++)e.glyphNameIndex[t]<yB.length?this.names[t]=yB[e.glyphNameIndex[t]]:this.names[t]=e.names[e.glyphNameIndex[t]-yB.length];break;case 2.5:this.names=Array(e.numberOfGlyphs);for(var n=0;n<e.numberOfGlyphs;n++)this.names[n]=yB[n+e.glyphNameIndex[n]];break;case 3:this.names=[];break;default:this.names=[];break}}CB.prototype.nameToGlyphIndex=function(e){return this.names.indexOf(e)},CB.prototype.glyphIndexToName=function(e){return this.names[e]};function wB(e){for(var t,n=e.tables.cmap.glyphIndexMap,r=Object.keys(n),i=0;i<r.length;i+=1){var a=r[i],o=n[a];t=e.glyphs.get(o),t.addUnicode(parseInt(a))}for(var s=0;s<e.glyphs.length;s+=1)t=e.glyphs.get(s),e.cffEncoding?e.isCIDFont?t.name=`gid`+s:t.name=e.cffEncoding.charset[s]:e.glyphNames.names&&(t.name=e.glyphNames.glyphIndexToName(s))}function TB(e){e._IndexToUnicodeMap={};for(var t=e.tables.cmap.glyphIndexMap,n=Object.keys(t),r=0;r<n.length;r+=1){var i=n[r],a=t[i];e._IndexToUnicodeMap[a]===void 0?e._IndexToUnicodeMap[a]={unicodes:[parseInt(i)]}:e._IndexToUnicodeMap[a].unicodes.push(parseInt(i))}}function EB(e,t){t.lowMemory?TB(e):wB(e)}function DB(e,t,n,r,i){e.beginPath(),e.moveTo(t,n),e.lineTo(r,i),e.stroke()}var OB={line:DB};function kB(e,t){var n=t||new Oz;return{configurable:!0,get:function(){return typeof n==`function`&&(n=n()),n},set:function(e){n=e}}}function AB(e){this.bindConstructorValues(e)}AB.prototype.bindConstructorValues=function(e){this.index=e.index||0,this.name=e.name||null,this.unicode=e.unicode||void 0,this.unicodes=e.unicodes||e.unicode!==void 0?[e.unicode]:[],`xMin`in e&&(this.xMin=e.xMin),`yMin`in e&&(this.yMin=e.yMin),`xMax`in e&&(this.xMax=e.xMax),`yMax`in e&&(this.yMax=e.yMax),`advanceWidth`in e&&(this.advanceWidth=e.advanceWidth),Object.defineProperty(this,"path",kB(this,e.path))},AB.prototype.addUnicode=function(e){this.unicodes.length===0&&(this.unicode=e),this.unicodes.push(e)},AB.prototype.getBoundingBox=function(){return this.path.getBoundingBox()},AB.prototype.getPath=function(e,t,n,r,i){e=e===void 0?0:e,t=t===void 0?0:t,n=n===void 0?72:n;var a,o;r||={};var s=r.xScale,c=r.yScale;if(r.hinting&&i&&i.hinting&&(o=this.path&&i.hinting.exec(this,n)),o)a=i.hinting.getCommands(o),e=Math.round(e),t=Math.round(t),s=c=1;else{a=this.path.commands;var l=1/(this.path.unitsPerEm||1e3)*n;s===void 0&&(s=l),c===void 0&&(c=l)}for(var u=new Oz,d=0;d<a.length;d+=1){var f=a[d];f.type===`M`?u.moveTo(e+f.x*s,t+-f.y*c):f.type===`L`?u.lineTo(e+f.x*s,t+-f.y*c):f.type===`Q`?u.quadraticCurveTo(e+f.x1*s,t+-f.y1*c,e+f.x*s,t+-f.y*c):f.type===`C`?u.curveTo(e+f.x1*s,t+-f.y1*c,e+f.x2*s,t+-f.y2*c,e+f.x*s,t+-f.y*c):f.type===`Z`&&u.closePath()}return u},AB.prototype.getContours=function(){if(this.points===void 0)return[];for(var e=[],t=[],n=0;n<this.points.length;n+=1){var r=this.points[n];t.push(r),r.lastPointOfContour&&(e.push(t),t=[])}return K.argument(t.length===0,`There are still points left in the current contour.`),e},AB.prototype.getMetrics=function(){for(var e=this.path.commands,t=[],n=[],r=0;r<e.length;r+=1){var i=e[r];i.type!==`Z`&&(t.push(i.x),n.push(i.y)),(i.type===`Q`||i.type===`C`)&&(t.push(i.x1),n.push(i.y1)),i.type===`C`&&(t.push(i.x2),n.push(i.y2))}var a={xMin:Math.min.apply(null,t),yMin:Math.min.apply(null,n),xMax:Math.max.apply(null,t),yMax:Math.max.apply(null,n),leftSideBearing:this.leftSideBearing};return isFinite(a.xMin)||(a.xMin=0),isFinite(a.xMax)||(a.xMax=this.advanceWidth),isFinite(a.yMin)||(a.yMin=0),isFinite(a.yMax)||(a.yMax=0),a.rightSideBearing=this.advanceWidth-a.leftSideBearing-(a.xMax-a.xMin),a},AB.prototype.draw=function(e,t,n,r,i){this.getPath(t,n,r,i).draw(e)},AB.prototype.drawPoints=function(e,t,n,r){function i(t,n,r,i){e.beginPath();for(var a=0;a<t.length;a+=1)e.moveTo(n+t[a].x*i,r+t[a].y*i),e.arc(n+t[a].x*i,r+t[a].y*i,2,0,Math.PI*2,!1);e.closePath(),e.fill()}t=t===void 0?0:t,n=n===void 0?0:n,r=r===void 0?24:r;for(var a=1/this.path.unitsPerEm*r,o=[],s=[],c=this.path,l=0;l<c.commands.length;l+=1){var u=c.commands[l];u.x!==void 0&&o.push({x:u.x,y:-u.y}),u.x1!==void 0&&s.push({x:u.x1,y:-u.y1}),u.x2!==void 0&&s.push({x:u.x2,y:-u.y2})}e.fillStyle=`blue`,i(o,t,n,a),e.fillStyle=`red`,i(s,t,n,a)},AB.prototype.drawMetrics=function(e,t,n,r){var i;t=t===void 0?0:t,n=n===void 0?0:n,r=r===void 0?24:r,i=1/this.path.unitsPerEm*r,e.lineWidth=1,e.strokeStyle=`black`,OB.line(e,t,-1e4,t,1e4),OB.line(e,-1e4,n,1e4,n);var a=this.xMin||0,o=this.yMin||0,s=this.xMax||0,c=this.yMax||0,l=this.advanceWidth||0;e.strokeStyle=`blue`,OB.line(e,t+a*i,-1e4,t+a*i,1e4),OB.line(e,t+s*i,-1e4,t+s*i,1e4),OB.line(e,-1e4,n+-o*i,1e4,n+-o*i),OB.line(e,-1e4,n+-c*i,1e4,n+-c*i),e.strokeStyle=`green`,OB.line(e,t+l*i,-1e4,t+l*i,1e4)};function jB(e,t,n){Object.defineProperty(e,t,{get:function(){return e.path,e[n]},set:function(t){e[n]=t},enumerable:!0,configurable:!0})}function MB(e,t){if(this.font=e,this.glyphs={},Array.isArray(t))for(var n=0;n<t.length;n++){var r=t[n];r.path.unitsPerEm=e.unitsPerEm,this.glyphs[n]=r}this.length=t&&t.length||0}MB.prototype.get=function(e){if(this.glyphs[e]===void 0){this.font._push(e),typeof this.glyphs[e]==`function`&&(this.glyphs[e]=this.glyphs[e]());var t=this.glyphs[e],n=this.font._IndexToUnicodeMap[e];if(n)for(var r=0;r<n.unicodes.length;r++)t.addUnicode(n.unicodes[r]);this.font.cffEncoding?this.font.isCIDFont?t.name=`gid`+e:t.name=this.font.cffEncoding.charset[e]:this.font.glyphNames.names&&(t.name=this.font.glyphNames.glyphIndexToName(e)),this.glyphs[e].advanceWidth=this.font._hmtxTableData[e].advanceWidth,this.glyphs[e].leftSideBearing=this.font._hmtxTableData[e].leftSideBearing}else typeof this.glyphs[e]==`function`&&(this.glyphs[e]=this.glyphs[e]());return this.glyphs[e]},MB.prototype.push=function(e,t){this.glyphs[e]=t,this.length++};function NB(e,t){return new AB({index:t,font:e})}function PB(e,t,n,r,i,a){return function(){var o=new AB({index:t,font:e});return o.path=function(){n(o,r,i);var t=a(e.glyphs,o);return t.unitsPerEm=e.unitsPerEm,t},jB(o,`xMin`,`_xMin`),jB(o,`xMax`,`_xMax`),jB(o,`yMin`,`_yMin`),jB(o,`yMax`,`_yMax`),o}}function FB(e,t,n,r){return function(){var i=new AB({index:t,font:e});return i.path=function(){var t=n(e,i,r);return t.unitsPerEm=e.unitsPerEm,t},i}}var IB={GlyphSet:MB,glyphLoader:NB,ttfGlyphLoader:PB,cffGlyphLoader:FB};function LB(e,t){if(e===t)return!0;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n+=1)if(!LB(e[n],t[n]))return!1;return!0}else return!1}function RB(e){return e.length<1240?107:e.length<33900?1131:32768}function zB(e,t,n){var r=[],i=[],a=Z.getCard16(e,t),o,s;if(a!==0){var c=Z.getByte(e,t+2);o=t+(a+1)*c+2;for(var l=t+3,u=0;u<a+1;u+=1)r.push(Z.getOffset(e,l,c)),l+=c;s=o+r[a]}else s=t+2;for(var d=0;d<r.length-1;d+=1){var f=Z.getBytes(e,o+r[d],o+r[d+1]);n&&(f=n(f)),i.push(f)}return{objects:i,startOffset:t,endOffset:s}}function BB(e,t){var n=[],r=Z.getCard16(e,t),i,a;if(r!==0){var o=Z.getByte(e,t+2);i=t+(r+1)*o+2;for(var s=t+3,c=0;c<r+1;c+=1)n.push(Z.getOffset(e,s,o)),s+=o;a=i+n[r]}else a=t+2;return{offsets:n,startOffset:t,endOffset:a}}function VB(e,t,n,r,i){var a=Z.getCard16(n,r),o=0;if(a!==0){var s=Z.getByte(n,r+2);o=r+(a+1)*s+2}var c=Z.getBytes(n,o+t[e],o+t[e+1]);return i&&(c=i(c)),c}function HB(e){for(var t=``,n=15,r=[`0`,`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`.`,`E`,`E-`,null,`-`];;){var i=e.parseByte(),a=i>>4,o=i&15;if(a===n||(t+=r[a],o===n))break;t+=r[o]}return parseFloat(t)}function UB(e,t){var n,r,i,a;if(t===28)return n=e.parseByte(),r=e.parseByte(),n<<8|r;if(t===29)return n=e.parseByte(),r=e.parseByte(),i=e.parseByte(),a=e.parseByte(),n<<24|r<<16|i<<8|a;if(t===30)return HB(e);if(t>=32&&t<=246)return t-139;if(t>=247&&t<=250)return n=e.parseByte(),(t-247)*256+n+108;if(t>=251&&t<=254)return n=e.parseByte(),-(t-251)*256-n-108;throw Error(`Invalid b0 `+t)}function WB(e){for(var t={},n=0;n<e.length;n+=1){var r=e[n][0],i=e[n][1],a=void 0;if(a=i.length===1?i[0]:i,t.hasOwnProperty(r)&&!isNaN(t[r]))throw Error(`Object `+t+` already has key `+r);t[r]=a}return t}function GB(e,t,n){t=t===void 0?0:t;var r=new Z.Parser(e,t),i=[],a=[];for(n=n===void 0?e.length:n;r.relativeOffset<n;){var o=r.parseByte();o<=21?(o===12&&(o=1200+r.parseByte()),i.push([o,a]),a=[]):a.push(UB(r,o))}return WB(i)}function KB(e,t){return t=t<=390?gB[t]:e[t-391],t}function qB(e,t,n){for(var r={},i,a=0;a<t.length;a+=1){var o=t[a];if(Array.isArray(o.type)){var s=[];s.length=o.type.length;for(var c=0;c<o.type.length;c++)i=e[o.op]===void 0?void 0:e[o.op][c],i===void 0&&(i=o.value!==void 0&&o.value[c]!==void 0?o.value[c]:null),o.type[c]===`SID`&&(i=KB(n,i)),s[c]=i;r[o.name]=s}else i=e[o.op],i===void 0&&(i=o.value===void 0?null:o.value),o.type===`SID`&&(i=KB(n,i)),r[o.name]=i}return r}function JB(e,t){var n={};return n.formatMajor=Z.getCard8(e,t),n.formatMinor=Z.getCard8(e,t+1),n.size=Z.getCard8(e,t+2),n.offsetSize=Z.getCard8(e,t+3),n.startOffset=t,n.endOffset=t+4,n}var YB=[{name:`version`,op:0,type:`SID`},{name:`notice`,op:1,type:`SID`},{name:`copyright`,op:1200,type:`SID`},{name:`fullName`,op:2,type:`SID`},{name:`familyName`,op:3,type:`SID`},{name:`weight`,op:4,type:`SID`},{name:`isFixedPitch`,op:1201,type:`number`,value:0},{name:`italicAngle`,op:1202,type:`number`,value:0},{name:`underlinePosition`,op:1203,type:`number`,value:-100},{name:`underlineThickness`,op:1204,type:`number`,value:50},{name:`paintType`,op:1205,type:`number`,value:0},{name:`charstringType`,op:1206,type:`number`,value:2},{name:`fontMatrix`,op:1207,type:[`real`,`real`,`real`,`real`,`real`,`real`],value:[.001,0,0,.001,0,0]},{name:`uniqueId`,op:13,type:`number`},{name:`fontBBox`,op:5,type:[`number`,`number`,`number`,`number`],value:[0,0,0,0]},{name:`strokeWidth`,op:1208,type:`number`,value:0},{name:`xuid`,op:14,type:[],value:null},{name:`charset`,op:15,type:`offset`,value:0},{name:`encoding`,op:16,type:`offset`,value:0},{name:`charStrings`,op:17,type:`offset`,value:0},{name:`private`,op:18,type:[`number`,`offset`],value:[0,0]},{name:`ros`,op:1230,type:[`SID`,`SID`,`number`]},{name:`cidFontVersion`,op:1231,type:`number`,value:0},{name:`cidFontRevision`,op:1232,type:`number`,value:0},{name:`cidFontType`,op:1233,type:`number`,value:0},{name:`cidCount`,op:1234,type:`number`,value:8720},{name:`uidBase`,op:1235,type:`number`},{name:`fdArray`,op:1236,type:`offset`},{name:`fdSelect`,op:1237,type:`offset`},{name:`fontName`,op:1238,type:`SID`}],XB=[{name:`subrs`,op:19,type:`offset`,value:0},{name:`defaultWidthX`,op:20,type:`number`,value:0},{name:`nominalWidthX`,op:21,type:`number`,value:0}];function ZB(e,t){return qB(GB(e,0,e.byteLength),YB,t)}function QB(e,t,n,r){return qB(GB(e,t,n),XB,r)}function $B(e,t,n,r){for(var i=[],a=0;a<n.length;a+=1){var o=ZB(new DataView(new Uint8Array(n[a]).buffer),r);o._subrs=[],o._subrsBias=0,o._defaultWidthX=0,o._nominalWidthX=0;var s=o.private[0],c=o.private[1];if(s!==0&&c!==0){var l=QB(e,c+t,s,r);o._defaultWidthX=l.defaultWidthX,o._nominalWidthX=l.nominalWidthX,l.subrs!==0&&(o._subrs=zB(e,c+l.subrs+t).objects,o._subrsBias=RB(o._subrs)),o._privateDict=l}i.push(o)}return i}function eV(e,t,n,r){var i,a,o=new Z.Parser(e,t);--n;var s=[`.notdef`],c=o.parseCard8();if(c===0)for(var l=0;l<n;l+=1)i=o.parseSID(),s.push(KB(r,i));else if(c===1)for(;s.length<=n;){i=o.parseSID(),a=o.parseCard8();for(var u=0;u<=a;u+=1)s.push(KB(r,i)),i+=1}else if(c===2)for(;s.length<=n;){i=o.parseSID(),a=o.parseCard16();for(var d=0;d<=a;d+=1)s.push(KB(r,i)),i+=1}else throw Error(`Unknown charset format `+c);return s}function tV(e,t,n){var r,i={},a=new Z.Parser(e,t),o=a.parseCard8();if(o===0)for(var s=a.parseCard8(),c=0;c<s;c+=1)r=a.parseCard8(),i[r]=c;else if(o===1){var l=a.parseCard8();r=1;for(var u=0;u<l;u+=1)for(var d=a.parseCard8(),f=a.parseCard8(),p=d;p<=d+f;p+=1)i[p]=r,r+=1}else throw Error(`Unknown encoding format `+o);return new SB(i,n)}function nV(e,t,n){var r,i,a,o,s=new Oz,c=[],l=0,u=!1,d=!1,f=0,p=0,m,h,g,_;if(e.isCIDFont){var v=e.tables.cff.topDict._fdSelect[t.index],y=e.tables.cff.topDict._fdArray[v];m=y._subrs,h=y._subrsBias,g=y._defaultWidthX,_=y._nominalWidthX}else m=e.tables.cff.topDict._subrs,h=e.tables.cff.topDict._subrsBias,g=e.tables.cff.topDict._defaultWidthX,_=e.tables.cff.topDict._nominalWidthX;var b=g;function x(e,t){d&&s.closePath(),s.moveTo(e,t),d=!0}function S(){c.length%2!=0&&!u&&(b=c.shift()+_),l+=c.length>>1,c.length=0,u=!0}function C(n){for(var g,v,y,w,ee,te,ne,re,ie,ae,oe,se,ce=0;ce<n.length;){var le=n[ce];switch(ce+=1,le){case 1:S();break;case 3:S();break;case 4:c.length>1&&!u&&(b=c.shift()+_,u=!0),p+=c.pop(),x(f,p);break;case 5:for(;c.length>0;)f+=c.shift(),p+=c.shift(),s.lineTo(f,p);break;case 6:for(;c.length>0&&(f+=c.shift(),s.lineTo(f,p),c.length!==0);)p+=c.shift(),s.lineTo(f,p);break;case 7:for(;c.length>0&&(p+=c.shift(),s.lineTo(f,p),c.length!==0);)f+=c.shift(),s.lineTo(f,p);break;case 8:for(;c.length>0;)r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+c.shift(),s.curveTo(r,i,a,o,f,p);break;case 10:ee=c.pop()+h,te=m[ee],te&&C(te);break;case 11:return;case 12:switch(le=n[ce],ce+=1,le){case 35:r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),ne=a+c.shift(),re=o+c.shift(),ie=ne+c.shift(),ae=re+c.shift(),oe=ie+c.shift(),se=ae+c.shift(),f=oe+c.shift(),p=se+c.shift(),c.shift(),s.curveTo(r,i,a,o,ne,re),s.curveTo(ie,ae,oe,se,f,p);break;case 34:r=f+c.shift(),i=p,a=r+c.shift(),o=i+c.shift(),ne=a+c.shift(),re=o,ie=ne+c.shift(),ae=o,oe=ie+c.shift(),se=p,f=oe+c.shift(),s.curveTo(r,i,a,o,ne,re),s.curveTo(ie,ae,oe,se,f,p);break;case 36:r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),ne=a+c.shift(),re=o,ie=ne+c.shift(),ae=o,oe=ie+c.shift(),se=ae+c.shift(),f=oe+c.shift(),s.curveTo(r,i,a,o,ne,re),s.curveTo(ie,ae,oe,se,f,p);break;case 37:r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),ne=a+c.shift(),re=o+c.shift(),ie=ne+c.shift(),ae=re+c.shift(),oe=ie+c.shift(),se=ae+c.shift(),Math.abs(oe-f)>Math.abs(se-p)?f=oe+c.shift():p=se+c.shift(),s.curveTo(r,i,a,o,ne,re),s.curveTo(ie,ae,oe,se,f,p);break;default:console.log(`Glyph `+t.index+`: unknown operator 1200`+le),c.length=0}break;case 14:c.length>0&&!u&&(b=c.shift()+_,u=!0),d&&=(s.closePath(),!1);break;case 18:S();break;case 19:case 20:S(),ce+=l+7>>3;break;case 21:c.length>2&&!u&&(b=c.shift()+_,u=!0),p+=c.pop(),f+=c.pop(),x(f,p);break;case 22:c.length>1&&!u&&(b=c.shift()+_,u=!0),f+=c.pop(),x(f,p);break;case 23:S();break;case 24:for(;c.length>2;)r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+c.shift(),s.curveTo(r,i,a,o,f,p);f+=c.shift(),p+=c.shift(),s.lineTo(f,p);break;case 25:for(;c.length>6;)f+=c.shift(),p+=c.shift(),s.lineTo(f,p);r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+c.shift(),s.curveTo(r,i,a,o,f,p);break;case 26:for(c.length%2&&(f+=c.shift());c.length>0;)r=f,i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a,p=o+c.shift(),s.curveTo(r,i,a,o,f,p);break;case 27:for(c.length%2&&(p+=c.shift());c.length>0;)r=f+c.shift(),i=p,a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o,s.curveTo(r,i,a,o,f,p);break;case 28:g=n[ce],v=n[ce+1],c.push((g<<24|v<<16)>>16),ce+=2;break;case 29:ee=c.pop()+e.gsubrsBias,te=e.gsubrs[ee],te&&C(te);break;case 30:for(;c.length>0&&(r=f,i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+(c.length===1?c.shift():0),s.curveTo(r,i,a,o,f,p),c.length!==0);)r=f+c.shift(),i=p,a=r+c.shift(),o=i+c.shift(),p=o+c.shift(),f=a+(c.length===1?c.shift():0),s.curveTo(r,i,a,o,f,p);break;case 31:for(;c.length>0&&(r=f+c.shift(),i=p,a=r+c.shift(),o=i+c.shift(),p=o+c.shift(),f=a+(c.length===1?c.shift():0),s.curveTo(r,i,a,o,f,p),c.length!==0);)r=f,i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+(c.length===1?c.shift():0),s.curveTo(r,i,a,o,f,p);break;default:le<32?console.log(`Glyph `+t.index+`: unknown operator `+le):le<247?c.push(le-139):le<251?(g=n[ce],ce+=1,c.push((le-247)*256+g+108)):le<255?(g=n[ce],ce+=1,c.push(-(le-251)*256-g-108)):(g=n[ce],v=n[ce+1],y=n[ce+2],w=n[ce+3],ce+=4,c.push((g<<24|v<<16|y<<8|w)/65536))}}}return C(n),t.advanceWidth=b,s}function rV(e,t,n,r){var i=[],a,o=new Z.Parser(e,t),s=o.parseCard8();if(s===0)for(var c=0;c<n;c++){if(a=o.parseCard8(),a>=r)throw Error(`CFF table CID Font FDSelect has bad FD index value `+a+` (FD count `+r+`)`);i.push(a)}else if(s===3){var l=o.parseCard16(),u=o.parseCard16();if(u!==0)throw Error(`CFF Table CID Font FDSelect format 3 range has bad initial GID `+u);for(var d,f=0;f<l;f++){if(a=o.parseCard8(),d=o.parseCard16(),a>=r)throw Error(`CFF table CID Font FDSelect has bad FD index value `+a+` (FD count `+r+`)`);if(d>n)throw Error(`CFF Table CID Font FDSelect format 3 range has bad GID `+d);for(;u<d;u++)i.push(a);u=d}if(d!==n)throw Error(`CFF Table CID Font FDSelect format 3 range has bad final GID `+d)}else throw Error(`CFF Table CID Font FDSelect table has unsupported format `+s);return i}function iV(e,t,n,r){n.tables.cff={};var i=zB(e,zB(e,JB(e,t).endOffset,Z.bytesToString).endOffset),a=zB(e,i.endOffset,Z.bytesToString);n.gsubrs=zB(e,a.endOffset).objects,n.gsubrsBias=RB(n.gsubrs);var o=$B(e,t,i.objects,a.objects);if(o.length!==1)throw Error(`CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = `+o.length);var s=o[0];if(n.tables.cff.topDict=s,s._privateDict&&(n.defaultWidthX=s._privateDict.defaultWidthX,n.nominalWidthX=s._privateDict.nominalWidthX),s.ros[0]!==void 0&&s.ros[1]!==void 0&&(n.isCIDFont=!0),n.isCIDFont){var c=s.fdArray,l=s.fdSelect;if(c===0||l===0)throw Error(`Font is marked as a CID font, but FDArray and/or FDSelect information is missing`);c+=t;var u=$B(e,t,zB(e,c).objects,a.objects);s._fdArray=u,l+=t,s._fdSelect=rV(e,l,n.numGlyphs,u.length)}var d=t+s.private[1],f=QB(e,d,s.private[0],a.objects);n.defaultWidthX=f.defaultWidthX,n.nominalWidthX=f.nominalWidthX,f.subrs===0?(n.subrs=[],n.subrsBias=0):(n.subrs=zB(e,d+f.subrs).objects,n.subrsBias=RB(n.subrs));var p;r.lowMemory?(p=BB(e,t+s.charStrings),n.nGlyphs=p.offsets.length):(p=zB(e,t+s.charStrings),n.nGlyphs=p.objects.length);var m=eV(e,t+s.charset,n.nGlyphs,a.objects);if(s.encoding===0?n.cffEncoding=new SB(_B,m):s.encoding===1?n.cffEncoding=new SB(vB,m):n.cffEncoding=tV(e,t+s.encoding,m),n.encoding=n.encoding||n.cffEncoding,n.glyphs=new IB.GlyphSet(n),r.lowMemory)n._push=function(r){var i=VB(r,p.offsets,e,t+s.charStrings);n.glyphs.push(r,IB.cffGlyphLoader(n,r,nV,i))};else for(var h=0;h<n.nGlyphs;h+=1){var g=p.objects[h];n.glyphs.push(h,IB.cffGlyphLoader(n,h,nV,g))}}function aV(e,t){var n,r=gB.indexOf(e);return r>=0&&(n=r),r=t.indexOf(e),r>=0?n=r+gB.length:(n=gB.length+t.length,t.push(e)),n}function oV(){return new Y.Record(`Header`,[{name:`major`,type:`Card8`,value:1},{name:`minor`,type:`Card8`,value:0},{name:`hdrSize`,type:`Card8`,value:4},{name:`major`,type:`Card8`,value:1}])}function sV(e){var t=new Y.Record(`Name INDEX`,[{name:`names`,type:`INDEX`,value:[]}]);t.names=[];for(var n=0;n<e.length;n+=1)t.names.push({name:`name_`+n,type:`NAME`,value:e[n]});return t}function cV(e,t,n){for(var r={},i=0;i<e.length;i+=1){var a=e[i],o=t[a.name];o!==void 0&&!LB(o,a.value)&&(a.type===`SID`&&(o=aV(o,n)),r[a.op]={name:a.name,type:a.type,value:o})}return r}function lV(e,t){var n=new Y.Record(`Top DICT`,[{name:`dict`,type:`DICT`,value:{}}]);return n.dict=cV(YB,e,t),n}function uV(e){var t=new Y.Record(`Top DICT INDEX`,[{name:`topDicts`,type:`INDEX`,value:[]}]);return t.topDicts=[{name:`topDict_0`,type:`TABLE`,value:e}],t}function dV(e){var t=new Y.Record(`String INDEX`,[{name:`strings`,type:`INDEX`,value:[]}]);t.strings=[];for(var n=0;n<e.length;n+=1)t.strings.push({name:`string_`+n,type:`STRING`,value:e[n]});return t}function fV(){return new Y.Record(`Global Subr INDEX`,[{name:`subrs`,type:`INDEX`,value:[]}])}function pV(e,t){for(var n=new Y.Record(`Charsets`,[{name:`format`,type:`Card8`,value:0}]),r=0;r<e.length;r+=1){var i=e[r],a=aV(i,t);n.fields.push({name:`glyph_`+r,type:`SID`,value:a})}return n}function mV(e){var t=[],n=e.path;t.push({name:`width`,type:`NUMBER`,value:e.advanceWidth});for(var r=0,i=0,a=0;a<n.commands.length;a+=1){var o=void 0,s=void 0,c=n.commands[a];if(c.type===`Q`){var l=1/3,u=2/3;c={type:`C`,x:c.x,y:c.y,x1:Math.round(l*r+u*c.x1),y1:Math.round(l*i+u*c.y1),x2:Math.round(l*c.x+u*c.x1),y2:Math.round(l*c.y+u*c.y1)}}if(c.type===`M`)o=Math.round(c.x-r),s=Math.round(c.y-i),t.push({name:`dx`,type:`NUMBER`,value:o}),t.push({name:`dy`,type:`NUMBER`,value:s}),t.push({name:`rmoveto`,type:`OP`,value:21}),r=Math.round(c.x),i=Math.round(c.y);else if(c.type===`L`)o=Math.round(c.x-r),s=Math.round(c.y-i),t.push({name:`dx`,type:`NUMBER`,value:o}),t.push({name:`dy`,type:`NUMBER`,value:s}),t.push({name:`rlineto`,type:`OP`,value:5}),r=Math.round(c.x),i=Math.round(c.y);else if(c.type===`C`){var d=Math.round(c.x1-r),f=Math.round(c.y1-i),p=Math.round(c.x2-c.x1),m=Math.round(c.y2-c.y1);o=Math.round(c.x-c.x2),s=Math.round(c.y-c.y2),t.push({name:`dx1`,type:`NUMBER`,value:d}),t.push({name:`dy1`,type:`NUMBER`,value:f}),t.push({name:`dx2`,type:`NUMBER`,value:p}),t.push({name:`dy2`,type:`NUMBER`,value:m}),t.push({name:`dx`,type:`NUMBER`,value:o}),t.push({name:`dy`,type:`NUMBER`,value:s}),t.push({name:`rrcurveto`,type:`OP`,value:8}),r=Math.round(c.x),i=Math.round(c.y)}}return t.push({name:`endchar`,type:`OP`,value:14}),t}function hV(e){for(var t=new Y.Record(`CharStrings INDEX`,[{name:`charStrings`,type:`INDEX`,value:[]}]),n=0;n<e.length;n+=1){var r=e.get(n),i=mV(r);t.charStrings.push({name:r.name,type:`CHARSTRING`,value:i})}return t}function gV(e,t){var n=new Y.Record(`Private DICT`,[{name:`dict`,type:`DICT`,value:{}}]);return n.dict=cV(XB,e,t),n}function _V(e,t){for(var n=new Y.Table(`CFF `,[{name:`header`,type:`RECORD`},{name:`nameIndex`,type:`RECORD`},{name:`topDictIndex`,type:`RECORD`},{name:`stringIndex`,type:`RECORD`},{name:`globalSubrIndex`,type:`RECORD`},{name:`charsets`,type:`RECORD`},{name:`charStringsIndex`,type:`RECORD`},{name:`privateDict`,type:`RECORD`}]),r=1/t.unitsPerEm,i={version:t.version,fullName:t.fullName,familyName:t.familyName,weight:t.weightName,fontBBox:t.fontBBox||[0,0,0,0],fontMatrix:[r,0,0,r,0,0],charset:999,encoding:0,charStrings:999,private:[0,999]},a={},o=[],s,c=1;c<e.length;c+=1)s=e.get(c),o.push(s.name);var l=[];n.header=oV(),n.nameIndex=sV([t.postScriptName]);var u=lV(i,l);return n.topDictIndex=uV(u),n.globalSubrIndex=fV(),n.charsets=pV(o,l),n.charStringsIndex=hV(e),n.privateDict=gV(a,l),n.stringIndex=dV(l),i.charset=n.header.sizeOf()+n.nameIndex.sizeOf()+n.topDictIndex.sizeOf()+n.stringIndex.sizeOf()+n.globalSubrIndex.sizeOf(),i.encoding=0,i.charStrings=i.charset+n.charsets.sizeOf(),i.private[1]=i.charStrings+n.charStringsIndex.sizeOf(),u=lV(i,l),n.topDictIndex=uV(u),n}var vV={parse:iV,make:_V};function yV(e,t){var n={},r=new Z.Parser(e,t);return n.version=r.parseVersion(),n.fontRevision=Math.round(r.parseFixed()*1e3)/1e3,n.checkSumAdjustment=r.parseULong(),n.magicNumber=r.parseULong(),K.argument(n.magicNumber===1594834165,`Font header has wrong magic number.`),n.flags=r.parseUShort(),n.unitsPerEm=r.parseUShort(),n.created=r.parseLongDateTime(),n.modified=r.parseLongDateTime(),n.xMin=r.parseShort(),n.yMin=r.parseShort(),n.xMax=r.parseShort(),n.yMax=r.parseShort(),n.macStyle=r.parseUShort(),n.lowestRecPPEM=r.parseUShort(),n.fontDirectionHint=r.parseShort(),n.indexToLocFormat=r.parseShort(),n.glyphDataFormat=r.parseShort(),n}function bV(e){var t=Math.round(new Date().getTime()/1e3)+2082844800,n=t;return e.createdTimestamp&&(n=e.createdTimestamp+2082844800),new Y.Table(`head`,[{name:`version`,type:`FIXED`,value:65536},{name:`fontRevision`,type:`FIXED`,value:65536},{name:`checkSumAdjustment`,type:`ULONG`,value:0},{name:`magicNumber`,type:`ULONG`,value:1594834165},{name:`flags`,type:`USHORT`,value:0},{name:`unitsPerEm`,type:`USHORT`,value:1e3},{name:`created`,type:`LONGDATETIME`,value:n},{name:`modified`,type:`LONGDATETIME`,value:t},{name:`xMin`,type:`SHORT`,value:0},{name:`yMin`,type:`SHORT`,value:0},{name:`xMax`,type:`SHORT`,value:0},{name:`yMax`,type:`SHORT`,value:0},{name:`macStyle`,type:`USHORT`,value:0},{name:`lowestRecPPEM`,type:`USHORT`,value:0},{name:`fontDirectionHint`,type:`SHORT`,value:2},{name:`indexToLocFormat`,type:`SHORT`,value:0},{name:`glyphDataFormat`,type:`SHORT`,value:0}],e)}var xV={parse:yV,make:bV};function SV(e,t){var n={},r=new Z.Parser(e,t);return n.version=r.parseVersion(),n.ascender=r.parseShort(),n.descender=r.parseShort(),n.lineGap=r.parseShort(),n.advanceWidthMax=r.parseUShort(),n.minLeftSideBearing=r.parseShort(),n.minRightSideBearing=r.parseShort(),n.xMaxExtent=r.parseShort(),n.caretSlopeRise=r.parseShort(),n.caretSlopeRun=r.parseShort(),n.caretOffset=r.parseShort(),r.relativeOffset+=8,n.metricDataFormat=r.parseShort(),n.numberOfHMetrics=r.parseUShort(),n}function CV(e){return new Y.Table(`hhea`,[{name:`version`,type:`FIXED`,value:65536},{name:`ascender`,type:`FWORD`,value:0},{name:`descender`,type:`FWORD`,value:0},{name:`lineGap`,type:`FWORD`,value:0},{name:`advanceWidthMax`,type:`UFWORD`,value:0},{name:`minLeftSideBearing`,type:`FWORD`,value:0},{name:`minRightSideBearing`,type:`FWORD`,value:0},{name:`xMaxExtent`,type:`FWORD`,value:0},{name:`caretSlopeRise`,type:`SHORT`,value:1},{name:`caretSlopeRun`,type:`SHORT`,value:0},{name:`caretOffset`,type:`SHORT`,value:0},{name:`reserved1`,type:`SHORT`,value:0},{name:`reserved2`,type:`SHORT`,value:0},{name:`reserved3`,type:`SHORT`,value:0},{name:`reserved4`,type:`SHORT`,value:0},{name:`metricDataFormat`,type:`SHORT`,value:0},{name:`numberOfHMetrics`,type:`USHORT`,value:0}],e)}var wV={parse:SV,make:CV};function TV(e,t,n,r,i){for(var a,o,s=new Z.Parser(e,t),c=0;c<r;c+=1){c<n&&(a=s.parseUShort(),o=s.parseShort());var l=i.get(c);l.advanceWidth=a,l.leftSideBearing=o}}function EV(e,t,n,r,i){e._hmtxTableData={};for(var a,o,s=new Z.Parser(t,n),c=0;c<i;c+=1)c<r&&(a=s.parseUShort(),o=s.parseShort()),e._hmtxTableData[c]={advanceWidth:a,leftSideBearing:o}}function DV(e,t,n,r,i,a,o){o.lowMemory?EV(e,t,n,r,i):TV(t,n,r,i,a)}function OV(e){for(var t=new Y.Table(`hmtx`,[]),n=0;n<e.length;n+=1){var r=e.get(n),i=r.advanceWidth||0,a=r.leftSideBearing||0;t.fields.push({name:`advanceWidth_`+n,type:`USHORT`,value:i}),t.fields.push({name:`leftSideBearing_`+n,type:`SHORT`,value:a})}return t}var kV={parse:DV,make:OV};function AV(e){for(var t=new Y.Table(`ltag`,[{name:`version`,type:`ULONG`,value:1},{name:`flags`,type:`ULONG`,value:0},{name:`numTags`,type:`ULONG`,value:e.length}]),n=``,r=12+e.length*4,i=0;i<e.length;++i){var a=n.indexOf(e[i]);a<0&&(a=n.length,n+=e[i]),t.fields.push({name:`offset `+i,type:`USHORT`,value:r+a}),t.fields.push({name:`length `+i,type:`USHORT`,value:e[i].length})}return t.fields.push({name:`stringPool`,type:`CHARARRAY`,value:n}),t}function jV(e,t){var n=new Z.Parser(e,t),r=n.parseULong();K.argument(r===1,`Unsupported ltag table version.`),n.skip(`uLong`,1);for(var i=n.parseULong(),a=[],o=0;o<i;o++){for(var s=``,c=t+n.parseUShort(),l=n.parseUShort(),u=c;u<c+l;++u)s+=String.fromCharCode(e.getInt8(u));a.push(s)}return a}var MV={make:AV,parse:jV};function NV(e,t){var n={},r=new Z.Parser(e,t);return n.version=r.parseVersion(),n.numGlyphs=r.parseUShort(),n.version===1&&(n.maxPoints=r.parseUShort(),n.maxContours=r.parseUShort(),n.maxCompositePoints=r.parseUShort(),n.maxCompositeContours=r.parseUShort(),n.maxZones=r.parseUShort(),n.maxTwilightPoints=r.parseUShort(),n.maxStorage=r.parseUShort(),n.maxFunctionDefs=r.parseUShort(),n.maxInstructionDefs=r.parseUShort(),n.maxStackElements=r.parseUShort(),n.maxSizeOfInstructions=r.parseUShort(),n.maxComponentElements=r.parseUShort(),n.maxComponentDepth=r.parseUShort()),n}function PV(e){return new Y.Table(`maxp`,[{name:`version`,type:`FIXED`,value:20480},{name:`numGlyphs`,type:`USHORT`,value:e}])}var FV={parse:NV,make:PV},IV=[`copyright`,`fontFamily`,`fontSubfamily`,`uniqueID`,`fullName`,`version`,`postScriptName`,`trademark`,`manufacturer`,`designer`,`description`,`manufacturerURL`,`designerURL`,`license`,`licenseURL`,`reserved`,`preferredFamily`,`preferredSubfamily`,`compatibleFullName`,`sampleText`,`postScriptFindFontName`,`wwsFamily`,`wwsSubfamily`],LV={0:`en`,1:`fr`,2:`de`,3:`it`,4:`nl`,5:`sv`,6:`es`,7:`da`,8:`pt`,9:`no`,10:`he`,11:`ja`,12:`ar`,13:`fi`,14:`el`,15:`is`,16:`mt`,17:`tr`,18:`hr`,19:`zh-Hant`,20:`ur`,21:`hi`,22:`th`,23:`ko`,24:`lt`,25:`pl`,26:`hu`,27:`es`,28:`lv`,29:`se`,30:`fo`,31:`fa`,32:`ru`,33:`zh`,34:`nl-BE`,35:`ga`,36:`sq`,37:`ro`,38:`cz`,39:`sk`,40:`si`,41:`yi`,42:`sr`,43:`mk`,44:`bg`,45:`uk`,46:`be`,47:`uz`,48:`kk`,49:`az-Cyrl`,50:`az-Arab`,51:`hy`,52:`ka`,53:`mo`,54:`ky`,55:`tg`,56:`tk`,57:`mn-CN`,58:`mn`,59:`ps`,60:`ks`,61:`ku`,62:`sd`,63:`bo`,64:`ne`,65:`sa`,66:`mr`,67:`bn`,68:`as`,69:`gu`,70:`pa`,71:`or`,72:`ml`,73:`kn`,74:`ta`,75:`te`,76:`si`,77:`my`,78:`km`,79:`lo`,80:`vi`,81:`id`,82:`tl`,83:`ms`,84:`ms-Arab`,85:`am`,86:`ti`,87:`om`,88:`so`,89:`sw`,90:`rw`,91:`rn`,92:`ny`,93:`mg`,94:`eo`,128:`cy`,129:`eu`,130:`ca`,131:`la`,132:`qu`,133:`gn`,134:`ay`,135:`tt`,136:`ug`,137:`dz`,138:`jv`,139:`su`,140:`gl`,141:`af`,142:`br`,143:`iu`,144:`gd`,145:`gv`,146:`ga`,147:`to`,148:`el-polyton`,149:`kl`,150:`az`,151:`nn`},RV={0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:5,11:1,12:4,13:0,14:6,15:0,16:0,17:0,18:0,19:2,20:4,21:9,22:21,23:3,24:29,25:29,26:29,27:29,28:29,29:0,30:0,31:4,32:7,33:25,34:0,35:0,36:0,37:0,38:29,39:29,40:0,41:5,42:7,43:7,44:7,45:7,46:7,47:7,48:7,49:7,50:4,51:24,52:23,53:7,54:7,55:7,56:7,57:27,58:7,59:4,60:4,61:4,62:4,63:26,64:9,65:9,66:9,67:13,68:13,69:11,70:10,71:12,72:17,73:16,74:14,75:15,76:18,77:19,78:20,79:22,80:30,81:0,82:0,83:0,84:4,85:28,86:28,87:28,88:0,89:0,90:0,91:0,92:0,93:0,94:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:7,136:4,137:26,138:0,139:0,140:0,141:0,142:0,143:28,144:0,145:0,146:0,147:0,148:6,149:0,150:0,151:0},zV={1078:`af`,1052:`sq`,1156:`gsw`,1118:`am`,5121:`ar-DZ`,15361:`ar-BH`,3073:`ar`,2049:`ar-IQ`,11265:`ar-JO`,13313:`ar-KW`,12289:`ar-LB`,4097:`ar-LY`,6145:`ary`,8193:`ar-OM`,16385:`ar-QA`,1025:`ar-SA`,10241:`ar-SY`,7169:`aeb`,14337:`ar-AE`,9217:`ar-YE`,1067:`hy`,1101:`as`,2092:`az-Cyrl`,1068:`az`,1133:`ba`,1069:`eu`,1059:`be`,2117:`bn`,1093:`bn-IN`,8218:`bs-Cyrl`,5146:`bs`,1150:`br`,1026:`bg`,1027:`ca`,3076:`zh-HK`,5124:`zh-MO`,2052:`zh`,4100:`zh-SG`,1028:`zh-TW`,1155:`co`,1050:`hr`,4122:`hr-BA`,1029:`cs`,1030:`da`,1164:`prs`,1125:`dv`,2067:`nl-BE`,1043:`nl`,3081:`en-AU`,10249:`en-BZ`,4105:`en-CA`,9225:`en-029`,16393:`en-IN`,6153:`en-IE`,8201:`en-JM`,17417:`en-MY`,5129:`en-NZ`,13321:`en-PH`,18441:`en-SG`,7177:`en-ZA`,11273:`en-TT`,2057:`en-GB`,1033:`en`,12297:`en-ZW`,1061:`et`,1080:`fo`,1124:`fil`,1035:`fi`,2060:`fr-BE`,3084:`fr-CA`,1036:`fr`,5132:`fr-LU`,6156:`fr-MC`,4108:`fr-CH`,1122:`fy`,1110:`gl`,1079:`ka`,3079:`de-AT`,1031:`de`,5127:`de-LI`,4103:`de-LU`,2055:`de-CH`,1032:`el`,1135:`kl`,1095:`gu`,1128:`ha`,1037:`he`,1081:`hi`,1038:`hu`,1039:`is`,1136:`ig`,1057:`id`,1117:`iu`,2141:`iu-Latn`,2108:`ga`,1076:`xh`,1077:`zu`,1040:`it`,2064:`it-CH`,1041:`ja`,1099:`kn`,1087:`kk`,1107:`km`,1158:`quc`,1159:`rw`,1089:`sw`,1111:`kok`,1042:`ko`,1088:`ky`,1108:`lo`,1062:`lv`,1063:`lt`,2094:`dsb`,1134:`lb`,1071:`mk`,2110:`ms-BN`,1086:`ms`,1100:`ml`,1082:`mt`,1153:`mi`,1146:`arn`,1102:`mr`,1148:`moh`,1104:`mn`,2128:`mn-CN`,1121:`ne`,1044:`nb`,2068:`nn`,1154:`oc`,1096:`or`,1123:`ps`,1045:`pl`,1046:`pt`,2070:`pt-PT`,1094:`pa`,1131:`qu-BO`,2155:`qu-EC`,3179:`qu`,1048:`ro`,1047:`rm`,1049:`ru`,9275:`smn`,4155:`smj-NO`,5179:`smj`,3131:`se-FI`,1083:`se`,2107:`se-SE`,8251:`sms`,6203:`sma-NO`,7227:`sms`,1103:`sa`,7194:`sr-Cyrl-BA`,3098:`sr`,6170:`sr-Latn-BA`,2074:`sr-Latn`,1132:`nso`,1074:`tn`,1115:`si`,1051:`sk`,1060:`sl`,11274:`es-AR`,16394:`es-BO`,13322:`es-CL`,9226:`es-CO`,5130:`es-CR`,7178:`es-DO`,12298:`es-EC`,17418:`es-SV`,4106:`es-GT`,18442:`es-HN`,2058:`es-MX`,19466:`es-NI`,6154:`es-PA`,15370:`es-PY`,10250:`es-PE`,20490:`es-PR`,3082:`es`,1034:`es`,21514:`es-US`,14346:`es-UY`,8202:`es-VE`,2077:`sv-FI`,1053:`sv`,1114:`syr`,1064:`tg`,2143:`tzm`,1097:`ta`,1092:`tt`,1098:`te`,1054:`th`,1105:`bo`,1055:`tr`,1090:`tk`,1152:`ug`,1058:`uk`,1070:`hsb`,1056:`ur`,2115:`uz-Cyrl`,1091:`uz`,1066:`vi`,1106:`cy`,1160:`wo`,1157:`sah`,1144:`ii`,1130:`yo`};function BV(e,t,n){switch(e){case 0:if(t===65535)return`und`;if(n)return n[t];break;case 1:return LV[t];case 3:return zV[t]}}var VV=`utf-16`,HV={0:`macintosh`,1:`x-mac-japanese`,2:`x-mac-chinesetrad`,3:`x-mac-korean`,6:`x-mac-greek`,7:`x-mac-cyrillic`,9:`x-mac-devanagai`,10:`x-mac-gurmukhi`,11:`x-mac-gujarati`,12:`x-mac-oriya`,13:`x-mac-bengali`,14:`x-mac-tamil`,15:`x-mac-telugu`,16:`x-mac-kannada`,17:`x-mac-malayalam`,18:`x-mac-sinhalese`,19:`x-mac-burmese`,20:`x-mac-khmer`,21:`x-mac-thai`,22:`x-mac-lao`,23:`x-mac-georgian`,24:`x-mac-armenian`,25:`x-mac-chinesesimp`,26:`x-mac-tibetan`,27:`x-mac-mongolian`,28:`x-mac-ethiopic`,29:`x-mac-ce`,30:`x-mac-vietnamese`,31:`x-mac-extarabic`},UV={15:`x-mac-icelandic`,17:`x-mac-turkish`,18:`x-mac-croatian`,24:`x-mac-ce`,25:`x-mac-ce`,26:`x-mac-ce`,27:`x-mac-ce`,28:`x-mac-ce`,30:`x-mac-icelandic`,37:`x-mac-romanian`,38:`x-mac-ce`,39:`x-mac-ce`,40:`x-mac-ce`,143:`x-mac-inuit`,146:`x-mac-gaelic`};function WV(e,t,n){switch(e){case 0:return VV;case 1:return UV[n]||HV[t];case 3:if(t===1||t===10)return VV;break}}function GV(e,t,n){for(var r={},i=new Z.Parser(e,t),a=i.parseUShort(),o=i.parseUShort(),s=i.offset+i.parseUShort(),c=0;c<o;c++){var l=i.parseUShort(),u=i.parseUShort(),d=i.parseUShort(),f=i.parseUShort(),p=IV[f]||f,m=i.parseUShort(),h=i.parseUShort(),g=BV(l,d,n),_=WV(l,u,d);if(_!==void 0&&g!==void 0){var v=void 0;if(v=_===VV?Nz.UTF16(e,s+h,m):Nz.MACSTRING(e,s+h,m,_),v){var y=r[p];y===void 0&&(y=r[p]={}),y[g]=v}}}return a===1&&i.parseUShort(),r}function KV(e){var t={};for(var n in e)t[e[n]]=parseInt(n);return t}function qV(e,t,n,r,i,a){return new Y.Record(`NameRecord`,[{name:`platformID`,type:`USHORT`,value:e},{name:`encodingID`,type:`USHORT`,value:t},{name:`languageID`,type:`USHORT`,value:n},{name:`nameID`,type:`USHORT`,value:r},{name:`length`,type:`USHORT`,value:i},{name:`offset`,type:`USHORT`,value:a}])}function JV(e,t){var n=e.length,r=t.length-n+1;loop:for(var i=0;i<r;i++)for(;i<r;i++){for(var a=0;a<n;a++)if(t[i+a]!==e[a])continue loop;return i}return-1}function YV(e,t){var n=JV(e,t);if(n<0){n=t.length;for(var r=0,i=e.length;r<i;++r)t.push(e[r])}return n}function XV(e,t){var n,r=[],i={},a=KV(IV);for(var o in e){var s=a[o];if(s===void 0&&(s=o),n=parseInt(s),isNaN(n))throw Error(`Name table entry "`+o+`" does not exist, see nameTableNames for complete list.`);i[n]=e[o],r.push(n)}for(var c=KV(LV),l=KV(zV),u=[],d=[],f=0;f<r.length;f++){n=r[f];var p=i[n];for(var m in p){var h=p[m],g=1,_=c[m],v=RV[_],y=WV(g,v,_),b=q.MACSTRING(h,y);b===void 0&&(g=0,_=t.indexOf(m),_<0&&(_=t.length,t.push(m)),v=4,b=q.UTF16(h));var x=YV(b,d);u.push(qV(g,v,_,n,b.length,x));var S=l[m];if(S!==void 0){var C=q.UTF16(h),w=YV(C,d);u.push(qV(3,1,S,n,C.length,w))}}}u.sort(function(e,t){return e.platformID-t.platformID||e.encodingID-t.encodingID||e.languageID-t.languageID||e.nameID-t.nameID});for(var ee=new Y.Table(`name`,[{name:`format`,type:`USHORT`,value:0},{name:`count`,type:`USHORT`,value:u.length},{name:`stringOffset`,type:`USHORT`,value:6+u.length*12}]),te=0;te<u.length;te++)ee.fields.push({name:`record_`+te,type:`RECORD`,value:u[te]});return ee.fields.push({name:`strings`,type:`LITERAL`,value:d}),ee}var ZV={parse:GV,make:XV},QV=[{begin:0,end:127},{begin:128,end:255},{begin:256,end:383},{begin:384,end:591},{begin:592,end:687},{begin:688,end:767},{begin:768,end:879},{begin:880,end:1023},{begin:11392,end:11519},{begin:1024,end:1279},{begin:1328,end:1423},{begin:1424,end:1535},{begin:42240,end:42559},{begin:1536,end:1791},{begin:1984,end:2047},{begin:2304,end:2431},{begin:2432,end:2559},{begin:2560,end:2687},{begin:2688,end:2815},{begin:2816,end:2943},{begin:2944,end:3071},{begin:3072,end:3199},{begin:3200,end:3327},{begin:3328,end:3455},{begin:3584,end:3711},{begin:3712,end:3839},{begin:4256,end:4351},{begin:6912,end:7039},{begin:4352,end:4607},{begin:7680,end:7935},{begin:7936,end:8191},{begin:8192,end:8303},{begin:8304,end:8351},{begin:8352,end:8399},{begin:8400,end:8447},{begin:8448,end:8527},{begin:8528,end:8591},{begin:8592,end:8703},{begin:8704,end:8959},{begin:8960,end:9215},{begin:9216,end:9279},{begin:9280,end:9311},{begin:9312,end:9471},{begin:9472,end:9599},{begin:9600,end:9631},{begin:9632,end:9727},{begin:9728,end:9983},{begin:9984,end:10175},{begin:12288,end:12351},{begin:12352,end:12447},{begin:12448,end:12543},{begin:12544,end:12591},{begin:12592,end:12687},{begin:43072,end:43135},{begin:12800,end:13055},{begin:13056,end:13311},{begin:44032,end:55215},{begin:55296,end:57343},{begin:67840,end:67871},{begin:19968,end:40959},{begin:57344,end:63743},{begin:12736,end:12783},{begin:64256,end:64335},{begin:64336,end:65023},{begin:65056,end:65071},{begin:65040,end:65055},{begin:65104,end:65135},{begin:65136,end:65279},{begin:65280,end:65519},{begin:65520,end:65535},{begin:3840,end:4095},{begin:1792,end:1871},{begin:1920,end:1983},{begin:3456,end:3583},{begin:4096,end:4255},{begin:4608,end:4991},{begin:5024,end:5119},{begin:5120,end:5759},{begin:5760,end:5791},{begin:5792,end:5887},{begin:6016,end:6143},{begin:6144,end:6319},{begin:10240,end:10495},{begin:40960,end:42127},{begin:5888,end:5919},{begin:66304,end:66351},{begin:66352,end:66383},{begin:66560,end:66639},{begin:118784,end:119039},{begin:119808,end:120831},{begin:1044480,end:1048573},{begin:65024,end:65039},{begin:917504,end:917631},{begin:6400,end:6479},{begin:6480,end:6527},{begin:6528,end:6623},{begin:6656,end:6687},{begin:11264,end:11359},{begin:11568,end:11647},{begin:19904,end:19967},{begin:43008,end:43055},{begin:65536,end:65663},{begin:65856,end:65935},{begin:66432,end:66463},{begin:66464,end:66527},{begin:66640,end:66687},{begin:66688,end:66735},{begin:67584,end:67647},{begin:68096,end:68191},{begin:119552,end:119647},{begin:73728,end:74751},{begin:119648,end:119679},{begin:7040,end:7103},{begin:7168,end:7247},{begin:7248,end:7295},{begin:43136,end:43231},{begin:43264,end:43311},{begin:43312,end:43359},{begin:43520,end:43615},{begin:65936,end:65999},{begin:66e3,end:66047},{begin:66208,end:66271},{begin:127024,end:127135}];function $V(e){for(var t=0;t<QV.length;t+=1){var n=QV[t];if(e>=n.begin&&e<n.end)return t}return-1}function eH(e,t){var n={},r=new Z.Parser(e,t);n.version=r.parseUShort(),n.xAvgCharWidth=r.parseShort(),n.usWeightClass=r.parseUShort(),n.usWidthClass=r.parseUShort(),n.fsType=r.parseUShort(),n.ySubscriptXSize=r.parseShort(),n.ySubscriptYSize=r.parseShort(),n.ySubscriptXOffset=r.parseShort(),n.ySubscriptYOffset=r.parseShort(),n.ySuperscriptXSize=r.parseShort(),n.ySuperscriptYSize=r.parseShort(),n.ySuperscriptXOffset=r.parseShort(),n.ySuperscriptYOffset=r.parseShort(),n.yStrikeoutSize=r.parseShort(),n.yStrikeoutPosition=r.parseShort(),n.sFamilyClass=r.parseShort(),n.panose=[];for(var i=0;i<10;i++)n.panose[i]=r.parseByte();return n.ulUnicodeRange1=r.parseULong(),n.ulUnicodeRange2=r.parseULong(),n.ulUnicodeRange3=r.parseULong(),n.ulUnicodeRange4=r.parseULong(),n.achVendID=String.fromCharCode(r.parseByte(),r.parseByte(),r.parseByte(),r.parseByte()),n.fsSelection=r.parseUShort(),n.usFirstCharIndex=r.parseUShort(),n.usLastCharIndex=r.parseUShort(),n.sTypoAscender=r.parseShort(),n.sTypoDescender=r.parseShort(),n.sTypoLineGap=r.parseShort(),n.usWinAscent=r.parseUShort(),n.usWinDescent=r.parseUShort(),n.version>=1&&(n.ulCodePageRange1=r.parseULong(),n.ulCodePageRange2=r.parseULong()),n.version>=2&&(n.sxHeight=r.parseShort(),n.sCapHeight=r.parseShort(),n.usDefaultChar=r.parseUShort(),n.usBreakChar=r.parseUShort(),n.usMaxContent=r.parseUShort()),n}function tH(e){return new Y.Table(`OS/2`,[{name:`version`,type:`USHORT`,value:3},{name:`xAvgCharWidth`,type:`SHORT`,value:0},{name:`usWeightClass`,type:`USHORT`,value:0},{name:`usWidthClass`,type:`USHORT`,value:0},{name:`fsType`,type:`USHORT`,value:0},{name:`ySubscriptXSize`,type:`SHORT`,value:650},{name:`ySubscriptYSize`,type:`SHORT`,value:699},{name:`ySubscriptXOffset`,type:`SHORT`,value:0},{name:`ySubscriptYOffset`,type:`SHORT`,value:140},{name:`ySuperscriptXSize`,type:`SHORT`,value:650},{name:`ySuperscriptYSize`,type:`SHORT`,value:699},{name:`ySuperscriptXOffset`,type:`SHORT`,value:0},{name:`ySuperscriptYOffset`,type:`SHORT`,value:479},{name:`yStrikeoutSize`,type:`SHORT`,value:49},{name:`yStrikeoutPosition`,type:`SHORT`,value:258},{name:`sFamilyClass`,type:`SHORT`,value:0},{name:`bFamilyType`,type:`BYTE`,value:0},{name:`bSerifStyle`,type:`BYTE`,value:0},{name:`bWeight`,type:`BYTE`,value:0},{name:`bProportion`,type:`BYTE`,value:0},{name:`bContrast`,type:`BYTE`,value:0},{name:`bStrokeVariation`,type:`BYTE`,value:0},{name:`bArmStyle`,type:`BYTE`,value:0},{name:`bLetterform`,type:`BYTE`,value:0},{name:`bMidline`,type:`BYTE`,value:0},{name:`bXHeight`,type:`BYTE`,value:0},{name:`ulUnicodeRange1`,type:`ULONG`,value:0},{name:`ulUnicodeRange2`,type:`ULONG`,value:0},{name:`ulUnicodeRange3`,type:`ULONG`,value:0},{name:`ulUnicodeRange4`,type:`ULONG`,value:0},{name:`achVendID`,type:`CHARARRAY`,value:`XXXX`},{name:`fsSelection`,type:`USHORT`,value:0},{name:`usFirstCharIndex`,type:`USHORT`,value:0},{name:`usLastCharIndex`,type:`USHORT`,value:0},{name:`sTypoAscender`,type:`SHORT`,value:0},{name:`sTypoDescender`,type:`SHORT`,value:0},{name:`sTypoLineGap`,type:`SHORT`,value:0},{name:`usWinAscent`,type:`USHORT`,value:0},{name:`usWinDescent`,type:`USHORT`,value:0},{name:`ulCodePageRange1`,type:`ULONG`,value:0},{name:`ulCodePageRange2`,type:`ULONG`,value:0},{name:`sxHeight`,type:`SHORT`,value:0},{name:`sCapHeight`,type:`SHORT`,value:0},{name:`usDefaultChar`,type:`USHORT`,value:0},{name:`usBreakChar`,type:`USHORT`,value:0},{name:`usMaxContext`,type:`USHORT`,value:0}],e)}var nH={parse:eH,make:tH,unicodeRanges:QV,getUnicodeRange:$V};function rH(e,t){var n={},r=new Z.Parser(e,t);switch(n.version=r.parseVersion(),n.italicAngle=r.parseFixed(),n.underlinePosition=r.parseShort(),n.underlineThickness=r.parseShort(),n.isFixedPitch=r.parseULong(),n.minMemType42=r.parseULong(),n.maxMemType42=r.parseULong(),n.minMemType1=r.parseULong(),n.maxMemType1=r.parseULong(),n.version){case 1:n.names=yB.slice();break;case 2:n.numberOfGlyphs=r.parseUShort(),n.glyphNameIndex=Array(n.numberOfGlyphs);for(var i=0;i<n.numberOfGlyphs;i++)n.glyphNameIndex[i]=r.parseUShort();n.names=[];for(var a=0;a<n.numberOfGlyphs;a++)if(n.glyphNameIndex[a]>=yB.length){var o=r.parseChar();n.names.push(r.parseString(o))}break;case 2.5:n.numberOfGlyphs=r.parseUShort(),n.offset=Array(n.numberOfGlyphs);for(var s=0;s<n.numberOfGlyphs;s++)n.offset[s]=r.parseChar();break}return n}function iH(){return new Y.Table(`post`,[{name:`version`,type:`FIXED`,value:196608},{name:`italicAngle`,type:`FIXED`,value:0},{name:`underlinePosition`,type:`FWORD`,value:0},{name:`underlineThickness`,type:`FWORD`,value:0},{name:`isFixedPitch`,type:`ULONG`,value:0},{name:`minMemType42`,type:`ULONG`,value:0},{name:`maxMemType42`,type:`ULONG`,value:0},{name:`minMemType1`,type:`ULONG`,value:0},{name:`maxMemType1`,type:`ULONG`,value:0}])}var aH={parse:rH,make:iH},oH=Array(9);oH[1]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{substFormat:1,coverage:this.parsePointer(X.coverage),deltaGlyphId:this.parseUShort()};if(t===2)return{substFormat:2,coverage:this.parsePointer(X.coverage),substitute:this.parseOffset16List()};K.assert(!1,`0x`+e.toString(16)+`: lookup type 1 format must be 1 or 2.`)},oH[2]=function(){var e=this.parseUShort();return K.argument(e===1,`GSUB Multiple Substitution Subtable identifier-format must be 1`),{substFormat:e,coverage:this.parsePointer(X.coverage),sequences:this.parseListOfLists()}},oH[3]=function(){var e=this.parseUShort();return K.argument(e===1,`GSUB Alternate Substitution Subtable identifier-format must be 1`),{substFormat:e,coverage:this.parsePointer(X.coverage),alternateSets:this.parseListOfLists()}},oH[4]=function(){var e=this.parseUShort();return K.argument(e===1,`GSUB ligature table identifier-format must be 1`),{substFormat:e,coverage:this.parsePointer(X.coverage),ligatureSets:this.parseListOfLists(function(){return{ligGlyph:this.parseUShort(),components:this.parseUShortList(this.parseUShort()-1)}})}};var sH={sequenceIndex:X.uShort,lookupListIndex:X.uShort};oH[5]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{substFormat:t,coverage:this.parsePointer(X.coverage),ruleSets:this.parseListOfLists(function(){var e=this.parseUShort(),t=this.parseUShort();return{input:this.parseUShortList(e-1),lookupRecords:this.parseRecordList(t,sH)}})};if(t===2)return{substFormat:t,coverage:this.parsePointer(X.coverage),classDef:this.parsePointer(X.classDef),classSets:this.parseListOfLists(function(){var e=this.parseUShort(),t=this.parseUShort();return{classes:this.parseUShortList(e-1),lookupRecords:this.parseRecordList(t,sH)}})};if(t===3){var n=this.parseUShort(),r=this.parseUShort();return{substFormat:t,coverages:this.parseList(n,X.pointer(X.coverage)),lookupRecords:this.parseRecordList(r,sH)}}K.assert(!1,`0x`+e.toString(16)+`: lookup type 5 format must be 1, 2 or 3.`)},oH[6]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{substFormat:1,coverage:this.parsePointer(X.coverage),chainRuleSets:this.parseListOfLists(function(){return{backtrack:this.parseUShortList(),input:this.parseUShortList(this.parseShort()-1),lookahead:this.parseUShortList(),lookupRecords:this.parseRecordList(sH)}})};if(t===2)return{substFormat:2,coverage:this.parsePointer(X.coverage),backtrackClassDef:this.parsePointer(X.classDef),inputClassDef:this.parsePointer(X.classDef),lookaheadClassDef:this.parsePointer(X.classDef),chainClassSet:this.parseListOfLists(function(){return{backtrack:this.parseUShortList(),input:this.parseUShortList(this.parseShort()-1),lookahead:this.parseUShortList(),lookupRecords:this.parseRecordList(sH)}})};if(t===3)return{substFormat:3,backtrackCoverage:this.parseList(X.pointer(X.coverage)),inputCoverage:this.parseList(X.pointer(X.coverage)),lookaheadCoverage:this.parseList(X.pointer(X.coverage)),lookupRecords:this.parseRecordList(sH)};K.assert(!1,`0x`+e.toString(16)+`: lookup type 6 format must be 1, 2 or 3.`)},oH[7]=function(){var e=this.parseUShort();K.argument(e===1,`GSUB Extension Substitution subtable identifier-format must be 1`);var t=this.parseUShort(),n=new X(this.data,this.offset+this.parseULong());return{substFormat:1,lookupType:t,extension:oH[t].call(n)}},oH[8]=function(){var e=this.parseUShort();return K.argument(e===1,`GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1`),{substFormat:e,coverage:this.parsePointer(X.coverage),backtrackCoverage:this.parseList(X.pointer(X.coverage)),lookaheadCoverage:this.parseList(X.pointer(X.coverage)),substitutes:this.parseUShortList()}};function cH(e,t){t||=0;var n=new X(e,t),r=n.parseVersion(1);return K.argument(r===1||r===1.1,`Unsupported GSUB table version.`),r===1?{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(oH)}:{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(oH),variations:n.parseFeatureVariationsList()}}var lH=Array(9);lH[1]=function(e){return e.substFormat===1?new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:1},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)},{name:`deltaGlyphID`,type:`USHORT`,value:e.deltaGlyphId}]):new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:2},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.ushortList(`substitute`,e.substitute)))},lH[2]=function(e){return K.assert(e.substFormat===1,`Lookup type 2 substFormat must be 1.`),new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:1},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.tableList(`seqSet`,e.sequences,function(e){return new Y.Table(`sequenceSetTable`,Y.ushortList(`sequence`,e))})))},lH[3]=function(e){return K.assert(e.substFormat===1,`Lookup type 3 substFormat must be 1.`),new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:1},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.tableList(`altSet`,e.alternateSets,function(e){return new Y.Table(`alternateSetTable`,Y.ushortList(`alternate`,e))})))},lH[4]=function(e){return K.assert(e.substFormat===1,`Lookup type 4 substFormat must be 1.`),new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:1},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.tableList(`ligSet`,e.ligatureSets,function(e){return new Y.Table(`ligatureSetTable`,Y.tableList(`ligature`,e,function(e){return new Y.Table(`ligatureTable`,[{name:`ligGlyph`,type:`USHORT`,value:e.ligGlyph}].concat(Y.ushortList(`component`,e.components,e.components.length+1)))}))})))},lH[6]=function(e){if(e.substFormat===1)return new Y.Table(`chainContextTable`,[{name:`substFormat`,type:`USHORT`,value:e.substFormat},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.tableList(`chainRuleSet`,e.chainRuleSets,function(e){return new Y.Table(`chainRuleSetTable`,Y.tableList(`chainRule`,e,function(e){var t=Y.ushortList(`backtrackGlyph`,e.backtrack,e.backtrack.length).concat(Y.ushortList(`inputGlyph`,e.input,e.input.length+1)).concat(Y.ushortList(`lookaheadGlyph`,e.lookahead,e.lookahead.length)).concat(Y.ushortList(`substitution`,[],e.lookupRecords.length));return e.lookupRecords.forEach(function(e,n){t=t.concat({name:`sequenceIndex`+n,type:`USHORT`,value:e.sequenceIndex}).concat({name:`lookupListIndex`+n,type:`USHORT`,value:e.lookupListIndex})}),new Y.Table(`chainRuleTable`,t)}))})));if(e.substFormat===2)K.assert(!1,`lookup type 6 format 2 is not yet supported.`);else if(e.substFormat===3){var t=[{name:`substFormat`,type:`USHORT`,value:e.substFormat}];return t.push({name:`backtrackGlyphCount`,type:`USHORT`,value:e.backtrackCoverage.length}),e.backtrackCoverage.forEach(function(e,n){t.push({name:`backtrackCoverage`+n,type:`TABLE`,value:new Y.Coverage(e)})}),t.push({name:`inputGlyphCount`,type:`USHORT`,value:e.inputCoverage.length}),e.inputCoverage.forEach(function(e,n){t.push({name:`inputCoverage`+n,type:`TABLE`,value:new Y.Coverage(e)})}),t.push({name:`lookaheadGlyphCount`,type:`USHORT`,value:e.lookaheadCoverage.length}),e.lookaheadCoverage.forEach(function(e,n){t.push({name:`lookaheadCoverage`+n,type:`TABLE`,value:new Y.Coverage(e)})}),t.push({name:`substitutionCount`,type:`USHORT`,value:e.lookupRecords.length}),e.lookupRecords.forEach(function(e,n){t=t.concat({name:`sequenceIndex`+n,type:`USHORT`,value:e.sequenceIndex}).concat({name:`lookupListIndex`+n,type:`USHORT`,value:e.lookupListIndex})}),new Y.Table(`chainContextTable`,t)}K.assert(!1,`lookup type 6 format must be 1, 2 or 3.`)};function uH(e){return new Y.Table(`GSUB`,[{name:`version`,type:`ULONG`,value:65536},{name:`scripts`,type:`TABLE`,value:new Y.ScriptList(e.scripts)},{name:`features`,type:`TABLE`,value:new Y.FeatureList(e.features)},{name:`lookups`,type:`TABLE`,value:new Y.LookupList(e.lookups,lH)}])}var dH={parse:cH,make:uH};function fH(e,t){var n=new Z.Parser(e,t),r=n.parseULong();K.argument(r===1,`Unsupported META table version.`),n.parseULong(),n.parseULong();for(var i=n.parseULong(),a={},o=0;o<i;o++){var s=n.parseTag(),c=n.parseULong(),l=n.parseULong();a[s]=Nz.UTF8(e,t+c,l)}return a}function pH(e){var t=Object.keys(e).length,n=``,r=16+t*12,i=new Y.Table(`meta`,[{name:`version`,type:`ULONG`,value:1},{name:`flags`,type:`ULONG`,value:0},{name:`offset`,type:`ULONG`,value:r},{name:`numTags`,type:`ULONG`,value:t}]);for(var a in e){var o=n.length;n+=e[a],i.fields.push({name:`tag `+a,type:`TAG`,value:a}),i.fields.push({name:`offset `+a,type:`ULONG`,value:r+o}),i.fields.push({name:`length `+a,type:`ULONG`,value:e[a].length})}return i.fields.push({name:`stringPool`,type:`CHARARRAY`,value:n}),i}var mH={parse:fH,make:pH};function hH(e){return Math.log(e)/Math.log(2)|0}function gH(e){for(;e.length%4!=0;)e.push(0);for(var t=0,n=0;n<e.length;n+=4)t+=(e[n]<<24)+(e[n+1]<<16)+(e[n+2]<<8)+e[n+3];return t%=2**32,t}function _H(e,t,n,r){return new Y.Record(`Table Record`,[{name:`tag`,type:`TAG`,value:e===void 0?``:e},{name:`checkSum`,type:`ULONG`,value:t===void 0?0:t},{name:`offset`,type:`ULONG`,value:n===void 0?0:n},{name:`length`,type:`ULONG`,value:r===void 0?0:r}])}function vH(e){var t=new Y.Table(`sfnt`,[{name:`version`,type:`TAG`,value:`OTTO`},{name:`numTables`,type:`USHORT`,value:0},{name:`searchRange`,type:`USHORT`,value:0},{name:`entrySelector`,type:`USHORT`,value:0},{name:`rangeShift`,type:`USHORT`,value:0}]);t.tables=e,t.numTables=e.length;var n=2**hH(t.numTables);t.searchRange=16*n,t.entrySelector=hH(n),t.rangeShift=t.numTables*16-t.searchRange;for(var r=[],i=[],a=t.sizeOf()+_H().sizeOf()*t.numTables;a%4!=0;)a+=1,i.push({name:`padding`,type:`BYTE`,value:0});for(var o=0;o<e.length;o+=1){var s=e[o];K.argument(s.tableName.length===4,`Table name`+s.tableName+` is invalid.`);var c=s.sizeOf(),l=_H(s.tableName,gH(s.encode()),a,c);for(r.push({name:l.tag+` Table Record`,type:`RECORD`,value:l}),i.push({name:s.tableName+` table`,type:`RECORD`,value:s}),a+=c,K.argument(!isNaN(a),`Something went wrong calculating the offset.`);a%4!=0;)a+=1,i.push({name:`padding`,type:`BYTE`,value:0})}return r.sort(function(e,t){return e.value.tag>t.value.tag?1:-1}),t.fields=t.fields.concat(r),t.fields=t.fields.concat(i),t}function yH(e,t,n){for(var r=0;r<t.length;r+=1){var i=e.charToGlyphIndex(t[r]);if(i>0)return e.glyphs.get(i).getMetrics()}return n}function bH(e){for(var t=0,n=0;n<e.length;n+=1)t+=e[n];return t/e.length}function xH(e){for(var t=[],n=[],r=[],i=[],a=[],o=[],s=[],c,l=0,u=0,d=0,f=0,p=0,m=0;m<e.glyphs.length;m+=1){var h=e.glyphs.get(m),g=h.unicode|0;if(isNaN(h.advanceWidth))throw Error(`Glyph `+h.name+` (`+m+`): advanceWidth is not a number.`);(c>g||c===void 0)&&g>0&&(c=g),l<g&&(l=g);var _=nH.getUnicodeRange(g);if(_<32)u|=1<<_;else if(_<64)d|=1<<_-32;else if(_<96)f|=1<<_-64;else if(_<123)p|=1<<_-96;else throw Error(`Unicode ranges bits > 123 are reserved for internal usage`);if(h.name!==`.notdef`){var v=h.getMetrics();t.push(v.xMin),n.push(v.yMin),r.push(v.xMax),i.push(v.yMax),o.push(v.leftSideBearing),s.push(v.rightSideBearing),a.push(h.advanceWidth)}}var y={xMin:Math.min.apply(null,t),yMin:Math.min.apply(null,n),xMax:Math.max.apply(null,r),yMax:Math.max.apply(null,i),advanceWidthMax:Math.max.apply(null,a),advanceWidthAvg:bH(a),minLeftSideBearing:Math.min.apply(null,o),maxLeftSideBearing:Math.max.apply(null,o),minRightSideBearing:Math.min.apply(null,s)};y.ascender=e.ascender,y.descender=e.descender;var b=xV.make({flags:3,unitsPerEm:e.unitsPerEm,xMin:y.xMin,yMin:y.yMin,xMax:y.xMax,yMax:y.yMax,lowestRecPPEM:3,createdTimestamp:e.createdTimestamp}),x=wV.make({ascender:y.ascender,descender:y.descender,advanceWidthMax:y.advanceWidthMax,minLeftSideBearing:y.minLeftSideBearing,minRightSideBearing:y.minRightSideBearing,xMaxExtent:y.maxLeftSideBearing+(y.xMax-y.xMin),numberOfHMetrics:e.glyphs.length}),S=FV.make(e.glyphs.length),C=nH.make(Object.assign({xAvgCharWidth:Math.round(y.advanceWidthAvg),usFirstCharIndex:c,usLastCharIndex:l,ulUnicodeRange1:u,ulUnicodeRange2:d,ulUnicodeRange3:f,ulUnicodeRange4:p,sTypoAscender:y.ascender,sTypoDescender:y.descender,sTypoLineGap:0,usWinAscent:y.yMax,usWinDescent:Math.abs(y.yMin),ulCodePageRange1:1,sxHeight:yH(e,`xyvw`,{yMax:Math.round(y.ascender/2)}).yMax,sCapHeight:yH(e,`HIKLEFJMNTZBDPRAGOQSUVWXY`,y).yMax,usDefaultChar:e.hasChar(` `)?32:0,usBreakChar:e.hasChar(` `)?32:0},e.tables.os2)),w=kV.make(e.glyphs),ee=hB.make(e.glyphs),te=e.getEnglishName(`fontFamily`),ne=e.getEnglishName(`fontSubfamily`),re=te+` `+ne,ie=e.getEnglishName(`postScriptName`);ie||=te.replace(/\s/g,``)+`-`+ne;var ae={};for(var oe in e.names)ae[oe]=e.names[oe];ae.uniqueID||={en:e.getEnglishName(`manufacturer`)+`:`+re},ae.postScriptName||={en:ie},ae.preferredFamily||=e.names.fontFamily,ae.preferredSubfamily||=e.names.fontSubfamily;var se=[],ce=ZV.make(ae,se),le=se.length>0?MV.make(se):void 0,ue=aH.make(),de=vV.make(e.glyphs,{version:e.getEnglishName(`version`),fullName:re,familyName:te,weightName:ne,postScriptName:ie,unitsPerEm:e.unitsPerEm,fontBBox:[0,y.yMin,y.ascender,y.advanceWidthMax]}),fe=e.metas&&Object.keys(e.metas).length>0?mH.make(e.metas):void 0,pe=[b,x,S,C,ce,ee,ue,de,w];le&&pe.push(le),e.tables.gsub&&pe.push(dH.make(e.tables.gsub)),fe&&pe.push(fe);for(var me=vH(pe),he=gH(me.encode()),ge=me.fields,_e=!1,ve=0;ve<ge.length;ve+=1)if(ge[ve].name===`head table`){ge[ve].value.checkSumAdjustment=2981146554-he,_e=!0;break}if(!_e)throw Error(`Could not find head table with checkSum to adjust.`);return me}var SH={make:vH,fontToTable:xH,computeCheckSum:gH};function CH(e,t){for(var n=0,r=e.length-1;n<=r;){var i=n+r>>>1,a=e[i].tag;if(a===t)return i;a<t?n=i+1:r=i-1}return-n-1}function wH(e,t){for(var n=0,r=e.length-1;n<=r;){var i=n+r>>>1,a=e[i];if(a===t)return i;a<t?n=i+1:r=i-1}return-n-1}function TH(e,t){for(var n,r=0,i=e.length-1;r<=i;){var a=r+i>>>1;n=e[a];var o=n.start;if(o===t)return n;o<t?r=a+1:i=a-1}if(r>0)return n=e[r-1],t>n.end?0:n}function EH(e,t){this.font=e,this.tableName=t}EH.prototype={searchTag:CH,binSearch:wH,getTable:function(e){var t=this.font.tables[this.tableName];return!t&&e&&(t=this.font.tables[this.tableName]=this.createDefaultTable()),t},getScriptNames:function(){var e=this.getTable();return e?e.scripts.map(function(e){return e.tag}):[]},getDefaultScriptName:function(){var e=this.getTable();if(e){for(var t=!1,n=0;n<e.scripts.length;n++){var r=e.scripts[n].tag;if(r===`DFLT`)return r;r===`latn`&&(t=!0)}if(t)return`latn`}},getScriptTable:function(e,t){var n=this.getTable(t);if(n){e||=`DFLT`;var r=n.scripts,i=CH(n.scripts,e);if(i>=0)return r[i].script;if(t){var a={tag:e,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return r.splice(-1-i,0,a),a.script}}},getLangSysTable:function(e,t,n){var r=this.getScriptTable(e,n);if(r){if(!t||t===`dflt`||t===`DFLT`)return r.defaultLangSys;var i=CH(r.langSysRecords,t);if(i>=0)return r.langSysRecords[i].langSys;if(n){var a={tag:t,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return r.langSysRecords.splice(-1-i,0,a),a.langSys}}},getFeatureTable:function(e,t,n,r){var i=this.getLangSysTable(e,t,r);if(i){for(var a,o=i.featureIndexes,s=this.font.tables[this.tableName].features,c=0;c<o.length;c++)if(a=s[o[c]],a.tag===n)return a.feature;if(r){var l=s.length;return K.assert(l===0||n>=s[l-1].tag,`Features must be added in alphabetical order.`),a={tag:n,feature:{params:0,lookupListIndexes:[]}},s.push(a),o.push(l),a.feature}}},getLookupTables:function(e,t,n,r,i){var a=this.getFeatureTable(e,t,n,i),o=[];if(a){for(var s,c=a.lookupListIndexes,l=this.font.tables[this.tableName].lookups,u=0;u<c.length;u++)s=l[c[u]],s.lookupType===r&&o.push(s);if(o.length===0&&i){s={lookupType:r,lookupFlag:0,subtables:[],markFilteringSet:void 0};var d=l.length;return l.push(s),c.push(d),[s]}}return o},getGlyphClass:function(e,t){switch(e.format){case 1:return e.startGlyph<=t&&t<e.startGlyph+e.classes.length?e.classes[t-e.startGlyph]:0;case 2:var n=TH(e.ranges,t);return n?n.classId:0}},getCoverageIndex:function(e,t){switch(e.format){case 1:var n=wH(e.glyphs,t);return n>=0?n:-1;case 2:var r=TH(e.ranges,t);return r?r.index+t-r.start:-1}},expandCoverage:function(e){if(e.format===1)return e.glyphs;for(var t=[],n=e.ranges,r=0;r<n.length;r++)for(var i=n[r],a=i.start,o=i.end,s=a;s<=o;s++)t.push(s);return t}};function DH(e){EH.call(this,e,`gpos`)}DH.prototype=EH.prototype,DH.prototype.init=function(){var e=this.getDefaultScriptName();this.defaultKerningTables=this.getKerningTables(e)},DH.prototype.getKerningValue=function(e,t,n){for(var r=0;r<e.length;r++)for(var i=e[r].subtables,a=0;a<i.length;a++){var o=i[a],s=this.getCoverageIndex(o.coverage,t);if(!(s<0))switch(o.posFormat){case 1:for(var c=o.pairSets[s],l=0;l<c.length;l++){var u=c[l];if(u.secondGlyph===n)return u.value1&&u.value1.xAdvance||0}break;case 2:var d=this.getGlyphClass(o.classDef1,t),f=this.getGlyphClass(o.classDef2,n),p=o.classRecords[d][f];return p.value1&&p.value1.xAdvance||0}}return 0},DH.prototype.getKerningTables=function(e,t){if(this.font.tables.gpos)return this.getLookupTables(e,t,`kern`,2)};function OH(e){EH.call(this,e,`gsub`)}function kH(e,t){var n=e.length;if(n!==t.length)return!1;for(var r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0}function AH(e,t,n){for(var r=e.subtables,i=0;i<r.length;i++){var a=r[i];if(a.substFormat===t)return a}if(n)return r.push(n),n}OH.prototype=EH.prototype,OH.prototype.createDefaultTable=function(){return{version:1,scripts:[{tag:`DFLT`,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}}],features:[],lookups:[]}},OH.prototype.getSingle=function(e,t,n){for(var r=[],i=this.getLookupTables(t,n,e,1),a=0;a<i.length;a++)for(var o=i[a].subtables,s=0;s<o.length;s++){var c=o[s],l=this.expandCoverage(c.coverage),u=void 0;if(c.substFormat===1){var d=c.deltaGlyphId;for(u=0;u<l.length;u++){var f=l[u];r.push({sub:f,by:f+d})}}else{var p=c.substitute;for(u=0;u<l.length;u++)r.push({sub:l[u],by:p[u]})}}return r},OH.prototype.getMultiple=function(e,t,n){for(var r=[],i=this.getLookupTables(t,n,e,2),a=0;a<i.length;a++)for(var o=i[a].subtables,s=0;s<o.length;s++){var c=o[s],l=this.expandCoverage(c.coverage),u=void 0;for(u=0;u<l.length;u++){var d=l[u],f=c.sequences[u];r.push({sub:d,by:f})}}return r},OH.prototype.getAlternates=function(e,t,n){for(var r=[],i=this.getLookupTables(t,n,e,3),a=0;a<i.length;a++)for(var o=i[a].subtables,s=0;s<o.length;s++)for(var c=o[s],l=this.expandCoverage(c.coverage),u=c.alternateSets,d=0;d<l.length;d++)r.push({sub:l[d],by:u[d]});return r},OH.prototype.getLigatures=function(e,t,n){for(var r=[],i=this.getLookupTables(t,n,e,4),a=0;a<i.length;a++)for(var o=i[a].subtables,s=0;s<o.length;s++)for(var c=o[s],l=this.expandCoverage(c.coverage),u=c.ligatureSets,d=0;d<l.length;d++)for(var f=l[d],p=u[d],m=0;m<p.length;m++){var h=p[m];r.push({sub:[f].concat(h.components),by:h.ligGlyph})}return r},OH.prototype.addSingle=function(e,t,n,r){var i=this.getLookupTables(n,r,e,1,!0)[0],a=AH(i,2,{substFormat:2,coverage:{format:1,glyphs:[]},substitute:[]});K.assert(a.coverage.format===1,`Single: unable to modify coverage table format `+a.coverage.format);var o=t.sub,s=this.binSearch(a.coverage.glyphs,o);s<0&&(s=-1-s,a.coverage.glyphs.splice(s,0,o),a.substitute.splice(s,0,0)),a.substitute[s]=t.by},OH.prototype.addMultiple=function(e,t,n,r){K.assert(t.by instanceof Array&&t.by.length>1,`Multiple: "by" must be an array of two or more ids`);var i=this.getLookupTables(n,r,e,2,!0)[0],a=AH(i,1,{substFormat:1,coverage:{format:1,glyphs:[]},sequences:[]});K.assert(a.coverage.format===1,`Multiple: unable to modify coverage table format `+a.coverage.format);var o=t.sub,s=this.binSearch(a.coverage.glyphs,o);s<0&&(s=-1-s,a.coverage.glyphs.splice(s,0,o),a.sequences.splice(s,0,0)),a.sequences[s]=t.by},OH.prototype.addAlternate=function(e,t,n,r){var i=this.getLookupTables(n,r,e,3,!0)[0],a=AH(i,1,{substFormat:1,coverage:{format:1,glyphs:[]},alternateSets:[]});K.assert(a.coverage.format===1,`Alternate: unable to modify coverage table format `+a.coverage.format);var o=t.sub,s=this.binSearch(a.coverage.glyphs,o);s<0&&(s=-1-s,a.coverage.glyphs.splice(s,0,o),a.alternateSets.splice(s,0,0)),a.alternateSets[s]=t.by},OH.prototype.addLigature=function(e,t,n,r){var i=this.getLookupTables(n,r,e,4,!0)[0],a=i.subtables[0];a||(a={substFormat:1,coverage:{format:1,glyphs:[]},ligatureSets:[]},i.subtables[0]=a),K.assert(a.coverage.format===1,`Ligature: unable to modify coverage table format `+a.coverage.format);var o=t.sub[0],s=t.sub.slice(1),c={ligGlyph:t.by,components:s},l=this.binSearch(a.coverage.glyphs,o);if(l>=0){for(var u=a.ligatureSets[l],d=0;d<u.length;d++)if(kH(u[d].components,s))return;u.push(c)}else l=-1-l,a.coverage.glyphs.splice(l,0,o),a.ligatureSets.splice(l,0,[c])},OH.prototype.getFeature=function(e,t,n){if(/ss\d\d/.test(e))return this.getSingle(e,t,n);switch(e){case`aalt`:case`salt`:return this.getSingle(e,t,n).concat(this.getAlternates(e,t,n));case`dlig`:case`liga`:case`rlig`:return this.getLigatures(e,t,n);case`ccmp`:return this.getMultiple(e,t,n).concat(this.getLigatures(e,t,n));case`stch`:return this.getMultiple(e,t,n)}},OH.prototype.add=function(e,t,n,r){if(/ss\d\d/.test(e))return this.addSingle(e,t,n,r);switch(e){case`aalt`:case`salt`:return typeof t.by==`number`?this.addSingle(e,t,n,r):this.addAlternate(e,t,n,r);case`dlig`:case`liga`:case`rlig`:return this.addLigature(e,t,n,r);case`ccmp`:return t.by instanceof Array?this.addMultiple(e,t,n,r):this.addLigature(e,t,n,r)}};function jH(){return typeof window<`u`}function MH(e){for(var t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0;r<e.length;++r)n[r]=e[r];return t}function NH(e){for(var t=new Buffer(e.byteLength),n=new Uint8Array(e),r=0;r<t.length;++r)t[r]=n[r];return t}function PH(e,t){if(!e)throw t}function FH(e,t,n,r,i){var a;return(t&r)>0?(a=e.parseByte(),(t&i)===0&&(a=-a),a=n+a):a=(t&i)>0?n:n+e.parseShort(),a}function IH(e,t,n){var r=new Z.Parser(t,n);e.numberOfContours=r.parseShort(),e._xMin=r.parseShort(),e._yMin=r.parseShort(),e._xMax=r.parseShort(),e._yMax=r.parseShort();var i,a;if(e.numberOfContours>0){for(var o=e.endPointIndices=[],s=0;s<e.numberOfContours;s+=1)o.push(r.parseUShort());e.instructionLength=r.parseUShort(),e.instructions=[];for(var c=0;c<e.instructionLength;c+=1)e.instructions.push(r.parseByte());var l=o[o.length-1]+1;i=[];for(var u=0;u<l;u+=1)if(a=r.parseByte(),i.push(a),(a&8)>0)for(var d=r.parseByte(),f=0;f<d;f+=1)i.push(a),u+=1;if(K.argument(i.length===l,`Bad flags.`),o.length>0){var p=[],m;if(l>0){for(var h=0;h<l;h+=1)a=i[h],m={},m.onCurve=!!(a&1),m.lastPointOfContour=o.indexOf(h)>=0,p.push(m);for(var g=0,_=0;_<l;_+=1)a=i[_],m=p[_],m.x=FH(r,a,g,2,16),g=m.x;for(var v=0,y=0;y<l;y+=1)a=i[y],m=p[y],m.y=FH(r,a,v,4,32),v=m.y}e.points=p}else e.points=[]}else if(e.numberOfContours===0)e.points=[];else{e.isComposite=!0,e.points=[],e.components=[];for(var b=!0;b;){i=r.parseUShort();var x={glyphIndex:r.parseUShort(),xScale:1,scale01:0,scale10:0,yScale:1,dx:0,dy:0};(i&1)>0?(i&2)>0?(x.dx=r.parseShort(),x.dy=r.parseShort()):x.matchedPoints=[r.parseUShort(),r.parseUShort()]:(i&2)>0?(x.dx=r.parseChar(),x.dy=r.parseChar()):x.matchedPoints=[r.parseByte(),r.parseByte()],(i&8)>0?x.xScale=x.yScale=r.parseF2Dot14():(i&64)>0?(x.xScale=r.parseF2Dot14(),x.yScale=r.parseF2Dot14()):(i&128)>0&&(x.xScale=r.parseF2Dot14(),x.scale01=r.parseF2Dot14(),x.scale10=r.parseF2Dot14(),x.yScale=r.parseF2Dot14()),e.components.push(x),b=!!(i&32)}if(i&256){e.instructionLength=r.parseUShort(),e.instructions=[];for(var S=0;S<e.instructionLength;S+=1)e.instructions.push(r.parseByte())}}}function LH(e,t){for(var n=[],r=0;r<e.length;r+=1){var i=e[r],a={x:t.xScale*i.x+t.scale01*i.y+t.dx,y:t.scale10*i.x+t.yScale*i.y+t.dy,onCurve:i.onCurve,lastPointOfContour:i.lastPointOfContour};n.push(a)}return n}function RH(e){for(var t=[],n=[],r=0;r<e.length;r+=1){var i=e[r];n.push(i),i.lastPointOfContour&&(t.push(n),n=[])}return K.argument(n.length===0,`There are still points left in the current contour.`),t}function zH(e){var t=new Oz;if(!e)return t;for(var n=RH(e),r=0;r<n.length;++r){var i=n[r],a=null,o=i[i.length-1],s=i[0];if(o.onCurve)t.moveTo(o.x,o.y);else if(s.onCurve)t.moveTo(s.x,s.y);else{var c={x:(o.x+s.x)*.5,y:(o.y+s.y)*.5};t.moveTo(c.x,c.y)}for(var l=0;l<i.length;++l)if(a=o,o=s,s=i[(l+1)%i.length],o.onCurve)t.lineTo(o.x,o.y);else{var u=s;a.onCurve||((o.x+a.x)*.5,(o.y+a.y)*.5),s.onCurve||(u={x:(o.x+s.x)*.5,y:(o.y+s.y)*.5}),t.quadraticCurveTo(o.x,o.y,u.x,u.y)}t.closePath()}return t}function BH(e,t){if(t.isComposite)for(var n=0;n<t.components.length;n+=1){var r=t.components[n],i=e.get(r.glyphIndex);if(i.getPath(),i.points){var a=void 0;if(r.matchedPoints===void 0)a=LH(i.points,r);else{if(r.matchedPoints[0]>t.points.length-1||r.matchedPoints[1]>i.points.length-1)throw Error(`Matched points out of range in `+t.name);var o=t.points[r.matchedPoints[0]],s=i.points[r.matchedPoints[1]],c={xScale:r.xScale,scale01:r.scale01,scale10:r.scale10,yScale:r.yScale,dx:0,dy:0};s=LH([s],c)[0],c.dx=o.x-s.x,c.dy=o.y-s.y,a=LH(i.points,c)}t.points=t.points.concat(a)}}return zH(t.points)}function VH(e,t,n,r){for(var i=new IB.GlyphSet(r),a=0;a<n.length-1;a+=1){var o=n[a];o===n[a+1]?i.push(a,IB.glyphLoader(r,a)):i.push(a,IB.ttfGlyphLoader(r,a,IH,e,t+o,BH))}return i}function HH(e,t,n,r){var i=new IB.GlyphSet(r);return r._push=function(a){var o=n[a];o===n[a+1]?i.push(a,IB.glyphLoader(r,a)):i.push(a,IB.ttfGlyphLoader(r,a,IH,e,t+o,BH))},i}function UH(e,t,n,r,i){return i.lowMemory?HH(e,t,n,r):VH(e,t,n,r)}var WH={getPath:zH,parse:UH},GH,KH,qH,JH;function YH(e){this.font=e,this.getCommands=function(e){return WH.getPath(e).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function XH(e){return e}function ZH(e){return Math.sign(e)*Math.round(Math.abs(e))}function QH(e){return Math.sign(e)*Math.round(Math.abs(e*2))/2}function $H(e){return Math.sign(e)*(Math.round(Math.abs(e)+.5)-.5)}function eU(e){return Math.sign(e)*Math.ceil(Math.abs(e))}function tU(e){return Math.sign(e)*Math.floor(Math.abs(e))}var nU=function(e){var t=this.srPeriod,n=this.srPhase,r=this.srThreshold,i=1;return e<0&&(e=-e,i=-1),e+=r-n,e=Math.trunc(e/t)*t,e+=n,e<0?n*i:e*i},rU={x:1,y:0,axis:`x`,distance:function(e,t,n,r){return(n?e.xo:e.x)-(r?t.xo:t.x)},interpolate:function(e,t,n,r){var i,a,o,s,c,l,u;if(!r||r===this){if(i=e.xo-t.xo,a=e.xo-n.xo,c=t.x-t.xo,l=n.x-n.xo,o=Math.abs(i),s=Math.abs(a),u=o+s,u===0){e.x=e.xo+(c+l)/2;return}e.x=e.xo+(c*s+l*o)/u;return}if(i=r.distance(e,t,!0,!0),a=r.distance(e,n,!0,!0),c=r.distance(t,t,!1,!0),l=r.distance(n,n,!1,!0),o=Math.abs(i),s=Math.abs(a),u=o+s,u===0){rU.setRelative(e,e,(c+l)/2,r,!0);return}rU.setRelative(e,e,(c*s+l*o)/u,r,!0)},normalSlope:-1/0,setRelative:function(e,t,n,r,i){if(!r||r===this){e.x=(i?t.xo:t.x)+n;return}var a=i?t.xo:t.x,o=i?t.yo:t.y,s=a+n*r.x,c=o+n*r.y;e.x=s+(e.y-c)/r.normalSlope},slope:0,touch:function(e){e.xTouched=!0},touched:function(e){return e.xTouched},untouch:function(e){e.xTouched=!1}},iU={x:0,y:1,axis:`y`,distance:function(e,t,n,r){return(n?e.yo:e.y)-(r?t.yo:t.y)},interpolate:function(e,t,n,r){var i,a,o,s,c,l,u;if(!r||r===this){if(i=e.yo-t.yo,a=e.yo-n.yo,c=t.y-t.yo,l=n.y-n.yo,o=Math.abs(i),s=Math.abs(a),u=o+s,u===0){e.y=e.yo+(c+l)/2;return}e.y=e.yo+(c*s+l*o)/u;return}if(i=r.distance(e,t,!0,!0),a=r.distance(e,n,!0,!0),c=r.distance(t,t,!1,!0),l=r.distance(n,n,!1,!0),o=Math.abs(i),s=Math.abs(a),u=o+s,u===0){iU.setRelative(e,e,(c+l)/2,r,!0);return}iU.setRelative(e,e,(c*s+l*o)/u,r,!0)},normalSlope:0,setRelative:function(e,t,n,r,i){if(!r||r===this){e.y=(i?t.yo:t.y)+n;return}var a=i?t.xo:t.x,o=i?t.yo:t.y,s=a+n*r.x;e.y=o+n*r.y+r.normalSlope*(e.x-s)},slope:1/0,touch:function(e){e.yTouched=!0},touched:function(e){return e.yTouched},untouch:function(e){e.yTouched=!1}};Object.freeze(rU),Object.freeze(iU);function aU(e,t){this.x=e,this.y=t,this.axis=void 0,this.slope=t/e,this.normalSlope=-e/t,Object.freeze(this)}aU.prototype.distance=function(e,t,n,r){return this.x*rU.distance(e,t,n,r)+this.y*iU.distance(e,t,n,r)},aU.prototype.interpolate=function(e,t,n,r){var i,a,o=r.distance(e,t,!0,!0),s=r.distance(e,n,!0,!0),c,l,u;if(i=r.distance(t,t,!1,!0),a=r.distance(n,n,!1,!0),c=Math.abs(o),l=Math.abs(s),u=c+l,u===0){this.setRelative(e,e,(i+a)/2,r,!0);return}this.setRelative(e,e,(i*l+a*c)/u,r,!0)},aU.prototype.setRelative=function(e,t,n,r,i){r||=this;var a=i?t.xo:t.x,o=i?t.yo:t.y,s=a+n*r.x,c=o+n*r.y,l=r.normalSlope,u=this.slope,d=e.x,f=e.y;e.x=(u*d-l*s+c-f)/(u-l),e.y=u*(e.x-d)+f},aU.prototype.touch=function(e){e.xTouched=!0,e.yTouched=!0};function oU(e,t){var n=Math.sqrt(e*e+t*t);return e/=n,t/=n,e===1&&t===0?rU:e===0&&t===1?iU:new aU(e,t)}function sU(e,t,n,r){this.x=this.xo=Math.round(e*64)/64,this.y=this.yo=Math.round(t*64)/64,this.lastPointOfContour=n,this.onCurve=r,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}sU.prototype.nextTouched=function(e){for(var t=this.nextPointOnContour;!e.touched(t)&&t!==this;)t=t.nextPointOnContour;return t},sU.prototype.prevTouched=function(e){for(var t=this.prevPointOnContour;!e.touched(t)&&t!==this;)t=t.prevPointOnContour;return t};var cU=Object.freeze(new sU(0,0)),lU={cvCutIn:17/16,deltaBase:9,deltaShift:.125,loop:1,minDis:1,autoFlip:!0};function uU(e,t){switch(this.env=e,this.stack=[],this.prog=t,e){case`glyf`:this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case`prep`:this.fv=this.pv=this.dpv=rU,this.round=ZH}}YH.prototype.exec=function(e,t){if(typeof t!=`number`)throw Error(`Point size is not a number!`);if(!(this._errorState>2)){var n=this.font,r=this._prepState;if(!r||r.ppem!==t){var i=this._fpgmState;if(!i){uU.prototype=lU,i=this._fpgmState=new uU(`fpgm`,n.tables.fpgm),i.funcs=[],i.font=n,exports.DEBUG&&(console.log(`---EXEC FPGM---`),i.step=-1);try{KH(i)}catch(e){console.log(`Hinting error in FPGM:`+e),this._errorState=3;return}}uU.prototype=i,r=this._prepState=new uU(`prep`,n.tables.prep),r.ppem=t;var a=n.tables.cvt;if(a)for(var o=r.cvt=Array(a.length),s=t/n.unitsPerEm,c=0;c<a.length;c++)o[c]=a[c]*s;else r.cvt=[];exports.DEBUG&&(console.log(`---EXEC PREP---`),r.step=-1);try{KH(r)}catch(e){this._errorState<2&&console.log(`Hinting error in PREP:`+e),this._errorState=2}}if(!(this._errorState>1))try{return qH(e,r)}catch(e){this._errorState<1&&(console.log(`Hinting error:`+e),console.log(`Note: further hinting errors are silenced`)),this._errorState=1;return}}},qH=function(e,t){var n=t.ppem/t.font.unitsPerEm,r=n,i=e.components,a,o,s;if(uU.prototype=t,!i)s=new uU(`glyf`,e.instructions),exports.DEBUG&&(console.log(`---EXEC GLYPH---`),s.step=-1),JH(e,s,n,r),o=s.gZone;else{var c=t.font;o=[],a=[];for(var l=0;l<i.length;l++){var u=i[l],d=c.glyphs.get(u.glyphIndex);s=new uU(`glyf`,d.instructions),exports.DEBUG&&(console.log(`---EXEC COMP `+l+`---`),s.step=-1),JH(d,s,n,r);for(var f=Math.round(u.dx*n),p=Math.round(u.dy*r),m=s.gZone,h=s.contours,g=0;g<m.length;g++){var _=m[g];_.xTouched=_.yTouched=!1,_.xo=_.x+=f,_.yo=_.y+=p}var v=o.length;o.push.apply(o,m);for(var y=0;y<h.length;y++)a.push(h[y]+v)}e.instructions&&!s.inhibitGridFit&&(s=new uU(`glyf`,e.instructions),s.gZone=s.z0=s.z1=s.z2=o,s.contours=a,o.push(new sU(0,0),new sU(Math.round(e.advanceWidth*n),0)),exports.DEBUG&&(console.log(`---EXEC COMPOSITE---`),s.step=-1),KH(s),o.length-=2)}return o},JH=function(e,t,n,r){for(var i=e.points||[],a=i.length,o=t.gZone=t.z0=t.z1=t.z2=[],s=t.contours=[],c,l=0;l<a;l++)c=i[l],o[l]=new sU(c.x*n,c.y*r,c.lastPointOfContour,c.onCurve);for(var u,d,f=0;f<a;f++)c=o[f],u||(u=c,s.push(f)),c.lastPointOfContour?(c.nextPointOnContour=u,u.prevPointOnContour=c,u=void 0):(d=o[f+1],c.nextPointOnContour=d,d.prevPointOnContour=c);if(!t.inhibitGridFit){if(exports.DEBUG){console.log(`PROCESSING GLYPH`,t.stack);for(var p=0;p<a;p++)console.log(p,o[p].x,o[p].y)}if(o.push(new sU(0,0),new sU(Math.round(e.advanceWidth*n),0)),KH(t),o.length-=2,exports.DEBUG){console.log(`FINISHED GLYPH`,t.stack);for(var m=0;m<a;m++)console.log(m,o[m].x,o[m].y)}}},KH=function(e){var t=e.prog;if(t){var n=t.length,r;for(e.ip=0;e.ip<n;e.ip++){if(exports.DEBUG&&e.step++,r=GH[t[e.ip]],!r)throw Error(`unknown instruction: 0x`+Number(t[e.ip]).toString(16));r(e)}}};function dU(e){for(var t=e.tZone=Array(e.gZone.length),n=0;n<t.length;n++)t[n]=new sU(0,0)}function fU(e,t){var n=e.prog,r=e.ip,i=1,a;do if(a=n[++r],a===88)i++;else if(a===89)i--;else if(a===64)r+=n[r+1]+1;else if(a===65)r+=2*n[r+1]+1;else if(a>=176&&a<=183)r+=a-176+1;else if(a>=184&&a<=191)r+=(a-184+1)*2;else if(t&&i===1&&a===27)break;while(i>0);e.ip=r}function pU(e,t){exports.DEBUG&&console.log(t.step,`SVTCA[`+e.axis+`]`),t.fv=t.pv=t.dpv=e}function mU(e,t){exports.DEBUG&&console.log(t.step,`SPVTCA[`+e.axis+`]`),t.pv=t.dpv=e}function hU(e,t){exports.DEBUG&&console.log(t.step,`SFVTCA[`+e.axis+`]`),t.fv=e}function gU(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z2[r],o=t.z1[i];exports.DEBUG&&console.log(`SPVTL[`+e+`]`,r,i);var s,c;e?(s=a.y-o.y,c=o.x-a.x):(s=o.x-a.x,c=o.y-a.y),t.pv=t.dpv=oU(s,c)}function _U(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z2[r],o=t.z1[i];exports.DEBUG&&console.log(`SFVTL[`+e+`]`,r,i);var s,c;e?(s=a.y-o.y,c=o.x-a.x):(s=o.x-a.x,c=o.y-a.y),t.fv=oU(s,c)}function vU(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SPVFS[]`,n,r),e.pv=e.dpv=oU(r,n)}function yU(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SPVFS[]`,n,r),e.fv=oU(r,n)}function bU(e){var t=e.stack,n=e.pv;exports.DEBUG&&console.log(e.step,`GPV[]`),t.push(n.x*16384),t.push(n.y*16384)}function xU(e){var t=e.stack,n=e.fv;exports.DEBUG&&console.log(e.step,`GFV[]`),t.push(n.x*16384),t.push(n.y*16384)}function SU(e){e.fv=e.pv,exports.DEBUG&&console.log(e.step,`SFVTPV[]`)}function CU(e){var t=e.stack,n=t.pop(),r=t.pop(),i=t.pop(),a=t.pop(),o=t.pop(),s=e.z0,c=e.z1,l=s[n],u=s[r],d=c[i],f=c[a],p=e.z2[o];exports.DEBUG&&console.log(`ISECT[], `,n,r,i,a,o);var m=l.x,h=l.y,g=u.x,_=u.y,v=d.x,y=d.y,b=f.x,x=f.y,S=(m-g)*(y-x)-(h-_)*(v-b),C=m*_-h*g,w=v*x-y*b;p.x=(C*(v-b)-w*(m-g))/S,p.y=(C*(y-x)-w*(h-_))/S}function wU(e){e.rp0=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP0[]`,e.rp0)}function TU(e){e.rp1=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP1[]`,e.rp1)}function EU(e){e.rp2=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP2[]`,e.rp2)}function DU(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP0[]`,t),e.zp0=t,t){case 0:e.tZone||dU(e),e.z0=e.tZone;break;case 1:e.z0=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function OU(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP1[]`,t),e.zp1=t,t){case 0:e.tZone||dU(e),e.z1=e.tZone;break;case 1:e.z1=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function kU(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP2[]`,t),e.zp2=t,t){case 0:e.tZone||dU(e),e.z2=e.tZone;break;case 1:e.z2=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function AU(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZPS[]`,t),e.zp0=e.zp1=e.zp2=t,t){case 0:e.tZone||dU(e),e.z0=e.z1=e.z2=e.tZone;break;case 1:e.z0=e.z1=e.z2=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function jU(e){e.loop=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SLOOP[]`,e.loop)}function MU(e){exports.DEBUG&&console.log(e.step,`RTG[]`),e.round=ZH}function NU(e){exports.DEBUG&&console.log(e.step,`RTHG[]`),e.round=$H}function PU(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SMD[]`,t),e.minDis=t/64}function FU(e){exports.DEBUG&&console.log(e.step,`ELSE[]`),fU(e,!1)}function IU(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`JMPR[]`,t),e.ip+=t-1}function LU(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCVTCI[]`,t),e.cvCutIn=t/64}function RU(e){var t=e.stack;exports.DEBUG&&console.log(e.step,`DUP[]`),t.push(t[t.length-1])}function zU(e){exports.DEBUG&&console.log(e.step,`POP[]`),e.stack.pop()}function BU(e){exports.DEBUG&&console.log(e.step,`CLEAR[]`),e.stack.length=0}function VU(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SWAP[]`),t.push(n),t.push(r)}function HU(e){var t=e.stack;exports.DEBUG&&console.log(e.step,`DEPTH[]`),t.push(t.length)}function UU(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`LOOPCALL[]`,n,r);var i=e.ip,a=e.prog;e.prog=e.funcs[n];for(var o=0;o<r;o++)KH(e),exports.DEBUG&&console.log(++e.step,o+1<r?`next loopcall`:`done loopcall`,o);e.ip=i,e.prog=a}function WU(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`CALL[]`,t);var n=e.ip,r=e.prog;e.prog=e.funcs[t],KH(e),e.ip=n,e.prog=r,exports.DEBUG&&console.log(++e.step,`returning from`,t)}function GU(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`CINDEX[]`,n),t.push(t[t.length-n])}function KU(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`MINDEX[]`,n),t.push(t.splice(t.length-n,1)[0])}function qU(e){if(e.env!==`fpgm`)throw Error(`FDEF not allowed here`);var t=e.stack,n=e.prog,r=e.ip,i=t.pop(),a=r;for(exports.DEBUG&&console.log(e.step,`FDEF[]`,i);n[++r]!==45;);e.ip=r,e.funcs[i]=n.slice(a+1,r)}function JU(e,t){var n=t.stack.pop(),r=t.z0[n],i=t.fv,a=t.pv;exports.DEBUG&&console.log(t.step,`MDAP[`+e+`]`,n);var o=a.distance(r,cU);e&&(o=t.round(o)),i.setRelative(r,cU,o,a),i.touch(r),t.rp0=t.rp1=n}function YU(e,t){var n=t.z2,r=n.length-2,i,a,o;exports.DEBUG&&console.log(t.step,`IUP[`+e.axis+`]`);for(var s=0;s<r;s++)i=n[s],!e.touched(i)&&(a=i.prevTouched(e),a!==i&&(o=i.nextTouched(e),a===o&&e.setRelative(i,i,e.distance(a,a,!1,!0),e,!0),e.interpolate(i,a,o,e)))}function XU(e,t){for(var n=t.stack,r=e?t.rp1:t.rp2,i=(e?t.z0:t.z1)[r],a=t.fv,o=t.pv,s=t.loop,c=t.z2;s--;){var l=n.pop(),u=c[l],d=o.distance(i,i,!1,!0);a.setRelative(u,u,d,o),a.touch(u),exports.DEBUG&&console.log(t.step,(t.loop>1?`loop `+(t.loop-s)+`: `:``)+`SHP[`+(e?`rp1`:`rp2`)+`]`,l)}t.loop=1}function ZU(e,t){var n=t.stack,r=e?t.rp1:t.rp2,i=(e?t.z0:t.z1)[r],a=t.fv,o=t.pv,s=n.pop(),c=t.z2[t.contours[s]],l=c;exports.DEBUG&&console.log(t.step,`SHC[`+e+`]`,s);var u=o.distance(i,i,!1,!0);do l!==i&&a.setRelative(l,l,u,o),l=l.nextPointOnContour;while(l!==c)}function QU(e,t){var n=t.stack,r=e?t.rp1:t.rp2,i=(e?t.z0:t.z1)[r],a=t.fv,o=t.pv,s=n.pop();exports.DEBUG&&console.log(t.step,`SHZ[`+e+`]`,s);var c;switch(s){case 0:c=t.tZone;break;case 1:c=t.gZone;break;default:throw Error(`Invalid zone`)}for(var l,u=o.distance(i,i,!1,!0),d=c.length-2,f=0;f<d;f++)l=c[f],a.setRelative(l,l,u,o)}function $U(e){for(var t=e.stack,n=e.loop,r=e.fv,i=t.pop()/64,a=e.z2;n--;){var o=t.pop(),s=a[o];exports.DEBUG&&console.log(e.step,(e.loop>1?`loop `+(e.loop-n)+`: `:``)+`SHPIX[]`,o,i),r.setRelative(s,s,i),r.touch(s)}e.loop=1}function eW(e){for(var t=e.stack,n=e.rp1,r=e.rp2,i=e.loop,a=e.z0[n],o=e.z1[r],s=e.fv,c=e.dpv,l=e.z2;i--;){var u=t.pop(),d=l[u];exports.DEBUG&&console.log(e.step,(e.loop>1?`loop `+(e.loop-i)+`: `:``)+`IP[]`,u,n,`<->`,r),s.interpolate(d,a,o,c),s.touch(d)}e.loop=1}function tW(e,t){var n=t.stack,r=n.pop()/64,i=n.pop(),a=t.z1[i],o=t.z0[t.rp0],s=t.fv,c=t.pv;s.setRelative(a,o,r,c),s.touch(a),exports.DEBUG&&console.log(t.step,`MSIRP[`+e+`]`,r,i),t.rp1=t.rp0,t.rp2=i,e&&(t.rp0=i)}function nW(e){for(var t=e.stack,n=e.rp0,r=e.z0[n],i=e.loop,a=e.fv,o=e.pv,s=e.z1;i--;){var c=t.pop(),l=s[c];exports.DEBUG&&console.log(e.step,(e.loop>1?`loop `+(e.loop-i)+`: `:``)+`ALIGNRP[]`,c),a.setRelative(l,r,0,o),a.touch(l)}e.loop=1}function rW(e){exports.DEBUG&&console.log(e.step,`RTDG[]`),e.round=QH}function iW(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z0[i],o=t.fv,s=t.pv,c=t.cvt[r];exports.DEBUG&&console.log(t.step,`MIAP[`+e+`]`,r,`(`,c,`)`,i);var l=s.distance(a,cU);e&&(Math.abs(l-c)<t.cvCutIn&&(l=c),l=t.round(l)),o.setRelative(a,cU,l,s),t.zp0===0&&(a.xo=a.x,a.yo=a.y),o.touch(a),t.rp0=t.rp1=i}function aW(e){var t=e.prog,n=e.ip,r=e.stack,i=t[++n];exports.DEBUG&&console.log(e.step,`NPUSHB[]`,i);for(var a=0;a<i;a++)r.push(t[++n]);e.ip=n}function oW(e){var t=e.ip,n=e.prog,r=e.stack,i=n[++t];exports.DEBUG&&console.log(e.step,`NPUSHW[]`,i);for(var a=0;a<i;a++){var o=n[++t]<<8|n[++t];o&32768&&(o=-((o^65535)+1)),r.push(o)}e.ip=t}function sW(e){var t=e.stack,n=e.store;n||=e.store=[];var r=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,`WS`,r,i),n[i]=r}function cW(e){var t=e.stack,n=e.store,r=t.pop();exports.DEBUG&&console.log(e.step,`RS`,r);var i=n&&n[r]||0;t.push(i)}function lW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`WCVTP`,n,r),e.cvt[r]=n/64}function uW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`RCVT`,n),t.push(e.cvt[n]*64)}function dW(e,t){var n=t.stack,r=n.pop(),i=t.z2[r];exports.DEBUG&&console.log(t.step,`GC[`+e+`]`,r),n.push(t.dpv.distance(i,cU,e,!1)*64)}function fW(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z1[r],o=t.z0[i],s=t.dpv.distance(o,a,e,e);exports.DEBUG&&console.log(t.step,`MD[`+e+`]`,r,i,`->`,s),t.stack.push(Math.round(s*64))}function pW(e){exports.DEBUG&&console.log(e.step,`MPPEM[]`),e.stack.push(e.ppem)}function mW(e){exports.DEBUG&&console.log(e.step,`FLIPON[]`),e.autoFlip=!0}function hW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`LT[]`,n,r),t.push(+(r<n))}function gW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`LTEQ[]`,n,r),t.push(+(r<=n))}function _W(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`GT[]`,n,r),t.push(+(r>n))}function vW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`GTEQ[]`,n,r),t.push(+(r>=n))}function yW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`EQ[]`,n,r),t.push(+(n===r))}function bW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`NEQ[]`,n,r),t.push(n===r?0:1)}function xW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`ODD[]`,n),t.push(Math.trunc(n)%2?1:0)}function SW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`EVEN[]`,n),t.push(Math.trunc(n)%2?0:1)}function CW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`IF[]`,t),t||(fU(e,!0),exports.DEBUG&&console.log(e.step,`EIF[]`))}function wW(e){exports.DEBUG&&console.log(e.step,`EIF[]`)}function TW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`AND[]`,n,r),t.push(n&&r?1:0)}function EW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`OR[]`,n,r),t.push(n||r?1:0)}function DW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`NOT[]`,n),t.push(+!n)}function OW(e,t){var n=t.stack,r=n.pop(),i=t.fv,a=t.pv,o=t.ppem,s=t.deltaBase+(e-1)*16,c=t.deltaShift,l=t.z0;exports.DEBUG&&console.log(t.step,`DELTAP[`+e+`]`,r,n);for(var u=0;u<r;u++){var d=n.pop(),f=n.pop();if(s+((f&240)>>4)===o){var p=(f&15)-8;p>=0&&p++,exports.DEBUG&&console.log(t.step,`DELTAPFIX`,d,`by`,p*c);var m=l[d];i.setRelative(m,m,p*c,a)}}}function kW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SDB[]`,t),e.deltaBase=t}function AW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SDS[]`,t),e.deltaShift=.5**t}function jW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`ADD[]`,n,r),t.push(r+n)}function MW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SUB[]`,n,r),t.push(r-n)}function NW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`DIV[]`,n,r),t.push(r*64/n)}function PW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`MUL[]`,n,r),t.push(r*n/64)}function FW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`ABS[]`,n),t.push(Math.abs(n))}function IW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`NEG[]`,n),t.push(-n)}function LW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`FLOOR[]`,n),t.push(Math.floor(n/64)*64)}function RW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`CEILING[]`,n),t.push(Math.ceil(n/64)*64)}function zW(e,t){var n=t.stack,r=n.pop();exports.DEBUG&&console.log(t.step,`ROUND[]`),n.push(t.round(r/64)*64)}function BW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`WCVTF[]`,n,r),e.cvt[r]=n*e.ppem/e.font.unitsPerEm}function VW(e,t){var n=t.stack,r=n.pop(),i=t.ppem,a=t.deltaBase+(e-1)*16,o=t.deltaShift;exports.DEBUG&&console.log(t.step,`DELTAC[`+e+`]`,r,n);for(var s=0;s<r;s++){var c=n.pop(),l=n.pop();if(a+((l&240)>>4)===i){var u=(l&15)-8;u>=0&&u++;var d=u*o;exports.DEBUG&&console.log(t.step,`DELTACFIX`,c,`by`,d),t.cvt[c]+=d}}}function HW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SROUND[]`,t),e.round=nU;var n;switch(t&192){case 0:n=.5;break;case 64:n=1;break;case 128:n=2;break;default:throw Error(`invalid SROUND value`)}switch(e.srPeriod=n,t&48){case 0:e.srPhase=0;break;case 16:e.srPhase=.25*n;break;case 32:e.srPhase=.5*n;break;case 48:e.srPhase=.75*n;break;default:throw Error(`invalid SROUND value`)}t&=15,t===0?e.srThreshold=0:e.srThreshold=(t/8-.5)*n}function UW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`S45ROUND[]`,t),e.round=nU;var n;switch(t&192){case 0:n=Math.sqrt(2)/2;break;case 64:n=Math.sqrt(2);break;case 128:n=2*Math.sqrt(2);break;default:throw Error(`invalid S45ROUND value`)}switch(e.srPeriod=n,t&48){case 0:e.srPhase=0;break;case 16:e.srPhase=.25*n;break;case 32:e.srPhase=.5*n;break;case 48:e.srPhase=.75*n;break;default:throw Error(`invalid S45ROUND value`)}t&=15,t===0?e.srThreshold=0:e.srThreshold=(t/8-.5)*n}function WW(e){exports.DEBUG&&console.log(e.step,`ROFF[]`),e.round=XH}function GW(e){exports.DEBUG&&console.log(e.step,`RUTG[]`),e.round=eU}function KW(e){exports.DEBUG&&console.log(e.step,`RDTG[]`),e.round=tU}function qW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCANCTRL[]`,t)}function JW(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z2[r],o=t.z1[i];exports.DEBUG&&console.log(t.step,`SDPVTL[`+e+`]`,r,i);var s,c;e?(s=a.y-o.y,c=o.x-a.x):(s=o.x-a.x,c=o.y-a.y),t.dpv=oU(s,c)}function YW(e){var t=e.stack,n=t.pop(),r=0;exports.DEBUG&&console.log(e.step,`GETINFO[]`,n),n&1&&(r=35),n&32&&(r|=4096),t.push(r)}function XW(e){var t=e.stack,n=t.pop(),r=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,`ROLL[]`),t.push(r),t.push(n),t.push(i)}function ZW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`MAX[]`,n,r),t.push(Math.max(r,n))}function QW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`MIN[]`,n,r),t.push(Math.min(r,n))}function $W(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCANTYPE[]`,t)}function eG(e){var t=e.stack.pop(),n=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`INSTCTRL[]`,t,n),t){case 1:e.inhibitGridFit=!!n;return;case 2:e.ignoreCvt=!!n;return;default:throw Error(`invalid INSTCTRL[] selector`)}}function tG(e,t){var n=t.stack,r=t.prog,i=t.ip;exports.DEBUG&&console.log(t.step,`PUSHB[`+e+`]`);for(var a=0;a<e;a++)n.push(r[++i]);t.ip=i}function nG(e,t){var n=t.ip,r=t.prog,i=t.stack;exports.DEBUG&&console.log(t.ip,`PUSHW[`+e+`]`);for(var a=0;a<e;a++){var o=r[++n]<<8|r[++n];o&32768&&(o=-((o^65535)+1)),i.push(o)}t.ip=n}function Q(e,t,n,r,i,a){var o=a.stack,s=e&&o.pop(),c=o.pop(),l=a.rp0,u=a.z0[l],d=a.z1[c],f=a.minDis,p=a.fv,m=a.dpv,h,g=h=m.distance(d,u,!0,!0),_=g>=0?1:-1,v;g=Math.abs(g),e&&(v=a.cvt[s],r&&Math.abs(g-v)<a.cvCutIn&&(g=v)),n&&g<f&&(g=f),r&&(g=a.round(g)),p.setRelative(d,u,_*g,m),p.touch(d),exports.DEBUG&&console.log(a.step,(e?`MIRP[`:`MDRP[`)+(t?`M`:`m`)+(n?`>`:`_`)+(r?`R`:`_`)+(i===0?`Gr`:i===1?`Bl`:i===2?`Wh`:``)+`]`,e?s+`(`+a.cvt[s]+`,`+v+`)`:``,c,`(d =`,h,`->`,_*g,`)`),a.rp1=a.rp0,a.rp2=c,t&&(a.rp0=c)}GH=[pU.bind(void 0,iU),pU.bind(void 0,rU),mU.bind(void 0,iU),mU.bind(void 0,rU),hU.bind(void 0,iU),hU.bind(void 0,rU),gU.bind(void 0,0),gU.bind(void 0,1),_U.bind(void 0,0),_U.bind(void 0,1),vU,yU,bU,xU,SU,CU,wU,TU,EU,DU,OU,kU,AU,jU,MU,NU,PU,FU,IU,LU,void 0,void 0,RU,zU,BU,VU,HU,GU,KU,void 0,void 0,void 0,UU,WU,qU,void 0,JU.bind(void 0,0),JU.bind(void 0,1),YU.bind(void 0,iU),YU.bind(void 0,rU),XU.bind(void 0,0),XU.bind(void 0,1),ZU.bind(void 0,0),ZU.bind(void 0,1),QU.bind(void 0,0),QU.bind(void 0,1),$U,eW,tW.bind(void 0,0),tW.bind(void 0,1),nW,rW,iW.bind(void 0,0),iW.bind(void 0,1),aW,oW,sW,cW,lW,uW,dW.bind(void 0,0),dW.bind(void 0,1),void 0,fW.bind(void 0,0),fW.bind(void 0,1),pW,void 0,mW,void 0,void 0,hW,gW,_W,vW,yW,bW,xW,SW,CW,wW,TW,EW,DW,OW.bind(void 0,1),kW,AW,jW,MW,NW,PW,FW,IW,LW,RW,zW.bind(void 0,0),zW.bind(void 0,1),zW.bind(void 0,2),zW.bind(void 0,3),void 0,void 0,void 0,void 0,BW,OW.bind(void 0,2),OW.bind(void 0,3),VW.bind(void 0,1),VW.bind(void 0,2),VW.bind(void 0,3),HW,UW,void 0,void 0,WW,void 0,GW,KW,zU,zU,void 0,void 0,void 0,void 0,void 0,qW,JW.bind(void 0,0),JW.bind(void 0,1),YW,void 0,XW,ZW,QW,$W,eG,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,tG.bind(void 0,1),tG.bind(void 0,2),tG.bind(void 0,3),tG.bind(void 0,4),tG.bind(void 0,5),tG.bind(void 0,6),tG.bind(void 0,7),tG.bind(void 0,8),nG.bind(void 0,1),nG.bind(void 0,2),nG.bind(void 0,3),nG.bind(void 0,4),nG.bind(void 0,5),nG.bind(void 0,6),nG.bind(void 0,7),nG.bind(void 0,8),Q.bind(void 0,0,0,0,0,0),Q.bind(void 0,0,0,0,0,1),Q.bind(void 0,0,0,0,0,2),Q.bind(void 0,0,0,0,0,3),Q.bind(void 0,0,0,0,1,0),Q.bind(void 0,0,0,0,1,1),Q.bind(void 0,0,0,0,1,2),Q.bind(void 0,0,0,0,1,3),Q.bind(void 0,0,0,1,0,0),Q.bind(void 0,0,0,1,0,1),Q.bind(void 0,0,0,1,0,2),Q.bind(void 0,0,0,1,0,3),Q.bind(void 0,0,0,1,1,0),Q.bind(void 0,0,0,1,1,1),Q.bind(void 0,0,0,1,1,2),Q.bind(void 0,0,0,1,1,3),Q.bind(void 0,0,1,0,0,0),Q.bind(void 0,0,1,0,0,1),Q.bind(void 0,0,1,0,0,2),Q.bind(void 0,0,1,0,0,3),Q.bind(void 0,0,1,0,1,0),Q.bind(void 0,0,1,0,1,1),Q.bind(void 0,0,1,0,1,2),Q.bind(void 0,0,1,0,1,3),Q.bind(void 0,0,1,1,0,0),Q.bind(void 0,0,1,1,0,1),Q.bind(void 0,0,1,1,0,2),Q.bind(void 0,0,1,1,0,3),Q.bind(void 0,0,1,1,1,0),Q.bind(void 0,0,1,1,1,1),Q.bind(void 0,0,1,1,1,2),Q.bind(void 0,0,1,1,1,3),Q.bind(void 0,1,0,0,0,0),Q.bind(void 0,1,0,0,0,1),Q.bind(void 0,1,0,0,0,2),Q.bind(void 0,1,0,0,0,3),Q.bind(void 0,1,0,0,1,0),Q.bind(void 0,1,0,0,1,1),Q.bind(void 0,1,0,0,1,2),Q.bind(void 0,1,0,0,1,3),Q.bind(void 0,1,0,1,0,0),Q.bind(void 0,1,0,1,0,1),Q.bind(void 0,1,0,1,0,2),Q.bind(void 0,1,0,1,0,3),Q.bind(void 0,1,0,1,1,0),Q.bind(void 0,1,0,1,1,1),Q.bind(void 0,1,0,1,1,2),Q.bind(void 0,1,0,1,1,3),Q.bind(void 0,1,1,0,0,0),Q.bind(void 0,1,1,0,0,1),Q.bind(void 0,1,1,0,0,2),Q.bind(void 0,1,1,0,0,3),Q.bind(void 0,1,1,0,1,0),Q.bind(void 0,1,1,0,1,1),Q.bind(void 0,1,1,0,1,2),Q.bind(void 0,1,1,0,1,3),Q.bind(void 0,1,1,1,0,0),Q.bind(void 0,1,1,1,0,1),Q.bind(void 0,1,1,1,0,2),Q.bind(void 0,1,1,1,0,3),Q.bind(void 0,1,1,1,1,0),Q.bind(void 0,1,1,1,1,1),Q.bind(void 0,1,1,1,1,2),Q.bind(void 0,1,1,1,1,3)];function rG(e){this.char=e,this.state={},this.activeState=null}function iG(e,t,n){this.contextName=n,this.startIndex=e,this.endOffset=t}function aG(e,t,n){this.contextName=e,this.openRange=null,this.ranges=[],this.checkStart=t,this.checkEnd=n}function oG(e,t){this.context=e,this.index=t,this.length=e.length,this.current=e[t],this.backtrack=e.slice(0,t),this.lookahead=e.slice(t+1)}function sG(e){this.eventId=e,this.subscribers=[]}function cG(e){var t=this,n=[`start`,`end`,`next`,`newToken`,`contextStart`,`contextEnd`,`insertToken`,`removeToken`,`removeRange`,`replaceToken`,`replaceRange`,`composeRUD`,`updateContextsRanges`];n.forEach(function(e){Object.defineProperty(t.events,e,{value:new sG(e)})}),e&&n.forEach(function(n){var r=e[n];typeof r==`function`&&t.events[n].subscribe(r)}),[`insertToken`,`removeToken`,`removeRange`,`replaceToken`,`replaceRange`,`composeRUD`].forEach(function(e){t.events[e].subscribe(t.updateContextsRanges)})}function lG(e){this.tokens=[],this.registeredContexts={},this.contextCheckers=[],this.events={},this.registeredModifiers=[],cG.call(this,e)}rG.prototype.setState=function(e,t){return this.state[e]=t,this.activeState={key:e,value:this.state[e]},this.activeState},rG.prototype.getState=function(e){return this.state[e]||null},lG.prototype.inboundIndex=function(e){return e>=0&&e<this.tokens.length},lG.prototype.composeRUD=function(e){var t=this,n=!0,r=e.map(function(e){return t[e[0]].apply(t,e.slice(1).concat(n))}),i=function(e){return typeof e==`object`&&e.hasOwnProperty(`FAIL`)};if(r.every(i))return{FAIL:`composeRUD: one or more operations hasn't completed successfully`,report:r.filter(i)};this.dispatch(`composeRUD`,[r.filter(function(e){return!i(e)})])},lG.prototype.replaceRange=function(e,t,n,r){t=t===null?this.tokens.length:t;var i=n.every(function(e){return e instanceof rG});if(!isNaN(e)&&this.inboundIndex(e)&&i){var a=this.tokens.splice.apply(this.tokens,[e,t].concat(n));return r||this.dispatch(`replaceToken`,[e,t,n]),[a,n]}else return{FAIL:`replaceRange: invalid tokens or startIndex.`}},lG.prototype.replaceToken=function(e,t,n){if(!isNaN(e)&&this.inboundIndex(e)&&t instanceof rG){var r=this.tokens.splice(e,1,t);return n||this.dispatch(`replaceToken`,[e,t]),[r[0],t]}else return{FAIL:`replaceToken: invalid token or index.`}},lG.prototype.removeRange=function(e,t,n){t=isNaN(t)?this.tokens.length:t;var r=this.tokens.splice(e,t);return n||this.dispatch(`removeRange`,[r,e,t]),r},lG.prototype.removeToken=function(e,t){if(!isNaN(e)&&this.inboundIndex(e)){var n=this.tokens.splice(e,1);return t||this.dispatch(`removeToken`,[n,e]),n}else return{FAIL:`removeToken: invalid token index.`}},lG.prototype.insertToken=function(e,t,n){return e.every(function(e){return e instanceof rG})?(this.tokens.splice.apply(this.tokens,[t,0].concat(e)),n||this.dispatch(`insertToken`,[e,t]),e):{FAIL:`insertToken: invalid token(s).`}},lG.prototype.registerModifier=function(e,t,n){this.events.newToken.subscribe(function(r,i){var a=[r,i],o=t===null||t.apply(this,a)===!0,s=[r,i];if(o){var c=n.apply(this,s);r.setState(e,c)}}),this.registeredModifiers.push(e)},sG.prototype.subscribe=function(e){return typeof e==`function`?this.subscribers.push(e)-1:{FAIL:`invalid '`+this.eventId+`' event handler`}},sG.prototype.unsubscribe=function(e){this.subscribers.splice(e,1)},oG.prototype.setCurrentIndex=function(e){this.index=e,this.current=this.context[e],this.backtrack=this.context.slice(0,e),this.lookahead=this.context.slice(e+1)},oG.prototype.get=function(e){switch(!0){case e===0:return this.current;case e<0&&Math.abs(e)<=this.backtrack.length:return this.backtrack.slice(e)[0];case e>0&&e<=this.lookahead.length:return this.lookahead[e-1];default:return null}},lG.prototype.rangeToText=function(e){if(e instanceof iG)return this.getRangeTokens(e).map(function(e){return e.char}).join(``)},lG.prototype.getText=function(){return this.tokens.map(function(e){return e.char}).join(``)},lG.prototype.getContext=function(e){return this.registeredContexts[e]||null},lG.prototype.on=function(e,t){var n=this.events[e];return n?n.subscribe(t):null},lG.prototype.dispatch=function(e,t){var n=this,r=this.events[e];r instanceof sG&&r.subscribers.forEach(function(e){e.apply(n,t||[])})},lG.prototype.registerContextChecker=function(e,t,n){if(this.getContext(e))return{FAIL:`context name '`+e+`' is already registered.`};if(typeof t!=`function`)return{FAIL:`missing context start check.`};if(typeof n!=`function`)return{FAIL:`missing context end check.`};var r=new aG(e,t,n);return this.registeredContexts[e]=r,this.contextCheckers.push(r),r},lG.prototype.getRangeTokens=function(e){var t=e.startIndex+e.endOffset;return[].concat(this.tokens.slice(e.startIndex,t))},lG.prototype.getContextRanges=function(e){var t=this.getContext(e);return t?t.ranges:{FAIL:`context checker '`+e+`' is not registered.`}},lG.prototype.resetContextsRanges=function(){var e=this.registeredContexts;for(var t in e)if(e.hasOwnProperty(t)){var n=e[t];n.ranges=[]}},lG.prototype.updateContextsRanges=function(){this.resetContextsRanges();for(var e=this.tokens.map(function(e){return e.char}),t=0;t<e.length;t++){var n=new oG(e,t);this.runContextCheck(n)}this.dispatch(`updateContextsRanges`,[this.registeredContexts])},lG.prototype.setEndOffset=function(e,t){var n=this.getContext(t).openRange.startIndex,r=new iG(n,e,t),i=this.getContext(t).ranges;return r.rangeId=t+`.`+i.length,i.push(r),this.getContext(t).openRange=null,r},lG.prototype.runContextCheck=function(e){var t=this,n=e.index;this.contextCheckers.forEach(function(r){var i=r.contextName,a=t.getContext(i).openRange;if(!a&&r.checkStart(e)&&(a=new iG(n,null,i),t.getContext(i).openRange=a,t.dispatch(`contextStart`,[i,n])),a&&r.checkEnd(e)){var o=n-a.startIndex+1,s=t.setEndOffset(o,i);t.dispatch(`contextEnd`,[i,s])}})},lG.prototype.tokenize=function(e){this.tokens=[],this.resetContextsRanges();var t=Array.from(e);this.dispatch(`start`);for(var n=0;n<t.length;n++){var r=t[n],i=new oG(t,n);this.dispatch(`next`,[i]),this.runContextCheck(i);var a=new rG(r);this.tokens.push(a),this.dispatch(`newToken`,[a,i])}return this.dispatch(`end`,[this.tokens]),this.tokens};function uG(e){return/[\u0600-\u065F\u066A-\u06D2\u06FA-\u06FF]/.test(e)}function dG(e){return/[\u0630\u0690\u0621\u0631\u0661\u0671\u0622\u0632\u0672\u0692\u06C2\u0623\u0673\u0693\u06C3\u0624\u0694\u06C4\u0625\u0675\u0695\u06C5\u06E5\u0676\u0696\u06C6\u0627\u0677\u0697\u06C7\u0648\u0688\u0698\u06C8\u0689\u0699\u06C9\u068A\u06CA\u066B\u068B\u06CB\u068C\u068D\u06CD\u06FD\u068E\u06EE\u06FE\u062F\u068F\u06CF\u06EF]/.test(e)}function fG(e){return/[\u0600-\u0605\u060C-\u060E\u0610-\u061B\u061E\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED]/.test(e)}function pG(e){return/[A-z]/.test(e)}function mG(e){return/\s/.test(e)}function hG(e){this.font=e,this.features={}}function gG(e){this.id=e.id,this.tag=e.tag,this.substitution=e.substitution}function _G(e,t){if(!e)return-1;switch(t.format){case 1:return t.glyphs.indexOf(e);case 2:for(var n=t.ranges,r=0;r<n.length;r++){var i=n[r];if(e>=i.start&&e<=i.end){var a=e-i.start;return i.index+a}}break;default:return-1}return-1}function vG(e,t){return _G(e,t.coverage)===-1?null:e+t.deltaGlyphId}function yG(e,t){var n=_G(e,t.coverage);return n===-1?null:t.substitute[n]}function bG(e,t){for(var n=[],r=0;r<e.length;r++){var i=e[r],a=t.current;a=Array.isArray(a)?a[0]:a;var o=_G(a,i);o!==-1&&n.push(o)}return n.length===e.length?n:-1}function xG(e,t){var n=t.inputCoverage.length+t.lookaheadCoverage.length+t.backtrackCoverage.length;if(e.context.length<n)return[];var r=bG(t.inputCoverage,e);if(r===-1)return[];var i=t.inputCoverage.length-1;if(e.lookahead.length<t.lookaheadCoverage.length)return[];for(var a=e.lookahead.slice(i);a.length&&fG(a[0].char);)a.shift();var o=new oG(a,0),s=bG(t.lookaheadCoverage,o),c=[].concat(e.backtrack);for(c.reverse();c.length&&fG(c[0].char);)c.shift();if(c.length<t.backtrackCoverage.length)return[];var l=new oG(c,0),u=bG(t.backtrackCoverage,l),d=r.length===t.inputCoverage.length&&s.length===t.lookaheadCoverage.length&&u.length===t.backtrackCoverage.length,f=[];if(d)for(var p=0;p<t.lookupRecords.length;p++)for(var m=t.lookupRecords[p].lookupListIndex,h=this.getLookupByIndex(m),g=0;g<h.subtables.length;g++){var _=h.subtables[g],v=this.getLookupMethod(h,_);if(this.getSubstitutionType(h,_)===`12`)for(var y=0;y<r.length;y++){var b=v(e.get(y));b&&f.push(b)}}return f}function SG(e,t){var n=e.current,r=_G(n,t.coverage);if(r===-1)return null;for(var i,a=t.ligatureSets[r],o=0;o<a.length;o++){i=a[o];for(var s=0;s<i.components.length&&e.lookahead[s]===i.components[s];s++)if(s===i.components.length-1)return i}return null}function CG(e,t){var n=_G(e,t.coverage);return n===-1?null:t.sequences[n]}hG.prototype.getDefaultScriptFeaturesIndexes=function(){for(var e=this.font.tables.gsub.scripts,t=0;t<e.length;t++){var n=e[t];if(n.tag===`DFLT`)return n.script.defaultLangSys.featureIndexes}return[]},hG.prototype.getScriptFeaturesIndexes=function(e){if(!this.font.tables.gsub)return[];if(!e)return this.getDefaultScriptFeaturesIndexes();for(var t=this.font.tables.gsub.scripts,n=0;n<t.length;n++){var r=t[n];if(r.tag===e&&r.script.defaultLangSys)return r.script.defaultLangSys.featureIndexes;var i=r.langSysRecords;if(i)for(var a=0;a<i.length;a++){var o=i[a];if(o.tag===e)return o.langSys.featureIndexes}}return this.getDefaultScriptFeaturesIndexes()},hG.prototype.mapTagsToFeatures=function(e,t){for(var n={},r=0;r<e.length;r++){var i=e[r].tag;n[i]=e[r].feature}this.features[t].tags=n},hG.prototype.getScriptFeatures=function(e){var t=this.features[e];if(this.features.hasOwnProperty(e))return t;var n=this.getScriptFeaturesIndexes(e);if(!n)return null;var r=this.font.tables.gsub;return t=n.map(function(e){return r.features[e]}),this.features[e]=t,this.mapTagsToFeatures(t,e),t},hG.prototype.getSubstitutionType=function(e,t){return e.lookupType.toString()+t.substFormat.toString()},hG.prototype.getLookupMethod=function(e,t){var n=this;switch(this.getSubstitutionType(e,t)){case`11`:return function(e){return vG.apply(n,[e,t])};case`12`:return function(e){return yG.apply(n,[e,t])};case`63`:return function(e){return xG.apply(n,[e,t])};case`41`:return function(e){return SG.apply(n,[e,t])};case`21`:return function(e){return CG.apply(n,[e,t])};default:throw Error(`lookupType: `+e.lookupType+` - substFormat: `+t.substFormat+` is not yet supported`)}},hG.prototype.lookupFeature=function(e){var t=e.contextParams,n=t.index,r=this.getFeature({tag:e.tag,script:e.script});if(!r)return Error(`font '`+this.font.names.fullName.en+`' doesn't support feature '`+e.tag+`' for script '`+e.script+`'.`);for(var i=this.getFeatureLookups(r),a=[].concat(t.context),o=0;o<i.length;o++)for(var s=i[o],c=this.getLookupSubtables(s),l=0;l<c.length;l++){var u=c[l],d=this.getSubstitutionType(s,u),f=this.getLookupMethod(s,u),p=void 0;switch(d){case`11`:p=f(t.current),p&&a.splice(n,1,new gG({id:11,tag:e.tag,substitution:p}));break;case`12`:p=f(t.current),p&&a.splice(n,1,new gG({id:12,tag:e.tag,substitution:p}));break;case`63`:p=f(t),Array.isArray(p)&&p.length&&a.splice(n,1,new gG({id:63,tag:e.tag,substitution:p}));break;case`41`:p=f(t),p&&a.splice(n,1,new gG({id:41,tag:e.tag,substitution:p}));break;case`21`:p=f(t.current),p&&a.splice(n,1,new gG({id:21,tag:e.tag,substitution:p}));break}t=new oG(a,n),!(Array.isArray(p)&&!p.length)&&(p=null)}return a.length?a:null},hG.prototype.supports=function(e){if(!e.script)return!1;this.getScriptFeatures(e.script);var t=this.features.hasOwnProperty(e.script);if(!e.tag)return t;var n=this.features[e.script].some(function(t){return t.tag===e.tag});return t&&n},hG.prototype.getLookupSubtables=function(e){return e.subtables||null},hG.prototype.getLookupByIndex=function(e){return this.font.tables.gsub.lookups[e]||null},hG.prototype.getFeatureLookups=function(e){return e.lookupListIndexes.map(this.getLookupByIndex.bind(this))},hG.prototype.getFeature=function(e){if(!this.font)return{FAIL:`No font was found`};this.features.hasOwnProperty(e.script)||this.getScriptFeatures(e.script);var t=this.features[e.script];return t?t.tags[e.tag]?this.features[e.script].tags[e.tag]:null:{FAIL:`No feature for script `+e.script}};function wG(e){var t=e.current,n=e.get(-1);return n===null&&uG(t)||!uG(n)&&uG(t)}function TG(e){var t=e.get(1);return t===null||!uG(t)}var EG={startCheck:wG,endCheck:TG};function DG(e){var t=e.current,n=e.get(-1);return(uG(t)||fG(t))&&!uG(n)}function OG(e){var t=e.get(1);switch(!0){case t===null:return!0;case!uG(t)&&!fG(t):var n=mG(t);if(!n)return!0;if(n){var r=!1;if(r=e.lookahead.some(function(e){return uG(e)||fG(e)}),!r)return!0}break;default:return!1}}var kG={startCheck:DG,endCheck:OG};function AG(e,t,n){t[n].setState(e.tag,e.substitution)}function jG(e,t,n){t[n].setState(e.tag,e.substitution)}function MG(e,t,n){e.substitution.forEach(function(r,i){t[n+i].setState(e.tag,r)})}function NG(e,t,n){var r=t[n];r.setState(e.tag,e.substitution.ligGlyph);for(var i=e.substitution.components.length,a=0;a<i;a++)r=t[n+a+1],r.setState(`deleted`,!0)}var PG={11:AG,12:jG,63:MG,41:NG};function FG(e,t,n){e instanceof gG&&PG[e.id]&&PG[e.id](e,t,n)}function IG(e){for(var t=[].concat(e.backtrack),n=t.length-1;n>=0;n--){var r=t[n],i=dG(r),a=fG(r);if(!i&&!a)return!0;if(i)return!1}return!1}function LG(e){if(dG(e.current))return!1;for(var t=0;t<e.lookahead.length;t++){var n=e.lookahead[t];if(!fG(n))return!0}return!1}function RG(e){var t=this,n=`arab`,r=this.featuresTags[n],i=this.tokenizer.getRangeTokens(e);if(i.length!==1){var a=new oG(i.map(function(e){return e.getState(`glyphIndex`)}),0),o=new oG(i.map(function(e){return e.char}),0);i.forEach(function(e,s){if(!fG(e.char)){a.setCurrentIndex(s),o.setCurrentIndex(s);var c=0;IG(o)&&(c|=1),LG(o)&&(c|=2);var l;switch(c){case 1:l=`fina`;break;case 2:l=`init`;break;case 3:l=`medi`;break}if(r.indexOf(l)!==-1){var u=t.query.lookupFeature({tag:l,script:n,contextParams:a});if(u instanceof Error)return console.info(u.message);u.forEach(function(e,t){e instanceof gG&&(FG(e,i,t),a.context[t]=e.substitution)})}}})}}function zG(e,t){return new oG(e.map(function(e){return e.activeState.value}),t||0)}function BG(e){var t=this,n=`arab`,r=this.tokenizer.getRangeTokens(e),i=zG(r);i.context.forEach(function(e,a){i.setCurrentIndex(a);var o=t.query.lookupFeature({tag:`rlig`,script:n,contextParams:i});o.length&&(o.forEach(function(e){return FG(e,r,a)}),i=zG(r))})}function VG(e){var t=e.current,n=e.get(-1);return n===null&&pG(t)||!pG(n)&&pG(t)}function HG(e){var t=e.get(1);return t===null||!pG(t)}var UG={startCheck:VG,endCheck:HG};function WG(e,t){return new oG(e.map(function(e){return e.activeState.value}),t||0)}function GG(e){var t=this,n=`latn`,r=this.tokenizer.getRangeTokens(e),i=WG(r);i.context.forEach(function(e,a){i.setCurrentIndex(a);var o=t.query.lookupFeature({tag:`liga`,script:n,contextParams:i});o.length&&(o.forEach(function(e){return FG(e,r,a)}),i=WG(r))})}function KG(e){this.baseDir=e||`ltr`,this.tokenizer=new lG,this.featuresTags={}}KG.prototype.setText=function(e){this.text=e},KG.prototype.contextChecks={latinWordCheck:UG,arabicWordCheck:EG,arabicSentenceCheck:kG};function qG(e){var t=this.contextChecks[e+`Check`];return this.tokenizer.registerContextChecker(e,t.startCheck,t.endCheck)}function JG(){return qG.call(this,`latinWord`),qG.call(this,`arabicWord`),qG.call(this,`arabicSentence`),this.tokenizer.tokenize(this.text)}function YG(){var e=this;this.tokenizer.getContextRanges(`arabicSentence`).forEach(function(t){var n=e.tokenizer.getRangeTokens(t);e.tokenizer.replaceRange(t.startIndex,t.endOffset,n.reverse())})}KG.prototype.registerFeatures=function(e,t){var n=this,r=t.filter(function(t){return n.query.supports({script:e,tag:t})});this.featuresTags.hasOwnProperty(e)?this.featuresTags[e]=this.featuresTags[e].concat(r):this.featuresTags[e]=r},KG.prototype.applyFeatures=function(e,t){if(!e)throw Error(`No valid font was provided to apply features`);this.query||=new hG(e);for(var n=0;n<t.length;n++){var r=t[n];this.query.supports({script:r.script})&&this.registerFeatures(r.script,r.tags)}},KG.prototype.registerModifier=function(e,t,n){this.tokenizer.registerModifier(e,t,n)};function XG(){if(this.tokenizer.registeredModifiers.indexOf(`glyphIndex`)===-1)throw Error(`glyphIndex modifier is required to apply arabic presentation features.`)}function ZG(){var e=this;this.featuresTags.hasOwnProperty(`arab`)&&(XG.call(this),this.tokenizer.getContextRanges(`arabicWord`).forEach(function(t){RG.call(e,t)}))}function QG(){var e=this,t=`arab`;this.featuresTags.hasOwnProperty(t)&&this.featuresTags[t].indexOf(`rlig`)!==-1&&(XG.call(this),this.tokenizer.getContextRanges(`arabicWord`).forEach(function(t){BG.call(e,t)}))}function $G(){var e=this,t=`latn`;this.featuresTags.hasOwnProperty(t)&&this.featuresTags[t].indexOf(`liga`)!==-1&&(XG.call(this),this.tokenizer.getContextRanges(`latinWord`).forEach(function(t){GG.call(e,t)}))}KG.prototype.checkContextReady=function(e){return!!this.tokenizer.getContext(e)},KG.prototype.applyFeaturesToContexts=function(){this.checkContextReady(`arabicWord`)&&(ZG.call(this),QG.call(this)),this.checkContextReady(`latinWord`)&&$G.call(this),this.checkContextReady(`arabicSentence`)&&YG.call(this)},KG.prototype.processText=function(e){(!this.text||this.text!==e)&&(this.setText(e),JG.call(this),this.applyFeaturesToContexts())},KG.prototype.getBidiText=function(e){return this.processText(e),this.tokenizer.getText()},KG.prototype.getTextGlyphs=function(e){this.processText(e);for(var t=[],n=0;n<this.tokenizer.tokens.length;n++){var r=this.tokenizer.tokens[n];if(!r.state.deleted){var i=r.activeState.value;t.push(Array.isArray(i)?i[0]:i)}}return t};function eK(e){e||={},e.tables=e.tables||{},e.empty||(PH(e.familyName,`When creating a new Font object, familyName is required.`),PH(e.styleName,`When creating a new Font object, styleName is required.`),PH(e.unitsPerEm,`When creating a new Font object, unitsPerEm is required.`),PH(e.ascender,`When creating a new Font object, ascender is required.`),PH(e.descender<=0,`When creating a new Font object, negative descender value is required.`),this.names={fontFamily:{en:e.familyName||` `},fontSubfamily:{en:e.styleName||` `},fullName:{en:e.fullName||e.familyName+` `+e.styleName},postScriptName:{en:e.postScriptName||(e.familyName+e.styleName).replace(/\s/g,``)},designer:{en:e.designer||` `},designerURL:{en:e.designerURL||` `},manufacturer:{en:e.manufacturer||` `},manufacturerURL:{en:e.manufacturerURL||` `},license:{en:e.license||` `},licenseURL:{en:e.licenseURL||` `},version:{en:e.version||`Version 0.1`},description:{en:e.description||` `},copyright:{en:e.copyright||` `},trademark:{en:e.trademark||` `}},this.unitsPerEm=e.unitsPerEm||1e3,this.ascender=e.ascender,this.descender=e.descender,this.createdTimestamp=e.createdTimestamp,this.tables=Object.assign(e.tables,{os2:Object.assign({usWeightClass:e.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:e.widthClass||this.usWidthClasses.MEDIUM,fsSelection:e.fsSelection||this.fsSelectionValues.REGULAR},e.tables.os2)})),this.supported=!0,this.glyphs=new IB.GlyphSet(this,e.glyphs||[]),this.encoding=new bB(this),this.position=new DH(this),this.substitution=new OH(this),this.tables=this.tables||{},this._push=null,this._hmtxTableData={},Object.defineProperty(this,"hinting",{get:function(){if(this._hinting)return this._hinting;if(this.outlinesFormat===`truetype`)return this._hinting=new YH(this)}})}eK.prototype.hasChar=function(e){return this.encoding.charToGlyphIndex(e)!==null},eK.prototype.charToGlyphIndex=function(e){return this.encoding.charToGlyphIndex(e)},eK.prototype.charToGlyph=function(e){var t=this.charToGlyphIndex(e),n=this.glyphs.get(t);return n||=this.glyphs.get(0),n},eK.prototype.updateFeatures=function(e){return this.defaultRenderOptions.features.map(function(t){return t.script===`latn`?{script:`latn`,tags:t.tags.filter(function(t){return e[t]})}:t})},eK.prototype.stringToGlyphs=function(e,t){var n=this,r=new KG;r.registerModifier(`glyphIndex`,null,function(e){return n.charToGlyphIndex(e.char)});var i=t?this.updateFeatures(t.features):this.defaultRenderOptions.features;r.applyFeatures(this,i);for(var a=r.getTextGlyphs(e),o=a.length,s=Array(o),c=this.glyphs.get(0),l=0;l<o;l+=1)s[l]=this.glyphs.get(a[l])||c;return s},eK.prototype.nameToGlyphIndex=function(e){return this.glyphNames.nameToGlyphIndex(e)},eK.prototype.nameToGlyph=function(e){var t=this.nameToGlyphIndex(e),n=this.glyphs.get(t);return n||=this.glyphs.get(0),n},eK.prototype.glyphIndexToName=function(e){return this.glyphNames.glyphIndexToName?this.glyphNames.glyphIndexToName(e):``},eK.prototype.getKerningValue=function(e,t){e=e.index||e,t=t.index||t;var n=this.position.defaultKerningTables;return n?this.position.getKerningValue(n,e,t):this.kerningPairs[e+`,`+t]||0},eK.prototype.defaultRenderOptions={kerning:!0,features:[{script:`arab`,tags:[`init`,`medi`,`fina`,`rlig`]},{script:`latn`,tags:[`liga`,`rlig`]}]},eK.prototype.forEachGlyph=function(e,t,n,r,i,a){t=t===void 0?0:t,n=n===void 0?0:n,r=r===void 0?72:r,i=Object.assign({},this.defaultRenderOptions,i);var o=1/this.unitsPerEm*r,s=this.stringToGlyphs(e,i),c;if(i.kerning){var l=i.script||this.position.getDefaultScriptName();c=this.position.getKerningTables(l,i.language)}for(var u=0;u<s.length;u+=1){var d=s[u];if(a.call(this,d,t,n,r,i),d.advanceWidth&&(t+=d.advanceWidth*o),i.kerning&&u<s.length-1){var f=c?this.position.getKerningValue(c,d.index,s[u+1].index):this.getKerningValue(d,s[u+1]);t+=f*o}i.letterSpacing?t+=i.letterSpacing*r:i.tracking&&(t+=i.tracking/1e3*r)}return t},eK.prototype.getPath=function(e,t,n,r,i){var a=new Oz;return this.forEachGlyph(e,t,n,r,i,function(e,t,n,r){var o=e.getPath(t,n,r,i,this);a.extend(o)}),a},eK.prototype.getPaths=function(e,t,n,r,i){var a=[];return this.forEachGlyph(e,t,n,r,i,function(e,t,n,r){var o=e.getPath(t,n,r,i,this);a.push(o)}),a},eK.prototype.getAdvanceWidth=function(e,t,n){return this.forEachGlyph(e,0,0,t,n,function(){})},eK.prototype.draw=function(e,t,n,r,i,a){this.getPath(t,n,r,i,a).draw(e)},eK.prototype.drawPoints=function(e,t,n,r,i,a){this.forEachGlyph(t,n,r,i,a,function(t,n,r,i){t.drawPoints(e,n,r,i)})},eK.prototype.drawMetrics=function(e,t,n,r,i,a){this.forEachGlyph(t,n,r,i,a,function(t,n,r,i){t.drawMetrics(e,n,r,i)})},eK.prototype.getEnglishName=function(e){var t=this.names[e];if(t)return t.en},eK.prototype.validate=function(){var e=this;function t(t){var n=e.getEnglishName(t);n&&n.trim().length}t(`fontFamily`),t(`weightName`),t(`manufacturer`),t(`copyright`),t(`version`),this.unitsPerEm},eK.prototype.toTables=function(){return SH.fontToTable(this)},eK.prototype.toBuffer=function(){return console.warn(`Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.`),this.toArrayBuffer()},eK.prototype.toArrayBuffer=function(){for(var e=this.toTables().encode(),t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0;r<e.length;r++)n[r]=e[r];return t},eK.prototype.download=function(e){var t=this.getEnglishName(`fontFamily`),n=this.getEnglishName(`fontSubfamily`);e||=t.replace(/\s/g,``)+`-`+n+`.otf`;var r=this.toArrayBuffer();if(jH())if(window.URL=window.URL||window.webkitURL,window.URL){var i=new DataView(r),a=new Blob([i],{type:`font/opentype`}),o=document.createElement(`a`);o.href=window.URL.createObjectURL(a),o.download=e;var s=document.createEvent(`MouseEvents`);s.initEvent(`click`,!0,!1),o.dispatchEvent(s)}else console.warn(`Font file could not be downloaded. Try using a different browser.`);else{var c=ez(),l=NH(r);c.writeFileSync(e,l)}},eK.prototype.fsSelectionValues={ITALIC:1,UNDERSCORE:2,NEGATIVE:4,OUTLINED:8,STRIKEOUT:16,BOLD:32,REGULAR:64,USER_TYPO_METRICS:128,WWS:256,OBLIQUE:512},eK.prototype.usWidthClasses={ULTRA_CONDENSED:1,EXTRA_CONDENSED:2,CONDENSED:3,SEMI_CONDENSED:4,MEDIUM:5,SEMI_EXPANDED:6,EXPANDED:7,EXTRA_EXPANDED:8,ULTRA_EXPANDED:9},eK.prototype.usWeightClasses={THIN:100,EXTRA_LIGHT:200,LIGHT:300,NORMAL:400,MEDIUM:500,SEMI_BOLD:600,BOLD:700,EXTRA_BOLD:800,BLACK:900};function tK(e,t){var n=JSON.stringify(e),r=256;for(var i in t){var a=parseInt(i);if(!(!a||a<256)){if(JSON.stringify(t[i])===n)return a;r<=a&&(r=a+1)}}return t[r]=e,r}function nK(e,t,n){var r=tK(t.name,n);return[{name:`tag_`+e,type:`TAG`,value:t.tag},{name:`minValue_`+e,type:`FIXED`,value:t.minValue<<16},{name:`defaultValue_`+e,type:`FIXED`,value:t.defaultValue<<16},{name:`maxValue_`+e,type:`FIXED`,value:t.maxValue<<16},{name:`flags_`+e,type:`USHORT`,value:0},{name:`nameID_`+e,type:`USHORT`,value:r}]}function rK(e,t,n){var r={},i=new Z.Parser(e,t);return r.tag=i.parseTag(),r.minValue=i.parseFixed(),r.defaultValue=i.parseFixed(),r.maxValue=i.parseFixed(),i.skip(`uShort`,1),r.name=n[i.parseUShort()]||{},r}function iK(e,t,n,r){for(var i=tK(t.name,r),a=[{name:`nameID_`+e,type:`USHORT`,value:i},{name:`flags_`+e,type:`USHORT`,value:0}],o=0;o<n.length;++o){var s=n[o].tag;a.push({name:`axis_`+e+` `+s,type:`FIXED`,value:t.coordinates[s]<<16})}return a}function aK(e,t,n,r){var i={},a=new Z.Parser(e,t);i.name=r[a.parseUShort()]||{},a.skip(`uShort`,1),i.coordinates={};for(var o=0;o<n.length;++o)i.coordinates[n[o].tag]=a.parseFixed();return i}function oK(e,t){var n=new Y.Table(`fvar`,[{name:`version`,type:`ULONG`,value:65536},{name:`offsetToData`,type:`USHORT`,value:0},{name:`countSizePairs`,type:`USHORT`,value:2},{name:`axisCount`,type:`USHORT`,value:e.axes.length},{name:`axisSize`,type:`USHORT`,value:20},{name:`instanceCount`,type:`USHORT`,value:e.instances.length},{name:`instanceSize`,type:`USHORT`,value:4+e.axes.length*4}]);n.offsetToData=n.sizeOf();for(var r=0;r<e.axes.length;r++)n.fields=n.fields.concat(nK(r,e.axes[r],t));for(var i=0;i<e.instances.length;i++)n.fields=n.fields.concat(iK(i,e.instances[i],e.axes,t));return n}function sK(e,t,n){var r=new Z.Parser(e,t),i=r.parseULong();K.argument(i===65536,`Unsupported fvar table version.`);var a=r.parseOffset16();r.skip(`uShort`,1);for(var o=r.parseUShort(),s=r.parseUShort(),c=r.parseUShort(),l=r.parseUShort(),u=[],d=0;d<o;d++)u.push(rK(e,t+a+d*s,n));for(var f=[],p=t+a+o*s,m=0;m<c;m++)f.push(aK(e,p+m*l,u,n));return{axes:u,instances:f}}var cK={make:oK,parse:sK},lK=function(){return{coverage:this.parsePointer(X.coverage),attachPoints:this.parseList(X.pointer(X.uShortList))}},uK=function(){var e=this.parseUShort();if(K.argument(e===1||e===2||e===3,`Unsupported CaretValue table version.`),e===1)return{coordinate:this.parseShort()};if(e===2)return{pointindex:this.parseShort()};if(e===3)return{coordinate:this.parseShort()}},dK=function(){return this.parseList(X.pointer(uK))},fK=function(){return{coverage:this.parsePointer(X.coverage),ligGlyphs:this.parseList(X.pointer(dK))}},pK=function(){return this.parseUShort(),this.parseList(X.pointer(X.coverage))};function mK(e,t){t||=0;var n=new X(e,t),r=n.parseVersion(1);K.argument(r===1||r===1.2||r===1.3,`Unsupported GDEF table version.`);var i={version:r,classDef:n.parsePointer(X.classDef),attachList:n.parsePointer(lK),ligCaretList:n.parsePointer(fK),markAttachClassDef:n.parsePointer(X.classDef)};return r>=1.2&&(i.markGlyphSets=n.parsePointer(pK)),i}var hK={parse:mK},gK=Array(10);gK[1]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{posFormat:1,coverage:this.parsePointer(X.coverage),value:this.parseValueRecord()};if(t===2)return{posFormat:2,coverage:this.parsePointer(X.coverage),values:this.parseValueRecordList()};K.assert(!1,`0x`+e.toString(16)+`: GPOS lookup type 1 format must be 1 or 2.`)},gK[2]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();K.assert(t===1||t===2,`0x`+e.toString(16)+`: GPOS lookup type 2 format must be 1 or 2.`);var n=this.parsePointer(X.coverage),r=this.parseUShort(),i=this.parseUShort();if(t===1)return{posFormat:t,coverage:n,valueFormat1:r,valueFormat2:i,pairSets:this.parseList(X.pointer(X.list(function(){return{secondGlyph:this.parseUShort(),value1:this.parseValueRecord(r),value2:this.parseValueRecord(i)}})))};if(t===2){var a=this.parsePointer(X.classDef),o=this.parsePointer(X.classDef),s=this.parseUShort(),c=this.parseUShort();return{posFormat:t,coverage:n,valueFormat1:r,valueFormat2:i,classDef1:a,classDef2:o,class1Count:s,class2Count:c,classRecords:this.parseList(s,X.list(c,function(){return{value1:this.parseValueRecord(r),value2:this.parseValueRecord(i)}}))}}},gK[3]=function(){return{error:`GPOS Lookup 3 not supported`}},gK[4]=function(){return{error:`GPOS Lookup 4 not supported`}},gK[5]=function(){return{error:`GPOS Lookup 5 not supported`}},gK[6]=function(){return{error:`GPOS Lookup 6 not supported`}},gK[7]=function(){return{error:`GPOS Lookup 7 not supported`}},gK[8]=function(){return{error:`GPOS Lookup 8 not supported`}},gK[9]=function(){return{error:`GPOS Lookup 9 not supported`}};function _K(e,t){t||=0;var n=new X(e,t),r=n.parseVersion(1);return K.argument(r===1||r===1.1,`Unsupported GPOS table version `+r),r===1?{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(gK)}:{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(gK),variations:n.parseFeatureVariationsList()}}var vK=Array(10);function yK(e){return new Y.Table(`GPOS`,[{name:`version`,type:`ULONG`,value:65536},{name:`scripts`,type:`TABLE`,value:new Y.ScriptList(e.scripts)},{name:`features`,type:`TABLE`,value:new Y.FeatureList(e.features)},{name:`lookups`,type:`TABLE`,value:new Y.LookupList(e.lookups,vK)}])}var bK={parse:_K,make:yK};function xK(e){var t={};e.skip(`uShort`);var n=e.parseUShort();K.argument(n===0,`Unsupported kern sub-table version.`),e.skip(`uShort`,2);var r=e.parseUShort();e.skip(`uShort`,3);for(var i=0;i<r;i+=1){var a=e.parseUShort(),o=e.parseUShort(),s=e.parseShort();t[a+`,`+o]=s}return t}function SK(e){var t={};e.skip(`uShort`),e.parseULong()>1&&console.warn(`Only the first kern subtable is supported.`),e.skip(`uLong`);var n=e.parseUShort()&255;if(e.skip(`uShort`),n===0){var r=e.parseUShort();e.skip(`uShort`,3);for(var i=0;i<r;i+=1){var a=e.parseUShort(),o=e.parseUShort(),s=e.parseShort();t[a+`,`+o]=s}}return t}function CK(e,t){var n=new Z.Parser(e,t),r=n.parseUShort();if(r===0)return xK(n);if(r===1)return SK(n);throw Error(`Unsupported kern table version (`+r+`).`)}var wK={parse:CK};function TK(e,t,n,r){for(var i=new Z.Parser(e,t),a=r?i.parseUShort:i.parseULong,o=[],s=0;s<n+1;s+=1){var c=a.call(i);r&&(c*=2),o.push(c)}return o}var EK={parse:TK};function DK(e,t){ez().readFile(e,function(e,n){if(e)return t(e.message);t(null,MH(n))})}function OK(e,t){var n=new XMLHttpRequest;n.open(`get`,e,!0),n.responseType=`arraybuffer`,n.onload=function(){return n.response?t(null,n.response):t(`Font could not be loaded: `+n.statusText)},n.onerror=function(){t(`Font could not be loaded`)},n.send()}function kK(e,t){for(var n=[],r=12,i=0;i<t;i+=1){var a=Z.getTag(e,r),o=Z.getULong(e,r+4),s=Z.getULong(e,r+8),c=Z.getULong(e,r+12);n.push({tag:a,checksum:o,offset:s,length:c,compression:!1}),r+=16}return n}function AK(e,t){for(var n=[],r=44,i=0;i<t;i+=1){var a=Z.getTag(e,r),o=Z.getULong(e,r+4),s=Z.getULong(e,r+8),c=Z.getULong(e,r+12),l=void 0;l=s<c?`WOFF`:!1,n.push({tag:a,offset:o,compression:l,compressedLength:s,length:c}),r+=20}return n}function jK(e,t){if(t.compression===`WOFF`){var n=new Uint8Array(e.buffer,t.offset+2,t.compressedLength-2),r=new Uint8Array(t.length);if(Tz(n,r),r.byteLength!==t.length)throw Error(`Decompression error: `+t.tag+` decompressed length doesn't match recorded length`);return{data:new DataView(r.buffer,0),offset:0}}else return{data:e,offset:t.offset}}function MK(e,t){t??={};var n,r,i=new eK({empty:!0}),a=new DataView(e,0),o,s=[],c=Z.getTag(a,0);if(c===`\0\0\0`||c===`true`||c===`typ1`)i.outlinesFormat=`truetype`,o=Z.getUShort(a,4),s=kK(a,o);else if(c===`OTTO`)i.outlinesFormat=`cff`,o=Z.getUShort(a,4),s=kK(a,o);else if(c===`wOFF`){var l=Z.getTag(a,4);if(l===`\0\0\0`)i.outlinesFormat=`truetype`;else if(l===`OTTO`)i.outlinesFormat=`cff`;else throw Error(`Unsupported OpenType flavor `+c);o=Z.getUShort(a,12),s=AK(a,o)}else throw Error(`Unsupported OpenType signature `+c);for(var u,d,f,p,m,h,g,_,v,y,b,x,S=0;S<o;S+=1){var C=s[S],w=void 0;switch(C.tag){case`cmap`:w=jK(a,C),i.tables.cmap=hB.parse(w.data,w.offset),i.encoding=new xB(i.tables.cmap);break;case`cvt `:w=jK(a,C),x=new Z.Parser(w.data,w.offset),i.tables.cvt=x.parseShortList(C.length/2);break;case`fvar`:d=C;break;case`fpgm`:w=jK(a,C),x=new Z.Parser(w.data,w.offset),i.tables.fpgm=x.parseByteList(C.length);break;case`head`:w=jK(a,C),i.tables.head=xV.parse(w.data,w.offset),i.unitsPerEm=i.tables.head.unitsPerEm,n=i.tables.head.indexToLocFormat;break;case`hhea`:w=jK(a,C),i.tables.hhea=wV.parse(w.data,w.offset),i.ascender=i.tables.hhea.ascender,i.descender=i.tables.hhea.descender,i.numberOfHMetrics=i.tables.hhea.numberOfHMetrics;break;case`hmtx`:g=C;break;case`ltag`:w=jK(a,C),r=MV.parse(w.data,w.offset);break;case`maxp`:w=jK(a,C),i.tables.maxp=FV.parse(w.data,w.offset),i.numGlyphs=i.tables.maxp.numGlyphs;break;case`name`:y=C;break;case`OS/2`:w=jK(a,C),i.tables.os2=nH.parse(w.data,w.offset);break;case`post`:w=jK(a,C),i.tables.post=aH.parse(w.data,w.offset),i.glyphNames=new CB(i.tables.post);break;case`prep`:w=jK(a,C),x=new Z.Parser(w.data,w.offset),i.tables.prep=x.parseByteList(C.length);break;case`glyf`:f=C;break;case`loca`:v=C;break;case`CFF `:u=C;break;case`kern`:_=C;break;case`GDEF`:p=C;break;case`GPOS`:m=C;break;case`GSUB`:h=C;break;case`meta`:b=C;break}}var ee=jK(a,y);if(i.tables.name=ZV.parse(ee.data,ee.offset,r),i.names=i.tables.name,f&&v){var te=n===0,ne=jK(a,v),re=EK.parse(ne.data,ne.offset,i.numGlyphs,te),ie=jK(a,f);i.glyphs=WH.parse(ie.data,ie.offset,re,i,t)}else if(u){var ae=jK(a,u);vV.parse(ae.data,ae.offset,i,t)}else throw Error(`Font doesn't contain TrueType or CFF outlines.`);var oe=jK(a,g);if(kV.parse(i,oe.data,oe.offset,i.numberOfHMetrics,i.numGlyphs,i.glyphs,t),EB(i,t),_){var se=jK(a,_);i.kerningPairs=wK.parse(se.data,se.offset)}else i.kerningPairs={};if(p){var ce=jK(a,p);i.tables.gdef=hK.parse(ce.data,ce.offset)}if(m){var le=jK(a,m);i.tables.gpos=bK.parse(le.data,le.offset),i.position.init()}if(h){var ue=jK(a,h);i.tables.gsub=dH.parse(ue.data,ue.offset)}if(d){var de=jK(a,d);i.tables.fvar=cK.parse(de.data,de.offset,i.names)}if(b){var fe=jK(a,b);i.tables.meta=mH.parse(fe.data,fe.offset),i.metas=i.tables.meta}return i}function NK(e,t,n){n??={};var r=typeof window>`u`&&!n.isUrl?DK:OK;return new Promise(function(i,a){r(e,function(e,r){if(e){if(t)return t(e);a(e)}var o;try{o=MK(r,n)}catch(e){if(t)return t(e,null);a(e)}if(t)return t(null,o);i(o)})})}function PK(e,t){return MK(MH(ez().readFileSync(e)),t)}var FK=Object.freeze({__proto__:null,Font:eK,Glyph:AB,Path:Oz,BoundingBox:Dz,_parse:Z,parse:MK,load:NK,loadSync:PK}),IK=class e{sketches;constructor(e){e.length===0&&M(`CompoundSketch`,`Cannot create CompoundSketch with an empty array of sketches`),this.sketches=e}delete(){this.sketches.forEach(e=>{e.delete()})}get outerSketch(){return cA(this.sketches)}get innerSketches(){return this.sketches.slice(1)}get wires(){return JK(this)}face(){return qK(this)}extrude(e,t={}){return YK(this,e,t)}revolve(e,t={}){return XK(this,e,t)}loftWith(t,n={}){return Array.isArray(t)||!(t instanceof e)?M(`CompoundSketch.loftWith`,`A compound (face-with-holes) sketch can only loft to another compound sketch with the same number of sub-sketches.`):ZK(this,t,n)}sweepSketch(){return M(`CompoundSketch.sweepSketch`,`Sweeping a compound (face-with-holes) profile is not supported — sweep its outer Sketch instead.`)}};function LK(e){let t={};e.defaultOrigin&&(t.defaultOrigin=e.defaultOrigin),e.defaultDirection&&(t.defaultDirection=e.defaultDirection);let n=new QK(e.wire,t);return e.baseFace&&(n.baseFace=e.baseFace),n}function RK(e){return new IK(e.map(LK))}function zK(e){if(e instanceof QK)return e;let t=e.sketches;if(Array.isArray(t)){let[e,...n]=t;if(e instanceof QK){for(let e of n)e.delete();return e}}M(`asSketch`,`Expected a single-wire profile to loft or sweep.`)}function BK(e){let t;return t=e.baseFace?TA(e.baseFace,e.wire):j(CA(e.wire)),t}function VK(e){return _E(j(tO(e.wire.wrapped)))}function HK(e,t,{origin:n}={}){let r=j(CA(e.wire)),i=j(yM(r,n?bD(n):e.defaultOrigin,t?bD(t):[0,0,1]));return r[Symbol.dispose](),e.delete(),i}function UK(e,t,{extrusionDirection:n,extrusionProfile:r,twistAngle:i,origin:a}={}){let o=ED(ND(n?bD(n):e.defaultDirection),t),s=a?bD(a):e.defaultOrigin;if(r&&!i){let t=j(fM(e.wire,[...s],[...o],r));return e.delete(),t}if(i){let t=j(pM(e.wire,i,[...s],[...o],r));return e.delete(),t}let c=j(CA(e.wire)),l=j(vM(c,[...o]));return c[Symbol.dispose](),e.delete(),l}function WK(e,t,n={}){let r=Sk(e.wire),i=ND(ED(Tk(e.wire,1e-9),-1)),a=e.defaultDirection,o=ED(kD(i,a),-1),s=zK(t(VD([...r],[...o],[...i]),[...r])),c={forceProfileSpineOthogonality:!0,...n};e.baseFace&&(c.support=e.baseFace.wrapped);let l=j(uM(s.wire,e.wire,c));return e.delete(),l}function GK(e,t,n={},r=!1){let i=[e,...(Array.isArray(t)?t:[t]).map(zK)],a=j(xM(i.map(e=>e.wire),n,r));return i.forEach(e=>{e.delete()}),a}var KK=(e,t)=>{let n=j(t(cA(e))),r=e.slice(1).map(e=>j(t(e)));if(r.length===0)return n;try{return j(IA(n,r,{unsafe:!0}))}finally{n.delete();for(let e of r)e.delete()}};function qK(e){let t=e.outerSketch.face(),n=DA(t,e.innerSketches.map(e=>e.wire));return t[Symbol.dispose](),n}function JK(e){return ij(e.sketches.map(e=>e.wire))}function YK(e,t,{extrusionDirection:n,extrusionProfile:r,twistAngle:i,origin:a}={}){let o=ED(ND(n?bD(n):e.outerSketch.defaultDirection),t);if(r&&!i)return KK(e.sketches,t=>fM(t.wire,a?bD(a):e.outerSketch.defaultOrigin,o,r));if(i)return KK(e.sketches,t=>pM(t.wire,i,a?bD(a):e.outerSketch.defaultOrigin,o,r));let s=qK(e),c=j(vM(s,o));return s[Symbol.dispose](),c}function XK(e,t,{origin:n}={}){let r=n?bD(n):e.outerSketch.defaultOrigin,i=t?bD(t):[0,0,1],a=qK(e),o=j(yM(a,r,i));return a[Symbol.dispose](),o}function ZK(e,t,n={}){e.sketches.length!==t.sketches.length&&M(`CompoundSketch.loftWith`,`You need to loft with another compound with the same number of sketches`);let r=e.sketches.map((e,r)=>{let i=sA(t.sketches,r),a={};return n.ruled!==void 0&&(a.ruled=n.ruled),e.clone().loftWith(i.clone(),a,!0)}),i=qK(e),a=vE(j(tO(i.wrapped)));i[Symbol.dispose](),r.push(a,qK(t));let o=j(aj(r));for(let e of r)e[Symbol.dispose]();return o}var QK=class e{wire;_defaultOrigin;_defaultDirection;_baseFace;constructor(e,{defaultOrigin:t=[0,0,0],defaultDirection:n=[0,0,1]}={}){this.wire=e,this._defaultOrigin=bD(t),this._defaultDirection=bD(n),this.baseFace=null}get baseFace(){return this._baseFace}set baseFace(e){this._baseFace&&this._baseFace[Symbol.dispose](),this._baseFace=e&&vE(j(tO(e.wrapped)))}delete(){this.wire[Symbol.dispose](),this.baseFace&&this.baseFace[Symbol.dispose]()}clone(){let t=_E(j(tO(this.wire.wrapped))),n=new e(t,{defaultOrigin:this.defaultOrigin,defaultDirection:this.defaultDirection});return this.baseFace&&(n.baseFace=vE(j(tO(this.baseFace.wrapped)))),n}get defaultOrigin(){return this._defaultOrigin}set defaultOrigin(e){this._defaultOrigin=bD(e)}get defaultDirection(){return this._defaultDirection}set defaultDirection(e){this._defaultDirection=bD(e)}face(){return BK(this)}wires(){return VK(this)}faces(){return this.face()}revolve(e,t={}){return HK(this,e,t)}extrude(e,t={}){return UK(this,e,t)}sweepSketch(e,t={}){return WK(this,e,t)}loftWith(e,t={},n=!1){return GK(this,e,t,n)}},$K=class{sketches;constructor(e){this.sketches=e}soleSketch(e){this.sketches.length!==1&&M(`Sketches.${e}`,`Multiple profiles — ${e} each sub-sketch individually.`);let t=cA(this.sketches);return t instanceof QK||M(`Sketches.${e}`,`${e} is only supported on single-wire profiles.`),t}face(){return this.sketches.length!==1&&M(`Sketches.face`,`Multiple profiles — use faces() to combine them.`),cA(this.sketches).face()}loftWith(e,t,n){return this.soleSketch(`loftWith`).loftWith(e,t,n)}sweepSketch(e,t){return this.soleSketch(`sweepSketch`).sweepSketch(e,t)}wires(){return ij(this.sketches.flatMap(e=>e instanceof QK?[e.wire]:e.sketches.map(e=>e.wire)))}faces(){return ij(this.sketches.map(e=>e.face()))}extrude(e,t={}){return ij(this.sketches.map(n=>n.extrude(e,t)))}revolve(e,t){return ij(this.sketches.map(n=>n.revolve(e,t)))}},eq={};async function tq(e,t=`default`,n=!1){if(!n&&eq[t])return O(eq[t]);let r;if(typeof e==`string`){let t;try{t=await fetch(e)}catch(t){return k(vo(N.FONT_FETCH_FAILED,`Failed to fetch font from ${e}: ${t instanceof Error?t.message:String(t)}`,t))}if(!t.ok)return k(vo(N.FONT_FETCH_FAILED,`Failed to fetch font from ${e}: HTTP ${t.status} ${t.statusText}`));r=await t.arrayBuffer()}else r=e;let i;try{i=FK.parse(r)}catch(e){return k(vo(N.FONT_PARSE_FAILED,`Failed to parse font data: ${e instanceof Error?e.message:String(e)}`,e))}let a=i;return eq[t]=a,eq.default||=a,O(a)}var nq=(e=`default`)=>eq[e],rq=function*(e){let t=null,n=null;for(let r of e){if(r.type===`Z`){t&&(yield t.close()),t=null;continue}let e=[-r.x,r.y];if(r.type===`M`){t&&(yield t.done()),t=new sR,t.movePointerTo(e),n=e;continue}n&&Math.abs(e[0]-n[0])<1e-9&&Math.abs(e[1]-n[1])<1e-9||(r.type===`L`&&t?.lineTo(e),r.type===`C`&&t?.cubicBezierCurveTo(e,[-r.x1,r.y1],[-r.x2,r.y2]),r.type===`Q`&&t?.quadraticBezierCurveTo(e,[-r.x1,r.y1]),n=e)}};function iq(e,{startX:t=0,startY:n=0,fontSize:r=16,fontFamily:i=`default`}={}){let a=nq(i);a||=nq(),a||M(`text`,`No fonts loaded. Call loadFont() before using text functions.`);let o=a.getPath(e,-t,-n,r);return XL(Array.from(rq(o.commands))).mirror([0,0])}var aq={XY:{dir:[0,0,1],xAxis:[1,0,0]},XZ:{dir:[0,-1,0],xAxis:[1,0,0]},YZ:{dir:[1,0,0],xAxis:[0,1,0]},YX:{dir:[0,0,-1],xAxis:[0,1,0]},ZX:{dir:[0,1,0],xAxis:[0,0,1]},ZY:{dir:[-1,0,0],xAxis:[0,0,1]},front:{dir:[0,-1,0],xAxis:[1,0,0]},back:{dir:[0,1,0],xAxis:[-1,0,0]},right:{dir:[-1,0,0],xAxis:[0,-1,0]},left:{dir:[1,0,0],xAxis:[0,1,0]},bottom:{dir:[0,0,1],xAxis:[1,0,0]},top:{dir:[0,0,-1],xAxis:[1,0,0]}};function oq(e){return typeof e==`string`&&e in aq}var sq=e=>{try{var t=OT();return e.IsNull()?[]:QE(t.u(W(e))).map(e=>j(mk(e)))}catch(e){t.e=e}finally{t.d()}};function cq(e,t,n=!0){let r=U().projectEdges(e.wrapped,[...t.position],[...t.direction],[...t.xAxis]),i=[...sq(r.visible.sharp),...sq(r.visible.smooth),...sq(r.visible.outline)],a=[...sq(r.hidden.sharp),...sq(r.hidden.smooth),...sq(r.hidden.outline)],o;if(n)o=a;else{for(let e of a)e[Symbol.dispose]();o=[]}return{visible:i,hidden:o}}function lq(e=[0,0,0],t=[0,0,1],n){if(AD(t)<1e-12)return k(F(`CAMERA_ZERO_DIRECTION`,`Camera direction cannot be a zero-length vector`));let r;if(n)r=ND(n);else{let e=kD([0,0,1],t);AD(e)<1e-12&&(e=kD([0,1,0],t)),AD(e)<1e-12&&(e=kD([1,0,0],t)),r=ND(e)}let i=ND(kD(t,r));return O({position:e,direction:ND(t),xAxis:r,yAxis:i})}function uq(e,t){let n=ND(TD(e.position,t));return lq(e.position,n)}function dq(e){let t=aq[e];return lq([0,0,0],t.dir,t.xAxis)}function fq(e,t,n=!0){return cq(e,t,n)}var pq=(e,n=1e-7)=>{if(e.length===0)return[];let r=new AL(e.length);e.forEach(e=>{let[t,i]=e.firstPoint;r.add(t-n,i-n,t+n,i+n)}),r.finish();let i=[],a=new Set;return e.forEach((o,s)=>{if(a.has(s))return;let c=[o],l=s;a.add(s);let u=e.length;for(;;){u--<0&&M(`stitchCurves`,`Infinite loop detected`);let[o,s]=t(c,c.length-1).lastPoint,d=r.search(o-n,s-n,o+n,s+n),f=t=>Math.abs((l-t)%e.length),p=d.filter(e=>!a.has(e)).map(n=>[t(e,n),n,f(n)]).sort(([,,e],[,,t])=>e-t);if(p.length===0){i.push(c);break}let[m,h]=t(p,0);c.push(m),a.add(h),l=h}}),i},mq=class extends oR{plane;constructor(e,t){super(),this.plane=e&&typeof e!=`string`?{...e}:j(WD(e??`XY`,t))}delete(){this.pendingCurves=[]}sagittaArcTo(e,t){return super.sagittaArcTo(e,-t)}buildWire(){try{var e=OT();this.pendingCurves.length||M(`Sketcher.buildWire`,`No lines to convert into a wire`);let t=e.u(new VT);return j(SA(pL(this.pendingCurves,this.plane).map(e=>t.register(e))))}catch(t){e.e=t}finally{e.d()}}done(){return new QK(this.buildWire(),{defaultOrigin:this.plane.origin,defaultDirection:this.plane.zDir})}close(){return this._closeSketch(),this.done()}closeWithMirror(){hI(this.pointer,this.firstPoint)&&M(`Sketcher.closeWithMirror`,`Cannot close with a mirror when the sketch is already closed`);let e=this.buildWire(),t=KD(this.plane,this.pointer),n=kD(ND(TD(t,KD(this.plane,this.firstPoint))),this.plane.zDir),r=j(eO(e.wrapped));return new QK(j(SA([e,_E(j(eO(U().mirror(r,bD(t),bD(n)))))])),{defaultOrigin:this.plane.origin,defaultDirection:this.plane.zDir})}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}},hq=class extends oR{face;_bounds;constructor(e,t=[0,0]){super(t),this.face=vE(j(tO(e.wrapped))),this._bounds=uO(e)}_convertToUV([e,t]){let{uMin:n,uMax:r,vMin:i,vMax:a}=this._bounds;return[n+e*(r-n),i+t*(a-i)]}_convertFromUV([e,t]){let{uMin:n,uMax:r,vMin:i,vMax:a}=this._bounds;return[(e-n)/(r-n),(t-i)/(a-i)]}_adaptSurface(){return U().extractSurfaceFromFace(this.face.wrapped)}buildWire(){let e=U(),t=this._adaptSurface(),n=j(SA(this.pendingCurves.map(n=>gE(e.buildEdgeOnSurface(n.wrapped,t)))));return e.buildCurves3d(n.wrapped),n}done(){try{var e=OT();let t=e.u(new VT),n=this.buildWire(),r=new QK(n);if(Ok(n)){let e=t.register(r.clone().face()),n=dO(e,.5,.5),i=ED(mO(e),-1);r.defaultOrigin=[n[0],n[1],n[2]],r.defaultDirection=[i[0],i[1],i[2]]}else{let e=Sk(n),t=mO(this.face,[e[0],e[1],e[2]]);r.defaultOrigin=[e[0],e[1],e[2]],r.defaultDirection=[t[0],t[1],t[2]]}return r.baseFace=this.face,r}catch(t){e.e=t}finally{e.d()}}close(){return this._closeSketch(),this.done()}closeWithMirror(){return this._closeWithMirror(),this.close()}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}},gq=(e,t={})=>{try{var n=OT();let r=t.plane&&typeof t.plane!=`string`?{...t.plane}:j(WD(t.plane??`XY`,t.origin));return new QK(j(SA([n.u(new VT).register(pA(e,r.origin,r.zDir))])),{defaultOrigin:[...r.origin],defaultDirection:[...r.zDir]})}catch(e){n.e=e}finally{n.d()}},_q=(e=1,t=2,n={})=>{try{var r=OT();let i=n.plane&&typeof n.plane!=`string`?{...n.plane}:j(WD(n.plane??`XY`,n.origin)),a=i.xDir,o=e,s=t;return t>e&&(a=RD(a,i.zDir,90*vD),o=t,s=e),new QK(j(SA([r.u(new VT).register(j(mA(o,s,i.origin,i.zDir,a)))])),{defaultOrigin:[...i.origin],defaultDirection:[...i.zDir]})}catch(e){r.e=e}finally{r.d()}},vq=(e,t,n={})=>(n.plane&&typeof n.plane!=`string`?new mq(n.plane):new mq(n.plane,n.origin)).movePointerTo([-e/2,-t/2]).hLine(e).vLine(t).hLine(-e).vLine(-t).done(),yq=(e,t,n=0,r={})=>{let i=mR(e,t,n).sketchOnPlane(r.plane,r.origin),a={};return i.defaultOrigin&&(a.defaultOrigin=i.defaultOrigin),i.defaultDirection&&(a.defaultDirection=i.defaultDirection),new QK(i.wire,a)},bq=(e,t,n=0,r={})=>{let i=[...Array(t).keys()].map(n=>{let r=-(Math.PI*2/t)*n;return[e*Math.sin(r),e*Math.cos(r)]}),a=r.plane&&typeof r.plane!=`string`?new mq(r.plane):new mq(r.plane,r.origin),o=lA(i),s=a.movePointerTo([sA(o,0),sA(o,1)]);return n?i.forEach(e=>s.sagittaArcTo([sA(e,0),sA(e,1)],n)):i.forEach(e=>s.lineTo([sA(e,0),sA(e,1)])),s.done()},xq=(e,t,n=0)=>{let r=Math.PI/t,i=Math.cos(r)*e;return n>=0?i:i+n},Sq=(e,t)=>{let n=[...hO(e)],r=[...mO(e)];return new QK(j(Fk(vO(e),t)),{defaultOrigin:n,defaultDirection:r})},Cq=(e,t={},{pointsCount:n=400,start:r=0,stop:i=1}={},a={})=>{try{var o=OT();let s=o.u(new VT),c=t.plane&&typeof t.plane!=`string`?{...t.plane}:j(WD(t.plane??`XY`,t.origin)),l=(i-r)/n,u=[...Array(n+1).keys()].map(t=>{let n=e(r+t*l);return KD(c,n)});return new QK(j(SA([s.register(j(vA(u,a)))])),{defaultOrigin:[...c.origin],defaultDirection:[...c.zDir]})}catch(e){o.e=e}finally{o.d()}},wq=(e,t,n,r=[0,0,0],i=[0,0,1],a=!1)=>new QK(j(SA([hA(e,t,n,bD(r),bD(i),a)]))),Tq=(e,t,n)=>new mq().movePointerTo([-e/2,t/2]).hLine(e).vLine(-t).hLine(-e).close().extrude(n),Eq=(e,t)=>hI(e,t,pI*100),Dq=(e,t,n,r)=>{let i=e[0]-t[0],a=e[1]-t[1],o=n[0]-r[0],s=n[1]-r[1],c=i*s-a*o;if(Math.abs(c)<1e-12)return null;let l=e[0]*t[1]-e[1]*t[0],u=n[0]*r[1]-n[1]*r[0];return[(l*o-u*i)/c,(l*s-u*a)/c]};function Oq(e,t,n,r,i){let a=uL(t,n,r.original.lastPoint);e(r),e(a)}function kq(e,t,n,r,i){let a=nL(t,n);e(r),e(a)}function Aq(e,t,n,r,i){let a=Dq(r.offset instanceof QI?_I(t,r.offset.tangentAt(1)):r.offset.firstPoint,t,n,i.offset instanceof QI?gI(n,i.offset.tangentAt(0)):i.offset.lastPoint);if(!a){let i=nL(t,n);e(r),e(i);return}let o=bI([(t[0]+n[0])/2,(t[1]+n[1])/2],a),s=bI(t,n);if(s<1e-18||o>16*s){let i=nL(t,n);e(r),e(i);return}let c=nL(t,a),l=nL(a,n);e(r),e(c),e(l)}var jq={round:Oq,bevel:kq,miter:Aq};function Mq(e,t,n){let r=n.length===1?xo(n,0,`rawOffsets`):Nq(n,e.original.lastPoint),i=xo(e.offset.splitAt([r],pI),0,`rawOffsets`),a=t.offset.splitAt([r],pI).at(-1);return a||M(`offset.rawOffsets`,`Split produced no trailing curve segment`),{splitPrevious:{offset:i,original:e.original},splitCurrent:{offset:a,original:t.original}}}function Nq(e,t){let n=xo(e,0,`selectClosestIntersection`),r=bI(n,t);for(let i=1;i<e.length;i++){let a=xo(e,i,`selectClosestIntersection`),o=bI(a,t);o<r&&(r=o,n=a)}return n}function Pq(e){let t=new Map,n=(e,n)=>{let r=t.get(e)||[];t.set(e,[...r,...n])},r=new AL(e.length);for(let t of e){let[[e,n],[i,a]]=t.boundingBox.bounds;r.add(e,n,i,a)}return r.finish(),e.forEach((t,i)=>{let[[a,o],[s,c]]=t.boundingBox.bounds,l=r.search(a,o,s,c);for(let r of l){if(r<=i)continue;let a=xo(e,r,`offsetBlueprint`),{intersections:o,commonSegmentsPoints:s}=j(FL(t,a,pI)),c=[...o,...s].filter(e=>{let n=Eq(e,t.firstPoint)||Eq(e,t.lastPoint),r=Eq(e,a.firstPoint)||Eq(e,a.lastPoint);return!(n&&r)});c.length&&(n(i,c),n(r,c))}}),t}function Fq(e,t,n={}){let r=e.orientation===`clockwise`?-t:t,i=e.curves.map(e=>({offset:RL(e,r),original:e})),a=[],o=null,s=i.at(-1);if(!s)return[];function c(e){if(e instanceof QI){a.push(e);return}o?e.offset instanceof QI?a.push(e.offset):Eq(e.offset.firstPoint,e.offset.lastPoint)||a.push(nL(e.offset.firstPoint,e.offset.lastPoint)):o=e}let l=function*(){for(let e of i.slice(0,-1))yield e;o||M(`offset.rawOffsets`,`No saved curve after iterating offset segments`),yield o};for(let e of l()){let t=s.offset.lastPoint,r=e.offset.firstPoint;if(Eq(t,r)){c(s),s=e;continue}let i=[];if(s.offset instanceof QI&&e.offset instanceof QI){let{intersections:t,commonSegmentsPoints:n}=j(FL(s.offset,e.offset,pI/100));i=[...t,...n]}if(i.length>0){let{splitPrevious:t,splitCurrent:n}=Mq(s,e,i);c(t),s=n;continue}let a=jq[n.lineJoinType??`round`];a(c,t,r,s,e),s=e}return c(s),a}function Iq(e,n,r={}){let i=Fq(e,n,r);if(i.length<2)return null;let a=Pq(i);if(!a.size){let t=new EL(i);return e.intersects(t)?null:t}let o=i.flatMap((e,t)=>{if(!a.has(t))return e;let n=a.get(t)||[];return e.splitAt(n,pI*100)}),s=new AL(e.curves.length);for(let t of e.curves){let[[e,n],[r,i]]=t.boundingBox.bounds;s.add(e,n,r,i)}s.finish();let c=Math.abs(n),l=o.filter(n=>{let[[r,i],[a,o]]=n.boundingBox.bounds;return!s.search(r-c,i-c,a+c,o+c).some(r=>t(e.curves,r).distanceFrom(n)<c-pI)});if(!l.length)return null;let u=pq(l).filter(e=>e.length>1).map(e=>new EL(e)).filter(e=>e.isClosed());return u.length?u.length===1?xo(u,0,`offsetBlueprint`):new UL(u):null}var Lq=e=>{let t=xo(e,0,`fuseAll`);for(let n=1;n<e.length;n++)t=XR(t,xo(e,n,`fuseAll`));return t};function Rq(e,t,n={}){if(e instanceof EL)return Iq(e,t,n);if(e instanceof UL)return Lq(e.blueprints.map(e=>Rq(e,t,n)));if(e instanceof WL){let r=Lq(e.blueprints.slice(1).map(e=>Rq(e,-t,n)));return QR(Rq(xo(e.blueprints,0,`offset`),t,n),r)}return null}function zq(e,t){return e instanceof EL?new EL(tL(e.curves,t)):e instanceof WL?new WL(e.blueprints.map(e=>zq(e,t))):e instanceof UL?new UL(e.blueprints.map(e=>zq(e,t))):e}function Bq(e,t,n,r){let i=()=>!0;r&&(i=r.shouldKeep.bind(r));let a=[cA(t.curves)],o=(t,r)=>{i({firstCurve:t,secondCurve:r,point:t.lastPoint})?a.push(...e(t,r,n)):a.push(t,r)};t.curves.slice(1).forEach(e=>{let t=a.pop();t||M(`customCorners.modifyCorners`,`Unexpected empty curve stack during filleting`),o(t,e)});let s=a.at(-1);if(s||M(`customCorners.modifyCorners`,`Unexpected empty curve list during corner modification`),hI(cA(a).firstPoint,s.lastPoint)&&a.length>1){let e=a.pop(),t=a.shift();(!e||!t)&&M(`customCorners.modifyCorners`,`Unexpected empty curve stack during close-and-fillet`),o(e,t)}return new EL(a)}function Vq(e,t,n,r){return t instanceof EL?Bq(e,t,n,r):t instanceof WL?new WL(t.blueprints.map(t=>Bq(e,t,n,r))):t instanceof UL?new UL(t.blueprints.map(t=>Vq(e,t,n,r)).filter(e=>e!==null)):null}function Hq(e,t,n){return Vq(BL,e,t,n)}function Uq(e,t,n){return Vq(VL,e,t,n)}function Wq(e,t){return e instanceof EL?LK(t):e instanceof WL?RK(t):new $K(t.map(e=>Array.isArray(e)?RK(e):LK(e)))}var Gq=class e{innerShape;constructor(e=null){this.innerShape=e}clone(){return new e(this.innerShape?.clone()||null)}serialize(){if(!this.innerShape)return JSON.stringify({type:`Empty`});function e(t){if(t instanceof WL)return{type:`CompoundBlueprint`,blueprints:t.blueprints.map(e)};if(t instanceof UL)return{type:`Blueprints`,blueprints:t.blueprints.map(e)};if(t instanceof EL)return{type:`Blueprint`,curves:t.curves.map(e=>e.serialize())};M(`Drawing.serialize`,`Unknown shape type for serialization`)}return JSON.stringify(e(this.innerShape))}get boundingBox(){return this.innerShape?this.innerShape.boundingBox:new XI}stretch(t,n,r){return this.innerShape?new e(this.innerShape.stretch(t,n,r)):new e}get repr(){return this.innerShape===null?`=== empty shape`:this.innerShape.repr}rotate(t,n){return this.innerShape?new e(this.innerShape.rotate(t,n)):new e}translate(t,n=0){return this.innerShape?new e(typeof t==`number`?this.innerShape.translate(t,n):this.innerShape.translate(t)):new e}scale(t,n){return this.innerShape?new e(this.innerShape.scale(t,n)):new e}mirror(t,n,r){return this.innerShape?new e(this.innerShape.mirror(t,n,r)):new e}cut(t){return new e(QR(this.innerShape,t.innerShape))}fuse(t){return new e(XR(this.innerShape,t.innerShape))}intersect(t){return new e($R(this.innerShape,t.innerShape))}fillet(t,n){let r=n&&n(fR());return new e(Hq(this.innerShape,t,r))}chamfer(t,n){let r=n&&n(fR());return new e(Uq(this.innerShape,t,r))}sketchOnPlane(e,t){this.innerShape||M(`Drawing`,`Trying to sketch an empty drawing`);let n=this.innerShape.sketchOnPlane(e,t);return Wq(this.innerShape,n)}sketchOnFace(e,t){this.innerShape||M(`Drawing`,`Trying to sketch an empty drawing`);let n=this.innerShape.sketchOnFace(e,t);return Wq(this.innerShape,n)}punchHole(e,t,n={}){return this.innerShape?this.innerShape.punchHole(e,t,n):e}toSVG(e){return this.innerShape?.toSVG(e)||``}toSVGViewBox(e=1){return this.innerShape?.toSVGViewBox(e)||``}toSVGPaths(){return this.innerShape?.toSVGPaths()||[]}offset(t,n={}){return new e(Rq(this.innerShape,t,n))}approximate(t,n={}){return t!==`svg`&&M(`Drawing.approximate`,`Only 'svg' is supported for now`),new e(zq(this.innerShape,n))}get blueprint(){if(!(this.innerShape instanceof EL)){if(this.innerShape instanceof UL&&this.innerShape.blueprints.length===1&&this.innerShape.blueprints[0]instanceof EL)return this.innerShape.blueprints[0];M(`Drawing.blueprint`,`This drawing is not a blueprint`)}return this.innerShape}};function Kq(e){function t(e){if(e.type===`CompoundBlueprint`)return new WL(e.blueprints.map(t));if(e.type===`Blueprints`)return new UL(e.blueprints.map(t));if(e.type===`Blueprint`)return new EL(e.curves.map(e=>ZI(e)));M(`Drawing.deserialize`,`Unknown shape type for deserialization`)}return new Gq(t(JSON.parse(e)))}var qq=class extends oR{constructor(e=[0,0]){super(),this.pointer=e,this.firstPoint=e,this.pendingCurves=[]}done(){return new Gq(new EL(this.pendingCurves))}close(){return this._closeSketch(),this.done()}closeWithMirror(){return this._closeWithMirror(),this.close()}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}};function Jq(e){let t=new qq;return e&&t.movePointerTo(e),t}function Yq(e,t,n=0){return new Gq(mR(e,t,n))}var Xq=Yq;function Zq(e){return new Gq(new EL([aL(e)]))}function Qq(e,t){let[n,r]=[e,t].sort((e,t)=>e-t);return new Gq(new EL([oL(r,n,r===e?[1,0]:[0,1])]))}function $q(e){return Jq().movePointerTo([-e,0]).sagittaArc(2*e,0,e).sagittaArc(-2*e,0,e).close()}function eJ(e,t){return Jq().movePointerTo([-e,0]).halfEllipse(2*e,0,t).halfEllipse(-2*e,0,t).close()}function tJ(e,t,n=0){return new Gq(pR(e,t,n))}function nJ(e,{startX:t=0,startY:n=0,fontSize:r=16,fontFamily:i=`default`}={}){return new Gq(iq(e,{startX:t,startY:n,fontSize:r,fontFamily:i}))}var rJ=(e,t={},n={})=>{e.length<2&&M(`drawPointsInterpolation`,`Need at least 2 points for interpolation, got ${e.length}`);let r=[j(lL(e,t))],i=e[0],a=e[e.length-1];return n.closeShape&&i&&a&&!hI(i,a)&&r.push(nL(a,i)),new Gq(new EL(r))},iJ=(e,{pointsCount:t=400,start:n=0,stop:r=1,closeShape:i=!1}={},a={})=>{let o=(r-n)/t;return rJ([...Array(t+1).keys()].map(t=>e(n+t*o)),a,{closeShape:i})},aJ=e=>{try{var t=OT();let n=t.u(new VT),r=Xq(1e3,1e3).sketchOnPlane();n.register(r.wire);let i=n.register(j(CA(r.wire))),a=pq(e.map(e=>SL(e,i))).map(e=>new EL(e));return a.length===0?new Gq:a.length===1?new Gq(a[0]):new Gq(new UL(a))}catch(e){t.e=e}finally{t.d()}};function oJ(e,t=`front`){let n;n=typeof t==`string`?j(dq(t)):t;let{visible:r,hidden:i}=fq(e,n);try{return{visible:aJ(r),hidden:aJ(i)}}finally{for(let e of r)e[Symbol.dispose]();for(let e of i)e[Symbol.dispose]()}}function sJ(e){try{var t=OT();let n=t.u(new VT),r=n.register(vE(j(tO(e.wrapped)))),i=pq(QE(n.register(vO(r))).map(t=>SL(t,e))).map(e=>new EL(e));return i.length===0?new Gq:i.length===1?new Gq(i[0]):new Gq(new UL(i))}catch(e){t.e=e}finally{t.d()}}function cJ(e,t,n){return n===void 0?e.sketchOnPlane(t):e.sketchOnPlane(t,n)}function lJ(e,t){return e.fuse(t)}function uJ(e,t){return e.cut(t)}function dJ(e,t){return e.intersect(t)}function fJ(e,t,n){return e.fillet(t,n)}function pJ(e,t,n){return e.chamfer(t,n)}function mJ(e,t,n=0){return typeof t==`number`?e.translate(t,n):e.translate(t)}function hJ(e,t,n){return e.rotate(t,n)}function gJ(e,t,n){return e.scale(t,n)}function _J(e,t,n,r){return e.mirror(t,n,r)}function vJ(e){let t=e.clone();return t.reverse(),t}function yJ(e){return e.boundingBox}function bJ(e){return e.firstPoint}function xJ(e){return e.lastPoint}function SJ(e,t,n){return e.splitAt(t,n)}function CJ(e,t,n){return e.parameter(t,n)}function wJ(e,t){return e.tangentAt(t)}function TJ(e,t){return e.isOnCurve(t)}function EJ(e,t){return e.distanceFrom(t)}function DJ(e){return e.length===0?k(F(N.BLUEPRINT_EMPTY_CURVES,`createBlueprint: at least one curve is required`)):O(new EL(e))}function OJ(e){return e.length===0?k(F(N.COMPOUND_BLUEPRINT_EMPTY,`createCompoundBlueprint: at least one blueprint (outer boundary) is required`)):O(new WL(e))}function kJ(e){return e.boundingBox}function AJ(e){return e.orientation}function jJ(e,t){return e.isInside(t)}function MJ(e){return e.toSVGPathD()}function NJ(e,t,n){return e.translate(t,n)}function PJ(e,t,n){return e.rotate(t,n)}function FJ(e,t,n){return e.scale(t,n)}function IJ(e,t,n,r){return e.mirror(t,n,r)}function LJ(e,t,n,r){return e.stretch(t,n,r)}function RJ(e,t,n){return e.sketchOnPlane(t,n)}function zJ(e,t,n){return e.sketchOnFace(t,n)}function BJ(e,t){return n(e,t*3)}function VJ(e,t){return n(e,t)}function HJ(e){let t=[`# brepjs OBJ export`],n=e.vertices.length/3;for(let r=0;r<n;r++){let[n,i,a]=BJ(e.vertices,r);t.push(`v ${n} ${i} ${a}`)}let r=e.normals.length/3;for(let n=0;n<r;n++){let[r,i,a]=BJ(e.normals,n);t.push(`vn ${r} ${i} ${a}`)}let i=n=>{let[r,i,a]=VJ(e.triangles,n);t.push(`f ${r+1}//${r+1} ${i+1}//${i+1} ${a+1}//${a+1}`)};if(e.faceGroups.length>0)for(let n of e.faceGroups){t.push(`g face_${n.faceId}`);let e=n.count/3;for(let t=0;t<e;t++)i(n.start+t*3)}else{let t=e.triangles.length/3;for(let e=0;e<t;e++)i(e*3)}return t.join(`
25
- `)+`
26
- `}var UJ=5126,WJ=5125,GJ=34962,KJ=34963,qJ=[-Math.SQRT1_2,0,0,Math.SQRT1_2];function JJ(e){return e===`Z`?[{mesh:0}]:[{name:`Z_up_to_Y_up`,rotation:qJ,children:[1]},{mesh:0}]}function YJ(e){let n=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0];for(let i=0;i<e.length;i+=3)for(let a=0;a<3;a++){let o=t(e,i+a);o<t(n,a)&&(n[a]=o),o>t(r,a)&&(r[a]=o)}return{min:n,max:r}}function XJ(e){return e+3&-4}function ZJ(e){let t=new Uint8Array(e),n=8192,r=[];for(let e=0;e<t.length;e+=n)r.push(String.fromCharCode(...t.subarray(e,e+n)));return btoa(r.join(``))}function QJ(e,t){let n=nY(e,`base64`,t);return JSON.stringify(n)}function $J(e,t){let{doc:n,binBuffer:r}=rY(e,t),i=JSON.stringify(n),a=new TextEncoder().encode(i),o=XJ(a.length),s=new Uint8Array(o);s.set(a);for(let e=a.length;e<o;e++)s[e]=32;let c=XJ(r.byteLength),l=new Uint8Array(c);l.set(new Uint8Array(r));let u=20+o+8+c,d=new ArrayBuffer(u),f=new DataView(d),p=new Uint8Array(d);f.setUint32(0,1179937895,!0),f.setUint32(4,2,!0),f.setUint32(8,u,!0),f.setUint32(12,o,!0),f.setUint32(16,1313821514,!0),p.set(s,20);let m=20+o;return f.setUint32(m,c,!0),f.setUint32(m+4,5130562,!0),p.set(l,m+8),d}function eY(e,t,n,r,i){return[{bufferView:0,componentType:WJ,count:e.length,type:`SCALAR`},{bufferView:1,componentType:UJ,count:t.length/3,type:`VEC3`,min:r,max:i},{bufferView:2,componentType:UJ,count:n.length/3,type:`VEC3`}]}function tY(e,t,n){return[{buffer:0,byteOffset:0,byteLength:e,target:KJ},{buffer:0,byteOffset:XJ(e),byteLength:t,target:GJ},{buffer:0,byteOffset:XJ(e)+t,byteLength:n,target:GJ}]}function nY(e,t,n){let{vertices:r,normals:i,triangles:a}=e,o=n?.materials;if(o&&o.size>0&&e.faceGroups.length>0)return lY(e,t,o,n.upAxis??`Y`);let s=a.byteLength,c=r.byteLength,l=i.byteLength,u=XJ(s)+c+l,{min:d,max:f}=YJ(r),p={asset:{version:`2.0`,generator:`brepjs`},scene:0,scenes:[{nodes:[0]}],nodes:JJ(n?.upAxis??`Y`),meshes:[{primitives:[{attributes:{POSITION:1,NORMAL:2},indices:0}]}],accessors:eY(a,r,i,d,f),bufferViews:tY(s,c,l),buffers:[{byteLength:u}]};if(t===`base64`){let t=dY(e);p.buffers[0]={byteLength:u,uri:`data:application/octet-stream;base64,`+ZJ(t)}}return p}function rY(e,t){let n=t?.materials;if(n&&n.size>0&&e.faceGroups.length>0){let{doc:r,binBuffer:i}=uY(e,n,t.upAxis??`Y`);return{doc:r,binBuffer:i}}return{doc:nY(e,`glb`,t),binBuffer:dY(e)}}function iY(e,n){let{vertices:r,normals:i,triangles:a,faceGroups:o}=e,s=[],c=new Map,l=new Map;for(let e of n.values()){if(l.has(e))continue;let t=JSON.stringify([e.baseColor,e.metallic,e.roughness,e.name]),n=c.get(t);if(n!==void 0)l.set(e,n);else{let n=s.length;c.set(t,n),l.set(e,n),s.push({name:e.name??`material_${n}`,pbrMetallicRoughness:{baseColorFactor:e.baseColor??[.8,.8,.8,1],metallicFactor:e.metallic??0,roughnessFactor:e.roughness??.5}})}}let u=new Map;for(let e=0;e<o.length;e++){let t=sA(o,e),r=n.get(t.faceId),i=r===void 0?-1:l.get(r)??-1,a=u.get(i);a?a.push(e):u.set(i,[e])}let d=[];for(let[e,n]of u){let r=0;for(let e of n)r+=sA(o,e).count;let i=new Uint32Array(r),s=0;for(let e of n){let n=sA(o,e);for(let e=n.start;e<n.start+n.count;e++)i[s++]=t(a,e)}d.push({indices:i,materialIdx:e})}let f=0,p=[];for(let e of d){let t=e.indices.byteLength;p.push({byteOffset:f,byteLength:t}),f=XJ(f+t)}let m=f;return{primitiveData:d,indexBufferInfos:p,verticesOffset:m,totalByteLength:m+r.byteLength+i.byteLength,uniqueMaterials:s}}function aY(e,t,n,r){let{vertices:i,normals:a}=e,{min:o,max:s}=YJ(i),c=r.length;r.push({buffer:0,byteOffset:t,byteLength:i.byteLength,target:GJ});let l=n.length;n.push({bufferView:c,componentType:UJ,count:i.length/3,type:`VEC3`,min:o,max:s});let u=r.length;r.push({buffer:0,byteOffset:t+i.byteLength,byteLength:a.byteLength,target:GJ});let d=n.length;return n.push({bufferView:u,componentType:UJ,count:a.length/3,type:`VEC3`}),{verticesAccIdx:l,normalsAccIdx:d}}function oY(e,t,n,r,i,a){let o=[];for(let s=0;s<e.length;s++){let c=sA(e,s),l=sA(t,s),u=a.length;a.push({buffer:0,byteOffset:l.byteOffset,byteLength:l.byteLength,target:KJ});let d=i.length;i.push({bufferView:u,componentType:WJ,count:c.indices.length,type:`SCALAR`});let f={attributes:{POSITION:n,NORMAL:r},indices:d};c.materialIdx>=0&&(f.material=c.materialIdx),o.push(f)}return o}function sY(e,t,n=`Y`){let{primitiveData:r,indexBufferInfos:i,verticesOffset:a,totalByteLength:o,uniqueMaterials:s}=t,c=[],l=[],{verticesAccIdx:u,normalsAccIdx:d}=aY(e,a,c,l),f=oY(r,i,u,d,c,l);return{asset:{version:`2.0`,generator:`brepjs`},scene:0,scenes:[{nodes:[0]}],nodes:JJ(n),meshes:[{primitives:f}],accessors:c,bufferViews:l,buffers:[{byteLength:o}],materials:s}}function cY(e,t){let{vertices:n,normals:r}=e,{primitiveData:i,indexBufferInfos:a,verticesOffset:o,totalByteLength:s}=t,c=new ArrayBuffer(s),l=new Uint8Array(c);for(let e=0;e<i.length;e++){let t=sA(i,e),n=sA(a,e);l.set(new Uint8Array(t.indices.buffer,t.indices.byteOffset,t.indices.byteLength),n.byteOffset)}return l.set(new Uint8Array(n.buffer,n.byteOffset,n.byteLength),o),l.set(new Uint8Array(r.buffer,r.byteOffset,r.byteLength),o+n.byteLength),c}function lY(e,t,n,r=`Y`){let i=iY(e,n),a=sY(e,i,r);if(t===`base64`){let t=cY(e,i);a.buffers[0]={byteLength:i.totalByteLength,uri:`data:application/octet-stream;base64,`+ZJ(t)}}return a}function uY(e,t,n=`Y`){let r=iY(e,t);return{doc:sY(e,r,n),binBuffer:cY(e,r)}}function dY(e){let{vertices:t,normals:n,triangles:r}=e,i=r.byteLength,a=t.byteLength,o=n.byteLength,s=XJ(i)+a+o,c=new ArrayBuffer(s),l=new Uint8Array(c);return l.set(new Uint8Array(r.buffer,r.byteOffset,i),0),l.set(new Uint8Array(t.buffer,t.byteOffset,a),XJ(i)),l.set(new Uint8Array(n.buffer,n.byteOffset,o),XJ(i)+a),c}function fY(e,t){let n=t?.layer??`0`,r=[];r.push(`0`,`SECTION`,`2`,`HEADER`),r.push(`9`,`$ACADVER`,`1`,`AC1009`),r.push(`0`,`ENDSEC`);let i=new Set([n]);for(let t of e)t.layer&&i.add(t.layer);r.push(`0`,`SECTION`,`2`,`TABLES`),r.push(`0`,`TABLE`,`2`,`LAYER`,`70`,String(i.size));for(let e of i)r.push(`0`,`LAYER`,`2`,e,`70`,`0`,`62`,`7`,`6`,`CONTINUOUS`);r.push(`0`,`ENDTAB`),r.push(`0`,`ENDSEC`),r.push(`0`,`SECTION`,`2`,`ENTITIES`);for(let t of e){let e=t.layer??n;if(t.type===`LINE`)r.push(`0`,`LINE`,`8`,e,`10`,String(t.start[0]),`20`,String(t.start[1]),`30`,`0`,`11`,String(t.end[0]),`21`,String(t.end[1]),`31`,`0`);else{r.push(`0`,`LWPOLYLINE`,`8`,e,`90`,String(t.points.length),`70`,t.closed?`1`:`0`);for(let e of t.points)r.push(`10`,String(e[0]),`20`,String(e[1]))}}return r.push(`0`,`ENDSEC`),r.push(`0`,`EOF`),r.join(`
27
- `)+`
28
- `}function pY(e,t){let n=t?.curveSegments??32,r=[],i=mY(e);for(let e of i)for(let t of e.curves)r.push(...hY(t,n));return fY(r,t)}function mY(e){if(`curves`in e&&Array.isArray(e.curves))return[e];if(`blueprints`in e&&Array.isArray(e.blueprints)){let t=[];for(let n of e.blueprints)t.push(...mY(n));return t}return[]}function hY(e,t){return e.geomType===`LINE`?[{type:`LINE`,start:e.firstPoint,end:e.lastPoint}]:[gY(e,t)]}function gY(e,t){let n=e.firstParameter,r=e.lastParameter,i=[];for(let a=0;a<=t;a++){let o=n+(r-n)*(a/t);i.push(e.value(o))}return{type:`POLYLINE`,points:i}}var _Y=new Uint32Array(256);for(let e=0;e<256;e++){let t=e;for(let e=0;e<8;e++)t=t&1?3988292384^t>>>1:t>>>1;_Y[e]=t}function vY(e){let t=4294967295;for(let n of e)t=(_Y[(t^n)&255]??0)^t>>>8;return(t^4294967295)>>>0}function yY(e,t,n,r){return e.setUint32(n,67324752,!0),n+=4,e.setUint16(n,20,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint32(n,r.crc,!0),n+=4,e.setUint32(n,r.data.length,!0),n+=4,e.setUint32(n,r.data.length,!0),n+=4,e.setUint16(n,r.name.length,!0),n+=2,e.setUint16(n,0,!0),n+=2,t.set(r.name,n),n+=r.name.length,t.set(r.data,n),n+=r.data.length,n}function bY(e,t,n,r,i){return e.setUint32(n,33639248,!0),n+=4,e.setUint16(n,20,!0),n+=2,e.setUint16(n,20,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint32(n,i.crc,!0),n+=4,e.setUint32(n,i.data.length,!0),n+=4,e.setUint32(n,i.data.length,!0),n+=4,e.setUint16(n,i.name.length,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint32(n,0,!0),n+=4,e.setUint32(n,r,!0),n+=4,t.set(i.name,n),n+=i.name.length,n}function xY(e,t,n,r,i){e.setUint32(t,101010256,!0),t+=4,e.setUint16(t,0,!0),t+=2,e.setUint16(t,0,!0),t+=2,e.setUint16(t,n,!0),t+=2,e.setUint16(t,n,!0),t+=2,e.setUint32(t,i,!0),t+=4,e.setUint32(t,r,!0),t+=4,e.setUint16(t,0,!0)}function SY(e){let t=0,n=[];for(let r of e)n.push({offset:t,entry:r}),t+=30+r.name.length+r.data.length;let r=t,i=0;for(let t of e)i+=46+t.name.length;let a=t+i+22,o=new ArrayBuffer(a),s=new DataView(o),c=new Uint8Array(o),l=0;for(let{entry:e}of n)l=yY(s,c,l,e);for(let{offset:e,entry:t}of n)l=bY(s,c,l,e,t);return xY(s,l,e.length,r,i),o}function CY(e){return e.replaceAll(`&`,`&amp;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`).replaceAll(`"`,`&quot;`)}function wY(e){let t=e=>Math.round(Math.max(0,Math.min(1,e))*255).toString(16).padStart(2,`0`).toUpperCase();return`#${t(e[0])}${t(e[1])}${t(e[2])}${t(e[3])}`}function TY(e){let t=[];for(let n=0;n<e.vertices.length;n+=3){let r=e.vertices[n]??0,i=e.vertices[n+1]??0,a=e.vertices[n+2]??0;t.push(` <vertex x="${r}" y="${i}" z="${a}" />`)}return t}function EY(e){let t=new Map,n=[];if(e!==void 0&&e.size>0)for(let r of e.values()){let e=wY(r);t.has(e)||(t.set(e,n.length),n.push(e))}return{colorIndexByHex:t,colorHexList:n}}function DY(e){let t=new Map,n=[];if(e!==void 0&&e.size>0)for(let r of e.values())t.has(r.name)||(t.set(r.name,n.length),n.push(r));return{materialIndexByName:t,materialList:n}}function OY(e,t,n,r,i){let a=new Map;for(let o of e.faceGroups){let e=o.start/3,s=o.count/3,c=o.faceId,l;if(n!==void 0){let e=n.get(c);if(e!==void 0){let t=i.get(e.name);t!==void 0&&(l={pid:3,p1:t})}}if(l===void 0&&t!==void 0){let e=t.get(c);if(e!==void 0){let t=wY(e),n=r.get(t);n!==void 0&&(l={pid:2,p1:n})}}if(l!==void 0)for(let t=e;t<e+s;t++)a.set(t,l)}return a}function kY(e,t){let n=[];for(let r=0;r<e.triangles.length;r+=3){let i=r/3,a=e.triangles[r]??0,o=e.triangles[r+1]??0,s=e.triangles[r+2]??0,c=t.get(i);c===void 0?n.push(` <triangle v1="${a}" v2="${o}" v3="${s}" />`):n.push(` <triangle v1="${a}" v2="${o}" v3="${s}" pid="${c.pid}" p1="${c.p1}" />`)}return n}function AY(e,t){let n=[];if(e.length>0){let t=e.map(e=>` <color color="${e}" />`).join(`
29
- `);n.push(` <colorgroup id="2">\n${t}\n </colorgroup>`)}if(t.length>0){let e=t.map(e=>{let t=e.displayColor===void 0?`#FFFFFFFF`:wY(e.displayColor);return` <base name="${CY(e.name)}" displaycolor="${t}" />`}).join(`
30
- `);n.push(` <basematerials id="3">\n${e}\n </basematerials>`)}return n}function jY(e,t,n,r,i){let a=TY(e),{colorIndexByHex:o,colorHexList:s}=EY(r),{materialIndexByName:c,materialList:l}=DY(i),u=kY(e,OY(e,r,i,o,c)),d=AY(s,l);return`<?xml version="1.0" encoding="UTF-8"?>
31
- <model unit="${n}" xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02"${l.length>0?`
32
- xmlns:m="http://schemas.microsoft.com/3dmanufacturing/material/2015/02"`:``}>
33
- <resources>${d.length>0?`
34
- `+d.join(`
35
- `):``}
36
- <object id="1" name="${CY(t)}" type="model">
37
- <mesh>
38
- <vertices>
39
- ${a.join(`
40
- `)}
41
- </vertices>
42
- <triangles>
43
- ${u.join(`
44
- `)}
45
- </triangles>
46
- </mesh>
47
- </object>
48
- </resources>
49
- <build>
50
- <item objectid="1" />
51
- </build>
52
- </model>`}function MY(e,t={}){let{name:n=`model`,unit:r=`millimeter`,colors:i,materials:a}=t,o=new TextEncoder,s=jY(e,n,r,i,a);function c(e,t){let n=o.encode(e),r=o.encode(t);return{name:n,data:r,crc:vY(r)}}return SY([c(`[Content_Types].xml`,`<?xml version="1.0" encoding="UTF-8"?>
53
- <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
54
- <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" />
55
- <Default Extension="model" ContentType="application/vnd.ms-package.3dmanufacturing-3dmodel+xml" />
56
- </Types>`),c(`_rels/.rels`,`<?xml version="1.0" encoding="UTF-8"?>
57
- <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
58
- <Relationship Target="/3D/3dmodel.model" Id="rel0" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel" />
59
- </Relationships>`),c(`3D/3dmodel.model`,s)])}function NY(e){let t=[],n=/([MmLlHhVvCcSsQqTtAaZz])([^MmLlHhVvCcSsQqTtAaZz]*)/g,r;for(;(r=n.exec(e))!==null;){let e=r[1]??``,n=(r[2]??``).trim(),i=[];if(n){let e=/[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/g,t;for(;(t=e.exec(n))!==null;)i.push(parseFloat(t[0]))}t.push({command:e,args:i})}return t}function PY(e){return[e[0],-e[1]]}function FY(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);i===0?(t.sx=a,t.sy=o):r.push(nL(PY([t.cx,t.cy]),PY([a,o]))),t.cx=a,t.cy=o,i+=2}}function IY(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);r.push(nL(PY([t.cx,t.cy]),PY([a,o]))),t.cx=a,t.cy=o,i+=2}}function LY(e,t,n,r){for(let i of e){let e=n?t.cx+i:i;r.push(nL(PY([t.cx,t.cy]),PY([e,t.cy]))),t.cx=e}}function RY(e,t,n,r){for(let i of e){let e=n?t.cy+i:i;r.push(nL(PY([t.cx,t.cy]),PY([t.cx,e]))),t.cy=e}}function zY(e,t,n,r){let i=0;for(;i+5<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0),d=a+(e[i+4]??0),f=o+(e[i+5]??0);r.push(cL(PY([t.cx,t.cy]),[PY([s,c]),PY([l,u])],PY([d,f]))),t.prevControlX=l,t.prevControlY=u,t.cx=d,t.cy=f,i+=6}}function BY(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`C`||s===`S`?2*t.cx-t.prevControlX:t.cx,l=s===`C`||s===`S`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0),f=a+(e[i+2]??0),p=o+(e[i+3]??0);r.push(cL(PY([t.cx,t.cy]),[PY([c,l]),PY([u,d])],PY([f,p]))),t.prevControlX=u,t.prevControlY=d,t.cx=f,t.cy=p,t.lastCmd=`S`,i+=4}}function VY(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0);r.push(cL(PY([t.cx,t.cy]),[PY([s,c])],PY([l,u]))),t.prevControlX=s,t.prevControlY=c,t.cx=l,t.cy=u,i+=4}}function HY(e,t,n,r){let i=0;for(;i+1<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`Q`||s===`T`?2*t.cx-t.prevControlX:t.cx,l=s===`Q`||s===`T`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0);r.push(cL(PY([t.cx,t.cy]),[PY([c,l])],PY([u,d]))),t.prevControlX=c,t.prevControlY=l,t.cx=u,t.cy=d,t.lastCmd=`T`,i+=2}}function UY(e,t,n,r,i){let a=Math.max(n,r),o=i?1:-1,s=t+2*o*a,c=[e-o*a,t+o*a],l=[e+o*a,t+o*a];try{return[rL(PY([e,t]),PY(c),PY([e,s])),rL(PY([e,s]),PY(l),PY([e,t]))]}catch{return[]}}function WY(e,t,n,r,i,a,o,s){let c=.5,l=e+c*(n-e),u=t+c*(r-t),d=n-e,f=r-t,p=Math.sqrt(d*d+f*f),m=Math.max(i,a),h=p/2,g=h<m?m-Math.sqrt(m*m-h*h):m,_=(o===s?-1:1)*(s?1:-1),v=-f/p,y=d/p,b=l+_*g*v,x=u+_*g*y;try{return[rL(PY([e,t]),PY([b,x]),PY([n,r]))]}catch{return[nL(PY([e,t]),PY([n,r]))]}}function GY(e,t,n,r){let i=0;for(;i+6<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=Math.abs(e[i]??0),c=Math.abs(e[i+1]??0),l=(e[i+3]??0)!==0,u=(e[i+4]??0)!==0,d=a+(e[i+5]??0),f=o+(e[i+6]??0);if(s===0||c===0)r.push(nL(PY([t.cx,t.cy]),PY([d,f])));else{let e=d-t.cx,n=f-t.cy;Math.sqrt(e*e+n*n)<1e-10?r.push(...UY(t.cx,t.cy,s,c,u)):r.push(...WY(t.cx,t.cy,d,f,s,c,l,u))}t.cx=d,t.cy=f,i+=7}}function KY(e,t){(Math.abs(e.cx-e.sx)>1e-10||Math.abs(e.cy-e.sy)>1e-10)&&t.push(nL(PY([e.cx,e.cy]),PY([e.sx,e.sy]))),e.cx=e.sx,e.cy=e.sy}function qY(e){let t=NY(e),n=[],r={cx:0,cy:0,sx:0,sy:0,prevControlX:0,prevControlY:0,lastCmd:``};for(let{command:e,args:i}of t){let t=e===e.toLowerCase(),a=e.toUpperCase();switch(a){case`M`:FY(i,r,t,n);break;case`L`:IY(i,r,t,n);break;case`H`:LY(i,r,t,n);break;case`V`:RY(i,r,t,n);break;case`C`:zY(i,r,t,n);break;case`S`:BY(i,r,t,n);break;case`Q`:VY(i,r,t,n);break;case`T`:HY(i,r,t,n);break;case`A`:GY(i,r,t,n);break;case`Z`:KY(r,n);break}a!==`S`&&a!==`T`&&(r.lastCmd=a)}return n}function JY(e){try{let t=qY(e);return t.length===0?k(vo(`SVG_EMPTY_PATH`,`SVG path produced no curves`)):O(new EL(t))}catch(e){return k(vo(`SVG_PARSE_FAILED`,`Failed to parse SVG path: ${e instanceof Error?e.message:String(e)}`))}}function YY(e){try{let t=/\bd\s*=\s*(?:"([^"]*)"|'([^']*)')/,n=[],r=e.toLowerCase(),i=0;for(;i<r.length;){let a=r.indexOf(`<path `,i);if(a===-1)break;let o=e.indexOf(`>`,a);if(o===-1)break;let s=e.slice(a,o+1);i=o+1;let c=t.exec(s),l=c?.[1]??c?.[2];if(!l)continue;let u=JY(l);u.ok&&n.push(u.value)}return n.length===0?k(vo(`SVG_NO_PATHS`,`No <path> elements found in SVG`)):O(n)}catch(e){return k(vo(`SVG_IMPORT_FAILED`,`Failed to import SVG: ${e instanceof Error?e.message:String(e)}`))}}function XY(e,t){try{let n=U(),r=e.map(e=>({shape:e.shape.wrapped,name:e.name,color:e.color?[...e.color]:void 0}));return O(n.exportSTEPConfigured(r,t))}catch(e){return k(vo(N.STEP_EXPORT_CONFIGURED_FAILED,`Configured STEP export failed`,e))}}async function ZY(e){try{let t=await e.arrayBuffer(),n=U().importSTEP(t);return n.length===0?k(vo(`STEP_IMPORT_FAILED`,`STEP file contains no valid geometry`)):O(ME(n[0]))}catch(e){return k(vo(`STEP_IMPORT_FAILED`,`Failed to load STEP file`,e))}}async function QY(e){try{let t=await e.arrayBuffer(),n=U().importSTL(t);return n.IsNull()?k(vo(`STL_IMPORT_FAILED`,`Failed to create solid from STL mesh`)):O(ME(n))}catch(e){return k(vo(`STL_IMPORT_FAILED`,`Failed to load STL file`,e))}}async function $Y(e){try{let t=await e.arrayBuffer(),n=U().importIGES(t);return n.length===0?k(vo(`IGES_IMPORT_FAILED`,`IGES file contains no valid geometry`)):O(ME(n[0]))}catch(e){return k(vo(`IGES_IMPORT_FAILED`,`Failed to load IGES file`,e))}}function eX(e,t,n={}){let r=iq(e,t);return new $K((typeof n.plane==`string`||n.plane===void 0?r.sketchOnPlane(n.plane,n.origin):r.sketchOnPlane(n.plane)).map(e=>Array.isArray(e)?new IK(e.map(LK)):LK(e)))}function tX(e,t){let n=t?.fontSize??1,r=nq(t?.fontFamily);if(!r)return k(F(N.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling textMetrics()`));let i=r.getAdvanceWidth(e,n),a=n/r.unitsPerEm,o=r.ascender*a,s=r.descender*a;return O({width:i,height:o-s,ascender:o,descender:s})}function nX(e){let t=e?.fontSize??1,n=nq(e?.fontFamily);if(!n)return k(F(N.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling fontMetrics()`));let r=t/n.unitsPerEm,i=n.ascender*r,a=n.descender*r,o=(n.tables?.os2?.sTypoLineGap??0)*r;return O({ascender:i,descender:a,unitsPerEm:n.unitsPerEm,lineHeight:i-a+o})}function rX(e){return e.type===`init`}function iX(e){return e.type===`operation`}function aX(e){return e.type===`dispose`}function oX(e){return e.type===`batch`}function sX(e){return e.success}function cX(e){return!e.success}function lX(){return{pending:new Map}}function uX(e,t){let n=new Map(e.pending);return n.set(t.id,t),{pending:n}}function dX(e,t){let n=e.pending.get(t);if(!n)return{queue:e,task:void 0};let r=new Map(e.pending);return r.delete(t),{queue:{pending:r},task:n}}function fX(e){return e.pending.size}function pX(e){return e.pending.size===0}function mX(e,t){for(let n of e.pending.values())n.reject(t);return{pending:new Map}}function hX(e,t){let n=t.data,r=e.get(n.id);if(r)if(e.delete(n.id),sX(n)){let e={};n.resultBrep!==void 0&&(e.resultBrep=n.resultBrep),n.resultData!==void 0&&(e.resultData=n.resultData),r.resolve(e)}else r.reject(Error(n.error))}function gX(e){let{worker:t,wasmUrl:n}=e,r=new Map,i=!1;function a(){return crypto.randomUUID()}function o(e){hX(r,e)}t.addEventListener(`message`,o);function s(e){return i?Promise.reject(Error(`WorkerClient has been disposed`)):new Promise((n,i)=>{r.set(e.id,{resolve:n,reject:i}),t.postMessage(e)})}return{async init(){await s({id:a(),type:`init`,...n===void 0?{}:{wasmUrl:n}})},async execute(e,t,n){return s({id:a(),type:`operation`,operation:e,shapesBrep:t,parameters:n})},executeBatch(e){let t=e.length;return s({id:a(),type:`batch`,operations:e}).then(e=>{let n=e.resultData;if(!Array.isArray(n)||n.length!==t)throw Error(`Invalid batch response: expected ${t} results`);return n})},dispose(){i=!0;for(let e of r.values())e.reject(Error(`WorkerClient disposed`));r.clear(),t.removeEventListener(`message`,o);let e={id:a(),type:`dispose`};t.postMessage(e)}}}function _X(){return{operations:new Map}}function vX(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function yX(e){return e instanceof Error?e.message:String(e)}function bX(e,t,n,r){let i=e.operations.get(t);if(!i)return{success:!1,error:`Unknown operation: ${t}`};try{let e=i(n,r);return{success:!0,...e.resultBrep===void 0?{}:{resultBrep:e.resultBrep},...e.resultData===void 0?{}:{resultData:e.resultData}}}catch(e){return{success:!1,error:yX(e)}}}function xX(e,t){return t.success?{id:e,success:!0,...t.resultBrep===void 0?{}:{resultBrep:t.resultBrep},...t.resultData===void 0?{}:{resultData:t.resultData}}:{id:e,success:!1,error:t.error??`operation failed`}}function SX(e,t){let n=globalThis;n.onmessage=async r=>{let i=r.data;if(rX(i)){try{await t(i.wasmUrl);let e={id:i.id,success:!0};n.postMessage(e)}catch(e){let t={id:i.id,success:!1,error:yX(e)};n.postMessage(t)}return}if(iX(i)){let t=bX(e,i.operation,i.shapesBrep,i.parameters);n.postMessage(xX(i.id,t));return}if(oX(i)){let t=i.operations.map(t=>bX(e,t.operation,t.shapesBrep,t.params)),r={id:i.id,success:!0,resultData:t};n.postMessage(r);return}if(aX(i)){let e={id:i.id,success:!0};n.postMessage(e),n.close?.()}}}function CX(e){let{workers:t,wasmUrl:n}=e;if(t.length===0)throw Error(`createWorkerPool requires at least one worker`);let r=t.map(e=>({client:gX({worker:e,...n===void 0?{}:{wasmUrl:n}}),inFlight:0})),i=!1;function a(){return r.reduce((e,t)=>t.inFlight<e.inFlight?t:e)}function o(e,t,n){if(i)return Promise.reject(Error(`WorkerPool has been disposed`));let r=a();return r.inFlight+=1,r.client.execute(e,t,n).finally(()=>{--r.inFlight})}function s(){if(!i){i=!0;for(let e of r)e.client.dispose()}}return{size:r.length,async init(){try{await Promise.all(r.map(e=>e.client.init()))}catch(e){throw s(),e}},execute:o,executeBatch(e){return Promise.all(e.map(e=>o(e.operation,e.shapesBrep,e.params)))},inFlight(){return r.map(e=>e.inFlight)},dispose:s}}var wX=Object.defineProperty,TX=(e,t)=>{let n={};for(var r in e)wX(n,r,{get:e[r],enumerable:!0});return t||wX(n,Symbol.toStringTag,{value:`Module`}),n},EX=1,DX=2;function OX(e,t){t===`commonFace`&&e.SetGlue(EX),t===`sameFace`&&e.SetGlue(DX)}function kX(e){return typeof e==`number`}function AX(e){if(typeof e==`number`)return!0;if(typeof e==`object`&&e){let t=e;return`distances`in t&&Array.isArray(t.distances)&&`selectedFace`in t||`distance`in t&&`angle`in t&&`selectedFace`in t}return!1}function jX(e){return typeof e==`number`?!0:Array.isArray(e)&&e.length===2?e.every(kX):!1}function MX(e,t){let n=n=>{let r=e.findAll(n);if(r.length===0)return[];let i=0,a=MD(_D(cA(r)),t);for(let e=1;e<r.length;e++){let n=MD(_D(sA(r,e)),t);n<a&&(a=n,i=e)}return[sA(r,i)]},r=e=>{let t=n(e);return t.length===0?k(yo(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found 0 element(s)`)):O(cA(t))};return{...e,findAll:n,findUnique:r}}function NX(e){return AI(`vertex`,e,NX,(t,n)=>({nearestTo:t=>MX(NX(e),t),atPosition:(e,t=1e-4)=>n(n=>MD(_D(n),e)<t),withinBox:(e,t)=>n(n=>{let r=_D(n);return r[0]>=e[0]-1e-6&&r[0]<=t[0]+1e-6&&r[1]>=e[1]-1e-6&&r[1]<=t[1]+1e-6&&r[2]>=e[2]-1e-6&&r[2]<=t[2]+1e-6}),atDistance:(e,t=[0,0,0],r=1e-4)=>n(n=>{let i=_D(n);return Math.abs(MD(i,t)-e)<r})}))}function PX(){return NX([])}var FX=new Map,IX=null,LX=null;function RX(e,t){FX.set(e,t),IX||=e,e===IX&&(LX=t)}function zX(e){if(!e&&LX)return LX;let t=e??IX;if(!t)throw Error(`brepjs voxel engine not initialized. Call initVoxel() (or registerVoxel()) before using voxel operations.`);let n=FX.get(t);if(!n)throw Error(`brepjs: voxel engine '${t}' is not registered.`);return n}function BX(){return IX}function VX(e,t=`voxel`){RX(t,e),IX=t,LX=e}function HX(e){if(e.vertices.length%3!=0)return F(`VOXEL_INVALID_MESH`,`mesh.vertices length must be a multiple of 3 (flat xyz).`);if(e.triangles.length%3!=0)return F(`VOXEL_INVALID_MESH`,`mesh.triangles length must be a multiple of 3.`);let t=e.vertices.length/3;for(let n=0;n<e.triangles.length;n++){let r=e.triangles[n];if(r===void 0||r>=t)return F(`VOXEL_INVALID_TRIANGLE_INDEX`,`triangle index ${r} at position ${n} is out of range for ${t} vertices.`)}return null}function UX(e,t){return HX(e)||(t.length%3==0?null:F(`VOXEL_INVALID_QUERIES`,`queries length must be a multiple of 3 (flat xyz).`))}function WX(e){try{return O(zX(e))}catch(e){return k(_o(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function GX(e,t,n){let r=UX(e,t);if(r)return k(r);let i=WX(n);return A(i)?i:O(i.value.winding_numbers(e.vertices,e.triangles,t))}function KX(e,t,n){let r=UX(e,t);if(r)return k(r);let i=WX(n);if(A(i))return i;let a=i.value.points_inside(e.vertices,e.triangles,t);return O(Array.from(a,e=>e===1))}var qX=48,JX=2;function YX(e,t,n){let r=HX(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`repairMesh requires a non-empty triangle mesh.`));let i=t?.resolution??qX,a=t?.padding??JX;if(!Number.isInteger(i)||i<1)return k(F(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`));if(!Number.isInteger(a)||a<1)return k(F(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`));let o=WX(n);if(A(o))return o;try{try{var s=OT();let t=s.u(o.value.repair_mesh(e.vertices,e.triangles,i,a)),n=t.positions.length/3;return O({vertices:t.positions,normals:t.normals,triangles:t.indices,uvs:new Float32Array(n*2),faceGroups:[{start:0,count:t.indices.length/3,faceHash:0}]})}catch(e){s.e=e}finally{s.d()}}catch(e){return k(I(`VOXEL_REPAIR_FAILED`,e instanceof Error?e.message:`voxel repair failed (grid too large?).`,e))}}var XX=.001;function ZX(e,t=XX){try{let n=Kk(e,{tolerance:t});return n.vertices.length===0||n.triangles.length===0?k(I(`VOXEL_SHAPE_MESH_EMPTY`,`shape tessellated to an empty triangle mesh.`)):O({vertices:n.vertices,triangles:n.triangles})}catch(e){return k(I(`VOXEL_SHAPE_MESH_FAILED`,e instanceof Error?e.message:`failed to mesh shape for voxel op.`,e))}}var QX=48,$X=2,eZ={union:0,intersection:1,difference:2};function tZ(e){let t=e?.resolution??QX,n=e?.padding??$X;return!Number.isInteger(t)||t<1?k(F(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(F(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function nZ(e){if(e.positions.length===0||e.indices.length===0)return k(I(`VOXEL_DEGENERATE_RESULT`,`the voxel operation produced an empty mesh (over-shrunk offset or disjoint operands?).`));let t=e.positions.length/3;return O({vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]})}function rZ(e,t,n,r){let i=HX(e);if(i)return k(i);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`offsetMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t))return k(F(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));let a=tZ(n);if(A(a))return a;let o=WX(r);if(A(o))return o;try{try{var s=OT();return nZ(s.u(o.value.offset_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return k(I(`VOXEL_OFFSET_FAILED`,e instanceof Error?e.message:`voxel offset failed (grid too large?).`,e))}}function iZ(e,t,n,r){let i=HX(e);if(i)return k(i);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`shellMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t)||t<=0)return k(F(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));let a=tZ(n);if(A(a))return a;let o=WX(r);if(A(o))return o;try{try{var s=OT();return nZ(s.u(o.value.shell_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return k(I(`VOXEL_SHELL_FAILED`,e instanceof Error?e.message:`voxel shell failed (grid too large?).`,e))}}function aZ(e,t,n,r,i){let a=HX(e);if(a)return k(a);let o=HX(t);if(o)return k(o);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand B.`));let s=eZ[n],c=tZ(r);if(A(c))return c;let l=WX(i);if(A(l))return l;try{try{var u=OT();return nZ(u.u(l.value.voxel_boolean(e.vertices,e.triangles,t.vertices,t.triangles,s,c.value.resolution,c.value.padding)))}catch(e){u.e=e}finally{u.d()}}catch(e){return k(I(`VOXEL_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel boolean failed (grid too large?).`,e))}}function oZ(e,t,n,r){let i=ZX(e);return A(i)?i:rZ(i.value,t,n,r)}function sZ(e,t,n,r){let i=ZX(e);return A(i)?i:iZ(i.value,t,n,r)}function cZ(e,t,n,r,i){let a=ZX(e);if(A(a))return a;let o=ZX(t);return A(o)?o:aZ(a.value,o.value,n,r,i)}var lZ=48,uZ=2,dZ={union:0,intersection:1,difference:2};function fZ(e){let t=e?.resolution??lZ,n=e?.padding??uZ;return!Number.isInteger(t)||t<1?k(F(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(F(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function pZ(e){try{var t=OT();let n=e.contour(),{positions:r,normals:i,indices:a}=t.u({value:n,[Symbol.dispose](){n.free()}}).value;if(r.length===0||a.length===0)return k(I(`VOXEL_DEGENERATE_RESULT`,`the voxel field contoured to an empty mesh (over-shrunk offset or disjoint operands?).`));let o=r.length/3;return O({vertices:r,normals:i,triangles:a,uvs:new Float32Array(o*2),faceGroups:[{start:0,count:a.length/3,faceHash:0}]})}catch(e){t.e=e}finally{t.d()}}function mZ(e){return{raw:e,delete(){e.free()}}}function hZ(e){return gZ(e)}function gZ(e){let t=BT(mZ(e)),n={get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},boolean(e,t){return this.value.boolean(e.value,dZ[t]),n},offset(e){return this.value.offset(e),n},shell(e){return this.value.shell(e),n},reinit(){return this.value.reinit(),n},contour(){let e=pZ(this.value);if(A(e))throw Error(e.error.message);return e.value}};return n}function _Z(e){return!e.disposed}function vZ(){return k(F(`VOXEL_FIELD_DISPOSED`,`the voxel field handle has been disposed.`))}function yZ(e,t,n){let r=HX(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelField requires a non-empty triangle mesh.`));let i=fZ(t);if(A(i))return i;let a=WX(n);if(A(a))return a;try{return O(gZ(new a.value.VoxelField(e.vertices,e.triangles,i.value.resolution,i.value.padding)))}catch(e){return k(I(`VOXEL_FIELD_VOXELIZE_FAILED`,e instanceof Error?e.message:`voxel field voxelization failed (grid too large or non-dense?).`,e))}}function bZ(e,t,n,r,i){let a=HX(e);if(a)return k(a);let o=HX(t);if(o)return k(o);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand B.`));let s=fZ(r);if(A(s))return s;let c=WX(i);if(A(c))return c;try{return O(gZ(c.value.VoxelField.boolean_of(e.vertices,e.triangles,t.vertices,t.triangles,dZ[n],s.value.resolution,s.value.padding)))}catch(e){return k(I(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (grid too large or non-dense?).`,e))}}function xZ(e,t,n){if(!_Z(e)||!_Z(t))return vZ();try{return e.value.boolean(t.value,dZ[n]),O(e)}catch(e){return k(I(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (dim mismatch?).`,e))}}function SZ(e,t){if(!_Z(e))return vZ();if(!Number.isFinite(t))return k(F(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));try{return e.value.offset(t),O(e)}catch(e){return k(I(`VOXEL_FIELD_OFFSET_FAILED`,e instanceof Error?e.message:`voxel field offset failed.`,e))}}function CZ(e,t){if(!_Z(e))return vZ();if(!Number.isFinite(t)||t<=0)return k(F(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));try{return e.value.shell(t),O(e)}catch(e){return k(I(`VOXEL_FIELD_SHELL_FAILED`,e instanceof Error?e.message:`voxel field shell failed.`,e))}}function wZ(e){if(!_Z(e))return vZ();try{return e.value.reinit(),O(e)}catch(e){return k(I(`VOXEL_FIELD_REINIT_FAILED`,e instanceof Error?e.message:`voxel field reinit failed.`,e))}}function TZ(e){if(!_Z(e))return vZ();try{return pZ(e.value)}catch(e){return k(I(`VOXEL_FIELD_CONTOUR_FAILED`,e instanceof Error?e.message:`voxel field contour failed.`,e))}}function EZ(e,t,n){let r=ZX(e);return A(r)?r:yZ(r.value,t,n)}function DZ(e,t,n,r,i){let a=ZX(e);if(A(a))return a;let o=ZX(t);return A(o)?o:bZ(a.value,o.value,n,r,i)}var OZ=48,kZ=2;function AZ(e){try{return O(zX(e))}catch(e){return k(_o(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function jZ(e){let t=e?.resolution??OZ,n=e?.padding??kZ;return!Number.isInteger(t)||t<1?k(F(`SDF_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(F(`SDF_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function MZ(e){return{raw:e,delete(){e.free()}}}var NZ={offsetField(e){return PZ(this.value.offset_field(e.value))},roundField(e){return PZ(this.value.round_field(e.value))},shellField(e){return PZ(this.value.shell_field(e.value))},smoothUnionField(e,t){return PZ(this.value.smooth_union_field(e.value,t.value))}};function PZ(e){let t=BT(MZ(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},union(e){return PZ(this.value.union(e.value))},intersection(e){return PZ(this.value.intersection(e.value))},difference(e){return PZ(this.value.difference(e.value))},smoothUnion(e,t){return PZ(this.value.smooth_union(e.value,t))},smoothIntersection(e,t){return PZ(this.value.smooth_intersection(e.value,t))},smoothDifference(e,t){return PZ(this.value.smooth_difference(e.value,t))},offset(e){return PZ(this.value.offset(e))},round(e){return PZ(this.value.round(e))},shell(e){return PZ(this.value.shell(e))},onion(e){return PZ(this.value.onion(e))},...NZ,translate(e,t,n){return PZ(this.value.translate(e,t,n))},rotate(e,t,n,r){return PZ(this.value.rotate(e,t,n,r))},scale(e){return PZ(this.value.scale(e))},rasterize(e){return FZ(this.value,e)},rasterizeIn(e,t){return IZ(this.value,e,t)}}}function FZ(e,t){let n=jZ(t);if(A(n))return n;try{return O(hZ(e.rasterize(n.value.resolution,n.value.padding)))}catch(e){return LZ(e)}}function IZ(e,t,n){let r=jZ(n);if(A(r))return r;let i=RZ(t);if(i)return k(i);try{return O(hZ(e.rasterize_in(t.min[0],t.min[1],t.min[2],t.max[0],t.max[1],t.max[2],r.value.resolution,r.value.padding)))}catch(e){return LZ(e)}}function LZ(e){return k(I(`SDF_RASTERIZE_FAILED`,e instanceof Error?e.message:`SDF rasterization failed (grid too large?).`,e))}function RZ(e){if(![...e.min,...e.max].every(e=>Number.isFinite(e)))return F(`SDF_INVALID_BOUNDS`,`bounds must be finite numbers.`);for(let t=0;t<3;t++)if(e.max[t]<=e.min[t])return F(`SDF_INVALID_BOUNDS`,`bounds max must exceed min on every axis.`);return null}function zZ(e,t){let n=AZ(t);if(A(n))return n;try{return O(PZ(e(n.value)))}catch(e){return k(I(`SDF_BUILD_FAILED`,e instanceof Error?e.message:`SDF primitive construction failed.`,e))}}function BZ(e,t){return zZ(t=>t.Sdf.sphere(e),t)}function VZ(e,t,n,r){return zZ(r=>r.Sdf.box_(e,t,n),r)}function HZ(e,t,n,r,i){return zZ(i=>i.Sdf.rounded_box(e,t,n,r),i)}function UZ(e,t,n){return zZ(n=>n.Sdf.cylinder(e,t),n)}function WZ(e,t,n){return zZ(n=>n.Sdf.cone(e,t),n)}function GZ(e,t,n,r){return zZ(r=>r.Sdf.capsule(e[0],e[1],e[2],t[0],t[1],t[2],n),r)}function KZ(e,t,n){return zZ(n=>n.Sdf.torus(e,t),n)}function qZ(e,t,n){return zZ(n=>n.Sdf.plane(e[0],e[1],e[2],t),n)}function JZ(e){if(e.length<2)return k(F(`SDF_INVALID_SPINE`,`sweep spine needs at least 2 points.`));let t=new Float64Array(e.length*3);for(let n=0;n<e.length;n++){let r=e[n];if(!r.every(e=>Number.isFinite(e)))return k(F(`SDF_INVALID_SPINE`,`sweep spine coordinates must be finite.`));t[n*3]=r[0],t[n*3+1]=r[1],t[n*3+2]=r[2]}return O(t)}function YZ(e,t,n,r){let i=JZ(e);if(A(i))return i;let a=n?.closed??!1;return zZ(e=>e.Sdf.sweep(i.value,t.value,a),r)}var XZ={gyroid:0,schwarzP:1,diamond:2};function ZZ(e,t,n,r){let i=XZ[e];return i===void 0?k(F(`SDF_INVALID_LATTICE_KIND`,`unknown lattice kind: ${e}`)):zZ(e=>e.Sdf.lattice(i,t.value,n.value),r)}function QZ(e,t,n){return zZ(n=>n.Sdf.strut_lattice(e,t.value),n)}function $Z(e){return{raw:e,delete(){e.free()}}}function eQ(e){let t=BT($Z(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()}}}function tQ(e,t){let n=AZ(t);if(A(n))return n;try{return O(eQ(e(n.value)))}catch(e){return k(I(`SDF_FIELD_BUILD_FAILED`,e instanceof Error?e.message:`scalar field construction failed.`,e))}}function nQ(e,t){return tQ(t=>t.ScalarField.constant(e),t)}function rQ(e,t,n,r,i,a){return tQ(a=>a.ScalarField.axial_ramp(e,t,n,r,i),a)}function iQ(e,t,n,r,i,a,o){return tQ(o=>o.ScalarField.radial_ramp(e[0],e[1],e[2],t,n,r,i,a),o)}function aQ(e,t,n,r){return tQ(r=>r.ScalarField.from_sdf(e.value,t,n),r)}function oQ(e,t,n,r){return tQ(r=>r.ScalarField.clamp(e.value,t,n),r)}var sQ={gyroid:0,schwarzP:1,diamond:2},cQ=48,lQ=2;function uQ(e){let t=sQ[e.type];if(t===void 0)return k(F(`LATTICE_INVALID_TYPE`,`lattice type must be one of gyroid, schwarzP, diamond (got '${e.type}').`));if(!(e.period>0))return k(F(`LATTICE_INVALID_PERIOD`,`period must be > 0.`));if(!(e.thickness>0))return k(F(`LATTICE_INVALID_THICKNESS`,`thickness must be > 0.`));let n=e.resolution??cQ,r=e.padding??lQ;return!Number.isInteger(n)||n<1?k(F(`LATTICE_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(r)||r<1?k(F(`LATTICE_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({tag:t,period:e.period,thickness:e.thickness,resolution:n,padding:r})}function dQ(e){let t=e.positions.length/3;return{vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]}}function fQ(e,t,n){let r=HX(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(F(`LATTICE_EMPTY_MESH`,`latticeInfill requires a non-empty triangle mesh.`));let i=uQ(t);if(A(i))return i;let a=WX(n);if(A(a))return a;let{tag:o,period:s,thickness:c,resolution:l,padding:u}=i.value;try{try{var d=OT();return O(dQ(d.u(a.value.lattice_infill(e.vertices,e.triangles,l,u,o,s,c))))}catch(e){d.e=e}finally{d.d()}}catch(e){return k(I(`LATTICE_INFILL_FAILED`,e instanceof Error?e.message:`lattice infill failed (grid too large?).`,e))}}function pQ(e,t,n){let r=ZX(e);return A(r)?r:fQ(r.value,t,n)}function mQ(e,t,n){for(let t=0;t<3;t++){let n=e.min[t],r=e.max[t];if(n===void 0||r===void 0||!(n<r))return k(F(`LATTICE_INVALID_BOUNDS`,`bounds.min must be strictly less than bounds.max on every axis (axis ${t}).`))}let r=uQ(t);if(A(r))return r;let i=WX(n);if(A(i))return i;let{tag:a,period:o,thickness:s,resolution:c,padding:l}=r.value,[u,d,f]=e.min,[p,m,h]=e.max;try{try{var g=OT();return O(dQ(g.u(i.value.tpms_box(u,d,f,p,m,h,c,l,a,o,s))))}catch(e){g.e=e}finally{g.d()}}catch(e){return k(I(`TPMS_LATTICE_FAILED`,e instanceof Error?e.message:`tpms lattice failed (grid too large?).`,e))}}function hQ(e){return U().createVector3d(e[0],e[1],e[2])}function gQ(e){return U().createPoint3d(e[0],e[1],e[2])}function _Q(e){return U().createDirection3d(e[0],e[1],e[2])}function vQ(e){return[e.X(),e.Y(),e.Z()]}function yQ(e){return[e.X(),e.Y(),e.Z()]}function bQ(e){return[e.X(),e.Y(),e.Z()]}function xQ(e,t){let n=hQ(e);try{return t(n)}finally{n.delete()}}function SQ(e,t){let n=gQ(e);try{return t(n)}finally{n.delete()}}function CQ(e,t){let n=_Q(e);try{return t(n)}finally{n.delete()}}var wQ=.299,TQ=.587,EQ=.114;function DQ(e,t={}){if(e.length<2)return k(F(N.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 rows, got ${e.length}`));let n=e.length,r=e[0]?.length??0;if(r<2)return k(F(N.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 columns, got ${r}`));for(let t=0;t<n;t++){let n=e[t];if(!n||n.length!==r)return k(F(N.SURFACE_GRID_JAGGED,`surfaceFromGrid: row ${t} has ${n?.length??0} columns, expected ${r}`))}let{width:i=r-1,depth:a=n-1,scaleZ:o=1}=t,s=i/(r-1),c=a/(n-1);try{return OQ(e,n,r,s,c,o)}catch{}try{return kQ(e,n,r,s,c,o)}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.SURFACE_FAILED,`surfaceFromGrid failed: ${t}`,e))}}function OQ(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=W(U().bsplineSurface(o,t,n));return EE(s)?O(s):(IE(s),k(P(N.SURFACE_FAILED,`B-spline surface did not produce a face`)))}function kQ(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=W(U().triangulatedSurface(o,t,n));return EE(s)||DE(s)?O(s):(IE(s),k(P(N.SURFACE_FAILED,`surfaceFromGrid: unexpected shape type from sewing`)))}async function AQ(e,t={}){let n=t.channel??`luminance`,r=Math.max(1,Math.round(t.downsample??1));if(typeof createImageBitmap!=`function`)return k(vo(N.SURFACE_FAILED,`surfaceFromImage requires createImageBitmap (not available in this environment)`));let i;try{i=await createImageBitmap(e)}catch(e){return k(vo(N.SURFACE_FAILED,`surfaceFromImage: failed to decode image — ${e instanceof Error?e.message:String(e)}`))}let a=i.width,o=i.height;if(a<2||o<2)return i.close(),k(F(N.SURFACE_GRID_TOO_SMALL,`surfaceFromImage: image too small (${a}x${o}), need at least 2x2`));if(typeof OffscreenCanvas!=`function`)return i.close(),k(vo(N.SURFACE_FAILED,`surfaceFromImage requires OffscreenCanvas (not available in this environment)`));let s=new OffscreenCanvas(a,o).getContext(`2d`);if(!s)return i.close(),k(vo(N.SURFACE_FAILED,`surfaceFromImage: could not get 2D canvas context`));s.drawImage(i,0,0),i.close();let c=s.getImageData(0,0,a,o).data,l=[];for(let e=0;e<o;e+=r){let t=[];for(let i=0;i<a;i+=r){let r=(e*a+i)*4,o=c[r]??0,s=c[r+1]??0,l=c[r+2]??0,u;switch(n){case`r`:u=o/255;break;case`g`:u=s/255;break;case`b`:u=l/255;break;default:u=(wQ*o+TQ*s+EQ*l)/255;break}t.push(u)}l.push(t)}let u={};return t.width!==void 0&&(u.width=t.width),t.depth!==void 0&&(u.depth=t.depth),t.scaleZ!==void 0&&(u.scaleZ=t.scaleZ),DQ(l,u)}function jQ(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function MQ(e,t={}){if(e.length===0)return k(F(N.HULL_EMPTY_INPUT,`hull: at least one shape is required`,void 0,void 0,`Provide one or more shapes to compute a convex hull`));for(let[t,n]of e.entries()){let e=jQ(n,`hull: shapes[${t}]`);if(A(e))return e}let n=t.tolerance??.1;try{let t=U(),r=e.map(e=>e.wrapped),i=W(t.hull(r,n));return OE(i)?O(i):(IE(i),k(P(N.HULL_NOT_3D,`Hull result is not a solid; input may be degenerate`)))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?k(P(N.HULL_DEGENERATE,`Hull degenerate: ${t}`,e)):k(P(N.HULL_FAILED,`Hull operation failed: ${t}`,e))}}function NQ(e){if(e.length<4)return k(F(N.HULL_EMPTY_INPUT,`convexHull: at least 4 points required, got ${e.length}`,void 0,void 0,`Provide 4 or more non-coplanar 3D points`));try{let t=U(),n=e.map(e=>({x:e[0],y:e[1],z:e[2]})),r=W(t.hullFromPoints(n,.1));return OE(r)?O(r):(IE(r),k(P(N.HULL_NOT_3D,`convexHull result is not a solid; points may be coplanar`)))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?k(P(N.HULL_DEGENERATE,`convexHull degenerate: ${t}`,e)):k(P(N.HULL_FAILED,`convexHull failed: ${t}`,e))}}function PQ(e){let n=$E(e);if(n.length!==1)return null;let r=t(n,0);if(mD(r)!==`sphere`)return null;let i=U().area(r.wrapped);return Math.sqrt(i/(4*Math.PI))}function FQ(e,t,n){try{let r=W(U().offset(e.wrapped,t,n));return AE(r)?O(r):(IE(r),k(ho(N.MINKOWSKI_NOT_3D,`Minkowski sphere offset did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.MINKOWSKI_FAILED,`Minkowski sphere offset failed: ${t}`,e,{operation:`minkowski`,fastPath:`sphere`}))}}function IQ(e,t,n){let r=U();try{let i=tD(e),a=tD(t);if(i.length===0||a.length===0)return k(P(N.MINKOWSKI_FAILED,`Minkowski sum: one or both shapes have no vertices`,void 0,{operation:`minkowski`}));let o=[];for(let e of i){let[t,n,i]=r.vertexPosition(e.wrapped);for(let e of a){let[a,s,c]=r.vertexPosition(e.wrapped);o.push({x:t+a,y:n+s,z:i+c})}}let s=W(r.hullFromPoints(o,n));return AE(s)?O(s):(IE(s),k(ho(N.MINKOWSKI_NOT_3D,`Minkowski hull did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.MINKOWSKI_FAILED,`Minkowski general path failed: ${t}`,e,{operation:`minkowski`}))}}function LQ(e,t,n={}){let{tolerance:r=1e-6}=n;if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`minkowski: shape is a null shape`));if(U().isNull(t.wrapped))return k(F(N.MINKOWSKI_NULL_TOOL,`minkowski: tool is a null shape`));if(!AE(e)||!AE(t))return k(F(N.MINKOWSKI_NOT_3D,`minkowski: both shape and tool must be 3D`));let i=PQ(t);return i===null?IQ(e,t,r):FQ(e,i,r)}function RQ(e,t,n={}){let{tolerance:r=1e-6}=n;if(e.length<4)return k(F(N.POLYHEDRON_INSUFFICIENT_POINTS,`polyhedron: need at least 4 points, got ${e.length}`));if(t.length<4)return k(F(N.POLYHEDRON_INSUFFICIENT_FACES,`polyhedron: need at least 4 faces, got ${t.length}`));let i=[];for(let[n,r]of t.entries()){for(let t of r)if(t<0||t>=e.length)return k(F(N.POLYHEDRON_INVALID_INDEX,`polyhedron: face ${n} has out-of-range index ${t} (${e.length} points)`));if(r.length<3)continue;let t=r[0];for(let e=1;e<r.length-1;e++)i.push([t,r[e],r[e+1]])}try{let t=U(),n=e.map(([e,t,n])=>({x:e,y:t,z:n})),a=W(t.buildSolidFromFaces(n,i,r));return OE(a)?O(a):(IE(a),k(P(N.POLYHEDRON_FAILED,`Polyhedron did not produce a solid`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.POLYHEDRON_FAILED,`Polyhedron failed: ${t}`,e))}}var zQ=1e-10;function BQ(e,t,n,r){return e*r-t*n}function VQ(e,t,n,r){return e*n+t*r}function HQ(e,t){return Math.sqrt(e*e+t*t)}function UQ(e,t){let n=e[(t%e.length+e.length)%e.length];if(!n)throw Error(`Invalid polygon index ${t} for length ${e.length}`);return n}function WQ(e){let t=0;for(let n=0;n<e.length;n++){let r=UQ(e,n),i=UQ(e,n+1);t+=r.x*i.y-i.x*r.y}return t<0?[...e].reverse():e}function GQ(e,t){let n=UQ(e,t-1),r=UQ(e,t),i=UQ(e,t+1),a=r.x-n.x,o=r.y-n.y,s=HQ(a,o),c=i.x-r.x,l=i.y-r.y,u=HQ(c,l);if(s<zQ||u<zQ)return{dx:0,dy:0};let d=-o/s,f=a/s,p=-l/u,m=c/u,h=d+p,g=f+m,_=HQ(h,g);if(_<zQ)return{dx:d,dy:f};h/=_,g/=_;let v=VQ(h,g,d,f),y=Math.abs(v)>zQ?1/v:1;return{dx:h*y,dy:g*y}}function KQ(e){return!e.prev||!e.next?!1:BQ(e.x-e.prev.x,e.y-e.prev.y,e.next.x-e.x,e.next.y-e.y)<-1e-10}function qQ(e){let t=e.map((t,n)=>{let r=GQ(e,n);return{x:t.x,y:t.y,bx:r.dx,by:r.dy,origIdx:n,prev:null,next:null,active:!0}});for(let e=0;e<t.length;e++){let n=t[e],r=t[(e-1+t.length)%t.length],i=t[(e+1)%t.length];n&&r&&i&&(n.prev=r,n.next=i)}return t}function JQ(e,t){let n=e;for(let e=0;e<t&&n;e++)n.active=!1,n=n.next}function YQ(e){let t=1,n=e.next;for(;n!==e&&(t++,n=n.next,!(t>1e4)););return t}function XQ(e,t){let n=e.bx-t.bx,r=e.by-t.by,i=t.x-e.x,a=t.y-e.y;if(Math.abs(n)<zQ&&Math.abs(r)<zQ)return null;let o;if(o=Math.abs(n)>Math.abs(r)?i/n:a/r,o<zQ)return null;let s=Math.abs(n)>Math.abs(r)?r:n,c=Math.abs(n)>Math.abs(r)?a:i;if(Math.abs(s)>zQ){let e=c/s;if(Math.abs(o-e)>1e-4*Math.max(1,Math.abs(o)))return null}return o}function ZQ(e,t,n){let r=n.x-t.x,i=n.y-t.y,a=HQ(r,i);if(a<zQ)return null;let o=-i/a,s=r/a,c=(e.x-t.x)*o+(e.y-t.y)*s,l=e.bx-(t.bx+n.bx)/2,u=e.by-(t.by+n.by)/2,d=l*o+u*s;if(Math.abs(d)<zQ)return null;let f=-c/d;if(f<zQ)return null;let p=e.x+f*e.bx,m=e.y+f*e.by,h=t.x+f*t.bx,g=t.y+f*t.by,_=n.x+f*n.bx,v=n.y+f*n.by,y=_-h,b=v-g,x=HQ(y,b);if(x<zQ)return f;let S=VQ(p-h,m-g,y,b)/(x*x);return S<-.01||S>1.01?null:f}function QQ(e){let t=[];for(let n of e){if(!n.active||!n.next)continue;let e=XQ(n,n.next);if(e!==null&&e>zQ){let r=n.x+e*n.bx,i=n.y+e*n.by;t.push({time:e,x:r,y:i,nodeA:n,nodeB:n.next,type:`edge`})}if(KQ(n)){let e=n.next.next,r=0;for(;e!==n.prev&&e!==n&&r<1e3;){let i=ZQ(n,e,e.next);if(i!==null&&i>zQ){let r=n.x+i*n.bx,a=n.y+i*n.by;t.push({time:i,x:r,y:a,nodeA:n,nodeB:e,type:`split`})}e=e.next,r++}}}return t.sort((e,t)=>e.time-t.time),t}function $Q(e){if(e.length<3)return O({nodes:[],faces:[]});try{return O(e$(e))}catch(e){return k(I(N.STRAIGHT_SKELETON_FAILED,e instanceof Error?e.message:String(e),e))}}function e$(e){let t=WQ(e),n=t.length,r=[],i=Array.from({length:n},()=>[]),a=qQ(t),o=0,s=n*n*2;for(;o<s;){o++;let e=a.find(e=>e.active);if(!e)break;let t=YQ(e);if(t<=3){if(t===3){let t=e,n=t.next,a=n.next,o=XQ(t,n),s=o!==null&&o>zQ?o:0,c=(t.x+n.x+a.x)/3+s*(t.bx+n.bx+a.bx)/3,l=(t.y+n.y+a.y)/3+s*(t.by+n.by+a.by)/3,u=r.length;r.push({x:c,y:l,height:s});let d=i[t.origIdx],f=i[n.origIdx],p=i[a.origIdx];d&&d.push(u),f&&f.push(u),p&&p.push(u),t.active=!1,n.active=!1,a.active=!1}else JQ(e,t);continue}let n=a.filter(e=>e.active),s=QQ(n);if(s.length===0){for(let e of n)e.active=!1;break}let c=s[0];if(!c)break;if(c.type===`edge`){let e=c.nodeA,t=c.nodeB;if(!e.active||!t.active)continue;let n=r.length;r.push({x:c.x,y:c.y,height:c.time});let a=i[e.origIdx],o=i[t.origIdx];a&&a.push(n),o&&o.push(n),e.x=c.x,e.y=c.y,e.next=t.next,t.next.prev=e,t.active=!1;let s=[],l=e;do s.push({x:l.x,y:l.y}),l=l.next;while(l!==e);let u=GQ(s,0);e.bx=u.dx,e.by=u.dy}else{let e=c.nodeA,t=c.nodeB;if(!e.active||!t.active)continue;let n=r.length;r.push({x:c.x,y:c.y,height:c.time});let o=i[e.origIdx];o&&o.push(n);let s=i[t.origIdx];s&&s.push(n);let l={x:c.x,y:c.y,bx:0,by:0,origIdx:e.origIdx,prev:null,next:null,active:!0};a.push(l),e.x=c.x,e.y=c.y;let u=e.next,d=t.next;e.next=d,d.prev=e,l.next=u,u.prev=l,l.prev=t,t.next=l;let f=e=>{let t=[],n=e;do t.push({x:n.x,y:n.y}),n=n.next;while(n!==e);return t},p=GQ(f(e),0);e.bx=p.dx,e.by=p.dy;let m=GQ(f(l),0);l.bx=m.dx,l.by=m.dy}}let c=[];for(let e=0;e<n;e++){let a=(e+1)%n,o=[UQ(t,e),UQ(t,a)],s=[0,0],l=i[a],u=i[e];if(l)for(let e of l){let t=r[e];t&&(o.push({x:t.x,y:t.y}),s.push(t.height))}if(u)for(let e=u.length-1;e>=0;e--){let t=u[e];if(t===void 0)continue;let n=r[t];if(!n)continue;let i=o[o.length-1];i&&HQ(n.x-i.x,n.y-i.y)>zQ&&(o.push({x:n.x,y:n.y}),s.push(n.height))}o.length>=3&&c.push({vertices:o,heights:s})}let l=[];for(let e of r)l.some(t=>Math.abs(t.x-e.x)<.01&&Math.abs(t.y-e.y)<.01)||l.push(e);return{nodes:l,faces:c}}function t$(e){let t=QE(e).map(e=>{let t=Sk(e);return{x:t[0],y:t[1]}}),n=t[0],r=t[t.length-1];return t.length>1&&n&&r&&Math.abs(n.x-r.x)<1e-10&&Math.abs(n.y-r.y)<1e-10&&t.pop(),t}function n$(e){let t=[];for(let n=1;n<e-1;n++)t.push([0,n,n+1]);return t}function r$(e,t,n,r,i,a){return(n-e)*(a-t)-(r-t)*(i-e)}function i$(e,t,n,r,i,a,o,s){let c=r$(n,r,i,a,e,t),l=r$(i,a,o,s,e,t),u=r$(o,s,n,r,e,t);return!((c<0||l<0||u<0)&&(c>0||l>0||u>0))}function a$(e){let t=e.length;if(t<3)return[];if(t===3)return[[0,1,2]];let n=0;for(let r=0;r<t;r++){let i=e[r],a=e[(r+1)%t];i&&a&&(n+=i.x*a.y-a.x*i.y)}let r=[],i=Array.from({length:t},(e,t)=>t);n<0&&i.reverse();let a=(t,n,r)=>{let a=e[t],o=e[n],s=e[r];if(!a||!o||!s||r$(a.x,a.y,o.x,o.y,s.x,s.y)<=0)return!1;for(let c of i){if(c===t||c===n||c===r)continue;let i=e[c];if(i&&i$(i.x,i.y,a.x,a.y,o.x,o.y,s.x,s.y))return!1}return!0};for(;i.length>3;){let e=!1;for(let t=0;t<i.length;t++){let n=i[(t-1+i.length)%i.length],o=i[t],s=i[(t+1)%i.length];if(!(n===void 0||o===void 0||s===void 0)&&a(n,o,s)){r.push([n,o,s]),i.splice(t,1),e=!0;break}}if(!e)break}if(i.length===3){let[e,t,n]=i;e!==void 0&&t!==void 0&&n!==void 0&&r.push([e,t,n])}return r}function o$(e,t,n){let r=[];for(let i of e.faces){let e=i.vertices.map((e,n)=>[e.x,e.y,(i.heights[n]??0)*t]),a=n$(e.length);for(let[t,i,o]of a){let a=e[t],s=e[i],c=e[o];if(!a||!s||!c)continue;let l=s[0]-a[0],u=s[1]-a[1],d=s[2]-a[2],f=c[0]-a[0],p=c[1]-a[1],m=c[2]-a[2],h=u*m-d*p,g=d*f-l*m,_=l*p-u*f;if(h*h+g*g+_*_<1e-20)continue;let v=n.buildTriFace(a,s,c);v!==null&&r.push(v)}}return r}function s$(e,t){let n=(t?.angle??45)*vD,r=Math.tan(n);try{let t=t$(e);if(t.length<3)return k(P(N.ROOF_FAILED,`Wire must have at least 3 edges for roof generation`));let n=$Q(t);if(!n.ok)return n;let i=n.value;if(i.faces.length===0)return k(P(N.ROOF_FAILED,`Straight skeleton computation produced no faces`));let a=U(),o=o$(i,r,a);for(let[e,n,r]of a$(t)){let i=t[e],s=t[n],c=t[r];if(!i||!s||!c)continue;let l=[i.x,i.y,0],u=[s.x,s.y,0],d=[c.x,c.y,0],f=a.buildTriFace(l,d,u);f!==null&&o.push(f)}if(o.length===0)return k(P(N.ROOF_FAILED,`No valid triangular faces could be built`));try{let e=a.sewAndSolidify(o,1e-6),t=a.fixShape(e);return t!==e&&a.dispose(e),O(bE(t))}catch(e){try{let t=bE(a.sew(o,1e-6));return aE(t)?O(t):k(P(N.ROOF_FAILED,`Sew fallback produced invalid solid`,e))}catch(e){return k(P(N.ROOF_FAILED,`Failed to sew roof faces`,e))}}finally{for(let e of o)a.dispose(e)}}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.ROOF_FAILED,`Roof generation failed: ${t}`,e))}}function c$(e){return[[1,0,0,e[0]],[0,1,0,e[1]],[0,0,1,e[2]],[0,0,0,1]]}function l$(e){let t=e[0];return t!==void 0&&typeof t[0]==`number`}function u$(e,t,n){return{__instanced:!0,source:e,placements:t,grid:n,[Symbol.dispose](){e[Symbol.dispose]()}}}function d$(e){return typeof e==`object`&&!!e&&e.__instanced===!0}function f$(e,t){return u$(e,l$(t)?t.map(c$):t.map(e=>e.map(e=>[...e])))}function p$(e,t){let{cols:n,rows:r,pitchX:i,pitchY:a}=t;if(!Number.isInteger(n)||!Number.isInteger(r)||n<1||r<1)throw RangeError(`instanceGrid: cols and rows must be positive integers, got ${n}x${r}`);let o=[];for(let e=0;e<n;e++)for(let t=0;t<r;t++)o.push(c$([e*i,t*a,0]));return u$(e,o,{cols:n,rows:r,pitchX:i,pitchY:a})}function m$(e){return e.placements.length}function h$(e,t={}){let{source:n,placements:r,grid:i}=e;return r.length===0?k(F(`INSTANCE_EMPTY`,`materialize: instance has no placements`)):t.fuse?AE(n)?i?IP(n,[1,0,0],[0,1,0],i.cols,i.rows,i.pitchX,i.pitchY):g$(n,r,!0):k(F(`MATERIALIZE_NOT_3D`,`materialize({fuse:true}) requires a 3D source shape`)):g$(n,r,!1)}function g$(e,t,n){let r=[];for(let n of t){let t=uk(e,n);if(!t.ok){for(let e of r)e[Symbol.dispose]();return t}r.push(t.value)}let i=n?FA(r,{unsafe:!0}):O(ij(r));for(let e of r)(!i.ok||e!==i.value)&&e[Symbol.dispose]();return i}function _$(e,t){return{geometry:Kk(e.source,t),instances:e.placements}}var v$={coincident:3,concentric:4,distance:1,angle:1},y$=[1,0,0,0];function b$(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function x$(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function S$(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function C$(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function w$(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function T$(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function E$(e){return T$(C$(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function D$(e,t){let n=b$(YP(t.rotation,e.origin),t.position);return{type:e.type,origin:n,...e.normal?{normal:YP(t.rotation,e.normal)}:{},...e.direction?{direction:YP(t.rotation,e.direction)}:{}}}function O$(e,t,n){let r=e.normal??[0,0,1];return{position:w$(r,S$(r,x$(e.origin,t.origin))+n),rotation:y$}}function k$(e,t){let n=e.direction??[0,0,1],r=ZP(t.direction??[0,0,1],n),i=YP(r,t.origin);return{position:x$(e.origin,i),rotation:r}}function A$(e,t,n){let r=T$(e.normal??[0,0,1]),i=T$(t.normal??[0,0,1]),a=Math.acos(Math.max(-1,Math.min(1,S$(i,r)))),o=C$(i,r);return{position:[0,0,0],rotation:XP(Math.hypot(o[0],o[1],o[2])<1e-9?E$(i):o,a-n)}}function j$(e,t,n){let r=x$(t,e),i=Math.hypot(r[0],r[1],r[2]);return{position:x$(b$(e,w$(i<1e-9?[1,0,0]:w$(r,1/i),n)),t),rotation:y$}}function M$(e,t,n,r){let i=T$(e);return{position:w$(i,S$(i,x$(t,n))-r),rotation:y$}}function N$(e,t,n){let r=T$(e.direction??[0,0,1]),i=b$(e.origin,w$(r,S$(r,x$(t,e.origin))));if(n===0)return{position:x$(i,t),rotation:y$};let a=x$(t,i),o=Math.hypot(a[0],a[1],a[2]);return{position:x$(b$(i,w$(o<1e-9?E$(r):w$(a,1/o),n)),t),rotation:y$}}function P$(e,t,n){let r=T$(t.direction??[0,0,1]),i=x$(t.origin,e),a=x$(i,w$(r,S$(r,i))),o=Math.hypot(a[0],a[1],a[2]);return n===0?{position:w$(a,-1),rotation:y$}:{position:x$(w$(o<1e-9?E$(r):w$(a,1/o),n),a),rotation:y$}}function F$(e,t,n){let r=T$(e.direction??[0,0,1]),i=ZP(T$(t.direction??[0,0,1]),r),a=x$(YP(i,t.origin),e.origin),o=x$(a,w$(r,S$(r,a))),s=Math.hypot(o[0],o[1],o[2]);return{position:x$(w$(s<1e-9?E$(r):w$(o,1/s),n),o),rotation:i}}var I$=new Set([`plane-plane`,`plane-point`,`point-plane`,`point-point`,`axis-axis`,`axis-point`,`point-axis`]),L$={angle:`plane`,concentric:`axis`},R$=new Set([`coincident`,`distance`,`angle`,`concentric`]);function z$(e,t,n){let r=L$[e];return r?t===r&&n===r:I$.has(`${t}-${n}`)}function B$(e,t,n){switch(`${e.type}-${t.type}`){case`plane-plane`:case`plane-point`:return O$(e,t,n);case`point-plane`:return M$(t.normal??[0,0,1],e.origin,t.origin,n);case`point-point`:return j$(e.origin,t.origin,n);case`axis-axis`:return n===0?k$(e,t):F$(e,t,n);case`axis-point`:return N$(e,t.origin,n);case`point-axis`:return P$(e.origin,t,n);default:return null}}function V$(e,t,n){switch(e.type){case`concentric`:return k$(t,n);case`angle`:return A$(t,n,(e.value??0)*Math.PI/180);default:{let r=B$(t,n,e.type===`distance`?e.value??0:0);if(!r)throw Error(`solveMate: unsupported entity pair escaped filter: ${t.type}-${n.type}`);return r}}}function H$(e,t){let n=new Map;for(let t of e)n.set(t,{position:[0,0,0],rotation:y$});let r=[],i=t.filter(e=>R$.has(e.type)&&e.entityA&&e.entityB),a=new Set;for(let e of i)e.entityB&&a.add(e.entityB.node);let o=new Set;for(let t of e)a.has(t)||o.add(t);for(let e of t)e.type===`fixed`&&e.entityA&&o.add(e.entityA.node);let s=[];for(let e of i){if(!e.entityA||!e.entityB)continue;let t=e.entityA.entity.type,n=e.entityB.entity.type;if(!z$(e.type,t,n)){r.push(`${e.type}(${t}-${n})`);continue}s.push(e)}let c=!0;for(;c&&s.length>0;){c=!1;for(let e=s.length-1;e>=0;e--){let t=s[e];if(!t?.entityA||!t.entityB)continue;let r=t.entityA,i=t.entityB;if(!o.has(r.node)||(s.splice(e,1),c=!0,o.has(i.node)))continue;let a=n.get(r.node)??{position:[0,0,0],rotation:y$},l=D$(r.entity,a);n.set(i.node,V$(t,l,i.entity)),o.add(i.node)}}for(let e of s)r.push(`${e.type}(unanchored)`);return{transforms:n,dof:r.reduce((e,t)=>e+(v$[t]??v$[t.split(`(`)[0]??``]??0),0),converged:r.length===0,unsupported:r}}function U$(e){if(e.face){let t=gO(e.face);return t?{type:`axis`,origin:t.origin,direction:t.direction}:{type:`plane`,origin:hO(e.face),normal:mO(e.face)}}if(e.edge){if(xk(e.edge)===`LINE`)return{type:`axis`,origin:Sk(e.edge),direction:Tk(e.edge)};let t=Dk(e.edge);return t?{type:`axis`,origin:t.origin,direction:t.direction}:null}return e.point?{type:`point`,origin:e.point}:null}function W$(e,t){let n=U$(e),r=U$(t);return!n||!r?k(F(N.ASSEMBLY_MATE_INVALID,`solveAssembly: could not extract geometry from mate entities`)):O({entityA:{node:e.node,entity:n},entityB:{node:t.node,entity:r}})}function G$(e){switch(e.type){case`fixed`:return O({type:`fixed`,entityA:{node:e.entity.node,entity:{type:`point`,origin:[0,0,0]}}});case`coincident`:{let t=W$(e.entityA,e.entityB);return t.ok?O({type:`coincident`,...t.value}):t}case`distance`:{let t=W$(e.entityA,e.entityB);return t.ok?O({type:`distance`,...t.value,value:e.distance}):t}case`angle`:{let t=W$(e.entityA,e.entityB);return t.ok?O({type:`angle`,...t.value,value:e.angle}):t}case`concentric`:{let t=W$(e.axisA,e.axisB);return t.ok?O({type:`concentric`,...t.value}):t}}}function K$(e,t){let n=e.mates??[];return{...e,mates:[...n,t]}}function q$(e){let t=e.mates;if(!t||t.length===0)return k(F(N.ASSEMBLY_MATE_INVALID,`solveAssembly: no mates defined`));try{let n=[];HP(e,e=>{n.push(e.name)});let r=[];for(let e of t){let t=G$(e);if(!t.ok)return t;r.push(t.value)}let i=H$(n,r);if(!i.converged){let e=i.unsupported.length>0?`Unsupported constraint types: ${i.unsupported.join(`, `)} (${i.dof} DOF unresolved)`:`Assembly constraint solver did not converge`;return k(P(N.ASSEMBLY_NOT_CONVERGED,e))}return O({transforms:i.transforms,dof:i.dof,converged:i.converged})}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.ASSEMBLY_SOLVE_FAILED,`Assembly solve failed: ${t}`,e))}}function J$(e,t,n=1e-6){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`checkInterference: first shape is a null shape`));if(U().isNull(t.wrapped))return k(F(N.NULL_SHAPE_INPUT,`checkInterference: second shape is a null shape`));let r=U().distance(e.wrapped,t.wrapped);return O({hasInterference:r.value<=n,minDistance:r.value,pointOnShape1:r.point1,pointOnShape2:r.point2})}function Y$(e,n=1e-6){let r=[],i=e.map(e=>fD(e));return e.forEach((a,o)=>{for(let s=o+1;s<e.length;s++){if(X$(t(i,o),t(i,s),n))continue;let c=j(J$(a,t(e,s),n));c.hasInterference&&r.push({i:o,j:s,result:c})}}),r}function X$(e,t,n){return e.xMax+n<t.xMin||t.xMax+n<e.xMin||e.yMax+n<t.yMin||t.yMax+n<e.yMin||e.zMax+n<t.zMin||t.zMax+n<e.zMin}function Z$(e){let t=e.split(/\r?\n/),n=[],r=!1,i;for(let e=0;e<t.length-1;e+=2){let a=t[e],o=t[e+1];if(a===void 0||o===void 0)continue;let s=parseInt(a.trim(),10),c=o.trim();if(!isNaN(s)){if(s===2&&c===`ENTITIES`){r=!0;continue}if(r){if(s===0){if(c===`ENDSEC`||c===`EOF`){i&&n.push(i);break}i&&n.push(i),i={type:c,layer:`0`,data:new Map};continue}i&&(s===8?i.layer=c:i.data.set(s,c))}}}return n}function Q$(e,t,n=0){let r=e.get(t);if(r===void 0)return n;let i=parseFloat(r);return isNaN(i)?n:i}function $$(e){let{type:t,data:n}=e,r=U();if(t===`LINE`)return r.makeLineEdge([Q$(n,10),Q$(n,20),Q$(n,30)],[Q$(n,11),Q$(n,21),Q$(n,31)]);if(t===`CIRCLE`)return r.makeCircleEdge([Q$(n,10),Q$(n,20),Q$(n,30)],[0,0,1],Q$(n,40));if(t===`ARC`){let e=Q$(n,50)*Math.PI/180,t=Q$(n,51)*Math.PI/180;return r.makeCircleArc([Q$(n,10),Q$(n,20),Q$(n,30)],[0,0,1],Q$(n,40),e,t)}}async function e1(e,t){let n;try{n=await e.text()}catch(e){return k(vo(N.DXF_IMPORT_FAILED,`Failed to read DXF blob`,e))}let r=Z$(n),i=t?.layer===void 0?r:r.filter(e=>e.layer===t.layer);if(i.length===0)return O([]);let a=[];try{for(let e of i){let t=$$(e);t!==void 0&&a.push(t)}return a.length===0?O([]):O([_E(U().makeWire(a))])}catch(e){return k(vo(N.DXF_IMPORT_FAILED,`Failed to convert DXF entities to geometry`,e))}finally{for(let e of a)e.delete()}}function t1(e,t,n=1e-6){let r=U(),i=[];for(let[t,n,a]of e){let e=r.buildTriFace(t,n,a);e!==null&&i.push(e)}if(i.length===0)return k(vo(t,`No valid triangular faces could be built`));try{return O(ME(r.sewAndSolidify(i,n)))}catch{try{return O(ME(r.sew(i,n)))}catch(e){return k(vo(t,`Failed to sew triangular faces`,e))}}}function n1(e){let t=e.split(/\s+/),n=parseFloat(t[1]??``),r=parseFloat(t[2]??``),i=parseFloat(t[3]??``);return isNaN(n)||isNaN(r)||isNaN(i)?null:[n,r,i]}function r1(e){return e.split(/\s+/).slice(1).map(e=>parseInt(e.split(`/`)[0]??``,10)).filter(e=>!isNaN(e))}async function i1(e){let t=(await e.text()).split(`
60
- `),n=[],r=[];for(let e of t){let t=e.trim();if(t.startsWith(`v `)){let e=n1(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=r1(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return k(vo(N.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return a1(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return k(vo(N.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function a1(e,t){let n=[];for(let r of t)for(let t=1;t<r.length-1;t++){let i=r[0]??0,a=r[t]??0,o=r[t+1]??0,s=i>0?i-1:e.length+i,c=a>0?a-1:e.length+a,l=o>0?o-1:e.length+o,u=e[s],d=e[c],f=e[l];!u||!d||!f||n.push([u,d,f])}return t1(n,N.OBJ_IMPORT_FAILED)}function o1(e,t){let n=-1;for(let t=e.length-22;t>=0;t--)if(e[t]===80&&e[t+1]===75&&e[t+2]===5&&e[t+3]===6){n=t;break}if(n<0)return null;let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=r.getUint32(n+16,!0),a=i+r.getUint32(n+12,!0),o=i,s=new TextDecoder;for(;o<a&&r.getUint32(o,!0)===33639248;){let n=r.getUint16(o+28,!0),i=r.getUint16(o+30,!0),a=r.getUint16(o+32,!0),c=r.getUint32(o+42,!0);if(s.decode(e.subarray(o+46,o+46+n))===t){if(r.getUint16(c+8,!0)!==0)return null;let t=r.getUint16(c+26,!0),n=r.getUint16(c+28,!0),i=r.getUint32(c+18,!0),a=c+30+t+n;return e.subarray(a,a+i)}o+=46+n+i+a}return null}function s1(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function c1(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&s1(e.charCodeAt(i-1));)i--;if(i===r){n=r+2;continue}let a=e.slice(i,r),o=r+2,s=e.indexOf(`"`,o);if(s<0)break;t[a]=e.slice(o,s),n=s+1}return t}function l1(e,t){let n=[],r=`<${t} `,i=0;for(;i<e.length;){let t=e.indexOf(r,i);if(t<0)break;let a=e.indexOf(`>`,t);if(a<0)break;n.push(e.slice(t,a+1)),i=a+1}return n}function u1(e,t){let n=e.indexOf(`<${t}`);if(n<0)return null;let r=e.indexOf(`</${t}>`,n);return r<0?null:e.slice(n,r+t.length+3)}function d1(e){let t=e.startsWith(`#`)?e.slice(1):e;return[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,t.length>=8?parseInt(t.slice(6,8),16)/255:1]}function f1(e){let t=new Map,n=0;for(;n<e.length;){let r=e.indexOf(`<colorgroup`,n);if(r<0)break;let i=e.indexOf(`</colorgroup>`,r);if(i<0)break;let a=e.slice(r,i+13);n=i+13;let o=e.indexOf(`>`,r);if(o<0)continue;let s=c1(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of l1(a,`color`)){let t=c1(e).color;t!==void 0&&l.push(d1(t))}t.set(c,l)}let r=0;for(;r<e.length;){let n=e.indexOf(`<basematerials`,r);if(n<0)break;let i=e.indexOf(`</basematerials>`,n);if(i<0)break;let a=e.slice(n,i+16);r=i+16;let o=e.indexOf(`>`,n);if(o<0)continue;let s=c1(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of l1(a,`base`)){let t=c1(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(d1(t))}t.set(c,l)}return t}function p1(e){let t=[],n=[],r=[],i=f1(e);for(let n of l1(e,`vertex`)){let e=c1(n);e.x!==void 0&&e.y!==void 0&&e.z!==void 0&&t.push([parseFloat(e.x),parseFloat(e.y),parseFloat(e.z)])}let a=null,o=null,s=u1(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=c1(s.slice(0,e+1));t.pid!==void 0&&(a=parseInt(t.pid,10)),t.pindex!==void 0&&(o=parseInt(t.pindex,10))}}for(let t of l1(e,`triangle`)){let e=c1(t);if(e.v1!==void 0&&e.v2!==void 0&&e.v3!==void 0){n.push([parseInt(e.v1,10),parseInt(e.v2,10),parseInt(e.v3,10)]);let t=null,s=e.pid??(a===null?void 0:String(a)),c=e.p1??(o===null?void 0:String(o));if(s!==void 0&&c!==void 0){let e=parseInt(s,10),n=parseInt(c,10),r=i.get(e);r!==void 0&&n<r.length&&(t=r[n]??null)}r.push(t)}}return{vertices:t,triangles:n,triangleColors:r}}function m1(e){let t=new Map;for(let n of e){if(n===null)continue;let e=n.join(`,`),r=t.get(e);r===void 0?t.set(e,{count:1,color:n}):r.count++}let n=null;for(let e of t.values())(n===null||e.count>n.count)&&(n=e);return n===null?null:n.color}function h1(e){let t=U(),n=e.vertices.map(([e,t,n])=>({x:e,y:t,z:n})),r=e.triangles;try{return O(ME(t.buildSolidFromFaces(n,r,1e-6)))}catch{let t=[];for(let[n,r,i]of e.triangles){let a=e.vertices[n],o=e.vertices[r],s=e.vertices[i];!a||!o||!s||t.push([a,o,s])}return t1(t,N.THREEMF_IMPORT_FAILED)}}async function g1(e){try{let t=await e.arrayBuffer(),n=o1(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return k(vo(N.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=p1(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return k(vo(N.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=h1(r);if(i.ok){let e=m1(r.triangleColors);e!==null&&KO(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return k(vo(N.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function _1(e){try{let t=await e.arrayBuffer();return O(ME(U().importGLB(t)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(vo(N.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function v1(e){return $(e)}function y1(e,t){return nk($(e),t)}function b1(e,t,n){let r=n?.at;return rk($(e),t,r,n?.axis)}function x1(e,t){let n=t?.at;return ik($(e),t?.normal??[1,0,0],n)}function S1(e,t,n){return ak($(e),t,n?.center)}function C1(e){return mk($(e))}function w1(e,t){return uk($(e),t)}function T1(e,t){return pk($(e),t)}function E1(e,t){return fk($(e),t)}function D1(e,t,n){return jA($(e),$(t),{...n,unsafe:!0})}function O1(e,t,n){return MA($(e),$(t),{...n,unsafe:!0})}function k1(e,t){return FA(e.map(e=>$(e)),{...t,unsafe:!0})}function A1(e,t,n){return IA($(e),t.map(e=>$(e)),{...n,unsafe:!0})}function j1(e,t,n){return NA($(e),$(t),{...n,unsafe:!0})}function M1(e,t,n){return RA($(e),t,n)}function N1(e,t,n){return WA($(e),t,n)}function P1(e,t){return GA($(e),t)}function F1(e,t,n){return KA($(e),t,n)}function I1(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(II()).findAll(t)}function L1(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(zI()).findAll(t)}function R1(e){return typeof e==`object`&&!Array.isArray(e)&&typeof e!=`function`?{mode:`distAngle`,distance:e.distance,angle:e.angle}:typeof e==`function`?{mode:`standard`,distance:t=>{let n=e(t);return n===null?null:typeof n==`object`&&!Array.isArray(n)?n.distance:n}}:{mode:`standard`,distance:e}}function z1(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=I1(t,r),a=n),Wj(r,i,a)}function B1(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=I1(t,r),a=n);let o=R1(a);return o.mode===`distAngle`?dj(r,[...i??QE(r)],o.distance,o.angle):Gj(r,i,o.distance)}function V1(e,t,n,r){let i=$(e);return Kj(i,L1(t,i),n,r?.tolerance)}function H1(e,t,n){return qj($(e),t,n?.tolerance)}function U1(e,t){return Hj($(e),t)}function W1(e,t,n){let r=$(e);return Yj(r,L1(t,r),n.pullDirection,n.neutralPlane,n.angle)}function G1(e){return tM($(e))}function K1(e){return bk($(e))}function q1(e,t){return Kk($(e),t)}function J1(e,t){return qk($(e),t)}function Y1(e){return gD($(e))}function X1(e){return hk($(e))}function Z1(e){return iO(e)}function Q1(e){return Zj($(e))}function $1(e){return _k($(e))}function e0(e,t){return vM($(e),typeof t==`number`?[0,0,t]:t)}function t0(e,t){let n=t?.at??[0,0,0];return yM($(e),n,t?.axis??[0,0,1],t?.angle??2*Math.PI)}function n0(e,t){return xM(e.map(e=>$(e)),t)}function r0(e,n){if(n===void 0){let t=$E(e);if(t.length===0)return k(F(N.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=cA(t),r=hO(n)[2];for(let e=1;e<t.length;e++){let i=sA(t,e),a=hO(i)[2];a>r&&(n=i,r=a)}return O(n)}if(typeof n==`function`){let r=n(zI()).findAll(e);return r.length===0?k(yo(N.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):O(t(r,0))}return O(n)}function i0(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?{wire:e.sketchOnPlane(`XY`).wire,owned:!0}:{wire:e,owned:!1}}function a0(e,t){let n=$(e),{at:r,radius:i,axis:a}=t,o=a??[0,0,1];if(i<=0)return k(F(`DRILL_INVALID_RADIUS`,`Drill radius must be positive`));if(FD(o))return k(F(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=ND(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=ZA(i,t.depth,c,s);else{let e=fD(n),t=[[e.xMin,e.yMin,e.zMin],[e.xMax,e.yMin,e.zMin],[e.xMin,e.yMax,e.zMin],[e.xMax,e.yMax,e.zMin],[e.xMin,e.yMin,e.zMax],[e.xMax,e.yMin,e.zMax],[e.xMin,e.yMax,e.zMax],[e.xMax,e.yMax,e.zMax]],r=1/0,a=-1/0;for(let e of t){let t=(e[0]-c[0])*s[0]+(e[1]-c[1])*s[1]+(e[2]-c[2])*s[2];t<r&&(r=t),t>a&&(a=t)}--r,a+=1,l=ZA(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}try{return MA(n,l,{unsafe:!0})}finally{l[Symbol.dispose]()}}function o0(e,t){try{var n=OT();let r=$(e),{profile:i,depth:a}=t;if(a<=0)return k(F(`POCKET_INVALID_DEPTH`,`Pocket depth must be positive`));let o=r0(r,t.face);if(A(o))return o;let s=o.value,c=mO(s),l=hO(s),u=n.u(new VT),{wire:d,owned:f}=i0(i);f&&u.register(d);let p=CA(d);if(A(p))return p;u.register(p.value);let m=vM(u.register(nk(p.value,l)),ED(ND(c),-a));return A(m)?m:(u.register(m.value),MA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function s0(e,t){try{var n=OT();let r=$(e),{profile:i,height:a}=t;if(a<=0)return k(F(`BOSS_INVALID_HEIGHT`,`Boss height must be positive`));let o=r0(r,t.face);if(A(o))return o;let s=o.value,c=mO(s),l=hO(s),u=n.u(new VT),{wire:d,owned:f}=i0(i);f&&u.register(d);let p=CA(d);if(A(p))return p;u.register(p.value);let m=vM(u.register(nk(p.value,l)),ED(ND(c),a));return A(m)?m:(u.register(m.value),jA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function c0(e,t){try{var n=OT();let r=$(e),i=t?.normal??[1,0,0],a=t?.at;return FD(i)?k(F(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):jA(r,n.u(ik(r,i,a)),{unsafe:!0})}catch(e){n.e=e}finally{n.d()}}function l0(e,t){let n=$(e),{xDir:r,xCount:i,xSpacing:a,yDir:o,yCount:s,ySpacing:c}=t;if(i<1||s<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern counts must be at least 1`));if(FD(r))return k(F(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(FD(o))return k(F(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return O(n);let l=ND(r),u=ND(o),d=[n],f=[];for(let e=0;e<i;e++)for(let t=0;t<s;t++){if(e===0&&t===0)continue;let r=nk(n,[l[0]*a*e+u[0]*c*t,l[1]*a*e+u[1]*c*t,l[2]*a*e+u[2]*c*t]);d.push(r),f.push(r)}try{return FA(d,{unsafe:!0})}finally{for(let e of f)e[Symbol.dispose]()}}var u0=class extends Error{code;kind;suggestion;metadata;constructor(e){let t=e.suggestion?`${e.message}\nSuggestion: ${e.suggestion}`:e.message;super(t),this.name=`BrepError`,this.code=e.code,this.kind=e.kind,e.suggestion&&(this.suggestion=e.suggestion),e.metadata&&(this.metadata=e.metadata)}};function d0(e){if(A(e))throw new u0(e.error);return e.value}function f0(e){return e}function p0(e){return e}function m0(e){return e}function h0(e){return e}function g0(e){return{val:e,__wrapped:!0,translate:t=>E0(y1(e,t)),rotate:(t,n)=>E0(b1(e,t,n)),mirror:t=>E0(x1(e,t)),scale:(t,n)=>E0(S1(e,t,n)),applyMatrix:t=>E0(d0(w1(e,t))),moveX:t=>E0(y1(e,[t,0,0])),moveY:t=>E0(y1(e,[0,t,0])),moveZ:t=>E0(y1(e,[0,0,t])),rotateX:t=>E0(b1(e,t,{axis:[1,0,0]})),rotateY:t=>E0(b1(e,t,{axis:[0,1,0]})),rotateZ:t=>E0(b1(e,t,{axis:[0,0,1]})),bounds:()=>fD(e),describe:()=>Y1(e),clone:()=>E0(d0(C1(e))),mesh:t=>q1(e,t),meshEdges:t=>J1(e,t),isValid:()=>Q1(e),isEmpty:()=>$1(e),heal:()=>E0(d0(G1(e))),simplify:()=>E0(d0(K1(e))),toBREP:()=>d0(X1(e)),apply:t=>E0(t(e)),applyResult:t=>E0(d0(t(e))),done:()=>e}}function _0(e){return{fuse:(t,n)=>D0(d0(D1(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>D0(d0(O1(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>D0(d0(j1(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>D0(h0(d0(FA([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>D0(h0(d0(IA(e,t,{...n,unsafe:!0})))),section:(t,n)=>E0(d0(M1(e,t,n))),split:t=>E0(d0(P1(e,t))),slice:(t,n)=>d0(F1(e,t,n))}}function v0(e){return{fillet(...t){return t.length===1?D0(h0(d0(z1(f0(e),t[0])))):D0(h0(d0(z1(f0(e),t[0],t[1]))))},chamfer(...t){return t.length===1?D0(h0(d0(B1(f0(e),t[0])))):D0(h0(d0(B1(f0(e),t[0],t[1]))))},shell:(t,n,r)=>D0(h0(d0(V1(f0(e),t,n,r)))),offset:(t,n)=>D0(h0(d0(H1(f0(e),t,n)))),draft:(t,n)=>D0(h0(d0(W1(f0(e),t,n))))}}function y0(e){return{drill:t=>D0(d0(a0(e,t))),pocket:t=>D0(d0(o0(e,t))),boss:t=>D0(d0(s0(e,t))),mirrorJoin:t=>D0(d0(c0(e,t))),rectangularPattern:t=>D0(d0(l0(e,t)))}}function b0(e){return{volume:()=>d0(jM(e)),area:()=>d0(MM(e)),volumeProps:()=>d0(OM(e)),surfaceProps:()=>d0(kM(e))}}function x0(e){return{edges:()=>QE(e),faces:()=>$E(e),wires:()=>eD(e),vertices:()=>tD(e)}}function S0(e){return{linearPattern:(t,n,r)=>D0(h0(d0(PP(e,t,n,r)))),circularPattern:(t,n,r)=>D0(h0(d0(FP(e,t,n,r))))}}function C0(e){return{...g0(e),..._0(e),...v0(e),...y0(e),...b0(e),...x0(e),...S0(e)}}function w0(e){return{...g0(e),length:()=>Ek(e),startPoint:()=>Sk(e),endPoint:()=>Ck(e),pointAt:t=>wk(e,t),tangentAt:t=>Tk(e,t),isClosed:()=>Ok(e),sweep(t,n){if(!TE(e))throw Error(`sweep requires a Wire`);let r=d0(uM(m0(e),$(t),n));return D0(Array.isArray(r)?r[0]:r)}}}function T0(e){return{...g0(e),area:()=>d0(MM(e)),normalAt:t=>mO(e,t),center:()=>hO(e),surfaceType:()=>d0(oO(e)),outerWire:()=>vO(e),innerWires:()=>bO(e),extrude:t=>D0(d0(e0(p0(e),t))),revolve:t=>D0(d0(t0(p0(e),t)))}}function E0(e){return AE(e)?C0(e):EE(e)?T0(e):wE(e)||TE(e)?w0(e):g0(e)}function D0(e){return C0(e)}function O0(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return T0(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return EE(e)?T0(e):AE(e)?C0(e):wE(e)||TE(e)?w0(e):g0(e);throw Error(`shape() requires a Sketch or branded shape type`)}var k0=.25,A0=e=>Math.tan(e)-e;function j0(e,t,n,r){let i=e/Math.cos(t),a=n+r*(Math.tan(t)-t);return[i*Math.cos(a),i*Math.sin(a),0]}function M0(e,t,n,r,i){let a=[];for(let o=0;o<=r;o++){let s=.5-.5*Math.cos(o/r*Math.PI);a.push(j0(e,s*t,n,i))}return a}function N0(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function P0(e,t,n,r,i,a,o){let s=e*t/2,c=s*Math.cos(n),l=t*(1+r),u=t*(1+i-r),d=o?s-t*(1-r):s+l,f=o?s+t*(1+i+r):s-u,p=a/s,m=(Math.PI/2+2*r*Math.tan(n))/e+(o?p:-p),h=o?f:d;return{rPitch:s,rb:c,rTip:d,rRoot:f,alphaPitch:n,halfToothAngle:m,alphaTip:h<=c?0:Math.acos(Math.min(1,c/h)),toothPitch:2*Math.PI/e,isInternal:o}}function F0(e,t,n){if(t===0)return O(e);let r=A0(e)+2*t*Math.tan(e)/n,i,a;if(r>A0(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>A0(a)||r<A0(i))return k(F(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${A0(i).toFixed(4)}, ${A0(a).toFixed(4)}]`,void 0,{target:r,invLo:A0(i),invHi:A0(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);A0(e)<r?i=e:a=e}return O(.5*(i+a))}function I0(e,t,n,r,i){return F0(e,t+n,r+i)}function L0(e,t,n,r,i){return F0(e,n-t,i-r)}function R0(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function z0(e,t,n,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n))return k(F(`GEAR_NON_INTEGER_TEETH`,`tooth counts and planet count must be integers`));if(e<4||t<4||n<2)return k(F(`GEAR_TEETH_TOO_FEW`,`zs ≥ 4, zp ≥ 4, N ≥ 2 required`));if((2*e+2*t)%n!=0)return k(F(`GEAR_ASSEMBLY`,`(2·zs + 2·zp) must be divisible by N — got ${2*e+2*t} mod ${n} = ${(2*e+2*t)%n}`));let i=t+2+2*r,a=(e+t)*Math.sin(Math.PI/n);return a<=i?k(F(`GEAR_PLANET_COLLISION`,`planet tips would collide: (zs+zp)·sin(π/N) = ${a.toFixed(3)} ≤ planet tip = ${i.toFixed(3)}`)):O(void 0)}function B0(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))+Math.sqrt(Math.max(0,n*n-r*r))-i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function V0(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))-Math.sqrt(Math.max(0,n*n-r*r))+i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function H0(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function U0(e,t,n){return Math.max(0,H0(e,t)-n)}function W0(e){return e<8?.2:.485-2.88/e}function G0(e,t,n,r){let i=e*1e3,a=W0(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function K0(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function q0(e,t,n,r,i,a=!1){return G0(e,t,n,r)*K0(r,i,a)}function J0(e){return e/2}function Y0(e,t){return e+2*t}function X0(e){return e%2==0?Math.PI/e:0}function Z0(e,t,n){return e*(1+t/n)+X0(n)}function Q0(e={}){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=(e.pressureAngleDeg??20)*Math.PI/180,o=e.sunShift??0,s=e.planetShift??0,c=z0(n,r,i,s);if(A(c))return c;let l=I0(a,o,s,n,r);if(A(l))return l;let u=R0(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=Z0(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return O(d)}function $0(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=A0(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=M0(e.rb,e.alphaTip,c,r,1),d=M0(e.rb,e.alphaTip,l,r,-1).reverse(),f=cA(u),p=lA(u),m=cA(d),h=lA(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(fA([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=yA(u,{tolerance:y});if(A(b))return b;_(b.value),_(gA(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=yA(d,{tolerance:y});if(A(x))return x;_(x.value),v&&_(fA(h,[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]));let S=o-e.halfToothAngle-s,C=.5*(l+S);return S<l&&(C+=Math.PI),_(gA(v?[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]:h,[e.rRoot*Math.cos(C),e.rRoot*Math.sin(C),0],v?[e.rRoot*Math.cos(S),e.rRoot*Math.sin(S),0]:[e.rb*Math.cos(S),e.rb*Math.sin(S),0])),O(g)}function e2(e){return n2(e,!1)}function t2(e){return n2(e,!0)}function n2(e,t){try{var n=OT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=N0(i)}=e;if(r<4)return k(F(`GEAR_TEETH_TOO_FEW`,`gear needs ≥ 4 teeth, got ${r}`));if(i<=0)return k(F(`GEAR_MODULE_NONPOSITIVE`,`module must be > 0, got ${i}`));let u=P0(r,i,a,o,s,c,t),d=n.u(new VT),f=[];for(let e=0;e<r;e++){let t=$0(u,e,r,l,d);if(A(t))return t;f.push(...t.value)}let p=SA(f);return A(p)?p:O(p.value)}catch(e){n.e=e}finally{n.d()}}function r2(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=k0,flankThinning:s=0,bore:c=0,samples:l}=e;if(r<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(F(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=P0(t,n,u,a,o,s,!1);if(c>0&&c>=2*d.rRoot)return k(F(`GEAR_BORE_TOO_LARGE`,`bore diameter ${c.toFixed(2)} ≥ root diameter ${(2*d.rRoot).toFixed(2)} — would erase the gear teeth`));let f=e2({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(f))return f;let p=a2(t,u,a);return u2(f.value,r,c,d,p)}function i2(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=k0,flankThinning:s=0,ringWallThickness:c=2*e.moduleSize,samples:l}=e;if(r<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(c<=0)return k(F(`GEAR_WALL_NONPOSITIVE`,`ringWallThickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(F(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=t2({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(d))return d;let f=P0(t,n,u,a,o,s,!0),p=l2(f.rPitch+c);return A(p)?p:f2(p.value,d.value,r,f,[])}function a2(e,t,n){let r=U0(e,t,n);return r<=0?[]:[{code:`UNDERCUT_RISK`,severity:`warning`,message:`gear is undercut: increase shift by ${r.toFixed(3)} to avoid (z=${e})`,context:{deficit:r,teeth:e}}]}function o2(e){let t=c2(e);if(A(t))return t;let n=t.value,r=s2(n);if(A(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=g2(n,i,a,o),c=m2(a.solid,n);a.solid.delete();let l=h2(o.solid,n.zr),u=_2(n,s);return O({sun:i.solid,planets:c,ring:l,ringTeeth:n.zr,workingPressureAngle:n.alphaW_sp,centerDistance:n.centerDistance,contactRatio:{sunPlanet:s.crSunPlanet,planetRing:s.crPlanetRing},undercutDeficit:{sun:s.undercutSun,planet:s.undercutPlanet},...s.lewisStress?{lewisStress:s.lewisStress}:{},...s.stressConcentrationFactor?{stressConcentrationFactor:s.stressConcentrationFactor}:{},diagnostics:u})}function s2(e){let t=e.samples===void 0?{}:{samples:e.samples},n={moduleSize:e.moduleSize,thickness:e.thickness,pressureAngleDeg:e.pressureAngleDeg,clearance:e.clearance,flankThinning:e.bHalf,...t},r=r2({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(A(r))return r;let i=r2({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(A(i))return r.value.solid.delete(),i;let a=i2({...n,teeth:e.zr,shift:e.ringShift,ringWallThickness:e.ringWallThickness});return A(a)?(r.value.solid.delete(),i.value.solid.delete(),a):O({sun:r.value,planet:i.value,ring:a.value})}function c2(e){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=e.pressureAngleDeg??20,o=a*Math.PI/180,s=e.sunShift??0,c=e.planetShift??0,l=e.ringShift??0;if(e.thickness<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));let u=z0(n,r,i,c);if(A(u))return u;let d=Y0(n,r),f=I0(o,s,c,n,r);if(A(f))return f;let p=L0(o,c,l,r,d);if(A(p))return p;let m=R0(n,r,t,o,f.value);return O({moduleSize:t,sunTeeth:n,planetTeeth:r,numPlanets:i,pressureAngleDeg:a,alpha:o,alphaW_sp:f.value,alphaW_pr:p.value,clearance:e.clearance??.25,bHalf:J0(e.backlash??0),sunShift:s,planetShift:c,ringShift:l,ringWallThickness:e.ringWallThickness??2*t,thickness:e.thickness,sunBore:e.sunBore??0,planetBore:e.planetBore??0,...e.appliedTorque===void 0?{}:{appliedTorque:e.appliedTorque},...e.samples===void 0?{}:{samples:e.samples},zr:d,centerDistance:m})}function l2(e){try{var t=OT();let n=SA([t.u(new VT).register(pA(e,[0,0,0],[0,0,1]))]);return A(n)?n:O(n.value)}catch(e){t.e=e}finally{t.d()}}function u2(e,t,n,r,i){try{var a=OT();let o=a.u(new VT);o.register(e);let s=CA(e);if(A(s))return s;o.register(s.value);let c=vM(s.value,[0,0,t]);if(A(c))return c;if(n<=0)return O(p2(c.value,r,i));let l=a.u(new VT);l.register(c.value);let u=d2(n/2);if(A(u))return u;l.register(u.value);let d=vM(u.value,[0,0,t+1]);if(A(d))return d;l.register(d.value);let f=l.register(nk(d.value,[0,0,-.5])),p=MA(c.value,f);return A(p)?p:O(p2(p.value,r,i))}catch(e){a.e=e}finally{a.d()}}function d2(e){let t=l2(e);return A(t)?t:CA(t.value)}function f2(e,t,n,r,i){let a=CA(e,[t]);if(A(a))return a;let o=vM(a.value,[0,0,n]);return A(o)?o:O(p2(o.value,r,i))}function p2(e,t,n=[]){return{solid:e,diagnostics:n,pitchDiameter:2*t.rPitch,baseDiameter:2*t.rb,tipDiameter:2*t.rTip,rootDiameter:2*t.rRoot}}function m2(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=rk(e,Z0(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(nk(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function h2(e,t){let n=X0(t);if(n===0)return e;let r=rk(e,n*180/Math.PI);return e.delete(),r}function g2(e,t,n,r){let i={crSunPlanet:B0(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:V0(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:U0(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:U0(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:q0(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:q0(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:q0(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:K0(e.sunTeeth,e.alpha),planet:K0(e.planetTeeth,e.alpha),ring:K0(e.zr,e.alpha,!0)}}return i}function _2(e,t){let n=[];t.crSunPlanet<1.2&&n.push({code:`CONTACT_RATIO_LOW_SUN_PLANET`,severity:`warning`,message:`sun-planet contact ratio ${t.crSunPlanet.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crSunPlanet}}),t.crPlanetRing<1.2&&n.push({code:`CONTACT_RATIO_LOW_PLANET_RING`,severity:`warning`,message:`planet-ring contact ratio ${t.crPlanetRing.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crPlanetRing}}),t.undercutSun>0&&n.push({code:`UNDERCUT_RISK_SUN`,severity:`warning`,message:`sun gear is undercut: increase sunShift by ${t.undercutSun.toFixed(3)} to avoid`,context:{deficit:t.undercutSun,sunTeeth:e.sunTeeth}}),t.undercutPlanet>0&&n.push({code:`UNDERCUT_RISK_PLANET`,severity:`warning`,message:`planet gear is undercut: increase planetShift by ${t.undercutPlanet.toFixed(3)} to avoid`,context:{deficit:t.undercutPlanet,planetTeeth:e.planetTeeth}});let r=Math.abs(e.sunShift)+Math.abs(e.planetShift)+Math.abs(e.ringShift);e.appliedTorque!==void 0&&r>.05&&n.push({code:`LEWIS_Y_SHIFT_UNCORRECTED`,severity:`info`,message:`Lewis stress uses unshifted Y(z) and K_f approximations; expect ±5% per 0.1 of profile shift`});let i=e.ringShift-(e.sunShift+2*e.planetShift);return Math.abs(i)>1e-6&&n.push({code:`PLANETARY_SHIFT_KINEMATIC_MISMATCH`,severity:`warning`,message:`ringShift should equal sunShift + 2·planetShift for both meshes to share working PA; off by ${i.toFixed(3)}`,context:{kinematicError:i,sunShift:e.sunShift,planetShift:e.planetShift,ringShift:e.ringShift}}),n}var v2=TX({addHoles:()=>AP,bezier:()=>_P,box:()=>iP,bsplineApprox:()=>gP,circle:()=>dP,compound:()=>EP,cone:()=>sP,cylinder:()=>aP,ellipse:()=>fP,ellipseArc:()=>hP,ellipsoid:()=>lP,face:()=>xP,fill:()=>wA,filledFace:()=>SP,helix:()=>pP,line:()=>uP,offsetFace:()=>OP,polygon:()=>wP,polyhedron:()=>RQ,sewShells:()=>kP,solid:()=>DP,sphere:()=>oP,subFace:()=>CP,tangentArc:()=>vP,threePointArc:()=>mP,torus:()=>cP,vertex:()=>TP,wire:()=>yP,wireLoop:()=>bP}),y2=TX({checkBoolean:()=>Tj,convexHull:()=>NQ,cut:()=>O1,cutAll:()=>IA,cutAllBisect:()=>gj,fuse:()=>D1,fuseAll:()=>FA,fuseAllBisect:()=>bj,hull:()=>MQ,intersect:()=>j1,minkowski:()=>LQ,section:()=>M1,sectionToFace:()=>N1,slice:()=>F1,split:()=>P1}),b2=TX({chamfer:()=>B1,draft:()=>W1,fillet:()=>z1,heal:()=>G1,offset:()=>H1,shell:()=>V1,simplify:()=>K1,thicken:()=>U1,variableFillet:()=>Xj}),x2=TX({applyMatrix:()=>w1,clone:()=>C1,composeTransforms:()=>dk,mirror:()=>x1,rotate:()=>b1,scale:()=>S1,transformCopy:()=>T1,translate:()=>y1}),S2=TX({checkAllInterferences:()=>Y$,checkInterference:()=>J$,createDistanceQuery:()=>IM,measureArea:()=>MM,measureCurvatureAt:()=>LM,measureCurvatureAtMid:()=>RM,measureDistance:()=>PM,measureDistanceProps:()=>FM,measureLength:()=>NM,measureLinearProps:()=>AM,measureSurfaceProps:()=>kM,measureVolume:()=>jM,measureVolumeProps:()=>OM}),C2=TX({blueprintToDXF:()=>pY,exportAssemblySTEP:()=>NP,exportDXF:()=>fY,exportGlb:()=>$J,exportGltf:()=>QJ,exportIGES:()=>$k,exportOBJ:()=>HJ,exportSTEP:()=>Zk,exportSTEPConfigured:()=>XY,exportSTL:()=>Qk,exportThreeMF:()=>MY,importDXF:()=>e1,importGLB:()=>_1,importIGES:()=>$Y,importOBJ:()=>i1,importSTEP:()=>ZY,importSTL:()=>QY,importSVG:()=>YY,importSVGPathD:()=>JY,importThreeMF:()=>g1}),w2=TX({cornerFinder:()=>fR,edgeFinder:()=>II,faceFinder:()=>zI,getSingleFace:()=>HI,vertexFinder:()=>PX,wireFinder:()=>VI}),T2=TX({complexExtrude:()=>fM,extrude:()=>e0,guidedSweep:()=>_M,loft:()=>n0,multiSectionSweep:()=>gM,revolve:()=>t0,roof:()=>s$,supportExtrude:()=>dM,surfaceFromGrid:()=>DQ,surfaceFromImage:()=>AQ,sweep:()=>uM,twistExtrude:()=>pM}),E2=TX({circularPattern:()=>FP,linearPattern:()=>PP}),D2=14695981039346656037n,O2=1099511628211n,k2=18446744073709551615n;function A2(){return D2}function j2(e,t){return(e^BigInt(t&255))*O2&k2}function M2(e,t){let n=e;for(let e=0;e<t.length;e++)n=j2(n,t[e]??0);return n}var N2=new TextEncoder;function P2(e,t){return M2(e,N2.encode(t))}var F2=new ArrayBuffer(8),I2=new DataView(F2),L2=new Uint8Array(F2);function R2(e,t){return I2.setFloat64(0,Object.is(t,-0)?0:t),M2(e,L2)}function z2(e,t){let n=e,r=t&k2;for(let e=0;e<8;e++)n=j2(n,Number(r&255n)),r>>=8n;return n}function B2(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=j2(n,r&255),r>>>=8;return n}function V2(e,t){return j2(e,+!!t)}function H2(e){return(e&k2).toString(16).padStart(16,`0`)}var U2=new Set;function W2(e){return P2(A2(),e)}function G2(e){return{kind:`NumLit`,value:e,structuralHash:R2(W2(`NumLit`),e),freeParams:U2}}function K2(e){let t=W2(`Vec3Lit`);for(let n of e)t=R2(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:U2}}function q2(e){let t=W2(`Vec2Lit`);for(let n of e)t=R2(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:U2}}function J2(e){return{kind:`Param`,name:e,structuralHash:P2(W2(`Param`),e),freeParams:new Set([e])}}function Y2(e,t,n){let r=P2(W2(`BinOp`),e);return r=z2(r,t.structuralHash),r=z2(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:a4(t.freeParams,n.freeParams)}}function X2(e,t){let n=P2(W2(`UnaryOp`),e);return n=z2(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function Z2(e,t){let n=B2(W2(`Component`),t);return n=z2(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function Q2(e,t){let n=B2(W2(`BuildVec`),e),r=new Set;for(let e of t){n=z2(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var $2=(e,t)=>Y2(`+`,e,t),e4=(e,t)=>Y2(`*`,e,t);function t4(e){return typeof e==`number`?G2(e):e}function n4(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?K2([n[0],n[1],n[2]]):q2([n[0],n[1]]):Q2(t,n.map(t4))}function r4(e){return n4(e,3)}function i4(e){return n4(e,2)}function a4(e,t){if(e.size===0)return t;if(t.size===0)return e;let n=new Set(e);for(let e of t)n.add(e);return n}function o4(e){return typeof e==`number`}function s4(e,t){return o4(e)?O(e):k(F(N.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function c4(e,t,n){return Array.isArray(e)&&e.length===t?O(e):k(F(N.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${o4(e)?`number`:`vector(${e.length})`}`))}function l4(e,t){switch(e.kind){case`NumLit`:return O(e.value);case`Vec3Lit`:return O(e.value);case`Vec2Lit`:return O(e.value);case`Param`:{let n=t[e.name];return n===void 0?k(F(N.NULL_SHAPE_INPUT,`unbound param: ${e.name}`)):O(n)}case`BinOp`:return u4(e,t);case`UnaryOp`:return d4(e,t);case`Component`:return f4(e,t);case`BuildVec`:return p4(e,t)}}function u4(e,t){let n=l4(e.a,t);if(!n.ok)return n;let r=l4(e.b,t);if(!r.ok)return r;let i=s4(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=s4(r.value,`BinOp(${e.op}).b`);if(!a.ok)return a;switch(e.op){case`+`:return O(i.value+a.value);case`-`:return O(i.value-a.value);case`*`:return O(i.value*a.value);case`/`:return a.value===0?k(F(N.NULL_SHAPE_INPUT,`BinOp(/): division by zero`)):O(i.value/a.value)}}function d4(e,t){let n=l4(e.arg,t);if(!n.ok)return n;let r=s4(n.value,`UnaryOp(${e.op})`);if(!r.ok)return r;let i=r.value;switch(e.op){case`neg`:return O(-i);case`sin`:return O(Math.sin(i));case`cos`:return O(Math.cos(i));case`sqrt`:return O(Math.sqrt(i));case`abs`:return O(Math.abs(i))}}function f4(e,t){let n=l4(e.vec,t);if(!n.ok)return n;if(o4(n.value))return k(F(N.NULL_SHAPE_INPUT,`Component: cannot index a scalar`));let r=n.value,i=r[e.index];return i===void 0?k(F(N.NULL_SHAPE_INPUT,`Component: index ${e.index} out of range for Vec${r.length}`)):O(i)}function p4(e,t){if(e.components.length!==e.dim)return k(F(N.NULL_SHAPE_INPUT,`BuildVec(${e.dim}): expected ${e.dim} components, got ${e.components.length}`));let n=[];for(let r of e.components){let e=l4(r,t);if(!e.ok)return e;let i=s4(e.value,`BuildVec.component`);if(!i.ok)return i;n.push(i.value)}return O(e.dim===2?[n[0],n[1]]:[n[0],n[1],n[2]])}function m4(e,t,n){let r=l4(e,t);return r.ok?s4(r.value,n):r}function h4(e,t,n){let r=l4(e,t);if(!r.ok)return r;let i=c4(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return O([a,o,s])}function g4(e,t){if(t.size===0)return Object.freeze({});let n={};for(let r of t){let t=e[r];t!==void 0&&(n[r]=t)}return Object.freeze(n)}var _4=new Set;function v4(e){return P2(A2(),e)}function y4(e,t){return z2(e,t.structuralHash)}function b4(e,t){return t===void 0?V2(e,!1):y4(V2(e,!0),t)}function x4(e,t){return t===void 0?V2(e,!1):R2(V2(e,!0),t)}function S4(...e){let t=new Set;for(let n of e)if(n)for(let e of n.freeParams)t.add(e);return t.size===0?_4:t}function C4(e,t,n){let r=t4(e),i=t4(t),a=t4(n),o=v4(`Box`);return o=y4(y4(y4(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:S4(r,i,a)}}function w4(e){let t=t4(e);return{kind:`Sphere`,radius:t,structuralHash:y4(v4(`Sphere`),t),freeParams:t.freeParams}}function T4(e,t){let n=t4(e),r=t4(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:y4(y4(v4(`Cylinder`),n),r),freeParams:S4(n,r)}}function E4(e,t,n){let r=t4(e),i=t4(t),a=t4(n),o=v4(`Cone`);return o=y4(y4(y4(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:S4(r,i,a)}}function D4(e,t){let n=t4(e),r=t4(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:y4(y4(v4(`Torus`),n),r),freeParams:S4(n,r)}}function O4(e){let t=e.map(r4),n=B2(v4(`Polygon`),t.length);for(let e of t)n=y4(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:S4(...t)}}function k4(e){let t=t4(e);return{kind:`Circle`,radius:t,structuralHash:y4(v4(`Circle`),t),freeParams:t.freeParams}}function A4(e,t){let n=r4(e),r=r4(t);return{kind:`Line`,from:n,to:r,structuralHash:y4(y4(v4(`Line`),n),r),freeParams:S4(n,r)}}function j4(e){let t=r4(e);return{kind:`Vertex`,point:t,structuralHash:y4(v4(`Vertex`),t),freeParams:t.freeParams}}function M4(e){return{kind:`Empty`,output:e,structuralHash:P2(v4(`Empty`),e),freeParams:_4}}function N4(){return M4(`Solid`)}function P4(){return M4(`Face`)}function F4(){return M4(`Wire`)}function I4(e,t,n,r){return x4(y4(y4(v4(e),t),n),r)}function L4(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:I4(`Fuse`,e,t,n),freeParams:S4(e,t)}}function R4(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:I4(`Cut`,e,t,n),freeParams:S4(e,t)}}function z4(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:I4(`Intersect`,e,t,n),freeParams:S4(e,t)}}function B4(e,t){let n=B2(v4(`FuseAll`),e.length);for(let t of e)n=y4(n,t);return n=x4(n,t),{kind:`FuseAll`,shapes:e,tolerance:t,structuralHash:n,freeParams:S4(...e)}}function V4(e,t,n){let r=y4(v4(`CutAll`),e);r=B2(r,t.length);for(let e of t)r=y4(r,e);return r=x4(r,n),{kind:`CutAll`,base:e,tools:t,tolerance:n,structuralHash:r,freeParams:S4(e,...t)}}function H4(e){return e===void 0?void 0:r4(e)}function U4(e,t){let n=r4(t);return{kind:`Translate`,target:e,vector:n,structuralHash:y4(y4(v4(`Translate`),e),n),freeParams:S4(e,n)}}function W4(e,t,n){let r=t4(t),i=H4(n?.axis),a=H4(n?.at),o=y4(y4(v4(`Rotate`),e),r);return o=b4(o,i),o=b4(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:S4(e,r,i,a)}}function G4(e,t,n){let r=t4(t),i=H4(n?.center),a=y4(y4(v4(`Scale`),e),r);return a=b4(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:S4(e,r,i)}}function K4(e,t){let n=H4(t?.normal),r=H4(t?.at),i=y4(v4(`Mirror`),e);return i=b4(i,n),i=b4(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:S4(e,n,r)}}function q4(e){let t=B2(v4(`Compound`),e.length);for(let n of e)t=y4(t,n);return{kind:`Compound`,children:e,structuralHash:t,freeParams:S4(...e)}}function J4(e,t,n=!1){let r=t.map(e=>e.map(e=>[...e])),i=B2(V2(y4(v4(`Instance`),e),n),r.length);for(let e of r)for(let t of e.flat())i=R2(i,t);return{kind:`Instance`,source:e,placements:r,fuse:n,structuralHash:i,freeParams:S4(e)}}function Y4(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:return`Solid`;case`Polygon`:return`Face`;case`Circle`:case`Line`:return`Edge`;case`Vertex`:return`Vertex`;case`Empty`:return e.output;case`Fuse`:case`Cut`:case`Intersect`:return Y4(e.a);case`FuseAll`:return e.shapes[0]?Y4(e.shapes[0]):`Solid`;case`CutAll`:return Y4(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return Y4(e.target);case`Compound`:return`Compound`;case`Instance`:return e.fuse?`Solid`:`Compound`}}function X4(e,t){let n=m4(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=m4(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=m4(e.z,t.env,`Box.z`);return i.ok?O(iP(n.value,r.value,i.value)):i}function Z4(e,t){let n=m4(e.radius,t.env,`Sphere.radius`);return n.ok?O(oP(n.value)):n}function Q4(e,t){let n=m4(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=m4(e.height,t.env,`Cylinder.height`);return r.ok?O(aP(n.value,r.value)):r}function $4(e,t){let n=m4(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=m4(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=m4(e.height,t.env,`Cone.height`);return i.ok?O(sP(n.value,r.value,i.value)):i}function e3(e,t){let n=m4(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=m4(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?O(cP(n.value,r.value)):r}function t3(e,t){let n=[];for(let r of e.points){let e=h4(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return wP(n)}function n3(e,t){let n=m4(e.radius,t.env,`Circle.radius`);return n.ok?O(dP(n.value)):n}function r3(e,t){let n=h4(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=h4(e.to,t.env,`Line.to`);return r.ok?O(uP(n.value,r.value)):r}function i3(e,t){let n=h4(e.point,t.env,`Vertex.point`);return n.ok?O(TP(n.value)):n}function a3(e){return k(I(N.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function o3(e,t,n){let r=e.evalNode(t);return r.ok?AE(r.value)?O(r.value):k(ho(N.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function s3(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function c3(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=o3(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=o3(t,e.b,`Fuse.b`);return r.ok?jA(n.value,r.value,s3(e,t)):r}function l3(e,t){if(e.a.kind===`Empty`)return a3(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=o3(t,e.a,`Cut.a`);if(!n.ok)return n;let r=o3(t,e.b,`Cut.b`);return r.ok?MA(n.value,r.value,s3(e,t)):r}function u3(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return a3(`Intersect`);let n=o3(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=o3(t,e.b,`Intersect.b`);return r.ok?NA(n.value,r.value,s3(e,t)):r}function d3(e,t,n){let r=[];for(let i of t){let t=o3(e,i,n);if(!t.ok)return t;r.push(t.value)}return O(r)}function f3(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return a3(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=d3(t,n,`FuseAll.operand`);return r.ok?FA(r.value,s3(e,t)):r}function p3(e,t){if(e.base.kind===`Empty`)return a3(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=o3(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=d3(t,n,`CutAll.tool`);return i.ok?IA(r.value,i.value,s3(e,t)):i}function m3(e){return k(I(N.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function h3(e,t,n,r){return e?h4(e,t,n):O(r)}function g3(e,t){let n=U(),{handle:r,dispose:i}=n.composeTransform(t),a;try{a=ME(n.locate(e.wrapped,r))}finally{i()}return ZO(e)&&tk(e,a),a}function _3(e,t){if(e.target.kind===`Empty`)return m3(`Translate`);let n=h4(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?O(g3(r.value,[{type:`translate`,x:n.value[0],y:n.value[1],z:n.value[2]}])):r}function v3(e,t){if(e.target.kind===`Empty`)return m3(`Rotate`);let n=m4(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=h3(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=h3(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?O(g3(a.value,[{type:`rotate`,angle:n.value,axis:r.value,center:i.value}])):a}function y3(e,t){if(e.target.kind===`Empty`)return m3(`Scale`);let n=m4(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=h3(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(ak(i.value,n.value,r.value)):i}function b3(e,t){if(e.target.kind===`Empty`)return m3(`Mirror`);let n=h3(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=h3(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(ik(i.value,n.value,r.value)):i}function x3(e,t){let n=e.children.filter(e=>e.kind!==`Empty`);if(n.length===0)return k(I(N.NULL_SHAPE_INPUT,`Compound: cannot materialize a compound with zero non-empty children`));let r=[];for(let e of n){let n=t.evalNode(e);if(!n.ok)return n;r.push(n.value)}return O(EP(r))}function S3(){return k(I(N.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function C3(e,t){let n=t.evalNode(e.source);return n.ok?h$(f$(n.value,e.placements),{fuse:e.fuse}):n}function w3(e,t){switch(e.kind){case`Box`:return X4(e,t);case`Sphere`:return Z4(e,t);case`Cylinder`:return Q4(e,t);case`Cone`:return $4(e,t);case`Torus`:return e3(e,t);case`Polygon`:return t3(e,t);case`Circle`:return n3(e,t);case`Line`:return r3(e,t);case`Vertex`:return i3(e,t);case`Empty`:return S3();case`Fuse`:return c3(e,t);case`Cut`:return l3(e,t);case`Intersect`:return u3(e,t);case`FuseAll`:return f3(e,t);case`CutAll`:return p3(e,t);case`Translate`:return _3(e,t);case`Rotate`:return v3(e,t);case`Scale`:return y3(e,t);case`Mirror`:return b3(e,t);case`Compound`:return x3(e,t);case`Instance`:return C3(e,t)}}function T3(e,t){if(typeof t==`number`)return R2(V2(e,!1),t);let n=V2(e,!0);n=B2(n,t.length);for(let e of t)n=R2(n,e);return n}function E3(e,t){if(t.size===0)return A2();let n=g4(e,t),r=Object.keys(n).sort(),i=A2();for(let e of r){i=P2(i,e);let t=n[e];t!==void 0&&(i=T3(i,t))}return i}function D3(e,t,n,r){let i=E3(t,e.freeParams),a=r===void 0?`d`:R2(A2(),r).toString(16);return`${H2(e.structuralHash)}:${n}:${H2(i)}:${a}`}var O3=[1,0,0,0];function k3(e,t){let n=m4(e.angle,t,`evaluateMesh.peelRigid`);if(!n.ok)return null;let r=e.axis?h4(e.axis,t,`evaluateMesh.peelRigid`):O([0,0,1]);if(!r.ok)return null;let i=e.at?h4(e.at,t,`evaluateMesh.peelRigid`):O([0,0,0]);return i.ok?{angle:n.value,axis:r.value,center:i.value}:null}function A3(e,t){let n=e,r=O3,i=[0,0,0];for(;;)if(n.kind===`Translate`){let e=h4(n.vector,t,`evaluateMesh.peelRigid`);if(!e.ok)break;let a=YP(r,e.value);i=[i[0]+a[0],i[1]+a[1],i[2]+a[2]],n=n.target}else if(n.kind===`Rotate`){let e=k3(n,t);if(!e)break;let a=XP(e.axis,e.angle*Math.PI/180),o=QP(r,a),s=YP(r,e.center),c=YP(o,e.center);i=[i[0]+s[0]-c[0],i[1]+s[1]-c[1],i[2]+s[2]-c[2]],r=o,n=n.target}else break;return{inner:n,rot:r,trans:i}}function j3(e){return e[0]===1&&e[1]===0&&e[2]===0&&e[3]===0}function M3(e,t,n,r,i,a,o,s,c){for(let l=0;l<t.length;l+=3){let u=t[l]??0,d=t[l+1]??0,f=t[l+2]??0,p=2*(i*f-a*d),m=2*(a*u-r*f),h=2*(r*d-i*u);e[l]=u+n*p+(i*h-a*m)+o,e[l+1]=d+n*m+(a*p-r*h)+s,e[l+2]=f+n*h+(r*m-i*p)+c}}function N3(e,t,n){let[r,i,a]=n,o=j3(t);if(o&&r===0&&i===0&&a===0)return e;let s=e.vertices,c=new Float32Array(s.length);if(o){for(let e=0;e<s.length;e+=3)c[e]=(s[e]??0)+r,c[e+1]=(s[e+1]??0)+i,c[e+2]=(s[e+2]??0)+a;return{...e,vertices:c}}let[l,u,d,f]=t;M3(c,s,l,u,d,f,r,i,a);let p=e.normals,m=new Float32Array(p.length);return M3(m,p,l,u,d,f,0,0,0),{...e,vertices:c,normals:m}}function P3(e,t,n){let r=new Map,i=Math.min(t.length,n.length);for(let e=0;e<i;e++){let i=t[e],a=n[e];i!==void 0&&a!==void 0&&r.set(i,a)}return e.map(e=>({...e,faceId:r.get(e.faceId)??e.faceId}))}var F3=class{cache=new Map;refCounts=new Map;evaluating=!1;pendingKeys=[];kernelId;defaultTolerance;maxCacheEntries;maxMeshCacheEntries;meshCache=new Map;onStep;hits=0;misses=0;evictions=0;constructor(e={}){this.kernelId=e.kernel??_T()??`unregistered`,this.defaultTolerance=e.tolerance,e.onStep&&(this.onStep=e.onStep);let t=e.maxCacheEntries;if(t!==void 0&&(!Number.isInteger(t)||t<1))throw RangeError(`Evaluator: maxCacheEntries must be a positive integer, got ${String(t)}`);this.maxCacheEntries=t;let n=e.maxMeshCacheEntries;if(n!==void 0&&(!Number.isInteger(n)||n<1))throw RangeError(`Evaluator: maxMeshCacheEntries must be a positive integer, got ${String(n)}`);this.maxMeshCacheEntries=n}evaluate(e,t={}){if(this.maxCacheEntries!==void 0&&this.evaluating)throw Error(`Evaluator.evaluate() is not reentrant when maxCacheEntries is set — do not call it from an onStep callback.`);return vT(this.kernelId,()=>{this.evaluating=!0;let n=!1;try{let r=this.evaluateInner(e,t);return this.maxCacheEntries!==void 0&&r.ok&&this.trimCache(this.maxCacheEntries),n=r.ok,r}finally{!n&&this.maxCacheEntries!==void 0&&this.rollbackPending(),this.pendingKeys.length=0,this.evaluating=!1}})}evaluateMesh(e,t={},n={}){n.signal?.throwIfAborted();let r=n.cache??!0,i=To(),a=n.tolerance??i.tolerance,o=n.angularTolerance??i.angularTolerance,s=`${D3(e,t,this.kernelId,this.defaultTolerance)}|${Ik(a,o,n.skipNormals??!1,n.includeUVs??!1)}`;if(r){let r=this.meshCache.get(s);if(r!==void 0)return this.maxMeshCacheEntries!==void 0&&(this.meshCache.delete(s),this.meshCache.set(s,r)),O(r);let{inner:i,rot:a,trans:o}=A3(e,t);if(i!==e){let r=this.evaluateMesh(i,t,n);if(!r.ok)return r;let c=this.evaluate(i,t);if(!c.ok)return c;let l=$E(c.value).map(gk),u=this.evaluate(e,t);if(!u.ok)return u;let d=$E(u.value).map(gk),f=N3(r.value,a,o),p=P3(f.faceGroups,l,d),m=new Set(d);if(p.every(e=>m.has(e.faceId))){let e={...f,faceGroups:p};return this.meshCache.set(s,e),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries),O(e)}}}let c=this.evaluate(e,t);if(!c.ok)return c;let l=vT(this.kernelId,()=>Kk(c.value,n));return r&&(this.meshCache.set(s,l),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries)),O(l)}evaluateInner(e,t){let n=D3(e,t,this.kernelId,this.defaultTolerance),r=this.cache.get(n);if(r!==void 0)return this.hits++,this.maxCacheEntries!==void 0&&(this.cache.delete(n),this.cache.set(n,r)),this.onStep?.({node:e,cacheKey:n,cacheHit:!0}),O(r);this.misses++;let i=w3(e,{env:t,tolerance:this.defaultTolerance,evalNode:e=>this.evaluateInner(e,t)});if(!i.ok)return i;let a=i.value;return this.refCounts.set(a,(this.refCounts.get(a)??0)+1),this.cache.set(n,a),this.maxCacheEntries!==void 0&&this.pendingKeys.push(n),this.onStep?.({node:e,cacheKey:n,cacheHit:!1}),i}releaseShape(e){let t=(this.refCounts.get(e)??1)-1;t<=0?(this.refCounts.delete(e),e[Symbol.dispose]()):this.refCounts.set(e,t)}trimCache(e){for(;this.cache.size>e;){let e=this.cache.keys().next();if(e.done)break;let t=e.value,n=this.cache.get(t);this.cache.delete(t),this.evictions++,n!==void 0&&this.releaseShape(n)}}trimMeshCache(e){for(;this.meshCache.size>e;){let e=this.meshCache.keys().next();if(e.done)break;this.meshCache.delete(e.value)}}rollbackPending(){for(let e of this.pendingKeys){let t=this.cache.get(e);t!==void 0&&(this.cache.delete(e),this.releaseShape(t))}}cacheStats(){return{hits:this.hits,misses:this.misses,entries:this.cache.size,evictions:this.evictions}}resetStats(){this.hits=0,this.misses=0,this.evictions=0}[Symbol.dispose](){for(let e of this.refCounts.keys())e[Symbol.dispose]();this.refCounts.clear(),this.cache.clear(),this.meshCache.clear()}};function I3(e,t){try{var n=OT();let r=t(n.u(new F3(e)));if(r instanceof Promise)throw Error(`withEvaluator() callback returned a Promise. Async code must construct an Evaluator directly and dispose it manually — borrowed shapes would otherwise be freed before the Promise resolves.`);return r}catch(e){n.e=e}finally{n.d()}}function L3(e){return{csgVersion:1,root:U3(e)}}function R3(e){switch(e.kind){case`NumLit`:return{kind:`NumLit`,value:e.value};case`Vec3Lit`:return{kind:`Vec3Lit`,value:[e.value[0],e.value[1],e.value[2]]};case`Vec2Lit`:return{kind:`Vec2Lit`,value:[e.value[0],e.value[1]]};case`Param`:return{kind:`Param`,name:e.name};case`BinOp`:return{kind:`BinOp`,op:e.op,a:R3(e.a),b:R3(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:R3(e.arg)};case`Component`:return{kind:`Component`,vec:R3(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(R3)}}}function z3(e){switch(e.kind){case`Box`:return{kind:`Box`,x:R3(e.x),y:R3(e.y),z:R3(e.z)};case`Sphere`:return{kind:`Sphere`,radius:R3(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:R3(e.radius),height:R3(e.height)};case`Cone`:return{kind:`Cone`,radius1:R3(e.radius1),radius2:R3(e.radius2),height:R3(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:R3(e.majorRadius),minorRadius:R3(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(R3)};case`Circle`:return{kind:`Circle`,radius:R3(e.radius)};case`Line`:return{kind:`Line`,from:R3(e.from),to:R3(e.to)};case`Vertex`:return{kind:`Vertex`,point:R3(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function B3(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:U3(e.a),b:U3(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(U3),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:U3(e.base),tools:e.tools.map(U3),tolerance:e.tolerance};default:return}}function V3(e){return e?R3(e):void 0}function H3(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:U3(e.target),vector:R3(e.vector)};case`Rotate`:return{kind:`Rotate`,target:U3(e.target),angle:R3(e.angle),axis:V3(e.axis),at:V3(e.at)};case`Scale`:return{kind:`Scale`,target:U3(e.target),factor:R3(e.factor),center:V3(e.center)};case`Mirror`:return{kind:`Mirror`,target:U3(e.target),normal:V3(e.normal),at:V3(e.at)};default:return}}function U3(e){return e.kind===`Compound`?{kind:`Compound`,children:e.children.map(U3)}:e.kind===`Instance`?{kind:`Instance`,source:U3(e.source),placements:e.placements,fuse:e.fuse}:z3(e)??B3(e)??H3(e)}function W3(e){return k(F(N.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function G3(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function K3(e){return typeof e==`number`&&Number.isFinite(e)}function q3(e){return typeof e==`string`}function J3(e,t){if(!Array.isArray(e)||e.length!==3)return W3(`${t}: expected Vec3 array`);let[n,r,i]=e;return!K3(n)||!K3(r)||!K3(i)?W3(`${t}: Vec3 contains non-number`):O([n,r,i])}function Y3(e,t){if(!Array.isArray(e)||e.length!==2)return W3(`${t}: expected Vec2 array`);let[n,r]=e;return!K3(n)||!K3(r)?W3(`${t}: Vec2 contains non-number`):O([n,r])}function X3(e){if(!G3(e))return W3(`input is not an object`);let t=e.csgVersion;if(t!==1)return W3(`unsupported csgVersion ${String(t)} (expected 1)`);let n=e.root;return i6(n)}function Z3(e){if(!G3(e))return W3(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return K3(e.value)?O(G2(e.value)):W3(`NumLit.value`);case`Vec3Lit`:{let t=J3(e.value,`Vec3Lit.value`);return t.ok?O(K2(t.value)):t}case`Vec2Lit`:{let t=Y3(e.value,`Vec2Lit.value`);return t.ok?O(q2(t.value)):t}case`Param`:return q3(e.name)?O(J2(e.name)):W3(`Param.name`);case`BinOp`:return Q3(e);case`UnaryOp`:return $3(e);case`Component`:return e6(e);case`BuildVec`:return t6(e);default:return W3(`unknown expression kind: ${String(t)}`)}}function Q3(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return W3(`BinOp.op: ${String(t)}`);let n=Z3(e.a);if(!n.ok)return n;let r=Z3(e.b);return r.ok?O(Y2(t,n.value,r.value)):r}function $3(e){let t=e.op;if(!q3(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return W3(`UnaryOp.op: ${String(t)}`);let n=Z3(e.arg);return n.ok?O(X2(t,n.value)):n}function e6(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return W3(`Component.index: ${String(t)}`);let n=Z3(e.vec);return n.ok?O(Z2(n.value,t)):n}function t6(e){let t=e.dim;if(t!==2&&t!==3)return W3(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return W3(`BuildVec.components: not array`);if(n.length!==t)return W3(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=Z3(e);if(!t.ok)return t;r.push(t.value)}return O(Q2(t,r))}function n6(e,t){if(!Array.isArray(e))return W3(`${t}: not array`);let n=[];for(let t of e){let e=i6(t);if(!e.ok)return e;n.push(e.value)}return O(n)}function r6(e){let t=e.tolerance;return t==null?O(void 0):K3(t)?O(t):W3(`tolerance: not a finite number`)}function i6(e){if(!G3(e))return W3(`node: not an object`);let t=e.kind;switch(t){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return o6(t,e);case`Fuse`:case`Cut`:case`Intersect`:return m6(t,e);case`FuseAll`:case`CutAll`:return h6(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return g6(t,e);case`Compound`:return S6(e);case`Instance`:return w6(e);default:return W3(`unknown node kind: ${String(t)}`)}}function a6(e,t,n){let r=Z3(e[t]);return r.ok?O(n(r.value)):r}function o6(e,t){switch(e){case`Box`:return s6(t);case`Sphere`:return a6(t,`radius`,w4);case`Cylinder`:return c6(t);case`Cone`:return l6(t);case`Torus`:return u6(t);case`Polygon`:return d6(t);case`Circle`:return a6(t,`radius`,k4);case`Line`:return f6(t);case`Vertex`:return a6(t,`point`,j4);case`Empty`:return p6(t)}return W3(`unhandled primitive: ${e}`)}function s6(e){let t=Z3(e.x);if(!t.ok)return t;let n=Z3(e.y);if(!n.ok)return n;let r=Z3(e.z);return r.ok?O(C4(t.value,n.value,r.value)):r}function c6(e){let t=Z3(e.radius);if(!t.ok)return t;let n=Z3(e.height);return n.ok?O(T4(t.value,n.value)):n}function l6(e){let t=Z3(e.radius1);if(!t.ok)return t;let n=Z3(e.radius2);if(!n.ok)return n;let r=Z3(e.height);return r.ok?O(E4(t.value,n.value,r.value)):r}function u6(e){let t=Z3(e.majorRadius);if(!t.ok)return t;let n=Z3(e.minorRadius);return n.ok?O(D4(t.value,n.value)):n}function d6(e){let t=e.points;if(!Array.isArray(t))return W3(`Polygon.points: not array`);let n=[];for(let e of t){let t=Z3(e);if(!t.ok)return t;n.push(t.value)}return O(O4(n))}function f6(e){let t=Z3(e.from);if(!t.ok)return t;let n=Z3(e.to);return n.ok?O(A4(t.value,n.value)):n}function p6(e){let t=e.output;switch(t){case`Solid`:return O(N4());case`Face`:return O(P4());case`Wire`:return O(F4());default:return W3(`Empty.output: ${String(t)}`)}}function m6(e,t){let n=i6(t.a);if(!n.ok)return n;let r=i6(t.b);if(!r.ok)return r;let i=r6(t);if(!i.ok)return i;switch(e){case`Fuse`:return O(L4(n.value,r.value,i.value));case`Cut`:return O(R4(n.value,r.value,i.value));case`Intersect`:return O(z4(n.value,r.value,i.value))}}function h6(e,t){let n=r6(t);if(!n.ok)return n;if(e===`FuseAll`){let e=n6(t.shapes,`FuseAll.shapes`);return e.ok?O(B4(e.value,n.value)):e}let r=i6(t.base);if(!r.ok)return r;let i=n6(t.tools,`CutAll.tools`);return i.ok?O(V4(r.value,i.value,n.value)):i}function g6(e,t){let n=i6(t.target);if(!n.ok)return n;switch(e){case`Translate`:return _6(t,n.value);case`Rotate`:return y6(t,n.value);case`Scale`:return b6(t,n.value);case`Mirror`:return x6(t,n.value)}}function _6(e,t){let n=Z3(e.vector);return n.ok?O(U4(t,n.value)):n}function v6(e,t){if(e[t]===void 0)return O(void 0);let n=Z3(e[t]);return n.ok?O(n.value):n}function y6(e,t){let n=Z3(e.angle);if(!n.ok)return n;let r=v6(e,`axis`);if(!r.ok)return r;let i=v6(e,`at`);return i.ok?O(W4(t,n.value,{axis:r.value,at:i.value})):i}function b6(e,t){let n=Z3(e.factor);if(!n.ok)return n;let r=v6(e,`center`);return r.ok?O(G4(t,n.value,{center:r.value})):r}function x6(e,t){let n=v6(e,`normal`);if(!n.ok)return n;let r=v6(e,`at`);return r.ok?O(K4(t,{normal:n.value,at:r.value})):r}function S6(e){let t=n6(e.children,`Compound.children`);return t.ok?O(q4(t.value)):t}function C6(e){return Array.isArray(e)&&e.length===4&&e.every(e=>Array.isArray(e)&&e.length===4&&e.every(K3))}function w6(e){let t=i6(e.source);if(!t.ok)return t;let n=e.placements;return!Array.isArray(n)||!n.every(C6)?W3(`Instance.placements must be an array of 4x4 number matrices`):O(J4(t.value,n,e.fuse===!0))}function T6(e){return O6(e)}function E6(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=E6(e.a),n=E6(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return G2(t.value+n.value);case`-`:return G2(t.value-n.value);case`*`:return G2(t.value*n.value);case`/`:return G2(t.value/n.value)}return t!==e.a||n!==e.b?Y2(e.op,t,n):e}case`UnaryOp`:{let t=E6(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return G2(-n);case`sin`:return G2(Math.sin(n));case`cos`:return G2(Math.cos(n));case`sqrt`:return G2(Math.sqrt(n));case`abs`:return G2(Math.abs(n))}}return t===e.arg?e:X2(e.op,t)}case`Component`:{let t=E6(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?G2(t.value[e.index]):t===e.vec?e:Z2(t,e.index)}case`BuildVec`:{let t=e.components.map(E6);return D6(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?Q2(e.dim,t):e)}}}function D6(e,t){if(t.length!==e)return;let n=[];for(let e of t){if(e.kind!==`NumLit`)return;n.push(e.value)}return e===2?q2([n[0],n[1]]):K2([n[0],n[1],n[2]])}function O6(e){switch(e.kind){case`Box`:return C4(E6(e.x),E6(e.y),E6(e.z));case`Sphere`:return w4(E6(e.radius));case`Cylinder`:return T4(E6(e.radius),E6(e.height));case`Cone`:return E4(E6(e.radius1),E6(e.radius2),E6(e.height));case`Torus`:return D4(E6(e.majorRadius),E6(e.minorRadius));case`Polygon`:return O4(e.points.map(E6));case`Circle`:return k4(E6(e.radius));case`Line`:return A4(E6(e.from),E6(e.to));case`Vertex`:return j4(E6(e.point));case`Empty`:return e;case`Fuse`:return k6(e.a,e.b,e.tolerance);case`Cut`:return A6(e.a,e.b,e.tolerance);case`Intersect`:return j6(e.a,e.b,e.tolerance);case`FuseAll`:return M6(e.shapes,e.tolerance);case`CutAll`:return N6(e.base,e.tools,e.tolerance);case`Translate`:return P6(e.target,e.vector);case`Rotate`:return W4(O6(e.target),E6(e.angle),{axis:e.axis?E6(e.axis):void 0,at:e.at?E6(e.at):void 0});case`Scale`:return G4(O6(e.target),E6(e.factor),{center:e.center?E6(e.center):void 0});case`Mirror`:return K4(O6(e.target),{normal:e.normal?E6(e.normal):void 0,at:e.at?E6(e.at):void 0});case`Compound`:return q4(e.children.map(O6).filter(e=>e.kind!==`Empty`));case`Instance`:return J4(O6(e.source),e.placements,e.fuse)}}function k6(e,t,n){let r=O6(e),i=O6(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:L4(r,i,n)}function A6(e,t,n){let r=O6(e),i=O6(t);return i.kind===`Empty`||r.kind===`Empty`?r:R4(r,i,n)}function j6(e,t,n){let r=O6(e),i=O6(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:z4(r,i,n)}function M6(e,t){let n=e.map(O6).filter(e=>e.kind!==`Empty`);return n.length===0?N4():n.length===1?n[0]:B4(n,t)}function N6(e,t,n){let r=O6(e);if(r.kind===`Empty`)return r;let i=t.map(O6).filter(e=>e.kind!==`Empty`);return i.length===0?r:V4(r,i,n)}function P6(e,t){let n=O6(e),r=E6(t);if(r.kind!==`Vec3Lit`)return U4(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=E6(n.vector);if(e.kind===`Vec3Lit`)return U4(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return U4(n,r)}function F6(e,t,n){return I6(e,t,n)}function I6(e,t,n){return t(e)?n:L6(e,t,n)}function L6(e,t,n){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return e;case`Fuse`:return L4(I6(e.a,t,n),I6(e.b,t,n),e.tolerance);case`Cut`:return R4(I6(e.a,t,n),I6(e.b,t,n),e.tolerance);case`Intersect`:return z4(I6(e.a,t,n),I6(e.b,t,n),e.tolerance);case`FuseAll`:return B4(e.shapes.map(e=>I6(e,t,n)),e.tolerance);case`CutAll`:return V4(I6(e.base,t,n),e.tools.map(e=>I6(e,t,n)),e.tolerance);case`Translate`:return U4(I6(e.target,t,n),e.vector);case`Rotate`:return W4(I6(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return G4(I6(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return K4(I6(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return q4(e.children.map(e=>I6(e,t,n)));case`Instance`:return J4(I6(e.source,t,n),e.placements,e.fuse)}}function R6(e,t){t(e);for(let n of z6(e))R6(n,t)}function z6(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return[];case`Fuse`:case`Cut`:case`Intersect`:return[e.a,e.b];case`FuseAll`:return e.shapes;case`CutAll`:return[e.base,...e.tools];case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return[e.target];case`Compound`:return e.children;case`Instance`:return[e.source]}}function B6(e){let t=0;return R6(e,()=>{t++}),t}var V6=TX({CSG_VERSION:()=>1,Evaluator:()=>F3,add:()=>$2,asScalarExpr:()=>t4,asVec2Expr:()=>i4,asVec3Expr:()=>r4,binOp:()=>Y2,box:()=>C4,buildVec:()=>Q2,circle:()=>k4,component:()=>Z2,compound:()=>q4,cone:()=>E4,cut:()=>R4,cutAll:()=>V4,cylinder:()=>T4,emptyFace:()=>P4,emptySolid:()=>N4,emptyWire:()=>F4,foldExpr:()=>E6,forEachNode:()=>R6,fromJSON:()=>X3,fuse:()=>L4,fuseAll:()=>B4,instance:()=>J4,intersect:()=>z4,line:()=>A4,mirror:()=>K4,mul:()=>e4,nodeCount:()=>B6,numLit:()=>G2,optimize:()=>T6,outputKindOf:()=>Y4,param:()=>J2,polygon:()=>O4,replaceNode:()=>F6,rotate:()=>W4,scale:()=>G4,sphere:()=>w4,toJSON:()=>L3,torus:()=>D4,translate:()=>U4,unaryOp:()=>X2,vec2Lit:()=>q2,vec3Lit:()=>K2,vertex:()=>j4,withEvaluator:()=>I3});export{oR as BaseSketcher2d,sR as BlueprintSketcher,co as BrepBugError,N as BrepErrorCode,u0 as BrepWrapperError,ky as BrepkitAdapter,IK as CompoundSketch,i as DEFAULT_CAPABILITIES,vD as DEG2RAD,VT as DisposalScope,r as EXACT_BREP_CAPABILITIES,hq as FaceSketcher,G as HASH_CODE_MAX,Ra as OK,La as OcctWasmAdapter,yD as RAD2DEG,QK as Sketch,mq as Sketcher,$K as Sketches,RP as addChild,AP as addHoles,hF as addJoint,K$ as addMate,XF as addStep,ZM as adjacentFaces,qa as all,Ha as andThen,OX as applyGlue,w1 as applyMatrix,Pk as approximateCurve,ZT as as2D,XT as as3D,XD as asTopo,dN as assignRoles,nM as autoHeal,_P as bezier,pY as blueprintToDXF,qA as booleanPipeline,y2 as booleans,s0 as boss,iP as box,gP as bsplineApprox,M as bug,dq as cameraFromPlane,uq as cameraLookAt,rN as captureHint,nO as cast,ME as castShape,NE as castShape3D,B1 as chamfer,dj as chamferDistAngleShape,Pj as chamferWithEvolution,Y$ as checkAllInterferences,Tj as checkBoolean,J$ as checkInterference,dP as circle,FP as circularPattern,_O as classifyPointOnFace,Wk as clearMeshCache,C1 as clone,oE as closedWire,io as collect,WP as collectShapes,qO as colorFaces,KO as colorShape,fM as complexExtrude,dk as composeTransforms,EP as compound,YK as compoundSketchExtrude,qK as compoundSketchFace,ZK as compoundSketchLoft,XK as compoundSketchRevolve,I as computationError,$Q as computeStraightSkeleton,sP as cone,T2 as construction,NQ as convexHull,fR as cornerFinder,UP as countNodes,MP as createAssembly,LP as createAssemblyNode,DJ as createBlueprint,lq as createCamera,SE as createCompound,OJ as createCompoundBlueprint,WN as createDerivedFaceRef,IM as createDistanceQuery,gE as createEdge,DN as createEdgeRef,vE as createFace,RT as createHandle,YF as createHistory,BT as createKernelHandle,Gk as createMeshCache,UD as createNamedPlane,_X as createOperationRegistry,VD as createPlane,fN as createRef,rI as createRegistry,yE as createShell,bE as createSolid,lX as createTaskQueue,hE as createVertex,FN as createVertexRef,_E as createWire,gX as createWorkerClient,SX as createWorkerHandler,CX as createWorkerPool,V6 as csg,wo as currentQuality,yJ as curve2dBoundingBox,EJ as curve2dDistanceFrom,bJ as curve2dFirstPoint,TJ as curve2dIsOnCurve,xJ as curve2dLastPoint,CJ as curve2dParameter,SJ as curve2dSplitAt,wJ as curve2dTangentAt,Dk as curveAxis,Ck as curveEndPoint,Ok as curveIsClosed,kk as curveIsPeriodic,Ek as curveLength,Ak as curvePeriod,wk as curvePointAt,Sk as curveStartPoint,Tk as curveTangentAt,O1 as cut,QR as cut2D,A1 as cutAll,gj as cutAllBisect,VR as cutBlueprints,jj as cutWithEvolution,aP as cylinder,cF as cylindricalJoint,nN as defaultScorer,dX as dequeueTask,Y1 as describe,Kq as deserializeDrawing,uI as deserializeHistory,iO as deserializeShape,eO as downcast,W1 as draft,Jq as draw,$q as drawCircle,eJ as drawEllipse,sJ as drawFaceOutline,iJ as drawParametricFunction,rJ as drawPointsInterpolation,tJ as drawPolysides,oJ as drawProjection,Xq as drawRectangle,Yq as drawRoundedRectangle,Zq as drawSingleCircle,Qq as drawSingleEllipse,nJ as drawText,pJ as drawingChamfer,uJ as drawingCut,fJ as drawingFillet,lJ as drawingFuse,dJ as drawingIntersect,cJ as drawingToSketchOnPlane,a0 as drill,II as edgeFinder,qM as edgesOfFace,fP as ellipse,hP as ellipseArc,lP as ellipsoid,uX as enqueueTask,k as err,NP as exportAssemblySTEP,fY as exportDXF,$J as exportGlb,QJ as exportGltf,$k as exportIGES,HJ as exportOBJ,Zk as exportSTEP,XY as exportSTEPConfigured,Qk as exportSTL,MY as exportThreeMF,WF as exportURDF,e0 as extrude,bM as extrudeAll,xP as face,gO as faceAxis,hO as faceCenter,zI as faceFinder,sO as faceGeomType,cO as faceOrientation,GM as facesOfEdge,KM as facesOfVertex,xZ as fieldBoolean,TZ as fieldContour,SZ as fieldOffset,wZ as fieldReinit,CZ as fieldShell,wA as fill,SP as filledFace,z1 as fillet,Nj as filletWithEvolution,FO as findFacesByTag,VP as findNode,QF as findStep,aM as fixSelfIntersection,rM as fixShape,Ua as flatMap,Xa as flatten,lO as flipFaceOrientation,Mk as flipOrientation,nX as fontMetrics,yF as forwardKinematics,Z1 as fromBREP,bQ as fromKernelDir,yQ as fromKernelPnt,vQ as fromKernelVec,Qa as fromNullable,D1 as fuse,XR as fuse2D,k1 as fuseAll,bj as fuseAllBisect,BR as fuseBlueprints,Aj as fuseWithEvolution,P0 as gearGeometry,BX as getActiveVoxelId,fD as getBounds,kJ as getBounds2D,iD as getCompSolids,xk as getCurveType,MT as getDisposalStats,QE as getEdges,YO as getFaceColor,SO as getFaceOrigins,IO as getFaceTags,$E as getFaces,nq as getFont,gk as getHashCode,$F as getHistoryShape,U as getKernel,yT as getKernelCapabilities,CT as getKernelTier,fj as getNurbsCurveData,pj as getNurbsSurfaceData,jk as getOrientation,AJ as getOrientation2D,No as getPerformanceStats,JO as getShapeColor,tE as getShapeKind,rD as getShells,HI as getSingleFace,nD as getSolids,oO as getSurfaceType,RO as getTagMetadata,tD as getVertices,zX as getVoxel,eD as getWires,IP as gridPattern,_M as guidedSweep,G1 as heal,$j as healFace,Qj as healSolid,eM as healWire,pP as helix,MQ as hull,e1 as importDXF,_1 as importGLB,$Y as importIGES,i1 as importOBJ,ZY as importSTEP,QY as importSTL,YY as importSVG,JY as importSVGPathD,g1 as importThreeMF,JF as importURDF,DT as init,mT as initFromManifold,TT as initFromOC,VX as initVoxel,bO as innerWires,f$ as instance,m$ as instanceCount,p$ as instanceGrid,_$ as instancedMesh,Nk as interpolateCurve,j1 as intersect,$R as intersect2D,HR as intersectBlueprints,Mj as intersectWithEvolution,ZE as invalidateShapeCache,NF as inverseKinematics,C2 as io,vo as ioError,YT as is2D,JT as is3D,oX as isBatchRequest,AX as isChamferRadius,nE as isClosedWire,rO as isCompSolid,kE as isCompound,qN as isDerivedFaceRef,aX as isDisposeRequest,wE as isEdge,JN as isEdgeRef,$1 as isEmpty,yk as isEqualShape,A as isErr,cX as isErrorResponse,EE as isFace,XN as isFaceRef,jX as isFilletRadius,rX as isInitRequest,jJ as isInside2D,d$ as isInstanced,ZN as isLineageRef,qT as isLive,iE as isManifoldShell,kX as isNumber,za as isOk,iX as isOperationRequest,rE as isOrientedFace,uE as isPlanarFace,dE as isPlanarWire,oq as isProjectionPlane,pX as isQueueEmpty,vk as isSameShape,jE as isShape1D,AE as isShape3D,DE as isShell,OE as isSolid,sX as isSuccessResponse,Q1 as isValid,aE as isValidSolid,CE as isVertex,YN as isVertexRef,TE as isWire,dD as iterCompSolids,aD as iterEdges,oD as iterFaces,uD as iterShells,lD as iterSolids,QD as iterTopo,cD as iterVertices,sD as iterWires,FF as jointTrajectory,mF as jointTransform,RF as jointsFromDH,HE as kernelCall,UE as kernelCallRaw,WE as kernelCallScoped,P as kernelError,fQ as latticeInfill,pQ as latticeInfillShape,uP as line,PP as linearPattern,tq as loadFont,E1 as locate,n0 as loft,SM as loftAll,Tq as makeBaseBox,r2 as makeExternalGear,i2 as makeInternalGear,GD as makePlane,o2 as makePlanetaryGear,cq as makeProjectedEdges,cE as manifoldShell,Ba as map,Za as mapBoth,Va as mapErr,ro as match,h$ as materialize,MM as measureArea,LM as measureCurvatureAt,RM as measureCurvatureAtMid,PM as measureDistance,FM as measureDistanceProps,NM as measureLength,AM as measureLinearProps,kM as measureSurfaceProps,jM as measureVolume,OM as measureVolumeProps,S2 as measurement,bF as mechanismDOF,q1 as mesh,J1 as meshEdges,iA as meshLODs,oA as meshLODsProgressive,eA as meshMultiLOD,LQ as minkowski,x1 as mirror,IJ as mirror2D,_J as mirrorDrawing,c0 as mirrorJoin,b2 as modifiers,cI as modifyStep,_o as moduleInitError,gM as multiSectionSweep,mO as normalAt,H1 as offset,OP as offsetFace,rZ as offsetMesh,oZ as offsetShape,Fk as offsetWire2D,O as ok,Wa as or,Ga as orElse,XL as organiseBlueprints,sE as orientedFace,vO as outerWire,E2 as patterns,fX as pendingCount,so as pipeline,JD as pivotPlane,fE as planarFace,lF as planarJoint,pE as planarWire,Q0 as planetPlacements,o0 as pocket,dO as pointOnSurface,KX as pointsInside,wP as polygon,RQ as polyhedron,xq as polysideInnerRadius,pR as polysidesBlueprint,Ij as positionOnCurve,ET as prewarm,v2 as primitives,sF as prismaticJoint,fq as projectEdges,pO as projectPointOnFace,w2 as query,yo as queryError,l0 as rectangularPattern,vX as registerHandler,hT as registerKernel,ST as registerKernelTier,iI as registerOperation,nI as registerShape,RX as registerVoxel,mX as rejectAll,zP as removeChild,yO as removeHolesFromFace,YX as repairMesh,sI as replayFrom,oI as replayHistory,NT as resetDisposalStats,Po as resetPerformanceStats,ok as resize,$ as resolve,v1 as resolve3D,GN as resolveDerivedFaceRef,CD as resolveDirection,ON as resolveEdgeRef,$N as resolveLineageRef,WD as resolvePlane,vN as resolveRef,tP as resolveRefIn,rP as resolveRefParams,IN as resolveVertexRef,vJ as reverseCurve,oF as revoluteJoint,t0 as revolve,s$ as roof,b1 as rotate,PJ as rotate2D,hJ as rotateDrawing,mR as roundedRectangleBlueprint,S1 as scale,FJ as scale2D,gJ as scaleDrawing,VZ as sdfBox,GZ as sdfCapsule,WZ as sdfCone,UZ as sdfCylinder,rQ as sdfFieldAxialRamp,oQ as sdfFieldClamp,nQ as sdfFieldConst,aQ as sdfFieldFromSdf,iQ as sdfFieldRadialRamp,ZZ as sdfLattice,qZ as sdfPlane,HZ as sdfRoundedBox,BZ as sdfSphere,QZ as sdfStrutLattice,YZ as sdfSweep,KZ as sdfTorus,M1 as section,N1 as sectionToFace,lI as serializeHistory,fF as setJointValue,dF as setJointValues,xO as setShapeOrigin,LO as setTagMetadata,kP as sewShells,O0 as shape,ZX as shapeToMeshInput,$D as shapeType,eN as sharedEdges,V1 as shell,iZ as shellMesh,sZ as shellShape,Fj as shellWithEvolution,K1 as simplify,gq as sketchCircle,_q as sketchEllipse,UK as sketchExtrude,BK as sketchFace,Sq as sketchFaceOffset,wq as sketchHelix,GK as sketchLoft,zJ as sketchOnFace2D,RJ as sketchOnPlane2D,Cq as sketchParametricFunction,bq as sketchPolysides,vq as sketchRectangle,HK as sketchRevolve,yq as sketchRoundedRectangle,WK as sketchSweep,eX as sketchText,VK as sketchWires,go as sketcherStateError,F1 as slice,DP as solid,iM as solidFromShell,q$ as solveAssembly,oP as sphere,uF as sphericalJoint,P1 as split,eI as stepCount,tI as stepsFrom,LJ as stretch2D,CP as subFace,dM as supportExtrude,uT as supportsConstraintSketch,lT as supportsProjection,DQ as surfaceFromGrid,AQ as surfaceFromImage,uM as sweep,PO as tagFaces,vP as tangentArc,Ja as tap,Ya as tapErr,iq as textBlueprints,tX as textMetrics,U1 as thicken,dI as thread,mP as threePointArc,X1 as toBREP,oj as toBufferGeometryData,sj as toGroupedBufferGeometryData,hQ as toKernelVec,lj as toLODGeometryData,uj as toLODGeometryLevels,cj as toLineGeometryData,MJ as toSVGPathD,xD as toVec2,bD as toVec3,cP as torus,mQ as tpmsLattice,T1 as transformCopy,x2 as transforms,y1 as translate,NJ as translate2D,mJ as translateDrawing,qD as translatePlane,ao as tryCatch,oo as tryCatchAsync,pM as twistExtrude,ho as typeCastError,ZF as undoLast,bo as unsupportedError,j as unwrap,no as unwrapErr,eo as unwrapOr,to as unwrapOrElse,BP as updateNode,mN as updateRoles,uO as uvBounds,fO as uvCoordinates,lE as validSolid,z0 as validatePlanetary,F as validationError,Xj as variableFillet,wD as vecAdd,ID as vecAngle,kD as vecCross,MD as vecDistance,OD as vecDot,PD as vecEquals,FD as vecIsZero,AD as vecLength,jD as vecLengthSq,DD as vecNegate,ND as vecNormalize,LD as vecProjectToPlane,BD as vecRepr,RD as vecRotate,ED as vecScale,TD as vecSub,TP as vertex,PX as vertexFinder,_D as vertexPosition,XM as verticesOfEdge,JM as verticesOfFace,aZ as voxelBoolean,bZ as voxelBooleanField,DZ as voxelBooleanFieldShapes,cZ as voxelBooleanShapes,yZ as voxelField,EZ as voxelFieldFromShape,HP as walkAssembly,GX as windingNumbers,yP as wire,VI as wireFinder,bP as wireLoop,YM as wiresOfFace,vT as withKernel,CQ as withKernelDir,SQ as withKernelPnt,xQ as withKernelVec,bT as withQuality,HT as withScope,GT as withScopeResult,KT as withScopeResultAsync,wT as withTier,Ka as zipResults};