brepjs-verify 0.4.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +223 -0
- package/README.md +55 -25
- package/dist/brepjs-verify.cjs +1 -1
- package/dist/brepjs-verify.js +1 -1
- package/dist/cli/main.cjs +42 -3
- package/dist/cli/main.js +42 -3
- package/dist/cli/openBrowser.d.ts +23 -0
- package/dist/{diff-BNmCp_8I.cjs → diff-3ivpxBET.cjs} +83 -10
- package/dist/{diff-D5U3Ie2F.js → diff-DyilrTFJ.js} +83 -10
- package/dist/index.d.ts +1 -1
- package/dist/mcp/server.cjs +489 -0
- package/dist/mcp/server.d.ts +10 -0
- package/dist/mcp/server.js +489 -0
- package/dist/mcp/tools.d.ts +77 -0
- package/dist/sandbox/runProgram.d.ts +76 -0
- package/dist/sandbox/runRecord.d.ts +20 -0
- package/dist/snapshot/shoot.cjs +2 -1
- package/dist/snapshot/shoot.d.ts +2 -0
- package/dist/snapshot/shoot.js +2 -1
- package/dist/verify/report.d.ts +13 -0
- package/package.json +12 -11
- package/viewer/dist/assets/brepjs-cDw_z4Rj.js +60 -0
- package/viewer/dist/assets/index-BBdw65cO.js +4167 -0
- package/viewer/dist/assets/kernelWorker-DeA3Hcd0.js +1 -0
- package/viewer/dist/index.html +1 -1
- package/viewer/dist/wasm/occt-wasm.wasm +0 -0
- package/viewer/dist/assets/brepjs-CI5VXw8W.js +0 -57
- package/viewer/dist/assets/index-CiN0lKoi.js +0 -4167
- package/viewer/dist/assets/kernelWorker-BtcMpY8t.js +0 -1
|
@@ -0,0 +1,60 @@
|
|
|
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,n){let r=Gt(t,e),i=Gt(n,e),a=Jt(r,i),o=Kt(a,a);if(o<1e-18)return null;let s=Kt(r,r),c=Kt(i,i),l=Jt([s*i[0]-c*r[0],s*i[1]-c*r[1],s*i[2]-c*r[2]],a),u=1/(2*o);return[e[0]+l[0]*u,e[1]+l[1]*u,e[2]+l[2]*u]}function Zt(e,t,n,r,i){return Xt(Wt(e,t,n+.1*(r-n),i),Wt(e,t,n+.45*(r-n),i),Wt(e,t,n+.8*(r-n),i))}function Qt(e,t){let n=Vt(e,t),r=[.2,.5,.8].map(r=>Zt(e,t,n.uMin,n.uMax,n.vMin+r*(n.vMax-n.vMin))).filter(e=>e!==null);if(r.length<2)return null;let i=null,a=1e-9;for(let e=0;e<r.length;e++)for(let t=e+1;t<r.length;t++){let n=r[e],o=r[t];if(!n||!o)continue;let s=Gt(o,n),c=qt(s);c>a&&(a=c,i={origin:n,direction:[s[0]/c,s[1]/c,s[2]/c]})}return i}function $t(e,t){let n=Bt(e,t);if(n===`cylinder`){let n=Yt(e,t);return n?{origin:n.origin,direction:n.direction}:null}return n===`cone`||n===`torus`||n===`revolution`?Qt(e,t):null}function en(e,t){let n=Yt(e,t);return n?{radius:n.radius,isDirect:n.isDirect}:null}function tn(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 nn(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 rn(e,t,n,r,i){return e.classifyPointOnFace(E(t),n,r).toLowerCase()}function an(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 on(e,t){return e.getVolume(E(t))}function sn(e,t){return e.getSurfaceArea(E(t))}function cn(e,t){return e.getLength(E(t))}function ln(e,t){let n=e.getCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function un(e,t){let n=e.getLinearCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function dn(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 fn(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 pn(e,t,n){return{volume:on(e,t),area:sn(e,t),length:n?cn(e,t):0,centerOfMass:ln(e,t),boundingBox:dn(e,t)}}function mn(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 hn=256;function gn(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>hn?Math.ceil(a/hn):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 _n(e,t,n,r){let i=E(n),a=E(r),o=e.distanceBetween(i,a),s=gn(e,t,i),c=gn(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 vn(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 yn(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=vn(e,t,d,f),m=vn(e,t,d+l,f),h=vn(e,t,d-l,f),g=vn(e,t,d,f+u),_=vn(e,t,d,f-u),v=vn(e,t,d+l,f+u),y=vn(e,t,d+l,f-u),b=vn(e,t,d-l,f+u),x=vn(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 bn(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 xn(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 Sn(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 Cn(e,t,n,r,i,a){let{Pu:o,Pv:s,Puu:c,Pvv:l,Puv:u}=yn(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 Sn(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 Sn(o,s);let te=bn(S-i,C,w,ee-i),ne=bn(S-a,C,w,ee-a);return{maxDirection:xn(te,o,s),minDirection:xn(ne,o,s)}}function wn(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}=Cn(e,i,n,r,c,l);return{gaussian:s,mean:o,max:c,min:l,maxDirection:u,minDirection:d}}function Tn(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 En(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 Dn(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 On(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 kn(e,t,n){return D(e,e.thicken(E(t),n,.001))}function An(e,t,n,r){return D(e,e.offset(E(t),n,r??1e-6))}function jn(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 Mn(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 Nn(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 Pn(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 Fn(e,t){return D(e,e.simplify(E(t)))}function In(e,t){return D(e,e.reverseShape(E(t)))}function Ln(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 Rn(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 zn(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 Bn(e,t,n,r){let i=r?.transitionMode??0;return D(e,e.sweep(E(t),E(n),i))}function Vn(e,t,n){return D(e,e.simplePipe(E(t),E(n)))}function Hn(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 Un(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 Wn(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 Gn(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 Kn(e,t,n,r,i,a,o){let s=i??10;return D(e,e.draftPrism(E(t),0,0,s,a))}function qn(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 Jn(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 Yn(e,t,n,r,i){return D(e,e.translate(E(t),n,r,i))}function Xn(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 Zn(e,t,n,r){return D(e,e.mirror(E(t),n[0],n[1],n[2],r[0],r[1],r[2]))}function Qn(e,t,n,r){return D(e,e.scale(E(t),n[0],n[1],n[2],r))}function $n(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 er(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 tr(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 nr(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 rr(e,t){return t.map(t=>{switch(t.type){case`translate`:return Yn(e,t.shape,t.x,t.y,t.z);case`rotate`:return Xn(e,t.shape,t.angle,t.axis,t.center);case`scale`:return Qn(e,t.shape,t.center,t.factor);case`mirror`:return Zn(e,t.shape,t.origin,t.normal);default:throw Error(`occt-wasm: transformBatch unknown type`)}})}function ir(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 ar(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 or(e,t,n){if(n.length===1)return e.exportStep(E(n[0]));let r=t(n);return e.exportStep(E(r))}function sr(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 cr(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(t);return[D(e,e.importStep(n))]}function lr(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 ur(e,t,n){if(n.length===1)return e.exportIges(E(n[0]));let r=t(n);return e.exportIges(E(r))}function dr(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(t);return[D(e,e.importIges(n))]}function fr(e,t,n,r){if(n.length===0)return``;let i=vr(e,t,n);try{return yr(e,i)}finally{i.delete()}}function pr(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=ar(s,c,l,u,d,f,m,ir(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 mr(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 hr(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 gr(e,t){return e.toBREP(E(t))}function _r(e,t){return D(e,e.fromBREP(t))}function vr(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 yr(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 br(e,t,n,r){if(n.length===0)return``;let i=vr(e,t,n.map(e=>({shape:e.shape,name:e.name??``,color:e.color})));try{return yr(e,i)}finally{i.delete()}}function xr(e,t,n,r){return T(`vertex`,e.makeVertex(t,n,r))}function Sr(e,t){throw De(t)?Error(`occt-wasm: makeEdge from curve handle is not implemented`):Error(`occt-wasm: makeEdge is not implemented`)}function Cr(e,t,n){let r=ke(t,n.map(E));try{return T(`wire`,e.makeWire(r))}finally{r.delete()}}function wr(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 Tr(e,t,n){return T(`face`,e.makeFace(E(t)))}function Er(e,t,n){return T(`edge`,e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function Dr(e,t,n,r){return T(`edge`,e.makeCircleEdge(t[0],t[1],t[2],n[0],n[1],n[2],r))}function Or(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 kr(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 Ar(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 jr(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 Mr(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 Nr(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 Pr(e,t,n,r,i,a){let o=i?i[0]:0,s=i?i[1]:0,c=i?i[2]:0,l=a?a[0]:0,u=a?a[1]:0,d=a?a[2]:1,f=e.makeHelixWire(o,s,c,l,u,d,t,n,r);return e.buildCurves3d(f),T(`wire`,f)}function Fr(e,t,n){let r=ke(t,n.map(E));try{return T(`compound`,e.makeCompound(r))}finally{r.delete()}}function Ir(e,t){return T(`solid`,e.solidFromShell(E(t)))}function Lr(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 Rr(e,t){return T(`face`,e.makeNonPlanarFace(E(t)))}function zr(e,t,n,r){let i=ke(t,r.map(E));try{return T(`face`,e.addHolesInFace(E(n),i))}finally{i.delete()}}function Br(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 Vr(e,t,n){let r=E(t);return T(`face`,e.makeFaceOnSurface(r,E(n)))}function Hr(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 Ur(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 Wr(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 Gr(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 Kr(e,t,n){return{x:e,y:t,z:n,__type:`point3d`,delete:Ee}}function qr(e,t,n){return{x:e,y:t,z:n,__type:`direction3d`,delete:Ee}}function Jr(e,t,n){return{x:e,y:t,z:n,__type:`vector3d`,delete:Ee}}function Yr(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 Xr(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 Zr(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 Qr(e){return e}function $r(e){return e}function ei(e,t){return{x:e,y:t}}function ti(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 ni(e,t){return{x:e,y:t}}function ri(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete(){}}}function ii(e){return e}function ai(e,t,n,r){return $r(x(e,t,n,r))}function oi(e,t,n,r){return $r(S(e,t,n,r))}function si(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 $r(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),$r({__bk2d:`trimmed`,basis:g,tStart:e,tEnd:t})}let _=f;return _<u-1e-9&&(_+=2*Math.PI),$r({__bk2d:`trimmed`,basis:g,tStart:u,tEnd:_})}function ci(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 $r(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),$r({__bk2d:`trimmed`,basis:C,tStart:e,tEnd:t})}let w=_;return w<g-1e-9&&(w+=2*Math.PI),$r({__bk2d:`trimmed`,basis:C,tStart:g,tEnd:w})}function li(e,t,n,r,i,a,o){return $r(C(e,t,n,r,i??1,a??0,o??!0))}function ui(e,t,n,r,i,a,o,s,c){return $r({...C(e,t,n,r,o??1,s??0,c??!0),__bk2d:`ellipse`,startAngle:i,endAngle:a})}function di(e){return $r(w(e))}function fi(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),$r({__bk2d:`bspline`,poles:n,knots:a,multiplicities:o,degree:i,isPeriodic:!1})}function pi(e,t){return _(Qr(e),t)}function mi(e,t){return{point:_(Qr(e),t),tangent:v(Qr(e),t)}}function hi(e){return y(Qr(e))}function gi(e){let t=Qr(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return b(t)}function _i(e,t,n){return $r({__bk2d:`trimmed`,basis:Qr(e),tStart:t,tEnd:n})}function vi(e){return $r(JSON.parse(JSON.stringify(Qr(e))))}function yi(e,t){let n=Qr(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 $r(w(i.length<=25?i:i.filter((e,t)=>t%2==0||t===i.length-1)))}function bi(e,t,n){return $r(ee(Qr(e),t,n))}function xi(e,t,n,r){return $r(te(Qr(e),t,n,r))}function Si(e,t,n,r){return $r(ne(Qr(e),t,n,r))}function Ci(e,t,n){return $r(re(Qr(e),t,n))}function wi(e,t,n,r,i){return $r(ie(Qr(e),t,n,r,i))}function Ti(e,t,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return e;let s=-i/o,c=r/o,l=a-1,u=1+l*s*s,d=l*s*c,f=l*c*s,p=1+l*c*c,m=t-u*t-d*n,h=n-f*t-p*n,g=Qr(e),v=y(g),b=[];for(let e=0;e<=20;e++){let[t,n]=_(g,v.first+(v.last-v.first)*e/20);b.push([u*t+d*n+m,f*t+p*n+h])}return $r(w(b))}function Ei(e,t,n,r,i,a){return Ti(e,t,n,r,i,a)}function Di(){return{type:`identity2d`,delete(){}}}function Oi(e,t,n,r,i){return{type:`affinity2d`,axOriginX:e,axOriginY:t,axDirX:n,axDirY:r,ratio:i,delete(){}}}function ki(e,t){return{type:`translate2d`,dx:e,dy:t,delete(){}}}function Ai(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 ji(e,t,n){return{type:`rotate2d`,angle:e,cx:t,cy:n,delete(){}}}function Mi(e,t,n){return{type:`scale2d`,sx:e,sy:e,cx:t,cy:n,delete(){}}}function Ni(e,t,n){let r=e;r.dx=(Number(r.dx)||0)+t,r.dy=(Number(r.dy)||0)+n}function Pi(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 Fi(e,t){let n=t;return n.type===`translate2d`?bi(e,Number(n.dx)||0,Number(n.dy)||0):n.type===`rotate2d`?xi(e,Number(n.angle)||0,Number(n.cx)||0,Number(n.cy)||0):n.type===`scale2d`?Si(e,Number(n.sx)||1,Number(n.cx)||0,Number(n.cy)||0):n.type===`mirror2d`?Ci(e,Number(n.ox)||0,Number(n.oy)||0):n.type===`affinity2d`?Ti(e,Number(n.axOriginX)||0,Number(n.axOriginY)||0,Number(n.axDirX)||0,Number(n.axDirY)||0,Number(n.ratio)||1):Number(n.dx)||Number(n.dy)?bi(e,Number(n.dx)||0,Number(n.dy)||0):e}function Ii(e,t,n){let r=ae(Qr(e),Qr(t),n);return{points:r.points,segments:r.segments.map(e=>$r(e))}}function Li(e,t,n){let r=Qr(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 Ri(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]=_(Qr(e),c);for(let e=0;e<=20;e++){let n=i+(a-i)*(e/20),[r,s]=_(Qr(t),n),c=Math.sqrt((r-l)**2+(s-u)**2);c<o&&(o=c)}}return o}function zi(e,t){let n=Qr(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),$r({__bk2d:`bspline`,poles:a,knots:c,multiplicities:l,degree:o,isPeriodic:!1})}function Bi(e){let t=Qr(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[$r(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=>$r(w(e)))}function Vi(){return ge()}function Hi(e,t,n){_e(e,Qr(t),n)}function Ui(e){return{xMin:e.xMin,yMin:e.yMin,xMax:e.xMax,yMax:e.yMax}}function Wi(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 Gi(e,t){return e.xMax<t.xMin||e.xMin>t.xMax||e.yMax<t.yMin||e.yMin>t.yMax}function Ki(e,t,n){return t<e.xMin||t>e.xMax||n<e.yMin||n>e.yMax}function qi(e){let t=Qr(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 Ji(e){let t=Qr(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 Yi(e){let t=Qr(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return t.__bk2d===`bezier`&&Array.isArray(t.poles)?t.poles:null}function Xi(e){let t=Qr(e);for(;t.__bk2d===`trimmed`&&t.basis;)t=t.basis;return t.__bk2d===`bezier`&&Array.isArray(t.poles)?t.poles.length-1:null}function Zi(e){return me(Qr(e))}function Qi(e){return $r(he(e))}function $i(e,t){let n=y(Qr(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(_i(e,a,o))}return i}function ea(e,t,n,r,i,a){let o=Qr(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 ta(e,t,n,r){let i=Qr(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 na(e){return e}function ra(){return $r(x(0,0,1,0))}function ia(e,t){e.buildCurves3d(E(t))}function aa(e,t,n,r){return T(`wire`,e.fixWireOnFace(E(t),E(n),r))}function oa(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 sa(e,t,n,r,i,a,o,s){let c=Ae(t,o);try{let{id:t,evolution:o}=oa(e.translateWithHistory(E(n),r,i,a,c,s));return{shape:D(e,t),evolution:o}}finally{c.delete()}}function ca(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}=oa(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 la(e,t,n,r,i,a,o){let s=Ae(t,a);try{let{id:t,evolution:a}=oa(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 ua(e,t,n,r,i,a,o){let s=Ae(t,a);try{let{id:t,evolution:a}=oa(e.scaleWithHistory(E(n),r[0],r[1],r[2],i,s,o));return{shape:D(e,t),evolution:a}}finally{s.delete()}}function da(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 fa(e,t,n,r,i,a,o){let s=Ae(t,i);try{let{id:t,evolution:i}=oa(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 pa(e,t,n,r,i,a,o){let s=Ae(t,i);try{let{id:t,evolution:i}=oa(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 ma(e,t,n,r,i,a,o){let s=Ae(t,i);try{let{id:t,evolution:i}=oa(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 ha(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}=oa(e.filletWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function ga(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}=oa(e.chamferWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function _a(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}=oa(e.shellWithHistory(E(n),c,i,s??.001,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function va(e,t,n,r,i,a){let o=Ae(t,i);try{let{id:t,evolution:i}=oa(e.thickenWithHistory(E(n),r,.001,o,a));return{shape:D(e,t),evolution:i}}finally{o.delete()}}function ya(e,t,n,r,i,a,o){let s=Ae(t,i);try{let{id:t,evolution:i}=oa(e.offsetWithHistory(E(n),r,o??1e-6,s,a));return{shape:D(e,t),evolution:i}}finally{s.delete()}}function ba(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 xa(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 Sa(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 Lr(e,t,[...i],[...a],r)}function Ca(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 wa(e,t,n,r){if(n.length===0)throw Error(`hull: no shapes provided`);let i=Ca(e,t,n,r);if(i.length<4)throw Error(`hull: fewer than 4 vertices extracted from input shapes`);return Sa(e,t,i,r)}function Ta(e){throw Error(`occt-wasm: ${e} is not yet implemented`)}var Ea=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){Ta(`executeBatch`)}checkpoint(){Ta(`checkpoint`)}checkpointCount(){Ta(`checkpointCount`)}restoreCheckpoint(e){Ta(`restoreCheckpoint`)}discardCheckpoint(e){Ta(`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 xr(this.k,e,t,n)}makeEdge(e,t,n){return Sr(this.k,e)}makeWire(e){return Cr(this.k,this.Module,e)}makeFace(e,t){return Tr(this.k,e,t)}makeLineEdge(e,t){return Er(this.k,e,t)}makeCircleEdge(e,t,n){return Dr(this.k,e,t,n)}makeCircleArc(e,t,n,r,i){return Or(this.k,e,t,n,r,i)}makeArcEdge(e,t,n){return kr(this.k,e,t,n)}makeEllipseEdge(e,t,n,r,i){return Ar(this.k,e,t,n,r)}makeEllipseArc(e,t,n,r,i,a,o){return jr(this.k,e,t,n,r,i,a)}makeBezierEdge(e){return Mr(this.k,this.Module,e)}makeTangentArc(e,t,n){return Nr(this.k,e,t,n)}makeHelixWire(e,t,n,r,i,a){return Pr(this.k,e,t,n,r,i)}makeWireFromMixed(e){return wr(this.k,this.Module,e)}makeCompound(e){return Fr(this.k,this.Module,e)}solidFromShell(e){return Ir(this.k,e)}hull(e,t){return wa(this.k,this.Module,e,t)}hullFromPoints(e,t){return Sa(this.k,this.Module,e,t)}buildSolidFromFaces(e,t,n){return Lr(this.k,this.Module,e,t,n)}makeNonPlanarFace(e){return Rr(this.k,e)}addHolesInFace(e,t){return zr(this.k,this.Module,e,t)}removeHolesFromFace(e){return Br(this.k,this.Module,e)}makeFaceOnSurface(e,t){return Vr(this.k,e,t)}bsplineSurface(e,t,n){return Hr(this.k,this.Module,e,t,n)}triangulatedSurface(e,t,n){return Ur(this.k,this.Module,e,t,n)}buildTriFace(e,t,n){return Wr(this.k,e,t,n)}sewAndSolidify(e,t){return Gr(this.k,this.Module,e,t)}createPoint3d(e,t,n){return Kr(e,t,n)}createDirection3d(e,t,n){return qr(e,t,n)}createVector3d(e,t,n){return Jr(e,t,n)}createAxis1(e,t,n,r,i,a){return Yr(e,t,n,r,i,a)}createAxis2(e,t,n,r,i,a,o,s,c){return Xr(e,t,n,r,i,a,o,s,c)}createAxis3(e,t,n,r,i,a,o,s,c){return Zr(e,t,n,r,i,a,o,s,c)}extrude(e,t,n){return Ln(this.k,e,t,n)}revolve(e,t,n){return Rn(this.k,e,t,n)}loft(e,t,n,r){return zn(this.k,this.Module,e,t,n,r)}sweep(e,t,n){return Bn(this.k,e,t,n)}simplePipe(e,t){return Vn(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){Ta(`sweepWithOptions`)}sweepPipeShell(e,t,n){return Hn(this.k,e,t,n)}loftAdvanced(e,t){return Un(this.k,this.Module,e,t)}buildExtrusionLaw(e,t,n){return Wn(this.k,e,t,n)}revolveVec(e,t,n,r){return Gn(this.k,e,t,n,r)}draftPrism(e,t,n,r,i,a){return Kn(this.k,e,t,n,r,i,a)}fillet(e,t,n){return Tn(this.k,this.Module,e,t,n)}chamfer(e,t,n){return En(this.k,this.Module,e,t,n)}chamferDistAngle(e,t,n,r){return Dn(this.k,this.Module,e,t,n,r)}shell(e,t,n,r){return On(this.k,this.Module,e,t,n,r)}thicken(e,t){return kn(this.k,e,t)}offset(e,t,n){return An(this.k,e,t,n)}filletVariable(e,t){return jn(this.k,e,t)}draft(e,t,n,r,i){return Mn(this.k,e,t,n,r,i)}defeature(e,t){return Nn(this.k,this.Module,e,t)}offsetWire2D(e,t,n){return Pn(this.k,e,t,n)}simplify(e){return Fn(this.k,e)}reverseShape(e){return In(this.k,e)}composeTransform(e){return qn(e)}transform(e,t){return Jn(this.k,this.Module,e,t)}translate(e,t,n,r){return Yn(this.k,e,t,n,r)}rotate(e,t,n,r){return Xn(this.k,e,t,n,r)}mirror(e,t,n){return Zn(this.k,e,t,n)}scale(e,t,n){return Qn(this.k,e,t,n)}generalTransform(e,t,n,r){return $n(this.k,this.Module,e,t,n,r)}generalTransformNonOrthogonal(e,t,n){return $n(this.k,this.Module,e,t,n,!1)}positionOnCurve(e,t,n){return er(this.k,this.Module,e,t,n)}linearPattern(e,t,n,r){return tr(this.k,e,t,n,r)}circularPattern(e,t,n,r,i){return nr(this.k,e,t,n,r,i)}transformBatch(e){return rr(this.k,e)}translateWithHistory(e,t,n,r,i,a){return sa(this.k,this.Module,e,t,n,r,i,a)}rotateWithHistory(e,t,n,r,i,a){return ca(this.k,this.Module,e,t,n,r,i,a)}mirrorWithHistory(e,t,n,r,i){return la(this.k,this.Module,e,t,n,r,i)}scaleWithHistory(e,t,n,r,i){return ua(this.k,this.Module,e,t,n,r,i)}generalTransformWithHistory(e,t,n,r,i,a){return da((e,t,n,r)=>this.generalTransform(e,t,n,r),e,t,n,r,i)}fuseWithHistory(e,t,n,r,i){return fa(this.k,this.Module,e,t,n,r,i)}cutWithHistory(e,t,n,r,i){return pa(this.k,this.Module,e,t,n,r,i)}intersectWithHistory(e,t,n,r,i){return ma(this.k,this.Module,e,t,n,r,i)}filletWithHistory(e,t,n,r,i){return ha(this.k,this.Module,e,t,n,r,i)}chamferWithHistory(e,t,n,r,i){return ga(this.k,this.Module,e,t,n,r,i)}shellWithHistory(e,t,n,r,i,a){return _a(this.k,this.Module,e,t,n,r,i,a)}thickenWithHistory(e,t,n,r){return va(this.k,this.Module,e,t,n,r)}offsetWithHistory(e,t,n,r,i){return ya(this.k,this.Module,e,t,n,r,i)}draftWithHistory(e,t,n,r,i,a,o){return ba(this.k,e,t,n,i)}applyComposedTransformWithHistory(e,t,n,r){return xa((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 or(this.k,this.makeCompound.bind(this),e)}exportSTL(e,t,n,r){return sr(this.mesh.bind(this),e,t,n,r)}importSTEP(e){return cr(this.k,e)}importSTL(e){return lr(this.k,this.Module,e)}exportIGES(e){return ur(this.k,this.makeCompound.bind(this),e)}importIGES(e){return dr(this.k,e)}exportSTEPAssembly(e,t){return fr(this.k,this.Module,e,t)}export3MF(e,t){throw Error(`export3MF is only available with the brepkit kernel`)}exportGLB(e,t){return pr(this.mesh.bind(this),e,t)}exportOBJ(e,t){return mr(this.mesh.bind(this),e,t)}exportPLY(e,t){return hr(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 gr(this.k,e)}fromBREP(e){return _r(this.k,e)}createXCAFDocument(e){return vr(this.k,this.Module,e)}writeXCAFToSTEP(e,t){return yr(this.k,e,t)}exportSTEPConfigured(e,t){return br(this.k,this.Module,e,t)}volume(e){return on(this.k,e)}area(e){return sn(this.k,e)}length(e){return cn(this.k,e)}centerOfMass(e){return ln(this.k,e)}linearCenterOfMass(e){return un(this.k,e)}boundingBox(e){return dn(this.k,e)}distance(e,t){return _n(this.k,this.Module,e,t)}surfaceCurvature(e,t,n){return wn(this.k,e,t,n)}surfaceCenterOfMass(e){return fn(this.k,e)}measureBulk(e,t){return pn(this.k,e,t)}createDistanceQuery(e){return mn(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){Ta(`curveDegreeElevate`)}curveKnotInsert(e,t,n){Ta(`curveKnotInsert`)}curveKnotRemove(e,t,n){Ta(`curveKnotRemove`)}curveSplit(e,t){Ta(`curveSplit`)}getBezierPenultimatePole(e){Ta(`getBezierPenultimatePole`)}createCurveAdaptor(e){Ta(`createCurveAdaptor`)}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 tn(this.k,e,t)}projectPointOnFace(e,t){return nn(this.k,e,t)}classifyPointOnFace(e,t,n,r){return rn(this.k,e,t,n,r)}classifyPointRobust(e,t,n){Ta(`classifyPointRobust`)}classifyPointWinding(e,t,n){Ta(`classifyPointWinding`)}approximateSurfaceLspia(e,t,n,r,i,a,o,s,c){Ta(`approximateSurfaceLspia`)}untrimFace(e,t,n){Ta(`untrimFace`)}getSurfaceCylinderData(e){return en(this.k,e)}getSurfaceAxis(e){return $t(this.k,e)}reverseSurfaceU(e){Ta(`reverseSurfaceU`)}detectSmallFeatures(e,t,n){Ta(`detectSmallFeatures`)}recognizeFeatures(e,t){Ta(`recognizeFeatures`)}projectEdges(e,t,n,r){return an(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){Ta(`fixSelfIntersection`)}createPoint2d(e,t){return ei(e,t)}createDirection2d(e,t){return ti(e,t)}createVector2d(e,t){return ni(e,t)}createAxis2d(e,t,n,r){return ri(e,t,n,r)}wrapCurve2dHandle(e){return ii(e)}createCurve2dAdaptor(e){Ta(`createCurve2dAdaptor`)}makeLine2d(e,t,n,r){return ai(e,t,n,r)}makeCircle2d(e,t,n,r){return oi(e,t,n,r)}makeArc2dThreePoints(e,t,n,r,i,a){return si(e,t,n,r,i,a)}makeArc2dTangent(e,t,n,r,i,a){return ci(e,t,n,r,i,a)}makeEllipse2d(e,t,n,r,i,a,o){return li(e,t,n,r,i,a,o)}makeEllipseArc2d(e,t,n,r,i,a,o,s,c){return ui(e,t,n,r,i,a,o,s,c)}makeBezier2d(e){return di(e)}makeBSpline2d(e,t){return fi(e)}evaluateCurve2d(e,t){return pi(e,t)}evaluateCurve2dD1(e,t){return mi(e,t)}getCurve2dBounds(e){return hi(e)}getCurve2dType(e){return gi(e)}trimCurve2d(e,t,n){return _i(e,t,n)}reverseCurve2d(e){}copyCurve2d(e){return vi(e)}offsetCurve2d(e,t){return yi(e,t)}translateCurve2d(e,t,n){return bi(e,t,n)}rotateCurve2d(e,t,n,r){return xi(e,t,n,r)}scaleCurve2d(e,t,n,r){return Si(e,t,n,r)}mirrorCurve2dAtPoint(e,t,n){return Ci(e,t,n)}mirrorCurve2dAcrossAxis(e,t,n,r,i){return wi(e,t,n,r,i)}affinityTransform2d(e,t,n,r,i,a){return Ei(e,t,n,r,i,a)}createIdentityGTrsf2d(){return Di()}createAffinityGTrsf2d(e,t,n,r,i){return Oi(e,t,n,r,i)}createTranslationGTrsf2d(e,t){return ki(e,t)}createMirrorGTrsf2d(e,t,n,r,i,a,o){return Ai(e,t,n,r,i,a,o)}createRotationGTrsf2d(e,t,n){return ji(e,t,n)}createScaleGTrsf2d(e,t,n){return Mi(e,t,n)}setGTrsf2dTranslationPart(e,t,n){Ni(e,t,n)}multiplyGTrsf2d(e,t){Pi(e,t)}transformCurve2dGeneral(e,t){return Fi(e,t)}intersectCurves2d(e,t,n){return Ii(e,t,n)}projectPointOnCurve2d(e,t,n){return Li(e,t,n)}distanceBetweenCurves2d(e,t,n,r,i,a){return Ri(e,t,n,r,i,a)}approximateCurve2dAsBSpline(e,t,n,r){return zi(e,r)}decomposeBSpline2dToBeziers(e){return Bi(e)}createBoundingBox2d(){return Vi()}addCurveToBBox2d(e,t,n){Hi(e,t,n)}getBBox2dBounds(e){return Ui(e)}mergeBBox2d(e,t){Wi(e,t)}isBBox2dOut(e,t){return Gi(e,t)}isBBox2dOutPoint(e,t,n){return Ki(e,t,n)}getCurve2dCircleData(e){return qi(e)}getCurve2dEllipseData(e){return Ji(e)}getCurve2dBezierPoles(e){return Yi(e)}getCurve2dBezierDegree(e){return Xi(e)}getCurve2dBSplineData(e){Ta(`getCurve2dBSplineData`)}serializeCurve2d(e){return Zi(e)}deserializeCurve2d(e){return Qi(e)}splitCurve2d(e,t){return $i(e,t)}liftCurve2dToPlane(e,t,n,r){return ea(this.k,this.Module,e,t,n,r)}buildEdgeOnSurface(e,t){return ta(this.k,this.Module,e,t)}extractSurfaceFromFace(e){return na(e)}extractCurve2dFromEdge(e,t){return ra()}buildCurves3d(e){ia(this.k,e)}fixWireOnFace(e,t,n){return aa(this.k,e,t,n)}fillSurface(e,t){Ta(`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 Da=O(void 0);function Oa(e){return e.ok}function A(e){return!e.ok}function ka(e,t){return e.ok?O(t(e.value)):e}function Aa(e,t){return e.ok?e:k(t(e.error))}function ja(e,t){return e.ok?t(e.value):e}var Ma=ja;function Na(e,t){return e.ok?e:t}function Pa(e,t){return e.ok?e:t(e.error)}function Fa(e,t){return e.ok?t.ok?O([e.value,t.value]):t:e}var Ia=qa;function La(e,t){return e.ok&&t(e.value),e}function Ra(e,t){return e.ok||t(e.error),e}function za(e){return e.ok?e.value:e}function Ba(e,t,n){return e.ok?O(t(e.value)):k(n(e.error))}function Va(e,t){return e==null?k(t()):O(e)}function Ha(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: ${Ha(e.error)}`)}function Ua(e,t){return e.ok?e.value:t}function Wa(e,t){return e.ok?e.value:t(e.error)}function Ga(e){if(!e.ok)return e.error;throw Error(`Called unwrapErr() on an Ok: ${String(e.value)}`)}function Ka(e,t){return e.ok?t.ok(e.value):t.err(e.error)}function qa(e){let t=[];for(let n of e){if(!n.ok)return n;t.push(n.value)}return O(t)}function Ja(e,t){try{return O(e())}catch(e){return k(t(e))}}async function Ya(e,t){try{return O(await e())}catch(e){return k(t(e))}}function Xa(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 Za=class extends Error{location;constructor(e,t){super(`Bug in ${e}: ${t}`),this.name=`BrepBugError`,this.location=e}};function M(e,t){throw new Za(e,t)}var Qa=[{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.`}],$a={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 eo(e){return $a[e]}function to(e){for(let{pattern:t,translation:n}of Qa)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 no(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 no(`KERNEL_OPERATION`,e,t,n,r,i)}function F(e,t,n,r,i){return no(`VALIDATION`,e,t,n,r,i)}function ro(e,t,n,r,i){return no(`TYPE_CAST`,e,t,n,r,i)}function io(e,t,n,r,i){return no(`SKETCHER_STATE`,e,t,n,r,i)}function ao(e,t,n,r,i){return no(`MODULE_INIT`,e,t,n,r,i)}function I(e,t,n,r,i){return no(`COMPUTATION`,e,t,n,r,i)}function oo(e,t,n,r,i){return no(`IO`,e,t,n,r,i)}function so(e,t,n,r,i){return no(`QUERY`,e,t,n,r,i)}function co(e,t,n,r,i){return no(`UNSUPPORTED`,e,t,n,r,i)}function lo(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 uo={draft:{tolerance:.01,angularTolerance:.5},standard:{tolerance:.001,angularTolerance:.1},fine:{tolerance:1e-4,angularTolerance:.05}},fo=`standard`;function po(){return fo}function mo(e=fo){return uo[e]}function ho(e){fo=e}function go(e){return`makeLine2d`in e}var _o=[`boolean`,`loft`,`extrude`,`shell`,`fillet`,`mesh`,`edgeMesh`,`transform`],vo=Object.create(null),yo=Object.create(null);function bo(){for(let e of _o)vo[e]=0,yo[e]=0}bo();function xo(e){let t=performance.now();return()=>{vo[e]=(vo[e]??0)+(performance.now()-t),yo[e]=(yo[e]??0)+1}}function So(){let e={};for(let t of _o)e[t]={totalMs:vo[t]??0,count:yo[t]??0};return e}function Co(){bo()}var wo;function To(){wo=void 0}function Eo(e){return wo??=typeof e.BooleanBatch==`function`,wo}function Do(e){return e===`commonFace`?1:e===`sameFace`?2:0}function Oo(e,t,n={}){if(!Eo(e))return null;let r=xo(`boolean`),i=new e.BooleanBatch;try{for(let e of t)i.addShape(e);return i.fuseAll(Do(n.optimisation),!!n.simplify,n.fuzzyValue??0)}finally{i.delete(),r()}}function ko(e,t,n,r={}){if(!Eo(e))return null;if(n.length===0)return t;let i=xo(`boolean`),a=new e.BooleanBatch;try{for(let e of n)a.addShape(e);return a.cutAll(t,Do(r.optimisation),!!r.simplify,r.fuzzyValue??0)}finally{a.delete(),i()}}var Ao=2147483647,jo;function Mo(){jo=void 0}function No(e){return jo??=typeof e.MeasurementExtractor?.extract==`function`,jo}function Po(e,t,n=!1){if(No(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:Fo(e,t),area:Io(e,t),length:n?Lo(e,t):0,centerOfMass:Ro(e,t),boundingBox:Bo(e,t)}}function Fo(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 Io(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 Lo(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 Ro(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 zo(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 Bo(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 Vo(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 Ho(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 Uo(e){return{volume:t=>Fo(e,t),area:t=>Io(e,t),length:t=>Lo(e,t),centerOfMass:t=>Ro(e,t),linearCenterOfMass:t=>zo(e,t),boundingBox:t=>Bo(e,t),distance:(t,n)=>Vo(e,t,n),classifyPointOnFace:(t,n,r,i)=>Ho(e,t,n,r,i),measureBulk:(t,n)=>Po(e,t,n)}}var Wo={vertex:7,edge:6,wire:5,face:4,shell:3,solid:2,compsolid:1,compound:0};function Go(e,t,n){let r=e.TopologyExtractor.extract(t,Wo[n]),i=r.getShapesCount(),a=[];for(let e=0;e<i;e++)a.push(r.getShape(e));return r.delete(),a}var Ko=new WeakMap;function qo(e,t,n){let r=Ko.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},Ko.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,Ao),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 Jo(e,t,n){return e.TopologyExtractor?Go(e,t,n):qo(e,t,n)}var Yo=new WeakMap;function Xo(e){let t=Yo.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`]]),Yo.set(e,t)}return t}function Zo(e,t){if(t.IsNull())throw Error(`Cannot determine shape type: shape is null`);let n=Xo(e).get(t.ShapeType());if(!n)throw Error(`Unknown shape type enum value`);return n}function Qo(e,t){let n=new e.BRepCheck_Analyzer(t,!0,!1,!1),r=n.IsValid_2();return n.delete(),r}function $o(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 es(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 ts(e,t){return e.IsSame(t)}function ns(e,t){return e.IsEqual(t)}function rs(e){return{iterShapes:(t,n)=>Jo(e,t,n),iterShapeList:(t,n)=>{es(e,t,n)},shapeType:t=>Zo(e,t),isSame:(e,t)=>ts(e,t),isEqual:(e,t)=>ns(e,t),isValid:t=>Qo(e,t),sew:(t,n)=>$o(e,t,n)}}var is=.001;function as(e,t,n){n===`commonFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueShift),n===`sameFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueFull)}function os(e,t){e.SetRunParallel(!0),e.SetUseOBB?.(!0),t!==void 0&&t>0&&e.SetFuzzyValue?.(t)}function ss(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 cs(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 ls(e,t,n,r={}){let i=xo(`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);as(e,c,i),os(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,is);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function us(e,t,n,r={}){let i=xo(`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);as(e,c,i),os(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,is);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function ds(e,t,n,r={}){let i=xo(`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);as(e,c,i),os(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,is);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function fs(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),os(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 ps(e,t,n={}){let r=Oo(e,t,n);if(r!==null)return r;let i=xo(`boolean`);try{let{optimisation:r,simplify:i=!1}=n,a=n.fuzzyValue??ss(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),as(e,s,r),os(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 ms(e,n,r,i,a){a.signal?.throwIfAborted();let o=i-r;if(o===1)return t(n,r);if(o===2)return ls(e,n[r],n[r+1],{...a,simplify:!1});let s=r+Math.ceil(o/2);return ls(e,ms(e,n,r,s,a),ms(e,n,s,i,a),{...a,simplify:!1})}function hs(e,t,n={}){let r=ms(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 gs(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`?hs(e,n,r):ps(e,n,r)}function _s(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),os(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 vs(e,t,n,r={}){if(n.length===0)return t;let i=ko(e,t,n,r);if(i!==null)return i;let a=cs(e,n),o=us(e,t,a,r);return a.delete(),o}function ys(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 bs(e){return{fuse:(t,n,r)=>ls(e,t,n,r),cut:(t,n,r)=>us(e,t,n,r),intersect:(t,n,r)=>ds(e,t,n,r),section:(t,n,r)=>fs(e,t,n,r),fuseAll:(t,n)=>gs(e,t,n),cutAll:(t,n,r)=>vs(e,t,n,r),split:(t,n)=>_s(e,t,n),checkBoolean:(t,n,r)=>ys(e,t,n,r,t=>Qo(e,t))}}var xs={fuse:0,cut:1,intersect:2};function Ss(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(xs[e.op],e.tool);let e=r.execute(t,i,a);return e.IsNull()?null:e}finally{r.delete()}}}function Cs(e){return{booleanPipeline:(t,n,r)=>Ss(e,t,n,r)??null}}function ws(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 Ts(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 Es(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 Ds(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=Jo(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 Os(e,t,n,r){let i=new e.BRepPrimAPI_MakeBox_2(t,n,r),a=i.Solid();return i.delete(),a}function ks(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 As(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 js(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 Ms(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 Ns(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 Ps(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 Fs(e){return{makeVertex:(t,n,r)=>ws(e,t,n,r),makeEdge:(t,n,r)=>Ts(e,t,n,r),makeWire:t=>Es(e,t),makeWireFromMixed:t=>Ns(e,t),makeFace:(t,n)=>Ds(e,t,n),makeBox:(t,n,r)=>Os(e,t,n,r),makeCylinder:(t,n,r,i)=>ks(e,t,n,r,i),makeSphere:(t,n)=>As(e,t,n),makeCone:(t,n,r,i,a)=>js(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>Ps(e,t,n,r,i),buildTriFace:(t,n,r)=>Ms(e,t,n,r)}}function Is(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function Ls(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 Rs(e,t,n){let{faces:r,points:i}=t,a=[];for(let[t,n,o]of r){let r=Is(i,t),s=Is(i,n),c=Is(i,o),l=Ms(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 zs(e,t,n){if(t.length===0)throw Error(`hull: no shapes provided`);let r=Ls(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 Rs(e,i,n)}function Bs(e,t,n,r){return Rs(e,{points:t,faces:n},r)}function Vs(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 Rs(e,r,n)}function Hs(e){return{hull:(t,n)=>zs(e,t,n),hullFromPoints:(t,n)=>Vs(e,t,n),buildSolidFromFaces:(t,n,r)=>Bs(e,t,n,r)}}function Us(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 Ws(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 Gs(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 Ks(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 qs(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 Js(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 Ys(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 Xs(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 Zs(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 Qs(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 $s(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=Qs(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 ec(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 tc(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 nc(e,t){let n=new e.ShapeFix_Solid_1,r=n.SolidFromShell(e.TopoDS_Cast.Shell(t));return n.delete(),r}function rc(e,t){return e.BRepToolsWrapper.Write(t)}function ic(e,t){return e.BRepToolsWrapper.Read(t)}function ac(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 oc(e,t){try{t.delete()}catch{}}function sc(e,t,n){let r=Us(e,[0,0,0],[t,0,0]),i=Us(e,[t,0,0],[t,n,0]),a=Us(e,[t,n,0],[0,n,0]),o=Us(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 cc(e,t,n,r){return new e.gp_Pnt_3(t,n,r)}function lc(e,t,n,r){return new e.gp_Dir_5(t,n,r)}function uc(e,t,n,r){return new e.gp_Vec_4(t,n,r)}function dc(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 fc(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 pc(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 mc(e){return{makeLineEdge:(t,n)=>Us(e,t,n),makeCircleEdge:(t,n,r)=>Ws(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>Gs(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>Ks(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>Js(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>Ys(e,t,n,r,i,a,o,s),makeBezierEdge:t=>Xs(e,t),makeTangentArc:(t,n,r)=>qs(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>Zs(e,t,n,r,i,a,o),makeCompound:t=>ec(e,t),makeBoxFromCorners:(t,n)=>tc(e,t,n),makeRectangle:(t,n)=>sc(e,t,n),solidFromShell:t=>nc(e,t),makeEllipsoid:(t,n,r)=>$s(e,t,n,r),toBREP:t=>rc(e,t),fromBREP:t=>ic(e,t),exportSTEPAssembly:(t,n)=>ac(e,t,n??{}),dispose:t=>{oc(e,t)},createPoint3d:(t,n,r)=>cc(e,t,n,r),createDirection3d:(t,n,r)=>lc(e,t,n,r),createVector3d:(t,n,r)=>uc(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>dc(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>fc(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>pc(e,t,n,r,i,a,o,s,c,l)}}function hc(e,t,n,r){let i=xo(`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 gc(e,t,n,r){let i=new e.BRepPrimAPI_MakeRevol_1(t,n,r,!1),a=i.Shape();return i.delete(),a}function _c(e,t,n=!1,r,i){let a=xo(`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 vc(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 yc(e,t,n){let r=new e.BRepOffsetAPI_MakePipe_1(n,t),i=new e.Message_ProgressRange_1;r.Build(i),i.delete();let a=r.Shape();if(a.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_SHELL){let t=new e.BRepBuilderAPI_MakeSolid_1,n=e.TopoDS_Cast.Shell(a);t.Add(n);let i=new e.Message_ProgressRange_1;t.Build(i),i.delete();let o=a;if(t.IsDone()){let n=t.Solid(),r=new e.BRepCheck_Analyzer(n,!0,!1,!1);r.IsValid_2()?o=n:n.delete(),r.delete()}return n.delete(),t.delete(),r.delete(),o}return r.delete(),a}var bc,xc;function Sc(){bc=void 0}function Cc(){xc=void 0}function wc(e){return bc??=typeof e.LoftBatch==`function`,bc}function Tc(e){return xc??=typeof e.ExtrudeBatch==`function`,xc}function Ec(e,t){if(t.length===0)return[];if(wc(e)){let n=xo(`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=>_c(e,t.wires,t.ruled??!1,t.startVertex,t.endVertex))}function Dc(e,t){if(t.length===0)return[];if(Tc(e)){let n=xo(`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=>hc(e,t.face,t.direction,t.length))}function Oc(e){return{extrude:(t,n,r)=>hc(e,t,n,r),revolve:(t,n,r)=>gc(e,t,n,r),loft:(t,n,r,i)=>_c(e,t,n,r,i),sweep:(t,n,r)=>vc(e,t,n,r??{}),simplePipe:(t,n)=>yc(e,t,n),loftBatch:t=>Ec(e,t),extrudeBatch:t=>Dc(e,t)}}function kc(e,t,n,r){let i=xo(`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 Ac(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 jc(e,t,n,r,i=.001){let a=xo(`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 Mc(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 Nc(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 Pc(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 Fc(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 Ic,Lc;function Rc(){Ic=void 0}function zc(){Lc=void 0}function Bc(e){return Ic??=typeof e.ShellBatch==`function`,Ic}function Vc(e){return Lc??=typeof e.FilletBatch==`function`,Lc}function Hc(e,t){if(t.length===0)return[];if(Bc(e)){let n=xo(`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=>jc(e,t.shape,t.faces,t.thickness,t.tolerance??.001))}function Uc(e,t){if(t.length===0)return[];if(Vc(e)){let n=xo(`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 kc(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 Wc(e){return{fillet:(t,n,r)=>kc(e,t,n,r),chamfer:(t,n,r)=>Ac(e,t,n,r),chamferDistAngle:(t,n,r,i)=>Nc(e,t,n,r,i),shell:(t,n,r,i)=>jc(e,t,n,r,i),thicken:(t,n)=>Mc(e,t,n),offset:(t,n,r)=>Fc(e,t,n,r),offsetWire2D:(t,n,r)=>Pc(e,t,n,r),shellBatch:t=>Hc(e,t),filletBatch:t=>Uc(e,t)}}var Gc;function Kc(){Gc=void 0}function qc(e){return Gc??=typeof e.TransformBatch==`function`,Gc}function Jc(e,t){if(t.length===0)return[];let n=xo(`transform`);try{if(qc(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 Xc(e,t.shape,t.x,t.y,t.z);case`rotate`:return Zc(e,t.shape,t.angle,[...t.axis],[...t.center]);case`scale`:return $c(e,t.shape,[...t.center],t.factor);case`mirror`:return Qc(e,t.shape,[...t.origin],[...t.normal])}})}finally{n()}}function Yc(e,t,n){let r=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),i=r.ModifiedShape(t);return r.delete(),i}function Xc(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=Yc(e,t,a);return a.delete(),o.delete(),s}function Zc(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=Yc(e,t,a);return a.delete(),c.delete(),o.delete(),s.delete(),l}function Qc(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=Yc(e,t,i);return i.delete(),s.delete(),a.delete(),o.delete(),c}function $c(e,t,n,r){let i=new e.gp_Trsf_1,a=new e.gp_Pnt_3(...n);i.SetScale(a,r);let o=Yc(e,t,i);return i.delete(),a.delete(),o}function el(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 tl(e,t){let n=new e.ShapeUpgrade_UnifySameDomain_2(t,!0,!0,!1);n.Build();let r=n.Shape();return n.delete(),r}function nl(e){return{transform:(t,n)=>Yc(e,t,n),translate:(t,n,r,i)=>Xc(e,t,n,r,i),rotate:(t,n,r,i)=>Zc(e,t,n,r,i),mirror:(t,n,r)=>Qc(e,t,n,r),scale:(t,n,r)=>$c(e,t,n,r),transformBatch:t=>Jc(e,t),generalTransform:(t,n,r,i)=>el(e,t,n,r,i),simplify:t=>tl(e,t)}}function rl(e,t,n){if(n===0)return new Float32Array;let r=t/4;return e.slice(r,r+n)}function il(e,t,n){let r=xo(`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=rl(e.HEAPF32,r.getVerticesPtr(),i),u=n.skipNormals||a===0?new Float32Array:rl(e.HEAPF32,r.getNormalsPtr(),a),d=r.getTrianglesPtr()/4,f=e.HEAPU32.slice(d,d+o),p=c>0?rl(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 al(e,t,n,r){let i=xo(`edgeMesh`);try{let i=e.EdgeMeshExtractor.extract(t,n,r),a=i.getLinesSize(),o=i.getEdgeGroupsSize(),s=rl(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 ol(e){return{mesh:(t,n)=>il(e,t,n),meshEdges:(t,n,r)=>al(e,t,n,r)}}var sl=0;function cl(e,t){return`${e}_${++sl}.${t}`}function ll(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=cl(`_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 ul(e,t,n=!1){let r=cl(`_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 dl(e,t){let n=new e.IGESControl_Writer_1;for(let e of t)n.AddShape(e);n.ComputeModel();let r=cl(`_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 fl(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=cl(`_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 pl(e,t){let n=cl(`_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 ml(e,t){let n=cl(`_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 hl(e){return{exportSTEP:t=>ll(e,t),exportSTL:(t,n)=>ul(e,t,n),importSTEP:t=>fl(e,t),importSTL:t=>pl(e,t),exportIGES:t=>dl(e,t),importIGES:t=>ml(e,t)}}function gl(e,t){let n=e.BRep_Tool.Pnt(t),r=[n.X(),n.Y(),n.Z()];return n.delete(),r}function _l(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 vl=new WeakMap;function yl(e,t){let n=vl.get(e);n||(n=_l(e),vl.set(e,n));let r=new e.BRepAdaptor_Surface_2(t,!1),i=r.GetType();return r.delete(),n.get(i)??`other`}function bl(e,t){let n=e.BRepTools.UVBounds_1(t);return{uMin:n.UMin,uMax:n.UMax,vMin:n.VMin,vMax:n.VMax}}function xl(e,t){return e.BRepTools.OuterWire(t)}function Sl(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 Cl(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 wl(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 Tl(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 El(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 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.FirstParameter(),n.LastParameter()];return n.delete(),r}function Ol(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 kl(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 Al(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 jl(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 Ml(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 Nl(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 Pl(e,t,n){switch(n??Fl(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 Fl(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 Il(e,t,n){return e.shapeHashCode(t,n)}function Ll(e,t){return t.IsNull()}function Rl(e,t){return t.Reversed()}function zl(e,t){let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE),r=new e.TopLoc_Location_1,i=!1;for(;n.More();){let t=e.TopoDS_Cast.Face(n.Current());if(!e.BRep_Tool_Triangulation(t,r,0).IsNull()){i=!0;break}n.Next()}return n.delete(),r.delete(),i}function Bl(e,t,n,r){new e.BRepMesh_IncrementalMeshWrapper(t,n,!1,r,!1).delete()}function Vl(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 Hl(e,t){return t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t)}function Ul(e,t){let n=t.get();if(typeof n.Cylinder!=`function`)return null;let r=n.Cylinder(),i={radius:r.Radius(),isDirect:r.Direct()};return r.delete(),i}function Wl(e,t){let n=null;try{if(t===7)return e.AxeOfRevolution();if(t===1)n=e.Cylinder();else if(t===2)n=e.Cone();else if(t===4)n=e.Torus();else return null;let r=n.Axis();return n.delete(),r}catch{return n?.delete?.(),null}}function Gl(e,t){let n=new e.BRepAdaptor_Surface_2(t,!1);try{let e=n.GetType(),t=Wl(n,typeof e==`number`?e:Number(e?.value??e));if(!t)return null;let r=null,i=null;try{return r=t.Location(),i=t.Direction(),{origin:[r.X(),r.Y(),r.Z()],direction:[i.X(),i.Y(),i.Z()]}}finally{r?.delete?.(),i?.delete?.(),t.delete()}}finally{n.delete()}}function Kl(e,t){return t.get().UReversed()}function ql(e){return{vertexPosition:t=>gl(e,t),surfaceType:t=>yl(e,t),uvBounds:t=>bl(e,t),outerWire:t=>xl(e,t),surfaceNormal:(t,n,r)=>Sl(e,t,n,r),pointOnSurface:(t,n,r)=>Cl(e,t,n,r),uvFromPoint:(t,n)=>wl(e,t,n),projectPointOnFace:(t,n)=>Tl(e,t,n),curveTangent:(t,n)=>El(e,t,n),curveParameters:t=>Dl(e,t),shapeOrientation:t=>Nl(e,t),downcast:(t,n)=>Pl(e,t,n),hashCode:(t,n)=>Il(e,t,n),isNull:t=>Ll(e,t),hasTriangulation:t=>zl(e,t),meshShape:(t,n,r)=>{Bl(e,t,n,r)},getBezierPenultimatePole:t=>Vl(e,t),createCurveAdaptor:t=>Hl(e,t),reverseShape:t=>Rl(e,t),curvePointAtParam:(t,n)=>Ol(e,t,n),curveIsClosed:t=>kl(e,t),curveIsPeriodic:t=>Al(e,t),curvePeriod:t=>jl(e,t),curveType:t=>Ml(e,t),getSurfaceCylinderData:t=>Ul(e,t),getSurfaceAxis:t=>Gl(e,t),reverseSurfaceU:t=>Kl(e,t)}}function Jl(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 Yl(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 Xl(e){return{getNurbsCurveData:t=>Jl(e,t),getNurbsSurfaceData:t=>Yl(e,t)}}function Zl(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 $l(e){return{interpolatePoints:(t,n)=>Zl(e,t,n??{}),approximatePoints:(t,n)=>Ql(e,t,n??{})}}function eu(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 tu(e,t){let n=new e.ShapeFix_Face_2(t);n.Perform();let r=n.Face();return n.delete(),r}function nu(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 ru(e){return{healSolid:t=>eu(e,t),healFace:t=>tu(e,t),healWire:(t,n)=>nu(e,t,n)}}var iu={modified:new Map,generated:new Map,deleted:new Set};function au(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 ou(e,t){try{let n=au(e.HEAP32,t.getModifiedPtr(),t.getModifiedSize()),r=au(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 su(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 cu(e,t,n,r,i){if(r.length===0)return iu;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 ou(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,su(e,a,i));let l=t.Generated(r);l.Size()>0&&s.set(n,su(e,l,i))}return{modified:o,generated:s,deleted:c}}function lu(e,t,n,r,i){let a=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),o=a.Shape(),s=r.length===0?iu:cu(e,a,t,r,i);return a.delete(),{shape:o,evolution:s}}function uu(e,t,n,r,i,a,o){return a&&t.SimplifyResult(!0,!0,.001),{shape:t.Shape(),evolution:cu(e,t,n,r,i),diagnostics:o??{hasErrors:!1,hasWarnings:!1,messages:[]}}}function du(e,t,n,r,i){return{shape:t.Shape(),evolution:cu(e,t,n,r,i)}}function fu(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=lu(e,t,s,a,o);return s.delete(),l}function pu(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=lu(e,t,s,r,i);return s.delete(),d}function mu(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=lu(e,t,o,i,a);return o.delete(),u}function hu(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=lu(e,t,o,i,a);return o.delete(),c}function gu(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=lu(e,t,s,a,o);return s.delete(),c}function _u(e){return{hasErrors:e.HasErrors(),hasWarnings:e.HasWarnings(),messages:[]}}function vu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Fuse_3(t,n,o);as(e,s,a.optimisation),os(s,a.fuzzyValue),s.Build(o);let c=_u(s),l=uu(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function yu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Cut_3(t,n,o);as(e,s,a.optimisation),os(s,a.fuzzyValue),s.Build(o);let c=_u(s),l=uu(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function bu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Common_3(t,n,o);as(e,s,a.optimisation),os(s,a.fuzzyValue),s.Build(o);let c=_u(s),l=uu(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function xu(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=du(e,o,t,i,a);return o.delete(),c}function Su(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=du(e,o,t,i,a);return o.delete(),u}function Cu(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=du(e,s,t,i,a);return s.delete(),u}function wu(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=du(e,a,t,r,i);return a.delete(),s}function Tu(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=du(e,o,t,r,i);return o.delete(),c}function Eu(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(),du(e,_,t,o,s)}finally{_.delete(),g.delete(),h.delete(),m.delete()}}function Du(e){return{translateWithHistory:(t,n,r,i,a,o)=>fu(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>pu(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>mu(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>hu(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>gu(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>vu(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>yu(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>bu(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>xu(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>Su(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>Cu(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>wu(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>Tu(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>Eu(e,t,n,r,i,a,o,s)}}function Ou(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 ku(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 Au(e,t,n,r,i){return lu(e,t,n,r,i)}function ju(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 Mu(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=ju(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 Nu(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 Pu(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 Fu(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 Iu(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 Lu(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 Ru(e,t,n,r){let i=n.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(n,!1):new e.BRepAdaptor_Curve_2(n),a=new e.gp_Pnt_1,o=new e.gp_Vec_1;try{i.D1(r,a,o);let n=new e.gp_Dir_2(o),s=new(e.gp_Ax3_5??e.gp_Ax3_4)(a,n),c=new e.gp_Trsf_1;c.SetTransformation_2(s),c.Invert();let l=new e.BRepBuilderAPI_Transform_2(t,c,!0,!1),u=l.Shape();return l.delete(),c.delete(),s.delete(),n.delete(),u}finally{o.delete(),a.delete(),i.delete()}}function zu(e,t){let n=new e.BRepOffsetAPI_MakeFilling(3,15,2,!1,1e-5,1e-4,.01,.1,8,9),r=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;r.More();){let t=e.TopoDS_Cast.Edge(r.Current());n.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,!0),r.Next()}r.delete();let i=new e.Message_ProgressRange_1;n.Build(i),i.delete();let a=n.Shape();return n.delete(),a}function Bu(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 Vu(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 Hu(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 Uu(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 Wu(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=Gu(e,d,f,p);a.Add(h);let g=Gu(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 Gu(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 Ku(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 qu(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 Ju(e,t){let n=new e.ShapeFix_Wire_1;n.Load_1(t),n.FixSelfIntersection();let r=n.Wire();return n.delete(),r}function Yu(){return{gaussian:0,mean:0,max:0,min:0,maxDirection:[1,0,0],minDirection:[0,1,0]}}function Xu(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 Zu(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=Yu();if(h>=1e-15){m.Divide(h);let e=Xu(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 $u(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 ed(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 td(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 nd(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 rd(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 id(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=cl(`_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 ad(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=cl(`_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 od(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=cl(`_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 sd(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)?ad(e,t):od(e,t)}function cd(e){return{composeTransform:t=>ku(e,t),applyComposedTransformWithHistory:(t,n,r,i)=>Au(e,t,n,r,i),sweepPipeShell:(t,n,r)=>Mu(e,t,n,r??{}),loftAdvanced:(t,n)=>Nu(e,t,n??{}),buildExtrusionLaw:(t,n,r)=>Pu(e,t,n,r),revolveVec:(t,n,r,i)=>Fu(e,t,n,r,i),positionOnCurve:(t,n,r)=>Ru(e,t,n,r),linearPattern:(t,n,r,i)=>Iu(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>Lu(e,t,n,r,i,a),makeNonPlanarFace:t=>zu(e,t),addHolesInFace:(t,n)=>Bu(e,t,n),removeHolesFromFace:t=>Vu(e,t),makeFaceOnSurface:(t,n)=>Hu(e,t,n),bsplineSurface:(t,n,r)=>Uu(e,t,n,r),triangulatedSurface:(t,n,r)=>Wu(e,t,n,r),sewAndSolidify:(t,n)=>Ku(e,t,n),fixShape:t=>qu(e,t),fixSelfIntersection:t=>Ju(e,t),surfaceCurvature:(t,n,r)=>Zu(e,t,n,r),surfaceCenterOfMass:t=>$u(e,t),createDistanceQuery:t=>ed(e,t),projectEdges:(t,n,r,i)=>td(e,t,n,r,i),draftPrism:(t,n,r,i,a,o)=>nd(e,t,n,r,i,a,o),generalTransformNonOrthogonal:(t,n,r)=>Ou(e,t,n,r),createXCAFDocument:t=>rd(e,t),writeXCAFToSTEP:(t,n)=>id(e,t,n??{}),exportSTEPConfigured:(t,n)=>sd(e,t,n??{})}}var ld=()=>{};function ud(e){return e}function dd(e){let t=ud(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function fd(e){return e}function pd(e,t){return{x:e,y:t}}function md(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 hd(e,t){return{x:e,y:t}}function gd(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:ld}}function _d(e){return e}function vd(e){return e}function yd(e,t,n,r){return x(e,t,n,r)}function bd(e,t,n,r){return S(e,t,n,r)}function xd(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 Sd(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 xd(e,t,p+h*Math.cos(S),m+h*Math.sin(S),i,a)}function Cd(e,t,n,r,i,a,o){return C(e,t,n,r,i,a,o)}function wd(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 Td(e){return w(e)}function Ed(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 Dd(e,t){return _(ud(e),t)}function Od(e,t){return{point:_(ud(e),t),tangent:v(ud(e),t)}}function kd(e){return y(ud(e))}function Ad(e){return b(dd(e))}function jd(e,t,n){return{__bk2d:`trimmed`,basis:ud(e),tStart:t,tEnd:n}}function Md(e){return JSON.parse(JSON.stringify(e))}function Nd(e,t){let n=ud(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 Ed(i)}function Pd(e,t,n){return ee(ud(e),t,n)}function Fd(e,t,n,r){return te(ud(e),t,n,r)}function Id(e,t,n,r){return ne(ud(e),t,n,r)}function Ld(e,t,n){return re(ud(e),t,n)}function Rd(e,t,n,r,i){return ie(ud(e),t,n,r,i)}function zd(e,t,n,r,i,a){return Yd(e,Hd(t,n,r,i,a))}function Bd(e,t,n){return{m:e,tx:t,ty:n,delete:ld}}function Vd(){return Bd([1,0,0,0,1,0,0,0,1],0,0)}function Hd(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return Vd();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 Bd(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function Ud(e,t){return Bd([1,0,0,0,1,0,0,0,1],e,t)}function Wd(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 Bd(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return Bd([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function Gd(e,t,n){let r=Math.cos(e),i=Math.sin(e);return Bd([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function Kd(e,t,n){return Bd([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function qd(e,t,n){e.tx=t,e.ty=n}function Jd(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 Yd(e,n){let r=ud(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 Xd(e,t,n){let r=ae(ud(e),ud(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function Zd(e,t,n){let r=ud(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=ud(e),s=ud(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=Zd(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=Zd(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 $d(e,n,r,i){let a=ud(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 Ed(l,{degMax:s})}function ef(e){let n=dd(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return ef($d(e,1e-6,`C2`,10));let r=y(ud(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 tf(){return ge()}function nf(e,t,n){_e(fd(e),ud(t),n)}function rf(e){let t=fd(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function af(e,t){let n=fd(e),r=fd(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 of(e,t){let n=fd(e),r=fd(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function sf(e,t,n){let r=fd(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function cf(e){let t=dd(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function lf(e){let t=dd(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function uf(e){let t=dd(e);return t.__bk2d===`bezier`?[...t.poles]:null}function df(e){let t=dd(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function ff(e){let t=dd(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function pf(e){return me(ud(e))}function mf(e){return he(e)}function hf(e,t){let n=ud(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 gf(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 _f(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 vf(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 yf(e,n,r,i,a){let o=ud(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 gf(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 _f(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?gf(e,t(n,0),t(n,1)):vf(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 vf(e,u)}function bf(e,t,n){let r=ud(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 vf(e,a)}function xf(e,t){return e.BRep_Tool.Surface_2(t)}function Sf(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(),Ed(o)}function Cf(e,t){e.BRepLib.BuildCurves3d_2(t)}function wf(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 Tf(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=Jo(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 Ef(e){return{wrapCurve2dHandle:e=>_d(e),createCurve2dAdaptor:e=>vd(e),createPoint2d:(e,t)=>pd(e,t),createDirection2d:(e,t)=>md(e,t),createVector2d:(e,t)=>hd(e,t),createAxis2d:(e,t,n,r)=>gd(e,t,n,r),makeLine2d:(e,t,n,r)=>yd(e,t,n,r),makeCircle2d:(e,t,n,r)=>bd(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>xd(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>Sd(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>Cd(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>wd(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>Td(e),makeBSpline2d:(e,t)=>Ed(e,t),evaluateCurve2d:(e,t)=>Dd(e,t),evaluateCurve2dD1:(e,t)=>Od(e,t),getCurve2dBounds:e=>kd(e),getCurve2dType:e=>Ad(e),trimCurve2d:(e,t,n)=>jd(e,t,n),reverseCurve2d:e=>{},copyCurve2d:e=>Md(e),offsetCurve2d:(e,t)=>Nd(e,t),translateCurve2d:(e,t,n)=>Pd(e,t,n),rotateCurve2d:(e,t,n,r)=>Fd(e,t,n,r),scaleCurve2d:(e,t,n,r)=>Id(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>Ld(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>Rd(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>zd(e,t,n,r,i,a),createIdentityGTrsf2d:()=>Vd(),createAffinityGTrsf2d:(e,t,n,r,i)=>Hd(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>Ud(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>Wd(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>Gd(e,t,n),createScaleGTrsf2d:(e,t,n)=>Kd(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{qd(e,t,n)},multiplyGTrsf2d:(e,t)=>{Jd(e,t)},transformCurve2dGeneral:(e,t)=>Yd(e,t),intersectCurves2d:(e,t,n)=>Xd(e,t,n),projectPointOnCurve2d:(e,t,n)=>Zd(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>Qd(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>$d(e,t,n,r),decomposeBSpline2dToBeziers:e=>ef(e),createBoundingBox2d:()=>tf(),addCurveToBBox2d:(e,t,n)=>{nf(e,t,n)},getBBox2dBounds:e=>rf(e),mergeBBox2d:(e,t)=>{af(e,t)},isBBox2dOut:(e,t)=>of(e,t),isBBox2dOutPoint:(e,t,n)=>sf(e,t,n),getCurve2dCircleData:e=>cf(e),getCurve2dEllipseData:e=>lf(e),getCurve2dBezierPoles:e=>uf(e),getCurve2dBezierDegree:e=>df(e),getCurve2dBSplineData:e=>ff(e),serializeCurve2d:e=>pf(e),deserializeCurve2d:e=>mf(e),splitCurve2d:(e,t)=>hf(e,t),liftCurve2dToPlane:(t,n,r,i)=>yf(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>bf(e,t,n),extractSurfaceFromFace:t=>xf(e,t),extractCurve2dFromEdge:(t,n)=>Sf(e,t,n),buildCurves3d:t=>{Cf(e,t)},fixWireOnFace:(t,n,r)=>wf(e,t,n,r),fillSurface:(t,n)=>Tf(e,t,n)}}function Df(){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 Of(e){return{draft:(t,n,r,i,a)=>Eu(e,t,n,r,i,a,[],1).shape}}var kf=class{oc;kernelId=`occt`;capabilities=r;constructor(e){this.oc=e,Object.assign(this,bs(e),Cs(e),Hs(e),Fs(e),mc(e),Oc(e),Wc(e),nl(e),ol(e),hl(e),Uo(e),rs(e),ql(e),Xl(e),$l(e),ru(e),Du(e),cd(e),Ef(e),Of(e),Df())}},Af=()=>{};function jf(e){return typeof e==`object`&&!!e&&e.__brepkit}function Mf(e,t){return{__brepkit:!0,type:e,id:t,delete:Af,HashCode(e){return t%e},IsNull(){return!1}}}function L(e){return Mf(`solid`,e)}function Nf(e){return Mf(`face`,e)}function Pf(e){return Mf(`edge`,e)}function Ff(e){return Mf(`wire`,e)}function If(e){return Mf(`shell`,e)}function Lf(e){let t=Mf(`compound`,e);return Qf.has(e)?{...t,delete:()=>Qf.delete(e)}:t}function Rf(e){return Mf(`vertex`,e)}function R(e,t){if(!jf(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 zf(e,t){if(!jf(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 Bf(e,t,n){if(!jf(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 Vf(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 Hf(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function Uf(e,t,n){return[1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1]}function Wf(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 Gf(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 Kf(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 qf(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 Jf(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 Yf=.01,Xf=9e5;function Zf(){return Xf++}var Qf=new Map,$f=new Set;function ep(e,t){$f.has(e)||($f.add(e),console.warn(`brepkit: ${t}`))}function tp(e){return e.optimisation!==void 0||e.simplify!==void 0||e.strategy!==void 0||e.fuzzyValue!==void 0}function np(e){return e}function rp(e){let t=e;for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function ip(e){return e}function ap(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 op(e,t,n){let r=Qf.get(t);return r?r.flatMap(t=>t.type===n?[t]:mp(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=>mp(e,t,n)):[]}function sp(e,t,n,r){switch(r){case`solid`:return[t];case`shell`:return z(e.getSolidShells(n)).map(If);case`face`:return z(e.getSolidFaces(n)).map(Nf);case`edge`:return z(e.getSolidEdges(n)).map(Pf);case`vertex`:return z(e.getSolidVertices(n)).map(Rf);case`wire`:return z(e.getSolidFaces(n)).flatMap(t=>z(e.getFaceWires(t)).map(Ff));default:return[]}}function cp(e,t,n){let r=z(e.getShellFaces(t)).map(Nf),i=new Set,a=[];for(let t of r)for(let r of mp(e,t,n)){let e=R(r);i.has(e)||(i.add(e),a.push(r))}return a}function lp(e,t,n,r){return r===`shell`?[t]:r===`face`?z(e.getShellFaces(n)).map(Nf):r===`edge`||r===`vertex`?cp(e,n,r):[]}function up(e,t,n,r){return r===`face`?[t]:r===`edge`?z(e.getFaceEdges(n)).map(Pf):r===`vertex`?z(e.getFaceVertices(n)).map(Rf):r===`wire`?z(e.getFaceWires(n)).map(Ff):[]}function dp(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(Rf(e.makeVertex(t,n,r))))}}return a}function fp(e,t,n,r){return r===`wire`?[t]:r===`edge`?z(e.getWireEdges(n)).map(Pf):r===`vertex`?dp(e,n):[]}function pp(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[Rf(i),Rf(a)]}return[]}function mp(e,t,n){let r=R(t);switch(t.type){case`compound`:return op(e,r,n);case`solid`:return sp(e,t,r,n);case`shell`:return lp(e,t,r,n);case`face`:return up(e,t,r,n);case`wire`:return fp(e,t,r,n);case`edge`:return pp(e,t,r,n);default:return[]}}function hp(e,t,n){if(Array.isArray(t))for(let e of t)n(e)}function gp(e,t){if(jf(t))return t.type;throw Error(`brepkit: cannot determine shape type of non-brepkit handle`)}function _p(e,t,n){return jf(t)&&jf(n)&&t.id===n.id&&t.type===n.type}function vp(e,t,n){return _p(e,t,n)}function yp(e,t,n){return t}function bp(e,t,n){return jf(t)?t.id%n:0}function xp(e,t){return!t||!jf(t)}function Sp(e,t){let n=R(t);return e.getShapeOrientation(n)}function Cp(e,t){let n=zf(t,`edgeToFaceMap`);return e.edgeToFaceMap(n)}function wp(e,t,n){let r=R(t,`face`),i=R(n,`face`);return Array.from(e.sharedEdges(r,i)).map(e=>Pf(e))}function Tp(e,t,n){let r=zf(t,`adjacentFaces`),i=R(n,`face`);return Array.from(e.adjacentFaces(r,i)).map(e=>Nf(e))}function Ep(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 Dp(e,t,n){let r=t.flatMap(t=>Ep(e,t)),i=n??1e-7;try{return If(e.weldShellsAndFaces(r,i))}catch(e){console.warn(`brepkit: weldShellsAndFaces failed, falling back to sewFaces:`,e)}return If(e.sewFaces(r,i))}function Op(e){return{iterShapes:(t,n)=>mp(e,t,n),iterShapeList:(t,n)=>{hp(e,t,n)},shapeType:t=>gp(e,t),isSame:(t,n)=>_p(e,t,n),isEqual:(t,n)=>vp(e,t,n),downcast:(t,n)=>yp(e,t,n),hashCode:(t,n)=>bp(e,t,n),isNull:t=>xp(e,t),shapeOrientation:t=>Sp(e,t),edgeToFaceMap:t=>Cp(e,t),sharedEdges:(t,n)=>wp(e,t,n),adjacentFaces:(t,n)=>Tp(e,t,n),sew:(t,n)=>Dp(e,t,n)}}function kp(e,t){return n(e.getVertexPosition(R(t,`vertex`)))}function Ap(e,t){return e.getSurfaceType(R(t,`face`))}function jp(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 Mp(e,t){return Ff(e.getFaceOuterWire(R(t,`face`)))}function Np(e,t,r,i){return n(e.evaluateSurfaceNormal(R(t,`face`),r,i))}function Pp(e,t,r,i){return n(e.evaluateSurface(R(t,`face`),r,i))}function Fp(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 Ip(e,t,r){return n(e.projectPointOnSurface(R(t,`face`),r[0],r[1],r[2]),2)}function Lp(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 Rp(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 zp(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 Bp(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 Vp(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=>Vf(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 Vp(e.getEdgeVertices(R(r,`edge`)))}function Vp(e){return Vf(t(e,0),t(e,1),t(e,2),t(e,3),t(e,4),t(e,5))<1e-7}function Hp(e,t){let n=t;try{if(n.type===`edge`||n.type===`wire`&&z(e.getWireEdges(n.id)).length===1)return Bp(e,t)}catch{}return!1}function Up(e,t){try{if(Hp(e,t)){let n=Rp(e,t);return n[1]-n[0]}}catch{}return 0}function Wp(e,t){if(t.type===`wire`){let n=mp(e,t,`edge`)[0];return n?e.getEdgeCurveType(R(n,`edge`)):`LINE`}return e.getEdgeCurveType(R(t,`edge`))}function Gp(e,t,n){let r=R(t,`edge`);return Pf(e.curveDegreeElevate(r,n))}function Kp(e,t,n,r){let i=R(t,`edge`);return Pf(e.curveKnotInsert(i,n,r))}function qp(e,t,n,r){let i=R(t,`edge`);return Pf(e.curveKnotRemove(i,n,r))}function Jp(e,n,r){let i=R(n,`edge`),a=e.curveSplit(i,r);return[Pf(t(a,0)),Pf(t(a,1))]}function Yp(e,t,n,r,i,a,o,s,c,l){return Nf(e.approximateSurfaceLspia(t,n,r,i,a,o,s,c,l))}function Xp(e,t,n,r){let i=R(t,`face`);return Nf(e.untrimFace(i,n,r))}function Zp(e,t){return t}function Qp(e,t){let r=Om(e,t);return!r||r.controlPoints.length<6?null:n(r.controlPoints,r.controlPoints.length-6)}function $p(e,t){if(jf(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 em(e,t){let n=JSON.parse(e.getAnalyticSurfaceParams(R(t,`face`))),r=n.type===`cylinder`?n.origin:n.type===`cone`?n.apex:null;if(!r||!n.axis)return null;let[i,a,o]=r,[s,c,l]=n.axis,u=Math.hypot(s,c,l);return u<1e-12?null:{origin:[i,a,o],direction:[s/u,c/u,l/u]}}function tm(e,t){return t}function nm(e,n,r,i,a){a!==void 0&&ep(`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 rm(e,t,n,r){let i=zf(t,`classifyPointRobust`);return e.classifyPointRobust(i,n[0],n[1],n[2],r)}function im(e,t,n,r){let i=zf(t,`classifyPointWinding`);return e.classifyPointWinding(i,n[0],n[1],n[2],r)}function am(e,t,n,r){let i=zf(t,`detectSmallFeatures`);return Array.from(e.detectSmallFeatures(i,n,r)).map(e=>Nf(e))}function om(e,t,n){let r=zf(t,`recognizeFeatures`);return e.recognizeFeatures(r,n)}function sm(e,t,r,i,a){let o=R(t),[s,c,l]=r,[u,d,f]=i,[p,m,h]=a??[1,0,0],g=.1;try{let t=e.boundingBox(o),[r,i,a]=n(t,0),[s,c,l]=n(t,3),u=Vf(r,i,a,s,c,l);u>0&&(g=Math.max(u*.001,1e-6))}catch{}let _=e.projectEdges(o,s,c,l,u,d,f,p,m,h,!0,g),v;try{v=JSON.parse(_)}catch{v={visible:[],hidden:[]}}let y=t=>{let n=[];for(let r of t)for(let t=0;t+3<r.length;t+=2){let i=r[t],a=r[t+1],o=r[t+2],s=r[t+3];i===void 0||a===void 0||o===void 0||s===void 0||i===o&&a===s||n.push(Pf(e.makeLineEdge(i,a,0,o,s,0)))}let r=Zf();return Qf.set(r,n),Lf(r)},b=()=>{let e=Zf();return Qf.set(e,[]),Lf(e)};return{visible:{outline:y(v.visible),smooth:b(),sharp:b()},hidden:{outline:y(v.hidden),smooth:b(),sharp:b()}}}function cm(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 lm(e,t){return JSON.parse(e.getNurbsSurfaceDataParity(R(t,`face`)))}function um(e){return{vertexPosition:t=>kp(e,t),surfaceType:t=>Ap(e,t),uvBounds:t=>jp(e,t),outerWire:t=>Mp(e,t),surfaceNormal:(t,n,r)=>Np(e,t,n,r),pointOnSurface:(t,n,r)=>Pp(e,t,n,r),uvFromPoint:(t,n)=>Fp(e,t,n),projectPointOnFace:(t,n)=>Ip(e,t,n),curveTangent:(t,n)=>Lp(e,t,n),curveParameters:t=>Rp(e,t),curvePointAtParam:(t,n)=>zp(e,t,n),curveIsClosed:t=>Bp(e,t),curveIsPeriodic:t=>Hp(e,t),curvePeriod:t=>Up(e,t),curveType:t=>Wp(e,t),curveDegreeElevate:(t,n)=>Gp(e,t,n),curveKnotInsert:(t,n,r)=>Kp(e,t,n,r),curveKnotRemove:(t,n,r)=>qp(e,t,n,r),curveSplit:(t,n)=>Jp(e,t,n),approximateSurfaceLspia:(t,n,r,i,a,o,s,c,l)=>Yp(e,t,n,r,i,a,o,s,c,l),untrimFace:(t,n,r)=>Xp(e,t,n,r),createCurveAdaptor:t=>Zp(e,t),getBezierPenultimatePole:t=>Qp(e,t),getSurfaceCylinderData:t=>$p(e,t),getSurfaceAxis:t=>em(e,t),reverseSurfaceU:t=>tm(e,t),classifyPointOnFace:(t,n,r,i)=>nm(e,t,n,r,i),classifyPointRobust:(t,n,r)=>rm(e,t,n,r),classifyPointWinding:(t,n,r)=>im(e,t,n,r),detectSmallFeatures:(t,n,r)=>am(e,t,n,r),recognizeFeatures:(t,n)=>om(e,t,n),projectEdges:(t,n,r,i)=>sm(e,t,n,r,i),getNurbsCurveData:t=>cm(e,t),getNurbsSurfaceData:t=>lm(e,t)}}function dm(e,t,n){if(Array.isArray(n)&&n.length===16)return wm(e,t,n);throw Error(`brepkit: transform expects a 16-element matrix array`)}function fm(e,t,n,r,i){return wm(e,t,Uf(n,r,i))}function pm(e,t,n,r,i){return wm(e,t,Wf(n,r,i))}function mm(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])):wm(e,t,qf(n,r))}function hm(e,t,n,r){return wm(e,t,Gf(n,r))}function gm(e,t,n,r,i){return wm(e,t,Kf(n,r))}function _m(e,t,n,r){return wm(e,t,Kf(n,r))}function vm(e,t,n,r){let{point:i,tangent:a}=Lp(e,n,r),[o,s,c]=a,l=Math.sqrt(o*o+s*s+c*c);if(l<1e-12)return fm(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=pm(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=pm(e,p,n,t)}return fm(e,p,i[0],i[1],i[2])}function ym(e,t,n,r,i){let a=[t];for(let o=1;o<i;o++){let i=r*o;a.push(fm(e,t,n[0]*i,n[1]*i,n[2]*i))}return a}function bm(e,t,n,r,i,a){let o=[t];for(let s=1;s<a;s++)o.push(pm(e,t,i*s,r,n));return o}function xm(e,t,n,r,i,a,o,s){return Lf(e.gridPattern(zf(t,`gridPattern`),n[0],n[1],n[2],r[0],r[1],r[2],i,a,o,s))}function Sm(e,t){return t.map(t=>{switch(t.type){case`translate`:return fm(e,t.shape,t.x,t.y,t.z);case`rotate`:return pm(e,t.shape,t.angle,t.axis,t.center);case`scale`:return hm(e,t.shape,t.center,t.factor);case`mirror`:return mm(e,t.shape,t.origin,t.normal)}})}function Cm(e){return{transform:(t,n)=>dm(e,t,n),translate:(t,n,r,i)=>fm(e,t,n,r,i),rotate:(t,n,r,i)=>pm(e,t,n,r,i),mirror:(t,n,r)=>mm(e,t,n,r),scale:(t,n,r)=>hm(e,t,n,r),generalTransform:(t,n,r,i)=>gm(e,t,n,r,i),generalTransformNonOrthogonal:(t,n,r)=>_m(e,t,n,r),positionOnCurve:(t,n,r)=>vm(e,t,n,r),linearPattern:(t,n,r,i)=>ym(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>bm(e,t,n,r,i,a),gridPattern:(t,n,r,i,a,o,s)=>xm(e,t,n,r,i,a,o,s),transformBatch:t=>Sm(e,t)}}function wm(e,t,n){let r=t;if(!jf(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),Nf(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),Ff(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),Pf(t)}default:throw Error(`brepkit: applyMatrix does not support '${r.type}' shapes`)}}function Tm(e,t){return!!(e&&(e[0]!==0||e[1]!==0||e[2]!==0)||t&&(t[0]!==0||t[1]!==0||t[2]!==1))}function Em(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=pm(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=pm(e,i,n,t)}}return n&&(n[0]!==0||n[1]!==0||n[2]!==0)&&(i=fm(e,i,n[0],n[1],n[2])),i}function Dm(e,t){let r,i=t;if(i.type===`solid`||i.type===`compound`){let n=mp(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,Yf);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 Om(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 km(e,t){if(!jf(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 Am(e,t){if(!jf(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 jm(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 Mm(e,t){return t}function Nm(e,t,n){return t}function Pm(e,t,n){let r=zf(t,`mergeCoincidentVertices`);return e.mergeCoincidentVertices(r,n)}function Fm(e,t,n){let r=zf(t,`removeDegenerateEdges`);return e.removeDegenerateEdges(r,n)}function Im(e,t){let n=zf(t,`fixFaceOrientations`);return e.fixFaceOrientations(n)}function Lm(e,t){let n=t;return n.type===`solid`&&e.healSolid(n.id),t}function Rm(e,t){return t}function zm(e,t){if(!jf(t)||t.type!==`solid`)return null;try{return typeof e.validateSolidDetails==`function`?e.validateSolidDetails(t.id):null}catch{return null}}function Bm(e){return{isValid:t=>km(e,t),isValidStrict:t=>Am(e,t),healSolid:t=>jm(e,t),healFace:t=>Mm(e,t),healWire:(t,n)=>Nm(e,t,n),fixShape:t=>Lm(e,t),fixSelfIntersection:t=>Rm(e,t),mergeCoincidentVertices:(t,n)=>Pm(e,t,n),removeDegenerateEdges:(t,n)=>Fm(e,t,n),fixFaceOrientations:t=>Im(e,t),validationDetails:t=>zm(e,t)}}function Vm(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 Hm(e,t){return t.type===`compound`?z(e.getCompoundSolids(t.id)).length===0:!1}function Um(e){return Lf(e.makeCompound([]))}function Wm(e,t,n,r){if(r&&tp(r)&&ep(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),Hm(e,t))return n;if(Hm(e,n))return t;let i=zf(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,zf(n,`fuse`)))}function Gm(e,t,n,r){if(r&&tp(r)&&ep(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),Hm(e,t))return Um(e);if(Hm(e,n))return t;let i=zf(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(Vm(t))return Um(e);throw t}return L(n)}try{return L(e.cut(i,zf(n,`cut`)))}catch(t){if(Vm(t))return Um(e);throw t}}function Km(e,t,n,r){if(r&&tp(r)&&ep(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),Hm(e,t)||Hm(e,n))return Um(e);try{return L(e.intersect(zf(t,`intersect`),zf(n,`intersect`)))}catch(t){if(Vm(t))return Um(e);throw t}}function qm(e,n,r,i){let{point:a,normal:o}=Dm(e,r),s=jf(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 Lf(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(Ff(t(r,e)))}let[u]=l;if(l.length===1&&u!==void 0)return u;let d=Zf();return Qf.set(d,l),Lf(d)}function Jm(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(zf(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(Wm(e,i[n],i[n+1],r)):t.push(i[n]);i=t}return t(i,0)}function Ym(e,t,n,r){if(n.length===0)return t;if(n.length===1)return Gm(e,t,n[0],r);let i=zf(t,`cutAll`),a=[];for(let t of n){let n=t;n.type===`compound`?a.push(...z(e.getCompoundSolids(n.id))):a.push(zf(t,`cutAll`))}return a.length===0?t:L(e.compoundCut(i,new Uint32Array(a)))}function Xm(e,t,n){if(n.length===0)throw Error(`brepkit: split requires at least one tool`);let{point:r,normal:i}=Dm(e,n[0]),a=z(e.split(R(t,`solid`),r[0],r[1],r[2],i[0],i[1],i[2]));return Lf(e.makeCompound(a))}function Zm(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(!jf(t)||t.IsNull())&&a.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),(!jf(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 $m(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 eh(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 th(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 nh(e){return{fuse:(t,n,r)=>Wm(e,t,n,r),cut:(t,n,r)=>Gm(e,t,n,r),intersect:(t,n,r)=>Km(e,t,n,r),section:(t,n,r)=>qm(e,t,n,r),fuseAll:(t,n)=>Jm(e,t,n),cutAll:(t,n,r)=>Ym(e,t,n,r),split:(t,n)=>Xm(e,t,n),meshBoolean:(t,n,r,i,a,o)=>Zm(e,t,n,r,i,a,o),checkBoolean:(t,n,r)=>Qm(e,t,n,r,t=>km(e,t)),hull:(t,n)=>$m(e,t,n),hullFromPoints:(t,n)=>eh(e,t,n),buildSolidFromFaces:(t,n,r)=>th(e,t,n,r)}}function rh(e,t,n,r){return Rf(e.makeVertex(t,n,r))}function ih(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 mh(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(jf(t)&&t.type===`edge`)return t;throw Error(`brepkit: makeEdge requires a curve with origin/direction, or an edge handle`)}function ah(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 Ff(e.makeWire(n,!0))}function oh(e,t,n){let r=t,i=r.type===`edge`?e.makeWire([r.id],!0):R(t,`wire`);return Nf(n?e.makePlanarFaceFromWire(i):e.makeFaceFromWire(i))}function sh(e,t,n,r){return L(e.makeBox(t,n,r))}function ch(e,t,n){return Nf(e.makeRectangle(t,n))}function lh(e,t,n,r,i){let a=L(e.makeCylinder(t,n));return Tm(r,i)?Em(e,a,r,i):a}function uh(e,t,n){let r=L(e.makeSphere(t,32));return n&&(n[0]!==0||n[1]!==0||n[2]!==0)?fm(e,r,n[0],n[1],n[2]):r}function dh(e,t,n,r,i,a){let o=L(e.makeCone(t,n,r));return Tm(i,a)?Em(e,o,i,a):o}function fh(e,t,n,r,i){let a=L(e.makeTorus(t,n,32));return Tm(r,i)?Em(e,a,r,i):a}function ph(e,t,n,r){let i=Math.max(t,n,r);return gm(e,uh(e,i),[t/i,0,0,0,n/i,0,0,0,r/i],[0,0,0],!1)}function mh(e,t,n){return Pf(e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function hh(e,t,n,r){let i=Math.sqrt(n[0]**2+n[1]**2+n[2]**2);return Pf(e.makeCircleEdge(t[0],t[1],t[2],n[0]/i,n[1]/i,n[2]/i,r))}function gh(e,t,n,r,i,a){return Wh(e,t,n,r,i,a)}function _h(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 vh(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 mh(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=_h(p,m,h,g,_,v);if(!y)return mh(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 Pf(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 yh(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 Pf(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 Pf(e.makeEllipseEdge(t[0],t[1],t[2],n[0]/o,n[1]/o,n[2]/o,r,i))}function bh(e,t,n,r,i,a,o,s){return Gh(e,t,n,r,i,a,o,s)}function xh(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 Pf(e.makeNurbsEdge(c[0],c[1],c[2],l[0],l[1],l[2],r,a,s,o))}function Sh(e,t,n,r){return Pf(e.makeTangentArc3d(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]))}function Ch(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 ah(e,[Ih(e,p)])}function wh(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 Ff(e.makeWire(n,!1))}function Th(e,t){let n=t.filter(jf);if(n.length===0)throw Error(`brepkit: makeCompound requires at least one shape`);if(n.every(e=>e.type===`solid`))return Lf(e.makeCompound(n.map(e=>e.id)));let r=Zf();return Qf.set(r,n),Lf(r)}function Eh(e,t,n){let r=sh(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?fm(e,r,i,a,o):r}function Dh(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 Oh(e,t){return oh(e,t,!1)}function kh(e,t,n){let r=n.map(e=>R(e,`wire`));return Nf(e.addHolesToFace(R(t,`face`),r))}function Ah(e,t){return Nf(e.removeHolesFromFace(R(t,`face`)))}function jh(e,t,n){return oh(e,n,!1)}function Mh(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 Nf(e.interpolateSurface(i,n,r,a,o))}catch{return Nh(e,t,n,r)}}function Nh(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=Ph(e,t(n,s),t(n,c),t(n,l));d&&a.push(d);let f=Ph(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 Dp(e,a,1e-6)}function Ph(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 oh(e,ah(e,[mh(e,t,n),mh(e,n,r),mh(e,r,t)]))}catch(e){return console.warn(`brepkit: makeNonPlanarFace failed:`,e),null}}function Fh(e,t,n){let r=t.map(e=>R(e,`face`));return L(e.sewFaces(r,n))}function Ih(e,n,r){if(r?.tolerance!==void 0&&ep(`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 mh(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 Pf(e.interpolatePoints(a,i))}function Lh(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 Pf(e.approximateCurveLspia(a,r,o,i,100))}function Rh(e,t,n,r){return{x:t,y:n,z:r}}function zh(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 Bh(e,t,n,r){return{x:t,y:n,z:r}}function Vh(e,t,n,r,i,a,o){return{origin:[t,n,r],direction:[i,a,o]}}function Hh(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 Uh(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 Wh(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 Pf(e.makeNurbsEdge(b,x,S,C,w,ee,2,v,g,_))}function Gh(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 Pf(e.makeNurbsEdge(y,b,x,S,C,w,2,_,h,g))}function Kh(e){return{makeVertex:(t,n,r)=>rh(e,t,n,r),makeEdge:(t,n,r)=>ih(e,t,n,r),makeWire:t=>ah(e,t),makeWireFromMixed:t=>wh(e,t),makeFace:(t,n)=>oh(e,t,n),makeBox:(t,n,r)=>sh(e,t,n,r),makeRectangle:(t,n)=>ch(e,t,n),makeCylinder:(t,n,r,i)=>lh(e,t,n,r,i),makeSphere:(t,n)=>uh(e,t,n),makeCone:(t,n,r,i,a)=>dh(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>fh(e,t,n,r,i),makeEllipsoid:(t,n,r)=>ph(e,t,n,r),makeLineEdge:(t,n)=>mh(e,t,n),makeCircleEdge:(t,n,r)=>hh(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>gh(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>vh(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>yh(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>bh(e,t,n,r,i,a,o,s),makeBezierEdge:t=>xh(e,t),makeTangentArc:(t,n,r)=>Sh(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>Ch(e,t,n,r,i,a,o),makeCompound:t=>Th(e,t),makeBoxFromCorners:(t,n)=>Eh(e,t,n),solidFromShell:t=>Dh(e,t),makeNonPlanarFace:t=>Oh(e,t),addHolesInFace:(t,n)=>kh(e,t,n),removeHolesFromFace:t=>Ah(e,t),makeFaceOnSurface:(t,n)=>jh(e,t,n),bsplineSurface:(t,n,r)=>Mh(e,t,n,r),triangulatedSurface:(t,n,r)=>Nh(e,t,n,r),buildTriFace:(t,n,r)=>Ph(e,t,n,r),sewAndSolidify:(t,n)=>Fh(e,t,n),interpolatePoints:(t,n)=>Ih(e,t,n),approximatePoints:(t,n)=>Lh(e,t,n),createPoint3d:(t,n,r)=>Rh(e,t,n,r),createDirection3d:(t,n,r)=>zh(e,t,n,r),createVector3d:(t,n,r)=>Bh(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>Vh(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>Hh(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>Uh(e,t,n,r,i,a,o,s,c,l)}}function qh(e,t,n,r){let i=zf(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 Jh(e,t,n,r){let i=zf(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)):(ep(`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):(ep(`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 Yh(e,t,n,r,i){let a=r*Math.tan(i*Math.PI/180),o=zf(t,`chamferDistAngle`),s=n.map(e=>R(e,`edge`));return typeof e.chamferAsymmetric==`function`?L(e.chamferAsymmetric(o,s,r,a)):(ep(`chamfer-dist-angle`,`chamferAsymmetric not available; using averaged distance.`),L(e.chamfer(o,s,(r+a)/2)))}function Xh(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 Zh(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=Xh(e,t);if(r===null)return null;let i=-1,a=1/0;for(let t of n)try{let n=Xh(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 $h(e,t,n,r){if(r.has(t))return t;let i=Zh(e,t,n);if(i!==null)return i;let a=Qh(e,t,n);return a===null?t:a}function eg(e,t,n,r,i){i!==void 0&&ep(`shell-tolerance`,`shell() tolerance parameter is not supported; brepkit uses its own internal tolerance.`);let a=zf(t,`shell`),o=z(e.getSolidFaces(a)),s=new Set(o),c=n.map(t=>$h(e,R(t,`face`),o,s));return L(e.shell(a,r,c))}function tg(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 ng(e,t,n,r){r!==void 0&&ep(`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=zf(t,`offset`);return L(e.offsetSolidV2(a,n))}function rg(e,t,n){let r=zf(t,`filletVariable`);return L(e.filletVariable(r,n))}function ig(e,t,n,r,i,a){let o=zf(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 ag(e,t,n){let r=zf(t,`defeature`),i=n.map(e=>R(e,`face`));return L(e.defeature(r,i))}function og(e){switch(e){case`arc`:case`tangent`:return`arc`;case`intersection`:return`intersection`;default:return`intersection`}}function sg(e,n,r,i){if(typeof e.offsetWire2DWithJoin==`function`)return Ff(e.offsetWire2DWithJoin(R(n,`wire`),r,og(i)));let a=mp(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 Ff(e.makePolygonWire(c))}function cg(e,t){if(t.type===`solid`)try{e.healSolid(R(t))}catch(e){console.warn(`brepkit: healing failed in simplify:`,e)}return t}function lg(e,t){let n=t,r=e.reverseShape(n.id);return Mf(n.type,r)}function ug(e){return{fillet:(t,n,r)=>qh(e,t,n,r),chamfer:(t,n,r)=>Jh(e,t,n,r),chamferDistAngle:(t,n,r,i)=>Yh(e,t,n,r,i),shell:(t,n,r,i)=>eg(e,t,n,r,i),thicken:(t,n)=>tg(e,t,n),offset:(t,n,r)=>ng(e,t,n,r),filletVariable:(t,n)=>rg(e,t,n),draft:(t,n,r,i,a)=>ig(e,t,n,r,i,ap(n,a)),defeature:(t,n)=>ag(e,t,n),offsetWire2D:(t,n,r)=>sg(e,t,n,r),simplify:t=>cg(e,t),reverseShape:t=>lg(e,t)}}function dg(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 fg(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 pg(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 mg(e,t,n){try{return{hash:n,normal:e.getFaceNormal(t),centroid:pg(e,t)}}catch{return{hash:n,normal:[0,0,0],centroid:pg(e,t)}}}var hg=.707,gg=100,_g=.05;function vg(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<hg)continue;let c=fg(e.centroid,o.centroid);if(c>gg)continue;let l=s-c/gg;l>r&&(r=l),i.push({idx:a,score:l})}return{matches:i,bestScore:r}}function yg(e,t){let n=1/0,r;for(let i of t){let t=fg(e.centroid,i.centroid);t<n&&(n=t,r=i)}return r}function bg(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(mg(e,i,r[n]??i%a))}let p=i.map(t=>mg(e,t,t%a)),m=new Set;for(let e of p){let{matches:n,bestScore:r}=vg(e,f);if(n.length>0){for(let i of n)if(i.score>=r-_g){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=yg(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 xg(e,t,n,r,i,a,o,s){let c=new Set(s),l=new Map(a);bg(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 Sg(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 Cg(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?xg(e,l,d,f,a,o,s,c):Sg(i,r,u,t,s,c)}else if(l)bg(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 wg(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 Cg(e,n,d,r,i,c,l,u,o)}return{shape:n,evolution:{modified:c,generated:l,deleted:u}}}function Tg(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 Eg(e,t){let n=new Set;Tg(t.combinedModified,e.evolution.modified,e.evolution.deleted,n,t.combinedDeleted),Tg(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 Dg(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=dg(a(t.id,e),i);s=n.shape,Eg(n,c)}return{shape:s,accum:c}}function Og(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{...dg(o(u.id,d.id),i),diagnostics:l}}catch(e){if(!Vm(e))throw e}if(d.type===`compound`){let{shape:n,accum:a}=Dg(e,t,d.id,r,i,o);return{shape:n,evolution:{modified:a.combinedModified,generated:a.combinedGenerated,deleted:a.combinedDeleted},diagnostics:l}}}return{...wg(e,s(t,n,a),r,i,!1,t),diagnostics:l}}function kg(e,t,n,r,i,a,o){return wg(e,fm(e,t,n,r,i),a,o,!0)}function Ag(e,t,n,r,i,a,o){return wg(e,pm(e,t,n*180/Math.PI,a,o),r,i,!0)}function jg(e,t,n,r,i,a){return wg(e,mm(e,t,n,r),i,a,!0)}function Mg(e,t,n,r,i,a){return wg(e,hm(e,t,n,r),i,a,!0)}function Ng(e,t,n,r,i,a,o){return wg(e,gm(e,t,n,r,i),a,o,!0)}function Pg(e,t,n,r,i,a){return Og(e,t,n,r,i,a,(t,n)=>e.fuseWithEvolution(t,n),(t,n,r)=>Wm(e,t,n,r),`fuseWithHistory`)}function Fg(e,t,n,r,i,a){return Og(e,t,n,r,i,a,(t,n)=>e.cutWithEvolution(t,n),(t,n,r)=>Gm(e,t,n,r),`cutWithHistory`)}function Ig(e,t,n,r,i,a){return Og(e,t,n,r,i,a,(t,n)=>e.intersectWithEvolution(t,n),(t,n,r)=>Km(e,t,n,r),`intersectWithHistory`)}function Lg(e,t,n,r,i,a){return wg(e,qh(e,t,n,r),i,a,!1,t)}function Rg(e,t,n,r,i,a){return wg(e,Jh(e,t,n,r),i,a,!1,t)}function zg(e,t,n,r,i,a,o){return wg(e,eg(e,t,n,r,o),i,a,!1,t)}function Bg(e,t,n,r,i){return wg(e,tg(e,t,n),r,i,!1,t)}function Vg(e,t,n,r,i,a){return wg(e,ng(e,t,n,a),r,i,!1,t)}function Hg(e,t,n,r,i,a,o,s){return wg(e,ig(e,t,n,r,i,a),o,s,!1,t)}function Ug(e,t,n,r,i){return wg(e,wm(e,t,n),r,i,!0)}function Wg(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=Jf(e.type===`translate`?Uf(e.x,e.y,e.z):Wf(e.angle,e.axis,e.center),n);return{handle:n,dispose:()=>{}}}function Gg(e){return{translateWithHistory:(t,n,r,i,a,o)=>kg(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>Ag(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>jg(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>Mg(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>Ng(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>Pg(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>Fg(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>Ig(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>Lg(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>Rg(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>zg(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>Bg(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>Vg(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>Hg(e,t,n,r,i,ap(n,a),o,s),applyComposedTransformWithHistory:(t,n,r,i)=>Ug(e,t,n,r,i),composeTransform:t=>Wg(e,t)}}function Kg(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=Yg(e,r,a,!!n.includeUVs,o);else if(i.type===`face`)s=e_(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 qg(e,n,r,i){i>0&&ep(`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 Jg(e,t){return!1}function Yg(e,t,n,r,i){try{return Xg(e,t,n,r,i)}catch(r){return console.warn(`brepkit: tessellateSolidGrouped failed (solidId=${t}), falling back to per-face:`,r),$g(e,t,n,i)}}function Xg(e,t,n,r,i){return typeof e.tessellateSolidGroupedBinary==`function`?Zg(e,t,n,r,i,e.tessellateSolidGroupedBinary(t,n,i)):Qg(e,t,n,r,i)}function Zg(e,n,r,i,a,o){let s=o.positions,c=o.normals,l=o.indices,u=o.faceOffsets,d=z(e.getSolidFaces(n)),f=u.length-1;if(f!==d.length)throw Error(`faceOffsets/faceIds length mismatch: ${f} groups vs ${d.length} faces`);let p=[];for(let e=0;e<u.length-1;e++){let n=t(u,e),r=t(u,e+1)-n;r!==0&&p.push({start:n,count:r,faceHash:d[e]??0})}let m=new Float32Array;if(i){let t=s.length/3*2;try{let i=e.tessellateSolidUV(n,r,a),o=JSON.parse(i);m=o.uvs.length===t?new Float32Array(o.uvs):new Float32Array(t)}catch{m=new Float32Array(t)}}return{vertices:s,normals:c,triangles:l,uvs:m,faceGroups:p}}function Qg(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 $g(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 e_(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 t_(e){return{mesh:(t,n)=>Kg(e,t,n),meshEdges:(t,n,r)=>qg(e,t,n,r),hasTriangulation:t=>Jg(e,t),meshShape:(e,t,n)=>{}}}function n_(e,t){if(t.length===0)return``;let n=[];for(let r of t){let t=Bf(e,r,`exportSTEP`);for(let r of t){let t=e.exportStep(r);n.push(new TextDecoder().decode(t))}}return n.join(`
|
|
8
|
+
`)}function r_(e,n,r,i=be,a=xe){let{vertices:o,triangles:s}=Kg(e,L(t(Bf(e,n,`exportSTL`),0)),{tolerance:i,angularTolerance:a,skipNormals:!0});return r?we(o,s):Te(o,s)}function i_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return z(e.importStep(n)).map(L)}function a_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return L(e.importStl(n))}function o_(e,t){if(t.length===0)return``;let n=[];for(let r of t){let t=Bf(e,r,`exportIGES`);for(let r of t){let t=e.exportIges(r);n.push(new TextDecoder().decode(t))}}return n.join(`
|
|
9
|
+
`)}function s_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return z(e.importIges(n)).map(L)}function c_(e,t,n){return t.length===0?``:n_(e,t.map(e=>e.shape))}function l_(e,t,n){let r=zf(t,`export3MF`);return Hf(e.export3mf(r,n))}function u_(e,t,n){let r=zf(t,`exportGLB`);return Hf(e.exportGlb(r,n))}function d_(e,t,n){let r=zf(t,`exportOBJ`);return Hf(e.exportObj(r,n))}function f_(e,t,n){let r=zf(t,`exportPLY`);return Hf(e.exportPly(r,n))}function p_(e,t){return z(e.import3mf(new Uint8Array(t))).map(e=>L(e))}function m_(e,t){return L(e.importObj(new Uint8Array(t)))}function h_(e,t){return L(e.importGlb(new Uint8Array(t)))}function g_(e,t){let n=t;return n.type===`solid`?e.toBREP(n.id):(ep(`brep-non-solid`,`toBREP for non-solid shapes uses STEP format.`),n_(e,[t]))}function __(e,t){if(typeof e.fromBREP==`function`&&t.trimStart().startsWith(`{`))return L(e.fromBREP(t));let n=i_(e,t)[0];if(!n)throw Error(`brepkit: fromBREP produced no shapes`);return n}function v_(e,t){return{__brepkit_xcaf:!0,shapes:t,delete:Af}}function y_(e,t,n){return t&&t.__brepkit_xcaf&&Array.isArray(t.shapes)?n_(e,t.shapes.map(e=>e.shape)):``}function b_(e,t,n){return n_(e,t.map(e=>e.shape))}function x_(e){return{exportSTEP:t=>n_(e,t),exportSTL:(t,n,r,i)=>r_(e,t,n,r,i),importSTEP:t=>i_(e,t),importSTL:t=>a_(e,t),exportIGES:t=>o_(e,t),importIGES:t=>s_(e,t),exportSTEPAssembly:(t,n)=>c_(e,t,n),export3MF:(t,n)=>l_(e,t,n),exportGLB:(t,n)=>u_(e,t,n),exportOBJ:(t,n)=>d_(e,t,n),exportPLY:(t,n)=>f_(e,t,n),import3MF:t=>p_(e,t),importOBJ:t=>m_(e,t),importGLB:t=>h_(e,t),toBREP:t=>g_(e,t),fromBREP:t=>__(e,t),createXCAFDocument:t=>v_(e,t),writeXCAFToSTEP:(t,n)=>y_(e,t,n),exportSTEPConfigured:(t,n)=>b_(e,t,n)}}function S_(e,t){return{x:e,y:t}}function C_(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 w_(e,t){return{x:e,y:t}}function T_(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:Af}}function E_(e){return e}function D_(e){return e}function O_(e,t,n,r){return x(e,t,n,r)}function k_(e,t,n,r){return S(e,t,n,r)}function A_(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 j_(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 A_(e,t,p+h*Math.cos(S),m+h*Math.sin(S),i,a)}function M_(e,t,n,r,i,a,o){return C(e,t,n,r,i,a,o)}function N_(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 P_(e){return w(e)}function F_(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 I_(e,t){return _(np(e),t)}function L_(e,t){return{point:_(np(e),t),tangent:v(np(e),t)}}function R_(e){return y(np(e))}function z_(e){return b(rp(e))}function B_(e,t,n){return{__bk2d:`trimmed`,basis:np(e),tStart:t,tEnd:n}}function V_(e){return JSON.parse(JSON.stringify(e))}function H_(e,t){let n=np(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 F_(i)}function U_(e,t,n){return ee(np(e),t,n)}function W_(e,t,n,r){return te(np(e),t,n,r)}function G_(e,t,n,r){return ne(np(e),t,n,r)}function K_(e,t,n){return re(np(e),t,n)}function q_(e,t,n,r,i){return ie(np(e),t,n,r,i)}function J_(e,t,n,r,i,a){return iv(e,Z_(t,n,r,i,a))}function Y_(e,t,n){return{m:e,tx:t,ty:n,delete:Af}}function X_(){return Y_([1,0,0,0,1,0,0,0,1],0,0)}function Z_(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return X_();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 Y_(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function Q_(e,t){return Y_([1,0,0,0,1,0,0,0,1],e,t)}function $_(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 Y_(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return Y_([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function ev(e,t,n){let r=Math.cos(e),i=Math.sin(e);return Y_([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function tv(e,t,n){return Y_([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function nv(e,t,n){e.tx=t,e.ty=n}function rv(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 iv(e,n){let r=np(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 av(e,t,n){let r=ae(np(e),np(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function ov(e,t,n){let r=np(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 sv(e,t,n,r,i,a){let o=np(e),s=np(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=ov(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=ov(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 cv(e,n,r,i){let a=np(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 F_(l,{degMax:s})}function lv(e){let n=rp(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return lv(cv(e,1e-6,`C2`,10));let r=y(np(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 uv(){return ge()}function dv(e,t,n){_e(ip(e),np(t),n)}function fv(e){let t=ip(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function pv(e,t){let n=ip(e),r=ip(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 mv(e,t){let n=ip(e),r=ip(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function hv(e,t,n){let r=ip(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function gv(e){let t=rp(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function _v(e){let t=rp(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function vv(e){let t=rp(e);return t.__bk2d===`bezier`?[...t.poles]:null}function yv(e){let t=rp(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function bv(e){let t=rp(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function xv(e){return me(np(e))}function Sv(e){return he(e)}function Cv(e,t){let n=np(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 wv(e,n,r,i,a){let o=np(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 mh(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?Pf(t(p,0)):Ff(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 mh(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 Pf(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 Ih(e,u)}function Tv(e,t,r){if(!jf(r))throw Error(`brepkit: buildEdgeOnSurface requires a face handle as surface`);let i=R(r,`face`),a=np(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 Ih(e,c)}function Ev(e){return e}function Dv(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 Ov(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)}));Dv(d,u,80,.05);let f=d.map(e=>e.uv);if(f.length>=2)return F_(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 kv(e,t,n){return e}function Av(e,n,r){if(n.length>=1){let r=mp(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 Nf(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 Oh(e,i)}function jv(e){return{createPoint2d:(e,t)=>S_(e,t),createDirection2d:(e,t)=>C_(e,t),createVector2d:(e,t)=>w_(e,t),createAxis2d:(e,t,n,r)=>T_(e,t,n,r),wrapCurve2dHandle:e=>E_(e),createCurve2dAdaptor:e=>D_(e),makeLine2d:(e,t,n,r)=>O_(e,t,n,r),makeCircle2d:(e,t,n,r)=>k_(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>A_(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>j_(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>M_(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>N_(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>P_(e),makeBSpline2d:(e,t)=>F_(e,t),evaluateCurve2d:(e,t)=>I_(e,t),evaluateCurve2dD1:(e,t)=>L_(e,t),getCurve2dBounds:e=>R_(e),getCurve2dType:e=>z_(e),trimCurve2d:(e,t,n)=>B_(e,t,n),reverseCurve2d:e=>{},copyCurve2d:e=>V_(e),offsetCurve2d:(e,t)=>H_(e,t),translateCurve2d:(e,t,n)=>U_(e,t,n),rotateCurve2d:(e,t,n,r)=>W_(e,t,n,r),scaleCurve2d:(e,t,n,r)=>G_(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>K_(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>q_(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>J_(e,t,n,r,i,a),createIdentityGTrsf2d:()=>X_(),createAffinityGTrsf2d:(e,t,n,r,i)=>Z_(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>Q_(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>$_(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>ev(e,t,n),createScaleGTrsf2d:(e,t,n)=>tv(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{nv(e,t,n)},multiplyGTrsf2d:(e,t)=>{rv(e,t)},transformCurve2dGeneral:(e,t)=>iv(e,t),intersectCurves2d:(e,t,n)=>av(e,t,n),projectPointOnCurve2d:(e,t,n)=>ov(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>sv(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>cv(e,t,n,r),decomposeBSpline2dToBeziers:e=>lv(e),createBoundingBox2d:()=>uv(),addCurveToBBox2d:(e,t,n)=>{dv(e,t,n)},getBBox2dBounds:e=>fv(e),mergeBBox2d:(e,t)=>{pv(e,t)},isBBox2dOut:(e,t)=>mv(e,t),isBBox2dOutPoint:(e,t,n)=>hv(e,t,n),getCurve2dCircleData:e=>gv(e),getCurve2dEllipseData:e=>_v(e),getCurve2dBezierPoles:e=>vv(e),getCurve2dBezierDegree:e=>yv(e),getCurve2dBSplineData:e=>bv(e),serializeCurve2d:e=>xv(e),deserializeCurve2d:e=>Sv(e),splitCurve2d:(e,t)=>Cv(e,t),liftCurve2dToPlane:(t,n,r,i)=>wv(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>Tv(e,t,n),extractSurfaceFromFace:e=>Ev(e),extractCurve2dFromEdge:(t,n)=>Ov(e,t,n),buildCurves3d:e=>{},fixWireOnFace:(e,t,n)=>kv(e,t,n),fillSurface:(t,n)=>Av(e,t,n)}}function Mv(e,t){let n=t;if(n.type===`solid`)return e.volume(R(t),Yf);if(n.type===`compound`){let n=mp(e,t,`solid`),r=0;for(let t of n)r+=e.volume(R(t),Yf);return r}return 0}function Nv(e,t){let n=t;if(n.type===`face`)return e.faceArea(R(t),Yf);if(n.type===`solid`)return e.surfaceArea(R(t),Yf);if(n.type===`compound`){let n=mp(e,t,`face`),r=0;for(let t of n)r+=e.faceArea(R(t),Yf);return r}return 0}function Pv(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 Fv(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 Iv(e,t){let r=t;if(r.type===`solid`)return n(e.centerOfMass(R(t),Yf));if(r.type===`face`){let n=jp(e,t);return Pp(e,t,(n.uMin+n.uMax)/2,(n.vMin+n.vMax)/2)}if(r.type===`edge`)return Fv(e,r.id);if(r.type===`vertex`)return kp(e,t);let i=mp(e,t,`vertex`);if(i.length>0){let t=0,n=0,r=0;for(let a of i){let i=kp(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 Lv(e,t){let n=t;return n.type===`edge`?Fv(e,n.id):Iv(e,t)}function Rv(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=kp(e,t);return{min:[...n],max:[...n]}}let i=mp(e,t,`vertex`);if(i.length===0)return{min:[0,0,0],max:[0,0,0]};let a=kp(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=kp(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 zv(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 Bv(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 Vv(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 Hv(e,t){let n=n=>zv(e,t,n);return{distanceTo(e){return n(e)},dispose(){}}}function Uv(e,t,n=!1){let r=t,i=r.type===`edge`||r.type===`wire`||r.type===`face`;return{volume:Mv(e,t),area:Nv(e,t),length:n&&i?Pv(e,t):0,centerOfMass:Iv(e,t),boundingBox:Rv(e,t)}}function Wv(e){return{volume:t=>Mv(e,t),area:t=>Nv(e,t),length:t=>Pv(e,t),centerOfMass:t=>Iv(e,t),linearCenterOfMass:t=>Lv(e,t),boundingBox:t=>Rv(e,t),distance:(t,n)=>zv(e,t,n),surfaceCurvature:(t,n,r)=>Bv(e,t,n,r),surfaceCenterOfMass:t=>Vv(e,t),createDistanceQuery:t=>Hv(e,t),measureBulk:(t,n)=>Uv(e,t,n)}}function Gv(e){return e.sketchNew()}function Kv(e,t,n,r,i){return e.sketchAddPoint(t,n,r,i)}function qv(e,t,n){e.sketchAddConstraint(t,n)}function Jv(e,t,n,r){return e.sketchSolve(t,n,r)}function Yv(e,t,n,r,i){return e.sketchAddArc(t,n,r,i)}function Xv(e,t){let n=e.sketchDof(t);return typeof n==`string`?n:String(n)}function Zv(e){return{sketchNew:()=>Gv(e),sketchAddPoint:(t,n,r,i)=>Kv(e,t,n,r,i),sketchAddArc:(t,n,r,i)=>Yv(e,t,n,r,i),sketchAddConstraint:(t,n)=>{qv(e,t,n)},sketchSolve:(t,n,r)=>Jv(e,t,n,r),sketchDof:t=>Xv(e,t)}}function Qv(e,t,n,r){return L(e.extrude(R(t,`face`),n[0],n[1],n[2],r))}function $v(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 ey(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 ty(e,t,n,r,i){(n!==void 0||r!==void 0||i!==void 0)&&ep(`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 ny(e){switch(e){case 0:return`rmf`;case 1:return`rightCorner`;case 2:return`roundCorner`;default:return}}function ry(e,t,n,r){let i=r?.transitionMode===void 0?void 0:ny(r.transitionMode),a=t,o=a.type===`wire`?e.makeFaceFromWire(a.id):R(t,`face`);if(n.type===`wire`){let t=mp(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&&ep(`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=Om(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 iy(e,t,n){let r=t,i=r.type===`wire`?e.makeFaceFromWire(r.id):R(t,`face`);if(n.type===`wire`){let t=mp(e,n,`edge`).map(e=>R(e,`edge`));return L(e.sweepAlongEdges(i,t))}let a=Om(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 ay(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 oy(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 sy(e){switch(e){case`right`:return`rightCorner`;case`round`:return`roundCorner`;case`transformed`:return`rmf`;default:return}}function cy(e,t,n){return n?{shape:e,firstShape:t,lastShape:t}:e}function ly(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 uy(e,t){try{if(t.type!==`wire`)return{edgeId:R(t,`edge`)};let n=mp(e,t,`edge`);if(n.length===1){let e=n[0];return e?{edgeId:R(e,`edge`)}:void 0}ep(`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 dy(e,t,n,r){let i=uy(e,n);if(i)return ly(e,t,i.edgeId,r)}function fy(e,t,n){let r=Om(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 py(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?sy(s):void 0;if(c){let r=dy(e,a,n,c);if(r)return cy(r,t,o)}return cy(fy(e,a,n)||iy(e,t,n),t,o)}function my(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 ty(e,t)}function hy(e,t,n,r){let i={type:`extrusionLaw`,profile:t,length:n,endFactor:r,Trim(e,t,n){return i},delete:Af};return i}function gy(e,t,n,r,i,a,o){if(i!==null){let r=Qv(e,n,Np(e,n,0,0),i);return o?Wm(e,t,r):r}return t}function _y(e){return{extrude:(t,n,r)=>Qv(e,t,n,r),revolve:(t,n,r)=>$v(e,t,n,r),revolveVec:(t,n,r,i)=>ey(e,t,n,r,i),loft:(t,n,r,i)=>ty(e,t,n,r,i),sweep:(t,n,r)=>ry(e,t,n,r),simplePipe:(t,n)=>iy(e,t,n),helicalSweep:(t,n,r,i,a,o)=>ay(e,t,n,r,i,a,o),sweepWithOptions:(t,n,r,i,a)=>oy(e,t,n,r,i,a),sweepPipeShell:(t,n,r)=>py(e,t,n,r),loftAdvanced:(t,n)=>my(e,t,n),buildExtrusionLaw:(t,n,r)=>hy(e,t,n,r),draftPrism:(t,n,r,i,a,o)=>gy(e,t,n,r,i,a,o)}}function vy(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 yy=class{oc;kernelId=`brepkit`;capabilities=r;bk;constructor(e){this.bk=e,this.oc=e;let t=this.bk;Object.assign(this,nh(t),Kh(t),_y(t),ug(t),Cm(t),t_(t),x_(t),Wv(t),Op(t),um(t),Bm(t),Gg(t),Zv(t),jv(t),vy(t))}};function by(e){throw Error(`manifold: ${e} is not implemented`)}var xy=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 Sy(e){return xy.has(e)}function B(e,t,n){return{op:e,params:t,inputs:n,replayable:Sy(e)&&n.every(e=>e.replayable)}}function Cy(e,t){return{manifold:e,node:t}}function V(e){return e.manifold}function H(e){return e.node}function wy(e){if(e&&typeof e==`object`&&`manifold`in e&&`node`in e)return e}var Ty=[`occt`,`occt-wasm`];function Ey(){for(let e of Ty)try{return U(e)}catch{}}function Dy(e){let t=Ey();if(!t)throw Error(`manifold: ${e} requires a registered occt kernel; none is available`);return t}var Oy=new WeakMap,ky=[0,0,0],Ay=[0,0,1];function jy(e){return Math.hypot(e[0],e[1],e[2])}function My(e){let t=jy(e);return t===0?[...Ay]:[e[0]/t,e[1]/t,e[2]/t]}function Ny(e){let[t,n,r]=My(e);return[0,180/Math.PI*Math.atan2(Math.hypot(t,n),r),180/Math.PI*Math.atan2(n,t)]}function Py(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(Ny(n))),(t[0]!==0||t[1]!==0||t[2]!==0)&&(r=r.translate(t)),r}return{makeBox:(e,n,r)=>Cy(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 Cy(t.cube(r,!1).translate(i),B(`makeBoxWithCorners`,{p1:e,p2:n},[]))},makeCylinder:(e,r,i=ky,a=Ay)=>Cy(n(t.cylinder(r,e,e,0,!1),i,a),B(`makeCylinder`,{radius:e,height:r,center:i,direction:a},[])),makeSphere:(e,n=ky)=>{let r=t.sphere(e,0);return(n[0]!==0||n[1]!==0||n[2]!==0)&&(r=r.translate(n)),Cy(r,B(`makeSphere`,{radius:e,center:n},[]))},makeCone:(e,r,i,a=ky,o=Ay)=>Cy(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=ky,o=Ay)=>{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 Cy(n(t.revolve([c],0),a,o),B(`makeTorus`,{majorRadius:r,minorRadius:i,center:a,direction:o},[]))},makeEllipsoid:(e,n,r)=>Cy(t.sphere(1,0).scale([e,n,r]),B(`makeEllipsoid`,{aLength:e,bLength:n,cLength:r},[])),makeRectangle:()=>by(`makeRectangle`)}}function Fy(e){return e}function Iy(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 Ly(e){let t=H(Fy(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 Ry(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 zy(e){let t=e.Manifold;function n(e,t,n){let r=Fy(e),i=Fy(t);return Cy(V(r).add(V(i)),B(`makeFuse`,{},[H(r),H(i)]))}function r(e,t,n){let r=Fy(e),i=Fy(t);return Cy(V(r).subtract(V(i)),B(`makeCut`,{},[H(r),H(i)]))}function i(e,t,n){let r=Fy(e),i=Fy(t);return Cy(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(Fy),[i]=r;if(i===void 0)throw Error(`manifold: fuseAll requires at least one shape`);return r.length===1?i:Cy(t.union(r.map(V)),B(`makeFuse`,{},r.map(H)))}function o(e,n,r){let i=Fy(e);if(n.length===0)return i;let a=n.map(Fy);return Cy(t.difference([V(i),...a.map(V)]),B(`makeCut`,{},[H(i),...a.map(H)]))}function s(e,t,n){let r=Fy(e),{normal:i,offset:a}=Ly(t),[o]=V(r).splitByPlane(i,a);return Cy(o,B(`section`,{normal:i,offset:a},[H(r),H(Fy(t))]))}function c(e,n){let r=Fy(e),[i]=n;if(i===void 0)throw Error(`manifold: split requires at least one tool`);let a=Fy(i),{normal:o,offset:s}=Ly(i),[c,l]=V(r).splitByPlane(o,s);return Cy(t.union([c,l]),B(`split`,{normal:o,offset:s},[H(r),H(a)]))}function l(e,t,n){let r=[],i=Fy(e),a=Fy(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 Ry(Iy(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 By(e){return e}function Vy(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Hy(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 Uy(e,t,n){let r=Vy();return r[12]=e,r[13]=t,r[14]=n,r}function Wy(e,t,n){let r=e,[i,a,o]=Hy(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=Vy();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 Gy(e,t){let n=Vy();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 Ky(e,t){let[n,r,i]=Hy(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=Vy();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 qy(e,t){let n=Vy();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 Jy(e,t,n,r,i){return Cy(e.transform(t),B(n,r,[i]))}function Yy(e,t,n,r){let i=By(e);return Jy(V(i),Uy(t,n,r),`translateShape`,{x:t,y:n,z:r},H(i))}function Xy(e,t,n=[0,0,1],r=[0,0,0]){let i=By(e);return Jy(V(i),Wy(t,n,r),`rotateShape`,{angle:t,axis:n,center:r},H(i))}function Zy(e,t,n){let r=By(e);return Jy(V(r),Ky(t,n),`mirrorShape`,{origin:t,normal:n},H(r))}function Qy(e,t,n){let r=By(e);return Jy(V(r),Gy(t,n),`scaleShape`,{center:t,factor:n},H(r))}function $y(e,t){if(!Array.isArray(t)||t.length!==16)throw Error(`manifold: transform expects a 16-element column-major matrix`);let n=By(e);return Jy(V(n),t,`transformShape`,{matrix:[...t]},H(n))}function eb(e,t,n,r){let i=By(e);return Jy(V(i),qy(t,n),`generalTransform`,{linear:t,translation:n,isOrthogonal:r},H(i))}function tb(e,t,n){let r=By(e);return Jy(V(r),qy(t,n),`generalTransformNonOrthogonal`,{linear:t,translation:n},H(r))}function nb(e){let t=Vy();for(let n of e)t=cb(n.type===`translate`?Uy(n.x,n.y,n.z):Wy(n.angle*Math.PI/180,n.axis??[0,0,1],n.center??[0,0,0]),t);return{handle:t,dispose:()=>{}}}function rb(e,t,n,r){let i=[e];for(let a=1;a<r;a++){let r=n*a;i.push(Yy(e,t[0]*r,t[1]*r,t[2]*r))}return i}function ib(e,t,n,r,i){let a=[e];for(let o=1;o<i;o++)a.push(Xy(e,r*o*Math.PI/180,n,t));return a}function ab(e,t,n,r,i,a,o,s){let c=By(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(Uy(o,s,d))),u.push(H(c))}return Cy(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 ob(e){return e.map(e=>{switch(e.type){case`translate`:return Yy(e.shape,e.x,e.y,e.z);case`rotate`:return Xy(e.shape,e.angle*Math.PI/180,e.axis,e.center);case`scale`:return Qy(e.shape,e.center,e.factor);case`mirror`:return Zy(e.shape,e.origin,e.normal)}})}function sb(e){return{composeTransform:nb,transform:$y,translate:Yy,rotate:Xy,mirror:Zy,scale:Qy,generalTransform:eb,generalTransformNonOrthogonal:tb,positionOnCurve:()=>by(`positionOnCurve`),linearPattern:rb,circularPattern:ib,gridPattern:(t,n,r,i,a,o,s)=>ab(e,t,n,r,i,a,o,s),transformBatch:ob}}function cb(e,t){let n=Vy();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 lb=2*Math.PI,ub=e=>Math.hypot(e[0],e[1],e[2]),db=(e,t)=>[e[0]-t[0],e[1]-t[1],e[2]-t[2]];function fb(e){return ub(db(e.p2,e.p1))}function pb(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 mb(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 hb(e){return e.k===`line`?{first:0,last:fb(e)}:e.k===`conic`?{first:e.a0,last:e.a1}:e.k===`helix`?{first:0,last:lb*e.turns}:{first:0,last:1}}function gb(e,t){if(e.k===`line`){let n=t/(fb(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 pb(e.points,t);if(e.k===`helix`){let n=Math.cos(t),r=Math.sin(t),i=e.pitch*t/lb;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 _b(e,t){let n;if(e.k===`line`)n=db(e.p2,e.p1);else if(e.k===`bezier`){let r=pb(e.points,Math.max(0,t-1e-4));n=db(pb(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/lb;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=ub(n)||1;return[n[0]/r,n[1]/r,n[2]/r]}function vb(e){if(e.k===`line`)return fb(e);if(e.k===`helix`){let t=lb*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-lb)<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 Sb(t=>gb(e,t),e.a0,e.a1,256)}return Sb(t=>gb(e,t),0,1,128)}function yb(e){return e.k===`conic`?Math.abs(Math.abs(e.a1-e.a0)-lb)<1e-9:!1}function bb(e){return yb(e)}function xb(e){return e.k===`conic`?lb:0}function Sb(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+=ub(db(s,a)),a=s}return i}function Cb(e){return e}function wb(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Tb(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 Eb(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function Db(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function Ob(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function kb(e){return Math.hypot(e[0],e[1],e[2])}function Ab(e){let t=kb(e);return t<1e-12?[0,0,1]:[e[0]/t,e[1]/t,e[2]/t]}function jb(e){return Ab(Tb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function Mb(e){let t=Ab(e),n=jb(t);return{xAxis:n,yAxis:Ab(Tb(t,n))}}function Nb(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 Pb(e){return Nb(e)<0?[...e].reverse():e}function Fb(e){return Nb(e)>0?[...e].reverse():e}function Ib(e){return e.node?.params}function Lb(e){let t=Cb(e),n=Ib(t),r=n?.outline??n?.polygon??n?.points;if(r&&r.length>=3){let e=n?.origin??[0,0,0],t=Pb(r.map(e=>[e[0],e[1]])),i=(n?.holes)?.filter(e=>e.length>=3).map(e=>Fb(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}=Mb(n?.normal??[0,0,1]);return{outline:t,holes:i,origin:e,xAxis:a,yAxis:o}}return Rb(t)}function Rb(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=zb(i);return{outline:Pb(o.length>=3?o:[[-.5,-.5],[.5,-.5],[0,.5]]),origin:[0,0,a],xAxis:[1,0,0],yAxis:[0,1,0]}}function zb(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 Bb(e){let t=[];for(let n=1;n+1<e;n++)t.push(0,n,n+1);return t}function Vb(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 Hb(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 Ub(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=Gb(t.length,n),a=new e.Mesh({numProp:3,vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)});return Wb(e,new e.Manifold(a))}function Wb(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 Gb(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=Bb(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=Bb(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 Kb(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 Ab(Eb(e[Math.min(e.length-1,t+1)]??e[t]??[0,0,0],n))},i=r(0),a=Ab(Eb(t,Ob(i,wb(t,i))));kb(a)<1e-9&&(a=jb(i)),n.push({origin:e[0]??[0,0,0],xAxis:a,yAxis:Ab(Tb(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=Eb(s,o),l=wb(c,c),u=a;if(l>1e-18){let e=Eb(a,Ob(c,2/l*wb(c,a))),n=Eb(i,Ob(c,2/l*wb(c,i))),o=Eb(r(t),n),s=wb(o,o);u=s>1e-18?Eb(e,Ob(o,2/s*wb(o,e))):e}let d=r(t),f=Ab(Eb(u,Ob(d,wb(u,d)))),p=Ab(Tb(d,f));n.push({origin:s,xAxis:f,yAxis:p,tangent:d}),i=d,a=f}return n}var qb=24,Jb=24,Yb=null;function Xb(e){let t=Yb?Yb(Math.max(Math.abs(e),1e-6)):qb;return Math.max(qb,t)}var Zb=[0,0,0],Qb=1e-6,$b={delete:()=>{},isEmpty:()=>!1};function ex(e,t){return e[t]??Zb}function tx(e,t=1){return Math.max(2,Math.ceil(Math.abs(e)/(2*Math.PI)*Xb(t)))}function nx(e){return Ab(Tb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function rx(e,t,n,r,i,a){let o=Ab(t),s=a?Ab(a):nx(o),c=Ab(Tb(o,s)),l=i-r,u=tx(l,n),d=[];for(let t=0;t<=u;t++){let i=r+l*t/u;d.push(Db(e,Db(Ob(s,n*Math.cos(i)),Ob(c,n*Math.sin(i)))))}return d}function ix(e,t,n){let r=Eb(t,e),i=Eb(n,e),a=Tb(r,i);if(kb(a)<1e-12)return[e,t,n];let o=Ab(a),s=wb(r,r),c=wb(i,i),l=wb(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=Db(e,Db(Ob(r,d),Ob(i,f))),m=kb(Eb(e,p)),h=Ab(Eb(e,p)),g=Ab(Tb(o,h)),_=(e=>Math.atan2(wb(Eb(e,p),g),wb(Eb(e,p),h)))(n);return _<0&&(_+=2*Math.PI),rx(p,o,m,0,_,h)}function ax(e){let t=[];for(let n=0;n<=Jb;n++){let r=n/Jb,i=e.map(e=>[...e]);for(let e=1;e<i.length;e++)for(let t=0;t<i.length-e;t++){let e=ex(i,t),n=ex(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(ex(i,0))}return t}function ox(e){let t=0,n=0,r=0;for(let i=0;i<e.length;i++){let a=ex(e,i),o=ex(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 kb(i)<1e-12?[0,0,1]:Ab(i)}function sx(e,t){return kb(Eb(e,t))<Qb}function cx(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=ex(n,n.length-1),a=sx(ex(r,0),i),o=sx(ex(r,r.length-1),i);!a&&o&&(r=[...r].reverse());let s=sx(ex(r,0),i);for(let e=+!!s;e<r.length;e++)n.push(ex(r,e))}return n.length>1&&sx(ex(n,0),ex(n,n.length-1))&&n.pop(),n}function lx(e){let t=ox(e),n=ex(e,0),r=e.length>1?Ab(Eb(ex(e,1),n)):nx(t);r=Ab(Eb(r,Ob(t,wb(r,t)))),kb(r)<1e-9&&(r=nx(t));let i=Ab(Tb(t,r));return{outline:Pb(e.map(e=>{let t=Eb(e,n);return[wb(t,r),wb(t,i)]})),origin:n,xAxis:r,yAxis:i}}var ux=12;function dx(e,t){let[n,r]=e.curveParameters(t),i=ux;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 fx(e,t){return cx(e.iterShapes(t,`edge`).map(t=>dx(e,t)))}function px(e){let t=e.getCircularSegments;typeof t==`function`&&(Yb=e=>t(e));function n(e,t){return Cy($b,B(`profileEdge`,t?{pts:e,curve:t}:{pts:e},[]))}function r(e,t){let n=Ab(e),r=t?Ab(t):nx(n);return{x:r,y:Ab(Tb(n,r))}}function i(e,t,n){let r=Eb(t,e),i=Eb(n,e),a=Tb(r,i);if(kb(a)<1e-12)return;let o=Ab(a),s=wb(r,r),c=wb(i,i),l=wb(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=Db(e,Db(Ob(r,d),Ob(i,f))),m=kb(Eb(e,p)),h=Ab(Eb(e,p)),g=Ab(Tb(o,h)),_=Math.atan2(wb(Eb(n,p),g),wb(Eb(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=wy(e);if(t){let e=t.node.params;return e?.ring??e?.pts??[]}let n=Ey();return n?dx(n,e):[]}function o(e){let t=[];for(let n of e){let e=wy(n);e&&t.push(H(e))}return t}function s(e){let t=cx(e.map(e=>a(e)));return Cy($b,B(`profileWire`,{ring:t,...t.length>=3?lx(t):void 0},o(e)))}function c(e,t){let{outline:n,origin:r,xAxis:i,yAxis:a}=lx(e);return Cy($b,B(`profileFace`,{outline:n,origin:r,xAxis:i,yAxis:a},t?[t]:[]))}function l(e){let t=wy(e);if(t){let e=t.node.params?.ring??[];if(e.length>=3)return c(e,H(t))}let n=Ey();return c(n?fx(n,e):[],t?H(t):void 0)}function u(e,t){let n=wy(e),r=n?.node?.params??{},i=r.origin??Zb,a=r.xAxis??[1,0,0],s=r.yAxis??[0,1,0],c=e=>{let t=Eb(e,i);return[wb(t,a),wb(t,s)]},l=[];for(let e of t){let t=wy(e),n;if(t)n=t.node.params?.ring??[];else{let t=Ey();n=t?fx(t,e):[]}n.length>=3&&l.push(n.map(c))}let u=[...r.holes??[],...l],d=n?[H(n),...o(t)]:o(t);return Cy($b,B(`profileFace`,{outline:r.outline??[],holes:u,origin:i,xAxis:a,yAxis:s},d))}function d(e,t,n,r,i){let a=Ab(t),o=i?Ab(i):nx(a),s=Ab(Tb(a,o)),c=[],l=Xb(Math.max(n,r));for(let t=0;t<=l;t++){let i=2*Math.PI*t/l;c.push(Db(e,Db(Ob(o,n*Math.cos(i)),Ob(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(rx(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(rx(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(ix(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(ax(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=Ab(a),c=nx(s),l=Ab(Tb(s,c)),u=o?Ob(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*qb)),m=[];for(let e=0;e<=p;e++)m.push(gb(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 mx(e){let t=e.Manifold,n=px(e);function r(e,n){let r=e.map(e=>[e.x,e.y,e.z]);return Cy(t.hull(r),B(`hullFromPoints`,{points:r,tolerance:n},[]))}function i(e,n){let r=e.map(e=>V(e));return Cy(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 Cy(n.length===1?r:t.union(n),B(`makeCompound`,{},e.map(e=>H(e))))}function o(e,t){let n=e[0];return n||by(`sewAndSolidify (no input faces on manifold kernel)`),Cy(V(n),B(`sewAndSolidify`,{tolerance:t},e.map(e=>H(e))))}return{makeVertex:(e,t,r)=>n.makeVertex(e,t,r),makeEdge:()=>by(`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:()=>by(`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:()=>by(`solidFromShell`),hull:i,hullFromPoints:r,buildSolidFromFaces:()=>by(`buildSolidFromFaces`),makeNonPlanarFace:()=>by(`makeNonPlanarFace`),addHolesInFace:(e,t)=>n.addHolesInFace(e,t),removeHolesFromFace:()=>by(`removeHolesFromFace`),makeFaceOnSurface:()=>by(`makeFaceOnSurface`),bsplineSurface:(e,t,n)=>Dy(`bsplineSurface`).bsplineSurface(e,t,n),triangulatedSurface:(e,t,n)=>Dy(`triangulatedSurface`).triangulatedSurface(e,t,n),buildTriFace:()=>by(`buildTriFace`),sewAndSolidify:o,createPoint3d:()=>by(`createPoint3d`),createDirection3d:()=>by(`createDirection3d`),createVector3d:()=>by(`createVector3d`),createAxis1:()=>by(`createAxis1`),createAxis2:()=>by(`createAxis2`),createAxis3:()=>by(`createAxis3`)}}var hx=Math.PI/180;function gx(e){return e}function _x(e){let t=180/Math.PI*e;return t>360?360:t}function vx(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 yx(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=vx(n.Location()),t=vx(n.Direction());if(e&&t)return{origin:e,direction:t}}}}function bx(e){return e.outline.map(e=>[e[0],e[1]])}function xx(e){return{outline:e.outline,origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis}}function Sx(e){return{origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis,tangent:Ab(Tb(e.xAxis,e.yAxis))}}function Cx(e){let t=0;for(let n of e.outline)t=Math.max(t,Math.hypot(n[0],n[1]));return t||1}function wx(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 Tx(e,t){let n=gx(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=wx(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 Ex(e){return e?.node??B(`spine`,{},[])}function Dx(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 Ox(e,t,n){let r=Ab(n);return e.outline.map(n=>{let i=Eb(Db(e.origin,Db(Ob(e.xAxis,n[0]),Ob(e.yAxis,n[1]))),t),a=i[0]*r[0]+i[1]*r[1]+i[2]*r[2];return[kb(Eb(i,Ob(r,a))),a]})}function kx(e,t,n){let r=e,i=Ab(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=Tb([0,1,0],i);kb(t)<1e-9&&(t=[1,0,0]),t=Ab(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 Ax(e,t,n,r,i){let a=Ab(t),{xAxis:o,yAxis:s}=Mb(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=Db(Ob(o,n*Math.cos(i)),Ob(s,n*Math.sin(i)));d.push(Db(e,Db(f,Ob(a,u*r))))}return d}function jx(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 Mx(e,t,n,r){let i=Lb(t),a=Ab([n[0],n[1],n[2]]),o=kb([n[0]*r,n[1]*r,n[2]*r]),s=[bx(i),...(i.holes??[]).map(e=>e.map(e=>[e[0],e[1]]))];return Cy(Dx(Wb(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(gx(t))]))}function Nx(e,t,n,r,i,a,o){let s=Lb(t),c=_x(i),l=Ox(s,n,r);return Cy(kx(e.Manifold.revolve([l],0,c),n,r),B(a,o,[H(gx(t))]))}function Px(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 Fx(e,t,n,r){if(t.length<2)throw Error(`manifold: loft requires at least two profiles`);let i=t.map(Lb),a=i.reduce((e,t)=>Math.max(e,t.outline.length),0),o=i.map(e=>Hb({...e,outline:Vb(e.outline,a)},Sx(e)));for(let e=1;e<o.length;e++)o[e]=Px(o[e]??[],o[e-1]??[]);return Cy(Ub(e,o),B(n,{sections:i.map(xx),...r},t.map(e=>H(gx(e)))))}function Ix(e,t,n,r,i,a,o){let s=Lb(t),c=Kb(n,s.xAxis),l=c.length;return Cy(Ub(e,c.map((e,t)=>Hb(s,e,o?o(l>1?t/(l-1):0):1))),B(i,{section:xx(s),path:n.map(e=>[e[0],e[1],e[2]]),...a},[H(gx(t)),r]))}function Lx(e,t,n,r,i,a){if(r===null)return t;let o=Lb(n),s=Ab(Tb(o.xAxis,o.yAxis)),c=Math.tan(i*hx),l={origin:Db(o.origin,Ob(s,r)),xAxis:o.xAxis,yAxis:o.yAxis,tangent:s},u=1+c*r/Cx(o),d=Ub(e,[Hb(o,Sx(o),1),Hb(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(gx(n))]);if(a){let e=gx(t);return Cy(V(e).add(d),B(`makeFuse`,{},[H(e),f]))}return Cy(d,f)}function Rx(e){return{revolve:(t,n,r)=>{let i=yx(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 Nx(e,t,a,o,r,`revolve`,{...xx(Lb(t)),axisOrigin:[a[0],a[1],a[2]],axisDirection:[o[0],o[1],o[2]],angleDeg:_x(r)})},revolveVec:(t,n,r,i)=>Nx(e,t,n,r,i,`revolveVec`,{...xx(Lb(t)),center:[n[0],n[1],n[2]],direction:[r[0],r[1],r[2]],angleDeg:_x(i)})}}function zx(e){return{sweep:(t,n,r)=>{let i={};return r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode),Ix(e,t,Tx(n,16),Ex(n),`sweep`,i)},simplePipe:(t,n)=>Ix(e,t,Tx(n,16),Ex(n),`simplePipe`,{}),sweepWithOptions:(t,n,r,i,a)=>Ix(e,t,Tx(n,Math.max(2,a||16)),Ex(n),`sweepWithOptions`,{contactMode:r,scaleValues:[...i],segments:a},jx(i)),sweepPipeShell:(t,n,r)=>{let i={};r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode);let a=Ix(e,t,Tx(n,16),Ex(n),`sweepPipeShell`,i);return r?.shellMode?{shape:a,firstShape:t,lastShape:t}:a},helicalSweep:(t,n,r,i,a,o)=>Ix(e,t,Ax(n,r,i,a,o),Ex(t),`helicalSweep`,{axisOrigin:[n[0],n[1],n[2]],axisDirection:[r[0],r[1],r[2]],radius:i,pitch:a,turns:o})}}function Bx(e){return{extrude:(t,n,r)=>Mx(e,t,n,r),...Rx(e),loft:(t,n)=>Fx(e,t,`loft`,{ruled:n??!1}),loftAdvanced:(t,n)=>Fx(e,t,`loftAdvanced`,{solid:n?.solid??!0,ruled:n?.ruled??!1,tolerance:n?.tolerance}),...zx(e),draftPrism:(t,n,r,i,a,o)=>Lx(e,t,n,i,a,o),buildExtrusionLaw:(e,t,n)=>({type:`extrusionLaw`,profile:e,length:t,endFactor:n}),loftBatch:()=>by(`loftBatch`),extrudeBatch:t=>t.map(t=>Mx(e,t.face,t.direction,t.length))}}var Vx=16;function Hx(e){return typeof e?.translate==`function`?e.translate([0,0,0]):e}function Ux(e,t,n){if(!(n>0))return Hx(t);let r=Kx(e,n);return r===void 0||typeof t?.minkowskiDifference!=`function`||typeof t?.minkowskiSum!=`function`?Hx(t):t.minkowskiDifference(r).minkowskiSum(r)}function Wx(e,t,n){if(n===0)return Hx(t);let r=Kx(e,Math.abs(n));return r===void 0?Hx(t):n>0?typeof t?.minkowskiSum==`function`?t.minkowskiSum(r):Hx(t):typeof t?.minkowskiDifference==`function`?t.minkowskiDifference(r):Hx(t)}function Gx(e,t,n,r){if(n===0)return Hx(t);if(r)return Wx(e,t,Math.abs(n));let i=Wx(e,t,-Math.abs(n));return typeof t?.subtract==`function`?t.subtract(i):Hx(t)}function Kx(e,t){let n=e?.Manifold;if(typeof n?.sphere==`function`)return n.sphere(t,Vx)}function qx(e){return e}function Jx(e){let t=e;if(t!=null){if(typeof t.index==`number`)return t.index;if(typeof t.id==`number`)return t.id}}function Yx(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 Xx(e){let t=e;if(t?.box!==void 0)return Yx(t.box);let n=(e?.manifold)?.boundingBox?.();return n===void 0?void 0:Yx(n)}function Zx(e){let t=e.length;if(t===0)return{kind:`all`,count:t};let n=[];for(let t of e){let e=Xx(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=Jx(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 Qx(e){return typeof e==`function`&&by(`fillet (per-edge radius callback)`),e}function $x(e){return typeof e==`number`?e:e[0]}function eS(e){let t=e.match(/[-+]?\d*\.?\d+/);return t?Number(t[0]):0}function tS(e,t,n,r,i){let a=qx(n),o=Qx(i),s=Zx(r);return Cy(Ux(e,V(a),$x(o)),B(t,{radius:o,selection:s},[H(a)]))}function nS(e,t,n,r,i){let a=qx(t),o=Zx(n);return Cy(Ux(e,V(a),r),B(`chamferDistAngle`,{distance:r,angleDeg:i,selection:o},[H(a)]))}function rS(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]),Wb(e,V(t).subtract(d))}catch{return}}function iS(e,t,n,r,i){let a=qx(t),o=Zx(n);return Cy(rS(e,a,r)??Gx(e,V(a),r,!1),B(`shell`,i===void 0?{thickness:r,selection:o}:{thickness:r,selection:o,tolerance:i},[H(a)]))}function aS(e,t,n){let r=qx(t);return Cy(Gx(e,V(r),n,!0),B(`thicken`,{thickness:n},[H(r)]))}function oS(e,t,n,r){let i=qx(t);return Cy(Wx(e,V(i),n),B(`offset`,r===void 0?{distance:n}:{distance:n,tolerance:r},[H(i)]))}function sS(e,t,n){let r=qx(t);return Cy(Ux(e,V(r),eS(n)),B(`filletVariable`,{spec:n},[H(r)]))}function cS(e,t,n,r,i){typeof i==`function`&&by(`draft (per-face angle callback)`);let a=qx(e),o=Zx(t);return Cy(Hx(V(a)),B(`draft`,{pullDirection:n,neutralPlane:r,angleDeg:i,selection:o},[H(a)]))}function lS(e,t){let n=qx(e),r=Zx(t);return Cy(Hx(V(n)),B(`defeature`,{selection:r},[H(n)]))}function uS(e){let t=qx(e),n=V(t);return Cy(typeof n?.simplify==`function`?n.simplify():Hx(n),B(`simplify`,{},[H(t)]))}function dS(e){let t=qx(e),n=V(t);return Cy(typeof n?.mirror==`function`?n.mirror([1,0,0]):Hx(n),B(`reverseShape`,{},[H(t)]))}function fS(e,t){let n=qx(t.shape),r=Zx(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 Cy(Ux(e,V(n),a),B(`fillet`,{radii:i,selection:r},[H(n)]))}function pS(e){return{fillet:(t,n,r)=>tS(e,`fillet`,t,n,r),chamfer:(t,n,r)=>tS(e,`chamfer`,t,n,r),chamferDistAngle:(t,n,r,i)=>nS(e,t,n,r,i),shell:(t,n,r,i)=>iS(e,t,n,r,i),thicken:(t,n)=>aS(e,t,n),offset:(t,n,r)=>oS(e,t,n,r),filletVariable:(t,n)=>sS(e,t,n),draft:(e,t,n,r,i)=>cS(e,t,n,r,i),defeature:(e,t)=>lS(e,t),offsetWire2D:()=>by(`offsetWire2D`),simplify:e=>uS(e),reverseShape:e=>dS(e),shellBatch:t=>t.map(t=>iS(e,t.shape,t.faces,t.thickness,t.tolerance)),filletBatch:t=>t.map(t=>fS(e,t))}}function mS(e){return V(e).getMesh()}function hS(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 gS(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 _S(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 vS(e,t){let n=mS(e),r=hS(n),i=new Uint32Array(n.triVerts);return{vertices:r,normals:t.skipNormals?new Float32Array:gS(r,i),triangles:i,uvs:t.includeUVs?new Float32Array(r.length/3*2):new Float32Array,faceGroups:_S(n)}}function yS(e,t,n){let r=mS(e),i=hS(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 bS(e){return!0}function xS(e){return{mesh:(e,t)=>vS(e,t),meshEdges:(e,t,n)=>yS(e,t,n),hasTriangulation:e=>bS(e),meshShape:(e,t,n)=>{}}}function SS(e,t=[0,0,0]){return Array.isArray(e)&&e.length>=3?[Number(e[0]),Number(e[1]),Number(e[2])]:[...t]}function CS(e,t=0){return typeof e==`number`?e:t}function wS(e,t=``){return typeof e==`string`?e:t}function TS(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function ES(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function DS(e,t,n,r){return TS(t,TS(ES(n,e[0]),ES(r,e[1])))}function OS(e,t){let n=t.outline??[];if(n.length<3)throw Error(`manifold replay: profile outline needs at least three points`);let r=SS(t.origin),i=SS(t.xAxis,[1,0,0]),a=SS(t.yAxis,[0,1,0]),o=n.map(e=>DS(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 kS(e,t){return OS(e,t)}function AS(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 jS(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 MS(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=>AS(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=jS(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(AS(e,t)))}function NS(e){let t=e.selection;return t===void 0?void 0:t}function PS(e){let t=e[0];if(t===void 0)throw Error(`manifold replay: op requires an input shape`);return t}function FS(e,t,n){return e.createAxis1(t[0],t[1],t[2],n[0],n[1],n[2])}function IS(e,t){return(n,r)=>{let i=OS(n,r),a=SS(r[e]),o=SS(r[t],[0,0,1]),s=CS(r.angleDeg,360);return n.revolve(i,FS(n,a,o),Math.PI/180*s)}}var LS={makeBox:(e,t)=>e.makeBox(CS(t.width),CS(t.height),CS(t.depth)),makeBoxWithCorners:(e,t)=>e.makeBoxFromCorners(SS(t.p1),SS(t.p2)),makeCylinder:(e,t)=>e.makeCylinder(CS(t.radius),CS(t.height),SS(t.center),SS(t.direction,[0,0,1])),makeSphere:(e,t)=>e.makeSphere(CS(t.radius),SS(t.center)),makeCone:(e,t)=>e.makeCone(CS(t.radius1),CS(t.radius2),CS(t.height),SS(t.center),SS(t.direction,[0,0,1])),makeTorus:(e,t)=>e.makeTorus(CS(t.majorRadius),CS(t.minorRadius),SS(t.center),SS(t.direction,[0,0,1])),makeEllipsoid:(e,t)=>e.makeEllipsoid(CS(t.aLength),CS(t.bLength),CS(t.cLength)),makeFuse:(e,t,n)=>{if(n.length<2)return PS(n);let r=PS(n);for(let t of n.slice(1))r=e.fuse(r,t);return r},makeCut:(e,t,n)=>{let r=PS(n);return e.cutAll(r,n.slice(1))},makeCommon:(e,t,n)=>{let r=PS(n);for(let t of n.slice(1))r=e.intersect(r,t);return r},translateShape:(e,t,n)=>e.translate(PS(n),CS(t.x),CS(t.y),CS(t.z)),rotateShape:(e,t,n)=>e.rotate(PS(n),CS(t.angle),SS(t.axis,[0,0,1]),SS(t.center)),scaleShape:(e,t,n)=>e.scale(PS(n),SS(t.center),CS(t.factor,1)),mirrorShape:(e,t,n)=>e.mirror(PS(n),SS(t.origin),SS(t.normal,[1,0,0])),transformShape:(e,t,n)=>e.transform(PS(n),t.matrix),generalTransform:(e,t,n)=>e.generalTransform(PS(n),t.linear,SS(t.translation),!!t.isOrthogonal),generalTransformNonOrthogonal:(e,t,n)=>e.generalTransformNonOrthogonal(PS(n),t.linear,SS(t.translation)),gridPattern:(e,t,n)=>{if(typeof e.gridPattern!=`function`)throw Error(`manifold replay: target kernel lacks gridPattern`);return e.gridPattern(PS(n),SS(t.directionX),SS(t.directionY),CS(t.spacingX),CS(t.spacingY),CS(t.countX,1),CS(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)=>OS(e,t),extrude:(e,t)=>{let n=OS(e,t);return e.extrude(n,SS(t.direction,[0,0,1]),CS(t.length,1))},revolve:IS(`axisOrigin`,`axisDirection`),revolveVec:IS(`center`,`direction`),loft:(e,t)=>{let n=(t.sections??[]).map(t=>RS(e,t));return e.loft(n,!!t.ruled)},loftAdvanced:(e,t)=>{let n=(t.sections??[]).map(t=>RS(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(zS(e,t),BS(e,t)),simplePipe:(e,t)=>e.simplePipe(zS(e,t),BS(e,t)),sweepWithOptions:(e,t)=>e.sweepWithOptions(zS(e,t),BS(e,t),wS(t.contactMode),t.scaleValues??[],CS(t.segments,0)),sweepPipeShell:(e,t)=>{let n=e.sweepPipeShell(zS(e,t),BS(e,t));return VS(n)?n.shape:n},helicalSweep:(e,t)=>e.helicalSweep(zS(e,t),SS(t.axisOrigin),SS(t.axisDirection,[0,0,1]),CS(t.radius),CS(t.pitch),CS(t.turns,1)),draftPrism:(e,t)=>{let n=OS(e,t);return e.draftPrism(n,n,n,CS(t.height),CS(t.angleDeg),!!t.fuse)},fillet:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(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=PS(n),i=MS(e,r,NS(t),`edge`);return e.chamfer(r,i,t.radius)},chamferDistAngle:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(t),`edge`);return e.chamferDistAngle(r,i,CS(t.distance),CS(t.angleDeg))},shell:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(t),`face`);return typeof t.tolerance==`number`?e.shell(r,i,CS(t.thickness),t.tolerance):e.shell(r,i,CS(t.thickness))},thicken:(e,t,n)=>e.thicken(PS(n),CS(t.thickness)),offset:(e,t,n)=>typeof t.tolerance==`number`?e.offset(PS(n),CS(t.distance),t.tolerance):e.offset(PS(n),CS(t.distance)),filletVariable:(e,t,n)=>e.filletVariable(PS(n),wS(t.spec)),draft:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(t),`face`);return e.draft(r,i,SS(t.pullDirection,[0,0,1]),SS(t.neutralPlane),CS(t.angleDeg))},defeature:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(t),`face`);return e.defeature(r,i)},simplify:(e,t,n)=>e.simplify(PS(n)),reverseShape:(e,t,n)=>e.reverseShape(PS(n)),hull:(e,t,n)=>e.hull([...n],CS(t.tolerance)),hullFromPoints:(e,t)=>{let n=t.points??[];return e.hullFromPoints(n.map(e=>({x:e[0],y:e[1],z:e[2]})),CS(t.tolerance))},sewAndSolidify:(e,t,n)=>e.sewAndSolidify([...n],CS(t.tolerance))};function RS(e,t){let n=kS(e,t);return e.iterShapes(n,`wire`)[0]??n}function zS(e,t){let n=t.section;return n?kS(e,n):OS(e,t)}function BS(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 VS(e){return typeof e==`object`&&!!e&&`shape`in e&&`firstShape`in e&&`lastShape`in e}function HS(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=LS[e.op];if(!a)throw Error(`manifold replay: no replay handler for op '${e.op}'`);let o=e.inputs.map(e=>HS(e,t,n,r)),s=a(t,e.params,o);return n.set(e,s),r.add(s),s}function US(e,t,n=new Map){let r=new Set,i=HS(e,t,n,r);for(let e of r)e!==i&&t.dispose(e);return i}function WS(e){return V(e)}function GS(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 KS(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 qS(e){let t=e;if(t&&t.__manifoldSub&&t.box)return t.box;let n=GS(e);return n?KS(n):WS(e).boundingBox()}function JS(e){return WS(e)?.getMesh?.()}function YS(e,t){let n=t*e.numProp;return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function XS(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function ZS(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 QS(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function $S(e){let t=qS(e);return[(t.min[0]+t.max[0])/2,(t.min[1]+t.max[1])/2,(t.min[2]+t.max[2])/2]}function eC(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=YS(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 tC(e){let t=JS(e);if(!t)return $S(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]=XS(t,e),s=YS(t,n),c=YS(t,a),l=YS(t,o),u=QS(s,ZS(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?eC(t):[i[0]/r,i[1]/r,i[2]/r]}function nC(e){let t=JS(e);if(!t)return $S(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]=XS(t,e),s=YS(t,n),c=YS(t,a),l=YS(t,o),u=ZS([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?eC(t):[i[0]/r,i[1]/r,i[2]/r]}function rC(e){return WS(e).volume()}function iC(e){let t=e;return t&&t.__nativeFace&&typeof t.area==`number`?t.area:WS(e).surfaceArea()}function aC(e){let t=e;if(t&&t.__manifoldSub&&t.box)return{min:[...t.box.min],max:[...t.box.max]};let n=qS(e);return{min:[...n.min],max:[...n.max]}}function oC(e){return tC(e)}function sC(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 cC(e,t){return sC(qS(e),qS(t))}function lC(e,t=!1){return{volume:rC(e),area:iC(e),length:0,centerOfMass:oC(e),boundingBox:aC(e)}}function uC(e,t,n){let r=Ey();if(!r)throw Error(`manifold: surfaceCurvature requires a registered occt kernel; none is available`);let i=wy(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=Oy.get(i.node)??(()=>{let e=US(i.node,r);return Oy.set(i.node,e),e})();return r.surfaceCurvature(a,t,n)}function dC(e){return{volume:e=>rC(e),area:e=>iC(e),length:e=>{let t=e;if(t&&t.__nativeEdge&&typeof t.length==`number`)return t.length;let n=wy(e)?.node;return n?.op===`profileEdge`&&n.params?.curve?vb(n.params.curve):by(`length`)},centerOfMass:e=>oC(e),linearCenterOfMass:e=>oC(e),boundingBox:e=>aC(e),distance:(e,t)=>cC(e,t),surfaceCurvature:(e,t,n)=>uC(e,t,n),surfaceCenterOfMass:e=>nC(e),measureBulk:(e,t)=>lC(e,t),createDistanceQuery:e=>({distanceTo:t=>cC(e,t),dispose:()=>{}})}}function fC(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 pC(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:fC(t,r[0]??0),normal:S,center:C,area:f,min:[p,m,h],max:[g,_,v],tris:y})}return l}function mC(e){return!!e&&typeof e==`object`&&e.__nativeFace===!0}var hC=Math.cos(45*Math.PI/180),gC=(e,t)=>e<t?e*1e9+t:t*1e9+e,_C=(e,t)=>e<t?`${e},${t}`:`${t},${e}`;function vC(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=gC(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]>hC)continue;let s=_C(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 yC(t))d.push(bC(e,n,s));return d}function yC(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 bC(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:xC(i)?`LINE`:`CIRCLE`}}function xC(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 SC(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 CC(e){return!!e&&typeof e==`object`&&e.__nativeVertex===!0}function wC(e){return!!e&&typeof e==`object`&&e.__nativeEdge===!0}function TC(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 EC(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 DC(e,t){let n=wy(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=Dy(t),i=Oy.get(n.node);if(i!==void 0)return{occt:r,brep:i};let a=US(n.node,r);return Oy.set(n.node,a),{occt:r,brep:a}}function OC(e){if(wy(e))return`solid`;let{occt:t,brep:n}=DC(e,`shapeType`);return t.shapeType(n)}function kC(e,t){let n=wy(e),r=wy(t);return!n||!r?!1:n.manifold===r.manifold}function AC(e,t){if(!wy(e))return 0;let{occt:n,brep:r}=DC(e,`hashCode`);return n.hashCode(r,t)}function jC(e){let t=wy(e);return t?!V(t):!0}function MC(e,t){let n=wy(e);if(!n)return[];if(t===`solid`)return[e];if(t===`vertex`){let e=V(n);return e&&typeof e.getMesh==`function`?SC(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 pC(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 vC(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=Ey();if(!r)return[];let i=Oy.get(n.node)??(()=>{let e=US(n.node,r);return Oy.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 NC(e){let{occt:t,brep:n}=DC(e,`edgeToFaceMap`);return t.edgeToFaceMap(n)}function PC(e,t){let{occt:n,brep:r}=DC(e,`adjacentFaces`);return n.adjacentFaces(r,t)}function FC(e){return{iterShapes:MC,iterShapeList:(e,t)=>{Dy(`iterShapeList`).iterShapeList(e,t)},shapeType:OC,isSame:kC,isEqual:kC,downcast:e=>e,hashCode:AC,isNull:jC,shapeOrientation:e=>`forward`,edgeToFaceMap:NC,sharedEdges:(e,t)=>Dy(`sharedEdges`).sharedEdges(e,t),adjacentFaces:PC,sew:()=>{throw Error(`manifold: sew is unsupported on the mesh kernel; use a B-rep kernel`)}}}function IC(e){return V(e).getMesh()}function LC(e){return e.numProp&&e.numProp>=3?e.numProp:3}function RC(e){return Math.floor(e.vertProperties.length/LC(e))}function zC(e,t){let n=t*LC(e);return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function BC(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function VC(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 HC(e,t){let n=IC(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]=BC(n,e),s=zC(n,r),c=zC(n,a),l=zC(n,o),u=VC(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]=BC(n,e),o=zC(n,t),s=zC(n,r),c=zC(n,a),l=VC(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 UC(e){let t=IC(e),n=RC(t),r=Math.floor(t.triVerts.length/3),i=[`# exported by brepjs manifold kernel`];for(let e=0;e<n;e++){let n=zC(t,e);i.push(`v ${n[0]} ${n[1]} ${n[2]}`)}for(let e=0;e<r;e++){let[n,r,a]=BC(t,e);i.push(`f ${n+1} ${r+1} ${a+1}`)}return new TextEncoder().encode(i.join(`
|
|
11
|
+
`)).buffer}function WC(e){let t=IC(e),n=RC(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=zC(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]=BC(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 GC(e,t,n=`importMesh`){let r=new e.Mesh({numProp:3,vertProperties:t.vertProperties,triVerts:t.triVerts});return Cy(new e.Manifold(r),B(n,{},[]))}function KC(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 GC(e,{vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)})}function qC(e,t){let n=new Uint8Array(t),r=new TextDecoder().decode(n.subarray(0,Math.min(n.length,80))).trimStart().toLowerCase().startsWith(`solid`)&&XC(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=YC(i);return GC(e,{vertProperties:Float32Array.from(a.vertices),triVerts:Uint32Array.from(a.indices)})}var JC=1e6;function YC(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*JC)},${Math.round(o*JC)},${Math.round(s*JC)}`,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 XC(e){return e.length<84?!0:84+new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(80,!0)*50!==e.length}var ZC=1e-6;function QC(e,t){let n=H(t);if(n.replayable)return US(n,e)}function $C(e,t){let n=IC(t),r=Math.floor(n.triVerts.length/3),i=[];for(let t=0;t<r;t++){let[r,a,o]=BC(n,t),s=e.buildTriFace(zC(n,r),zC(n,a),zC(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,ZC)}function ew(e){let t=Dy(`B-rep export`),n=QC(t,e);return n===void 0?(console.warn(`manifold: exact B-rep unavailable (non-replayable op-graph); exporting faceted approximation`),{occt:t,brep:$C(t,e)}):{occt:t,brep:n}}function tw(e,t,n,r){let i=t.mesh(n,{tolerance:.01,angularTolerance:.5});return GC(e,{vertProperties:Float32Array.from(i.vertices),triVerts:Uint32Array.from(i.triangles)},r)}var nw=1179937895,rw=2,iw=1313821514,aw=5130562,ow=5126,sw=5125,cw=5123,lw=5121,uw=34962,dw=34963,fw=4;function pw(e){return e+3&-4}function mw(e){let t=IC(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=pw(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:fw}]}],accessors:[{bufferView:0,componentType:ow,count:r,type:`VEC3`,min:[o,s,c],max:[l,u,d]},{bufferView:1,componentType:sw,count:i,type:`SCALAR`}],bufferViews:[{buffer:0,byteOffset:0,byteLength:p,target:uw},{buffer:0,byteOffset:m,byteLength:f.byteLength,target:dw}],buffers:[{byteLength:h}]},_=new TextEncoder().encode(JSON.stringify(g)),v=pw(_.length),y=pw(h),b=20+v+8+y,x=new ArrayBuffer(b),S=new DataView(x),C=new Uint8Array(x);S.setUint32(0,nw,!0),S.setUint32(4,rw,!0),S.setUint32(8,b,!0);let w=12;S.setUint32(w,v,!0),S.setUint32(w+4,iw,!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,aw,!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 hw(e,t){let n=new DataView(t);if(n.getUint32(0,!0)!==nw)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===iw?i=JSON.parse(new TextDecoder().decode(s)):r===aw&&(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===sw?4:e.componentType===cw?2:+(e.componentType===lw);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 GC(e,{vertProperties:p,triVerts:m},`importGLB`)}function gw(e){return{exportSTL:(e,t)=>HC(e,t),exportOBJ:e=>UC(e),exportPLY:e=>WC(e),importSTL:t=>qC(e,typeof t==`string`?new TextEncoder().encode(t).buffer:t),importOBJ:t=>KC(e,t),exportSTEP:e=>Dy(`exportSTEP`).exportSTEP(e.map(e=>ew(e).brep)),exportIGES:e=>Dy(`exportIGES`).exportIGES(e.map(e=>ew(e).brep)),toBREP:e=>{let{occt:t,brep:n}=ew(e);return t.toBREP(n)},exportSTEPAssembly:(e,t)=>{let n=Dy(`exportSTEPAssembly`),r=e.map(e=>{let t={shape:ew(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=Dy(`createXCAFDocument`),n=e.map(e=>{let t={shape:ew(e.shape).brep,name:e.name};return e.color===void 0?t:{...t,color:e.color}});return t.createXCAFDocument(n)},writeXCAFToSTEP:(e,t)=>Dy(`writeXCAFToSTEP`).writeXCAFToSTEP(e,t),exportSTEPConfigured:(e,t)=>{let n=Dy(`exportSTEPConfigured`),r=e.map(e=>{let t={shape:ew(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=Dy(`importSTEP`);return n.importSTEP(t).map(t=>tw(e,n,t,`importSTEP`))},importIGES:t=>{let n=Dy(`importIGES`);return n.importIGES(t).map(t=>tw(e,n,t,`importIGES`))},fromBREP:t=>{let n=Dy(`fromBREP`);return tw(e,n,n.fromBREP(t),`fromBREP`)},exportGLB:e=>mw(e),importGLB:t=>hw(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 _w(e){return V(e).getMesh()}function vw(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 yw(e,t){let n=e;if(n&&n.__manifoldSub&&n.occt){let e=Ey();if(!e)throw Error(`manifold: sub-shape geometry query requires a registered occt kernel`);return t(n.occt,e)}let r=wy(e);if(!r)throw Error(`manifold: exact geometry query requires a manifold shape handle`);let i=Ey();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=Oy.get(r.node);return a===void 0&&(a=US(r.node,i),Oy.set(r.node,a)),t(a,i)}function bw(e){let t=wy(e);if(!t)return;let n=t.node;return n.op===`profileEdge`?n.params?.curve:void 0}function xw(e){return{curveType:e=>{let t=bw(e);return t?mb(t):wC(e)?e.curveType:yw(e,(e,t)=>t.curveType(e))},curveParameters:e=>{let t=bw(e);if(t){let e=hb(t);return[e.first,e.last]}return wC(e)?[0,e.length]:yw(e,(e,t)=>t.curveParameters(e))},curvePointAtParam:(e,t)=>{let n=bw(e);return n?gb(n,t):wC(e)?TC(e,t):yw(e,(e,n)=>n.curvePointAtParam(e,t))},curveTangent:(e,t)=>{let n=bw(e);return n?{point:gb(n,t),tangent:_b(n,t)}:wC(e)?{point:TC(e,t),tangent:EC(e,t)}:yw(e,(e,n)=>n.curveTangent(e,t))},curveIsClosed:e=>{let t=bw(e);return t?yb(t):yw(e,(e,t)=>t.curveIsClosed(e))},curveIsPeriodic:e=>{let t=bw(e);return t?bb(t):yw(e,(e,t)=>t.curveIsPeriodic(e))},curvePeriod:e=>{let t=bw(e);return t?xb(t):yw(e,(e,t)=>t.curvePeriod(e))},interpolatePoints:(e,t)=>Dy(`interpolatePoints`).interpolatePoints(e,t),approximatePoints:(e,t)=>Dy(`approximatePoints`).approximatePoints(e,t),curveDegreeElevate:(e,t)=>yw(e,(e,n)=>n.curveDegreeElevate(e,t)),curveKnotInsert:(e,t,n)=>yw(e,(e,r)=>r.curveKnotInsert(e,t,n)),curveKnotRemove:(e,t,n)=>yw(e,(e,r)=>r.curveKnotRemove(e,t,n)),curveSplit:(e,t)=>yw(e,(e,n)=>n.curveSplit(e,t)),createCurveAdaptor:e=>yw(e,(e,t)=>t.createCurveAdaptor(e)),getBezierPenultimatePole:e=>yw(e,(e,t)=>t.getBezierPenultimatePole(e)),getNurbsCurveData:e=>yw(e,(e,t)=>t.getNurbsCurveData?.(e)??null),vertexPosition:e=>CC(e)?e.point:wy(e)?vw(_w(e),0):yw(e,(e,t)=>t.vertexPosition(e)),surfaceType:e=>{if(mC(e))return`plane`;let t=wy(e);return t&&t.node.op===`profileFace`?`plane`:yw(e,(e,t)=>t.surfaceType(e))},uvBounds:e=>mC(e)?{uMin:0,uMax:1,vMin:0,vMax:1}:yw(e,(e,t)=>t.uvBounds(e)),outerWire:e=>yw(e,(e,t)=>t.outerWire(e)),surfaceNormal:(e,t,n)=>mC(e)?e.normal:yw(e,(e,r)=>r.surfaceNormal(e,t,n)),pointOnSurface:(e,t,n)=>yw(e,(e,r)=>r.pointOnSurface(e,t,n)),uvFromPoint:(e,t)=>yw(e,(e,n)=>n.uvFromPoint(e,t)),projectPointOnFace:(e,t)=>yw(e,(e,n)=>n.projectPointOnFace(e,t)),classifyPointOnFace:(e,t,n,r)=>yw(e,(e,i)=>i.classifyPointOnFace(e,t,n,r)),classifyPointRobust:(e,t,n)=>yw(e,(e,r)=>r.classifyPointRobust(e,t,n)),classifyPointWinding:(e,t,n)=>yw(e,(e,r)=>r.classifyPointWinding(e,t,n)),approximateSurfaceLspia:(e,t,n,r,i,a,o,s,c)=>Dy(`approximateSurfaceLspia`).approximateSurfaceLspia(e,t,n,r,i,a,o,s,c),untrimFace:(e,t,n)=>yw(e,(e,r)=>r.untrimFace(e,t,n)),getSurfaceCylinderData:e=>yw(e,(e,t)=>t.getSurfaceCylinderData(e)),getSurfaceAxis:e=>yw(e,(e,t)=>t.getSurfaceAxis(e)),reverseSurfaceU:e=>Dy(`reverseSurfaceU`).reverseSurfaceU(e),detectSmallFeatures:(e,t,n)=>yw(e,(e,r)=>r.detectSmallFeatures(e,t,n)),recognizeFeatures:(e,t)=>yw(e,(e,n)=>n.recognizeFeatures(e,t)),projectEdges:(e,t,n,r)=>yw(e,(e,i)=>i.projectEdges(e,t,n,r)),getNurbsSurfaceData:e=>yw(e,(e,t)=>t.getNurbsSurfaceData?.(e)??null)}}var Sw={hasErrors:!1,hasWarnings:!1,messages:[]};function Cw(){return{modified:new Map,generated:new Map,deleted:new Set}}function ww(e){return{shape:e,evolution:Cw()}}function Tw(e){return{shape:e,evolution:Cw(),diagnostics:Sw}}function Ew(e){let t=sb(e),n=zy(e),r=pS(e);return{translateWithHistory:(e,n,r,i)=>ww(t.translate(e,n,r,i)),rotateWithHistory:(e,n,r,i,a,o)=>ww(t.rotate(e,n,a,o)),mirrorWithHistory:(e,n,r)=>ww(t.mirror(e,n,r)),scaleWithHistory:(e,n,r)=>ww(t.scale(e,n,r)),generalTransformWithHistory:(e,n,r,i)=>ww(t.generalTransform(e,n,r,i)),fuseWithHistory:(e,t,r,i,a)=>Tw(n.fuse(e,t,a)),cutWithHistory:(e,t,r,i,a)=>Tw(n.cut(e,t,a)),intersectWithHistory:(e,t,r,i,a)=>Tw(n.intersect(e,t,a)),filletWithHistory:(e,t,n)=>ww(r.fillet(e,t,n)),chamferWithHistory:(e,t,n)=>ww(r.chamfer(e,t,n)),shellWithHistory:(e,t,n,i,a,o)=>ww(r.shell(e,t,n,o)),thickenWithHistory:(e,t)=>ww(r.thicken(e,t)),offsetWithHistory:(e,t,n,i,a)=>ww(r.offset(e,t,a)),draftWithHistory:(e,t,n,i,a)=>ww(r.draft(e,t,n,i,a)),applyComposedTransformWithHistory:(e,n)=>ww(t.transform(e,n))}}function Dw(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 Ow(e){return{isValid:e=>Dw(e),isValidStrict:e=>Dw(e),healSolid:e=>Dw(e)?e:null,healFace:e=>e,healWire:e=>e,mergeCoincidentVertices:()=>0,removeDegenerateEdges:()=>0,fixFaceOrientations:()=>0,fixShape:e=>e,fixSelfIntersection:e=>e}}var kw=.004;function Aw(e){return!!e&&typeof e==`object`&&e.__nativeC2d===!0}function jw(e,t){return{__nativeC2d:!0,k:`line`,p1:e,p2:t}}function Mw(e,t,n,r,i){return{__nativeC2d:!0,k:`conic`,c:e,u:t,v:n,a0:r,a1:i}}function Nw(e,[t,n]){return[e.a*t+e.b*n+e.tx,e.c*t+e.d*n+e.ty]}function Pw(e,[t,n]){return[e.a*t+e.b*n,e.c*t+e.d*n]}function Fw(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 Iw(e,t){return e.k===`line`?jw(Nw(t,e.p1),Nw(t,e.p2)):e.k===`bezier`?{__nativeC2d:!0,k:`bezier`,pts:e.pts.map(e=>Nw(t,e))}:Mw(Nw(t,e.c),Pw(t,e.u),Pw(t,e.v),e.a0,e.a1)}function Lw(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 Rw(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 zw(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 Lw(r,t)}function Bw(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<=kw)return Math.max(2,Math.ceil(t/(2*Math.PI)*8));let a=2*Math.acos(Math.max(-1,1-kw/i));return Math.max(2,Math.ceil(t/a))}function Vw(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(Lw(e.pts,n/24));return t}let t=e.a1-e.a0,n=Bw(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 Hw(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 jw(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-_),Mw(f,[p,0],[0,p],h,_)}function Uw(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(!Aw(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=Rw(n,n.a0),i=Rw(n,(n.a0+n.a1)/2),a=Rw(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(Vw(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)=>jw([e,t],[n,r]),makeCircle2d:(e,t,n,r=!0)=>Mw([e,t],[n,0],r?[0,n]:[0,-n],0,2*Math.PI),makeArc2dThreePoints:(e,t,n,r,i,a)=>Hw([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 jw([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),Mw([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 Mw([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 Mw([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`?Lw(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:Lw(n.pts,t),tangent:zw(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 Mw(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 jw([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=Fw(e,t);Object.assign(e,n)},transformCurve2dGeneral:(e,t)=>Iw(i(e),t),translateCurve2d:(e,t,n)=>Iw(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 Iw(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)=>Iw(i(e),{a:t,b:0,c:0,d:t,tx:n-t*n,ty:r-t*r}),mirrorCurve2dAtPoint:(e,t,n)=>Iw(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 Iw(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 Iw(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(Aw(t))r=Vw(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 Cy(n,B(`profileEdge`,{pts:Vw(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)=>Aw(n)?t(n,...i):r(e,n,...i)))}return s}var Ww=`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 Gw(e){let t=Ey();if(!t)throw Error(`manifold: ${e} unsupported on manifold kernel; no B-rep kernel registered`);return t}function Kw(e){let t={};for(let e of Ww)t[e]=(...t)=>Gw(e)[e](...t);let n=Uw(e,()=>Ey());return Object.assign(t,n),t}function qw(e){return{sketchNew:()=>by(`sketchNew`),sketchAddPoint:()=>by(`sketchAddPoint`),sketchAddArc:()=>by(`sketchAddArc`),sketchAddConstraint:()=>by(`sketchAddConstraint`),sketchSolve:()=>by(`sketchSolve`),sketchDof:()=>by(`sketchDof`)}}function Jw(e){return{projectEdges:()=>by(`projectEdges`)}}function Yw(e){return{dispose(e){let t=wy(e);if(t){let e=Oy.get(t.node);e!==void 0&&(Ey()?.dispose(e),Oy.delete(t.node))}(e?.manifold)?.delete?.()},executeBatch:()=>by(`executeBatch`),checkpoint:()=>by(`checkpoint`),checkpointCount:()=>0,restoreCheckpoint:()=>by(`restoreCheckpoint`),discardCheckpoint:()=>by(`discardCheckpoint`)}}var Xw={draft:30,standard:10,fine:3},Zw=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?.(Xw[e])}constructor(e){this.oc=e,Object.assign(this,Py(e),zy(e),sb(e),mx(e),Bx(e),pS(e),xS(e),dC(e),FC(e),gw(e),xw(e),Ew(e),Ow(e),Kw(e),qw(e),Jw(e),Yw(e))}};function Qw(e){return`projectEdges`in e}function $w(e){return`sketchNew`in e&&`sketchDof`in e}var eT=new Map,tT=null,nT=null;function rT(e){iT(`manifold`,new Zw(e))}function iT(e,t){eT.set(e,t),tT||=e,e===tT&&(nT=t)}function U(e){if(!e&&nT)return nT;let t=e??tT;if(!t)throw Error(`brepjs kernel not initialized. Call initFromOC() or registerKernel() before using the library.`);let n=eT.get(t);if(!n)throw Error(`brepjs: kernel '${t}' is not registered.`);return n}function aT(e){let t=U(e);if(!go(t))throw Error(`brepjs: current kernel does not support 2D operations.`);return t}function oT(){return tT}function sT(e,t){let n=tT;tT=e,nT=eT.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{tT=n,nT=n?eT.get(n)??null:null}}function cT(e){return U(e).capabilities}function lT(e,t){let n=po();try{ho(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{ho(n),U().setQuality?.(n)}}var uT=new Map;function dT(e,t){uT.set(e,t)}function fT(e){return uT.get(e)}function pT(e,t){let n=uT.get(e);if(!n)throw Error(`withTier: no tier registered for "${e}". Call registerKernelTier("${e}", { kernel, quality }) first.`);return sT(n.kernel,()=>lT(n.quality,t))}function mT(e){Mo(),Kc(),To(),Sc(),Cc(),Rc(),zc();let t=new kf(e);iT(`occt`,t),tT=`occt`,nT=t}function hT(){let e=U(),t=e.makeBox(1,1,1);try{e.dispose(t)}catch{}}async function gT(){if(tT)return tT;try{let{OcctKernel:e}=await import(`occt-wasm`),t=await e.init();return iT(`occt-wasm`,Ea.fromKernel(t)),`occt-wasm`}catch{}try{return mT(await(await import(`brepjs-opencascade`)).default()),`occt`}catch{}try{let e=await import(`brepkit-wasm`);return typeof e.default==`function`&&await e.default(),iT(`brepkit`,new yy(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 _T(){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 vT=Symbol;vT.dispose??=Symbol.for(`Symbol.dispose`),vT.asyncDispose??=Symbol.for(`Symbol.asyncDispose`);var yT=globalThis;yT.FinalizationRegistry||=(console.warn(`brepjs: FinalizationRegistry unavailable — garbage collection will not work`),class{register(e,t,n){}unregister(e){return!1}});var bT={liveHandles:0,peakHandles:0,gcCollected:0,scopeEnters:0,scopeExits:0};function xT(){return{...bT}}function ST(){bT.liveHandles=0,bT.peakHandles=0,bT.gcCollected=0,bT.scopeEnters=0,bT.scopeExits=0}function CT(){bT.liveHandles++,bT.liveHandles>bT.peakHandles&&(bT.peakHandles=bT.liveHandles)}function wT(){bT.liveHandles--}function TT(){bT.gcCollected++,bT.liveHandles--}var ET=new FinalizationRegistry(e=>{TT();try{e.delete()}catch{}});function DT(e){let t=!1,n=()=>{if(!t){t=!0,wT(),ET.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 CT(),ET.register(r,e,r),r}function OT(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,wT(),ET.unregister(n);try{e.delete()}catch{}}}};return CT(),ET.register(n,e,n),n}var kT=class{handles=[];constructor(){bT.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](){bT.scopeExits++;for(let e=this.handles.length-1;e>=0;e--)this.handles[e]?.();this.handles.length=0}};function AT(e){try{var t=_T();return e(t.u(new kT))}catch(e){t.e=e}finally{t.d()}}function jT(e,t){ET.register(e,t,t)}function MT(e){ET.unregister(e)}function NT(e){try{var t=_T();return e(t.u(new kT))}catch(e){t.e=e}finally{t.d()}}async function PT(e){try{var t=_T();return await e(t.u(new kT))}catch(e){t.e=e}finally{t.d()}}function FT(e){return!e.disposed}function IT(e){return e.__is2D!==!0}function LT(e){return e.__is2D===!0}function RT(e){if(!IT(e))throw Error(`Expected 3D shape, got 2D`);return e}function zT(e){if(!LT(e))throw Error(`Expected 2D shape, got 3D`);return e}var BT=new WeakMap;function VT(e,t){BT.set(e,t)}function HT(e,t){let n=BT.get(t);if(n!==void 0)return n;let r=e.shapeType(t);return BT.set(t,r),r}function UT(e){return HT(U(),e.wrapped)}function WT(e){return U().curveIsClosed(e.wrapped)}function GT(e){return U().isValid(e.wrapped)}function KT(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 qT(e){return U().isValid(e.wrapped)}function JT(e){return WT(e)?O(e):k(`Wire is not closed: start and end points do not coincide`)}function YT(e){return GT(e)?O(e):k(`Face orientation is inconsistent or face is invalid`)}function XT(e){return KT(e)?O(e):k(`Shell is not manifold: has free edges or is invalid`)}function ZT(e){return qT(e)?O(e):k(`Solid failed BRepCheck validation`)}function QT(e){return U().surfaceType(e.wrapped)===`plane`}function $T(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 eE(e){return QT(e)?O(e):k(`Face is not planar: underlying surface is not a geometric plane`)}function tE(e){return $T(e)?O(e):k(`Wire is not planar: edges do not lie in a common plane`)}function nE(e,t){return t===`2D`&&(e.__is2D=!0),e}function rE(e,t){return nE(DT(e),t)}function iE(e,t){return nE(DT(e),t)}function aE(e,t){return nE(DT(e),t)}function oE(e,t){return nE(DT(e),t)}function sE(e){return nE(DT(e))}function cE(e){return nE(DT(e))}function lE(e){return nE(DT(e))}function uE(e,t){return nE(DT(e),t)}function dE(e){return UT(e)===`vertex`}function fE(e){return UT(e)===`edge`}function pE(e){return UT(e)===`wire`}function mE(e){return UT(e)===`face`}function hE(e){return UT(e)===`shell`}function gE(e){return UT(e)===`solid`}function _E(e){return UT(e)===`compound`}function vE(e){let t=UT(e);return t===`shell`||t===`solid`||t===`compsolid`?!0:t===`compound`?IT(e):!1}function yE(e){let t=UT(e);return t===`edge`||t===`wire`}function W(e,t){let n=U(),r=HT(n,e),i=n.downcast(e,r);return r===`vertex`?rE(i,t):r===`edge`?iE(i,t):r===`wire`?aE(i,t):r===`face`?oE(i,t):r===`shell`?sE(i):r===`solid`?cE(i):r===`compsolid`?lE(i):uE(i,t)}function bE(e){return W(e)}function xE(e,t,n){VT(e,t);let r=U().downcast(e,t);return t===`vertex`?rE(r,n):t===`edge`?iE(r,n):t===`wire`?aE(r,n):t===`face`?oE(r,n):t===`shell`?sE(r):t===`solid`?cE(r):t===`compsolid`?lE(r):uE(r,n)}function SE(e,t,n,r,i){let a={kind:e,code:t,message:n,cause:r};return i?{...a,suggestion:i}:a}var CE={KERNEL_OPERATION:(e,t,n,r)=>SE(`KERNEL_OPERATION`,e,t,n,r),VALIDATION:(e,t,n,r)=>SE(`VALIDATION`,e,t,n,r),TYPE_CAST:(e,t,n,r)=>SE(`TYPE_CAST`,e,t,n,r),SKETCHER_STATE:(e,t,n,r)=>SE(`SKETCHER_STATE`,e,t,n,r),MODULE_INIT:(e,t,n,r)=>SE(`MODULE_INIT`,e,t,n,r),COMPUTATION:(e,t,n,r)=>SE(`COMPUTATION`,e,t,n,r),IO:(e,t,n,r)=>SE(`IO`,e,t,n,r),QUERY:(e,t,n,r)=>SE(`QUERY`,e,t,n,r),UNSUPPORTED:(e,t,n,r)=>SE(`UNSUPPORTED`,e,t,n,r)};function wE(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`?to(i):i,o=eo(t);return k(CE[r](t,`${n}: ${a}`,e,o))}}function TE(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`?to(i):i,o=eo(t);return k(CE[r](t,`${n}: ${a}`,e,o))}}function EE(e,t,n,r=`KERNEL_OPERATION`){try{var i=_T();let a=i.u(new kT);return wE(()=>e(a),t,n,r)}catch(e){i.e=e}finally{i.d()}}function DE(e,t){let n=U().iterShapes(e,t),r=Array(n.length);for(let e=0;e<n.length;e++)r[e]=xE(n[e],t);return r}var OE=new WeakMap;function kE(e){let t=OE.get(e.wrapped);return t||(t={},OE.set(e.wrapped,t)),t}function AE(e){return OE.get(e.wrapped)}function jE(e){OE.delete(e.wrapped)}function ME(e){let t=kE(e);if(t.edges)return t.edges;let n=DE(e.wrapped,`edge`);return t.edges=n,n}function NE(e){let t=kE(e);if(t.faces)return t.faces;let n=DE(e.wrapped,`face`);return t.faces=n,n}function PE(e){let t=kE(e);if(t.wires)return t.wires;let n=DE(e.wrapped,`wire`);return t.wires=n,n}function FE(e){let t=kE(e);if(t.vertices)return t.vertices;let n=DE(e.wrapped,`vertex`);return t.vertices=n,n}function IE(e){let t=kE(e);if(t.solids)return t.solids;let n=DE(e.wrapped,`solid`);return t.solids=n,n}function LE(e){let t=kE(e);if(t.shells)return t.shells;let n=DE(e.wrapped,`shell`);return t.shells=n,n}function RE(e){let t=kE(e);if(t.compSolids)return t.compSolids;let n=DE(e.wrapped,`compsolid`);return t.compSolids=n,n}function*zE(e){for(let t of U().iterShapes(e.wrapped,`edge`))yield xE(t,`edge`)}function*BE(e){for(let t of U().iterShapes(e.wrapped,`face`))yield xE(t,`face`)}function*VE(e){for(let t of U().iterShapes(e.wrapped,`wire`))yield xE(t,`wire`)}function*HE(e){for(let t of U().iterShapes(e.wrapped,`vertex`))yield xE(t,`vertex`)}function*UE(e){for(let t of U().iterShapes(e.wrapped,`solid`))yield xE(t,`solid`)}function*WE(e){for(let t of U().iterShapes(e.wrapped,`shell`))yield xE(t,`shell`)}function*GE(e){for(let t of U().iterShapes(e.wrapped,`compsolid`))yield xE(t,`compsolid`)}function KE(e){let t=kE(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 qE(e){return HT(U(),e.wrapped)}function JE(e){let t=kE(e);if(t.surfaceType!==void 0)return t.surfaceType;let n=U().surfaceType(e.wrapped);return t.surfaceType=n,n}function YE(e){let t=kE(e);if(t.isValid!==void 0)return t.isValid;let n=U().isValid(e.wrapped);return t.isValid=n,n}function XE(e){return{kind:qE(e),faceCount:NE(e).length,edgeCount:ME(e).length,wireCount:PE(e).length,vertexCount:FE(e).length,valid:YE(e),bounds:KE(e)}}function ZE(e){return U().vertexPosition(e.wrapped)}var G=2147483647,QE=Math.PI/180,$E=180/Math.PI;function eD(e){return e.length===2?[e[0],e[1],0]:[e[0],e[1],e[2]]}function tD(e){return[e[0],e[1]]}var nD={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function rD(e){if(typeof e==`string`){let t=nD[e];if(!t)throw Error(`Unknown direction: ${e}`);return t}return e}function iD(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function aD(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function oD(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function sD(e){return[-e[0],-e[1],-e[2]]}function cD(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function lD(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 uD(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2])}function dD(e){return e[0]*e[0]+e[1]*e[1]+e[2]*e[2]}function fD(e,t){return uD(aD(e,t))}function pD(e){let t=uD(e);return t<1e-10?[0,0,0]:[e[0]/t,e[1]/t,e[2]/t]}function mD(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 hD(e,t=1e-10){return dD(e)<t*t}function gD(e,t){let n=cD(e,t),r=uD(e),i=uD(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 _D(e,t,n){let r=aD(e,t),i=dD(n);return i<1e-20?e:aD(e,oD(n,cD(r,n)/i))}function vD(e,t,n){let r=pD(t),i=Math.cos(n),a=Math.sin(n),o=cD(e,r),s=lD(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 yD=e=>Math.round(e*1e3)/1e3;function bD(e){return`x: ${yD(e[0])}, y: ${yD(e[1])}, z: ${yD(e[2])}`}function xD(e,t=null,n=[0,0,1]){let r=pD(n);if(hD(r))throw Error(`Plane normal must be non-zero`);let i;if(t)i=pD(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?pD([l,u,d]):[1,0,0]}if(hD(i))throw Error(`Plane xDir must be non-zero`);let a=pD(lD(r,i));return{origin:e,xDir:i,yDir:a,zDir:r}}var SD={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 CD(e,t=[0,0,0]){let n=SD[e];if(!n)return k(F(`UNKNOWN_PLANE`,`Could not find plane ${e}`));let r;return r=typeof t==`number`?oD(n.normal,t):eD(t),O(xD(r,n.xDir,n.normal))}function wD(e,t){return typeof e==`string`?CD(e,t):O(e)}function TD(e,t){return e&&typeof e!=`string`?{...e}:j(wD(e??`XY`,t))}function ED(e,t){let[n,r]=t;return iD(iD(e.origin,oD(e.xDir,n)),oD(e.yDir,r))}function DD(e,t){return{...e,origin:iD(e.origin,t)}}function OD(e,t,n=[1,0,0]){let r=t*QE,i=vD(e.zDir,n,r),a=vD(e.xDir,n,r),o=pD(lD(i,a));return{origin:e.origin,xDir:a,yDir:o,zDir:i}}var kD={compound:0,solidCompound:1,solid:2,shell:3,face:4,wire:5,edge:6,vertex:7,shape:8},AD=e=>kD[e],jD={vertex:`vertex`,edge:`edge`,wire:`wire`,face:`face`,shell:`shell`,solid:`solid`,solidCompound:`compsolid`,compound:`compound`,shape:`compound`},MD=function*(e,t){let n=jD[t];if(n){let t=U().iterShapes(e,n);for(let e of t)yield e}},ND=e=>U().isNull(e)?k(ro(`NULL_SHAPE`,`This shape has no type, it is null`)):O(e.ShapeType());function PD(e){if(U().isNull(e))return k(ro(`NULL_SHAPE`,`This shape has no type, it is null`));try{return O(U().downcast(e))}catch{return k(ro(`NO_WRAPPER`,`Could not find a wrapper for this shape type`))}}function FD(e){return U().isNull(e)?k(ro(`NULL_SHAPE`,`Cannot cast a null shape`)):O(W(e))}function ID(e){return U().shapeType(e.wrapped)===`compsolid`}function LD(e){return FD(U().fromBREP(e))}var RD={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 zD(e){return O(RD[JE(e)])}function BD(e){return j(zD(e))}function VD(e){return U().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function HD(e){return W(U().reverseShape(e.wrapped))}function UD(e){return U().uvBounds(e.wrapped)}function WD(e,t,n){let r=UD(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 GD(e,t){let n=eD(t);return U().uvFromPoint(e.wrapped,n)||[0,0]}function KD(e,t){let n=eD(t);try{let t=n,r=U().uvFromPoint(e.wrapped,t);if(!r)return k(ro(`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(ro(`PROJECTION_FAILED`,`Point projection failed: ${e instanceof Error?e.message:String(e)}`))}}function qD(e,t){let n,r;if(t)[n,r]=GD(e,t);else{let t=UD(e);n=.5*(t.uMin+t.uMax),r=.5*(t.vMin+t.vMax)}return U().surfaceNormal(e.wrapped,n,r)}function JD(e){return U().surfaceCenterOfMass(e.wrapped)}function YD(e){return U().getSurfaceAxis(e.wrapped)}function XD(e,t,n=1e-6){let[r,i]=GD(e,t);return U().classifyPointOnFace(e.wrapped,r,i,n)}function ZD(e){return W(U().outerWire(e.wrapped))}function QD(e){return W(U().removeHolesFromFace(e.wrapped))}function $D(e){let t=ZD(e);return Array.from(MD(e.wrapped,`wire`)).map(e=>W(j(PD(e)))).filter(e=>!U().isSame(e.wrapped,t.wrapped))}function eO(e,t){let n=kE(e),r=new Map;for(let n of NE(e))r.set(U().hashCode(n.wrapped,G),t);n.faceOrigins=r}function tO(e){return AE(e)?.faceOrigins}function nO(e,t,n){let r=new Map;for(let e of t){let t=tO(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=kE(n);e.faceOrigins=i}}function rO(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 iO(e,t){let n=new Map;for(let t of e){let e=tO(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=NE(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=tO(n);if(e)for(let i of NE(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=rO(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=kE(t);e.faceOrigins=i}}var aO=new WeakMap,oO=new WeakMap;function sO(e){return aO.has(e.wrapped)}function cO(e){let t=aO.get(e.wrapped);return t||(t=new Map,aO.set(e.wrapped,t)),t}function lO(e){let t=oO.get(e.wrapped);return t||(t=new Map,oO.set(e.wrapped,t)),t}function uO(e,t,n){let r=Array.isArray(t)?t:NE(e).filter(t),i=cO(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 dO(e,t){let n=aO.get(e.wrapped);if(!n)return[];let r=n.get(t);if(!r||r.size===0)return[];let i=[];for(let t of NE(e)){let e=U().hashCode(t.wrapped,G);r.has(e)&&i.push(t)}return i}function fO(e){let t=new Map,n=aO.get(e.wrapped);if(!n)return t;let r=NE(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 pO(e,t,n){return lO(e).set(t,n),e}function mO(e,t){return oO.get(e.wrapped)?.get(t)}function hO(e,t,n){let r=e.get(t)??new Set;r.add(n),e.set(t,r)}function gO(e,t,n){let r=cO(n);for(let i of t){let t=aO.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)hO(r,t,e)}let o=oO.get(i.wrapped);if(o){let e=lO(n);for(let[t,n]of o)e.has(t)||e.set(t,n)}}}var _O=new WeakMap,vO=new WeakMap;function yO(e){return _O.has(e.wrapped)||vO.has(e.wrapped)}function bO(e){let t=vO.get(e.wrapped);return t||(t=new Map,vO.set(e.wrapped,t)),t}function xO(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 SO(e,t){return _O.set(e.wrapped,xO(t)),e}function CO(e,t,n){let r=xO(n),i=bO(e);for(let e of t)i.set(U().hashCode(e.wrapped,G),r);return e}function wO(e){return _O.get(e.wrapped)}function TO(e,t){let n=vO.get(e.wrapped);if(n)return n.get(U().hashCode(t.wrapped,G))}function EO(e,t,n){for(let e of t){let t=_O.get(e.wrapped);if(t){_O.set(n.wrapped,t);break}}let r=bO(n);for(let n of t){let t=vO.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 DO(e){if(!e.some(e=>tO(e)!==void 0||sO(e)||yO(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 OO(e,t,n){nO(e,t,n),gO(e,t,n),EO(e,t,n)}function kO(e,t){iO(e,t)}function AO(e,t){let n=DO([e]),{shape:r,evolution:i}=U().translateWithHistory(e.wrapped,t[0],t[1],t[2],n,G),a=W(r);return OO(i,[e],a),a}function jO(e,t,n=[0,0,0],r=[0,0,1]){let i=DO([e]),{shape:a,evolution:o}=U().rotateWithHistory(e.wrapped,t*QE,i,G,r,n),s=W(a);return OO(o,[e],s),s}function MO(e,t=[0,1,0],n=[0,0,0]){let r=DO([e]),{shape:i,evolution:a}=U().mirrorWithHistory(e.wrapped,n,t,r,G),o=W(i);return OO(a,[e],o),o}function NO(e,t,n=[0,0,0]){let r=DO([e]),{shape:i,evolution:a}=U().scaleWithHistory(e.wrapped,n,t,r,G),o=W(i);return OO(a,[e],o),o}function PO(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(NO(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 FO(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 IO(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 LO(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 RO(e,t){let n=FO(t);if(!n.ok)return n;let{linear:r,translation:i}=n.value,a=IO(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(LO(r)){let t=DO([e]),{shape:n,evolution:a}=U().generalTransformWithHistory(e.wrapped,r,i,!0,t,G),o=W(n);return OO(a,[e],o),O(o)}let o=W(U().generalTransformNonOrthogonal(e.wrapped,r,i));return kO([e],o),O(o)}function zO(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 BO(e,t){let n=DO([e]),{shape:r,evolution:i}=U().applyComposedTransformWithHistory(e.wrapped,t.trsf,n,G),a=W(r);return OO(i,[e],a),a}function VO(e){return wE(()=>U().downcast(e.wrapped),N.CLONE_FAILED,`Failed to clone shape`)}function HO(e){return TE(()=>U().toBREP(e.wrapped),N.TO_BREP_FAILED,`Failed to serialize shape to BREP`)}function UO(e){return U().hashCode(e.wrapped,G)}function WO(e){return U().isNull(e.wrapped)}function GO(e,t){return U().isSame(e.wrapped,t.wrapped)}function KO(e,t){return U().isEqual(e.wrapped,t.wrapped)}function qO(e){return wE(()=>U().simplify(e.wrapped),N.SIMPLIFY_FAILED,`Failed to simplify shape`)}function JO(e){return U().curveType(e.wrapped)}function YO(e){let[t]=U().curveParameters(e.wrapped);return U().curvePointAtParam(e.wrapped,t)}function XO(e){let[,t]=U().curveParameters(e.wrapped);return U().curvePointAtParam(e.wrapped,t)}function ZO(e,t=.5){let[n,r]=U().curveParameters(e.wrapped),i=n+(r-n)*t;return U().curvePointAtParam(e.wrapped,i)}function QO(e,t=.5){let[n,r]=U().curveParameters(e.wrapped),i=n+(r-n)*t;return U().curveTangent(e.wrapped,i).tangent}function $O(e){return U().length(e.wrapped)}function ek(e){if(JO(e)!==`CIRCLE`)return null;let t=ZO(e,0),n=ZO(e,1/3),r=ZO(e,2/3),i=[n[0]-t[0],n[1]-t[1],n[2]-t[2]],a=[r[0]-t[0],r[1]-t[1],r[2]-t[2]],o=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],s=o[0]*o[0]+o[1]*o[1]+o[2]*o[2];if(s<1e-18)return null;let c=i[0]*i[0]+i[1]*i[1]+i[2]*i[2],l=a[0]*a[0]+a[1]*a[1]+a[2]*a[2],u=[c*a[0]-l*i[0],c*a[1]-l*i[1],c*a[2]-l*i[2]],d=[u[1]*o[2]-u[2]*o[1],u[2]*o[0]-u[0]*o[2],u[0]*o[1]-u[1]*o[0]],f=1/(2*s),p=[t[0]+d[0]*f,t[1]+d[1]*f,t[2]+d[2]*f],m=Math.sqrt(s);return{origin:p,direction:[o[0]/m,o[1]/m,o[2]/m]}}function tk(e){return U().curveIsClosed(e.wrapped)}function nk(e){return U().curveIsPeriodic(e.wrapped)}function rk(e){return U().curvePeriod(e.wrapped)}function ik(e){return U().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function ak(e){return W(U().reverseShape(e.wrapped))}function ok(e,t={}){if(e.length<2)return k(ro(`INTERPOLATE_MIN_POINTS`,`Interpolation requires at least 2 points`));try{let n=W(U().interpolatePoints(e,t));return fE(n)?O(n):k(ro(`INTERPOLATE_NOT_EDGE`,`Interpolation did not produce an edge`))}catch(e){return k(ro(`INTERPOLATE_FAILED`,`Interpolation failed: ${e instanceof Error?e.message:String(e)}`))}}function sk(e,t={}){if(e.length<2)return k(ro(`APPROXIMATE_MIN_POINTS`,`Approximation requires at least 2 points`));try{let n=W(U().approximatePoints(e,t));return fE(n)?O(n):k(ro(`APPROXIMATE_NOT_EDGE`,`Approximation did not produce an edge`))}catch(e){return k(ro(`APPROXIMATE_FAILED`,`Approximation failed: ${e instanceof Error?e.message:String(e)}`))}}function ck(e,t,n=`arc`){let r=W(U().offsetWire2D(e.wrapped,t,{arc:`arc`,intersection:`intersection`,tangent:`tangent`,chamfer:`intersection`}[n]));return pE(r)?O(r):(r[Symbol.dispose](),k(ro(`OFFSET_NOT_WIRE`,`Offset did not produce a Wire`)))}function lk(e,t,n,r=!1){return`${e}:${t}:${n}:${r}`}function uk(e,t){return`edge:${e}:${t}`}var dk=new WeakMap,fk=new WeakMap;function pk(e,t){let n=dk.get(e);if(n)return n.get(t)}function mk(e,t,n){let r=dk.get(e);r||(r=new Map,dk.set(e,r)),r.set(t,n)}function hk(e,t){let n=fk.get(e);if(n)return n.get(t)}function gk(e,t,n){let r=fk.get(e);r||(r=new Map,fk.set(e,r)),r.set(t,n)}function _k(){dk=new WeakMap,fk=new WeakMap}function vk(){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 yk(e,t={}){let n=mo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,skipNormals:a=!1,includeUVs:o=!1,cache:s=!0,signal:c}=t;c?.throwIfAborted();let l=lk(r,i,a,o);if(s){let t=pk(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=tO(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&&mk(e.wrapped,l,f),f}function bk(e,t={}){let n=mo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,cache:a=!0}=t,o=uk(r,i);if(a){let t=hk(e.wrapped,o);if(t)return t}let s=U().meshEdges(e.wrapped,r,i),c={lines:s.lines,edgeGroups:s.edgeGroups.map(e=>({start:e.start,count:e.count,edgeId:e.edgeHash}))};return a&&gk(e.wrapped,o,c),c}function xk(e,t){return e instanceof Error&&e.message.startsWith(`${t} export failed`)?oo(`${t}_EXPORT_FAILED`,`Failed to write ${t} file`,e):e instanceof WebAssembly.RuntimeError?oo(`${t}_EXPORT_CRASHED`,`${t} export crashed the kernel (${e.message}); the shape likely contains geometry the ${t} writer cannot serialize`,e):oo(`${t}_FILE_READ_ERROR`,`Failed to read exported ${t} file`,e)}function Sk(e){let t;try{t=IE(e)}catch{return``}if(t.length<=1)return``;let n=[];return t.forEach((e,t)=>{try{KE(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 Ck(e,t){try{return KE(e),null}catch(n){if(n instanceof TypeError)throw n;return oo(`${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${Sk(e)}`,n)}}function wk(e){let t=Ck(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(xk(e,`STEP`))}}function Tk(e,t={}){let n=mo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,binary:a=!1}=t,o=Ck(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(xk(e,`STL`))}}function Ek(e){try{let t=U().exportIGES([e.wrapped]);return O(new Blob([t],{type:`application/iges`}))}catch(e){return k(oo(`IGES_EXPORT_FAILED`,`Failed to write IGES file`,e))}}function Dk(e,t){let n=t?.coarseTolerance??.5,r=t?.fineTolerance??.05,i=t?.angularTolerance??.5;return{coarse:yk(e,{tolerance:n,angularTolerance:i}),fine:yk(e,{tolerance:r,angularTolerance:i*.2})}}function Ok(e,t,n){if(t<0||t>=e.length)throw Error(n??`Index ${t} out of bounds (length ${e.length})`);return e[t]}function kk(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[0]}function Ak(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[e.length-1]}function jk(e){return Array.from(Array(e).keys())}function Mk(e){return jk(Math.min(...e.map(e=>e.length))).map(t=>e.map(e=>e[t]))}function Nk(e,t){return iE(U().makeLineEdge([...e],[...t]))}function Pk(e,t=[0,0,0],n=[0,0,1]){return iE(U().makeCircleEdge([...t],[...n],e))}function Fk(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(iE(U().makeEllipseEdge([...n],[...r],e,t,i?[...i]:void 0)))}function Ik(e,t,n,r=[0,0,0],i=[0,0,1],a=!1){return aE(U().makeHelixWire(e,t,n,[...r],[...i],a))}function Lk(e,t,n){return iE(U().makeArcEdge([...e],[...t],[...n]))}function Rk(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(iE(U().makeEllipseArc([...i],[...a],e,t,n,r,o?[...o]:void 0)))}function zk(e,{tolerance:t=.001,smoothing:n=null,degMax:r=6,degMin:i=1}={}){try{let a=e.map(e=>[...e]);return O(iE(U().approximatePoints(a,{tolerance:t,degMin:i,degMax:r,smoothing:n})))}catch{return k(P(`BSPLINE_FAILED`,`B-spline approximation failed`))}}function Bk(e,{periodic:t=!1,tolerance:n=1e-7}={}){try{let r=e.map(e=>[...e]);return O(iE(U().interpolatePoints(r,{periodic:t,tolerance:n})))}catch{return k(P(`BSPLINE_INTERP_FAILED`,`B-spline interpolation failed`))}}function Vk(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(iE(U().makeBezierEdge(t)))}function Hk(e,t,n){return iE(U().makeTangentArc([...e],[...t],[...n]))}function Uk(e){try{return O(aE(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 Wk(e,t){try{let n=U().makeFace(e.wrapped,!0);if(t&&t.length>0){let e=Jk(oE(n),t);return QT(e)?O(e):k(F(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}let r=oE(n);return QT(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 Gk(e){return Wk(ZD(e))}function Kk(e,t){return oE(U().makeFaceOnSurface(e.wrapped,t.wrapped))}function qk(e){try{return ja(FD(U().makeNonPlanarFace(e.wrapped)),e=>mE(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 Jk(e,t){return oE(U().addHolesInFace(e.wrapped,t.map(e=>e.wrapped)))}function Yk(e){return e.length<3?k(F(`POLYGON_MIN_POINTS`,`You need at least 3 points to make a polygon`)):ja(Uk(Mk([e,[...e.slice(1),e[0]]]).map(([e,t])=>Nk(e,t))),e=>Wk(e))}function Xk(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Zk(e,t,n,r,i){let a=W(e);if(!vE(a)){let o=e.ShapeType(),s=[`COMPOUND`,`COMPSOLID`,`SOLID`,`SHELL`,`FACE`,`WIRE`,`EDGE`,`VERTEX`,`SHAPE`][o]??`UNKNOWN(${o})`;return a[Symbol.dispose](),k(ro(t,`${n}. Got ${s} instead.`,void 0,i?{diagnostics:i}:void 0,r))}return O(a)}function Qk(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=Xk(e,`fuse: first operand`);if(A(c))return c;let l=Xk(t,`fuse: second operand`);if(A(l))return l;if(!s)return Zk(U().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);let u=DO([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),Zk(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=Zk(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&&OO(f,[e,t],m.value),m}function $k(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=Xk(e,`cut: base`);if(A(c))return c;let l=Xk(t,`cut: tool`);if(A(l))return l;if(!s)return Zk(U().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);let u=DO([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),Zk(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=Zk(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&&OO(f,[e,t],m.value),m}function eA(e,t,{simplify:n=!1,signal:r,fuzzyValue:i,unsafe:a,trackEvolution:o=!0}={}){if(r?.aborted)throw r.reason;let s=Xk(e,`intersect: first operand`);if(A(s))return s;let c=Xk(t,`intersect: second operand`);if(A(c))return c;if(!o)return Zk(U().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);let l=DO([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),Zk(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=Zk(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&&OO(d,[e,t],p.value),p}function tA(e,t,n,r,i,a,o,s){if(o?.aborted)throw o.reason;let c=n-t;if(c===1)return O(Ok(e,t));if(c===2)return Qk(Ok(e,t),Ok(e,t+1),{optimisation:r,simplify:!1,trackEvolution:a,fuzzyValue:s,unsafe:!0,...o?{signal:o}:{}});let l=t+Math.ceil(c/2),u=tA(e,t,l,r,i,a,o,s);if(A(u))return u;let d=tA(e,l,n,r,i,a,o,s);return A(d)?d:Qk(u.value,d.value,{optimisation:r,simplify:i,trackEvolution:a,fuzzyValue:s,unsafe:!0,...o?{signal:o}:{}})}function nA(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(kk(e));for(let t=0;t<e.length;t++){let n=Xk(Ok(e,t),`fuseAll: shape at index ${t}`);if(A(n))return n}if(r===`native`){let o=Zk(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&&kO(e,o.value),o}return tA(e,0,e.length,t,n,s,i,a)}function rA(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=Xk(e,`cutAll: base`);if(A(c))return c;for(let e=0;e<t.length;e++){let n=Xk(Ok(t,e),`cutAll: tool at index ${e}`);if(A(n))return n}let l=[e,...t],u=Zk(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&&kO(l,u.value),u}function iA(e,t){let n=U(),r=oD(e.xDir,t),i=oD(e.yDir,t),a=oD(e.xDir,-t),o=oD(e.yDir,-t),s=e.origin,c=[...iD(iD(s,a),o)],l=[...iD(iD(s,r),o)],u=[...iD(iD(s,r),i)],d=[...iD(iD(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 aA(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=iA(typeof t==`string`?j(wD(t)):t,r);try{return O(W(U().section(e.wrapped,i,n)))}catch(e){let n=e instanceof Error?e.message:String(e),r=typeof t==`string`?t:`custom`;return k(P(`SECTION_FAILED`,`Section with ${r} plane failed: ${n}`,e,{operation:`section`,plane:r},`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`))}finally{i.delete()}}function oA(e){let t=U(),n=new Map,r=new Map;for(let i of e){let e=FE(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 sA(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 cA(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=sA(i,t,n);for(;o;)e===0?r.push(o.edge):r.unshift(o.edge),i=o.nextTip,o=sA(i,t,n)}return r}function lA(e){let t=U(),n=oA(e),r=new Set,i=[];for(let a of e){if(r.has(a))continue;let e=cA(a,n,r);try{let n=t.makeWire(e.map(e=>e.wrapped));i.push(W(n))}catch{}}return i}function uA(e){let t=U(),n=0,r=-1;for(let i=0;i<e.length;i++){let a=e[i];if(!a)continue;let o=t.boundingBox(a.wrapped),s=o.max[0]-o.min[0],c=o.max[1]-o.min[1],l=o.max[2]-o.min[2],u=s*s+c*c+l*l;u>r&&(r=u,n=i)}return n}function dA(e,t,n={}){let r=aA(e,t,n);if(!r.ok)return r;let i=PE(r.value);if(i.length===0){let e=ME(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(...lA(e))}if(i.length===0)return k(P(`SECTION_FAILED`,`sectionToFace: section produced no usable geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));let a=uA(i),o=Ok(i,a),s=i.filter((e,t)=>t!==a);return Wk(o,s.length>0?s:void 0)}function fA(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(Ok(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 pA(e,t,n={}){let r=[];for(let i of t){let t=aA(e,i,n);if(A(t))return t;r.push(t.value)}return O(r)}function mA(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 hA(e,t,n);if(o===null)return k(P(`BOOLEAN_PIPELINE_FAILED`,`Boolean pipeline returned null shape`));let s=W(o);return vE(s)?O(s):k(ro(`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 hA(e,t,n){let r=e,i={...n?.optimisation?{optimisation:n.optimisation}:{},unsafe:!0};for(let e of t){let t=e.op===`fuse`?Qk(r,e.tool,i):e.op===`cut`?$k(r,e.tool,i):eA(r,e.tool,i);if(A(t))return t;r=j(t)}return O(r)}function gA(e){return j(FD(j(PD(U().sew(e.map(e=>e.wrapped))))))}function _A(e,t=!1){let n=gA(e);return!t&&!hE(n)?k(ro(`WELD_NOT_SHELL`,`Could not make a shell from faces and shells`)):O(n)}function vA(e,t,n=[0,0,0],r=[0,0,1]){return cE(U().makeCylinder(e,t,[...n],[...r]))}function yA(e){return cE(U().makeSphere(e))}function bA(e,t,n,r=[0,0,0],i=[0,0,1]){return cE(U().makeCone(e,t,n,[...r],[...i]))}function xA(e,t,n=[0,0,0],r=[0,0,1]){return cE(U().makeTorus(e,t,[...n],[...r]))}function SA(e,t,n){return cE(U().makeEllipsoid(e,t,n))}function CA(e){return rE(U().makeVertex(e[0],e[1],e[2]))}function wA(e,t,n=1e-6){return ja(PD(U().offset(e.wrapped,t,n)),e=>ja(FD(e),e=>vE(e)?O(e):k(ro(`OFFSET_NOT_3D`,`Could not offset to a 3d shape`))))}function TA(e){return uE(U().makeCompound(e.map(e=>e.wrapped)))}function EA(e){let t=gA(e);return ja(FD(U().solidFromShell(t.wrapped)),e=>gE(e)?O(e):k(ro(`SOLID_BUILD_FAILED`,`Could not make a solid of faces and shells`)))}function DA(e){return{position:e.vertices,normal:e.normals,index:e.triangles}}function OA(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 kA(e){return{position:e.lines}}function AA(e,t){return{coarse:DA(e.coarse),fine:DA(e.fine),coarseDistance:t?.coarse??50,fineDistance:t?.fine??0}}function jA(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=PD(i);if(A(a))return a;let o=W(a.value);return vE(o)?O(o):(o[Symbol.dispose](),k(ro(`CHAMFER_ANGLE_NOT_3D`,`chamferDistAngle did not produce a 3D shape`)))}function MA(e,t){return e.map(e=>xE(e,t))}function NA(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 MA(i,t)}function PA(e){let t=kE(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 FA(e,t){let n=U(),r=PA(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 MA(o,`face`)}function IA(e){return NA(e.wrapped,`edge`)}function LA(e){return NA(e.wrapped,`wire`)}function RA(e){return NA(e.wrapped,`vertex`)}function zA(e,t){let n=U(),r=PA(e),i=NA(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 MA(a,`face`)}function BA(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 MA(o,`edge`)}function VA(e){let t=U();return t.getNurbsCurveData?t.getNurbsCurveData(e.wrapped):null}function HA(e){let t=U();return t.getNurbsSurfaceData?t.getNurbsSurfaceData(e.wrapped):null}var UA={cut:$k,cutAll:rA,fuse:Qk,fuseAll:nA};function WA(e){return{totalInputs:e.totalInputs,batchAttempts:e.batchAttempts,batchSucceeded:e.batchSucceeded,singletonFallbacks:e.singletonFallbacks,failedInputs:[...e.failedInputs].sort((e,t)=>e-t)}}function GA(e,t,n={}){return KA(UA,e,t,n)}function KA(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=qA(e,t,n,0,r,i);return A(a)?a:O({shape:a.value,telemetry:WA(i)})}function qA(e,t,n,r,i,a){if(n.length===0)return O(t);if(n.length===1)return JA(e,t,n,r,i,a);a.batchAttempts++;let o=$A(()=>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=qA(e,t,n.slice(0,s),r,i,a);return c.ok?qA(e,c.value,n.slice(s),r+s,i,a):c}function JA(e,t,n,r,i,a){a.singletonFallbacks++;let o=kk(n),s=$A(()=>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 YA(e,t={}){return XA(UA,e,t)}function XA(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=ZA(e,t,0,n,r);return A(i)?i:O({shape:i.value,telemetry:WA(r)})}function ZA(e,t,n,r,i){if(t.length===1)return O(kk(t));i.batchAttempts++;let a=$A(()=>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 QA(e,ZA(e,t.slice(0,o),n,r,i),ZA(e,t.slice(o),n+o,r,i),t,n,o,r,i)}function QA(e,t,n,r,i,a,o,s){if(t.ok&&n.ok){s.singletonFallbacks++;let c=$A(()=>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 $A(e){try{return e()}catch{return null}}function ej(e,t,n){return U().checkBoolean(e.wrapped,t.wrapped,n)}function tj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function nj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function rj(e,t,n,r){let i=W(e);if(!vE(i)){let a=e.ShapeType(),o=[`COMPOUND`,`COMPSOLID`,`SOLID`,`SHELL`,`FACE`,`WIRE`,`EDGE`,`VERTEX`,`SHAPE`][a]??`UNKNOWN(${a})`;return i[Symbol.dispose](),k(ro(t,`${n}. Got ${o} instead.`,void 0,void 0,r))}return O(i)}function ij(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>r.get(U().hashCode(e,2147483647))??1}}function aj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=tj(e,`fuseWithEvolution: first operand`);if(A(o))return o;let s=tj(t,`fuseWithEvolution: second operand`);if(A(s))return s;let c=DO([e,t]),{shape:l,evolution:u}=U().fuseWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=rj(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?(OO(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function oj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=tj(e,`cutWithEvolution: base`);if(A(o))return o;let s=tj(t,`cutWithEvolution: tool`);if(A(s))return s;let c=DO([e,t]),{shape:l,evolution:u}=U().cutWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=rj(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?(OO(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function sj(e,t,{simplify:n=!1,signal:r,fuzzyValue:i}={}){if(r?.aborted)throw r.reason;let a=tj(e,`intersectWithEvolution: first operand`);if(A(a))return a;let o=tj(t,`intersectWithEvolution: second operand`);if(A(o))return o;let s=DO([e,t]),{shape:c,evolution:l}=U().intersectWithHistory(e.wrapped,t.wrapped,s,G,{simplify:n,fuzzyValue:i}),u=rj(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?(OO(l,[e,t],u.value),O({shape:u.value,evolution:l})):u}function cj(e,t,n){let r=nj(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??ME(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=ij(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=DO([e]),{shape:o,evolution:s}=U().filletWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=W(o);return vE(c)?(OO(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 lj(e,t,n){let r=nj(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??ME(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=ij(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=DO([e]),{shape:o,evolution:s}=U().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=W(o);return vE(c)?(OO(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 uj(e,t,n,r=.001){let i=nj(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=DO([e]),{shape:a,evolution:o}=U().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,i,G,r),s=W(a);return vE(s)?(OO(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 dj(e,t,n){try{let r=W(U().positionOnCurve(e.wrapped,t.wrapped,n));return vE(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 fj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function pj(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 mj(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 hj(e,t,n,r,i){let a=W(t);return vE(a)?(OO(e,n,a),O(a)):k(P(r,i))}function gj(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 _j(e,t){let n=fj(e,`thicken: shape`);if(A(n))return n;try{let n=DO([e]),{shape:r,evolution:i}=U().thickenWithHistory(e.wrapped,t,n,G),a=W(r);return OO(i,[e],a),O(a)}catch(e){return k(P(`THICKEN_FAILED`,`Thicken operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function vj(e,t,n){let r=fj(e,`fillet: shape`);if(A(r))return r;let i=pj(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??ME(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=mj(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 yj(e,t,n,{trackEvolution:r=!0}={}){let i=vj(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 vE(n)?O(n):k(P(N.FILLET_NOT_3D,`Fillet result is not a 3D shape`))}let n=DO([e]),{shape:i,evolution:s}=U().filletWithHistory(e.wrapped,t,o,n,G);return hj(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 bj(e,t,n){let r=fj(e,`chamfer: shape`);if(A(r))return r;let i=pj(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??ME(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=mj(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=DO([e]),{shape:o,evolution:s}=U().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,i,G);return hj(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 xj(e,t,n,r=.001,{trackEvolution:i=!0}={}){let a=fj(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 vE(i)?O(i):k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`))}let a=DO([e]),{shape:o,evolution:s}=U().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,a,G,r),c=W(o);return vE(c)?(OO(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 Sj(e,t,n=1e-6){let r=fj(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=DO([e]),{shape:i,evolution:a}=U().offsetWithHistory(e.wrapped,t,r,G,n),o=W(i);return vE(o)?(OO(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 Cj(e,t,n){let r=fj(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 wj(e,t,n,r,i){let a=Cj(e,t,i);if(a)return a;try{let{filteredFaces:a,kernelAngle:o}=gj(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=DO([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 hj(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 Tj(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 vE(a)?gE(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 Ej(e){return YE(e)}function Dj(e){if(!gE(e))return k(F(`NOT_A_SOLID`,`Input shape is not a solid`));let t=Ej(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 gE(r)?(jE(r),Ej(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 Oj(e){if(!mE(e))return k(F(`NOT_A_FACE`,`Input shape is not a face`));try{let t=W(U().healFace(e.wrapped));return mE(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 kj(e,t){if(!pE(e))return k(F(`NOT_A_WIRE`,`Input shape is not a wire`));try{let n=W(U().healWire(e.wrapped,t?.wrapped));return pE(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 Aj(e){return gE(e)?Dj(e):mE(e)?Oj(e):pE(e)?kj(e):O(e)}function jj(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(Ej(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=PE(e).length,u=NE(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=PE(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(gE(d)&&i||mE(d)&&r||pE(d)&&n){let t=Aj(d);Oa(t)?(d=t.value,gE(e)?(f=!0,s.push(`Applied ShapeFix_Solid`),c.push({name:`healSolid`,attempted:!0,succeeded:!0})):mE(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=PE(d).length,m=NE(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 _=Ej(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 Mj(e){try{return O(W(U().fixShape(e.wrapped)))}catch(e){return k(P(N.FIX_SHAPE_FAILED,`ShapeFix_Shape failed`,e))}}function Nj(e){try{let t=W(U().solidFromShell(e.wrapped));return gE(t)?Ej(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 Pj(e){try{let t=W(U().fixSelfIntersection(e.wrapped));return pE(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 Fj(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 Ij(e,t){let n=U(),r=n.makeLineEdge([...e],[...t]);return W(n.makeWire([r]))}function Lj(e,t,n,r,i,a=!1){return W(U().makeHelixWire(e,t,n,[...r],[...i],a))}function Rj(e,t,n={},r=!1){if(n.mode===`simple`&&!r){let n=W(U().simplePipe(e.wrapped,t.wrapped));return vE(n)?O(n):k(ro(`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(!vE(e))return k(ro(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`));let t=W(v.firstShape),n=W(v.lastShape);return pE(t)?pE(n)?O([e,t,n]):k(ro(`SWEEP_END_NOT_WIRE`,`Sweep did not produce an end Wire`)):k(ro(`SWEEP_START_NOT_WIRE`,`Sweep did not produce a start Wire`))}let y=W(v);return vE(y)?O(y):k(ro(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`))}function zj(e,t,n,r){return Rj(e,Ij(t,iD(t,n)),{support:r})}function Bj(e,t,n,r,i=!1){let a=uD(n);if(a<1e-10)return k(F(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let o=Ij(t,iD(t,n)),s=null;if(r){let e=Fj(a,r);if(A(e))return e;s=e.value}return Rj(e,o,{law:s},i)}function Vj(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=uD(r);if(o<1e-10)return k(F(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let s=Ij(n,iD(n,r)),c=t<0,l=Lj(360/Math.abs(t)*o,o,1,n,r,c),u=null;if(i){let e=Fj(o,i);if(A(e))return e;u=e.value}return Rj(e,s,{auxiliarySpine:l,law:u},a)}function Hj(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 Uj(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 Wj(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=Hj(e);if(o)return k(o);try{let n=U(),o=Uj(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 vE(l)?O(l):k(ro(`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 Gj(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 vE(u)?O(u):k(ro(`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 Kj(e,t){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`extrude: face is a null shape`));if(uD(t)<1e-10)return k(F(`EXTRUDE_ZERO_VECTOR`,`extrude: extrusion vector has zero length`));try{let n=U(),r=uD(t),i=pD(t),a=n.extrude(e.wrapped,[...i],r);return O(cE(n.downcast(a,`solid`)))}catch(e){return k(P(`EXTRUDE_FAILED`,`Extrusion operation failed`,e,{operation:`extrude`,vectorLength:uD(t)}))}}function qj(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 vE(i)?O(i):k(ro(`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 Jj(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=uD(i);if(a<1e-10)return k(F(`EXTRUDE_ALL_ZERO_VECTOR`,`extrudeAll: entry ${t} has zero-length extrusion vector`));let o=[...pD(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=>cE(t.downcast(e,`solid`))))}catch(e){return k(P(`EXTRUDE_ALL_FAILED`,`Batch extrusion operation failed`,e))}}function Yj(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(...eD(n)):void 0,c=r?o.makeVertex(...eD(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 vE(n)?O(n):k(ro(`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 Xj(e){if(e.length===0)return O([]);let t=U(),n=[],r=e.map(e=>{let r=e.startPoint?t.makeVertex(...eD(e.startPoint)):void 0,i=e.endPoint?t.makeVertex(...eD(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(!vE(e))return k(ro(`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)}}function Zj(e,t,n,r){let i=cE(U().makeBox(e,t,n)),a=r?.at??(r?.centered?[0,0,0]:void 0);return a?AO(i,[a[0]-e/2,a[1]-t/2,a[2]-n/2]):i}function Qj(e,t,n){let r=n?.at??[0,0,0],i=n?.axis??[0,0,1],a=vA(e,t,r,i);if(n?.centered){let e=[-i[0]*t*.5,-i[1]*t*.5,-i[2]*t*.5];a=AO(a,e)}return a}function $j(e,t){let n=yA(e);return t?.at&&(n=AO(n,t.at)),n}function eM(e,t,n,r){let i=r?.at??[0,0,0],a=r?.axis??[0,0,1],o=bA(e,t,n,i,a);if(r?.centered){let e=[-a[0]*n*.5,-a[1]*n*.5,-a[2]*n*.5];o=AO(o,e)}return o}function tM(e,t,n){return xA(e,t,n?.at??[0,0,0],n?.axis??[0,0,1])}function nM(e,t,n,r){let i=SA(e,t,n);return r?.at&&(i=AO(i,r.at)),i}function rM(e,t){return Nk(e,t)}function iM(e,t){let n=t?.axis??[0,0,1];return Pk(e,t?.at??[0,0,0],n)}function aM(e,t,n){let r=n?.axis??[0,0,1];return Fk(e,t,n?.at??[0,0,0],r,n?.xDir)}function oM(e,t,n,r){return Ik(e,t,n,r?.at??[0,0,0],r?.axis??[0,0,1],r?.lefthand??!1)}function sM(e,t,n){return Lk(e,t,n)}function cM(e,t,n,r,i){let a=i?.axis??[0,0,1];return Rk(e,t,n*QE,r*QE,i?.at??[0,0,0],a,i?.xDir)}function lM(e,t){return zk(e,t)}function uM(e){return Vk(e)}function dM(e,t,n){return Hk(e,t,n)}function fM(e){return Uk(e)}function pM(e){return ja(Uk(e),e=>WT(e)?O(e):k(F(`WIRE_NOT_CLOSED`,`Assembled wire is not closed: start and end points do not coincide`)))}function mM(e,t){return Wk(e,t)}function hM(e){return qk(e)}function gM(e,t){return Kk(e,t)}function _M(e){return Yk(e)}function vM(e){return CA(e)}function yM(e){return TA(e)}function bM(e){return EA(e)}function xM(e,t,n){return wA(e,t,n)}function SM(e,t){return _A(e,t)}function CM(e,t){return Jk(e,t)}function wM(){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??wM(),color:[a,o,s,c]}});return OT(U().createXCAFDocument(t))}function EM(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??wM(),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(oo(`STEP_EXPORT_FAILED`,`Failed to write STEP file`))}finally{o.delete()}}function DM(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(hD(t))return k(F(`PATTERN_ZERO_DIRECTION`,`Pattern direction cannot be zero`));let a=pD(t);return nA(U().linearPattern(e.wrapped,[...a],r,n).map(e=>W(e)),{optimisation:`sameFace`,...i,unsafe:!0})}function OM(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(hD(t))return k(F(`PATTERN_ZERO_AXIS`,`Pattern axis cannot be zero`));let o=r/n;return nA(U().circularPattern(e.wrapped,[...i],[...t],o,n).map(e=>W(e)),{optimisation:`sameFace`,...a,unsafe:!0})}function kM(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 AM(e,t){return{...e,children:[...e.children,t]}}function jM(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 MM(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 NM(e,t){if(e.name===t)return e;for(let n of e.children){let e=NM(n,t);if(e)return e}}function PM(e,t,n=0){t(e,n);for(let r of e.children)PM(r,t,n+1)}function FM(e){let t=1;for(let n of e.children)t+=FM(n);return t}function IM(e){let t=[];return PM(e,e=>{e.shape&&t.push(e.shape)}),t}function LM(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function RM(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 zM(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function BM(e){return zM(RM(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function VM(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 HM(e,t){let n=t/2,r=Math.sin(n),i=zM(e);return[Math.cos(n),i[0]*r,i[1]*r,i[2]*r]}function UM(e,t){let n=zM(e),r=zM(t),i=LM(n,r);if(i>=.999999999)return[1,0,0,0];if(i<=-.999999999)return HM(BM(n),Math.PI);let a=RM(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 WM(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 GM=Math.PI/180;function KM(e,t,n){return Math.min(n,Math.max(t,e))}function qM(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function JM(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 YM(e){return qM(JM(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function XM(e,t,n,r,i){let a=n.min??r,o=n.max??i,s=Math.min(a,o),c=Math.max(a,o);return{kind:e,axis:qM(t),min:s,max:c,value:KM(n.value??0,s,c)}}function ZM(e,t,n,r,i){let a=i[0]??{kind:`rotation`,axis:[0,0,1],min:0,max:0,value:0};return{type:e,parent:t,child:n,axis:{origin:r.origin,direction:qM(r.direction)},min:a.min,max:a.max,value:a.value,dofs:i}}function QM(e,t,n,r={}){return ZM(`revolute`,e,t,n,[XM(`rotation`,n.direction,r,-180,180)])}function $M(e,t,n,r={}){return ZM(`prismatic`,e,t,n,[XM(`translation`,n.direction,r,0,100)])}function eN(e,t,n,r={}){return ZM(`cylindrical`,e,t,n,[XM(`rotation`,n.direction,r.rotation??{},-180,180),XM(`translation`,n.direction,r.translation??{},0,100)])}function tN(e,t,n,r={}){let i=qM(n.direction),a;if(r.uDirection){let e=r.uDirection,t=e[0]*i[0]+e[1]*i[1]+e[2]*i[2],n=[e[0]-t*i[0],e[1]-t*i[1],e[2]-t*i[2]];a=Math.hypot(n[0],n[1],n[2])<1e-9?YM(i):qM(n)}else a=YM(i);let o=qM(JM(i,a));return ZM(`planar`,e,t,{origin:n.origin,direction:i},[XM(`translation`,a,r.u??{},-100,100),XM(`translation`,o,r.v??{},-100,100),XM(`rotation`,i,r.rotation??{},-180,180)])}function nN(e,t,n,r={}){return ZM(`spherical`,e,t,{origin:n,direction:[0,0,1]},[XM(`rotation`,[1,0,0],r.x??{},-180,180),XM(`rotation`,[0,1,0],r.y??{},-180,180),XM(`rotation`,[0,0,1],r.z??{},-180,180)])}function rN(e,t){let n=e.dofs.map((e,n)=>{let r=t[n];return r===void 0?e:{...e,value:KM(r,e.min,e.max)}}),r=n[0];return r?{...e,dofs:n,value:r.value}:{...e,dofs:n}}function iN(e,t){return rN(e,[t])}function aN(e,t,n){if(t.kind===`translation`)return{position:[t.axis[0]*n,t.axis[1]*n,t.axis[2]*n],rotation:[1,0,0,0]};let r=HM(t.axis,n*GM),i=VM(r,e);return{position:[e[0]-i[0],e[1]-i[1],e[2]-i[2]],rotation:r}}function oN(e,t=e.value){let n=Array.isArray(t)?t:void 0,r=n?void 0:t,i=e.axis.origin,a=cN;for(let t=0;t<e.dofs.length;t++){let o=e.dofs[t];if(!o)continue;let s=n?n[t]??o.value:t===0?r??o.value:o.value;a=lN(a,aN(i,o,KM(s,o.min,o.max)))}return a}function sN(e,t){let n=e.joints??[];return{...e,joints:[...n,t]}}var cN={position:[0,0,0],rotation:[1,0,0,0]};function lN(e,t){let n=VM(e.rotation,t.position);return{position:[e.position[0]+n[0],e.position[1]+n[1],e.position[2]+n[2]],rotation:WM(e.rotation,t.rotation)}}function uN(e){let t=[];return PM(e,e=>{e.joints&&t.push(...e.joints)}),t}function dN(e,t={}){let n=[],r=new Set;PM(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,cN);let o=[...n],s=!0;for(;s&&o.length>0;){s=!1;for(let e=o.length-1;e>=0;e--){let n=o[e];if(!n)continue;let r=a.get(n.parent);if(!r||(o.splice(e,1),s=!0,a.has(n.child)))continue;let i=t[n.child]??n.value,c=n.offset?lN(oN(n,i),n.offset):oN(n,i);a.set(n.child,lN(r,c))}}for(let e of o)a.has(e.child)||a.set(e.child,cN);return a}function fN(e){return uN(e).reduce((e,t)=>e+t.dofs.length,0)}var pN={position:[0,0,0],rotation:[1,0,0,0]};function mN(e,t){let n=VM(e.rotation,t);return[n[0]+e.position[0],n[1]+e.position[1],n[2]+e.position[2]]}function hN(e){return[e[0],-e[1],-e[2],-e[3]]}function gN(e,t){let[n,r,i,a]=WM(t,hN(e)),o=Math.hypot(n,r,i,a)||1;n/=o,r/=o,i/=o,a/=o,n<0&&(n=-n,r=-r,i=-i,a=-a);let s=Math.hypot(r,i,a);if(s<1e-12)return[0,0,0];let c=2*Math.atan2(s,n)/s;return[r*c,i*c,a*c]}function _N(e,t){let n=[];PM(e,e=>{e.joints&&n.push(...e.joints)});let r=new Map;for(let e of n)r.set(e.child,e);let i=[],a=new Set,o=t;for(;o&&r.has(o)&&!a.has(o);){a.add(o);let e=r.get(o);if(!e)break;i.push(e),o=e.parent}return i.reverse()}function vN(e,t){return e[t]??0}function yN(e,t,n){let r=n+1,i=new Float64Array(n*r);for(let a=0;a<n;a++){for(let t=0;t<n;t++)i[a*r+t]=vN(e,a*n+t);i[a*r+n]=vN(t,a)}for(let e=0;e<n;e++){let t=e;for(let a=e+1;a<n;a++)Math.abs(vN(i,a*r+e))>Math.abs(vN(i,t*r+e))&&(t=a);if(Math.abs(vN(i,t*r+e))<1e-12)return null;if(t!==e)for(let n=e;n<r;n++){let a=vN(i,e*r+n);i[e*r+n]=vN(i,t*r+n),i[t*r+n]=a}let a=vN(i,e*r+e);for(let t=e;t<r;t++)i[e*r+t]=vN(i,e*r+t)/a;for(let t=0;t<n;t++){if(t===e)continue;let n=vN(i,t*r+e);if(n!==0)for(let a=e;a<r;a++)i[t*r+a]=vN(i,t*r+a)-n*vN(i,e*r+a)}}let a=new Float64Array(n);for(let e=0;e<n;e++)a[e]=vN(i,e*r+n);return a}function bN(e,t){let n=[],r=[],i=[],a=[];for(let o of e){let e=t?.[o.child];n.push({child:o.child,count:o.dofs.length}),o.dofs.forEach((t,n)=>{let o=(Array.isArray(e)?e[n]:n===0?e:void 0)??t.value;r.push(Math.min(t.max,Math.max(t.min,o))),i.push(t.min),a.push(t.max)})}return{segments:n,q:Float64Array.from(r),lo:Float64Array.from(i),hi:Float64Array.from(a)}}function xN(e,t){let n={},r=0;for(let i of e){let e=[];for(let n=0;n<i.count;n++)e.push(vN(t,r++));n[i.child]=e}return n}function SN(e,t,n,r,i){let a=mN(t,r);if(e[0]=n.position[0]-a[0],e[1]=n.position[1]-a[1],e[2]=n.position[2]-a[2],i===6&&n.rotation){let r=gN(t.rotation,n.rotation);e[3]=r[0],e[4]=r[1],e[5]=r[2]}let o=0;for(let t=0;t<i;t++)o+=vN(e,t)**2;return Math.sqrt(o)}function CN(e,t,n,r,i,a,o,s,c,l){let u=mN(o,s);for(let d=0;d<n;d++){let f=vN(t,d),p=f+c>vN(a,d)&&f-c>=vN(i,d)?-c:c;t[d]=f+p;let m=l(t);t[d]=f;let h=mN(m,s);if(e[d]=(h[0]-u[0])/p,e[n+d]=(h[1]-u[1])/p,e[2*n+d]=(h[2]-u[2])/p,r===6){let t=gN(o.rotation,m.rotation);e[3*n+d]=t[0]/p,e[4*n+d]=t[1]/p,e[5*n+d]=t[2]/p}}}function wN(e,t,n,r,i){let a=new Float64Array(r*r),o=i*i;for(let t=0;t<r;t++)for(let i=0;i<r;i++){let s=0;for(let r=0;r<n;r++)s+=vN(e,t*n+r)*vN(e,i*n+r);a[t*r+i]=s+(t===i?o:0)}let s=yN(a,t,r);if(!s)return null;let c=new Float64Array(n);for(let t=0;t<n;t++){let i=0;for(let a=0;a<r;a++)i+=vN(e,a*n+t)*vN(s,a);c[t]=i}return c}function TN(e,t,n,r={}){let i=r.maxIterations??200,a=r.tolerance??1e-5,o=r.damping??.05,s=r.tip??[0,0,0],c=n.rotation===void 0?3:6,{segments:l,q:u,lo:d,hi:f}=bN(_N(e,t),r.seed),p=u.length,m=n=>dN(e,xN(l,n)).get(t)??pN,h=new Float64Array(c),g=new Float64Array(c*p),_=m(u),v=SN(h,_,n,s,c),y=0;for(;y<i&&p>0&&v>a;y++){CN(g,u,p,c,d,f,_,s,1e-6,m);let e=wN(g,h,p,c,o);if(!e)break;for(let t=0;t<p;t++){let n=vN(u,t)+vN(e,t);u[t]=Math.min(vN(f,t),Math.max(vN(d,t),n))}_=m(u),v=SN(h,_,n,s,c)}return{values:xN(l,u),converged:v<=a,iterations:y,error:v}}function EN(e,t){return e.dofs.map((e,n)=>{let r=(Array.isArray(t)?t[n]:n===0?t:void 0)??e.value;return Math.min(e.max,Math.max(e.min,r))})}function DN(e,t,n,r){let i=[];PM(e,e=>{e.joints&&i.push(...e.joints)});let a=i.map(e=>({child:e.child,a:EN(e,t[e.child]),b:EN(e,n[e.child])})),o=Math.max(1,Math.floor(r)),s=[];for(let t=0;t<=o;t++){let n=t/o,r={};for(let e of a)r[e.child]=e.a.map((t,r)=>t+((e.b[r]??t)-t)*n);s.push({t:n,values:r,poses:dN(e,r)})}return s}var ON=Math.PI/180;function kN(e,t,n,r){let i=e*ON,a=r*ON,o=WM(HM([0,0,1],i),HM([1,0,0],a));return{position:[n*Math.cos(i),n*Math.sin(i),t],rotation:o}}function AN(e,t={}){let n=t.base??`base`,r=e.map((e,t)=>e.name??`link${t+1}`);return e.map((e,t)=>{let i=t===0?n:r[t-1]??`link${t}`,a=r[t]??`link${t+1}`,o=kN(e.theta,e.d,e.a,e.alpha),s={origin:[0,0,0],direction:[0,0,1]},c={...e.min===void 0?{}:{min:e.min},...e.max===void 0?{}:{max:e.max},...e.value===void 0?{}:{value:e.value}};return{...e.type===`prismatic`?$M(i,a,s,c):QM(i,a,s,c),offset:o}})}var jN=Math.PI/180,MN=180/Math.PI;function NN(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}function PN(e){return String(e===0?0:e)}function FN(e){return`${PN(e[0])} ${PN(e[1])} ${PN(e[2])}`}function IN(e,t={}){let n=t.name??`robot`,r=t.effort??0,i=t.velocity??0,a=t.meshes??{},o=[],s=[];PM(e,e=>{o.push(e.name),e.joints&&s.push(...e.joints)});for(let e of s){if(e.type!==`revolute`&&e.type!==`prismatic`)return k(F(N.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' is '${e.type}'; URDF supports only revolute and prismatic joints`));if(e.offset)return k(F(N.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' carries a fixed offset (e.g. a DH link) that URDF cannot represent as a single joint`))}let c=[`<?xml version="1.0"?>`,`<robot name="${NN(n)}">`];for(let e of o){let t=a[e];t?c.push(` <link name="${NN(e)}">`,` <visual><geometry><mesh filename="${NN(t)}"/></geometry></visual>`,` </link>`):c.push(` <link name="${NN(e)}"/>`)}for(let e of s){let t=e.type===`revolute`,n=t?e.min*jN:e.min,a=t?e.max*jN:e.max,o=e.type===`prismatic`?[0,0,0]:e.axis.origin;c.push(` <joint name="${NN(`${e.parent}_to_${e.child}`)}" type="${e.type}">`,` <parent link="${NN(e.parent)}"/>`,` <child link="${NN(e.child)}"/>`,` <origin xyz="${FN(o)}" rpy="0 0 0"/>`,` <axis xyz="${FN(e.axis.direction)}"/>`,` <limit lower="${PN(n)}" upper="${PN(a)}" effort="${PN(r)}" velocity="${PN(i)}"/>`,` </joint>`)}return c.push(`</robot>`,``),O(c.join(`
|
|
16
|
+
`))}function LN(e,t){return RegExp(`\\b${t}\\s*=\\s*"([^"]*)"`).exec(e)?.[1]}function RN(e,t){if(!e)return t;let n=e.trim().split(/\s+/).map(Number);return[n[0]??0,n[1]??0,n[2]??0]}function zN(e,t){return VM(WM(WM(HM([0,0,1],t[2]),HM([0,1,0],t[1])),HM([1,0,0],t[0])),e)}function BN(e){let t=/<robot\b([^>]*)>/.exec(e);if(!t)return k(F(N.VALIDATION_FAILED,`importURDF: no <robot> element found`));let n=LN(t[1]??``,`name`)??`robot`,r=[],i=/<link\b([^>]*?)(?:\/>|>)/g;for(let t=i.exec(e);t;t=i.exec(e)){let e=LN(t[1]??``,`name`);e&&r.push(e)}let a=[],o=/<joint\b([^>]*)>([\s\S]*?)<\/joint>/g;for(let t=o.exec(e);t;t=o.exec(e)){let e=t[1]??``,n=t[2]??``,r=LN(e,`type`)??`fixed`;if(r===`fixed`||r===`floating`||r===`planar`)continue;let i=/<parent\b([^>]*?)\/?>/.exec(n),o=/<child\b([^>]*?)\/?>/.exec(n),s=LN(i?.[1]??``,`link`),c=LN(o?.[1]??``,`link`);if(!s||!c)return k(F(N.VALIDATION_FAILED,`importURDF: joint missing parent/child link (${LN(e,`name`)??`unnamed`})`));let l=/<origin\b([^>]*?)\/?>/.exec(n),u=/<axis\b([^>]*?)\/?>/.exec(n),d=/<limit\b([^>]*?)\/?>/.exec(n),f=RN(LN(l?.[1]??``,`xyz`),[0,0,0]),p=RN(LN(l?.[1]??``,`rpy`),[0,0,0]),m=zN(RN(LN(u?.[1]??``,`xyz`),[1,0,0]),p),h=Number(LN(d?.[1]??``,`lower`)??NaN),g=Number(LN(d?.[1]??``,`upper`)??NaN);if(r===`prismatic`){let e=Number.isFinite(h)&&Number.isFinite(g)?{min:h,max:g}:{};a.push($M(s,c,{origin:f,direction:m},e))}else if(r===`revolute`||r===`continuous`){let e=r===`continuous`||!Number.isFinite(h)||!Number.isFinite(g)?{min:-180,max:180}:{min:h*MN,max:g*MN};a.push(QM(s,c,{origin:f,direction:m},e))}else return k(F(N.VALIDATION_FAILED,`importURDF: joint '${LN(e,`name`)??`unnamed`}' has unrecognized type '${r}'`))}return O({name:n,links:r,joints:a})}function VN(){return{steps:[],shapes:new Map}}function HN(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 UN(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 WN(e,t){return e.steps.find(e=>e.id===t)}function GN(e,t){return e.shapes.get(t)}function KN(e){return e.steps.length}function qN(e,t){let n=e.steps.findIndex(e=>e.id===t);return n===-1?[]:e.steps.slice(n)}function JN(e,t,n){let r=new Map(e.shapes);return r.set(t,n),{...e,shapes:r}}function YN(){return{operations:new Map}}function XN(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function ZN(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=JN(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=HN(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 QN(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=HN(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 $N(e,t,n,r){return e.steps.findIndex(e=>e.id===t)===-1?k(I(`MODIFY_STEP_NOT_FOUND`,`Step not found: ${t}`)):QN({steps:e.steps.map(e=>e.id===t?{...e,parameters:n}:e),shapes:e.shapes},t,r)}function eP(e){let t={};for(let[n,r]of e.shapes){let e=HO(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 tP(e){let t=new Map;for(let[n,r]of Object.entries(e.shapes))try{let e=LD(r);if(!e.ok)return k(I(`DESERIALIZE_SHAPE_FAILED`,`Failed to deserialize shape "${n}": ${e.error.message}`));t.set(n,e.value)}catch(e){return k(I(`DESERIALIZE_SHAPE_FAILED`,`Failed to deserialize shape "${n}": ${e instanceof Error?e.message:String(e)}`))}return O({steps:e.steps,shapes:t})}function nP(e){try{var t=_T();let{radius:n,pitch:r,height:i,depth:a=.6*r,toothHalfWidth:o=.42*r,sectionsPerTurn:s=20,lefthand:c=!1,inward:l=!1}=e;if(!(n>0))return k(F(`THREAD_INVALID_RADIUS`,`radius must be > 0`));if(!(r>0))return k(F(`THREAD_INVALID_PITCH`,`pitch must be > 0`));if(!(i>0))return k(F(`THREAD_INVALID_HEIGHT`,`height must be > 0`));if(!(a>0))return k(F(`THREAD_INVALID_DEPTH`,`depth must be > 0`));if(s<3)return k(F(`THREAD_TOO_FEW_SECTIONS`,`sectionsPerTurn must be >= 3`));let u=i/r,d=Math.max(2,Math.round(u*s)),f=c?-1:1,p=l?-a:a,m=l?.3:-.3,h=o,g=t.u(new kT),_=[];for(let e=0;e<=d;e++){let t=f*e*2*Math.PI/s,i=r*Math.abs(t)/(2*Math.PI),a=n*Math.cos(t),o=n*Math.sin(t),c=Math.cos(t),l=Math.sin(t),u=(e,t)=>[a+e*c,o+e*l,i+t],d=u(m,-h),v=u(p,0),y=u(m,h),b=fM([g.register(rM(d,v)),g.register(rM(v,y)),g.register(rM(y,d))]);if(!Oa(b))return b;_.push(g.register(b.value))}return Yj(_,{ruled:!0})}catch(e){t.e=e}finally{t.d()}}var rP=new WeakMap;function iP(e,t){return rP.get(e)?.get(t)}function aP(e,t,n){let r=rP.get(e);r||(r=new Map,rP.set(e,r)),r.set(t,n)}function oP(e){return U().isNull(e.wrapped)}function sP(e){return k(F(N.NULL_SHAPE_INPUT,`${e}: shape is a null shape`))}function cP(e){let t=iP(e.wrapped,`volume`);if(t)return O(t);if(oP(e))return sP(`measureVolumeProps`);let n=U(),r=n.shapeType(e.wrapped);if(r!==`solid`&&r!==`compsolid`&&r!==`compound`){let t={mass:0,volume:0,centerOfMass:[0,0,0]};return aP(e.wrapped,`volume`,t),O(t)}let i=n.volume(e.wrapped),a=TE(()=>n.centerOfMass(e.wrapped),N.CENTER_OF_MASS_FAILED,`Failed to compute center of mass`);if(!a.ok)return a;let o={mass:i,volume:i,centerOfMass:a.value};return aP(e.wrapped,`volume`,o),O(o)}function lP(e){let t=iP(e.wrapped,`surface`);if(t)return O(t);if(oP(e))return sP(`measureSurfaceProps`);let n=U(),r=n.area(e.wrapped),i=TE(()=>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 aP(e.wrapped,`surface`,a),O(a)}function uP(e){let t=iP(e.wrapped,`linear`);if(t)return O(t);if(oP(e))return sP(`measureLinearProps`);let n=U(),r=n.length(e.wrapped),i={mass:r,length:r,centerOfMass:n.linearCenterOfMass(e.wrapped)};return aP(e.wrapped,`linear`,i),O(i)}function dP(e){let t=cP(e);return t.ok?O(t.value.mass):t}function fP(e){let t=lP(e);return t.ok?O(t.value.mass):t}function pP(e){let t=uP(e);return t.ok?O(t.value.mass):t}function mP(e,t){return oP(e)||oP(t)?sP(`measureDistance`):O(U().distance(e.wrapped,t.wrapped).value)}function hP(e,t){if(oP(e)||oP(t))return sP(`measureDistanceProps`);let n=U().distance(e.wrapped,t.wrapped);return O({distance:n.value,point1:n.point1,point2:n.point2})}function gP(e){if(oP(e))return sP(`createDistanceQuery`);let t=U().createDistanceQuery(e.wrapped);return O({distanceTo(e){return oP(e)?sP(`createDistanceQuery.distanceTo`):O(t.distanceTo(e.wrapped).value)},dispose(){t.dispose()}})}function _P(e,t,n){if(oP(e))return sP(`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 vP(e){if(oP(e))return sP(`measureCurvatureAtMid`);let t=UD(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 yP=1e-9,bP=1e-8,xP=1e-6,SP=([e,t],[n,r],i=xP)=>Math.abs(e-n)<=i&&Math.abs(t-r)<=i,CP=([e,t],[n,r])=>[e+n,t+r],wP=([e,t],[n,r])=>[e-n,t-r],TP=([e,t],n)=>[e*n,t*n],EP=([e,t],[n,r]=[0,0])=>Math.sqrt((e-n)**2+(t-r)**2),DP=([e,t],[n,r]=[0,0])=>(e-n)**2+(t-r)**2;function OP([e,t],[n,r]){return e*r-t*n}var kP=([e,t],[n,r]=[0,0])=>Math.atan2(r*e-t*n,e*n+t*r),AP=([e,t],[n,r]=[0,0])=>Math.atan2(r-t,n-e),jP=(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 MP([e,t]){let n=Math.sqrt(e*e+t*t);return n<1e-12?[0,0]:[e/n,t/n]}var NP=(e,t)=>[Math.cos(t)*e,Math.sin(t)*e],PP=([e,t])=>[Math.sqrt(e*e+t*t),Math.atan2(t,e)],FP=([e,t])=>{let n=MP([e,t]);return n[0]===0&&n[1]===0&&M(`normalize2d`,`Cannot normalize zero-length vector`),n};function IP(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(so(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found ${r===0?0:`2+`} element(s)`))}function LP(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 ME(t);case`face`:return NE(t);case`wire`:return PE(t);case`vertex`:return FE(t)}}let s=e=>{let n=o(e);return t.length===0?n.slice():n.filter(a)},c=()=>LP(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=UO(n),r=t.get(e);r?r.push(n):t.set(e,[n])}return i(e=>{let n=t.get(UO(e));return!!n&&n.some(t=>GO(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=>IP(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 RP={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function zP(e){return typeof e==`string`?RP[e]??[0,0,1]:e}function BP(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 VP(e,t){let n=pD(zP(e));return e=>{let r=U(),[i,a]=r.curveParameters(e.wrapped),o=(i+a)/2,{tangent:s}=r.curveTangent(e.wrapped,o),c=pD(s),l=Math.acos(Math.min(1,Math.abs(cD(c,n))));return Math.abs(l-QE*t)<1e-6}}function HP(e){return LP(`edge`,e,HP,(t,n)=>({inDirection:(e=`Z`,t=0)=>n(VP(e,t)),ofLength:(e,t=.001)=>n(n=>Math.abs($O(n)-e)<t),ofCurveType:e=>n(t=>JO(t)===e),parallelTo:(t=`Z`)=>HP(e).inDirection(t,0),atDistance:(e,t=[0,0,0])=>n(BP(e,t,1e-6))}))}function UP(){return HP([])}function WP(e,t){let n=pD(zP(e));return e=>{let r=qD(e),i=Math.acos(Math.min(1,Math.abs(cD(pD(r),n))));return Math.abs(i-QE*t)<1e-6}}function GP(e){return LP(`face`,e,GP,(t,n)=>({inDirection:(e=`Z`,t=0)=>n(WP(e,t)),parallelTo:(t=`Z`)=>GP(e).inDirection(t,0),ofSurfaceType:e=>n(t=>{let n=zD(t);return Oa(n)&&n.value===e}),ofArea:(e,t=.001)=>n(n=>{let r=fP(n);return Oa(r)&&Math.abs(r.value-e)<t}),atDistance:(e,t=[0,0,0])=>n(BP(e,t,1e-6))}))}function KP(){return GP([])}function qP(e){return LP(`wire`,e,qP,(e,t)=>({isClosed:()=>t(e=>tk(e)),isOpen:()=>t(e=>!tk(e)),ofEdgeCount:e=>t(t=>ME(t).length===e)}))}function JP(){return qP([])}function YP(e,t){return typeof e==`object`&&`_topoKind`in e?e.findUnique(t):typeof e!=`function`&&mE(e)?O(e):e(KP()).findUnique(t)}function XP(e){return Array.isArray(e)&&e.length===2&&typeof e[0]==`number`&&typeof e[1]==`number`}function ZP(e,t){let n=10**t,r=t<0?e:.01/n+e;return Math.round(r*n)/n}function QP(e){return Math.round(e*100)/100}function $P(e){return Math.round(e*1e5)/1e5}var eF=([e,t])=>`(${QP(e)},${QP(t)})`,tF=(e,t=1e-9)=>{let n=e;return Math.abs(e)<t&&(n=0),n.toFixed(-Math.log10(t))},nF=(e,t=1e-9)=>Array.from(new Map(e.map(([e,n])=>[`[${tF(e,t)},${tF(n,t)}]`,[e,n]])).values()),rF=class{_wrapped;_deleted=!1;constructor(e){this._wrapped=e??aT().createBoundingBox2d(),jT(this,this._wrapped)}get wrapped(){if(this._deleted)throw Error(`This object has been deleted`);return this._wrapped}delete(){this._deleted||(this._deleted=!0,MT(this._wrapped),typeof this._wrapped.delete==`function`&&this._wrapped.delete())}[Symbol.dispose](){this.delete()}get repr(){let[e,t]=this.bounds;return`${eF(e)} - ${eF(t)}`}get bounds(){let{xMin:e,yMin:t,xMax:n,yMax:r}=aT().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){aT().mergeBBox2d(this.wrapped,e.wrapped)}isOut(e){return aT().isBBox2dOut(this.wrapped,e.wrapped)}containsPoint(e){return!aT().isBBox2dOutPoint(this.wrapped,e[0],e[1])}};function iF(e){return new aF(U().deserializeCurve2d(e))}var aF=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`&&jT(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`&&(MT(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 rF(t),this._boundingBox}get repr(){return`${this.geomType} ${eF(this.firstPoint)} - ${eF(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,EP(e,this.firstPoint),EP(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 XP(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?SP(e,this.firstPoint,t)?O(this.firstParameter):SP(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 ${eF(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=>XP(e)?j(this.parameter(e,r)):e);i=Array.from(new Map(i.map(e=>[ZP(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))}},oF=(e,t=1e-4,n=`C0`,r=200)=>new aF(aT().approximateCurve2dAsBSpline(e.wrapped,t,n,r)),sF=e=>(e.geomType!==`BSPLINE_CURVE`&&M(`BSplineToBezier`,`You can only convert a Bspline`),aT().decomposeBSpline2dToBeziers(e.wrapped).map(e=>new aF(e)));function cF(e,t={tolerance:1e-4,continuity:`C0`,maxSegments:300}){let n=aT();return e.flatMap(e=>{let r=e.geomType;if(r===`ELLIPSE`||r===`CIRCLE`&&SP(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 cF(sF(r===`BSPLINE_CURVE`?e:oF(e,t.tolerance,t.continuity,t.maxSegments)),t)})}var lF=(e,t)=>{let n=new aF(U().makeLine2d(e[0],e[1],t[0],t[1]));return SP(n.firstPoint,e)||n.reverse(),n},uF=(e,t,n)=>{let r=new aF(U().makeArc2dThreePoints(e[0],e[1],t[0],t[1],n[0],n[1]));if(!SP(r.firstPoint,e)){let e=U().trimCurve2d(r.wrapped,r.lastParameter,r.firstParameter);r.delete(),r=new aF(e)}return r},dF=(e,t,n)=>{let r=new aF(U().makeArc2dTangent(e[0],e[1],t[0],t[1],n[0],n[1]));if(!SP(r.firstPoint,e)){let e=U().trimCurve2d(r.wrapped,r.lastParameter,r.firstParameter);r.delete(),r=new aF(e)}return r},fF=(e,t=[0,0])=>new aF(U().makeCircle2d(t[0],t[1],e,!0)),pF=(e,t,n=[1,0],r=[0,0],i=!0)=>new aF(U().makeEllipse2d(r[0],r[1],e,t,n[0],n[1],i)),mF=(e,t,n,r,i=[0,0],a,o=!0)=>new aF(U().makeEllipseArc2d(i[0],i[1],e,t,n,r,a[0],a[1],o)),hF=(e,t,n)=>{let r=[[e[0],e[1]],...t.map(e=>[e[0],e[1]]),[n[0],n[1]]];return new aF(U().makeBezier2d(r))};function gF(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 aF(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 _F=(e,t,n,r=!1)=>{let i=TP(CP(e,t),.5),a=EP(n,e)*(r?-1:1);return uF(e,CP(TP(FP(wP(i,n)),a),n),t)},vF=(e,n)=>{let r=aT(),i=e.geomType,[a,o]=n,s=`${$P(a)} ${$P(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 ${QP(e)} ${QP(r)} ${s}`}if(i===3){let[e,r]=t(n,1),[i,a]=t(n,2);return`C ${QP(e)} ${QP(r)} ${QP(i)} ${QP(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)*$E,u=l===360?`${$P(a)} ${$P(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)*$E,f=d===360?`${$P(a)} ${$P(o+1e-4)}`:s,p=180-c*$E;return`A ${$P(n)} ${$P(i)} ${$P(p)} ${Math.abs(d)>180?`1`:`0`} ${l?`1`:`0`} ${f}`}M(`adaptedCurveToPathElem`,`Unsupported curve type: ${i}`)},yF=e=>{let t=U(),n=t.createBoundingBox2d();return e.forEach(e=>{t.addCurveToBBox2d(n,e.wrapped,1e-6)}),new rF(n)};function bF(e,t){let n=U();return e.map(e=>iE(n.liftCurve2dToPlane(e.wrapped,[...t.origin],[...t.zDir],[...t.xDir])))}var xF=(e,t)=>{let n=U();return e.map(e=>iE(n.buildEdgeOnSurface(e.wrapped,t)))},SF=(e,t)=>{let n=U();return e.map(e=>t?new aF(n.transformCurve2dGeneral(e.wrapped,t)):e.clone())},CF=(e,t,n=[0,0])=>U().createAffinityGTrsf2d(n[0],n[1],-t[1],t[0],e),wF=e=>U().createTranslationGTrsf2d(e[0],e[1]),TF=(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]),EF=(e,t=[0,0])=>U().createRotationGTrsf2d(e,t[0],t[1]),DF=(e,t=[0,0])=>U().createScaleGTrsf2d(e,t[0],t[1]);function OF(e,t,n=`original`){let r=U(),i=r.extractSurfaceFromFace(t.wrapped),a=UD(t),o=null;if(n===`original`&&BD(t)!==`PLANE`){if(BD(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=CF(1/e.radius,[1,0])}if(n===`bounds`){o=r.createIdentityGTrsf2d();try{r.setGTrsf2dTranslationPart(o,0,0);let e=r.createAffinityGTrsf2d(0,0,0,1,a.uMax-a.uMin);if(r.multiplyGTrsf2d(o,e),e.delete(),a.uMin!==0){let e=r.createIdentityGTrsf2d();r.setGTrsf2dTranslationPart(e,-a.uMin,0),r.multiplyGTrsf2d(o,e),e.delete()}let t=r.createAffinityGTrsf2d(0,0,1,0,a.vMax-a.vMin);if(r.multiplyGTrsf2d(o,t),t.delete(),a.vMin!==0){let e=r.createIdentityGTrsf2d();r.setGTrsf2dTranslationPart(e,0,-a.vMin),r.multiplyGTrsf2d(o,e),e.delete()}}catch(e){throw o.delete(),e}}let s=xF(SF(e,o),i);return o&&o.delete(),O(s)}function kF(e,t){let n=U(),r=new aF(n.extractCurve2dFromEdge(e.wrapped,t.wrapped));return ik(e)===`backward`&&n.reverseCurve2d(r.wrapped),r}var AF=(e,t=1)=>`${e.bounds[0][0]-t} ${-e.bounds[1][1]-t} ${e.width+2*t} ${e.height+2*t}`,jF=(e,t,n=1)=>`<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="${AF(t,n)}" fill="none" stroke="black" stroke-width="0.6%" vector-effect="non-scaling-stroke">
|
|
17
|
+
${e}
|
|
18
|
+
</svg>`;function MF(e){let t=e.map(e=>e.wrapped);return aE(U().makeWire(t))}var NF=class e{curves;_boundingBox;_orientation;_guessedOrientation;constructor(e){e.length===0&&M(`Blueprint`,`requires at least one curve — use createBlueprint() for Result-based validation`),this.curves=e,this._boundingBox=null,this._orientation=null,this._guessedOrientation=null}delete(){this.curves.forEach(e=>{e.delete()}),this._boundingBox&&this._boundingBox.delete()}[Symbol.dispose](){this.delete()}clone(){return new e(this.curves.map(e=>e.clone()))}get repr(){return[`Blueprint`,...this.curves.map(e=>e.repr)].join(`
|
|
19
|
+
`)}get boundingBox(){return this._boundingBox||=yF(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=Ok(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(SF(this.curves,CF(t,n,r)))}scale(t,n){let r=n||this.boundingBox.center;return new e(SF(this.curves,DF(t,r)))}rotate(t,n){return new e(SF(this.curves,EF(t*QE,n)))}translate(t,n=0){let r=XP(t)?t:[t,n];return new e(SF(this.curves,wF(r)))}mirror(t,n=[0,0],r=`center`){return new e(SF(this.curves,TF(t,n,r)))}sketchOnPlane(e,t){let n=e&&typeof e!=`string`?{...e}:TD(e,t);return{wire:MF(bF(this.curves,n)),defaultOrigin:n.origin,defaultDirection:n.zDir}}sketchOnFace(e,t){let n=U(),r=MF(j(OF(this.curves,e,t)));n.buildCurves3d(r.wrapped);let i=n.fixWireOnFace(r.wrapped,e.wrapped,1e-9);return r.delete(),{wire:aE(i),baseFace:e}}subFace(e,t){let n=eD(t||[...JD(e)]);return j(Wk(this.translate(GD(e,n)).sketchOnFace(e,`original`).wire))}punchHole(e,t,{height:n=null,origin:r=null,draftAngle:i=0}={}){let a=j(YP(t,e)),o=this.subFace(a,r);return j(FD(U().draftPrism(e.wrapped,o.wrapped,a.wrapped,n,i,!1)))}toSVGPathD(){let e=this.clone().mirror([1,0],[0,0],`plane`),t=cF(e.curves).flatMap(e=>vF(e,e.lastPoint)),[n,r]=kk(e.curves).firstPoint;return`M ${$P(n)} ${$P(r)} ${t.join(` `)}${e.isClosed()?` Z`:``}`}toSVGPath(){return`<path d="${this.toSVGPathD()}" />`}toSVGViewBox(e=1){return AF(this.boundingBox,e)}toSVGPaths(){return[this.toSVGPathD()]}toSVG(e=1){return jF(this.toSVGPath(),this.boundingBox,e)}get firstPoint(){return kk(this.curves).firstPoint}get lastPoint(){return Ak(this.curves).lastPoint}isInside(e){if(!this.boundingBox.containsPoint(e))return!1;let t=U(),n=lF(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=>SP(t,e,1e-9))||(r.push(e),i++);for(let e of a.segments)e.delete()}),!!(i%2)}finally{n.delete()}}isClosed(){return SP(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}},PF=class{constructor(e=1/0,t=Float64Array,n=Uint32Array){let r=e!==1/0;this.ids=r?new n(e):[],this.values=r?new t(e):[],this.capacity=e,this.length=0}clear(){this.length=0}push(e,t){if(this.length===this.capacity)throw RangeError(`Queue is at capacity.`);let n=this.length++;for(;n>0;){let e=n-1>>1,r=this.values[e];if(t>=r)break;this.ids[n]=this.ids[e],this.values[n]=r,n=e}this.ids[n]=e,this.values[n]=t}pop(){if(this.length===0)return;let e=this.ids,t=this.values,n=e[0],r=--this.length;if(r>0){let n=e[r],i=t[r],a=0,o=r>>1;for(;a<o;){let n=(a<<1)+1,o=n+1,s=n+(o<r&+(t[o]<t[n]));if(t[s]>=i)break;e[a]=e[s],t[a]=t[s],a=s}e[a]=n,t[a]=i}return n}peek(){return this.length>0?this.ids[0]:void 0}peekValue(){return this.length>0?this.values[0]:void 0}shrink(){Array.isArray(this.ids)&&(this.ids.length=this.length),Array.isArray(this.values)&&(this.values.length=this.length)}},FF=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],IF=3,LF=class e{static from(t,n=0){if(n%8!=0)throw Error(`byteOffset must be 8-byte aligned.`);if(!t||t.byteLength===void 0||`buffer`in t)throw Error(`Data must be an instance of ArrayBuffer or SharedArrayBuffer.`);let[r,i]=new Uint8Array(t,n+0,2);if(r!==251)throw Error(`Data does not appear to be in a Flatbush format.`);let a=i>>4;if(a!==IF)throw Error(`Got v${a} data when expected v${IF}.`);let o=FF[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=FF.indexOf(n),l=s*4*n.BYTES_PER_ELEMENT;if(c<0)throw Error(`Unexpected typed array class: ${n}.`);let u=n,d=this.IndexArrayType;if(i)this.data=i,this._boxes=new u(i,a+8,s*4),this._indices=new d(i,a+8+l,s),this._pos=s*4,this.minX=this._boxes[this._pos-4],this.minY=this._boxes[this._pos-3],this.maxX=this._boxes[this._pos-2],this.maxY=this._boxes[this._pos-1];else{let n=this.data=new r(8+l+s*this.IndexArrayType.BYTES_PER_ELEMENT);this._boxes=new u(n,8,s*4),this._indices=new d(n,8+l,s),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(n,0,2).set([251,(IF<<4)+c]),new Uint16Array(n,2,1)[0]=t,new Uint32Array(n,4,1)[0]=e}this._queue=new PF}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 Int32Array(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]=VF(Math.floor(i*((s+l)/2-this.minX)/t),Math.floor(i*((c+u)/2-this.minY)/n))}zF(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{_boxes:a,_levelBounds:o,_indices:s,nodeSize:c}=this,l=this.numItems*4,u=a.length-4,d=o.length-1,f=[],p=[],m=!1;for(;u!==void 0;){let h=Math.min(u+c*4,o[d]),g=u>=l;if(m)this._collectContained(u,h,d,g,f,p,i);else for(let o=u;o<h;o+=4){let c=a[o];if(n<c)continue;let l=a[o+1];if(r<l)continue;let u=a[o+2];if(e>u)continue;let m=a[o+3];if(t>m)continue;let h=s[o>>2]|0;if(g){let i=+(e<=c&&t<=l&&n>=u&&r>=m);f.push(h|i,d-1)}else (i===void 0||i(h,c,l,u,m))&&p.push(h)}d=f.pop(),u=f.pop(),u!==void 0&&(m=(u&1)==1,u&=-2)}return p}_collectContained(e,t,n,r,i,a,o){let s=this._boxes,c=this._indices;if(r)for(let r=e;r<t;r+=4)i.push(c[r>>2]|1,n-1);else for(let n=e;n<t;n+=4){let e=c[n>>2]|0;(o===void 0||o(e,s[n],s[n+1],s[n+2],s[n+3]))&&a.push(e)}}neighbors(e,t,n=1/0,r=1/0,i){if(this._pos!==this._boxes.length)throw Error(`Data not yet indexed - call index.finish().`);let{_boxes:a,_levelBounds:o,_indices:s,_queue:c,nodeSize:l}=this,u=this.numItems*4,d=l*4,f=[],p=r*r;for(c.push(a.length-4<<1,0);c.length;){let r=c.ids[0];if(r&1){if(c.values[0]>p||(c.pop(),f.push(r>>1),f.length===n))break;continue}c.pop();let l=r>>1,m=l<u,h=Math.min(l+d,RF(l,o));for(let n=l;n<h;n+=4){let r=s[n>>2]|0,o=a[n],l=a[n+1],u=a[n+2],d=a[n+3],f=e<o?o-e:e>u?e-u:0,h=t<l?l-t:t>d?t-d:0,g=f*f+h*h;g>p||(m?(i===void 0||i(r))&&c.push(r<<1|1,g):c.push(r<<1,g))}}return c.clear(),f}};function RF(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 zF(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;BF(e,t,n,d,f)}o.push(i,f,f+1,r)}}function BF(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 VF(e,t){let n=e^t,r=65535^n,i=65535^(e|t),a=e&(t^65535),o=n|r>>1,s=n>>1^n,c=i^(i>>1^r&a>>1),l=a^(n&i>>1^a>>1);return n=o&o>>2^s&s>>2,r=o&s>>2^s&(o^s)>>2,i=c^(o&c>>2^s&l>>2),a=l^(s&c>>2^(o^s)&l>>2),o=n&n>>4^r&r>>4,s=n&r>>4^r&(n^r)>>4,c=i^(n&i>>4^r&a>>4),l=a^(r&i>>4^(n^r)&a>>4),i=c^(o&c>>8^s&l>>8),a=l^(s&c>>8^(o^s)&l>>8),i^=i>>1,a^=a>>1,n=e^t,r=a|65535^(n|i),n=(n|n<<8)&16711935,n=(n|n<<4)&252645135,n=(n|n<<2)&858993459,n=(n|n<<1)&1431655765,r=(r|r<<8)&16711935,r=(r|r<<4)&252645135,r=(r|r<<2)&858993459,r=(r|r<<1)&1431655765,((r<<1|n)>>>0)-2147483648}var HF=(e,t,n=1e-9)=>{if(e.boundingBox.isOut(t.boundingBox))return O({intersections:[],commonSegments:[],commonSegmentsPoints:[]});let r=aT(),i,a;try{let o=r.intersectCurves2d(e.wrapped,t.wrapped,n);i=o.points,a=o.segments.map(e=>new aF(e))}catch(e){return k(I(`INTERSECTION_FAILED`,`Intersections failed between curves`,e))}let o=a.filter(e=>SP(e.firstPoint,e.lastPoint,n)).map(e=>e.firstPoint);o.length&&(i.push(...o),a=a.filter(e=>!SP(e.firstPoint,e.lastPoint,n)));let s=a.flatMap(e=>[e.firstPoint,e.lastPoint]);return O({intersections:i,commonSegments:a,commonSegmentsPoints:s})},UF=(e,t=1e-9)=>{let n=aT(),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)},WF=(e,n,r)=>{let i=FP(wP(n,e)),a=[i[1],-i[0]],o=[t(a,0)*r,t(a,1)*r];return{firstPoint:CP(e,o),lastPoint:CP(n,o)}},GF=(e,t)=>{let n=e.geomType,r=aT();if(n===`CIRCLE`){let n=r.getCurve2dCircleData(e.wrapped);if(!n)return lF(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]=FP(wP(e,t));return CP(e,[c*n,c*r])};return{collapsed:!0,firstPoint:n(e.firstPoint),lastPoint:n(e.lastPoint)}}let u=new aF(r.makeCircle2d(i,a,l,s)),d;try{d=r.trimCurve2d(u.wrapped,e.firstParameter,e.lastParameter)}finally{u.delete()}return new aF(d)}if(n===`LINE`){let{firstPoint:n,lastPoint:r}=WF(e.firstPoint,e.lastPoint,t);return lF(n,r)}let i=new aF(r.offsetCurve2d(e.wrapped,t)),a=oF(i);if(i.delete(),j(UF(a)).length){let e=a.firstPoint,t=a.lastPoint;return a.delete(),{collapsed:!0,firstPoint:e,lastPoint:t}}return a};function KF(e,n,r){let i=OP(e.tangentAt(1),n.tangentAt(0));if(Math.abs(i)<1e-10)return null;let a=Math.abs(r)*(i>0?-1:1),o=GF(e,a),s=GF(n,a);if(!(o instanceof aF)||!(s instanceof aF))return null;let c=HF(o,s,1e-9);if(!Oa(c))return null;let l=c.value.intersections.at(-1);if(!XP(l))return null;let u=l,d=(e,t)=>{let[n,r]=t.tangentAt(u),i=CP(u,TP(FP([-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 qF(e,t,n){let r=KF(e,t,n);if(!r)return[e,t];let{first:i,second:a,center:o}=r;return[i,_F(i.lastPoint,a.firstPoint,o),a]}function JF(e,t,n){let r=KF(e,t,n);if(!r)return[e,t];let{first:i,second:a}=r;return[i,lF(i.lastPoint,a.firstPoint),a]}function YF(e,n,r){let i=OP(FP(e.tangentAt(1)),FP(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=GF(e,s),l=GF(n,s);if(!(c instanceof aF)||!(l instanceof aF))return[e,n];let u=HF(c,l,1e-9);if(!Oa(u))return[e,n];let d=u.value.intersections.at(-1);if(!XP(d))return[e,n];let f=fF(r,d),p=j(HF(e,f)).intersections[0],m=j(HF(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[_,uF(_.lastPoint,e.lastPoint,v.firstPoint),v]}catch{return[e,n]}}var XF=class e{blueprints;_boundingBox;constructor(e){this.blueprints=e,this._boundingBox=null}get repr(){return[`Blueprints`,...this.blueprints.map(e=>e.repr)].join(`
|
|
20
|
+
`)}clone(){return new e(this.blueprints.map(e=>e.clone()))}get boundingBox(){if(!this._boundingBox){let e=new rF;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 AF(this.boundingBox,e)}toSVGPaths(){return this.blueprints.map(e=>e.toSVGPaths())}toSVG(e=1){return jF(this.blueprints.map(e=>e instanceof NF?e.toSVGPath():e.toSVGGroup()).join(`
|
|
21
|
+
`),this.boundingBox,e)}},ZF=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 rF;this.blueprints.forEach(t=>{e.add(t.boundingBox)}),this._boundingBox=e}return this._boundingBox}get repr(){return[`Compound Blueprints`,`-- Outline`,kk(this.blueprints).repr,`-- Holes`,...this.blueprints.slice(1).map(e=>e.repr)].join(`
|
|
22
|
+
`)}stretch(t,n,r){return new e(this.blueprints.map(e=>e.stretch(t,n,r)))}rotate(t,n){return new e(this.blueprints.map(e=>e.rotate(t,n)))}scale(t,n){let r=n||this.boundingBox.center;return new e(this.blueprints.map(e=>e.scale(t,r)))}translate(t,n=0){return new e(this.blueprints.map(e=>typeof t==`number`?e.translate(t,n):e.translate(t)))}mirror(t,n,r){return new e(this.blueprints.map(e=>e.mirror(t,n,r)))}sketchOnPlane(e,t){return this.blueprints.map(n=>n.sketchOnPlane(e,t))}sketchOnFace(e,t){return this.blueprints.map(n=>n.sketchOnFace(e,t))}punchHole(e,t,n={}){return kk(this.blueprints).punchHole(e,t,n)}toSVGViewBox(e=1){return AF(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 jF(this.toSVGGroup(),this.boundingBox,e)}},QF=e=>{if(e.length===0)return[];if(e.length===1)return[[lo(e,0,`groupByBoundingBoxOverlap`)]];let t=new LF(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(lo(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(lo(e,n,`groupByBoundingBoxOverlap`)),t.length&&t.forEach(e=>{i[e]=a})}),r},$F=e=>e.map((t,n)=>{let r=lo(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))}}),eI=(e,t)=>e.flatMap(({blueprint:e})=>nI(t.filter(({blueprint:t,isIn:n})=>t===e||n.indexOf(e)!==-1))),tI=(e,t)=>[t.filter(({isIn:e})=>e.length<=1),...nI($F(e.map(({blueprint:e})=>e)))],nI=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?eI(t,e):tI(n,e)},rI=e=>new XF(QF(e).map($F).flatMap(nI).map(e=>e.length===1?lo(e,0,`organiseBlueprints`).blueprint:(e.sort((e,t)=>e.isIn.length-t.isIn.length),new ZF(e.map(({blueprint:e})=>e))))),iI=e=>e===`symmetric`||typeof e==`number`||Array.isArray(e)&&e.length===2,aI=e=>{let t;t=e?iI(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`?NP(1,n*QE):n;let s;return s=typeof a==`number`?NP(1,a*QE):a,{endTangent:o,startFactor:r,endFactor:i,startTangent:s}};function oI(e,t,n){return e<t?{majorRadius:t,minorRadius:e,rotationAngle:n+90}:{majorRadius:e,minorRadius:t,rotationAngle:n}}function sI(e,t,n,r,i,a,o,s){let c=i*QE,l=e=>EP(s(e)),u=l(NP(n,c)),d=l(NP(r,c+Math.PI/2)),f=FP(s(jP([1,0],c))),[,p]=PP(f),{cx:m,cy:h,startAngle:g,endAngle:_,clockwise:v,rx:y,ry:b}=uI(e,t,u,d,p,a,o),x=mF(y,b,v?g:_,v?_:g,[m,h],f);return v||x.reverse(),x}function cI(e,t,n,r,i){let a=Math.PI*2,o=lI(1,0,e,t),s=lI(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 lI(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 uI([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}=cI(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 dI={chamfer:JF,dogbone:YF,fillet:qF};function fI(e,t){if(typeof e==`function`)return e;let n=dI[t];return(t,r)=>n(t,r,e)}var pI=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)*$E}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=lF(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(NP(e,t*QE))}polarLine(e,t){let[n,r]=NP(e,t*QE);return this.line(n,r)}tangentLine(e){let t=this._requireLastCurve(`Sketcher2d.tangentLine`,`sketch a tangent line`),n=FP(this._convertFromUV(t.tangentAt(1)));return this.line(n[0]*e,n[1]*e)}threePointsArcTo(e,t){let n=uF(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=uF(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=EP(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=dF(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}=oI(t,n,r),l=sI(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=AP(e,this.pointer),i=EP(e,this.pointer);return this.ellipseTo(e,i/2,t,r*$E,!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=hF(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}=aI(t),o=this._lastCurve(),s=EP(this.pointer,e)*.25,c;c=r||(o?this._convertFromUV(o.tangentAt(1)):[1,0]),c=FP(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=FP(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=fI(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(...fI(e,t)(n,r))}_closeSketch(){SP(this.pointer,this.firstPoint)||this.lineTo(this.firstPoint)}_closeWithMirror(){SP(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 aF(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}},mI=class extends pI{constructor(e=[0,0]){super(),this.pointer=e,this.firstPoint=e,this.pendingCurves=[]}done(){return new NF(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()}},hI=2*Math.PI;function gI(e){let t=e%hI,n=t<0?t+hI:t;return n<Math.PI?n:n===Math.PI?0:Math.abs(n-hI)}function _I(e){return e.curves.map((t,n)=>({firstCurve:t,secondCurve:Ok(e.curves,(n+1)%e.curves.length),point:t.lastPoint}))}function vI(e){let t=t=>vI([...e,t]),n=t=>e.every(e=>e(t));return{shouldKeep:n,when:e=>t(e),inList:e=>t(t=>e.some(e=>SP(e,t.point))),atDistance:(e,n=[0,0])=>t(t=>Math.abs(EP(n,t.point)-e)<1e-9),atPoint:e=>t(t=>SP(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(gI(kP(n,r))-gI(QE*e))<1e-9}),not:e=>{let n=e(vI([]));return t(e=>!n.shouldKeep(e))},either:e=>{let n=e.map(e=>e(vI([])));return t(e=>n.some(t=>t.shouldKeep(e)))},find:e=>_I(e).filter(n)}}function yI(){return vI([])}var bI=(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=Ak(r),a=new mI().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()},xI=(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 mI([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()},SI=(e,t)=>SP(e,t,yP);function CI(e){return`${e[0].toFixed(9)},${e[1].toFixed(9)}`}function wI(e,t){let n=CI(e),r=CI(t);return n<r?`${n}|${r}`:`${r}|${n}`}function TI(e){let t=e[0];return t===void 0&&M(`startOfSegment`,`empty segment`),t.firstPoint}function EI(e){let t=e[e.length-1];return t===void 0&&M(`endOfSegment`,`empty segment`),t.lastPoint}function DI(e){return[...e].reverse().map(e=>{let t=e.clone();return t.reverse(),t})}function OI(e){return[...e].reverse().map(DI)}function kI(e){let t=(e.lastParameter+e.firstParameter)/2;return e.value(t)}function AI(e,t){let n=CI(t);for(let r=0;r<e.length;r++){let i=e[r];if(i!==void 0&&CI(i.firstPoint)===n&&SI(t,i.firstPoint))return r}for(let n=0;n<e.length;n++){let r=e[n];if(r!==void 0&&SI(t,r.firstPoint))return n}return-1}function jI(e,t,n,r){for(let i=0;i<e.length;i++){let a=e[i];if(a!==void 0&&CI(a.firstPoint)===t&&CI(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 MI(e,t){return t<=0?e:e.slice(t).concat(e.slice(0,t))}function NI(e,t){return MI(e,AI(e,t))}function PI(e,t){let n=CI(t.firstPoint),r=CI(t.lastPoint),i=e=>SI(t.firstPoint,e.firstPoint)&&SI(t.lastPoint,e.lastPoint),a=e=>SI(t.lastPoint,e.firstPoint)&&SI(t.firstPoint,e.lastPoint);function o(e,t,n,r){let i=jI(e,t,n,r);return i===-1?null:MI(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=DI(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*FI(e,t,n){let r=new Set(t.map(CI)),i=new Set(n.map(e=>wI(e.firstPoint,e.lastPoint))),a=e=>r.has(CI(e))?!0:t.some(t=>SI(t,e)),o=(e,t)=>i.has(wI(e,t))?!0:n.some(n=>SI(n.firstPoint,e)&&SI(n.lastPoint,t)||SI(n.firstPoint,t)&&SI(n.lastPoint,e)),s=[];for(let t of e){if(SI(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 II(e,t,n){return e.filter(e=>{let r=t.filter(t=>SI(t.firstPoint,e)||SI(t.lastPoint,e)),i=r.length%2?r.filter(t=>!(SI(t.firstPoint,e)&&SI(t.lastPoint,e))):r;if(i.length===0||i.length%2)return!1;let a=i.map(e=>n.isInside(kI(e)));return!(a.every(Boolean)||a.every(e=>!e))})}function LI(e,n){let r=[],i=[],a=e.curves.map(()=>[]),o=n.curves.map(()=>[]),s=new LF(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(HF(e,t(n.curves,s),yP/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:nF(r,yP),allCommonSegments:i,firstCurvePoints:a,secondCurvePoints:o}}function RI(e,t){return Mk([e,t]).flatMap(([e,t])=>t.length===0?[e]:e.splitAt(t,yP/100))}function zI(e,t,n){return e.some(([e,r])=>e===void 0||r===void 0?!1:SI(e,t)&&SI(r,n)||SI(e,n)&&SI(r,t))}function BI(e,t){let{allIntersections:n,allCommonSegments:r,firstCurvePoints:i,secondCurvePoints:a}=LI(e,t);if(n.length<=1)return null;let o=RI(e.curves,i),s=RI(t.curves,a),c=r.map(e=>[e.firstPoint,e.lastPoint]),l=II(II(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=NI(o,e),s=NI(s,e)}else{let e=r[0];if(e===void 0)return null;o=PI(o,e),s=PI(s,e)}let u=Array.from(FI(o,l,r)),d=Array.from(FI(s,l,r)),f=u[0],p=d[0];if(f!==void 0&&p!==void 0){let e=!SI(EI(p),EI(f)),t=r.length>0&&p.length!==1;(e||t)&&(d=OI(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}zI(c,TI(t),EI(t))?h.push([t,`same`]):h.push([t,n])}return h}function VI(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`||!SI(a,n.firstPoint))break;let r=wP(a,i.firstPoint),s=wP(n.lastPoint,n.firstPoint);if(Math.abs(OP(r,s))>1e-9)break;a=n.lastPoint,o++}o>r+1?n.push(lF(i.firstPoint,a)):n.push(i),r=o}return n}function HI(e){let t=e.map(e=>e.firstPoint),n=e.map(e=>e.lastPoint),r=Mk([t,n.slice(-1).concat(n.slice(0,-1))]).map(([e,t],n)=>e===void 0||t===void 0||SI(e,t)?null:n).filter(e=>e!==null);if(r.length===0)return[e];let i=Mk([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 UI(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 WI(e,t,n,r,i,a,o){let s=[],c=0,l=e[0];if(l!==void 0){let t=kI(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=kI(u),r=n.isInside(e);if(i.secondInside===`keep`&&r||i.secondInside===`remove`&&!r){let e=t;c===1&&(e=DI(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 GI(e,t,n){let r=BI(e,t);if(r===null)return KI(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=UI(r,i,a);return i=e.segmentsIn,a=e.lastWasSame,e.curves}let s=WI(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=HI(VI(o)).filter(e=>e.length>0).map(e=>new NF(e));if(c.length===0)return null;if(c.length===1){let e=c[0];return e===void 0?null:e}return rI(c)}function KI(e,t){let n=e.curves[0],r=t.curves[0];return{identical:!1,firstCurveInSecond:n!==void 0&&t.isInside(kI(n)),secondCurveInFirst:r!==void 0&&e.isInside(kI(r))}}function qI(e,t){let n=GI(e,t,{firstInside:`remove`,secondInside:`remove`});return n===null||n instanceof NF||n instanceof XF?n:n.identical?e.clone():n.firstCurveInSecond?t.clone():n.secondCurveInFirst?e.clone():new XF([e,t])}function JI(e,t){let n=GI(e,t,{firstInside:`remove`,secondInside:`keep`});return n===null||n instanceof NF||n instanceof XF?n:n.identical||n.firstCurveInSecond?null:n.secondCurveInFirst?new XF([new ZF([e,t])]):e.clone()}function YI(e,t){let n=GI(e,t,{firstInside:`keep`,secondInside:`keep`});return n===null||n instanceof NF||n instanceof XF?n:n.identical||n.firstCurveInSecond?e.clone():n.secondCurveInFirst?t.clone():null}var XI=(e,t)=>{if(e instanceof NF&&t instanceof NF){let n=[];return e.curves.forEach(e=>{t.curves.forEach(t=>{let{intersections:r,commonSegmentsPoints:i}=j(HF(e,t));n.push(...r),n.push(...i)})}),n=nF(n),n.length>1}if(e instanceof ZF||e instanceof XF)return e.blueprints.some(e=>XI(e,t));if(t instanceof ZF||t instanceof XF)return t.blueprints.some(t=>XI(e,t));M(`genericIntersects`,`Unhandled shape combination in genericIntersects`)},ZI=(e,t)=>{if(e instanceof ZF){if(t instanceof NF)return eL(t,e);if(t instanceof ZF)return nL(e,t)}if(t instanceof ZF){if(e instanceof NF)return eL(e,t);if(e instanceof ZF)return nL(e,t)}if(e instanceof NF&&t instanceof NF)return qI(e,t);M(`genericFuse`,`Unhandled shape combination in genericFuse`)},QI=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)||!XI(r,s))return;let l;if(r instanceof XF||s instanceof XF){let e=rL(r,s);e===null&&M(`fuseIntersectingBlueprints`,`fuse2D returned null for non-null inputs`),l=e}else l=ZI(r,s);if(!(l instanceof NF||l instanceof ZF)){if(l instanceof XF&&l.blueprints.length===2)return;l instanceof XF&&l.blueprints.length===1?l=lo(l.blueprints,0,`fuseIntersectingBlueprints`):l instanceof XF||M(`fuseIntersectingBlueprints`,`Fuse produced unexpected non-blueprint result`)}a.fusedWith.add(o),a.current=l,c||t.set(o,a)})}),rI(n.map(({current:e})=>e).flatMap(e=>$I(e)))},$I=e=>e instanceof NF?[e]:e instanceof ZF?e.blueprints:e instanceof XF?e.blueprints.flatMap(e=>$I(e)):[],eL=(e,t)=>{let n=qI(e,lo(t.blueprints,0,`fuseBlueprintWithCompound`)),r=t.blueprints.slice(1).map(t=>JI(t,e));return rI([...$I(n),...r.flatMap(e=>$I(e))])};function tL(e,t){let n=[];for(let r of e)for(let e of t)n.push([r,e]);return n}var nL=(e,t)=>{let n=lo(e.blueprints,0,`fuseCompoundWithCompound`),r=lo(t.blueprints,0,`fuseCompoundWithCompound`),i=qI(n,r),a=t.blueprints.slice(1).map(e=>JI(e,n)),o=e.blueprints.slice(1).map(e=>JI(e,r)),s=tL(e.blueprints.slice(1),t.blueprints.slice(1)).flatMap(([e,t])=>$I(YI(e,t)));return rI([...$I(i),...a.flatMap(e=>$I(e)),...o.flatMap(e=>$I(e)),...s])},rL=(e,t)=>{if(e===null)return t?.clone()??null;if(t===null)return e.clone();if(!(e instanceof XF)&&t instanceof XF)return QI([e,...t.blueprints]);if(!(t instanceof XF)&&e instanceof XF)return QI([t,...e.blueprints]);if(e instanceof XF&&t instanceof XF){let n=rL(lo(e.blueprints,0,`fuse2D`),t);return e.blueprints.slice(1).forEach(e=>{n=rL(e,n)}),n}if(e instanceof ZF){if(t instanceof XF)return rL(t,e);if(t instanceof NF)return eL(t,e);if(t instanceof ZF)return nL(e,t)}if(t instanceof ZF){if(e instanceof XF)return rL(e,t);if(e instanceof NF)return eL(e,t);if(e instanceof ZF)return nL(e,t)}return e instanceof NF&&t instanceof NF?qI(e,t):null},iL=e=>{let t=e.flatMap(e=>e===null?[]:e instanceof XF?e.blueprints:e);return t.length===1?lo(t,0,`mergeNonIntersecting`):new XF(t)},aL=(e,t)=>{if(e===null)return null;if(t===null)return e.clone();if(e instanceof XF)return iL(e.blueprints.map(e=>aL(e,t)));if(e instanceof ZF){let n=lo(e.blueprints,0,`cut2D`);if(t instanceof NF&&!t.intersects(n))return n.isInside(t.firstPoint)?rI([n,...$I(rL(t,new XF(e.blueprints.slice(1))))]):e.clone();{let r=aL(n,t);return e.blueprints.slice(1).forEach(e=>{r=aL(r,e)}),r}}if(t instanceof XF){let n=e;for(let e of t.blueprints)n=aL(n,e);return n}if(t instanceof ZF){let n=JI(e,lo(t.blueprints,0,`cut2D`));return t.blueprints.slice(1).forEach(t=>{n=rL(n,YI(t,e))}),n}return JI(e,t)};function oL(e,t){if(e===null||t===null)return null;if(e instanceof NF&&t instanceof NF)return YI(e,t);if(e instanceof XF)return iL(e.blueprints.map(e=>oL(e,t)));if(e instanceof ZF){let n=lo(e.blueprints,0,`intersect2D`),r=e.blueprints.slice(1);if(r.length===0)return oL(n,t);let i=oL(n,t);for(let e of r)i=aL(i,e);return i}if(t instanceof XF)return iL(t.blueprints.map(t=>oL(e,t)));if(t instanceof ZF){let n=lo(t.blueprints,0,`intersect2D`),r=t.blueprints.slice(1);if(r.length===0)return oL(n,e);let i=oL(n,e);for(let e of r)i=aL(i,e);return i}M(`intersect2D`,`Unhandled Shape2D combination`)}var sL=e(((e,t)=>{t.exports={}}));
|
|
23
|
+
/*! https://mths.be/codepointat v0.2.0 by @mathias */
|
|
24
|
+
String.prototype.codePointAt||(function(){var e=function(){try{var e={},t=Object.defineProperty,n=t(e,e,e)&&t}catch{}return n}(),t=function(e){if(this==null)throw TypeError();var t=String(this),n=t.length,r=e?Number(e):0;if(r!=r&&(r=0),!(r<0||r>=n)){var i=t.charCodeAt(r),a;return i>=55296&&i<=56319&&n>r+1&&(a=t.charCodeAt(r+1),a>=56320&&a<=57343)?(i-55296)*1024+a-56320+65536:i}};e?e(String.prototype,`codePointAt`,{value:t,configurable:!0,writable:!0}):String.prototype.codePointAt=t})();var cL=0,lL=-3;function uL(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function dL(e,t){this.source=e,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=t,this.destLen=0,this.ltree=new uL,this.dtree=new uL}var fL=new uL,pL=new uL,mL=new Uint8Array(30),hL=new Uint16Array(30),gL=new Uint8Array(30),_L=new Uint16Array(30),vL=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),yL=new uL,bL=new Uint8Array(320);function xL(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 SL(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 CL=new Uint16Array(16);function wL(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)CL[i]=a,a+=e.table[i];for(i=0;i<r;++i)t[n+i]&&(e.trans[CL[t[n+i]]++]=i)}function TL(e){e.bitcount--||(e.tag=e.source[e.sourceIndex++],e.bitcount=7);var t=e.tag&1;return e.tag>>>=1,t}function EL(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 DL(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 OL(e,t,n){var r=EL(e,5,257),i=EL(e,5,1),a=EL(e,4,4),o,s,c;for(o=0;o<19;++o)bL[o]=0;for(o=0;o<a;++o){var l=EL(e,3,0);bL[vL[o]]=l}for(wL(yL,bL,0,19),s=0;s<r+i;){var u=DL(e,yL);switch(u){case 16:var d=bL[s-1];for(c=EL(e,2,3);c;--c)bL[s++]=d;break;case 17:for(c=EL(e,3,3);c;--c)bL[s++]=0;break;case 18:for(c=EL(e,7,11);c;--c)bL[s++]=0;break;default:bL[s++]=u;break}}wL(t,bL,0,r),wL(n,bL,r,i)}function kL(e,t,n){for(;;){var r=DL(e,t);if(r===256)return cL;if(r<256)e.dest[e.destLen++]=r;else{var i,a,o,s;for(r-=257,i=EL(e,mL[r],hL[r]),a=DL(e,n),o=e.destLen-EL(e,gL[a],_L[a]),s=o;s<o+i;++s)e.dest[e.destLen++]=e.dest[s]}}}function AL(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 lL;for(e.sourceIndex+=4,r=t;r;--r)e.dest[e.destLen++]=e.source[e.sourceIndex++];return e.bitcount=0,cL}function jL(e,t){var n=new dL(e,t),r,i,a;do{switch(r=TL(n),i=EL(n,2,0),i){case 0:a=AL(n);break;case 1:a=kL(n,fL,pL);break;case 2:OL(n,n.ltree,n.dtree),a=kL(n,n.ltree,n.dtree);break;default:a=lL}if(a!==cL)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}SL(fL,pL),xL(mL,hL,4,3),xL(gL,_L,2,1),mL[28]=0,hL[28]=258;var ML=jL;function NL(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 PL(){this.x1=NaN,this.y1=NaN,this.x2=NaN,this.y2=NaN}PL.prototype.isEmpty=function(){return isNaN(this.x1)||isNaN(this.y1)||isNaN(this.x2)||isNaN(this.y2)},PL.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))},PL.prototype.addX=function(e){this.addPoint(e,null)},PL.prototype.addY=function(e){this.addPoint(null,e)},PL.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(NL(c[f],l[f],u[f],d[f],g)),f===1&&this.addY(NL(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(NL(c[f],l[f],u[f],d[f],v)),f===1&&this.addY(NL(c[f],l[f],u[f],d[f],v)));var y=(-p-Math.sqrt(_))/(2*m);0<y&&y<1&&(f===0&&this.addX(NL(c[f],l[f],u[f],d[f],y)),f===1&&this.addY(NL(c[f],l[f],u[f],d[f],y)))}}},PL.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 FL(){this.commands=[],this.fill=`black`,this.stroke=null,this.strokeWidth=1}FL.prototype.moveTo=function(e,t){this.commands.push({type:`M`,x:e,y:t})},FL.prototype.lineTo=function(e,t){this.commands.push({type:`L`,x:e,y:t})},FL.prototype.curveTo=FL.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})},FL.prototype.quadTo=FL.prototype.quadraticCurveTo=function(e,t,n,r){this.commands.push({type:`Q`,x1:e,y1:t,x:n,y:r})},FL.prototype.close=FL.prototype.closePath=function(){this.commands.push({type:`Z`})},FL.prototype.extend=function(e){if(e.commands)e=e.commands;else if(e instanceof PL){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)},FL.prototype.getBoundingBox=function(){for(var e=new PL,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},FL.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())},FL.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},FL.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},FL.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 IL(e){throw Error(e)}function LL(e,t){e||IL(t)}var K={fail:IL,argument:LL,assert:LL},RL=32768,zL=2147483648,BL={},q={},J={};function VL(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=VL(1),q.CHAR=function(e){return[e.charCodeAt(0)]},J.CHAR=VL(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=VL(2),q.SHORT=function(e){return e>=RL&&(e=-(2*RL-e)),[e>>8&255,e&255]},J.SHORT=VL(2),q.UINT24=function(e){return[e>>16&255,e>>8&255,e&255]},J.UINT24=VL(3),q.ULONG=function(e){return[e>>24&255,e>>16&255,e>>8&255,e&255]},J.ULONG=VL(4),q.LONG=function(e){return e>=zL&&(e=-(2*zL-e)),[e>>24&255,e>>16&255,e>>8&255,e&255]},J.LONG=VL(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=VL(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=VL(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=VL(3),q.NUMBER32=function(e){return[29,e>>24&255,e>>16&255,e>>8&255,e&255]},J.NUMBER32=VL(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,BL.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)},BL.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 HL={"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ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ`};BL.MACSTRING=function(e,t,n,r){var i=HL[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 UL=typeof WeakMap==`function`&&new WeakMap,WL,GL=function(e){if(!WL)for(var t in WL={},HL)WL[t]=new String(t);var n=WL[e];if(n!==void 0){if(UL){var r=UL.get(n);if(r!==void 0)return r}var i=HL[e];if(i!==void 0){for(var a={},o=0;o<i.length;o++)a[i.charCodeAt(o)]=o+128;return UL&&UL.set(n,a),a}}};q.MACSTRING=function(e,t){var n=GL(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 KL(e){return e>=-128&&e<=127}function qL(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 JL(e,t,n){for(var r=0,i=e.length,a=t;a<i&&r<64;){var o=e[a];if(!KL(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 YL(e,t,n){for(var r=0,i=e.length,a=t;a<i&&r<64;){var o=e[a];if(o===0||KL(o)&&a+1<i&&KL(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?qL(e,t,n):r>=-128&&r<=127?JL(e,t,n):YL(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 XL=typeof WeakMap==`function`&&new WeakMap;q.CHARSTRING=function(e){if(XL){var t=XL.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 XL&&XL.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 ZL(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)}}ZL.prototype.encode=function(){return q.TABLE(this)},ZL.prototype.sizeOf=function(){return J.TABLE(this)};function QL(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 $L(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 eR(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 tR(e){e.format===1?ZL.call(this,`coverageTable`,[{name:`coverageFormat`,type:`USHORT`,value:1}].concat(QL(`glyph`,e.glyphs))):e.format===2?ZL.call(this,`coverageTable`,[{name:`coverageFormat`,type:`USHORT`,value:2}].concat(eR(`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.`)}tR.prototype=Object.create(ZL.prototype),tR.prototype.constructor=tR;function nR(e){ZL.call(this,`scriptListTable`,eR(`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 ZL(`scriptTable`,[{name:`defaultLangSys`,type:`TABLE`,value:new ZL(`defaultLangSys`,[{name:`lookupOrder`,type:`USHORT`,value:0},{name:`reqFeatureIndex`,type:`USHORT`,value:r.reqFeatureIndex}].concat(QL(`featureIndex`,r.featureIndexes)))}].concat(eR(`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 ZL(`langSys`,[{name:`lookupOrder`,type:`USHORT`,value:0},{name:`reqFeatureIndex`,type:`USHORT`,value:n.reqFeatureIndex}].concat(QL(`featureIndex`,n.featureIndexes)))}]})))}]}))}nR.prototype=Object.create(ZL.prototype),nR.prototype.constructor=nR;function rR(e){ZL.call(this,`featureListTable`,eR(`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 ZL(`featureTable`,[{name:`featureParams`,type:`USHORT`,value:n.featureParams}].concat(QL(`lookupListIndex`,n.lookupListIndexes)))}]}))}rR.prototype=Object.create(ZL.prototype),rR.prototype.constructor=rR;function iR(e,t){ZL.call(this,`lookupListTable`,$L(`lookup`,e,function(e){var n=t[e.lookupType];return K.assert(!!n,`Unable to write GSUB lookup type `+e.lookupType+` tables.`),new ZL(`lookupTable`,[{name:`lookupType`,type:`USHORT`,value:e.lookupType},{name:`lookupFlag`,type:`USHORT`,value:e.lookupFlag}].concat($L(`subtable`,e.subtables,n)))}))}iR.prototype=Object.create(ZL.prototype),iR.prototype.constructor=iR;var Y={Table:ZL,Record:ZL,Coverage:tR,ScriptList:nR,FeatureList:rR,LookupList:iR,ushortList:QL,tableList:$L,recordList:eR};function aR(e,t){return e.getUint8(t)}function oR(e,t){return e.getUint16(t,!1)}function sR(e,t){return e.getInt16(t,!1)}function cR(e,t){return e.getUint32(t,!1)}function lR(e,t){return e.getInt16(t,!1)+e.getUint16(t+2,!1)/65535}function uR(e,t){for(var n=``,r=t;r<t+4;r+=1)n+=String.fromCharCode(e.getInt8(r));return n}function dR(e,t,n){for(var r=0,i=0;i<n;i+=1)r<<=8,r+=e.getUint8(t+i);return r}function fR(e,t,n){for(var r=[],i=t;i<n;i+=1)r.push(e.getUint8(i));return r}function pR(e){for(var t=``,n=0;n<e.length;n+=1)t+=String.fromCharCode(e[n]);return t}var mR={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=cR(this.data,this.offset+this.relativeOffset);return this.relativeOffset+=4,e},X.prototype.parseOffset32=X.prototype.parseULong,X.prototype.parseFixed=function(){var e=lR(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=cR(this.data,this.offset+this.relativeOffset+4);return e-=2082844800,this.relativeOffset+=8,e},X.prototype.parseVersion=function(e){var t=oR(this.data,this.offset+this.relativeOffset),n=oR(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+=mR[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 hR={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(hR),langSysRecords:X.recordList({tag:X.tag,langSys:X.pointer(hR)})})}))||[]},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:aR,getCard8:aR,getUShort:oR,getCard16:oR,getShort:sR,getULong:cR,getFixed:lR,getTag:uR,getOffset:dR,getBytes:fR,bytesToString:pR,Parser:X};function gR(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 _R(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 vR(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)gR(n,s);else if(n.format===4)_R(n,s,e,t,r);else throw Error(`Only format 4 and 12 cmap tables are supported (found format `+n.format+`).`);return n}function yR(e,t,n){e.segments.push({end:t,start:t,delta:-(t-n),offset:0,glyphIndex:n})}function bR(e){e.segments.push({end:65535,start:65535,delta:1,offset:0})}function xR(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)yR(i,a.unicodes[o],n);i.segments=i.segments.sort(function(e,t){return e.start-t.start})}bR(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 SR={parse:vR,make:xR},CR=`.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(`,`),wR=`................................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(`.`),TR=`................................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(`.`),ER=`.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 DR(e){this.font=e}DR.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 OR(e){this.cmap=e}OR.prototype.charToGlyphIndex=function(e){return this.cmap.glyphIndexMap[e.codePointAt(0)]||0};function kR(e,t){this.encoding=e,this.charset=t}kR.prototype.charToGlyphIndex=function(e){var t=e.codePointAt(0),n=this.encoding[t];return this.charset.indexOf(n)};function AR(e){switch(e.version){case 1:this.names=ER.slice();break;case 2:this.names=Array(e.numberOfGlyphs);for(var t=0;t<e.numberOfGlyphs;t++)e.glyphNameIndex[t]<ER.length?this.names[t]=ER[e.glyphNameIndex[t]]:this.names[t]=e.names[e.glyphNameIndex[t]-ER.length];break;case 2.5:this.names=Array(e.numberOfGlyphs);for(var n=0;n<e.numberOfGlyphs;n++)this.names[n]=ER[n+e.glyphNameIndex[n]];break;case 3:this.names=[];break;default:this.names=[];break}}AR.prototype.nameToGlyphIndex=function(e){return this.names.indexOf(e)},AR.prototype.glyphIndexToName=function(e){return this.names[e]};function jR(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 MR(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 NR(e,t){t.lowMemory?MR(e):jR(e)}function PR(e,t,n,r,i){e.beginPath(),e.moveTo(t,n),e.lineTo(r,i),e.stroke()}var FR={line:PR};function IR(e,t){var n=t||new FL;return{configurable:!0,get:function(){return typeof n==`function`&&(n=n()),n},set:function(e){n=e}}}function LR(e){this.bindConstructorValues(e)}LR.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",IR(this,e.path))},LR.prototype.addUnicode=function(e){this.unicodes.length===0&&(this.unicode=e),this.unicodes.push(e)},LR.prototype.getBoundingBox=function(){return this.path.getBoundingBox()},LR.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 FL,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},LR.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},LR.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},LR.prototype.draw=function(e,t,n,r,i){this.getPath(t,n,r,i).draw(e)},LR.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)},LR.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`,FR.line(e,t,-1e4,t,1e4),FR.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`,FR.line(e,t+a*i,-1e4,t+a*i,1e4),FR.line(e,t+s*i,-1e4,t+s*i,1e4),FR.line(e,-1e4,n+-o*i,1e4,n+-o*i),FR.line(e,-1e4,n+-c*i,1e4,n+-c*i),e.strokeStyle=`green`,FR.line(e,t+l*i,-1e4,t+l*i,1e4)};function RR(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 zR(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}zR.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]},zR.prototype.push=function(e,t){this.glyphs[e]=t,this.length++};function BR(e,t){return new LR({index:t,font:e})}function VR(e,t,n,r,i,a){return function(){var o=new LR({index:t,font:e});return o.path=function(){n(o,r,i);var t=a(e.glyphs,o);return t.unitsPerEm=e.unitsPerEm,t},RR(o,`xMin`,`_xMin`),RR(o,`xMax`,`_xMax`),RR(o,`yMin`,`_yMin`),RR(o,`yMax`,`_yMax`),o}}function HR(e,t,n,r){return function(){var i=new LR({index:t,font:e});return i.path=function(){var t=n(e,i,r);return t.unitsPerEm=e.unitsPerEm,t},i}}var UR={GlyphSet:zR,glyphLoader:BR,ttfGlyphLoader:VR,cffGlyphLoader:HR};function WR(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(!WR(e[n],t[n]))return!1;return!0}else return!1}function GR(e){return e.length<1240?107:e.length<33900?1131:32768}function KR(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 qR(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 JR(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 YR(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 XR(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 YR(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 ZR(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 QR(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(XR(r,o))}return ZR(i)}function $R(e,t){return t=t<=390?CR[t]:e[t-391],t}function ez(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=$R(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=$R(n,i)),r[o.name]=i}return r}function tz(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 nz=[{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`}],rz=[{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 iz(e,t){return ez(QR(e,0,e.byteLength),nz,t)}function az(e,t,n,r){return ez(QR(e,t,n),rz,r)}function oz(e,t,n,r){for(var i=[],a=0;a<n.length;a+=1){var o=iz(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=az(e,c+t,s,r);o._defaultWidthX=l.defaultWidthX,o._nominalWidthX=l.nominalWidthX,l.subrs!==0&&(o._subrs=KR(e,c+l.subrs+t).objects,o._subrsBias=GR(o._subrs)),o._privateDict=l}i.push(o)}return i}function sz(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($R(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($R(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($R(r,i)),i+=1}else throw Error(`Unknown charset format `+c);return s}function cz(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 kR(i,n)}function lz(e,t,n){var r,i,a,o,s=new FL,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 uz(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 dz(e,t,n,r){n.tables.cff={};var i=KR(e,KR(e,tz(e,t).endOffset,Z.bytesToString).endOffset),a=KR(e,i.endOffset,Z.bytesToString);n.gsubrs=KR(e,a.endOffset).objects,n.gsubrsBias=GR(n.gsubrs);var o=oz(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=oz(e,t,KR(e,c).objects,a.objects);s._fdArray=u,l+=t,s._fdSelect=uz(e,l,n.numGlyphs,u.length)}var d=t+s.private[1],f=az(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=KR(e,d+f.subrs).objects,n.subrsBias=GR(n.subrs));var p;r.lowMemory?(p=qR(e,t+s.charStrings),n.nGlyphs=p.offsets.length):(p=KR(e,t+s.charStrings),n.nGlyphs=p.objects.length);var m=sz(e,t+s.charset,n.nGlyphs,a.objects);if(s.encoding===0?n.cffEncoding=new kR(wR,m):s.encoding===1?n.cffEncoding=new kR(TR,m):n.cffEncoding=cz(e,t+s.encoding,m),n.encoding=n.encoding||n.cffEncoding,n.glyphs=new UR.GlyphSet(n),r.lowMemory)n._push=function(r){var i=JR(r,p.offsets,e,t+s.charStrings);n.glyphs.push(r,UR.cffGlyphLoader(n,r,lz,i))};else for(var h=0;h<n.nGlyphs;h+=1){var g=p.objects[h];n.glyphs.push(h,UR.cffGlyphLoader(n,h,lz,g))}}function fz(e,t){var n,r=CR.indexOf(e);return r>=0&&(n=r),r=t.indexOf(e),r>=0?n=r+CR.length:(n=CR.length+t.length,t.push(e)),n}function pz(){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 mz(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 hz(e,t,n){for(var r={},i=0;i<e.length;i+=1){var a=e[i],o=t[a.name];o!==void 0&&!WR(o,a.value)&&(a.type===`SID`&&(o=fz(o,n)),r[a.op]={name:a.name,type:a.type,value:o})}return r}function gz(e,t){var n=new Y.Record(`Top DICT`,[{name:`dict`,type:`DICT`,value:{}}]);return n.dict=hz(nz,e,t),n}function _z(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 vz(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 yz(){return new Y.Record(`Global Subr INDEX`,[{name:`subrs`,type:`INDEX`,value:[]}])}function bz(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=fz(i,t);n.fields.push({name:`glyph_`+r,type:`SID`,value:a})}return n}function xz(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 Sz(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=xz(r);t.charStrings.push({name:r.name,type:`CHARSTRING`,value:i})}return t}function Cz(e,t){var n=new Y.Record(`Private DICT`,[{name:`dict`,type:`DICT`,value:{}}]);return n.dict=hz(rz,e,t),n}function wz(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=pz(),n.nameIndex=mz([t.postScriptName]);var u=gz(i,l);return n.topDictIndex=_z(u),n.globalSubrIndex=yz(),n.charsets=bz(o,l),n.charStringsIndex=Sz(e),n.privateDict=Cz(a,l),n.stringIndex=vz(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=gz(i,l),n.topDictIndex=_z(u),n}var Tz={parse:dz,make:wz};function Ez(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 Dz(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 Oz={parse:Ez,make:Dz};function kz(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 Az(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 jz={parse:kz,make:Az};function Mz(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 Nz(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 Pz(e,t,n,r,i,a,o){o.lowMemory?Nz(e,t,n,r,i):Mz(t,n,r,i,a)}function Fz(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 Iz={parse:Pz,make:Fz};function Lz(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 Rz(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 zz={make:Lz,parse:Rz};function Bz(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 Vz(e){return new Y.Table(`maxp`,[{name:`version`,type:`FIXED`,value:20480},{name:`numGlyphs`,type:`USHORT`,value:e}])}var Hz={parse:Bz,make:Vz},Uz=[`copyright`,`fontFamily`,`fontSubfamily`,`uniqueID`,`fullName`,`version`,`postScriptName`,`trademark`,`manufacturer`,`designer`,`description`,`manufacturerURL`,`designerURL`,`license`,`licenseURL`,`reserved`,`preferredFamily`,`preferredSubfamily`,`compatibleFullName`,`sampleText`,`postScriptFindFontName`,`wwsFamily`,`wwsSubfamily`],Wz={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`},Gz={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},Kz={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 qz(e,t,n){switch(e){case 0:if(t===65535)return`und`;if(n)return n[t];break;case 1:return Wz[t];case 3:return Kz[t]}}var Jz=`utf-16`,Yz={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`},Xz={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 Zz(e,t,n){switch(e){case 0:return Jz;case 1:return Xz[n]||Yz[t];case 3:if(t===1||t===10)return Jz;break}}function Qz(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=Uz[f]||f,m=i.parseUShort(),h=i.parseUShort(),g=qz(l,d,n),_=Zz(l,u,d);if(_!==void 0&&g!==void 0){var v=void 0;if(v=_===Jz?BL.UTF16(e,s+h,m):BL.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 $z(e){var t={};for(var n in e)t[e[n]]=parseInt(n);return t}function eB(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 tB(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 nB(e,t){var n=tB(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 rB(e,t){var n,r=[],i={},a=$z(Uz);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=$z(Wz),l=$z(Kz),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=Gz[_],y=Zz(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=nB(b,d);u.push(eB(g,v,_,n,b.length,x));var S=l[m];if(S!==void 0){var C=q.UTF16(h),w=nB(C,d);u.push(eB(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 iB={parse:Qz,make:rB},aB=[{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 oB(e){for(var t=0;t<aB.length;t+=1){var n=aB[t];if(e>=n.begin&&e<n.end)return t}return-1}function sB(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 cB(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 lB={parse:sB,make:cB,unicodeRanges:aB,getUnicodeRange:oB};function uB(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=ER.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]>=ER.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 dB(){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 fB={parse:uB,make:dB},pB=Array(9);pB[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.`)},pB[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()}},pB[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()}},pB[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 mB={sequenceIndex:X.uShort,lookupListIndex:X.uShort};pB[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,mB)}})};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,mB)}})};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,mB)}}K.assert(!1,`0x`+e.toString(16)+`: lookup type 5 format must be 1, 2 or 3.`)},pB[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(mB)}})};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(mB)}})};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(mB)};K.assert(!1,`0x`+e.toString(16)+`: lookup type 6 format must be 1, 2 or 3.`)},pB[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:pB[t].call(n)}},pB[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 hB(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(pB)}:{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(pB),variations:n.parseFeatureVariationsList()}}var gB=Array(9);gB[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)))},gB[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))})))},gB[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))})))},gB[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)))}))})))},gB[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 _B(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,gB)}])}var vB={parse:hB,make:_B};function yB(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]=BL.UTF8(e,t+c,l)}return a}function bB(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 xB={parse:yB,make:bB};function SB(e){return Math.log(e)/Math.log(2)|0}function CB(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 wB(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 TB(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**SB(t.numTables);t.searchRange=16*n,t.entrySelector=SB(n),t.rangeShift=t.numTables*16-t.searchRange;for(var r=[],i=[],a=t.sizeOf()+wB().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=wB(s.tableName,CB(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 EB(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 DB(e){for(var t=0,n=0;n<e.length;n+=1)t+=e[n];return t/e.length}function OB(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 _=lB.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:DB(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=Oz.make({flags:3,unitsPerEm:e.unitsPerEm,xMin:y.xMin,yMin:y.yMin,xMax:y.xMax,yMax:y.yMax,lowestRecPPEM:3,createdTimestamp:e.createdTimestamp}),x=jz.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=Hz.make(e.glyphs.length),C=lB.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:EB(e,`xyvw`,{yMax:Math.round(y.ascender/2)}).yMax,sCapHeight:EB(e,`HIKLEFJMNTZBDPRAGOQSUVWXY`,y).yMax,usDefaultChar:e.hasChar(` `)?32:0,usBreakChar:e.hasChar(` `)?32:0},e.tables.os2)),w=Iz.make(e.glyphs),ee=SR.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=iB.make(ae,se),le=se.length>0?zz.make(se):void 0,ue=fB.make(),de=Tz.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?xB.make(e.metas):void 0,pe=[b,x,S,C,ce,ee,ue,de,w];le&&pe.push(le),e.tables.gsub&&pe.push(vB.make(e.tables.gsub)),fe&&pe.push(fe);for(var me=TB(pe),he=CB(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 kB={make:TB,fontToTable:OB,computeCheckSum:CB};function AB(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 jB(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 MB(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 NB(e,t){this.font=e,this.tableName=t}NB.prototype={searchTag:AB,binSearch:jB,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=AB(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=AB(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=MB(e.ranges,t);return n?n.classId:0}},getCoverageIndex:function(e,t){switch(e.format){case 1:var n=jB(e.glyphs,t);return n>=0?n:-1;case 2:var r=MB(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 PB(e){NB.call(this,e,`gpos`)}PB.prototype=NB.prototype,PB.prototype.init=function(){var e=this.getDefaultScriptName();this.defaultKerningTables=this.getKerningTables(e)},PB.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},PB.prototype.getKerningTables=function(e,t){if(this.font.tables.gpos)return this.getLookupTables(e,t,`kern`,2)};function FB(e){NB.call(this,e,`gsub`)}function IB(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 LB(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}FB.prototype=NB.prototype,FB.prototype.createDefaultTable=function(){return{version:1,scripts:[{tag:`DFLT`,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}}],features:[],lookups:[]}},FB.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},FB.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},FB.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},FB.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},FB.prototype.addSingle=function(e,t,n,r){var i=this.getLookupTables(n,r,e,1,!0)[0],a=LB(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},FB.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=LB(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},FB.prototype.addAlternate=function(e,t,n,r){var i=this.getLookupTables(n,r,e,3,!0)[0],a=LB(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},FB.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(IB(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])},FB.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)}},FB.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 RB(){return typeof window<`u`}function zB(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 BB(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 VB(e,t){if(!e)throw t}function HB(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 UB(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=HB(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=HB(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 WB(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 GB(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 KB(e){var t=new FL;if(!e)return t;for(var n=GB(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 qB(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=WB(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=WB([s],c)[0],c.dx=o.x-s.x,c.dy=o.y-s.y,a=WB(i.points,c)}t.points=t.points.concat(a)}}return KB(t.points)}function JB(e,t,n,r){for(var i=new UR.GlyphSet(r),a=0;a<n.length-1;a+=1){var o=n[a];o===n[a+1]?i.push(a,UR.glyphLoader(r,a)):i.push(a,UR.ttfGlyphLoader(r,a,UB,e,t+o,qB))}return i}function YB(e,t,n,r){var i=new UR.GlyphSet(r);return r._push=function(a){var o=n[a];o===n[a+1]?i.push(a,UR.glyphLoader(r,a)):i.push(a,UR.ttfGlyphLoader(r,a,UB,e,t+o,qB))},i}function XB(e,t,n,r,i){return i.lowMemory?YB(e,t,n,r):JB(e,t,n,r)}var ZB={getPath:KB,parse:XB},QB,$B,eV,tV;function nV(e){this.font=e,this.getCommands=function(e){return ZB.getPath(e).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function rV(e){return e}function iV(e){return Math.sign(e)*Math.round(Math.abs(e))}function aV(e){return Math.sign(e)*Math.round(Math.abs(e*2))/2}function oV(e){return Math.sign(e)*(Math.round(Math.abs(e)+.5)-.5)}function sV(e){return Math.sign(e)*Math.ceil(Math.abs(e))}function cV(e){return Math.sign(e)*Math.floor(Math.abs(e))}var lV=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},uV={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){uV.setRelative(e,e,(c+l)/2,r,!0);return}uV.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}},dV={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){dV.setRelative(e,e,(c+l)/2,r,!0);return}dV.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(uV),Object.freeze(dV);function fV(e,t){this.x=e,this.y=t,this.axis=void 0,this.slope=t/e,this.normalSlope=-e/t,Object.freeze(this)}fV.prototype.distance=function(e,t,n,r){return this.x*uV.distance(e,t,n,r)+this.y*dV.distance(e,t,n,r)},fV.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)},fV.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},fV.prototype.touch=function(e){e.xTouched=!0,e.yTouched=!0};function pV(e,t){var n=Math.sqrt(e*e+t*t);return e/=n,t/=n,e===1&&t===0?uV:e===0&&t===1?dV:new fV(e,t)}function mV(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)}mV.prototype.nextTouched=function(e){for(var t=this.nextPointOnContour;!e.touched(t)&&t!==this;)t=t.nextPointOnContour;return t},mV.prototype.prevTouched=function(e){for(var t=this.prevPointOnContour;!e.touched(t)&&t!==this;)t=t.prevPointOnContour;return t};var hV=Object.freeze(new mV(0,0)),gV={cvCutIn:17/16,deltaBase:9,deltaShift:.125,loop:1,minDis:1,autoFlip:!0};function _V(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=uV,this.round=iV}}nV.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){_V.prototype=gV,i=this._fpgmState=new _V(`fpgm`,n.tables.fpgm),i.funcs=[],i.font=n,exports.DEBUG&&(console.log(`---EXEC FPGM---`),i.step=-1);try{$B(i)}catch(e){console.log(`Hinting error in FPGM:`+e),this._errorState=3;return}}_V.prototype=i,r=this._prepState=new _V(`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{$B(r)}catch(e){this._errorState<2&&console.log(`Hinting error in PREP:`+e),this._errorState=2}}if(!(this._errorState>1))try{return eV(e,r)}catch(e){this._errorState<1&&(console.log(`Hinting error:`+e),console.log(`Note: further hinting errors are silenced`)),this._errorState=1;return}}},eV=function(e,t){var n=t.ppem/t.font.unitsPerEm,r=n,i=e.components,a,o,s;if(_V.prototype=t,!i)s=new _V(`glyf`,e.instructions),exports.DEBUG&&(console.log(`---EXEC GLYPH---`),s.step=-1),tV(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 _V(`glyf`,d.instructions),exports.DEBUG&&(console.log(`---EXEC COMP `+l+`---`),s.step=-1),tV(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 _V(`glyf`,e.instructions),s.gZone=s.z0=s.z1=s.z2=o,s.contours=a,o.push(new mV(0,0),new mV(Math.round(e.advanceWidth*n),0)),exports.DEBUG&&(console.log(`---EXEC COMPOSITE---`),s.step=-1),$B(s),o.length-=2)}return o},tV=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 mV(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 mV(0,0),new mV(Math.round(e.advanceWidth*n),0)),$B(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)}}},$B=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=QB[t[e.ip]],!r)throw Error(`unknown instruction: 0x`+Number(t[e.ip]).toString(16));r(e)}}};function vV(e){for(var t=e.tZone=Array(e.gZone.length),n=0;n<t.length;n++)t[n]=new mV(0,0)}function yV(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 bV(e,t){exports.DEBUG&&console.log(t.step,`SVTCA[`+e.axis+`]`),t.fv=t.pv=t.dpv=e}function xV(e,t){exports.DEBUG&&console.log(t.step,`SPVTCA[`+e.axis+`]`),t.pv=t.dpv=e}function SV(e,t){exports.DEBUG&&console.log(t.step,`SFVTCA[`+e.axis+`]`),t.fv=e}function CV(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=pV(s,c)}function wV(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=pV(s,c)}function TV(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SPVFS[]`,n,r),e.pv=e.dpv=pV(r,n)}function EV(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SPVFS[]`,n,r),e.fv=pV(r,n)}function DV(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 OV(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 kV(e){e.fv=e.pv,exports.DEBUG&&console.log(e.step,`SFVTPV[]`)}function AV(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 jV(e){e.rp0=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP0[]`,e.rp0)}function MV(e){e.rp1=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP1[]`,e.rp1)}function NV(e){e.rp2=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP2[]`,e.rp2)}function PV(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP0[]`,t),e.zp0=t,t){case 0:e.tZone||vV(e),e.z0=e.tZone;break;case 1:e.z0=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function FV(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP1[]`,t),e.zp1=t,t){case 0:e.tZone||vV(e),e.z1=e.tZone;break;case 1:e.z1=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function IV(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP2[]`,t),e.zp2=t,t){case 0:e.tZone||vV(e),e.z2=e.tZone;break;case 1:e.z2=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function LV(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||vV(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 RV(e){e.loop=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SLOOP[]`,e.loop)}function zV(e){exports.DEBUG&&console.log(e.step,`RTG[]`),e.round=iV}function BV(e){exports.DEBUG&&console.log(e.step,`RTHG[]`),e.round=oV}function VV(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SMD[]`,t),e.minDis=t/64}function HV(e){exports.DEBUG&&console.log(e.step,`ELSE[]`),yV(e,!1)}function UV(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`JMPR[]`,t),e.ip+=t-1}function WV(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCVTCI[]`,t),e.cvCutIn=t/64}function GV(e){var t=e.stack;exports.DEBUG&&console.log(e.step,`DUP[]`),t.push(t[t.length-1])}function KV(e){exports.DEBUG&&console.log(e.step,`POP[]`),e.stack.pop()}function qV(e){exports.DEBUG&&console.log(e.step,`CLEAR[]`),e.stack.length=0}function JV(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 YV(e){var t=e.stack;exports.DEBUG&&console.log(e.step,`DEPTH[]`),t.push(t.length)}function XV(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++)$B(e),exports.DEBUG&&console.log(++e.step,o+1<r?`next loopcall`:`done loopcall`,o);e.ip=i,e.prog=a}function ZV(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],$B(e),e.ip=n,e.prog=r,exports.DEBUG&&console.log(++e.step,`returning from`,t)}function QV(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`CINDEX[]`,n),t.push(t[t.length-n])}function $V(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 eH(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 tH(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,hV);e&&(o=t.round(o)),i.setRelative(r,hV,o,a),i.touch(r),t.rp0=t.rp1=n}function nH(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 rH(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 iH(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 aH(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 oH(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 sH(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 cH(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 lH(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 uH(e){exports.DEBUG&&console.log(e.step,`RTDG[]`),e.round=aV}function dH(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,hV);e&&(Math.abs(l-c)<t.cvCutIn&&(l=c),l=t.round(l)),o.setRelative(a,hV,l,s),t.zp0===0&&(a.xo=a.x,a.yo=a.y),o.touch(a),t.rp0=t.rp1=i}function fH(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 pH(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 mH(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 hH(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 gH(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 _H(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`RCVT`,n),t.push(e.cvt[n]*64)}function vH(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,hV,e,!1)*64)}function yH(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 bH(e){exports.DEBUG&&console.log(e.step,`MPPEM[]`),e.stack.push(e.ppem)}function xH(e){exports.DEBUG&&console.log(e.step,`FLIPON[]`),e.autoFlip=!0}function SH(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 CH(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 wH(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 TH(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 EH(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 DH(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 OH(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 kH(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 AH(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`IF[]`,t),t||(yV(e,!0),exports.DEBUG&&console.log(e.step,`EIF[]`))}function jH(e){exports.DEBUG&&console.log(e.step,`EIF[]`)}function MH(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 NH(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 PH(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`NOT[]`,n),t.push(+!n)}function FH(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 IH(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SDB[]`,t),e.deltaBase=t}function LH(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SDS[]`,t),e.deltaShift=.5**t}function RH(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 zH(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 BH(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 VH(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 HH(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`ABS[]`,n),t.push(Math.abs(n))}function UH(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`NEG[]`,n),t.push(-n)}function WH(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`FLOOR[]`,n),t.push(Math.floor(n/64)*64)}function GH(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`CEILING[]`,n),t.push(Math.ceil(n/64)*64)}function KH(e,t){var n=t.stack,r=n.pop();exports.DEBUG&&console.log(t.step,`ROUND[]`),n.push(t.round(r/64)*64)}function qH(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 JH(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 YH(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SROUND[]`,t),e.round=lV;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 XH(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`S45ROUND[]`,t),e.round=lV;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 ZH(e){exports.DEBUG&&console.log(e.step,`ROFF[]`),e.round=rV}function QH(e){exports.DEBUG&&console.log(e.step,`RUTG[]`),e.round=sV}function $H(e){exports.DEBUG&&console.log(e.step,`RDTG[]`),e.round=cV}function eU(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCANCTRL[]`,t)}function tU(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=pV(s,c)}function nU(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 rU(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 iU(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 aU(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 oU(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCANTYPE[]`,t)}function sU(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 cU(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 lU(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)}QB=[bV.bind(void 0,dV),bV.bind(void 0,uV),xV.bind(void 0,dV),xV.bind(void 0,uV),SV.bind(void 0,dV),SV.bind(void 0,uV),CV.bind(void 0,0),CV.bind(void 0,1),wV.bind(void 0,0),wV.bind(void 0,1),TV,EV,DV,OV,kV,AV,jV,MV,NV,PV,FV,IV,LV,RV,zV,BV,VV,HV,UV,WV,void 0,void 0,GV,KV,qV,JV,YV,QV,$V,void 0,void 0,void 0,XV,ZV,eH,void 0,tH.bind(void 0,0),tH.bind(void 0,1),nH.bind(void 0,dV),nH.bind(void 0,uV),rH.bind(void 0,0),rH.bind(void 0,1),iH.bind(void 0,0),iH.bind(void 0,1),aH.bind(void 0,0),aH.bind(void 0,1),oH,sH,cH.bind(void 0,0),cH.bind(void 0,1),lH,uH,dH.bind(void 0,0),dH.bind(void 0,1),fH,pH,mH,hH,gH,_H,vH.bind(void 0,0),vH.bind(void 0,1),void 0,yH.bind(void 0,0),yH.bind(void 0,1),bH,void 0,xH,void 0,void 0,SH,CH,wH,TH,EH,DH,OH,kH,AH,jH,MH,NH,PH,FH.bind(void 0,1),IH,LH,RH,zH,BH,VH,HH,UH,WH,GH,KH.bind(void 0,0),KH.bind(void 0,1),KH.bind(void 0,2),KH.bind(void 0,3),void 0,void 0,void 0,void 0,qH,FH.bind(void 0,2),FH.bind(void 0,3),JH.bind(void 0,1),JH.bind(void 0,2),JH.bind(void 0,3),YH,XH,void 0,void 0,ZH,void 0,QH,$H,KV,KV,void 0,void 0,void 0,void 0,void 0,eU,tU.bind(void 0,0),tU.bind(void 0,1),nU,void 0,rU,iU,aU,oU,sU,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,cU.bind(void 0,1),cU.bind(void 0,2),cU.bind(void 0,3),cU.bind(void 0,4),cU.bind(void 0,5),cU.bind(void 0,6),cU.bind(void 0,7),cU.bind(void 0,8),lU.bind(void 0,1),lU.bind(void 0,2),lU.bind(void 0,3),lU.bind(void 0,4),lU.bind(void 0,5),lU.bind(void 0,6),lU.bind(void 0,7),lU.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 uU(e){this.char=e,this.state={},this.activeState=null}function dU(e,t,n){this.contextName=n,this.startIndex=e,this.endOffset=t}function fU(e,t,n){this.contextName=e,this.openRange=null,this.ranges=[],this.checkStart=t,this.checkEnd=n}function pU(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 mU(e){this.eventId=e,this.subscribers=[]}function hU(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 mU(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 gU(e){this.tokens=[],this.registeredContexts={},this.contextCheckers=[],this.events={},this.registeredModifiers=[],hU.call(this,e)}uU.prototype.setState=function(e,t){return this.state[e]=t,this.activeState={key:e,value:this.state[e]},this.activeState},uU.prototype.getState=function(e){return this.state[e]||null},gU.prototype.inboundIndex=function(e){return e>=0&&e<this.tokens.length},gU.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)})])},gU.prototype.replaceRange=function(e,t,n,r){t=t===null?this.tokens.length:t;var i=n.every(function(e){return e instanceof uU});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.`}},gU.prototype.replaceToken=function(e,t,n){if(!isNaN(e)&&this.inboundIndex(e)&&t instanceof uU){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.`}},gU.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},gU.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.`}},gU.prototype.insertToken=function(e,t,n){return e.every(function(e){return e instanceof uU})?(this.tokens.splice.apply(this.tokens,[t,0].concat(e)),n||this.dispatch(`insertToken`,[e,t]),e):{FAIL:`insertToken: invalid token(s).`}},gU.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)},mU.prototype.subscribe=function(e){return typeof e==`function`?this.subscribers.push(e)-1:{FAIL:`invalid '`+this.eventId+`' event handler`}},mU.prototype.unsubscribe=function(e){this.subscribers.splice(e,1)},pU.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)},pU.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}},gU.prototype.rangeToText=function(e){if(e instanceof dU)return this.getRangeTokens(e).map(function(e){return e.char}).join(``)},gU.prototype.getText=function(){return this.tokens.map(function(e){return e.char}).join(``)},gU.prototype.getContext=function(e){return this.registeredContexts[e]||null},gU.prototype.on=function(e,t){var n=this.events[e];return n?n.subscribe(t):null},gU.prototype.dispatch=function(e,t){var n=this,r=this.events[e];r instanceof mU&&r.subscribers.forEach(function(e){e.apply(n,t||[])})},gU.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 fU(e,t,n);return this.registeredContexts[e]=r,this.contextCheckers.push(r),r},gU.prototype.getRangeTokens=function(e){var t=e.startIndex+e.endOffset;return[].concat(this.tokens.slice(e.startIndex,t))},gU.prototype.getContextRanges=function(e){var t=this.getContext(e);return t?t.ranges:{FAIL:`context checker '`+e+`' is not registered.`}},gU.prototype.resetContextsRanges=function(){var e=this.registeredContexts;for(var t in e)if(e.hasOwnProperty(t)){var n=e[t];n.ranges=[]}},gU.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 pU(e,t);this.runContextCheck(n)}this.dispatch(`updateContextsRanges`,[this.registeredContexts])},gU.prototype.setEndOffset=function(e,t){var n=this.getContext(t).openRange.startIndex,r=new dU(n,e,t),i=this.getContext(t).ranges;return r.rangeId=t+`.`+i.length,i.push(r),this.getContext(t).openRange=null,r},gU.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 dU(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])}})},gU.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 pU(t,n);this.dispatch(`next`,[i]),this.runContextCheck(i);var a=new uU(r);this.tokens.push(a),this.dispatch(`newToken`,[a,i])}return this.dispatch(`end`,[this.tokens]),this.tokens};function _U(e){return/[\u0600-\u065F\u066A-\u06D2\u06FA-\u06FF]/.test(e)}function vU(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 yU(e){return/[\u0600-\u0605\u060C-\u060E\u0610-\u061B\u061E\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED]/.test(e)}function bU(e){return/[A-z]/.test(e)}function xU(e){return/\s/.test(e)}function SU(e){this.font=e,this.features={}}function CU(e){this.id=e.id,this.tag=e.tag,this.substitution=e.substitution}function wU(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 TU(e,t){return wU(e,t.coverage)===-1?null:e+t.deltaGlyphId}function EU(e,t){var n=wU(e,t.coverage);return n===-1?null:t.substitute[n]}function DU(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=wU(a,i);o!==-1&&n.push(o)}return n.length===e.length?n:-1}function OU(e,t){var n=t.inputCoverage.length+t.lookaheadCoverage.length+t.backtrackCoverage.length;if(e.context.length<n)return[];var r=DU(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&&yU(a[0].char);)a.shift();var o=new pU(a,0),s=DU(t.lookaheadCoverage,o),c=[].concat(e.backtrack);for(c.reverse();c.length&&yU(c[0].char);)c.shift();if(c.length<t.backtrackCoverage.length)return[];var l=new pU(c,0),u=DU(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 kU(e,t){var n=e.current,r=wU(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 AU(e,t){var n=wU(e,t.coverage);return n===-1?null:t.sequences[n]}SU.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[]},SU.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()},SU.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},SU.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},SU.prototype.getSubstitutionType=function(e,t){return e.lookupType.toString()+t.substFormat.toString()},SU.prototype.getLookupMethod=function(e,t){var n=this;switch(this.getSubstitutionType(e,t)){case`11`:return function(e){return TU.apply(n,[e,t])};case`12`:return function(e){return EU.apply(n,[e,t])};case`63`:return function(e){return OU.apply(n,[e,t])};case`41`:return function(e){return kU.apply(n,[e,t])};case`21`:return function(e){return AU.apply(n,[e,t])};default:throw Error(`lookupType: `+e.lookupType+` - substFormat: `+t.substFormat+` is not yet supported`)}},SU.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 CU({id:11,tag:e.tag,substitution:p}));break;case`12`:p=f(t.current),p&&a.splice(n,1,new CU({id:12,tag:e.tag,substitution:p}));break;case`63`:p=f(t),Array.isArray(p)&&p.length&&a.splice(n,1,new CU({id:63,tag:e.tag,substitution:p}));break;case`41`:p=f(t),p&&a.splice(n,1,new CU({id:41,tag:e.tag,substitution:p}));break;case`21`:p=f(t.current),p&&a.splice(n,1,new CU({id:21,tag:e.tag,substitution:p}));break}t=new pU(a,n),!(Array.isArray(p)&&!p.length)&&(p=null)}return a.length?a:null},SU.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},SU.prototype.getLookupSubtables=function(e){return e.subtables||null},SU.prototype.getLookupByIndex=function(e){return this.font.tables.gsub.lookups[e]||null},SU.prototype.getFeatureLookups=function(e){return e.lookupListIndexes.map(this.getLookupByIndex.bind(this))},SU.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 jU(e){var t=e.current,n=e.get(-1);return n===null&&_U(t)||!_U(n)&&_U(t)}function MU(e){var t=e.get(1);return t===null||!_U(t)}var NU={startCheck:jU,endCheck:MU};function PU(e){var t=e.current,n=e.get(-1);return(_U(t)||yU(t))&&!_U(n)}function FU(e){var t=e.get(1);switch(!0){case t===null:return!0;case!_U(t)&&!yU(t):var n=xU(t);if(!n)return!0;if(n){var r=!1;if(r=e.lookahead.some(function(e){return _U(e)||yU(e)}),!r)return!0}break;default:return!1}}var IU={startCheck:PU,endCheck:FU};function LU(e,t,n){t[n].setState(e.tag,e.substitution)}function RU(e,t,n){t[n].setState(e.tag,e.substitution)}function zU(e,t,n){e.substitution.forEach(function(r,i){t[n+i].setState(e.tag,r)})}function BU(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 VU={11:LU,12:RU,63:zU,41:BU};function HU(e,t,n){e instanceof CU&&VU[e.id]&&VU[e.id](e,t,n)}function UU(e){for(var t=[].concat(e.backtrack),n=t.length-1;n>=0;n--){var r=t[n],i=vU(r),a=yU(r);if(!i&&!a)return!0;if(i)return!1}return!1}function WU(e){if(vU(e.current))return!1;for(var t=0;t<e.lookahead.length;t++){var n=e.lookahead[t];if(!yU(n))return!0}return!1}function GU(e){var t=this,n=`arab`,r=this.featuresTags[n],i=this.tokenizer.getRangeTokens(e);if(i.length!==1){var a=new pU(i.map(function(e){return e.getState(`glyphIndex`)}),0),o=new pU(i.map(function(e){return e.char}),0);i.forEach(function(e,s){if(!yU(e.char)){a.setCurrentIndex(s),o.setCurrentIndex(s);var c=0;UU(o)&&(c|=1),WU(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 CU&&(HU(e,i,t),a.context[t]=e.substitution)})}}})}}function KU(e,t){return new pU(e.map(function(e){return e.activeState.value}),t||0)}function qU(e){var t=this,n=`arab`,r=this.tokenizer.getRangeTokens(e),i=KU(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 HU(e,r,a)}),i=KU(r))})}function JU(e){var t=e.current,n=e.get(-1);return n===null&&bU(t)||!bU(n)&&bU(t)}function YU(e){var t=e.get(1);return t===null||!bU(t)}var XU={startCheck:JU,endCheck:YU};function ZU(e,t){return new pU(e.map(function(e){return e.activeState.value}),t||0)}function QU(e){var t=this,n=`latn`,r=this.tokenizer.getRangeTokens(e),i=ZU(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 HU(e,r,a)}),i=ZU(r))})}function $U(e){this.baseDir=e||`ltr`,this.tokenizer=new gU,this.featuresTags={}}$U.prototype.setText=function(e){this.text=e},$U.prototype.contextChecks={latinWordCheck:XU,arabicWordCheck:NU,arabicSentenceCheck:IU};function eW(e){var t=this.contextChecks[e+`Check`];return this.tokenizer.registerContextChecker(e,t.startCheck,t.endCheck)}function tW(){return eW.call(this,`latinWord`),eW.call(this,`arabicWord`),eW.call(this,`arabicSentence`),this.tokenizer.tokenize(this.text)}function nW(){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())})}$U.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},$U.prototype.applyFeatures=function(e,t){if(!e)throw Error(`No valid font was provided to apply features`);this.query||=new SU(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)}},$U.prototype.registerModifier=function(e,t,n){this.tokenizer.registerModifier(e,t,n)};function rW(){if(this.tokenizer.registeredModifiers.indexOf(`glyphIndex`)===-1)throw Error(`glyphIndex modifier is required to apply arabic presentation features.`)}function iW(){var e=this;this.featuresTags.hasOwnProperty(`arab`)&&(rW.call(this),this.tokenizer.getContextRanges(`arabicWord`).forEach(function(t){GU.call(e,t)}))}function aW(){var e=this,t=`arab`;this.featuresTags.hasOwnProperty(t)&&this.featuresTags[t].indexOf(`rlig`)!==-1&&(rW.call(this),this.tokenizer.getContextRanges(`arabicWord`).forEach(function(t){qU.call(e,t)}))}function oW(){var e=this,t=`latn`;this.featuresTags.hasOwnProperty(t)&&this.featuresTags[t].indexOf(`liga`)!==-1&&(rW.call(this),this.tokenizer.getContextRanges(`latinWord`).forEach(function(t){QU.call(e,t)}))}$U.prototype.checkContextReady=function(e){return!!this.tokenizer.getContext(e)},$U.prototype.applyFeaturesToContexts=function(){this.checkContextReady(`arabicWord`)&&(iW.call(this),aW.call(this)),this.checkContextReady(`latinWord`)&&oW.call(this),this.checkContextReady(`arabicSentence`)&&nW.call(this)},$U.prototype.processText=function(e){(!this.text||this.text!==e)&&(this.setText(e),tW.call(this),this.applyFeaturesToContexts())},$U.prototype.getBidiText=function(e){return this.processText(e),this.tokenizer.getText()},$U.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 sW(e){e||={},e.tables=e.tables||{},e.empty||(VB(e.familyName,`When creating a new Font object, familyName is required.`),VB(e.styleName,`When creating a new Font object, styleName is required.`),VB(e.unitsPerEm,`When creating a new Font object, unitsPerEm is required.`),VB(e.ascender,`When creating a new Font object, ascender is required.`),VB(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 UR.GlyphSet(this,e.glyphs||[]),this.encoding=new DR(this),this.position=new PB(this),this.substitution=new FB(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 nV(this)}})}sW.prototype.hasChar=function(e){return this.encoding.charToGlyphIndex(e)!==null},sW.prototype.charToGlyphIndex=function(e){return this.encoding.charToGlyphIndex(e)},sW.prototype.charToGlyph=function(e){var t=this.charToGlyphIndex(e),n=this.glyphs.get(t);return n||=this.glyphs.get(0),n},sW.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})},sW.prototype.stringToGlyphs=function(e,t){var n=this,r=new $U;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},sW.prototype.nameToGlyphIndex=function(e){return this.glyphNames.nameToGlyphIndex(e)},sW.prototype.nameToGlyph=function(e){var t=this.nameToGlyphIndex(e),n=this.glyphs.get(t);return n||=this.glyphs.get(0),n},sW.prototype.glyphIndexToName=function(e){return this.glyphNames.glyphIndexToName?this.glyphNames.glyphIndexToName(e):``},sW.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},sW.prototype.defaultRenderOptions={kerning:!0,features:[{script:`arab`,tags:[`init`,`medi`,`fina`,`rlig`]},{script:`latn`,tags:[`liga`,`rlig`]}]},sW.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},sW.prototype.getPath=function(e,t,n,r,i){var a=new FL;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},sW.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},sW.prototype.getAdvanceWidth=function(e,t,n){return this.forEachGlyph(e,0,0,t,n,function(){})},sW.prototype.draw=function(e,t,n,r,i,a){this.getPath(t,n,r,i,a).draw(e)},sW.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)})},sW.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)})},sW.prototype.getEnglishName=function(e){var t=this.names[e];if(t)return t.en},sW.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},sW.prototype.toTables=function(){return kB.fontToTable(this)},sW.prototype.toBuffer=function(){return console.warn(`Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.`),this.toArrayBuffer()},sW.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},sW.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(RB())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=sL(),l=BB(r);c.writeFileSync(e,l)}},sW.prototype.fsSelectionValues={ITALIC:1,UNDERSCORE:2,NEGATIVE:4,OUTLINED:8,STRIKEOUT:16,BOLD:32,REGULAR:64,USER_TYPO_METRICS:128,WWS:256,OBLIQUE:512},sW.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},sW.prototype.usWeightClasses={THIN:100,EXTRA_LIGHT:200,LIGHT:300,NORMAL:400,MEDIUM:500,SEMI_BOLD:600,BOLD:700,EXTRA_BOLD:800,BLACK:900};function cW(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 lW(e,t,n){var r=cW(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 uW(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 dW(e,t,n,r){for(var i=cW(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 fW(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 pW(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(lW(r,e.axes[r],t));for(var i=0;i<e.instances.length;i++)n.fields=n.fields.concat(dW(i,e.instances[i],e.axes,t));return n}function mW(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(uW(e,t+a+d*s,n));for(var f=[],p=t+a+o*s,m=0;m<c;m++)f.push(fW(e,p+m*l,u,n));return{axes:u,instances:f}}var hW={make:pW,parse:mW},gW=function(){return{coverage:this.parsePointer(X.coverage),attachPoints:this.parseList(X.pointer(X.uShortList))}},_W=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()}},vW=function(){return this.parseList(X.pointer(_W))},yW=function(){return{coverage:this.parsePointer(X.coverage),ligGlyphs:this.parseList(X.pointer(vW))}},bW=function(){return this.parseUShort(),this.parseList(X.pointer(X.coverage))};function xW(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(gW),ligCaretList:n.parsePointer(yW),markAttachClassDef:n.parsePointer(X.classDef)};return r>=1.2&&(i.markGlyphSets=n.parsePointer(bW)),i}var SW={parse:xW},CW=Array(10);CW[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.`)},CW[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)}}))}}},CW[3]=function(){return{error:`GPOS Lookup 3 not supported`}},CW[4]=function(){return{error:`GPOS Lookup 4 not supported`}},CW[5]=function(){return{error:`GPOS Lookup 5 not supported`}},CW[6]=function(){return{error:`GPOS Lookup 6 not supported`}},CW[7]=function(){return{error:`GPOS Lookup 7 not supported`}},CW[8]=function(){return{error:`GPOS Lookup 8 not supported`}},CW[9]=function(){return{error:`GPOS Lookup 9 not supported`}};function wW(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(CW)}:{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(CW),variations:n.parseFeatureVariationsList()}}var TW=Array(10);function EW(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,TW)}])}var DW={parse:wW,make:EW};function OW(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 kW(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 AW(e,t){var n=new Z.Parser(e,t),r=n.parseUShort();if(r===0)return OW(n);if(r===1)return kW(n);throw Error(`Unsupported kern table version (`+r+`).`)}var jW={parse:AW};function MW(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 NW={parse:MW};function PW(e,t){sL().readFile(e,function(e,n){if(e)return t(e.message);t(null,zB(n))})}function FW(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 IW(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 LW(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 RW(e,t){if(t.compression===`WOFF`){var n=new Uint8Array(e.buffer,t.offset+2,t.compressedLength-2),r=new Uint8Array(t.length);if(ML(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 zW(e,t){t??={};var n,r,i=new sW({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=IW(a,o);else if(c===`OTTO`)i.outlinesFormat=`cff`,o=Z.getUShort(a,4),s=IW(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=LW(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=RW(a,C),i.tables.cmap=SR.parse(w.data,w.offset),i.encoding=new OR(i.tables.cmap);break;case`cvt `:w=RW(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=RW(a,C),x=new Z.Parser(w.data,w.offset),i.tables.fpgm=x.parseByteList(C.length);break;case`head`:w=RW(a,C),i.tables.head=Oz.parse(w.data,w.offset),i.unitsPerEm=i.tables.head.unitsPerEm,n=i.tables.head.indexToLocFormat;break;case`hhea`:w=RW(a,C),i.tables.hhea=jz.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=RW(a,C),r=zz.parse(w.data,w.offset);break;case`maxp`:w=RW(a,C),i.tables.maxp=Hz.parse(w.data,w.offset),i.numGlyphs=i.tables.maxp.numGlyphs;break;case`name`:y=C;break;case`OS/2`:w=RW(a,C),i.tables.os2=lB.parse(w.data,w.offset);break;case`post`:w=RW(a,C),i.tables.post=fB.parse(w.data,w.offset),i.glyphNames=new AR(i.tables.post);break;case`prep`:w=RW(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=RW(a,y);if(i.tables.name=iB.parse(ee.data,ee.offset,r),i.names=i.tables.name,f&&v){var te=n===0,ne=RW(a,v),re=NW.parse(ne.data,ne.offset,i.numGlyphs,te),ie=RW(a,f);i.glyphs=ZB.parse(ie.data,ie.offset,re,i,t)}else if(u){var ae=RW(a,u);Tz.parse(ae.data,ae.offset,i,t)}else throw Error(`Font doesn't contain TrueType or CFF outlines.`);var oe=RW(a,g);if(Iz.parse(i,oe.data,oe.offset,i.numberOfHMetrics,i.numGlyphs,i.glyphs,t),NR(i,t),_){var se=RW(a,_);i.kerningPairs=jW.parse(se.data,se.offset)}else i.kerningPairs={};if(p){var ce=RW(a,p);i.tables.gdef=SW.parse(ce.data,ce.offset)}if(m){var le=RW(a,m);i.tables.gpos=DW.parse(le.data,le.offset),i.position.init()}if(h){var ue=RW(a,h);i.tables.gsub=vB.parse(ue.data,ue.offset)}if(d){var de=RW(a,d);i.tables.fvar=hW.parse(de.data,de.offset,i.names)}if(b){var fe=RW(a,b);i.tables.meta=xB.parse(fe.data,fe.offset),i.metas=i.tables.meta}return i}function BW(e,t,n){n??={};var r=typeof window>`u`&&!n.isUrl?PW:FW;return new Promise(function(i,a){r(e,function(e,r){if(e){if(t)return t(e);a(e)}var o;try{o=zW(r,n)}catch(e){if(t)return t(e,null);a(e)}if(t)return t(null,o);i(o)})})}function VW(e,t){return zW(zB(sL().readFileSync(e)),t)}var HW=Object.freeze({__proto__:null,Font:sW,Glyph:LR,Path:FL,BoundingBox:PL,_parse:Z,parse:zW,load:BW,loadSync:VW}),UW=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 kk(this.sketches)}get innerSketches(){return this.sketches.slice(1)}get wires(){return eG(this)}face(){return $W(this)}extrude(e,t={}){return tG(this,e,t)}revolve(e,t={}){return nG(this,e,t)}loftWith(e,t){return rG(this,e,t)}};function WW(e){let t={};e.defaultOrigin&&(t.defaultOrigin=e.defaultOrigin),e.defaultDirection&&(t.defaultDirection=e.defaultDirection);let n=new iG(e.wire,t);return e.baseFace&&(n.baseFace=e.baseFace),n}function GW(e){return new UW(e.map(WW))}function KW(e){let t;return t=e.baseFace?Kk(e.baseFace,e.wire):j(Wk(e.wire)),t}function qW(e){return aE(j(PD(e.wire.wrapped)))}function JW(e,t,{origin:n}={}){let r=j(Wk(e.wire)),i=j(qj(r,n?eD(n):e.defaultOrigin,t?eD(t):[0,0,1]));return r.delete(),e.delete(),i}function YW(e,t,{extrusionDirection:n,extrusionProfile:r,twistAngle:i,origin:a}={}){let o=oD(pD(n?eD(n):e.defaultDirection),t),s=a?eD(a):e.defaultOrigin;if(r&&!i){let t=j(Bj(e.wire,[...s],[...o],r));return e.delete(),t}if(i){let t=j(Vj(e.wire,i,[...s],[...o],r));return e.delete(),t}let c=j(Kj(j(Wk(e.wire)),[...o]));return e.delete(),c}function XW(e,t,n={}){let r=YO(e.wire),i=pD(oD(QO(e.wire,1e-9),-1)),a=e.defaultDirection,o=oD(lD(i,a),-1),s=t(xD([...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(Rj(c.wire,e.wire,l));return e.delete(),u}function ZW(e,t,n={},r=!1){let i=Array.isArray(t)?[e,...t]:[e,t],a=j(Yj(i.map(e=>e.wire),n,r));return i.forEach(e=>{e.delete()}),a}var QW=(e,t)=>{let n=j(t(kk(e))),r=e.slice(1).map(e=>j(t(e)));if(r.length===0)return n;try{return j(rA(n,r,{unsafe:!0}))}finally{n.delete();for(let e of r)e.delete()}};function $W(e){return Jk(e.outerSketch.face(),e.innerSketches.map(e=>e.wire))}function eG(e){return TA(e.sketches.map(e=>e.wire))}function tG(e,t,{extrusionDirection:n,extrusionProfile:r,twistAngle:i,origin:a}={}){let o=oD(pD(n?eD(n):e.outerSketch.defaultDirection),t);return r&&!i?QW(e.sketches,t=>Bj(t.wire,a?eD(a):e.outerSketch.defaultOrigin,o,r)):i?QW(e.sketches,t=>Vj(t.wire,i,a?eD(a):e.outerSketch.defaultOrigin,o,r)):j(Kj($W(e),o))}function nG(e,t,{origin:n}={}){let r=n?eD(n):e.outerSketch.defaultOrigin,i=t?eD(t):[0,0,1];return j(qj($W(e),r,i))}function rG(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=Ok(t.sketches,r),a={};return n.ruled!==void 0&&(a.ruled=n.ruled),e.clone().loftWith(i.clone(),a,!0)}),i=oE(j(PD($W(e).wrapped)));return r.push(i,$W(t)),j(EA(r))}var iG=class e{wire;_defaultOrigin;_defaultDirection;_baseFace;constructor(e,{defaultOrigin:t=[0,0,0],defaultDirection:n=[0,0,1]}={}){this.wire=e,this._defaultOrigin=eD(t),this._defaultDirection=eD(n),this.baseFace=null}get baseFace(){return this._baseFace}set baseFace(e){this._baseFace&&this._baseFace.delete(),this._baseFace=e&&oE(j(PD(e.wrapped)))}delete(){this.wire.delete(),this.baseFace&&this.baseFace.delete()}clone(){let t=new e(aE(j(PD(this.wire.wrapped))),{defaultOrigin:this.defaultOrigin,defaultDirection:this.defaultDirection});return this.baseFace&&(t.baseFace=oE(j(PD(this.baseFace.wrapped)))),t}get defaultOrigin(){return this._defaultOrigin}set defaultOrigin(e){this._defaultOrigin=eD(e)}get defaultDirection(){return this._defaultDirection}set defaultDirection(e){this._defaultDirection=eD(e)}face(){return KW(this)}wires(){return qW(this)}faces(){return this.face()}revolve(e,t={}){return JW(this,e,t)}extrude(e,t={}){return YW(this,e,t)}sweepSketch(e,t={}){return XW(this,e,t)}loftWith(e,t={},n=!1){return ZW(this,e,t,n)}},aG=class{sketches;constructor(e){this.sketches=e}wires(){return TA(this.sketches.map(e=>e instanceof iG?e.wire:e.wires))}faces(){return TA(this.sketches.map(e=>e.face()))}extrude(e,t={}){return TA(this.sketches.map(n=>n.extrude(e,t)))}revolve(e,t){return TA(this.sketches.map(n=>n.revolve(e,t)))}},oG={};async function sG(e,t=`default`,n=!1){if(!n&&oG[t])return O(oG[t]);let r;if(typeof e==`string`){let t;try{t=await fetch(e)}catch(t){return k(oo(N.FONT_FETCH_FAILED,`Failed to fetch font from ${e}: ${t instanceof Error?t.message:String(t)}`,t))}if(!t.ok)return k(oo(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=HW.parse(r)}catch(e){return k(oo(N.FONT_PARSE_FAILED,`Failed to parse font data: ${e instanceof Error?e.message:String(e)}`,e))}let a=i;return oG[t]=a,oG.default||=a,O(a)}var cG=(e=`default`)=>oG[e],lG=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 mI,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 uG(e,{startX:t=0,startY:n=0,fontSize:r=16,fontFamily:i=`default`}={}){let a=cG(i);a||=cG(),a||M(`text`,`No fonts loaded. Call loadFont() before using text functions.`);let o=a.getPath(e,-t,-n,r);return rI(Array.from(lG(o.commands))).mirror([0,0])}var dG={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 fG(e){return typeof e==`string`&&e in dG}var pG=e=>e.IsNull()?[]:ME(W(e));function mG(e,t,n=!0){let r=U().projectEdges(e.wrapped,[...t.position],[...t.direction],[...t.xAxis]);return{visible:[...pG(r.visible.sharp),...pG(r.visible.smooth),...pG(r.visible.outline)],hidden:n?[...pG(r.hidden.sharp),...pG(r.hidden.smooth),...pG(r.hidden.outline)]:[]}}function hG(e=[0,0,0],t=[0,0,1],n){if(uD(t)<1e-12)return k(F(`CAMERA_ZERO_DIRECTION`,`Camera direction cannot be a zero-length vector`));let r;if(n)r=pD(n);else{let e=lD([0,0,1],t);uD(e)<1e-12&&(e=lD([0,1,0],t)),uD(e)<1e-12&&(e=lD([1,0,0],t)),r=pD(e)}let i=pD(lD(t,r));return O({position:e,direction:pD(t),xAxis:r,yAxis:i})}function gG(e,t){let n=pD(aD(e.position,t));return hG(e.position,n)}function _G(e){let t=dG[e];return hG([0,0,0],t.dir,t.xAxis)}function vG(e,t,n=!0){return mG(e,t,n)}var yG=(e,n=1e-7)=>{let r=new LF(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},bG=class extends pI{plane;constructor(e,t){super(),this.plane=e&&typeof e!=`string`?{...e}:j(wD(e??`XY`,t))}delete(){this.pendingCurves=[]}sagittaArcTo(e,t){return super.sagittaArcTo(e,-t)}buildWire(){try{var e=_T();this.pendingCurves.length||M(`Sketcher.buildWire`,`No lines to convert into a wire`);let t=e.u(new kT);return j(Uk(bF(this.pendingCurves,this.plane).map(e=>t.register(e))))}catch(t){e.e=t}finally{e.d()}}done(){return new iG(this.buildWire(),{defaultOrigin:this.plane.origin,defaultDirection:this.plane.zDir})}close(){return this._closeSketch(),this.done()}closeWithMirror(){SP(this.pointer,this.firstPoint)&&M(`Sketcher.closeWithMirror`,`Cannot close with a mirror when the sketch is already closed`);let e=this.buildWire(),t=ED(this.plane,this.pointer),n=lD(pD(aD(t,ED(this.plane,this.firstPoint))),this.plane.zDir),r=j(PD(e.wrapped));return new iG(j(Uk([e,aE(j(PD(U().mirror(r,eD(t),eD(n)))))])),{defaultOrigin:this.plane.origin,defaultDirection:this.plane.zDir})}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}},xG=class extends pI{face;_bounds;constructor(e,t=[0,0]){super(t),this.face=oE(j(PD(e.wrapped))),this._bounds=UD(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(Uk(this.pendingCurves.map(n=>iE(e.buildEdgeOnSurface(n.wrapped,t)))));return e.buildCurves3d(n.wrapped),n}done(){try{var e=_T();let t=e.u(new kT),n=this.buildWire(),r=new iG(n);if(tk(n)){let e=t.register(r.clone().face()),n=WD(e,.5,.5),i=oD(qD(e),-1);r.defaultOrigin=[n[0],n[1],n[2]],r.defaultDirection=[i[0],i[1],i[2]]}else{let e=YO(n),t=qD(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()}},SG=(e,t={})=>{let n=t.plane&&typeof t.plane!=`string`?{...t.plane}:j(wD(t.plane??`XY`,t.origin));return new iG(j(Uk([Pk(e,n.origin,n.zDir)])),{defaultOrigin:[...n.origin],defaultDirection:[...n.zDir]})},CG=(e=1,t=2,n={})=>{let r=n.plane&&typeof n.plane!=`string`?{...n.plane}:j(wD(n.plane??`XY`,n.origin)),i=r.xDir,a=e,o=t;return t>e&&(i=vD(i,r.zDir,90*QE),a=t,o=e),new iG(j(Uk([j(Fk(a,o,r.origin,r.zDir,i))])),{defaultOrigin:[...r.origin],defaultDirection:[...r.zDir]})},wG=(e,t,n={})=>(n.plane&&typeof n.plane!=`string`?new bG(n.plane):new bG(n.plane,n.origin)).movePointerTo([-e/2,-t/2]).hLine(e).vLine(t).hLine(-e).vLine(-t).done(),TG=(e,t,n=0,r={})=>{let i=xI(e,t,n).sketchOnPlane(r.plane,r.origin),a={};return i.defaultOrigin&&(a.defaultOrigin=i.defaultOrigin),i.defaultDirection&&(a.defaultDirection=i.defaultDirection),new iG(i.wire,a)},EG=(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 bG(r.plane):new bG(r.plane,r.origin),o=Ak(i),s=a.movePointerTo([Ok(o,0),Ok(o,1)]);return n?i.forEach(e=>s.sagittaArcTo([Ok(e,0),Ok(e,1)],n)):i.forEach(e=>s.lineTo([Ok(e,0),Ok(e,1)])),s.done()},DG=(e,t,n=0)=>{let r=Math.PI/t,i=Math.cos(r)*e;return n>=0?i:i+n},OG=(e,t)=>{let n=[...JD(e)],r=[...qD(e)];return new iG(j(ck(ZD(e),t)),{defaultOrigin:n,defaultDirection:r})},kG=(e,t={},{pointsCount:n=400,start:r=0,stop:i=1}={},a={})=>{try{var o=_T();let s=o.u(new kT),c=t.plane&&typeof t.plane!=`string`?{...t.plane}:j(wD(t.plane??`XY`,t.origin)),l=(i-r)/n,u=[...Array(n+1).keys()].map(t=>ED(c,e(r+t*l)));return new iG(j(Uk([s.register(j(zk(u,a)))])),{defaultOrigin:[...c.origin],defaultDirection:[...c.zDir]})}catch(e){o.e=e}finally{o.d()}},AG=(e,t,n,r=[0,0,0],i=[0,0,1],a=!1)=>new iG(j(Uk([Ik(e,t,n,eD(r),eD(i),a)]))),jG=(e,t,n)=>new bG().movePointerTo([-e/2,t/2]).hLine(e).vLine(-t).hLine(-e).close().extrude(n),MG=(e,t)=>SP(e,t,bP*100),NG=(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 PG(e,t,n,r,i){let a=_F(t,n,r.original.lastPoint);e(r),e(a)}function FG(e,t,n,r,i){let a=lF(t,n);e(r),e(a)}function IG(e,t,n,r,i){let a=NG(r.offset instanceof aF?wP(t,r.offset.tangentAt(1)):r.offset.firstPoint,t,n,i.offset instanceof aF?CP(n,i.offset.tangentAt(0)):i.offset.lastPoint);if(!a){let i=lF(t,n);e(r),e(i);return}let o=DP([(t[0]+n[0])/2,(t[1]+n[1])/2],a),s=DP(t,n);if(s<1e-18||o>16*s){let i=lF(t,n);e(r),e(i);return}let c=lF(t,a),l=lF(a,n);e(r),e(c),e(l)}var LG={round:PG,bevel:FG,miter:IG};function RG(e,t,n){let r=n.length===1?lo(n,0,`rawOffsets`):zG(n,e.original.lastPoint),i=lo(e.offset.splitAt([r],bP),0,`rawOffsets`),a=t.offset.splitAt([r],bP).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 zG(e,t){let n=lo(e,0,`selectClosestIntersection`),r=DP(n,t);for(let i=1;i<e.length;i++){let a=lo(e,i,`selectClosestIntersection`),o=DP(a,t);o<r&&(r=o,n=a)}return n}function BG(e){let t=new Map,n=(e,n)=>{let r=t.get(e)||[];t.set(e,[...r,...n])},r=new LF(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=lo(e,r,`offsetBlueprint`),{intersections:o,commonSegmentsPoints:s}=j(HF(t,a,bP)),c=[...o,...s].filter(e=>{let n=MG(e,t.firstPoint)||MG(e,t.lastPoint),r=MG(e,a.firstPoint)||MG(e,a.lastPoint);return!(n&&r)});c.length&&(n(i,c),n(r,c))}}),t}function VG(e,t,n={}){let r=e.orientation===`clockwise`?-t:t,i=e.curves.map(e=>({offset:GF(e,r),original:e})),a=[],o=null,s=i.at(-1);if(!s)return[];function c(e){if(e instanceof aF){a.push(e);return}o?e.offset instanceof aF?a.push(e.offset):MG(e.offset.firstPoint,e.offset.lastPoint)||a.push(lF(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(MG(t,r)){c(s),s=e;continue}let i=[];if(s.offset instanceof aF&&e.offset instanceof aF){let{intersections:t,commonSegmentsPoints:n}=j(HF(s.offset,e.offset,bP/100));i=[...t,...n]}if(i.length>0){let{splitPrevious:t,splitCurrent:n}=RG(s,e,i);c(t),s=n;continue}let a=LG[n.lineJoinType??`round`];a(c,t,r,s,e),s=e}return c(s),a}function HG(e,n,r={}){let i=VG(e,n,r);if(i.length<2)return null;let a=BG(i);if(!a.size){let t=new NF(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,bP*100)}),s=new LF(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-bP)});if(!l.length)return null;let u=yG(l).filter(e=>e.length>1).map(e=>new NF(e)).filter(e=>e.isClosed());return u.length?u.length===1?lo(u,0,`offsetBlueprint`):new XF(u):null}var UG=e=>{let t=lo(e,0,`fuseAll`);for(let n=1;n<e.length;n++)t=rL(t,lo(e,n,`fuseAll`));return t};function WG(e,t,n={}){if(e instanceof NF)return HG(e,t,n);if(e instanceof XF)return UG(e.blueprints.map(e=>WG(e,t,n)));if(e instanceof ZF){let r=UG(e.blueprints.slice(1).map(e=>WG(e,-t,n)));return aL(WG(lo(e.blueprints,0,`offset`),t,n),r)}return null}function GG(e,t){return e instanceof NF?new NF(cF(e.curves,t)):e instanceof ZF?new ZF(e.blueprints.map(e=>GG(e,t))):e instanceof XF?new XF(e.blueprints.map(e=>GG(e,t))):e}function KG(e,t,n,r){let i=()=>!0;r&&(i=r.shouldKeep.bind(r));let a=[kk(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`),SP(kk(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 NF(a)}function qG(e,t,n,r){return t instanceof NF?KG(e,t,n,r):t instanceof ZF?new ZF(t.blueprints.map(t=>KG(e,t,n,r))):t instanceof XF?new XF(t.blueprints.map(t=>qG(e,t,n,r)).filter(e=>e!==null)):null}function JG(e,t,n){return qG(qF,e,t,n)}function YG(e,t,n){return qG(JF,e,t,n)}function XG(e,t){return e instanceof NF?WW(t):e instanceof ZF?GW(t):new aG(t.map(e=>Array.isArray(e)?GW(e):WW(e)))}var ZG=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 ZF)return{type:`CompoundBlueprint`,blueprints:t.blueprints.map(e)};if(t instanceof XF)return{type:`Blueprints`,blueprints:t.blueprints.map(e)};if(t instanceof NF)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 rF}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(aL(this.innerShape,t.innerShape))}fuse(t){return new e(rL(this.innerShape,t.innerShape))}intersect(t){return new e(oL(this.innerShape,t.innerShape))}fillet(t,n){let r=n&&n(yI());return new e(JG(this.innerShape,t,r))}chamfer(t,n){let r=n&&n(yI());return new e(YG(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 XG(this.innerShape,n)}sketchOnFace(e,t){this.innerShape||M(`Drawing`,`Trying to sketch an empty drawing`);let n=this.innerShape.sketchOnFace(e,t);return XG(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(WG(this.innerShape,t,n))}approximate(t,n={}){return t!==`svg`&&M(`Drawing.approximate`,`Only 'svg' is supported for now`),new e(GG(this.innerShape,n))}get blueprint(){if(!(this.innerShape instanceof NF)){if(this.innerShape instanceof XF&&this.innerShape.blueprints.length===1&&this.innerShape.blueprints[0]instanceof NF)return this.innerShape.blueprints[0];M(`Drawing.blueprint`,`This drawing is not a blueprint`)}return this.innerShape}};function QG(e){function t(e){if(e.type===`CompoundBlueprint`)return new ZF(e.blueprints.map(t));if(e.type===`Blueprints`)return new XF(e.blueprints.map(t));if(e.type===`Blueprint`)return new NF(e.curves.map(e=>iF(e)));M(`Drawing.deserialize`,`Unknown shape type for deserialization`)}return new ZG(t(JSON.parse(e)))}var $G=class extends pI{constructor(e=[0,0]){super(),this.pointer=e,this.firstPoint=e,this.pendingCurves=[]}done(){return new ZG(new NF(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 eK(e){let t=new $G;return e&&t.movePointerTo(e),t}function tK(e,t,n=0){return new ZG(xI(e,t,n))}var nK=tK;function rK(e){return new ZG(new NF([fF(e)]))}function iK(e,t){let[n,r]=[e,t].sort((e,t)=>e-t);return new ZG(new NF([pF(r,n,r===e?[1,0]:[0,1])]))}function aK(e){return eK().movePointerTo([-e,0]).sagittaArc(2*e,0,e).sagittaArc(-2*e,0,e).close()}function oK(e,t){return eK().movePointerTo([-e,0]).halfEllipse(2*e,0,t).halfEllipse(-2*e,0,t).close()}function sK(e,t,n=0){return new ZG(bI(e,t,n))}function cK(e,{startX:t=0,startY:n=0,fontSize:r=16,fontFamily:i=`default`}={}){return new ZG(uG(e,{startX:t,startY:n,fontSize:r,fontFamily:i}))}var lK=(e,t={},n={})=>{e.length<2&&M(`drawPointsInterpolation`,`Need at least 2 points for interpolation, got ${e.length}`);let r=[j(gF(e,t))],i=e[0],a=e[e.length-1];return n.closeShape&&i&&a&&!SP(i,a)&&r.push(lF(a,i)),new ZG(new NF(r))},uK=(e,{pointsCount:t=400,start:n=0,stop:r=1,closeShape:i=!1}={},a={})=>{let o=(r-n)/t;return lK([...Array(t+1).keys()].map(t=>e(n+t*o)),a,{closeShape:i})},dK=e=>{try{var t=_T();let n=t.u(new kT),r=nK(1e3,1e3).sketchOnPlane(),i=n.register(j(Wk(r.wire))),a=yG(e.map(e=>kF(e,i))).map(e=>new NF(e));return a.length===0?new ZG:a.length===1?new ZG(a[0]):new ZG(new XF(a))}catch(e){t.e=e}finally{t.d()}};function fK(e,t=`front`){let n;n=typeof t==`string`?j(_G(t)):t;let{visible:r,hidden:i}=vG(e,n);return{visible:dK(r),hidden:dK(i)}}function pK(e){try{var t=_T();let n=t.u(new kT),r=n.register(oE(j(PD(e.wrapped)))),i=yG(ME(n.register(ZD(r))).map(t=>kF(t,e))).map(e=>new NF(e));return i.length===0?new ZG:i.length===1?new ZG(i[0]):new ZG(new XF(i))}catch(e){t.e=e}finally{t.d()}}function mK(e,t,n){return n===void 0?e.sketchOnPlane(t):e.sketchOnPlane(t,n)}function hK(e,t){return e.fuse(t)}function gK(e,t){return e.cut(t)}function _K(e,t){return e.intersect(t)}function vK(e,t,n){return e.fillet(t,n)}function yK(e,t,n){return e.chamfer(t,n)}function bK(e,t,n=0){return typeof t==`number`?e.translate(t,n):e.translate(t)}function xK(e,t,n){return e.rotate(t,n)}function SK(e,t,n){return e.scale(t,n)}function CK(e,t,n,r){return e.mirror(t,n,r)}function wK(e){let t=e.clone();return t.reverse(),t}function TK(e){return e.boundingBox}function EK(e){return e.firstPoint}function DK(e){return e.lastPoint}function OK(e,t,n){return e.splitAt(t,n)}function kK(e,t,n){return e.parameter(t,n)}function AK(e,t){return e.tangentAt(t)}function jK(e,t){return e.isOnCurve(t)}function MK(e,t){return e.distanceFrom(t)}function NK(e){return e.length===0?k(F(N.BLUEPRINT_EMPTY_CURVES,`createBlueprint: at least one curve is required`)):O(new NF(e))}function PK(e){return e.length===0?k(F(N.COMPOUND_BLUEPRINT_EMPTY,`createCompoundBlueprint: at least one blueprint (outer boundary) is required`)):O(new ZF(e))}function FK(e){return e.boundingBox}function IK(e){return e.orientation}function LK(e,t){return e.isInside(t)}function RK(e){return e.toSVGPathD()}function zK(e,t,n){return e.translate(t,n)}function BK(e,t,n){return e.rotate(t,n)}function VK(e,t,n){return e.scale(t,n)}function HK(e,t,n,r){return e.mirror(t,n,r)}function UK(e,t,n,r){return e.stretch(t,n,r)}function WK(e,t,n){return e.sketchOnPlane(t,n)}function GK(e,t,n){return e.sketchOnFace(t,n)}function KK(e,t){return n(e,t*3)}function qK(e,t){return n(e,t)}function JK(e){let t=[`# brepjs OBJ export`],n=e.vertices.length/3;for(let r=0;r<n;r++){let[n,i,a]=KK(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]=KK(e.normals,n);t.push(`vn ${r} ${i} ${a}`)}let i=n=>{let[r,i,a]=qK(e.triangles,n);t.push(`f ${r+1}//${r+1} ${i+1}//${i+1} ${a+1}//${a+1}`)};if(e.faceGroups.length>0)for(let n of e.faceGroups){t.push(`g face_${n.faceId}`);let e=n.count/3;for(let t=0;t<e;t++)i(n.start+t*3)}else{let t=e.triangles.length/3;for(let e=0;e<t;e++)i(e*3)}return t.join(`
|
|
25
|
+
`)+`
|
|
26
|
+
`}var YK=5126,XK=5125,ZK=34962,QK=34963,$K=[-Math.SQRT1_2,0,0,Math.SQRT1_2];function eq(e){return e===`Z`?[{mesh:0}]:[{name:`Z_up_to_Y_up`,rotation:$K,children:[1]},{mesh:0}]}function tq(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 nq(e){return e+3&-4}function rq(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 iq(e,t){let n=cq(e,`base64`,t);return JSON.stringify(n)}function aq(e,t){let{doc:n,binBuffer:r}=lq(e,t),i=JSON.stringify(n),a=new TextEncoder().encode(i),o=nq(a.length),s=new Uint8Array(o);s.set(a);for(let e=a.length;e<o;e++)s[e]=32;let c=nq(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 oq(e,t,n,r,i){return[{bufferView:0,componentType:XK,count:e.length,type:`SCALAR`},{bufferView:1,componentType:YK,count:t.length/3,type:`VEC3`,min:r,max:i},{bufferView:2,componentType:YK,count:n.length/3,type:`VEC3`}]}function sq(e,t,n){return[{buffer:0,byteOffset:0,byteLength:e,target:QK},{buffer:0,byteOffset:nq(e),byteLength:t,target:ZK},{buffer:0,byteOffset:nq(e)+t,byteLength:n,target:ZK}]}function cq(e,t,n){let{vertices:r,normals:i,triangles:a}=e,o=n?.materials;if(o&&o.size>0&&e.faceGroups.length>0)return hq(e,t,o,n.upAxis??`Y`);let s=a.byteLength,c=r.byteLength,l=i.byteLength,u=nq(s)+c+l,{min:d,max:f}=tq(r),p={asset:{version:`2.0`,generator:`brepjs`},scene:0,scenes:[{nodes:[0]}],nodes:eq(n?.upAxis??`Y`),meshes:[{primitives:[{attributes:{POSITION:1,NORMAL:2},indices:0}]}],accessors:oq(a,r,i,d,f),bufferViews:sq(s,c,l),buffers:[{byteLength:u}]};if(t===`base64`){let t=_q(e);p.buffers[0]={byteLength:u,uri:`data:application/octet-stream;base64,`+rq(t)}}return p}function lq(e,t){let n=t?.materials;if(n&&n.size>0&&e.faceGroups.length>0){let{doc:r,binBuffer:i}=gq(e,n,t.upAxis??`Y`);return{doc:r,binBuffer:i}}return{doc:cq(e,`glb`,t),binBuffer:_q(e)}}function uq(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=Ok(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+=Ok(o,e).count;let i=new Uint32Array(r),s=0;for(let e of n){let n=Ok(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=nq(f+t)}let m=f;return{primitiveData:d,indexBufferInfos:p,verticesOffset:m,totalByteLength:m+r.byteLength+i.byteLength,uniqueMaterials:s}}function dq(e,t,n,r){let{vertices:i,normals:a}=e,{min:o,max:s}=tq(i),c=r.length;r.push({buffer:0,byteOffset:t,byteLength:i.byteLength,target:ZK});let l=n.length;n.push({bufferView:c,componentType:YK,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:ZK});let d=n.length;return n.push({bufferView:u,componentType:YK,count:a.length/3,type:`VEC3`}),{verticesAccIdx:l,normalsAccIdx:d}}function fq(e,t,n,r,i,a){let o=[];for(let s=0;s<e.length;s++){let c=Ok(e,s),l=Ok(t,s),u=a.length;a.push({buffer:0,byteOffset:l.byteOffset,byteLength:l.byteLength,target:QK});let d=i.length;i.push({bufferView:u,componentType:XK,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 pq(e,t,n=`Y`){let{primitiveData:r,indexBufferInfos:i,verticesOffset:a,totalByteLength:o,uniqueMaterials:s}=t,c=[],l=[],{verticesAccIdx:u,normalsAccIdx:d}=dq(e,a,c,l),f=fq(r,i,u,d,c,l);return{asset:{version:`2.0`,generator:`brepjs`},scene:0,scenes:[{nodes:[0]}],nodes:eq(n),meshes:[{primitives:f}],accessors:c,bufferViews:l,buffers:[{byteLength:o}],materials:s}}function mq(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=Ok(i,e),n=Ok(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 hq(e,t,n,r=`Y`){let i=uq(e,n),a=pq(e,i,r);if(t===`base64`){let t=mq(e,i);a.buffers[0]={byteLength:i.totalByteLength,uri:`data:application/octet-stream;base64,`+rq(t)}}return a}function gq(e,t,n=`Y`){let r=uq(e,t);return{doc:pq(e,r,n),binBuffer:mq(e,r)}}function _q(e){let{vertices:t,normals:n,triangles:r}=e,i=r.byteLength,a=t.byteLength,o=n.byteLength,s=nq(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),nq(i)),l.set(new Uint8Array(n.buffer,n.byteOffset,o),nq(i)+a),c}function vq(e,t){let n=t?.layer??`0`,r=[];r.push(`0`,`SECTION`,`2`,`HEADER`),r.push(`9`,`$ACADVER`,`1`,`AC1009`),r.push(`0`,`ENDSEC`);let i=new Set([n]);for(let t of e)t.layer&&i.add(t.layer);r.push(`0`,`SECTION`,`2`,`TABLES`),r.push(`0`,`TABLE`,`2`,`LAYER`,`70`,String(i.size));for(let e of i)r.push(`0`,`LAYER`,`2`,e,`70`,`0`,`62`,`7`,`6`,`CONTINUOUS`);r.push(`0`,`ENDTAB`),r.push(`0`,`ENDSEC`),r.push(`0`,`SECTION`,`2`,`ENTITIES`);for(let t of e){let e=t.layer??n;if(t.type===`LINE`)r.push(`0`,`LINE`,`8`,e,`10`,String(t.start[0]),`20`,String(t.start[1]),`30`,`0`,`11`,String(t.end[0]),`21`,String(t.end[1]),`31`,`0`);else{r.push(`0`,`LWPOLYLINE`,`8`,e,`90`,String(t.points.length),`70`,t.closed?`1`:`0`);for(let e of t.points)r.push(`10`,String(e[0]),`20`,String(e[1]))}}return r.push(`0`,`ENDSEC`),r.push(`0`,`EOF`),r.join(`
|
|
27
|
+
`)+`
|
|
28
|
+
`}function yq(e,t){let n=t?.curveSegments??32,r=[],i=bq(e);for(let e of i)for(let t of e.curves)r.push(...xq(t,n));return vq(r,t)}function bq(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(...bq(n));return t}return[]}function xq(e,t){return e.geomType===`LINE`?[{type:`LINE`,start:e.firstPoint,end:e.lastPoint}]:[Sq(e,t)]}function Sq(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 Cq=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;Cq[e]=t}function wq(e){let t=4294967295;for(let n of e)t=Cq[(t^n)&255]^t>>>8;return(t^4294967295)>>>0}function Tq(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 Eq(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 Dq(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 Oq(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=Tq(s,c,l,e);for(let{offset:e,entry:t}of n)l=Eq(s,c,l,e,t);return Dq(s,l,e.length,r,i),o}function kq(e){return e.replaceAll(`&`,`&`).replaceAll(`<`,`<`).replaceAll(`>`,`>`).replaceAll(`"`,`"`)}function Aq(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 jq(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 Mq(e){let t=new Map,n=[];if(e!==void 0&&e.size>0)for(let r of e.values()){let e=Aq(r);t.has(e)||(t.set(e,n.length),n.push(e))}return{colorIndexByHex:t,colorHexList:n}}function Nq(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 Pq(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=Aq(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 Fq(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 Iq(e,t){let n=[];if(e.length>0){let t=e.map(e=>` <color color="${e}" />`).join(`
|
|
29
|
+
`);n.push(` <colorgroup id="2">\n${t}\n </colorgroup>`)}if(t.length>0){let e=t.map(e=>{let t=e.displayColor===void 0?`#FFFFFFFF`:Aq(e.displayColor);return` <base name="${kq(e.name)}" displaycolor="${t}" />`}).join(`
|
|
30
|
+
`);n.push(` <basematerials id="3">\n${e}\n </basematerials>`)}return n}function Lq(e,t,n,r,i){let a=jq(e),{colorIndexByHex:o,colorHexList:s}=Mq(r),{materialIndexByName:c,materialList:l}=Nq(i),u=Fq(e,Pq(e,r,i,o,c)),d=Iq(s,l);return`<?xml version="1.0" encoding="UTF-8"?>
|
|
31
|
+
<model unit="${n}" xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02"${l.length>0?`
|
|
32
|
+
xmlns:m="http://schemas.microsoft.com/3dmanufacturing/material/2015/02"`:``}>
|
|
33
|
+
<resources>${d.length>0?`
|
|
34
|
+
`+d.join(`
|
|
35
|
+
`):``}
|
|
36
|
+
<object id="1" name="${kq(t)}" type="model">
|
|
37
|
+
<mesh>
|
|
38
|
+
<vertices>
|
|
39
|
+
${a.join(`
|
|
40
|
+
`)}
|
|
41
|
+
</vertices>
|
|
42
|
+
<triangles>
|
|
43
|
+
${u.join(`
|
|
44
|
+
`)}
|
|
45
|
+
</triangles>
|
|
46
|
+
</mesh>
|
|
47
|
+
</object>
|
|
48
|
+
</resources>
|
|
49
|
+
<build>
|
|
50
|
+
<item objectid="1" />
|
|
51
|
+
</build>
|
|
52
|
+
</model>`}function Rq(e,t={}){let{name:n=`model`,unit:r=`millimeter`,colors:i,materials:a}=t,o=new TextEncoder,s=Lq(e,n,r,i,a);function c(e,t){let n=o.encode(e),r=o.encode(t);return{name:n,data:r,crc:wq(r)}}return Oq([c(`[Content_Types].xml`,`<?xml version="1.0" encoding="UTF-8"?>
|
|
53
|
+
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
|
|
54
|
+
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" />
|
|
55
|
+
<Default Extension="model" ContentType="application/vnd.ms-package.3dmanufacturing-3dmodel+xml" />
|
|
56
|
+
</Types>`),c(`_rels/.rels`,`<?xml version="1.0" encoding="UTF-8"?>
|
|
57
|
+
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
|
58
|
+
<Relationship Target="/3D/3dmodel.model" Id="rel0" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel" />
|
|
59
|
+
</Relationships>`),c(`3D/3dmodel.model`,s)])}function zq(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 Bq(e){return[e[0],-e[1]]}function Vq(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(lF(Bq([t.cx,t.cy]),Bq([a,o]))),t.cx=a,t.cy=o,i+=2}}function Hq(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(lF(Bq([t.cx,t.cy]),Bq([a,o]))),t.cx=a,t.cy=o,i+=2}}function Uq(e,t,n,r){for(let i of e){let e=n?t.cx+i:i;r.push(lF(Bq([t.cx,t.cy]),Bq([e,t.cy]))),t.cx=e}}function Wq(e,t,n,r){for(let i of e){let e=n?t.cy+i:i;r.push(lF(Bq([t.cx,t.cy]),Bq([t.cx,e]))),t.cy=e}}function Gq(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(hF(Bq([t.cx,t.cy]),[Bq([s,c]),Bq([l,u])],Bq([d,f]))),t.prevControlX=l,t.prevControlY=u,t.cx=d,t.cy=f,i+=6}}function Kq(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(hF(Bq([t.cx,t.cy]),[Bq([c,l]),Bq([u,d])],Bq([f,p]))),t.prevControlX=u,t.prevControlY=d,t.cx=f,t.cy=p,t.lastCmd=`S`,i+=4}}function qq(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(hF(Bq([t.cx,t.cy]),[Bq([s,c])],Bq([l,u]))),t.prevControlX=s,t.prevControlY=c,t.cx=l,t.cy=u,i+=4}}function Jq(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(hF(Bq([t.cx,t.cy]),[Bq([c,l])],Bq([u,d]))),t.prevControlX=c,t.prevControlY=l,t.cx=u,t.cy=d,t.lastCmd=`T`,i+=2}}function Yq(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[uF(Bq([e,t]),Bq(c),Bq([e,s])),uF(Bq([e,s]),Bq(l),Bq([e,t]))]}catch{return[]}}function Xq(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[uF(Bq([e,t]),Bq([b,x]),Bq([n,r]))]}catch{return[lF(Bq([e,t]),Bq([n,r]))]}}function Zq(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(lF(Bq([t.cx,t.cy]),Bq([d,f])));else{let e=d-t.cx,n=f-t.cy;Math.sqrt(e*e+n*n)<1e-10?r.push(...Yq(t.cx,t.cy,s,c,u)):r.push(...Xq(t.cx,t.cy,d,f,s,c,l,u))}t.cx=d,t.cy=f,i+=7}}function Qq(e,t){(Math.abs(e.cx-e.sx)>1e-10||Math.abs(e.cy-e.sy)>1e-10)&&t.push(lF(Bq([e.cx,e.cy]),Bq([e.sx,e.sy]))),e.cx=e.sx,e.cy=e.sy}function $q(e){let t=zq(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`:Vq(i,r,t,n);break;case`L`:Hq(i,r,t,n);break;case`H`:Uq(i,r,t,n);break;case`V`:Wq(i,r,t,n);break;case`C`:Gq(i,r,t,n);break;case`S`:Kq(i,r,t,n);break;case`Q`:qq(i,r,t,n);break;case`T`:Jq(i,r,t,n);break;case`A`:Zq(i,r,t,n);break;case`Z`:Qq(r,n);break}a!==`S`&&a!==`T`&&(r.lastCmd=a)}return n}function eJ(e){try{let t=$q(e);return t.length===0?k(oo(`SVG_EMPTY_PATH`,`SVG path produced no curves`)):O(new NF(t))}catch(e){return k(oo(`SVG_PARSE_FAILED`,`Failed to parse SVG path: ${e instanceof Error?e.message:String(e)}`))}}function tJ(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=eJ(l);u.ok&&n.push(u.value)}return n.length===0?k(oo(`SVG_NO_PATHS`,`No <path> elements found in SVG`)):O(n)}catch(e){return k(oo(`SVG_IMPORT_FAILED`,`Failed to import SVG: ${e instanceof Error?e.message:String(e)}`))}}function nJ(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(oo(N.STEP_EXPORT_CONFIGURED_FAILED,`Configured STEP export failed`,e))}}async function rJ(e){try{let t=await e.arrayBuffer(),n=U().importSTEP(t);return n.length===0?k(oo(`STEP_IMPORT_FAILED`,`STEP file contains no valid geometry`)):O(W(n[0]))}catch{return k(oo(`STEP_IMPORT_FAILED`,`Failed to load STEP file`))}}async function iJ(e){try{let t=await e.arrayBuffer(),n=U().importSTL(t);return n.IsNull()?k(oo(`STL_IMPORT_FAILED`,`Failed to create solid from STL mesh`)):O(W(n))}catch{return k(oo(`STL_IMPORT_FAILED`,`Failed to load STL file`))}}async function aJ(e){try{let t=await e.arrayBuffer(),n=U().importIGES(t);return n.length===0?k(oo(`IGES_IMPORT_FAILED`,`IGES file contains no valid geometry`)):O(W(n[0]))}catch{return k(oo(`IGES_IMPORT_FAILED`,`Failed to load IGES file`))}}function oJ(e,t,n={}){let r=uG(e,t);return new aG((typeof n.plane==`string`||n.plane===void 0?r.sketchOnPlane(n.plane,n.origin):r.sketchOnPlane(n.plane)).map(e=>Array.isArray(e)?new UW(e.map(WW)):WW(e)))}function sJ(e,t){let n=t?.fontSize??1,r=cG(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 cJ(e){let t=e?.fontSize??1,n=cG(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 lJ(e,t){let n=0,r=BD(t);if(e.surfaceType!==void 0)if(r===e.surfaceType)n+=1;else return-1/0;if(e.normal!==void 0){let r=qD(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=JD(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=fP(t);if(r.ok&&r.value>0){let t=Math.abs(Math.log(e.area/r.value));t>1&&(n-=t)}}return n}function uJ(e){let t=BD(e),n=qD(e),r=JD(e),i=fP(e);return{entityType:`face`,surfaceType:t,normal:n,centroid:r,area:i.ok?i.value:void 0}}var dJ=.9;function fJ(e){if(e[2]>dJ)return`box:top`;if(e[2]<-.9)return`box:bottom`;if(e[1]>dJ)return`box:back`;if(e[1]<-.9)return`box:front`;if(e[0]>dJ)return`box:right`;if(e[0]<-.9)return`box:left`}function pJ(e,t){let n=NE(e),r=new Map;if(t===`box`){for(let e of n){let t=fJ(qD(e));t!==void 0&&!r.has(t)&&r.set(t,UO(e))}return r}let i=0;for(let e of n)r.set(`${t}:face_${i}`,UO(e)),i++;return r}function mJ(e,t,n){return{origin:e,role:t,hint:uJ(n)}}function hJ(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 gJ=.1,_J=.5;function vJ(e,t,n,r){let i=NE(n),a=r??lJ,o=t.get(e.origin)?.get(e.role);if(o!==void 0){for(let e of i)if(UO(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>_J&&u.push([t,n]),n>s?(l=s,s=n,c=t):n>l&&(l=n)}return c!==void 0&&s>_J?s-l<gJ&&u.length>1?{ref:e,reason:`ambiguous`,candidates:u.filter(([,e])=>e>=s-gJ).map(([e])=>e)}:{face:c,confidence:`geometric-fallback`}:{ref:e,reason:`not-found`}}function yJ(e){return e.type===`init`}function bJ(e){return e.type===`operation`}function xJ(e){return e.type===`dispose`}function SJ(e){return e.success}function CJ(e){return!e.success}function wJ(){return{pending:new Map}}function TJ(e,t){let n=new Map(e.pending);return n.set(t.id,t),{pending:n}}function EJ(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 DJ(e){return e.pending.size}function OJ(e){return e.pending.size===0}function kJ(e,t){for(let n of e.pending.values())n.reject(t);return{pending:new Map}}function AJ(e,t){let n=t.data,r=e.get(n.id);if(r)if(e.delete(n.id),SJ(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 jJ(e){let{worker:t,wasmUrl:n}=e,r=new Map,i=!1;function a(){return crypto.randomUUID()}function o(e){AJ(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 MJ(){return{operations:new Map}}function NJ(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function PJ(e,t){let n=globalThis;n.onmessage=async r=>{let i=r.data;if(yJ(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(bJ(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(xJ(i)){let e={id:i.id,success:!0};n.postMessage(e),n.close?.()}}}var FJ=Object.defineProperty,IJ=(e,t)=>{let n={};for(var r in e)FJ(n,r,{get:e[r],enumerable:!0});return t||FJ(n,Symbol.toStringTag,{value:`Module`}),n},LJ=1,RJ=2;function zJ(e,t){t===`commonFace`&&e.SetGlue(LJ),t===`sameFace`&&e.SetGlue(RJ)}function BJ(e){return typeof e==`number`}function VJ(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 HJ(e){return typeof e==`number`?!0:Array.isArray(e)&&e.length===2?e.every(BJ):!1}function UJ(e,t){let n=n=>{let r=e.findAll(n);if(r.length===0)return[];let i=0,a=fD(ZE(kk(r)),t);for(let e=1;e<r.length;e++){let n=fD(ZE(Ok(r,e)),t);n<a&&(a=n,i=e)}return[Ok(r,i)]},r=e=>{let t=n(e);return t.length===0?k(so(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found 0 element(s)`)):O(kk(t))};return{...e,findAll:n,findUnique:r}}function WJ(e){return LP(`vertex`,e,WJ,(t,n)=>({nearestTo:t=>UJ(WJ(e),t),atPosition:(e,t=1e-4)=>n(n=>fD(ZE(n),e)<t),withinBox:(e,t)=>n(n=>{let r=ZE(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=ZE(n);return Math.abs(fD(i,t)-e)<r})}))}function GJ(){return WJ([])}var KJ=new Map,qJ=null,JJ=null;function YJ(e,t){KJ.set(e,t),qJ||=e,e===qJ&&(JJ=t)}function XJ(e){if(!e&&JJ)return JJ;let t=e??qJ;if(!t)throw Error(`brepjs voxel engine not initialized. Call initVoxel() (or registerVoxel()) before using voxel operations.`);let n=KJ.get(t);if(!n)throw Error(`brepjs: voxel engine '${t}' is not registered.`);return n}function ZJ(){return qJ}function QJ(e,t=`voxel`){YJ(t,e),qJ=t,JJ=e}function $J(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 eY(e,t){return $J(e)||(t.length%3==0?null:F(`VOXEL_INVALID_QUERIES`,`queries length must be a multiple of 3 (flat xyz).`))}function tY(e){try{return O(XJ(e))}catch(e){return k(ao(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function nY(e,t,n){let r=eY(e,t);if(r)return k(r);let i=tY(n);return A(i)?i:O(i.value.winding_numbers(e.vertices,e.triangles,t))}function rY(e,t,n){let r=eY(e,t);if(r)return k(r);let i=tY(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 iY=48,aY=2;function oY(e,t,n){let r=$J(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??iY,a=t?.padding??aY;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=tY(n);if(A(o))return o;try{try{var s=_T();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 sY=.001;function cY(e,t=sY){try{let n=yk(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 lY=48,uY=2,dY={union:0,intersection:1,difference:2};function fY(e){let t=e?.resolution??lY,n=e?.padding??uY;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 pY(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 mY(e,t,n,r){let i=$J(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=fY(n);if(A(a))return a;let o=tY(r);if(A(o))return o;try{try{var s=_T();return pY(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 hY(e,t,n,r){let i=$J(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=fY(n);if(A(a))return a;let o=tY(r);if(A(o))return o;try{try{var s=_T();return pY(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 gY(e,t,n,r,i){let a=$J(e);if(a)return k(a);let o=$J(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=dY[n],c=fY(r);if(A(c))return c;let l=tY(i);if(A(l))return l;try{try{var u=_T();return pY(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 _Y(e,t,n,r){let i=cY(e);return A(i)?i:mY(i.value,t,n,r)}function vY(e,t,n,r){let i=cY(e);return A(i)?i:hY(i.value,t,n,r)}function yY(e,t,n,r,i){let a=cY(e);if(A(a))return a;let o=cY(t);return A(o)?o:gY(a.value,o.value,n,r,i)}var bY=48,xY=2,SY={union:0,intersection:1,difference:2};function CY(e){let t=e?.resolution??bY,n=e?.padding??xY;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 wY(e){try{var t=_T();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 TY(e){return{raw:e,delete(){e.free()}}}function EY(e){return DY(e)}function DY(e){let t=OT(TY(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,SY[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=wY(this.value);if(A(e))throw Error(e.error.message);return e.value}};return n}function OY(e){return!e.disposed}function kY(){return k(F(`VOXEL_FIELD_DISPOSED`,`the voxel field handle has been disposed.`))}function AY(e,t,n){let r=$J(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=CY(t);if(A(i))return i;let a=tY(n);if(A(a))return a;try{return O(DY(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 jY(e,t,n,r,i){let a=$J(e);if(a)return k(a);let o=$J(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=CY(r);if(A(s))return s;let c=tY(i);if(A(c))return c;try{return O(DY(c.value.VoxelField.boolean_of(e.vertices,e.triangles,t.vertices,t.triangles,SY[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 MY(e,t,n){if(!OY(e)||!OY(t))return kY();try{return e.value.boolean(t.value,SY[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 NY(e,t){if(!OY(e))return kY();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 PY(e,t){if(!OY(e))return kY();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 FY(e){if(!OY(e))return kY();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 IY(e){if(!OY(e))return kY();try{return wY(e.value)}catch(e){return k(I(`VOXEL_FIELD_CONTOUR_FAILED`,e instanceof Error?e.message:`voxel field contour failed.`,e))}}function LY(e,t,n){let r=cY(e);return A(r)?r:AY(r.value,t,n)}function RY(e,t,n,r,i){let a=cY(e);if(A(a))return a;let o=cY(t);return A(o)?o:jY(a.value,o.value,n,r,i)}var zY=48,BY=2;function VY(e){try{return O(XJ(e))}catch(e){return k(ao(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function HY(e){let t=e?.resolution??zY,n=e?.padding??BY;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 UY(e){return{raw:e,delete(){e.free()}}}var WY={offsetField(e){return GY(this.value.offset_field(e.value))},roundField(e){return GY(this.value.round_field(e.value))},shellField(e){return GY(this.value.shell_field(e.value))},smoothUnionField(e,t){return GY(this.value.smooth_union_field(e.value,t.value))}};function GY(e){let t=OT(UY(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},union(e){return GY(this.value.union(e.value))},intersection(e){return GY(this.value.intersection(e.value))},difference(e){return GY(this.value.difference(e.value))},smoothUnion(e,t){return GY(this.value.smooth_union(e.value,t))},smoothIntersection(e,t){return GY(this.value.smooth_intersection(e.value,t))},smoothDifference(e,t){return GY(this.value.smooth_difference(e.value,t))},offset(e){return GY(this.value.offset(e))},round(e){return GY(this.value.round(e))},shell(e){return GY(this.value.shell(e))},onion(e){return GY(this.value.onion(e))},...WY,translate(e,t,n){return GY(this.value.translate(e,t,n))},rotate(e,t,n,r){return GY(this.value.rotate(e,t,n,r))},scale(e){return GY(this.value.scale(e))},rasterize(e){return KY(this.value,e)},rasterizeIn(e,t){return qY(this.value,e,t)}}}function KY(e,t){let n=HY(t);if(A(n))return n;try{return O(EY(e.rasterize(n.value.resolution,n.value.padding)))}catch(e){return JY(e)}}function qY(e,t,n){let r=HY(n);if(A(r))return r;let i=YY(t);if(i)return k(i);try{return O(EY(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 JY(e)}}function JY(e){return k(I(`SDF_RASTERIZE_FAILED`,e instanceof Error?e.message:`SDF rasterization failed (grid too large?).`,e))}function YY(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 XY(e,t){let n=VY(t);if(A(n))return n;try{return O(GY(e(n.value)))}catch(e){return k(I(`SDF_BUILD_FAILED`,e instanceof Error?e.message:`SDF primitive construction failed.`,e))}}function ZY(e,t){return XY(t=>t.Sdf.sphere(e),t)}function QY(e,t,n,r){return XY(r=>r.Sdf.box_(e,t,n),r)}function $Y(e,t,n,r,i){return XY(i=>i.Sdf.rounded_box(e,t,n,r),i)}function eX(e,t,n){return XY(n=>n.Sdf.cylinder(e,t),n)}function tX(e,t,n){return XY(n=>n.Sdf.cone(e,t),n)}function nX(e,t,n,r){return XY(r=>r.Sdf.capsule(e[0],e[1],e[2],t[0],t[1],t[2],n),r)}function rX(e,t,n){return XY(n=>n.Sdf.torus(e,t),n)}function iX(e,t,n){return XY(n=>n.Sdf.plane(e[0],e[1],e[2],t),n)}function aX(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 oX(e,t,n,r){let i=aX(e);if(A(i))return i;let a=n?.closed??!1;return XY(e=>e.Sdf.sweep(i.value,t.value,a),r)}var sX={gyroid:0,schwarzP:1,diamond:2};function cX(e,t,n,r){let i=sX[e];return i===void 0?k(F(`SDF_INVALID_LATTICE_KIND`,`unknown lattice kind: ${e}`)):XY(e=>e.Sdf.lattice(i,t.value,n.value),r)}function lX(e,t,n){return XY(n=>n.Sdf.strut_lattice(e,t.value),n)}function uX(e){return{raw:e,delete(){e.free()}}}function dX(e){let t=OT(uX(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()}}}function fX(e,t){let n=VY(t);if(A(n))return n;try{return O(dX(e(n.value)))}catch(e){return k(I(`SDF_FIELD_BUILD_FAILED`,e instanceof Error?e.message:`scalar field construction failed.`,e))}}function pX(e,t){return fX(t=>t.ScalarField.constant(e),t)}function mX(e,t,n,r,i,a){return fX(a=>a.ScalarField.axial_ramp(e,t,n,r,i),a)}function hX(e,t,n,r,i,a,o){return fX(o=>o.ScalarField.radial_ramp(e[0],e[1],e[2],t,n,r,i,a),o)}function gX(e,t,n,r){return fX(r=>r.ScalarField.from_sdf(e.value,t,n),r)}function _X(e,t,n,r){return fX(r=>r.ScalarField.clamp(e.value,t,n),r)}var vX={gyroid:0,schwarzP:1,diamond:2},yX=48,bX=2;function xX(e){let t=vX[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??yX,r=e.padding??bX;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 SX(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 CX(e,t,n){let r=$J(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=xX(t);if(A(i))return i;let a=tY(n);if(A(a))return a;let{tag:o,period:s,thickness:c,resolution:l,padding:u}=i.value;try{try{var d=_T();return O(SX(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 wX(e,t,n){let r=cY(e);return A(r)?r:CX(r.value,t,n)}function TX(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=xX(t);if(A(r))return r;let i=tY(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=_T();return O(SX(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 EX(e){return U().createVector3d(e[0],e[1],e[2])}function DX(e){return U().createPoint3d(e[0],e[1],e[2])}function OX(e){return U().createDirection3d(e[0],e[1],e[2])}function kX(e){return[e.X(),e.Y(),e.Z()]}function AX(e){return[e.X(),e.Y(),e.Z()]}function jX(e){return[e.X(),e.Y(),e.Z()]}function MX(e,t){let n=EX(e);try{return t(n)}finally{n.delete()}}function NX(e,t){let n=DX(e);try{return t(n)}finally{n.delete()}}function PX(e,t){let n=OX(e);try{return t(n)}finally{n.delete()}}var FX=.299,IX=.587,LX=.114;function RX(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 zX(e,n,r,s,c,o)}catch{}try{return BX(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 zX(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 mE(s)?O(s):(s[Symbol.dispose](),k(P(N.SURFACE_FAILED,`B-spline surface did not produce a face`)))}function BX(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 mE(s)||hE(s)?O(s):(s[Symbol.dispose](),k(P(N.SURFACE_FAILED,`surfaceFromGrid: unexpected shape type from sewing`)))}async function VX(e,t={}){let n=t.channel??`luminance`,r=Math.max(1,Math.round(t.downsample??1));if(typeof createImageBitmap!=`function`)return k(oo(N.SURFACE_FAILED,`surfaceFromImage requires createImageBitmap (not available in this environment)`));let i;try{i=await createImageBitmap(e)}catch(e){return k(oo(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(oo(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(oo(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=(FX*o+IX*s+LX*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),RX(l,u)}function HX(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function UX(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=HX(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 gE(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 WX(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 gE(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 GX(e){let n=NE(e);if(n.length!==1)return null;let r=t(n,0);if(JE(r)!==`sphere`)return null;let i=U().area(r.wrapped);return Math.sqrt(i/(4*Math.PI))}function KX(e,t,n){try{let r=W(U().offset(e.wrapped,t,n));return vE(r)?O(r):(r[Symbol.dispose](),k(ro(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 qX(e,t,n){let r=U();try{let i=FE(e),a=FE(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 vE(s)?O(s):(s[Symbol.dispose](),k(ro(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 JX(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(!vE(e)||!vE(t))return k(F(N.MINKOWSKI_NOT_3D,`minkowski: both shape and tool must be 3D`));let i=GX(t);return i===null?qX(e,t,r):KX(e,i,r)}function YX(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 gE(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 XX=1e-10;function ZX(e,t,n,r){return e*r-t*n}function QX(e,t,n,r){return e*n+t*r}function $X(e,t){return Math.sqrt(e*e+t*t)}function eZ(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 tZ(e){let t=0;for(let n=0;n<e.length;n++){let r=eZ(e,n),i=eZ(e,n+1);t+=r.x*i.y-i.x*r.y}return t<0?[...e].reverse():e}function nZ(e,t){let n=eZ(e,t-1),r=eZ(e,t),i=eZ(e,t+1),a=r.x-n.x,o=r.y-n.y,s=$X(a,o),c=i.x-r.x,l=i.y-r.y,u=$X(c,l);if(s<XX||u<XX)return{dx:0,dy:0};let d=-o/s,f=a/s,p=-l/u,m=c/u,h=d+p,g=f+m,_=$X(h,g);if(_<XX)return{dx:d,dy:f};h/=_,g/=_;let v=QX(h,g,d,f),y=Math.abs(v)>XX?1/v:1;return{dx:h*y,dy:g*y}}function rZ(e){return!e.prev||!e.next?!1:ZX(e.x-e.prev.x,e.y-e.prev.y,e.next.x-e.x,e.next.y-e.y)<-1e-10}function iZ(e){let t=e.map((t,n)=>{let r=nZ(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 aZ(e,t){let n=e;for(let e=0;e<t&&n;e++)n.active=!1,n=n.next}function oZ(e){let t=1,n=e.next;for(;n!==e&&(t++,n=n.next,!(t>1e4)););return t}function sZ(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)<XX&&Math.abs(r)<XX)return null;let o;if(o=Math.abs(n)>Math.abs(r)?i/n:a/r,o<XX)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)>XX){let e=c/s;if(Math.abs(o-e)>1e-4*Math.max(1,Math.abs(o)))return null}return o}function cZ(e,t,n){let r=n.x-t.x,i=n.y-t.y,a=$X(r,i);if(a<XX)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)<XX)return null;let f=-c/d;if(f<XX)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=$X(y,b);if(x<XX)return f;let S=QX(p-h,m-g,y,b)/(x*x);return S<-.01||S>1.01?null:f}function lZ(e){let t=[];for(let n of e){if(!n.active||!n.next)continue;let e=sZ(n,n.next);if(e!==null&&e>XX){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(rZ(n)){let e=n.next.next,r=0;for(;e!==n.prev&&e!==n&&r<1e3;){let i=cZ(n,e,e.next);if(i!==null&&i>XX){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 uZ(e){if(e.length<3)return O({nodes:[],faces:[]});try{return O(dZ(e))}catch(e){return k(I(N.STRAIGHT_SKELETON_FAILED,e instanceof Error?e.message:String(e),e))}}function dZ(e){let t=tZ(e),n=t.length,r=[],i=Array.from({length:n},()=>[]),a=iZ(t),o=0,s=n*n*2;for(;o<s;){o++;let e=a.find(e=>e.active);if(!e)break;let t=oZ(e);if(t<=3){if(t===3){let t=e,n=t.next,a=n.next,o=sZ(t,n),s=o!==null&&o>XX?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 aZ(e,t);continue}let n=a.filter(e=>e.active),s=lZ(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=nZ(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=nZ(f(e),0);e.bx=p.dx,e.by=p.dy;let m=nZ(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=[eZ(t,e),eZ(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&&$X(n.x-i.x,n.y-i.y)>XX&&(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 fZ(e){let t=ME(e).map(e=>{let t=YO(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 pZ(e){let t=[];for(let n=1;n<e-1;n++)t.push([0,n,n+1]);return t}function mZ(e,t,n,r,i,a){return(n-e)*(a-t)-(r-t)*(i-e)}function hZ(e,t,n,r,i,a,o,s){let c=mZ(n,r,i,a,e,t),l=mZ(i,a,o,s,e,t),u=mZ(o,s,n,r,e,t);return!((c<0||l<0||u<0)&&(c>0||l>0||u>0))}function gZ(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||mZ(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&&hZ(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 _Z(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=pZ(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 vZ(e,t){let n=(t?.angle??45)*QE,r=Math.tan(n);try{let t=fZ(e);if(t.length<3)return k(P(N.ROOF_FAILED,`Wire must have at least 3 edges for roof generation`));let n=uZ(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=_Z(i,r,a);for(let[e,n,r]of gZ(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(cE(a.fixShape(e)))}catch(e){try{let t=cE(a.sew(o,1e-6));return qT(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))}}var yZ={coincident:3,concentric:4,distance:1,angle:1},bZ=[1,0,0,0];function xZ(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function SZ(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function CZ(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function wZ(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 TZ(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function EZ(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function DZ(e){return EZ(wZ(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function OZ(e,t){let n=xZ(VM(t.rotation,e.origin),t.position);return{type:e.type,origin:n,...e.normal?{normal:VM(t.rotation,e.normal)}:{},...e.direction?{direction:VM(t.rotation,e.direction)}:{}}}function kZ(e,t,n){let r=e.normal??[0,0,1];return{position:TZ(r,CZ(r,SZ(e.origin,t.origin))+n),rotation:bZ}}function AZ(e,t){let n=e.direction??[0,0,1],r=UM(t.direction??[0,0,1],n),i=VM(r,t.origin);return{position:SZ(e.origin,i),rotation:r}}function jZ(e,t,n){let r=EZ(e.normal??[0,0,1]),i=EZ(t.normal??[0,0,1]),a=Math.acos(Math.max(-1,Math.min(1,CZ(i,r)))),o=wZ(i,r);return{position:[0,0,0],rotation:HM(Math.hypot(o[0],o[1],o[2])<1e-9?DZ(i):o,a-n)}}function MZ(e,t,n){let r=SZ(t,e),i=Math.hypot(r[0],r[1],r[2]);return{position:SZ(xZ(e,TZ(i<1e-9?[1,0,0]:TZ(r,1/i),n)),t),rotation:bZ}}function NZ(e,t,n,r){let i=EZ(e);return{position:TZ(i,CZ(i,SZ(t,n))-r),rotation:bZ}}function PZ(e,t,n){let r=EZ(e.direction??[0,0,1]),i=xZ(e.origin,TZ(r,CZ(r,SZ(t,e.origin))));if(n===0)return{position:SZ(i,t),rotation:bZ};let a=SZ(t,i),o=Math.hypot(a[0],a[1],a[2]);return{position:SZ(xZ(i,TZ(o<1e-9?DZ(r):TZ(a,1/o),n)),t),rotation:bZ}}function FZ(e,t,n){let r=EZ(t.direction??[0,0,1]),i=SZ(t.origin,e),a=SZ(i,TZ(r,CZ(r,i))),o=Math.hypot(a[0],a[1],a[2]);return n===0?{position:TZ(a,-1),rotation:bZ}:{position:SZ(TZ(o<1e-9?DZ(r):TZ(a,1/o),n),a),rotation:bZ}}function IZ(e,t,n){let r=EZ(e.direction??[0,0,1]),i=UM(EZ(t.direction??[0,0,1]),r),a=SZ(VM(i,t.origin),e.origin),o=SZ(a,TZ(r,CZ(r,a))),s=Math.hypot(o[0],o[1],o[2]);return{position:SZ(TZ(s<1e-9?DZ(r):TZ(o,1/s),n),o),rotation:i}}var LZ=new Set([`plane-plane`,`plane-point`,`point-plane`,`point-point`,`axis-axis`,`axis-point`,`point-axis`]),RZ={angle:`plane`,concentric:`axis`},zZ=new Set([`coincident`,`distance`,`angle`,`concentric`]);function BZ(e,t,n){let r=RZ[e];return r?t===r&&n===r:LZ.has(`${t}-${n}`)}function VZ(e,t,n){switch(`${e.type}-${t.type}`){case`plane-plane`:case`plane-point`:return kZ(e,t,n);case`point-plane`:return NZ(t.normal??[0,0,1],e.origin,t.origin,n);case`point-point`:return MZ(e.origin,t.origin,n);case`axis-axis`:return n===0?AZ(e,t):IZ(e,t,n);case`axis-point`:return PZ(e,t.origin,n);case`point-axis`:return FZ(e.origin,t,n);default:return null}}function HZ(e,t,n){switch(e.type){case`concentric`:return AZ(t,n);case`angle`:return jZ(t,n,(e.value??0)*Math.PI/180);default:{let r=VZ(t,n,e.type===`distance`?e.value??0:0);if(!r)throw Error(`solveMate: unsupported entity pair escaped filter: ${t.type}-${n.type}`);return r}}}function UZ(e,t){let n=new Map;for(let t of e)n.set(t,{position:[0,0,0],rotation:bZ});let r=[],i=t.filter(e=>zZ.has(e.type)&&e.entityA&&e.entityB),a=new Set;for(let e of i)e.entityB&&a.add(e.entityB.node);let o=new Set;for(let t of e)a.has(t)||o.add(t);for(let e of t)e.type===`fixed`&&e.entityA&&o.add(e.entityA.node);let s=[];for(let e of i){if(!e.entityA||!e.entityB)continue;let t=e.entityA.entity.type,n=e.entityB.entity.type;if(!BZ(e.type,t,n)){r.push(`${e.type}(${t}-${n})`);continue}s.push(e)}let c=!0;for(;c&&s.length>0;){c=!1;for(let e=s.length-1;e>=0;e--){let t=s[e];if(!t?.entityA||!t.entityB)continue;let r=t.entityA,i=t.entityB;if(!o.has(r.node)||(s.splice(e,1),c=!0,o.has(i.node)))continue;let a=n.get(r.node)??{position:[0,0,0],rotation:bZ},l=OZ(r.entity,a);n.set(i.node,HZ(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+(yZ[t]??yZ[t.split(`(`)[0]??``]??0),0),converged:r.length===0,unsupported:r}}function WZ(e){if(e.face){let t=YD(e.face);return t?{type:`axis`,origin:t.origin,direction:t.direction}:{type:`plane`,origin:JD(e.face),normal:qD(e.face)}}if(e.edge){if(JO(e.edge)===`LINE`)return{type:`axis`,origin:YO(e.edge),direction:QO(e.edge)};let t=ek(e.edge);return t?{type:`axis`,origin:t.origin,direction:t.direction}:null}return e.point?{type:`point`,origin:e.point}:null}function GZ(e,t){let n=WZ(e),r=WZ(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 KZ(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=GZ(e.entityA,e.entityB);return t.ok?O({type:`coincident`,...t.value}):t}case`distance`:{let t=GZ(e.entityA,e.entityB);return t.ok?O({type:`distance`,...t.value,value:e.distance}):t}case`angle`:{let t=GZ(e.entityA,e.entityB);return t.ok?O({type:`angle`,...t.value,value:e.angle}):t}case`concentric`:{let t=GZ(e.axisA,e.axisB);return t.ok?O({type:`concentric`,...t.value}):t}}}function qZ(e,t){let n=e.mates??[];return{...e,mates:[...n,t]}}function JZ(e){let t=e.mates;if(!t||t.length===0)return k(F(N.ASSEMBLY_MATE_INVALID,`solveAssembly: no mates defined`));try{let n=[];PM(e,e=>{n.push(e.name)});let r=[];for(let e of t){let t=KZ(e);if(!t.ok)return t;r.push(t.value)}let i=UZ(n,r);if(!i.converged){let e=i.unsupported.length>0?`Unsupported constraint types: ${i.unsupported.join(`, `)} (${i.dof} DOF unresolved)`:`Assembly constraint solver did not converge`;return k(P(N.ASSEMBLY_NOT_CONVERGED,e))}return O({transforms:i.transforms,dof:i.dof,converged:i.converged})}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.ASSEMBLY_SOLVE_FAILED,`Assembly solve failed: ${t}`,e))}}function YZ(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 XZ(e,n=1e-6){let r=[],i=e.map(e=>KE(e));return e.forEach((a,o)=>{for(let s=o+1;s<e.length;s++){if(ZZ(t(i,o),t(i,s),n))continue;let c=j(YZ(a,t(e,s),n));c.hasInterference&&r.push({i:o,j:s,result:c})}}),r}function ZZ(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 QZ(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 $Z(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 eQ(e){let{type:t,data:n}=e,r=U();if(t===`LINE`)return r.makeLineEdge([$Z(n,10),$Z(n,20),$Z(n,30)],[$Z(n,11),$Z(n,21),$Z(n,31)]);if(t===`CIRCLE`)return r.makeCircleEdge([$Z(n,10),$Z(n,20),$Z(n,30)],[0,0,1],$Z(n,40));if(t===`ARC`){let e=$Z(n,50)*Math.PI/180,t=$Z(n,51)*Math.PI/180;return r.makeCircleArc([$Z(n,10),$Z(n,20),$Z(n,30)],[0,0,1],$Z(n,40),e,t)}}async function tQ(e,t){let n;try{n=await e.text()}catch(e){return k(oo(N.DXF_IMPORT_FAILED,`Failed to read DXF blob`,e))}let r=QZ(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=eQ(e);t!==void 0&&a.push(t)}return a.length===0?O([]):O([aE(U().makeWire(a))])}catch(e){return k(oo(N.DXF_IMPORT_FAILED,`Failed to convert DXF entities to geometry`,e))}finally{for(let e of a)e.delete()}}function nQ(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(oo(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(oo(t,`Failed to sew triangular faces`))}}}function rQ(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 iQ(e){return e.split(/\s+/).slice(1).map(e=>parseInt(e.split(`/`)[0]??``,10)).filter(e=>!isNaN(e))}async function aQ(e){let t=(await e.text()).split(`
|
|
60
|
+
`),n=[],r=[];for(let e of t){let t=e.trim();if(t.startsWith(`v `)){let e=rQ(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=iQ(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return k(oo(N.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return oQ(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return k(oo(N.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function oQ(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 nQ(n,N.OBJ_IMPORT_FAILED)}function sQ(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 cQ(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function lQ(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&cQ(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 uQ(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 dQ(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 fQ(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 pQ(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=lQ(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of uQ(a,`color`)){let t=lQ(e).color;t!==void 0&&l.push(fQ(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=lQ(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of uQ(a,`base`)){let t=lQ(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(fQ(t))}t.set(c,l)}return t}function mQ(e){let t=[],n=[],r=[],i=pQ(e);for(let n of uQ(e,`vertex`)){let e=lQ(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=dQ(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=lQ(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 uQ(e,`triangle`)){let e=lQ(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 hQ(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 gQ(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 nQ(t,N.THREEMF_IMPORT_FAILED)}}async function _Q(e){try{let t=await e.arrayBuffer(),n=sQ(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return k(oo(N.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=mQ(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return k(oo(N.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=gQ(r);if(i.ok){let e=hQ(r.triangleColors);e!==null&&SO(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return k(oo(N.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function vQ(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(oo(N.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function yQ(e){return $(e)}function bQ(e,t){return AO($(e),t)}function xQ(e,t,n){let r=n?.at;return jO($(e),t,r,n?.axis)}function SQ(e,t){let n=t?.at;return MO($(e),t?.normal??[1,0,0],n)}function CQ(e,t,n){return NO($(e),t,n?.center)}function wQ(e){return VO($(e))}function TQ(e,t){return RO($(e),t)}function EQ(e,t){return BO($(e),t)}function DQ(e,t,n){return Qk($(e),$(t),{...n,unsafe:!0})}function OQ(e,t,n){return $k($(e),$(t),{...n,unsafe:!0})}function kQ(e,t,n){return eA($(e),$(t),{...n,unsafe:!0})}function AQ(e,t,n){return aA($(e),t,n)}function jQ(e,t,n){return dA($(e),t,n)}function MQ(e,t){return fA($(e),t)}function NQ(e,t,n){return pA($(e),t,n)}function PQ(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(UP()).findAll(t)}function FQ(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(KP()).findAll(t)}function IQ(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 LQ(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=PQ(t,r),a=n),yj(r,i,a)}function RQ(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=PQ(t,r),a=n);let o=IQ(a);return o.mode===`distAngle`?jA(r,[...i??ME(r)],o.distance,o.angle):bj(r,i,o.distance)}function zQ(e,t,n,r){let i=$(e);return xj(i,FQ(t,i),n,r?.tolerance)}function BQ(e,t,n){return Sj($(e),t,n?.tolerance)}function VQ(e,t){return _j($(e),t)}function HQ(e,t,n){let r=$(e);return wj(r,FQ(t,r),n.pullDirection,n.neutralPlane,n.angle)}function UQ(e){return Aj($(e))}function WQ(e){return qO($(e))}function GQ(e,t){return yk($(e),t)}function KQ(e,t){return bk($(e),t)}function qQ(e){return XE($(e))}function JQ(e){return HO($(e))}function YQ(e){return LD(e)}function XQ(e){return Ej($(e))}function ZQ(e){return WO($(e))}function QQ(e,t){return Kj($(e),typeof t==`number`?[0,0,t]:t)}function $Q(e,t){let n=t?.at??[0,0,0];return qj($(e),n,t?.axis??[0,0,1],t?.angle??360)}function e$(e,t){return Yj(e.map(e=>$(e)),t)}function t$(e,n){if(n===void 0){let t=NE(e);if(t.length===0)return k(F(N.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=kk(t),r=JD(n)[2];for(let e=1;e<t.length;e++){let i=Ok(t,e),a=JD(i)[2];a>r&&(n=i,r=a)}return O(n)}if(typeof n==`function`){let r=n(KP()).findAll(e);return r.length===0?k(so(N.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):O(t(r,0))}return O(n)}function n$(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?e.sketchOnPlane(`XY`).wire:e}function r$(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(hD(o))return k(F(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=pD(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=vA(i,t.depth,c,s);else{let e=KE(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=vA(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}return $k(n,l,{unsafe:!0})}function i$(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=t$(n,t.face);if(A(a))return a;let o=a.value,s=qD(o),c=JD(o),l=Wk(n$(r));if(A(l))return l;let u=Kj(AO(l.value,c),oD(pD(s),-i));return A(u)?u:$k(n,u.value,{unsafe:!0})}function a$(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=t$(n,t.face);if(A(a))return a;let o=a.value,s=qD(o),c=JD(o),l=Wk(n$(r));if(A(l))return l;let u=Kj(AO(l.value,c),oD(pD(s),i));return A(u)?u:Qk(n,u.value,{unsafe:!0})}function o$(e,t){let n=$(e),r=t?.normal??[1,0,0],i=t?.at;return hD(r)?k(F(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):Qk(n,MO(n,r,i),{unsafe:!0})}function s$(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(hD(r))return k(F(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(hD(o))return k(F(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return O(n);let l=pD(r),u=pD(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(AO(n,r))}return nA(d,{unsafe:!0})}var c$=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 l$(e){if(A(e))throw new c$(e.error);return e.value}function u$(e){return e}function d$(e){return e}function f$(e){return e}function p$(e){return e}function m$(e){return{val:e,__wrapped:!0,translate:t=>w$(bQ(e,t)),rotate:(t,n)=>w$(xQ(e,t,n)),mirror:t=>w$(SQ(e,t)),scale:(t,n)=>w$(CQ(e,t,n)),applyMatrix:t=>w$(l$(TQ(e,t))),moveX:t=>w$(bQ(e,[t,0,0])),moveY:t=>w$(bQ(e,[0,t,0])),moveZ:t=>w$(bQ(e,[0,0,t])),rotateX:t=>w$(xQ(e,t,{axis:[1,0,0]})),rotateY:t=>w$(xQ(e,t,{axis:[0,1,0]})),rotateZ:t=>w$(xQ(e,t,{axis:[0,0,1]})),bounds:()=>KE(e),describe:()=>qQ(e),clone:()=>w$(l$(wQ(e))),mesh:t=>GQ(e,t),meshEdges:t=>KQ(e,t),isValid:()=>XQ(e),isEmpty:()=>ZQ(e),heal:()=>w$(l$(UQ(e))),simplify:()=>w$(l$(WQ(e))),toBREP:()=>l$(JQ(e)),apply:t=>w$(t(e)),applyResult:t=>w$(l$(t(e))),done:()=>e}}function h$(e){return{fuse:(t,n)=>T$(l$(DQ(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>T$(l$(OQ(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>T$(l$(kQ(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>T$(p$(l$(nA([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>T$(p$(l$(rA(e,t,{...n,unsafe:!0})))),section:(t,n)=>w$(l$(AQ(e,t,n))),split:t=>w$(l$(MQ(e,t))),slice:(t,n)=>l$(NQ(e,t,n))}}function g$(e){return{fillet(...t){return t.length===1?T$(p$(l$(LQ(u$(e),t[0])))):T$(p$(l$(LQ(u$(e),t[0],t[1]))))},chamfer(...t){return t.length===1?T$(p$(l$(RQ(u$(e),t[0])))):T$(p$(l$(RQ(u$(e),t[0],t[1]))))},shell:(t,n,r)=>T$(p$(l$(zQ(u$(e),t,n,r)))),offset:(t,n)=>T$(p$(l$(BQ(u$(e),t,n)))),draft:(t,n)=>T$(p$(l$(HQ(u$(e),t,n))))}}function _$(e){return{drill:t=>T$(l$(r$(e,t))),pocket:t=>T$(l$(i$(e,t))),boss:t=>T$(l$(a$(e,t))),mirrorJoin:t=>T$(l$(o$(e,t))),rectangularPattern:t=>T$(l$(s$(e,t)))}}function v$(e){return{volume:()=>l$(dP(e)),area:()=>l$(fP(e)),volumeProps:()=>l$(cP(e)),surfaceProps:()=>l$(lP(e))}}function y$(e){return{edges:()=>ME(e),faces:()=>NE(e),wires:()=>PE(e),vertices:()=>FE(e)}}function b$(e){return{linearPattern:(t,n,r)=>T$(p$(l$(DM(e,t,n,r)))),circularPattern:(t,n,r)=>T$(p$(l$(OM(e,t,n,r))))}}function x$(e){return{...m$(e),...h$(e),...g$(e),..._$(e),...v$(e),...y$(e),...b$(e)}}function S$(e){return{...m$(e),length:()=>$O(e),startPoint:()=>YO(e),endPoint:()=>XO(e),pointAt:t=>ZO(e,t),tangentAt:t=>QO(e,t),isClosed:()=>tk(e),sweep(t,n){if(!pE(e))throw Error(`sweep requires a Wire`);let r=l$(Rj(f$(e),$(t),n));return T$(Array.isArray(r)?r[0]:r)}}}function C$(e){return{...m$(e),area:()=>l$(fP(e)),normalAt:t=>qD(e,t),center:()=>JD(e),surfaceType:()=>l$(zD(e)),outerWire:()=>ZD(e),innerWires:()=>$D(e),extrude:t=>T$(l$(QQ(d$(e),t))),revolve:t=>T$(l$($Q(d$(e),t)))}}function w$(e){return vE(e)?x$(e):mE(e)?C$(e):fE(e)||pE(e)?S$(e):m$(e)}function T$(e){return x$(e)}function E$(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return C$(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return mE(e)?C$(e):vE(e)?x$(e):fE(e)||pE(e)?S$(e):m$(e);throw Error(`shape() requires a Sketch or branded shape type`)}var D$=.25,O$=e=>Math.tan(e)-e;function k$(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 A$(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(k$(e,s*t,n,i))}return a}function j$(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function M$(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 N$(e,t,n){if(t===0)return O(e);let r=O$(e)+2*t*Math.tan(e)/n,i,a;if(r>O$(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>O$(a)||r<O$(i))return k(F(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${O$(i).toFixed(4)}, ${O$(a).toFixed(4)}]`,void 0,{target:r,invLo:O$(i),invHi:O$(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);O$(e)<r?i=e:a=e}return O(.5*(i+a))}function P$(e,t,n,r,i){return N$(e,t+n,r+i)}function F$(e,t,n,r,i){return N$(e,n-t,i-r)}function I$(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function L$(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 R$(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 z$(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 B$(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function V$(e,t,n){return Math.max(0,B$(e,t)-n)}function H$(e){return e<8?.2:.485-2.88/e}function U$(e,t,n,r){let i=e*1e3,a=H$(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function W$(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function G$(e,t,n,r,i,a=!1){return U$(e,t,n,r)*W$(r,i,a)}function K$(e){return e/2}function q$(e,t){return e+2*t}function J$(e){return e%2==0?Math.PI/e:0}function Y$(e,t,n){return e*(1+t/n)+J$(n)}function X$(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=L$(n,r,i,s);if(A(c))return c;let l=P$(a,o,s,n,r);if(A(l))return l;let u=I$(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=Y$(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return O(d)}function Z$(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=O$(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=A$(e.rb,e.alphaTip,c,r,1),d=A$(e.rb,e.alphaTip,l,r,-1).reverse(),f=kk(u),p=Ak(u),m=kk(d),h=Ak(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(Nk([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=Bk(u,{tolerance:y});if(A(b))return b;_(b.value),_(Lk(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=Bk(d,{tolerance:y});if(A(x))return x;_(x.value),v&&_(Nk(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),_(Lk(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 Q$(e){return e1(e,!1)}function $$(e){return e1(e,!0)}function e1(e,t){try{var n=_T();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=j$(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=M$(r,i,a,o,s,c,t),d=n.u(new kT),f=[];for(let e=0;e<r;e++){let t=Z$(u,e,r,l,d);if(A(t))return t;f.push(...t.value)}let p=Uk(f);return A(p)?p:O(p.value)}catch(e){n.e=e}finally{n.d()}}function t1(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=D$,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=M$(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=Q$({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(f))return f;let p=r1(t,u,a);return c1(f.value,r,c,d,p)}function n1(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=D$,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=$$({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(d))return d;let f=M$(t,n,u,a,o,s,!0),p=s1(f.rPitch+c);return A(p)?p:u1(p.value,d.value,r,f,[])}function r1(e,t,n){let r=V$(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 i1(e){let t=o1(e);if(A(t))return t;let n=t.value,r=a1(n);if(A(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=m1(n,i,a,o),c=f1(a.solid,n);a.solid.delete();let l=p1(o.solid,n.zr),u=h1(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 a1(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=t1({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(A(r))return r;let i=t1({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(A(i))return r.value.solid.delete(),i;let a=n1({...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 o1(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=L$(n,r,i,c);if(A(u))return u;let d=q$(n,r),f=P$(o,s,c,n,r);if(A(f))return f;let p=F$(o,c,l,r,d);if(A(p))return p;let m=I$(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:K$(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 s1(e){try{var t=_T();let n=Uk([t.u(new kT).register(Pk(e,[0,0,0],[0,0,1]))]);return A(n)?n:O(n.value)}catch(e){t.e=e}finally{t.d()}}function c1(e,t,n,r,i){try{var a=_T();let o=Wk(e);if(A(o))return o;let s=Kj(o.value,[0,0,t]);if(A(s))return s;if(n<=0)return O(d1(s.value,r,i));let c=a.u(new kT),l=l1(n/2);if(A(l))return l;c.register(l.value);let u=Kj(l.value,[0,0,t+1]);if(A(u))return u;c.register(u.value);let d=c.register(AO(u.value,[0,0,-.5])),f=$k(s.value,d);return A(f)?f:O(d1(f.value,r,i))}catch(e){a.e=e}finally{a.d()}}function l1(e){let t=s1(e);return A(t)?t:Wk(t.value)}function u1(e,t,n,r,i){let a=Wk(e,[t]);if(A(a))return a;let o=Kj(a.value,[0,0,n]);return A(o)?o:O(d1(o.value,r,i))}function d1(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 f1(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=jO(e,Y$(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(AO(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function p1(e,t){let n=J$(t);if(n===0)return e;let r=jO(e,n*180/Math.PI);return e.delete(),r}function m1(e,t,n,r){let i={crSunPlanet:R$(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:z$(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:V$(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:V$(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:G$(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:G$(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:G$(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:W$(e.sunTeeth,e.alpha),planet:W$(e.planetTeeth,e.alpha),ring:W$(e.zr,e.alpha,!0)}}return i}function h1(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 g1=IJ({addHoles:()=>CM,bezier:()=>uM,box:()=>Zj,bsplineApprox:()=>lM,circle:()=>iM,compound:()=>yM,cone:()=>eM,cylinder:()=>Qj,ellipse:()=>aM,ellipseArc:()=>cM,ellipsoid:()=>nM,face:()=>mM,fill:()=>Gk,filledFace:()=>hM,helix:()=>oM,line:()=>rM,offsetFace:()=>xM,polygon:()=>_M,polyhedron:()=>YX,sewShells:()=>SM,solid:()=>bM,sphere:()=>$j,subFace:()=>gM,tangentArc:()=>dM,threePointArc:()=>sM,torus:()=>tM,vertex:()=>vM,wire:()=>fM,wireLoop:()=>pM}),_1=IJ({checkBoolean:()=>ej,convexHull:()=>WX,cut:()=>OQ,cutAll:()=>rA,cutAllBisect:()=>GA,fuse:()=>DQ,fuseAll:()=>nA,fuseAllBisect:()=>YA,hull:()=>UX,intersect:()=>kQ,minkowski:()=>JX,section:()=>AQ,sectionToFace:()=>jQ,slice:()=>NQ,split:()=>MQ}),v1=IJ({chamfer:()=>RQ,draft:()=>HQ,fillet:()=>LQ,heal:()=>UQ,offset:()=>BQ,shell:()=>zQ,simplify:()=>WQ,thicken:()=>VQ,variableFillet:()=>Tj}),y1=IJ({applyMatrix:()=>TQ,clone:()=>wQ,composeTransforms:()=>zO,mirror:()=>SQ,rotate:()=>xQ,scale:()=>CQ,transformCopy:()=>EQ,translate:()=>bQ}),b1=IJ({checkAllInterferences:()=>XZ,checkInterference:()=>YZ,createDistanceQuery:()=>gP,measureArea:()=>fP,measureCurvatureAt:()=>_P,measureCurvatureAtMid:()=>vP,measureDistance:()=>mP,measureDistanceProps:()=>hP,measureLength:()=>pP,measureLinearProps:()=>uP,measureSurfaceProps:()=>lP,measureVolume:()=>dP,measureVolumeProps:()=>cP}),x1=IJ({blueprintToDXF:()=>yq,exportAssemblySTEP:()=>EM,exportDXF:()=>vq,exportGlb:()=>aq,exportGltf:()=>iq,exportIGES:()=>Ek,exportOBJ:()=>JK,exportSTEP:()=>wk,exportSTEPConfigured:()=>nJ,exportSTL:()=>Tk,exportThreeMF:()=>Rq,importDXF:()=>tQ,importGLB:()=>vQ,importIGES:()=>aJ,importOBJ:()=>aQ,importSTEP:()=>rJ,importSTL:()=>iJ,importSVG:()=>tJ,importSVGPathD:()=>eJ,importThreeMF:()=>_Q}),S1=IJ({cornerFinder:()=>yI,edgeFinder:()=>UP,faceFinder:()=>KP,getSingleFace:()=>YP,vertexFinder:()=>GJ,wireFinder:()=>JP}),C1=IJ({complexExtrude:()=>Bj,extrude:()=>QQ,guidedSweep:()=>Gj,loft:()=>e$,multiSectionSweep:()=>Wj,revolve:()=>$Q,roof:()=>vZ,supportExtrude:()=>zj,surfaceFromGrid:()=>RX,surfaceFromImage:()=>VX,sweep:()=>Rj,twistExtrude:()=>Vj}),w1=IJ({circularPattern:()=>OM,linearPattern:()=>DM}),T1=14695981039346656037n,E1=1099511628211n,D1=18446744073709551615n;function O1(){return T1}function k1(e,t){return(e^BigInt(t&255))*E1&D1}function A1(e,t){let n=e;for(let e=0;e<t.length;e++)n=k1(n,t[e]??0);return n}var j1=new TextEncoder;function M1(e,t){return A1(e,j1.encode(t))}var N1=new ArrayBuffer(8),P1=new DataView(N1),F1=new Uint8Array(N1);function I1(e,t){return P1.setFloat64(0,Object.is(t,-0)?0:t),A1(e,F1)}function L1(e,t){let n=e,r=t&D1;for(let e=0;e<8;e++)n=k1(n,Number(r&255n)),r>>=8n;return n}function R1(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=k1(n,r&255),r>>>=8;return n}function z1(e,t){return k1(e,+!!t)}function B1(e){return(e&D1).toString(16).padStart(16,`0`)}var V1=new Set;function H1(e){return M1(O1(),e)}function U1(e){return{kind:`NumLit`,value:e,structuralHash:I1(H1(`NumLit`),e),freeParams:V1}}function W1(e){let t=H1(`Vec3Lit`);for(let n of e)t=I1(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:V1}}function G1(e){let t=H1(`Vec2Lit`);for(let n of e)t=I1(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:V1}}function K1(e){return{kind:`Param`,name:e,structuralHash:M1(H1(`Param`),e),freeParams:new Set([e])}}function q1(e,t,n){let r=M1(H1(`BinOp`),e);return r=L1(r,t.structuralHash),r=L1(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:r0(t.freeParams,n.freeParams)}}function J1(e,t){let n=M1(H1(`UnaryOp`),e);return n=L1(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function Y1(e,t){let n=R1(H1(`Component`),t);return n=L1(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function X1(e,t){let n=R1(H1(`BuildVec`),e),r=new Set;for(let e of t){n=L1(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var Z1=(e,t)=>q1(`+`,e,t),Q1=(e,t)=>q1(`*`,e,t);function $1(e){return typeof e==`number`?U1(e):e}function e0(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?W1([n[0],n[1],n[2]]):G1([n[0],n[1]]):X1(t,n.map($1))}function t0(e){return e0(e,3)}function n0(e){return e0(e,2)}function r0(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 i0(e){return typeof e==`number`}function a0(e,t){return i0(e)?O(e):k(F(N.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function o0(e,t,n){return Array.isArray(e)&&e.length===t?O(e):k(F(N.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${i0(e)?`number`:`vector(${e.length})`}`))}function s0(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 c0(e,t);case`UnaryOp`:return l0(e,t);case`Component`:return u0(e,t);case`BuildVec`:return d0(e,t)}}function c0(e,t){let n=s0(e.a,t);if(!n.ok)return n;let r=s0(e.b,t);if(!r.ok)return r;let i=a0(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=a0(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 l0(e,t){let n=s0(e.arg,t);if(!n.ok)return n;let r=a0(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 u0(e,t){let n=s0(e.vec,t);if(!n.ok)return n;if(i0(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 d0(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=s0(r,t);if(!e.ok)return e;let i=a0(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 f0(e,t,n){let r=s0(e,t);return r.ok?a0(r.value,n):r}function p0(e,t,n){let r=s0(e,t);if(!r.ok)return r;let i=o0(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return O([a,o,s])}function m0(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 h0=new Set;function g0(e){return M1(O1(),e)}function _0(e,t){return L1(e,t.structuralHash)}function v0(e,t){return t===void 0?z1(e,!1):_0(z1(e,!0),t)}function y0(e,t){return t===void 0?z1(e,!1):I1(z1(e,!0),t)}function b0(...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?h0:t}function x0(e,t,n){let r=$1(e),i=$1(t),a=$1(n),o=g0(`Box`);return o=_0(_0(_0(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:b0(r,i,a)}}function S0(e){let t=$1(e);return{kind:`Sphere`,radius:t,structuralHash:_0(g0(`Sphere`),t),freeParams:t.freeParams}}function C0(e,t){let n=$1(e),r=$1(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:_0(_0(g0(`Cylinder`),n),r),freeParams:b0(n,r)}}function w0(e,t,n){let r=$1(e),i=$1(t),a=$1(n),o=g0(`Cone`);return o=_0(_0(_0(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:b0(r,i,a)}}function T0(e,t){let n=$1(e),r=$1(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:_0(_0(g0(`Torus`),n),r),freeParams:b0(n,r)}}function E0(e){let t=e.map(t0),n=R1(g0(`Polygon`),t.length);for(let e of t)n=_0(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:b0(...t)}}function D0(e){let t=$1(e);return{kind:`Circle`,radius:t,structuralHash:_0(g0(`Circle`),t),freeParams:t.freeParams}}function O0(e,t){let n=t0(e),r=t0(t);return{kind:`Line`,from:n,to:r,structuralHash:_0(_0(g0(`Line`),n),r),freeParams:b0(n,r)}}function k0(e){let t=t0(e);return{kind:`Vertex`,point:t,structuralHash:_0(g0(`Vertex`),t),freeParams:t.freeParams}}function A0(e){return{kind:`Empty`,output:e,structuralHash:M1(g0(`Empty`),e),freeParams:h0}}function j0(){return A0(`Solid`)}function M0(){return A0(`Face`)}function N0(){return A0(`Wire`)}function P0(e,t,n,r){return y0(_0(_0(g0(e),t),n),r)}function F0(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:P0(`Fuse`,e,t,n),freeParams:b0(e,t)}}function I0(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:P0(`Cut`,e,t,n),freeParams:b0(e,t)}}function L0(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:P0(`Intersect`,e,t,n),freeParams:b0(e,t)}}function R0(e,t){let n=R1(g0(`FuseAll`),e.length);for(let t of e)n=_0(n,t);return n=y0(n,t),{kind:`FuseAll`,shapes:e,tolerance:t,structuralHash:n,freeParams:b0(...e)}}function z0(e,t,n){let r=_0(g0(`CutAll`),e);r=R1(r,t.length);for(let e of t)r=_0(r,e);return r=y0(r,n),{kind:`CutAll`,base:e,tools:t,tolerance:n,structuralHash:r,freeParams:b0(e,...t)}}function B0(e){return e===void 0?void 0:t0(e)}function V0(e,t){let n=t0(t);return{kind:`Translate`,target:e,vector:n,structuralHash:_0(_0(g0(`Translate`),e),n),freeParams:b0(e,n)}}function H0(e,t,n){let r=$1(t),i=B0(n?.axis),a=B0(n?.at),o=_0(_0(g0(`Rotate`),e),r);return o=v0(o,i),o=v0(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:b0(e,r,i,a)}}function U0(e,t,n){let r=$1(t),i=B0(n?.center),a=_0(_0(g0(`Scale`),e),r);return a=v0(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:b0(e,r,i)}}function W0(e,t){let n=B0(t?.normal),r=B0(t?.at),i=_0(g0(`Mirror`),e);return i=v0(i,n),i=v0(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:b0(e,n,r)}}function G0(e){let t=R1(g0(`Compound`),e.length);for(let n of e)t=_0(t,n);return{kind:`Compound`,children:e,structuralHash:t,freeParams:b0(...e)}}function K0(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 K0(e.a);case`FuseAll`:return e.shapes[0]?K0(e.shapes[0]):`Solid`;case`CutAll`:return K0(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return K0(e.target);case`Compound`:return`Compound`}}function q0(e,t){let n=f0(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=f0(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=f0(e.z,t.env,`Box.z`);return i.ok?O(Zj(n.value,r.value,i.value)):i}function J0(e,t){let n=f0(e.radius,t.env,`Sphere.radius`);return n.ok?O($j(n.value)):n}function Y0(e,t){let n=f0(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=f0(e.height,t.env,`Cylinder.height`);return r.ok?O(Qj(n.value,r.value)):r}function X0(e,t){let n=f0(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=f0(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=f0(e.height,t.env,`Cone.height`);return i.ok?O(eM(n.value,r.value,i.value)):i}function Z0(e,t){let n=f0(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=f0(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?O(tM(n.value,r.value)):r}function Q0(e,t){let n=[];for(let r of e.points){let e=p0(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return _M(n)}function $0(e,t){let n=f0(e.radius,t.env,`Circle.radius`);return n.ok?O(iM(n.value)):n}function e2(e,t){let n=p0(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=p0(e.to,t.env,`Line.to`);return r.ok?O(rM(n.value,r.value)):r}function t2(e,t){let n=p0(e.point,t.env,`Vertex.point`);return n.ok?O(vM(n.value)):n}function n2(e){return k(I(N.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function r2(e,t,n){let r=e.evalNode(t);return r.ok?vE(r.value)?O(r.value):k(ro(N.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function i2(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function a2(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=r2(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=r2(t,e.b,`Fuse.b`);return r.ok?Qk(n.value,r.value,i2(e,t)):r}function o2(e,t){if(e.a.kind===`Empty`)return n2(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=r2(t,e.a,`Cut.a`);if(!n.ok)return n;let r=r2(t,e.b,`Cut.b`);return r.ok?$k(n.value,r.value,i2(e,t)):r}function s2(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return n2(`Intersect`);let n=r2(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=r2(t,e.b,`Intersect.b`);return r.ok?eA(n.value,r.value,i2(e,t)):r}function c2(e,t,n){let r=[];for(let i of t){let t=r2(e,i,n);if(!t.ok)return t;r.push(t.value)}return O(r)}function l2(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return n2(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=c2(t,n,`FuseAll.operand`);return r.ok?nA(r.value,i2(e,t)):r}function u2(e,t){if(e.base.kind===`Empty`)return n2(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=r2(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=c2(t,n,`CutAll.tool`);return i.ok?rA(r.value,i.value,i2(e,t)):i}function d2(e){return k(I(N.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function f2(e,t,n,r){return e?p0(e,t,n):O(r)}function p2(e,t){if(e.target.kind===`Empty`)return d2(`Translate`);let n=p0(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?O(AO(r.value,n.value)):r}function m2(e,t){if(e.target.kind===`Empty`)return d2(`Rotate`);let n=f0(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=f2(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=f2(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?O(jO(a.value,n.value,i.value,r.value)):a}function h2(e,t){if(e.target.kind===`Empty`)return d2(`Scale`);let n=f0(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=f2(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(NO(i.value,n.value,r.value)):i}function g2(e,t){if(e.target.kind===`Empty`)return d2(`Mirror`);let n=f2(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=f2(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(MO(i.value,n.value,r.value)):i}function _2(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(yM(r))}function v2(){return k(I(N.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function y2(e,t){switch(e.kind){case`Box`:return q0(e,t);case`Sphere`:return J0(e,t);case`Cylinder`:return Y0(e,t);case`Cone`:return X0(e,t);case`Torus`:return Z0(e,t);case`Polygon`:return Q0(e,t);case`Circle`:return $0(e,t);case`Line`:return e2(e,t);case`Vertex`:return t2(e,t);case`Empty`:return v2();case`Fuse`:return a2(e,t);case`Cut`:return o2(e,t);case`Intersect`:return s2(e,t);case`FuseAll`:return l2(e,t);case`CutAll`:return u2(e,t);case`Translate`:return p2(e,t);case`Rotate`:return m2(e,t);case`Scale`:return h2(e,t);case`Mirror`:return g2(e,t);case`Compound`:return _2(e,t)}}function b2(e,t){if(typeof t==`number`)return I1(z1(e,!1),t);let n=z1(e,!0);n=R1(n,t.length);for(let e of t)n=I1(n,e);return n}function x2(e,t){if(t.size===0)return O1();let n=m0(e,t),r=Object.keys(n).sort(),i=O1();for(let e of r){i=M1(i,e);let t=n[e];t!==void 0&&(i=b2(i,t))}return i}function S2(e,t,n,r){let i=x2(t,e.freeParams),a=r===void 0?`d`:I1(O1(),r).toString(16);return`${B1(e.structuralHash)}:${n}:${B1(i)}:${a}`}var C2=class{scope=new kT;cache=new Map;registered=new WeakSet;kernelId;defaultTolerance;onStep;hits=0;misses=0;constructor(e={}){this.kernelId=e.kernel??oT()??`unregistered`,this.defaultTolerance=e.tolerance,e.onStep&&(this.onStep=e.onStep)}evaluate(e,t={}){return sT(this.kernelId,()=>this.evaluateInner(e,t))}evaluateInner(e,t){let n=S2(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=y2(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 w2(e,t){try{var n=_T();let r=t(n.u(new C2(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 T2(e){return{csgVersion:1,root:j2(e)}}function E2(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:E2(e.a),b:E2(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:E2(e.arg)};case`Component`:return{kind:`Component`,vec:E2(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(E2)}}}function D2(e){switch(e.kind){case`Box`:return{kind:`Box`,x:E2(e.x),y:E2(e.y),z:E2(e.z)};case`Sphere`:return{kind:`Sphere`,radius:E2(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:E2(e.radius),height:E2(e.height)};case`Cone`:return{kind:`Cone`,radius1:E2(e.radius1),radius2:E2(e.radius2),height:E2(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:E2(e.majorRadius),minorRadius:E2(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(E2)};case`Circle`:return{kind:`Circle`,radius:E2(e.radius)};case`Line`:return{kind:`Line`,from:E2(e.from),to:E2(e.to)};case`Vertex`:return{kind:`Vertex`,point:E2(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function O2(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:j2(e.a),b:j2(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(j2),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:j2(e.base),tools:e.tools.map(j2),tolerance:e.tolerance};default:return}}function k2(e){return e?E2(e):void 0}function A2(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:j2(e.target),vector:E2(e.vector)};case`Rotate`:return{kind:`Rotate`,target:j2(e.target),angle:E2(e.angle),axis:k2(e.axis),at:k2(e.at)};case`Scale`:return{kind:`Scale`,target:j2(e.target),factor:E2(e.factor),center:k2(e.center)};case`Mirror`:return{kind:`Mirror`,target:j2(e.target),normal:k2(e.normal),at:k2(e.at)};default:return}}function j2(e){return e.kind===`Compound`?{kind:`Compound`,children:e.children.map(j2)}:D2(e)??O2(e)??A2(e)}function M2(e){return k(F(N.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function N2(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function P2(e){return typeof e==`number`&&Number.isFinite(e)}function F2(e){return typeof e==`string`}function I2(e,t){if(!Array.isArray(e)||e.length!==3)return M2(`${t}: expected Vec3 array`);let[n,r,i]=e;return!P2(n)||!P2(r)||!P2(i)?M2(`${t}: Vec3 contains non-number`):O([n,r,i])}function L2(e,t){if(!Array.isArray(e)||e.length!==2)return M2(`${t}: expected Vec2 array`);let[n,r]=e;return!P2(n)||!P2(r)?M2(`${t}: Vec2 contains non-number`):O([n,r])}function R2(e){if(!N2(e))return M2(`input is not an object`);let t=e.csgVersion;if(t!==1)return M2(`unsupported csgVersion ${String(t)} (expected 1)`);let n=e.root;return K2(n)}function z2(e){if(!N2(e))return M2(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return P2(e.value)?O(U1(e.value)):M2(`NumLit.value`);case`Vec3Lit`:{let t=I2(e.value,`Vec3Lit.value`);return t.ok?O(W1(t.value)):t}case`Vec2Lit`:{let t=L2(e.value,`Vec2Lit.value`);return t.ok?O(G1(t.value)):t}case`Param`:return F2(e.name)?O(K1(e.name)):M2(`Param.name`);case`BinOp`:return B2(e);case`UnaryOp`:return V2(e);case`Component`:return H2(e);case`BuildVec`:return U2(e);default:return M2(`unknown expression kind: ${String(t)}`)}}function B2(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return M2(`BinOp.op: ${String(t)}`);let n=z2(e.a);if(!n.ok)return n;let r=z2(e.b);return r.ok?O(q1(t,n.value,r.value)):r}function V2(e){let t=e.op;if(!F2(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return M2(`UnaryOp.op: ${String(t)}`);let n=z2(e.arg);return n.ok?O(J1(t,n.value)):n}function H2(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return M2(`Component.index: ${String(t)}`);let n=z2(e.vec);return n.ok?O(Y1(n.value,t)):n}function U2(e){let t=e.dim;if(t!==2&&t!==3)return M2(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return M2(`BuildVec.components: not array`);if(n.length!==t)return M2(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=z2(e);if(!t.ok)return t;r.push(t.value)}return O(X1(t,r))}function W2(e,t){if(!Array.isArray(e))return M2(`${t}: not array`);let n=[];for(let t of e){let e=K2(t);if(!e.ok)return e;n.push(e.value)}return O(n)}function G2(e){let t=e.tolerance;return t==null?O(void 0):P2(t)?O(t):M2(`tolerance: not a finite number`)}function K2(e){if(!N2(e))return M2(`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 J2(t,e);case`Fuse`:case`Cut`:case`Intersect`:return n4(t,e);case`FuseAll`:case`CutAll`:return r4(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return i4(t,e);case`Compound`:return u4(e);default:return M2(`unknown node kind: ${String(t)}`)}}function q2(e,t,n){let r=z2(e[t]);return r.ok?O(n(r.value)):r}function J2(e,t){switch(e){case`Box`:return Y2(t);case`Sphere`:return q2(t,`radius`,S0);case`Cylinder`:return X2(t);case`Cone`:return Z2(t);case`Torus`:return Q2(t);case`Polygon`:return $2(t);case`Circle`:return q2(t,`radius`,D0);case`Line`:return e4(t);case`Vertex`:return q2(t,`point`,k0);case`Empty`:return t4(t)}return M2(`unhandled primitive: ${e}`)}function Y2(e){let t=z2(e.x);if(!t.ok)return t;let n=z2(e.y);if(!n.ok)return n;let r=z2(e.z);return r.ok?O(x0(t.value,n.value,r.value)):r}function X2(e){let t=z2(e.radius);if(!t.ok)return t;let n=z2(e.height);return n.ok?O(C0(t.value,n.value)):n}function Z2(e){let t=z2(e.radius1);if(!t.ok)return t;let n=z2(e.radius2);if(!n.ok)return n;let r=z2(e.height);return r.ok?O(w0(t.value,n.value,r.value)):r}function Q2(e){let t=z2(e.majorRadius);if(!t.ok)return t;let n=z2(e.minorRadius);return n.ok?O(T0(t.value,n.value)):n}function $2(e){let t=e.points;if(!Array.isArray(t))return M2(`Polygon.points: not array`);let n=[];for(let e of t){let t=z2(e);if(!t.ok)return t;n.push(t.value)}return O(E0(n))}function e4(e){let t=z2(e.from);if(!t.ok)return t;let n=z2(e.to);return n.ok?O(O0(t.value,n.value)):n}function t4(e){let t=e.output;switch(t){case`Solid`:return O(j0());case`Face`:return O(M0());case`Wire`:return O(N0());default:return M2(`Empty.output: ${String(t)}`)}}function n4(e,t){let n=K2(t.a);if(!n.ok)return n;let r=K2(t.b);if(!r.ok)return r;let i=G2(t);if(!i.ok)return i;switch(e){case`Fuse`:return O(F0(n.value,r.value,i.value));case`Cut`:return O(I0(n.value,r.value,i.value));case`Intersect`:return O(L0(n.value,r.value,i.value))}}function r4(e,t){let n=G2(t);if(!n.ok)return n;if(e===`FuseAll`){let e=W2(t.shapes,`FuseAll.shapes`);return e.ok?O(R0(e.value,n.value)):e}let r=K2(t.base);if(!r.ok)return r;let i=W2(t.tools,`CutAll.tools`);return i.ok?O(z0(r.value,i.value,n.value)):i}function i4(e,t){let n=K2(t.target);if(!n.ok)return n;switch(e){case`Translate`:return a4(t,n.value);case`Rotate`:return s4(t,n.value);case`Scale`:return c4(t,n.value);case`Mirror`:return l4(t,n.value)}}function a4(e,t){let n=z2(e.vector);return n.ok?O(V0(t,n.value)):n}function o4(e,t){if(e[t]===void 0)return O(void 0);let n=z2(e[t]);return n.ok?O(n.value):n}function s4(e,t){let n=z2(e.angle);if(!n.ok)return n;let r=o4(e,`axis`);if(!r.ok)return r;let i=o4(e,`at`);return i.ok?O(H0(t,n.value,{axis:r.value,at:i.value})):i}function c4(e,t){let n=z2(e.factor);if(!n.ok)return n;let r=o4(e,`center`);return r.ok?O(U0(t,n.value,{center:r.value})):r}function l4(e,t){let n=o4(e,`normal`);if(!n.ok)return n;let r=o4(e,`at`);return r.ok?O(W0(t,{normal:n.value,at:r.value})):r}function u4(e){let t=W2(e.children,`Compound.children`);return t.ok?O(G0(t.value)):t}function d4(e){return m4(e)}function f4(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=f4(e.a),n=f4(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return U1(t.value+n.value);case`-`:return U1(t.value-n.value);case`*`:return U1(t.value*n.value);case`/`:return U1(t.value/n.value)}return t!==e.a||n!==e.b?q1(e.op,t,n):e}case`UnaryOp`:{let t=f4(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return U1(-n);case`sin`:return U1(Math.sin(n));case`cos`:return U1(Math.cos(n));case`sqrt`:return U1(Math.sqrt(n));case`abs`:return U1(Math.abs(n))}}return t===e.arg?e:J1(e.op,t)}case`Component`:{let t=f4(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?U1(t.value[e.index]):t===e.vec?e:Y1(t,e.index)}case`BuildVec`:{let t=e.components.map(f4);return p4(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?X1(e.dim,t):e)}}}function p4(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?G1([n[0],n[1]]):W1([n[0],n[1],n[2]])}function m4(e){switch(e.kind){case`Box`:return x0(f4(e.x),f4(e.y),f4(e.z));case`Sphere`:return S0(f4(e.radius));case`Cylinder`:return C0(f4(e.radius),f4(e.height));case`Cone`:return w0(f4(e.radius1),f4(e.radius2),f4(e.height));case`Torus`:return T0(f4(e.majorRadius),f4(e.minorRadius));case`Polygon`:return E0(e.points.map(f4));case`Circle`:return D0(f4(e.radius));case`Line`:return O0(f4(e.from),f4(e.to));case`Vertex`:return k0(f4(e.point));case`Empty`:return e;case`Fuse`:return h4(e.a,e.b,e.tolerance);case`Cut`:return g4(e.a,e.b,e.tolerance);case`Intersect`:return _4(e.a,e.b,e.tolerance);case`FuseAll`:return v4(e.shapes,e.tolerance);case`CutAll`:return y4(e.base,e.tools,e.tolerance);case`Translate`:return b4(e.target,e.vector);case`Rotate`:return H0(m4(e.target),f4(e.angle),{axis:e.axis?f4(e.axis):void 0,at:e.at?f4(e.at):void 0});case`Scale`:return U0(m4(e.target),f4(e.factor),{center:e.center?f4(e.center):void 0});case`Mirror`:return W0(m4(e.target),{normal:e.normal?f4(e.normal):void 0,at:e.at?f4(e.at):void 0});case`Compound`:return G0(e.children.map(m4).filter(e=>e.kind!==`Empty`))}}function h4(e,t,n){let r=m4(e),i=m4(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:F0(r,i,n)}function g4(e,t,n){let r=m4(e),i=m4(t);return i.kind===`Empty`||r.kind===`Empty`?r:I0(r,i,n)}function _4(e,t,n){let r=m4(e),i=m4(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:L0(r,i,n)}function v4(e,t){let n=e.map(m4).filter(e=>e.kind!==`Empty`);return n.length===0?j0():n.length===1?n[0]:R0(n,t)}function y4(e,t,n){let r=m4(e);if(r.kind===`Empty`)return r;let i=t.map(m4).filter(e=>e.kind!==`Empty`);return i.length===0?r:z0(r,i,n)}function b4(e,t){let n=m4(e),r=f4(t);if(r.kind!==`Vec3Lit`)return V0(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=f4(n.vector);if(e.kind===`Vec3Lit`)return V0(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return V0(n,r)}function x4(e,t,n){return S4(e,t,n)}function S4(e,t,n){return t(e)?n:C4(e,t,n)}function C4(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 F0(S4(e.a,t,n),S4(e.b,t,n),e.tolerance);case`Cut`:return I0(S4(e.a,t,n),S4(e.b,t,n),e.tolerance);case`Intersect`:return L0(S4(e.a,t,n),S4(e.b,t,n),e.tolerance);case`FuseAll`:return R0(e.shapes.map(e=>S4(e,t,n)),e.tolerance);case`CutAll`:return z0(S4(e.base,t,n),e.tools.map(e=>S4(e,t,n)),e.tolerance);case`Translate`:return V0(S4(e.target,t,n),e.vector);case`Rotate`:return H0(S4(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return U0(S4(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return W0(S4(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return G0(e.children.map(e=>S4(e,t,n)))}}function w4(e,t){t(e);for(let n of T4(e))w4(n,t)}function T4(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 E4(e){let t=0;return w4(e,()=>{t++}),t}var D4=IJ({CSG_VERSION:()=>1,Evaluator:()=>C2,add:()=>Z1,asScalarExpr:()=>$1,asVec2Expr:()=>n0,asVec3Expr:()=>t0,binOp:()=>q1,box:()=>x0,buildVec:()=>X1,circle:()=>D0,component:()=>Y1,compound:()=>G0,cone:()=>w0,cut:()=>I0,cutAll:()=>z0,cylinder:()=>C0,emptyFace:()=>M0,emptySolid:()=>j0,emptyWire:()=>N0,foldExpr:()=>f4,forEachNode:()=>w4,fromJSON:()=>R2,fuse:()=>F0,fuseAll:()=>R0,intersect:()=>L0,line:()=>O0,mirror:()=>W0,mul:()=>Q1,nodeCount:()=>E4,numLit:()=>U1,optimize:()=>d4,outputKindOf:()=>K0,param:()=>K1,polygon:()=>E0,replaceNode:()=>x4,rotate:()=>H0,scale:()=>U0,sphere:()=>S0,toJSON:()=>T2,torus:()=>T0,translate:()=>V0,unaryOp:()=>J1,vec2Lit:()=>G1,vec3Lit:()=>W1,vertex:()=>k0,withEvaluator:()=>w2});export{pI as BaseSketcher2d,mI as BlueprintSketcher,Za as BrepBugError,N as BrepErrorCode,c$ as BrepWrapperError,yy as BrepkitAdapter,UW as CompoundSketch,i as DEFAULT_CAPABILITIES,QE as DEG2RAD,kT as DisposalScope,r as EXACT_BREP_CAPABILITIES,xG as FaceSketcher,G as HASH_CODE_MAX,Da as OK,Ea as OcctWasmAdapter,$E as RAD2DEG,iG as Sketch,bG as Sketcher,aG as Sketches,AM as addChild,CM as addHoles,sN as addJoint,qZ as addMate,HN as addStep,zA as adjacentFaces,Ia as all,ja as andThen,zJ as applyGlue,TQ as applyMatrix,sk as approximateCurve,zT as as2D,RT as as3D,AD as asTopo,pJ as assignRoles,jj as autoHeal,uM as bezier,yq as blueprintToDXF,mA as booleanPipeline,_1 as booleans,a$ as boss,Zj as box,lM as bsplineApprox,M as bug,_G as cameraFromPlane,gG as cameraLookAt,uJ as captureHint,FD as cast,W as castShape,bE as castShape3D,RQ as chamfer,jA as chamferDistAngleShape,lj as chamferWithEvolution,XZ as checkAllInterferences,ej as checkBoolean,YZ as checkInterference,iM as circle,OM as circularPattern,XD as classifyPointOnFace,_k as clearMeshCache,wQ as clone,JT as closedWire,qa as collect,IM as collectShapes,CO as colorFaces,SO as colorShape,Bj as complexExtrude,zO as composeTransforms,yM as compound,tG as compoundSketchExtrude,$W as compoundSketchFace,rG as compoundSketchLoft,nG as compoundSketchRevolve,I as computationError,uZ as computeStraightSkeleton,eM as cone,C1 as construction,WX as convexHull,yI as cornerFinder,FM as countNodes,TM as createAssembly,kM as createAssemblyNode,NK as createBlueprint,hG as createCamera,uE as createCompound,PK as createCompoundBlueprint,gP as createDistanceQuery,iE as createEdge,oE as createFace,DT as createHandle,VN as createHistory,OT as createKernelHandle,vk as createMeshCache,CD as createNamedPlane,MJ as createOperationRegistry,xD as createPlane,mJ as createRef,YN as createRegistry,sE as createShell,cE as createSolid,wJ as createTaskQueue,rE as createVertex,aE as createWire,jJ as createWorkerClient,PJ as createWorkerHandler,D4 as csg,po as currentQuality,TK as curve2dBoundingBox,MK as curve2dDistanceFrom,EK as curve2dFirstPoint,jK as curve2dIsOnCurve,DK as curve2dLastPoint,kK as curve2dParameter,OK as curve2dSplitAt,AK as curve2dTangentAt,ek as curveAxis,XO as curveEndPoint,tk as curveIsClosed,nk as curveIsPeriodic,$O as curveLength,rk as curvePeriod,ZO as curvePointAt,YO as curveStartPoint,QO as curveTangentAt,OQ as cut,aL as cut2D,rA as cutAll,GA as cutAllBisect,JI as cutBlueprints,oj as cutWithEvolution,Qj as cylinder,eN as cylindricalJoint,lJ as defaultScorer,EJ as dequeueTask,qQ as describe,QG as deserializeDrawing,tP as deserializeHistory,LD as deserializeShape,PD as downcast,HQ as draft,eK as draw,aK as drawCircle,oK as drawEllipse,pK as drawFaceOutline,uK as drawParametricFunction,lK as drawPointsInterpolation,sK as drawPolysides,fK as drawProjection,nK as drawRectangle,tK as drawRoundedRectangle,rK as drawSingleCircle,iK as drawSingleEllipse,cK as drawText,yK as drawingChamfer,gK as drawingCut,vK as drawingFillet,hK as drawingFuse,_K as drawingIntersect,mK as drawingToSketchOnPlane,r$ as drill,UP as edgeFinder,IA as edgesOfFace,aM as ellipse,cM as ellipseArc,nM as ellipsoid,TJ as enqueueTask,k as err,EM as exportAssemblySTEP,vq as exportDXF,aq as exportGlb,iq as exportGltf,Ek as exportIGES,JK as exportOBJ,wk as exportSTEP,nJ as exportSTEPConfigured,Tk as exportSTL,Rq as exportThreeMF,IN as exportURDF,QQ as extrude,Jj as extrudeAll,mM as face,YD as faceAxis,JD as faceCenter,KP as faceFinder,BD as faceGeomType,VD as faceOrientation,FA as facesOfEdge,MY as fieldBoolean,IY as fieldContour,NY as fieldOffset,FY as fieldReinit,PY as fieldShell,Gk as fill,hM as filledFace,LQ as fillet,cj as filletWithEvolution,dO as findFacesByTag,NM as findNode,WN as findStep,Pj as fixSelfIntersection,Mj as fixShape,Ma as flatMap,za as flatten,HD as flipFaceOrientation,ak as flipOrientation,cJ as fontMetrics,dN as forwardKinematics,YQ as fromBREP,jX as fromKernelDir,AX as fromKernelPnt,kX as fromKernelVec,Va as fromNullable,DQ as fuse,rL as fuse2D,nA as fuseAll,YA as fuseAllBisect,qI as fuseBlueprints,aj as fuseWithEvolution,M$ as gearGeometry,ZJ as getActiveVoxelId,KE as getBounds,FK as getBounds2D,RE as getCompSolids,JO as getCurveType,xT as getDisposalStats,ME as getEdges,TO as getFaceColor,tO as getFaceOrigins,fO as getFaceTags,NE as getFaces,cG as getFont,UO as getHashCode,GN as getHistoryShape,U as getKernel,cT as getKernelCapabilities,fT as getKernelTier,VA as getNurbsCurveData,HA as getNurbsSurfaceData,ik as getOrientation,IK as getOrientation2D,So as getPerformanceStats,wO as getShapeColor,UT as getShapeKind,LE as getShells,YP as getSingleFace,IE as getSolids,zD as getSurfaceType,mO as getTagMetadata,FE as getVertices,XJ as getVoxel,PE as getWires,Gj as guidedSweep,UQ as heal,Oj as healFace,Dj as healSolid,kj as healWire,oM as helix,UX as hull,tQ as importDXF,vQ as importGLB,aJ as importIGES,aQ as importOBJ,rJ as importSTEP,iJ as importSTL,tJ as importSVG,eJ as importSVGPathD,_Q as importThreeMF,BN as importURDF,gT as init,rT as initFromManifold,mT as initFromOC,QJ as initVoxel,$D as innerWires,ok as interpolateCurve,kQ as intersect,oL as intersect2D,YI as intersectBlueprints,sj as intersectWithEvolution,jE as invalidateShapeCache,TN as inverseKinematics,x1 as io,oo as ioError,LT as is2D,IT as is3D,VJ as isChamferRadius,WT as isClosedWire,ID as isCompSolid,_E as isCompound,xJ as isDisposeRequest,fE as isEdge,ZQ as isEmpty,KO as isEqualShape,A as isErr,CJ as isErrorResponse,mE as isFace,HJ as isFilletRadius,yJ as isInitRequest,LK as isInside2D,FT as isLive,KT as isManifoldShell,BJ as isNumber,Oa as isOk,bJ as isOperationRequest,GT as isOrientedFace,QT as isPlanarFace,$T as isPlanarWire,fG as isProjectionPlane,OJ as isQueueEmpty,GO as isSameShape,yE as isShape1D,vE as isShape3D,hE as isShell,gE as isSolid,SJ as isSuccessResponse,XQ as isValid,qT as isValidSolid,dE as isVertex,pE as isWire,GE as iterCompSolids,zE as iterEdges,BE as iterFaces,WE as iterShells,UE as iterSolids,MD as iterTopo,HE as iterVertices,VE as iterWires,DN as jointTrajectory,oN as jointTransform,AN as jointsFromDH,wE as kernelCall,TE as kernelCallRaw,EE as kernelCallScoped,P as kernelError,CX as latticeInfill,wX as latticeInfillShape,rM as line,DM as linearPattern,sG as loadFont,e$ as loft,Xj as loftAll,jG as makeBaseBox,t1 as makeExternalGear,n1 as makeInternalGear,TD as makePlane,i1 as makePlanetaryGear,mG as makeProjectedEdges,XT as manifoldShell,ka as map,Ba as mapBoth,Aa as mapErr,Ka as match,fP as measureArea,_P as measureCurvatureAt,vP as measureCurvatureAtMid,mP as measureDistance,hP as measureDistanceProps,pP as measureLength,uP as measureLinearProps,lP as measureSurfaceProps,dP as measureVolume,cP as measureVolumeProps,b1 as measurement,fN as mechanismDOF,GQ as mesh,KQ as meshEdges,Dk as meshMultiLOD,JX as minkowski,SQ as mirror,HK as mirror2D,CK as mirrorDrawing,o$ as mirrorJoin,v1 as modifiers,$N as modifyStep,ao as moduleInitError,Wj as multiSectionSweep,qD as normalAt,BQ as offset,xM as offsetFace,mY as offsetMesh,_Y as offsetShape,ck as offsetWire2D,O as ok,Na as or,Pa as orElse,rI as organiseBlueprints,YT as orientedFace,ZD as outerWire,w1 as patterns,DJ as pendingCount,Xa as pipeline,OD as pivotPlane,eE as planarFace,tN as planarJoint,tE as planarWire,X$ as planetPlacements,i$ as pocket,WD as pointOnSurface,rY as pointsInside,_M as polygon,YX as polyhedron,DG as polysideInnerRadius,bI as polysidesBlueprint,dj as positionOnCurve,hT as prewarm,g1 as primitives,$M as prismaticJoint,vG as projectEdges,KD as projectPointOnFace,S1 as query,so as queryError,s$ as rectangularPattern,NJ as registerHandler,iT as registerKernel,dT as registerKernelTier,XN as registerOperation,JN as registerShape,YJ as registerVoxel,kJ as rejectAll,jM as removeChild,QD as removeHolesFromFace,oY as repairMesh,QN as replayFrom,ZN as replayHistory,ST as resetDisposalStats,Co as resetPerformanceStats,PO as resize,$ as resolve,yQ as resolve3D,rD as resolveDirection,wD as resolvePlane,vJ as resolveRef,wK as reverseCurve,QM as revoluteJoint,$Q as revolve,vZ as roof,xQ as rotate,BK as rotate2D,xK as rotateDrawing,xI as roundedRectangleBlueprint,CQ as scale,VK as scale2D,SK as scaleDrawing,QY as sdfBox,nX as sdfCapsule,tX as sdfCone,eX as sdfCylinder,mX as sdfFieldAxialRamp,_X as sdfFieldClamp,pX as sdfFieldConst,gX as sdfFieldFromSdf,hX as sdfFieldRadialRamp,cX as sdfLattice,iX as sdfPlane,$Y as sdfRoundedBox,ZY as sdfSphere,lX as sdfStrutLattice,oX as sdfSweep,rX as sdfTorus,AQ as section,jQ as sectionToFace,eP as serializeHistory,iN as setJointValue,rN as setJointValues,eO as setShapeOrigin,pO as setTagMetadata,SM as sewShells,E$ as shape,cY as shapeToMeshInput,ND as shapeType,BA as sharedEdges,zQ as shell,hY as shellMesh,vY as shellShape,uj as shellWithEvolution,WQ as simplify,SG as sketchCircle,CG as sketchEllipse,YW as sketchExtrude,KW as sketchFace,OG as sketchFaceOffset,AG as sketchHelix,ZW as sketchLoft,GK as sketchOnFace2D,WK as sketchOnPlane2D,kG as sketchParametricFunction,EG as sketchPolysides,wG as sketchRectangle,JW as sketchRevolve,TG as sketchRoundedRectangle,XW as sketchSweep,oJ as sketchText,qW as sketchWires,io as sketcherStateError,NQ as slice,bM as solid,Nj as solidFromShell,JZ as solveAssembly,$j as sphere,nN as sphericalJoint,MQ as split,KN as stepCount,qN as stepsFrom,UK as stretch2D,gM as subFace,zj as supportExtrude,$w as supportsConstraintSketch,Qw as supportsProjection,RX as surfaceFromGrid,VX as surfaceFromImage,Rj as sweep,uO as tagFaces,dM as tangentArc,La as tap,Ra as tapErr,uG as textBlueprints,sJ as textMetrics,VQ as thicken,nP as thread,sM as threePointArc,JQ as toBREP,DA as toBufferGeometryData,OA as toGroupedBufferGeometryData,EX as toKernelVec,AA as toLODGeometryData,kA as toLineGeometryData,RK as toSVGPathD,tD as toVec2,eD as toVec3,tM as torus,TX as tpmsLattice,EQ as transformCopy,y1 as transforms,bQ as translate,zK as translate2D,bK as translateDrawing,DD as translatePlane,Ja as tryCatch,Ya as tryCatchAsync,Vj as twistExtrude,ro as typeCastError,UN as undoLast,co as unsupportedError,j as unwrap,Ga as unwrapErr,Ua as unwrapOr,Wa as unwrapOrElse,MM as updateNode,hJ as updateRoles,UD as uvBounds,GD as uvCoordinates,ZT as validSolid,L$ as validatePlanetary,F as validationError,Tj as variableFillet,iD as vecAdd,gD as vecAngle,lD as vecCross,fD as vecDistance,cD as vecDot,mD as vecEquals,hD as vecIsZero,uD as vecLength,dD as vecLengthSq,sD as vecNegate,pD as vecNormalize,_D as vecProjectToPlane,bD as vecRepr,vD as vecRotate,oD as vecScale,aD as vecSub,vM as vertex,GJ as vertexFinder,ZE as vertexPosition,RA as verticesOfEdge,gY as voxelBoolean,jY as voxelBooleanField,RY as voxelBooleanFieldShapes,yY as voxelBooleanShapes,AY as voxelField,LY as voxelFieldFromShape,PM as walkAssembly,nY as windingNumbers,fM as wire,JP as wireFinder,pM as wireLoop,LA as wiresOfFace,sT as withKernel,PX as withKernelDir,NX as withKernelPnt,MX as withKernelVec,lT as withQuality,AT as withScope,NT as withScopeResult,PT as withScopeResultAsync,pT as withTier,Fa as zipResults};
|