brepjs-verify 0.3.0 → 0.8.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.
@@ -0,0 +1,59 @@
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=a(g,{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});return s(i.normal,o)>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 ve(e.poles,t);case`bspline`:return ye(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=ve(e.poles,Math.max(0,t-n)),i=ve(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=ye(e,Math.max(r,t-n)),o=ye(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=1,a=0,o=!0){return{__bk2d:`ellipse`,cx:e,cy:t,majorRadius:n,minorRadius:r,xDirAngle:Math.atan2(a,i),sense:o}}function w(e){return{__bk2d:`bezier`,poles:[...e]}}function ee(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:ee(e.basis,t,n)}}}function te(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:te(e.basis,t,n,r)}}}function ne(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:ne(e.basis,t,n,r)}}}function re(e,t,n){return ne(e,-1,t,n)}function ie(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:ie(e.basis,t,n,r,i)}}}function ae(e,t,n){let r=oe(e),i=oe(t);return r.__bk2d===`line`&&i.__bk2d===`line`?le(e,r,t,i,n):r.__bk2d===`line`&&i.__bk2d===`circle`?{points:ue(e,r,t,i,n),segments:[]}:r.__bk2d===`circle`&&i.__bk2d===`line`?{points:ue(t,i,e,r,n),segments:[]}:r.__bk2d===`circle`&&i.__bk2d===`circle`?{points:fe(e,r,t,i,n),segments:[]}:pe(e,t,n,e===t)}function oe(e){let t=e;for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function se(e,t,n){let r=y(e);return t>=r.first-n&&t<=r.last+n}function ce(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 le(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!se(e,c,i)||!se(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 ue(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(!se(e,r,i))continue;let a=t.ox+r*t.dx,o=t.oy+r*t.dy,s=ce(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 de(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=ce(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 fe(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?[]:de(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=ce(e,t,r),o=ce(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 pe(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 me(e){return JSON.stringify(e)}function he(e){return JSON.parse(e)}function ge(){return{__bk2d_bbox:!0,xMin:1/0,yMin:1/0,xMax:-1/0,yMax:-1/0}}function _e(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 ve(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 ye(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 be=.001,xe=.1,Se={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 Ce(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,Se.nx=x,Se.ny=S,Se.nz=C,Se.ax=o,Se.ay=s,Se.az=c,Se.bx=l,Se.by=u,Se.bz=d,Se.cx=f,Se.cy=p,Se.cz=m,Se}function we(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=Ce(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 Te(e,t){let n=Math.floor(t.length/3),r=[`solid brepjs`];for(let i=0;i<n;i++){let n=Ce(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 Ee=()=>{};function T(e,t){return{__occtWasm:!0,type:e,id:t,delete:Ee,HashCode(e){return t%e},IsNull(){return!1}}}function De(e){return typeof e==`object`&&!!e&&e.__occtWasm}function E(e){if(De(e))return e.id;if(typeof e==`number`)return e;throw Error(`occt-wasm: expected an OcctWasmHandle or number, got `+typeof e)}function Oe(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(Oe(e.getShapeType(t)),t)}function ke(e,t){let n=new e.VectorUint32;for(let e of t)n.push_back(e);return n}function Ae(e,t){let n=new e.VectorInt;for(let e of t)n.push_back(e);return n}function je(e,t){let n=new e.VectorDouble;for(let e of t)n.push_back(e);return n}function Me(e){let t=[],n=e.size();for(let r=0;r<n;r++)t.push(e.get(r));return t}function Ne(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 Pe(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 Fe(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 Ie(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 Le(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 Re(e,t){let n=E(t),r=e.getSubShapes(n,`solid`);try{return r.size()>1?e.fuseAll(r):n}finally{r.delete()}}function ze(e,t,n,r){return D(e,e.fuse(E(t),E(n)))}function Be(e,t,n,r){return D(e,e.cut(E(t),Re(e,n)))}function Ve(e,t,n,r){return D(e,e.intersect(E(t),Re(e,n)))}function He(e,t,n,r){return D(e,e.section(E(t),E(n)))}function Ue(e,t,n,r){let i=ke(t,n.map(E));try{return D(e,e.fuseAll(i))}finally{i.delete()}}function We(e,t,n,r,i){let a=ke(t,r.map(E));try{return D(e,e.cutAll(E(n),a))}finally{a.delete()}}function Ge(e,t,n,r){let i=ke(t,r.map(E));try{return D(e,e.split(E(n),i))}finally{i.delete()}}function Ke(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 qe(e,t,n,r,i,a){throw Error(`occt-wasm: meshBoolean is not supported (use brepkit for mesh booleans)`)}function Je(e,t,n,r){return T(`solid`,e.makeBox(t,n,r))}function Ye(e,t,n,r,i){let a=e.makeCylinder(t,n);return i&&(a=Fe(e,a,i)),r&&(r[0]!==0||r[1]!==0||r[2]!==0)&&(a=e.translate(a,r[0],r[1],r[2])),T(`solid`,a)}function Xe(e,t,n){let r=e.makeSphere(t);return n&&(n[0]!==0||n[1]!==0||n[2]!==0)&&(r=e.translate(r,n[0],n[1],n[2])),T(`solid`,r)}function Ze(e,t,n,r,i,a){let o=e.makeCone(t,n,r);return a&&(o=Fe(e,o,a)),i&&(i[0]!==0||i[1]!==0||i[2]!==0)&&(o=e.translate(o,i[0],i[1],i[2])),T(`solid`,o)}function Qe(e,t,n,r,i){let a=e.makeTorus(t,n);return i&&(a=Fe(e,a,i)),r&&(r[0]!==0||r[1]!==0||r[2]!==0)&&(a=e.translate(a,r[0],r[1],r[2])),T(`solid`,a)}function $e(e,t,n,r){return T(`solid`,e.makeEllipsoid(t,n,r))}function et(e,t,n){return T(`solid`,e.makeBoxFromCorners(t[0],t[1],t[2],n[0],n[1],n[2]))}function tt(e,t,n){return T(`face`,e.makeRectangle(t,n))}function nt(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 rt(e,t){return De(t)?t.type:Oe(e.getShapeType(E(t)))}function it(e,t,n){return e.isSame(E(t),E(n))}function at(e,t,n){return e.isEqual(E(t),E(n))}function ot(e,t,n){return n?T(n,e.downcast(E(t),n)):t}function st(e,t,n){return e.hashCode(E(t),n)}function ct(e,t){return e.isNull(E(t))}function lt(e,t){return e.shapeOrientation(E(t)).toLowerCase()}function ut(e,n){let r=e.edgeToFaceMap(E(n),1e6),i;try{i=Me(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 dt(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 ft(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 pt(e,t,n,r){let i=ke(t,n.map(E));try{return D(e,e.sew(i,r??1e-6))}finally{i.delete()}}var mt=1e-6;function ht(e,t){return e.isValid(E(t))}function gt(e,t){let n=e.healSolid(E(t),mt);return n===0?null:D(e,n)}function _t(e,t){return D(e,e.healFace(E(t),mt))}function vt(e,t,n){return D(e,e.healWire(E(t),mt))}function yt(e,t,n){return 0}function bt(e,t,n){return e.removeDegenerateEdges(E(t)),0}function xt(e,t){return e.fixFaceOrientations(E(t)),0}function St(e,t){return D(e,e.fixShape(E(t)))}function Ct(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 wt(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 Tt(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;wt(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 Et(e,t){return e.hasTriangulation(E(t))}function Dt(e,t,n,r){e.meshShape(E(t),n,r).delete()}var Ot={line:`LINE`,circle:`CIRCLE`,ellipse:`ELLIPSE`,hyperbola:`HYPERBOLA`,parabola:`PARABOLA`,bezier:`BEZIER_CURVE`,bspline:`BSPLINE_CURVE`,offset:`OFFSET_CURVE`,other:`OTHER_CURVE`};function kt(e,t){let n=e.curveType(E(t));return Ot[n]??n.toUpperCase()}function At(e,t){let n=e.curveParameters(E(t));try{return[n.get(0),n.get(1)]}finally{n.delete()}}function jt(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 Mt(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 Nt(e,t){return e.curveIsClosed(E(t))}function Pt(e,t){return e.curveIsPeriodic(E(t))}function Ft(e,t){return 2*Math.PI}function It(e,t,n,r){let i=[];for(let e of n)i.push(e[0],e[1],e[2]);let a=je(t,i);try{return T(`edge`,e.interpolatePoints(a,r?.periodic??!1))}finally{a.delete()}}function Lt(e,t,n,r){let i=[];for(let e of n)i.push(e[0],e[1],e[2]);let a=je(t,i);try{return T(`edge`,e.approximatePoints(a,r?.tolerance??.001))}finally{a.delete()}}function Rt(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 zt(e,t){let n=e.vertexPosition(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function Bt(e,t){return e.surfaceType(E(t)).toLowerCase()}function Vt(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 Ht(e,t){return T(`wire`,e.outerWire(E(t)))}function Ut(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 Wt(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 Gt=(e,t)=>[e[0]-t[0],e[1]-t[1],e[2]-t[2]],Kt=(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2],qt=e=>Math.hypot(e[0],e[1],e[2]),Jt=(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 Yt(e,t){if(Bt(e,t)!==`cylinder`)return null;let n=Vt(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=Ut(e,t,i,r),s=Ut(e,t,a,r),c=Wt(e,t,i,r),l=Wt(e,t,a,r),u=Jt(o,s),d=qt(u),f=qt(Gt(o,s));if(d<1e-9||f<1e-9)return null;let p=[u[0]/d,u[1]/d,u[2]/d],m=qt(Gt(c,l))/f,h=[c[0]-m*o[0],c[1]-m*o[1],c[2]-m*o[2]],g=qt(Gt(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:(lt(e,t)===`reversed`?-1:1)*Kt(o,Gt(c,g))>0}}function Xt(e,t){let n=Yt(e,t);return n?{origin:n.origin,direction:n.direction}:null}function Zt(e,t){let n=Yt(e,t);return n?{radius:n.radius,isDirect:n.isDirect}:null}function Qt(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 $t(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 en(e,t,n,r,i){return e.classifyPointOnFace(E(t),n,r).toLowerCase()}function tn(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 nn(e,t){return e.getVolume(E(t))}function rn(e,t){return e.getSurfaceArea(E(t))}function an(e,t){return e.getLength(E(t))}function on(e,t){let n=e.getCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function sn(e,t){let n=e.getLinearCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function cn(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 ln(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 un(e,t,n){return{volume:nn(e,t),area:rn(e,t),length:n?an(e,t):0,centerOfMass:on(e,t),boundingBox:cn(e,t)}}function dn(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:Ee}}var fn=256;function pn(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>fn?Math.ceil(a/fn):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 mn(e,t,n,r){let i=E(n),a=E(r),o=e.distanceBetween(i,a),s=pn(e,t,i),c=pn(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 hn(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 gn(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=hn(e,t,d,f),m=hn(e,t,d+l,f),h=hn(e,t,d-l,f),g=hn(e,t,d,f+u),_=hn(e,t,d,f-u),v=hn(e,t,d+l,f+u),y=hn(e,t,d+l,f-u),b=hn(e,t,d-l,f+u),x=hn(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 _n(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 vn(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 yn(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 bn(e,t,n,r,i,a){let{Pu:o,Pv:s,Puu:c,Pvv:l,Puv:u}=gn(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 yn(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 yn(o,s);let te=_n(S-i,C,w,ee-i),ne=_n(S-a,C,w,ee-a);return{maxDirection:vn(te,o,s),minDirection:vn(ne,o,s)}}function xn(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}=bn(e,i,n,r,c,l);return{gaussian:s,mean:o,max:c,min:l,maxDirection:u,minDirection:d}}function Sn(e,t,n,r,i){let a=Pe(r,i),o=ke(t,r.map(E));try{return D(e,e.fillet(E(n),o,a))}finally{o.delete()}}function Cn(e,t,n,r,i){let a=Pe(r,i),o=ke(t,r.map(E));try{return D(e,e.chamfer(E(n),o,a))}finally{o.delete()}}function wn(e,t,n,r,i,a){let o=ke(t,r.map(E));try{return D(e,e.chamferDistAngle(E(n),o,i,a))}finally{o.delete()}}function Tn(e,t,n,r,i,a){let o=ke(t,r.map(E));try{return D(e,e.shell(E(n),o,i,a??.001))}finally{o.delete()}}function En(e,t,n){return D(e,e.thicken(E(t),n,.001))}function Dn(e,t,n,r){return D(e,e.offset(E(t),n,r??1e-6))}function On(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 kn(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 An(e,t,n,r){let i=ke(t,r.map(E));try{return D(e,e.defeature(E(n),i,.001))}finally{i.delete()}}function jn(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 Mn(e,t){return D(e,e.simplify(E(t)))}function Nn(e,t){return D(e,e.reverseShape(E(t)))}function Pn(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 Fn(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 In(e,t,n,r,i,a){let o=i?E(i):0,s=a?E(a):0,c=ke(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 Ln(e,t,n,r){let i=r?.transitionMode??0;return D(e,e.sweep(E(t),E(n),i))}function Rn(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 Bn(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=ke(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 Vn(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 Hn(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 Un(e,t,n,r,i,a,o){let s=i??10;return D(e,e.draftPrism(E(t),0,0,s,a))}function Wn(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=Ne([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=Ne([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:Ee},dispose:Ee}}function Gn(e,t,n,r){let i=r,a;if(Array.isArray(i)?a=i:typeof i==`object`&&(Array.isArray(i.matrix)?(a=i.matrix,a.length===16&&(a=a.slice(0,12))):Array.isArray(i.elements)&&(a=i.elements)),a&&(a.length===16&&(a=a.slice(0,12)),a.length>=12)){let r=je(t,a);try{return D(e,e.transform(E(n),r))}finally{r.delete()}}return T(e.getShapeType(E(n)),e.copy(E(n)))}function Kn(e,t,n,r,i){return D(e,e.translate(E(t),n,r,i))}function qn(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 Jn(e,t,n,r){return D(e,e.mirror(E(t),n[0],n[1],n[2],r[0],r[1],r[2]))}function Yn(e,t,n,r){return D(e,e.scale(E(t),n[0],n[1],n[2],r))}function Xn(e,t,n,r,i,a){let o=je(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 Zn(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 Qn(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 s}function $n(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 c}function er(e,t){return t.map(t=>{switch(t.type){case`translate`:return Kn(e,t.shape,t.x,t.y,t.z);case`rotate`:return qn(e,t.shape,t.angle,t.axis,t.center);case`scale`:return Yn(e,t.shape,t.center,t.factor);case`mirror`:return Jn(e,t.shape,t.origin,t.normal);default:throw Error(`occt-wasm: transformBatch unknown type`)}})}function tr(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 nr(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 rr(e,t,n){if(n.length===1)return e.exportStep(E(n[0]));let r=t(n);return e.exportStep(E(r))}function ir(e,t,n,r=be,i=xe){let{vertices:a,triangles:o}=e(t,{tolerance:r,angularTolerance:i,skipNormals:!0});return n?we(a,o):Te(a,o)}function ar(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(t);return[D(e,e.importStep(n))]}function or(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 sr(e,t,n){if(n.length===1)return e.exportIges(E(n[0]));let r=t(n);return e.exportIges(E(r))}function cr(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(t);return[D(e,e.importIges(n))]}function lr(e,t,n,r){if(n.length===0)return``;let i=hr(e,t,n);try{return gr(e,i)}finally{i.delete()}}function ur(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=nr(s,c,l,u,d,f,m,tr(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 dr(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 fr(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 pr(e,t){return e.toBREP(E(t))}function mr(e,t){return D(e,e.fromBREP(t))}function hr(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 gr(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 _r(e,t,n,r){if(n.length===0)return``;let i=hr(e,t,n.map(e=>({shape:e.shape,name:e.name??``,color:e.color})));try{return gr(e,i)}finally{i.delete()}}function vr(e,t,n,r){return T(`vertex`,e.makeVertex(t,n,r))}function yr(e,t){throw De(t)?Error(`occt-wasm: makeEdge from curve handle is not implemented`):Error(`occt-wasm: makeEdge is not implemented`)}function br(e,t,n){let r=ke(t,n.map(E));try{return T(`wire`,e.makeWire(r))}finally{r.delete()}}function xr(e,t,n){let r=[];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 i=ke(t,r);try{return T(`wire`,e.makeWire(i))}finally{i.delete()}}function Sr(e,t,n){return T(`face`,e.makeFace(E(t)))}function Cr(e,t,n){return T(`edge`,e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function wr(e,t,n,r){return T(`edge`,e.makeCircleEdge(t[0],t[1],t[2],n[0],n[1],n[2],r))}function Tr(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 Er(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 Dr(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 Or(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 kr(e,t,n){let r=[];for(let e of n)r.push(e[0],e[1],e[2]);let i=je(t,r);try{return T(`edge`,e.makeBezierEdge(i))}finally{i.delete()}}function Ar(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 jr(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;return T(`wire`,e.makeHelixWire(o,s,c,l,u,d,t,n,r))}function Mr(e,t,n){let r=ke(t,n.map(E));try{return T(`compound`,e.makeCompound(r))}finally{r.delete()}}function Nr(e,t){return T(`solid`,e.solidFromShell(E(t)))}function Pr(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=ke(t,a);try{let t=e.sewAndSolidify(o,i);return t=e.fixFaceOrientations(t),D(e,t)}finally{o.delete()}}function Fr(e,t){return T(`face`,e.makeNonPlanarFace(E(t)))}function Ir(e,t,n,r){let i=ke(t,r.map(E));try{return T(`face`,e.addHolesInFace(E(n),i))}finally{i.delete()}}function Lr(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=Ae(t,a);try{return T(`face`,e.removeHolesFromFace(E(n),o))}finally{o.delete()}}function Rr(e,t,n){let r=E(t);return T(`face`,e.makeFaceOnSurface(r,E(n)))}function zr(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 Br(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=ke(t,a);try{return D(e,e.sewAndSolidify(o,.001))}finally{o.delete()}}function Vr(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 Hr(e,t,n,r){let i=ke(t,n.map(E));try{let t=e.sewAndSolidify(i,r);return t=e.fixFaceOrientations(t),T(`solid`,t)}finally{i.delete()}}function Ur(e,t,n){return{x:e,y:t,z:n,__type:`point3d`,delete:Ee}}function Wr(e,t,n){return{x:e,y:t,z:n,__type:`direction3d`,delete:Ee}}function Gr(e,t,n){return{x:e,y:t,z:n,__type:`vector3d`,delete:Ee}}function Kr(e,t,n,r,i,a){return{origin:{x:e,y:t,z:n},direction:{x:r,y:i,z:a},__type:`axis1`,delete:Ee}}function qr(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:Ee}}function Jr(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:Ee}}function Yr(e){return e}function Xr(e){return e}function Zr(e,t){return{x:e,y:t}}function Qr(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 $r(e,t){return{x:e,y:t}}function ei(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete(){}}}function ti(e){return e}function ni(e,t,n,r){return Xr(x(e,t,n,r))}function ri(e,t,n,r){return Xr(S(e,t,n,r))}function ii(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 Xr(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),Xr({__bk2d:`trimmed`,basis:g,tStart:e,tEnd:t})}let _=f;return _<u-1e-9&&(_+=2*Math.PI),Xr({__bk2d:`trimmed`,basis:g,tStart:u,tEnd:_})}function ai(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 Xr(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),Xr({__bk2d:`trimmed`,basis:C,tStart:e,tEnd:t})}let w=_;return w<g-1e-9&&(w+=2*Math.PI),Xr({__bk2d:`trimmed`,basis:C,tStart:g,tEnd:w})}function oi(e,t,n,r,i,a,o){return Xr(C(e,t,n,r,i??1,a??0,o??!0))}function si(e,t,n,r,i,a,o,s,c){return Xr({...C(e,t,n,r,o??1,s??0,c??!0),__bk2d:`ellipse`,startAngle:i,endAngle:a})}function ci(e){return Xr(w(e))}function li(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),Xr({__bk2d:`bspline`,poles:n,knots:a,multiplicities:o,degree:i,isPeriodic:!1})}function ui(e,t){return _(Yr(e),t)}function di(e,t){return{point:_(Yr(e),t),tangent:v(Yr(e),t)}}function fi(e){return y(Yr(e))}function pi(e){let t=Yr(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return b(t)}function mi(e,t,n){return Xr({__bk2d:`trimmed`,basis:Yr(e),tStart:t,tEnd:n})}function hi(e){return Xr(JSON.parse(JSON.stringify(Yr(e))))}function gi(e,t){let n=Yr(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 Xr(w(i.length<=25?i:i.filter((e,t)=>t%2==0||t===i.length-1)))}function _i(e,t,n){return Xr(ee(Yr(e),t,n))}function vi(e,t,n,r){return Xr(te(Yr(e),t,n,r))}function yi(e,t,n,r){return Xr(ne(Yr(e),t,n,r))}function bi(e,t,n){return Xr(re(Yr(e),t,n))}function xi(e,t,n,r,i){return Xr(ie(Yr(e),t,n,r,i))}function Si(e){return e}function Ci(){return{type:`identity2d`,delete(){}}}function wi(e,t,n,r,i){return{type:`affinity2d`,axOriginX:e,axOriginY:t,axDirX:n,axDirY:r,ratio:i,delete(){}}}function Ti(e,t){return{type:`translate2d`,dx:e,dy:t,delete(){}}}function Ei(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 Di(e,t,n){return{type:`rotate2d`,angle:e,cx:t,cy:n,delete(){}}}function Oi(e,t,n){return{type:`scale2d`,sx:e,sy:e,cx:t,cy:n,delete(){}}}function ki(e,t,n){let r=e;r.dx=(Number(r.dx)||0)+t,r.dy=(Number(r.dy)||0)+n}function Ai(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 ji(e,t){let n=t;return n.type===`translate2d`?_i(e,Number(n.dx)||0,Number(n.dy)||0):n.type===`rotate2d`?vi(e,Number(n.angle)||0,Number(n.cx)||0,Number(n.cy)||0):n.type===`scale2d`?yi(e,Number(n.sx)||1,Number(n.cx)||0,Number(n.cy)||0):n.type===`mirror2d`?bi(e,Number(n.ox)||0,Number(n.oy)||0):n.type===`affinity2d`?yi(e,Number(n.ratio)||1,Number(n.axOriginX)||0,Number(n.axOriginY)||0):Number(n.dx)||Number(n.dy)?_i(e,Number(n.dx)||0,Number(n.dy)||0):e}function Mi(e,t,n){let r=ae(Yr(e),Yr(t),n);return{points:r.points,segments:r.segments.map(e=>Xr(e))}}function Ni(e,t,n){let r=Yr(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`&&r.basis){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 Pi(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]=_(Yr(e),c);for(let e=0;e<=20;e++){let n=i+(a-i)*(e/20),[r,s]=_(Yr(t),n),c=Math.sqrt((r-l)**2+(s-u)**2);c<o&&(o=c)}}return o}function Fi(e,t){let n=Yr(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),Xr({__bk2d:`bspline`,poles:a,knots:c,multiplicities:l,degree:o,isPeriodic:!1})}function Ii(e){let t=Yr(e);for(;t.__bk2d===`trimmed`&&t.basis;)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++)for(let n=0;n<t.multiplicities[e];n++)i.push(t.knots[e]);let a=n.length-1+r+1;if(r<1||i.length!==a+1)return[Xr(w(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=>Xr(w(e)))}function Li(){return ge()}function Ri(e,t,n){_e(e,Yr(t),n)}function zi(e){return{xMin:e.xMin,yMin:e.yMin,xMax:e.xMax,yMax:e.yMax}}function Bi(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 Vi(e,t){return e.xMax<t.xMin||e.xMin>t.xMax||e.yMax<t.yMin||e.yMin>t.yMax}function Hi(e,t,n){return t<e.xMin||t>e.xMax||n<e.yMin||n>e.yMax}function Ui(e){let t=Yr(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense!==!1}:null}function Wi(e){let t=Yr(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle??0,isDirect:t.sense!==!1}:null}function Gi(e){let t=Yr(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return t.__bk2d===`bezier`&&Array.isArray(t.poles)?t.poles:null}function Ki(e){let t=Yr(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return t.__bk2d===`bezier`&&Array.isArray(t.poles)?t.poles.length-1:null}function qi(e){return me(Yr(e))}function Ji(e){return Xr(he(e))}function Yi(e,t){let n=y(Yr(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(mi(e,a,o))}return i}function Xi(e,t,n,r,i,a){let o=Yr(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 Zi(e,t,n,r){let i=Yr(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 Qi(e){return e}function $i(){return Xr(x(0,0,1,0))}function ea(e,t){e.buildCurves3d(E(t))}function ta(e,t,n,r){return T(`wire`,e.fixWireOnFace(E(t),E(n),r))}function na(e){try{let t=Me(e.modified),n=Me(e.generated),r=Me(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 ra(e,t,n,r,i,a,o,s){let c=Ae(t,o);try{let{id:t,evolution:o}=na(e.translateWithHistory(E(n),r,i,a,c,s));return{shape:D(e,t),evolution:o}}finally{c.delete()}}function ia(e,t,n,r,i,a,o,s){let c=o??[0,0,1],l=s??[0,0,0],u=Ae(t,i);try{let{id:t,evolution:i}=na(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 aa(e,t,n,r,i,a,o){let s=Ae(t,a);try{let{id:t,evolution:a}=na(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 oa(e,t,n,r,i,a,o){let s=Ae(t,a);try{let{id:t,evolution:a}=na(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=Ae(t,i);try{let{id:t,evolution:i}=na(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 la(e,t,n,r,i,a,o){let s=Ae(t,i);try{let{id:t,evolution:i}=na(e.cutWithHistory(E(n),Re(e,r),s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete()}}function ua(e,t,n,r,i,a,o){let s=Ae(t,i);try{let{id:t,evolution:i}=na(e.intersectWithHistory(E(n),Re(e,r),s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete()}}function da(e,t,n,r,i,a,o){let s=Pe(r,i),c=ke(t,r.map(E)),l=Ae(t,a);try{let{id:t,evolution:r}=na(e.filletWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function fa(e,t,n,r,i,a,o){let s=Pe(r,i),c=ke(t,r.map(E)),l=Ae(t,a);try{let{id:t,evolution:r}=na(e.chamferWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function pa(e,t,n,r,i,a,o,s){let c=ke(t,r.map(E)),l=Ae(t,a);try{let{id:t,evolution:r}=na(e.shellWithHistory(E(n),c,i,s??.001,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function ma(e,t,n,r,i,a){let o=Ae(t,i);try{let{id:t,evolution:i}=na(e.thickenWithHistory(E(n),r,.001,o,a));return{shape:D(e,t),evolution:i}}finally{o.delete()}}function ha(e,t,n,r,i,a,o){let s=Ae(t,i);try{let{id:t,evolution:i}=na(e.offsetWithHistory(E(n),r,o??1e-6,s,a));return{shape:D(e,t),evolution:i}}finally{s.delete()}}function ga(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 _a(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 va(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 Pr(e,t,[...i],[...a],r)}function ya(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 ba(e,t,n,r){if(n.length===0)throw Error(`hull: no shapes provided`);let i=ya(e,t,n,r);if(i.length<4)throw Error(`hull: fewer than 4 vertices extracted from input shapes`);return va(e,t,i,r)}function xa(e){throw Error(`occt-wasm: ${e} is not yet implemented`)}var Sa=class e{oc;kernelId=`occt-wasm`;capabilities=r;Module;k;owner;constructor(e,t,n){this.Module=e,this.k=Ie(t,e),this.oc=Le(e,this.k),this.owner=n}static fromKernel(t){return new e(t.getRawModule(),t.getRawKernel(),t)}get retainedKernelOwner(){return this.owner}dispose(e){De(e)?this.k.release(e.id):typeof e.delete==`function`&&e.delete()}executeBatch(e){xa(`executeBatch`)}checkpoint(){xa(`checkpoint`)}checkpointCount(){xa(`checkpointCount`)}restoreCheckpoint(e){xa(`restoreCheckpoint`)}discardCheckpoint(e){xa(`discardCheckpoint`)}makeBox(e,t,n){return Je(this.k,e,t,n)}makeCylinder(e,t,n,r){return Ye(this.k,e,t,n,r)}makeSphere(e,t){return Xe(this.k,e,t)}makeCone(e,t,n,r,i){return Ze(this.k,e,t,n,r,i)}makeTorus(e,t,n,r){return Qe(this.k,e,t,n,r)}makeEllipsoid(e,t,n){return $e(this.k,e,t,n)}makeBoxFromCorners(e,t){return et(this.k,e,t)}makeRectangle(e,t){return tt(this.k,e,t)}fuse(e,t,n){return ze(this.k,e,t,n)}cut(e,t,n){return Be(this.k,e,t,n)}intersect(e,t,n){return Ve(this.k,e,t,n)}section(e,t,n){return He(this.k,e,t,n)}fuseAll(e,t){return Ue(this.k,this.Module,e,t)}cutAll(e,t,n){return We(this.k,this.Module,e,t,n)}split(e,t){return Ge(this.k,this.Module,e,t)}checkBoolean(e,t,n){return Ke(this.k,e,t,n)}meshBoolean(e,t,n,r,i,a){return qe(e,t,n,r,i,a)}makeVertex(e,t,n){return vr(this.k,e,t,n)}makeEdge(e,t,n){return yr(this.k,e)}makeWire(e){return br(this.k,this.Module,e)}makeFace(e,t){return Sr(this.k,e,t)}makeLineEdge(e,t){return Cr(this.k,e,t)}makeCircleEdge(e,t,n){return wr(this.k,e,t,n)}makeCircleArc(e,t,n,r,i){return Tr(this.k,e,t,n,r,i)}makeArcEdge(e,t,n){return Er(this.k,e,t,n)}makeEllipseEdge(e,t,n,r,i){return Dr(this.k,e,t,n,r)}makeEllipseArc(e,t,n,r,i,a,o){return Or(this.k,e,t,n,r,i,a)}makeBezierEdge(e){return kr(this.k,this.Module,e)}makeTangentArc(e,t,n){return Ar(this.k,e,t,n)}makeHelixWire(e,t,n,r,i,a){return jr(this.k,e,t,n,r,i)}makeWireFromMixed(e){return xr(this.k,this.Module,e)}makeCompound(e){return Mr(this.k,this.Module,e)}solidFromShell(e){return Nr(this.k,e)}hull(e,t){return ba(this.k,this.Module,e,t)}hullFromPoints(e,t){return va(this.k,this.Module,e,t)}buildSolidFromFaces(e,t,n){return Pr(this.k,this.Module,e,t,n)}makeNonPlanarFace(e){return Fr(this.k,e)}addHolesInFace(e,t){return Ir(this.k,this.Module,e,t)}removeHolesFromFace(e){return Lr(this.k,this.Module,e)}makeFaceOnSurface(e,t){return Rr(this.k,e,t)}bsplineSurface(e,t,n){return zr(this.k,this.Module,e,t,n)}triangulatedSurface(e,t,n){return Br(this.k,this.Module,e,t,n)}buildTriFace(e,t,n){return Vr(this.k,e,t,n)}sewAndSolidify(e,t){return Hr(this.k,this.Module,e,t)}createPoint3d(e,t,n){return Ur(e,t,n)}createDirection3d(e,t,n){return Wr(e,t,n)}createVector3d(e,t,n){return Gr(e,t,n)}createAxis1(e,t,n,r,i,a){return Kr(e,t,n,r,i,a)}createAxis2(e,t,n,r,i,a,o,s,c){return qr(e,t,n,r,i,a,o,s,c)}createAxis3(e,t,n,r,i,a,o,s,c){return Jr(e,t,n,r,i,a,o,s,c)}extrude(e,t,n){return Pn(this.k,e,t,n)}revolve(e,t,n){return Fn(this.k,e,t,n)}loft(e,t,n,r){return In(this.k,this.Module,e,t,n,r)}sweep(e,t,n){return Ln(this.k,e,t,n)}simplePipe(e,t){return Rn(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){xa(`sweepWithOptions`)}sweepPipeShell(e,t,n){return zn(this.k,e,t,n)}loftAdvanced(e,t){return Bn(this.k,this.Module,e,t)}buildExtrusionLaw(e,t,n){return Vn(this.k,e,t,n)}revolveVec(e,t,n,r){return Hn(this.k,e,t,n,r)}draftPrism(e,t,n,r,i,a){return Un(this.k,e,t,n,r,i,a)}fillet(e,t,n){return Sn(this.k,this.Module,e,t,n)}chamfer(e,t,n){return Cn(this.k,this.Module,e,t,n)}chamferDistAngle(e,t,n,r){return wn(this.k,this.Module,e,t,n,r)}shell(e,t,n,r){return Tn(this.k,this.Module,e,t,n,r)}thicken(e,t){return En(this.k,e,t)}offset(e,t,n){return Dn(this.k,e,t,n)}filletVariable(e,t){return On(this.k,e,t)}draft(e,t,n,r,i){return kn(this.k,e,t,n,r,i)}defeature(e,t){return An(this.k,this.Module,e,t)}offsetWire2D(e,t,n){return jn(this.k,e,t,n)}simplify(e){return Mn(this.k,e)}reverseShape(e){return Nn(this.k,e)}composeTransform(e){return Wn(e)}transform(e,t){return Gn(this.k,this.Module,e,t)}translate(e,t,n,r){return Kn(this.k,e,t,n,r)}rotate(e,t,n,r){return qn(this.k,e,t,n,r)}mirror(e,t,n){return Jn(this.k,e,t,n)}scale(e,t,n){return Yn(this.k,e,t,n)}generalTransform(e,t,n,r){return Xn(this.k,this.Module,e,t,n,r)}generalTransformNonOrthogonal(e,t,n){return Xn(this.k,this.Module,e,t,n,!1)}positionOnCurve(e,t,n){return Zn(this.k,this.Module,e,t,n)}linearPattern(e,t,n,r){return Qn(this.k,e,t,n,r)}circularPattern(e,t,n,r,i){return $n(this.k,e,t,n,r,i)}transformBatch(e){return er(this.k,e)}translateWithHistory(e,t,n,r,i,a){return ra(this.k,this.Module,e,t,n,r,i,a)}rotateWithHistory(e,t,n,r,i,a){return ia(this.k,this.Module,e,t,n,r,i,a)}mirrorWithHistory(e,t,n,r,i){return aa(this.k,this.Module,e,t,n,r,i)}scaleWithHistory(e,t,n,r,i){return oa(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 la(this.k,this.Module,e,t,n,r,i)}intersectWithHistory(e,t,n,r,i){return ua(this.k,this.Module,e,t,n,r,i)}filletWithHistory(e,t,n,r,i){return da(this.k,this.Module,e,t,n,r,i)}chamferWithHistory(e,t,n,r,i){return fa(this.k,this.Module,e,t,n,r,i)}shellWithHistory(e,t,n,r,i,a){return pa(this.k,this.Module,e,t,n,r,i,a)}thickenWithHistory(e,t,n,r){return ma(this.k,this.Module,e,t,n,r)}offsetWithHistory(e,t,n,r,i){return ha(this.k,this.Module,e,t,n,r,i)}draftWithHistory(e,t,n,r,i,a,o){return ga(this.k,e,t,n,i)}applyComposedTransformWithHistory(e,t,n,r){return _a((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 Ct(this.k,this.Module,e,t)}meshEdges(e,t,n){return Tt(this.k,this.Module,e,t,n)}hasTriangulation(e){return Et(this.k,e)}meshShape(e,t,n){Dt(this.k,e,t,n)}exportSTEP(e){return rr(this.k,this.makeCompound.bind(this),e)}exportSTL(e,t,n,r){return ir(this.mesh.bind(this),e,t,n,r)}importSTEP(e){return ar(this.k,e)}importSTL(e){return or(this.k,this.Module,e)}exportIGES(e){return sr(this.k,this.makeCompound.bind(this),e)}importIGES(e){return cr(this.k,e)}exportSTEPAssembly(e,t){return lr(this.k,this.Module,e,t)}export3MF(e,t){throw Error(`export3MF is only available with the brepkit kernel`)}exportGLB(e,t){return ur(this.mesh.bind(this),e,t)}exportOBJ(e,t){return dr(this.mesh.bind(this),e,t)}exportPLY(e,t){return fr(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 pr(this.k,e)}fromBREP(e){return mr(this.k,e)}createXCAFDocument(e){return hr(this.k,this.Module,e)}writeXCAFToSTEP(e,t){return gr(this.k,e,t)}exportSTEPConfigured(e,t){return _r(this.k,this.Module,e,t)}volume(e){return nn(this.k,e)}area(e){return rn(this.k,e)}length(e){return an(this.k,e)}centerOfMass(e){return on(this.k,e)}linearCenterOfMass(e){return sn(this.k,e)}boundingBox(e){return cn(this.k,e)}distance(e,t){return mn(this.k,this.Module,e,t)}surfaceCurvature(e,t,n){return xn(this.k,e,t,n)}surfaceCenterOfMass(e){return ln(this.k,e)}measureBulk(e,t){return un(this.k,e,t)}createDistanceQuery(e){return dn(this.k,e)}iterShapes(e,t){return nt(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 rt(this.k,e)}isSame(e,t){return it(this.k,e,t)}isEqual(e,t){return at(this.k,e,t)}downcast(e,t){return ot(this.k,e,t)}hashCode(e,t){return st(this.k,e,t)}isNull(e){return ct(this.k,e)}shapeOrientation(e){return lt(this.k,e)}edgeToFaceMap(e){return ut(this.k,e)}sharedEdges(e,t){return dt(this.k,e,t)}adjacentFaces(e,t){return ft(this.k,e,t)}sew(e,t){return pt(this.k,this.Module,e,t)}curveType(e){return kt(this.k,e)}curveParameters(e){return At(this.k,e)}curvePointAtParam(e,t){return jt(this.k,e,t)}curveTangent(e,t){return Mt(this.k,e,t)}curveIsClosed(e){return Nt(this.k,e)}curveIsPeriodic(e){return Pt(this.k,e)}curvePeriod(e){return Ft(this.k,e)}interpolatePoints(e,t){return It(this.k,this.Module,e,t)}approximatePoints(e,t){return Lt(this.k,this.Module,e,t)}curveDegreeElevate(e,t){xa(`curveDegreeElevate`)}curveKnotInsert(e,t,n){xa(`curveKnotInsert`)}curveKnotRemove(e,t,n){xa(`curveKnotRemove`)}curveSplit(e,t){xa(`curveSplit`)}createCurveAdaptor(e){xa(`createCurveAdaptor`)}getBezierPenultimatePole(e){xa(`getBezierPenultimatePole`)}vertexPosition(e){return zt(this.k,e)}surfaceType(e){return Bt(this.k,e)}uvBounds(e){return Vt(this.k,e)}outerWire(e){return Ht(this.k,e)}surfaceNormal(e,t,n){return Ut(this.k,e,t,n)}pointOnSurface(e,t,n){return Wt(this.k,e,t,n)}uvFromPoint(e,t){return Qt(this.k,e,t)}projectPointOnFace(e,t){return $t(this.k,e,t)}classifyPointOnFace(e,t,n,r){return en(this.k,e,t,n,r)}classifyPointRobust(e,t,n){xa(`classifyPointRobust`)}classifyPointWinding(e,t,n){xa(`classifyPointWinding`)}approximateSurfaceLspia(e,t,n,r,i,a,o,s,c){xa(`approximateSurfaceLspia`)}untrimFace(e,t,n){xa(`untrimFace`)}getSurfaceCylinderData(e){return Zt(this.k,e)}getSurfaceAxis(e){return Xt(this.k,e)}reverseSurfaceU(e){xa(`reverseSurfaceU`)}detectSmallFeatures(e,t,n){xa(`detectSmallFeatures`)}recognizeFeatures(e,t){xa(`recognizeFeatures`)}projectEdges(e,t,n,r){return tn(this.k,this.Module,e,t,n,r)}isValid(e){return ht(this.k,e)}healSolid(e){return gt(this.k,e)}healFace(e){return _t(this.k,e)}healWire(e,t){return vt(this.k,e,t)}mergeCoincidentVertices(e,t){return yt(this.k,e,t)}removeDegenerateEdges(e,t){return bt(this.k,e,t)}fixFaceOrientations(e){return xt(this.k,e)}fixShape(e){return St(this.k,e)}fixSelfIntersection(e){xa(`fixSelfIntersection`)}createPoint2d(e,t){return Zr(e,t)}createDirection2d(e,t){return Qr(e,t)}createVector2d(e,t){return $r(e,t)}createAxis2d(e,t,n,r){return ei(e,t,n,r)}wrapCurve2dHandle(e){return ti(e)}createCurve2dAdaptor(e){xa(`createCurve2dAdaptor`)}makeLine2d(e,t,n,r){return ni(e,t,n,r)}makeCircle2d(e,t,n,r){return ri(e,t,n,r)}makeArc2dThreePoints(e,t,n,r,i,a){return ii(e,t,n,r,i,a)}makeArc2dTangent(e,t,n,r,i,a){return ai(e,t,n,r,i,a)}makeEllipse2d(e,t,n,r,i,a,o){return oi(e,t,n,r,i,a,o)}makeEllipseArc2d(e,t,n,r,i,a,o,s,c){return si(e,t,n,r,i,a,o,s,c)}makeBezier2d(e){return ci(e)}makeBSpline2d(e,t){return li(e)}evaluateCurve2d(e,t){return ui(e,t)}evaluateCurve2dD1(e,t){return di(e,t)}getCurve2dBounds(e){return fi(e)}getCurve2dType(e){return pi(e)}trimCurve2d(e,t,n){return mi(e,t,n)}reverseCurve2d(e){}copyCurve2d(e){return hi(e)}offsetCurve2d(e,t){return gi(e,t)}translateCurve2d(e,t,n){return _i(e,t,n)}rotateCurve2d(e,t,n,r){return vi(e,t,n,r)}scaleCurve2d(e,t,n,r){return yi(e,t,n,r)}mirrorCurve2dAtPoint(e,t,n){return bi(e,t,n)}mirrorCurve2dAcrossAxis(e,t,n,r,i){return xi(e,t,n,r,i)}affinityTransform2d(e,t,n,r,i,a){return Si(e)}createIdentityGTrsf2d(){return Ci()}createAffinityGTrsf2d(e,t,n,r,i){return wi(e,t,n,r,i)}createTranslationGTrsf2d(e,t){return Ti(e,t)}createMirrorGTrsf2d(e,t,n,r,i,a,o){return Ei(e,t,n,r,i,a,o)}createRotationGTrsf2d(e,t,n){return Di(e,t,n)}createScaleGTrsf2d(e,t,n){return Oi(e,t,n)}setGTrsf2dTranslationPart(e,t,n){ki(e,t,n)}multiplyGTrsf2d(e,t){Ai(e,t)}transformCurve2dGeneral(e,t){return ji(e,t)}intersectCurves2d(e,t,n){return Mi(e,t,n)}projectPointOnCurve2d(e,t,n){return Ni(e,t,n)}distanceBetweenCurves2d(e,t,n,r,i,a){return Pi(e,t,n,r,i,a)}approximateCurve2dAsBSpline(e,t,n,r){return Fi(e,r)}decomposeBSpline2dToBeziers(e){return Ii(e)}createBoundingBox2d(){return Li()}addCurveToBBox2d(e,t,n){Ri(e,t,n)}getBBox2dBounds(e){return zi(e)}mergeBBox2d(e,t){Bi(e,t)}isBBox2dOut(e,t){return Vi(e,t)}isBBox2dOutPoint(e,t,n){return Hi(e,t,n)}getCurve2dCircleData(e){return Ui(e)}getCurve2dEllipseData(e){return Wi(e)}getCurve2dBezierPoles(e){return Gi(e)}getCurve2dBezierDegree(e){return Ki(e)}getCurve2dBSplineData(e){xa(`getCurve2dBSplineData`)}serializeCurve2d(e){return qi(e)}deserializeCurve2d(e){return Ji(e)}splitCurve2d(e,t){return Yi(e,t)}liftCurve2dToPlane(e,t,n,r){return Xi(this.k,this.Module,e,t,n,r)}buildEdgeOnSurface(e,t){return Zi(this.k,this.Module,e,t)}extractSurfaceFromFace(e){return Qi(e)}extractCurve2dFromEdge(e,t){return $i()}buildCurves3d(e){ea(this.k,e)}fixWireOnFace(e,t,n){return ta(this.k,e,t,n)}fillSurface(e,t){xa(`fillSurface`)}getNurbsCurveData(e){return Rt(this.k,e)}};function O(e){return{ok:!0,value:e}}function k(e){return{ok:!1,error:e}}var Ca=O(void 0);function wa(e){return e.ok}function A(e){return!e.ok}function Ta(e,t){return e.ok?O(t(e.value)):e}function Ea(e,t){return e.ok?e:k(t(e.error))}function Da(e,t){return e.ok?t(e.value):e}var Oa=Da;function ka(e,t){return e.ok?e:t}function Aa(e,t){return e.ok?e:t(e.error)}function ja(e,t){return e.ok?t.ok?O([e.value,t.value]):t:e}var Ma=Ua;function Na(e,t){return e.ok&&t(e.value),e}function Pa(e,t){return e.ok||t(e.error),e}function Fa(e){return e.ok?e.value:e}function Ia(e,t,n){return e.ok?O(t(e.value)):k(n(e.error))}function La(e,t){return e==null?k(t()):O(e)}function Ra(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: ${Ra(e.error)}`)}function za(e,t){return e.ok?e.value:t}function Ba(e,t){return e.ok?e.value:t(e.error)}function Va(e){if(!e.ok)return e.error;throw Error(`Called unwrapErr() on an Ok: ${String(e.value)}`)}function Ha(e,t){return e.ok?t.ok(e.value):t.err(e.error)}function Ua(e){let t=[];for(let n of e){if(!n.ok)return n;t.push(n.value)}return O(t)}function Wa(e,t){try{return O(e())}catch(e){return k(t(e))}}async function Ga(e,t){try{return O(await e())}catch(e){return k(t(e))}}function Ka(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 qa=class extends Error{location;constructor(e,t){super(`Bug in ${e}: ${t}`),this.name=`BrepBugError`,this.location=e}};function M(e,t){throw new qa(e,t)}var Ja=[{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.`}],Ya={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 Xa(e){return Ya[e]}function Za(e){for(let{pattern:t,translation:n}of Ja)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 Qa(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 Qa(`KERNEL_OPERATION`,e,t,n,r,i)}function F(e,t,n,r,i){return Qa(`VALIDATION`,e,t,n,r,i)}function $a(e,t,n,r,i){return Qa(`TYPE_CAST`,e,t,n,r,i)}function eo(e,t,n,r,i){return Qa(`SKETCHER_STATE`,e,t,n,r,i)}function to(e,t,n,r,i){return Qa(`MODULE_INIT`,e,t,n,r,i)}function I(e,t,n,r,i){return Qa(`COMPUTATION`,e,t,n,r,i)}function no(e,t,n,r,i){return Qa(`IO`,e,t,n,r,i)}function ro(e,t,n,r,i){return Qa(`QUERY`,e,t,n,r,i)}function io(e,t,n,r,i){return Qa(`UNSUPPORTED`,e,t,n,r,i)}function ao(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 oo={draft:{tolerance:.01,angularTolerance:.5},standard:{tolerance:.001,angularTolerance:.1},fine:{tolerance:1e-4,angularTolerance:.05}},so=`standard`;function co(){return so}function lo(e=so){return oo[e]}function uo(e){so=e}function fo(e){return`makeLine2d`in e}var po=[`boolean`,`loft`,`extrude`,`shell`,`fillet`,`mesh`,`edgeMesh`,`transform`],mo=Object.create(null),ho=Object.create(null);function go(){for(let e of po)mo[e]=0,ho[e]=0}go();function _o(e){let t=performance.now();return()=>{mo[e]=(mo[e]??0)+(performance.now()-t),ho[e]=(ho[e]??0)+1}}function vo(){let e={};for(let t of po)e[t]={totalMs:mo[t]??0,count:ho[t]??0};return e}function yo(){go()}var bo;function xo(){bo=void 0}function So(e){return bo??=typeof e.BooleanBatch==`function`,bo}function Co(e){return e===`commonFace`?1:e===`sameFace`?2:0}function wo(e,t,n={}){if(!So(e))return null;let r=_o(`boolean`),i=new e.BooleanBatch;try{for(let e of t)i.addShape(e);return i.fuseAll(Co(n.optimisation),!!n.simplify,n.fuzzyValue??0)}finally{i.delete(),r()}}function To(e,t,n,r={}){if(!So(e))return null;if(n.length===0)return t;let i=_o(`boolean`),a=new e.BooleanBatch;try{for(let e of n)a.addShape(e);return a.cutAll(t,Co(r.optimisation),!!r.simplify,r.fuzzyValue??0)}finally{a.delete(),i()}}var Eo=2147483647,Do;function Oo(){Do=void 0}function ko(e){return Do??=typeof e.MeasurementExtractor?.extract==`function`,Do}function Ao(e,t,n=!1){if(ko(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:jo(e,t),area:Mo(e,t),length:n?No(e,t):0,centerOfMass:Po(e,t),boundingBox:Io(e,t)}}function jo(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 Mo(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 No(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 Po(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 Fo(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 Io(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 Lo(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 Ro(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 zo(e){return{volume:t=>jo(e,t),area:t=>Mo(e,t),length:t=>No(e,t),centerOfMass:t=>Po(e,t),linearCenterOfMass:t=>Fo(e,t),boundingBox:t=>Io(e,t),distance:(t,n)=>Lo(e,t,n),classifyPointOnFace:(t,n,r,i)=>Ro(e,t,n,r,i),measureBulk:(t,n)=>Ao(e,t,n)}}var Bo={vertex:7,edge:6,wire:5,face:4,shell:3,solid:2,compsolid:1,compound:0};function Vo(e,t,n){let r=e.TopologyExtractor.extract(t,Bo[n]),i=r.getShapesCount(),a=[];for(let e=0;e<i;e++)a.push(r.getShape(e));return r.delete(),a}var Ho=new WeakMap;function Uo(e,t,n){let r=Ho.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},Ho.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,Eo),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 Wo(e,t,n){return e.TopologyExtractor?Vo(e,t,n):Uo(e,t,n)}var Go=new WeakMap;function Ko(e){let t=Go.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`]]),Go.set(e,t)}return t}function qo(e,t){if(t.IsNull())throw Error(`Cannot determine shape type: shape is null`);let n=Ko(e).get(t.ShapeType());if(!n)throw Error(`Unknown shape type enum value`);return n}function Jo(e,t){let n=new e.BRepCheck_Analyzer(t,!0,!1,!1),r=n.IsValid_2();return n.delete(),r}function Yo(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 Xo(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 Zo(e,t){return e.IsSame(t)}function Qo(e,t){return e.IsEqual(t)}function $o(e){return{iterShapes:(t,n)=>Wo(e,t,n),iterShapeList:(t,n)=>{Xo(e,t,n)},shapeType:t=>qo(e,t),isSame:(e,t)=>Zo(e,t),isEqual:(e,t)=>Qo(e,t),isValid:t=>Jo(e,t),sew:(t,n)=>Yo(e,t,n)}}var es=.001;function ts(e,t,n){n===`commonFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueShift),n===`sameFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueFull)}function ns(e,t){e.SetRunParallel(!0),e.SetUseOBB?.(!0),t!==void 0&&t>0&&e.SetFuzzyValue?.(t)}function rs(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 is(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 as(e,t,n,r={}){let i=_o(`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);ts(e,c,i),ns(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,es);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function os(e,t,n,r={}){let i=_o(`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);ts(e,c,i),ns(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,es);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function ss(e,t,n,r={}){let i=_o(`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);ts(e,c,i),ns(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,es);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),ns(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 ls(e,t,n={}){let r=wo(e,t,n);if(r!==null)return r;let i=_o(`boolean`);try{let{optimisation:r,simplify:i=!1}=n,a=n.fuzzyValue??rs(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),ts(e,s,r),ns(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 us(e,n,r,i,a){a.signal?.throwIfAborted();let o=i-r;if(o===1)return t(n,r);if(o===2)return as(e,n[r],n[r+1],{...a,simplify:!1});let s=r+Math.ceil(o/2);return as(e,us(e,n,r,s,a),us(e,n,s,i,a),{...a,simplify:!1})}function ds(e,t,n={}){let r=us(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 fs(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`?ds(e,n,r):ls(e,n,r)}function ps(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),ns(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 ms(e,t,n,r={}){if(n.length===0)return t;let i=To(e,t,n,r);if(i!==null)return i;let a=is(e,n),o=os(e,t,a,r);return a.delete(),o}function hs(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 gs(e){return{fuse:(t,n,r)=>as(e,t,n,r),cut:(t,n,r)=>os(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)=>fs(e,t,n),cutAll:(t,n,r)=>ms(e,t,n,r),split:(t,n)=>ps(e,t,n),checkBoolean:(t,n,r)=>hs(e,t,n,r,t=>Jo(e,t))}}var _s={fuse:0,cut:1,intersect:2};function vs(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(_s[e.op],e.tool);let e=r.execute(t,i,a);return e.IsNull()?null:e}finally{r.delete()}}}function ys(e){return{booleanPipeline:(t,n,r)=>vs(e,t,n,r)??null}}function bs(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 xs(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 Ss(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 Cs(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=Wo(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 ws(e,t,n,r){let i=new e.BRepPrimAPI_MakeBox_2(t,n,r),a=i.Solid();return i.delete(),a}function Ts(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 Es(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 Ds(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 Os(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 ks(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 As(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 js(e){return{makeVertex:(t,n,r)=>bs(e,t,n,r),makeEdge:(t,n,r)=>xs(e,t,n,r),makeWire:t=>Ss(e,t),makeWireFromMixed:t=>ks(e,t),makeFace:(t,n)=>Cs(e,t,n),makeBox:(t,n,r)=>ws(e,t,n,r),makeCylinder:(t,n,r,i)=>Ts(e,t,n,r,i),makeSphere:(t,n)=>Es(e,t,n),makeCone:(t,n,r,i,a)=>Ds(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>As(e,t,n,r,i),buildTriFace:(t,n,r)=>Os(e,t,n,r)}}function Ms(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function Ns(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 Ps(e,t,n){let{faces:r,points:i}=t,a=[];for(let[t,n,o]of r){let r=Ms(i,t),s=Ms(i,n),c=Ms(i,o),l=Os(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 Fs(e,t,n){if(t.length===0)throw Error(`hull: no shapes provided`);let r=Ns(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 Ps(e,i,n)}function Is(e,t,n,r){return Ps(e,{points:t,faces:n},r)}function Ls(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 Ps(e,r,n)}function Rs(e){return{hull:(t,n)=>Fs(e,t,n),hullFromPoints:(t,n)=>Ls(e,t,n),buildSolidFromFaces:(t,n,r)=>Is(e,t,n,r)}}function zs(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 Bs(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 Vs(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 Hs(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 Us(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 Ws(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 Gs(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 Ks(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 qs(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 Js(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 Ys(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=Js(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 Xs(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 Zs(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 Qs(e,t){let n=new e.ShapeFix_Solid_1,r=n.SolidFromShell(e.TopoDS_Cast.Shell(t));return n.delete(),r}function $s(e,t){return e.BRepToolsWrapper.Write(t)}function ec(e,t){return e.BRepToolsWrapper.Read(t)}function tc(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 nc(e,t){try{t.delete()}catch{}}function rc(e,t,n){let r=zs(e,[0,0,0],[t,0,0]),i=zs(e,[t,0,0],[t,n,0]),a=zs(e,[t,n,0],[0,n,0]),o=zs(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 ic(e,t,n,r){return new e.gp_Pnt_3(t,n,r)}function ac(e,t,n,r){return new e.gp_Dir_5(t,n,r)}function oc(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 lc(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 uc(e){return{makeLineEdge:(t,n)=>zs(e,t,n),makeCircleEdge:(t,n,r)=>Bs(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>Vs(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>Hs(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>Ws(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>Gs(e,t,n,r,i,a,o,s),makeBezierEdge:t=>Ks(e,t),makeTangentArc:(t,n,r)=>Us(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>qs(e,t,n,r,i,a,o),makeCompound:t=>Xs(e,t),makeBoxFromCorners:(t,n)=>Zs(e,t,n),makeRectangle:(t,n)=>rc(e,t,n),solidFromShell:t=>Qs(e,t),makeEllipsoid:(t,n,r)=>Ys(e,t,n,r),toBREP:t=>$s(e,t),fromBREP:t=>ec(e,t),exportSTEPAssembly:(t,n)=>tc(e,t,n??{}),dispose:t=>{nc(e,t)},createPoint3d:(t,n,r)=>ic(e,t,n,r),createDirection3d:(t,n,r)=>ac(e,t,n,r),createVector3d:(t,n,r)=>oc(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)=>lc(e,t,n,r,i,a,o,s,c,l)}}function dc(e,t,n,r){let i=_o(`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 fc(e,t,n,r){let i=new e.BRepPrimAPI_MakeRevol_1(t,n,r,!1),a=i.Shape();return i.delete(),a}function pc(e,t,n=!1,r,i){let a=_o(`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 mc(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 hc(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=t.IsDone()?t.Solid():a;return n.delete(),t.delete(),r.delete(),o}return r.delete(),a}var gc,_c;function vc(){gc=void 0}function yc(){_c=void 0}function bc(e){return gc??=typeof e.LoftBatch==`function`,gc}function xc(e){return _c??=typeof e.ExtrudeBatch==`function`,_c}function Sc(e,t){if(t.length===0)return[];if(bc(e)){let n=_o(`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=>pc(e,t.wires,t.ruled??!1,t.startVertex,t.endVertex))}function Cc(e,t){if(t.length===0)return[];if(xc(e)){let n=_o(`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=>dc(e,t.face,t.direction,t.length))}function wc(e){return{extrude:(t,n,r)=>dc(e,t,n,r),revolve:(t,n,r)=>fc(e,t,n,r),loft:(t,n,r,i)=>pc(e,t,n,r,i),sweep:(t,n,r)=>mc(e,t,n,r??{}),simplePipe:(t,n)=>hc(e,t,n),loftBatch:t=>Sc(e,t),extrudeBatch:t=>Cc(e,t)}}function Tc(e,t,n,r){let i=_o(`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 Ec(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 Dc(e,t,n,r,i=.001){let a=_o(`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 Oc(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 kc(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 Ac(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 jc(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 Mc,Nc;function Pc(){Mc=void 0}function Fc(){Nc=void 0}function Ic(e){return Mc??=typeof e.ShellBatch==`function`,Mc}function Lc(e){return Nc??=typeof e.FilletBatch==`function`,Nc}function Rc(e,t){if(t.length===0)return[];if(Ic(e)){let n=_o(`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=>Dc(e,t.shape,t.faces,t.thickness,t.tolerance??.001))}function zc(e,t){if(t.length===0)return[];if(Lc(e)){let n=_o(`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 Tc(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 Bc(e){return{fillet:(t,n,r)=>Tc(e,t,n,r),chamfer:(t,n,r)=>Ec(e,t,n,r),chamferDistAngle:(t,n,r,i)=>kc(e,t,n,r,i),shell:(t,n,r,i)=>Dc(e,t,n,r,i),thicken:(t,n)=>Oc(e,t,n),offset:(t,n,r)=>jc(e,t,n,r),offsetWire2D:(t,n,r)=>Ac(e,t,n,r),shellBatch:t=>Rc(e,t),filletBatch:t=>zc(e,t)}}var Vc;function Hc(){Vc=void 0}function Uc(e){return Vc??=typeof e.TransformBatch==`function`,Vc}function Wc(e,t){if(t.length===0)return[];let n=_o(`transform`);try{if(Uc(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 Kc(e,t.shape,t.x,t.y,t.z);case`rotate`:return qc(e,t.shape,t.angle,[...t.axis],[...t.center]);case`scale`:return Yc(e,t.shape,[...t.center],t.factor);case`mirror`:return Jc(e,t.shape,[...t.origin],[...t.normal])}})}finally{n()}}function Gc(e,t,n){let r=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),i=r.ModifiedShape(t);return r.delete(),i}function Kc(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=Gc(e,t,a);return a.delete(),o.delete(),s}function qc(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=Gc(e,t,a);return a.delete(),c.delete(),o.delete(),s.delete(),l}function Jc(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=Gc(e,t,i);return i.delete(),s.delete(),a.delete(),o.delete(),c}function Yc(e,t,n,r){let i=new e.gp_Trsf_1,a=new e.gp_Pnt_3(...n);i.SetScale(a,r);let o=Gc(e,t,i);return i.delete(),a.delete(),o}function Xc(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 Zc(e,t){let n=new e.ShapeUpgrade_UnifySameDomain_2(t,!0,!0,!1);n.Build();let r=n.Shape();return n.delete(),r}function Qc(e){return{transform:(t,n)=>Gc(e,t,n),translate:(t,n,r,i)=>Kc(e,t,n,r,i),rotate:(t,n,r,i)=>qc(e,t,n,r,i),mirror:(t,n,r)=>Jc(e,t,n,r),scale:(t,n,r)=>Yc(e,t,n,r),transformBatch:t=>Wc(e,t),generalTransform:(t,n,r,i)=>Xc(e,t,n,r,i),simplify:t=>Zc(e,t)}}function $c(e,t,n){if(n===0)return new Float32Array;let r=t/4;return e.slice(r,r+n)}function el(e,t,n){let r=_o(`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=$c(e.HEAPF32,r.getVerticesPtr(),i),u=n.skipNormals||a===0?new Float32Array:$c(e.HEAPF32,r.getNormalsPtr(),a),d=r.getTrianglesPtr()/4,f=e.HEAPU32.slice(d,d+o),p=c>0?$c(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 tl(e,t,n,r){let i=_o(`edgeMesh`);try{let i=e.EdgeMeshExtractor.extract(t,n,r),a=i.getLinesSize(),o=i.getEdgeGroupsSize(),s=$c(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 nl(e){return{mesh:(t,n)=>el(e,t,n),meshEdges:(t,n,r)=>tl(e,t,n,r)}}var rl=0;function il(e,t){return`${e}_${++rl}.${t}`}function al(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=il(`_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 ol(e,t,n=!1){let r=il(`_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 sl(e,t){let n=new e.IGESControl_Writer_1;for(let e of t)n.AddShape(e);n.ComputeModel();let r=il(`_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 cl(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=il(`_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 ll(e,t){let n=il(`_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 ul(e,t){let n=il(`_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=>al(e,t),exportSTL:(t,n)=>ol(e,t,n),importSTEP:t=>cl(e,t),importSTL:t=>ll(e,t),exportIGES:t=>sl(e,t),importIGES:t=>ul(e,t)}}function fl(e,t){let n=e.BRep_Tool.Pnt(t),r=[n.X(),n.Y(),n.Z()];return n.delete(),r}function pl(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 ml=new WeakMap;function hl(e,t){let n=ml.get(e);n||(n=pl(e),ml.set(e,n));let r=new e.BRepAdaptor_Surface_2(t,!1),i=r.GetType();return r.delete(),n.get(i)??`other`}function gl(e,t){let n=e.BRepTools.UVBounds_1(t);return{uMin:n.UMin,uMax:n.UMax,vMin:n.VMin,vMax:n.VMax}}function _l(e,t){return e.BRepTools.OuterWire(t)}function vl(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 yl(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 bl(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 xl(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 Sl(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 Cl(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 wl(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 Tl(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 El(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 Dl(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 Ol(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 kl(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 Al(e,t,n){switch(n??jl(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 jl(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 Ml(e,t,n){return e.shapeHashCode(t,n)}function Nl(e,t){return t.IsNull()}function Pl(e,t){return t.Reversed()}function Fl(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 Il(e,t,n,r){new e.BRepMesh_IncrementalMeshWrapper(t,n,!1,r,!1).delete()}function Ll(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 Rl(e,t){return t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t)}function zl(e,t){let n=new e.GeomAdaptor_Surface_2(t),r=n.GetType();if((typeof r==`number`?r:Number(r?.value??r))!==1)return n.delete(),null;let i=n.Cylinder(),a={radius:i.Radius(),isDirect:i.Direct()};return i.delete(),n.delete(),a}function Bl(e,t){let n=new e.BRepAdaptor_Surface_2(t,!1);try{let e=n.GetType();if((typeof e==`number`?e:Number(e?.value??e))!==1)return null;let t=n.Cylinder(),r=t.Axis(),i=r.Location(),a=r.Direction(),o={origin:[i.X(),i.Y(),i.Z()],direction:[a.X(),a.Y(),a.Z()]};return i.delete(),a.delete(),r.delete(),t.delete(),o}finally{n.delete()}}function Vl(e,t){return t.get().UReversed()}function Hl(e){return{vertexPosition:t=>fl(e,t),surfaceType:t=>hl(e,t),uvBounds:t=>gl(e,t),outerWire:t=>_l(e,t),surfaceNormal:(t,n,r)=>vl(e,t,n,r),pointOnSurface:(t,n,r)=>yl(e,t,n,r),uvFromPoint:(t,n)=>bl(e,t,n),projectPointOnFace:(t,n)=>xl(e,t,n),curveTangent:(t,n)=>Sl(e,t,n),curveParameters:t=>Cl(e,t),shapeOrientation:t=>kl(e,t),downcast:(t,n)=>Al(e,t,n),hashCode:(t,n)=>Ml(e,t,n),isNull:t=>Nl(e,t),hasTriangulation:t=>Fl(e,t),meshShape:(t,n,r)=>{Il(e,t,n,r)},getBezierPenultimatePole:t=>Ll(e,t),createCurveAdaptor:t=>Rl(e,t),reverseShape:t=>Pl(e,t),curvePointAtParam:(t,n)=>wl(e,t,n),curveIsClosed:t=>Tl(e,t),curveIsPeriodic:t=>El(e,t),curvePeriod:t=>Dl(e,t),curveType:t=>Ol(e,t),getSurfaceCylinderData:t=>zl(e,t),getSurfaceAxis:t=>Bl(e,t),reverseSurfaceU:t=>Vl(e,t)}}function Ul(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 Wl(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 Gl(e){return{getNurbsCurveData:t=>Ul(e,t),getNurbsSurfaceData:t=>Wl(e,t)}}function Kl(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 ql(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 Jl(e){return{interpolatePoints:(t,n)=>Kl(e,t,n??{}),approximatePoints:(t,n)=>ql(e,t,n??{})}}function Yl(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 Xl(e,t){let n=new e.ShapeFix_Face_2(t);n.Perform();let r=n.Face();return n.delete(),r}function Zl(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 Ql(e){return{healSolid:t=>Yl(e,t),healFace:t=>Xl(e,t),healWire:(t,n)=>Zl(e,t,n)}}var $l={modified:new Map,generated:new Map,deleted:new Set};function eu(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 tu(e,t){try{let n=eu(e.HEAP32,t.getModifiedPtr(),t.getModifiedSize()),r=eu(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 nu(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 ru(e,t,n,r,i){if(r.length===0)return $l;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 tu(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,nu(e,a,i));let l=t.Generated(r);l.Size()>0&&s.set(n,nu(e,l,i))}return{modified:o,generated:s,deleted:c}}function iu(e,t,n,r,i){let a=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),o=a.Shape(),s=r.length===0?$l:ru(e,a,t,r,i);return a.delete(),{shape:o,evolution:s}}function au(e,t,n,r,i,a,o){return a&&t.SimplifyResult(!0,!0,.001),{shape:t.Shape(),evolution:ru(e,t,n,r,i),diagnostics:o??{hasErrors:!1,hasWarnings:!1,messages:[]}}}function ou(e,t,n,r,i){return{shape:t.Shape(),evolution:ru(e,t,n,r,i)}}function su(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=iu(e,t,s,a,o);return s.delete(),l}function cu(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=iu(e,t,s,r,i);return s.delete(),d}function lu(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=iu(e,t,o,i,a);return o.delete(),u}function uu(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=iu(e,t,o,i,a);return o.delete(),c}function du(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=iu(e,t,s,a,o);return s.delete(),c}function fu(e){return{hasErrors:e.HasErrors(),hasWarnings:e.HasWarnings(),messages:[]}}function pu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Fuse_3(t,n,o);ts(e,s,a.optimisation),ns(s,a.fuzzyValue),s.Build(o);let c=fu(s),l=au(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_Cut_3(t,n,o);ts(e,s,a.optimisation),ns(s,a.fuzzyValue),s.Build(o);let c=fu(s),l=au(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function hu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Common_3(t,n,o);ts(e,s,a.optimisation),ns(s,a.fuzzyValue),s.Build(o);let c=fu(s),l=au(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function gu(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=ou(e,o,t,i,a);return o.delete(),c}function _u(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=ou(e,o,t,i,a);return o.delete(),u}function vu(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=ou(e,s,t,i,a);return s.delete(),u}function yu(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=ou(e,a,t,r,i);return a.delete(),s}function bu(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=ou(e,o,t,r,i);return o.delete(),c}function xu(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(),ou(e,_,t,o,s)}finally{_.delete(),g.delete(),h.delete(),m.delete()}}function Su(e){return{translateWithHistory:(t,n,r,i,a,o)=>su(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>cu(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>lu(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>uu(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>du(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>pu(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>mu(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>hu(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>gu(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>_u(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>vu(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>yu(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>bu(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>xu(e,t,n,r,i,a,o,s)}}function Cu(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 wu(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 Tu(e,t,n,r,i){return iu(e,t,n,r,i)}function Eu(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 Du(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=Eu(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 Ou(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 Au(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 Mu(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 Nu(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 Pu(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 Fu(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 Iu(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 Lu(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 Ru(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 zu(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=Bu(e,d,f,p);a.Add(h);let g=Bu(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 Bu(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 Vu(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 Hu(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 Uu(e,t){let n=new e.ShapeFix_Wire_1;n.Load_1(t),n.FixSelfIntersection();let r=n.Wire();return n.delete(),r}function Wu(){return{gaussian:0,mean:0,max:0,min:0,maxDirection:[1,0,0],minDirection:[0,1,0]}}function Gu(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 Ku(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=Wu();if(h>=1e-15){m.Divide(h);let e=Gu(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:qu(o,s,e.du1,e.dv1),minDirection:qu(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 qu(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 Ju(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 Yu(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 Xu(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 Zu(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 Qu(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 $u(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=il(`_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 ed(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=il(`_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 td(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=il(`_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 nd(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)?ed(e,t):td(e,t)}function rd(e){return{composeTransform:t=>wu(e,t),applyComposedTransformWithHistory:(t,n,r,i)=>Tu(e,t,n,r,i),sweepPipeShell:(t,n,r)=>Du(e,t,n,r??{}),loftAdvanced:(t,n)=>Ou(e,t,n??{}),buildExtrusionLaw:(t,n,r)=>ku(e,t,n,r),revolveVec:(t,n,r,i)=>Au(e,t,n,r,i),positionOnCurve:(t,n,r)=>Nu(e,t,n,r),linearPattern:(t,n,r,i)=>ju(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>Mu(e,t,n,r,i,a),makeNonPlanarFace:t=>Pu(e,t),addHolesInFace:(t,n)=>Fu(e,t,n),removeHolesFromFace:t=>Iu(e,t),makeFaceOnSurface:(t,n)=>Lu(e,t,n),bsplineSurface:(t,n,r)=>Ru(e,t,n,r),triangulatedSurface:(t,n,r)=>zu(e,t,n,r),sewAndSolidify:(t,n)=>Vu(e,t,n),fixShape:t=>Hu(e,t),fixSelfIntersection:t=>Uu(e,t),surfaceCurvature:(t,n,r)=>Ku(e,t,n,r),surfaceCenterOfMass:t=>Ju(e,t),createDistanceQuery:t=>Yu(e,t),projectEdges:(t,n,r,i)=>Xu(e,t,n,r,i),draftPrism:(t,n,r,i,a,o)=>Zu(e,t,n,r,i,a,o),generalTransformNonOrthogonal:(t,n,r)=>Cu(e,t,n,r),createXCAFDocument:t=>Qu(e,t),writeXCAFToSTEP:(t,n)=>$u(e,t,n??{}),exportSTEPConfigured:(t,n)=>nd(e,t,n??{})}}var id=()=>{};function ad(e){return e}function od(e){let t=ad(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function sd(e){return e}function cd(e,t){return{x:e,y:t}}function ld(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 ud(e,t){return{x:e,y:t}}function dd(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:id}}function fd(e){return e}function pd(e){return e}function md(e,t,n,r){return x(e,t,n,r)}function hd(e,t,n,r){return S(e,t,n,r)}function gd(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 _d(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 gd(e,t,p+h*Math.cos(S),m+h*Math.sin(S),i,a)}function vd(e,t,n,r,i,a,o){return C(e,t,n,r,i,a,o)}function yd(e,t,n,r,i,a,o,s,c){return{__bk2d:`trimmed`,basis:C(e,t,n,r,o,s,c),tStart:i,tEnd:a}}function bd(e){return w(e)}function xd(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 Sd(e,t){return _(ad(e),t)}function Cd(e,t){return{point:_(ad(e),t),tangent:v(ad(e),t)}}function wd(e){return y(ad(e))}function Td(e){return b(od(e))}function Ed(e,t,n){return{__bk2d:`trimmed`,basis:ad(e),tStart:t,tEnd:n}}function Dd(e){return JSON.parse(JSON.stringify(e))}function Od(e,t){let n=ad(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 xd(i)}function kd(e,t,n){return ee(ad(e),t,n)}function Ad(e,t,n,r){return te(ad(e),t,n,r)}function jd(e,t,n,r){return ne(ad(e),t,n,r)}function Md(e,t,n){return re(ad(e),t,n)}function Nd(e,t,n,r,i){return ie(ad(e),t,n,r,i)}function Pd(e,t,n,r,i,a){return Wd(e,Ld(t,n,r,i,a))}function Fd(e,t,n){return{m:e,tx:t,ty:n,delete:id}}function Id(){return Fd([1,0,0,0,1,0,0,0,1],0,0)}function Ld(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return Id();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 Fd(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function Rd(e,t){return Fd([1,0,0,0,1,0,0,0,1],e,t)}function zd(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 Fd(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return Fd([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function Bd(e,t,n){let r=Math.cos(e),i=Math.sin(e);return Fd([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function Vd(e,t,n){return Fd([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function Hd(e,t,n){e.tx=t,e.ty=n}function Ud(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 Wd(e,n){let r=ad(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 ee(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 w(f)}function Gd(e,t,n){let r=ae(ad(e),ad(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function Kd(e,t,n){let r=ad(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 qd(e,t,n,r,i,a){let o=ad(e),s=ad(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=Kd(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=Kd(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 Jd(e,n,r,i){let a=ad(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 xd(l,{degMax:s})}function Yd(e){let n=od(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return Yd(Jd(e,1e-6,`C2`,10));let r=y(ad(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 Xd(){return ge()}function Zd(e,t,n){_e(sd(e),ad(t),n)}function Qd(e){let t=sd(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function $d(e,t){let n=sd(e),r=sd(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 ef(e,t){let n=sd(e),r=sd(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function tf(e,t,n){let r=sd(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function nf(e){let t=od(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function rf(e){let t=od(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function af(e){let t=od(e);return t.__bk2d===`bezier`?[...t.poles]:null}function of(e){let t=od(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function sf(e){let t=od(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 me(ad(e))}function lf(e){return he(e)}function uf(e,t){let n=ad(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 df(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 ff(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 pf(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 mf(e,n,r,i,a){let o=ad(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 df(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 ff(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?df(e,t(n,0),t(n,1)):pf(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 pf(e,u)}function hf(e,t,n){let r=ad(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 pf(e,a)}function gf(e,t){return e.BRep_Tool.Surface_2(t)}function _f(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(),xd(o)}function vf(e,t){e.BRepLib.BuildCurves3d_2(t)}function yf(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 bf(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=Wo(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 xf(e){return{wrapCurve2dHandle:e=>fd(e),createCurve2dAdaptor:e=>pd(e),createPoint2d:(e,t)=>cd(e,t),createDirection2d:(e,t)=>ld(e,t),createVector2d:(e,t)=>ud(e,t),createAxis2d:(e,t,n,r)=>dd(e,t,n,r),makeLine2d:(e,t,n,r)=>md(e,t,n,r),makeCircle2d:(e,t,n,r)=>hd(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>gd(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>_d(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>vd(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>yd(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>bd(e),makeBSpline2d:(e,t)=>xd(e,t),evaluateCurve2d:(e,t)=>Sd(e,t),evaluateCurve2dD1:(e,t)=>Cd(e,t),getCurve2dBounds:e=>wd(e),getCurve2dType:e=>Td(e),trimCurve2d:(e,t,n)=>Ed(e,t,n),reverseCurve2d:e=>{},copyCurve2d:e=>Dd(e),offsetCurve2d:(e,t)=>Od(e,t),translateCurve2d:(e,t,n)=>kd(e,t,n),rotateCurve2d:(e,t,n,r)=>Ad(e,t,n,r),scaleCurve2d:(e,t,n,r)=>jd(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>Md(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>Nd(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>Pd(e,t,n,r,i,a),createIdentityGTrsf2d:()=>Id(),createAffinityGTrsf2d:(e,t,n,r,i)=>Ld(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>Rd(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>zd(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>Bd(e,t,n),createScaleGTrsf2d:(e,t,n)=>Vd(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{Hd(e,t,n)},multiplyGTrsf2d:(e,t)=>{Ud(e,t)},transformCurve2dGeneral:(e,t)=>Wd(e,t),intersectCurves2d:(e,t,n)=>Gd(e,t,n),projectPointOnCurve2d:(e,t,n)=>Kd(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>qd(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>Jd(e,t,n,r),decomposeBSpline2dToBeziers:e=>Yd(e),createBoundingBox2d:()=>Xd(),addCurveToBBox2d:(e,t,n)=>{Zd(e,t,n)},getBBox2dBounds:e=>Qd(e),mergeBBox2d:(e,t)=>{$d(e,t)},isBBox2dOut:(e,t)=>ef(e,t),isBBox2dOutPoint:(e,t,n)=>tf(e,t,n),getCurve2dCircleData:e=>nf(e),getCurve2dEllipseData:e=>rf(e),getCurve2dBezierPoles:e=>af(e),getCurve2dBezierDegree:e=>of(e),getCurve2dBSplineData:e=>sf(e),serializeCurve2d:e=>cf(e),deserializeCurve2d:e=>lf(e),splitCurve2d:(e,t)=>uf(e,t),liftCurve2dToPlane:(t,n,r,i)=>mf(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>hf(e,t,n),extractSurfaceFromFace:t=>gf(e,t),extractCurve2dFromEdge:(t,n)=>_f(e,t,n),buildCurves3d:t=>{vf(e,t)},fixWireOnFace:(t,n,r)=>yf(e,t,n,r),fillSurface:(t,n)=>bf(e,t,n)}}function Sf(){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 Cf(e){return{draft:(t,n,r,i,a)=>xu(e,t,n,r,i,a,[],1).shape}}var wf=class{oc;kernelId=`occt`;capabilities=r;constructor(e){this.oc=e,Object.assign(this,gs(e),ys(e),Rs(e),js(e),uc(e),wc(e),Bc(e),Qc(e),nl(e),dl(e),zo(e),$o(e),Hl(e),Gl(e),Jl(e),Ql(e),Su(e),rd(e),xf(e),Cf(e),Sf())}},Tf=()=>{};function Ef(e){return typeof e==`object`&&!!e&&e.__brepkit}function Df(e,t){return{__brepkit:!0,type:e,id:t,delete:Tf,HashCode(e){return t%e},IsNull(){return!1}}}function L(e){return Df(`solid`,e)}function Of(e){return Df(`face`,e)}function kf(e){return Df(`edge`,e)}function Af(e){return Df(`wire`,e)}function jf(e){return Df(`shell`,e)}function Mf(e){let t=Df(`compound`,e);return qf.has(e)?{...t,delete:()=>qf.delete(e)}:t}function Nf(e){return Df(`vertex`,e)}function R(e,t){if(!Ef(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 Pf(e,t){if(!Ef(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 Ff(e,t,n){if(!Ef(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 If(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 Lf(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function Rf(e,t,n){return[1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1]}function zf(e,t=[0,0,1],n=[0,0,0]){let r=e*Math.PI/180,i=Math.cos(r),a=Math.sin(r),o=1-i,s=Math.sqrt(t[0]**2+t[1]**2+t[2]**2),[c,l,u]=[t[0]/s,t[1]/s,t[2]/s],d=o*c*c+i,f=o*c*l-a*u,p=o*c*u+a*l,m=o*l*c+a*u,h=o*l*l+i,g=o*l*u-a*c,_=o*u*c-a*l,v=o*u*l+a*c,y=o*u*u+i,[b,x,S]=n;return[d,f,p,b-(d*b+f*x+p*S),m,h,g,x-(m*b+h*x+g*S),_,v,y,S-(_*b+v*x+y*S),0,0,0,1]}function Bf(e,t){let[n,r,i]=e;return[t,0,0,n*(1-t),0,t,0,r*(1-t),0,0,t,i*(1-t),0,0,0,1]}function Vf(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 Hf(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 Uf(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 Wf=.01,Gf=9e5;function Kf(){return Gf++}var qf=new Map,Jf=new Set;function Yf(e,t){Jf.has(e)||(Jf.add(e),console.warn(`brepkit: ${t}`))}function Xf(e){return e.optimisation!==void 0||e.simplify!==void 0||e.strategy!==void 0||e.fuzzyValue!==void 0}function Zf(e){return e}function Qf(e){let t=e;for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function $f(e){return e}function ep(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 tp(e,t,n){let r=qf.get(t);return r?r.flatMap(t=>t.type===n?[t]:lp(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=>lp(e,t,n)):[]}function np(e,t,n){switch(n){case`face`:return z(e.getSolidFaces(t)).map(Of);case`edge`:return z(e.getSolidEdges(t)).map(kf);case`vertex`:return z(e.getSolidVertices(t)).map(Nf);case`wire`:return z(e.getSolidFaces(t)).flatMap(t=>z(e.getFaceWires(t)).map(Af));default:return[]}}function rp(e,t,n){let r=z(e.getShellFaces(t)).map(Of),i=new Set,a=[];for(let t of r)for(let r of lp(e,t,n)){let e=R(r);i.has(e)||(i.add(e),a.push(r))}return a}function ip(e,t,n){return n===`face`?z(e.getShellFaces(t)).map(Of):n===`edge`||n===`vertex`?rp(e,t,n):[]}function ap(e,t,n,r){return r===`face`?[t]:r===`edge`?z(e.getFaceEdges(n)).map(kf):r===`vertex`?z(e.getFaceVertices(n)).map(Nf):r===`wire`?z(e.getFaceWires(n)).map(Af):[]}function op(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(Nf(e.makeVertex(t,n,r))))}}return a}function sp(e,t,n,r){return r===`wire`?[t]:r===`edge`?z(e.getWireEdges(n)).map(kf):r===`vertex`?op(e,n):[]}function cp(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[Nf(i),Nf(a)]}return[]}function lp(e,t,n){let r=R(t);switch(t.type){case`compound`:return tp(e,r,n);case`solid`:return np(e,r,n);case`shell`:return ip(e,r,n);case`face`:return ap(e,t,r,n);case`wire`:return sp(e,t,r,n);case`edge`:return cp(e,t,r,n);default:return[]}}function up(e,t,n){if(Array.isArray(t))for(let e of t)n(e)}function dp(e,t){if(Ef(t))return t.type;throw Error(`brepkit: cannot determine shape type of non-brepkit handle`)}function fp(e,t,n){return Ef(t)&&Ef(n)&&t.id===n.id&&t.type===n.type}function pp(e,t,n){return fp(e,t,n)}function mp(e,t,n){return t}function hp(e,t,n){return Ef(t)?t.id%n:0}function gp(e,t){return!t||!Ef(t)}function _p(e,t){let n=R(t);return e.getShapeOrientation(n)}function vp(e,t){let n=Pf(t,`edgeToFaceMap`);return e.edgeToFaceMap(n)}function yp(e,t,n){let r=R(t,`face`),i=R(n,`face`);return Array.from(e.sharedEdges(r,i)).map(e=>kf(e))}function bp(e,t,n){let r=Pf(t,`adjacentFaces`),i=R(n,`face`);return Array.from(e.adjacentFaces(r,i)).map(e=>Of(e))}function xp(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 Sp(e,t,n){let r=t.flatMap(t=>xp(e,t)),i=n??1e-7;try{return jf(e.weldShellsAndFaces(r,i))}catch(e){console.warn(`brepkit: weldShellsAndFaces failed, falling back to sewFaces:`,e)}return jf(e.sewFaces(r,i))}function Cp(e){return{iterShapes:(t,n)=>lp(e,t,n),iterShapeList:(t,n)=>{up(e,t,n)},shapeType:t=>dp(e,t),isSame:(t,n)=>fp(e,t,n),isEqual:(t,n)=>pp(e,t,n),downcast:(t,n)=>mp(e,t,n),hashCode:(t,n)=>hp(e,t,n),isNull:t=>gp(e,t),shapeOrientation:t=>_p(e,t),edgeToFaceMap:t=>vp(e,t),sharedEdges:(t,n)=>yp(e,t,n),adjacentFaces:(t,n)=>bp(e,t,n),sew:(t,n)=>Sp(e,t,n)}}function wp(e,t){return n(e.getVertexPosition(R(t,`vertex`)))}function Tp(e,t){return e.getSurfaceType(R(t,`face`))}function Ep(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 Dp(e,t){return Af(e.getFaceOuterWire(R(t,`face`)))}function Op(e,t,r,i){return n(e.evaluateSurfaceNormal(R(t,`face`),r,i))}function kp(e,t,r,i){return n(e.evaluateSurface(R(t,`face`),r,i))}function Ap(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 jp(e,t,r){return n(e.projectPointOnSurface(R(t,`face`),r[0],r[1],r[2]),2)}function Mp(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 Np(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 Pp(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 Fp(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 Ip(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=>If(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 Ip(e.getEdgeVertices(R(r,`edge`)))}function Ip(e){return If(t(e,0),t(e,1),t(e,2),t(e,3),t(e,4),t(e,5))<1e-7}function Lp(e,t){let n=t;try{if(n.type===`edge`||n.type===`wire`&&z(e.getWireEdges(n.id)).length===1)return Fp(e,t)}catch{}return!1}function Rp(e,t){try{if(Lp(e,t)){let n=Np(e,t);return n[1]-n[0]}}catch{}return 0}function zp(e,t){if(t.type===`wire`){let n=lp(e,t,`edge`)[0];return n?e.getEdgeCurveType(R(n,`edge`)):`LINE`}return e.getEdgeCurveType(R(t,`edge`))}function Bp(e,t,n){let r=R(t,`edge`);return kf(e.curveDegreeElevate(r,n))}function Vp(e,t,n,r){let i=R(t,`edge`);return kf(e.curveKnotInsert(i,n,r))}function Hp(e,t,n,r){let i=R(t,`edge`);return kf(e.curveKnotRemove(i,n,r))}function Up(e,n,r){let i=R(n,`edge`),a=e.curveSplit(i,r);return[kf(t(a,0)),kf(t(a,1))]}function Wp(e,t,n,r,i,a,o,s,c,l){return Of(e.approximateSurfaceLspia(t,n,r,i,a,o,s,c,l))}function Gp(e,t,n,r){let i=R(t,`face`);return Of(e.untrimFace(i,n,r))}function Kp(e,t){return t}function qp(e,t){let r=Cm(e,t);return!r||r.controlPoints.length<6?null:n(r.controlPoints,r.controlPoints.length-6)}function Jp(e,t){if(Ef(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 Yp(e,t){let n=JSON.parse(e.getAnalyticSurfaceParams(R(t,`face`)));if(n.type!==`cylinder`)return null;let[r,i,a]=n.origin,[o,s,c]=n.axis,l=Math.hypot(o,s,c);return l<1e-12?null:{origin:[r,i,a],direction:[o/l,s/l,c/l]}}function Xp(e,t){return t}function Zp(e,n,r,i,a){a!==void 0&&Yf(`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 Qp(e,t,n,r){let i=Pf(t,`classifyPointRobust`);return e.classifyPointRobust(i,n[0],n[1],n[2],r)}function $p(e,t,n,r){let i=Pf(t,`classifyPointWinding`);return e.classifyPointWinding(i,n[0],n[1],n[2],r)}function em(e,t,n,r){let i=Pf(t,`detectSmallFeatures`);return Array.from(e.detectSmallFeatures(i,n,r)).map(e=>Of(e))}function tm(e,t,n){let r=Pf(t,`recognizeFeatures`);return e.recognizeFeatures(r,n)}function nm(e,t,n,r,i){let a=lp(e,t,`edge`),o=a.length>0?a[0]:t;return{visible:{outline:o,smooth:o,sharp:o},hidden:{outline:o,smooth:o,sharp:o}}}function rm(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 im(e,t){return JSON.parse(e.getNurbsSurfaceDataParity(R(t,`face`)))}function am(e){return{vertexPosition:t=>wp(e,t),surfaceType:t=>Tp(e,t),uvBounds:t=>Ep(e,t),outerWire:t=>Dp(e,t),surfaceNormal:(t,n,r)=>Op(e,t,n,r),pointOnSurface:(t,n,r)=>kp(e,t,n,r),uvFromPoint:(t,n)=>Ap(e,t,n),projectPointOnFace:(t,n)=>jp(e,t,n),curveTangent:(t,n)=>Mp(e,t,n),curveParameters:t=>Np(e,t),curvePointAtParam:(t,n)=>Pp(e,t,n),curveIsClosed:t=>Fp(e,t),curveIsPeriodic:t=>Lp(e,t),curvePeriod:t=>Rp(e,t),curveType:t=>zp(e,t),curveDegreeElevate:(t,n)=>Bp(e,t,n),curveKnotInsert:(t,n,r)=>Vp(e,t,n,r),curveKnotRemove:(t,n,r)=>Hp(e,t,n,r),curveSplit:(t,n)=>Up(e,t,n),approximateSurfaceLspia:(t,n,r,i,a,o,s,c,l)=>Wp(e,t,n,r,i,a,o,s,c,l),untrimFace:(t,n,r)=>Gp(e,t,n,r),createCurveAdaptor:t=>Kp(e,t),getBezierPenultimatePole:t=>qp(e,t),getSurfaceCylinderData:t=>Jp(e,t),getSurfaceAxis:t=>Yp(e,t),reverseSurfaceU:t=>Xp(e,t),classifyPointOnFace:(t,n,r,i)=>Zp(e,t,n,r,i),classifyPointRobust:(t,n,r)=>Qp(e,t,n,r),classifyPointWinding:(t,n,r)=>$p(e,t,n,r),detectSmallFeatures:(t,n,r)=>em(e,t,n,r),recognizeFeatures:(t,n)=>tm(e,t,n),projectEdges:(t,n,r,i)=>nm(e,t,n,r,i),getNurbsCurveData:t=>rm(e,t),getNurbsSurfaceData:t=>im(e,t)}}function om(e,t,n){if(Array.isArray(n)&&n.length===16)return ym(e,t,n);throw Error(`brepkit: transform expects a 16-element matrix array`)}function sm(e,t,n,r,i){return ym(e,t,Rf(n,r,i))}function cm(e,t,n,r,i){return ym(e,t,zf(n,r,i))}function lm(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])):ym(e,t,Hf(n,r))}function um(e,t,n,r){return ym(e,t,Bf(n,r))}function dm(e,t,n,r,i){return ym(e,t,Vf(n,r))}function fm(e,t,n,r){return ym(e,t,Vf(n,r))}function pm(e,t,n,r){let{point:i,tangent:a}=Mp(e,n,r),[o,s,c]=a,l=Math.sqrt(o*o+s*s+c*c);if(l<1e-12)return sm(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=cm(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=cm(e,p,n,t)}return sm(e,p,i[0],i[1],i[2])}function mm(e,t,n,r,i){let a=[t];for(let o=1;o<i;o++){let i=r*o;a.push(sm(e,t,n[0]*i,n[1]*i,n[2]*i))}return a}function hm(e,t,n,r,i,a){let o=[t];for(let s=1;s<a;s++)o.push(cm(e,t,i*s,r,n));return o}function gm(e,t,n,r,i,a,o,s){return Mf(e.gridPattern(Pf(t,`gridPattern`),n[0],n[1],n[2],r[0],r[1],r[2],i,a,o,s))}function _m(e,t){return t.map(t=>{switch(t.type){case`translate`:return sm(e,t.shape,t.x,t.y,t.z);case`rotate`:return cm(e,t.shape,t.angle,t.axis,t.center);case`scale`:return um(e,t.shape,t.center,t.factor);case`mirror`:return lm(e,t.shape,t.origin,t.normal)}})}function vm(e){return{transform:(t,n)=>om(e,t,n),translate:(t,n,r,i)=>sm(e,t,n,r,i),rotate:(t,n,r,i)=>cm(e,t,n,r,i),mirror:(t,n,r)=>lm(e,t,n,r),scale:(t,n,r)=>um(e,t,n,r),generalTransform:(t,n,r,i)=>dm(e,t,n,r,i),generalTransformNonOrthogonal:(t,n,r)=>fm(e,t,n,r),positionOnCurve:(t,n,r)=>pm(e,t,n,r),linearPattern:(t,n,r,i)=>mm(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>hm(e,t,n,r,i,a),gridPattern:(t,n,r,i,a,o,s)=>gm(e,t,n,r,i,a,o,s),transformBatch:t=>_m(e,t)}}function ym(e,t,n){let r=t;if(!Ef(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),Of(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),Af(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),kf(t)}default:throw Error(`brepkit: applyMatrix does not support '${r.type}' shapes`)}}function bm(e,t){return!!(e&&(e[0]!==0||e[1]!==0||e[2]!==0)||t&&(t[0]!==0||t[1]!==0||t[2]!==1))}function xm(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=cm(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=cm(e,i,n,t)}}return n&&(n[0]!==0||n[1]!==0||n[2]!==0)&&(i=sm(e,i,n[0],n[1],n[2])),i}function Sm(e,t){let r,i=t;if(i.type===`solid`||i.type===`compound`){let n=lp(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,Wf);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 Cm(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 wm(e,t){if(!Ef(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 Tm(e,t){if(!Ef(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 Em(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 Dm(e,t){return t}function Om(e,t,n){return t}function km(e,t,n){let r=Pf(t,`mergeCoincidentVertices`);return e.mergeCoincidentVertices(r,n)}function Am(e,t,n){let r=Pf(t,`removeDegenerateEdges`);return e.removeDegenerateEdges(r,n)}function jm(e,t){let n=Pf(t,`fixFaceOrientations`);return e.fixFaceOrientations(n)}function Mm(e,t){let n=t;return n.type===`solid`&&e.healSolid(n.id),t}function Nm(e,t){return t}function Pm(e,t){if(!Ef(t)||t.type!==`solid`)return null;try{return typeof e.validateSolidDetails==`function`?e.validateSolidDetails(t.id):null}catch{return null}}function Fm(e){return{isValid:t=>wm(e,t),isValidStrict:t=>Tm(e,t),healSolid:t=>Em(e,t),healFace:t=>Dm(e,t),healWire:(t,n)=>Om(e,t,n),fixShape:t=>Mm(e,t),fixSelfIntersection:t=>Nm(e,t),mergeCoincidentVertices:(t,n)=>km(e,t,n),removeDegenerateEdges:(t,n)=>Am(e,t,n),fixFaceOrientations:t=>jm(e,t),validationDetails:t=>Pm(e,t)}}function Im(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 Lm(e,t){return t.type===`compound`?z(e.getCompoundSolids(t.id)).length===0:!1}function Rm(e){return Mf(e.makeCompound([]))}function zm(e,t,n,r){if(r&&Xf(r)&&Yf(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),Lm(e,t))return n;if(Lm(e,n))return t;let i=Pf(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,Pf(n,`fuse`)))}function Bm(e,t,n,r){if(r&&Xf(r)&&Yf(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),Lm(e,t))return Rm(e);if(Lm(e,n))return t;let i=Pf(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(Im(t))return Rm(e);throw t}return L(n)}try{return L(e.cut(i,Pf(n,`cut`)))}catch(t){if(Im(t))return Rm(e);throw t}}function Vm(e,t,n,r){if(r&&Xf(r)&&Yf(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),Lm(e,t)||Lm(e,n))return Rm(e);try{return L(e.intersect(Pf(t,`intersect`),Pf(n,`intersect`)))}catch(t){if(Im(t))return Rm(e);throw t}}function Hm(e,n,r,i){let{point:a,normal:o}=Sm(e,r),s=Ef(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 Mf(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(Af(t(r,e)))}let[u]=l;if(l.length===1&&u!==void 0)return u;let d=Kf();return qf.set(d,l),Mf(d)}function Um(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(Pf(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(zm(e,i[n],i[n+1],r)):t.push(i[n]);i=t}return t(i,0)}function Wm(e,t,n,r){if(n.length===0)return t;if(n.length===1)return Bm(e,t,n[0],r);let i=Pf(t,`cutAll`),a=[];for(let t of n){let n=t;n.type===`compound`?a.push(...z(e.getCompoundSolids(n.id))):a.push(Pf(t,`cutAll`))}return a.length===0?t:L(e.compoundCut(i,new Uint32Array(a)))}function Gm(e,t,n){if(n.length===0)throw Error(`brepkit: split requires at least one tool`);let{point:r,normal:i}=Sm(e,n[0]),a=z(e.split(R(t,`solid`),r[0],r[1],r[2],i[0],i[1],i[2]));return Mf(e.makeCompound(a))}function Km(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 qm(e,t,n,r,i){let a=[];return(!Ef(t)||t.IsNull())&&a.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),(!Ef(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 Jm(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 Ym(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 Xm(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 Zm(e){return{fuse:(t,n,r)=>zm(e,t,n,r),cut:(t,n,r)=>Bm(e,t,n,r),intersect:(t,n,r)=>Vm(e,t,n,r),section:(t,n,r)=>Hm(e,t,n,r),fuseAll:(t,n)=>Um(e,t,n),cutAll:(t,n,r)=>Wm(e,t,n,r),split:(t,n)=>Gm(e,t,n),meshBoolean:(t,n,r,i,a,o)=>Km(e,t,n,r,i,a,o),checkBoolean:(t,n,r)=>qm(e,t,n,r,t=>wm(e,t)),hull:(t,n)=>Jm(e,t,n),hullFromPoints:(t,n)=>Ym(e,t,n),buildSolidFromFaces:(t,n,r)=>Xm(e,t,n,r)}}function Qm(e,t,n,r){return Nf(e.makeVertex(t,n,r))}function $m(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 lh(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(Ef(t)&&t.type===`edge`)return t;throw Error(`brepkit: makeEdge requires a curve with origin/direction, or an edge handle`)}function eh(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 Af(e.makeWire(n,!0))}function th(e,t,n){let r=t,i=r.type===`edge`?e.makeWire([r.id],!0):R(t,`wire`);return Of(n?e.makePlanarFaceFromWire(i):e.makeFaceFromWire(i))}function nh(e,t,n,r){return L(e.makeBox(t,n,r))}function rh(e,t,n){return Of(e.makeRectangle(t,n))}function ih(e,t,n,r,i){let a=L(e.makeCylinder(t,n));return bm(r,i)?xm(e,a,r,i):a}function ah(e,t,n){let r=L(e.makeSphere(t,32));return n&&(n[0]!==0||n[1]!==0||n[2]!==0)?sm(e,r,n[0],n[1],n[2]):r}function oh(e,t,n,r,i,a){let o=L(e.makeCone(t,n,r));return bm(i,a)?xm(e,o,i,a):o}function sh(e,t,n,r,i){let a=L(e.makeTorus(t,n,32));return bm(r,i)?xm(e,a,r,i):a}function ch(e,t,n,r){let i=Math.max(t,n,r);return dm(e,ah(e,i),[t/i,0,0,0,n/i,0,0,0,r/i],[0,0,0],!1)}function lh(e,t,n){return kf(e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function uh(e,t,n,r){let i=Math.sqrt(n[0]**2+n[1]**2+n[2]**2);return kf(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){return zh(e,t,n,r,i,a)}function fh(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 ph(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 lh(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=fh(p,m,h,g,_,v);if(!y)return lh(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 kf(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 mh(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 kf(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 kf(e.makeEllipseEdge(t[0],t[1],t[2],n[0]/o,n[1]/o,n[2]/o,r,i))}function hh(e,t,n,r,i,a,o,s){return Bh(e,t,n,r,i,a,o,s)}function gh(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 kf(e.makeNurbsEdge(c[0],c[1],c[2],l[0],l[1],l[2],r,a,s,o))}function _h(e,t,n,r){return kf(e.makeTangentArc3d(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]))}function vh(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 eh(e,[jh(e,p)])}function yh(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 Af(e.makeWire(n,!1))}function bh(e,t){let n=t.filter(Ef);if(n.length===0)throw Error(`brepkit: makeCompound requires at least one shape`);if(n.every(e=>e.type===`solid`))return Mf(e.makeCompound(n.map(e=>e.id)));let r=Kf();return qf.set(r,n),Mf(r)}function xh(e,t,n){let r=nh(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?sm(e,r,i,a,o):r}function Sh(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 Ch(e,t){return th(e,t,!1)}function wh(e,t,n){let r=n.map(e=>R(e,`wire`));return Of(e.addHolesToFace(R(t,`face`),r))}function Th(e,t){return Of(e.removeHolesFromFace(R(t,`face`)))}function Eh(e,t,n){return th(e,n,!1)}function Dh(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 Of(e.interpolateSurface(i,n,r,a,o))}catch{return Oh(e,t,n,r)}}function Oh(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=kh(e,t(n,s),t(n,c),t(n,l));d&&a.push(d);let f=kh(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 Sp(e,a,1e-6)}function kh(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 th(e,eh(e,[lh(e,t,n),lh(e,n,r),lh(e,r,t)]))}catch(e){return console.warn(`brepkit: makeNonPlanarFace failed:`,e),null}}function Ah(e,t,n){let r=t.map(e=>R(e,`face`));return L(e.sewFaces(r,n))}function jh(e,n,r){if(r?.tolerance!==void 0&&Yf(`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 lh(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 kf(e.interpolatePoints(a,i))}function Mh(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 kf(e.approximateCurveLspia(a,r,o,i,100))}function Nh(e,t,n,r){return{x:t,y:n,z:r}}function Ph(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 Fh(e,t,n,r){return{x:t,y:n,z:r}}function Ih(e,t,n,r,i,a,o){return{origin:[t,n,r],direction:[i,a,o]}}function Lh(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 Rh(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 zh(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 kf(e.makeNurbsEdge(b,x,S,C,w,ee,2,v,g,_))}function Bh(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 kf(e.makeNurbsEdge(y,b,x,S,C,w,2,_,h,g))}function Vh(e){return{makeVertex:(t,n,r)=>Qm(e,t,n,r),makeEdge:(t,n,r)=>$m(e,t,n,r),makeWire:t=>eh(e,t),makeWireFromMixed:t=>yh(e,t),makeFace:(t,n)=>th(e,t,n),makeBox:(t,n,r)=>nh(e,t,n,r),makeRectangle:(t,n)=>rh(e,t,n),makeCylinder:(t,n,r,i)=>ih(e,t,n,r,i),makeSphere:(t,n)=>ah(e,t,n),makeCone:(t,n,r,i,a)=>oh(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>sh(e,t,n,r,i),makeEllipsoid:(t,n,r)=>ch(e,t,n,r),makeLineEdge:(t,n)=>lh(e,t,n),makeCircleEdge:(t,n,r)=>uh(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>dh(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>ph(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>mh(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>hh(e,t,n,r,i,a,o,s),makeBezierEdge:t=>gh(e,t),makeTangentArc:(t,n,r)=>_h(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>vh(e,t,n,r,i,a,o),makeCompound:t=>bh(e,t),makeBoxFromCorners:(t,n)=>xh(e,t,n),solidFromShell:t=>Sh(e,t),makeNonPlanarFace:t=>Ch(e,t),addHolesInFace:(t,n)=>wh(e,t,n),removeHolesFromFace:t=>Th(e,t),makeFaceOnSurface:(t,n)=>Eh(e,t,n),bsplineSurface:(t,n,r)=>Dh(e,t,n,r),triangulatedSurface:(t,n,r)=>Oh(e,t,n,r),buildTriFace:(t,n,r)=>kh(e,t,n,r),sewAndSolidify:(t,n)=>Ah(e,t,n),interpolatePoints:(t,n)=>jh(e,t,n),approximatePoints:(t,n)=>Mh(e,t,n),createPoint3d:(t,n,r)=>Nh(e,t,n,r),createDirection3d:(t,n,r)=>Ph(e,t,n,r),createVector3d:(t,n,r)=>Fh(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>Ih(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>Lh(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>Rh(e,t,n,r,i,a,o,s,c,l)}}function Hh(e,t,n,r){let i=Pf(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 Uh(e,t,n,r){let i=Pf(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)):(Yf(`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):(Yf(`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 Wh(e,t,n,r,i){let a=r*Math.tan(i*Math.PI/180),o=Pf(t,`chamferDistAngle`),s=n.map(e=>R(e,`edge`));return typeof e.chamferAsymmetric==`function`?L(e.chamferAsymmetric(o,s,r,a)):(Yf(`chamfer-dist-angle`,`chamferAsymmetric not available; using averaged distance.`),L(e.chamfer(o,s,(r+a)/2)))}function Gh(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 Kh(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 qh(e,t,n){try{let r=Gh(e,t);if(r===null)return null;let i=-1,a=1/0;for(let t of n)try{let n=Gh(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 Jh(e,t,n,r){if(r.has(t))return t;let i=Kh(e,t,n);if(i!==null)return i;let a=qh(e,t,n);return a===null?t:a}function Yh(e,t,n,r,i){i!==void 0&&Yf(`shell-tolerance`,`shell() tolerance parameter is not supported; brepkit uses its own internal tolerance.`);let a=Pf(t,`shell`),o=z(e.getSolidFaces(a)),s=new Set(o),c=n.map(t=>Jh(e,R(t,`face`),o,s));return L(e.shell(a,r,c))}function Xh(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 Zh(e,t,n,r){r!==void 0&&Yf(`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=Pf(t,`offset`);return L(e.offsetSolidV2(a,n))}function Qh(e,t,n){let r=Pf(t,`filletVariable`);return L(e.filletVariable(r,n))}function $h(e,t,n,r,i,a){let o=Pf(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 eg(e,t,n){let r=Pf(t,`defeature`),i=n.map(e=>R(e,`face`));return L(e.defeature(r,i))}function tg(e){switch(e){case`arc`:case`tangent`:return`arc`;case`intersection`:return`intersection`;default:return`intersection`}}function ng(e,n,r,i){if(typeof e.offsetWire2DWithJoin==`function`)return Af(e.offsetWire2DWithJoin(R(n,`wire`),r,tg(i)));let a=lp(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 Af(e.makePolygonWire(c))}function rg(e,t){if(t.type===`solid`)try{e.healSolid(R(t))}catch(e){console.warn(`brepkit: healing failed in simplify:`,e)}return t}function ig(e,t){let n=t,r=e.reverseShape(n.id);return Df(n.type,r)}function ag(e){return{fillet:(t,n,r)=>Hh(e,t,n,r),chamfer:(t,n,r)=>Uh(e,t,n,r),chamferDistAngle:(t,n,r,i)=>Wh(e,t,n,r,i),shell:(t,n,r,i)=>Yh(e,t,n,r,i),thicken:(t,n)=>Xh(e,t,n),offset:(t,n,r)=>Zh(e,t,n,r),filletVariable:(t,n)=>Qh(e,t,n),draft:(t,n,r,i,a)=>$h(e,t,n,r,i,ep(n,a)),defeature:(t,n)=>eg(e,t,n),offsetWire2D:(t,n,r)=>ng(e,t,n,r),simplify:t=>rg(e,t),reverseShape:t=>ig(e,t)}}function og(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 sg(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 cg(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 lg(e,t,n){try{return{hash:n,normal:e.getFaceNormal(t),centroid:cg(e,t)}}catch{return{hash:n,normal:[0,0,0],centroid:cg(e,t)}}}var ug=.707,dg=100,fg=.05;function pg(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<ug)continue;let c=sg(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 mg(e,t){let n=1/0,r;for(let i of t){let t=sg(e.centroid,i.centroid);t<n&&(n=t,r=i)}return r}function hg(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(lg(e,i,r[n]??i%a))}let p=i.map(t=>lg(e,t,t%a)),m=new Set;for(let e of p){let{matches:n,bestScore:r}=pg(e,f);if(n.length>0){for(let i of n)if(i.score>=r-fg){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=mg(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 gg(e,t,n,r,i,a,o,s){let c=new Set(s),l=new Map(a);hg(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 _g(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 vg(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?gg(e,l,d,f,a,o,s,c):_g(i,r,u,t,s,c)}else if(l)hg(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 yg(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 vg(e,n,d,r,i,c,l,u,o)}return{shape:n,evolution:{modified:c,generated:l,deleted:u}}}function bg(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 xg(e,t){let n=new Set;bg(t.combinedModified,e.evolution.modified,e.evolution.deleted,n,t.combinedDeleted),bg(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 Sg(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=og(a(t.id,e),i);s=n.shape,xg(n,c)}return{shape:s,accum:c}}function Cg(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{...og(o(u.id,d.id),i),diagnostics:l}}catch(e){if(!Im(e))throw e}if(d.type===`compound`){let{shape:n,accum:a}=Sg(e,t,d.id,r,i,o);return{shape:n,evolution:{modified:a.combinedModified,generated:a.combinedGenerated,deleted:a.combinedDeleted},diagnostics:l}}}return{...yg(e,s(t,n,a),r,i,!1,t),diagnostics:l}}function wg(e,t,n,r,i,a,o){return yg(e,sm(e,t,n,r,i),a,o,!0)}function Tg(e,t,n,r,i,a,o){return yg(e,cm(e,t,n*180/Math.PI,a,o),r,i,!0)}function Eg(e,t,n,r,i,a){return yg(e,lm(e,t,n,r),i,a,!0)}function Dg(e,t,n,r,i,a){return yg(e,um(e,t,n,r),i,a,!0)}function Og(e,t,n,r,i,a,o){return yg(e,dm(e,t,n,r,i),a,o,!0)}function kg(e,t,n,r,i,a){return Cg(e,t,n,r,i,a,(t,n)=>e.fuseWithEvolution(t,n),(t,n,r)=>zm(e,t,n,r),`fuseWithHistory`)}function Ag(e,t,n,r,i,a){return Cg(e,t,n,r,i,a,(t,n)=>e.cutWithEvolution(t,n),(t,n,r)=>Bm(e,t,n,r),`cutWithHistory`)}function jg(e,t,n,r,i,a){return Cg(e,t,n,r,i,a,(t,n)=>e.intersectWithEvolution(t,n),(t,n,r)=>Vm(e,t,n,r),`intersectWithHistory`)}function Mg(e,t,n,r,i,a){return yg(e,Hh(e,t,n,r),i,a,!1,t)}function Ng(e,t,n,r,i,a){return yg(e,Uh(e,t,n,r),i,a,!1,t)}function Pg(e,t,n,r,i,a,o){return yg(e,Yh(e,t,n,r,o),i,a,!1,t)}function Fg(e,t,n,r,i){return yg(e,Xh(e,t,n),r,i,!1,t)}function Ig(e,t,n,r,i,a){return yg(e,Zh(e,t,n,a),r,i,!1,t)}function Lg(e,t,n,r,i,a,o,s){return yg(e,$h(e,t,n,r,i,a),o,s,!1,t)}function Rg(e,t,n,r,i){return yg(e,ym(e,t,n),r,i,!0)}function zg(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=Uf(e.type===`translate`?Rf(e.x,e.y,e.z):zf(e.angle,e.axis,e.center),n);return{handle:n,dispose:()=>{}}}function Bg(e){return{translateWithHistory:(t,n,r,i,a,o)=>wg(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>Tg(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>Eg(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>Dg(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>Og(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>kg(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>Ag(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>jg(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>Mg(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>Ng(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>Pg(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>Fg(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>Ig(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>Lg(e,t,n,r,i,ep(n,a),o,s),applyComposedTransformWithHistory:(t,n,r,i)=>Rg(e,t,n,r,i),composeTransform:t=>zg(e,t)}}function Vg(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=Wg(e,r,a,!!n.includeUVs,o);else if(i.type===`face`)s=qg(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 Hg(e,n,r,i){i>0&&Yf(`mesh-edges-angular`,`meshEdges angularTolerance is not supported; only linear deflection is used.`);let a=n;if(a.type!==`solid`)return{lines:new Float32Array,edgeGroups:[]};let o=e.meshEdgesAll(a.id,r),s=o.positions,c=o.offsets,l=o.edgeCount,u=[];for(let e=0;e<l;e++){let n=t(c,e),r=((e+1<l?t(c,e+1):s.length)-n)/3;u.push({start:n/3,count:r,edgeHash:e})}return{lines:new Float32Array(s),edgeGroups:u}}function Ug(e,t){return!1}function Wg(e,t,n,r,i){try{return Gg(e,t,n,r,i)}catch(r){return console.warn(`brepkit: tessellateSolidGrouped failed (solidId=${t}), falling back to per-face:`,r),Kg(e,t,n,i)}}function Gg(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 Kg(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 qg(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 Jg(e){return{mesh:(t,n)=>Vg(e,t,n),meshEdges:(t,n,r)=>Hg(e,t,n,r),hasTriangulation:t=>Ug(e,t),meshShape:(e,t,n)=>{}}}function Yg(e,t){if(t.length===0)return``;let n=[];for(let r of t){let t=Ff(e,r,`exportSTEP`);for(let r of t){let t=e.exportStep(r);n.push(new TextDecoder().decode(t))}}return n.join(`
8
+ `)}function Xg(e,n,r,i=be,a=xe){let{vertices:o,triangles:s}=Vg(e,L(t(Ff(e,n,`exportSTL`),0)),{tolerance:i,angularTolerance:a,skipNormals:!0});return r?we(o,s):Te(o,s)}function Zg(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return z(e.importStep(n)).map(L)}function Qg(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return L(e.importStl(n))}function $g(e,t){if(t.length===0)return``;let n=[];for(let r of t){let t=Ff(e,r,`exportIGES`);for(let r of t){let t=e.exportIges(r);n.push(new TextDecoder().decode(t))}}return n.join(`
9
+ `)}function e_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return z(e.importIges(n)).map(L)}function t_(e,t,n){return t.length===0?``:Yg(e,t.map(e=>e.shape))}function n_(e,t,n){let r=Pf(t,`export3MF`);return Lf(e.export3mf(r,n))}function r_(e,t,n){let r=Pf(t,`exportGLB`);return Lf(e.exportGlb(r,n))}function i_(e,t,n){let r=Pf(t,`exportOBJ`);return Lf(e.exportObj(r,n))}function a_(e,t,n){let r=Pf(t,`exportPLY`);return Lf(e.exportPly(r,n))}function o_(e,t){return z(e.import3mf(new Uint8Array(t))).map(e=>L(e))}function s_(e,t){return L(e.importObj(new Uint8Array(t)))}function c_(e,t){return L(e.importGlb(new Uint8Array(t)))}function l_(e,t){let n=t;return n.type===`solid`?e.toBREP(n.id):(Yf(`brep-non-solid`,`toBREP for non-solid shapes uses STEP format.`),Yg(e,[t]))}function u_(e,t){if(typeof e.fromBREP==`function`&&t.trimStart().startsWith(`{`))return L(e.fromBREP(t));let n=Zg(e,t)[0];if(!n)throw Error(`brepkit: fromBREP produced no shapes`);return n}function d_(e,t){return{__brepkit_xcaf:!0,shapes:t,delete:Tf}}function f_(e,t,n){return t&&t.__brepkit_xcaf&&Array.isArray(t.shapes)?Yg(e,t.shapes.map(e=>e.shape)):``}function p_(e,t,n){return Yg(e,t.map(e=>e.shape))}function m_(e){return{exportSTEP:t=>Yg(e,t),exportSTL:(t,n,r,i)=>Xg(e,t,n,r,i),importSTEP:t=>Zg(e,t),importSTL:t=>Qg(e,t),exportIGES:t=>$g(e,t),importIGES:t=>e_(e,t),exportSTEPAssembly:(t,n)=>t_(e,t,n),export3MF:(t,n)=>n_(e,t,n),exportGLB:(t,n)=>r_(e,t,n),exportOBJ:(t,n)=>i_(e,t,n),exportPLY:(t,n)=>a_(e,t,n),import3MF:t=>o_(e,t),importOBJ:t=>s_(e,t),importGLB:t=>c_(e,t),toBREP:t=>l_(e,t),fromBREP:t=>u_(e,t),createXCAFDocument:t=>d_(e,t),writeXCAFToSTEP:(t,n)=>f_(e,t,n),exportSTEPConfigured:(t,n)=>p_(e,t,n)}}function h_(e,t){return{x:e,y:t}}function g_(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 __(e,t){return{x:e,y:t}}function v_(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:Tf}}function y_(e){return e}function b_(e){return e}function x_(e,t,n,r){return x(e,t,n,r)}function S_(e,t,n,r){return S(e,t,n,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 T_(e,t,n,r,i,a,o){return C(e,t,n,r,i,a,o)}function E_(e,t,n,r,i,a,o,s,c){return{__bk2d:`trimmed`,basis:C(e,t,n,r,o,s,c),tStart:i,tEnd:a}}function D_(e){return w(e)}function O_(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 k_(e,t){return _(Zf(e),t)}function A_(e,t){return{point:_(Zf(e),t),tangent:v(Zf(e),t)}}function j_(e){return y(Zf(e))}function M_(e){return b(Qf(e))}function N_(e,t,n){return{__bk2d:`trimmed`,basis:Zf(e),tStart:t,tEnd:n}}function P_(e){return JSON.parse(JSON.stringify(e))}function F_(e,t){let n=Zf(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 O_(i)}function I_(e,t,n){return ee(Zf(e),t,n)}function L_(e,t,n,r){return te(Zf(e),t,n,r)}function R_(e,t,n,r){return ne(Zf(e),t,n,r)}function z_(e,t,n){return re(Zf(e),t,n)}function B_(e,t,n,r,i){return ie(Zf(e),t,n,r,i)}function V_(e,t,n,r,i,a){return Z_(e,W_(t,n,r,i,a))}function H_(e,t,n){return{m:e,tx:t,ty:n,delete:Tf}}function U_(){return H_([1,0,0,0,1,0,0,0,1],0,0)}function W_(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return U_();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 H_(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function G_(e,t){return H_([1,0,0,0,1,0,0,0,1],e,t)}function K_(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 H_(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return H_([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function q_(e,t,n){let r=Math.cos(e),i=Math.sin(e);return H_([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function J_(e,t,n){return H_([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function Y_(e,t,n){e.tx=t,e.ty=n}function X_(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 Z_(e,n){let r=Zf(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 ee(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 w(f)}function Q_(e,t,n){let r=ae(Zf(e),Zf(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function $_(e,t,n){let r=Zf(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 ev(e,t,n,r,i,a){let o=Zf(e),s=Zf(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=$_(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=$_(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 tv(e,n,r,i){let a=Zf(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 O_(l,{degMax:s})}function nv(e){let n=Qf(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return nv(tv(e,1e-6,`C2`,10));let r=y(Zf(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 rv(){return ge()}function iv(e,t,n){_e($f(e),Zf(t),n)}function av(e){let t=$f(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function ov(e,t){let n=$f(e),r=$f(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 sv(e,t){let n=$f(e),r=$f(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function cv(e,t,n){let r=$f(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function lv(e){let t=Qf(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function uv(e){let t=Qf(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function dv(e){let t=Qf(e);return t.__bk2d===`bezier`?[...t.poles]:null}function fv(e){let t=Qf(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function pv(e){let t=Qf(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function mv(e){return me(Zf(e))}function hv(e){return he(e)}function gv(e,t){let n=Zf(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 _v(e,n,r,i,a){let o=Zf(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 lh(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?kf(t(p,0)):Af(e.makeWire(p,!1))}}if(o.__bk2d===`bezier`||o.__bk2d===`bspline`){let n=o.poles.map(([e,t])=>c(e,t));if(n.length===2)return lh(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 kf(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 jh(e,u)}function vv(e,t,r){if(!Ef(r))throw Error(`brepkit: buildEdgeOnSurface requires a face handle as surface`);let i=R(r,`face`),a=Zf(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 jh(e,c)}function yv(e){return e}function bv(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 xv(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)}));bv(d,u,80,.05);let f=d.map(e=>e.uv);if(f.length>=2)return O_(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 Sv(e,t,n){return e}function Cv(e,n,r){if(n.length>=1){let r=lp(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 Of(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 Ch(e,i)}function wv(e){return{createPoint2d:(e,t)=>h_(e,t),createDirection2d:(e,t)=>g_(e,t),createVector2d:(e,t)=>__(e,t),createAxis2d:(e,t,n,r)=>v_(e,t,n,r),wrapCurve2dHandle:e=>y_(e),createCurve2dAdaptor:e=>b_(e),makeLine2d:(e,t,n,r)=>x_(e,t,n,r),makeCircle2d:(e,t,n,r)=>S_(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)=>T_(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>E_(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>D_(e),makeBSpline2d:(e,t)=>O_(e,t),evaluateCurve2d:(e,t)=>k_(e,t),evaluateCurve2dD1:(e,t)=>A_(e,t),getCurve2dBounds:e=>j_(e),getCurve2dType:e=>M_(e),trimCurve2d:(e,t,n)=>N_(e,t,n),reverseCurve2d:e=>{},copyCurve2d:e=>P_(e),offsetCurve2d:(e,t)=>F_(e,t),translateCurve2d:(e,t,n)=>I_(e,t,n),rotateCurve2d:(e,t,n,r)=>L_(e,t,n,r),scaleCurve2d:(e,t,n,r)=>R_(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>z_(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>B_(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>V_(e,t,n,r,i,a),createIdentityGTrsf2d:()=>U_(),createAffinityGTrsf2d:(e,t,n,r,i)=>W_(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>G_(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>K_(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>q_(e,t,n),createScaleGTrsf2d:(e,t,n)=>J_(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{Y_(e,t,n)},multiplyGTrsf2d:(e,t)=>{X_(e,t)},transformCurve2dGeneral:(e,t)=>Z_(e,t),intersectCurves2d:(e,t,n)=>Q_(e,t,n),projectPointOnCurve2d:(e,t,n)=>$_(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>ev(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>tv(e,t,n,r),decomposeBSpline2dToBeziers:e=>nv(e),createBoundingBox2d:()=>rv(),addCurveToBBox2d:(e,t,n)=>{iv(e,t,n)},getBBox2dBounds:e=>av(e),mergeBBox2d:(e,t)=>{ov(e,t)},isBBox2dOut:(e,t)=>sv(e,t),isBBox2dOutPoint:(e,t,n)=>cv(e,t,n),getCurve2dCircleData:e=>lv(e),getCurve2dEllipseData:e=>uv(e),getCurve2dBezierPoles:e=>dv(e),getCurve2dBezierDegree:e=>fv(e),getCurve2dBSplineData:e=>pv(e),serializeCurve2d:e=>mv(e),deserializeCurve2d:e=>hv(e),splitCurve2d:(e,t)=>gv(e,t),liftCurve2dToPlane:(t,n,r,i)=>_v(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>vv(e,t,n),extractSurfaceFromFace:e=>yv(e),extractCurve2dFromEdge:(t,n)=>xv(e,t,n),buildCurves3d:e=>{},fixWireOnFace:(e,t,n)=>Sv(e,t,n),fillSurface:(t,n)=>Cv(e,t,n)}}function Tv(e,t){let n=t;if(n.type===`solid`)return e.volume(R(t),Wf);if(n.type===`compound`){let n=lp(e,t,`solid`),r=0;for(let t of n)r+=e.volume(R(t),Wf);return r}return 0}function Ev(e,t){let n=t;if(n.type===`face`)return e.faceArea(R(t),Wf);if(n.type===`solid`)return e.surfaceArea(R(t),Wf);if(n.type===`compound`){let n=lp(e,t,`face`),r=0;for(let t of n)r+=e.faceArea(R(t),Wf);return r}return 0}function Dv(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 Ov(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),Wf));if(r.type===`face`){let n=Ep(e,t);return kp(e,t,(n.uMin+n.uMax)/2,(n.vMin+n.vMax)/2)}if(r.type===`edge`)return Ov(e,r.id);if(r.type===`vertex`)return wp(e,t);let i=lp(e,t,`vertex`);if(i.length>0){let t=0,n=0,r=0;for(let a of i){let i=wp(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 Av(e,t){let n=t;return n.type===`edge`?Ov(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=wp(e,t);return{min:[...n],max:[...n]}}let i=lp(e,t,`vertex`);if(i.length===0)return{min:[0,0,0],max:[0,0,0]};let a=wp(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=wp(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 Mv(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 Nv(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 Pv(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 Fv(e,t){let n=n=>Mv(e,t,n);return{distanceTo(e){return n(e)},dispose(){}}}function Iv(e,t,n=!1){let r=t,i=r.type===`edge`||r.type===`wire`||r.type===`face`;return{volume:Tv(e,t),area:Ev(e,t),length:n&&i?Dv(e,t):0,centerOfMass:kv(e,t),boundingBox:jv(e,t)}}function Lv(e){return{volume:t=>Tv(e,t),area:t=>Ev(e,t),length:t=>Dv(e,t),centerOfMass:t=>kv(e,t),linearCenterOfMass:t=>Av(e,t),boundingBox:t=>jv(e,t),distance:(t,n)=>Mv(e,t,n),surfaceCurvature:(t,n,r)=>Nv(e,t,n,r),surfaceCenterOfMass:t=>Pv(e,t),createDistanceQuery:t=>Fv(e,t),measureBulk:(t,n)=>Iv(e,t,n)}}function Rv(e){return e.sketchNew()}function zv(e,t,n,r,i){return e.sketchAddPoint(t,n,r,i)}function Bv(e,t,n){e.sketchAddConstraint(t,n)}function Vv(e,t,n,r){return e.sketchSolve(t,n,r)}function Hv(e,t,n,r,i){return e.sketchAddArc(t,n,r,i)}function Uv(e,t){let n=e.sketchDof(t);return typeof n==`string`?n:String(n)}function Wv(e){return{sketchNew:()=>Rv(e),sketchAddPoint:(t,n,r,i)=>zv(e,t,n,r,i),sketchAddArc:(t,n,r,i)=>Hv(e,t,n,r,i),sketchAddConstraint:(t,n)=>{Bv(e,t,n)},sketchSolve:(t,n,r)=>Vv(e,t,n,r),sketchDof:t=>Uv(e,t)}}function Gv(e,t,n,r){return L(e.extrude(R(t,`face`),n[0],n[1],n[2],r))}function Kv(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 qv(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 Jv(e,t,n,r,i){(n!==void 0||r!==void 0||i!==void 0)&&Yf(`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 Yv(e){switch(e){case 0:return`rmf`;case 1:return`rightCorner`;case 2:return`roundCorner`;default:return}}function Xv(e,t,n,r){let i=r?.transitionMode===void 0?void 0:Yv(r.transitionMode),a=t,o=a.type===`wire`?e.makeFaceFromWire(a.id):R(t,`face`);if(n.type===`wire`){let t=lp(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&&Yf(`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=Cm(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 Zv(e,t,n){let r=t,i=r.type===`wire`?e.makeFaceFromWire(r.id):R(t,`face`);if(n.type===`wire`){let t=lp(e,n,`edge`).map(e=>R(e,`edge`));return L(e.sweepAlongEdges(i,t))}let a=Cm(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 Qv(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 $v(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 ey(e){switch(e){case`right`:return`rightCorner`;case`round`:return`roundCorner`;case`transformed`:return`rmf`;default:return}}function ty(e,t,n){return n?{shape:e,firstShape:t,lastShape:t}:e}function ny(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 ry(e,t){try{if(t.type!==`wire`)return{edgeId:R(t,`edge`)};let n=lp(e,t,`edge`);if(n.length===1){let e=n[0];return e?{edgeId:R(e,`edge`)}:void 0}Yf(`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 iy(e,t,n,r){let i=ry(e,n);if(i)return ny(e,t,i.edgeId,r)}function ay(e,t,n){let r=Cm(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 oy(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?ey(s):void 0;if(c){let r=iy(e,a,n,c);if(r)return ty(r,t,o)}return ty(ay(e,a,n)||Zv(e,t,n),t,o)}function sy(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 Jv(e,t)}function cy(e,t,n,r){let i={type:`extrusionLaw`,profile:t,length:n,endFactor:r,Trim(e,t,n){return i},delete:Tf};return i}function ly(e,t,n,r,i,a,o){if(i!==null){let r=Gv(e,n,Op(e,n,0,0),i);return o?zm(e,t,r):r}return t}function uy(e){return{extrude:(t,n,r)=>Gv(e,t,n,r),revolve:(t,n,r)=>Kv(e,t,n,r),revolveVec:(t,n,r,i)=>qv(e,t,n,r,i),loft:(t,n,r,i)=>Jv(e,t,n,r,i),sweep:(t,n,r)=>Xv(e,t,n,r),simplePipe:(t,n)=>Zv(e,t,n),helicalSweep:(t,n,r,i,a,o)=>Qv(e,t,n,r,i,a,o),sweepWithOptions:(t,n,r,i,a)=>$v(e,t,n,r,i,a),sweepPipeShell:(t,n,r)=>oy(e,t,n,r),loftAdvanced:(t,n)=>sy(e,t,n),buildExtrusionLaw:(t,n,r)=>cy(e,t,n,r),draftPrism:(t,n,r,i,a,o)=>ly(e,t,n,r,i,a,o)}}function dy(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 fy=class{oc;kernelId=`brepkit`;capabilities=r;bk;constructor(e){this.bk=e,this.oc=e;let t=this.bk;Object.assign(this,Zm(t),Vh(t),uy(t),ag(t),vm(t),Jg(t),m_(t),Lv(t),Cp(t),am(t),Fm(t),Bg(t),Wv(t),wv(t),dy(t))}};function py(e){throw Error(`manifold: ${e} is not implemented`)}var my=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 hy(e){return my.has(e)}function B(e,t,n){return{op:e,params:t,inputs:n,replayable:hy(e)&&n.every(e=>e.replayable)}}function gy(e,t){return{manifold:e,node:t}}function V(e){return e.manifold}function H(e){return e.node}function _y(e){if(e&&typeof e==`object`&&`manifold`in e&&`node`in e)return e}var vy=[`occt`,`occt-wasm`];function yy(){for(let e of vy)try{return U(e)}catch{}}function by(e){let t=yy();if(!t)throw Error(`manifold: ${e} requires a registered occt kernel; none is available`);return t}var xy=new WeakMap,Sy=[0,0,0],Cy=[0,0,1];function wy(e){return Math.hypot(e[0],e[1],e[2])}function Ty(e){let t=wy(e);return t===0?[...Cy]:[e[0]/t,e[1]/t,e[2]/t]}function Ey(e){let[t,n,r]=Ty(e);return[0,180/Math.PI*Math.atan2(Math.hypot(t,n),r),180/Math.PI*Math.atan2(n,t)]}function Dy(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(Ey(n))),(t[0]!==0||t[1]!==0||t[2]!==0)&&(r=r.translate(t)),r}return{makeBox:(e,n,r)=>gy(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 gy(t.cube(r,!1).translate(i),B(`makeBoxWithCorners`,{p1:e,p2:n},[]))},makeCylinder:(e,r,i=Sy,a=Cy)=>gy(n(t.cylinder(r,e,e,0,!1),i,a),B(`makeCylinder`,{radius:e,height:r,center:i,direction:a},[])),makeSphere:(e,n=Sy)=>{let r=t.sphere(e,0);return(n[0]!==0||n[1]!==0||n[2]!==0)&&(r=r.translate(n)),gy(r,B(`makeSphere`,{radius:e,center:n},[]))},makeCone:(e,r,i,a=Sy,o=Cy)=>gy(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=Sy,o=Cy)=>{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 gy(n(t.revolve([c],0),a,o),B(`makeTorus`,{majorRadius:r,minorRadius:i,center:a,direction:o},[]))},makeEllipsoid:(e,n,r)=>gy(t.sphere(1,0).scale([e,n,r]),B(`makeEllipsoid`,{aLength:e,bLength:n,cLength:r},[])),makeRectangle:()=>py(`makeRectangle`)}}function Oy(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 Ay(e){let t=H(Oy(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 My(e){let t=e.Manifold;function n(e,t,n){let r=Oy(e),i=Oy(t);return gy(V(r).add(V(i)),B(`makeFuse`,{},[H(r),H(i)]))}function r(e,t,n){let r=Oy(e),i=Oy(t);return gy(V(r).subtract(V(i)),B(`makeCut`,{},[H(r),H(i)]))}function i(e,t,n){let r=Oy(e),i=Oy(t);return gy(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(Oy),[i]=r;if(i===void 0)throw Error(`manifold: fuseAll requires at least one shape`);return r.length===1?i:gy(t.union(r.map(V)),B(`makeFuse`,{},r.map(H)))}function o(e,n,r){let i=Oy(e);if(n.length===0)return i;let a=n.map(Oy);return gy(t.difference([V(i),...a.map(V)]),B(`makeCut`,{},[H(i),...a.map(H)]))}function s(e,t,n){let r=Oy(e),{normal:i,offset:a}=Ay(t),[o]=V(r).splitByPlane(i,a);return gy(o,B(`section`,{normal:i,offset:a},[H(r),H(Oy(t))]))}function c(e,n){let r=Oy(e),[i]=n;if(i===void 0)throw Error(`manifold: split requires at least one tool`);let a=Oy(i),{normal:o,offset:s}=Ay(i),[c,l]=V(r).splitByPlane(o,s);return gy(t.union([c,l]),B(`split`,{normal:o,offset:s},[H(r),H(a)]))}function l(e,t,n){let r=[],i=Oy(e),a=Oy(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 Ny(e){return e}function Py(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Fy(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 Iy(e,t,n){let r=Py();return r[12]=e,r[13]=t,r[14]=n,r}function Ly(e,t,n){let r=e,[i,a,o]=Fy(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=Py();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 Ry(e,t){let n=Py();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 zy(e,t){let[n,r,i]=Fy(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=Py();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 By(e,t){let n=Py();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 Vy(e,t,n,r,i){return gy(e.transform(t),B(n,r,[i]))}function Hy(e,t,n,r){let i=Ny(e);return Vy(V(i),Iy(t,n,r),`translateShape`,{x:t,y:n,z:r},H(i))}function Uy(e,t,n=[0,0,1],r=[0,0,0]){let i=Ny(e);return Vy(V(i),Ly(t,n,r),`rotateShape`,{angle:t,axis:n,center:r},H(i))}function Wy(e,t,n){let r=Ny(e);return Vy(V(r),zy(t,n),`mirrorShape`,{origin:t,normal:n},H(r))}function Gy(e,t,n){let r=Ny(e);return Vy(V(r),Ry(t,n),`scaleShape`,{center:t,factor:n},H(r))}function Ky(e,t){if(!Array.isArray(t)||t.length!==16)throw Error(`manifold: transform expects a 16-element column-major matrix`);let n=Ny(e);return Vy(V(n),t,`transformShape`,{matrix:[...t]},H(n))}function qy(e,t,n,r){let i=Ny(e);return Vy(V(i),By(t,n),`generalTransform`,{linear:t,translation:n,isOrthogonal:r},H(i))}function Jy(e,t,n){let r=Ny(e);return Vy(V(r),By(t,n),`generalTransformNonOrthogonal`,{linear:t,translation:n},H(r))}function Yy(e){let t=Py();for(let n of e)t=tb(n.type===`translate`?Iy(n.x,n.y,n.z):Ly(n.angle*Math.PI/180,n.axis??[0,0,1],n.center??[0,0,0]),t);return{handle:t,dispose:()=>{}}}function Xy(e,t,n,r){let i=[e];for(let a=1;a<r;a++){let r=n*a;i.push(Hy(e,t[0]*r,t[1]*r,t[2]*r))}return i}function Zy(e,t,n,r,i){let a=[e];for(let o=1;o<i;o++)a.push(Uy(e,r*o*Math.PI/180,n,t));return a}function Qy(e,t,n,r,i,a,o,s){let c=Ny(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(Iy(o,s,d))),u.push(H(c))}return gy(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 $y(e){return e.map(e=>{switch(e.type){case`translate`:return Hy(e.shape,e.x,e.y,e.z);case`rotate`:return Uy(e.shape,e.angle*Math.PI/180,e.axis,e.center);case`scale`:return Gy(e.shape,e.center,e.factor);case`mirror`:return Wy(e.shape,e.origin,e.normal)}})}function eb(e){return{composeTransform:Yy,transform:Ky,translate:Hy,rotate:Uy,mirror:Wy,scale:Gy,generalTransform:qy,generalTransformNonOrthogonal:Jy,positionOnCurve:()=>py(`positionOnCurve`),linearPattern:Xy,circularPattern:Zy,gridPattern:(t,n,r,i,a,o,s)=>Qy(e,t,n,r,i,a,o,s),transformBatch:$y}}function tb(e,t){let n=Py();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 nb=2*Math.PI,rb=e=>Math.hypot(e[0],e[1],e[2]),ib=(e,t)=>[e[0]-t[0],e[1]-t[1],e[2]-t[2]];function ab(e){return rb(ib(e.p2,e.p1))}function ob(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 sb(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 cb(e){return e.k===`line`?{first:0,last:ab(e)}:e.k===`conic`?{first:e.a0,last:e.a1}:e.k===`helix`?{first:0,last:nb*e.turns}:{first:0,last:1}}function lb(e,t){if(e.k===`line`){let n=t/(ab(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 ob(e.points,t);if(e.k===`helix`){let n=Math.cos(t),r=Math.sin(t),i=e.pitch*t/nb;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 ub(e,t){let n;if(e.k===`line`)n=ib(e.p2,e.p1);else if(e.k===`bezier`){let r=ob(e.points,Math.max(0,t-1e-4));n=ib(ob(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/nb;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=rb(n)||1;return[n[0]/r,n[1]/r,n[2]/r]}function db(e){if(e.k===`line`)return ab(e);if(e.k===`helix`){let t=nb*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-nb)<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 hb(t=>lb(e,t),e.a0,e.a1,256)}return hb(t=>lb(e,t),0,1,128)}function fb(e){return e.k===`conic`?Math.abs(Math.abs(e.a1-e.a0)-nb)<1e-9:!1}function pb(e){return fb(e)}function mb(e){return e.k===`conic`?nb:0}function hb(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+=rb(ib(s,a)),a=s}return i}function gb(e){return e}function _b(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function vb(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 yb(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function bb(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function xb(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function Sb(e){return Math.hypot(e[0],e[1],e[2])}function Cb(e){let t=Sb(e);return t<1e-12?[0,0,1]:[e[0]/t,e[1]/t,e[2]/t]}function wb(e){return Cb(vb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function Tb(e){let t=Cb(e),n=wb(t);return{xAxis:n,yAxis:Cb(vb(t,n))}}function Eb(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 Db(e){return Eb(e)<0?[...e].reverse():e}function Ob(e){return Eb(e)>0?[...e].reverse():e}function kb(e){return e.node?.params}function Ab(e){let t=gb(e),n=kb(t),r=n?.outline??n?.polygon??n?.points;if(r&&r.length>=3){let e=n?.origin??[0,0,0],t=Db(r.map(e=>[e[0],e[1]])),i=(n?.holes)?.filter(e=>e.length>=3).map(e=>Ob(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}=Tb(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=Mb(i);return{outline:Db(o.length>=3?o:[[-.5,-.5],[.5,-.5],[0,.5]]),origin:[0,0,a],xAxis:[1,0,0],yAxis:[0,1,0]}}function Mb(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 Nb(e){let t=[];for(let n=1;n+1<e;n++)t.push(0,n,n+1);return t}function Pb(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 Fb(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 Ib(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=Rb(t.length,n),a=new e.Mesh({numProp:3,vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)});return Lb(e,new e.Manifold(a))}function Lb(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 Rb(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=Nb(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=Nb(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 zb(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 Cb(yb(e[Math.min(e.length-1,t+1)]??e[t]??[0,0,0],n))},i=r(0),a=Cb(yb(t,xb(i,_b(t,i))));Sb(a)<1e-9&&(a=wb(i)),n.push({origin:e[0]??[0,0,0],xAxis:a,yAxis:Cb(vb(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=yb(s,o),l=_b(c,c),u=a;if(l>1e-18){let e=yb(a,xb(c,2/l*_b(c,a))),n=yb(i,xb(c,2/l*_b(c,i))),o=yb(r(t),n),s=_b(o,o);u=s>1e-18?yb(e,xb(o,2/s*_b(o,e))):e}let d=r(t),f=Cb(yb(u,xb(d,_b(u,d)))),p=Cb(vb(d,f));n.push({origin:s,xAxis:f,yAxis:p,tangent:d}),i=d,a=f}return n}var Bb=24,Vb=24,Hb=null;function Ub(e){let t=Hb?Hb(Math.max(Math.abs(e),1e-6)):Bb;return Math.max(Bb,t)}var Wb=[0,0,0],Gb=1e-6,Kb={delete:()=>{},isEmpty:()=>!1};function qb(e,t){return e[t]??Wb}function Jb(e,t=1){return Math.max(2,Math.ceil(Math.abs(e)/(2*Math.PI)*Ub(t)))}function Yb(e){return Cb(vb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function Xb(e,t,n,r,i,a){let o=Cb(t),s=a?Cb(a):Yb(o),c=Cb(vb(o,s)),l=i-r,u=Jb(l,n),d=[];for(let t=0;t<=u;t++){let i=r+l*t/u;d.push(bb(e,bb(xb(s,n*Math.cos(i)),xb(c,n*Math.sin(i)))))}return d}function Zb(e,t,n){let r=yb(t,e),i=yb(n,e),a=vb(r,i);if(Sb(a)<1e-12)return[e,t,n];let o=Cb(a),s=_b(r,r),c=_b(i,i),l=_b(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=bb(e,bb(xb(r,d),xb(i,f))),m=Sb(yb(e,p)),h=Cb(yb(e,p)),g=Cb(vb(o,h)),_=(e=>Math.atan2(_b(yb(e,p),g),_b(yb(e,p),h)))(n);return _<0&&(_+=2*Math.PI),Xb(p,o,m,0,_,h)}function Qb(e){let t=[];for(let n=0;n<=Vb;n++){let r=n/Vb,i=e.map(e=>[...e]);for(let e=1;e<i.length;e++)for(let t=0;t<i.length-e;t++){let e=qb(i,t),n=qb(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(qb(i,0))}return t}function $b(e){let t=0,n=0,r=0;for(let i=0;i<e.length;i++){let a=qb(e,i),o=qb(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 Sb(i)<1e-12?[0,0,1]:Cb(i)}function ex(e,t){return Sb(yb(e,t))<Gb}function tx(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=qb(n,n.length-1),a=ex(qb(r,0),i),o=ex(qb(r,r.length-1),i);!a&&o&&(r=[...r].reverse());let s=ex(qb(r,0),i);for(let e=+!!s;e<r.length;e++)n.push(qb(r,e))}return n.length>1&&ex(qb(n,0),qb(n,n.length-1))&&n.pop(),n}function nx(e){let t=$b(e),n=qb(e,0),r=e.length>1?Cb(yb(qb(e,1),n)):Yb(t);r=Cb(yb(r,xb(t,_b(r,t)))),Sb(r)<1e-9&&(r=Yb(t));let i=Cb(vb(t,r));return{outline:Db(e.map(e=>{let t=yb(e,n);return[_b(t,r),_b(t,i)]})),origin:n,xAxis:r,yAxis:i}}var rx=12;function ix(e,t){let[n,r]=e.curveParameters(t),i=rx;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 ax(e,t){return tx(e.iterShapes(t,`edge`).map(t=>ix(e,t)))}function ox(e){let t=e.getCircularSegments;typeof t==`function`&&(Hb=e=>t(e));function n(e,t){return gy(Kb,B(`profileEdge`,t?{pts:e,curve:t}:{pts:e},[]))}function r(e,t){let n=Cb(e),r=t?Cb(t):Yb(n);return{x:r,y:Cb(vb(n,r))}}function i(e,t,n){let r=yb(t,e),i=yb(n,e),a=vb(r,i);if(Sb(a)<1e-12)return;let o=Cb(a),s=_b(r,r),c=_b(i,i),l=_b(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=bb(e,bb(xb(r,d),xb(i,f))),m=Sb(yb(e,p)),h=Cb(yb(e,p)),g=Cb(vb(o,h)),_=Math.atan2(_b(yb(n,p),g),_b(yb(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=_y(e);if(t){let e=t.node.params;return e?.ring??e?.pts??[]}let n=yy();return n?ix(n,e):[]}function o(e){let t=[];for(let n of e){let e=_y(n);e&&t.push(H(e))}return t}function s(e){let t=tx(e.map(e=>a(e)));return gy(Kb,B(`profileWire`,{ring:t,...t.length>=3?nx(t):void 0},o(e)))}function c(e,t){let{outline:n,origin:r,xAxis:i,yAxis:a}=nx(e);return gy(Kb,B(`profileFace`,{outline:n,origin:r,xAxis:i,yAxis:a},t?[t]:[]))}function l(e){let t=_y(e);if(t){let e=t.node.params?.ring??[];if(e.length>=3)return c(e,H(t))}let n=yy();return c(n?ax(n,e):[],t?H(t):void 0)}function u(e,t){let n=_y(e),r=n?.node?.params??{},i=r.origin??Wb,a=r.xAxis??[1,0,0],s=r.yAxis??[0,1,0],c=e=>{let t=yb(e,i);return[_b(t,a),_b(t,s)]},l=[];for(let e of t){let t=_y(e),n;if(t)n=t.node.params?.ring??[];else{let t=yy();n=t?ax(t,e):[]}n.length>=3&&l.push(n.map(c))}let u=[...r.holes??[],...l],d=n?[H(n),...o(t)]:o(t);return gy(Kb,B(`profileFace`,{outline:r.outline??[],holes:u,origin:i,xAxis:a,yAxis:s},d))}function d(e,t,n,r,i){let a=Cb(t),o=i?Cb(i):Yb(a),s=Cb(vb(a,o)),c=[],l=Ub(Math.max(n,r));for(let t=0;t<=l;t++){let i=2*Math.PI*t/l;c.push(bb(e,bb(xb(o,n*Math.cos(i)),xb(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(Xb(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(Xb(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(Zb(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(Qb(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=Cb(a),c=Yb(s),l=Cb(vb(s,c)),u=o?xb(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*Bb)),m=[];for(let e=0;e<=p;e++)m.push(lb(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 sx(e){let t=e.Manifold,n=ox(e);function r(e,n){let r=e.map(e=>[e.x,e.y,e.z]);return gy(t.hull(r),B(`hullFromPoints`,{points:r,tolerance:n},[]))}function i(e,n){let r=e.map(e=>V(e));return gy(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 gy(n.length===1?r:t.union(n),B(`makeCompound`,{},e.map(e=>H(e))))}function o(e,t){let n=e[0];return n||py(`sewAndSolidify (no input faces on manifold kernel)`),gy(V(n),B(`sewAndSolidify`,{tolerance:t},e.map(e=>H(e))))}return{makeVertex:(e,t,r)=>n.makeVertex(e,t,r),makeEdge:()=>py(`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:()=>py(`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:()=>py(`solidFromShell`),hull:i,hullFromPoints:r,buildSolidFromFaces:()=>py(`buildSolidFromFaces`),makeNonPlanarFace:()=>py(`makeNonPlanarFace`),addHolesInFace:(e,t)=>n.addHolesInFace(e,t),removeHolesFromFace:()=>py(`removeHolesFromFace`),makeFaceOnSurface:()=>py(`makeFaceOnSurface`),bsplineSurface:(e,t,n)=>by(`bsplineSurface`).bsplineSurface(e,t,n),triangulatedSurface:(e,t,n)=>by(`triangulatedSurface`).triangulatedSurface(e,t,n),buildTriFace:()=>py(`buildTriFace`),sewAndSolidify:o,createPoint3d:()=>py(`createPoint3d`),createDirection3d:()=>py(`createDirection3d`),createVector3d:()=>py(`createVector3d`),createAxis1:()=>py(`createAxis1`),createAxis2:()=>py(`createAxis2`),createAxis3:()=>py(`createAxis3`)}}var cx=Math.PI/180;function lx(e){return e}function ux(e){let t=180/Math.PI*e;return t>360?360:t}function dx(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 fx(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=dx(n.Location()),t=dx(n.Direction());if(e&&t)return{origin:e,direction:t}}}}function px(e){return e.outline.map(e=>[e[0],e[1]])}function mx(e){return{outline:e.outline,origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis}}function hx(e){return{origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis,tangent:Cb(vb(e.xAxis,e.yAxis))}}function gx(e){let t=0;for(let n of e.outline)t=Math.max(t,Math.hypot(n[0],n[1]));return t||1}function _x(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 vx(e,t){let n=lx(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=_x(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 yx(e){return e?.node??B(`spine`,{},[])}function bx(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 xx(e,t,n){let r=Cb(n);return e.outline.map(n=>{let i=yb(bb(e.origin,bb(xb(e.xAxis,n[0]),xb(e.yAxis,n[1]))),t),a=i[0]*r[0]+i[1]*r[1]+i[2]*r[2];return[Sb(yb(i,xb(r,a))),a]})}function Sx(e,t,n){let r=e,i=Cb(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=vb([0,1,0],i);Sb(t)<1e-9&&(t=[1,0,0]),t=Cb(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 Cx(e,t,n,r,i){let a=Cb(t),{xAxis:o,yAxis:s}=Tb(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=bb(xb(o,n*Math.cos(i)),xb(s,n*Math.sin(i)));d.push(bb(e,bb(f,xb(a,u*r))))}return d}function wx(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 Tx(e,t,n,r){let i=Ab(t),a=Cb([n[0],n[1],n[2]]),o=Sb([n[0]*r,n[1]*r,n[2]*r]),s=[px(i),...(i.holes??[]).map(e=>e.map(e=>[e[0],e[1]]))];return gy(bx(Lb(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(lx(t))]))}function Ex(e,t,n,r,i,a,o){let s=Ab(t),c=ux(i),l=xx(s,n,r);return gy(Sx(e.Manifold.revolve([l],0,c),n,r),B(a,o,[H(lx(t))]))}function Dx(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 Ox(e,t,n,r){if(t.length<2)throw Error(`manifold: loft requires at least two profiles`);let i=t.map(Ab),a=i.reduce((e,t)=>Math.max(e,t.outline.length),0),o=i.map(e=>Fb({...e,outline:Pb(e.outline,a)},hx(e)));for(let e=1;e<o.length;e++)o[e]=Dx(o[e]??[],o[e-1]??[]);return gy(Ib(e,o),B(n,{sections:i.map(mx),...r},t.map(e=>H(lx(e)))))}function kx(e,t,n,r,i,a,o){let s=Ab(t),c=zb(n,s.xAxis),l=c.length;return gy(Ib(e,c.map((e,t)=>Fb(s,e,o?o(l>1?t/(l-1):0):1))),B(i,{section:mx(s),path:n.map(e=>[e[0],e[1],e[2]]),...a},[H(lx(t)),r]))}function Ax(e,t,n,r,i,a){if(r===null)return t;let o=Ab(n),s=Cb(vb(o.xAxis,o.yAxis)),c=Math.tan(i*cx),l={origin:bb(o.origin,xb(s,r)),xAxis:o.xAxis,yAxis:o.yAxis,tangent:s},u=1+c*r/gx(o),d=Ib(e,[Fb(o,hx(o),1),Fb(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(lx(n))]);if(a){let e=lx(t);return gy(V(e).add(d),B(`makeFuse`,{},[H(e),f]))}return gy(d,f)}function jx(e){return{revolve:(t,n,r)=>{let i=fx(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 Ex(e,t,a,o,r,`revolve`,{...mx(Ab(t)),axisOrigin:[a[0],a[1],a[2]],axisDirection:[o[0],o[1],o[2]],angleDeg:ux(r)})},revolveVec:(t,n,r,i)=>Ex(e,t,n,r,i,`revolveVec`,{...mx(Ab(t)),center:[n[0],n[1],n[2]],direction:[r[0],r[1],r[2]],angleDeg:ux(i)})}}function Mx(e){return{sweep:(t,n,r)=>{let i={};return r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode),kx(e,t,vx(n,16),yx(n),`sweep`,i)},simplePipe:(t,n)=>kx(e,t,vx(n,16),yx(n),`simplePipe`,{}),sweepWithOptions:(t,n,r,i,a)=>kx(e,t,vx(n,Math.max(2,a||16)),yx(n),`sweepWithOptions`,{contactMode:r,scaleValues:[...i],segments:a},wx(i)),sweepPipeShell:(t,n,r)=>{let i={};r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode);let a=kx(e,t,vx(n,16),yx(n),`sweepPipeShell`,i);return r?.shellMode?{shape:a,firstShape:t,lastShape:t}:a},helicalSweep:(t,n,r,i,a,o)=>kx(e,t,Cx(n,r,i,a,o),yx(t),`helicalSweep`,{axisOrigin:[n[0],n[1],n[2]],axisDirection:[r[0],r[1],r[2]],radius:i,pitch:a,turns:o})}}function Nx(e){return{extrude:(t,n,r)=>Tx(e,t,n,r),...jx(e),loft:(t,n)=>Ox(e,t,`loft`,{ruled:n??!1}),loftAdvanced:(t,n)=>Ox(e,t,`loftAdvanced`,{solid:n?.solid??!0,ruled:n?.ruled??!1,tolerance:n?.tolerance}),...Mx(e),draftPrism:(t,n,r,i,a,o)=>Ax(e,t,n,i,a,o),buildExtrusionLaw:(e,t,n)=>({type:`extrusionLaw`,profile:e,length:t,endFactor:n}),loftBatch:()=>py(`loftBatch`),extrudeBatch:t=>t.map(t=>Tx(e,t.face,t.direction,t.length))}}var Px=16;function Fx(e){return typeof e?.translate==`function`?e.translate([0,0,0]):e}function Ix(e,t,n){if(!(n>0))return Fx(t);let r=zx(e,n);return r===void 0||typeof t?.minkowskiDifference!=`function`||typeof t?.minkowskiSum!=`function`?Fx(t):t.minkowskiDifference(r).minkowskiSum(r)}function Lx(e,t,n){if(n===0)return Fx(t);let r=zx(e,Math.abs(n));return r===void 0?Fx(t):n>0?typeof t?.minkowskiSum==`function`?t.minkowskiSum(r):Fx(t):typeof t?.minkowskiDifference==`function`?t.minkowskiDifference(r):Fx(t)}function Rx(e,t,n,r){if(n===0)return Fx(t);if(r)return Lx(e,t,Math.abs(n));let i=Lx(e,t,-Math.abs(n));return typeof t?.subtract==`function`?t.subtract(i):Fx(t)}function zx(e,t){let n=e?.Manifold;if(typeof n?.sphere==`function`)return n.sphere(t,Px)}function Bx(e){return e}function Vx(e){let t=e;if(t!=null){if(typeof t.index==`number`)return t.index;if(typeof t.id==`number`)return t.id}}function Hx(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 Ux(e){let t=e;if(t?.box!==void 0)return Hx(t.box);let n=(e?.manifold)?.boundingBox?.();return n===void 0?void 0:Hx(n)}function Wx(e){let t=e.length;if(t===0)return{kind:`all`,count:t};let n=[];for(let t of e){let e=Ux(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=Vx(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 Gx(e){return typeof e==`function`&&py(`fillet (per-edge radius callback)`),e}function Kx(e){return typeof e==`number`?e:e[0]}function qx(e){let t=e.match(/[-+]?\d*\.?\d+/);return t?Number(t[0]):0}function Jx(e,t,n,r,i){let a=Bx(n),o=Gx(i),s=Wx(r);return gy(Ix(e,V(a),Kx(o)),B(t,{radius:o,selection:s},[H(a)]))}function Yx(e,t,n,r,i){let a=Bx(t),o=Wx(n);return gy(Ix(e,V(a),r),B(`chamferDistAngle`,{distance:r,angleDeg:i,selection:o},[H(a)]))}function Xx(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]),Lb(e,V(t).subtract(d))}catch{return}}function Zx(e,t,n,r,i){let a=Bx(t),o=Wx(n);return gy(Xx(e,a,r)??Rx(e,V(a),r,!1),B(`shell`,i===void 0?{thickness:r,selection:o}:{thickness:r,selection:o,tolerance:i},[H(a)]))}function Qx(e,t,n){let r=Bx(t);return gy(Rx(e,V(r),n,!0),B(`thicken`,{thickness:n},[H(r)]))}function $x(e,t,n,r){let i=Bx(t);return gy(Lx(e,V(i),n),B(`offset`,r===void 0?{distance:n}:{distance:n,tolerance:r},[H(i)]))}function eS(e,t,n){let r=Bx(t);return gy(Ix(e,V(r),qx(n)),B(`filletVariable`,{spec:n},[H(r)]))}function tS(e,t,n,r,i){typeof i==`function`&&py(`draft (per-face angle callback)`);let a=Bx(e),o=Wx(t);return gy(Fx(V(a)),B(`draft`,{pullDirection:n,neutralPlane:r,angleDeg:i,selection:o},[H(a)]))}function nS(e,t){let n=Bx(e),r=Wx(t);return gy(Fx(V(n)),B(`defeature`,{selection:r},[H(n)]))}function rS(e){let t=Bx(e),n=V(t);return gy(typeof n?.simplify==`function`?n.simplify():Fx(n),B(`simplify`,{},[H(t)]))}function iS(e){let t=Bx(e),n=V(t);return gy(typeof n?.mirror==`function`?n.mirror([1,0,0]):Fx(n),B(`reverseShape`,{},[H(t)]))}function aS(e,t){let n=Bx(t.shape),r=Wx(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 gy(Ix(e,V(n),a),B(`fillet`,{radii:i,selection:r},[H(n)]))}function oS(e){return{fillet:(t,n,r)=>Jx(e,`fillet`,t,n,r),chamfer:(t,n,r)=>Jx(e,`chamfer`,t,n,r),chamferDistAngle:(t,n,r,i)=>Yx(e,t,n,r,i),shell:(t,n,r,i)=>Zx(e,t,n,r,i),thicken:(t,n)=>Qx(e,t,n),offset:(t,n,r)=>$x(e,t,n,r),filletVariable:(t,n)=>eS(e,t,n),draft:(e,t,n,r,i)=>tS(e,t,n,r,i),defeature:(e,t)=>nS(e,t),offsetWire2D:()=>py(`offsetWire2D`),simplify:e=>rS(e),reverseShape:e=>iS(e),shellBatch:t=>t.map(t=>Zx(e,t.shape,t.faces,t.thickness,t.tolerance)),filletBatch:t=>t.map(t=>aS(e,t))}}function sS(e){return V(e).getMesh()}function cS(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 lS(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 uS(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 dS(e,t){let n=sS(e),r=cS(n),i=new Uint32Array(n.triVerts);return{vertices:r,normals:t.skipNormals?new Float32Array:lS(r,i),triangles:i,uvs:t.includeUVs?new Float32Array(r.length/3*2):new Float32Array,faceGroups:uS(n)}}function fS(e,t,n){let r=sS(e),i=cS(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 pS(e){return!0}function mS(e){return{mesh:(e,t)=>dS(e,t),meshEdges:(e,t,n)=>fS(e,t,n),hasTriangulation:e=>pS(e),meshShape:(e,t,n)=>{}}}function hS(e,t=[0,0,0]){return Array.isArray(e)&&e.length>=3?[Number(e[0]),Number(e[1]),Number(e[2])]:[...t]}function gS(e,t=0){return typeof e==`number`?e:t}function _S(e,t=``){return typeof e==`string`?e:t}function vS(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function yS(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function bS(e,t,n,r){return vS(t,vS(yS(n,e[0]),yS(r,e[1])))}function xS(e,t){let n=t.outline??[];if(n.length<3)throw Error(`manifold replay: profile outline needs at least three points`);let r=hS(t.origin),i=hS(t.xAxis,[1,0,0]),a=hS(t.yAxis,[0,1,0]),o=n.map(e=>bS(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 SS(e,t){return xS(e,t)}function CS(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 wS(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 TS(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=>CS(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=wS(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(CS(e,t)))}function ES(e){let t=e.selection;return t===void 0?void 0:t}function DS(e){let t=e[0];if(t===void 0)throw Error(`manifold replay: op requires an input shape`);return t}function OS(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=xS(n,r),a=hS(r[e]),o=hS(r[t],[0,0,1]),s=gS(r.angleDeg,360);return n.revolve(i,OS(n,a,o),Math.PI/180*s)}}var AS={makeBox:(e,t)=>e.makeBox(gS(t.width),gS(t.height),gS(t.depth)),makeBoxWithCorners:(e,t)=>e.makeBoxFromCorners(hS(t.p1),hS(t.p2)),makeCylinder:(e,t)=>e.makeCylinder(gS(t.radius),gS(t.height),hS(t.center),hS(t.direction,[0,0,1])),makeSphere:(e,t)=>e.makeSphere(gS(t.radius),hS(t.center)),makeCone:(e,t)=>e.makeCone(gS(t.radius1),gS(t.radius2),gS(t.height),hS(t.center),hS(t.direction,[0,0,1])),makeTorus:(e,t)=>e.makeTorus(gS(t.majorRadius),gS(t.minorRadius),hS(t.center),hS(t.direction,[0,0,1])),makeEllipsoid:(e,t)=>e.makeEllipsoid(gS(t.aLength),gS(t.bLength),gS(t.cLength)),makeFuse:(e,t,n)=>{if(n.length<2)return DS(n);let r=DS(n);for(let t of n.slice(1))r=e.fuse(r,t);return r},makeCut:(e,t,n)=>{let r=DS(n);return e.cutAll(r,n.slice(1))},makeCommon:(e,t,n)=>{let r=DS(n);for(let t of n.slice(1))r=e.intersect(r,t);return r},translateShape:(e,t,n)=>e.translate(DS(n),gS(t.x),gS(t.y),gS(t.z)),rotateShape:(e,t,n)=>e.rotate(DS(n),gS(t.angle),hS(t.axis,[0,0,1]),hS(t.center)),scaleShape:(e,t,n)=>e.scale(DS(n),hS(t.center),gS(t.factor,1)),mirrorShape:(e,t,n)=>e.mirror(DS(n),hS(t.origin),hS(t.normal,[1,0,0])),transformShape:(e,t,n)=>e.transform(DS(n),t.matrix),generalTransform:(e,t,n)=>e.generalTransform(DS(n),t.linear,hS(t.translation),!!t.isOrthogonal),generalTransformNonOrthogonal:(e,t,n)=>e.generalTransformNonOrthogonal(DS(n),t.linear,hS(t.translation)),gridPattern:(e,t,n)=>{if(typeof e.gridPattern!=`function`)throw Error(`manifold replay: target kernel lacks gridPattern`);return e.gridPattern(DS(n),hS(t.directionX),hS(t.directionY),gS(t.spacingX),gS(t.spacingY),gS(t.countX,1),gS(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)=>xS(e,t),extrude:(e,t)=>{let n=xS(e,t);return e.extrude(n,hS(t.direction,[0,0,1]),gS(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(MS(e,t),NS(e,t)),simplePipe:(e,t)=>e.simplePipe(MS(e,t),NS(e,t)),sweepWithOptions:(e,t)=>e.sweepWithOptions(MS(e,t),NS(e,t),_S(t.contactMode),t.scaleValues??[],gS(t.segments,0)),sweepPipeShell:(e,t)=>{let n=e.sweepPipeShell(MS(e,t),NS(e,t));return PS(n)?n.shape:n},helicalSweep:(e,t)=>e.helicalSweep(MS(e,t),hS(t.axisOrigin),hS(t.axisDirection,[0,0,1]),gS(t.radius),gS(t.pitch),gS(t.turns,1)),draftPrism:(e,t)=>{let n=xS(e,t);return e.draftPrism(n,n,n,gS(t.height),gS(t.angleDeg),!!t.fuse)},fillet:(e,t,n)=>{let r=DS(n),i=TS(e,r,ES(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=DS(n),i=TS(e,r,ES(t),`edge`);return e.chamfer(r,i,t.radius)},chamferDistAngle:(e,t,n)=>{let r=DS(n),i=TS(e,r,ES(t),`edge`);return e.chamferDistAngle(r,i,gS(t.distance),gS(t.angleDeg))},shell:(e,t,n)=>{let r=DS(n),i=TS(e,r,ES(t),`face`);return typeof t.tolerance==`number`?e.shell(r,i,gS(t.thickness),t.tolerance):e.shell(r,i,gS(t.thickness))},thicken:(e,t,n)=>e.thicken(DS(n),gS(t.thickness)),offset:(e,t,n)=>typeof t.tolerance==`number`?e.offset(DS(n),gS(t.distance),t.tolerance):e.offset(DS(n),gS(t.distance)),filletVariable:(e,t,n)=>e.filletVariable(DS(n),_S(t.spec)),draft:(e,t,n)=>{let r=DS(n),i=TS(e,r,ES(t),`face`);return e.draft(r,i,hS(t.pullDirection,[0,0,1]),hS(t.neutralPlane),gS(t.angleDeg))},defeature:(e,t,n)=>{let r=DS(n),i=TS(e,r,ES(t),`face`);return e.defeature(r,i)},simplify:(e,t,n)=>e.simplify(DS(n)),reverseShape:(e,t,n)=>e.reverseShape(DS(n)),hull:(e,t,n)=>e.hull([...n],gS(t.tolerance)),hullFromPoints:(e,t)=>{let n=t.points??[];return e.hullFromPoints(n.map(e=>({x:e[0],y:e[1],z:e[2]})),gS(t.tolerance))},sewAndSolidify:(e,t,n)=>e.sewAndSolidify([...n],gS(t.tolerance))};function jS(e,t){let n=SS(e,t);return e.iterShapes(n,`wire`)[0]??n}function MS(e,t){let n=t.section;return n?SS(e,n):xS(e,t)}function NS(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 PS(e){return typeof e==`object`&&!!e&&`shape`in e&&`firstShape`in e&&`lastShape`in e}function FS(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=AS[e.op];if(!a)throw Error(`manifold replay: no replay handler for op '${e.op}'`);let o=e.inputs.map(e=>FS(e,t,n,r)),s=a(t,e.params,o);return n.set(e,s),r.add(s),s}function IS(e,t,n=new Map){let r=new Set,i=FS(e,t,n,r);for(let e of r)e!==i&&t.dispose(e);return i}function LS(e){return V(e)}function RS(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 zS(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 BS(e){let t=e;if(t&&t.__manifoldSub&&t.box)return t.box;let n=RS(e);return n?zS(n):LS(e).boundingBox()}function VS(e){return LS(e)?.getMesh?.()}function HS(e,t){let n=t*e.numProp;return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function US(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function WS(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 GS(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function KS(e){let t=BS(e);return[(t.min[0]+t.max[0])/2,(t.min[1]+t.max[1])/2,(t.min[2]+t.max[2])/2]}function qS(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=HS(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 JS(e){let t=VS(e);if(!t)return KS(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]=US(t,e),s=HS(t,n),c=HS(t,a),l=HS(t,o),u=GS(s,WS(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?qS(t):[i[0]/r,i[1]/r,i[2]/r]}function YS(e){let t=VS(e);if(!t)return KS(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]=US(t,e),s=HS(t,n),c=HS(t,a),l=HS(t,o),u=WS([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?qS(t):[i[0]/r,i[1]/r,i[2]/r]}function XS(e){return LS(e).volume()}function ZS(e){let t=e;return t&&t.__nativeFace&&typeof t.area==`number`?t.area:LS(e).surfaceArea()}function QS(e){let t=e;if(t&&t.__manifoldSub&&t.box)return{min:[...t.box.min],max:[...t.box.max]};let n=BS(e);return{min:[...n.min],max:[...n.max]}}function $S(e){return JS(e)}function eC(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 tC(e,t){return eC(BS(e),BS(t))}function nC(e,t=!1){return{volume:XS(e),area:ZS(e),length:0,centerOfMass:$S(e),boundingBox:QS(e)}}function rC(e,t,n){let r=yy();if(!r)throw Error(`manifold: surfaceCurvature requires a registered occt kernel; none is available`);let i=_y(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=xy.get(i.node)??(()=>{let e=IS(i.node,r);return xy.set(i.node,e),e})();return r.surfaceCurvature(a,t,n)}function iC(e){return{volume:e=>XS(e),area:e=>ZS(e),length:e=>{let t=e;if(t&&t.__nativeEdge&&typeof t.length==`number`)return t.length;let n=_y(e)?.node;return n?.op===`profileEdge`&&n.params?.curve?db(n.params.curve):py(`length`)},centerOfMass:e=>$S(e),linearCenterOfMass:e=>$S(e),boundingBox:e=>QS(e),distance:(e,t)=>tC(e,t),surfaceCurvature:(e,t,n)=>rC(e,t,n),surfaceCenterOfMass:e=>YS(e),measureBulk:(e,t)=>nC(e,t),createDistanceQuery:e=>({distanceTo:t=>tC(e,t),dispose:()=>{}})}}function aC(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 oC(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:aC(t,r[0]??0),normal:S,center:C,area:f,min:[p,m,h],max:[g,_,v],tris:y})}return l}function sC(e){return!!e&&typeof e==`object`&&e.__nativeFace===!0}var cC=Math.cos(45*Math.PI/180),lC=(e,t)=>e<t?e*1e9+t:t*1e9+e,uC=(e,t)=>e<t?`${e},${t}`:`${t},${e}`;function dC(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=lC(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]>cC)continue;let s=uC(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 fC(t))d.push(pC(e,n,s));return d}function fC(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 pC(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:mC(i)?`LINE`:`CIRCLE`}}function mC(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 hC(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 gC(e){return!!e&&typeof e==`object`&&e.__nativeVertex===!0}function _C(e){return!!e&&typeof e==`object`&&e.__nativeEdge===!0}function vC(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 yC(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 bC(e,t){let n=_y(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=by(t),i=xy.get(n.node);if(i!==void 0)return{occt:r,brep:i};let a=IS(n.node,r);return xy.set(n.node,a),{occt:r,brep:a}}function xC(e){if(_y(e))return`solid`;let{occt:t,brep:n}=bC(e,`shapeType`);return t.shapeType(n)}function SC(e,t){let n=_y(e),r=_y(t);return!n||!r?!1:n.manifold===r.manifold}function CC(e,t){if(!_y(e))return 0;let{occt:n,brep:r}=bC(e,`hashCode`);return n.hashCode(r,t)}function wC(e){let t=_y(e);return t?!V(t):!0}function TC(e,t){let n=_y(e);if(!n)return[];if(t===`solid`)return[e];if(t===`vertex`){let e=V(n);return e&&typeof e.getMesh==`function`?hC(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 oC(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 dC(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=yy();if(!r)return[];let i=xy.get(n.node)??(()=>{let e=IS(n.node,r);return xy.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 EC(e){let{occt:t,brep:n}=bC(e,`edgeToFaceMap`);return t.edgeToFaceMap(n)}function DC(e,t){let{occt:n,brep:r}=bC(e,`adjacentFaces`);return n.adjacentFaces(r,t)}function OC(e){return{iterShapes:TC,iterShapeList:(e,t)=>{by(`iterShapeList`).iterShapeList(e,t)},shapeType:xC,isSame:SC,isEqual:SC,downcast:e=>e,hashCode:CC,isNull:wC,shapeOrientation:e=>`forward`,edgeToFaceMap:EC,sharedEdges:(e,t)=>by(`sharedEdges`).sharedEdges(e,t),adjacentFaces:DC,sew:()=>{throw Error(`manifold: sew is unsupported on the mesh kernel; use a B-rep kernel`)}}}function kC(e){return V(e).getMesh()}function AC(e){return e.numProp&&e.numProp>=3?e.numProp:3}function jC(e){return Math.floor(e.vertProperties.length/AC(e))}function MC(e,t){let n=t*AC(e);return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function NC(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function PC(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 FC(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]=NC(n,e),s=MC(n,r),c=MC(n,a),l=MC(n,o),u=PC(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]=NC(n,e),o=MC(n,t),s=MC(n,r),c=MC(n,a),l=PC(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 IC(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=MC(t,e);i.push(`v ${n[0]} ${n[1]} ${n[2]}`)}for(let e=0;e<r;e++){let[n,r,a]=NC(t,e);i.push(`f ${n+1} ${r+1} ${a+1}`)}return new TextEncoder().encode(i.join(`
11
+ `)).buffer}function LC(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=MC(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]=NC(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 RC(e,t,n=`importMesh`){let r=new e.Mesh({numProp:3,vertProperties:t.vertProperties,triVerts:t.triVerts});return gy(new e.Manifold(r),B(n,{},[]))}function zC(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 RC(e,{vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)})}function BC(e,t){let n=new Uint8Array(t),r=new TextDecoder().decode(n.subarray(0,Math.min(n.length,80))).trimStart().toLowerCase().startsWith(`solid`)&&UC(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=HC(i);return RC(e,{vertProperties:Float32Array.from(a.vertices),triVerts:Uint32Array.from(a.indices)})}var VC=1e6;function HC(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*VC)},${Math.round(o*VC)},${Math.round(s*VC)}`,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 UC(e){return e.length<84?!0:84+new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(80,!0)*50!==e.length}var WC=1e-6;function GC(e,t){let n=H(t);if(n.replayable)return IS(n,e)}function KC(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]=NC(n,t),s=e.buildTriFace(MC(n,r),MC(n,a),MC(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,WC)}function qC(e){let t=by(`B-rep export`),n=GC(t,e);return n===void 0?(console.warn(`manifold: exact B-rep unavailable (non-replayable op-graph); exporting faceted approximation`),{occt:t,brep:KC(t,e)}):{occt:t,brep:n}}function JC(e,t,n,r){let i=t.mesh(n,{tolerance:.01,angularTolerance:.5});return RC(e,{vertProperties:Float32Array.from(i.vertices),triVerts:Uint32Array.from(i.triangles)},r)}var YC=1179937895,XC=2,ZC=1313821514,QC=5130562,$C=5126,ew=5125,tw=5123,nw=5121,rw=34962,iw=34963,aw=4;function ow(e){return e+3&-4}function sw(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=ow(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:aw}]}],accessors:[{bufferView:0,componentType:$C,count:r,type:`VEC3`,min:[o,s,c],max:[l,u,d]},{bufferView:1,componentType:ew,count:i,type:`SCALAR`}],bufferViews:[{buffer:0,byteOffset:0,byteLength:p,target:rw},{buffer:0,byteOffset:m,byteLength:f.byteLength,target:iw}],buffers:[{byteLength:h}]},_=new TextEncoder().encode(JSON.stringify(g)),v=ow(_.length),y=ow(h),b=20+v+8+y,x=new ArrayBuffer(b),S=new DataView(x),C=new Uint8Array(x);S.setUint32(0,YC,!0),S.setUint32(4,XC,!0),S.setUint32(8,b,!0);let w=12;S.setUint32(w,v,!0),S.setUint32(w+4,ZC,!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,QC,!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 cw(e,t){let n=new DataView(t);if(n.getUint32(0,!0)!==YC)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===ZC?i=JSON.parse(new TextDecoder().decode(s)):r===QC&&(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===ew?4:e.componentType===tw?2:+(e.componentType===nw);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 RC(e,{vertProperties:p,triVerts:m},`importGLB`)}function lw(e){return{exportSTL:(e,t)=>FC(e,t),exportOBJ:e=>IC(e),exportPLY:e=>LC(e),importSTL:t=>BC(e,typeof t==`string`?new TextEncoder().encode(t).buffer:t),importOBJ:t=>zC(e,t),exportSTEP:e=>by(`exportSTEP`).exportSTEP(e.map(e=>qC(e).brep)),exportIGES:e=>by(`exportIGES`).exportIGES(e.map(e=>qC(e).brep)),toBREP:e=>{let{occt:t,brep:n}=qC(e);return t.toBREP(n)},exportSTEPAssembly:(e,t)=>{let n=by(`exportSTEPAssembly`),r=e.map(e=>{let t={shape:qC(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=by(`createXCAFDocument`),n=e.map(e=>{let t={shape:qC(e.shape).brep,name:e.name};return e.color===void 0?t:{...t,color:e.color}});return t.createXCAFDocument(n)},writeXCAFToSTEP:(e,t)=>by(`writeXCAFToSTEP`).writeXCAFToSTEP(e,t),exportSTEPConfigured:(e,t)=>{let n=by(`exportSTEPConfigured`),r=e.map(e=>{let t={shape:qC(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=by(`importSTEP`);return n.importSTEP(t).map(t=>JC(e,n,t,`importSTEP`))},importIGES:t=>{let n=by(`importIGES`);return n.importIGES(t).map(t=>JC(e,n,t,`importIGES`))},fromBREP:t=>{let n=by(`fromBREP`);return JC(e,n,n.fromBREP(t),`fromBREP`)},exportGLB:e=>sw(e),importGLB:t=>cw(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 uw(e){return V(e).getMesh()}function dw(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 fw(e,t){let n=e;if(n&&n.__manifoldSub&&n.occt){let e=yy();if(!e)throw Error(`manifold: sub-shape geometry query requires a registered occt kernel`);return t(n.occt,e)}let r=_y(e);if(!r)throw Error(`manifold: exact geometry query requires a manifold shape handle`);let i=yy();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=xy.get(r.node);return a===void 0&&(a=IS(r.node,i),xy.set(r.node,a)),t(a,i)}function pw(e){let t=_y(e);if(!t)return;let n=t.node;return n.op===`profileEdge`?n.params?.curve:void 0}function mw(e){return{curveType:e=>{let t=pw(e);return t?sb(t):_C(e)?e.curveType:fw(e,(e,t)=>t.curveType(e))},curveParameters:e=>{let t=pw(e);if(t){let e=cb(t);return[e.first,e.last]}return _C(e)?[0,e.length]:fw(e,(e,t)=>t.curveParameters(e))},curvePointAtParam:(e,t)=>{let n=pw(e);return n?lb(n,t):_C(e)?vC(e,t):fw(e,(e,n)=>n.curvePointAtParam(e,t))},curveTangent:(e,t)=>{let n=pw(e);return n?{point:lb(n,t),tangent:ub(n,t)}:_C(e)?{point:vC(e,t),tangent:yC(e,t)}:fw(e,(e,n)=>n.curveTangent(e,t))},curveIsClosed:e=>{let t=pw(e);return t?fb(t):fw(e,(e,t)=>t.curveIsClosed(e))},curveIsPeriodic:e=>{let t=pw(e);return t?pb(t):fw(e,(e,t)=>t.curveIsPeriodic(e))},curvePeriod:e=>{let t=pw(e);return t?mb(t):fw(e,(e,t)=>t.curvePeriod(e))},interpolatePoints:(e,t)=>by(`interpolatePoints`).interpolatePoints(e,t),approximatePoints:(e,t)=>by(`approximatePoints`).approximatePoints(e,t),curveDegreeElevate:(e,t)=>fw(e,(e,n)=>n.curveDegreeElevate(e,t)),curveKnotInsert:(e,t,n)=>fw(e,(e,r)=>r.curveKnotInsert(e,t,n)),curveKnotRemove:(e,t,n)=>fw(e,(e,r)=>r.curveKnotRemove(e,t,n)),curveSplit:(e,t)=>fw(e,(e,n)=>n.curveSplit(e,t)),createCurveAdaptor:e=>fw(e,(e,t)=>t.createCurveAdaptor(e)),getBezierPenultimatePole:e=>fw(e,(e,t)=>t.getBezierPenultimatePole(e)),getNurbsCurveData:e=>fw(e,(e,t)=>t.getNurbsCurveData?.(e)??null),vertexPosition:e=>gC(e)?e.point:_y(e)?dw(uw(e),0):fw(e,(e,t)=>t.vertexPosition(e)),surfaceType:e=>{if(sC(e))return`plane`;let t=_y(e);return t&&t.node.op===`profileFace`?`plane`:fw(e,(e,t)=>t.surfaceType(e))},uvBounds:e=>sC(e)?{uMin:0,uMax:1,vMin:0,vMax:1}:fw(e,(e,t)=>t.uvBounds(e)),outerWire:e=>fw(e,(e,t)=>t.outerWire(e)),surfaceNormal:(e,t,n)=>sC(e)?e.normal:fw(e,(e,r)=>r.surfaceNormal(e,t,n)),pointOnSurface:(e,t,n)=>fw(e,(e,r)=>r.pointOnSurface(e,t,n)),uvFromPoint:(e,t)=>fw(e,(e,n)=>n.uvFromPoint(e,t)),projectPointOnFace:(e,t)=>fw(e,(e,n)=>n.projectPointOnFace(e,t)),classifyPointOnFace:(e,t,n,r)=>fw(e,(e,i)=>i.classifyPointOnFace(e,t,n,r)),classifyPointRobust:(e,t,n)=>fw(e,(e,r)=>r.classifyPointRobust(e,t,n)),classifyPointWinding:(e,t,n)=>fw(e,(e,r)=>r.classifyPointWinding(e,t,n)),approximateSurfaceLspia:(e,t,n,r,i,a,o,s,c)=>by(`approximateSurfaceLspia`).approximateSurfaceLspia(e,t,n,r,i,a,o,s,c),untrimFace:(e,t,n)=>fw(e,(e,r)=>r.untrimFace(e,t,n)),getSurfaceCylinderData:e=>fw(e,(e,t)=>t.getSurfaceCylinderData(e)),getSurfaceAxis:e=>fw(e,(e,t)=>t.getSurfaceAxis(e)),reverseSurfaceU:e=>by(`reverseSurfaceU`).reverseSurfaceU(e),detectSmallFeatures:(e,t,n)=>fw(e,(e,r)=>r.detectSmallFeatures(e,t,n)),recognizeFeatures:(e,t)=>fw(e,(e,n)=>n.recognizeFeatures(e,t)),projectEdges:(e,t,n,r)=>fw(e,(e,i)=>i.projectEdges(e,t,n,r)),getNurbsSurfaceData:e=>fw(e,(e,t)=>t.getNurbsSurfaceData?.(e)??null)}}var hw={hasErrors:!1,hasWarnings:!1,messages:[]};function gw(){return{modified:new Map,generated:new Map,deleted:new Set}}function _w(e){return{shape:e,evolution:gw()}}function vw(e){return{shape:e,evolution:gw(),diagnostics:hw}}function yw(e){let t=eb(e),n=My(e),r=oS(e);return{translateWithHistory:(e,n,r,i)=>_w(t.translate(e,n,r,i)),rotateWithHistory:(e,n,r,i,a,o)=>_w(t.rotate(e,n,a,o)),mirrorWithHistory:(e,n,r)=>_w(t.mirror(e,n,r)),scaleWithHistory:(e,n,r)=>_w(t.scale(e,n,r)),generalTransformWithHistory:(e,n,r,i)=>_w(t.generalTransform(e,n,r,i)),fuseWithHistory:(e,t,r,i,a)=>vw(n.fuse(e,t,a)),cutWithHistory:(e,t,r,i,a)=>vw(n.cut(e,t,a)),intersectWithHistory:(e,t,r,i,a)=>vw(n.intersect(e,t,a)),filletWithHistory:(e,t,n)=>_w(r.fillet(e,t,n)),chamferWithHistory:(e,t,n)=>_w(r.chamfer(e,t,n)),shellWithHistory:(e,t,n,i,a,o)=>_w(r.shell(e,t,n,o)),thickenWithHistory:(e,t)=>_w(r.thicken(e,t)),offsetWithHistory:(e,t,n,i,a)=>_w(r.offset(e,t,a)),draftWithHistory:(e,t,n,i,a)=>_w(r.draft(e,t,n,i,a)),applyComposedTransformWithHistory:(e,n)=>_w(t.transform(e,n))}}function bw(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 xw(e){return{isValid:e=>bw(e),isValidStrict:e=>bw(e),healSolid:e=>bw(e)?e:null,healFace:e=>e,healWire:e=>e,mergeCoincidentVertices:()=>0,removeDegenerateEdges:()=>0,fixFaceOrientations:()=>0,fixShape:e=>e,fixSelfIntersection:e=>e}}var Sw=.004;function Cw(e){return!!e&&typeof e==`object`&&e.__nativeC2d===!0}function ww(e,t){return{__nativeC2d:!0,k:`line`,p1:e,p2:t}}function Tw(e,t,n,r,i){return{__nativeC2d:!0,k:`conic`,c:e,u:t,v:n,a0:r,a1:i}}function Ew(e,[t,n]){return[e.a*t+e.b*n+e.tx,e.c*t+e.d*n+e.ty]}function Dw(e,[t,n]){return[e.a*t+e.b*n,e.c*t+e.d*n]}function Ow(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`?ww(Ew(t,e.p1),Ew(t,e.p2)):e.k===`bezier`?{__nativeC2d:!0,k:`bezier`,pts:e.pts.map(e=>Ew(t,e))}:Tw(Ew(t,e.c),Dw(t,e.u),Dw(t,e.v),e.a0,e.a1)}function Aw(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 Mw(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 Aw(r,t)}function Nw(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<=Sw)return Math.max(2,Math.ceil(t/(2*Math.PI)*8));let a=2*Math.acos(Math.max(-1,1-Sw/i));return Math.max(2,Math.ceil(t/a))}function Pw(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(Aw(e.pts,n/24));return t}let t=e.a1-e.a0,n=Nw(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 Fw(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 ww(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-_),Tw(f,[p,0],[0,p],h,_)}function Iw(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(!Cw(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(Pw(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)=>ww([e,t],[n,r]),makeCircle2d:(e,t,n,r=!0)=>Tw([e,t],[n,0],r?[0,n]:[0,-n],0,2*Math.PI),makeArc2dThreePoints:(e,t,n,r,i,a)=>Fw([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 ww([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),Tw([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 Tw([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 Tw([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`?Aw(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:Aw(n.pts,t),tangent:Mw(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 Tw(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 ww([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=Ow(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(Cw(t))r=Pw(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;return gy(n,B(`profileEdge`,{pts:Pw(i(e)).map(([e,n])=>[t[0]+l*e+f*n,t[1]+u*e+p*n,t[2]+d*e+m*n])},[]))},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)=>Cw(n)?t(n,...i):r(e,n,...i)))}return s}var Lw=`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 Rw(e){let t=yy();if(!t)throw Error(`manifold: ${e} unsupported on manifold kernel; no B-rep kernel registered`);return t}function zw(e){let t={};for(let e of Lw)t[e]=(...t)=>Rw(e)[e](...t);let n=Iw(e,()=>yy());return Object.assign(t,n),t}function Bw(e){return{sketchNew:()=>py(`sketchNew`),sketchAddPoint:()=>py(`sketchAddPoint`),sketchAddArc:()=>py(`sketchAddArc`),sketchAddConstraint:()=>py(`sketchAddConstraint`),sketchSolve:()=>py(`sketchSolve`),sketchDof:()=>py(`sketchDof`)}}function Vw(e){return{projectEdges:()=>py(`projectEdges`)}}function Hw(e){return{dispose(e){let t=_y(e);if(t){let e=xy.get(t.node);e!==void 0&&(yy()?.dispose(e),xy.delete(t.node))}(e?.manifold)?.delete?.()},executeBatch:()=>py(`executeBatch`),checkpoint:()=>py(`checkpoint`),checkpointCount:()=>0,restoreCheckpoint:()=>py(`restoreCheckpoint`),discardCheckpoint:()=>py(`discardCheckpoint`)}}var Uw={draft:30,standard:10,fine:3},Ww=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?.(Uw[e])}constructor(e){this.oc=e,Object.assign(this,Dy(e),My(e),eb(e),sx(e),Nx(e),oS(e),mS(e),iC(e),OC(e),lw(e),mw(e),yw(e),xw(e),zw(e),Bw(e),Vw(e),Hw(e))}};function Gw(e){return`projectEdges`in e}function Kw(e){return`sketchNew`in e&&`sketchDof`in e}var qw=new Map,Jw=null,Yw=null;function Xw(e){Zw(`manifold`,new Ww(e))}function Zw(e,t){qw.set(e,t),Jw||=e,e===Jw&&(Yw=t)}function U(e){if(!e&&Yw)return Yw;let t=e??Jw;if(!t)throw Error(`brepjs kernel not initialized. Call initFromOC() or registerKernel() before using the library.`);let n=qw.get(t);if(!n)throw Error(`brepjs: kernel '${t}' is not registered.`);return n}function Qw(e){let t=U(e);if(!fo(t))throw Error(`brepjs: current kernel does not support 2D operations.`);return t}function $w(){return Jw}function eT(e,t){let n=Jw;Jw=e,Yw=qw.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{Jw=n,Yw=n?qw.get(n)??null:null}}function tT(e){return U(e).capabilities}function nT(e,t){let n=co();try{uo(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{uo(n),U().setQuality?.(n)}}var rT=new Map;function iT(e,t){rT.set(e,t)}function aT(e){return rT.get(e)}function oT(e,t){let n=rT.get(e);if(!n)throw Error(`withTier: no tier registered for "${e}". Call registerKernelTier("${e}", { kernel, quality }) first.`);return eT(n.kernel,()=>nT(n.quality,t))}function sT(e){Oo(),Hc(),xo(),vc(),yc(),Pc(),Fc();let t=new wf(e);Zw(`occt`,t),Jw=`occt`,Yw=t}function cT(){let e=U(),t=e.makeBox(1,1,1);try{e.dispose(t)}catch{}}async function lT(){if(Jw)return Jw;try{let{OcctKernel:e}=await import(`occt-wasm`),t=await e.init();return Zw(`occt-wasm`,Sa.fromKernel(t)),`occt-wasm`}catch{}try{return sT(await(await import(`brepjs-opencascade`)).default()),`occt`}catch{}try{let e=await import(`brepkit-wasm`);return typeof e.default==`function`&&await e.default(),Zw(`brepkit`,new fy(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 uT(){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 dT=Symbol;dT.dispose??=Symbol.for(`Symbol.dispose`),dT.asyncDispose??=Symbol.for(`Symbol.asyncDispose`);var fT=globalThis;fT.FinalizationRegistry||=(console.warn(`brepjs: FinalizationRegistry unavailable — garbage collection will not work`),class{register(e,t,n){}unregister(e){return!1}});var pT={liveHandles:0,peakHandles:0,gcCollected:0,scopeEnters:0,scopeExits:0};function mT(){return{...pT}}function hT(){pT.liveHandles=0,pT.peakHandles=0,pT.gcCollected=0,pT.scopeEnters=0,pT.scopeExits=0}function gT(){pT.liveHandles++,pT.liveHandles>pT.peakHandles&&(pT.peakHandles=pT.liveHandles)}function _T(){pT.liveHandles--}function vT(){pT.gcCollected++,pT.liveHandles--}var yT=new FinalizationRegistry(e=>{vT();try{e.delete()}catch{}});function bT(e){let t=!1,n=()=>{if(!t){t=!0,_T(),yT.unregister(r);try{e.delete()}catch{}}},r={get wrapped(){if(t)throw Error(`Shape handle has been disposed`);return e},get disposed(){return t},[Symbol.dispose](){n()},delete(){n()}};return gT(),yT.register(r,e,r),r}function xT(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,_T(),yT.unregister(n);try{e.delete()}catch{}}}};return gT(),yT.register(n,e,n),n}var ST=class{handles=[];constructor(){pT.scopeEnters++}register(e){return this.handles.push(()=>{try{e.delete()}catch{}}),e}track(e){return this.handles.push(()=>{try{e[Symbol.dispose]()}catch{}}),e}[Symbol.dispose](){pT.scopeExits++;for(let e=this.handles.length-1;e>=0;e--)this.handles[e]?.();this.handles.length=0}};function CT(e){try{var t=uT();return e(t.u(new ST))}catch(e){t.e=e}finally{t.d()}}function wT(e,t){yT.register(e,t,t)}function TT(e){yT.unregister(e)}function ET(e){try{var t=uT();return e(t.u(new ST))}catch(e){t.e=e}finally{t.d()}}async function DT(e){try{var t=uT();return await e(t.u(new ST))}catch(e){t.e=e}finally{t.d()}}function OT(e){return!e.disposed}function kT(e){return e.__is2D!==!0}function AT(e){return e.__is2D===!0}function jT(e){if(!kT(e))throw Error(`Expected 3D shape, got 2D`);return e}function MT(e){if(!AT(e))throw Error(`Expected 2D shape, got 3D`);return e}var NT=new WeakMap;function PT(e,t){NT.set(e,t)}function FT(e,t){let n=NT.get(t);if(n!==void 0)return n;let r=e.shapeType(t);return NT.set(t,r),r}function IT(e){return FT(U(),e.wrapped)}function LT(e){return U().curveIsClosed(e.wrapped)}function RT(e){return U().isValid(e.wrapped)}function zT(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 BT(e){return U().isValid(e.wrapped)}function VT(e){return LT(e)?O(e):k(`Wire is not closed: start and end points do not coincide`)}function HT(e){return RT(e)?O(e):k(`Face orientation is inconsistent or face is invalid`)}function UT(e){return zT(e)?O(e):k(`Shell is not manifold: has free edges or is invalid`)}function WT(e){return BT(e)?O(e):k(`Solid failed BRepCheck validation`)}function GT(e){return U().surfaceType(e.wrapped)===`plane`}function KT(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 qT(e){return GT(e)?O(e):k(`Face is not planar: underlying surface is not a geometric plane`)}function JT(e){return KT(e)?O(e):k(`Wire is not planar: edges do not lie in a common plane`)}function YT(e,t){return t===`2D`&&(e.__is2D=!0),e}function XT(e,t){return YT(bT(e),t)}function ZT(e,t){return YT(bT(e),t)}function QT(e,t){return YT(bT(e),t)}function $T(e,t){return YT(bT(e),t)}function eE(e){return YT(bT(e))}function tE(e){return YT(bT(e))}function nE(e){return YT(bT(e))}function rE(e,t){return YT(bT(e),t)}function iE(e){return IT(e)===`vertex`}function aE(e){return IT(e)===`edge`}function oE(e){return IT(e)===`wire`}function sE(e){return IT(e)===`face`}function cE(e){return IT(e)===`shell`}function lE(e){return IT(e)===`solid`}function uE(e){return IT(e)===`compound`}function dE(e){let t=IT(e);return t===`shell`||t===`solid`||t===`compsolid`?!0:t===`compound`?kT(e):!1}function fE(e){let t=IT(e);return t===`edge`||t===`wire`}function W(e,t){let n=U(),r=FT(n,e),i=n.downcast(e,r);return r===`vertex`?XT(i,t):r===`edge`?ZT(i,t):r===`wire`?QT(i,t):r===`face`?$T(i,t):r===`shell`?eE(i):r===`solid`?tE(i):r===`compsolid`?nE(i):rE(i,t)}function pE(e){return W(e)}function mE(e,t,n){PT(e,t);let r=U().downcast(e,t);return t===`vertex`?XT(r,n):t===`edge`?ZT(r,n):t===`wire`?QT(r,n):t===`face`?$T(r,n):t===`shell`?eE(r):t===`solid`?tE(r):t===`compsolid`?nE(r):rE(r,n)}function hE(e,t,n,r,i){let a={kind:e,code:t,message:n,cause:r};return i?{...a,suggestion:i}:a}var gE={KERNEL_OPERATION:(e,t,n,r)=>hE(`KERNEL_OPERATION`,e,t,n,r),VALIDATION:(e,t,n,r)=>hE(`VALIDATION`,e,t,n,r),TYPE_CAST:(e,t,n,r)=>hE(`TYPE_CAST`,e,t,n,r),SKETCHER_STATE:(e,t,n,r)=>hE(`SKETCHER_STATE`,e,t,n,r),MODULE_INIT:(e,t,n,r)=>hE(`MODULE_INIT`,e,t,n,r),COMPUTATION:(e,t,n,r)=>hE(`COMPUTATION`,e,t,n,r),IO:(e,t,n,r)=>hE(`IO`,e,t,n,r),QUERY:(e,t,n,r)=>hE(`QUERY`,e,t,n,r),UNSUPPORTED:(e,t,n,r)=>hE(`UNSUPPORTED`,e,t,n,r)};function _E(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`?Za(i):i,o=Xa(t);return k(gE[r](t,`${n}: ${a}`,e,o))}}function vE(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`?Za(i):i,o=Xa(t);return k(gE[r](t,`${n}: ${a}`,e,o))}}function yE(e,t,n,r=`KERNEL_OPERATION`){try{var i=uT();let a=i.u(new ST);return _E(()=>e(a),t,n,r)}catch(e){i.e=e}finally{i.d()}}function bE(e,t){let n=U().iterShapes(e,t),r=Array(n.length);for(let e=0;e<n.length;e++)r[e]=mE(n[e],t);return r}var xE=new WeakMap;function SE(e){let t=xE.get(e.wrapped);return t||(t={},xE.set(e.wrapped,t)),t}function CE(e){return xE.get(e.wrapped)}function wE(e){xE.delete(e.wrapped)}function TE(e){let t=SE(e);if(t.edges)return t.edges;let n=bE(e.wrapped,`edge`);return t.edges=n,n}function EE(e){let t=SE(e);if(t.faces)return t.faces;let n=bE(e.wrapped,`face`);return t.faces=n,n}function DE(e){let t=SE(e);if(t.wires)return t.wires;let n=bE(e.wrapped,`wire`);return t.wires=n,n}function OE(e){let t=SE(e);if(t.vertices)return t.vertices;let n=bE(e.wrapped,`vertex`);return t.vertices=n,n}function kE(e){let t=SE(e);if(t.solids)return t.solids;let n=bE(e.wrapped,`solid`);return t.solids=n,n}function AE(e){let t=SE(e);if(t.shells)return t.shells;let n=bE(e.wrapped,`shell`);return t.shells=n,n}function jE(e){let t=SE(e);if(t.compSolids)return t.compSolids;let n=bE(e.wrapped,`compsolid`);return t.compSolids=n,n}function*ME(e){for(let t of U().iterShapes(e.wrapped,`edge`))yield mE(t,`edge`)}function*NE(e){for(let t of U().iterShapes(e.wrapped,`face`))yield mE(t,`face`)}function*PE(e){for(let t of U().iterShapes(e.wrapped,`wire`))yield mE(t,`wire`)}function*FE(e){for(let t of U().iterShapes(e.wrapped,`vertex`))yield mE(t,`vertex`)}function*IE(e){for(let t of U().iterShapes(e.wrapped,`solid`))yield mE(t,`solid`)}function*LE(e){for(let t of U().iterShapes(e.wrapped,`shell`))yield mE(t,`shell`)}function*RE(e){for(let t of U().iterShapes(e.wrapped,`compsolid`))yield mE(t,`compsolid`)}function zE(e){let t=SE(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 BE(e){return FT(U(),e.wrapped)}function VE(e){let t=SE(e);if(t.surfaceType!==void 0)return t.surfaceType;let n=U().surfaceType(e.wrapped);return t.surfaceType=n,n}function HE(e){let t=SE(e);if(t.isValid!==void 0)return t.isValid;let n=U().isValid(e.wrapped);return t.isValid=n,n}function UE(e){return{kind:BE(e),faceCount:EE(e).length,edgeCount:TE(e).length,wireCount:DE(e).length,vertexCount:OE(e).length,valid:HE(e),bounds:zE(e)}}function WE(e){return U().vertexPosition(e.wrapped)}var G=2147483647,GE=Math.PI/180,KE=180/Math.PI;function qE(e){return e.length===2?[e[0],e[1],0]:[e[0],e[1],e[2]]}function JE(e){return[e[0],e[1]]}var YE={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function XE(e){if(typeof e==`string`){let t=YE[e];if(!t)throw Error(`Unknown direction: ${e}`);return t}return e}function ZE(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function QE(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function $E(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function eD(e){return[-e[0],-e[1],-e[2]]}function tD(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function nD(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 rD(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2])}function iD(e){return e[0]*e[0]+e[1]*e[1]+e[2]*e[2]}function aD(e,t){return rD(QE(e,t))}function oD(e){let t=rD(e);return t<1e-10?[0,0,0]:[e[0]/t,e[1]/t,e[2]/t]}function sD(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 cD(e,t=1e-10){return iD(e)<t*t}function lD(e,t){let n=tD(e,t),r=rD(e),i=rD(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 uD(e,t,n){let r=QE(e,t),i=iD(n);return i<1e-20?e:QE(e,$E(n,tD(r,n)/i))}function dD(e,t,n){let r=oD(t),i=Math.cos(n),a=Math.sin(n),o=tD(e,r),s=nD(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 fD=e=>Math.round(e*1e3)/1e3;function pD(e){return`x: ${fD(e[0])}, y: ${fD(e[1])}, z: ${fD(e[2])}`}function mD(e,t=null,n=[0,0,1]){let r=oD(n);if(cD(r))throw Error(`Plane normal must be non-zero`);let i;if(t)i=oD(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?oD([l,u,d]):[1,0,0]}if(cD(i))throw Error(`Plane xDir must be non-zero`);let a=oD(nD(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 gD(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`?$E(n.normal,t):qE(t),O(mD(r,n.xDir,n.normal))}function _D(e,t){return typeof e==`string`?gD(e,t):O(e)}function vD(e,t){return e&&typeof e!=`string`?{...e}:j(_D(e??`XY`,t))}function yD(e,t){let[n,r]=t;return ZE(ZE(e.origin,$E(e.xDir,n)),$E(e.yDir,r))}function bD(e,t){return{...e,origin:ZE(e.origin,t)}}function xD(e,t,n=[1,0,0]){let r=t*GE,i=dD(e.zDir,n,r),a=dD(e.xDir,n,r),o=oD(nD(i,a));return{origin:e.origin,xDir:a,yDir:o,zDir:i}}var SD={compound:0,solidCompound:1,solid:2,shell:3,face:4,wire:5,edge:6,vertex:7,shape:8},CD=e=>SD[e],wD={vertex:`vertex`,edge:`edge`,wire:`wire`,face:`face`,shell:`shell`,solid:`solid`,solidCompound:`compsolid`,compound:`compound`,shape:`compound`},TD=function*(e,t){let n=wD[t];if(n){let t=U().iterShapes(e,n);for(let e of t)yield e}},ED=e=>U().isNull(e)?k($a(`NULL_SHAPE`,`This shape has no type, it is null`)):O(e.ShapeType());function DD(e){if(U().isNull(e))return k($a(`NULL_SHAPE`,`This shape has no type, it is null`));try{return O(U().downcast(e))}catch{return k($a(`NO_WRAPPER`,`Could not find a wrapper for this shape type`))}}function OD(e){return U().isNull(e)?k($a(`NULL_SHAPE`,`Cannot cast a null shape`)):O(W(e))}function kD(e){return U().shapeType(e.wrapped)===`compsolid`}function AD(e){return OD(U().fromBREP(e))}var jD={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 MD(e){return O(jD[VE(e)])}function ND(e){return j(MD(e))}function PD(e){return U().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function FD(e){return W(U().reverseShape(e.wrapped))}function ID(e){return U().uvBounds(e.wrapped)}function LD(e,t,n){let r=ID(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 RD(e,t){let n=qE(t);return U().uvFromPoint(e.wrapped,n)||[0,0]}function zD(e,t){let n=qE(t);try{let t=n,r=U().uvFromPoint(e.wrapped,t);if(!r)return k($a(`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($a(`PROJECTION_FAILED`,`Point projection failed: ${e instanceof Error?e.message:String(e)}`))}}function BD(e,t){let n,r;if(t)[n,r]=RD(e,t);else{let t=ID(e);n=.5*(t.uMin+t.uMax),r=.5*(t.vMin+t.vMax)}return U().surfaceNormal(e.wrapped,n,r)}function VD(e){return U().surfaceCenterOfMass(e.wrapped)}function HD(e){return U().getSurfaceAxis(e.wrapped)}function UD(e,t,n=1e-6){let[r,i]=RD(e,t);return U().classifyPointOnFace(e.wrapped,r,i,n)}function WD(e){return W(U().outerWire(e.wrapped))}function GD(e){return W(U().removeHolesFromFace(e.wrapped))}function KD(e){let t=WD(e);return Array.from(TD(e.wrapped,`wire`)).map(e=>W(j(DD(e)))).filter(e=>!U().isSame(e.wrapped,t.wrapped))}function qD(e,t){let n=SE(e),r=new Map;for(let n of EE(e))r.set(U().hashCode(n.wrapped,G),t);n.faceOrigins=r}function JD(e){return CE(e)?.faceOrigins}function YD(e,t,n){let r=new Map;for(let e of t){let t=JD(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,0)}if(i.size>0){let e=SE(n);e.faceOrigins=i}}function XD(e,t,n){let r=-1/0,i;for(let a of n){let n=e[0]*a.normal[0]+e[1]*a.normal[1]+e[2]*a.normal[2];if(n<.707)continue;let o=t[0]-a.centroid[0],s=t[1]-a.centroid[1],c=t[2]-a.centroid[2],l=o*o+s*s+c*c;if(l>100)continue;let u=n-l/100;u>r&&(r=u,i=a.origin)}return i}function ZD(e,t){let n=new Map;for(let t of e){let e=JD(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=EE(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=JD(n);if(e)for(let i of EE(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);t.push({origin:a,normal:n,centroid:o})}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=XD(r.surfaceNormal(e.wrapped,.5*(a.uMin+a.uMax),.5*(a.vMin+a.vMax)),r.surfaceCenterOfMass(e.wrapped),t);o!==void 0&&i.set(n,o)}catch{}}}if(i.size>0){let e=SE(t);e.faceOrigins=i}}var QD=new WeakMap,$D=new WeakMap;function eO(e){return QD.has(e.wrapped)}function tO(e){let t=QD.get(e.wrapped);return t||(t=new Map,QD.set(e.wrapped,t)),t}function nO(e){let t=$D.get(e.wrapped);return t||(t=new Map,$D.set(e.wrapped,t)),t}function rO(e,t,n){let r=Array.isArray(t)?t:EE(e).filter(t),i=tO(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 iO(e,t){let n=QD.get(e.wrapped);if(!n)return[];let r=n.get(t);if(!r||r.size===0)return[];let i=[];for(let t of EE(e)){let e=U().hashCode(t.wrapped,G);r.has(e)&&i.push(t)}return i}function aO(e){let t=new Map,n=QD.get(e.wrapped);if(!n)return t;let r=EE(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 oO(e,t,n){return nO(e).set(t,n),e}function sO(e,t){return $D.get(e.wrapped)?.get(t)}function cO(e,t,n){let r=e.get(t)??new Set;r.add(n),e.set(t,r)}function lO(e,t,n){let r=tO(n);for(let i of t){let t=QD.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)cO(r,t,e)}let o=$D.get(i.wrapped);if(o){let e=nO(n);for(let[t,n]of o)e.has(t)||e.set(t,n)}}}var uO=new WeakMap,dO=new WeakMap;function fO(e){return uO.has(e.wrapped)||dO.has(e.wrapped)}function pO(e){let t=dO.get(e.wrapped);return t||(t=new Map,dO.set(e.wrapped,t)),t}function mO(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 hO(e,t){return uO.set(e.wrapped,mO(t)),e}function gO(e,t,n){let r=mO(n),i=pO(e);for(let e of t)i.set(U().hashCode(e.wrapped,G),r);return e}function _O(e){return uO.get(e.wrapped)}function vO(e,t){let n=dO.get(e.wrapped);if(n)return n.get(U().hashCode(t.wrapped,G))}function yO(e,t,n){for(let e of t){let t=uO.get(e.wrapped);if(t){uO.set(n.wrapped,t);break}}let r=pO(n);for(let n of t){let t=dO.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 bO(e){if(!e.some(e=>JD(e)!==void 0||eO(e)||fO(e)))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))}return n}function xO(e,t,n){YD(e,t,n),lO(e,t,n),yO(e,t,n)}function SO(e,t){ZD(e,t)}function CO(e,t){let n=bO([e]),{shape:r,evolution:i}=U().translateWithHistory(e.wrapped,t[0],t[1],t[2],n,G),a=W(r);return xO(i,[e],a),a}function wO(e,t,n=[0,0,0],r=[0,0,1]){let i=bO([e]),{shape:a,evolution:o}=U().rotateWithHistory(e.wrapped,t*GE,i,G,r,n),s=W(a);return xO(o,[e],s),s}function TO(e,t=[0,1,0],n=[0,0,0]){let r=bO([e]),{shape:i,evolution:a}=U().mirrorWithHistory(e.wrapped,n,t,r,G),o=W(i);return xO(a,[e],o),o}function EO(e,t,n=[0,0,0]){let r=bO([e]),{shape:i,evolution:a}=U().scaleWithHistory(e.wrapped,n,t,r,G),o=W(i);return xO(a,[e],o),o}function DO(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(EO(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 OO(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 kO(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 AO(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 jO(e,t){let n=OO(t);if(!n.ok)return n;let{linear:r,translation:i}=n.value,a=kO(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(AO(r)){let t=bO([e]),{shape:n,evolution:a}=U().generalTransformWithHistory(e.wrapped,r,i,!0,t,G),o=W(n);return xO(a,[e],o),O(o)}let o=W(U().generalTransformNonOrthogonal(e.wrapped,r,i));return SO([e],o),O(o)}function MO(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 NO(e,t){let n=bO([e]),{shape:r,evolution:i}=U().applyComposedTransformWithHistory(e.wrapped,t.trsf,n,G),a=W(r);return xO(i,[e],a),a}function PO(e){return _E(()=>U().downcast(e.wrapped),N.CLONE_FAILED,`Failed to clone shape`)}function FO(e){return vE(()=>U().toBREP(e.wrapped),N.TO_BREP_FAILED,`Failed to serialize shape to BREP`)}function IO(e){return U().hashCode(e.wrapped,G)}function LO(e){return U().isNull(e.wrapped)}function RO(e,t){return U().isSame(e.wrapped,t.wrapped)}function zO(e,t){return U().isEqual(e.wrapped,t.wrapped)}function BO(e){return _E(()=>U().simplify(e.wrapped),N.SIMPLIFY_FAILED,`Failed to simplify shape`)}function VO(e){return U().curveType(e.wrapped)}function HO(e){let[t]=U().curveParameters(e.wrapped);return U().curvePointAtParam(e.wrapped,t)}function UO(e){let[,t]=U().curveParameters(e.wrapped);return U().curvePointAtParam(e.wrapped,t)}function WO(e,t=.5){let[n,r]=U().curveParameters(e.wrapped),i=n+(r-n)*t;return U().curvePointAtParam(e.wrapped,i)}function GO(e,t=.5){let[n,r]=U().curveParameters(e.wrapped),i=n+(r-n)*t;return U().curveTangent(e.wrapped,i).tangent}function KO(e){return U().length(e.wrapped)}function qO(e){return U().curveIsClosed(e.wrapped)}function JO(e){return U().curveIsPeriodic(e.wrapped)}function YO(e){return U().curvePeriod(e.wrapped)}function XO(e){return U().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function ZO(e){return W(U().reverseShape(e.wrapped))}function QO(e,t={}){if(e.length<2)return k($a(`INTERPOLATE_MIN_POINTS`,`Interpolation requires at least 2 points`));try{let n=W(U().interpolatePoints(e,t));return aE(n)?O(n):k($a(`INTERPOLATE_NOT_EDGE`,`Interpolation did not produce an edge`))}catch(e){return k($a(`INTERPOLATE_FAILED`,`Interpolation failed: ${e instanceof Error?e.message:String(e)}`))}}function $O(e,t={}){if(e.length<2)return k($a(`APPROXIMATE_MIN_POINTS`,`Approximation requires at least 2 points`));try{let n=W(U().approximatePoints(e,t));return aE(n)?O(n):k($a(`APPROXIMATE_NOT_EDGE`,`Approximation did not produce an edge`))}catch(e){return k($a(`APPROXIMATE_FAILED`,`Approximation failed: ${e instanceof Error?e.message:String(e)}`))}}function ek(e,t,n=`arc`){let r=W(U().offsetWire2D(e.wrapped,t,{arc:`arc`,intersection:`intersection`,tangent:`tangent`,chamfer:`intersection`}[n]));return oE(r)?O(r):(r[Symbol.dispose](),k($a(`OFFSET_NOT_WIRE`,`Offset did not produce a Wire`)))}function tk(e,t,n,r=!1){return`${e}:${t}:${n}:${r}`}function nk(e,t){return`edge:${e}:${t}`}var rk=new WeakMap,ik=new WeakMap;function ak(e,t){let n=rk.get(e);if(n)return n.get(t)}function ok(e,t,n){let r=rk.get(e);r||(r=new Map,rk.set(e,r)),r.set(t,n)}function sk(e,t){let n=ik.get(e);if(n)return n.get(t)}function ck(e,t,n){let r=ik.get(e);r||(r=new Map,ik.set(e,r)),r.set(t,n)}function lk(){rk=new WeakMap,ik=new WeakMap}function uk(){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 dk(e,t={}){let n=lo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,skipNormals:a=!1,includeUVs:o=!1,cache:s=!0,signal:c}=t;c?.throwIfAborted();let l=tk(r,i,a,o);if(s){let t=ak(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=JD(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&&ok(e.wrapped,l,f),f}function fk(e,t={}){let n=lo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,cache:a=!0}=t,o=nk(r,i);if(a){let t=sk(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&&ck(e.wrapped,o,c),c}function pk(e,t){return e instanceof Error&&e.message.startsWith(`${t} export failed`)?no(`${t}_EXPORT_FAILED`,`Failed to write ${t} file`,e):e instanceof WebAssembly.RuntimeError?no(`${t}_EXPORT_CRASHED`,`${t} export crashed the kernel (${e.message}); the shape likely contains geometry the ${t} writer cannot serialize`,e):no(`${t}_FILE_READ_ERROR`,`Failed to read exported ${t} file`,e)}function mk(e){let t;try{t=kE(e)}catch{return``}if(t.length<=1)return``;let n=[];return t.forEach((e,t)=>{try{zE(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 hk(e,t){try{return zE(e),null}catch(n){if(n instanceof TypeError)throw n;return no(`${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${mk(e)}`,n)}}function gk(e){let t=hk(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(pk(e,`STEP`))}}function _k(e,t={}){let n=lo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,binary:a=!1}=t,o=hk(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(pk(e,`STL`))}}function vk(e){try{let t=U().exportIGES([e.wrapped]);return O(new Blob([t],{type:`application/iges`}))}catch(e){return k(no(`IGES_EXPORT_FAILED`,`Failed to write IGES file`,e))}}function yk(e,t){let n=t?.coarseTolerance??.5,r=t?.fineTolerance??.05,i=t?.angularTolerance??.5;return{coarse:dk(e,{tolerance:n,angularTolerance:i}),fine:dk(e,{tolerance:r,angularTolerance:i*.2})}}function bk(e,t,n){if(t<0||t>=e.length)throw Error(n??`Index ${t} out of bounds (length ${e.length})`);return e[t]}function xk(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[0]}function Sk(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[e.length-1]}function Ck(e){return Array.from(Array(e).keys())}function wk(e){return Ck(Math.min(...e.map(e=>e.length))).map(t=>e.map(e=>e[t]))}function Tk(e,t){return ZT(U().makeLineEdge([...e],[...t]))}function Ek(e,t=[0,0,0],n=[0,0,1]){return ZT(U().makeCircleEdge([...t],[...n],e))}function Dk(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(ZT(U().makeEllipseEdge([...n],[...r],e,t,i?[...i]:void 0)))}function Ok(e,t,n,r=[0,0,0],i=[0,0,1],a=!1){return QT(U().makeHelixWire(e,t,n,[...r],[...i],a))}function kk(e,t,n){return ZT(U().makeArcEdge([...e],[...t],[...n]))}function Ak(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(ZT(U().makeEllipseArc([...i],[...a],e,t,n,r,o?[...o]:void 0)))}function jk(e,{tolerance:t=.001,smoothing:n=null,degMax:r=6,degMin:i=1}={}){try{let a=e.map(e=>[...e]);return O(ZT(U().approximatePoints(a,{tolerance:t,degMin:i,degMax:r,smoothing:n})))}catch{return k(P(`BSPLINE_FAILED`,`B-spline approximation failed`))}}function Mk(e,{periodic:t=!1,tolerance:n=1e-7}={}){try{let r=e.map(e=>[...e]);return O(ZT(U().interpolatePoints(r,{periodic:t,tolerance:n})))}catch{return k(P(`BSPLINE_INTERP_FAILED`,`B-spline interpolation failed`))}}function Nk(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(ZT(U().makeBezierEdge(t)))}function Pk(e,t,n){return ZT(U().makeTangentArc([...e],[...t],[...n]))}function Fk(e){try{return O(QT(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 Ik(e,t){try{let n=U().makeFace(e.wrapped,!0);if(t&&t.length>0){let e=Bk($T(n),t);return GT(e)?O(e):k(F(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}let r=$T(n);return GT(r)?O(r):k(F(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}catch{return k(P(`FACE_BUILD_FAILED`,`Failed to build the face. Your wire might be non planar.`))}}function Lk(e){return Ik(WD(e))}function Rk(e,t){return $T(U().makeFaceOnSurface(e.wrapped,t.wrapped))}function zk(e){try{return Da(OD(U().makeNonPlanarFace(e.wrapped)),e=>sE(e)?O(e):k(P(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`)))}catch{return k(P(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`))}}function Bk(e,t){return $T(U().addHolesInFace(e.wrapped,t.map(e=>e.wrapped)))}function Vk(e){return e.length<3?k(F(`POLYGON_MIN_POINTS`,`You need at least 3 points to make a polygon`)):Da(Fk(wk([e,[...e.slice(1),e[0]]]).map(([e,t])=>Tk(e,t))),e=>Ik(e))}function Hk(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Uk(e,t,n,r,i){let a=W(e);if(!dE(a)){let o=e.ShapeType(),s=[`COMPOUND`,`COMPSOLID`,`SOLID`,`SHELL`,`FACE`,`WIRE`,`EDGE`,`VERTEX`,`SHAPE`][o]??`UNKNOWN(${o})`;return a[Symbol.dispose](),k($a(t,`${n}. Got ${s} instead.`,void 0,i?{diagnostics:i}:void 0,r))}return O(a)}function Wk(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=Hk(e,`fuse: first operand`);if(A(c))return c;let l=Hk(t,`fuse: second operand`);if(A(l))return l;if(!s)return Uk(U().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);let u=bO([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),Uk(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=Uk(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&&xO(f,[e,t],m.value),m}function Gk(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=Hk(e,`cut: base`);if(A(c))return c;let l=Hk(t,`cut: tool`);if(A(l))return l;if(!s)return Uk(U().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);let u=bO([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),Uk(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=Uk(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&&xO(f,[e,t],m.value),m}function Kk(e,t,{simplify:n=!1,signal:r,fuzzyValue:i,unsafe:a,trackEvolution:o=!0}={}){if(r?.aborted)throw r.reason;let s=Hk(e,`intersect: first operand`);if(A(s))return s;let c=Hk(t,`intersect: second operand`);if(A(c))return c;if(!o)return Uk(U().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);let l=bO([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),Uk(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=Uk(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&&xO(d,[e,t],p.value),p}function qk(e,t,n,r,i,a,o,s){if(o?.aborted)throw o.reason;let c=n-t;if(c===1)return O(bk(e,t));if(c===2)return Wk(bk(e,t),bk(e,t+1),{optimisation:r,simplify:!1,trackEvolution:a,fuzzyValue:s,unsafe:!0,...o?{signal:o}:{}});let l=t+Math.ceil(c/2),u=qk(e,t,l,r,i,a,o,s);if(A(u))return u;let d=qk(e,l,n,r,i,a,o,s);return A(d)?d:Wk(u.value,d.value,{optimisation:r,simplify:i,trackEvolution:a,fuzzyValue:s,unsafe:!0,...o?{signal:o}:{}})}function Jk(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(xk(e));for(let t=0;t<e.length;t++){let n=Hk(bk(e,t),`fuseAll: shape at index ${t}`);if(A(n))return n}if(r===`native`){let o=Uk(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&&SO(e,o.value),o}return qk(e,0,e.length,t,n,s,i,a)}function Yk(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=Hk(e,`cutAll: base`);if(A(c))return c;for(let e=0;e<t.length;e++){let n=Hk(bk(t,e),`cutAll: tool at index ${e}`);if(A(n))return n}let l=[e,...t],u=Uk(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&&SO(l,u.value),u}function Xk(e,t){let n=U(),r=$E(e.xDir,t),i=$E(e.yDir,t),a=$E(e.xDir,-t),o=$E(e.yDir,-t),s=e.origin,c=[...ZE(ZE(s,a),o)],l=[...ZE(ZE(s,r),o)],u=[...ZE(ZE(s,r),i)],d=[...ZE(ZE(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)e.delete();return p.delete(),m}function Zk(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=Xk(typeof t==`string`?j(_D(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{i.delete()}}function Qk(e){let t=U(),n=new Map,r=new Map;for(let i of e){let e=OE(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 $k(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 eA(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=$k(i,t,n);for(;o;)e===0?r.push(o.edge):r.unshift(o.edge),i=o.nextTip,o=$k(i,t,n)}return r}function tA(e){let t=U(),n=Qk(e),r=new Set,i=[];for(let a of e){if(r.has(a))continue;let e=eA(a,n,r);try{let n=t.makeWire(e.map(e=>e.wrapped));i.push(W(n))}catch{}}return i}function nA(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 rA(e,t,n={}){let r=Zk(e,t,n);if(!r.ok)return r;let i=DE(r.value);if(i.length===0){let e=TE(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(...tA(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=nA(i),o=bk(i,a),s=i.filter((e,t)=>t!==a);return Ik(o,s.length>0?s:void 0)}function iA(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(bk(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 aA(e,t,n={}){let r=[];for(let i of t){let t=Zk(e,i,n);if(A(t))return t;r.push(t.value)}return O(r)}function oA(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 sA(e,t,n);if(o===null)return k(P(`BOOLEAN_PIPELINE_FAILED`,`Boolean pipeline returned null shape`));let s=W(o);return dE(s)?O(s):k($a(`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 sA(e,t,n){let r=e,i={...n?.optimisation?{optimisation:n.optimisation}:{},unsafe:!0};for(let e of t){let t=e.op===`fuse`?Wk(r,e.tool,i):e.op===`cut`?Gk(r,e.tool,i):Kk(r,e.tool,i);if(A(t))return t;r=j(t)}return O(r)}function cA(e){return j(OD(j(DD(U().sew(e.map(e=>e.wrapped))))))}function lA(e,t=!1){let n=cA(e);return!t&&!cE(n)?k($a(`WELD_NOT_SHELL`,`Could not make a shell from faces and shells`)):O(n)}function uA(e,t,n=[0,0,0],r=[0,0,1]){return tE(U().makeCylinder(e,t,[...n],[...r]))}function dA(e){return tE(U().makeSphere(e))}function fA(e,t,n,r=[0,0,0],i=[0,0,1]){return tE(U().makeCone(e,t,n,[...r],[...i]))}function pA(e,t,n=[0,0,0],r=[0,0,1]){return tE(U().makeTorus(e,t,[...n],[...r]))}function mA(e,t,n){return tE(U().makeEllipsoid(e,t,n))}function hA(e){return XT(U().makeVertex(e[0],e[1],e[2]))}function gA(e,t,n=1e-6){return Da(DD(U().offset(e.wrapped,t,n)),e=>Da(OD(e),e=>dE(e)?O(e):k($a(`OFFSET_NOT_3D`,`Could not offset to a 3d shape`))))}function _A(e){return rE(U().makeCompound(e.map(e=>e.wrapped)))}function vA(e){let t=cA(e);return Da(OD(U().solidFromShell(t.wrapped)),e=>lE(e)?O(e):k($a(`SOLID_BUILD_FAILED`,`Could not make a solid of faces and shells`)))}function yA(e){return{position:e.vertices,normal:e.normals,index:e.triangles}}function bA(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 xA(e){return{position:e.lines}}function SA(e,t){return{coarse:yA(e.coarse),fine:yA(e.fine),coarseDistance:t?.coarse??50,fineDistance:t?.fine??0}}function CA(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=DD(i);if(A(a))return a;let o=W(a.value);return dE(o)?O(o):(o[Symbol.dispose](),k($a(`CHAMFER_ANGLE_NOT_3D`,`chamferDistAngle did not produce a 3D shape`)))}function wA(e,t){return e.map(e=>mE(e,t))}function TA(e,t){let n=U(),r=n.iterShapes(e,t),i=[],a=new Map;for(let e of r){let t=n.hashCode(e,G),r=a.get(t);r?r.some(t=>n.isSame(t,e))||(r.push(e),i.push(e)):(a.set(t,[e]),i.push(e))}return wA(i,t)}function EA(e){let t=SE(e);if(t.edgeToFaces)return t.edgeToFaces;let n=U(),r=new Map,i=n.iterShapes(e.wrapped,`face`);for(let e of i){let t=n.iterShapes(e,`edge`);for(let i of t){let t=n.hashCode(i,G),a=r.get(t);a||(a=[],r.set(t,a)),a.some(t=>n.isSame(t.edge,i)&&n.isSame(t.face,e))||a.push({edge:i,face:e})}}return t.edgeToFaces=r,r}function DA(e,t){let n=U(),r=EA(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 wA(o,`face`)}function OA(e){return TA(e.wrapped,`edge`)}function kA(e){return TA(e.wrapped,`wire`)}function AA(e){return TA(e.wrapped,`vertex`)}function jA(e,t){let n=U(),r=EA(e),i=TA(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))}}return wA(a,`face`)}function MA(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(e);return wA(o,`edge`)}function NA(e){let t=U();return t.getNurbsCurveData?t.getNurbsCurveData(e.wrapped):null}function PA(e){let t=U();return t.getNurbsSurfaceData?t.getNurbsSurfaceData(e.wrapped):null}var FA={cut:Gk,cutAll:Yk,fuse:Wk,fuseAll:Jk};function IA(e){return{totalInputs:e.totalInputs,batchAttempts:e.batchAttempts,batchSucceeded:e.batchSucceeded,singletonFallbacks:e.singletonFallbacks,failedInputs:[...e.failedInputs].sort((e,t)=>e-t)}}function LA(e,t,n={}){return RA(FA,e,t,n)}function RA(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=zA(e,t,n,0,r,i);return A(a)?a:O({shape:a.value,telemetry:IA(i)})}function zA(e,t,n,r,i,a){if(n.length===0)return O(t);if(n.length===1)return BA(e,t,n,r,i,a);a.batchAttempts++;let o=GA(()=>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=zA(e,t,n.slice(0,s),r,i,a);return c.ok?zA(e,c.value,n.slice(s),r+s,i,a):c}function BA(e,t,n,r,i,a){a.singletonFallbacks++;let o=xk(n),s=GA(()=>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 VA(e,t={}){return HA(FA,e,t)}function HA(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=UA(e,t,0,n,r);return A(i)?i:O({shape:i.value,telemetry:IA(r)})}function UA(e,t,n,r,i){if(t.length===1)return O(xk(t));i.batchAttempts++;let a=GA(()=>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 WA(e,UA(e,t.slice(0,o),n,r,i),UA(e,t.slice(o),n+o,r,i),t,n,o,r,i)}function WA(e,t,n,r,i,a,o,s){if(t.ok&&n.ok){s.singletonFallbacks++;let c=GA(()=>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 GA(e){try{return e()}catch{return null}}function KA(e,t,n){return U().checkBoolean(e.wrapped,t.wrapped,n)}function qA(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function JA(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function YA(e,t,n,r){let i=W(e);if(!dE(i)){let a=e.ShapeType(),o=[`COMPOUND`,`COMPSOLID`,`SOLID`,`SHELL`,`FACE`,`WIRE`,`EDGE`,`VERTEX`,`SHAPE`][a]??`UNKNOWN(${a})`;return i[Symbol.dispose](),k($a(t,`${n}. Got ${o} instead.`,void 0,void 0,r))}return O(i)}function XA(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 ZA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=qA(e,`fuseWithEvolution: first operand`);if(A(o))return o;let s=qA(t,`fuseWithEvolution: second operand`);if(A(s))return s;let c=bO([e,t]),{shape:l,evolution:u}=U().fuseWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=YA(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?(xO(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function QA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=qA(e,`cutWithEvolution: base`);if(A(o))return o;let s=qA(t,`cutWithEvolution: tool`);if(A(s))return s;let c=bO([e,t]),{shape:l,evolution:u}=U().cutWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=YA(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?(xO(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function $A(e,t,{simplify:n=!1,signal:r,fuzzyValue:i}={}){if(r?.aborted)throw r.reason;let a=qA(e,`intersectWithEvolution: first operand`);if(A(a))return a;let o=qA(t,`intersectWithEvolution: second operand`);if(A(o))return o;let s=bO([e,t]),{shape:c,evolution:l}=U().intersectWithHistory(e.wrapped,t.wrapped,s,G,{simplify:n,fuzzyValue:i}),u=YA(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?(xO(l,[e,t],u.value),O({shape:u.value,evolution:l})):u}function ej(e,t,n){let r=JA(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??TE(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=XA(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=bO([e]),{shape:o,evolution:s}=U().filletWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=W(o);return dE(c)?(xO(s,[e],c),O({shape:c,evolution:s})):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 tj(e,t,n){let r=JA(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??TE(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=XA(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=bO([e]),{shape:o,evolution:s}=U().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=W(o);return dE(c)?(xO(s,[e],c),O({shape:c,evolution:s})):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 nj(e,t,n,r=.001){let i=JA(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=bO([e]),{shape:a,evolution:o}=U().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,i,G,r),s=W(a);return dE(s)?(xO(o,[e],s),O({shape:s,evolution:o})):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 rj(e,t,n){try{let r=W(U().positionOnCurve(e.wrapped,t.wrapped,n));return dE(r)?O(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 ij(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function aj(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 oj(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 sj(e,t,n,r,i){let a=W(t);return dE(a)?(xO(e,n,a),O(a)):k(P(r,i))}function cj(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 lj(e,t){let n=ij(e,`thicken: shape`);if(A(n))return n;try{let n=bO([e]),{shape:r,evolution:i}=U().thickenWithHistory(e.wrapped,t,n,G),a=W(r);return xO(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=ij(e,`fillet: shape`);if(A(r))return r;let i=aj(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??TE(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=oj(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 dj(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 dE(n)?O(n):k(P(N.FILLET_NOT_3D,`Fillet result is not a 3D shape`))}let n=bO([e]),{shape:i,evolution:s}=U().filletWithHistory(e.wrapped,t,o,n,G);return sj(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 fj(e,t,n){let r=ij(e,`chamfer: shape`);if(A(r))return r;let i=aj(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??TE(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=oj(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=bO([e]),{shape:o,evolution:s}=U().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,i,G);return sj(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 pj(e,t,n,r=.001,{trackEvolution:i=!0}={}){let a=ij(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 dE(i)?O(i):k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`))}let a=bO([e]),{shape:o,evolution:s}=U().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,a,G,r),c=W(o);return dE(c)?(xO(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 mj(e,t,n=1e-6){let r=ij(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=bO([e]),{shape:i,evolution:a}=U().offsetWithHistory(e.wrapped,t,r,G,n),o=W(i);return dE(o)?(xO(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 hj(e,t,n){let r=ij(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 gj(e,t,n,r,i){let a=hj(e,t,i);if(a)return a;try{let{filteredFaces:a,kernelAngle:o}=cj(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=bO([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 sj(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 _j(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 dE(a)?lE(a)?O(a):(a[Symbol.dispose](),k(P(N.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a solid`))):(a[Symbol.dispose](),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 vj(e){return HE(e)}function yj(e){if(!lE(e))return k(F(`NOT_A_SOLID`,`Input shape is not a solid`));let t=vj(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 lE(r)?(wE(r),vj(r)?O(r):k(P(`HEAL_SOLID_INCOMPLETE`,`Healed result is still invalid after ShapeFix_Solid`))):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 bj(e){if(!sE(e))return k(F(`NOT_A_FACE`,`Input shape is not a face`));try{let t=W(U().healFace(e.wrapped));return sE(t)?O(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 xj(e,t){if(!oE(e))return k(F(`NOT_A_WIRE`,`Input shape is not a wire`));try{let n=W(U().healWire(e.wrapped,t?.wrapped));return oE(n)?O(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 Sj(e){return lE(e)?yj(e):sE(e)?bj(e):oE(e)?xj(e):O(e)}function Cj(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(vj(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=DE(e).length,u=EE(e).length,d=e,f=!1;if(o!==void 0)try{d=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=DE(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(lE(d)&&i||sE(d)&&r||oE(d)&&n){let t=Sj(d);wa(t)?(d=t.value,lE(e)?(f=!0,s.push(`Applied ShapeFix_Solid`),c.push({name:`healSolid`,attempted:!0,succeeded:!0})):sE(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 p=DE(d).length,m=EE(d).length,h=Math.abs(p-l),g=Math.abs(m-u);h>0&&s.push(`Wire count changed by ${h}`),g>0&&s.push(`Face count changed by ${g}`);let _=vj(d);return s.push(_?`Final validation: valid`:`Final validation: still invalid`),c.push({name:`finalValidation`,attempted:!0,succeeded:_}),O({shape:d,report:{isValid:_,alreadyValid:!1,wiresHealed:h,facesHealed:g,solidHealed:f,steps:s,diagnostics:c}})}function wj(e){try{return O(W(U().fixShape(e.wrapped)))}catch(e){return k(P(N.FIX_SHAPE_FAILED,`ShapeFix_Shape failed`,e))}}function Tj(e){try{let t=W(U().solidFromShell(e.wrapped));return lE(t)?vj(t)?O(t):k(P(N.SOLID_FROM_SHELL_FAILED,`solidFromShell produced an invalid solid`)):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 Ej(e){try{let t=W(U().fixSelfIntersection(e.wrapped));return oE(t)?O(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 Dj(e,t,n,r){let i=tE(U().makeBox(e,t,n)),a=r?.at??(r?.centered?[0,0,0]:void 0);return a?CO(i,[a[0]-e/2,a[1]-t/2,a[2]-n/2]):i}function Oj(e,t,n){let r=n?.at??[0,0,0],i=n?.axis??[0,0,1],a=uA(e,t,r,i);if(n?.centered){let e=[-i[0]*t*.5,-i[1]*t*.5,-i[2]*t*.5];a=CO(a,e)}return a}function kj(e,t){let n=dA(e);return t?.at&&(n=CO(n,t.at)),n}function Aj(e,t,n,r){let i=r?.at??[0,0,0],a=r?.axis??[0,0,1],o=fA(e,t,n,i,a);if(r?.centered){let e=[-a[0]*n*.5,-a[1]*n*.5,-a[2]*n*.5];o=CO(o,e)}return o}function jj(e,t,n){return pA(e,t,n?.at??[0,0,0],n?.axis??[0,0,1])}function Mj(e,t,n,r){let i=mA(e,t,n);return r?.at&&(i=CO(i,r.at)),i}function Nj(e,t){return Tk(e,t)}function Pj(e,t){let n=t?.axis??[0,0,1];return Ek(e,t?.at??[0,0,0],n)}function Fj(e,t,n){let r=n?.axis??[0,0,1];return Dk(e,t,n?.at??[0,0,0],r,n?.xDir)}function Ij(e,t,n,r){return Ok(e,t,n,r?.at??[0,0,0],r?.axis??[0,0,1],r?.lefthand??!1)}function Lj(e,t,n){return kk(e,t,n)}function Rj(e,t,n,r,i){let a=i?.axis??[0,0,1];return Ak(e,t,n*GE,r*GE,i?.at??[0,0,0],a,i?.xDir)}function zj(e,t){return jk(e,t)}function Bj(e){return Nk(e)}function Vj(e,t,n){return Pk(e,t,n)}function Hj(e){return Fk(e)}function Uj(e){return Da(Fk(e),e=>LT(e)?O(e):k(F(`WIRE_NOT_CLOSED`,`Assembled wire is not closed: start and end points do not coincide`)))}function Wj(e,t){return Ik(e,t)}function Gj(e){return zk(e)}function Kj(e,t){return Rk(e,t)}function qj(e){return Vk(e)}function Jj(e){return hA(e)}function Yj(e){return _A(e)}function Xj(e){return vA(e)}function Zj(e,t,n){return gA(e,t,n)}function Qj(e,t){return lA(e,t)}function $j(e,t){return Bk(e,t)}function eM(){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 tM(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??eM(),color:[a,o,s,c]}});return xT(U().createXCAFDocument(t))}function nM(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??eM(),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(no(`STEP_EXPORT_FAILED`,`Failed to write STEP file`))}finally{o.delete()}}function rM(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(cD(t))return k(F(`PATTERN_ZERO_DIRECTION`,`Pattern direction cannot be zero`));let a=oD(t);return Jk(U().linearPattern(e.wrapped,[...a],r,n).map(e=>W(e)),{optimisation:`sameFace`,...i,unsafe:!0})}function iM(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(cD(t))return k(F(`PATTERN_ZERO_AXIS`,`Pattern axis cannot be zero`));let o=r/n;return Jk(U().circularPattern(e.wrapped,[...i],[...t],o,n).map(e=>W(e)),{optimisation:`sameFace`,...a,unsafe:!0})}function aM(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 oM(e,t){return{...e,children:[...e.children,t]}}function sM(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 cM(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 lM(e,t){if(e.name===t)return e;for(let n of e.children){let e=lM(n,t);if(e)return e}}function uM(e,t,n=0){t(e,n);for(let r of e.children)uM(r,t,n+1)}function dM(e){let t=1;for(let n of e.children)t+=dM(n);return t}function fM(e){let t=[];return uM(e,e=>{e.shape&&t.push(e.shape)}),t}function pM(){return{steps:[],shapes:new Map}}function mM(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 hM(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 gM(e,t){return e.steps.find(e=>e.id===t)}function _M(e,t){return e.shapes.get(t)}function vM(e){return e.steps.length}function yM(e,t){let n=e.steps.findIndex(e=>e.id===t);return n===-1?[]:e.steps.slice(n)}function bM(e,t,n){let r=new Map(e.shapes);return r.set(t,n),{...e,shapes:r}}function xM(){return{operations:new Map}}function SM(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function CM(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=bM(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,n.parameters);r=mM(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 wM(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,r.parameters);a=mM(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 TM(e,t,n,r){return e.steps.findIndex(e=>e.id===t)===-1?k(I(`MODIFY_STEP_NOT_FOUND`,`Step not found: ${t}`)):wM({steps:e.steps.map(e=>e.id===t?{...e,parameters:n}:e),shapes:e.shapes},t,r)}function EM(e){let t={};for(let[n,r]of e.shapes){let e=FO(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 DM(e){let t=new Map;for(let[n,r]of Object.entries(e.shapes))try{let e=AD(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})}var OM=new WeakMap;function kM(e,t){return OM.get(e)?.get(t)}function AM(e,t,n){let r=OM.get(e);r||(r=new Map,OM.set(e,r)),r.set(t,n)}function jM(e){return U().isNull(e.wrapped)}function MM(e){return k(F(N.NULL_SHAPE_INPUT,`${e}: shape is a null shape`))}function NM(e){let t=kM(e.wrapped,`volume`);if(t)return O(t);if(jM(e))return MM(`measureVolumeProps`);let n=U(),r=n.volume(e.wrapped),i=vE(()=>n.centerOfMass(e.wrapped),N.CENTER_OF_MASS_FAILED,`Failed to compute center of mass`);if(!i.ok)return i;let a={mass:r,volume:r,centerOfMass:i.value};return AM(e.wrapped,`volume`,a),O(a)}function PM(e){let t=kM(e.wrapped,`surface`);if(t)return O(t);if(jM(e))return MM(`measureSurfaceProps`);let n=U(),r=n.area(e.wrapped),i=vE(()=>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 AM(e.wrapped,`surface`,a),O(a)}function FM(e){let t=kM(e.wrapped,`linear`);if(t)return O(t);if(jM(e))return MM(`measureLinearProps`);let n=U(),r=n.length(e.wrapped),i={mass:r,length:r,centerOfMass:n.linearCenterOfMass(e.wrapped)};return AM(e.wrapped,`linear`,i),O(i)}function IM(e){let t=NM(e);return t.ok?O(t.value.mass):t}function LM(e){let t=PM(e);return t.ok?O(t.value.mass):t}function RM(e){let t=FM(e);return t.ok?O(t.value.mass):t}function zM(e,t){return jM(e)||jM(t)?MM(`measureDistance`):O(U().distance(e.wrapped,t.wrapped).value)}function BM(e,t){if(jM(e)||jM(t))return MM(`measureDistanceProps`);let n=U().distance(e.wrapped,t.wrapped);return O({distance:n.value,point1:n.point1,point2:n.point2})}function VM(e){if(jM(e))return MM(`createDistanceQuery`);let t=U().createDistanceQuery(e.wrapped);return O({distanceTo(e){return jM(e)?MM(`createDistanceQuery.distanceTo`):O(t.distanceTo(e.wrapped).value)},dispose(){t.dispose()}})}function HM(e,t,n){if(jM(e))return MM(`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 UM(e){if(jM(e))return MM(`measureCurvatureAtMid`);let t=ID(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})}var WM=1e-9,GM=1e-8,KM=1e-6,qM=([e,t],[n,r],i=KM)=>Math.abs(e-n)<=i&&Math.abs(t-r)<=i,JM=([e,t],[n,r])=>[e+n,t+r],YM=([e,t],[n,r])=>[e-n,t-r],XM=([e,t],n)=>[e*n,t*n],ZM=([e,t],[n,r]=[0,0])=>Math.sqrt((e-n)**2+(t-r)**2),QM=([e,t],[n,r]=[0,0])=>(e-n)**2+(t-r)**2;function $M([e,t],[n,r]){return e*r-t*n}var eN=([e,t],[n,r]=[0,0])=>Math.atan2(r*e-t*n,e*n+t*r),tN=([e,t],[n,r]=[0,0])=>Math.atan2(r-t,n-e),nN=(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 rN([e,t]){let n=Math.sqrt(e*e+t*t);return n<1e-12?[0,0]:[e/n,t/n]}var iN=(e,t)=>[Math.cos(t)*e,Math.sin(t)*e],aN=([e,t])=>[Math.sqrt(e*e+t*t),Math.atan2(t,e)],oN=([e,t])=>{let n=rN([e,t]);return n[0]===0&&n[1]===0&&M(`normalize2d`,`Cannot normalize zero-length vector`),n};function sN(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(ro(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found ${r===0?0:`2+`} element(s)`))}function cN(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 TE(t);case`face`:return EE(t);case`wire`:return DE(t);case`vertex`:return OE(t)}}let s=e=>{let n=o(e);return t.length===0?n.slice():n.filter(a)},c=()=>cN(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=IO(n),r=t.get(e);r?r.push(n):t.set(e,[n])}return i(e=>{let n=t.get(IO(e));return!!n&&n.some(t=>RO(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=>sN(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 lN={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function uN(e){return typeof e==`string`?lN[e]??[0,0,1]:e}function dN(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 fN(e,t){let n=oD(uN(e));return e=>{let r=U(),[i,a]=r.curveParameters(e.wrapped),o=(i+a)/2,{tangent:s}=r.curveTangent(e.wrapped,o),c=oD(s),l=Math.acos(Math.min(1,Math.abs(tD(c,n))));return Math.abs(l-GE*t)<1e-6}}function pN(e){return cN(`edge`,e,pN,(t,n)=>({inDirection:(e=`Z`,t=0)=>n(fN(e,t)),ofLength:(e,t=.001)=>n(n=>Math.abs(KO(n)-e)<t),ofCurveType:e=>n(t=>VO(t)===e),parallelTo:(t=`Z`)=>pN(e).inDirection(t,0),atDistance:(e,t=[0,0,0])=>n(dN(e,t,1e-6))}))}function mN(){return pN([])}function hN(e,t){let n=oD(uN(e));return e=>{let r=BD(e),i=Math.acos(Math.min(1,Math.abs(tD(oD(r),n))));return Math.abs(i-GE*t)<1e-6}}function gN(e){return cN(`face`,e,gN,(t,n)=>({inDirection:(e=`Z`,t=0)=>n(hN(e,t)),parallelTo:(t=`Z`)=>gN(e).inDirection(t,0),ofSurfaceType:e=>n(t=>{let n=MD(t);return wa(n)&&n.value===e}),ofArea:(e,t=.001)=>n(n=>{let r=LM(n);return wa(r)&&Math.abs(r.value-e)<t}),atDistance:(e,t=[0,0,0])=>n(dN(e,t,1e-6))}))}function _N(){return gN([])}function vN(e){return cN(`wire`,e,vN,(e,t)=>({isClosed:()=>t(e=>qO(e)),isOpen:()=>t(e=>!qO(e)),ofEdgeCount:e=>t(t=>TE(t).length===e)}))}function yN(){return vN([])}function bN(e,t){return typeof e==`object`&&`_topoKind`in e?e.findUnique(t):typeof e!=`function`&&sE(e)?O(e):e(_N()).findUnique(t)}function xN(e){return Array.isArray(e)&&e.length===2&&typeof e[0]==`number`&&typeof e[1]==`number`}function SN(e,t){let n=10**t,r=t<0?e:.01/n+e;return Math.round(r*n)/n}function CN(e){return Math.round(e*100)/100}function wN(e){return Math.round(e*1e5)/1e5}var TN=([e,t])=>`(${CN(e)},${CN(t)})`,EN=(e,t=1e-9)=>{let n=e;return Math.abs(e)<t&&(n=0),n.toFixed(-Math.log10(t))},DN=(e,t=1e-9)=>Array.from(new Map(e.map(([e,n])=>[`[${EN(e,t)},${EN(n,t)}]`,[e,n]])).values()),ON=class{_wrapped;_deleted=!1;constructor(e){this._wrapped=e??Qw().createBoundingBox2d(),wT(this,this._wrapped)}get wrapped(){if(this._deleted)throw Error(`This object has been deleted`);return this._wrapped}delete(){this._deleted||(this._deleted=!0,TT(this._wrapped),typeof this._wrapped.delete==`function`&&this._wrapped.delete())}[Symbol.dispose](){this.delete()}get repr(){let[e,t]=this.bounds;return`${TN(e)} - ${TN(t)}`}get bounds(){let{xMin:e,yMin:t,xMax:n,yMax:r}=Qw().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){Qw().mergeBBox2d(this.wrapped,e.wrapped)}isOut(e){return Qw().isBBox2dOut(this.wrapped,e.wrapped)}containsPoint(e){return!Qw().isBBox2dOutPoint(this.wrapped,e[0],e[1])}};function kN(e){return new AN(U().deserializeCurve2d(e))}var AN=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`&&wT(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`&&(TT(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 ON(t),this._boundingBox}get repr(){return`${this.geomType} ${TN(this.firstPoint)} - ${TN(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,ZM(e,this.firstPoint),ZM(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 xN(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?qM(e,this.firstPoint,t)?O(this.firstParameter):qM(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 ${TN(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=>xN(e)?j(this.parameter(e,r)):e);i=Array.from(new Map(i.map(e=>[SN(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))}},jN=(e,t=1e-4,n=`C0`,r=200)=>new AN(Qw().approximateCurve2dAsBSpline(e.wrapped,t,n,r)),MN=e=>(e.geomType!==`BSPLINE_CURVE`&&M(`BSplineToBezier`,`You can only convert a Bspline`),Qw().decomposeBSpline2dToBeziers(e.wrapped).map(e=>new AN(e)));function NN(e,t={tolerance:1e-4,continuity:`C0`,maxSegments:300}){let n=Qw();return e.flatMap(e=>{let r=e.geomType;if(r===`ELLIPSE`||r===`CIRCLE`&&qM(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 NN(MN(r===`BSPLINE_CURVE`?e:jN(e,t.tolerance,t.continuity,t.maxSegments)),t)})}var PN=(e,t)=>{let n=new AN(U().makeLine2d(e[0],e[1],t[0],t[1]));return qM(n.firstPoint,e)||n.reverse(),n},FN=(e,t,n)=>{let r=new AN(U().makeArc2dThreePoints(e[0],e[1],t[0],t[1],n[0],n[1]));if(!qM(r.firstPoint,e)){let e=U().trimCurve2d(r.wrapped,r.lastParameter,r.firstParameter);r.delete(),r=new AN(e)}return r},IN=(e,t,n)=>{let r=new AN(U().makeArc2dTangent(e[0],e[1],t[0],t[1],n[0],n[1]));if(!qM(r.firstPoint,e)){let e=U().trimCurve2d(r.wrapped,r.lastParameter,r.firstParameter);r.delete(),r=new AN(e)}return r},LN=(e,t=[0,0])=>new AN(U().makeCircle2d(t[0],t[1],e,!0)),RN=(e,t,n=[1,0],r=[0,0],i=!0)=>new AN(U().makeEllipse2d(r[0],r[1],e,t,n[0],n[1],i)),zN=(e,t,n,r,i=[0,0],a,o=!0)=>new AN(U().makeEllipseArc2d(i[0],i[1],e,t,n,r,a[0],a[1],o)),BN=(e,t,n)=>{let r=[[e[0],e[1]],...t.map(e=>[e[0],e[1]]),[n[0],n[1]]];return new AN(U().makeBezier2d(r))};function VN(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 AN(U().makeBSpline2d(a,{tolerance:t,smoothing:n,degMax:r,degMin:i,continuity:`C2`})))}catch{return k(I(`BSPLINE_2D_FAILED`,`B-spline approximation failed`))}}var HN=(e,t,n,r=!1)=>{let i=XM(JM(e,t),.5),a=ZM(n,e)*(r?-1:1);return FN(e,JM(XM(oN(YM(i,n)),a),n),t)},UN=(e,n)=>{let r=Qw(),i=e.geomType,[a,o]=n,s=`${wN(a)} ${wN(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 ${CN(e)} ${CN(r)} ${s}`}if(i===3){let[e,r]=t(n,1),[i,a]=t(n,2);return`C ${CN(e)} ${CN(r)} ${CN(i)} ${CN(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)*KE,u=l===360?`${wN(a)} ${wN(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)*KE,f=d===360?`${wN(a)} ${wN(o+1e-4)}`:s,p=180-c*KE;return`A ${wN(n)} ${wN(i)} ${wN(p)} ${Math.abs(d)>180?`1`:`0`} ${l?`1`:`0`} ${f}`}M(`adaptedCurveToPathElem`,`Unsupported curve type: ${i}`)},WN=e=>{let t=U(),n=t.createBoundingBox2d();return e.forEach(e=>{t.addCurveToBBox2d(n,e.wrapped,1e-6)}),new ON(n)};function GN(e,t){let n=U();return e.map(e=>ZT(n.liftCurve2dToPlane(e.wrapped,[...t.origin],[...t.zDir],[...t.xDir])))}var KN=(e,t)=>{let n=U();return e.map(e=>ZT(n.buildEdgeOnSurface(e.wrapped,t)))},qN=(e,t)=>{let n=U();return e.map(e=>t?new AN(n.transformCurve2dGeneral(e.wrapped,t)):e.clone())},JN=(e,t,n=[0,0])=>U().createAffinityGTrsf2d(n[0],n[1],t[0],t[1],e),YN=e=>U().createTranslationGTrsf2d(e[0],e[1]),XN=(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]),ZN=(e,t=[0,0])=>U().createRotationGTrsf2d(e,t[0],t[1]),QN=(e,t=[0,0])=>U().createScaleGTrsf2d(e,t[0],t[1]);function $N(e,t,n=`original`){let r=U(),i=r.extractSurfaceFromFace(t.wrapped),a=ID(t),o=null;if(n===`original`&&ND(t)!==`PLANE`){if(ND(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=JN(1/e.radius,[0,1])}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=KN(qN(e,o),i);return o&&o.delete(),O(s)}function eP(e,t){let n=U(),r=new AN(n.extractCurve2dFromEdge(e.wrapped,t.wrapped));return XO(e)===`backward`&&n.reverseCurve2d(r.wrapped),r}var tP=(e,t=1)=>`${e.bounds[0][0]-t} ${-e.bounds[1][1]-t} ${e.width+2*t} ${e.height+2*t}`,nP=(e,t,n=1)=>`<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="${tP(t,n)}" fill="none" stroke="black" stroke-width="0.6%" vector-effect="non-scaling-stroke">
16
+ ${e}
17
+ </svg>`;function rP(e){let t=e.map(e=>e.wrapped);return QT(U().makeWire(t))}var iP=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(`
18
+ `)}get boundingBox(){return this._boundingBox||=WN(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=bk(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]){return new e(qN(this.curves,JN(t,n,r)))}scale(t,n){let r=n||this.boundingBox.center;return new e(qN(this.curves,QN(t,r)))}rotate(t,n){return new e(qN(this.curves,ZN(t*GE,n)))}translate(t,n=0){let r=xN(t)?t:[t,n];return new e(qN(this.curves,YN(r)))}mirror(t,n=[0,0],r=`center`){return new e(qN(this.curves,XN(t,n,r)))}sketchOnPlane(e,t){let n=e&&typeof e!=`string`?{...e}:vD(e,t);return{wire:rP(GN(this.curves,n)),defaultOrigin:n.origin,defaultDirection:n.zDir}}sketchOnFace(e,t){let n=U(),r=rP(j($N(this.curves,e,t)));n.buildCurves3d(r.wrapped);let i=n.fixWireOnFace(r.wrapped,e.wrapped,1e-9);return r.delete(),{wire:QT(i),baseFace:e}}subFace(e,t){let n=qE(t||[...VD(e)]);return j(Ik(this.translate(RD(e,n)).sketchOnFace(e,`original`).wire))}punchHole(e,t,{height:n=null,origin:r=null,draftAngle:i=0}={}){let a=j(bN(t,e)),o=this.subFace(a,r);return j(OD(U().draftPrism(e.wrapped,o.wrapped,a.wrapped,n,i,!1)))}toSVGPathD(){let e=this.clone().mirror([1,0],[0,0],`plane`),t=NN(e.curves).flatMap(e=>UN(e,e.lastPoint)),[n,r]=xk(e.curves).firstPoint;return`M ${wN(n)} ${wN(r)} ${t.join(` `)}${e.isClosed()?` Z`:``}`}toSVGPath(){return`<path d="${this.toSVGPathD()}" />`}toSVGViewBox(e=1){return tP(this.boundingBox,e)}toSVGPaths(){return[this.toSVGPathD()]}toSVG(e=1){return nP(this.toSVGPath(),this.boundingBox,e)}get firstPoint(){return xk(this.curves).firstPoint}get lastPoint(){return Sk(this.curves).lastPoint}isInside(e){if(!this.boundingBox.containsPoint(e))return!1;let t=U(),n=PN(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=>qM(t,e,1e-9))||(r.push(e),i++);for(let e of a.segments)e.delete()}),!!(i%2)}finally{n.delete()}}isClosed(){return qM(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}},aP=class{constructor(){this.ids=[],this.values=[],this.length=0}clear(){this.length=0}push(e,t){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(){this.ids.length=this.values.length=this.length}},oP=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],sP=3,cP=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||t.buffer)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!==sP)throw Error(`Got v${a} data when expected v${sP}.`);let o=oP[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=oP.indexOf(n),l=s*4*n.BYTES_PER_ELEMENT;if(c<0)throw Error(`Unexpected typed array class: ${n}.`);if(i)this.data=i,this._boxes=new n(i,a+8,s*4),this._indices=new this.IndexArrayType(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 i=this.data=new r(8+l+s*this.IndexArrayType.BYTES_PER_ELEMENT);this._boxes=new n(i,8,s*4),this._indices=new this.IndexArrayType(i,8+l,s),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(i,0,2).set([251,(sP<<4)+c]),new Uint16Array(i,2,1)[0]=t,new Uint32Array(i,4,1)[0]=e}this._queue=new aP}add(e,t,n=e,r=t){let i=this._pos>>2,a=this._boxes;return this._indices[i]=i,a[this._pos++]=e,a[this._pos++]=t,a[this._pos++]=n,a[this._pos++]=r,e<this.minX&&(this.minX=e),t<this.minY&&(this.minY=t),n>this.maxX&&(this.maxX=n),r>this.maxY&&(this.maxY=r),i}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 t=this.maxX-this.minX||1,n=this.maxY-this.minY||1,r=new Uint32Array(this.numItems),i=65535;for(let a=0,o=0;a<this.numItems;a++){let s=e[o++],c=e[o++],l=e[o++],u=e[o++];r[a]=fP(Math.floor(i*((s+l)/2-this.minX)/t),Math.floor(i*((c+u)/2-this.minY)/n))}uP(r,e,this._indices,0,this.numItems-1,this.nodeSize);for(let t=0,n=0;t<this._levelBounds.length-1;t++){let r=this._levelBounds[t];for(;n<r;){let t=n,i=e[n++],a=e[n++],o=e[n++],s=e[n++];for(let t=1;t<this.nodeSize&&n<r;t++)i=Math.min(i,e[n++]),a=Math.min(a,e[n++]),o=Math.max(o,e[n++]),s=Math.max(s,e[n++]);this._indices[this._pos>>2]=t,e[this._pos++]=i,e[this._pos++]=a,e[this._pos++]=o,e[this._pos++]=s}}}search(e,t,n,r,i){if(this._pos!==this._boxes.length)throw Error(`Data not yet indexed - call index.finish().`);let a=this._boxes.length-4,o=[],s=[];for(;a!==void 0;){let c=Math.min(a+this.nodeSize*4,lP(a,this._levelBounds));for(let l=a;l<c;l+=4){let c=this._boxes[l];if(n<c)continue;let u=this._boxes[l+1];if(r<u)continue;let d=this._boxes[l+2];if(e>d)continue;let f=this._boxes[l+3];if(t>f)continue;let p=this._indices[l>>2]|0;a>=this.numItems*4?o.push(p):(i===void 0||i(p,c,u,d,f))&&s.push(p)}a=o.pop()}return s}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 a=this._boxes.length-4,o=this._queue,s=[],c=r*r;outer:for(;a!==void 0;){let r=Math.min(a+this.nodeSize*4,lP(a,this._levelBounds));for(let n=a;n<r;n+=4){let r=this._indices[n>>2]|0,s=this._boxes[n],l=this._boxes[n+1],u=this._boxes[n+2],d=this._boxes[n+3],f=e<s?s-e:e>u?e-u:0,p=t<l?l-t:t>d?t-d:0,m=f*f+p*p;m>c||(a>=this.numItems*4?o.push(r<<1,m):(i===void 0||i(r))&&o.push((r<<1)+1,m))}for(;o.length&&o.peek()&1;)if(o.peekValue()>c||(s.push(o.pop()>>1),s.length===n))break outer;a=o.length?o.pop()>>1:void 0}return o.clear(),s}};function lP(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 uP(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;dP(e,t,n,d,f)}o.push(i,f,f+1,r)}}function dP(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 fP(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>>1^r&a>>1^i,l=n&i>>1^a>>1^a;n=o,r=s,i=c,a=l,o=n&n>>2^r&r>>2,s=n&r>>2^r&(n^r)>>2,c^=n&i>>2^r&a>>2,l^=r&i>>2^(n^r)&a>>2,n=o,r=s,i=c,a=l,o=n&n>>4^r&r>>4,s=n&r>>4^r&(n^r)>>4,c^=n&i>>4^r&a>>4,l^=r&i>>4^(n^r)&a>>4,n=o,r=s,i=c,a=l,c^=n&i>>8^r&a>>8,l^=r&i>>8^(n^r)&a>>8,n=c^c>>1,r=l^l>>1;let u=e^t,d=r|65535^(u|n);return u=(u|u<<8)&16711935,u=(u|u<<4)&252645135,u=(u|u<<2)&858993459,u=(u|u<<1)&1431655765,d=(d|d<<8)&16711935,d=(d|d<<4)&252645135,d=(d|d<<2)&858993459,d=(d|d<<1)&1431655765,(d<<1|u)>>>0}var pP=(e,t,n=1e-9)=>{if(e.boundingBox.isOut(t.boundingBox))return O({intersections:[],commonSegments:[],commonSegmentsPoints:[]});let r=Qw(),i,a;try{let o=r.intersectCurves2d(e.wrapped,t.wrapped,n);i=o.points,a=o.segments.map(e=>new AN(e))}catch(e){return k(I(`INTERSECTION_FAILED`,`Intersections failed between curves`,e))}let o=a.filter(e=>qM(e.firstPoint,e.lastPoint,n)).map(e=>e.firstPoint);o.length&&(i.push(...o),a=a.filter(e=>!qM(e.firstPoint,e.lastPoint,n)));let s=a.flatMap(e=>[e.firstPoint,e.lastPoint]);return O({intersections:i,commonSegments:a,commonSegmentsPoints:s})},mP=(e,t=1e-9)=>{let n=Qw(),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)},hP=(e,n,r)=>{let i=oN(YM(n,e)),a=[i[1],-i[0]],o=[t(a,0)*r,t(a,1)*r];return{firstPoint:JM(e,o),lastPoint:JM(n,o)}},gP=(e,t)=>{let n=e.geomType,r=Qw();if(n===`CIRCLE`){let n=r.getCurve2dCircleData(e.wrapped);if(!n)return PN(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]=oN(YM(e,t));return JM(e,[c*n,c*r])};return{collapsed:!0,firstPoint:n(e.firstPoint),lastPoint:n(e.lastPoint)}}let u=new AN(r.makeCircle2d(i,a,l,s)),d;try{d=r.trimCurve2d(u.wrapped,e.firstParameter,e.lastParameter)}finally{u.delete()}return new AN(d)}if(n===`LINE`){let{firstPoint:n,lastPoint:r}=hP(e.firstPoint,e.lastPoint,t);return PN(n,r)}let i=new AN(r.offsetCurve2d(e.wrapped,t)),a=jN(i);if(i.delete(),j(mP(a)).length){let e=a.firstPoint,t=a.lastPoint;return a.delete(),{collapsed:!0,firstPoint:e,lastPoint:t}}return a};function _P(e,n,r){let i=$M(e.tangentAt(1),n.tangentAt(0));if(Math.abs(i)<1e-10)return null;let a=Math.abs(r)*(i>0?-1:1),o=gP(e,a),s=gP(n,a);if(!(o instanceof AN)||!(s instanceof AN))return null;let c=pP(o,s,1e-9);if(!wa(c))return null;let l=c.value.intersections.at(-1);if(!xN(l))return null;let u=l,d=(e,t)=>{let[n,r]=t.tangentAt(u),i=JM(u,XM(oN([-r,n]),a)),o=j(e.parameter(i,1e-6));return e.splitAt([o])},f=d(e,o),p=d(n,s);return{first:t(f,0),second:t(p,1),center:u}}function vP(e,t,n){let r=_P(e,t,n);if(!r)return[e,t];let{first:i,second:a,center:o}=r;return[i,HN(i.lastPoint,a.firstPoint,o),a]}function yP(e,t,n){let r=_P(e,t,n);if(!r)return[e,t];let{first:i,second:a}=r;return[i,PN(i.lastPoint,a.firstPoint),a]}function bP(e,n,r){let i=$M(oN(e.tangentAt(1)),oN(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=gP(e,s),l=gP(n,s);if(!(c instanceof AN)||!(l instanceof AN))return[e,n];let u=pP(c,l,1e-9);if(!wa(u))return[e,n];let d=u.value.intersections.at(-1);if(!xN(d))return[e,n];let f=LN(r,d),p=j(pP(e,f)).intersections[0],m=j(pP(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[_,FN(_.lastPoint,e.lastPoint,v.firstPoint),v]}catch{return[e,n]}}var xP=class e{blueprints;_boundingBox;constructor(e){this.blueprints=e,this._boundingBox=null}get repr(){return[`Blueprints`,...this.blueprints.map(e=>e.repr)].join(`
19
+ `)}clone(){return new e(this.blueprints.map(e=>e.clone()))}get boundingBox(){if(!this._boundingBox){let e=new ON;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 tP(this.boundingBox,e)}toSVGPaths(){return this.blueprints.map(e=>e.toSVGPaths())}toSVG(e=1){return nP(this.blueprints.map(e=>e instanceof iP?e.toSVGPath():e.toSVGGroup()).join(`
20
+ `),this.boundingBox,e)}},SP=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 ON;this.blueprints.forEach(t=>{e.add(t.boundingBox)}),this._boundingBox=e}return this._boundingBox}get repr(){return[`Compound Blueprints`,`-- Outline`,xk(this.blueprints).repr,`-- Holes`,...this.blueprints.slice(1).map(e=>e.repr)].join(`
21
+ `)}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 xk(this.blueprints).punchHole(e,t,n)}toSVGViewBox(e=1){return tP(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 nP(this.toSVGGroup(),this.boundingBox,e)}},CP=e=>{if(e.length===0)return[];if(e.length===1)return[[ao(e,0,`groupByBoundingBoxOverlap`)]];let t=new cP(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(ao(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(ao(e,n,`groupByBoundingBoxOverlap`)),t.length&&t.forEach(e=>{i[e]=a})}),r},wP=e=>e.map((t,n)=>{let r=ao(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))}}),TP=(e,t)=>e.flatMap(({blueprint:e})=>DP(t.filter(({blueprint:t,isIn:n})=>t===e||n.indexOf(e)!==-1))),EP=(e,t)=>[t.filter(({isIn:e})=>e.length<=1),...DP(wP(e.map(({blueprint:e})=>e)))],DP=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?TP(t,e):EP(n,e)},OP=e=>new xP(CP(e).map(wP).flatMap(DP).map(e=>e.length===1?ao(e,0,`organiseBlueprints`).blueprint:(e.sort((e,t)=>e.isIn.length-t.isIn.length),new SP(e.map(({blueprint:e})=>e))))),kP=e=>e===`symmetric`||typeof e==`number`||Array.isArray(e)&&e.length===2,AP=e=>{let t;t=e?kP(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`?iN(1,n*GE):n;let s;return s=typeof a==`number`?iN(1,a*GE):a,{endTangent:o,startFactor:r,endFactor:i,startTangent:s}};function jP(e,t,n){return e<t?{majorRadius:t,minorRadius:e,rotationAngle:n+90}:{majorRadius:e,minorRadius:t,rotationAngle:n}}function MP(e,t,n,r,i,a,o,s){let c=i*GE,l=e=>ZM(s(e)),u=l(iN(n,c)),d=l(iN(r,c+Math.PI/2)),f=oN(s(nN([1,0],c))),[,p]=aN(f),{cx:m,cy:h,startAngle:g,endAngle:_,clockwise:v,rx:y,ry:b}=FP(e,t,u,d,p,a,o),x=zN(y,b,v?g:_,v?_:g,[m,h],f);return v||x.reverse(),x}function NP(e,t,n,r,i){let a=Math.PI*2,o=PP(1,0,e,t),s=PP(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 PP(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 FP([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}=NP(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 IP={chamfer:yP,dogbone:bP,fillet:vP};function LP(e,t){if(typeof e==`function`)return e;let n=IP[t];return(t,r)=>n(t,r,e)}var RP=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)*KE}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=PN(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(iN(e,t*GE))}polarLine(e,t){let[n,r]=iN(e,t*GE);return this.line(n,r)}tangentLine(e){let t=this._requireLastCurve(`Sketcher2d.tangentLine`,`sketch a tangent line`),n=oN(this._convertFromUV(t.tangentAt(1)));return this.line(n[0]*e,n[1]*e)}threePointsArcTo(e,t){let n=FN(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=FN(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=ZM(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=IN(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}=jP(t,n,r),l=MP(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=tN(e,this.pointer),i=ZM(e,this.pointer);return this.ellipseTo(e,i/2,t,r*KE,!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=BN(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}=AP(t),o=this._lastCurve(),s=ZM(this.pointer,e)*.25,c;c=r||(o?this._convertFromUV(o.tangentAt(1)):[1,0]),c=oN(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=oN(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=LP(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(...LP(e,t)(n,r))}_closeSketch(){qM(this.pointer,this.firstPoint)||this.lineTo(this.firstPoint)}_closeWithMirror(){qM(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 AN(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}},zP=class extends RP{constructor(e=[0,0]){super(),this.pointer=e,this.firstPoint=e,this.pendingCurves=[]}done(){return new iP(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()}},BP=2*Math.PI;function VP(e){let t=e%BP,n=t<0?t+BP:t;return n<Math.PI?n:n===Math.PI?0:Math.abs(n-BP)}function HP(e){return e.curves.map((t,n)=>({firstCurve:t,secondCurve:bk(e.curves,(n+1)%e.curves.length),point:t.lastPoint}))}function UP(e){let t=t=>UP([...e,t]),n=t=>e.every(e=>e(t));return{shouldKeep:n,when:e=>t(e),inList:e=>t(t=>e.some(e=>qM(e,t.point))),atDistance:(e,n=[0,0])=>t(t=>Math.abs(ZM(n,t.point)-e)<1e-9),atPoint:e=>t(t=>qM(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(VP(eN(n,r))-VP(GE*e))<1e-9}),not:e=>{let n=e(UP([]));return t(e=>!n.shouldKeep(e))},either:e=>{let n=e.map(e=>e(UP([])));return t(e=>n.some(t=>t.shouldKeep(e)))},find:e=>HP(e).filter(n)}}function WP(){return UP([])}var GP=(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=Sk(r),a=new zP().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()},KP=(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 zP([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()},qP=(e,t)=>qM(e,t,WM);function JP(e){return`${e[0].toFixed(9)},${e[1].toFixed(9)}`}function YP(e,t){let n=JP(e),r=JP(t);return n<r?`${n}|${r}`:`${r}|${n}`}function XP(e){let t=e[0];return t===void 0&&M(`startOfSegment`,`empty segment`),t.firstPoint}function ZP(e){let t=e[e.length-1];return t===void 0&&M(`endOfSegment`,`empty segment`),t.lastPoint}function QP(e){return[...e].reverse().map(e=>{let t=e.clone();return t.reverse(),t})}function $P(e){return[...e].reverse().map(QP)}function eF(e){let t=(e.lastParameter+e.firstParameter)/2;return e.value(t)}function tF(e,t){let n=JP(t);for(let r=0;r<e.length;r++){let i=e[r];if(i!==void 0&&JP(i.firstPoint)===n&&qP(t,i.firstPoint))return r}for(let n=0;n<e.length;n++){let r=e[n];if(r!==void 0&&qP(t,r.firstPoint))return n}return-1}function nF(e,t,n,r){for(let i=0;i<e.length;i++){let a=e[i];if(a!==void 0&&JP(a.firstPoint)===t&&JP(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 rF(e,t){return t<=0?e:e.slice(t).concat(e.slice(0,t))}function iF(e,t){return rF(e,tF(e,t))}function aF(e,t){let n=JP(t.firstPoint),r=JP(t.lastPoint),i=e=>qP(t.firstPoint,e.firstPoint)&&qP(t.lastPoint,e.lastPoint),a=e=>qP(t.lastPoint,e.firstPoint)&&qP(t.firstPoint,e.lastPoint);function o(e,t,n,r){let i=nF(e,t,n,r);return i===-1?null:rF(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=QP(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*oF(e,t,n){let r=new Set(t.map(JP)),i=new Set(n.map(e=>YP(e.firstPoint,e.lastPoint))),a=e=>r.has(JP(e))?!0:t.some(t=>qP(t,e)),o=(e,t)=>i.has(YP(e,t))?!0:n.some(n=>qP(n.firstPoint,e)&&qP(n.lastPoint,t)||qP(n.firstPoint,t)&&qP(n.lastPoint,e)),s=[];for(let t of e){if(qP(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 sF(e,t,n){return e.filter(e=>{let r=t.filter(t=>qP(t.firstPoint,e)||qP(t.lastPoint,e)),i=r.length%2?r.filter(t=>!(qP(t.firstPoint,e)&&qP(t.lastPoint,e))):r;if(i.length===0||i.length%2)return!1;let a=i.map(e=>n.isInside(eF(e)));return!(a.every(Boolean)||a.every(e=>!e))})}function cF(e,n){let r=[],i=[],a=e.curves.map(()=>[]),o=n.curves.map(()=>[]),s=new cP(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(pP(e,t(n.curves,s),WM/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:DN(r,WM),allCommonSegments:i,firstCurvePoints:a,secondCurvePoints:o}}function lF(e,t){return wk([e,t]).flatMap(([e,t])=>t.length===0?[e]:e.splitAt(t,WM/100))}function uF(e,t,n){return e.some(([e,r])=>e===void 0||r===void 0?!1:qP(e,t)&&qP(r,n)||qP(e,n)&&qP(r,t))}function dF(e,t){let{allIntersections:n,allCommonSegments:r,firstCurvePoints:i,secondCurvePoints:a}=cF(e,t);if(n.length<=1)return null;let o=lF(e.curves,i),s=lF(t.curves,a),c=r.map(e=>[e.firstPoint,e.lastPoint]),l=sF(sF(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=iF(o,e),s=iF(s,e)}else{let e=r[0];if(e===void 0)return null;o=aF(o,e),s=aF(s,e)}let u=Array.from(oF(o,l,r)),d=Array.from(oF(s,l,r)),f=u[0],p=d[0];if(f!==void 0&&p!==void 0){let e=!qP(ZP(p),ZP(f)),t=r.length>0&&p.length!==1;(e||t)&&(d=$P(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}uF(c,XP(t),ZP(t))?h.push([t,`same`]):h.push([t,n])}return h}function fF(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`||!qP(a,n.firstPoint))break;let r=YM(a,i.firstPoint),s=YM(n.lastPoint,n.firstPoint);if(Math.abs($M(r,s))>1e-9)break;a=n.lastPoint,o++}o>r+1?n.push(PN(i.firstPoint,a)):n.push(i),r=o}return n}function pF(e){let t=e.map(e=>e.firstPoint),n=e.map(e=>e.lastPoint),r=wk([t,n.slice(-1).concat(n.slice(0,-1))]).map(([e,t],n)=>e===void 0||t===void 0||qP(e,t)?null:n).filter(e=>e!==null);if(r.length===0)return[e];let i=wk([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 mF(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 hF(e,t,n,r,i,a,o){let s=[],c=0,l=e[0];if(l!==void 0){let t=eF(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=eF(u),r=n.isInside(e);if(i.secondInside===`keep`&&r||i.secondInside===`remove`&&!r){let e=t;c===1&&(e=QP(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 gF(e,t,n){let r=dF(e,t);if(r===null)return _F(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=mF(r,i,a);return i=e.segmentsIn,a=e.lastWasSame,e.curves}let s=hF(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=pF(fF(o)).filter(e=>e.length>0).map(e=>new iP(e));if(c.length===0)return null;if(c.length===1){let e=c[0];return e===void 0?null:e}return OP(c)}function _F(e,t){let n=e.curves[0],r=t.curves[0];return{identical:!1,firstCurveInSecond:n!==void 0&&t.isInside(eF(n)),secondCurveInFirst:r!==void 0&&e.isInside(eF(r))}}function vF(e,t){let n=gF(e,t,{firstInside:`remove`,secondInside:`remove`});return n===null||n instanceof iP||n instanceof xP?n:n.identical?e.clone():n.firstCurveInSecond?t.clone():n.secondCurveInFirst?e.clone():new xP([e,t])}function yF(e,t){let n=gF(e,t,{firstInside:`remove`,secondInside:`keep`});return n===null||n instanceof iP||n instanceof xP?n:n.identical||n.firstCurveInSecond?null:n.secondCurveInFirst?new xP([new SP([e,t])]):e.clone()}function bF(e,t){let n=gF(e,t,{firstInside:`keep`,secondInside:`keep`});return n===null||n instanceof iP||n instanceof xP?n:n.identical||n.firstCurveInSecond?e.clone():n.secondCurveInFirst?t.clone():null}var xF=(e,t)=>{if(e instanceof iP&&t instanceof iP){let n=[];return e.curves.forEach(e=>{t.curves.forEach(t=>{let{intersections:r,commonSegmentsPoints:i}=j(pP(e,t));n.push(...r),n.push(...i)})}),n=DN(n),n.length>1}if(e instanceof SP||e instanceof xP)return e.blueprints.some(e=>xF(e,t));if(t instanceof SP||t instanceof xP)return t.blueprints.some(t=>xF(e,t));M(`genericIntersects`,`Unhandled shape combination in genericIntersects`)},SF=(e,t)=>{if(e instanceof SP){if(t instanceof iP)return TF(t,e);if(t instanceof SP)return DF(e,t)}if(t instanceof SP){if(e instanceof iP)return TF(e,t);if(e instanceof SP)return DF(e,t)}if(e instanceof iP&&t instanceof iP)return vF(e,t);M(`genericFuse`,`Unhandled shape combination in genericFuse`)},CF=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)||!xF(r,s))return;let l;if(r instanceof xP||s instanceof xP){let e=OF(r,s);e===null&&M(`fuseIntersectingBlueprints`,`fuse2D returned null for non-null inputs`),l=e}else l=SF(r,s);if(!(l instanceof iP||l instanceof SP)){if(l instanceof xP&&l.blueprints.length===2)return;l instanceof xP&&l.blueprints.length===1?l=ao(l.blueprints,0,`fuseIntersectingBlueprints`):l instanceof xP||M(`fuseIntersectingBlueprints`,`Fuse produced unexpected non-blueprint result`)}a.fusedWith.add(o),a.current=l,c||t.set(o,a)})}),OP(n.map(({current:e})=>e).flatMap(e=>wF(e)))},wF=e=>e instanceof iP?[e]:e instanceof SP?e.blueprints:e instanceof xP?e.blueprints.flatMap(e=>wF(e)):[],TF=(e,t)=>{let n=vF(e,ao(t.blueprints,0,`fuseBlueprintWithCompound`)),r=t.blueprints.slice(1).map(t=>yF(t,e));return OP([...wF(n),...r.flatMap(e=>wF(e))])};function EF(e,t){let n=[];for(let r of e)for(let e of t)n.push([r,e]);return n}var DF=(e,t)=>{let n=ao(e.blueprints,0,`fuseCompoundWithCompound`),r=ao(t.blueprints,0,`fuseCompoundWithCompound`),i=vF(n,r),a=t.blueprints.slice(1).map(e=>yF(e,n)),o=e.blueprints.slice(1).map(e=>yF(e,r)),s=EF(e.blueprints.slice(1),t.blueprints.slice(1)).flatMap(([e,t])=>wF(bF(e,t)));return OP([...wF(i),...a.flatMap(e=>wF(e)),...o.flatMap(e=>wF(e)),...s])},OF=(e,t)=>{if(e===null)return t?.clone()??null;if(t===null)return e.clone();if(!(e instanceof xP)&&t instanceof xP)return CF([e,...t.blueprints]);if(!(t instanceof xP)&&e instanceof xP)return CF([t,...e.blueprints]);if(e instanceof xP&&t instanceof xP){let n=OF(ao(e.blueprints,0,`fuse2D`),t);return e.blueprints.slice(1).forEach(e=>{n=OF(e,n)}),n}if(e instanceof SP){if(t instanceof xP)return OF(t,e);if(t instanceof iP)return TF(t,e);if(t instanceof SP)return DF(e,t)}if(t instanceof SP){if(e instanceof xP)return OF(e,t);if(e instanceof iP)return TF(e,t);if(e instanceof SP)return DF(e,t)}return e instanceof iP&&t instanceof iP?vF(e,t):null},kF=e=>{let t=e.flatMap(e=>e===null?[]:e instanceof xP?e.blueprints:e);return t.length===1?ao(t,0,`mergeNonIntersecting`):new xP(t)},AF=(e,t)=>{if(e===null)return null;if(t===null)return e.clone();if(e instanceof xP)return kF(e.blueprints.map(e=>AF(e,t)));if(e instanceof SP){let n=ao(e.blueprints,0,`cut2D`);if(t instanceof iP&&!t.intersects(n))return n.isInside(t.firstPoint)?OP([n,...wF(OF(t,new xP(e.blueprints.slice(1))))]):e.clone();{let r=AF(n,t);return e.blueprints.slice(1).forEach(e=>{r=AF(r,e)}),r}}if(t instanceof xP){let n=e;for(let e of t.blueprints)n=AF(n,e);return n}if(t instanceof SP){let n=yF(e,ao(t.blueprints,0,`cut2D`));return t.blueprints.slice(1).forEach(t=>{n=OF(n,bF(t,e))}),n}return yF(e,t)};function jF(e,t){if(e===null||t===null)return null;if(e instanceof iP&&t instanceof iP)return bF(e,t);if(e instanceof xP)return kF(e.blueprints.map(e=>jF(e,t)));if(e instanceof SP){let n=ao(e.blueprints,0,`intersect2D`),r=e.blueprints.slice(1);if(r.length===0)return jF(n,t);let i=jF(n,t);for(let e of r)i=AF(i,e);return i}if(t instanceof xP)return kF(t.blueprints.map(t=>jF(e,t)));if(t instanceof SP){let n=ao(t.blueprints,0,`intersect2D`),r=t.blueprints.slice(1);if(r.length===0)return jF(n,e);let i=jF(n,e);for(let e of r)i=AF(i,e);return i}M(`intersect2D`,`Unhandled Shape2D combination`)}function MF(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 NF(e,t){let n=U(),r=n.makeLineEdge([...e],[...t]);return W(n.makeWire([r]))}function PF(e,t,n,r,i,a=!1){return W(U().makeHelixWire(e,t,n,[...r],[...i],a))}function FF(e,t,n={},r=!1){if(n.mode===`simple`&&!r){let n=W(U().simplePipe(e.wrapped,t.wrapped));return dE(n)?O(n):k($a(`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){let e=W(v.shape);if(!dE(e))return k($a(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`));let t=W(v.firstShape),n=W(v.lastShape);return oE(t)?oE(n)?O([e,t,n]):k($a(`SWEEP_END_NOT_WIRE`,`Sweep did not produce an end Wire`)):k($a(`SWEEP_START_NOT_WIRE`,`Sweep did not produce a start Wire`))}let y=W(v);return dE(y)?O(y):k($a(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`))}function IF(e,t,n,r){return FF(e,NF(t,ZE(t,n)),{support:r})}function LF(e,t,n,r,i=!1){let a=rD(n);if(a<1e-10)return k(F(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let o=NF(t,ZE(t,n)),s=null;if(r){let e=MF(a,r);if(A(e))return e;s=e.value}return FF(e,o,{law:s},i)}function RF(e,t,n,r,i,a=!1){if(Math.abs(t)<1e-10)return k(F(`ZERO_TWIST_ANGLE`,`Twist angle cannot be zero`));let o=rD(r);if(o<1e-10)return k(F(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let s=NF(n,ZE(n,r)),c=t<0,l=PF(360/Math.abs(t)*o,o,1,n,r,c),u=null;if(i){let e=MF(o,i);if(A(e))return e;u=e.value}return FF(e,s,{auxiliarySpine:l,law:u},a)}function zF(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 BF(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 VF(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=zF(e);if(o)return k(o);try{let n=U(),o=BF(e,t,n);if(A(o))return o;let s=o.value,c=[];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(n.downcast(o,`wire`))}let l=W(n.loftAdvanced(c,{solid:r,ruled:i,tolerance:a}));return dE(l)?O(l):k($a(`MULTI_SWEEP_NOT_3D`,`Multi-section sweep did not produce a 3D shape`))}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 HF(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 dE(u)?O(u):k($a(`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 UF(e,t){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`extrude: face is a null shape`));if(rD(t)<1e-10)return k(F(`EXTRUDE_ZERO_VECTOR`,`extrude: extrusion vector has zero length`));try{let n=U(),r=rD(t),i=oD(t),a=n.extrude(e.wrapped,[...i],r);return O(tE(n.downcast(a,`solid`)))}catch(e){return k(P(`EXTRUDE_FAILED`,`Extrusion operation failed`,e,{operation:`extrude`,vectorLength:rD(t)}))}}function WF(e,t=[0,0,0],n=[0,0,1],r=360){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 dE(i)?O(i):k($a(`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 GF(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=rD(i);if(a<1e-10)return k(F(`EXTRUDE_ALL_ZERO_VECTOR`,`extrudeAll: entry ${t} has zero-length extrusion vector`));let o=[...oD(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=>tE(t.downcast(e,`solid`))))}catch(e){return k(P(`EXTRUDE_ALL_FAILED`,`Batch extrusion operation failed`,e))}}var KF=e(((e,t)=>{t.exports={}}));
22
+ /*! https://mths.be/codepointat v0.2.0 by @mathias */
23
+ 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 qF=0,JF=-3;function YF(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function XF(e,t){this.source=e,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=t,this.destLen=0,this.ltree=new YF,this.dtree=new YF}var ZF=new YF,QF=new YF,$F=new Uint8Array(30),eI=new Uint16Array(30),tI=new Uint8Array(30),nI=new Uint16Array(30),rI=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),iI=new YF,aI=new Uint8Array(320);function oI(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 sI(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 cI=new Uint16Array(16);function lI(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)cI[i]=a,a+=e.table[i];for(i=0;i<r;++i)t[n+i]&&(e.trans[cI[t[n+i]]++]=i)}function uI(e){e.bitcount--||(e.tag=e.source[e.sourceIndex++],e.bitcount=7);var t=e.tag&1;return e.tag>>>=1,t}function dI(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 fI(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 pI(e,t,n){var r=dI(e,5,257),i=dI(e,5,1),a=dI(e,4,4),o,s,c;for(o=0;o<19;++o)aI[o]=0;for(o=0;o<a;++o){var l=dI(e,3,0);aI[rI[o]]=l}for(lI(iI,aI,0,19),s=0;s<r+i;){var u=fI(e,iI);switch(u){case 16:var d=aI[s-1];for(c=dI(e,2,3);c;--c)aI[s++]=d;break;case 17:for(c=dI(e,3,3);c;--c)aI[s++]=0;break;case 18:for(c=dI(e,7,11);c;--c)aI[s++]=0;break;default:aI[s++]=u;break}}lI(t,aI,0,r),lI(n,aI,r,i)}function mI(e,t,n){for(;;){var r=fI(e,t);if(r===256)return qF;if(r<256)e.dest[e.destLen++]=r;else{var i,a,o,s;for(r-=257,i=dI(e,$F[r],eI[r]),a=fI(e,n),o=e.destLen-dI(e,tI[a],nI[a]),s=o;s<o+i;++s)e.dest[e.destLen++]=e.dest[s]}}}function hI(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 JF;for(e.sourceIndex+=4,r=t;r;--r)e.dest[e.destLen++]=e.source[e.sourceIndex++];return e.bitcount=0,qF}function gI(e,t){var n=new XF(e,t),r,i,a;do{switch(r=uI(n),i=dI(n,2,0),i){case 0:a=hI(n);break;case 1:a=mI(n,ZF,QF);break;case 2:pI(n,n.ltree,n.dtree),a=mI(n,n.ltree,n.dtree);break;default:a=JF}if(a!==qF)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}sI(ZF,QF),oI($F,eI,4,3),oI(tI,nI,2,1),$F[28]=0,eI[28]=258;var _I=gI;function vI(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 yI(){this.x1=NaN,this.y1=NaN,this.x2=NaN,this.y2=NaN}yI.prototype.isEmpty=function(){return isNaN(this.x1)||isNaN(this.y1)||isNaN(this.x2)||isNaN(this.y2)},yI.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))},yI.prototype.addX=function(e){this.addPoint(e,null)},yI.prototype.addY=function(e){this.addPoint(null,e)},yI.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(vI(c[f],l[f],u[f],d[f],g)),f===1&&this.addY(vI(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(vI(c[f],l[f],u[f],d[f],v)),f===1&&this.addY(vI(c[f],l[f],u[f],d[f],v)));var y=(-p-Math.sqrt(_))/(2*m);0<y&&y<1&&(f===0&&this.addX(vI(c[f],l[f],u[f],d[f],y)),f===1&&this.addY(vI(c[f],l[f],u[f],d[f],y)))}}},yI.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 bI(){this.commands=[],this.fill=`black`,this.stroke=null,this.strokeWidth=1}bI.prototype.moveTo=function(e,t){this.commands.push({type:`M`,x:e,y:t})},bI.prototype.lineTo=function(e,t){this.commands.push({type:`L`,x:e,y:t})},bI.prototype.curveTo=bI.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})},bI.prototype.quadTo=bI.prototype.quadraticCurveTo=function(e,t,n,r){this.commands.push({type:`Q`,x1:e,y1:t,x:n,y:r})},bI.prototype.close=bI.prototype.closePath=function(){this.commands.push({type:`Z`})},bI.prototype.extend=function(e){if(e.commands)e=e.commands;else if(e instanceof yI){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)},bI.prototype.getBoundingBox=function(){for(var e=new yI,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},bI.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())},bI.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},bI.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},bI.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 xI(e){throw Error(e)}function SI(e,t){e||xI(t)}var K={fail:xI,argument:SI,assert:SI},CI=32768,wI=2147483648,TI={},q={},J={};function EI(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=EI(1),q.CHAR=function(e){return[e.charCodeAt(0)]},J.CHAR=EI(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=EI(2),q.SHORT=function(e){return e>=CI&&(e=-(2*CI-e)),[e>>8&255,e&255]},J.SHORT=EI(2),q.UINT24=function(e){return[e>>16&255,e>>8&255,e&255]},J.UINT24=EI(3),q.ULONG=function(e){return[e>>24&255,e>>16&255,e>>8&255,e&255]},J.ULONG=EI(4),q.LONG=function(e){return e>=wI&&(e=-(2*wI-e)),[e>>24&255,e>>16&255,e>>8&255,e&255]},J.LONG=EI(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=EI(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=EI(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=EI(3),q.NUMBER32=function(e){return[29,e>>24&255,e>>16&255,e>>8&255,e&255]},J.NUMBER32=EI(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,TI.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)},TI.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 DI={"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ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ`};TI.MACSTRING=function(e,t,n,r){var i=DI[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 OI=typeof WeakMap==`function`&&new WeakMap,kI,AI=function(e){if(!kI)for(var t in kI={},DI)kI[t]=new String(t);var n=kI[e];if(n!==void 0){if(OI){var r=OI.get(n);if(r!==void 0)return r}var i=DI[e];if(i!==void 0){for(var a={},o=0;o<i.length;o++)a[i.charCodeAt(o)]=o+128;return OI&&OI.set(n,a),a}}};q.MACSTRING=function(e,t){var n=AI(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 jI(e){return e>=-128&&e<=127}function MI(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 NI(e,t,n){for(var r=0,i=e.length,a=t;a<i&&r<64;){var o=e[a];if(!jI(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 PI(e,t,n){for(var r=0,i=e.length,a=t;a<i&&r<64;){var o=e[a];if(o===0||jI(o)&&a+1<i&&jI(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?MI(e,t,n):r>=-128&&r<=127?NI(e,t,n):PI(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 FI=typeof WeakMap==`function`&&new WeakMap;q.CHARSTRING=function(e){if(FI){var t=FI.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 FI&&FI.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 II(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)}}II.prototype.encode=function(){return q.TABLE(this)},II.prototype.sizeOf=function(){return J.TABLE(this)};function LI(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 RI(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 zI(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 BI(e){e.format===1?II.call(this,`coverageTable`,[{name:`coverageFormat`,type:`USHORT`,value:1}].concat(LI(`glyph`,e.glyphs))):e.format===2?II.call(this,`coverageTable`,[{name:`coverageFormat`,type:`USHORT`,value:2}].concat(zI(`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.`)}BI.prototype=Object.create(II.prototype),BI.prototype.constructor=BI;function VI(e){II.call(this,`scriptListTable`,zI(`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 II(`scriptTable`,[{name:`defaultLangSys`,type:`TABLE`,value:new II(`defaultLangSys`,[{name:`lookupOrder`,type:`USHORT`,value:0},{name:`reqFeatureIndex`,type:`USHORT`,value:r.reqFeatureIndex}].concat(LI(`featureIndex`,r.featureIndexes)))}].concat(zI(`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 II(`langSys`,[{name:`lookupOrder`,type:`USHORT`,value:0},{name:`reqFeatureIndex`,type:`USHORT`,value:n.reqFeatureIndex}].concat(LI(`featureIndex`,n.featureIndexes)))}]})))}]}))}VI.prototype=Object.create(II.prototype),VI.prototype.constructor=VI;function HI(e){II.call(this,`featureListTable`,zI(`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 II(`featureTable`,[{name:`featureParams`,type:`USHORT`,value:n.featureParams}].concat(LI(`lookupListIndex`,n.lookupListIndexes)))}]}))}HI.prototype=Object.create(II.prototype),HI.prototype.constructor=HI;function UI(e,t){II.call(this,`lookupListTable`,RI(`lookup`,e,function(e){var n=t[e.lookupType];return K.assert(!!n,`Unable to write GSUB lookup type `+e.lookupType+` tables.`),new II(`lookupTable`,[{name:`lookupType`,type:`USHORT`,value:e.lookupType},{name:`lookupFlag`,type:`USHORT`,value:e.lookupFlag}].concat(RI(`subtable`,e.subtables,n)))}))}UI.prototype=Object.create(II.prototype),UI.prototype.constructor=UI;var Y={Table:II,Record:II,Coverage:BI,ScriptList:VI,FeatureList:HI,LookupList:UI,ushortList:LI,tableList:RI,recordList:zI};function WI(e,t){return e.getUint8(t)}function GI(e,t){return e.getUint16(t,!1)}function KI(e,t){return e.getInt16(t,!1)}function qI(e,t){return e.getUint32(t,!1)}function JI(e,t){return e.getInt16(t,!1)+e.getUint16(t+2,!1)/65535}function YI(e,t){for(var n=``,r=t;r<t+4;r+=1)n+=String.fromCharCode(e.getInt8(r));return n}function XI(e,t,n){for(var r=0,i=0;i<n;i+=1)r<<=8,r+=e.getUint8(t+i);return r}function ZI(e,t,n){for(var r=[],i=t;i<n;i+=1)r.push(e.getUint8(i));return r}function QI(e){for(var t=``,n=0;n<e.length;n+=1)t+=String.fromCharCode(e[n]);return t}var $I={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=qI(this.data,this.offset+this.relativeOffset);return this.relativeOffset+=4,e},X.prototype.parseOffset32=X.prototype.parseULong,X.prototype.parseFixed=function(){var e=JI(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=qI(this.data,this.offset+this.relativeOffset+4);return e-=2082844800,this.relativeOffset+=8,e},X.prototype.parseVersion=function(e){var t=GI(this.data,this.offset+this.relativeOffset),n=GI(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+=$I[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 eL={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(eL),langSysRecords:X.recordList({tag:X.tag,langSys:X.pointer(eL)})})}))||[]},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:WI,getCard8:WI,getUShort:GI,getCard16:GI,getShort:KI,getULong:qI,getFixed:JI,getTag:YI,getOffset:XI,getBytes:ZI,bytesToString:QI,Parser:X};function tL(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 nL(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 rL(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)tL(n,s);else if(n.format===4)nL(n,s,e,t,r);else throw Error(`Only format 4 and 12 cmap tables are supported (found format `+n.format+`).`);return n}function iL(e,t,n){e.segments.push({end:t,start:t,delta:-(t-n),offset:0,glyphIndex:n})}function aL(e){e.segments.push({end:65535,start:65535,delta:1,offset:0})}function oL(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)iL(i,a.unicodes[o],n);i.segments=i.segments.sort(function(e,t){return e.start-t.start})}aL(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 sL={parse:rL,make:oL},cL=`.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(`,`),lL=`................................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(`.`),uL=`................................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(`.`),dL=`.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 fL(e){this.font=e}fL.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 pL(e){this.cmap=e}pL.prototype.charToGlyphIndex=function(e){return this.cmap.glyphIndexMap[e.codePointAt(0)]||0};function mL(e,t){this.encoding=e,this.charset=t}mL.prototype.charToGlyphIndex=function(e){var t=e.codePointAt(0),n=this.encoding[t];return this.charset.indexOf(n)};function hL(e){switch(e.version){case 1:this.names=dL.slice();break;case 2:this.names=Array(e.numberOfGlyphs);for(var t=0;t<e.numberOfGlyphs;t++)e.glyphNameIndex[t]<dL.length?this.names[t]=dL[e.glyphNameIndex[t]]:this.names[t]=e.names[e.glyphNameIndex[t]-dL.length];break;case 2.5:this.names=Array(e.numberOfGlyphs);for(var n=0;n<e.numberOfGlyphs;n++)this.names[n]=dL[n+e.glyphNameIndex[n]];break;case 3:this.names=[];break;default:this.names=[];break}}hL.prototype.nameToGlyphIndex=function(e){return this.names.indexOf(e)},hL.prototype.glyphIndexToName=function(e){return this.names[e]};function gL(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 _L(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 vL(e,t){t.lowMemory?_L(e):gL(e)}function yL(e,t,n,r,i){e.beginPath(),e.moveTo(t,n),e.lineTo(r,i),e.stroke()}var bL={line:yL};function xL(e,t){var n=t||new bI;return{configurable:!0,get:function(){return typeof n==`function`&&(n=n()),n},set:function(e){n=e}}}function SL(e){this.bindConstructorValues(e)}SL.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",xL(this,e.path))},SL.prototype.addUnicode=function(e){this.unicodes.length===0&&(this.unicode=e),this.unicodes.push(e)},SL.prototype.getBoundingBox=function(){return this.path.getBoundingBox()},SL.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 bI,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},SL.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},SL.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},SL.prototype.draw=function(e,t,n,r,i){this.getPath(t,n,r,i).draw(e)},SL.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)},SL.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`,bL.line(e,t,-1e4,t,1e4),bL.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`,bL.line(e,t+a*i,-1e4,t+a*i,1e4),bL.line(e,t+s*i,-1e4,t+s*i,1e4),bL.line(e,-1e4,n+-o*i,1e4,n+-o*i),bL.line(e,-1e4,n+-c*i,1e4,n+-c*i),e.strokeStyle=`green`,bL.line(e,t+l*i,-1e4,t+l*i,1e4)};function CL(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 wL(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}wL.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]},wL.prototype.push=function(e,t){this.glyphs[e]=t,this.length++};function TL(e,t){return new SL({index:t,font:e})}function EL(e,t,n,r,i,a){return function(){var o=new SL({index:t,font:e});return o.path=function(){n(o,r,i);var t=a(e.glyphs,o);return t.unitsPerEm=e.unitsPerEm,t},CL(o,`xMin`,`_xMin`),CL(o,`xMax`,`_xMax`),CL(o,`yMin`,`_yMin`),CL(o,`yMax`,`_yMax`),o}}function DL(e,t,n,r){return function(){var i=new SL({index:t,font:e});return i.path=function(){var t=n(e,i,r);return t.unitsPerEm=e.unitsPerEm,t},i}}var OL={GlyphSet:wL,glyphLoader:TL,ttfGlyphLoader:EL,cffGlyphLoader:DL};function kL(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(!kL(e[n],t[n]))return!1;return!0}else return!1}function AL(e){return e.length<1240?107:e.length<33900?1131:32768}function jL(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 ML(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 NL(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 PL(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 FL(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 PL(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 IL(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 LL(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(FL(r,o))}return IL(i)}function RL(e,t){return t=t<=390?cL[t]:e[t-391],t}function zL(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=RL(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=RL(n,i)),r[o.name]=i}return r}function BL(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 VL=[{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`}],HL=[{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 UL(e,t){return zL(LL(e,0,e.byteLength),VL,t)}function WL(e,t,n,r){return zL(LL(e,t,n),HL,r)}function GL(e,t,n,r){for(var i=[],a=0;a<n.length;a+=1){var o=UL(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=WL(e,c+t,s,r);o._defaultWidthX=l.defaultWidthX,o._nominalWidthX=l.nominalWidthX,l.subrs!==0&&(o._subrs=jL(e,c+l.subrs+t).objects,o._subrsBias=AL(o._subrs)),o._privateDict=l}i.push(o)}return i}function KL(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(RL(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(RL(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(RL(r,i)),i+=1}else throw Error(`Unknown charset format `+c);return s}function qL(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 mL(i,n)}function JL(e,t,n){var r,i,a,o,s=new bI,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 YL(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 XL(e,t,n,r){n.tables.cff={};var i=jL(e,jL(e,BL(e,t).endOffset,Z.bytesToString).endOffset),a=jL(e,i.endOffset,Z.bytesToString);n.gsubrs=jL(e,a.endOffset).objects,n.gsubrsBias=AL(n.gsubrs);var o=GL(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=GL(e,t,jL(e,c).objects,a.objects);s._fdArray=u,l+=t,s._fdSelect=YL(e,l,n.numGlyphs,u.length)}var d=t+s.private[1],f=WL(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=jL(e,d+f.subrs).objects,n.subrsBias=AL(n.subrs));var p;r.lowMemory?(p=ML(e,t+s.charStrings),n.nGlyphs=p.offsets.length):(p=jL(e,t+s.charStrings),n.nGlyphs=p.objects.length);var m=KL(e,t+s.charset,n.nGlyphs,a.objects);if(s.encoding===0?n.cffEncoding=new mL(lL,m):s.encoding===1?n.cffEncoding=new mL(uL,m):n.cffEncoding=qL(e,t+s.encoding,m),n.encoding=n.encoding||n.cffEncoding,n.glyphs=new OL.GlyphSet(n),r.lowMemory)n._push=function(r){var i=NL(r,p.offsets,e,t+s.charStrings);n.glyphs.push(r,OL.cffGlyphLoader(n,r,JL,i))};else for(var h=0;h<n.nGlyphs;h+=1){var g=p.objects[h];n.glyphs.push(h,OL.cffGlyphLoader(n,h,JL,g))}}function ZL(e,t){var n,r=cL.indexOf(e);return r>=0&&(n=r),r=t.indexOf(e),r>=0?n=r+cL.length:(n=cL.length+t.length,t.push(e)),n}function QL(){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 $L(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 eR(e,t,n){for(var r={},i=0;i<e.length;i+=1){var a=e[i],o=t[a.name];o!==void 0&&!kL(o,a.value)&&(a.type===`SID`&&(o=ZL(o,n)),r[a.op]={name:a.name,type:a.type,value:o})}return r}function tR(e,t){var n=new Y.Record(`Top DICT`,[{name:`dict`,type:`DICT`,value:{}}]);return n.dict=eR(VL,e,t),n}function nR(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 rR(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 iR(){return new Y.Record(`Global Subr INDEX`,[{name:`subrs`,type:`INDEX`,value:[]}])}function aR(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=ZL(i,t);n.fields.push({name:`glyph_`+r,type:`SID`,value:a})}return n}function oR(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 sR(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=oR(r);t.charStrings.push({name:r.name,type:`CHARSTRING`,value:i})}return t}function cR(e,t){var n=new Y.Record(`Private DICT`,[{name:`dict`,type:`DICT`,value:{}}]);return n.dict=eR(HL,e,t),n}function lR(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=QL(),n.nameIndex=$L([t.postScriptName]);var u=tR(i,l);return n.topDictIndex=nR(u),n.globalSubrIndex=iR(),n.charsets=aR(o,l),n.charStringsIndex=sR(e),n.privateDict=cR(a,l),n.stringIndex=rR(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=tR(i,l),n.topDictIndex=nR(u),n}var uR={parse:XL,make:lR};function dR(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 fR(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 pR={parse:dR,make:fR};function mR(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 hR(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 gR={parse:mR,make:hR};function _R(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 vR(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 yR(e,t,n,r,i,a,o){o.lowMemory?vR(e,t,n,r,i):_R(t,n,r,i,a)}function bR(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 xR={parse:yR,make:bR};function SR(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 CR(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 wR={make:SR,parse:CR};function TR(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 ER(e){return new Y.Table(`maxp`,[{name:`version`,type:`FIXED`,value:20480},{name:`numGlyphs`,type:`USHORT`,value:e}])}var DR={parse:TR,make:ER},OR=[`copyright`,`fontFamily`,`fontSubfamily`,`uniqueID`,`fullName`,`version`,`postScriptName`,`trademark`,`manufacturer`,`designer`,`description`,`manufacturerURL`,`designerURL`,`license`,`licenseURL`,`reserved`,`preferredFamily`,`preferredSubfamily`,`compatibleFullName`,`sampleText`,`postScriptFindFontName`,`wwsFamily`,`wwsSubfamily`],kR={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`},AR={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},jR={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 MR(e,t,n){switch(e){case 0:if(t===65535)return`und`;if(n)return n[t];break;case 1:return kR[t];case 3:return jR[t]}}var NR=`utf-16`,PR={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`},FR={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 IR(e,t,n){switch(e){case 0:return NR;case 1:return FR[n]||PR[t];case 3:if(t===1||t===10)return NR;break}}function LR(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=OR[f]||f,m=i.parseUShort(),h=i.parseUShort(),g=MR(l,d,n),_=IR(l,u,d);if(_!==void 0&&g!==void 0){var v=void 0;if(v=_===NR?TI.UTF16(e,s+h,m):TI.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 RR(e){var t={};for(var n in e)t[e[n]]=parseInt(n);return t}function zR(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 BR(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 VR(e,t){var n=BR(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 HR(e,t){var n,r=[],i={},a=RR(OR);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=RR(kR),l=RR(jR),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=AR[_],y=IR(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=VR(b,d);u.push(zR(g,v,_,n,b.length,x));var S=l[m];if(S!==void 0){var C=q.UTF16(h),w=VR(C,d);u.push(zR(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 UR={parse:LR,make:HR},WR=[{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 GR(e){for(var t=0;t<WR.length;t+=1){var n=WR[t];if(e>=n.begin&&e<n.end)return t}return-1}function KR(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 qR(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 JR={parse:KR,make:qR,unicodeRanges:WR,getUnicodeRange:GR};function YR(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=dL.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]>=dL.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 XR(){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 ZR={parse:YR,make:XR},QR=Array(9);QR[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.`)},QR[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()}},QR[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()}},QR[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 $R={sequenceIndex:X.uShort,lookupListIndex:X.uShort};QR[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,$R)}})};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,$R)}})};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,$R)}}K.assert(!1,`0x`+e.toString(16)+`: lookup type 5 format must be 1, 2 or 3.`)},QR[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($R)}})};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($R)}})};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($R)};K.assert(!1,`0x`+e.toString(16)+`: lookup type 6 format must be 1, 2 or 3.`)},QR[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:QR[t].call(n)}},QR[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 ez(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(QR)}:{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(QR),variations:n.parseFeatureVariationsList()}}var tz=Array(9);tz[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)))},tz[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))})))},tz[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))})))},tz[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)))}))})))},tz[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 nz(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,tz)}])}var rz={parse:ez,make:nz};function iz(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]=TI.UTF8(e,t+c,l)}return a}function az(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 oz={parse:iz,make:az};function sz(e){return Math.log(e)/Math.log(2)|0}function cz(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 lz(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 uz(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**sz(t.numTables);t.searchRange=16*n,t.entrySelector=sz(n),t.rangeShift=t.numTables*16-t.searchRange;for(var r=[],i=[],a=t.sizeOf()+lz().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=lz(s.tableName,cz(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 dz(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 fz(e){for(var t=0,n=0;n<e.length;n+=1)t+=e[n];return t/e.length}function pz(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 _=JR.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:fz(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=pR.make({flags:3,unitsPerEm:e.unitsPerEm,xMin:y.xMin,yMin:y.yMin,xMax:y.xMax,yMax:y.yMax,lowestRecPPEM:3,createdTimestamp:e.createdTimestamp}),x=gR.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=DR.make(e.glyphs.length),C=JR.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:dz(e,`xyvw`,{yMax:Math.round(y.ascender/2)}).yMax,sCapHeight:dz(e,`HIKLEFJMNTZBDPRAGOQSUVWXY`,y).yMax,usDefaultChar:e.hasChar(` `)?32:0,usBreakChar:e.hasChar(` `)?32:0},e.tables.os2)),w=xR.make(e.glyphs),ee=sL.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=UR.make(ae,se),le=se.length>0?wR.make(se):void 0,ue=ZR.make(),de=uR.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?oz.make(e.metas):void 0,pe=[b,x,S,C,ce,ee,ue,de,w];le&&pe.push(le),e.tables.gsub&&pe.push(rz.make(e.tables.gsub)),fe&&pe.push(fe);for(var me=uz(pe),he=cz(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 mz={make:uz,fontToTable:pz,computeCheckSum:cz};function hz(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 gz(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 _z(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 vz(e,t){this.font=e,this.tableName=t}vz.prototype={searchTag:hz,binSearch:gz,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=hz(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=hz(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=_z(e.ranges,t);return n?n.classId:0}},getCoverageIndex:function(e,t){switch(e.format){case 1:var n=gz(e.glyphs,t);return n>=0?n:-1;case 2:var r=_z(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 yz(e){vz.call(this,e,`gpos`)}yz.prototype=vz.prototype,yz.prototype.init=function(){var e=this.getDefaultScriptName();this.defaultKerningTables=this.getKerningTables(e)},yz.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},yz.prototype.getKerningTables=function(e,t){if(this.font.tables.gpos)return this.getLookupTables(e,t,`kern`,2)};function bz(e){vz.call(this,e,`gsub`)}function xz(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 Sz(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}bz.prototype=vz.prototype,bz.prototype.createDefaultTable=function(){return{version:1,scripts:[{tag:`DFLT`,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}}],features:[],lookups:[]}},bz.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},bz.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},bz.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},bz.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},bz.prototype.addSingle=function(e,t,n,r){var i=this.getLookupTables(n,r,e,1,!0)[0],a=Sz(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},bz.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=Sz(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},bz.prototype.addAlternate=function(e,t,n,r){var i=this.getLookupTables(n,r,e,3,!0)[0],a=Sz(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},bz.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(xz(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])},bz.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)}},bz.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 Cz(){return typeof window<`u`}function wz(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 Tz(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 Ez(e,t){if(!e)throw t}function Dz(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 Oz(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=Dz(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=Dz(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 kz(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 Az(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 jz(e){var t=new bI;if(!e)return t;for(var n=Az(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 Mz(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=kz(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=kz([s],c)[0],c.dx=o.x-s.x,c.dy=o.y-s.y,a=kz(i.points,c)}t.points=t.points.concat(a)}}return jz(t.points)}function Nz(e,t,n,r){for(var i=new OL.GlyphSet(r),a=0;a<n.length-1;a+=1){var o=n[a];o===n[a+1]?i.push(a,OL.glyphLoader(r,a)):i.push(a,OL.ttfGlyphLoader(r,a,Oz,e,t+o,Mz))}return i}function Pz(e,t,n,r){var i=new OL.GlyphSet(r);return r._push=function(a){var o=n[a];o===n[a+1]?i.push(a,OL.glyphLoader(r,a)):i.push(a,OL.ttfGlyphLoader(r,a,Oz,e,t+o,Mz))},i}function Fz(e,t,n,r,i){return i.lowMemory?Pz(e,t,n,r):Nz(e,t,n,r)}var Iz={getPath:jz,parse:Fz},Lz,Rz,zz,Bz;function Vz(e){this.font=e,this.getCommands=function(e){return Iz.getPath(e).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function Hz(e){return e}function Uz(e){return Math.sign(e)*Math.round(Math.abs(e))}function Wz(e){return Math.sign(e)*Math.round(Math.abs(e*2))/2}function Gz(e){return Math.sign(e)*(Math.round(Math.abs(e)+.5)-.5)}function Kz(e){return Math.sign(e)*Math.ceil(Math.abs(e))}function qz(e){return Math.sign(e)*Math.floor(Math.abs(e))}var Jz=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},Yz={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){Yz.setRelative(e,e,(c+l)/2,r,!0);return}Yz.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}},Xz={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){Xz.setRelative(e,e,(c+l)/2,r,!0);return}Xz.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(Yz),Object.freeze(Xz);function Zz(e,t){this.x=e,this.y=t,this.axis=void 0,this.slope=t/e,this.normalSlope=-e/t,Object.freeze(this)}Zz.prototype.distance=function(e,t,n,r){return this.x*Yz.distance(e,t,n,r)+this.y*Xz.distance(e,t,n,r)},Zz.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)},Zz.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},Zz.prototype.touch=function(e){e.xTouched=!0,e.yTouched=!0};function Qz(e,t){var n=Math.sqrt(e*e+t*t);return e/=n,t/=n,e===1&&t===0?Yz:e===0&&t===1?Xz:new Zz(e,t)}function $z(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)}$z.prototype.nextTouched=function(e){for(var t=this.nextPointOnContour;!e.touched(t)&&t!==this;)t=t.nextPointOnContour;return t},$z.prototype.prevTouched=function(e){for(var t=this.prevPointOnContour;!e.touched(t)&&t!==this;)t=t.prevPointOnContour;return t};var eB=Object.freeze(new $z(0,0)),tB={cvCutIn:17/16,deltaBase:9,deltaShift:.125,loop:1,minDis:1,autoFlip:!0};function nB(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=Yz,this.round=Uz}}Vz.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){nB.prototype=tB,i=this._fpgmState=new nB(`fpgm`,n.tables.fpgm),i.funcs=[],i.font=n,exports.DEBUG&&(console.log(`---EXEC FPGM---`),i.step=-1);try{Rz(i)}catch(e){console.log(`Hinting error in FPGM:`+e),this._errorState=3;return}}nB.prototype=i,r=this._prepState=new nB(`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{Rz(r)}catch(e){this._errorState<2&&console.log(`Hinting error in PREP:`+e),this._errorState=2}}if(!(this._errorState>1))try{return zz(e,r)}catch(e){this._errorState<1&&(console.log(`Hinting error:`+e),console.log(`Note: further hinting errors are silenced`)),this._errorState=1;return}}},zz=function(e,t){var n=t.ppem/t.font.unitsPerEm,r=n,i=e.components,a,o,s;if(nB.prototype=t,!i)s=new nB(`glyf`,e.instructions),exports.DEBUG&&(console.log(`---EXEC GLYPH---`),s.step=-1),Bz(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 nB(`glyf`,d.instructions),exports.DEBUG&&(console.log(`---EXEC COMP `+l+`---`),s.step=-1),Bz(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 nB(`glyf`,e.instructions),s.gZone=s.z0=s.z1=s.z2=o,s.contours=a,o.push(new $z(0,0),new $z(Math.round(e.advanceWidth*n),0)),exports.DEBUG&&(console.log(`---EXEC COMPOSITE---`),s.step=-1),Rz(s),o.length-=2)}return o},Bz=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 $z(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 $z(0,0),new $z(Math.round(e.advanceWidth*n),0)),Rz(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)}}},Rz=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=Lz[t[e.ip]],!r)throw Error(`unknown instruction: 0x`+Number(t[e.ip]).toString(16));r(e)}}};function rB(e){for(var t=e.tZone=Array(e.gZone.length),n=0;n<t.length;n++)t[n]=new $z(0,0)}function iB(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 aB(e,t){exports.DEBUG&&console.log(t.step,`SVTCA[`+e.axis+`]`),t.fv=t.pv=t.dpv=e}function oB(e,t){exports.DEBUG&&console.log(t.step,`SPVTCA[`+e.axis+`]`),t.pv=t.dpv=e}function sB(e,t){exports.DEBUG&&console.log(t.step,`SFVTCA[`+e.axis+`]`),t.fv=e}function cB(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=Qz(s,c)}function lB(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=Qz(s,c)}function uB(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SPVFS[]`,n,r),e.pv=e.dpv=Qz(r,n)}function dB(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SPVFS[]`,n,r),e.fv=Qz(r,n)}function fB(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 pB(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 mB(e){e.fv=e.pv,exports.DEBUG&&console.log(e.step,`SFVTPV[]`)}function hB(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 gB(e){e.rp0=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP0[]`,e.rp0)}function _B(e){e.rp1=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP1[]`,e.rp1)}function vB(e){e.rp2=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP2[]`,e.rp2)}function yB(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP0[]`,t),e.zp0=t,t){case 0:e.tZone||rB(e),e.z0=e.tZone;break;case 1:e.z0=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function bB(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP1[]`,t),e.zp1=t,t){case 0:e.tZone||rB(e),e.z1=e.tZone;break;case 1:e.z1=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function xB(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP2[]`,t),e.zp2=t,t){case 0:e.tZone||rB(e),e.z2=e.tZone;break;case 1:e.z2=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function SB(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||rB(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 CB(e){e.loop=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SLOOP[]`,e.loop)}function wB(e){exports.DEBUG&&console.log(e.step,`RTG[]`),e.round=Uz}function TB(e){exports.DEBUG&&console.log(e.step,`RTHG[]`),e.round=Gz}function EB(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SMD[]`,t),e.minDis=t/64}function DB(e){exports.DEBUG&&console.log(e.step,`ELSE[]`),iB(e,!1)}function OB(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`JMPR[]`,t),e.ip+=t-1}function kB(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCVTCI[]`,t),e.cvCutIn=t/64}function AB(e){var t=e.stack;exports.DEBUG&&console.log(e.step,`DUP[]`),t.push(t[t.length-1])}function jB(e){exports.DEBUG&&console.log(e.step,`POP[]`),e.stack.pop()}function MB(e){exports.DEBUG&&console.log(e.step,`CLEAR[]`),e.stack.length=0}function NB(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 PB(e){var t=e.stack;exports.DEBUG&&console.log(e.step,`DEPTH[]`),t.push(t.length)}function FB(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++)Rz(e),exports.DEBUG&&console.log(++e.step,o+1<r?`next loopcall`:`done loopcall`,o);e.ip=i,e.prog=a}function IB(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],Rz(e),e.ip=n,e.prog=r,exports.DEBUG&&console.log(++e.step,`returning from`,t)}function LB(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`CINDEX[]`,n),t.push(t[t.length-n])}function RB(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 zB(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 BB(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,eB);e&&(o=t.round(o)),i.setRelative(r,eB,o,a),i.touch(r),t.rp0=t.rp1=n}function VB(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 HB(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 UB(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 WB(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 GB(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 KB(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 qB(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 JB(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 YB(e){exports.DEBUG&&console.log(e.step,`RTDG[]`),e.round=Wz}function XB(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,eB);e&&(Math.abs(l-c)<t.cvCutIn&&(l=c),l=t.round(l)),o.setRelative(a,eB,l,s),t.zp0===0&&(a.xo=a.x,a.yo=a.y),o.touch(a),t.rp0=t.rp1=i}function ZB(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 QB(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 $B(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 eV(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 tV(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 nV(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`RCVT`,n),t.push(e.cvt[n]*64)}function rV(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,eB,e,!1)*64)}function iV(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 aV(e){exports.DEBUG&&console.log(e.step,`MPPEM[]`),e.stack.push(e.ppem)}function oV(e){exports.DEBUG&&console.log(e.step,`FLIPON[]`),e.autoFlip=!0}function sV(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 cV(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 lV(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 uV(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 dV(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 fV(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 pV(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 mV(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 hV(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`IF[]`,t),t||(iB(e,!0),exports.DEBUG&&console.log(e.step,`EIF[]`))}function gV(e){exports.DEBUG&&console.log(e.step,`EIF[]`)}function _V(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 vV(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 yV(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`NOT[]`,n),t.push(+!n)}function bV(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 xV(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SDB[]`,t),e.deltaBase=t}function SV(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SDS[]`,t),e.deltaShift=.5**t}function CV(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 wV(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 TV(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 EV(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 DV(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`ABS[]`,n),t.push(Math.abs(n))}function OV(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`NEG[]`,n),t.push(-n)}function kV(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`FLOOR[]`,n),t.push(Math.floor(n/64)*64)}function AV(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`CEILING[]`,n),t.push(Math.ceil(n/64)*64)}function jV(e,t){var n=t.stack,r=n.pop();exports.DEBUG&&console.log(t.step,`ROUND[]`),n.push(t.round(r/64)*64)}function MV(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 NV(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 PV(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SROUND[]`,t),e.round=Jz;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 FV(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`S45ROUND[]`,t),e.round=Jz;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 IV(e){exports.DEBUG&&console.log(e.step,`ROFF[]`),e.round=Hz}function LV(e){exports.DEBUG&&console.log(e.step,`RUTG[]`),e.round=Kz}function RV(e){exports.DEBUG&&console.log(e.step,`RDTG[]`),e.round=qz}function zV(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCANCTRL[]`,t)}function BV(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=Qz(s,c)}function VV(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 HV(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 UV(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 WV(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 GV(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCANTYPE[]`,t)}function KV(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 qV(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 JV(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)}Lz=[aB.bind(void 0,Xz),aB.bind(void 0,Yz),oB.bind(void 0,Xz),oB.bind(void 0,Yz),sB.bind(void 0,Xz),sB.bind(void 0,Yz),cB.bind(void 0,0),cB.bind(void 0,1),lB.bind(void 0,0),lB.bind(void 0,1),uB,dB,fB,pB,mB,hB,gB,_B,vB,yB,bB,xB,SB,CB,wB,TB,EB,DB,OB,kB,void 0,void 0,AB,jB,MB,NB,PB,LB,RB,void 0,void 0,void 0,FB,IB,zB,void 0,BB.bind(void 0,0),BB.bind(void 0,1),VB.bind(void 0,Xz),VB.bind(void 0,Yz),HB.bind(void 0,0),HB.bind(void 0,1),UB.bind(void 0,0),UB.bind(void 0,1),WB.bind(void 0,0),WB.bind(void 0,1),GB,KB,qB.bind(void 0,0),qB.bind(void 0,1),JB,YB,XB.bind(void 0,0),XB.bind(void 0,1),ZB,QB,$B,eV,tV,nV,rV.bind(void 0,0),rV.bind(void 0,1),void 0,iV.bind(void 0,0),iV.bind(void 0,1),aV,void 0,oV,void 0,void 0,sV,cV,lV,uV,dV,fV,pV,mV,hV,gV,_V,vV,yV,bV.bind(void 0,1),xV,SV,CV,wV,TV,EV,DV,OV,kV,AV,jV.bind(void 0,0),jV.bind(void 0,1),jV.bind(void 0,2),jV.bind(void 0,3),void 0,void 0,void 0,void 0,MV,bV.bind(void 0,2),bV.bind(void 0,3),NV.bind(void 0,1),NV.bind(void 0,2),NV.bind(void 0,3),PV,FV,void 0,void 0,IV,void 0,LV,RV,jB,jB,void 0,void 0,void 0,void 0,void 0,zV,BV.bind(void 0,0),BV.bind(void 0,1),VV,void 0,HV,UV,WV,GV,KV,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,qV.bind(void 0,1),qV.bind(void 0,2),qV.bind(void 0,3),qV.bind(void 0,4),qV.bind(void 0,5),qV.bind(void 0,6),qV.bind(void 0,7),qV.bind(void 0,8),JV.bind(void 0,1),JV.bind(void 0,2),JV.bind(void 0,3),JV.bind(void 0,4),JV.bind(void 0,5),JV.bind(void 0,6),JV.bind(void 0,7),JV.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 YV(e){this.char=e,this.state={},this.activeState=null}function XV(e,t,n){this.contextName=n,this.startIndex=e,this.endOffset=t}function ZV(e,t,n){this.contextName=e,this.openRange=null,this.ranges=[],this.checkStart=t,this.checkEnd=n}function QV(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 $V(e){this.eventId=e,this.subscribers=[]}function eH(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 $V(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 tH(e){this.tokens=[],this.registeredContexts={},this.contextCheckers=[],this.events={},this.registeredModifiers=[],eH.call(this,e)}YV.prototype.setState=function(e,t){return this.state[e]=t,this.activeState={key:e,value:this.state[e]},this.activeState},YV.prototype.getState=function(e){return this.state[e]||null},tH.prototype.inboundIndex=function(e){return e>=0&&e<this.tokens.length},tH.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)})])},tH.prototype.replaceRange=function(e,t,n,r){t=t===null?this.tokens.length:t;var i=n.every(function(e){return e instanceof YV});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.`}},tH.prototype.replaceToken=function(e,t,n){if(!isNaN(e)&&this.inboundIndex(e)&&t instanceof YV){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.`}},tH.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},tH.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.`}},tH.prototype.insertToken=function(e,t,n){return e.every(function(e){return e instanceof YV})?(this.tokens.splice.apply(this.tokens,[t,0].concat(e)),n||this.dispatch(`insertToken`,[e,t]),e):{FAIL:`insertToken: invalid token(s).`}},tH.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)},$V.prototype.subscribe=function(e){return typeof e==`function`?this.subscribers.push(e)-1:{FAIL:`invalid '`+this.eventId+`' event handler`}},$V.prototype.unsubscribe=function(e){this.subscribers.splice(e,1)},QV.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)},QV.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}},tH.prototype.rangeToText=function(e){if(e instanceof XV)return this.getRangeTokens(e).map(function(e){return e.char}).join(``)},tH.prototype.getText=function(){return this.tokens.map(function(e){return e.char}).join(``)},tH.prototype.getContext=function(e){return this.registeredContexts[e]||null},tH.prototype.on=function(e,t){var n=this.events[e];return n?n.subscribe(t):null},tH.prototype.dispatch=function(e,t){var n=this,r=this.events[e];r instanceof $V&&r.subscribers.forEach(function(e){e.apply(n,t||[])})},tH.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 ZV(e,t,n);return this.registeredContexts[e]=r,this.contextCheckers.push(r),r},tH.prototype.getRangeTokens=function(e){var t=e.startIndex+e.endOffset;return[].concat(this.tokens.slice(e.startIndex,t))},tH.prototype.getContextRanges=function(e){var t=this.getContext(e);return t?t.ranges:{FAIL:`context checker '`+e+`' is not registered.`}},tH.prototype.resetContextsRanges=function(){var e=this.registeredContexts;for(var t in e)if(e.hasOwnProperty(t)){var n=e[t];n.ranges=[]}},tH.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 QV(e,t);this.runContextCheck(n)}this.dispatch(`updateContextsRanges`,[this.registeredContexts])},tH.prototype.setEndOffset=function(e,t){var n=this.getContext(t).openRange.startIndex,r=new XV(n,e,t),i=this.getContext(t).ranges;return r.rangeId=t+`.`+i.length,i.push(r),this.getContext(t).openRange=null,r},tH.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 XV(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])}})},tH.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 QV(t,n);this.dispatch(`next`,[i]),this.runContextCheck(i);var a=new YV(r);this.tokens.push(a),this.dispatch(`newToken`,[a,i])}return this.dispatch(`end`,[this.tokens]),this.tokens};function nH(e){return/[\u0600-\u065F\u066A-\u06D2\u06FA-\u06FF]/.test(e)}function rH(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 iH(e){return/[\u0600-\u0605\u060C-\u060E\u0610-\u061B\u061E\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED]/.test(e)}function aH(e){return/[A-z]/.test(e)}function oH(e){return/\s/.test(e)}function sH(e){this.font=e,this.features={}}function cH(e){this.id=e.id,this.tag=e.tag,this.substitution=e.substitution}function lH(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 uH(e,t){return lH(e,t.coverage)===-1?null:e+t.deltaGlyphId}function dH(e,t){var n=lH(e,t.coverage);return n===-1?null:t.substitute[n]}function fH(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=lH(a,i);o!==-1&&n.push(o)}return n.length===e.length?n:-1}function pH(e,t){var n=t.inputCoverage.length+t.lookaheadCoverage.length+t.backtrackCoverage.length;if(e.context.length<n)return[];var r=fH(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&&iH(a[0].char);)a.shift();var o=new QV(a,0),s=fH(t.lookaheadCoverage,o),c=[].concat(e.backtrack);for(c.reverse();c.length&&iH(c[0].char);)c.shift();if(c.length<t.backtrackCoverage.length)return[];var l=new QV(c,0),u=fH(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 mH(e,t){var n=e.current,r=lH(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 hH(e,t){var n=lH(e,t.coverage);return n===-1?null:t.sequences[n]}sH.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[]},sH.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()},sH.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},sH.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},sH.prototype.getSubstitutionType=function(e,t){return e.lookupType.toString()+t.substFormat.toString()},sH.prototype.getLookupMethod=function(e,t){var n=this;switch(this.getSubstitutionType(e,t)){case`11`:return function(e){return uH.apply(n,[e,t])};case`12`:return function(e){return dH.apply(n,[e,t])};case`63`:return function(e){return pH.apply(n,[e,t])};case`41`:return function(e){return mH.apply(n,[e,t])};case`21`:return function(e){return hH.apply(n,[e,t])};default:throw Error(`lookupType: `+e.lookupType+` - substFormat: `+t.substFormat+` is not yet supported`)}},sH.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 cH({id:11,tag:e.tag,substitution:p}));break;case`12`:p=f(t.current),p&&a.splice(n,1,new cH({id:12,tag:e.tag,substitution:p}));break;case`63`:p=f(t),Array.isArray(p)&&p.length&&a.splice(n,1,new cH({id:63,tag:e.tag,substitution:p}));break;case`41`:p=f(t),p&&a.splice(n,1,new cH({id:41,tag:e.tag,substitution:p}));break;case`21`:p=f(t.current),p&&a.splice(n,1,new cH({id:21,tag:e.tag,substitution:p}));break}t=new QV(a,n),!(Array.isArray(p)&&!p.length)&&(p=null)}return a.length?a:null},sH.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},sH.prototype.getLookupSubtables=function(e){return e.subtables||null},sH.prototype.getLookupByIndex=function(e){return this.font.tables.gsub.lookups[e]||null},sH.prototype.getFeatureLookups=function(e){return e.lookupListIndexes.map(this.getLookupByIndex.bind(this))},sH.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 gH(e){var t=e.current,n=e.get(-1);return n===null&&nH(t)||!nH(n)&&nH(t)}function _H(e){var t=e.get(1);return t===null||!nH(t)}var vH={startCheck:gH,endCheck:_H};function yH(e){var t=e.current,n=e.get(-1);return(nH(t)||iH(t))&&!nH(n)}function bH(e){var t=e.get(1);switch(!0){case t===null:return!0;case!nH(t)&&!iH(t):var n=oH(t);if(!n)return!0;if(n){var r=!1;if(r=e.lookahead.some(function(e){return nH(e)||iH(e)}),!r)return!0}break;default:return!1}}var xH={startCheck:yH,endCheck:bH};function SH(e,t,n){t[n].setState(e.tag,e.substitution)}function CH(e,t,n){t[n].setState(e.tag,e.substitution)}function wH(e,t,n){e.substitution.forEach(function(r,i){t[n+i].setState(e.tag,r)})}function TH(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 EH={11:SH,12:CH,63:wH,41:TH};function DH(e,t,n){e instanceof cH&&EH[e.id]&&EH[e.id](e,t,n)}function OH(e){for(var t=[].concat(e.backtrack),n=t.length-1;n>=0;n--){var r=t[n],i=rH(r),a=iH(r);if(!i&&!a)return!0;if(i)return!1}return!1}function kH(e){if(rH(e.current))return!1;for(var t=0;t<e.lookahead.length;t++){var n=e.lookahead[t];if(!iH(n))return!0}return!1}function AH(e){var t=this,n=`arab`,r=this.featuresTags[n],i=this.tokenizer.getRangeTokens(e);if(i.length!==1){var a=new QV(i.map(function(e){return e.getState(`glyphIndex`)}),0),o=new QV(i.map(function(e){return e.char}),0);i.forEach(function(e,s){if(!iH(e.char)){a.setCurrentIndex(s),o.setCurrentIndex(s);var c=0;OH(o)&&(c|=1),kH(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 cH&&(DH(e,i,t),a.context[t]=e.substitution)})}}})}}function jH(e,t){return new QV(e.map(function(e){return e.activeState.value}),t||0)}function MH(e){var t=this,n=`arab`,r=this.tokenizer.getRangeTokens(e),i=jH(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 DH(e,r,a)}),i=jH(r))})}function NH(e){var t=e.current,n=e.get(-1);return n===null&&aH(t)||!aH(n)&&aH(t)}function PH(e){var t=e.get(1);return t===null||!aH(t)}var FH={startCheck:NH,endCheck:PH};function IH(e,t){return new QV(e.map(function(e){return e.activeState.value}),t||0)}function LH(e){var t=this,n=`latn`,r=this.tokenizer.getRangeTokens(e),i=IH(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 DH(e,r,a)}),i=IH(r))})}function RH(e){this.baseDir=e||`ltr`,this.tokenizer=new tH,this.featuresTags={}}RH.prototype.setText=function(e){this.text=e},RH.prototype.contextChecks={latinWordCheck:FH,arabicWordCheck:vH,arabicSentenceCheck:xH};function zH(e){var t=this.contextChecks[e+`Check`];return this.tokenizer.registerContextChecker(e,t.startCheck,t.endCheck)}function BH(){return zH.call(this,`latinWord`),zH.call(this,`arabicWord`),zH.call(this,`arabicSentence`),this.tokenizer.tokenize(this.text)}function VH(){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())})}RH.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},RH.prototype.applyFeatures=function(e,t){if(!e)throw Error(`No valid font was provided to apply features`);this.query||=new sH(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)}},RH.prototype.registerModifier=function(e,t,n){this.tokenizer.registerModifier(e,t,n)};function HH(){if(this.tokenizer.registeredModifiers.indexOf(`glyphIndex`)===-1)throw Error(`glyphIndex modifier is required to apply arabic presentation features.`)}function UH(){var e=this;this.featuresTags.hasOwnProperty(`arab`)&&(HH.call(this),this.tokenizer.getContextRanges(`arabicWord`).forEach(function(t){AH.call(e,t)}))}function WH(){var e=this,t=`arab`;this.featuresTags.hasOwnProperty(t)&&this.featuresTags[t].indexOf(`rlig`)!==-1&&(HH.call(this),this.tokenizer.getContextRanges(`arabicWord`).forEach(function(t){MH.call(e,t)}))}function GH(){var e=this,t=`latn`;this.featuresTags.hasOwnProperty(t)&&this.featuresTags[t].indexOf(`liga`)!==-1&&(HH.call(this),this.tokenizer.getContextRanges(`latinWord`).forEach(function(t){LH.call(e,t)}))}RH.prototype.checkContextReady=function(e){return!!this.tokenizer.getContext(e)},RH.prototype.applyFeaturesToContexts=function(){this.checkContextReady(`arabicWord`)&&(UH.call(this),WH.call(this)),this.checkContextReady(`latinWord`)&&GH.call(this),this.checkContextReady(`arabicSentence`)&&VH.call(this)},RH.prototype.processText=function(e){(!this.text||this.text!==e)&&(this.setText(e),BH.call(this),this.applyFeaturesToContexts())},RH.prototype.getBidiText=function(e){return this.processText(e),this.tokenizer.getText()},RH.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 KH(e){e||={},e.tables=e.tables||{},e.empty||(Ez(e.familyName,`When creating a new Font object, familyName is required.`),Ez(e.styleName,`When creating a new Font object, styleName is required.`),Ez(e.unitsPerEm,`When creating a new Font object, unitsPerEm is required.`),Ez(e.ascender,`When creating a new Font object, ascender is required.`),Ez(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 OL.GlyphSet(this,e.glyphs||[]),this.encoding=new fL(this),this.position=new yz(this),this.substitution=new bz(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 Vz(this)}})}KH.prototype.hasChar=function(e){return this.encoding.charToGlyphIndex(e)!==null},KH.prototype.charToGlyphIndex=function(e){return this.encoding.charToGlyphIndex(e)},KH.prototype.charToGlyph=function(e){var t=this.charToGlyphIndex(e),n=this.glyphs.get(t);return n||=this.glyphs.get(0),n},KH.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})},KH.prototype.stringToGlyphs=function(e,t){var n=this,r=new RH;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},KH.prototype.nameToGlyphIndex=function(e){return this.glyphNames.nameToGlyphIndex(e)},KH.prototype.nameToGlyph=function(e){var t=this.nameToGlyphIndex(e),n=this.glyphs.get(t);return n||=this.glyphs.get(0),n},KH.prototype.glyphIndexToName=function(e){return this.glyphNames.glyphIndexToName?this.glyphNames.glyphIndexToName(e):``},KH.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},KH.prototype.defaultRenderOptions={kerning:!0,features:[{script:`arab`,tags:[`init`,`medi`,`fina`,`rlig`]},{script:`latn`,tags:[`liga`,`rlig`]}]},KH.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},KH.prototype.getPath=function(e,t,n,r,i){var a=new bI;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},KH.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},KH.prototype.getAdvanceWidth=function(e,t,n){return this.forEachGlyph(e,0,0,t,n,function(){})},KH.prototype.draw=function(e,t,n,r,i,a){this.getPath(t,n,r,i,a).draw(e)},KH.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)})},KH.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)})},KH.prototype.getEnglishName=function(e){var t=this.names[e];if(t)return t.en},KH.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},KH.prototype.toTables=function(){return mz.fontToTable(this)},KH.prototype.toBuffer=function(){return console.warn(`Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.`),this.toArrayBuffer()},KH.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},KH.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(Cz())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=KF(),l=Tz(r);c.writeFileSync(e,l)}},KH.prototype.fsSelectionValues={ITALIC:1,UNDERSCORE:2,NEGATIVE:4,OUTLINED:8,STRIKEOUT:16,BOLD:32,REGULAR:64,USER_TYPO_METRICS:128,WWS:256,OBLIQUE:512},KH.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},KH.prototype.usWeightClasses={THIN:100,EXTRA_LIGHT:200,LIGHT:300,NORMAL:400,MEDIUM:500,SEMI_BOLD:600,BOLD:700,EXTRA_BOLD:800,BLACK:900};function qH(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 JH(e,t,n){var r=qH(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 YH(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 XH(e,t,n,r){for(var i=qH(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 ZH(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 QH(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(JH(r,e.axes[r],t));for(var i=0;i<e.instances.length;i++)n.fields=n.fields.concat(XH(i,e.instances[i],e.axes,t));return n}function $H(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(YH(e,t+a+d*s,n));for(var f=[],p=t+a+o*s,m=0;m<c;m++)f.push(ZH(e,p+m*l,u,n));return{axes:u,instances:f}}var eU={make:QH,parse:$H},tU=function(){return{coverage:this.parsePointer(X.coverage),attachPoints:this.parseList(X.pointer(X.uShortList))}},nU=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()}},rU=function(){return this.parseList(X.pointer(nU))},iU=function(){return{coverage:this.parsePointer(X.coverage),ligGlyphs:this.parseList(X.pointer(rU))}},aU=function(){return this.parseUShort(),this.parseList(X.pointer(X.coverage))};function oU(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(tU),ligCaretList:n.parsePointer(iU),markAttachClassDef:n.parsePointer(X.classDef)};return r>=1.2&&(i.markGlyphSets=n.parsePointer(aU)),i}var sU={parse:oU},cU=Array(10);cU[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.`)},cU[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)}}))}}},cU[3]=function(){return{error:`GPOS Lookup 3 not supported`}},cU[4]=function(){return{error:`GPOS Lookup 4 not supported`}},cU[5]=function(){return{error:`GPOS Lookup 5 not supported`}},cU[6]=function(){return{error:`GPOS Lookup 6 not supported`}},cU[7]=function(){return{error:`GPOS Lookup 7 not supported`}},cU[8]=function(){return{error:`GPOS Lookup 8 not supported`}},cU[9]=function(){return{error:`GPOS Lookup 9 not supported`}};function lU(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(cU)}:{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(cU),variations:n.parseFeatureVariationsList()}}var uU=Array(10);function dU(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,uU)}])}var fU={parse:lU,make:dU};function pU(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 mU(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 hU(e,t){var n=new Z.Parser(e,t),r=n.parseUShort();if(r===0)return pU(n);if(r===1)return mU(n);throw Error(`Unsupported kern table version (`+r+`).`)}var gU={parse:hU};function _U(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 vU={parse:_U};function yU(e,t){KF().readFile(e,function(e,n){if(e)return t(e.message);t(null,wz(n))})}function bU(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 xU(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 SU(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 CU(e,t){if(t.compression===`WOFF`){var n=new Uint8Array(e.buffer,t.offset+2,t.compressedLength-2),r=new Uint8Array(t.length);if(_I(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 wU(e,t){t??={};var n,r,i=new KH({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=xU(a,o);else if(c===`OTTO`)i.outlinesFormat=`cff`,o=Z.getUShort(a,4),s=xU(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=SU(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=CU(a,C),i.tables.cmap=sL.parse(w.data,w.offset),i.encoding=new pL(i.tables.cmap);break;case`cvt `:w=CU(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=CU(a,C),x=new Z.Parser(w.data,w.offset),i.tables.fpgm=x.parseByteList(C.length);break;case`head`:w=CU(a,C),i.tables.head=pR.parse(w.data,w.offset),i.unitsPerEm=i.tables.head.unitsPerEm,n=i.tables.head.indexToLocFormat;break;case`hhea`:w=CU(a,C),i.tables.hhea=gR.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=CU(a,C),r=wR.parse(w.data,w.offset);break;case`maxp`:w=CU(a,C),i.tables.maxp=DR.parse(w.data,w.offset),i.numGlyphs=i.tables.maxp.numGlyphs;break;case`name`:y=C;break;case`OS/2`:w=CU(a,C),i.tables.os2=JR.parse(w.data,w.offset);break;case`post`:w=CU(a,C),i.tables.post=ZR.parse(w.data,w.offset),i.glyphNames=new hL(i.tables.post);break;case`prep`:w=CU(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=CU(a,y);if(i.tables.name=UR.parse(ee.data,ee.offset,r),i.names=i.tables.name,f&&v){var te=n===0,ne=CU(a,v),re=vU.parse(ne.data,ne.offset,i.numGlyphs,te),ie=CU(a,f);i.glyphs=Iz.parse(ie.data,ie.offset,re,i,t)}else if(u){var ae=CU(a,u);uR.parse(ae.data,ae.offset,i,t)}else throw Error(`Font doesn't contain TrueType or CFF outlines.`);var oe=CU(a,g);if(xR.parse(i,oe.data,oe.offset,i.numberOfHMetrics,i.numGlyphs,i.glyphs,t),vL(i,t),_){var se=CU(a,_);i.kerningPairs=gU.parse(se.data,se.offset)}else i.kerningPairs={};if(p){var ce=CU(a,p);i.tables.gdef=sU.parse(ce.data,ce.offset)}if(m){var le=CU(a,m);i.tables.gpos=fU.parse(le.data,le.offset),i.position.init()}if(h){var ue=CU(a,h);i.tables.gsub=rz.parse(ue.data,ue.offset)}if(d){var de=CU(a,d);i.tables.fvar=eU.parse(de.data,de.offset,i.names)}if(b){var fe=CU(a,b);i.tables.meta=oz.parse(fe.data,fe.offset),i.metas=i.tables.meta}return i}function TU(e,t,n){n??={};var r=typeof window>`u`&&!n.isUrl?yU:bU;return new Promise(function(i,a){r(e,function(e,r){if(e){if(t)return t(e);a(e)}var o;try{o=wU(r,n)}catch(e){if(t)return t(e,null);a(e)}if(t)return t(null,o);i(o)})})}function EU(e,t){return wU(wz(KF().readFileSync(e)),t)}var DU=Object.freeze({__proto__:null,Font:KH,Glyph:SL,Path:bI,BoundingBox:yI,_parse:Z,parse:wU,load:TU,loadSync:EU});function OU(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(...qE(n)):void 0,c=r?o.makeVertex(...qE(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 dE(n)?O(n):k($a(`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 kU(e){if(e.length===0)return O([]);let t=U(),n=[],r=e.map(e=>{let r=e.startPoint?t.makeVertex(...qE(e.startPoint)):void 0,i=e.endPoint?t.makeVertex(...qE(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(!dE(e))return k($a(`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 AU=class{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 xk(this.sketches)}get innerSketches(){return this.sketches.slice(1)}get wires(){return WU(this)}face(){return UU(this)}extrude(e,t={}){return GU(this,e,t)}revolve(e,t={}){return KU(this,e,t)}loftWith(e,t){return qU(this,e,t)}};function jU(e){let t={};e.defaultOrigin&&(t.defaultOrigin=e.defaultOrigin),e.defaultDirection&&(t.defaultDirection=e.defaultDirection);let n=new JU(e.wire,t);return e.baseFace&&(n.baseFace=e.baseFace),n}function MU(e){return new AU(e.map(jU))}function NU(e){let t;return t=e.baseFace?Rk(e.baseFace,e.wire):j(Ik(e.wire)),t}function PU(e){return QT(j(DD(e.wire.wrapped)))}function FU(e,t,{origin:n}={}){let r=j(Ik(e.wire)),i=j(WF(r,n?qE(n):e.defaultOrigin,t?qE(t):[0,0,1]));return r.delete(),e.delete(),i}function IU(e,t,{extrusionDirection:n,extrusionProfile:r,twistAngle:i,origin:a}={}){let o=$E(oD(n?qE(n):e.defaultDirection),t),s=a?qE(a):e.defaultOrigin;if(r&&!i){let t=j(LF(e.wire,[...s],[...o],r));return e.delete(),t}if(i){let t=j(RF(e.wire,i,[...s],[...o],r));return e.delete(),t}let c=j(UF(j(Ik(e.wire)),[...o]));return e.delete(),c}function LU(e,t,n={}){let r=HO(e.wire),i=oD($E(GO(e.wire,1e-9),-1)),a=e.defaultDirection,o=$E(nD(i,a),-1),s=t(mD([...r],[...o],[...i]),[...r]),c;if(`sketches`in s&&Array.isArray(s.sketches)){let e=s.sketches;c=e[0];for(let t=1;t<e.length;t++)e[t]?.delete()}else c=s;let l={forceProfileSpineOthogonality:!0,...n};e.baseFace&&(l.support=e.baseFace.wrapped);let u=j(FF(c.wire,e.wire,l));return e.delete(),u}function RU(e,t,n={},r=!1){let i=Array.isArray(t)?[e,...t]:[e,t],a=j(OU(i.map(e=>e.wire),n,r));return i.forEach(e=>{e.delete()}),a}var zU=e=>{let t=e.map(e=>e.wrapped),n=j(OD(U().fillSurface(t)));return sE(n)||M(`guessFaceFromWires`,`Failed to create a face`),n},BU=(e,t)=>QT(U().fixWireOnFace(e.wrapped,t.wrapped,1e-9)),VU=e=>{let t,n,r=Ik(xk(e));return wa(r)?(t=r.value,n=e.slice(1)):(t=zU(e),n=e.slice(1).map(e=>BU(e,t))),Bk(t,n)},HU=(e,t)=>{let n=[],r=[],i=[];e.forEach(e=>{let[a,o,s]=j(t(e));n.push(a),r.push(o),i.push(s)});let a=VU(r),o=VU(i);return j(vA([a,...n,o]))};function UU(e){return Bk(e.outerSketch.face(),e.innerSketches.map(e=>e.wire))}function WU(e){return _A(e.sketches.map(e=>e.wire))}function GU(e,t,{extrusionDirection:n,extrusionProfile:r,twistAngle:i,origin:a}={}){let o=$E(oD(n?qE(n):e.outerSketch.defaultDirection),t);return r&&!i?HU(e.sketches,t=>LF(t.wire,a?qE(a):e.outerSketch.defaultOrigin,o,r,!0)):i?HU(e.sketches,t=>RF(t.wire,i,a?qE(a):e.outerSketch.defaultOrigin,o,r,!0)):j(UF(UU(e),o))}function KU(e,t,{origin:n}={}){let r=n?qE(n):e.outerSketch.defaultOrigin,i=t?qE(t):[0,0,1];return j(WF(UU(e),r,i))}function qU(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=bk(t.sketches,r),a={};return n.ruled!==void 0&&(a.ruled=n.ruled),e.clone().loftWith(i.clone(),a,!0)}),i=$T(j(DD(UU(e).wrapped)));return r.push(i,UU(t)),j(vA(r))}var JU=class e{wire;_defaultOrigin;_defaultDirection;_baseFace;constructor(e,{defaultOrigin:t=[0,0,0],defaultDirection:n=[0,0,1]}={}){this.wire=e,this._defaultOrigin=qE(t),this._defaultDirection=qE(n),this.baseFace=null}get baseFace(){return this._baseFace}set baseFace(e){this._baseFace&&this._baseFace.delete(),this._baseFace=e&&$T(j(DD(e.wrapped)))}delete(){this.wire.delete(),this.baseFace&&this.baseFace.delete()}clone(){let t=new e(QT(j(DD(this.wire.wrapped))),{defaultOrigin:this.defaultOrigin,defaultDirection:this.defaultDirection});return this.baseFace&&(t.baseFace=$T(j(DD(this.baseFace.wrapped)))),t}get defaultOrigin(){return this._defaultOrigin}set defaultOrigin(e){this._defaultOrigin=qE(e)}get defaultDirection(){return this._defaultDirection}set defaultDirection(e){this._defaultDirection=qE(e)}face(){return NU(this)}wires(){return PU(this)}faces(){return this.face()}revolve(e,t={}){return FU(this,e,t)}extrude(e,t={}){return IU(this,e,t)}sweepSketch(e,t={}){return LU(this,e,t)}loftWith(e,t={},n=!1){return RU(this,e,t,n)}},YU=class{sketches;constructor(e){this.sketches=e}wires(){return _A(this.sketches.map(e=>e instanceof JU?e.wire:e.wires))}faces(){return _A(this.sketches.map(e=>e.face()))}extrude(e,t={}){return _A(this.sketches.map(n=>n.extrude(e,t)))}revolve(e,t){return _A(this.sketches.map(n=>n.revolve(e,t)))}},XU={};async function ZU(e,t=`default`,n=!1){if(!n&&XU[t])return O(XU[t]);let r;if(typeof e==`string`){let t;try{t=await fetch(e)}catch(t){return k(no(N.FONT_FETCH_FAILED,`Failed to fetch font from ${e}: ${t instanceof Error?t.message:String(t)}`,t))}if(!t.ok)return k(no(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=DU.parse(r)}catch(e){return k(no(N.FONT_PARSE_FAILED,`Failed to parse font data: ${e instanceof Error?e.message:String(e)}`,e))}let a=i;return XU[t]=a,XU.default||=a,O(a)}var QU=(e=`default`)=>XU[e],$U=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 zP,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 eW(e,{startX:t=0,startY:n=0,fontSize:r=16,fontFamily:i=`default`}={}){let a=QU(i);a||=QU(),a||M(`text`,`No fonts loaded. Call loadFont() before using text functions.`);let o=a.getPath(e,-t,-n,r);return OP(Array.from($U(o.commands))).mirror([0,0])}var tW={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 nW(e){return typeof e==`string`&&e in tW}var rW=e=>e.IsNull()?[]:TE(W(e));function iW(e,t,n=!0){let r=U().projectEdges(e.wrapped,[...t.position],[...t.direction],[...t.xAxis]);return{visible:[...rW(r.visible.sharp),...rW(r.visible.smooth),...rW(r.visible.outline)],hidden:n?[...rW(r.hidden.sharp),...rW(r.hidden.smooth),...rW(r.hidden.outline)]:[]}}function aW(e=[0,0,0],t=[0,0,1],n){if(rD(t)<1e-12)return k(F(`CAMERA_ZERO_DIRECTION`,`Camera direction cannot be a zero-length vector`));let r;if(n)r=oD(n);else{let e=nD([0,0,1],t);rD(e)<1e-12&&(e=nD([0,1,0],t)),rD(e)<1e-12&&(e=nD([1,0,0],t)),r=oD(e)}let i=oD(nD(t,r));return O({position:e,direction:oD(t),xAxis:r,yAxis:i})}function oW(e,t){let n=oD(QE(e.position,t));return aW(e.position,n)}function sW(e){let t=tW[e];return aW([0,0,0],t.dir,t.xAxis)}function cW(e,t,n=!0){return iW(e,t,n)}var lW=(e,n=1e-7)=>{let r=new cP(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},uW=class extends RP{plane;constructor(e,t){super(),this.plane=e&&typeof e!=`string`?{...e}:j(_D(e??`XY`,t))}delete(){this.pendingCurves=[]}sagittaArcTo(e,t){return super.sagittaArcTo(e,-t)}buildWire(){try{var e=uT();this.pendingCurves.length||M(`Sketcher.buildWire`,`No lines to convert into a wire`);let t=e.u(new ST);return j(Fk(GN(this.pendingCurves,this.plane).map(e=>t.register(e))))}catch(t){e.e=t}finally{e.d()}}done(){return new JU(this.buildWire(),{defaultOrigin:this.plane.origin,defaultDirection:this.plane.zDir})}close(){return this._closeSketch(),this.done()}closeWithMirror(){qM(this.pointer,this.firstPoint)&&M(`Sketcher.closeWithMirror`,`Cannot close with a mirror when the sketch is already closed`);let e=this.buildWire(),t=yD(this.plane,this.pointer),n=nD(oD(QE(t,yD(this.plane,this.firstPoint))),this.plane.zDir),r=j(DD(e.wrapped));return new JU(j(Fk([e,QT(j(DD(U().mirror(r,qE(t),qE(n)))))])),{defaultOrigin:this.plane.origin,defaultDirection:this.plane.zDir})}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}},dW=class extends RP{face;_bounds;constructor(e,t=[0,0]){super(t),this.face=$T(j(DD(e.wrapped))),this._bounds=ID(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(Fk(this.pendingCurves.map(n=>ZT(e.buildEdgeOnSurface(n.wrapped,t)))));return e.buildCurves3d(n.wrapped),n}done(){try{var e=uT();let t=e.u(new ST),n=this.buildWire(),r=new JU(n);if(qO(n)){let e=t.register(r.clone().face()),n=LD(e,.5,.5),i=$E(BD(e),-1);r.defaultOrigin=[n[0],n[1],n[2]],r.defaultDirection=[i[0],i[1],i[2]]}else{let e=HO(n),t=BD(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()}},fW=(e,t={})=>{let n=t.plane&&typeof t.plane!=`string`?{...t.plane}:j(_D(t.plane??`XY`,t.origin));return new JU(j(Fk([Ek(e,n.origin,n.zDir)])),{defaultOrigin:[...n.origin],defaultDirection:[...n.zDir]})},pW=(e=1,t=2,n={})=>{let r=n.plane&&typeof n.plane!=`string`?{...n.plane}:j(_D(n.plane??`XY`,n.origin)),i=r.xDir,a=e,o=t;return t>e&&(i=dD(i,r.zDir,90*GE),a=t,o=e),new JU(j(Fk([j(Dk(a,o,r.origin,r.zDir,i))])),{defaultOrigin:[...r.origin],defaultDirection:[...r.zDir]})},mW=(e,t,n={})=>(n.plane&&typeof n.plane!=`string`?new uW(n.plane):new uW(n.plane,n.origin)).movePointerTo([-e/2,-t/2]).hLine(e).vLine(t).hLine(-e).vLine(-t).done(),hW=(e,t,n=0,r={})=>{let i=KP(e,t,n).sketchOnPlane(r.plane,r.origin),a={};return i.defaultOrigin&&(a.defaultOrigin=i.defaultOrigin),i.defaultDirection&&(a.defaultDirection=i.defaultDirection),new JU(i.wire,a)},gW=(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 uW(r.plane):new uW(r.plane,r.origin),o=Sk(i),s=a.movePointerTo([bk(o,0),bk(o,1)]);return n?i.forEach(e=>s.sagittaArcTo([bk(e,0),bk(e,1)],n)):i.forEach(e=>s.lineTo([bk(e,0),bk(e,1)])),s.done()},_W=(e,t,n=0)=>{let r=Math.PI/t,i=Math.cos(r)*e;return n>=0?i:i+n},vW=(e,t)=>{let n=[...VD(e)],r=[...BD(e)];return new JU(j(ek(WD(e),t)),{defaultOrigin:n,defaultDirection:r})},yW=(e,t={},{pointsCount:n=400,start:r=0,stop:i=1}={},a={})=>{try{var o=uT();let s=o.u(new ST),c=t.plane&&typeof t.plane!=`string`?{...t.plane}:j(_D(t.plane??`XY`,t.origin)),l=(i-r)/n,u=[...Array(n+1).keys()].map(t=>yD(c,e(r+t*l)));return new JU(j(Fk([s.register(j(jk(u,a)))])),{defaultOrigin:[...c.origin],defaultDirection:[...c.zDir]})}catch(e){o.e=e}finally{o.d()}},bW=(e,t,n,r=[0,0,0],i=[0,0,1],a=!1)=>new JU(j(Fk([Ok(e,t,n,qE(r),qE(i),a)]))),xW=(e,t,n)=>new uW().movePointerTo([-e/2,t/2]).hLine(e).vLine(-t).hLine(-e).close().extrude(n),SW=(e,t)=>qM(e,t,GM*100),CW=(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 wW(e,t,n,r,i){let a=HN(t,n,r.original.lastPoint);e(r),e(a)}function TW(e,t,n,r,i){let a=PN(t,n);e(r),e(a)}function EW(e,t,n,r,i){let a=CW(r.offset instanceof AN?YM(t,r.offset.tangentAt(1)):r.offset.firstPoint,t,n,i.offset instanceof AN?JM(n,i.offset.tangentAt(0)):i.offset.lastPoint);if(!a){let i=PN(t,n);e(r),e(i);return}let o=QM([(t[0]+n[0])/2,(t[1]+n[1])/2],a),s=QM(t,n);if(s<1e-18||o>16*s){let i=PN(t,n);e(r),e(i);return}let c=PN(t,a),l=PN(a,n);e(r),e(c),e(l)}var DW={round:wW,bevel:TW,miter:EW};function OW(e,t,n){let r=n.length===1?ao(n,0,`rawOffsets`):kW(n,e.original.lastPoint),i=ao(e.offset.splitAt([r],GM),0,`rawOffsets`),a=t.offset.splitAt([r],GM).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 kW(e,t){let n=ao(e,0,`selectClosestIntersection`),r=QM(n,t);for(let i=1;i<e.length;i++){let a=ao(e,i,`selectClosestIntersection`),o=QM(a,t);o<r&&(r=o,n=a)}return n}function AW(e){let t=new Map,n=(e,n)=>{let r=t.get(e)||[];t.set(e,[...r,...n])},r=new cP(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=ao(e,r,`offsetBlueprint`),{intersections:o,commonSegmentsPoints:s}=j(pP(t,a,GM)),c=[...o,...s].filter(e=>{let n=SW(e,t.firstPoint)||SW(e,t.lastPoint),r=SW(e,a.firstPoint)||SW(e,a.lastPoint);return!(n&&r)});c.length&&(n(i,c),n(r,c))}}),t}function jW(e,t,n={}){let r=e.orientation===`clockwise`?-t:t,i=e.curves.map(e=>({offset:gP(e,r),original:e})),a=[],o=null,s=i.at(-1);if(!s)return[];function c(e){if(e instanceof AN){a.push(e);return}o?e.offset instanceof AN?a.push(e.offset):SW(e.offset.firstPoint,e.offset.lastPoint)||a.push(PN(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(SW(t,r)){c(s),s=e;continue}let i=[];if(s.offset instanceof AN&&e.offset instanceof AN){let{intersections:t,commonSegmentsPoints:n}=j(pP(s.offset,e.offset,GM/100));i=[...t,...n]}if(i.length>0){let{splitPrevious:t,splitCurrent:n}=OW(s,e,i);c(t),s=n;continue}let a=DW[n.lineJoinType??`round`];a(c,t,r,s,e),s=e}return c(s),a}function MW(e,n,r={}){let i=jW(e,n,r);if(i.length<2)return null;let a=AW(i);if(!a.size){let t=new iP(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,GM*100)}),s=new cP(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-GM)});if(!l.length)return null;let u=lW(l).filter(e=>e.length>1).map(e=>new iP(e)).filter(e=>e.isClosed());return u.length?u.length===1?ao(u,0,`offsetBlueprint`):new xP(u):null}var NW=e=>{let t=ao(e,0,`fuseAll`);for(let n=1;n<e.length;n++)t=OF(t,ao(e,n,`fuseAll`));return t};function PW(e,t,n={}){if(e instanceof iP)return MW(e,t,n);if(e instanceof xP)return NW(e.blueprints.map(e=>PW(e,t,n)));if(e instanceof SP){let r=NW(e.blueprints.slice(1).map(e=>PW(e,-t,n)));return AF(PW(ao(e.blueprints,0,`offset`),t,n),r)}return null}function FW(e,t){return e instanceof iP?new iP(NN(e.curves,t)):e instanceof SP?new SP(e.blueprints.map(e=>FW(e,t))):e instanceof xP?new xP(e.blueprints.map(e=>FW(e,t))):e}function IW(e,t,n,r){let i=()=>!0;r&&(i=r.shouldKeep.bind(r));let a=[xk(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`),qM(xk(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 iP(a)}function LW(e,t,n,r){return t instanceof iP?IW(e,t,n,r):t instanceof SP?new SP(t.blueprints.map(t=>IW(e,t,n,r))):t instanceof xP?new xP(t.blueprints.map(t=>LW(e,t,n,r)).filter(e=>e!==null)):null}function RW(e,t,n){return LW(vP,e,t,n)}function zW(e,t,n){return LW(yP,e,t,n)}function BW(e,t){return e instanceof iP?jU(t):e instanceof SP?MU(t):new YU(t.map(e=>Array.isArray(e)?MU(e):jU(e)))}var VW=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 SP)return{type:`CompoundBlueprint`,blueprints:t.blueprints.map(e)};if(t instanceof xP)return{type:`Blueprints`,blueprints:t.blueprints.map(e)};if(t instanceof iP)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 ON}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(AF(this.innerShape,t.innerShape))}fuse(t){return new e(OF(this.innerShape,t.innerShape))}intersect(t){return new e(jF(this.innerShape,t.innerShape))}fillet(t,n){let r=n&&n(WP());return new e(RW(this.innerShape,t,r))}chamfer(t,n){let r=n&&n(WP());return new e(zW(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 BW(this.innerShape,n)}sketchOnFace(e,t){this.innerShape||M(`Drawing`,`Trying to sketch an empty drawing`);let n=this.innerShape.sketchOnFace(e,t);return BW(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(PW(this.innerShape,t,n))}approximate(t,n={}){return t!==`svg`&&M(`Drawing.approximate`,`Only 'svg' is supported for now`),new e(FW(this.innerShape,n))}get blueprint(){if(!(this.innerShape instanceof iP)){if(this.innerShape instanceof xP&&this.innerShape.blueprints.length===1&&this.innerShape.blueprints[0]instanceof iP)return this.innerShape.blueprints[0];M(`Drawing.blueprint`,`This drawing is not a blueprint`)}return this.innerShape}};function HW(e){function t(e){if(e.type===`CompoundBlueprint`)return new SP(e.blueprints.map(t));if(e.type===`Blueprints`)return new xP(e.blueprints.map(t));if(e.type===`Blueprint`)return new iP(e.curves.map(e=>kN(e)));M(`Drawing.deserialize`,`Unknown shape type for deserialization`)}return new VW(t(JSON.parse(e)))}var UW=class extends RP{constructor(e=[0,0]){super(),this.pointer=e,this.firstPoint=e,this.pendingCurves=[]}done(){return new VW(new iP(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 WW(e){let t=new UW;return e&&t.movePointerTo(e),t}function GW(e,t,n=0){return new VW(KP(e,t,n))}var KW=GW;function qW(e){return new VW(new iP([LN(e)]))}function JW(e,t){let[n,r]=[e,t].sort((e,t)=>e-t);return new VW(new iP([RN(r,n,r===e?[1,0]:[0,1])]))}function YW(e){return WW().movePointerTo([-e,0]).sagittaArc(2*e,0,e).sagittaArc(-2*e,0,e).close()}function XW(e,t){return WW().movePointerTo([-e,0]).halfEllipse(2*e,0,t).halfEllipse(-2*e,0,t).close()}function ZW(e,t,n=0){return new VW(GP(e,t,n))}function QW(e,{startX:t=0,startY:n=0,fontSize:r=16,fontFamily:i=`default`}={}){return new VW(eW(e,{startX:t,startY:n,fontSize:r,fontFamily:i}))}var $W=(e,t={},n={})=>{e.length<2&&M(`drawPointsInterpolation`,`Need at least 2 points for interpolation, got ${e.length}`);let r=[j(VN(e,t))],i=e[0],a=e[e.length-1];return n.closeShape&&i&&a&&!qM(i,a)&&r.push(PN(a,i)),new VW(new iP(r))},eG=(e,{pointsCount:t=400,start:n=0,stop:r=1,closeShape:i=!1}={},a={})=>{let o=(r-n)/t;return $W([...Array(t+1).keys()].map(t=>e(n+t*o)),a,{closeShape:i})},tG=e=>{try{var t=uT();let n=t.u(new ST),r=KW(1e3,1e3).sketchOnPlane(),i=n.register(j(Ik(r.wire))),a=lW(e.map(e=>eP(e,i))).map(e=>new iP(e));return a.length===0?new VW:a.length===1?new VW(a[0]):new VW(new xP(a))}catch(e){t.e=e}finally{t.d()}};function nG(e,t=`front`){let n;n=typeof t==`string`?j(sW(t)):t;let{visible:r,hidden:i}=cW(e,n);return{visible:tG(r),hidden:tG(i)}}function rG(e){try{var t=uT();let n=t.u(new ST),r=n.register($T(j(DD(e.wrapped)))),i=lW(TE(n.register(WD(r))).map(t=>eP(t,e))).map(e=>new iP(e));return i.length===0?new VW:i.length===1?new VW(i[0]):new VW(new xP(i))}catch(e){t.e=e}finally{t.d()}}function iG(e,t,n){return n===void 0?e.sketchOnPlane(t):e.sketchOnPlane(t,n)}function aG(e,t){return e.fuse(t)}function oG(e,t){return e.cut(t)}function sG(e,t){return e.intersect(t)}function cG(e,t,n){return e.fillet(t,n)}function lG(e,t,n){return e.chamfer(t,n)}function uG(e,t,n=0){return typeof t==`number`?e.translate(t,n):e.translate(t)}function dG(e,t,n){return e.rotate(t,n)}function fG(e,t,n){return e.scale(t,n)}function pG(e,t,n,r){return e.mirror(t,n,r)}function mG(e){let t=e.clone();return t.reverse(),t}function hG(e){return e.boundingBox}function gG(e){return e.firstPoint}function _G(e){return e.lastPoint}function vG(e,t,n){return e.splitAt(t,n)}function yG(e,t,n){return e.parameter(t,n)}function bG(e,t){return e.tangentAt(t)}function xG(e,t){return e.isOnCurve(t)}function SG(e,t){return e.distanceFrom(t)}function CG(e){return e.length===0?k(F(N.BLUEPRINT_EMPTY_CURVES,`createBlueprint: at least one curve is required`)):O(new iP(e))}function wG(e){return e.length===0?k(F(N.COMPOUND_BLUEPRINT_EMPTY,`createCompoundBlueprint: at least one blueprint (outer boundary) is required`)):O(new SP(e))}function TG(e){return e.boundingBox}function EG(e){return e.orientation}function DG(e,t){return e.isInside(t)}function OG(e){return e.toSVGPathD()}function kG(e,t,n){return e.translate(t,n)}function AG(e,t,n){return e.rotate(t,n)}function jG(e,t,n){return e.scale(t,n)}function MG(e,t,n,r){return e.mirror(t,n,r)}function NG(e,t,n,r){return e.stretch(t,n,r)}function PG(e,t,n){return e.sketchOnPlane(t,n)}function FG(e,t,n){return e.sketchOnFace(t,n)}function IG(e,t){return n(e,t*3)}function LG(e,t){return n(e,t)}function RG(e){let t=[`# brepjs OBJ export`],n=e.vertices.length/3;for(let r=0;r<n;r++){let[n,i,a]=IG(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]=IG(e.normals,n);t.push(`vn ${r} ${i} ${a}`)}let i=n=>{let[r,i,a]=LG(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(`
24
+ `)+`
25
+ `}var zG=5126,BG=5125,VG=34962,HG=34963,UG=[-Math.SQRT1_2,0,0,Math.SQRT1_2];function WG(e){return e===`Z`?[{mesh:0}]:[{name:`Z_up_to_Y_up`,rotation:UG,children:[1]},{mesh:0}]}function GG(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 KG(e){return e+3&-4}function qG(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 JG(e,t){let n=QG(e,`base64`,t);return JSON.stringify(n)}function YG(e,t){let{doc:n,binBuffer:r}=$G(e,t),i=JSON.stringify(n),a=new TextEncoder().encode(i),o=KG(a.length),s=new Uint8Array(o);s.set(a);for(let e=a.length;e<o;e++)s[e]=32;let c=KG(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 XG(e,t,n,r,i){return[{bufferView:0,componentType:BG,count:e.length,type:`SCALAR`},{bufferView:1,componentType:zG,count:t.length/3,type:`VEC3`,min:r,max:i},{bufferView:2,componentType:zG,count:n.length/3,type:`VEC3`}]}function ZG(e,t,n){return[{buffer:0,byteOffset:0,byteLength:e,target:HG},{buffer:0,byteOffset:KG(e),byteLength:t,target:VG},{buffer:0,byteOffset:KG(e)+t,byteLength:n,target:VG}]}function QG(e,t,n){let{vertices:r,normals:i,triangles:a}=e,o=n?.materials;if(o&&o.size>0&&e.faceGroups.length>0)return aK(e,t,o,n.upAxis??`Y`);let s=a.byteLength,c=r.byteLength,l=i.byteLength,u=KG(s)+c+l,{min:d,max:f}=GG(r),p={asset:{version:`2.0`,generator:`brepjs`},scene:0,scenes:[{nodes:[0]}],nodes:WG(n?.upAxis??`Y`),meshes:[{primitives:[{attributes:{POSITION:1,NORMAL:2},indices:0}]}],accessors:XG(a,r,i,d,f),bufferViews:ZG(s,c,l),buffers:[{byteLength:u}]};if(t===`base64`){let t=sK(e);p.buffers[0]={byteLength:u,uri:`data:application/octet-stream;base64,`+qG(t)}}return p}function $G(e,t){let n=t?.materials;if(n&&n.size>0&&e.faceGroups.length>0){let{doc:r,binBuffer:i}=oK(e,n,t.upAxis??`Y`);return{doc:r,binBuffer:i}}return{doc:QG(e,`glb`,t),binBuffer:sK(e)}}function eK(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=bk(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+=bk(o,e).count;let i=new Uint32Array(r),s=0;for(let e of n){let n=bk(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=KG(f+t)}let m=f;return{primitiveData:d,indexBufferInfos:p,verticesOffset:m,totalByteLength:m+r.byteLength+i.byteLength,uniqueMaterials:s}}function tK(e,t,n,r){let{vertices:i,normals:a}=e,{min:o,max:s}=GG(i),c=r.length;r.push({buffer:0,byteOffset:t,byteLength:i.byteLength,target:VG});let l=n.length;n.push({bufferView:c,componentType:zG,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:VG});let d=n.length;return n.push({bufferView:u,componentType:zG,count:a.length/3,type:`VEC3`}),{verticesAccIdx:l,normalsAccIdx:d}}function nK(e,t,n,r,i,a){let o=[];for(let s=0;s<e.length;s++){let c=bk(e,s),l=bk(t,s),u=a.length;a.push({buffer:0,byteOffset:l.byteOffset,byteLength:l.byteLength,target:HG});let d=i.length;i.push({bufferView:u,componentType:BG,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 rK(e,t,n=`Y`){let{primitiveData:r,indexBufferInfos:i,verticesOffset:a,totalByteLength:o,uniqueMaterials:s}=t,c=[],l=[],{verticesAccIdx:u,normalsAccIdx:d}=tK(e,a,c,l),f=nK(r,i,u,d,c,l);return{asset:{version:`2.0`,generator:`brepjs`},scene:0,scenes:[{nodes:[0]}],nodes:WG(n),meshes:[{primitives:f}],accessors:c,bufferViews:l,buffers:[{byteLength:o}],materials:s}}function iK(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=bk(i,e),n=bk(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 aK(e,t,n,r=`Y`){let i=eK(e,n),a=rK(e,i,r);if(t===`base64`){let t=iK(e,i);a.buffers[0]={byteLength:i.totalByteLength,uri:`data:application/octet-stream;base64,`+qG(t)}}return a}function oK(e,t,n=`Y`){let r=eK(e,t);return{doc:rK(e,r,n),binBuffer:iK(e,r)}}function sK(e){let{vertices:t,normals:n,triangles:r}=e,i=r.byteLength,a=t.byteLength,o=n.byteLength,s=KG(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),KG(i)),l.set(new Uint8Array(n.buffer,n.byteOffset,o),KG(i)+a),c}function cK(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(`
26
+ `)+`
27
+ `}function lK(e,t){let n=t?.curveSegments??32,r=[],i=uK(e);for(let e of i)for(let t of e.curves)r.push(...dK(t,n));return cK(r,t)}function uK(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(...uK(n));return t}return[]}function dK(e,t){return e.geomType===`LINE`?[{type:`LINE`,start:e.firstPoint,end:e.lastPoint}]:[fK(e,t)]}function fK(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 pK=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;pK[e]=t}function mK(e){let t=4294967295;for(let n of e)t=pK[(t^n)&255]^t>>>8;return(t^4294967295)>>>0}function hK(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 gK(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 _K(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 vK(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=hK(s,c,l,e);for(let{offset:e,entry:t}of n)l=gK(s,c,l,e,t);return _K(s,l,e.length,r,i),o}function yK(e){return e.replaceAll(`&`,`&amp;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`).replaceAll(`"`,`&quot;`)}function bK(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 xK(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 SK(e){let t=new Map,n=[];if(e!==void 0&&e.size>0)for(let r of e.values()){let e=bK(r);t.has(e)||(t.set(e,n.length),n.push(e))}return{colorIndexByHex:t,colorHexList:n}}function CK(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 wK(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=bK(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 TK(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 EK(e,t){let n=[];if(e.length>0){let t=e.map(e=>` <color color="${e}" />`).join(`
28
+ `);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`:bK(e.displayColor);return` <base name="${yK(e.name)}" displaycolor="${t}" />`}).join(`
29
+ `);n.push(` <basematerials id="3">\n${e}\n </basematerials>`)}return n}function DK(e,t,n,r,i){let a=xK(e),{colorIndexByHex:o,colorHexList:s}=SK(r),{materialIndexByName:c,materialList:l}=CK(i),u=TK(e,wK(e,r,i,o,c)),d=EK(s,l);return`<?xml version="1.0" encoding="UTF-8"?>
30
+ <model unit="${n}" xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02"${l.length>0?`
31
+ xmlns:m="http://schemas.microsoft.com/3dmanufacturing/material/2015/02"`:``}>
32
+ <resources>${d.length>0?`
33
+ `+d.join(`
34
+ `):``}
35
+ <object id="1" name="${yK(t)}" type="model">
36
+ <mesh>
37
+ <vertices>
38
+ ${a.join(`
39
+ `)}
40
+ </vertices>
41
+ <triangles>
42
+ ${u.join(`
43
+ `)}
44
+ </triangles>
45
+ </mesh>
46
+ </object>
47
+ </resources>
48
+ <build>
49
+ <item objectid="1" />
50
+ </build>
51
+ </model>`}function OK(e,t={}){let{name:n=`model`,unit:r=`millimeter`,colors:i,materials:a}=t,o=new TextEncoder,s=DK(e,n,r,i,a);function c(e,t){let n=o.encode(e),r=o.encode(t);return{name:n,data:r,crc:mK(r)}}return vK([c(`[Content_Types].xml`,`<?xml version="1.0" encoding="UTF-8"?>
52
+ <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
53
+ <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" />
54
+ <Default Extension="model" ContentType="application/vnd.ms-package.3dmanufacturing-3dmodel+xml" />
55
+ </Types>`),c(`_rels/.rels`,`<?xml version="1.0" encoding="UTF-8"?>
56
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
57
+ <Relationship Target="/3D/3dmodel.model" Id="rel0" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel" />
58
+ </Relationships>`),c(`3D/3dmodel.model`,s)])}function kK(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 AK(e){return[e[0],-e[1]]}function jK(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(PN(AK([t.cx,t.cy]),AK([a,o]))),t.cx=a,t.cy=o,i+=2}}function MK(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(PN(AK([t.cx,t.cy]),AK([a,o]))),t.cx=a,t.cy=o,i+=2}}function NK(e,t,n,r){for(let i of e){let e=n?t.cx+i:i;r.push(PN(AK([t.cx,t.cy]),AK([e,t.cy]))),t.cx=e}}function PK(e,t,n,r){for(let i of e){let e=n?t.cy+i:i;r.push(PN(AK([t.cx,t.cy]),AK([t.cx,e]))),t.cy=e}}function FK(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(BN(AK([t.cx,t.cy]),[AK([s,c]),AK([l,u])],AK([d,f]))),t.prevControlX=l,t.prevControlY=u,t.cx=d,t.cy=f,i+=6}}function IK(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(BN(AK([t.cx,t.cy]),[AK([c,l]),AK([u,d])],AK([f,p]))),t.prevControlX=u,t.prevControlY=d,t.cx=f,t.cy=p,t.lastCmd=`S`,i+=4}}function LK(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(BN(AK([t.cx,t.cy]),[AK([s,c])],AK([l,u]))),t.prevControlX=s,t.prevControlY=c,t.cx=l,t.cy=u,i+=4}}function RK(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(BN(AK([t.cx,t.cy]),[AK([c,l])],AK([u,d]))),t.prevControlX=c,t.prevControlY=l,t.cx=u,t.cy=d,t.lastCmd=`T`,i+=2}}function zK(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[FN(AK([e,t]),AK(c),AK([e,s])),FN(AK([e,s]),AK(l),AK([e,t]))]}catch{return[]}}function BK(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[FN(AK([e,t]),AK([b,x]),AK([n,r]))]}catch{return[PN(AK([e,t]),AK([n,r]))]}}function VK(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(PN(AK([t.cx,t.cy]),AK([d,f])));else{let e=d-t.cx,n=f-t.cy;Math.sqrt(e*e+n*n)<1e-10?r.push(...zK(t.cx,t.cy,s,c,u)):r.push(...BK(t.cx,t.cy,d,f,s,c,l,u))}t.cx=d,t.cy=f,i+=7}}function HK(e,t){(Math.abs(e.cx-e.sx)>1e-10||Math.abs(e.cy-e.sy)>1e-10)&&t.push(PN(AK([e.cx,e.cy]),AK([e.sx,e.sy]))),e.cx=e.sx,e.cy=e.sy}function UK(e){let t=kK(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`:jK(i,r,t,n);break;case`L`:MK(i,r,t,n);break;case`H`:NK(i,r,t,n);break;case`V`:PK(i,r,t,n);break;case`C`:FK(i,r,t,n);break;case`S`:IK(i,r,t,n);break;case`Q`:LK(i,r,t,n);break;case`T`:RK(i,r,t,n);break;case`A`:VK(i,r,t,n);break;case`Z`:HK(r,n);break}a!==`S`&&a!==`T`&&(r.lastCmd=a)}return n}function WK(e){try{let t=UK(e);return t.length===0?k(no(`SVG_EMPTY_PATH`,`SVG path produced no curves`)):O(new iP(t))}catch(e){return k(no(`SVG_PARSE_FAILED`,`Failed to parse SVG path: ${e instanceof Error?e.message:String(e)}`))}}function GK(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=WK(l);u.ok&&n.push(u.value)}return n.length===0?k(no(`SVG_NO_PATHS`,`No <path> elements found in SVG`)):O(n)}catch(e){return k(no(`SVG_IMPORT_FAILED`,`Failed to import SVG: ${e instanceof Error?e.message:String(e)}`))}}function KK(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(no(N.STEP_EXPORT_CONFIGURED_FAILED,`Configured STEP export failed`,e))}}async function qK(e){try{let t=await e.arrayBuffer(),n=U().importSTEP(t);return n.length===0?k(no(`STEP_IMPORT_FAILED`,`STEP file contains no valid geometry`)):O(W(n[0]))}catch{return k(no(`STEP_IMPORT_FAILED`,`Failed to load STEP file`))}}async function JK(e){try{let t=await e.arrayBuffer(),n=U().importSTL(t);return n.IsNull()?k(no(`STL_IMPORT_FAILED`,`Failed to create solid from STL mesh`)):O(W(n))}catch{return k(no(`STL_IMPORT_FAILED`,`Failed to load STL file`))}}async function YK(e){try{let t=await e.arrayBuffer(),n=U().importIGES(t);return n.length===0?k(no(`IGES_IMPORT_FAILED`,`IGES file contains no valid geometry`)):O(W(n[0]))}catch{return k(no(`IGES_IMPORT_FAILED`,`Failed to load IGES file`))}}function XK(e,t,n={}){let r=eW(e,t);return new YU((typeof n.plane==`string`||n.plane===void 0?r.sketchOnPlane(n.plane,n.origin):r.sketchOnPlane(n.plane)).map(e=>Array.isArray(e)?new AU(e.map(jU)):jU(e)))}function ZK(e,t){let n=t?.fontSize??1,r=QU(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 QK(e){let t=e?.fontSize??1,n=QU(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 $K(e,t){let n=0,r=ND(t);if(e.surfaceType!==void 0)if(r===e.surfaceType)n+=1;else return-1/0;if(e.normal!==void 0){let r=BD(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=VD(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=LM(t);if(r.ok&&r.value>0){let t=Math.abs(Math.log(e.area/r.value));t>1&&(n-=t)}}return n}function eq(e){let t=ND(e),n=BD(e),r=VD(e),i=LM(e);return{entityType:`face`,surfaceType:t,normal:n,centroid:r,area:i.ok?i.value:void 0}}var tq=.9;function nq(e){if(e[2]>tq)return`box:top`;if(e[2]<-.9)return`box:bottom`;if(e[1]>tq)return`box:back`;if(e[1]<-.9)return`box:front`;if(e[0]>tq)return`box:right`;if(e[0]<-.9)return`box:left`}function rq(e,t){let n=EE(e),r=new Map;if(t===`box`){for(let e of n){let t=nq(BD(e));t!==void 0&&!r.has(t)&&r.set(t,IO(e))}return r}let i=0;for(let e of n)r.set(`${t}:face_${i}`,IO(e)),i++;return r}function iq(e,t,n){return{origin:e,role:t,hint:eq(n)}}function aq(e,n,r){let i=e.get(n);if(!i)return e;let a=new Map;for(let[e,n]of i){if(r.deleted.has(n))continue;let i=r.modified.get(n);i&&i.length>0?a.set(e,t(i,0)):a.set(e,n)}let o=new Map;for(let[t,r]of e)t===n?o.set(t,a):o.set(t,r);return o}var oq=.1,sq=.5;function cq(e,t,n,r){let i=EE(n),a=r??$K,o=t.get(e.origin)?.get(e.role);if(o!==void 0){for(let e of i)if(IO(e)===o)return{face:e,confidence:`exact`};return{ref:e,reason:`deleted`}}let s=-1/0,c,l=-1/0,u=[];for(let t of i){let n=a(e.hint,t);n>sq&&u.push([t,n]),n>s?(l=s,s=n,c=t):n>l&&(l=n)}return c!==void 0&&s>sq?s-l<oq&&u.length>1?{ref:e,reason:`ambiguous`,candidates:u.filter(([,e])=>e>=s-oq).map(([e])=>e)}:{face:c,confidence:`geometric-fallback`}:{ref:e,reason:`not-found`}}function lq(e){return e.type===`init`}function uq(e){return e.type===`operation`}function dq(e){return e.type===`dispose`}function fq(e){return e.success}function pq(e){return!e.success}function mq(){return{pending:new Map}}function hq(e,t){let n=new Map(e.pending);return n.set(t.id,t),{pending:n}}function gq(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 _q(e){return e.pending.size}function vq(e){return e.pending.size===0}function yq(e,t){for(let n of e.pending.values())n.reject(t);return{pending:new Map}}function bq(e,t){let n=t.data,r=e.get(n.id);if(r)if(e.delete(n.id),fq(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 xq(e){let{worker:t,wasmUrl:n}=e,r=new Map,i=!1;function a(){return crypto.randomUUID()}function o(e){bq(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})},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 Sq(){return{operations:new Map}}function Cq(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function wq(e,t){let n=globalThis;n.onmessage=async r=>{let i=r.data;if(lq(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:e instanceof Error?e.message:String(e)};n.postMessage(t)}return}if(uq(i)){let t=e.operations.get(i.operation);if(!t){let e={id:i.id,success:!1,error:`Unknown operation: ${i.operation}`};n.postMessage(e);return}try{let e=t(i.shapesBrep,i.parameters),r={id:i.id,success:!0,...e.resultBrep===void 0?{}:{resultBrep:e.resultBrep},...e.resultData===void 0?{}:{resultData:e.resultData}};n.postMessage(r)}catch(e){let t={id:i.id,success:!1,error:e instanceof Error?e.message:String(e)};n.postMessage(t)}return}if(dq(i)){let e={id:i.id,success:!0};n.postMessage(e),n.close?.()}}}var Tq=Object.defineProperty,Eq=(e,t)=>{let n={};for(var r in e)Tq(n,r,{get:e[r],enumerable:!0});return t||Tq(n,Symbol.toStringTag,{value:`Module`}),n},Dq=1,Oq=2;function kq(e,t){t===`commonFace`&&e.SetGlue(Dq),t===`sameFace`&&e.SetGlue(Oq)}function Aq(e){return typeof e==`number`}function jq(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 Mq(e){return typeof e==`number`?!0:Array.isArray(e)&&e.length===2?e.every(Aq):!1}function Nq(e,t){let n=n=>{let r=e.findAll(n);if(r.length===0)return[];let i=0,a=aD(WE(xk(r)),t);for(let e=1;e<r.length;e++){let n=aD(WE(bk(r,e)),t);n<a&&(a=n,i=e)}return[bk(r,i)]},r=e=>{let t=n(e);return t.length===0?k(ro(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found 0 element(s)`)):O(xk(t))};return{...e,findAll:n,findUnique:r}}function Pq(e){return cN(`vertex`,e,Pq,(t,n)=>({nearestTo:t=>Nq(Pq(e),t),atPosition:(e,t=1e-4)=>n(n=>aD(WE(n),e)<t),withinBox:(e,t)=>n(n=>{let r=WE(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=WE(n);return Math.abs(aD(i,t)-e)<r})}))}function Fq(){return Pq([])}var Iq=new Map,Lq=null,Rq=null;function zq(e,t){Iq.set(e,t),Lq||=e,e===Lq&&(Rq=t)}function Bq(e){if(!e&&Rq)return Rq;let t=e??Lq;if(!t)throw Error(`brepjs voxel engine not initialized. Call initVoxel() (or registerVoxel()) before using voxel operations.`);let n=Iq.get(t);if(!n)throw Error(`brepjs: voxel engine '${t}' is not registered.`);return n}function Vq(){return Lq}function Hq(e,t=`voxel`){zq(t,e),Lq=t,Rq=e}function Uq(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 Wq(e,t){return Uq(e)||(t.length%3==0?null:F(`VOXEL_INVALID_QUERIES`,`queries length must be a multiple of 3 (flat xyz).`))}function Gq(e){try{return O(Bq(e))}catch(e){return k(to(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function Kq(e,t,n){let r=Wq(e,t);if(r)return k(r);let i=Gq(n);return A(i)?i:O(i.value.winding_numbers(e.vertices,e.triangles,t))}function qq(e,t,n){let r=Wq(e,t);if(r)return k(r);let i=Gq(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 Jq=48,Yq=2;function Xq(e,t,n){let r=Uq(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??Jq,a=t?.padding??Yq;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=Gq(n);if(A(o))return o;try{try{var s=uT();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 Zq=.001;function Qq(e,t=Zq){try{let n=dk(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 $q=48,eJ=2,tJ={union:0,intersection:1,difference:2};function nJ(e){let t=e?.resolution??$q,n=e?.padding??eJ;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 rJ(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 iJ(e,t,n,r){let i=Uq(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=nJ(n);if(A(a))return a;let o=Gq(r);if(A(o))return o;try{try{var s=uT();return rJ(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 aJ(e,t,n,r){let i=Uq(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=nJ(n);if(A(a))return a;let o=Gq(r);if(A(o))return o;try{try{var s=uT();return rJ(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 oJ(e,t,n,r,i){let a=Uq(e);if(a)return k(a);let o=Uq(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=tJ[n],c=nJ(r);if(A(c))return c;let l=Gq(i);if(A(l))return l;try{try{var u=uT();return rJ(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 sJ(e,t,n,r){let i=Qq(e);return A(i)?i:iJ(i.value,t,n,r)}function cJ(e,t,n,r){let i=Qq(e);return A(i)?i:aJ(i.value,t,n,r)}function lJ(e,t,n,r,i){let a=Qq(e);if(A(a))return a;let o=Qq(t);return A(o)?o:oJ(a.value,o.value,n,r,i)}var uJ=48,dJ=2,fJ={union:0,intersection:1,difference:2};function pJ(e){let t=e?.resolution??uJ,n=e?.padding??dJ;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 mJ(e){try{var t=uT();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 hJ(e){return{raw:e,delete(){e.free()}}}function gJ(e){return _J(e)}function _J(e){let t=xT(hJ(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,fJ[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=mJ(this.value);if(A(e))throw Error(e.error.message);return e.value}};return n}function vJ(e){return!e.disposed}function yJ(){return k(F(`VOXEL_FIELD_DISPOSED`,`the voxel field handle has been disposed.`))}function bJ(e,t,n){let r=Uq(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=pJ(t);if(A(i))return i;let a=Gq(n);if(A(a))return a;try{return O(_J(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 xJ(e,t,n,r,i){let a=Uq(e);if(a)return k(a);let o=Uq(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=pJ(r);if(A(s))return s;let c=Gq(i);if(A(c))return c;try{return O(_J(c.value.VoxelField.boolean_of(e.vertices,e.triangles,t.vertices,t.triangles,fJ[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 SJ(e,t,n){if(!vJ(e)||!vJ(t))return yJ();try{return e.value.boolean(t.value,fJ[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 CJ(e,t){if(!vJ(e))return yJ();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 wJ(e,t){if(!vJ(e))return yJ();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 TJ(e){if(!vJ(e))return yJ();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 EJ(e){if(!vJ(e))return yJ();try{return mJ(e.value)}catch(e){return k(I(`VOXEL_FIELD_CONTOUR_FAILED`,e instanceof Error?e.message:`voxel field contour failed.`,e))}}function DJ(e,t,n){let r=Qq(e);return A(r)?r:bJ(r.value,t,n)}function OJ(e,t,n,r,i){let a=Qq(e);if(A(a))return a;let o=Qq(t);return A(o)?o:xJ(a.value,o.value,n,r,i)}var kJ=48,AJ=2;function jJ(e){try{return O(Bq(e))}catch(e){return k(to(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function MJ(e){let t=e?.resolution??kJ,n=e?.padding??AJ;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 NJ(e){return{raw:e,delete(){e.free()}}}var PJ={offsetField(e){return FJ(this.value.offset_field(e.value))},roundField(e){return FJ(this.value.round_field(e.value))},shellField(e){return FJ(this.value.shell_field(e.value))},smoothUnionField(e,t){return FJ(this.value.smooth_union_field(e.value,t.value))}};function FJ(e){let t=xT(NJ(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},union(e){return FJ(this.value.union(e.value))},intersection(e){return FJ(this.value.intersection(e.value))},difference(e){return FJ(this.value.difference(e.value))},smoothUnion(e,t){return FJ(this.value.smooth_union(e.value,t))},smoothIntersection(e,t){return FJ(this.value.smooth_intersection(e.value,t))},smoothDifference(e,t){return FJ(this.value.smooth_difference(e.value,t))},offset(e){return FJ(this.value.offset(e))},round(e){return FJ(this.value.round(e))},shell(e){return FJ(this.value.shell(e))},onion(e){return FJ(this.value.onion(e))},...PJ,translate(e,t,n){return FJ(this.value.translate(e,t,n))},rotate(e,t,n,r){return FJ(this.value.rotate(e,t,n,r))},scale(e){return FJ(this.value.scale(e))},rasterize(e){return IJ(this.value,e)},rasterizeIn(e,t){return LJ(this.value,e,t)}}}function IJ(e,t){let n=MJ(t);if(A(n))return n;try{return O(gJ(e.rasterize(n.value.resolution,n.value.padding)))}catch(e){return RJ(e)}}function LJ(e,t,n){let r=MJ(n);if(A(r))return r;let i=zJ(t);if(i)return k(i);try{return O(gJ(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 RJ(e)}}function RJ(e){return k(I(`SDF_RASTERIZE_FAILED`,e instanceof Error?e.message:`SDF rasterization failed (grid too large?).`,e))}function zJ(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 BJ(e,t){let n=jJ(t);if(A(n))return n;try{return O(FJ(e(n.value)))}catch(e){return k(I(`SDF_BUILD_FAILED`,e instanceof Error?e.message:`SDF primitive construction failed.`,e))}}function VJ(e,t){return BJ(t=>t.Sdf.sphere(e),t)}function HJ(e,t,n,r){return BJ(r=>r.Sdf.box_(e,t,n),r)}function UJ(e,t,n,r,i){return BJ(i=>i.Sdf.rounded_box(e,t,n,r),i)}function WJ(e,t,n){return BJ(n=>n.Sdf.cylinder(e,t),n)}function GJ(e,t,n){return BJ(n=>n.Sdf.cone(e,t),n)}function KJ(e,t,n,r){return BJ(r=>r.Sdf.capsule(e[0],e[1],e[2],t[0],t[1],t[2],n),r)}function qJ(e,t,n){return BJ(n=>n.Sdf.torus(e,t),n)}function JJ(e,t,n){return BJ(n=>n.Sdf.plane(e[0],e[1],e[2],t),n)}function YJ(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 XJ(e,t,n,r){let i=YJ(e);if(A(i))return i;let a=n?.closed??!1;return BJ(e=>e.Sdf.sweep(i.value,t.value,a),r)}var ZJ={gyroid:0,schwarzP:1,diamond:2};function QJ(e,t,n,r){let i=ZJ[e];return i===void 0?k(F(`SDF_INVALID_LATTICE_KIND`,`unknown lattice kind: ${e}`)):BJ(e=>e.Sdf.lattice(i,t.value,n.value),r)}function $J(e,t,n){return BJ(n=>n.Sdf.strut_lattice(e,t.value),n)}function eY(e){return{raw:e,delete(){e.free()}}}function tY(e){let t=xT(eY(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()}}}function nY(e,t){let n=jJ(t);if(A(n))return n;try{return O(tY(e(n.value)))}catch(e){return k(I(`SDF_FIELD_BUILD_FAILED`,e instanceof Error?e.message:`scalar field construction failed.`,e))}}function rY(e,t){return nY(t=>t.ScalarField.constant(e),t)}function iY(e,t,n,r,i,a){return nY(a=>a.ScalarField.axial_ramp(e,t,n,r,i),a)}function aY(e,t,n,r,i,a,o){return nY(o=>o.ScalarField.radial_ramp(e[0],e[1],e[2],t,n,r,i,a),o)}function oY(e,t,n,r){return nY(r=>r.ScalarField.from_sdf(e.value,t,n),r)}function sY(e,t,n,r){return nY(r=>r.ScalarField.clamp(e.value,t,n),r)}var cY={gyroid:0,schwarzP:1,diamond:2},lY=48,uY=2;function dY(e){let t=cY[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??lY,r=e.padding??uY;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 fY(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 pY(e,t,n){let r=Uq(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=dY(t);if(A(i))return i;let a=Gq(n);if(A(a))return a;let{tag:o,period:s,thickness:c,resolution:l,padding:u}=i.value;try{try{var d=uT();return O(fY(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 mY(e,t,n){let r=Qq(e);return A(r)?r:pY(r.value,t,n)}function hY(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=dY(t);if(A(r))return r;let i=Gq(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=uT();return O(fY(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 gY(e){return U().createVector3d(e[0],e[1],e[2])}function _Y(e){return U().createPoint3d(e[0],e[1],e[2])}function vY(e){return U().createDirection3d(e[0],e[1],e[2])}function yY(e){return[e.X(),e.Y(),e.Z()]}function bY(e){return[e.X(),e.Y(),e.Z()]}function xY(e){return[e.X(),e.Y(),e.Z()]}function SY(e,t){let n=gY(e);try{return t(n)}finally{n.delete()}}function CY(e,t){let n=_Y(e);try{return t(n)}finally{n.delete()}}function wY(e,t){let n=vY(e);try{return t(n)}finally{n.delete()}}var TY=.299,EY=.587,DY=.114;function OY(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 kY(e,n,r,s,c,o)}catch{}try{return AY(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 kY(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 sE(s)?O(s):(s[Symbol.dispose](),k(P(N.SURFACE_FAILED,`B-spline surface did not produce a face`)))}function AY(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 sE(s)||cE(s)?O(s):(s[Symbol.dispose](),k(P(N.SURFACE_FAILED,`surfaceFromGrid: unexpected shape type from sewing`)))}async function jY(e,t={}){let n=t.channel??`luminance`,r=Math.max(1,Math.round(t.downsample??1));if(typeof createImageBitmap!=`function`)return k(no(N.SURFACE_FAILED,`surfaceFromImage requires createImageBitmap (not available in this environment)`));let i;try{i=await createImageBitmap(e)}catch(e){return k(no(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(no(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(no(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=(TY*o+EY*s+DY*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),OY(l,u)}function MY(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function NY(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=MY(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 lE(i)?O(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 PY(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 lE(r)?O(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 FY(e){let n=EE(e);if(n.length!==1)return null;let r=t(n,0);if(VE(r)!==`sphere`)return null;let i=U().area(r.wrapped);return Math.sqrt(i/(4*Math.PI))}function IY(e,t,n){try{let r=W(U().offset(e.wrapped,t,n));return dE(r)?O(r):(r[Symbol.dispose](),k($a(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 LY(e,t,n){let r=U();try{let i=OE(e),a=OE(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 dE(s)?O(s):(s[Symbol.dispose](),k($a(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 RY(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(!dE(e)||!dE(t))return k(F(N.MINKOWSKI_NOT_3D,`minkowski: both shape and tool must be 3D`));let i=FY(t);return i===null?LY(e,t,r):IY(e,i,r)}function zY(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 lE(a)?O(a):(a[Symbol.dispose](),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 BY=1e-10;function VY(e,t,n,r){return e*r-t*n}function HY(e,t,n,r){return e*n+t*r}function UY(e,t){return Math.sqrt(e*e+t*t)}function WY(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 GY(e){let t=0;for(let n=0;n<e.length;n++){let r=WY(e,n),i=WY(e,n+1);t+=r.x*i.y-i.x*r.y}return t<0?[...e].reverse():e}function KY(e,t){let n=WY(e,t-1),r=WY(e,t),i=WY(e,t+1),a=r.x-n.x,o=r.y-n.y,s=UY(a,o),c=i.x-r.x,l=i.y-r.y,u=UY(c,l);if(s<BY||u<BY)return{dx:0,dy:0};let d=-o/s,f=a/s,p=-l/u,m=c/u,h=d+p,g=f+m,_=UY(h,g);if(_<BY)return{dx:d,dy:f};h/=_,g/=_;let v=HY(h,g,d,f),y=Math.abs(v)>BY?1/v:1;return{dx:h*y,dy:g*y}}function qY(e){return!e.prev||!e.next?!1:VY(e.x-e.prev.x,e.y-e.prev.y,e.next.x-e.x,e.next.y-e.y)<-1e-10}function JY(e){let t=e.map((t,n)=>{let r=KY(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 YY(e,t){let n=e;for(let e=0;e<t&&n;e++)n.active=!1,n=n.next}function XY(e){let t=1,n=e.next;for(;n!==e&&(t++,n=n.next,!(t>1e4)););return t}function ZY(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)<BY&&Math.abs(r)<BY)return null;let o;if(o=Math.abs(n)>Math.abs(r)?i/n:a/r,o<BY)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)>BY){let e=c/s;if(Math.abs(o-e)>1e-4*Math.max(1,Math.abs(o)))return null}return o}function QY(e,t,n){let r=n.x-t.x,i=n.y-t.y,a=UY(r,i);if(a<BY)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)<BY)return null;let f=-c/d;if(f<BY)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=UY(y,b);if(x<BY)return f;let S=HY(p-h,m-g,y,b)/(x*x);return S<-.01||S>1.01?null:f}function $Y(e){let t=[];for(let n of e){if(!n.active||!n.next)continue;let e=ZY(n,n.next);if(e!==null&&e>BY){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(qY(n)){let e=n.next.next,r=0;for(;e!==n.prev&&e!==n&&r<1e3;){let i=QY(n,e,e.next);if(i!==null&&i>BY){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 eX(e){if(e.length<3)return O({nodes:[],faces:[]});try{return O(tX(e))}catch(e){return k(I(N.STRAIGHT_SKELETON_FAILED,e instanceof Error?e.message:String(e),e))}}function tX(e){let t=GY(e),n=t.length,r=[],i=Array.from({length:n},()=>[]),a=JY(t),o=0,s=n*n*2;for(;o<s;){o++;let e=a.find(e=>e.active);if(!e)break;let t=XY(e);if(t<=3){if(t===3){let t=e,n=t.next,a=n.next,o=ZY(t,n),s=o!==null&&o>BY?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 YY(e,t);continue}let n=a.filter(e=>e.active),s=$Y(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=KY(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=KY(f(e),0);e.bx=p.dx,e.by=p.dy;let m=KY(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=[WY(t,e),WY(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&&UY(n.x-i.x,n.y-i.y)>BY&&(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 nX(e){let t=TE(e).map(e=>{let t=HO(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 rX(e){let t=[];for(let n=1;n<e-1;n++)t.push([0,n,n+1]);return t}function iX(e,t,n,r,i,a){return(n-e)*(a-t)-(r-t)*(i-e)}function aX(e,t,n,r,i,a,o,s){let c=iX(n,r,i,a,e,t),l=iX(i,a,o,s,e,t),u=iX(o,s,n,r,e,t);return!((c<0||l<0||u<0)&&(c>0||l>0||u>0))}function oX(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||iX(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&&aX(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 sX(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=rX(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 cX(e,t){let n=(t?.angle??45)*GE,r=Math.tan(n);try{let t=nX(e);if(t.length<3)return k(P(N.ROOF_FAILED,`Wire must have at least 3 edges for roof generation`));let n=eX(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=sX(i,r,a);for(let[e,n,r]of oX(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);return O(tE(a.fixShape(e)))}catch(e){try{let t=tE(a.sew(o,1e-6));return BT(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))}}}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.ROOF_FAILED,`Roof generation failed: ${t}`,e))}}function lX(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function uX(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 dX(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function fX(e){return dX(uX(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function pX(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 mX(e,t){let n=t/2,r=Math.sin(n),i=dX(e);return[Math.cos(n),i[0]*r,i[1]*r,i[2]*r]}function hX(e,t){let n=dX(e),r=dX(t),i=lX(n,r);if(i>=.999999999)return[1,0,0,0];if(i<=-.999999999)return mX(fX(n),Math.PI);let a=uX(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 gX(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 _X={coincident:3,concentric:4,distance:1,angle:1},vX=[1,0,0,0];function yX(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function bX(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function xX(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function SX(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 CX(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function wX(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function TX(e){return wX(SX(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function EX(e,t){let n=yX(pX(t.rotation,e.origin),t.position);return{type:e.type,origin:n,...e.normal?{normal:pX(t.rotation,e.normal)}:{},...e.direction?{direction:pX(t.rotation,e.direction)}:{}}}function DX(e,t,n){let r=e.normal??[0,0,1];return{position:CX(r,xX(r,bX(e.origin,t.origin))+n),rotation:vX}}function OX(e,t){let n=e.direction??[0,0,1],r=hX(t.direction??[0,0,1],n),i=pX(r,t.origin);return{position:bX(e.origin,i),rotation:r}}function kX(e,t,n){let r=wX(e.normal??[0,0,1]),i=wX(t.normal??[0,0,1]),a=Math.acos(Math.max(-1,Math.min(1,xX(i,r)))),o=SX(i,r);return{position:[0,0,0],rotation:mX(Math.hypot(o[0],o[1],o[2])<1e-9?TX(i):o,a-n)}}var AX={coincident:`plane`,distance:`plane`,angle:`plane`,concentric:`axis`},jX=new Set([`coincident`,`distance`,`angle`,`concentric`]);function MX(e,t,n){switch(e.type){case`concentric`:return OX(t,n);case`angle`:return kX(t,n,(e.value??0)*Math.PI/180);case`distance`:return DX(t,n,e.value??0);default:return DX(t,n,0)}}function NX(e,t){let n=new Map;for(let t of e)n.set(t,{position:[0,0,0],rotation:vX});let r=[],i=t.filter(e=>jX.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=AX[e.type];if(e.entityA.entity.type!==t||e.entityB.entity.type!==t){r.push(`${e.type}(${e.entityA.entity.type}-${e.entityB.entity.type})`);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:vX},l=EX(r.entity,a);n.set(i.node,MX(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+(_X[t]??_X[t.split(`(`)[0]??``]??0),0),converged:r.length===0,unsupported:r}}function PX(e){if(e.face){let t=HD(e.face);return t?{type:`axis`,origin:t.origin,direction:t.direction}:{type:`plane`,origin:VD(e.face),normal:BD(e.face)}}return e.edge?VO(e.edge)===`LINE`?{type:`axis`,origin:HO(e.edge),direction:GO(e.edge)}:null:e.point?{type:`point`,origin:e.point}:null}function FX(e,t){let n=PX(e),r=PX(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 IX(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=FX(e.entityA,e.entityB);return t.ok?O({type:`coincident`,...t.value}):t}case`distance`:{let t=FX(e.entityA,e.entityB);return t.ok?O({type:`distance`,...t.value,value:e.distance}):t}case`angle`:{let t=FX(e.entityA,e.entityB);return t.ok?O({type:`angle`,...t.value,value:e.angle}):t}case`concentric`:{let t=FX(e.axisA,e.axisB);return t.ok?O({type:`concentric`,...t.value}):t}}}function LX(e,t){let n=e.mates??[];return{...e,mates:[...n,t]}}function RX(e){let t=e.mates;if(!t||t.length===0)return k(F(N.ASSEMBLY_MATE_INVALID,`solveAssembly: no mates defined`));try{let n=[];uM(e,e=>{n.push(e.name)});let r=[];for(let e of t){let t=IX(e);if(!t.ok)return t;r.push(t.value)}let i=NX(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))}}var zX=Math.PI/180;function BX(e,t,n){return Math.min(n,Math.max(t,e))}function VX(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function HX(e,t,n,r,i,a,o){let s=i.min??a,c=i.max??o,l=Math.min(s,c),u=Math.max(s,c);return{type:e,parent:t,child:n,axis:{origin:r.origin,direction:VX(r.direction)},min:l,max:u,value:BX(i.value??0,l,u)}}function UX(e,t,n,r={}){return HX(`revolute`,e,t,n,r,-180,180)}function WX(e,t,n,r={}){return HX(`prismatic`,e,t,n,r,0,100)}function GX(e,t){return{...e,value:BX(t,e.min,e.max)}}function KX(e,t=e.value){let n=BX(t,e.min,e.max),r=VX(e.axis.direction);if(e.type===`prismatic`)return{position:[r[0]*n,r[1]*n,r[2]*n],rotation:[1,0,0,0]};let i=mX(r,n*zX),a=e.axis.origin,o=pX(i,a);return{position:[a[0]-o[0],a[1]-o[1],a[2]-o[2]],rotation:i}}function qX(e,t){let n=e.joints??[];return{...e,joints:[...n,t]}}var JX={position:[0,0,0],rotation:[1,0,0,0]};function YX(e,t){let n=pX(e.rotation,t.position);return{position:[e.position[0]+n[0],e.position[1]+n[1],e.position[2]+n[2]],rotation:gX(e.rotation,t.rotation)}}function XX(e){let t=[];return uM(e,e=>{e.joints&&t.push(...e.joints)}),t}function ZX(e,t={}){let n=[],r=new Set;uM(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,JX);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;a.set(n.child,YX(r,KX(n,i)))}}for(let e of o)a.has(e.child)||a.set(e.child,JX);return a}var QX={revolute:1,prismatic:1};function $X(e){return XX(e).reduce((e,t)=>e+QX[t.type],0)}function eZ(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 tZ(e,n=1e-6){let r=[],i=e.map(e=>zE(e));return e.forEach((a,o)=>{for(let s=o+1;s<e.length;s++){if(nZ(t(i,o),t(i,s),n))continue;let c=j(eZ(a,t(e,s),n));c.hasInterference&&r.push({i:o,j:s,result:c})}}),r}function nZ(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 rZ(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 iZ(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 aZ(e){let{type:t,data:n}=e,r=U();if(t===`LINE`)return r.makeLineEdge([iZ(n,10),iZ(n,20),iZ(n,30)],[iZ(n,11),iZ(n,21),iZ(n,31)]);if(t===`CIRCLE`)return r.makeCircleEdge([iZ(n,10),iZ(n,20),iZ(n,30)],[0,0,1],iZ(n,40));if(t===`ARC`){let e=iZ(n,50)*Math.PI/180,t=iZ(n,51)*Math.PI/180;return r.makeCircleArc([iZ(n,10),iZ(n,20),iZ(n,30)],[0,0,1],iZ(n,40),e,t)}}async function oZ(e,t){let n;try{n=await e.text()}catch(e){return k(no(N.DXF_IMPORT_FAILED,`Failed to read DXF blob`,e))}let r=rZ(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=aZ(e);t!==void 0&&a.push(t)}return a.length===0?O([]):O([QT(U().makeWire(a))])}catch(e){return k(no(N.DXF_IMPORT_FAILED,`Failed to convert DXF entities to geometry`,e))}finally{for(let e of a)e.delete()}}function sZ(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(no(t,`No valid triangular faces could be built`));try{return O(W(r.sewAndSolidify(i,n)))}catch{try{return O(W(r.sew(i,n)))}catch{return k(no(t,`Failed to sew triangular faces`))}}}function cZ(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 lZ(e){return e.split(/\s+/).slice(1).map(e=>parseInt(e.split(`/`)[0]??``,10)).filter(e=>!isNaN(e))}async function uZ(e){let t=(await e.text()).split(`
59
+ `),n=[],r=[];for(let e of t){let t=e.trim();if(t.startsWith(`v `)){let e=cZ(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=lZ(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return k(no(N.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return dZ(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return k(no(N.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function dZ(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 sZ(n,N.OBJ_IMPORT_FAILED)}function fZ(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 pZ(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function mZ(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&pZ(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 hZ(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 gZ(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 _Z(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 vZ(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=mZ(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of hZ(a,`color`)){let t=mZ(e).color;t!==void 0&&l.push(_Z(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=mZ(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of hZ(a,`base`)){let t=mZ(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(_Z(t))}t.set(c,l)}return t}function yZ(e){let t=[],n=[],r=[],i=vZ(e);for(let n of hZ(e,`vertex`)){let e=mZ(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=gZ(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=mZ(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 hZ(e,`triangle`)){let e=mZ(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 bZ(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 xZ(e){let t=U(),n=e.vertices.map(([e,t,n])=>({x:e,y:t,z:n})),r=e.triangles;try{return O(W(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 sZ(t,N.THREEMF_IMPORT_FAILED)}}async function SZ(e){try{let t=await e.arrayBuffer(),n=fZ(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return k(no(N.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=yZ(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return k(no(N.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=xZ(r);if(i.ok){let e=bZ(r.triangleColors);e!==null&&hO(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return k(no(N.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function CZ(e){try{let t=await e.arrayBuffer();return O(W(U().importGLB(t)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(no(N.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function wZ(e){return $(e)}function TZ(e,t){return CO($(e),t)}function EZ(e,t,n){let r=n?.at;return wO($(e),t,r,n?.axis)}function DZ(e,t){let n=t?.at;return TO($(e),t?.normal??[1,0,0],n)}function OZ(e,t,n){return EO($(e),t,n?.center)}function kZ(e){return PO($(e))}function AZ(e,t){return jO($(e),t)}function jZ(e,t){return NO($(e),t)}function MZ(e,t,n){return Wk($(e),$(t),{...n,unsafe:!0})}function NZ(e,t,n){return Gk($(e),$(t),{...n,unsafe:!0})}function PZ(e,t,n){return Kk($(e),$(t),{...n,unsafe:!0})}function FZ(e,t,n){return Zk($(e),t,n)}function IZ(e,t,n){return rA($(e),t,n)}function LZ(e,t){return iA($(e),t)}function RZ(e,t,n){return aA($(e),t,n)}function zZ(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(mN()).findAll(t)}function BZ(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(_N()).findAll(t)}function VZ(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 HZ(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=zZ(t,r),a=n),dj(r,i,a)}function UZ(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=zZ(t,r),a=n);let o=VZ(a);return o.mode===`distAngle`?CA(r,[...i??TE(r)],o.distance,o.angle):fj(r,i,o.distance)}function WZ(e,t,n,r){let i=$(e);return pj(i,BZ(t,i),n,r?.tolerance)}function GZ(e,t,n){return mj($(e),t,n?.tolerance)}function KZ(e,t){return lj($(e),t)}function qZ(e,t,n){let r=$(e);return gj(r,BZ(t,r),n.pullDirection,n.neutralPlane,n.angle)}function JZ(e){return Sj($(e))}function YZ(e){return BO($(e))}function XZ(e,t){return dk($(e),t)}function ZZ(e,t){return fk($(e),t)}function QZ(e){return UE($(e))}function $Z(e){return FO($(e))}function eQ(e){return AD(e)}function tQ(e){return vj($(e))}function nQ(e){return LO($(e))}function rQ(e,t){return UF($(e),typeof t==`number`?[0,0,t]:t)}function iQ(e,t){let n=t?.at??[0,0,0];return WF($(e),n,t?.axis??[0,0,1],t?.angle??360)}function aQ(e,t){return OU(e.map(e=>$(e)),t)}function oQ(e,n){if(n===void 0){let t=EE(e);if(t.length===0)return k(F(N.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=xk(t),r=VD(n)[2];for(let e=1;e<t.length;e++){let i=bk(t,e),a=VD(i)[2];a>r&&(n=i,r=a)}return O(n)}if(typeof n==`function`){let r=n(_N()).findAll(e);return r.length===0?k(ro(N.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):O(t(r,0))}return O(n)}function sQ(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?e.sketchOnPlane(`XY`).wire:e}function cQ(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(cD(o))return k(F(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=oD(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=uA(i,t.depth,c,s);else{let e=zE(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=uA(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}return Gk(n,l,{unsafe:!0})}function lQ(e,t){let n=$(e),{profile:r,depth:i}=t;if(i<=0)return k(F(`POCKET_INVALID_DEPTH`,`Pocket depth must be positive`));let a=oQ(n,t.face);if(A(a))return a;let o=a.value,s=BD(o),c=VD(o),l=Ik(sQ(r));if(A(l))return l;let u=UF(CO(l.value,c),$E(oD(s),-i));return A(u)?u:Gk(n,u.value,{unsafe:!0})}function uQ(e,t){let n=$(e),{profile:r,height:i}=t;if(i<=0)return k(F(`BOSS_INVALID_HEIGHT`,`Boss height must be positive`));let a=oQ(n,t.face);if(A(a))return a;let o=a.value,s=BD(o),c=VD(o),l=Ik(sQ(r));if(A(l))return l;let u=UF(CO(l.value,c),$E(oD(s),i));return A(u)?u:Wk(n,u.value,{unsafe:!0})}function dQ(e,t){let n=$(e),r=t?.normal??[1,0,0],i=t?.at;return cD(r)?k(F(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):Wk(n,TO(n,r,i),{unsafe:!0})}function fQ(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(cD(r))return k(F(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(cD(o))return k(F(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return O(n);let l=oD(r),u=oD(o),d=[n];for(let e=0;e<i;e++)for(let t=0;t<s;t++){if(e===0&&t===0)continue;let r=[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(CO(n,r))}return Jk(d,{unsafe:!0})}var pQ=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 mQ(e){if(A(e))throw new pQ(e.error);return e.value}function hQ(e){return e}function gQ(e){return e}function _Q(e){return e}function vQ(e){return e}function yQ(e){return{val:e,__wrapped:!0,translate:t=>kQ(TZ(e,t)),rotate:(t,n)=>kQ(EZ(e,t,n)),mirror:t=>kQ(DZ(e,t)),scale:(t,n)=>kQ(OZ(e,t,n)),applyMatrix:t=>kQ(mQ(AZ(e,t))),moveX:t=>kQ(TZ(e,[t,0,0])),moveY:t=>kQ(TZ(e,[0,t,0])),moveZ:t=>kQ(TZ(e,[0,0,t])),rotateX:t=>kQ(EZ(e,t,{axis:[1,0,0]})),rotateY:t=>kQ(EZ(e,t,{axis:[0,1,0]})),rotateZ:t=>kQ(EZ(e,t,{axis:[0,0,1]})),bounds:()=>zE(e),describe:()=>QZ(e),clone:()=>kQ(mQ(kZ(e))),mesh:t=>XZ(e,t),meshEdges:t=>ZZ(e,t),isValid:()=>tQ(e),isEmpty:()=>nQ(e),heal:()=>kQ(mQ(JZ(e))),simplify:()=>kQ(mQ(YZ(e))),toBREP:()=>mQ($Z(e)),apply:t=>kQ(t(e)),applyResult:t=>kQ(mQ(t(e))),done:()=>e}}function bQ(e){return{fuse:(t,n)=>AQ(mQ(MZ(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>AQ(mQ(NZ(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>AQ(mQ(PZ(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>AQ(vQ(mQ(Jk([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>AQ(vQ(mQ(Yk(e,t,{...n,unsafe:!0})))),section:(t,n)=>kQ(mQ(FZ(e,t,n))),split:t=>kQ(mQ(LZ(e,t))),slice:(t,n)=>mQ(RZ(e,t,n))}}function xQ(e){return{fillet(...t){return t.length===1?AQ(vQ(mQ(HZ(hQ(e),t[0])))):AQ(vQ(mQ(HZ(hQ(e),t[0],t[1]))))},chamfer(...t){return t.length===1?AQ(vQ(mQ(UZ(hQ(e),t[0])))):AQ(vQ(mQ(UZ(hQ(e),t[0],t[1]))))},shell:(t,n,r)=>AQ(vQ(mQ(WZ(hQ(e),t,n,r)))),offset:(t,n)=>AQ(vQ(mQ(GZ(hQ(e),t,n)))),draft:(t,n)=>AQ(vQ(mQ(qZ(hQ(e),t,n))))}}function SQ(e){return{drill:t=>AQ(mQ(cQ(e,t))),pocket:t=>AQ(mQ(lQ(e,t))),boss:t=>AQ(mQ(uQ(e,t))),mirrorJoin:t=>AQ(mQ(dQ(e,t))),rectangularPattern:t=>AQ(mQ(fQ(e,t)))}}function CQ(e){return{volume:()=>mQ(IM(e)),area:()=>mQ(LM(e)),volumeProps:()=>mQ(NM(e)),surfaceProps:()=>mQ(PM(e))}}function wQ(e){return{edges:()=>TE(e),faces:()=>EE(e),wires:()=>DE(e),vertices:()=>OE(e)}}function TQ(e){return{linearPattern:(t,n,r)=>AQ(vQ(mQ(rM(e,t,n,r)))),circularPattern:(t,n,r)=>AQ(vQ(mQ(iM(e,t,n,r))))}}function EQ(e){return{...yQ(e),...bQ(e),...xQ(e),...SQ(e),...CQ(e),...wQ(e),...TQ(e)}}function DQ(e){return{...yQ(e),length:()=>KO(e),startPoint:()=>HO(e),endPoint:()=>UO(e),pointAt:t=>WO(e,t),tangentAt:t=>GO(e,t),isClosed:()=>qO(e),sweep(t,n){if(!oE(e))throw Error(`sweep requires a Wire`);let r=mQ(FF(_Q(e),$(t),n));return AQ(Array.isArray(r)?r[0]:r)}}}function OQ(e){return{...yQ(e),area:()=>mQ(LM(e)),normalAt:t=>BD(e,t),center:()=>VD(e),surfaceType:()=>mQ(MD(e)),outerWire:()=>WD(e),innerWires:()=>KD(e),extrude:t=>AQ(mQ(rQ(gQ(e),t))),revolve:t=>AQ(mQ(iQ(gQ(e),t)))}}function kQ(e){return dE(e)?EQ(e):sE(e)?OQ(e):aE(e)||oE(e)?DQ(e):yQ(e)}function AQ(e){return EQ(e)}function jQ(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return OQ(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return sE(e)?OQ(e):dE(e)?EQ(e):aE(e)||oE(e)?DQ(e):yQ(e);throw Error(`shape() requires a Sketch or branded shape type`)}var MQ=.25,NQ=e=>Math.tan(e)-e;function PQ(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 FQ(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(PQ(e,s*t,n,i))}return a}function IQ(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function LQ(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 RQ(e,t,n){if(t===0)return O(e);let r=NQ(e)+2*t*Math.tan(e)/n,i,a;if(r>NQ(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>NQ(a)||r<NQ(i))return k(F(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${NQ(i).toFixed(4)}, ${NQ(a).toFixed(4)}]`,void 0,{target:r,invLo:NQ(i),invHi:NQ(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);NQ(e)<r?i=e:a=e}return O(.5*(i+a))}function zQ(e,t,n,r,i){return RQ(e,t+n,r+i)}function BQ(e,t,n,r,i){return RQ(e,n-t,i-r)}function VQ(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function HQ(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 UQ(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 WQ(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 GQ(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function KQ(e,t,n){return Math.max(0,GQ(e,t)-n)}function qQ(e){return e<8?.2:.485-2.88/e}function JQ(e,t,n,r){let i=e*1e3,a=qQ(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function YQ(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function XQ(e,t,n,r,i,a=!1){return JQ(e,t,n,r)*YQ(r,i,a)}function ZQ(e){return e/2}function QQ(e,t){return e+2*t}function $Q(e){return e%2==0?Math.PI/e:0}function e$(e,t,n){return e*(1+t/n)+$Q(n)}function t$(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=HQ(n,r,i,s);if(A(c))return c;let l=zQ(a,o,s,n,r);if(A(l))return l;let u=VQ(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=e$(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return O(d)}function n$(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=NQ(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=FQ(e.rb,e.alphaTip,c,r,1),d=FQ(e.rb,e.alphaTip,l,r,-1).reverse(),f=xk(u),p=Sk(u),m=xk(d),h=Sk(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(Tk([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=Mk(u,{tolerance:y});if(A(b))return b;_(b.value),_(kk(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=Mk(d,{tolerance:y});if(A(x))return x;_(x.value),v&&_(Tk(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),_(kk(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 r$(e){return a$(e,!1)}function i$(e){return a$(e,!0)}function a$(e,t){try{var n=uT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=IQ(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=LQ(r,i,a,o,s,c,t),d=n.u(new ST),f=[];for(let e=0;e<r;e++){let t=n$(u,e,r,l,d);if(A(t))return t;f.push(...t.value)}let p=Fk(f);return A(p)?p:O(p.value)}catch(e){n.e=e}finally{n.d()}}function o$(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=MQ,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=LQ(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=r$({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(f))return f;let p=c$(t,u,a);return p$(f.value,r,c,d,p)}function s$(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=MQ,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=i$({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(d))return d;let f=LQ(t,n,u,a,o,s,!0),p=f$(f.rPitch+c);return A(p)?p:h$(p.value,d.value,r,f,[])}function c$(e,t,n){let r=KQ(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 l$(e){let t=d$(e);if(A(t))return t;let n=t.value,r=u$(n);if(A(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=y$(n,i,a,o),c=_$(a.solid,n);a.solid.delete();let l=v$(o.solid,n.zr),u=b$(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 u$(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=o$({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(A(r))return r;let i=o$({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(A(i))return r.value.solid.delete(),i;let a=s$({...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 d$(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=HQ(n,r,i,c);if(A(u))return u;let d=QQ(n,r),f=zQ(o,s,c,n,r);if(A(f))return f;let p=BQ(o,c,l,r,d);if(A(p))return p;let m=VQ(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:ZQ(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 f$(e){try{var t=uT();let n=Fk([t.u(new ST).register(Ek(e,[0,0,0],[0,0,1]))]);return A(n)?n:O(n.value)}catch(e){t.e=e}finally{t.d()}}function p$(e,t,n,r,i){try{var a=uT();let o=Ik(e);if(A(o))return o;let s=UF(o.value,[0,0,t]);if(A(s))return s;if(n<=0)return O(g$(s.value,r,i));let c=a.u(new ST),l=m$(n/2);if(A(l))return l;c.register(l.value);let u=UF(l.value,[0,0,t+1]);if(A(u))return u;c.register(u.value);let d=c.register(CO(u.value,[0,0,-.5])),f=Gk(s.value,d);return A(f)?f:O(g$(f.value,r,i))}catch(e){a.e=e}finally{a.d()}}function m$(e){let t=f$(e);return A(t)?t:Ik(t.value)}function h$(e,t,n,r,i){let a=Ik(e,[t]);if(A(a))return a;let o=UF(a.value,[0,0,n]);return A(o)?o:O(g$(o.value,r,i))}function g$(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 _$(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=wO(e,e$(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(CO(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function v$(e,t){let n=$Q(t);if(n===0)return e;let r=wO(e,n*180/Math.PI);return e.delete(),r}function y$(e,t,n,r){let i={crSunPlanet:UQ(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:WQ(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:KQ(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:KQ(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:XQ(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:XQ(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:XQ(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:YQ(e.sunTeeth,e.alpha),planet:YQ(e.planetTeeth,e.alpha),ring:YQ(e.zr,e.alpha,!0)}}return i}function b$(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 x$=Eq({addHoles:()=>$j,bezier:()=>Bj,box:()=>Dj,bsplineApprox:()=>zj,circle:()=>Pj,compound:()=>Yj,cone:()=>Aj,cylinder:()=>Oj,ellipse:()=>Fj,ellipseArc:()=>Rj,ellipsoid:()=>Mj,face:()=>Wj,fill:()=>Lk,filledFace:()=>Gj,helix:()=>Ij,line:()=>Nj,offsetFace:()=>Zj,polygon:()=>qj,polyhedron:()=>zY,sewShells:()=>Qj,solid:()=>Xj,sphere:()=>kj,subFace:()=>Kj,tangentArc:()=>Vj,threePointArc:()=>Lj,torus:()=>jj,vertex:()=>Jj,wire:()=>Hj,wireLoop:()=>Uj}),S$=Eq({checkBoolean:()=>KA,convexHull:()=>PY,cut:()=>NZ,cutAll:()=>Yk,cutAllBisect:()=>LA,fuse:()=>MZ,fuseAll:()=>Jk,fuseAllBisect:()=>VA,hull:()=>NY,intersect:()=>PZ,minkowski:()=>RY,section:()=>FZ,sectionToFace:()=>IZ,slice:()=>RZ,split:()=>LZ}),C$=Eq({chamfer:()=>UZ,draft:()=>qZ,fillet:()=>HZ,heal:()=>JZ,offset:()=>GZ,shell:()=>WZ,simplify:()=>YZ,thicken:()=>KZ,variableFillet:()=>_j}),w$=Eq({applyMatrix:()=>AZ,clone:()=>kZ,composeTransforms:()=>MO,mirror:()=>DZ,rotate:()=>EZ,scale:()=>OZ,transformCopy:()=>jZ,translate:()=>TZ}),T$=Eq({checkAllInterferences:()=>tZ,checkInterference:()=>eZ,createDistanceQuery:()=>VM,measureArea:()=>LM,measureCurvatureAt:()=>HM,measureCurvatureAtMid:()=>UM,measureDistance:()=>zM,measureDistanceProps:()=>BM,measureLength:()=>RM,measureLinearProps:()=>FM,measureSurfaceProps:()=>PM,measureVolume:()=>IM,measureVolumeProps:()=>NM}),E$=Eq({blueprintToDXF:()=>lK,exportAssemblySTEP:()=>nM,exportDXF:()=>cK,exportGlb:()=>YG,exportGltf:()=>JG,exportIGES:()=>vk,exportOBJ:()=>RG,exportSTEP:()=>gk,exportSTEPConfigured:()=>KK,exportSTL:()=>_k,exportThreeMF:()=>OK,importDXF:()=>oZ,importGLB:()=>CZ,importIGES:()=>YK,importOBJ:()=>uZ,importSTEP:()=>qK,importSTL:()=>JK,importSVG:()=>GK,importSVGPathD:()=>WK,importThreeMF:()=>SZ}),D$=Eq({cornerFinder:()=>WP,edgeFinder:()=>mN,faceFinder:()=>_N,getSingleFace:()=>bN,vertexFinder:()=>Fq,wireFinder:()=>yN}),O$=Eq({complexExtrude:()=>LF,extrude:()=>rQ,guidedSweep:()=>HF,loft:()=>aQ,multiSectionSweep:()=>VF,revolve:()=>iQ,roof:()=>cX,supportExtrude:()=>IF,surfaceFromGrid:()=>OY,surfaceFromImage:()=>jY,sweep:()=>FF,twistExtrude:()=>RF}),k$=Eq({circularPattern:()=>iM,linearPattern:()=>rM}),A$=14695981039346656037n,j$=1099511628211n,M$=18446744073709551615n;function N$(){return A$}function P$(e,t){return(e^BigInt(t&255))*j$&M$}function F$(e,t){let n=e;for(let e=0;e<t.length;e++)n=P$(n,t[e]??0);return n}var I$=new TextEncoder;function L$(e,t){return F$(e,I$.encode(t))}var R$=new ArrayBuffer(8),z$=new DataView(R$),B$=new Uint8Array(R$);function V$(e,t){return z$.setFloat64(0,Object.is(t,-0)?0:t),F$(e,B$)}function H$(e,t){let n=e,r=t&M$;for(let e=0;e<8;e++)n=P$(n,Number(r&255n)),r>>=8n;return n}function U$(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=P$(n,r&255),r>>>=8;return n}function W$(e,t){return P$(e,+!!t)}function G$(e){return(e&M$).toString(16).padStart(16,`0`)}var K$=new Set;function q$(e){return L$(N$(),e)}function J$(e){return{kind:`NumLit`,value:e,structuralHash:V$(q$(`NumLit`),e),freeParams:K$}}function Y$(e){let t=q$(`Vec3Lit`);for(let n of e)t=V$(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:K$}}function X$(e){let t=q$(`Vec2Lit`);for(let n of e)t=V$(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:K$}}function Z$(e){return{kind:`Param`,name:e,structuralHash:L$(q$(`Param`),e),freeParams:new Set([e])}}function Q$(e,t,n){let r=L$(q$(`BinOp`),e);return r=H$(r,t.structuralHash),r=H$(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:c1(t.freeParams,n.freeParams)}}function $$(e,t){let n=L$(q$(`UnaryOp`),e);return n=H$(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function e1(e,t){let n=U$(q$(`Component`),t);return n=H$(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function t1(e,t){let n=U$(q$(`BuildVec`),e),r=new Set;for(let e of t){n=H$(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var n1=(e,t)=>Q$(`+`,e,t),r1=(e,t)=>Q$(`*`,e,t);function i1(e){return typeof e==`number`?J$(e):e}function a1(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?Y$([n[0],n[1],n[2]]):X$([n[0],n[1]]):t1(t,n.map(i1))}function o1(e){return a1(e,3)}function s1(e){return a1(e,2)}function c1(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 l1(e){return typeof e==`number`}function u1(e,t){return l1(e)?O(e):k(F(N.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function d1(e,t,n){return Array.isArray(e)&&e.length===t?O(e):k(F(N.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${l1(e)?`number`:`vector(${e.length})`}`))}function f1(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 p1(e,t);case`UnaryOp`:return m1(e,t);case`Component`:return h1(e,t);case`BuildVec`:return g1(e,t)}}function p1(e,t){let n=f1(e.a,t);if(!n.ok)return n;let r=f1(e.b,t);if(!r.ok)return r;let i=u1(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=u1(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 m1(e,t){let n=f1(e.arg,t);if(!n.ok)return n;let r=u1(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 h1(e,t){let n=f1(e.vec,t);if(!n.ok)return n;if(l1(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 g1(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=f1(r,t);if(!e.ok)return e;let i=u1(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 _1(e,t,n){let r=f1(e,t);return r.ok?u1(r.value,n):r}function v1(e,t,n){let r=f1(e,t);if(!r.ok)return r;let i=d1(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return O([a,o,s])}function y1(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 b1=new Set;function x1(e){return L$(N$(),e)}function S1(e,t){return H$(e,t.structuralHash)}function C1(e,t){return t===void 0?W$(e,!1):S1(W$(e,!0),t)}function w1(e,t){return t===void 0?W$(e,!1):V$(W$(e,!0),t)}function T1(...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?b1:t}function E1(e,t,n){let r=i1(e),i=i1(t),a=i1(n),o=x1(`Box`);return o=S1(S1(S1(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:T1(r,i,a)}}function D1(e){let t=i1(e);return{kind:`Sphere`,radius:t,structuralHash:S1(x1(`Sphere`),t),freeParams:t.freeParams}}function O1(e,t){let n=i1(e),r=i1(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:S1(S1(x1(`Cylinder`),n),r),freeParams:T1(n,r)}}function k1(e,t,n){let r=i1(e),i=i1(t),a=i1(n),o=x1(`Cone`);return o=S1(S1(S1(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:T1(r,i,a)}}function A1(e,t){let n=i1(e),r=i1(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:S1(S1(x1(`Torus`),n),r),freeParams:T1(n,r)}}function j1(e){let t=e.map(o1),n=U$(x1(`Polygon`),t.length);for(let e of t)n=S1(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:T1(...t)}}function M1(e){let t=i1(e);return{kind:`Circle`,radius:t,structuralHash:S1(x1(`Circle`),t),freeParams:t.freeParams}}function N1(e,t){let n=o1(e),r=o1(t);return{kind:`Line`,from:n,to:r,structuralHash:S1(S1(x1(`Line`),n),r),freeParams:T1(n,r)}}function P1(e){let t=o1(e);return{kind:`Vertex`,point:t,structuralHash:S1(x1(`Vertex`),t),freeParams:t.freeParams}}function F1(e){return{kind:`Empty`,output:e,structuralHash:L$(x1(`Empty`),e),freeParams:b1}}function I1(){return F1(`Solid`)}function L1(){return F1(`Face`)}function R1(){return F1(`Wire`)}function z1(e,t,n,r){return w1(S1(S1(x1(e),t),n),r)}function B1(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:z1(`Fuse`,e,t,n),freeParams:T1(e,t)}}function V1(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:z1(`Cut`,e,t,n),freeParams:T1(e,t)}}function H1(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:z1(`Intersect`,e,t,n),freeParams:T1(e,t)}}function U1(e,t){let n=U$(x1(`FuseAll`),e.length);for(let t of e)n=S1(n,t);return n=w1(n,t),{kind:`FuseAll`,shapes:e,tolerance:t,structuralHash:n,freeParams:T1(...e)}}function W1(e,t,n){let r=S1(x1(`CutAll`),e);r=U$(r,t.length);for(let e of t)r=S1(r,e);return r=w1(r,n),{kind:`CutAll`,base:e,tools:t,tolerance:n,structuralHash:r,freeParams:T1(e,...t)}}function G1(e){return e===void 0?void 0:o1(e)}function K1(e,t){let n=o1(t);return{kind:`Translate`,target:e,vector:n,structuralHash:S1(S1(x1(`Translate`),e),n),freeParams:T1(e,n)}}function q1(e,t,n){let r=i1(t),i=G1(n?.axis),a=G1(n?.at),o=S1(S1(x1(`Rotate`),e),r);return o=C1(o,i),o=C1(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:T1(e,r,i,a)}}function J1(e,t,n){let r=i1(t),i=G1(n?.center),a=S1(S1(x1(`Scale`),e),r);return a=C1(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:T1(e,r,i)}}function Y1(e,t){let n=G1(t?.normal),r=G1(t?.at),i=S1(x1(`Mirror`),e);return i=C1(i,n),i=C1(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:T1(e,n,r)}}function X1(e){let t=U$(x1(`Compound`),e.length);for(let n of e)t=S1(t,n);return{kind:`Compound`,children:e,structuralHash:t,freeParams:T1(...e)}}function Z1(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 Z1(e.a);case`FuseAll`:return e.shapes[0]?Z1(e.shapes[0]):`Solid`;case`CutAll`:return Z1(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return Z1(e.target);case`Compound`:return`Compound`}}function Q1(e,t){let n=_1(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=_1(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=_1(e.z,t.env,`Box.z`);return i.ok?O(Dj(n.value,r.value,i.value)):i}function $1(e,t){let n=_1(e.radius,t.env,`Sphere.radius`);return n.ok?O(kj(n.value)):n}function e0(e,t){let n=_1(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=_1(e.height,t.env,`Cylinder.height`);return r.ok?O(Oj(n.value,r.value)):r}function t0(e,t){let n=_1(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=_1(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=_1(e.height,t.env,`Cone.height`);return i.ok?O(Aj(n.value,r.value,i.value)):i}function n0(e,t){let n=_1(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=_1(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?O(jj(n.value,r.value)):r}function r0(e,t){let n=[];for(let r of e.points){let e=v1(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return qj(n)}function i0(e,t){let n=_1(e.radius,t.env,`Circle.radius`);return n.ok?O(Pj(n.value)):n}function a0(e,t){let n=v1(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=v1(e.to,t.env,`Line.to`);return r.ok?O(Nj(n.value,r.value)):r}function o0(e,t){let n=v1(e.point,t.env,`Vertex.point`);return n.ok?O(Jj(n.value)):n}function s0(e){return k(I(N.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function c0(e,t,n){let r=e.evalNode(t);return r.ok?dE(r.value)?O(r.value):k($a(N.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function l0(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function u0(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=c0(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=c0(t,e.b,`Fuse.b`);return r.ok?Wk(n.value,r.value,l0(e,t)):r}function d0(e,t){if(e.a.kind===`Empty`)return s0(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=c0(t,e.a,`Cut.a`);if(!n.ok)return n;let r=c0(t,e.b,`Cut.b`);return r.ok?Gk(n.value,r.value,l0(e,t)):r}function f0(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return s0(`Intersect`);let n=c0(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=c0(t,e.b,`Intersect.b`);return r.ok?Kk(n.value,r.value,l0(e,t)):r}function p0(e,t,n){let r=[];for(let i of t){let t=c0(e,i,n);if(!t.ok)return t;r.push(t.value)}return O(r)}function m0(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return s0(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=p0(t,n,`FuseAll.operand`);return r.ok?Jk(r.value,l0(e,t)):r}function h0(e,t){if(e.base.kind===`Empty`)return s0(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=c0(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=p0(t,n,`CutAll.tool`);return i.ok?Yk(r.value,i.value,l0(e,t)):i}function g0(e){return k(I(N.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function _0(e,t,n,r){return e?v1(e,t,n):O(r)}function v0(e,t){if(e.target.kind===`Empty`)return g0(`Translate`);let n=v1(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?O(CO(r.value,n.value)):r}function y0(e,t){if(e.target.kind===`Empty`)return g0(`Rotate`);let n=_1(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=_0(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=_0(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?O(wO(a.value,n.value,i.value,r.value)):a}function b0(e,t){if(e.target.kind===`Empty`)return g0(`Scale`);let n=_1(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=_0(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(EO(i.value,n.value,r.value)):i}function x0(e,t){if(e.target.kind===`Empty`)return g0(`Mirror`);let n=_0(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=_0(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(TO(i.value,n.value,r.value)):i}function S0(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(Yj(r))}function C0(){return k(I(N.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function w0(e,t){switch(e.kind){case`Box`:return Q1(e,t);case`Sphere`:return $1(e,t);case`Cylinder`:return e0(e,t);case`Cone`:return t0(e,t);case`Torus`:return n0(e,t);case`Polygon`:return r0(e,t);case`Circle`:return i0(e,t);case`Line`:return a0(e,t);case`Vertex`:return o0(e,t);case`Empty`:return C0();case`Fuse`:return u0(e,t);case`Cut`:return d0(e,t);case`Intersect`:return f0(e,t);case`FuseAll`:return m0(e,t);case`CutAll`:return h0(e,t);case`Translate`:return v0(e,t);case`Rotate`:return y0(e,t);case`Scale`:return b0(e,t);case`Mirror`:return x0(e,t);case`Compound`:return S0(e,t)}}function T0(e,t){if(typeof t==`number`)return V$(W$(e,!1),t);let n=W$(e,!0);n=U$(n,t.length);for(let e of t)n=V$(n,e);return n}function E0(e,t){if(t.size===0)return N$();let n=y1(e,t),r=Object.keys(n).sort(),i=N$();for(let e of r){i=L$(i,e);let t=n[e];t!==void 0&&(i=T0(i,t))}return i}function D0(e,t,n,r){let i=E0(t,e.freeParams),a=r===void 0?`d`:V$(N$(),r).toString(16);return`${G$(e.structuralHash)}:${n}:${G$(i)}:${a}`}var O0=class{scope=new ST;cache=new Map;registered=new WeakSet;kernelId;defaultTolerance;onStep;hits=0;misses=0;constructor(e={}){this.kernelId=e.kernel??$w()??`unregistered`,this.defaultTolerance=e.tolerance,e.onStep&&(this.onStep=e.onStep)}evaluate(e,t={}){return eT(this.kernelId,()=>this.evaluateInner(e,t))}evaluateInner(e,t){let n=D0(e,t,this.kernelId,this.defaultTolerance),r=this.cache.get(n);if(r!==void 0)return this.hits++,this.onStep?.({node:e,cacheKey:n,cacheHit:!0}),O(r);this.misses++;let i=w0(e,{env:t,tolerance:this.defaultTolerance,evalNode:e=>this.evaluateInner(e,t)});return i.ok?(this.registered.has(i.value)||(this.scope.register(i.value),this.registered.add(i.value)),this.cache.set(n,i.value),this.onStep?.({node:e,cacheKey:n,cacheHit:!1}),i):i}cacheStats(){return{hits:this.hits,misses:this.misses,entries:this.cache.size}}resetStats(){this.hits=0,this.misses=0}[Symbol.dispose](){this.scope[Symbol.dispose](),this.cache.clear()}};function k0(e,t){try{var n=uT();let r=t(n.u(new O0(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 A0(e){return{csgVersion:1,root:I0(e)}}function j0(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:j0(e.a),b:j0(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:j0(e.arg)};case`Component`:return{kind:`Component`,vec:j0(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(j0)}}}function M0(e){switch(e.kind){case`Box`:return{kind:`Box`,x:j0(e.x),y:j0(e.y),z:j0(e.z)};case`Sphere`:return{kind:`Sphere`,radius:j0(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:j0(e.radius),height:j0(e.height)};case`Cone`:return{kind:`Cone`,radius1:j0(e.radius1),radius2:j0(e.radius2),height:j0(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:j0(e.majorRadius),minorRadius:j0(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(j0)};case`Circle`:return{kind:`Circle`,radius:j0(e.radius)};case`Line`:return{kind:`Line`,from:j0(e.from),to:j0(e.to)};case`Vertex`:return{kind:`Vertex`,point:j0(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function N0(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:I0(e.a),b:I0(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(I0),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:I0(e.base),tools:e.tools.map(I0),tolerance:e.tolerance};default:return}}function P0(e){return e?j0(e):void 0}function F0(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:I0(e.target),vector:j0(e.vector)};case`Rotate`:return{kind:`Rotate`,target:I0(e.target),angle:j0(e.angle),axis:P0(e.axis),at:P0(e.at)};case`Scale`:return{kind:`Scale`,target:I0(e.target),factor:j0(e.factor),center:P0(e.center)};case`Mirror`:return{kind:`Mirror`,target:I0(e.target),normal:P0(e.normal),at:P0(e.at)};default:return}}function I0(e){return e.kind===`Compound`?{kind:`Compound`,children:e.children.map(I0)}:M0(e)??N0(e)??F0(e)}function L0(e){return k(F(N.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function R0(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function z0(e){return typeof e==`number`&&Number.isFinite(e)}function B0(e){return typeof e==`string`}function V0(e,t){if(!Array.isArray(e)||e.length!==3)return L0(`${t}: expected Vec3 array`);let[n,r,i]=e;return!z0(n)||!z0(r)||!z0(i)?L0(`${t}: Vec3 contains non-number`):O([n,r,i])}function H0(e,t){if(!Array.isArray(e)||e.length!==2)return L0(`${t}: expected Vec2 array`);let[n,r]=e;return!z0(n)||!z0(r)?L0(`${t}: Vec2 contains non-number`):O([n,r])}function U0(e){if(!R0(e))return L0(`input is not an object`);let t=e.csgVersion;if(t!==1)return L0(`unsupported csgVersion ${String(t)} (expected 1)`);let n=e.root;return Z0(n)}function W0(e){if(!R0(e))return L0(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return z0(e.value)?O(J$(e.value)):L0(`NumLit.value`);case`Vec3Lit`:{let t=V0(e.value,`Vec3Lit.value`);return t.ok?O(Y$(t.value)):t}case`Vec2Lit`:{let t=H0(e.value,`Vec2Lit.value`);return t.ok?O(X$(t.value)):t}case`Param`:return B0(e.name)?O(Z$(e.name)):L0(`Param.name`);case`BinOp`:return G0(e);case`UnaryOp`:return K0(e);case`Component`:return q0(e);case`BuildVec`:return J0(e);default:return L0(`unknown expression kind: ${String(t)}`)}}function G0(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return L0(`BinOp.op: ${String(t)}`);let n=W0(e.a);if(!n.ok)return n;let r=W0(e.b);return r.ok?O(Q$(t,n.value,r.value)):r}function K0(e){let t=e.op;if(!B0(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return L0(`UnaryOp.op: ${String(t)}`);let n=W0(e.arg);return n.ok?O($$(t,n.value)):n}function q0(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return L0(`Component.index: ${String(t)}`);let n=W0(e.vec);return n.ok?O(e1(n.value,t)):n}function J0(e){let t=e.dim;if(t!==2&&t!==3)return L0(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return L0(`BuildVec.components: not array`);if(n.length!==t)return L0(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=W0(e);if(!t.ok)return t;r.push(t.value)}return O(t1(t,r))}function Y0(e,t){if(!Array.isArray(e))return L0(`${t}: not array`);let n=[];for(let t of e){let e=Z0(t);if(!e.ok)return e;n.push(e.value)}return O(n)}function X0(e){let t=e.tolerance;return t==null?O(void 0):z0(t)?O(t):L0(`tolerance: not a finite number`)}function Z0(e){if(!R0(e))return L0(`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 $0(t,e);case`Fuse`:case`Cut`:case`Intersect`:return s2(t,e);case`FuseAll`:case`CutAll`:return c2(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return l2(t,e);case`Compound`:return h2(e);default:return L0(`unknown node kind: ${String(t)}`)}}function Q0(e,t,n){let r=W0(e[t]);return r.ok?O(n(r.value)):r}function $0(e,t){switch(e){case`Box`:return e2(t);case`Sphere`:return Q0(t,`radius`,D1);case`Cylinder`:return t2(t);case`Cone`:return n2(t);case`Torus`:return r2(t);case`Polygon`:return i2(t);case`Circle`:return Q0(t,`radius`,M1);case`Line`:return a2(t);case`Vertex`:return Q0(t,`point`,P1);case`Empty`:return o2(t)}return L0(`unhandled primitive: ${e}`)}function e2(e){let t=W0(e.x);if(!t.ok)return t;let n=W0(e.y);if(!n.ok)return n;let r=W0(e.z);return r.ok?O(E1(t.value,n.value,r.value)):r}function t2(e){let t=W0(e.radius);if(!t.ok)return t;let n=W0(e.height);return n.ok?O(O1(t.value,n.value)):n}function n2(e){let t=W0(e.radius1);if(!t.ok)return t;let n=W0(e.radius2);if(!n.ok)return n;let r=W0(e.height);return r.ok?O(k1(t.value,n.value,r.value)):r}function r2(e){let t=W0(e.majorRadius);if(!t.ok)return t;let n=W0(e.minorRadius);return n.ok?O(A1(t.value,n.value)):n}function i2(e){let t=e.points;if(!Array.isArray(t))return L0(`Polygon.points: not array`);let n=[];for(let e of t){let t=W0(e);if(!t.ok)return t;n.push(t.value)}return O(j1(n))}function a2(e){let t=W0(e.from);if(!t.ok)return t;let n=W0(e.to);return n.ok?O(N1(t.value,n.value)):n}function o2(e){let t=e.output;switch(t){case`Solid`:return O(I1());case`Face`:return O(L1());case`Wire`:return O(R1());default:return L0(`Empty.output: ${String(t)}`)}}function s2(e,t){let n=Z0(t.a);if(!n.ok)return n;let r=Z0(t.b);if(!r.ok)return r;let i=X0(t);if(!i.ok)return i;switch(e){case`Fuse`:return O(B1(n.value,r.value,i.value));case`Cut`:return O(V1(n.value,r.value,i.value));case`Intersect`:return O(H1(n.value,r.value,i.value))}}function c2(e,t){let n=X0(t);if(!n.ok)return n;if(e===`FuseAll`){let e=Y0(t.shapes,`FuseAll.shapes`);return e.ok?O(U1(e.value,n.value)):e}let r=Z0(t.base);if(!r.ok)return r;let i=Y0(t.tools,`CutAll.tools`);return i.ok?O(W1(r.value,i.value,n.value)):i}function l2(e,t){let n=Z0(t.target);if(!n.ok)return n;switch(e){case`Translate`:return u2(t,n.value);case`Rotate`:return f2(t,n.value);case`Scale`:return p2(t,n.value);case`Mirror`:return m2(t,n.value)}}function u2(e,t){let n=W0(e.vector);return n.ok?O(K1(t,n.value)):n}function d2(e,t){if(e[t]===void 0)return O(void 0);let n=W0(e[t]);return n.ok?O(n.value):n}function f2(e,t){let n=W0(e.angle);if(!n.ok)return n;let r=d2(e,`axis`);if(!r.ok)return r;let i=d2(e,`at`);return i.ok?O(q1(t,n.value,{axis:r.value,at:i.value})):i}function p2(e,t){let n=W0(e.factor);if(!n.ok)return n;let r=d2(e,`center`);return r.ok?O(J1(t,n.value,{center:r.value})):r}function m2(e,t){let n=d2(e,`normal`);if(!n.ok)return n;let r=d2(e,`at`);return r.ok?O(Y1(t,{normal:n.value,at:r.value})):r}function h2(e){let t=Y0(e.children,`Compound.children`);return t.ok?O(X1(t.value)):t}function g2(e){return y2(e)}function _2(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=_2(e.a),n=_2(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return J$(t.value+n.value);case`-`:return J$(t.value-n.value);case`*`:return J$(t.value*n.value);case`/`:return J$(t.value/n.value)}return t!==e.a||n!==e.b?Q$(e.op,t,n):e}case`UnaryOp`:{let t=_2(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return J$(-n);case`sin`:return J$(Math.sin(n));case`cos`:return J$(Math.cos(n));case`sqrt`:return J$(Math.sqrt(n));case`abs`:return J$(Math.abs(n))}}return t===e.arg?e:$$(e.op,t)}case`Component`:{let t=_2(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?J$(t.value[e.index]):t===e.vec?e:e1(t,e.index)}case`BuildVec`:{let t=e.components.map(_2);return v2(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?t1(e.dim,t):e)}}}function v2(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?X$([n[0],n[1]]):Y$([n[0],n[1],n[2]])}function y2(e){switch(e.kind){case`Box`:return E1(_2(e.x),_2(e.y),_2(e.z));case`Sphere`:return D1(_2(e.radius));case`Cylinder`:return O1(_2(e.radius),_2(e.height));case`Cone`:return k1(_2(e.radius1),_2(e.radius2),_2(e.height));case`Torus`:return A1(_2(e.majorRadius),_2(e.minorRadius));case`Polygon`:return j1(e.points.map(_2));case`Circle`:return M1(_2(e.radius));case`Line`:return N1(_2(e.from),_2(e.to));case`Vertex`:return P1(_2(e.point));case`Empty`:return e;case`Fuse`:return b2(e.a,e.b,e.tolerance);case`Cut`:return x2(e.a,e.b,e.tolerance);case`Intersect`:return S2(e.a,e.b,e.tolerance);case`FuseAll`:return C2(e.shapes,e.tolerance);case`CutAll`:return w2(e.base,e.tools,e.tolerance);case`Translate`:return T2(e.target,e.vector);case`Rotate`:return q1(y2(e.target),_2(e.angle),{axis:e.axis?_2(e.axis):void 0,at:e.at?_2(e.at):void 0});case`Scale`:return J1(y2(e.target),_2(e.factor),{center:e.center?_2(e.center):void 0});case`Mirror`:return Y1(y2(e.target),{normal:e.normal?_2(e.normal):void 0,at:e.at?_2(e.at):void 0});case`Compound`:return X1(e.children.map(y2).filter(e=>e.kind!==`Empty`))}}function b2(e,t,n){let r=y2(e),i=y2(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:B1(r,i,n)}function x2(e,t,n){let r=y2(e),i=y2(t);return i.kind===`Empty`||r.kind===`Empty`?r:V1(r,i,n)}function S2(e,t,n){let r=y2(e),i=y2(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:H1(r,i,n)}function C2(e,t){let n=e.map(y2).filter(e=>e.kind!==`Empty`);return n.length===0?I1():n.length===1?n[0]:U1(n,t)}function w2(e,t,n){let r=y2(e);if(r.kind===`Empty`)return r;let i=t.map(y2).filter(e=>e.kind!==`Empty`);return i.length===0?r:W1(r,i,n)}function T2(e,t){let n=y2(e),r=_2(t);if(r.kind!==`Vec3Lit`)return K1(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=_2(n.vector);if(e.kind===`Vec3Lit`)return K1(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return K1(n,r)}function E2(e,t,n){return D2(e,t,n)}function D2(e,t,n){return t(e)?n:O2(e,t,n)}function O2(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 B1(D2(e.a,t,n),D2(e.b,t,n),e.tolerance);case`Cut`:return V1(D2(e.a,t,n),D2(e.b,t,n),e.tolerance);case`Intersect`:return H1(D2(e.a,t,n),D2(e.b,t,n),e.tolerance);case`FuseAll`:return U1(e.shapes.map(e=>D2(e,t,n)),e.tolerance);case`CutAll`:return W1(D2(e.base,t,n),e.tools.map(e=>D2(e,t,n)),e.tolerance);case`Translate`:return K1(D2(e.target,t,n),e.vector);case`Rotate`:return q1(D2(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return J1(D2(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return Y1(D2(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return X1(e.children.map(e=>D2(e,t,n)))}}function k2(e,t){t(e);for(let n of A2(e))k2(n,t)}function A2(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}}function j2(e){let t=0;return k2(e,()=>{t++}),t}var M2=Eq({CSG_VERSION:()=>1,Evaluator:()=>O0,add:()=>n1,asScalarExpr:()=>i1,asVec2Expr:()=>s1,asVec3Expr:()=>o1,binOp:()=>Q$,box:()=>E1,buildVec:()=>t1,circle:()=>M1,component:()=>e1,compound:()=>X1,cone:()=>k1,cut:()=>V1,cutAll:()=>W1,cylinder:()=>O1,emptyFace:()=>L1,emptySolid:()=>I1,emptyWire:()=>R1,foldExpr:()=>_2,forEachNode:()=>k2,fromJSON:()=>U0,fuse:()=>B1,fuseAll:()=>U1,intersect:()=>H1,line:()=>N1,mirror:()=>Y1,mul:()=>r1,nodeCount:()=>j2,numLit:()=>J$,optimize:()=>g2,outputKindOf:()=>Z1,param:()=>Z$,polygon:()=>j1,replaceNode:()=>E2,rotate:()=>q1,scale:()=>J1,sphere:()=>D1,toJSON:()=>A0,torus:()=>A1,translate:()=>K1,unaryOp:()=>$$,vec2Lit:()=>X$,vec3Lit:()=>Y$,vertex:()=>P1,withEvaluator:()=>k0});export{RP as BaseSketcher2d,zP as BlueprintSketcher,qa as BrepBugError,N as BrepErrorCode,pQ as BrepWrapperError,fy as BrepkitAdapter,AU as CompoundSketch,i as DEFAULT_CAPABILITIES,GE as DEG2RAD,ST as DisposalScope,r as EXACT_BREP_CAPABILITIES,dW as FaceSketcher,G as HASH_CODE_MAX,Ca as OK,Sa as OcctWasmAdapter,KE as RAD2DEG,JU as Sketch,uW as Sketcher,YU as Sketches,oM as addChild,$j as addHoles,qX as addJoint,LX as addMate,mM as addStep,jA as adjacentFaces,Ma as all,Da as andThen,kq as applyGlue,AZ as applyMatrix,$O as approximateCurve,MT as as2D,jT as as3D,CD as asTopo,rq as assignRoles,Cj as autoHeal,Bj as bezier,lK as blueprintToDXF,oA as booleanPipeline,S$ as booleans,uQ as boss,Dj as box,zj as bsplineApprox,M as bug,sW as cameraFromPlane,oW as cameraLookAt,eq as captureHint,OD as cast,W as castShape,pE as castShape3D,UZ as chamfer,CA as chamferDistAngleShape,tj as chamferWithEvolution,tZ as checkAllInterferences,KA as checkBoolean,eZ as checkInterference,Pj as circle,iM as circularPattern,UD as classifyPointOnFace,lk as clearMeshCache,kZ as clone,VT as closedWire,Ua as collect,fM as collectShapes,gO as colorFaces,hO as colorShape,LF as complexExtrude,MO as composeTransforms,Yj as compound,GU as compoundSketchExtrude,UU as compoundSketchFace,qU as compoundSketchLoft,KU as compoundSketchRevolve,I as computationError,eX as computeStraightSkeleton,Aj as cone,O$ as construction,PY as convexHull,WP as cornerFinder,dM as countNodes,tM as createAssembly,aM as createAssemblyNode,CG as createBlueprint,aW as createCamera,rE as createCompound,wG as createCompoundBlueprint,VM as createDistanceQuery,ZT as createEdge,$T as createFace,bT as createHandle,pM as createHistory,xT as createKernelHandle,uk as createMeshCache,gD as createNamedPlane,Sq as createOperationRegistry,mD as createPlane,iq as createRef,xM as createRegistry,eE as createShell,tE as createSolid,mq as createTaskQueue,XT as createVertex,QT as createWire,xq as createWorkerClient,wq as createWorkerHandler,M2 as csg,co as currentQuality,hG as curve2dBoundingBox,SG as curve2dDistanceFrom,gG as curve2dFirstPoint,xG as curve2dIsOnCurve,_G as curve2dLastPoint,yG as curve2dParameter,vG as curve2dSplitAt,bG as curve2dTangentAt,UO as curveEndPoint,qO as curveIsClosed,JO as curveIsPeriodic,KO as curveLength,YO as curvePeriod,WO as curvePointAt,HO as curveStartPoint,GO as curveTangentAt,NZ as cut,AF as cut2D,Yk as cutAll,LA as cutAllBisect,yF as cutBlueprints,QA as cutWithEvolution,Oj as cylinder,$K as defaultScorer,gq as dequeueTask,QZ as describe,HW as deserializeDrawing,DM as deserializeHistory,AD as deserializeShape,DD as downcast,qZ as draft,WW as draw,YW as drawCircle,XW as drawEllipse,rG as drawFaceOutline,eG as drawParametricFunction,$W as drawPointsInterpolation,ZW as drawPolysides,nG as drawProjection,KW as drawRectangle,GW as drawRoundedRectangle,qW as drawSingleCircle,JW as drawSingleEllipse,QW as drawText,lG as drawingChamfer,oG as drawingCut,cG as drawingFillet,aG as drawingFuse,sG as drawingIntersect,iG as drawingToSketchOnPlane,cQ as drill,mN as edgeFinder,OA as edgesOfFace,Fj as ellipse,Rj as ellipseArc,Mj as ellipsoid,hq as enqueueTask,k as err,nM as exportAssemblySTEP,cK as exportDXF,YG as exportGlb,JG as exportGltf,vk as exportIGES,RG as exportOBJ,gk as exportSTEP,KK as exportSTEPConfigured,_k as exportSTL,OK as exportThreeMF,rQ as extrude,GF as extrudeAll,Wj as face,HD as faceAxis,VD as faceCenter,_N as faceFinder,ND as faceGeomType,PD as faceOrientation,DA as facesOfEdge,SJ as fieldBoolean,EJ as fieldContour,CJ as fieldOffset,TJ as fieldReinit,wJ as fieldShell,Lk as fill,Gj as filledFace,HZ as fillet,ej as filletWithEvolution,iO as findFacesByTag,lM as findNode,gM as findStep,Ej as fixSelfIntersection,wj as fixShape,Oa as flatMap,Fa as flatten,FD as flipFaceOrientation,ZO as flipOrientation,QK as fontMetrics,ZX as forwardKinematics,eQ as fromBREP,xY as fromKernelDir,bY as fromKernelPnt,yY as fromKernelVec,La as fromNullable,MZ as fuse,OF as fuse2D,Jk as fuseAll,VA as fuseAllBisect,vF as fuseBlueprints,ZA as fuseWithEvolution,LQ as gearGeometry,Vq as getActiveVoxelId,zE as getBounds,TG as getBounds2D,jE as getCompSolids,VO as getCurveType,mT as getDisposalStats,TE as getEdges,vO as getFaceColor,JD as getFaceOrigins,aO as getFaceTags,EE as getFaces,QU as getFont,IO as getHashCode,_M as getHistoryShape,U as getKernel,tT as getKernelCapabilities,aT as getKernelTier,NA as getNurbsCurveData,PA as getNurbsSurfaceData,XO as getOrientation,EG as getOrientation2D,vo as getPerformanceStats,_O as getShapeColor,IT as getShapeKind,AE as getShells,bN as getSingleFace,kE as getSolids,MD as getSurfaceType,sO as getTagMetadata,OE as getVertices,Bq as getVoxel,DE as getWires,HF as guidedSweep,JZ as heal,bj as healFace,yj as healSolid,xj as healWire,Ij as helix,NY as hull,oZ as importDXF,CZ as importGLB,YK as importIGES,uZ as importOBJ,qK as importSTEP,JK as importSTL,GK as importSVG,WK as importSVGPathD,SZ as importThreeMF,lT as init,Xw as initFromManifold,sT as initFromOC,Hq as initVoxel,KD as innerWires,QO as interpolateCurve,PZ as intersect,jF as intersect2D,bF as intersectBlueprints,$A as intersectWithEvolution,wE as invalidateShapeCache,E$ as io,no as ioError,AT as is2D,kT as is3D,jq as isChamferRadius,LT as isClosedWire,kD as isCompSolid,uE as isCompound,dq as isDisposeRequest,aE as isEdge,nQ as isEmpty,zO as isEqualShape,A as isErr,pq as isErrorResponse,sE as isFace,Mq as isFilletRadius,lq as isInitRequest,DG as isInside2D,OT as isLive,zT as isManifoldShell,Aq as isNumber,wa as isOk,uq as isOperationRequest,RT as isOrientedFace,GT as isPlanarFace,KT as isPlanarWire,nW as isProjectionPlane,vq as isQueueEmpty,RO as isSameShape,fE as isShape1D,dE as isShape3D,cE as isShell,lE as isSolid,fq as isSuccessResponse,tQ as isValid,BT as isValidSolid,iE as isVertex,oE as isWire,RE as iterCompSolids,ME as iterEdges,NE as iterFaces,LE as iterShells,IE as iterSolids,TD as iterTopo,FE as iterVertices,PE as iterWires,KX as jointTransform,_E as kernelCall,vE as kernelCallRaw,yE as kernelCallScoped,P as kernelError,pY as latticeInfill,mY as latticeInfillShape,Nj as line,rM as linearPattern,ZU as loadFont,aQ as loft,kU as loftAll,xW as makeBaseBox,o$ as makeExternalGear,s$ as makeInternalGear,vD as makePlane,l$ as makePlanetaryGear,iW as makeProjectedEdges,UT as manifoldShell,Ta as map,Ia as mapBoth,Ea as mapErr,Ha as match,LM as measureArea,HM as measureCurvatureAt,UM as measureCurvatureAtMid,zM as measureDistance,BM as measureDistanceProps,RM as measureLength,FM as measureLinearProps,PM as measureSurfaceProps,IM as measureVolume,NM as measureVolumeProps,T$ as measurement,$X as mechanismDOF,XZ as mesh,ZZ as meshEdges,yk as meshMultiLOD,RY as minkowski,DZ as mirror,MG as mirror2D,pG as mirrorDrawing,dQ as mirrorJoin,C$ as modifiers,TM as modifyStep,to as moduleInitError,VF as multiSectionSweep,BD as normalAt,GZ as offset,Zj as offsetFace,iJ as offsetMesh,sJ as offsetShape,ek as offsetWire2D,O as ok,ka as or,Aa as orElse,OP as organiseBlueprints,HT as orientedFace,WD as outerWire,k$ as patterns,_q as pendingCount,Ka as pipeline,xD as pivotPlane,qT as planarFace,JT as planarWire,t$ as planetPlacements,lQ as pocket,LD as pointOnSurface,qq as pointsInside,qj as polygon,zY as polyhedron,_W as polysideInnerRadius,GP as polysidesBlueprint,rj as positionOnCurve,cT as prewarm,x$ as primitives,WX as prismaticJoint,cW as projectEdges,zD as projectPointOnFace,D$ as query,ro as queryError,fQ as rectangularPattern,Cq as registerHandler,Zw as registerKernel,iT as registerKernelTier,SM as registerOperation,bM as registerShape,zq as registerVoxel,yq as rejectAll,sM as removeChild,GD as removeHolesFromFace,Xq as repairMesh,wM as replayFrom,CM as replayHistory,hT as resetDisposalStats,yo as resetPerformanceStats,DO as resize,$ as resolve,wZ as resolve3D,XE as resolveDirection,_D as resolvePlane,cq as resolveRef,mG as reverseCurve,UX as revoluteJoint,iQ as revolve,cX as roof,EZ as rotate,AG as rotate2D,dG as rotateDrawing,KP as roundedRectangleBlueprint,OZ as scale,jG as scale2D,fG as scaleDrawing,HJ as sdfBox,KJ as sdfCapsule,GJ as sdfCone,WJ as sdfCylinder,iY as sdfFieldAxialRamp,sY as sdfFieldClamp,rY as sdfFieldConst,oY as sdfFieldFromSdf,aY as sdfFieldRadialRamp,QJ as sdfLattice,JJ as sdfPlane,UJ as sdfRoundedBox,VJ as sdfSphere,$J as sdfStrutLattice,XJ as sdfSweep,qJ as sdfTorus,FZ as section,IZ as sectionToFace,EM as serializeHistory,GX as setJointValue,qD as setShapeOrigin,oO as setTagMetadata,Qj as sewShells,jQ as shape,Qq as shapeToMeshInput,ED as shapeType,MA as sharedEdges,WZ as shell,aJ as shellMesh,cJ as shellShape,nj as shellWithEvolution,YZ as simplify,fW as sketchCircle,pW as sketchEllipse,IU as sketchExtrude,NU as sketchFace,vW as sketchFaceOffset,bW as sketchHelix,RU as sketchLoft,FG as sketchOnFace2D,PG as sketchOnPlane2D,yW as sketchParametricFunction,gW as sketchPolysides,mW as sketchRectangle,FU as sketchRevolve,hW as sketchRoundedRectangle,LU as sketchSweep,XK as sketchText,PU as sketchWires,eo as sketcherStateError,RZ as slice,Xj as solid,Tj as solidFromShell,RX as solveAssembly,kj as sphere,LZ as split,vM as stepCount,yM as stepsFrom,NG as stretch2D,Kj as subFace,IF as supportExtrude,Kw as supportsConstraintSketch,Gw as supportsProjection,OY as surfaceFromGrid,jY as surfaceFromImage,FF as sweep,rO as tagFaces,Vj as tangentArc,Na as tap,Pa as tapErr,eW as textBlueprints,ZK as textMetrics,KZ as thicken,Lj as threePointArc,$Z as toBREP,yA as toBufferGeometryData,bA as toGroupedBufferGeometryData,gY as toKernelVec,SA as toLODGeometryData,xA as toLineGeometryData,OG as toSVGPathD,JE as toVec2,qE as toVec3,jj as torus,hY as tpmsLattice,jZ as transformCopy,w$ as transforms,TZ as translate,kG as translate2D,uG as translateDrawing,bD as translatePlane,Wa as tryCatch,Ga as tryCatchAsync,RF as twistExtrude,$a as typeCastError,hM as undoLast,io as unsupportedError,j as unwrap,Va as unwrapErr,za as unwrapOr,Ba as unwrapOrElse,cM as updateNode,aq as updateRoles,ID as uvBounds,RD as uvCoordinates,WT as validSolid,HQ as validatePlanetary,F as validationError,_j as variableFillet,ZE as vecAdd,lD as vecAngle,nD as vecCross,aD as vecDistance,tD as vecDot,sD as vecEquals,cD as vecIsZero,rD as vecLength,iD as vecLengthSq,eD as vecNegate,oD as vecNormalize,uD as vecProjectToPlane,pD as vecRepr,dD as vecRotate,$E as vecScale,QE as vecSub,Jj as vertex,Fq as vertexFinder,WE as vertexPosition,AA as verticesOfEdge,oJ as voxelBoolean,xJ as voxelBooleanField,OJ as voxelBooleanFieldShapes,lJ as voxelBooleanShapes,bJ as voxelField,DJ as voxelFieldFromShape,uM as walkAssembly,Kq as windingNumbers,Hj as wire,yN as wireFinder,Uj as wireLoop,kA as wiresOfFace,eT as withKernel,wY as withKernelDir,CY as withKernelPnt,SY as withKernelVec,nT as withQuality,CT as withScope,ET as withScopeResult,DT as withScopeResultAsync,oT as withTier,ja as zipResults};