1(()=>{var e={10313:(e,t,n)=>{"use strict";var a=n(64700),r=n(35337),o=n(35363);function i(e){let t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(let a=0;a<e.vertices.length;a+=e.numProp)for(let r=0;r<3;r++)t[r]=Math.min(t[r],e.vertices[a+r]),n[r]=Math.max(n[r],e.vertices[a+r]);return{min:t,max:n}}let l=e=>String(e),s=e=>e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),c=e=>"#".concat(e.map(e=>Math.max(0,Math.min(255,Math.round(e))).toString(16).padStart(2,"0")).join(""),"FF");function m(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];self.postMessage(e,{transfer:t})}self.onmessage=e=>{try{var t,n;let d="three-mf"===e.data.type?function(e){if(!e.printReady)throw Error("The current result has not passed export validation.");let t=e.parts.map(e=>{let t=Float32Array.from({length:e.vertices.length/e.numProp*3},(t,n)=>e.vertices[Math.floor(n/3)*e.numProp+n%3]),n=(0,a.M8)({positions:t,indices:e.triangles},!1);return{...e,numProp:3,vertices:n.mesh.positions,triangles:n.mesh.indices}}),n=t.map(e=>'<base name="'.concat(s(e.name),'" displaycolor="').concat(c(e.color),'"/>')).join(""),m=t.map((e,t)=>'<object id="'.concat(t+2,'" type="model" pid="1" pindex="').concat(t,'">').concat(function(e){let t=[];for(let n=0;n<e.vertices.length;n+=e.numProp)t.push('<vertex x="'.concat(l(e.vertices[n]),'" y="').concat(l(e.vertices[n+1]),'" z="').concat(l(e.vertices[n+2]),'"/>'));let n=[];for(let t=0;t<e.triangles.length;t+=3)n.push('<triangle v1="'.concat(e.triangles[t],'" v2="').concat(e.triangles[t+1],'" v3="').concat(e.triangles[t+2],'"/>'));return"<mesh><vertices>".concat(t.join(""),"</vertices><triangles>").concat(n.join(""),"</triangles></mesh>")}
1(e),"</object>")).join(""),d=t.map((e,t)=>({part:e,id:t+2})).filter(e=>{let{part:t}=e;return"top"===t.group}),p=t.map((e,t)=>({part:e,id:t+2})).filter(e=>{let{part:t}=e;return"bottom"===t.group}),u=t.length+2,f=t.length+3,h=e=>e.map(e=>{let{id:t}=e;return'<component objectid="'.concat(t,'"/>')}).join(""),g=function(e){let t=i(e.topCombined),n=i(e.bottomCombined),a=t.max[0]-t.min[0],r=n.max[0]-n.min[0],o=t.max[1]-t.min[1],l=n.max[1]-n.min[1];if(a+r+14<=256&&256>=Math.max(o,l)){let e=(256-a-r-14)/2;return{top:[e-t.min[0],128-(t.min[1]+t.max[1])/2,-t.min[2]],bottom:[e+a+14-n.min[0],128-(n.min[1]+n.max[1])/2,-n.min[2]]}}if(o+l+14>256||Math.max(a,r)>256)throw Error("Both parts do not fit together on one 256 mm plate at this scale. Download the top and housing STLs for separate plates, or reduce Housing scale.");let s=(256-o-l-14)/2;return{top:[128-(t.min[0]+t.max[0])/2,s-t.min[1],-t.min[2]],bottom:[128-(n.min[0]+n.max[0])/2,s+o+14-n.min[1],-n.min[2]]}}(e),y=e=>{let[t,n,a]=e;return"1 0 0 0 1 0 0 0 1 ".concat(l(t)," ").concat(l(n)," ").concat(l(a))},v='<?xml version="1.0" encoding="UTF-8"?><model unit="millimeter" xml:lang="en-US" xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02" xmlns:BambuStudio="http://schemas.bambulab.com/package/2021"><metadata name="Title">STL Buddy Image to Clicker</metadata><metadata name="Designer">STL Buddy</metadata><metadata name="Application">BambuStudio-2.3.5</metadata><metadata name="BambuStudio:3mfVersion">1</metadata>'+'<metadata name="CreationDate">'.concat(new Date().toISOString().slice(0,10),"</metadata>")+'<resources><basematerials id="1">'.concat(n,"</basematerials>").concat(m)+'<object id="'.concat(u,'" type="model"><components>').concat(h(d),"</components></object>")+'<object id="'.concat(f,'" type="model"><components>').concat(h(p),"</components></object>")+'</resources><build><item objectid="'.concat(u,'" printable="1" transform="').concat(y(g.top),'"/>')+'<item objectid="'.concat(f,'" printable="1" transform="').concat(y(g.bottom),'"/></build></model>'),_=(e,n,a)=>'<object id="'.concat(e,'"><metadata key="name" value="').concat(n,'"/><metadata key="extruder" value="').concat(1===a.length?a[0].id-1:1,'"/>')+a.map(e=>{let{part:n,id:a}=e;return'<part id="'.concat(a,'" subtype="normal_part"><metadata key="name" value="').concat(s(n.name),'"/><metadata key="extruder" value="').concat(t.indexOf(n)+1,'"/></part>')}).join("")+"</object>",b=t.map(()=>"1").join(" "),x='<?xml version="1.0" encoding="UTF-8"?><config>'.concat(_(u,"Image Clicker Top",d)).concat(_(f,"Image Clicker Bottom",p))+'<plate><metadata key="plater_id" value="1"/><metadata key="plater_name" value="Image Clicker"/><metadata key="filament_map_mode" value="Auto For Flush"/>'+'<metadata key="filament_maps" value="'.concat(b,'"/><metadata key="filament_volume_maps" value="').concat(t.map(()=>"1").join(" "),'"/>')+'<model_instance><metadata key="object_id" value="'.concat(u,'"/><metadata key="instance_id" value="0"/><metadata key="identify_id" value="1"/></model_instance>')+'<model_instance><metadata key="object_id" value="'.concat(f,'"/><metadata key="instance_id" value="0"/><metadata key="identify_id" value="2"/></model_instance></plate></config>'),w=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{includeDefaultPrinter:n=!0,nozzleDiameter:a=.4}=t,o=r.A.printersByNozzle[String(a)];if(!o)throw Error("This nozzle does not have a compatible export profile.");if(!e.length)throw Error("The 3MF needs at least one material color.");let i=e.map(e=>{if(!/^#[\da-f]{6}([\da-f]{2})?$/i.test(e))throw Error("The 3MF contains an invalid material color.");return e.slice(0,7)}),l=structuredClone(r.A.settings);for(let e of(delete l.prime_volume,r.A.machineKeys))delete l[e];if(Object.assign(l,n?structuredClone(o.settings):{},{print_settings_id:"STL Buddy 0.20 Standard",print_compatible_printers:[],use_relative_e_distances:"1",ooze_prevention:"0",wipe_tower_x:["170"],wipe_tower_y:["10"]}),n&&(l.printer_model=o.model,l.printer_settings_id=o.name,.4!==a)){let e=Number(o.settings.max_layer_height[0]);for(let t of["layer_height","initial_layer_print_height"])l[t]=String(Math.min(Number(l[t]),e));for(let e of Object.keys(l).filter(e=>"line_width"===e||e.endsWith("_line_width"))){let t=String(l[e]);!t.endsWith("%")&&Number.isFinite(Number(t))&&(l[e]=String(Number((Number(t)*a/.4).toFixed(4))))}}for(let e of["skeleton_infill_line_width","skin_infill_line_width"]){let t=String(l[e]);t.endsWith("%")&&(l[e]=String(parseFloat(t)*a/100))}let s=e.length;for(let e of r.A.filamentArrayKeys){let t=l[e];l[e]=Array.from({length:s},(e,n)=>t[Math.min(n,t.length-1)])}for(let[e,t]of Object.entries(r.A.defaultFilament))if(Array.isArray(t)&&1===t.length){let n=l[e],a=Array.isArray(n)&&n.length?n:t;l[e]=Array.from({length:s},(e,t)=>a[Math.min(t,a.length-1)])}l.filament_colour=i,l.default_filament_colour=i,l.filament_map=i.map(()=>"1"),l.filament_self_index=i.map((e,t)=>String(t+1));let c=r.A.settings.filament_colour.length;for(let e of["inherits_group","different_settings_to_system"]){let t=r.A.settings[e];l[e]=[t[0],...Array.from({length:s},(e,n)=>t[1+Math.min(n,c-1)]),""]}return l.flush_volumes_matrix=Array.from({length:s*s},(e,t)=>{let n=Math.floor(t/s),a=t%s,o=r.A.settings.flush_volumes_matrix[n%c*c+a%c];return n===a?"0":Number(o)>0?o:"140"}),l.flush_volumes_vector=Array.from({length:2*s},(e,t)=>r.A.settings.flush_volumes_vector[t%(2*c)]),JSON.stringify(l)}(t.map(e=>c(e.color).slice(0,7)));return(0,o.L)({"[Content_Types].xml":(0,o._u)('<?xml version="1.0" encoding="UTF-8"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="model" ContentType="application/vnd.ms-package.3dmanufacturing-3dmodel+xml"/><Default Extension="config" ContentType="text/xml"/><Override PartName="/Metadata/project_settings.config" ContentType="application/json"/></Types>'),"_rels/.rels":(0,o._u)('<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Target="/3D/3dmodel.model" Id="rel0" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel"/></Relationships>'),"3D/3dmodel.model":(0,o._u)(v),"Metadata/model_settings.config":(0,o._u)(x),"Metadata/project_settings.config":(0,o._u)(w)},{level:6})}(e.data.result):(t=e.data.topStl,n=e.data.bottomStl,(0,o.L)({"image-clicker-top.stl":new Uint8Array(t),"image-clicker-bottom.stl":new Uint8Array(n)},{level:6}));m({type:"result",requestId:e.data.requestId,kind:e.data.type,bytes:d},[d.buffer])}catch(t){m({type:"error",requestId:e.data.requestId,message:t instanceof Error?t.message:String(t)})}},m({type:"ready"})},45303:(e,t,n)=>{"use strict";function a(e){let t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(let a=0;a<e.positions.length;a+=3)for(let r=0;r<3;r++)t[r]=Math.min(t[r],e.positions[a+r]),n[r]=Math.max(n[r],e.positions[a+r]);return{min:t,max:n,size:n.map((e,n)=>e-t[n]),center:n.map((e,n)=>(e+t[n])/2)}}function r(e){if(e.positions.length%3)throw Error("The model contains incomplete vertex coordinates.");if(e.positions instanceof Float64Array){let t=[],n=new Uint32Array(e.indices.length),a=new Map,r=new Map;for(let o=0;o<e.indices.length;o++){let i=e.indices[o];if(i>
1=e.positions.length/3)throw Error("The model contains an invalid triangle index.");let l=r.get(i);if(void 0===l){let n=Array.from(e.positions.subarray(3*i,3*i+3));if(n.some(e=>!Number.isFinite(e)))throw Error("The model contains invalid coordinates.");let o=n.join(",");void 0===(l=a.get(o))&&(l=t.length/3,a.set(o,l),t.push(...n)),r.set(i,l)}n[o]=l}return{positions:Float64Array.from(t),indices:n}}let t=e.positions.length/3,n=Math.min(t,e.indices.length),a=1;for(;a<2*n;)a*=2;let r=new Uint32Array(a),o=new Float32Array(3*n),i=new Uint32Array(e.positions.buffer,e.positions.byteOffset,e.positions.length),l=new Uint32Array(o.buffer),s=new Uint32Array(e.indices.length),c=new Int32Array(t).fill(-1),m=a-1,d=e=>(0x7fffffff&e)==0?0:e,p=0;for(let n=0;n<e.indices.length;n++){let a=e.indices[n];if(a>=t)throw Error("The model contains an invalid triangle index.");let u=c[a];if(u<0){let t=e.positions[3*a],n=e.positions[3*a+1],s=e.positions[3*a+2];if(!Number.isFinite(t+n+s))throw Error("The model contains invalid coordinates.");let f=d(i[3*a]),h=d(i[3*a+1]),g=d(i[3*a+2]),y=Math.imul(f^f>>>16,0x85ebca6b)^Math.imul(h^h>>>16,0xc2b2ae35)^Math.imul(g^g>>>16,0x27d4eb2d);for(y=(y^y>>>16)&m;r[y]&&(d(l[3*(u=r[y]-1)])!==f||d(l[3*u+1])!==h||d(l[3*u+2])!==g);)y=y+1&m;r[y]||(u=p++,r[y]=u+1,o[3*u]=t,o[3*u+1]=n,o[3*u+2]=s),c[a]=u}s[n]=u}return{positions:o.slice(0,3*p),indices:s}}function o(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1];if(e.indices.length<12||e.indices.length%3||!e.positions.length)throw Error("The result contains
1no usable solid.");let n=r(e),o=n.positions,i=n.indices,l=o.length/3,s=new Map,c=Int32Array.from({length:l},(e,t)=>t);if(!Number.isSafeInteger(l*l))throw Error("The mesh exceeds the exact topology-validation capacity.");let m=e=>{for(;c[e]!==e;)c[e]=c[c[e]],e=c[e];return e},d=(e,t)=>{let n=Math.min(e,t)*l+Math.max(e,t),a=e<t?1:-1,r=s.get(n);s.set(n,void 0===r?a:r===-a?2:3),c[m(t)]=m(e)},p=0;for(let e=0;e<i.length;e+=3){let t=i[e],n=i[e+1],a=i[e+2],r=o[3*t],l=o[3*t+1],s=o[3*t+2],c=o[3*n],m=o[3*n+1],u=o[3*n+2],f=o[3*a],h=o[3*a+1],g=o[3*a+2],y=c-r,v=m-l,_=u-s,b=f-r,x=h-l,w=g-s;if(t===n||n===a||t===a||v*w-_*x==0&&_*b-y*w==0&&y*x-v*b==0)throw Error("A triangle collapsed during export. Adjust the cut or quality and generate again.");p+=(r*(m*g-u*h)+l*(u*f-c*g)+s*(c*h-m*f))/6,d(t,n),d(n,a),d(a,t)}let u=0;for(let e of s.values())2!==e&&u++;if(u)throw Error(u.toLocaleString()+" surface edges are not closed and consistently oriented. Repair the source or adjust the cut; this file cannot be exported safely.");let f=0;for(let e=0;e<l;e++)c[e]===e&&f++;if(t&&1!==f)throw Error("This piece contains "+f+" disconnected surfaces. Review the openings or split it into separate parts.");if(p<=1e-8)throw Error("The model has reversed surfaces or no positive solid volume.");return{vertices:o.length/3,triangles:i.length/3,volume:p,components:f,bounds:a(n)}}n.d(t,{Nn:()=>o,O:()=>a,oE:()=>r})}},t={};function n(a){var r=t[a];if(void 0!==r)return r.exports;var o=t[a]={exports:{}},i=!0;try{e[a](o,o.exports,n),i=!1}finally{i&&delete t[a]}return o.exports}n.m=e,n.x=()=>{var e=n.O(void 0,[35363,35337,64700],()=>n(10313));return n.O(e)},(()=>{var e=[];n.O=(t,a,r,o)=>{if(a){o=o||0;for(var i=e.length;i>0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[a,r,o];return}for(var l=1/0,i=0;i<e.length;i++){for(var[a,r,o]=e[i],s=!0,c=0;c<a.length;c++)(!1&o||l>=o)&&Object.keys(n.O).every(e=>n.O[e](a[c]))?a.splice(c--,1):(s=!1,o<l&&(l=o));if(s){e.splice(i--,1);var m=r();void 0!==m&&(t=m)}}return t}})(),n.d=(e,t)=>{for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce((t,a)=>(n.f[a](e,t),t),[])),n.u=e=>35337===e?"static/chunks/"+e+"-7bf5b407bbf6f045.js":"static/chunks/"+e+"."+({35363:"16ddabfdb19296ff",64700:"4877c5bbc50713d9"})[e]+".js",n.miniCssF=e=>{},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e;n.tt=()=>(void 0===e&&(e={createScriptURL:e=>e},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("nextjs#bundler",e))),e)})(),n.tu=e=>n.tt().createScriptURL(e),n.p="/_next/",(()=>{var e={26367:1};n.f.i=(t,a)=>{e[t]||importScripts(n.tu(n.p+n.u(t)))};var t=self.webpackChunk_N_E=self.webpackChunk_N_E||[],a=t.push.bind(t);t.push=t=>{var[r,o,i]=t;for(var l in o)n.o(o,l)&&(n.m[l]=o[l]);for(i&&i(n);r.length;)e[r.pop()]=1;a(t)}})(),(()=>{var e=n.x;n.x=()=>Promise.all([35363,35337,64700].map(n.e,n)).then(e)})(),_N_E=n.x()})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.