@tscircuit/eval 0.0.415 → 0.0.417
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/dist/blob-url.js +1 -1
- package/dist/eval/index.js +9 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +9 -1
- package/dist/webworker/entrypoint.js +1 -1
- package/dist/worker.d.ts +1 -1
- package/dist/worker.js +9 -1
- package/package.json +1 -1
|
@@ -246,7 +246,7 @@ ${o}`)}catch(s){ta(`Failed to convert circuit JSON to SPICE: ${s}`);return}for(l
|
|
|
246
246
|
"${n.message}"`)});if(e.view==="pcb")return t.convertCircuitJsonToPcbSvg(this.getCircuitJson());if(e.view==="schematic")return t.convertCircuitJsonToSchematicSvg(this.getCircuitJson());throw new Error(`Invalid view: ${e.view}`)}getCoreVersion(){let[e,t,n]=K5t.version.split(".").map(Number);return`${e}.${t}.${n+1}`}async preview(e){let t=typeof e=="object"?e:{previewName:e};throw new Error("project.preview is not yet implemented")}computeSchematicGlobalTransform(){return Oi()}_computePcbGlobalTransformBeforeLayout(){return Oi()}selectAll(e){return this._guessRootComponent(),this.firstChild?.selectAll(e)??[]}selectOne(e,t){return this._guessRootComponent(),this.firstChild?.selectOne(e,t)??null}emit(e,...t){if(this._eventListeners[e])for(let n of this._eventListeners[e])n(...t)}on(e,t){this._eventListeners[e]||(this._eventListeners[e]=[]),this._eventListeners[e].push(t)}removeListener(e,t){this._eventListeners[e]&&(this._eventListeners[e]=this._eventListeners[e].filter(n=>n!==t))}enableDebug(e){typeof e=="string"?eM.default.enable(e):(e===null||e===!1)&&eM.default.disable()}getClientOrigin(){return typeof window<"u"&&window.location?window.location.origin:typeof self<"u"&&self.location?self.location.origin:""}},J5t=kh,Q5t=kh,t4t=e=>{let[t,n]=Mh.default.useState(!0),[i,r]=Mh.default.useState(null),[o,s]=Mh.default.useState(),[a,c]=Mh.default.useState();return Mh.default.useEffect(()=>{n(!0),r(null),e&&setTimeout(()=>{try{let l=new kh;l.add(e),s(l),c(l.toJson())}catch(l){r(l)}n(!1)},1)},[e]),{isLoading:t,error:i,circuit:o,circuitJson:a}},Nh=(e,t)=>(n,i)=>{let r=[];Array.isArray(t)?r.push(...t.flat()):typeof t=="object"&&r.push(...Object.values(t).flat(),...Object.keys(t));let o=s=>{if(s?.name&&s.name!==n)throw new Error(`Component name mismatch. Hook name: ${n}, Component prop name: ${s.name}`);let a={...i,...s,name:n},c=[];for(let l of r)if(a[l]){let u=`.${n} > .${l}`,h=a[l];c.push({from:u,to:h}),delete a[l]}return(0,tu.jsxs)(tu.Fragment,{children:[(0,tu.jsx)(e,{...a}),c.map((l,u)=>(0,tu.jsx)("trace",{...l},u))]})};for(let s of r)o[s]=`.${n} > .${s}`;return o},e4t=Nh(e=>(0,WH.jsx)("capacitor",{...e}),$z),n4t=e=>Nh(t=>(0,ZH.jsx)("chip",{pinLabels:e,...t}),e),i4t=Nh(e=>(0,KH.jsx)("diode",{...e}),nF),r4t=Nh(e=>(0,JH.jsx)("led",{...e}),rF),o4t=Nh(e=>(0,QH.jsx)("resistor",{...e}),Oz),s4t=new Proxy(e=>new Proxy({},{get:(t,n)=>`.${e} > .${n}`}),{get:(e,t)=>{let n=(...i)=>{let r=i[0];return new Proxy({},{get:(o,s)=>`.${t} > .${s}`})};return new Proxy(n,{get:(i,r)=>t==="net"?`net.${r}`:t==="subcircuit"?new Proxy({},{get:(o,s)=>new Proxy({},{get:(a,c)=>`subcircuit.${r} > .${s} > .${c}`})}):`.${t} > .${r}`,apply:(i,r,o)=>t==="net"?new Proxy({},{get:(s,a)=>`net.${a}`}):new Proxy({},{get:(s,a)=>{let c=`.${t} > .${a}`;return["U","J","CN"].some(u=>t.startsWith(u))?c:new Proxy(new String(c),{get:(u,h)=>typeof h=="symbol"||h==="toString"?()=>c:`.${t} > .${a} > .${h}`})}})})}});PV(xV);PV({Bug:gx});var xG=Yt(vo(),1);var eG=e=>{let t=e.match(/:[RC]_(\d{4})_/);if(t||(t=e.match(/:(SOIC-\d+|SOT-\d+|SOD-\d+|SSOP-\d+|TSSOP-\d+|QFP-\d+|QFN-\d+)/),t))return t[1]};var hM=e=>e.includes("cap")?e.replace(/cap/g,""):e;var nG=e=>{if(e){if(e.startsWith("kicad:")){let t=eG(e);return t?hM(t):e}return hM(e)}};var dM=new Map,sr=async(e,t)=>{let n=new URLSearchParams({...t,json:"true"}).toString();if(dM.has(n))return dM.get(n);let r=await(await fetch(`https://jlcsearch.tscircuit.com/${e}/list?${n}`)).json();return dM.set(n,r),r},ar=e=>e?[...e].sort((t,n)=>Number(n.is_basic??!1)-Number(t.is_basic??!1)):[],iG={findPart:async({sourceComponent:e,footprinterString:t})=>{let n=nG(t);if(e.type==="source_component"&&e.ftype==="simple_resistor"){let{resistors:i}=await sr("resistors",{resistance:e.resistance,package:n});return{jlcpcb:ar(i).map(r=>`C${r.lcsc}`).slice(0,3)}}else if(e.type==="source_component"&&e.ftype==="simple_capacitor"){let{capacitors:i}=await sr("capacitors",{capacitance:e.capacitance,package:n});return{jlcpcb:ar(i).map(r=>`C${r.lcsc}`).slice(0,3)}}else if(e.type==="source_component"&&e.ftype==="simple_pin_header"){let i;t?.includes("_p")&&(i=Number(t.split("_p")[1]));let{headers:r}=await sr("headers",i?{pitch:i,num_pins:e.pin_count,gender:e.gender}:{num_pins:e.pin_count,gender:e.gender});return{jlcpcb:ar(r).map(o=>`C${o.lcsc}`).slice(0,3)}}else if(e.type==="source_component"&&e.ftype==="simple_potentiometer"){let{potentiometers:i}=await sr("potentiometers",{resistance:e.max_resistance,package:n});return{jlcpcb:ar(i).map(r=>`C${r.lcsc}`).slice(0,3)}}else if(e.type==="source_component"&&e.ftype==="simple_diode"){let{diodes:i}=await sr("diodes",{package:n});return{jlcpcb:ar(i).map(r=>`C${r.lcsc}`).slice(0,3)}}else if(e.type==="source_component"&&e.ftype==="simple_chip"){let{chips:i}=await sr("chips",{package:n});return{jlcpcb:ar(i).map(r=>`C${r.lcsc}`).slice(0,3)}}else if(e.type==="source_component"&&e.ftype==="simple_transistor"){let{transistors:i}=await sr("transistors",{package:n,transistor_type:e.transistor_type});return{jlcpcb:ar(i).map(r=>`C${r.lcsc}`).slice(0,3)}}else if(e.type==="source_component"&&e.ftype==="simple_power_source"){let{power_sources:i}=await sr("power_sources",{voltage:e.voltage,package:n});return{jlcpcb:ar(i).map(r=>`C${r.lcsc}`).slice(0,3)}}else if(e.type==="source_component"&&e.ftype==="simple_inductor"){let{inductors:i}=await sr("inductors",{inductance:e.inductance,package:n});return{jlcpcb:ar(i).map(r=>`C${r.lcsc}`).slice(0,3)}}else if(e.type==="source_component"&&e.ftype==="simple_crystal"){let{crystals:i}=await sr("crystals",{frequency:e.frequency,load_capacitance:e.load_capacitance,package:n});return{jlcpcb:ar(i).map(r=>`C${r.lcsc}`).slice(0,3)}}else if(e.type==="source_component"&&e.ftype==="simple_mosfet"){let{mosfets:i}=await sr("mosfets",{package:n,mosfet_mode:e.mosfet_mode,channel_type:e.channel_type});return{jlcpcb:ar(i).map(r=>`C${r.lcsc}`).slice(0,3)}}else if(e.type==="source_component"&&e.ftype==="simple_resonator"){let{resonators:i}=await sr("resonators",{frequency:e.frequency,package:n});return{jlcpcb:ar(i).map(r=>`C${r.lcsc}`).slice(0,3)}}else if(e.type==="source_component"&&e.ftype==="simple_switch"){let{switches:i}=await sr("switches",{switch_type:e.type,package:n});return{jlcpcb:ar(i).map(r=>`C${r.lcsc}`).slice(0,3)}}else if(e.type==="source_component"&&e.ftype==="simple_led"){let{leds:i}=await sr("leds",{package:n});return{jlcpcb:ar(i).map(r=>`C${r.lcsc}`).slice(0,3)}}else if(e.type==="source_component"&&e.ftype==="simple_fuse"){let{fuses:i}=await sr("fuses",{package:n});return{jlcpcb:ar(i).map(r=>`C${r.lcsc}`).slice(0,3)}}return{}}};var aG=Yt(rG(),1);Z();var hG=Yt(Mn(),1),dG=Yt(Mn(),1),ji=p.tuple([p.coerce.number(),p.coerce.number()]),_4t=p.tuple([p.number(),p.number(),p.number()]),Px=p.union([ji,_4t]),cG=p.object({at:Px,size:ji,layer:p.string(),layers:p.array(p.string()),roundrect_rratio:p.number(),uuid:p.string()}).partial(),y4t=p.object({key:p.string(),val:p.string(),attributes:cG}),vx=p.object({oval:p.boolean().default(!1),width:p.number().optional(),height:p.number().optional(),offset:ji.optional()}),lG=p.object({name:p.string(),pad_type:p.enum(["thru_hole","smd","np_thru_hole","connect"]),pad_shape:p.enum(["roundrect","circle","rect","oval","trapezoid","custom"]),at:Px,drill:p.union([p.number(),p.array(p.any()),vx]).transform(e=>typeof e=="number"?{oval:!1,width:e,height:e}:"oval"in e?e:e.length===2?{oval:!1,width:Number.parseFloat(e[0]),height:Number.parseFloat(e[0]),offset:ji.parse(e[1].slice(1))}:e.length===3||e.length===4?{oval:e[0]==="oval",width:Number.parseFloat(e[1]),height:Number.parseFloat(e[2]),offset:e[3]?ji.parse(e[3].slice(1)):void 0}:e).pipe(vx),size:p.union([p.array(p.number()).length(2).transform(([e,t])=>({width:e,height:t})),p.object({width:p.number(),height:p.number()})]),layers:p.array(p.string()).optional(),roundrect_rratio:p.number().optional(),uuid:p.string().optional()}),uG=p.object({name:p.string(),pad_type:p.enum(["thru_hole","smd","np_thru_hole","connect"]),pad_shape:p.enum(["roundrect","circle","rect","oval","trapezoid","custom"]),at:Px,size:ji,drill:p.union([p.number(),p.array(p.any()),vx]).transform(e=>typeof e=="number"?{oval:!1,width:e,height:e}:"oval"in e?e:e.length===2?{oval:!1,width:Number.parseFloat(e[0]),height:Number.parseFloat(e[0]),offset:ji.parse(e[1].slice(1))}:e.length===3||e.length===4?{oval:e[0]==="oval",width:Number.parseFloat(e[1]),height:Number.parseFloat(e[2]),offset:e[3]?ji.parse(e[3].slice(1)):void 0}:e).pipe(vx).optional(),layers:p.array(p.string()).optional(),roundrect_rratio:p.number().optional(),chamfer_ratio:p.number().optional(),solder_paste_margin:p.number().optional(),solder_paste_margin_ratio:p.number().optional(),clearance:p.number().optional(),zone_connection:p.union([p.literal(0).describe("Pad is not connect to zone"),p.literal(1).describe("Pad is connected to zone using thermal relief"),p.literal(2).describe("Pad is connected to zone using solid fill")]).optional(),thermal_width:p.number().optional(),thermal_gap:p.number().optional(),uuid:p.string().optional()}),pG=p.object({font:p.object({size:ji,thickness:p.number().optional()})}).partial(),g4t=p.object({fp_text_type:p.literal("user"),text:p.string(),at:Px,layer:p.string(),uuid:p.string().optional(),effects:pG.partial()}),b4t=p.object({start:ji,mid:ji,end:ji,stroke:p.object({width:p.number(),type:p.string()}),layer:p.string(),uuid:p.string().optional()}),x4t=p.object({center:ji,end:ji,stroke:p.object({width:p.number(),type:p.string()}),fill:p.string().optional(),layer:p.string(),uuid:p.string().optional()}),v4t=p.object({pts:p.array(ji),stroke:p.object({width:p.number(),type:p.string()}).optional(),width:p.number().optional(),layer:p.string(),uuid:p.string().optional()}).transform(e=>({...e,width:void 0,stroke:e.stroke??{width:e.width}})),w4t=p.object({start:ji,end:ji,stroke:p.object({width:p.number(),type:p.string()}).optional(),width:p.number().optional(),layer:p.string(),uuid:p.string().optional()}).transform(e=>({...e,width:void 0,stroke:e.stroke??{width:e.width}})),oG=p.object({footprint_name:p.string(),version:p.string().optional(),generator:p.string().optional(),generator_version:p.string().optional(),layer:p.string(),descr:p.string().default(""),tags:p.array(p.string()).optional(),properties:p.array(y4t),fp_lines:p.array(w4t),fp_texts:p.array(g4t),fp_arcs:p.array(b4t),fp_circles:p.array(x4t).optional(),fp_polys:p.array(v4t).optional(),pads:p.array(uG),holes:p.array(lG).optional()}),wx=(e,t)=>{if(t==="effects"&&Array.isArray(e)){let n={};for(let i of e)if(i[0]==="font"){let r={};for(let o of i.slice(1))o.length===2?r[o[0].valueOf()]=Number.parseFloat(o[1].valueOf()):r[o[0].valueOf()]=o.slice(1).map(s=>Number.parseFloat(s.valueOf()));n.font=r}return pG.parse(n)}if(t==="pts")return e.map(n=>n.slice(1).map(i=>Number.parseFloat(i.valueOf())));if(t==="stroke"){let n={};for(let i of e){let r=i[0].valueOf();n[r]=wx(i.slice(1),r)}return n}return t==="at"||t==="size"||t==="start"||t==="mid"||t==="end"?(Array.isArray(e)?e:[e]).map(i=>i?.valueOf?.()??i).filter(i=>typeof i=="number"||typeof i=="string"&&/^[-+]?\d*\.?\d+(e[-+]?\d+)?$/i.test(i)).map(i=>typeof i=="number"?i:Number.parseFloat(i)):t==="tags"?e.map(n=>n.valueOf()):t==="generator_version"||t==="version"?e[0].valueOf():e.length===2?e.valueOf():t==="uuid"?Array.isArray(e)?e[0].valueOf():e.valueOf():/^[\d\.]+$/.test(e)&&!Number.isNaN(Number.parseFloat(e))?Number.parseFloat(e):Array.isArray(e)&&e.length===1?e[0].valueOf():Array.isArray(e)?e.map(n=>n.valueOf()):e},De=(e,t)=>{for(let n of e)if(Array.isArray(n)&&n[0]===t)return wx(n.slice(1),t)},fM=(0,hG.default)("kicad-mod-converter"),S4t=e=>{let t=(0,aG.default)(e),n=t[1].valueOf(),i={},r=Object.entries(oG.shape).filter(([C,I])=>I._def.typeName==="ZodString"||C==="tags").map(([C])=>C);for(let C of t.slice(2)){if(!r.includes(C[0]))continue;let I=C[0].valueOf(),k=wx(C.slice(1),I);i[I]=k}let o=t.slice(2).filter(C=>C[0]==="property").map(C=>{let I=C[1].valueOf(),k=C[2].valueOf(),P=cG.parse(C.slice(3).reduce((N,E)=>{let A=E[0].valueOf();return N[A]=wx(E.slice(1),A),N},{}));return{key:I,val:k,attributes:P}}),s=t.slice(2).filter(C=>C[0]==="pad"),a=[];for(let C of s){let I=De(C,"at"),k=De(C,"size"),P=De(C,"drill"),N=De(C,"layers");if(Array.isArray(N)?N=N.map($=>$.valueOf()):typeof N=="string"?N=[N]:N||(N=[]),!N.includes("F.Cu")){fM(`Skipping pad without F.Cu layer: layers=${N.join(", ")}`);continue}let E=De(C,"roundrect_rratio"),A=De(C,"uuid"),O={name:C[1].valueOf(),pad_type:C[2].valueOf(),pad_shape:C[3].valueOf(),at:I,drill:P,size:k,layers:N,roundrect_rratio:E,uuid:A};fM(`attempting to parse pad: ${JSON.stringify(O,null," ")}`),a.push(uG.parse(O))}let c=t.slice(2).filter(C=>C[0]==="fp_text"),l=[];for(let C of c){let I=C[2].valueOf(),k=De(C,"at"),P=De(C,"layer"),N=De(C,"uuid"),E=De(C,"effects");l.push({fp_text_type:"user",text:I,at:k,layer:P,uuid:N,effects:E})}let u=[],h=t.slice(2).filter(C=>C[0]==="fp_line");for(let C of h){let I=De(C,"start"),k=De(C,"end"),P=De(C,"stroke"),N=De(C,"layer"),E=De(C,"uuid");u.push({start:I,end:k,stroke:P,layer:N,uuid:E})}let d=[],_=t.slice(2).filter(C=>C[0]==="fp_arc");for(let C of _){let I=De(C,"start"),k=De(C,"mid"),P=De(C,"end"),N=De(C,"stroke"),E=De(C,"layer"),A=De(C,"uuid");!I||!P||!k||!N||!E||d.push({start:I,mid:k,end:P,stroke:N,layer:E,uuid:A})}let y=[],g=t.slice(2).filter(C=>C[0]==="fp_circle");for(let C of g){let I=De(C,"center"),k=De(C,"end"),P=De(C,"stroke"),N=De(C,"fill"),E=De(C,"layer"),A=De(C,"uuid");!I||!k||!P||!E||y.push({center:I,end:k,stroke:P,fill:N,layer:E,uuid:A})}let x=[],w=t.slice(2).filter(C=>C[0]==="fp_poly");for(let C of w){let I=De(C,"pts"),k=De(C,"stroke"),P=De(C,"layer"),N=De(C,"uuid");x.push({pts:I,stroke:k,layer:P,uuid:N})}let S=[];for(let C of t.slice(2)){if(C[0]!=="pad"||C[2]?.valueOf?.()!=="thru_hole")continue;let I=C[1]?.valueOf?.(),k=C[2]?.valueOf?.(),P=C[3]?.valueOf?.(),N=De(C,"at"),E=De(C,"drill"),A=De(C,"size");Array.isArray(A)&&(A[0]==="size"&&(A=A.slice(1)),A={width:Number(A[0]),height:Number(A[1])});let O=De(C,"uuid"),$=De(C,"roundrect_rratio"),B=De(C,"layers");Array.isArray(B)?B=B.map(X=>X.valueOf()):typeof B=="string"?B=[B]:B||(B=[]);let H={name:I,pad_type:k,pad_shape:P,at:N,drill:E,size:A,layers:B,roundrect_rratio:$,uuid:O};fM(`attempting to parse holes: ${JSON.stringify(H,null,2)}`),S.push(lG.parse(H))}return oG.parse({footprint_name:n,...i,properties:o,fp_lines:u,fp_texts:l,fp_arcs:d,fp_circles:y,pads:a,holes:S,fp_polys:x})};function fG(e,t,n){let i={x:(e.x+t.x)/2,y:(e.y+t.y)/2},r={x:(t.x+n.x)/2,y:(t.y+n.y)/2},o=-(e.x-t.x)/(e.y-t.y),s=-(t.x-n.x)/(t.y-n.y),a=(i.y-r.y+s*r.x-o*i.x)/(s-o),c=i.y+o*(a-i.x);return{x:a,y:c}}function mG(e,t){return Math.sqrt((e.x-t.x)**2+(e.y-t.y)**2)}function Sx(e,t){return Math.atan2(t.y-e.y,t.x-e.x)}var _G=(e,t,n)=>{let i=fG(e,t,n),r=mG(i,e),o=Sx(i,e),a=Sx(i,n)-o;return a<0&&(a+=2*Math.PI),r*a};function yG(e,t,n,i){let r=fG(e,t,n),o=mG(r,e),s=Sx(r,e),c=Sx(r,n)-s;c<0&&(c+=2*Math.PI);let l=[];for(let u=0;u<=i;u++){let h=s+u/i*c,d=r.x+o*Math.cos(h),_=r.y+o*Math.sin(h);l.push({x:d,y:_})}return l}var _m=e=>Array.isArray(e)?{x:e[0],y:e[1]}:e,mM=(e,t,n=1e-4)=>Math.abs(e.x-t.x)<n&&Math.abs(e.y-t.y)<n,P4t=e=>{let t=[],n=new Set;for(let i=0;i<e.length;i++){if(n.has(i))continue;let r=[e[i]];n.add(i);let o=e[i].end,s=!0;for(;s;){if(s=!1,r.length>1&&mM(o,r[0].start)){t.push(r);break}for(let a=0;a<e.length;a++)if(!n.has(a)){if(mM(o,e[a].start)){r.push(e[a]),n.add(a),o=e[a].end,s=!0;break}else if(mM(o,e[a].end)){e[a].type==="arc"?r.push({...e[a],reversed:!0}):r.push({...e[a],start:e[a].end,end:e[a].start}),n.add(a),o=e[a].start,s=!0;break}}if(!s){for(let a=r.length-1;a>=0;a--){let c=e.indexOf(r[a]);c!==-1&&n.delete(c)}break}}}return t},T4t=e=>{let t=[];for(let n of e)if(n.type==="line")t.push(n.start);else if(n.type==="arc"&&n.mid){let i=_G(n.start,n.mid,n.end),r=Math.max(3,Math.ceil(i)),o=yG(n.start,n.mid,n.end,r);n.reversed&&(o=o.reverse()),t.push(...o.slice(0,-1))}return t};function I4t(e){if(!Array.isArray(e))return null;let t=e.find(s=>s.layer?.toLowerCase()==="f.silks"&&(s.text?.includes("${REFERENCE}")||s.fp_text_type?.toLowerCase()==="reference"||s.text?.match(/^R\d+|C\d+|U\d+/))),n=t||e.find(s=>s.layer?.toLowerCase()==="f.fab"&&(s.text?.includes("${REFERENCE}")||s.fp_text_type?.toLowerCase()==="reference")),i=t||n;if(!i?.effects?.font?.size)return null;let[r,o]=i.effects.font.size;return o??r??1}var M4t=e=>e*Math.PI/180,_M=(e,t,n)=>{let i=M4t(n),r=Math.cos(i),o=Math.sin(i);return{x:e*r-t*o,y:e*o+t*r}},C4t=e=>{let t=[...new Map(e.map(u=>[`${u.x},${u.y}`,u])).values()];if(t.length!==4)return null;let n=t.map(u=>u.x),i=t.map(u=>u.y),r=[...new Set(n)],o=[...new Set(i)];if(r.length!==2||o.length!==2)return null;let[s,a]=r.sort((u,h)=>u-h),[c,l]=o.sort((u,h)=>u-h);return s===void 0||a===void 0||c===void 0||l===void 0?null:{x:(s+a)/2,y:(c+l)/2,width:a-s,height:l-c}},sG=e=>e&&Array.isArray(e)&&e.length>=3&&typeof e[2]=="number"?e[2]:0,uo=e=>{let t=(e%360+360)%360;return t===90||t===270},Ah=(0,dG.default)("kicad-mod-converter"),ls=e=>{switch(e.toLowerCase()){case"f.cu":case"f.fab":case"f.silks":case"edge.cuts":return"top";case"b.cu":case"b.fab":case"b.silks":return"bottom"}},E4t=async e=>{let{fp_lines:t,fp_texts:n,fp_arcs:i,fp_circles:r,pads:o,properties:s,holes:a,fp_polys:c}=e,l=[];l.push({type:"source_component",source_component_id:"source_component_0",supplier_part_numbers:{}}),l.push({type:"schematic_component",schematic_component_id:"schematic_component_0",source_component_id:"source_component_0",center:{x:0,y:0},rotation:0,size:{width:0,height:0}});let u=new Set;for(let V of o)V.name&&u.add(V.name);if(a)for(let V of a)V.name&&u.add(V.name);let h=0,d=new Map;for(let V of u){let ot=`source_port_${h++}`;d.set(V,ot),l.push({type:"source_port",source_port_id:ot,source_component_id:"source_component_0",name:V,port_hints:[V]}),l.push({type:"schematic_port",schematic_port_id:`schematic_port_${h++}`,source_port_id:ot,schematic_component_id:"schematic_component_0",center:{x:0,y:0}})}let _=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,g=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;for(let V of o){let ot=V.at[0],K=-V.at[1],it=V.size[0],pt=V.size[1];_=Math.min(_,ot-it/2),y=Math.max(y,ot+it/2),g=Math.min(g,K-pt/2),x=Math.max(x,K+pt/2)}let w="pcb_component_0";l.push({type:"pcb_component",source_component_id:"source_component_0",pcb_component_id:w,layer:"top",center:{x:0,y:0},rotation:0,width:Number.isFinite(_)?y-_:0,height:Number.isFinite(g)?x-g:0});let S=0,C=new Map;for(let V of u){let ot=`pcb_port_${S++}`,K=d.get(V);C.set(V,ot);let it=0,pt=0,ft=["top","bottom"],xt=o.find(It=>It.name===V);if(xt)it=xt.at[0],pt=-xt.at[1],ft=xt.layers?xt.layers.map(It=>ls(It)).filter(Boolean):["top","bottom"];else if(a){let It=a.find(ut=>ut.name===V);It&&(it=It.at[0],pt=-It.at[1],ft=It.layers?It.layers.map(ut=>ls(ut)).filter(Boolean):["top","bottom"])}l.push({type:"pcb_port",pcb_port_id:ot,source_port_id:K,pcb_component_id:w,x:it,y:pt,layers:ft})}let I=0,k=0,P=0;for(let V of o)if(V.pad_type==="smd"){let ot=V.name?C.get(V.name):void 0;l.push({type:"pcb_smtpad",pcb_smtpad_id:`pcb_smtpad_${I++}`,shape:"rect",x:V.at[0],y:-V.at[1],width:V.size[0],height:V.size[1],layer:ls(V.layers?.[0]??"F.Cu"),pcb_component_id:w,port_hints:[V.name],pcb_port_id:ot})}else if(V.pad_type==="thru_hole"){if(V.pad_shape==="rect"){let ot=sG(V.at),K=uo(ot)?V.size[1]:V.size[0],it=uo(ot)?V.size[0]:V.size[1],pt=V.drill?.offset?.[0]??0,ft=V.drill?.offset?.[1]??0,xt=_M(pt,ft,ot),It=V.name?C.get(V.name):void 0;l.push({type:"pcb_plated_hole",pcb_plated_hole_id:`pcb_plated_hole_${k++}`,shape:"circular_hole_with_rect_pad",hole_shape:"circle",pad_shape:"rect",x:V.at[0],y:-V.at[1],hole_offset_x:xt.x,hole_offset_y:-xt.y,hole_diameter:V.drill?.width,rect_pad_width:K,rect_pad_height:it,layers:["top","bottom"],pcb_component_id:w,port_hints:[V.name],pcb_port_id:It})}else if(V.pad_shape==="circle"){let ot=V.name?C.get(V.name):void 0;l.push({type:"pcb_plated_hole",pcb_plated_hole_id:`pcb_plated_hole_${k++}`,shape:"circle",x:V.at[0],y:-V.at[1],outer_diameter:V.size[0],hole_diameter:V.drill?.width,layers:["top","bottom"],pcb_component_id:w,port_hints:[V.name],pcb_port_id:ot})}else if(V.pad_shape==="oval"){let ot=V.name?C.get(V.name):void 0;l.push({type:"pcb_plated_hole",pcb_plated_hole_id:`pcb_plated_hole_${k++}`,shape:"pill",x:V.at[0],y:-V.at[1],outer_width:V.size[0],outer_height:V.size[1],hole_width:V.drill?.width,hole_height:V.drill?.height,layers:["top","bottom"],pcb_component_id:w,port_hints:[V.name],pcb_port_id:ot})}}else V.pad_type==="np_thru_hole"&&l.push({type:"pcb_hole",pcb_hole_id:`pcb_hole_${P++}`,x:V.at[0],y:-V.at[1],hole_diameter:V.drill?.width,pcb_component_id:w});if(a)for(let V of a){let ot=V.layers?.some(J=>J.endsWith(".Cu")||J==="*.Cu"),K=sG(V.at),it=V.drill?.offset?.[0]??0,pt=V.drill?.offset?.[1]??0,ft=_M(it,pt,K),xt=V.at[0]+ft.x,It=-(V.at[1]+ft.y),ut=V.drill?.width??0,j=V.size?.width??ut,U=V.roundrect_rratio??0,rt=U>0?Math.min(uo(K)?V.size?.height??j:V.size?.width??j,uo(K)?V.size?.width??j:V.size?.height??j)/2*U:0;if(ot)if(V.pad_shape==="rect"){let J=V.name?C.get(V.name):void 0;l.push({type:"pcb_plated_hole",pcb_plated_hole_id:`pcb_plated_hole_${k++}`,shape:"circular_hole_with_rect_pad",hole_shape:"circle",pad_shape:"rect",x:V.at[0],y:-V.at[1],hole_offset_x:ft.x,hole_offset_y:-ft.y,hole_diameter:ut,rect_pad_width:uo(K)?V.size?.height??j:V.size?.width??j,rect_pad_height:uo(K)?V.size?.width??j:V.size?.height??j,rect_border_radius:rt,port_hints:[V.name],layers:["top","bottom"],pcb_component_id:w,pcb_port_id:J})}else if(V.pad_shape==="oval"){let J=V.name?C.get(V.name):void 0;l.push({type:"pcb_plated_hole",pcb_plated_hole_id:`pcb_plated_hole_${k++}`,shape:"pill",x:xt,y:It,outer_width:uo(K)?V.size?.height??j:V.size?.width??j,outer_height:uo(K)?V.size?.width??j:V.size?.height??j,hole_width:uo(K)?V.drill?.height??ut:V.drill?.width??ut,hole_height:uo(K)?V.drill?.width??ut:V.drill?.height??ut,port_hints:[V.name],layers:["top","bottom"],pcb_component_id:w,pcb_port_id:J})}else if(V.pad_shape==="roundrect"){let J=V.name?C.get(V.name):void 0,tt=V.drill?.offset?.[0]??0,lt=V.drill?.offset?.[1]??0,Tt=_M(tt,lt,K),Lt=uo(K)?V.size?.height??j:V.size?.width??j,ee=uo(K)?V.size?.width??j:V.size?.height??j;l.push({type:"pcb_plated_hole",pcb_plated_hole_id:`pcb_plated_hole_${k++}`,shape:"circular_hole_with_rect_pad",hole_shape:"circle",pad_shape:"rect",x:xt,y:It,hole_offset_x:Tt.x,hole_offset_y:-Tt.y,hole_diameter:ut,rect_pad_width:Lt,rect_pad_height:ee,rect_border_radius:rt,port_hints:[V.name],layers:["top","bottom"],pcb_component_id:w,pcb_port_id:J})}else{let J=V.name?C.get(V.name):void 0;l.push({type:"pcb_plated_hole",pcb_plated_hole_id:`pcb_plated_hole_${k++}`,shape:"circle",x:xt,y:It,outer_diameter:j,hole_diameter:ut,port_hints:[V.name],layers:["top","bottom"],pcb_component_id:w,pcb_port_id:J})}else l.push({type:"pcb_hole",pcb_hole_id:`pcb_hole_${P++}`,x:xt,y:It,hole_diameter:j,hole_shape:"circle",pcb_component_id:w})}let N=[];for(let V of t)V.layer.toLowerCase()==="edge.cuts"&&N.push({type:"line",start:{x:V.start[0],y:V.start[1]},end:{x:V.end[0],y:V.end[1]},strokeWidth:V.stroke.width});for(let V of i)V.layer.toLowerCase()==="edge.cuts"&&N.push({type:"arc",start:{x:V.start[0],y:V.start[1]},mid:{x:V.mid[0],y:V.mid[1]},end:{x:V.end[0],y:V.end[1]},strokeWidth:V.stroke.width});let E=P4t(N),A=0;for(let V of E){let ot=T4t(V);ot.length>=3&&l.push({type:"pcb_cutout",pcb_cutout_id:`pcb_cutout_${A++}`,shape:"polygon",points:ot.map(K=>({x:K.x,y:-K.y})),pcb_component_id:w})}let O=0,$=0,B=0,H=0;for(let V of t){let ot=[{x:V.start[0],y:-V.start[1]},{x:V.end[0],y:-V.end[1]}],K=V.layer.toLowerCase();K==="f.cu"?l.push({type:"pcb_trace",pcb_trace_id:`pcb_trace_${O++}`,pcb_component_id:w,layer:ls(V.layer),route:ot,thickness:V.stroke.width}):K==="f.silks"?l.push({type:"pcb_silkscreen_path",pcb_silkscreen_path_id:`pcb_silkscreen_path_${$++}`,pcb_component_id:w,layer:"top",route:ot,stroke_width:V.stroke.width}):K==="edge.cuts"?Ah("Skipping Edge.Cuts fp_line (converted to pcb_cutout)",V.layer):K==="f.fab"?l.push({type:"pcb_fabrication_note_path",fabrication_note_path_id:`fabrication_note_path_${B++}`,pcb_component_id:w,layer:"top",route:ot,stroke_width:V.stroke.width,port_hints:[]}):K.startsWith("user.")?l.push({type:"pcb_note_line",pcb_note_line_id:`pcb_note_line_${H++}`,pcb_component_id:w,x1:V.start[0],y1:-V.start[1],x2:V.end[0],y2:-V.end[1],stroke_width:V.stroke.width}):Ah("Unhandled layer for fp_line",V.layer)}if(c)for(let V of c){let ot=V.pts.map(K=>({x:K[0],y:-K[1]}));if(V.layer.endsWith(".Cu")){let K=C4t(ot);K?l.push({type:"pcb_smtpad",pcb_smtpad_id:`pcb_smtpad_${I++}`,shape:"rect",x:K.x,y:K.y,width:K.width,height:K.height,layer:ls(V.layer),pcb_component_id:w}):l.push({type:"pcb_trace",pcb_trace_id:`pcb_trace_${O++}`,pcb_component_id:w,layer:ls(V.layer),route:ot,thickness:V.stroke.width})}else V.layer.endsWith(".SilkS")?l.push({type:"pcb_silkscreen_path",pcb_silkscreen_path_id:`pcb_silkscreen_path_${$++}`,pcb_component_id:w,layer:ls(V.layer),route:ot,stroke_width:V.stroke.width}):V.layer.endsWith(".Fab")?l.push({type:"pcb_fabrication_note_path",fabrication_note_path_id:`fabrication_note_path_${B++}`,pcb_component_id:w,layer:ls(V.layer),route:ot,stroke_width:V.stroke.width,port_hints:[]}):Ah("Unhandled layer for fp_poly",V.layer)}let X=0;for(let V of i){let ot=V.layer.toLowerCase();if(ot==="edge.cuts"){Ah("Skipping Edge.Cuts fp_arc (converted to pcb_cutout)",V.layer);continue}let K=_m(V.start),it=_m(V.mid),pt=_m(V.end),ft=_G(K,it,pt),xt=yG(K,it,pt,Math.ceil(ft));if(ot.startsWith("user.")){l.push({type:"pcb_note_path",pcb_note_path_id:`pcb_note_path_${X++}`,pcb_component_id:w,route:xt.map(ut=>({x:ut.x,y:-ut.y})),stroke_width:V.stroke.width});continue}let It=ls(V.layer);if(!It){Ah("Unable to convert layer for fp_arc",V.layer);continue}l.push({type:"pcb_silkscreen_path",pcb_silkscreen_path_id:`pcb_silkscreen_path_${$++}`,layer:It,pcb_component_id:w,route:xt.map(ut=>({x:ut.x,y:-ut.y})),stroke_width:V.stroke.width})}if(r)for(let V of r){let ot=V.layer.toLowerCase(),K=_m(V.center),it=_m(V.end),pt=Math.sqrt((it.x-K.x)**2+(it.y-K.y)**2),ft=Math.max(16,Math.ceil(2*Math.PI*pt)),xt=[];for(let It=0;It<=ft;It++){let ut=It/ft*2*Math.PI;xt.push({x:K.x+pt*Math.cos(ut),y:K.y+pt*Math.sin(ut)})}ot.startsWith("user.")&&l.push({type:"pcb_note_path",pcb_note_path_id:`pcb_note_path_${X++}`,pcb_component_id:w,route:xt.map(It=>({x:It.x,y:-It.y})),stroke_width:V.stroke.width})}for(let V of n){let ot=ls(V.layer);V.layer.endsWith(".SilkS")?l.push({type:"pcb_silkscreen_text",layer:ot,font:"tscircuit2024",font_size:V.effects?.font?.size[0]??1,pcb_component_id:w,anchor_position:{x:V.at[0],y:-V.at[1]},anchor_alignment:"center",text:V.text}):V.layer.endsWith(".Fab")?l.push({type:"pcb_fabrication_note_text",layer:ot,font:"tscircuit2024",font_size:V.effects?.font?.size[0]??1,pcb_component_id:w,anchor_position:{x:V.at[0],y:-V.at[1]},anchor_alignment:"center",text:V.text}):Ah("Unhandled layer for fp_text",V.layer)}let q=s.find(V=>V.key==="Reference"),nt=s.find(V=>V.key==="Value"),Q=[q,nt].filter(V=>V&&!!V.val);for(let V of Q){let ot=V.attributes.at;if(!ot)continue;let it=V.attributes.layer?.toLowerCase()?.endsWith(".fab"),pt=I4t(n);l.push({type:it?"pcb_fabrication_note_text":"pcb_silkscreen_text",layer:"top",font:"tscircuit2024",font_size:pt,pcb_component_id:w,anchor_position:{x:ot[0],y:-ot[1]},anchor_alignment:"center",text:V.val})}return l},gG=async e=>{let t=S4t(e);return await E4t(t)};var k4t="https://kicad-mod-cache.tscircuit.com",bG=()=>({partsEngine:iG,footprintLibraryMap:{kicad:async e=>{let t=`${k4t}/${e}`,n=`${t}.circuit.json`,r=await(await fetch(n)).json(),o=Array.isArray(r)?r.filter(a=>a?.type==="pcb_silkscreen_text"?a?.text==="REF**":!0):r,s=`${t}.wrl`;return{footprintCircuitJson:o,cadModel:{wrlUrl:s,modelUnitToMmScale:2.54}}}},footprintFileParserMap:{kicad_mod:{loadFromUrl:async e=>{let t=await fetch(e).then(i=>i.text()),n=await gG(t);return{footprintCircuitJson:Array.isArray(n)?n:[n]}}}}});var yM=Yt(Mn(),1),ine=(0,yM.default)("tsci:eval:execution-context");function Tx(e,t={}){globalThis.React=xG;let n=t.platform||bG(),i=t.projectConfig?{...n,...t.projectConfig}:n,r=new kh({platform:i});t.name&&(r.name=t.name),t.debugNamespace&&r.enableDebug(t.debugNamespace);let o=[];return{fsMap:{},entrypoint:"",logger:{info:s=>{o.push({msg:s})},getLogs:()=>o,stringifyLogs:()=>o.map(s=>s.msg).join(`
|
|
247
247
|
`)},preSuppliedImports:{"@tscircuit/core":bx,tscircuit:bx,"@tscircuit/math-utils":m4,react:xG,debug:yM.default,"@tscircuit/props":{}},circuit:r,tsConfig:null,importStack:[],currentlyImporting:new Set,...e}}function vc(e){let t=e;return t=t.replace(/\\/g,"/"),t=t.trim(),t.startsWith("./")&&(t=t.slice(2)),t.startsWith("/")&&(t=t.slice(1)),t}function vG(e){let t={};for(let[n,i]of Object.entries(e))t[vc(n)]=i;return t}function No(e){if(!e)return".";let n=e.replace(/\\/g,"/").replace(/\/+$/,"");return n.indexOf("/")===-1?".":n.substring(0,n.lastIndexOf("/"))||"/"}function Ix(e,t){if(e.startsWith("../")){let n=No(t);return Ix(e.slice(3),n)}return e.startsWith("./")?Ix(e.slice(2),t):e.startsWith("/")?e.slice(1):`${t}/${e}`}function ym(e){if(Array.isArray(e))return null;let t=e["tsconfig.json"];if(!t)return null;try{let n=t.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,"");return JSON.parse(n)}catch(n){throw new Error(`Failed to parse tsconfig.json: ${n.message}`)}}function wG(e){let{importPath:t,normalizedFilePathMap:n,extensions:i,tsConfig:r}=e,o=r?.compilerOptions?.paths;if(!o)return null;let s=r?.compilerOptions?.baseUrl||".",a=l=>{let u=vc(l);if(n.has(u))return n.get(u);for(let h of i){let d=`${u}.${h}`;if(n.has(d))return n.get(d)}return null};for(let[l,u]of Object.entries(o))if(l.includes("*")){let[d,_]=l.split("*");if(!t.startsWith(d)||!t.endsWith(_||""))continue;let y=t.slice(d.length,t.length-(_?_.length:0));for(let g of u){let x=g.replace("*",y),w=s&&!x.startsWith("./")&&!x.startsWith("/")?`${s}/${x}`:x,S=a(w);if(S)return S}}else{if(t!==l)continue;for(let d of u){let _=s&&!d.startsWith("./")&&!d.startsWith("/")?`${s}/${d}`:d,y=a(_);if(y)return y}}let c=gM({importPath:t,normalizedFilePathMap:n,extensions:i,tsConfig:r});return c||null}function gM(e){let{importPath:t,normalizedFilePathMap:n,extensions:i,tsConfig:r}=e,o=r?.compilerOptions?.baseUrl;if(!o)return null;let s=`${o}/${t}`,a=vc(s);if(n.has(a))return n.get(a);for(let c of i){let l=`${a}.${c}`;if(n.has(l))return n.get(l)}return null}function SG(e,t){let n=t?.compilerOptions?.paths;if(!n)return!1;for(let[i]of Object.entries(n))if(i.includes("*")){let[o,s]=i.split("*");if(e.startsWith(o)&&e.endsWith(s||""))return!0}else if(e===i)return!0;return!1}var gm=(e,t,n,i={})=>{let r=n?Ix(e,n):e,o=new Set(Array.isArray(t)?t:Object.keys(t));if(o.has(r))return r;let s=new Map;for(let u of o)s.set(vc(u),u);let a=vc(r);if(s.has(a))return s.get(a);let c=["tsx","ts","json","js","jsx","obj","gltf","glb"];for(let u of c){let h=`${a}.${u}`;if(s.has(h))return s.get(h)}let l=i.tsConfig??null;if(!e.startsWith("./")&&!e.startsWith("../")){let u=wG({importPath:e,normalizedFilePathMap:s,extensions:c,tsConfig:l});if(u)return u;let h=gM({importPath:e,normalizedFilePathMap:s,extensions:c,tsConfig:l});if(h)return h}if(!e.startsWith("./")&&!e.startsWith("../")){let u=vc(e);if(s.has(u))return s.get(u);for(let h of c){let d=`${u}.${h}`;if(s.has(d))return s.get(d)}}return null},Mx=(e,t,n,i={})=>{let r=gm(e,t,n,i);if(!r)throw new Error(`File not found "${e}", available paths:
|
|
248
248
|
|
|
249
|
-
${Object.keys(t).join(", ")}`);return r};var Cx=e=>{let t=/^\s*import\s+(?:(?:[\w\s]+,\s*)?(?:\*\s+as\s+[\w\s]+|\{[\s\w,]+\}|\w+)\s+from\s*)?['"](.+?)['"]/gm,n=[],i;for(;(i=t.exec(e))!==null;)n.push(i[1])
|
|
249
|
+
${Object.keys(t).join(", ")}`);return r};var Cx=e=>{let t=/^\s*import\s+(?:(?:[\w\s]+,\s*)?(?:\*\s+as\s+[\w\s]+|\{[\s\w,]+\}|\w+)\s+from\s*)?['"](.+?)['"]/gm,n=[],i;for(;(i=t.exec(e))!==null;){let s=i[0];/^\s*import\s+type\b/.test(s)||n.push(i[1])}let r=/^\s*export\s+(?:type\s+)?(?:\*\s+as\s+[\w$]+|\*|\{[^}]+\})\s+from\s*['"](.+?)['"]/gm,o;for(;(o=r.exec(e))!==null;){let s=o[0];/^\s*export\s+type\b/.test(s)||n.push(o[1])}return n};function nu(e,t,n){globalThis.__tscircuit_require=r=>{let o=gm(r,t,n),s=o&&t[o];if(!t[r]&&!s)throw new Error(`Import "${r}" not found ${n?`in "${n}"`:""}`);let a=t[r]||t[o];return new Proxy(a,{get(c,l){if(!(l in c)){if(l==="default")return c.default!==void 0?c.default:c.__esModule?void 0:typeof c=="function"||typeof c=="object"?c:void 0;if(l==="__esModule")return!0;throw new Error(`Component "${String(l)}" is not exported by "${r}"`)}return c[l]}})};let i=`
|
|
250
250
|
var exports = {};
|
|
251
251
|
var require = globalThis.__tscircuit_require;
|
|
252
252
|
var module = { exports };
|
package/dist/worker.d.ts
CHANGED
|
@@ -38,7 +38,7 @@ type CircuitWebWorker = {
|
|
|
38
38
|
renderUntilSettled: () => Promise<void>;
|
|
39
39
|
getCircuitJson: () => Promise<AnyCircuitElement[]>;
|
|
40
40
|
on: (event: RootCircuitEventName, callback: (...args: any[]) => void) => void;
|
|
41
|
-
clearEventListeners: () => void
|
|
41
|
+
clearEventListeners: () => Promise<void>;
|
|
42
42
|
enableDebug: (namespace: string) => Promise<void>;
|
|
43
43
|
version: () => Promise<string>;
|
|
44
44
|
kill: () => Promise<void>;
|
package/dist/worker.js
CHANGED
|
@@ -7,11 +7,19 @@ var getImportsFromCode = (code) => {
|
|
|
7
7
|
const imports = [];
|
|
8
8
|
let match;
|
|
9
9
|
while ((match = importRegex.exec(code)) !== null) {
|
|
10
|
+
const fullMatch = match[0];
|
|
11
|
+
if (/^\s*import\s+type\b/.test(fullMatch)) {
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
10
14
|
imports.push(match[1]);
|
|
11
15
|
}
|
|
12
16
|
const reExportRegex = /^\s*export\s+(?:type\s+)?(?:\*\s+as\s+[\w$]+|\*|\{[^}]+\})\s+from\s*['"](.+?)['"]/gm;
|
|
13
17
|
let reExportMatch;
|
|
14
18
|
while ((reExportMatch = reExportRegex.exec(code)) !== null) {
|
|
19
|
+
const fullMatch = reExportMatch[0];
|
|
20
|
+
if (/^\s*export\s+type\b/.test(fullMatch)) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
15
23
|
imports.push(reExportMatch[1]);
|
|
16
24
|
}
|
|
17
25
|
return imports;
|
|
@@ -215,4 +223,4 @@ export {
|
|
|
215
223
|
createCircuitWebWorker,
|
|
216
224
|
getImportsFromCode
|
|
217
225
|
};
|
|
218
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbGliL3dvcmtlci50cyIsICIuLi9saWIvdXRpbHMvZ2V0LWltcG9ydHMtZnJvbS1jb2RlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgKiBhcyBDb21saW5rIGZyb20gXCJjb21saW5rXCJcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL2luZGV4XCJcbmltcG9ydCB0eXBlIHtcbiAgSW50ZXJuYWxXZWJXb3JrZXJBcGksXG4gIFdlYldvcmtlckNvbmZpZ3VyYXRpb24sXG4gIENpcmN1aXRXZWJXb3JrZXIsXG59IGZyb20gXCIuL3NoYXJlZC90eXBlc1wiXG5pbXBvcnQgdHlwZSB7IFJvb3RDaXJjdWl0RXZlbnROYW1lIH0gZnJvbSBcIi4vc2hhcmVkL3R5cGVzXCJcblxuZXhwb3J0IHR5cGUgeyBDaXJjdWl0V2ViV29ya2VyLCBXZWJXb3JrZXJDb25maWd1cmF0aW9uIH1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBUU0NJUkNVSVRfR0xPQkFMX0NJUkNVSVRfV09SS0VSOiBDaXJjdWl0V2ViV29ya2VyIHwgdW5kZWZpbmVkXG4gIH1cbiAgdmFyIFRTQ0lSQ1VJVF9HTE9CQUxfQ0lSQ1VJVF9XT1JLRVI6IENpcmN1aXRXZWJXb3JrZXIgfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNpcmN1aXRXZWJXb3JrZXIgPSBhc3luYyAoXG4gIGNvbmZpZ3VyYXRpb246IFBhcnRpYWw8V2ViV29ya2VyQ29uZmlndXJhdGlvbj4sXG4pOiBQcm9taXNlPENpcmN1aXRXZWJXb3JrZXI+ID0+IHtcbiAgLy8gS2lsbCBleGlzdGluZyBnbG9iYWwgd29ya2VyIGluc3RhbmNlIGlmIHByZXNlbnRcbiAgY29uc3QgZXhpc3RpbmdXb3JrZXIgPSBnbG9iYWxUaGlzLlRTQ0lSQ1VJVF9HTE9CQUxfQ0lSQ1VJVF9XT1JLRVJcbiAgaWYgKGV4aXN0aW5nV29ya2VyICYmIHR5cGVvZiBleGlzdGluZ1dvcmtlci5raWxsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBpZiAoY29uZmlndXJhdGlvbi52ZXJib3NlKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIltXb3JrZXJdIEtpbGxpbmcgcHJldmlvdXMgZ2xvYmFsIHdvcmtlciBpbnN0YW5jZS4uLlwiKVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhpc3RpbmdXb3JrZXIua2lsbCgpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGNvbmZpZ3VyYXRpb24udmVyYm9zZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJbV29ya2VyXSBFcnJvciBraWxsaW5nIHByZXZpb3VzIGdsb2JhbCB3b3JrZXIgaW5zdGFuY2U6XCIsXG4gICAgICAgICAgZSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgLy8gRW5zdXJlIHRoZSBrZXkgaXMgY2xlYXJlZCBldmVuIGlmIGtpbGwgdGhyb3dzIGFuIGVycm9yXG4gICAgICBpZiAoZ2xvYmFsVGhpcy5UU0NJUkNVSVRfR0xPQkFMX0NJUkNVSVRfV09SS0VSID09PSBleGlzdGluZ1dvcmtlcikge1xuICAgICAgICBnbG9iYWxUaGlzLlRTQ0lSQ1VJVF9HTE9CQUxfQ0lSQ1VJVF9XT1JLRVIgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoY29uZmlndXJhdGlvbi52ZXJib3NlKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBcIltXb3JrZXJdIENyZWF0aW5nIGNpcmN1aXQgd2ViIHdvcmtlciB3aXRoIGNvbmZpZzpcIixcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgKVxuICB9XG5cbiAgbGV0IHdvcmtlckJsb2JVcmwgPVxuICAgIGNvbmZpZ3VyYXRpb24ud2ViV29ya2VyQmxvYlVybCA/PyBjb25maWd1cmF0aW9uLndlYldvcmtlclVybFxuXG4gIGlmICghd29ya2VyQmxvYlVybCkge1xuICAgIGNvbnN0IGNkblVybCA9IGBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0B0c2NpcmN1aXQvZXZhbEAke2NvbmZpZ3VyYXRpb24uZXZhbFZlcnNpb24gPz8gXCJsYXRlc3RcIn0vZGlzdC93ZWJ3b3JrZXIvZW50cnlwb2ludC5qc2BcblxuICAgIGNvbnN0IHdvcmtlckJsb2IgPSBhd2FpdCBnbG9iYWxUaGlzLmZldGNoKGNkblVybCkudGhlbigocmVzKSA9PiByZXMuYmxvYigpKVxuICAgIHdvcmtlckJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHdvcmtlckJsb2IpXG4gIH1cblxuICBjb25zdCByYXdXb3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlckJsb2JVcmwsIHsgdHlwZTogXCJtb2R1bGVcIiB9KVxuICBsZXQgd29ya2VySW5pdEVycm9yOiBhbnlcbiAgcmF3V29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCAoZXZlbnQpID0+IHtcbiAgICBjb25zb2xlLmVycm9yKFwiW1dvcmtlcl0gRXJyb3IgaW4gd29ya2VyXCIsIGV2ZW50KVxuICAgIHdvcmtlckluaXRFcnJvciA9IGV2ZW50XG4gIH0pXG4gIHJhd1dvcmtlci5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIChldmVudCkgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbV29ya2VyXSBVbmhhbmRsZWQgcmVqZWN0aW9uIGluIHdvcmtlclwiLCBldmVudClcbiAgfSlcbiAgcmF3V29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlZXJyb3JcIiwgKGV2ZW50KSA9PiB7XG4gICAgY29uc29sZS5lcnJvcihcIltXb3JrZXJdIE1lc3NhZ2UgZXJyb3IgaW4gd29ya2VyXCIsIGV2ZW50KVxuICB9KVxuICBjb25zdCBlYXJseU1lc3NhZ2VIYW5kbGVyID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgICBjb25zb2xlLmxvZyhcIltXb3JrZXJdIE1lc3NhZ2UgaW4gd29ya2VyXCIsIGV2ZW50KVxuICB9XG4gIHJhd1dvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBlYXJseU1lc3NhZ2VIYW5kbGVyKVxuXG4gIC8vIEhhbmRsZSBmZXRjaCByZXF1ZXN0cyBmcm9tIHRoZSB3b3JrZXJcbiAgcmF3V29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGFzeW5jIChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGFcbiAgICBpZiAoZGF0YT8udHlwZSAhPT0gXCJ3b3JrZXJfZmV0Y2hcIikgcmV0dXJuXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBnbG9iYWxUaGlzLmZldGNoKGRhdGEuaW5wdXQsIGRhdGEuaW5pdClcbiAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZXNwb25zZS50ZXh0KClcbiAgICAgIHJhd1dvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICAgIHR5cGU6IFwid29ya2VyX2ZldGNoX3Jlc3VsdFwiLFxuICAgICAgICByZXF1ZXN0SWQ6IGRhdGEucmVxdWVzdElkLFxuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgICBoZWFkZXJzOiAoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2JqOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge31cbiAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmV0dXJuIG9ialxuICAgICAgICAgIH0pKCksXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICByYXdXb3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICB0eXBlOiBcIndvcmtlcl9mZXRjaF9yZXN1bHRcIixcbiAgICAgICAgcmVxdWVzdElkOiBkYXRhLnJlcXVlc3RJZCxcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgbmFtZTogZXJyLm5hbWUsXG4gICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgc3RhY2s6IGVyci5zdGFjayxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfVxuICB9KVxuXG4gIGlmICh3b3JrZXJJbml0RXJyb3IpIHtcbiAgICB0aHJvdyB3b3JrZXJJbml0RXJyb3JcbiAgfVxuXG4gIGNvbnN0IGNvbWxpbmtXb3JrZXIgPSBDb21saW5rLndyYXA8SW50ZXJuYWxXZWJXb3JrZXJBcGk+KHJhd1dvcmtlcilcblxuICByYXdXb3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgZWFybHlNZXNzYWdlSGFuZGxlcilcblxuICAvLyBIZWxwZXIgdG8gc2VyaWFsaXplIFJlYWN0IGVsZW1lbnRzIGZvciBjcm9zcy13b3JrZXIgY29tbXVuaWNhdGlvblxuICBmdW5jdGlvbiBzZXJpYWxpemVSZWFjdEVsZW1lbnQoZWxlbWVudDogYW55KTogYW55IHtcbiAgICBpZiAoIWVsZW1lbnQgfHwgdHlwZW9mIGVsZW1lbnQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiBlbGVtZW50XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBSZWFjdCBlbGVtZW50XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX2lzU2VyaWFsaXplZFJlYWN0RWxlbWVudDogdHJ1ZSxcbiAgICAgICAgdHlwZTogZWxlbWVudC50eXBlLFxuICAgICAgICBwcm9wczogc2VyaWFsaXplUHJvcHMoZWxlbWVudC5wcm9wcyksXG4gICAgICAgIGtleTogZWxlbWVudC5rZXksXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlcmlhbGl6ZVByb3BzKHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGlmICghcHJvcHMgfHwgdHlwZW9mIHByb3BzICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gcHJvcHNcbiAgICB9XG5cbiAgICBjb25zdCBzZXJpYWxpemVkOiBhbnkgPSB7fVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJjaGlsZHJlblwiKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWQuY2hpbGRyZW4gPSB2YWx1ZS5tYXAoc2VyaWFsaXplUmVhY3RFbGVtZW50KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlcmlhbGl6ZWQuY2hpbGRyZW4gPSBzZXJpYWxpemVSZWFjdEVsZW1lbnQodmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlcmlhbGl6ZWRba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZXJpYWxpemVkXG4gIH1cblxuICAvLyBDb25kaXRpb25hbGx5IG92ZXJyaWRlIGdsb2JhbCBmZXRjaCBpbnNpZGUgdGhlIHdvcmtlciB0byByb3V0ZSB0aHJvdWdoIHRoZSBwYXJlbnRcbiAgLy8gT25seSBlbmFibGUgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZCB2aWEgY29uZmlndXJhdGlvblxuICBpZiAoY29uZmlndXJhdGlvbi5lbmFibGVGZXRjaFByb3h5KSB7XG4gICAgcmF3V29ya2VyLnBvc3RNZXNzYWdlKHsgdHlwZTogXCJvdmVycmlkZV9nbG9iYWxfZmV0Y2hcIiB9KVxuICB9XG5cbiAgaWYgKGNvbmZpZ3VyYXRpb24uc25pcHBldHNBcGlCYXNlVXJsKSB7XG4gICAgYXdhaXQgY29tbGlua1dvcmtlci5zZXRTbmlwcGV0c0FwaUJhc2VVcmwoY29uZmlndXJhdGlvbi5zbmlwcGV0c0FwaUJhc2VVcmwpXG4gIH1cbiAgaWYgKGNvbmZpZ3VyYXRpb24ucGxhdGZvcm0pIHtcbiAgICBhd2FpdCBjb21saW5rV29ya2VyLnNldFBsYXRmb3JtQ29uZmlnKGNvbmZpZ3VyYXRpb24ucGxhdGZvcm0pXG4gIH1cbiAgaWYgKGNvbmZpZ3VyYXRpb24ucHJvamVjdENvbmZpZykge1xuICAgIGF3YWl0IGNvbWxpbmtXb3JrZXIuc2V0UHJvamVjdENvbmZpZyhjb25maWd1cmF0aW9uLnByb2plY3RDb25maWcpXG4gIH1cblxuICBsZXQgaXNUZXJtaW5hdGVkID0gZmFsc2VcblxuICAvLyBDcmVhdGUgYSB3cmFwcGVyIHRoYXQgaGFuZGxlcyBldmVudHMgZGlyZWN0bHkgdGhyb3VnaCBjaXJjdWl0IGluc3RhbmNlXG4gIGNvbnN0IHdyYXBwZXI6IENpcmN1aXRXZWJXb3JrZXIgPSB7XG4gICAgY2xlYXJFdmVudExpc3RlbmVyczogY29tbGlua1dvcmtlci5jbGVhckV2ZW50TGlzdGVuZXJzLmJpbmQoY29tbGlua1dvcmtlciksXG4gICAgZW5hYmxlRGVidWc6IGFzeW5jICguLi5hcmdzKSA9PiB7XG4gICAgICBpZiAoaXNUZXJtaW5hdGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNpcmN1aXRXZWJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQsIGNhbid0IGVuYWJsZURlYnVnXCIpXG4gICAgICB9XG4gICAgICByZXR1cm4gY29tbGlua1dvcmtlci5lbmFibGVEZWJ1Zy5iaW5kKGNvbWxpbmtXb3JrZXIpKC4uLmFyZ3MpXG4gICAgfSxcbiAgICB2ZXJzaW9uOiBjb21saW5rV29ya2VyLnZlcnNpb24uYmluZChjb21saW5rV29ya2VyKSxcbiAgICBleGVjdXRlOiBhc3luYyAoLi4uYXJncykgPT4ge1xuICAgICAgaWYgKGlzVGVybWluYXRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaXJjdWl0V2ViV29ya2VyIHdhcyB0ZXJtaW5hdGVkLCBjYW4ndCBleGVjdXRlXCIpXG4gICAgICB9XG4gICAgICByZXR1cm4gY29tbGlua1dvcmtlci5leGVjdXRlLmJpbmQoY29tbGlua1dvcmtlcikoLi4uYXJncylcbiAgICB9LFxuICAgIGV4ZWN1dGVDb21wb25lbnQ6IGFzeW5jIChjb21wb25lbnQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGlzVGVybWluYXRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJDaXJjdWl0V2ViV29ya2VyIHdhcyB0ZXJtaW5hdGVkLCBjYW4ndCBleGVjdXRlQ29tcG9uZW50XCIsXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gSWYgaXQncyBhIGZ1bmN0aW9uLCBwYXNzIGl0IGFzLWlzICh3aWxsIGJlIHByb3hpZWQgYnkgQ29tbGluaylcbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGNvbWxpbmtXb3JrZXIuZXhlY3V0ZUNvbXBvbmVudC5iaW5kKGNvbWxpbmtXb3JrZXIpKGNvbXBvbmVudClcbiAgICAgIH1cblxuICAgICAgLy8gSWYgaXQncyBhIFJlYWN0IGVsZW1lbnQsIHNlcmlhbGl6ZSBpdCB0byBhIHJlY29uc3RydWN0YWJsZSBmb3JtYXRcbiAgICAgIGlmIChjb21wb25lbnQgJiYgdHlwZW9mIGNvbXBvbmVudCA9PT0gXCJvYmplY3RcIiAmJiBjb21wb25lbnQudHlwZSkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkRWxlbWVudCA9IHNlcmlhbGl6ZVJlYWN0RWxlbWVudChjb21wb25lbnQpXG4gICAgICAgIHJldHVybiBjb21saW5rV29ya2VyLmV4ZWN1dGVDb21wb25lbnQuYmluZChjb21saW5rV29ya2VyKShcbiAgICAgICAgICBzZXJpYWxpemVkRWxlbWVudCxcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tbGlua1dvcmtlci5leGVjdXRlQ29tcG9uZW50LmJpbmQoY29tbGlua1dvcmtlcikoY29tcG9uZW50KVxuICAgIH0sXG4gICAgZXhlY3V0ZVdpdGhGc01hcDogYXN5bmMgKC4uLmFyZ3MpID0+IHtcbiAgICAgIGlmIChpc1Rlcm1pbmF0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ2lyY3VpdFdlYldvcmtlciB3YXMgdGVybWluYXRlZCwgY2FuJ3QgZXhlY3V0ZVdpdGhGc01hcFwiLFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gY29tbGlua1dvcmtlci5leGVjdXRlV2l0aEZzTWFwLmJpbmQoY29tbGlua1dvcmtlcikoLi4uYXJncylcbiAgICB9LFxuICAgIHJlbmRlclVudGlsU2V0dGxlZDogY29tbGlua1dvcmtlci5yZW5kZXJVbnRpbFNldHRsZWQuYmluZChjb21saW5rV29ya2VyKSxcbiAgICBnZXRDaXJjdWl0SnNvbjogY29tbGlua1dvcmtlci5nZXRDaXJjdWl0SnNvbi5iaW5kKGNvbWxpbmtXb3JrZXIpLFxuICAgIG9uOiAoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCkgPT4ge1xuICAgICAgY29uc3QgcHJveGllZENhbGxiYWNrID0gQ29tbGluay5wcm94eShjYWxsYmFjaylcbiAgICAgIGNvbWxpbmtXb3JrZXIub24oZXZlbnQgYXMgUm9vdENpcmN1aXRFdmVudE5hbWUsIHByb3hpZWRDYWxsYmFjaylcbiAgICB9LFxuICAgIGtpbGw6IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbWxpbmtXb3JrZXJbQ29tbGluay5yZWxlYXNlUHJveHldKClcbiAgICAgIHJhd1dvcmtlci50ZXJtaW5hdGUoKVxuICAgICAgaXNUZXJtaW5hdGVkID0gdHJ1ZVxuICAgICAgaWYgKGdsb2JhbFRoaXMuVFNDSVJDVUlUX0dMT0JBTF9DSVJDVUlUX1dPUktFUiA9PT0gd3JhcHBlcikge1xuICAgICAgICBnbG9iYWxUaGlzLlRTQ0lSQ1VJVF9HTE9CQUxfQ0lSQ1VJVF9XT1JLRVIgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuICB9XG4gIDsod3JhcHBlciBhcyBhbnkpLl9fcmF3V29ya2VyID0gcmF3V29ya2VyXG4gIGdsb2JhbFRoaXMuVFNDSVJDVUlUX0dMT0JBTF9DSVJDVUlUX1dPUktFUiA9IHdyYXBwZXJcbiAgcmV0dXJuIHdyYXBwZXJcbn1cbiIsICJleHBvcnQgY29uc3QgZ2V0SW1wb3J0c0Zyb21Db2RlID0gKGNvZGU6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgLy8gTWF0Y2ggYmFzaWMgaW1wb3J0IHBhdHRlcm5zIGluY2x1ZGluZyBjb21iaW5lZCBkZWZhdWx0IGFuZCBuYW1lc3BhY2UgaW1wb3J0c1xuICBjb25zdCBpbXBvcnRSZWdleCA9XG4gICAgL15cXHMqaW1wb3J0XFxzKyg/Oig/OltcXHdcXHNdKyxcXHMqKT8oPzpcXCpcXHMrYXNcXHMrW1xcd1xcc10rfFxce1tcXHNcXHcsXStcXH18XFx3KylcXHMrZnJvbVxccyopP1snXCJdKC4rPylbJ1wiXS9nbVxuICBjb25zdCBpbXBvcnRzOiBzdHJpbmdbXSA9IFtdXG4gIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbFxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9Bc3NpZ25JbkV4cHJlc3Npb25zOiA8ZXhwbGFuYXRpb24+XG4gIHdoaWxlICgobWF0Y2ggPSBpbXBvcnRSZWdleC5leGVjKGNvZGUpKSAhPT0gbnVsbCkge1xuICAgIGltcG9ydHMucHVzaChtYXRjaFsxXSlcbiAgfVxuXG4gIC8vIE1hdGNoIHJlLWV4cG9ydHNcbiAgY29uc3QgcmVFeHBvcnRSZWdleCA9XG4gICAgL15cXHMqZXhwb3J0XFxzKyg/OnR5cGVcXHMrKT8oPzpcXCpcXHMrYXNcXHMrW1xcdyRdK3xcXCp8XFx7W159XStcXH0pXFxzK2Zyb21cXHMqWydcIl0oLis/KVsnXCJdL2dtXG4gIGxldCByZUV4cG9ydE1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9Bc3NpZ25JbkV4cHJlc3Npb25zOiA8ZXhwbGFuYXRpb24+XG4gIHdoaWxlICgocmVFeHBvcnRNYXRjaCA9IHJlRXhwb3J0UmVnZXguZXhlYyhjb2RlKSkgIT09IG51bGwpIHtcbiAgICBpbXBvcnRzLnB1c2gocmVFeHBvcnRNYXRjaFsxXSlcbiAgfVxuXG4gIHJldHVybiBpbXBvcnRzXG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsWUFBWSxhQUFhOzs7QUNBbEIsSUFBTSxxQkFBcUIsQ0FBQyxTQUEyQjtBQUU1RCxRQUFNLGNBQ0o7QUFDRixRQUFNLFVBQW9CLENBQUM7QUFDM0IsTUFBSTtBQUdKLFVBQVEsUUFBUSxZQUFZLEtBQUssSUFBSSxPQUFPLE1BQU07QUFDaEQsWUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQUEsRUFDdkI7QUFHQSxRQUFNLGdCQUNKO0FBQ0YsTUFBSTtBQUVKLFVBQVEsZ0JBQWdCLGNBQWMsS0FBSyxJQUFJLE9BQU8sTUFBTTtBQUMxRCxZQUFRLEtBQUssY0FBYyxDQUFDLENBQUM7QUFBQSxFQUMvQjtBQUVBLFNBQU87QUFDVDs7O0FESk8sSUFBTSx5QkFBeUIsT0FDcEMsa0JBQzhCO0FBRTlCLFFBQU0saUJBQWlCLFdBQVc7QUFDbEMsTUFBSSxrQkFBa0IsT0FBTyxlQUFlLFNBQVMsWUFBWTtBQUMvRCxRQUFJLGNBQWMsU0FBUztBQUN6QixjQUFRLElBQUkscURBQXFEO0FBQUEsSUFDbkU7QUFDQSxRQUFJO0FBQ0YsWUFBTSxlQUFlLEtBQUs7QUFBQSxJQUM1QixTQUFTLEdBQUc7QUFDVixVQUFJLGNBQWMsU0FBUztBQUN6QixnQkFBUTtBQUFBLFVBQ047QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLFdBQVcsb0NBQW9DLGdCQUFnQjtBQUNqRSxt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
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbGliL3dvcmtlci50cyIsICIuLi9saWIvdXRpbHMvZ2V0LWltcG9ydHMtZnJvbS1jb2RlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgKiBhcyBDb21saW5rIGZyb20gXCJjb21saW5rXCJcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL2luZGV4XCJcbmltcG9ydCB0eXBlIHtcbiAgSW50ZXJuYWxXZWJXb3JrZXJBcGksXG4gIFdlYldvcmtlckNvbmZpZ3VyYXRpb24sXG4gIENpcmN1aXRXZWJXb3JrZXIsXG59IGZyb20gXCIuL3NoYXJlZC90eXBlc1wiXG5pbXBvcnQgdHlwZSB7IFJvb3RDaXJjdWl0RXZlbnROYW1lIH0gZnJvbSBcIi4vc2hhcmVkL3R5cGVzXCJcblxuZXhwb3J0IHR5cGUgeyBDaXJjdWl0V2ViV29ya2VyLCBXZWJXb3JrZXJDb25maWd1cmF0aW9uIH1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBUU0NJUkNVSVRfR0xPQkFMX0NJUkNVSVRfV09SS0VSOiBDaXJjdWl0V2ViV29ya2VyIHwgdW5kZWZpbmVkXG4gIH1cbiAgdmFyIFRTQ0lSQ1VJVF9HTE9CQUxfQ0lSQ1VJVF9XT1JLRVI6IENpcmN1aXRXZWJXb3JrZXIgfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNpcmN1aXRXZWJXb3JrZXIgPSBhc3luYyAoXG4gIGNvbmZpZ3VyYXRpb246IFBhcnRpYWw8V2ViV29ya2VyQ29uZmlndXJhdGlvbj4sXG4pOiBQcm9taXNlPENpcmN1aXRXZWJXb3JrZXI+ID0+IHtcbiAgLy8gS2lsbCBleGlzdGluZyBnbG9iYWwgd29ya2VyIGluc3RhbmNlIGlmIHByZXNlbnRcbiAgY29uc3QgZXhpc3RpbmdXb3JrZXIgPSBnbG9iYWxUaGlzLlRTQ0lSQ1VJVF9HTE9CQUxfQ0lSQ1VJVF9XT1JLRVJcbiAgaWYgKGV4aXN0aW5nV29ya2VyICYmIHR5cGVvZiBleGlzdGluZ1dvcmtlci5raWxsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBpZiAoY29uZmlndXJhdGlvbi52ZXJib3NlKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIltXb3JrZXJdIEtpbGxpbmcgcHJldmlvdXMgZ2xvYmFsIHdvcmtlciBpbnN0YW5jZS4uLlwiKVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhpc3RpbmdXb3JrZXIua2lsbCgpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGNvbmZpZ3VyYXRpb24udmVyYm9zZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJbV29ya2VyXSBFcnJvciBraWxsaW5nIHByZXZpb3VzIGdsb2JhbCB3b3JrZXIgaW5zdGFuY2U6XCIsXG4gICAgICAgICAgZSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgLy8gRW5zdXJlIHRoZSBrZXkgaXMgY2xlYXJlZCBldmVuIGlmIGtpbGwgdGhyb3dzIGFuIGVycm9yXG4gICAgICBpZiAoZ2xvYmFsVGhpcy5UU0NJUkNVSVRfR0xPQkFMX0NJUkNVSVRfV09SS0VSID09PSBleGlzdGluZ1dvcmtlcikge1xuICAgICAgICBnbG9iYWxUaGlzLlRTQ0lSQ1VJVF9HTE9CQUxfQ0lSQ1VJVF9XT1JLRVIgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoY29uZmlndXJhdGlvbi52ZXJib3NlKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBcIltXb3JrZXJdIENyZWF0aW5nIGNpcmN1aXQgd2ViIHdvcmtlciB3aXRoIGNvbmZpZzpcIixcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgKVxuICB9XG5cbiAgbGV0IHdvcmtlckJsb2JVcmwgPVxuICAgIGNvbmZpZ3VyYXRpb24ud2ViV29ya2VyQmxvYlVybCA/PyBjb25maWd1cmF0aW9uLndlYldvcmtlclVybFxuXG4gIGlmICghd29ya2VyQmxvYlVybCkge1xuICAgIGNvbnN0IGNkblVybCA9IGBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0B0c2NpcmN1aXQvZXZhbEAke2NvbmZpZ3VyYXRpb24uZXZhbFZlcnNpb24gPz8gXCJsYXRlc3RcIn0vZGlzdC93ZWJ3b3JrZXIvZW50cnlwb2ludC5qc2BcblxuICAgIGNvbnN0IHdvcmtlckJsb2IgPSBhd2FpdCBnbG9iYWxUaGlzLmZldGNoKGNkblVybCkudGhlbigocmVzKSA9PiByZXMuYmxvYigpKVxuICAgIHdvcmtlckJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHdvcmtlckJsb2IpXG4gIH1cblxuICBjb25zdCByYXdXb3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlckJsb2JVcmwsIHsgdHlwZTogXCJtb2R1bGVcIiB9KVxuICBsZXQgd29ya2VySW5pdEVycm9yOiBhbnlcbiAgcmF3V29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCAoZXZlbnQpID0+IHtcbiAgICBjb25zb2xlLmVycm9yKFwiW1dvcmtlcl0gRXJyb3IgaW4gd29ya2VyXCIsIGV2ZW50KVxuICAgIHdvcmtlckluaXRFcnJvciA9IGV2ZW50XG4gIH0pXG4gIHJhd1dvcmtlci5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIChldmVudCkgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbV29ya2VyXSBVbmhhbmRsZWQgcmVqZWN0aW9uIGluIHdvcmtlclwiLCBldmVudClcbiAgfSlcbiAgcmF3V29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlZXJyb3JcIiwgKGV2ZW50KSA9PiB7XG4gICAgY29uc29sZS5lcnJvcihcIltXb3JrZXJdIE1lc3NhZ2UgZXJyb3IgaW4gd29ya2VyXCIsIGV2ZW50KVxuICB9KVxuICBjb25zdCBlYXJseU1lc3NhZ2VIYW5kbGVyID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgICBjb25zb2xlLmxvZyhcIltXb3JrZXJdIE1lc3NhZ2UgaW4gd29ya2VyXCIsIGV2ZW50KVxuICB9XG4gIHJhd1dvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBlYXJseU1lc3NhZ2VIYW5kbGVyKVxuXG4gIC8vIEhhbmRsZSBmZXRjaCByZXF1ZXN0cyBmcm9tIHRoZSB3b3JrZXJcbiAgcmF3V29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGFzeW5jIChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGFcbiAgICBpZiAoZGF0YT8udHlwZSAhPT0gXCJ3b3JrZXJfZmV0Y2hcIikgcmV0dXJuXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBnbG9iYWxUaGlzLmZldGNoKGRhdGEuaW5wdXQsIGRhdGEuaW5pdClcbiAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZXNwb25zZS50ZXh0KClcbiAgICAgIHJhd1dvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICAgIHR5cGU6IFwid29ya2VyX2ZldGNoX3Jlc3VsdFwiLFxuICAgICAgICByZXF1ZXN0SWQ6IGRhdGEucmVxdWVzdElkLFxuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgICBoZWFkZXJzOiAoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2JqOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge31cbiAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmV0dXJuIG9ialxuICAgICAgICAgIH0pKCksXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICByYXdXb3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICB0eXBlOiBcIndvcmtlcl9mZXRjaF9yZXN1bHRcIixcbiAgICAgICAgcmVxdWVzdElkOiBkYXRhLnJlcXVlc3RJZCxcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgbmFtZTogZXJyLm5hbWUsXG4gICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgc3RhY2s6IGVyci5zdGFjayxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfVxuICB9KVxuXG4gIGlmICh3b3JrZXJJbml0RXJyb3IpIHtcbiAgICB0aHJvdyB3b3JrZXJJbml0RXJyb3JcbiAgfVxuXG4gIGNvbnN0IGNvbWxpbmtXb3JrZXIgPSBDb21saW5rLndyYXA8SW50ZXJuYWxXZWJXb3JrZXJBcGk+KHJhd1dvcmtlcilcblxuICByYXdXb3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgZWFybHlNZXNzYWdlSGFuZGxlcilcblxuICAvLyBIZWxwZXIgdG8gc2VyaWFsaXplIFJlYWN0IGVsZW1lbnRzIGZvciBjcm9zcy13b3JrZXIgY29tbXVuaWNhdGlvblxuICBmdW5jdGlvbiBzZXJpYWxpemVSZWFjdEVsZW1lbnQoZWxlbWVudDogYW55KTogYW55IHtcbiAgICBpZiAoIWVsZW1lbnQgfHwgdHlwZW9mIGVsZW1lbnQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiBlbGVtZW50XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBSZWFjdCBlbGVtZW50XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX2lzU2VyaWFsaXplZFJlYWN0RWxlbWVudDogdHJ1ZSxcbiAgICAgICAgdHlwZTogZWxlbWVudC50eXBlLFxuICAgICAgICBwcm9wczogc2VyaWFsaXplUHJvcHMoZWxlbWVudC5wcm9wcyksXG4gICAgICAgIGtleTogZWxlbWVudC5rZXksXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlcmlhbGl6ZVByb3BzKHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGlmICghcHJvcHMgfHwgdHlwZW9mIHByb3BzICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gcHJvcHNcbiAgICB9XG5cbiAgICBjb25zdCBzZXJpYWxpemVkOiBhbnkgPSB7fVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJjaGlsZHJlblwiKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWQuY2hpbGRyZW4gPSB2YWx1ZS5tYXAoc2VyaWFsaXplUmVhY3RFbGVtZW50KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlcmlhbGl6ZWQuY2hpbGRyZW4gPSBzZXJpYWxpemVSZWFjdEVsZW1lbnQodmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlcmlhbGl6ZWRba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZXJpYWxpemVkXG4gIH1cblxuICAvLyBDb25kaXRpb25hbGx5IG92ZXJyaWRlIGdsb2JhbCBmZXRjaCBpbnNpZGUgdGhlIHdvcmtlciB0byByb3V0ZSB0aHJvdWdoIHRoZSBwYXJlbnRcbiAgLy8gT25seSBlbmFibGUgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZCB2aWEgY29uZmlndXJhdGlvblxuICBpZiAoY29uZmlndXJhdGlvbi5lbmFibGVGZXRjaFByb3h5KSB7XG4gICAgcmF3V29ya2VyLnBvc3RNZXNzYWdlKHsgdHlwZTogXCJvdmVycmlkZV9nbG9iYWxfZmV0Y2hcIiB9KVxuICB9XG5cbiAgaWYgKGNvbmZpZ3VyYXRpb24uc25pcHBldHNBcGlCYXNlVXJsKSB7XG4gICAgYXdhaXQgY29tbGlua1dvcmtlci5zZXRTbmlwcGV0c0FwaUJhc2VVcmwoY29uZmlndXJhdGlvbi5zbmlwcGV0c0FwaUJhc2VVcmwpXG4gIH1cbiAgaWYgKGNvbmZpZ3VyYXRpb24ucGxhdGZvcm0pIHtcbiAgICBhd2FpdCBjb21saW5rV29ya2VyLnNldFBsYXRmb3JtQ29uZmlnKGNvbmZpZ3VyYXRpb24ucGxhdGZvcm0pXG4gIH1cbiAgaWYgKGNvbmZpZ3VyYXRpb24ucHJvamVjdENvbmZpZykge1xuICAgIGF3YWl0IGNvbWxpbmtXb3JrZXIuc2V0UHJvamVjdENvbmZpZyhjb25maWd1cmF0aW9uLnByb2plY3RDb25maWcpXG4gIH1cblxuICBsZXQgaXNUZXJtaW5hdGVkID0gZmFsc2VcblxuICAvLyBDcmVhdGUgYSB3cmFwcGVyIHRoYXQgaGFuZGxlcyBldmVudHMgZGlyZWN0bHkgdGhyb3VnaCBjaXJjdWl0IGluc3RhbmNlXG4gIGNvbnN0IHdyYXBwZXI6IENpcmN1aXRXZWJXb3JrZXIgPSB7XG4gICAgY2xlYXJFdmVudExpc3RlbmVyczogY29tbGlua1dvcmtlci5jbGVhckV2ZW50TGlzdGVuZXJzLmJpbmQoY29tbGlua1dvcmtlciksXG4gICAgZW5hYmxlRGVidWc6IGFzeW5jICguLi5hcmdzKSA9PiB7XG4gICAgICBpZiAoaXNUZXJtaW5hdGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNpcmN1aXRXZWJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQsIGNhbid0IGVuYWJsZURlYnVnXCIpXG4gICAgICB9XG4gICAgICByZXR1cm4gY29tbGlua1dvcmtlci5lbmFibGVEZWJ1Zy5iaW5kKGNvbWxpbmtXb3JrZXIpKC4uLmFyZ3MpXG4gICAgfSxcbiAgICB2ZXJzaW9uOiBjb21saW5rV29ya2VyLnZlcnNpb24uYmluZChjb21saW5rV29ya2VyKSxcbiAgICBleGVjdXRlOiBhc3luYyAoLi4uYXJncykgPT4ge1xuICAgICAgaWYgKGlzVGVybWluYXRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaXJjdWl0V2ViV29ya2VyIHdhcyB0ZXJtaW5hdGVkLCBjYW4ndCBleGVjdXRlXCIpXG4gICAgICB9XG4gICAgICByZXR1cm4gY29tbGlua1dvcmtlci5leGVjdXRlLmJpbmQoY29tbGlua1dvcmtlcikoLi4uYXJncylcbiAgICB9LFxuICAgIGV4ZWN1dGVDb21wb25lbnQ6IGFzeW5jIChjb21wb25lbnQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGlzVGVybWluYXRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJDaXJjdWl0V2ViV29ya2VyIHdhcyB0ZXJtaW5hdGVkLCBjYW4ndCBleGVjdXRlQ29tcG9uZW50XCIsXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gSWYgaXQncyBhIGZ1bmN0aW9uLCBwYXNzIGl0IGFzLWlzICh3aWxsIGJlIHByb3hpZWQgYnkgQ29tbGluaylcbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGNvbWxpbmtXb3JrZXIuZXhlY3V0ZUNvbXBvbmVudC5iaW5kKGNvbWxpbmtXb3JrZXIpKGNvbXBvbmVudClcbiAgICAgIH1cblxuICAgICAgLy8gSWYgaXQncyBhIFJlYWN0IGVsZW1lbnQsIHNlcmlhbGl6ZSBpdCB0byBhIHJlY29uc3RydWN0YWJsZSBmb3JtYXRcbiAgICAgIGlmIChjb21wb25lbnQgJiYgdHlwZW9mIGNvbXBvbmVudCA9PT0gXCJvYmplY3RcIiAmJiBjb21wb25lbnQudHlwZSkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkRWxlbWVudCA9IHNlcmlhbGl6ZVJlYWN0RWxlbWVudChjb21wb25lbnQpXG4gICAgICAgIHJldHVybiBjb21saW5rV29ya2VyLmV4ZWN1dGVDb21wb25lbnQuYmluZChjb21saW5rV29ya2VyKShcbiAgICAgICAgICBzZXJpYWxpemVkRWxlbWVudCxcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tbGlua1dvcmtlci5leGVjdXRlQ29tcG9uZW50LmJpbmQoY29tbGlua1dvcmtlcikoY29tcG9uZW50KVxuICAgIH0sXG4gICAgZXhlY3V0ZVdpdGhGc01hcDogYXN5bmMgKC4uLmFyZ3MpID0+IHtcbiAgICAgIGlmIChpc1Rlcm1pbmF0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ2lyY3VpdFdlYldvcmtlciB3YXMgdGVybWluYXRlZCwgY2FuJ3QgZXhlY3V0ZVdpdGhGc01hcFwiLFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gY29tbGlua1dvcmtlci5leGVjdXRlV2l0aEZzTWFwLmJpbmQoY29tbGlua1dvcmtlcikoLi4uYXJncylcbiAgICB9LFxuICAgIHJlbmRlclVudGlsU2V0dGxlZDogY29tbGlua1dvcmtlci5yZW5kZXJVbnRpbFNldHRsZWQuYmluZChjb21saW5rV29ya2VyKSxcbiAgICBnZXRDaXJjdWl0SnNvbjogY29tbGlua1dvcmtlci5nZXRDaXJjdWl0SnNvbi5iaW5kKGNvbWxpbmtXb3JrZXIpLFxuICAgIG9uOiAoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCkgPT4ge1xuICAgICAgY29uc3QgcHJveGllZENhbGxiYWNrID0gQ29tbGluay5wcm94eShjYWxsYmFjaylcbiAgICAgIGNvbWxpbmtXb3JrZXIub24oZXZlbnQgYXMgUm9vdENpcmN1aXRFdmVudE5hbWUsIHByb3hpZWRDYWxsYmFjaylcbiAgICB9LFxuICAgIGtpbGw6IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbWxpbmtXb3JrZXJbQ29tbGluay5yZWxlYXNlUHJveHldKClcbiAgICAgIHJhd1dvcmtlci50ZXJtaW5hdGUoKVxuICAgICAgaXNUZXJtaW5hdGVkID0gdHJ1ZVxuICAgICAgaWYgKGdsb2JhbFRoaXMuVFNDSVJDVUlUX0dMT0JBTF9DSVJDVUlUX1dPUktFUiA9PT0gd3JhcHBlcikge1xuICAgICAgICBnbG9iYWxUaGlzLlRTQ0lSQ1VJVF9HTE9CQUxfQ0lSQ1VJVF9XT1JLRVIgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuICB9XG4gIDsod3JhcHBlciBhcyBhbnkpLl9fcmF3V29ya2VyID0gcmF3V29ya2VyXG4gIGdsb2JhbFRoaXMuVFNDSVJDVUlUX0dMT0JBTF9DSVJDVUlUX1dPUktFUiA9IHdyYXBwZXJcbiAgcmV0dXJuIHdyYXBwZXJcbn1cbiIsICJleHBvcnQgY29uc3QgZ2V0SW1wb3J0c0Zyb21Db2RlID0gKGNvZGU6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgLy8gTWF0Y2ggYmFzaWMgaW1wb3J0IHBhdHRlcm5zIGluY2x1ZGluZyBjb21iaW5lZCBkZWZhdWx0IGFuZCBuYW1lc3BhY2UgaW1wb3J0c1xuICBjb25zdCBpbXBvcnRSZWdleCA9XG4gICAgL15cXHMqaW1wb3J0XFxzKyg/Oig/OltcXHdcXHNdKyxcXHMqKT8oPzpcXCpcXHMrYXNcXHMrW1xcd1xcc10rfFxce1tcXHNcXHcsXStcXH18XFx3KylcXHMrZnJvbVxccyopP1snXCJdKC4rPylbJ1wiXS9nbVxuICBjb25zdCBpbXBvcnRzOiBzdHJpbmdbXSA9IFtdXG4gIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbFxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9Bc3NpZ25JbkV4cHJlc3Npb25zOiA8ZXhwbGFuYXRpb24+XG4gIHdoaWxlICgobWF0Y2ggPSBpbXBvcnRSZWdleC5leGVjKGNvZGUpKSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGZ1bGxNYXRjaCA9IG1hdGNoWzBdXG4gICAgaWYgKC9eXFxzKmltcG9ydFxccyt0eXBlXFxiLy50ZXN0KGZ1bGxNYXRjaCkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGltcG9ydHMucHVzaChtYXRjaFsxXSlcbiAgfVxuXG4gIC8vIE1hdGNoIHJlLWV4cG9ydHNcbiAgY29uc3QgcmVFeHBvcnRSZWdleCA9XG4gICAgL15cXHMqZXhwb3J0XFxzKyg/OnR5cGVcXHMrKT8oPzpcXCpcXHMrYXNcXHMrW1xcdyRdK3xcXCp8XFx7W159XStcXH0pXFxzK2Zyb21cXHMqWydcIl0oLis/KVsnXCJdL2dtXG4gIGxldCByZUV4cG9ydE1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9Bc3NpZ25JbkV4cHJlc3Npb25zOiA8ZXhwbGFuYXRpb24+XG4gIHdoaWxlICgocmVFeHBvcnRNYXRjaCA9IHJlRXhwb3J0UmVnZXguZXhlYyhjb2RlKSkgIT09IG51bGwpIHtcbiAgICBjb25zdCBmdWxsTWF0Y2ggPSByZUV4cG9ydE1hdGNoWzBdXG4gICAgaWYgKC9eXFxzKmV4cG9ydFxccyt0eXBlXFxiLy50ZXN0KGZ1bGxNYXRjaCkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGltcG9ydHMucHVzaChyZUV4cG9ydE1hdGNoWzFdKVxuICB9XG5cbiAgcmV0dXJuIGltcG9ydHNcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxZQUFZLGFBQWE7OztBQ0FsQixJQUFNLHFCQUFxQixDQUFDLFNBQTJCO0FBRTVELFFBQU0sY0FDSjtBQUNGLFFBQU0sVUFBb0IsQ0FBQztBQUMzQixNQUFJO0FBR0osVUFBUSxRQUFRLFlBQVksS0FBSyxJQUFJLE9BQU8sTUFBTTtBQUNoRCxVQUFNLFlBQVksTUFBTSxDQUFDO0FBQ3pCLFFBQUksc0JBQXNCLEtBQUssU0FBUyxHQUFHO0FBQ3pDO0FBQUEsSUFDRjtBQUNBLFlBQVEsS0FBSyxNQUFNLENBQUMsQ0FBQztBQUFBLEVBQ3ZCO0FBR0EsUUFBTSxnQkFDSjtBQUNGLE1BQUk7QUFFSixVQUFRLGdCQUFnQixjQUFjLEtBQUssSUFBSSxPQUFPLE1BQU07QUFDMUQsVUFBTSxZQUFZLGNBQWMsQ0FBQztBQUNqQyxRQUFJLHNCQUFzQixLQUFLLFNBQVMsR0FBRztBQUN6QztB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
|