kline-orderbook-chart 0.2.18 → 0.2.20

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.
Binary file
@@ -1 +1 @@
1
- var z={FILL_RECT:1,STROKE_RECT:2,LINE:3,DASHED_LINE:4,POLYLINE:5,TEXT:6,CIRCLE:7,TRIANGLE:8,SAVE:9,RESTORE:10,CLIP_RECT:11,ROTATED_TEXT:12,BUBBLE_3D:13,FILL_POLYGON:14,DASHED_POLYLINE:15,GRADIENT_RECT:16,END_FRAME:255},Be=["left","center","right"],Tt=new Map,Ge=4096;function qe(t,r,s,o){return t<<24|r<<16|s<<8|o}function V(t,r,s,o){let w=qe(t,r,s,o),e=Tt.get(w);return e||(e=`rgba(${t},${r},${s},${(o/255).toFixed(3)})`,Tt.size>=Ge&&Tt.clear(),Tt.set(w,e),e)}var re=new TextDecoder;function ut(t,r){return r&1?Math.round(t)+.5:Math.round(t)}function ct(t,r,s,o){let w=r.buffer;if(s+o>w.byteLength)return;let e=new DataView(w,s,o),i=new Uint8Array(w,s,o),n=0,l="",u="",f=-1,h="";for(;n<o;){let g=i[n];if(n+=1,g===z.END_FRAME)break;switch(g){case z.FILL_RECT:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let p=e.getFloat32(n,!0);n+=4;let c=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4,c!==l&&(t.fillStyle=c,l=c);let M=Math.round(a),m=Math.round(_);t.fillRect(M,m,Math.round(a+d)-M,Math.round(_+p)-m);break}case z.STROKE_RECT:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let p=e.getFloat32(n,!0);n+=4;let c=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let M=e.getFloat32(n,!0);n+=4,c!==u&&(t.strokeStyle=c,u=c),M!==f&&(t.lineWidth=M,f=M);let I=Math.round(M)&1,L=I?Math.round(a)+.5:Math.round(a),P=I?Math.round(_)+.5:Math.round(_);t.strokeRect(L,P,Math.round(d),Math.round(p));break}case z.LINE:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let p=e.getFloat32(n,!0);n+=4;let c=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let M=e.getFloat32(n,!0);n+=4,t.beginPath(),c!==u&&(t.strokeStyle=c,u=c),M!==f&&(t.lineWidth=M,f=M),t.setLineDash([]);let m=Math.round(M);t.moveTo(ut(a,m),ut(_,m)),t.lineTo(ut(d,m),ut(p,m)),t.stroke();break}case z.DASHED_LINE:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let p=e.getFloat32(n,!0);n+=4;let c=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let M=e.getFloat32(n,!0);n+=4;let m=e.getFloat32(n,!0);n+=4;let I=e.getFloat32(n,!0);n+=4,t.beginPath(),c!==u&&(t.strokeStyle=c,u=c),M!==f&&(t.lineWidth=M,f=M),t.setLineDash([m,I]);let L=Math.round(M);t.moveTo(ut(a,L),ut(_,L)),t.lineTo(ut(d,L),ut(p,L)),t.stroke(),t.setLineDash([]);break}case z.POLYLINE:{let a=e.getUint16(n,!0);n+=2;let _=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let d=e.getFloat32(n,!0);if(n+=4,a>0){let p=new Float32Array(a*2);for(let c=0;c<a;c++)p[c*2]=e.getFloat32(n,!0),n+=4,p[c*2+1]=e.getFloat32(n,!0),n+=4;if(t.beginPath(),_!==u&&(t.strokeStyle=_,u=_),d!==f&&(t.lineWidth=d,f=d),t.setLineDash([]),t.lineJoin="round",t.lineCap="round",a<=3){t.moveTo(p[0],p[1]);for(let c=1;c<a;c++)t.lineTo(p[c*2],p[c*2+1])}else{t.moveTo(p[0],p[1]),t.lineTo((p[0]+p[2])*.5,(p[1]+p[3])*.5);for(let c=1;c<a-1;c++){let M=p[c*2],m=p[c*2+1],I=p[(c+1)*2],L=p[(c+1)*2+1];t.quadraticCurveTo(M,m,(M+I)*.5,(m+L)*.5)}t.lineTo(p[(a-1)*2],p[(a-1)*2+1])}t.stroke()}break}case z.TEXT:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let p=e.getFloat32(n,!0);n+=4;let c=i[n];n+=1;let M=e.getUint16(n,!0);n+=2;let m=re.decode(new Uint8Array(r.buffer,s+n,M));n+=M,d!==l&&(t.fillStyle=d,l=d);let I=`${Math.round(p)}px "IBM Plex Mono",monospace`;I!==h&&(t.font=I,h=I),t.textAlign=Be[c]||"left",t.textBaseline="middle",t.fillText(m,Math.round(a),Math.round(_));break}case z.CIRCLE:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let p=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let c=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let M=e.getFloat32(n,!0);n+=4,t.beginPath(),t.arc(a,_,d,0,Math.PI*2),p!==l&&(t.fillStyle=p,l=p),t.fill(),M>0&&(c!==u&&(t.strokeStyle=c,u=c),M!==f&&(t.lineWidth=M,f=M),t.stroke());break}case z.TRIANGLE:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let p=e.getFloat32(n,!0);n+=4;let c=e.getFloat32(n,!0);n+=4;let M=e.getFloat32(n,!0);n+=4;let m=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4,t.beginPath(),t.moveTo(a,_),t.lineTo(d,p),t.lineTo(c,M),t.closePath(),m!==l&&(t.fillStyle=m,l=m),t.fill();break}case z.SAVE:{t.save();break}case z.RESTORE:{t.restore(),l="",u="",f=-1,h="";break}case z.CLIP_RECT:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let p=e.getFloat32(n,!0);n+=4;let c=Math.floor(a),M=Math.floor(_);t.beginPath(),t.rect(c,M,Math.ceil(a+d)-c,Math.ceil(_+p)-M),t.clip();break}case z.ROTATED_TEXT:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let p=e.getFloat32(n,!0);n+=4;let c=e.getFloat32(n,!0);n+=4;let M=e.getUint16(n,!0);n+=2;let m=re.decode(i.subarray(n,n+M));n+=M;let I=`${p}px sans-serif`;I!==h&&(t.font=I,h=I),d!==l&&(t.fillStyle=d,l=d),t.textAlign="center",t.textBaseline="middle",t.save(),t.translate(a,_),t.rotate(c),t.fillText(m,0,0),t.restore();break}case z.BUBBLE_3D:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let p=i[n],c=i[n+1],M=i[n+2],m=i[n+3];n+=4;let I=i[n],L=i[n+1],P=i[n+2],X=i[n+3];n+=4;let $=i[n],N=i[n+1],k=i[n+2],at=i[n+3];n+=4;let ht=e.getFloat32(n,!0);n+=4;let Y=d;if(Y<10){let W=`rgba(${p},${c},${M},${(m/255).toFixed(3)})`;t.beginPath(),t.arc(a,_,Y,0,Math.PI*2),t.fillStyle=W,t.fill(),l=""}else if(Y<18){let W=a-Y*.25,H=_-Y*.25,G=t.createRadialGradient(W,H,Y*.08,a,_,Y);G.addColorStop(0,`rgba(${I},${L},${P},${(X/255).toFixed(3)})`),G.addColorStop(1,`rgba(${p},${c},${M},${(m/255).toFixed(3)})`),t.beginPath(),t.arc(a,_,Y,0,Math.PI*2),t.fillStyle=G,t.fill(),l=""}else{let W=a-Y*.25,H=_-Y*.25,G=t.createRadialGradient(a,_,Y*.85,a,_,Y*1.2);G.addColorStop(0,`rgba(${$},${N},${k},${(at/255*.5).toFixed(3)})`),G.addColorStop(1,`rgba(${$},${N},${k},0)`),t.beginPath(),t.arc(a,_,Y*1.2,0,Math.PI*2),t.fillStyle=G,t.fill();let lt=t.createRadialGradient(W,H,Y*.08,a,_,Y);lt.addColorStop(0,`rgba(${I},${L},${P},${(X/255).toFixed(3)})`),lt.addColorStop(1,`rgba(${p},${c},${M},${(m/255).toFixed(3)})`),t.beginPath(),t.arc(a,_,Y,0,Math.PI*2),t.fillStyle=lt,t.fill();let b=Y*.2,C=t.createRadialGradient(W,H,0,W,H,b);C.addColorStop(0,"rgba(255,255,255,0.22)"),C.addColorStop(1,"rgba(255,255,255,0)"),t.beginPath(),t.arc(W,H,b,0,Math.PI*2),t.fillStyle=C,t.fill(),l=""}break}case z.FILL_POLYGON:{let a=e.getUint16(n,!0);n+=2;let _=V(i[n],i[n+1],i[n+2],i[n+3]);if(n+=4,a>2){t.beginPath();let d=e.getFloat32(n,!0);n+=4;let p=e.getFloat32(n,!0);n+=4,t.moveTo(d,p);for(let c=1;c<a;c++)t.lineTo(e.getFloat32(n,!0),e.getFloat32(n+4,!0)),n+=8;t.closePath(),_!==l&&(t.fillStyle=_,l=_),t.fill()}else n+=a*8;break}case z.DASHED_POLYLINE:{let a=e.getUint16(n,!0);n+=2;let _=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let d=e.getFloat32(n,!0);n+=4;let p=e.getFloat32(n,!0);n+=4;let c=e.getFloat32(n,!0);if(n+=4,a>1){t.beginPath(),_!==u&&(t.strokeStyle=_,u=_),d!==f&&(t.lineWidth=d,f=d),t.setLineDash([p,c]),t.lineJoin="round";let M=e.getFloat32(n,!0);n+=4;let m=e.getFloat32(n,!0);n+=4,t.moveTo(M,m);for(let I=1;I<a;I++)t.lineTo(e.getFloat32(n,!0),e.getFloat32(n+4,!0)),n+=8;t.stroke(),t.setLineDash([])}else n+=a*8;break}case z.GRADIENT_RECT:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let p=e.getFloat32(n,!0);n+=4;let c=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let M=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let m=Math.round(a),I=Math.round(_),L=Math.round(a+d)-m,P=Math.round(_+p)-I,X=t.createLinearGradient(m,I,m,I+P);X.addColorStop(0,c),X.addColorStop(1,M),t.fillStyle=X,l="",t.fillRect(m,I,L,P);break}default:return}}}var K={trendline:{type:"2point",previewKind:0,addFn:"add_trendline"},arrow:{type:"2point",previewKind:4,addFn:"add_arrow"},measure:{type:"2point",previewKind:2,addFn:"add_price_range"},fib:{type:"2point",previewKind:3,addFn:"add_fib_retracement"},long:{type:"2point",previewKind:5,addFn:"add_long_position"},short:{type:"2point",previewKind:5,addFn:"add_short_position"},hline:{type:"1point_xp",previewKind:1,addFn:"add_horizontal_line"},vwap:{type:"1point_x",previewKind:6,addFn:"add_anchored_vwap"},pricelabel:{type:"1point_xy",previewKind:7,addFn:"add_price_label"},circle:{type:"2point",previewKind:8,addFn:"add_circle"},arrowup:{type:"1point_xy",previewKind:9,addFn:"add_arrow_marker_up"},arrowdown:{type:"1point_xy",previewKind:10,addFn:"add_arrow_marker_down"},textnote:{type:"1point_xy",previewKind:11,addFn:"add_text_note"},channel:{type:"3point",previewKind:0,addFn:"add_parallel_channel"},fibext:{type:"3point",previewKind:0,addFn:"add_fib_extension",previewFn:"fib_ext"},brush:{type:"freehand"},path:{type:"npoint"},elliott:{type:"elliott_manual"},elliottauto:{type:"1point_xy",previewKind:12,addFn:"add_elliott_impulse",previewFn:"elliott"}};function bt(t){return K[t]?.type==="2point"}function It(t){return K[t]?.type==="3point"}function wt(t){let r=K[t]?.type;return r==="1point"||r==="1point_x"||r==="1point_xy"||r==="1point_xp"}function Et(t){return K[t]?.type==="freehand"}function ot(t){return K[t]?.type==="npoint"}function st(t){return K[t]?.type==="elliott_manual"}var oe={r:.04,g:.49,b:1,lineWidth:2,dashed:!1,fontSize:12};function nt(t,r,s,o,w,e){e=e||oe;let i=K[r];if(!i)return 0;let n=0;return i.type==="3point"?n=t[i.addFn](s.x1,s.y1,s.x2,s.y2,o,w,e.r,e.g,e.b,e.lineWidth,e.dashed,s.pane):i.type==="2point"?n=t[i.addFn](s.x1,s.y1,o,w,e.r,e.g,e.b,e.lineWidth,e.dashed,s.pane):i.type==="1point_x"?n=t[i.addFn](o,e.r,e.g,e.b,e.lineWidth,e.dashed,s.pane):i.type==="1point_xp"?n=t[i.addFn](o,w,e.r,e.g,e.b,e.lineWidth,e.dashed,s.pane):i.type==="1point_xy"?n=t[i.addFn](o,w,e.r,e.g,e.b,e.fontSize||12,s.pane):n=t[i.addFn](w,e.r,e.g,e.b,e.lineWidth,e.dashed,s.pane),n||0}function U(t,r,s,o,w,e,i){e=e||oe;let n=K[r];if(n){if(n.previewFn==="elliott"){t.set_elliott_preview(o,w,e.r,e.g,e.b,e.lineWidth,i);return}n.type==="3point"?s.step===1?t.set_drawing_preview(n.previewKind,s.x1,s.y1,o,w,e.r,e.g,e.b,e.lineWidth,e.dashed,i):s.step===2&&(n.previewFn==="fib_ext"?t.set_fib_ext_preview(s.x1,s.y1,s.x2,s.y2,o,w,e.r,e.g,e.b,e.lineWidth,e.dashed,i):t.set_channel_preview(s.x1,s.y1,s.x2,s.y2,o,w,e.r,e.g,e.b,e.lineWidth,e.dashed,i)):n.type==="2point"?t.set_drawing_preview(n.previewKind,s.x1,s.y1,o,w,e.r,e.g,e.b,e.lineWidth,e.dashed,i):n.type==="1point_x"?t.set_drawing_preview(n.previewKind,o,0,0,0,e.r,e.g,e.b,e.lineWidth,e.dashed,i):n.type==="1point_xp"||n.type==="1point_xy"?t.set_drawing_preview(n.previewKind,o,w,0,0,e.r,e.g,e.b,e.lineWidth,e.dashed,i):t.set_drawing_preview(n.previewKind,0,w,0,0,e.r,e.g,e.b,e.lineWidth,e.dashed,i)}}function F(t,r,s,o){let w=t.screen_to_world_x(r),e;switch(o){case 1:e=t.screen_to_rsi_y(s);break;case 2:e=t.screen_to_oi_y(s);break;case 3:e=t.screen_to_fr_y(s);break;case 4:e=t.screen_to_cvd_y(s);break;case 5:e=t.screen_to_vpin_y(s);break;case 6:e=t.screen_to_ob_flow_y(s);break;default:e=t.screen_to_world_y(s);break}return{wx:w,wy:e}}function J(t){return t===4?1:t===6?2:t===8?3:t===10?4:t===12?5:t===19?6:0}function dt(t){return t===4||t===6||t===8||t===10||t===12||t===19}function D(t){return t===14||t===15||t===16||t===17||t===18||t===21}function x(t){return t===4||t===14?1:t===6||t===15?2:t===8||t===16?3:t===10||t===17?4:t===12||t===18?5:t===19||t===21?6:0}function it(t,r,s,o){dt(r)?(t.pan(s,0),Math.abs(o)>.01&&r!==4&&t.pan_indicator_y(x(r),o)):t.pan(s,o)}function q(t){return t===0||t===4||t===6||t===8||t===10||t===12}function _e(t,r,s,o){t.addEventListener("wheel",u=>{if(o.disposed)return;u.preventDefault(),o.cancelMomentum();let f=u.deltaY>0?1.1:.9,h=r.hit_zone(u.offsetX,u.offsetY);D(h)?h!==14&&r.zoom_indicator_y(x(h),u.offsetY,f):dt(h)?h===4?r.zoom_x(u.offsetX,f):u.ctrlKey?r.zoom_indicator_y(x(h),u.offsetY,f):r.zoom_x(u.offsetX,f):u.ctrlKey?r.zoom_y(u.offsetY,f):u.shiftKey||h===2?r.zoom_x(u.offsetX,f):h===3?r.zoom_y(u.offsetY,f):r.zoom(u.offsetX,u.offsetY,f),s.onDirty()},{passive:!1}),t.addEventListener("mousedown",u=>{if(o.disposed||u.button!==0)return;o.cancelMomentum(),e();let f=performance.now();if(f-o.lastClickTime<300){o.lastClickTime=f;return}o.lastClickTime=f;let h=o.drawingMode;if(h){let a=r.hit_zone(u.offsetX,u.offsetY);if(!q(a))return;let _=J(a),{wx:d,wy:p}=F(r,u.offsetX,u.offsetY,_),c=h.style,M=h.tool;if(st(M)){if(!h.pathStarted)h.pane=_,r.start_elliott_manual(c.r,c.g,c.b,c.lineWidth,_),r.add_elliott_manual_point(d,p),h.pathStarted=!0,h.step=1;else if(r.add_elliott_manual_point(d,p)){o.finishDrawing(),s.onDirty();return}}else if(ot(M))h.pathStarted?r.add_path_point(d,p):(h.pane=_,r.start_path(c.r,c.g,c.b,c.lineWidth,c.dashed,_),r.add_path_point(d,p),h.pathStarted=!0,h.step=1);else if(Et(M))h.pane=_,r.start_brush(c.r,c.g,c.b,c.lineWidth,_),r.add_brush_point(d,p),o.isBrushing=!0;else if(It(M))if(h.step===0)h.x1=d,h.y1=p,h.pane=_,h.step=1;else if(h.step===1)h.x2=d,h.y2=p,h.step=2,r.clear_drawing_preview();else{let m=K[M];m&&m.previewFn==="fib_ext"?r.clear_fib_ext_preview():r.clear_channel_preview(),nt(r,M,h,d,p,c),o.finishDrawing()}else if(bt(M))h.step===0?(h.x1=d,h.y1=p,h.pane=_,h.step=1):(nt(r,M,h,d,p,c),o.finishDrawing());else{h.pane=_;let m=nt(r,M,h,d,p,c);o.finishDrawing(),M==="textnote"&&m>0&&(r.select_drawing(m),s.onDrawingSelected?.(m),s.onDrawingDblClick?.(m,u.offsetX,u.offsetY,u.clientX,u.clientY))}s.onDirty();return}let g=r.hit_zone(u.offsetX,u.offsetY);if(g===5){o.isResizingRsi=!0,o.resizeStartY=u.offsetY,o.resizeStartRatio=r.get_rsi_ratio(),t.style.cursor="ns-resize";return}if(g===7){o.isResizingOi=!0,o.resizeStartY=u.offsetY,o.resizeStartRatio=r.get_oi_ratio(),t.style.cursor="ns-resize";return}if(g===9){o.isResizingFr=!0,o.resizeStartY=u.offsetY,o.resizeStartRatio=r.get_fr_ratio(),t.style.cursor="ns-resize";return}if(g===11){o.isResizingCvd=!0,o.resizeStartY=u.offsetY,o.resizeStartRatio=r.get_cvd_ratio(),t.style.cursor="ns-resize";return}if(g===13){o.isResizingVpin=!0,o.resizeStartY=u.offsetY,o.resizeStartRatio=r.get_vpin_ratio(),t.style.cursor="ns-resize";return}if(g===20){o.isResizingObFlow=!0,o.resizeStartY=u.offsetY,o.resizeStartRatio=r.get_obf_ratio(),t.style.cursor="ns-resize";return}if(q(g)){let a=r.get_selected_drawing();if(a>0){let M=r.hit_test_drawing_anchor(u.offsetX,u.offsetY);if(M>=0){o.isDraggingAnchor=!0,o.dragAnchorIdx=M,o.dragAnchorPane=J(g),t.style.cursor="grabbing";return}if(r.hit_test_drawing(u.offsetX,u.offsetY)===a){o.isDraggingDrawing=!0,o.dragDrawingPane=J(g);let{wx:I,wy:L}=F(r,u.offsetX,u.offsetY,o.dragDrawingPane);o.dragDrawingLastWx=I,o.dragDrawingLastWy=L,t.style.cursor="move";return}}let _=r.hit_test_drawing(u.offsetX,u.offsetY);if(_>0){r.deselect_marker(),s.onMarkerSelected?.(0),r.select_drawing(_),s.onDrawingSelected?.(_),s.onDirty();return}let d=r.hit_test_marker(u.offsetX,u.offsetY);if(d>0){r.deselect_drawing(),s.onDrawingSelected?.(0),r.select_marker(d),s.onMarkerSelected?.(d),s.onDirty();return}let p=r.get_selected_drawing(),c=r.get_selected_marker();p>0&&(r.deselect_drawing(),s.onDrawingSelected?.(0),s.onDirty()),c>0&&(r.deselect_marker(),s.onMarkerSelected?.(0),s.onDirty())}q(g)&&(o.liqPinSx=u.offsetX,o.liqPinSy=u.offsetY,o.liqPinTimer&&clearTimeout(o.liqPinTimer),o.liqPinTimer=setTimeout(()=>{o.liqPinTimer=null,s.onLiqAnnotationPin?.(o.liqPinSx,o.liqPinSy)},700)),o.isDragging=!0,o.dragZone=g,o.lastX=u.offsetX,o.lastY=u.offsetY,g===2?t.style.cursor="ew-resize":g===3||D(g)?t.style.cursor="ns-resize":t.style.cursor="grabbing"});let w=null;function e(){w&&(cancelAnimationFrame(w),w=null)}function i(u,f){let h=r.hover_hit_test(u,f),g=h[0],a=h[1],_=h[2],d=h[3],p=h[4],c=o.drawingMode;g===2?t.style.cursor="ew-resize":g===3||D(g)||g===5||g===7||g===9||g===11||g===13||g===20?t.style.cursor="ns-resize":!c&&q(g)&&a>0&&_>=0?t.style.cursor="grab":!c&&q(g)&&a>0&&d===a?t.style.cursor="move":!c&&q(g)&&(d>0||p>0)?t.style.cursor="pointer":t.style.cursor="crosshair"}function n(u,f){let h=r.hit_zone(u,f);h===2||h===3||D(h)?r.hide_crosshair():r.set_crosshair(u,f),s.onDirty(),s.onCrosshairMove?.(u,f,h),s.onVrvpHover?.(u,f),o._pendingHoverX=u,o._pendingHoverY=f,w||(w=requestAnimationFrame(()=>{w=null,o.disposed||i(o._pendingHoverX,o._pendingHoverY)}))}t.addEventListener("mousemove",u=>{if(o.disposed)return;if(o.liqPinTimer){let h=Math.abs(u.offsetX-o.liqPinSx),g=Math.abs(u.offsetY-o.liqPinSy);(h>6||g>6)&&(clearTimeout(o.liqPinTimer),o.liqPinTimer=null)}if(o.isResizingRsi){let g=t.getBoundingClientRect().height-28,_=(o.resizeStartY-u.offsetY)/g,d=Math.max(.05,Math.min(.5,o.resizeStartRatio+_));r.set_rsi_ratio(d),s.onDirty();return}if(o.isResizingOi){let g=t.getBoundingClientRect().height-28,_=(o.resizeStartY-u.offsetY)/g,d=Math.max(.05,Math.min(.5,o.resizeStartRatio+_));r.set_oi_ratio(d),s.onDirty();return}if(o.isResizingFr){let g=t.getBoundingClientRect().height-28,_=(o.resizeStartY-u.offsetY)/g,d=Math.max(.05,Math.min(.5,o.resizeStartRatio+_));r.set_fr_ratio(d),s.onDirty();return}if(o.isResizingCvd){let g=t.getBoundingClientRect().height-28,_=(o.resizeStartY-u.offsetY)/g,d=Math.max(.05,Math.min(.5,o.resizeStartRatio+_));r.set_cvd_ratio(d),s.onDirty();return}if(o.isResizingVpin){let g=t.getBoundingClientRect().height-28,_=(o.resizeStartY-u.offsetY)/g,d=Math.max(.05,Math.min(.5,o.resizeStartRatio+_));r.set_vpin_ratio(d),s.onDirty();return}if(o.isResizingObFlow){let g=t.getBoundingClientRect().height-28,_=(o.resizeStartY-u.offsetY)/g,d=Math.max(.05,Math.min(.5,o.resizeStartRatio+_));r.set_obf_ratio(d),s.onDirty();return}if(o.isDraggingAnchor){let{wx:h,wy:g}=F(r,u.offsetX,u.offsetY,o.dragAnchorPane);r.update_drawing_anchor(o.dragAnchorIdx,h,g),r.set_crosshair(u.offsetX,u.offsetY),s.onDirty(),s.onCrosshairMove?.(u.offsetX,u.offsetY,r.hit_zone(u.offsetX,u.offsetY));return}if(o.isDraggingDrawing){let{wx:h,wy:g}=F(r,u.offsetX,u.offsetY,o.dragDrawingPane),a=h-o.dragDrawingLastWx,_=g-o.dragDrawingLastWy;r.move_drawing(a,_),o.dragDrawingLastWx=h,o.dragDrawingLastWy=g,r.set_crosshair(u.offsetX,u.offsetY),s.onDirty(),s.onCrosshairMove?.(u.offsetX,u.offsetY,r.hit_zone(u.offsetX,u.offsetY));return}let f=o.drawingMode;if(o.isBrushing&&f){let h=f.pane||0,{wx:g,wy:a}=F(r,u.offsetX,u.offsetY,h);r.add_brush_point(g,a),r.set_crosshair(u.offsetX,u.offsetY),s.onDirty();return}if(f&&st(f.tool)&&f.pathStarted){let h=f.pane||0,{wx:g,wy:a}=F(r,u.offsetX,u.offsetY,h);r.set_elliott_manual_cursor(g,a),r.set_crosshair(u.offsetX,u.offsetY);let _=r.hit_zone(u.offsetX,u.offsetY);s.onDirty(),s.onCrosshairMove?.(u.offsetX,u.offsetY,_);return}if(f&&ot(f.tool)&&f.pathStarted){let h=f.pane||0,{wx:g,wy:a}=F(r,u.offsetX,u.offsetY,h);r.set_path_cursor(g,a),r.set_crosshair(u.offsetX,u.offsetY);let _=r.hit_zone(u.offsetX,u.offsetY);s.onDirty(),s.onCrosshairMove?.(u.offsetX,u.offsetY,_);return}if(f&&f.step>0){let h=f.pane||0,{wx:g,wy:a}=F(r,u.offsetX,u.offsetY,h);U(r,f.tool,f,g,a,f.style,h),r.set_crosshair(u.offsetX,u.offsetY);let _=r.hit_zone(u.offsetX,u.offsetY);s.onDirty(),s.onCrosshairMove?.(u.offsetX,u.offsetY,_);return}if(f&&wt(f.tool)){let h=r.hit_zone(u.offsetX,u.offsetY),g=J(h),{wx:a,wy:_}=F(r,u.offsetX,u.offsetY,g);U(r,f.tool,f,a,_,f.style,g),r.set_crosshair(u.offsetX,u.offsetY),s.onDirty(),s.onCrosshairMove?.(u.offsetX,u.offsetY,h);return}if(o.isDragging){let h=u.offsetX-o.lastX,g=u.offsetY-o.lastY;o.lastX=u.offsetX,o.lastY=u.offsetY,o.dragZone===2?r.pan_x(h):o.dragZone===3?r.pan_y(g):o.dragZone===14||(D(o.dragZone)?r.pan_indicator_y(x(o.dragZone),g):it(r,o.dragZone,h,g)),r.set_crosshair(u.offsetX,u.offsetY),s.onDirty(),s.onCrosshairMove?.(u.offsetX,u.offsetY,o.dragZone),s.onVrvpHover?.(u.offsetX,u.offsetY);return}n(u.offsetX,u.offsetY)}),t.addEventListener("mouseup",()=>{o.disposed||(o.liqPinTimer&&(clearTimeout(o.liqPinTimer),o.liqPinTimer=null),o.isBrushing&&(o.isBrushing=!1,r.finish_brush(),o.finishDrawing(),s.onDirty()),o.isDragging=!1,o.isResizingRsi=!1,o.isResizingOi=!1,o.isResizingFr=!1,o.isResizingCvd=!1,o.isResizingVpin=!1,o.isResizingObFlow=!1,o.isDraggingAnchor=!1,o.isDraggingDrawing=!1,o.dragAnchorIdx=-1,t.style.cursor="crosshair")});function l(){o.disposed||o._leaveHandled||(o._leaveHandled=!0,requestAnimationFrame(()=>{o._leaveHandled=!1}),e(),o.liqPinTimer&&(clearTimeout(o.liqPinTimer),o.liqPinTimer=null),o.isBrushing&&(o.isBrushing=!1,r.finish_brush(),o.finishDrawing()),o.isDragging=!1,o.isResizingRsi=!1,o.isResizingOi=!1,o.isResizingFr=!1,o.isResizingCvd=!1,o.isResizingVpin=!1,o.isResizingObFlow=!1,o.isDraggingAnchor=!1,o.isDraggingDrawing=!1,o.dragAnchorIdx=-1,r.hide_crosshair(),t.style.cursor="crosshair",s.onDirty(),s.onCrosshairHide?.(),s.onVrvpHover?.(null,null))}t.addEventListener("pointerleave",l),t.addEventListener("mouseleave",l),t.addEventListener("dblclick",u=>{if(o.disposed)return;u.preventDefault(),u.stopPropagation();let f=o.drawingMode;if(f&&st(f.tool)&&f.pathStarted){r.finish_elliott_manual(),o.finishDrawing(),s.onDirty();return}if(f&&ot(f.tool)&&f.pathStarted){r.finish_path(),o.finishDrawing(),s.onDirty();return}if(f)return;let h=r.hit_zone(u.offsetX,u.offsetY);if(dt(h)||D(h)){r.reset_indicator_y_auto(x(h)),s.onDirty();return}let g=r.hit_test_drawing(u.offsetX,u.offsetY);g>0&&(r.select_drawing(g),s.onDirty(),s.onDrawingDblClick?.(g,u.offsetX,u.offsetY,u.clientX,u.clientY))}),t.addEventListener("contextmenu",u=>{if(o.disposed)return;let f=o.drawingMode;if(f&&st(f.tool)&&f.pathStarted){u.preventDefault(),u.stopPropagation(),r.finish_elliott_manual(),o.finishDrawing(),s.onDirty();return}if(f&&ot(f.tool)&&f.pathStarted){u.preventDefault(),u.stopPropagation(),r.finish_path(),o.finishDrawing(),s.onDirty();return}})}function ce(t,r,s,o){t.addEventListener("touchstart",w=>{if(!o.disposed){if(w.preventDefault(),o.cancelMomentum(),w.touches.length===2){clearTimeout(o.longPressTimer),o.isCrosshairMode=!1;let e=t.getBoundingClientRect(),i=w.touches[1].clientX-w.touches[0].clientX,n=w.touches[1].clientY-w.touches[0].clientY;o.lastTouchDist=Math.sqrt(i*i+n*n),o.lastX=(w.touches[0].clientX+w.touches[1].clientX)/2-e.left,o.lastY=(w.touches[0].clientY+w.touches[1].clientY)/2-e.top,o.dragZone=r.hit_zone(o.lastX,o.lastY),o.pinchAnchorY=o.lastY}else if(w.touches.length===1){let e=t.getBoundingClientRect(),i=w.touches[0].clientX-e.left,n=w.touches[0].clientY-e.top;o.touchStartX=i,o.touchStartY=n,o.touchMoved=!1;let l=o.drawingMode;if(l){let a=r.hit_zone(i,n);if(q(a)){let _=J(a),{wx:d,wy:p}=F(r,i,n,_),c=l.tool;if(st(c)){if(!l.pathStarted)l.pane=_,r.start_elliott_manual(l.style.r,l.style.g,l.style.b,l.style.lineWidth,_),r.add_elliott_manual_point(d,p),l.pathStarted=!0,l.step=1;else if(r.add_elliott_manual_point(d,p)){o.finishDrawing(),s.onDirty();return}}else ot(c)?l.pathStarted?r.add_path_point(d,p):(l.pane=_,r.start_path(l.style.r,l.style.g,l.style.b,l.style.lineWidth,l.style.dashed,_),r.add_path_point(d,p),l.pathStarted=!0,l.step=1):Et(c)?(l.pane=_,r.start_brush(l.style.r,l.style.g,l.style.b,l.style.lineWidth,_),r.add_brush_point(d,p),o.isBrushing=!0):It(c)?l.step===0?(l.x1=d,l.y1=p,l.pane=_,l.step=1,l._stepAtTouchStart=0,U(r,c,l,d,p,l.style,_)):l.step===1?(l._stepAtTouchStart=1,U(r,c,l,d,p,l.style,l.pane)):(l._stepAtTouchStart=2,U(r,c,l,d,p,l.style,l.pane)):bt(c)?l.step===0?(l.x1=d,l.y1=p,l.pane=_,l.step=1,l._stepAtTouchStart=0,U(r,c,l,d,p,l.style,_)):(l._stepAtTouchStart=1,U(r,c,l,d,p,l.style,l.pane)):wt(c)?(l.pane=_,U(r,c,l,d,p,l.style,_)):(l.pane=_,nt(r,c,l,d,p,l.style),o.finishDrawing());r.set_crosshair(i,n),s.onDirty(),s.onCrosshairMove?.(i,n,a)}return}let u=r.hover_hit_test(i,n),f=u[0],h=u[1],g=u[2];if(q(f)&&!o.drawingMode&&h>0){if(g>=0){o.isDraggingAnchor=!0,o.dragAnchorIdx=g,o.dragAnchorPane=J(f);return}if(u[3]===h){o.isDraggingDrawing=!0,o.dragDrawingPane=J(f);let{wx:_,wy:d}=F(r,i,n,o.dragDrawingPane);o.dragDrawingLastWx=_,o.dragDrawingLastWy=d;return}}o.isDragging=!0,o.isCrosshairMode=!1,o.lastX=i,o.lastY=n,o.dragZone=f,clearTimeout(o.longPressTimer),o.longPressTimer=setTimeout(()=>{o.isDragging&&!o.touchMoved&&(o.isCrosshairMode=!0,r.set_crosshair(i,n),s.onDirty(),s.onCrosshairMove?.(i,n,o.dragZone),s.onVrvpHover?.(i,n))},300),q(o.dragZone)&&(o.liqPinSx=i,o.liqPinSy=n,o.liqPinTimer&&clearTimeout(o.liqPinTimer),o.liqPinTimer=setTimeout(()=>{o.liqPinTimer=null,o.touchMoved||s.onLiqAnnotationPin?.(o.liqPinSx,o.liqPinSy)},700))}}},{passive:!1}),t.addEventListener("touchmove",w=>{if(o.disposed)return;w.preventDefault();let e=t.getBoundingClientRect();if(o.isDraggingAnchor&&w.touches.length===1){let n=w.touches[0].clientX-e.left,l=w.touches[0].clientY-e.top,{wx:u,wy:f}=F(r,n,l,o.dragAnchorPane);r.update_drawing_anchor(o.dragAnchorIdx,u,f),r.set_crosshair(n,l),s.onDirty();return}if(o.isDraggingDrawing&&w.touches.length===1){let n=w.touches[0].clientX-e.left,l=w.touches[0].clientY-e.top;o.touchMoved=!0;let{wx:u,wy:f}=F(r,n,l,o.dragDrawingPane),h=u-o.dragDrawingLastWx,g=f-o.dragDrawingLastWy;r.move_drawing(h,g),o.dragDrawingLastWx=u,o.dragDrawingLastWy=f,r.set_crosshair(n,l),s.onDirty();return}let i=o.drawingMode;if(o.isBrushing&&i&&w.touches.length===1){let n=w.touches[0].clientX-e.left,l=w.touches[0].clientY-e.top,u=i.pane||0,{wx:f,wy:h}=F(r,n,l,u);r.add_brush_point(f,h),r.set_crosshair(n,l),s.onDirty(),o.touchMoved=!0;return}if(i&&st(i.tool)&&i.pathStarted&&w.touches.length===1){let n=w.touches[0].clientX-e.left,l=w.touches[0].clientY-e.top,u=i.pane||0,{wx:f,wy:h}=F(r,n,l,u);r.set_elliott_manual_cursor(f,h),r.set_crosshair(n,l),s.onDirty(),o.touchMoved=!0;return}if(i&&ot(i.tool)&&i.pathStarted&&w.touches.length===1){let n=w.touches[0].clientX-e.left,l=w.touches[0].clientY-e.top,u=i.pane||0,{wx:f,wy:h}=F(r,n,l,u);r.set_path_cursor(f,h),r.set_crosshair(n,l),s.onDirty(),o.touchMoved=!0;return}if(i&&i.step>0&&w.touches.length===1){let n=w.touches[0].clientX-e.left,l=w.touches[0].clientY-e.top;!o.touchMoved&&(Math.abs(n-o.touchStartX)>10||Math.abs(l-o.touchStartY)>10)&&(o.touchMoved=!0);let u=i.pane||0,{wx:f,wy:h}=F(r,n,l,u);U(r,i.tool,i,f,h,i.style,u),r.set_crosshair(n,l);let g=r.hit_zone(n,l);s.onDirty(),s.onCrosshairMove?.(n,l,g);return}if(i&&wt(i.tool)&&w.touches.length===1){let n=w.touches[0].clientX-e.left,l=w.touches[0].clientY-e.top,u=r.hit_zone(n,l),f=J(u),{wx:h,wy:g}=F(r,n,l,f);U(r,i.tool,i,h,g,i.style,f),r.set_crosshair(n,l),s.onDirty(),s.onCrosshairMove?.(n,l,u);return}if(w.touches.length===2){o.velSamples=[];let n=w.touches[1].clientX-w.touches[0].clientX,l=w.touches[1].clientY-w.touches[0].clientY,u=Math.sqrt(n*n+l*l),f=o.lastTouchDist/u,h=(w.touches[0].clientX+w.touches[1].clientX)/2-e.left,g=(w.touches[0].clientY+w.touches[1].clientY)/2-e.top,a=o.pinchAnchorY??g;o.dragZone===3?r.zoom_y(a,f):D(o.dragZone)&&o.dragZone!==14?r.zoom_indicator_y(x(o.dragZone),a,f):o.dragZone===14?(r.zoom_x(h,f),it(r,4,h-o.lastX,g-o.lastY)):o.dragZone===2?r.zoom_x(h,f):dt(o.dragZone)?(r.zoom_x(h,f),it(r,o.dragZone,h-o.lastX,g-o.lastY)):(r.zoom(h,g,f),it(r,o.dragZone,h-o.lastX,g-o.lastY)),o.lastTouchDist=u,o.lastX=h,o.lastY=g,s.onDirty()}else if(w.touches.length===1&&o.isDragging){let n=w.touches[0].clientX-e.left,l=w.touches[0].clientY-e.top,u=n-o.lastX,f=l-o.lastY;if(!o.touchMoved&&(Math.abs(n-o.touchStartX)>10||Math.abs(l-o.touchStartY)>10)&&(o.touchMoved=!0,o.isCrosshairMode||clearTimeout(o.longPressTimer),o.liqPinTimer&&(clearTimeout(o.liqPinTimer),o.liqPinTimer=null)),o.isCrosshairMode)r.set_crosshair(n,l),s.onDirty(),s.onCrosshairMove?.(n,l,o.dragZone),s.onVrvpHover?.(n,l);else{if(o.lastX=n,o.lastY=l,o.dragZone===3||D(o.dragZone)||o.recordVelocity(u,f),o.dragZone===2)r.pan_x(u);else if(o.dragZone===3){let g=Math.pow(1.005,f);r.zoom_y(o.touchStartY,g)}else if(o.dragZone!==14)if(D(o.dragZone)){let g=Math.pow(1.005,f);r.zoom_indicator_y(x(o.dragZone),o.touchStartY,g)}else it(r,o.dragZone,u,f);s.onDirty()}}},{passive:!1}),t.addEventListener("touchend",w=>{if(o.disposed)return;if(clearTimeout(o.longPressTimer),o.liqPinTimer&&(clearTimeout(o.liqPinTimer),o.liqPinTimer=null),o.isDraggingAnchor){o.isDraggingAnchor=!1,o.dragAnchorIdx=-1,r.hide_crosshair(),s.onDirty(),s.onCrosshairHide?.();return}if(o.isDraggingDrawing){if(o.isDraggingDrawing=!1,r.hide_crosshair(),s.onDirty(),s.onCrosshairHide?.(),!o.touchMoved){let i=r.get_selected_drawing();if(i>0){let n=t.getBoundingClientRect();s.onDrawingDblClick?.(i,o.touchStartX,o.touchStartY,o.touchStartX+n.left,o.touchStartY+n.top)}}return}if(o.isBrushing){o.isBrushing=!1,r.finish_brush(),o.finishDrawing(),s.onDirty(),s.onCrosshairHide?.();return}let e=o.drawingMode;if(e&&st(e.tool)&&e.pathStarted){let i=Date.now(),n=o.touchStartX-(o._pathLastTapX||0),l=o.touchStartY-(o._pathLastTapY||0),u=Math.sqrt(n*n+l*l);i-(o._pathLastTapTime||0)<350&&u<30?(r.finish_elliott_manual(),o.finishDrawing(),o._pathLastTapTime=0):(o._pathLastTapTime=i,o._pathLastTapX=o.touchStartX,o._pathLastTapY=o.touchStartY),o.isDragging=!1,o.lastTouchDist=0,s.onDirty();return}if(e&&ot(e.tool)&&e.pathStarted){let i=Date.now(),n=o.touchStartX-(o._pathLastTapX||0),l=o.touchStartY-(o._pathLastTapY||0),u=Math.sqrt(n*n+l*l);i-(o._pathLastTapTime||0)<350&&u<30?(r.finish_path(),o.finishDrawing(),o._pathLastTapTime=0):(o._pathLastTapTime=i,o._pathLastTapX=o.touchStartX,o._pathLastTapY=o.touchStartY),o.isDragging=!1,o.lastTouchDist=0,s.onDirty();return}if(e&&It(e.tool)){let i=e._stepAtTouchStart;if(e.step===1&&(i===1||o.touchMoved)){let n=t.getBoundingClientRect(),l=w.changedTouches?.[0];if(l){let u=l.clientX-n.left,f=l.clientY-n.top,h=e.pane||0,{wx:g,wy:a}=F(r,u,f,h);e.x2=g,e.y2=a,e.step=2,r.clear_drawing_preview()}}else if(e.step===2&&(i===2||o.touchMoved)){let n=t.getBoundingClientRect(),l=w.changedTouches?.[0];if(l){let u=l.clientX-n.left,f=l.clientY-n.top,h=e.pane||0,{wx:g,wy:a}=F(r,u,f,h),_=K[e.tool];_&&_.previewFn==="fib_ext"?r.clear_fib_ext_preview():r.clear_channel_preview(),nt(r,e.tool,e,g,a,e.style),o.finishDrawing()}}o.isDragging=!1,o.lastTouchDist=0,o.drawingMode||(r.hide_crosshair(),s.onCrosshairHide?.()),s.onDirty();return}if(e&&e.step===1&&bt(e.tool)){if(e._stepAtTouchStart===1||o.touchMoved){let n=t.getBoundingClientRect(),l=w.changedTouches?.[0];if(l){let u=l.clientX-n.left,f=l.clientY-n.top,h=e.pane||0,{wx:g,wy:a}=F(r,u,f,h);nt(r,e.tool,e,g,a,e.style),o.finishDrawing()}}o.isDragging=!1,o.lastTouchDist=0,o.drawingMode||(r.hide_crosshair(),s.onCrosshairHide?.()),s.onDirty();return}if(e&&wt(e.tool)){let i=t.getBoundingClientRect(),n=w.changedTouches?.[0];if(n){let l=n.clientX-i.left,u=n.clientY-i.top,f=r.hit_zone(l,u),h=q(f)?J(f):e.pane||0,{wx:g,wy:a}=F(r,l,u,h),_=e.tool;r.clear_drawing_preview();let d=nt(r,_,e,g,a,e.style);o.finishDrawing(),_==="textnote"&&d>0&&(r.select_drawing(d),s.onDrawingSelected?.(d),s.onDrawingDblClick?.(d,l,u,l+i.left,u+i.top))}o.isDragging=!1,o.lastTouchDist=0,r.hide_crosshair(),s.onCrosshairHide?.(),s.onDirty();return}if(!o.touchMoved&&!o.drawingMode&&o.isDragging){let i=Date.now(),n=o.touchStartX-o.lastTapX,l=o.touchStartY-o.lastTapY,u=Math.sqrt(n*n+l*l),f=i-o.lastTapTime<350&&u<30,h=r.hover_hit_test(o.touchStartX,o.touchStartY),g=h[0],a=h[1],_=h[3],d=h[4];if(f&&(dt(g)||D(g)))r.reset_indicator_y_auto(x(g)),s.onDirty(),o.lastTapTime=i,o.lastTapX=o.touchStartX,o.lastTapY=o.touchStartY;else if(q(g))if(_>0){r.deselect_marker(),s.onMarkerSelected?.(0),r.select_drawing(_);let p=t.getBoundingClientRect(),c=o.touchStartX+p.left,M=o.touchStartY+p.top;s.onDrawingSelected?.(_,c,M),(a<=0||a===_)&&s.onDrawingDblClick?.(_,o.touchStartX,o.touchStartY,c,M),s.onDirty()}else d>0?(r.deselect_drawing(),s.onDrawingSelected?.(0),r.select_marker(d),s.onMarkerSelected?.(d),s.onDirty()):(a>0&&(r.deselect_drawing(),s.onDrawingSelected?.(0),s.onDirty()),r.get_selected_marker()>0&&(r.deselect_marker(),s.onMarkerSelected?.(0),s.onDirty()));o.lastTapTime=i,o.lastTapX=o.touchStartX,o.lastTapY=o.touchStartY}o.touchMoved&&!o.isCrosshairMode&&!o.drawingMode&&o.dragZone!==3&&!D(o.dragZone)&&o.startMomentum(o.dragZone),o.isDragging=!1,o.isCrosshairMode=!1,o.lastTouchDist=0,(!o.drawingMode||o.drawingMode.step===0)&&(r.hide_crosshair(),s.onCrosshairHide?.()),s.onDirty(),s.onVrvpHover?.(null,null)})}function Xt(t,r,s){let o={disposed:!1,isDragging:!1,dragZone:0,lastX:0,lastY:0,lastTouchDist:0,isResizingRsi:!1,isResizingOi:!1,isResizingFr:!1,isResizingCvd:!1,resizeStartY:0,resizeStartRatio:0,lastClickTime:0,isDraggingAnchor:!1,dragAnchorIdx:-1,dragAnchorPane:0,isBrushing:!1,isDraggingDrawing:!1,dragDrawingPane:0,dragDrawingLastWx:0,dragDrawingLastWy:0,touchStartX:0,touchStartY:0,touchMoved:!1,longPressTimer:null,isCrosshairMode:!1,liqPinTimer:null,liqPinSx:0,liqPinSy:0,velSamples:[],momentumRaf:null,momentumVx:0,momentumVy:0,momentumZone:0,lastTapTime:0,lastTapX:0,lastTapY:0,drawingMode:null},w=.92,e=.5,i=80;o.recordVelocity=function(f,h){let g=performance.now();for(o.velSamples.push({dx:f,dy:h,t:g});o.velSamples.length>0&&g-o.velSamples[0].t>i;)o.velSamples.shift()};function n(){if(o.velSamples.length<2)return{vx:0,vy:0};let f=o.velSamples[0],g=o.velSamples[o.velSamples.length-1].t-f.t;if(g<5)return{vx:0,vy:0};let a=0,_=0;for(let p of o.velSamples)a+=p.dx,_+=p.dy;let d=16.67;return{vx:a/g*d,vy:_/g*d}}o.cancelMomentum=function(){o.momentumRaf&&(cancelAnimationFrame(o.momentumRaf),o.momentumRaf=null),o.velSamples=[]},o.startMomentum=function(f){let{vx:h,vy:g}=n();if(o.velSamples=[],Math.abs(h)<e&&Math.abs(g)<e)return;o.momentumVx=h,o.momentumVy=g,o.momentumZone=f;function a(){if(o.momentumVx*=w,o.momentumVy*=w,Math.abs(o.momentumVx)<e&&Math.abs(o.momentumVy)<e){o.momentumRaf=null;return}if(o.momentumZone===2)r.pan_x(o.momentumVx);else if(o.momentumZone===3)r.pan_y(o.momentumVy);else if(o.momentumZone===14){o.momentumRaf=null;return}else D(o.momentumZone)?r.pan_indicator_y(x(o.momentumZone),o.momentumVy):it(r,o.momentumZone,o.momentumVx,o.momentumVy);s.onDirty(),o.momentumRaf=requestAnimationFrame(a)}o.momentumRaf=requestAnimationFrame(a)};let l={setMode(f,h){f?(o.drawingMode={tool:f,style:h,step:0,x1:0,y1:0},t.style.cursor="crosshair"):(o.drawingMode?.pathStarted&&r.finish_path(),o.drawingMode=null,r.clear_drawing_preview(),t.style.cursor="crosshair"),s.onDirty()},getMode(){return o.drawingMode}};s.drawingApi?.(l),o.finishDrawing=function(){r.clear_drawing_preview(),s.onDrawingComplete?.(),o.drawingMode=null,t.style.cursor="crosshair"},_e(t,r,s,o),ce(t,r,s,o);let u=f=>{let h=document.activeElement?.tagName,g=h==="INPUT"||h==="TEXTAREA"||document.activeElement?.isContentEditable;if((f.key==="Delete"||f.key==="Backspace")&&!o.drawingMode&&!g){let _=r.get_selected_drawing();if(_>0){r.remove_drawing(_),s.onDrawingSelected?.(0),s.onDirty();return}let d=r.get_selected_marker();if(d>0){r.remove_marker(d),s.onMarkerSelected?.(0),s.onDirty();return}}if(f.key==="Escape"&&!o.drawingMode){if(r.get_selected_drawing()>0){r.deselect_drawing(),s.onDrawingSelected?.(0),s.onDirty();return}if(r.get_selected_marker()>0){r.deselect_marker(),s.onMarkerSelected?.(0),s.onDirty();return}}if(f.key==="Escape"&&o.drawingMode){if(o.drawingMode.pathStarted){o.drawingMode.tool==="elliott"?r.finish_elliott_manual():r.finish_path(),o.finishDrawing(),s.onDirty();return}r.clear_drawing_preview(),o.drawingMode=null,t.style.cursor="crosshair",s.onDrawingCancel?.(),s.onDirty();return}let a=20;switch(f.key){case"+":case"=":r.zoom(t.width/2,t.height/2,.9);break;case"-":r.zoom(t.width/2,t.height/2,1.1);break;case"ArrowLeft":r.pan_x(a);break;case"ArrowRight":r.pan_x(-a);break;case"ArrowUp":r.pan_y(-a);break;case"ArrowDown":r.pan_y(a);break;case"r":case"R":r.auto_scale_y();for(let _=1;_<=5;_++)r.reset_indicator_y_auto(_);break;default:return}s.onDirty()};return window.addEventListener("keydown",u),()=>{o.disposed=!0,o.cancelMomentum(),window.removeEventListener("keydown",u)}}function he(t,r,s,o){let w=e=>o()(e);return{enableRsi(){t.enable_rsi(),r()},disableRsi(){t.disable_rsi(),r()},setRsiPeriod(e){t.set_rsi_period(e),r()},isRsiEnabled(){return t.is_rsi_enabled()},setRsiShowEma(e){t.set_rsi_show_ema(e),r()},setRsiShowWma(e){t.set_rsi_show_wma(e),r()},setRsiShowSignals(e){t.set_rsi_show_signals(e),r()},setRsiShowDivergence(e){t.set_rsi_show_divergence(e),r()},setRsiShowTraps(e){t.set_rsi_show_traps(e),r()},setRsiShowLevels(e){t.set_rsi_show_levels(e),r()},setRsiSmoothing(e){t.set_rsi_smoothing(e),r()},setRsiRatio(e){t.set_rsi_ratio(e),r()},getRsiRatio(){return t.get_rsi_ratio()},enableForexSignals(){w("forexSignals")&&(t.enable_forex_signals(),r())},disableForexSignals(){t.disable_forex_signals(),r()},isForexSignalsEnabled(){return t.is_forex_signals_enabled()},setForexSignalsSetup(e){t.set_forex_signals_setup(e),r()},setForexSignalsMode(e){t.set_forex_signals_mode(e),r()},setForexSignalsShowStats(e){t.set_forex_signals_show_stats(e),r()},getForexSignalsCount(){return t.get_forex_signals_count()},enableOi(){s()||w("oi")&&(t.enable_oi(),r())},disableOi(){s()||(t.disable_oi(),r())},isOiEnabled(){if(s())return!1;try{return t.is_oi_enabled()}catch{return!1}},setOiData(e){s()||(t.set_oi_data(e),r())},setOiDataTs(e,i){s()||(t.set_oi_data_ts(e,i),r())},setOiShowOnChart(e){s()||(t.set_oi_show_on_chart(e),r())},setOiDisplayMode(e){s()||(t.set_oi_display_mode(e),r())},setOiRatio(e){s()||(t.set_oi_ratio(e),r())},getOiRatio(){if(s())return .2;try{return t.get_oi_ratio()}catch{return .2}},enableFundingRate(){s()||w("fundingRate")&&(t.enable_funding_rate(),r())},disableFundingRate(){s()||(t.disable_funding_rate(),r())},isFundingRateEnabled(){if(s())return!1;try{return t.is_funding_rate_enabled()}catch{return!1}},setFrBinanceData(e,i){s()||(t.set_fr_binance_data(e,i),r())},setFrAggData(e,i){s()||(t.set_fr_agg_data(e,i),r())},setFrShowAgg(e){s()||(t.set_fr_show_agg(e),r())},setFrShowSma(e){s()||(t.set_fr_show_sma(e),r())},enableCvd(){s()||w("cvd")&&(t.enable_cvd(),r())},disableCvd(){s()||(t.disable_cvd(),r())},isCvdEnabled(){if(s())return!1;try{return t.is_cvd_enabled()}catch{return!1}},setCvdData(e,i){s()||(t.set_cvd_data(e,i),r())},setCvdSpotData(e,i){s()||(t.set_cvd_spot_data(e,i),r())},setCvdSource(e){s()||(t.set_cvd_source(e),r())},getCvdSource(){if(s())return 0;try{return t.get_cvd_source()}catch{return 0}},setCvdMode(e){s()||(t.set_cvd_mode(e),r())},getCvdMode(){if(s())return 0;try{return t.get_cvd_mode()}catch{return 0}},setCvdShowDelta(e){s()||(t.set_cvd_show_delta(e),r())},getCvdShowDelta(){if(s())return!0;try{return t.get_cvd_show_delta()}catch{return!0}},setCvdShowSignals(e){s()||(t.set_cvd_show_signals(e),r())},getCvdShowSignals(){if(s())return!0;try{return t.get_cvd_show_signals()}catch{return!0}},setCvdShowDivergence(e){s()||(t.set_cvd_show_divergence(e),r())},getCvdShowDivergence(){if(s())return!1;try{return t.get_cvd_show_divergence()}catch{return!1}},enableLargeTrades(){s()||w("largeTrades")&&(t.enable_large_trades(),r())},disableLargeTrades(){s()||(t.disable_large_trades(),r())},isLargeTradesEnabled(){if(s())return!1;try{return t.is_large_trades_enabled()}catch{return!1}},setLargeTradesData(e){s()||(t.set_large_trades_data(e),r())},pushLargeTrade(e,i,n,l){s()||(t.push_large_trade(e,i,n,l),r())},clearLargeTrades(){s()||(t.clear_large_trades(),r())},setLtVolumeFilter(e,i){s()||(t.set_lt_volume_filter(e,i),r())},setLtBubbleScale(e){s()||(t.set_lt_bubble_scale(e),r())},getLtDataMinVol(){return s()?0:t.get_lt_data_min_vol()},getLtDataMaxVol(){return s()?0:t.get_lt_data_max_vol()},ltHitTest(e,i){if(s())return"";try{return t.lt_hit_test(e,i)}catch{return""}},enableVrvp(){s()||w("vrvp")&&(t.enable_vrvp(),r())},disableVrvp(){s()||(t.disable_vrvp(),r())},isVrvpEnabled(){if(s())return!1;try{return t.is_vrvp_enabled()}catch{return!1}},setVrvpPocLine(e){s()||(t.set_vrvp_poc_line(e),r())},vrvpHitTest(e,i){if(s())return"";try{return t.vrvp_hit_test(e,i)}catch{return""}},enableTpo(){s()||w("tpo")&&(t.enable_tpo(),r())},disableTpo(){s()||(t.disable_tpo(),r())},isTpoEnabled(){if(s())return!1;try{return t.is_tpo_enabled()}catch{return!1}},setTpoPocLine(e){s()||(t.set_tpo_poc_line(e),r())},setTpoVaLines(e){s()||(t.set_tpo_va_lines(e),r())},setTpoIb(e){s()||(t.set_tpo_ib(e),r())},setTpoSinglePrints(e){s()||(t.set_tpo_single_prints(e),r())},setTpoPeriod(e){s()||(t.set_tpo_period(e),r())},getTpoPeriod(){if(s())return 1440;try{return t.get_tpo_period()}catch{return 1440}},setTpoNakedPoc(e){s()||(t.set_tpo_naked_poc(e),r())},setTpoProfileShape(e){s()||(t.set_tpo_profile_shape(e),r())},setTpoIbMinutes(e){s()||(t.set_tpo_ib_minutes(e),r())},setTpoLetterMinutes(e){s()||(t.set_tpo_letter_minutes(e),r())},setTpoSignals(e){s()||(t.set_tpo_signals(e),r())},isTpoSignals(){if(s())return!1;try{return t.is_tpo_signals()}catch{return!1}},enableLiqHeatmap(){s()||w("liqHeatmap")&&(t.enable_liq_heatmap(),r())},disableLiqHeatmap(){s()||(t.disable_liq_heatmap(),r())},isLiqHeatmapEnabled(){if(s())return!1;try{return t.is_liq_heatmap_enabled()}catch{return!1}},setLiqHeatmapRange(e,i){s()||(t.set_liq_heatmap_range(e,i),r())},getLiqHeatmapMin(){if(s())return 0;try{return t.get_liq_heatmap_min()}catch{return 0}},getLiqHeatmapMax(){if(s())return 1;try{return t.get_liq_heatmap_max()}catch{return 1}},getLiqHeatmapSegMax(){if(s())return 0;try{return t.get_liq_heatmap_seg_max()}catch{return 0}},setLiqHeatmapProfile(e){s()||(t.set_liq_heatmap_profile(e),r())},isLiqHeatmapProfile(){if(s())return!0;try{return t.is_liq_heatmap_profile()}catch{return!0}},setLiqHeatmapCellHeight(e){s()||(t.set_liq_heatmap_cell_height(e),r())},getLiqHeatmapCellHeight(){if(s())return 1;try{return t.get_liq_heatmap_cell_height()}catch{return 1}},setLiqHeatmapPredictions(e){s()||(t.set_liq_heatmap_predictions(e),r())},setLiqHeatmapFilledPct(e){s()||(t.set_liq_heatmap_filled_pct(e),r())},getLiqHeatmapFilledPct(){if(s())return .85;try{return t.get_liq_heatmap_filled_pct()}catch{return .85}},liqHeatmapHitTest(e,i){if(s())return"";try{return t.liq_heatmap_hit_test(e,i)}catch{return""}},liqZoneHitTest(e,i){if(s())return"";try{return t.liq_zone_hit_test(e,i)}catch{return""}},enableSmartRanges(){s()||w("smartRanges")&&(t.enable_smart_ranges(),r())},disableSmartRanges(){s()||(t.disable_smart_ranges(),r())},isSmartRangesEnabled(){if(s())return!1;try{return t.is_smart_ranges_enabled()}catch{return!1}},setSrTextSize(e){s()||(t.set_sr_text_size(e),r())},setSrShowOb(e){s()||(t.set_sr_show_ob(e),r())},setSrObLast(e){s()||(t.set_sr_ob_last(e),r())},setSrShowObActivity(e){s()||(t.set_sr_show_ob_activity(e),r())},setSrShowBreakers(e){s()||(t.set_sr_show_breakers(e),r())},setSrMitigation(e){s()||(t.set_sr_mitigation(e),r())},setSrShowMetrics(e){s()||(t.set_sr_show_metrics(e),r())},setSrShowHtfOb(e){s()||(t.set_sr_show_htf_ob(e),r())},setSrHtfMinutes(e){s()||(t.set_sr_htf_minutes(e),r())},setSrShowFvg(e){s()||(t.set_sr_show_fvg(e),r())},setSrFvgTheme(e){s()||(t.set_sr_fvg_theme(e),r())},setSrFvgMitigation(e){s()||(t.set_sr_fvg_mitigation(e),r())},setSrFvgHtf(e){s()||(t.set_sr_fvg_htf(e),r())},setSrFvgExtend(e){s()||(t.set_sr_fvg_extend(e),r())},setSrShowObSignals(e){s()||(t.set_sr_show_ob_signals(e),r())},setSrShowPredict(e){s()||(t.set_sr_show_predict(e),r())},setSrShowFvgSignals(e){s()||(t.set_sr_show_fvg_signals(e),r())},setSrShowSmartRev(e){s()||(t.set_sr_show_smart_rev(e),r())},setSrSmartRevHtf(e){s()||(t.set_sr_smart_rev_htf(e),r())},setSrStatsType(e){s()||(t.set_sr_stats_type(e),r())},setSrStatsPosition(e){s()||(t.set_sr_stats_position(e),r())},getSrSignalsCount(){if(s())return 0;try{return t.get_sr_signals_count()}catch{return 0}},enableEmaStructure(){s()||w("emaStructure")&&(t.enable_ema_structure(),r())},disableEmaStructure(){s()||(t.disable_ema_structure(),r())},isEmaStructureEnabled(){if(s())return!1;try{return t.is_ema_structure_enabled()}catch{return!1}},setEsEma1Len(e){s()||(t.set_es_ema1_len(e),r())},setEsEma2Len(e){s()||(t.set_es_ema2_len(e),r())},setEsWmaLen(e){s()||(t.set_es_wma_len(e),r())},setEsShowEma1(e){s()||(t.set_es_show_ema1(e),r())},setEsShowEma2(e){s()||(t.set_es_show_ema2(e),r())},setEsShowWma(e){s()||(t.set_es_show_wma(e),r())},setEsSwingLen(e){s()||(t.set_es_swing_len(e),r())},setEsShowBos(e){s()||(t.set_es_show_bos(e),r())},enableLiveSignals(){s()||(t.enable_live_signals(),r())},disableLiveSignals(){s()||(t.disable_live_signals(),r())},isLiveSignalsEnabled(){if(s())return!1;try{return t.is_live_signals_enabled()}catch{return!1}},setLiveSignalsData(e){s()||(t.set_live_signals_data(new Float64Array(e)),r())},clearLiveSignals(){s()||(t.clear_live_signals(),r())},setLiveSignalsLeverage(e){s()||(t.set_live_signals_leverage(e),r())},getLiveSignalsLeverage(){if(s())return 10;try{return t.get_live_signals_leverage()}catch{return 10}},setLiveSignalsTrial(e){s()||(t.set_live_signals_trial(e),r())},setLiveSignalsShowEntry(e){s()||(t.set_live_signals_show_entry(e),r())},setLiveSignalsShowTpSl(e){s()||(t.set_live_signals_show_tp_sl(e),r())},setLiveSignalsShowMaxProfit(e){s()||(t.set_live_signals_show_max_profit(e),r())},setLiveSignalsShowLabels(e){s()||(t.set_live_signals_show_labels(e),r())},setLiveSignalsShowZones(e){s()||(t.set_live_signals_show_zones(e),r())},setLiveSignalsTextSize(e){s()||(t.set_live_signals_text_size(e),r())},setLiveSignalsPipValue(e){s()||(t.set_live_signals_pip_value(e),r())},setLiveSignalsLoading(e){s()||(t.set_live_signals_loading(e),r())},getLiveSignalsCount(){if(s())return 0;try{return t.get_live_signals_count()}catch{return 0}},enableVpin(){s()||w("vpin")&&(t.enable_vpin(),r())},disableVpin(){s()||(t.disable_vpin(),r())},isVpinEnabled(){if(s())return!1;try{return t.is_vpin_enabled()}catch{return!1}},setVpinData(e,i){s()||(t.set_vpin_data(e,i),r())},setVpinBucketSize(e){s()||(t.set_vpin_bucket_size(e),r())},getVpinBucketSize(){if(s())return 50;try{return t.get_vpin_bucket_size()}catch{return 50}},setVpinNumBuckets(e){s()||(t.set_vpin_num_buckets(e),r())},getVpinNumBuckets(){if(s())return 50;try{return t.get_vpin_num_buckets()}catch{return 50}},setVpinThreshold(e){s()||(t.set_vpin_threshold(e),r())},getVpinThreshold(){if(s())return .7;try{return t.get_vpin_threshold()}catch{return .7}},setVpinShowSma(e){s()||(t.set_vpin_show_sma(e),r())},setVpinShowZones(e){s()||(t.set_vpin_show_zones(e),r())},enableStopIceberg(){s()||w("stopIceberg")&&(t.enable_stop_iceberg(),r())},disableStopIceberg(){s()||(t.disable_stop_iceberg(),r())},isStopIcebergEnabled(){if(s())return!1;try{return t.is_stop_iceberg_enabled()}catch{return!1}},setSiShowStops(e){s()||(t.set_si_show_stops(e),r())},setSiShowIcebergs(e){s()||(t.set_si_show_icebergs(e),r())},setSiShowZones(e){s()||(t.set_si_show_zones(e),r())},setIcebergEvents(e,i,n,l,u,f){s()||(t.set_iceberg_events(e,i,n,l,u,f),r())},getStopRunCount(){if(s())return 0;try{return t.get_stop_run_count()}catch{return 0}},getIcebergCount(){if(s())return 0;try{return t.get_iceberg_count()}catch{return 0}},enableVolume(){t.enable_volume(),r()},disableVolume(){t.disable_volume(),r()},isVolumeEnabled(){return t.is_volume_enabled()},setVolumeMaPeriod(e){t.set_volume_ma_period(e),r()},setVolumeShowMa(e){t.set_volume_show_ma(e),r()},setVolumeShowSignals(e){t.set_volume_show_signals(e),r()},setVolumeColorMode(e){t.set_volume_color_mode(e),r()},getVolumeMaPeriod(){return t.get_volume_ma_period()},getVolumeShowMa(){return t.get_volume_show_ma()},getVolumeShowSignals(){return t.get_volume_show_signals()},getVolumeColorMode(){return t.get_volume_color_mode()},enableObSignals(){t.enable_ob_signals(),r()},disableObSignals(){t.disable_ob_signals(),r()},isObSignalsEnabled(){return t.is_ob_signals_enabled()},setObsShowWalls(e){t.set_obs_show_walls(e),r()},setObsShowGaps(e){t.set_obs_show_gaps(e),r()},setObsShowAlerts(e){t.set_obs_show_alerts(e),r()},setObsShowCom(e){t.set_obs_show_com(e),r()},setObsWalls(e,i){t.set_obs_walls(new Float64Array(e),new Float64Array(i)),r()},setObsGaps(e,i){t.set_obs_gaps(new Float64Array(e),new Float64Array(i)),r()},pushObsAlert(e,i,n,l,u){t.push_obs_alert(e,i,n,l,u),r()},setObsCom(e){t.set_obs_com(e),r()},clearObSignals(){t.clear_ob_signals(),r()},enableObFlow(){t.enable_ob_flow(),r()},disableObFlow(){t.disable_ob_flow(),r()},isObFlowEnabled(){return t.is_ob_flow_enabled()},setObfShowObi(e){t.set_obf_show_obi(e),r()},setObfShowNetFlow(e){t.set_obf_show_net_flow(e),r()},setObfShowCumDelta(e){t.set_obf_show_cum_delta(e),r()},pushObfSample(e,i,n,l){t.push_obf_sample(e,i,n,l),r()},setObfData(e){t.set_obf_data(new Float64Array(e)),r()},clearObFlow(){t.clear_ob_flow(),r()},setObfRatio(e){t.set_obf_ratio(e),r()},getObfRatio(){return t.get_obf_ratio()},enableObMicro(){t.enable_ob_micro(),r()},disableObMicro(){t.disable_ob_micro(),r()},isObMicroEnabled(){return t.is_ob_micro_enabled()},setObmData(e,i,n,l,u,f,h,g,a,_,d,p,c){t.set_obm_data(e,i,n,l,u,f,h,g,a,_,d,p,c),r()},setObmAnchorTopRight(e){t.set_obm_anchor_top_right(e),r()},clearObMicro(){t.clear_ob_micro(),r()}}}function pe(t,r,s,o){let w=i=>o()(i),e=(i,n,l)=>i<=1&&n<=1&&l<=1&&(i>0||n>0||l>0)?[Math.round(i*255),Math.round(n*255),Math.round(l*255)]:[i&255,n&255,l&255];return{addMarker(i,n,l){t.add_marker(i,n,l),r()},clearMarkers(){t.clear_markers(),r()},hitTestMarker(i,n){return t.hit_test_marker(i,n)},selectMarker(i){t.select_marker(i),r()},deselectMarker(){t.deselect_marker(),r()},getSelectedMarker(){return t.get_selected_marker()},removeMarker(i){t.remove_marker(i),r()},deleteSelectedMarker(){let i=t.get_selected_marker();return i>0&&(t.remove_marker(i),r()),i},addTrendline(i,n,l,u,f,h,g,a,_,d=0){let[p,c,M]=e(f,h,g),m=t.add_trendline(i,n,l,u,p,c,M,a,_,d);return r(),m},addHorizontalLine(i,n,l,u,f,h,g,a=0){let[_,d,p]=e(l,u,f),c=t.add_horizontal_line(i,n,_,d,p,h,g,a);return r(),c},addArrow(i,n,l,u,f,h,g,a,_,d=0){let[p,c,M]=e(f,h,g),m=t.add_arrow(i,n,l,u,p,c,M,a,_,d);return r(),m},addFibRetracement(i,n,l,u,f,h,g,a,_,d=0){if(!w("drawingFull"))return 0;let[p,c,M]=e(f,h,g),m=t.add_fib_retracement(i,n,l,u,p,c,M,a,_,d);return r(),m},addFibExtension(i,n,l,u,f,h,g,a,_,d,p,c=0){if(!w("drawingFull"))return 0;let[M,m,I]=e(g,a,_),L=t.add_fib_extension(i,n,l,u,f,h,M,m,I,d,p,c);return r(),L},addLongPosition(i,n,l,u,f,h,g,a,_,d=0){if(!w("drawingFull"))return 0;let[p,c,M]=e(f,h,g),m=t.add_long_position(i,n,l,u,p,c,M,a,_,d);return r(),m},addShortPosition(i,n,l,u,f,h,g,a,_,d=0){if(!w("drawingFull"))return 0;let[p,c,M]=e(f,h,g),m=t.add_short_position(i,n,l,u,p,c,M,a,_,d);return r(),m},addAnchoredVwap(i,n,l,u,f,h,g=0){if(!w("drawingFull"))return 0;let[a,_,d]=e(n,l,u),p=t.add_anchored_vwap(i,a,_,d,f,h,g);return r(),p},addPriceLabel(i,n,l,u,f,h,g=0){let[a,_,d]=e(l,u,f),p=t.add_price_label(i,n,a,_,d,h,g);return r(),p},addTextNote(i,n,l,u,f,h,g=0){let[a,_,d]=e(l,u,f),p=t.add_text_note(i,n,a,_,d,h,g);return r(),p},addElliottImpulse(i,n,l,u,f,h,g=0){if(!w("drawingFull"))return 0;let[a,_,d]=e(l,u,f),p=t.add_elliott_impulse(i,n,a,_,d,h,g);return r(),p},setDrawingFontSize(i,n){t.set_drawing_font_size(i,n),r()},getDrawingFontSize(i){return t.get_drawing_font_size(i)},setDrawingText(i,n){t.set_drawing_text(i,n),r()},getDrawingText(i){return t.get_drawing_text(i)},setDrawingStyle(i,n,l,u,f){let[h,g,a]=e(n,l,u);t.set_drawing_style(i,h,g,a,f),r()},getDrawingColor(i){let n=t.get_drawing_color(i);return n?{r:n>>>24&255,g:n>>>16&255,b:n>>>8&255,lineWidth:(n&255)/10}:null},getDrawingDashed(i){try{return t.get_drawing_dashed(i)}catch{return!1}},setDrawingDashed(i,n){t.set_drawing_dashed(i,n),r()},getDrawingHideLabel(i){try{return t.get_drawing_hide_label(i)}catch{return!1}},setDrawingHideLabel(i,n){t.set_drawing_hide_label(i,n),r()},getDrawingKindId(i){try{return t.get_drawing_kind_id(i)}catch{return 255}},removeDrawing(i){t.remove_drawing(i),r()},clearDrawings(){t.clear_drawings(),r()},drawingCount(){return t.drawing_count()},setDrawingPreview(i,n,l,u,f,h,g,a,_,d,p=0){let[c,M,m]=e(h,g,a);t.set_drawing_preview(i,n,l,u,f,c,M,m,_,d,p),r()},clearDrawingPreview(){t.clear_drawing_preview(),r()},cancelBrush(){t.cancel_brush(),r()},selectDrawing(i){t.select_drawing(i),r()},deselectDrawing(){t.deselect_drawing(),r()},getSelectedDrawing(){return t.get_selected_drawing()},deleteSelectedDrawing(){let i=t.get_selected_drawing();return i>0&&(t.remove_drawing(i),r()),i},exportDrawingsJson(){try{return t.export_drawings_json()}catch{return"[]"}},importDrawingsJson(i){try{t.import_drawings_json(i),r()}catch(n){console.warn("[bridge] importDrawingsJson failed",n)}},screenToWorld(i,n){return{x:t.screen_to_world_x(i),y:t.screen_to_world_y(n)}},worldToScreen(i,n){try{return{x:t.world_to_screen_x(i),y:t.world_to_screen_y(n)}}catch{return null}}}}var j=t=>t instanceof Float64Array?t:new Float64Array(t);function we(t,r,s,o){let w=e=>o()(e);return{setKlines(e,i,n,l,u,f){t.set_klines(j(e),j(i),j(n),j(l),j(u),j(f)),r()},setRealTimestamps(e){t.set_real_timestamps(j(e)),r()},appendRealTimestamp(e){t.append_real_timestamp(e)},prependKlines(e,i,n,l,u,f){t.prepend_klines(j(e),j(i),j(n),j(l),j(u),j(f)),r()},appendKline(e,i,n,l,u,f){t.append_kline(e,i,n,l,u,f),r()},updateLastKline(e,i,n,l,u,f){t.update_last_kline(e,i,n,l,u,f),r()},popLastKline(){let e=t.pop_last_kline();return e&&r(),e},getLastClose(){try{return t.get_last_close()}catch{return 0}},getKlineCount(){if(s())return 0;try{return t.kline_count()}catch{return 0}},getKlineTimestamps(){if(s())return null;try{return t.kline_timestamps()}catch{return null}},getKlineOpens(){if(s())return null;try{return t.kline_opens()}catch{return null}},getKlineHighs(){if(s())return null;try{return t.kline_highs()}catch{return null}},getKlineLows(){if(s())return null;try{return t.kline_lows()}catch{return null}},getKlineCloses(){if(s())return null;try{return t.kline_closes()}catch{return null}},getKlineVolumes(){if(s())return null;try{return t.kline_volumes()}catch{return null}},setHeatmap(e,i,n,l,u,f,h){w("heatmap")&&(t.set_heatmap(j(e),i,n,l,u,f,h),r())},appendHeatmapColumn(e,i,n,l){w("heatmap")&&(t.append_heatmap_column(j(e),i,n,l),r())},updateLastHeatmapColumn(e,i,n){t.update_last_heatmap_column(j(e),i,n),r()},getHeatmapLastTimestamp(){try{return t.get_heatmap_last_timestamp()}catch{return 0}},getHeatmapXStep(){try{return t.get_heatmap_x_step()}catch{return 0}},updateHeatmapColumnAt(e,i,n,l){t.update_heatmap_column_at(j(e),i,n,l),r()},setHeatmapRange(e,i){t.set_heatmap_range(e,i),r()},getHeatmapDataRange(){try{return{min:t.get_heatmap_data_min(),max:t.get_heatmap_data_max()}}catch{return{min:0,max:0}}},setHeatmapPrefetchRange(e){try{t.set_heatmap_prefetch_range(e)}catch{}},clearHeatmapPrefetchRange(){try{t.clear_heatmap_prefetch_range()}catch{}},getHeatmapPrefetchMax(){try{return t.get_heatmap_prefetch_max()}catch{return 0}},setHeatmapColorScheme(e){try{t.set_heatmap_color_scheme(e),r()}catch{}},setChartType(e){s()||e===2&&!w("footprint")||(t.set_chart_type(e),r())},getChartType(){if(s())return 0;try{return t.get_chart_type()}catch{return 0}},setFootprintTickSize(e){s()||w("footprint")&&(t.set_footprint_tick_size(e),r())},footprintEnsureLen(e){s()||t.footprint_ensure_len(e)},footprintAddTrade(e,i,n,l){s()||t.footprint_add_trade(e,i,n,l)},footprintAddTradeBatch(e){s()||!e||e.length===0||t.footprint_add_trade_batch(j(e))},footprintSetBar(e,i,n,l,u){s()||(t.footprint_set_bar(e,i,n,l,u),r())},footprintClear(){s()||(t.footprint_clear(),r())},footprintClearBar(e){s()||t.footprint_clear_bar(e)},footprintPrependEmpty(e){s()||t.footprint_prepend_empty(e)},footprintSetShowSignals(e){s()||(t.footprint_set_show_signals(e),r())},footprintGetShowSignals(){if(s())return!0;try{return t.footprint_get_show_signals()}catch{return!0}},footprintSignalCount(){if(s())return 0;try{return t.footprint_signal_count()}catch{return 0}},footprintSetShowProfile(e){s()||(t.footprint_set_show_profile(e),r())},footprintGetShowProfile(){if(s())return!1;try{return t.footprint_get_show_profile()}catch{return!1}},footprintProfileHitTest(e,i){if(s())return"";try{return t.footprint_profile_hit_test(e,i)}catch{return""}},footprintSetDisplayMode(e){s()||(t.footprint_set_display_mode(e),r())},footprintGetDisplayMode(){if(s())return 0;try{return t.footprint_get_display_mode()}catch{return 0}},enableDeltaHistogram(){s()||t.enable_delta_histogram()},disableDeltaHistogram(){s()||t.disable_delta_histogram()},deltaHistogramEnabled(){if(s())return!1;try{return t.delta_histogram_enabled()}catch{return!1}}}}var Ue=1;function B(t){if(typeof t!="string")return{r:255,g:255,b:255,a:153};if(t.startsWith("#")){let s=t.slice(1);if(s.length===8)return{r:parseInt(s.slice(0,2),16),g:parseInt(s.slice(2,4),16),b:parseInt(s.slice(4,6),16),a:parseInt(s.slice(6,8),16)};let o=parseInt(s.slice(0,2),16),w=parseInt(s.slice(2,4),16),e=parseInt(s.slice(4,6),16);return{r:o,g:w,b:e,a:255}}let r=t.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+))?\)/);return r?{r:+r[1],g:+r[2],b:+r[3],a:r[4]!==void 0?Math.round(+r[4]*255):255}:{r:255,g:255,b:255,a:153}}function Wt(t,r,s){let o=new Map,w=null,e=0,i=NaN;function n(){let a;try{a=t.kline_count()}catch{return w}if(a===0)return null;let _=t.kline_closes(),d=_?.[a-1]??NaN;if(w&&!(a!==e||d!==i))return w;try{let c=t.kline_timestamps(),M=t.kline_opens(),m=t.kline_highs(),I=t.kline_lows(),L=t.kline_volumes();if(!c||!_)return w;w={timestamps:Array.from(c),open:Array.from(M),high:Array.from(m),low:Array.from(I),close:Array.from(_),volume:Array.from(L),length:a},e=a,i=d;for(let P of o.values())P._needsCompute=!0}catch{}return w}function l(){return{seriesLine(a,_="#ffffff99",d=1.5){let p=B(_);t.custom_series_line(new Float64Array(a),p.r,p.g,p.b,p.a,d)},seriesDashedLine(a,_="#ffffff66",d=1,p=4,c=4){let M=B(_);t.custom_series_dashed_line(new Float64Array(a),M.r,M.g,M.b,M.a,d,p,c)},band(a,_,d="rgba(100,149,237,0.08)"){let p=B(d);t.custom_band(new Float64Array(a),new Float64Array(_),p.r,p.g,p.b,p.a)},hline(a,_="#ffffff66",d=1){let p=B(_);t.custom_hline(a,p.r,p.g,p.b,p.a,d)},dashedHline(a,_="#ffffff66",d=1,p=6,c=4){let M=B(_);t.custom_dashed_hline(a,M.r,M.g,M.b,M.a,d,p,c)},marker(a,_,d="#e8a04a",p=3){let c=B(d);t.custom_marker(a,_,c.r,c.g,c.b,c.a,p)},markerUp(a,_,d="#26a69a",p=5){let c=B(d);t.custom_marker_up(a,_,c.r,c.g,c.b,c.a,p)},markerDown(a,_,d="#ef5350",p=5){let c=B(d);t.custom_marker_down(a,_,c.r,c.g,c.b,c.a,p)},text(a,_,d,p="#ffffffaa",c=10,M="center"){let m=B(p),I=M==="center"?1:M==="right"?2:0;t.custom_text(a,_,d,m.r,m.g,m.b,m.a,c,I)},priceLabel(a,_,d="#ffffffaa",p=10){let c=B(d);t.custom_price_label(a,_,c.r,c.g,c.b,c.a,p)},linePx(a,_,d,p,c,M=1){let m=B(c);t.custom_line_px(a,_,d,p,m.r,m.g,m.b,m.a,M)},fillRectPx(a,_,d,p,c){let M=B(c);t.custom_fill_rect_px(a,_,d,p,M.r,M.g,M.b,M.a)},strokeRectPx(a,_,d,p,c,M=1){let m=B(c);t.custom_stroke_rect_px(a,_,d,p,m.r,m.g,m.b,m.a,M)},textPx(a,_,d,p,c=10,M="left"){let m=B(p),I=M==="center"?1:M==="right"?2:0;t.custom_text_px(a,_,d,m.r,m.g,m.b,m.a,c,I)},worldToScreenX:a=>t.world_to_screen_x(a),worldToScreenY:a=>t.world_to_screen_y(a),screenToWorldX:a=>t.screen_to_world_x(a),screenToWorldY:a=>t.screen_to_world_y(a),chartArea:()=>({x:t.chart_area_x(),y:t.chart_area_y(),w:t.chart_area_w(),h:t.chart_area_h()})}}function u(a){if(!a.compute)return;let _=n();if(_)try{a._computed=a.compute(_,a.params)||{}}catch(d){console.warn(`[CustomIndicator "${a.name}"] compute error:`,d),a._computed={}}}let f=Object.freeze({length:0,timestamps:[],open:[],high:[],low:[],close:[],volume:[]});function h(a){if(o.size===0)return;let _=n(),d=!1;for(let m of o.values())if(m.enabled&&!(m.compute&&!_)){d=!0;break}if(!d)return;t.custom_begin();let p=l(),c=_||f;for(let m of o.values())if(m.enabled&&!(m.compute&&!_)){m._needsCompute&&(u(m),m._needsCompute=!1);try{m.render.call(m,p,m._computed||{},c)}catch(I){console.warn(`[CustomIndicator "${m.name}"] render error:`,I)}}if(t.custom_end(),t.custom_command_count()>0){let m=t.get_custom_buffer_ptr(),I=t.get_custom_buffer_len();s(a,r,m,I)}}function g(){w=null,e=0,i=NaN;for(let a of o.values())a._needsCompute=!0}return{add(a){let _=Ue++,d={id:_,name:a.name||`Custom ${_}`,params:{...a.params},compute:a.compute||null,render:a.render,enabled:!0,_computed:{},_needsCompute:!0};return o.set(_,d),_},remove(a){o.delete(a)},updateParams(a,_){let d=o.get(a);d&&(Object.assign(d.params,_),d._needsCompute=!0)},setEnabled(a,_){let d=o.get(a);d&&(d.enabled=_)},list(){return[...o.values()].map(a=>({id:a.id,name:a.name,params:{...a.params},enabled:a.enabled}))},invalidateCompute:g,renderAll:h}}var ge={trial:{candlestick:!0,volume:!0,rsi:!0,drawingBasic:!0,drawingFull:!0,heatmap:!0,footprint:!0,liqHeatmap:!0,oi:!0,fundingRate:!0,cvd:!0,largeTrades:!0,vrvp:!0,tpo:!0,smartRanges:!0,emaStructure:!0,customIndicators:!0,forexSignals:!0,vpin:!0,stopIceberg:!0},standard:{candlestick:!0,volume:!0,rsi:!0,drawingBasic:!0,drawingFull:!1,heatmap:!1,footprint:!1,liqHeatmap:!1,oi:!1,fundingRate:!1,cvd:!1,largeTrades:!1,vrvp:!1,tpo:!1,smartRanges:!1,emaStructure:!1,customIndicators:!1,forexSignals:!1,vpin:!1,stopIceberg:!1},professional:{candlestick:!0,volume:!0,rsi:!0,drawingBasic:!0,drawingFull:!0,heatmap:!0,footprint:!0,liqHeatmap:!0,oi:!0,fundingRate:!0,cvd:!0,largeTrades:!0,vrvp:!1,tpo:!1,smartRanges:!1,emaStructure:!1,customIndicators:!1,forexSignals:!1,vpin:!1,stopIceberg:!1},enterprise:{candlestick:!0,volume:!0,rsi:!0,drawingBasic:!0,drawingFull:!0,heatmap:!0,footprint:!0,liqHeatmap:!0,oi:!0,fundingRate:!0,cvd:!0,largeTrades:!0,vrvp:!0,tpo:!0,smartRanges:!0,emaStructure:!0,customIndicators:!0,forexSignals:!0,vpin:!0,stopIceberg:!0}},xe={rsi:"RSI",drawingBasic:"Basic Drawing Tools",heatmap:"Orderbook Heatmap",footprint:"Footprint Chart",liqHeatmap:"Liquidation Heatmap",oi:"Open Interest",fundingRate:"Funding Rate",cvd:"CVD",largeTrades:"Large Trades",vrvp:"VRVP",tpo:"TPO / Market Profile",smartRanges:"Smart Ranges",emaStructure:"EMA Structure",drawingFull:"All Drawing Tools",customIndicators:"Custom Indicators",forexSignals:"Forex Signals",vpin:"VPIN",stopIceberg:"Stops & Icebergs"},Qe={rsi:"Standard",drawingBasic:"Standard",heatmap:"Professional",footprint:"Professional",liqHeatmap:"Professional",oi:"Professional",fundingRate:"Professional",cvd:"Professional",largeTrades:"Professional",drawingFull:"Professional",vrvp:"Enterprise",tpo:"Enterprise",smartRanges:"Enterprise",emaStructure:"Enterprise",customIndicators:"Enterprise",forexSignals:"Enterprise",vpin:"Enterprise",stopIceberg:"Enterprise"};function gt(t){return ge[t]||ge.trial}function Ht(t){let r=gt(t),s=new Set;return function(w){if(r[w])return!0;if(!s.has(w)){s.add(w);let e=xe[w]||w,i=Qe[w]||"a higher";console.warn(`[MRD Chart Engine] "${e}" requires ${i} plan. Current plan: ${t}. Upgrade at https://mrd-chart.dev/pricing`)}return!1}}var $e=14,me="trial",Ct="free";var Bt=[95,95,109,114].map(t=>String.fromCharCode(t)).join(""),Je=1297237059;function Ie(t){let r=`${t}:${Je}:${(t^2043453)>>>0}`,s=2166136261;for(let o=0;o<r.length;o++)s^=r.charCodeAt(o),s=Math.imul(s,16777619);return(s>>>0).toString(36)}function Lt(t){return`${t}.${Ie(t)}`}function At(t){if(!t||typeof t!="string")return null;let r=t.lastIndexOf(".");if(r<1)return null;let s=parseInt(t.slice(0,r),10);return!s||s<1e9||s>2e9||t.slice(r+1)!==Ie(s)?null:s}var Ce=Bt+"e7x",Le=Bt+"p3q",Ae="mrd_engine_session_id",ve="mrd_ce_db",mt="meta",ye="trial_ts",Te=Bt+"ck";function Gt(){try{return At(localStorage.getItem(Ce))}catch{return null}}function qt(t){try{localStorage.setItem(Ce,Lt(t))}catch{}}function Kt(){try{return At(localStorage.getItem(Le))}catch{return null}}function Ut(t){try{localStorage.setItem(Le,Lt(t))}catch{}}function xt(){try{return At(sessionStorage.getItem(Ae))}catch{return null}}function Qt(t){try{sessionStorage.setItem(Ae,Lt(t))}catch{}}function $t(){try{let t=document.cookie.match(new RegExp(`(?:^|;\\s*)${Te}=([^;]+)`));return t?At(decodeURIComponent(t[1])):null}catch{return null}}function Jt(t){try{let r=encodeURIComponent(Lt(t));document.cookie=`${Te}=${r};path=/;max-age=${86400*400};SameSite=Lax`}catch{}}var Mt=null,Me=!1;function ke(){if(!(Me||typeof indexedDB>"u")){Me=!0;try{let t=indexedDB.open(ve,1);t.onupgradeneeded=()=>{let r=t.result;r.objectStoreNames.contains(mt)||r.createObjectStore(mt)},t.onsuccess=()=>{let o=t.result.transaction(mt,"readonly").objectStore(mt).get(ye);o.onsuccess=()=>{let w=At(o.result);w&&(!Mt||w<Mt)&&(Mt=w,tr(w))}}}catch{}}}function Ee(t){Mt=t;try{let r=indexedDB.open(ve,1);r.onsuccess=()=>{r.result.transaction(mt,"readwrite").objectStore(mt).put(Lt(t),ye)}}catch{}}function tr(t){let r=Math.floor(Date.now()/1e3),s=Ne([Gt(),Kt(),xt(),$t(),t],r);s&&s!==t||s&&(qt(s),Ut(s),Qt(s),Jt(s))}function Ne(t,r){let s=null;for(let o of t)o&&(o>r+60||o<17e8||(!s||o<s)&&(s=o));return s}function er(){let t=Math.floor(Date.now()/1e3),r=[Gt(),Kt(),xt(),$t(),Mt];return Ne(r,t)}function rr(t){qt(t),Ut(t),Qt(t),Jt(t),Ee(t)}function or(t){Gt()||qt(t),Kt()||Ut(t),xt()||Qt(t),$t()||Jt(t),Mt||Ee(t)}ke();function Rt(t){if(!t||t==="trial")return sr();try{let r=JSON.parse(atob(t)),{p:s,d:o,e:w,s:e}=r;if(!s||!e)return{valid:!1,error:"Invalid license key format"};let i={...r};if(delete i.s,e!==Re(i))return{valid:!1,error:"Invalid license key signature"};if(w>0&&Date.now()/1e3>w)return{valid:!0,plan:Ct,watermark:!0,trialExpired:!0,originalPlan:s,error:`License expired on ${new Date(w*1e3).toLocaleDateString()}`,features:gt(Ct)};let n=r.pl||"web";if((n==="web"||n==="any")&&o&&o!=="*"&&typeof window<"u"){let l=window.location.hostname;if(l&&l!=="localhost"&&l!=="127.0.0.1"&&l!=="0.0.0.0"&&l!==""&&!o.split(",").map(h=>h.trim()).some(h=>nr(h,l)))return{valid:!1,error:`License not valid for domain: ${l}`}}if(n==="mobile"&&r.a&&typeof window<"u"){let l=window.__mrd_app_id;if(l&&l!==r.a)return{valid:!1,error:`License not valid for app: ${l}`}}return{valid:!0,plan:s,domain:o,platform:n,appId:r.a||null,expiry:w,watermark:!1,features:gt(s)}}catch{return{valid:!1,error:"Invalid license key"}}}function Re(t){let r="mrd-ce-hmac-2024-x9k2m",s=JSON.stringify(t),o=r+":"+s,w=2166136261,e=1818371886,i=3735928559;for(let n=0;n<o.length;n++){let l=o.charCodeAt(n);w=Math.imul(w^l,16777619)>>>0,e=Math.imul(e^l,1540483477)>>>0,i=Math.imul(i^l,461845907)>>>0}return(w.toString(36)+e.toString(36)+i.toString(36)).slice(0,24)}function sr(){let t=er();t?or(t):(t=Math.floor(Date.now()/1e3),rr(t));let r=t+$e*86400,s=Date.now()/1e3,o=Math.max(0,Math.ceil((r-s)/86400));return s>r?{valid:!0,plan:Ct,watermark:!0,trialExpired:!0,daysLeft:0,features:gt(Ct)}:{valid:!0,plan:me,watermark:!1,daysLeft:o,trialEnd:r,features:gt(me)}}function nr(t,r){if(t==="*"||t===r)return!0;if(t.startsWith("*.")){let s=t.slice(1);return r.endsWith(s)||r===t.slice(2)}return!1}var ir="MRD-Indicators",Se="mrd-indicators.com",ar="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iMzAiIHZpZXdCb3g9IjAgMCAzMCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgPGRlZnM+CiAgICA8c3R5bGU+CiAgICAgIC5jbHMtMSB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQtNCk7CiAgICAgIH0KCiAgICAgIC5jbHMtMiB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQtMik7CiAgICAgIH0KCiAgICAgIC5jbHMtMiwgLmNscy0zLCAuY2xzLTQsIC5jbHMtNSwgLmNscy02IHsKICAgICAgICBtaXgtYmxlbmQtbW9kZTogbXVsdGlwbHk7CiAgICAgIH0KCiAgICAgIC5jbHMtMyB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQtMyk7CiAgICAgIH0KCiAgICAgIC5jbHMtNCB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQtNik7CiAgICAgIH0KCiAgICAgIC5jbHMtNSB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQtNSk7CiAgICAgIH0KCiAgICAgIC5jbHMtNiB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQtNyk7CiAgICAgIH0KCiAgICAgIC5jbHMtNyB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQpOwogICAgICB9CgogICAgICAuY2xzLTggewogICAgICAgIGlzb2xhdGlvbjogaXNvbGF0ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS4xMiIgeTE9IjE1Ljg4IiB4Mj0iMTkuNjMiIHkyPSI1LjM3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2IzNTA5ZSIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmNWE0YzciLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhci1ncmFkaWVudC0yIiB4MT0iOS4wOCIgeTE9IjYuODEiIHgyPSI5LjA4IiB5Mj0iMTQuNzMiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMjM0ZmIzIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2ZmZiIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50LTMiIHgxPSIxNy42NyIgeTE9IjYuMTEiIHgyPSI4LjQxIiB5Mj0iNi4xMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM1YTJhOGIiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZmZmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXItZ3JhZGllbnQtNCIgeDE9IjIwLjAzIiB5MT0iMTUuODkiIHgyPSIxMC45OCIgeTI9IjE1Ljg5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2Y2YWFjYiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM3NzJhOGQiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhci1ncmFkaWVudC01IiB4MT0iMTkuMDMiIHkxPSIxNi44MiIgeDI9IjE0Ljc5IiB5Mj0iMTIuNTgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZmZmIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2VkMzQ4ZCIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50LTYiIHgxPSIxNS4yNyIgeTE9IjE1LjA2IiB4Mj0iMTUuMjciIHkyPSIxOS4zNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmYiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZWU0YzliIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXItZ3JhZGllbnQtNyIgeDE9IjUuNTEiIHkxPSItMTI4LjAyIiB4Mj0iLTMuNyIgeTI9Ii0xMjguMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwOS4xMiAxMC4wMSkgcm90YXRlKDg5LjYpIiB4bGluazpocmVmPSIjbGluZWFyLWdyYWRpZW50LTMiLz4KICA8L2RlZnM+CiAgPGcgY2xhc3M9ImNscy04IiBpZD0iTG9nbyI+CiAgICA8ZyBpZD0iT0JKRUNUUyIgPgogICAgICA8ZyBpZCA9IkxvZ28iPiAKICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTciIGQ9Ik00LjIzLDExYzAsNS4zNiw0LjM3LDkuNzEsOS43Niw5LjcxczkuNzYtNC4zNSw5Ljc2LTkuNzFTMTkuMzksMS4yOSwxNCwxLjI5LDQuMjMsNS42NCw0LjIzLDExWk0xMC4yNiwxMC4wN2MwLTEuNTQsMS4yNS0yLjc4LDIuOC0yLjc4aDEuODdjMS41NSwwLDIuOCwxLjI1LDIuOCwyLjc4djEuODZjMCwxLjU0LTEuMjUsMi43OC0yLjgsMi43OGgtMS4yMmMtLjQ1LDAtLjg4LjE1LTEuMjIuNDRsLTIuMjMsMS44NHYtNi45MloiLz4KICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0xMC4yNiwxNi45OXYtNi45MnMwLS4wMiwwLS4wM2MuMDItMS41MiwxLjI2LTIuNzUsMi44LTIuNzVoLTUuMDljLTIuMDUsMC0zLjczLDEuNjQtMy43NCwzLjY4LDAsLjAxLDAsLjAzLDAsLjA0LDAsLjA4LDAsLjE2LDAsLjI0LDAsLjA0LDAsLjA4LDAsLjEyLDAsLjA0LDAsLjA4LDAsLjEyLDAsLjA2LDAsLjExLjAxLjE3LDAsLjAyLDAsLjA1LDAsLjA3LDAsLjA2LjAxLjEzLjAyLjE5LDAsLjAxLDAsLjAzLDAsLjA0LDAsLjA3LjAxLjE0LjAyLjIxLDAsMCwwLC4wMSwwLC4wMiwwLC4wNy4wMi4xNS4wMy4yMiwwLDAsMCwwLDAsMCwuNjgsNC42OCw0LjcxLDguMjcsOS42LDguMy0yLjA0LS4wMi0zLjY3LTEuNjktMy42Ny0zLjcyWiIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIgZD0iTTE0LjA0LDEuMjlzLS4wMywwLS4wNCwwYy0uMDgsMC0uMTYsMC0uMjQsMC0uMDQsMC0uMDgsMC0uMTIsMC0uMDQsMC0uMDgsMC0uMTIsMC0uMDYsMC0uMTEsMC0uMTcsMC0uMDIsMC0uMDUsMC0uMDcsMC0uMDYsMC0uMTMuMDEtLjE5LjAyLS4wMSwwLS4wMywwLS4wNCwwLS4wNywwLS4xNC4wMS0uMjEuMDIsMCwwLS4wMSwwLS4wMiwwLS4wNywwLS4xNS4wMi0uMjIuMDMsMCwwLDAsMCwwLDAtNC43LjY4LTguMzIsNC42OS04LjM1LDkuNTQuMDItMi4wMiwxLjctMy42NSwzLjc0LTMuNjVoNi45NnMuMDIsMCwuMDMsMGMxLjUzLjAyLDIuNzcsMS4yNiwyLjc3LDIuNzh2LTUuMDZjMC0yLjA0LTEuNjUtMy43MS0zLjctMy43MloiLz4KICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0xNC45MywxNC43MWg1LjA5YzIuMDQsMCwzLjcyLTEuNjMsMy43NC0zLjY1LS4wMyw0Ljg2LTMuNjUsOC44Ny04LjM1LDkuNTQsMCwwLDAsMCwwLDAtLjA3LjAxLS4xNS4wMi0uMjIuMDMsMCwwLS4wMSwwLS4wMiwwLS4wNywwLS4xNC4wMi0uMjEuMDItLjAxLDAtLjAzLDAtLjA0LDAtLjA2LDAtLjEzLjAxLS4xOS4wMi0uMDIsMC0uMDUsMC0uMDcsMC0uMDYsMC0uMTEsMC0uMTcsMC0uMDQsMC0uMDgsMC0uMTIsMC0uMDQsMC0uMDgsMC0uMTIsMC0uMDgsMC0uMTYsMC0uMjQsMC0uMDEsMC0uMDMsMC0uMDQsMC0yLjA1LDAtMy43LTEuNjgtMy43LTMuNzJsMi4yMy0xLjg0Yy4zNC0uMjguNzgtLjQ0LDEuMjItLjQ0aDEuMjJaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy01IiBkPSJNMTQuOTMsMTQuNzFoNS4wOWMyLjA0LDAsMy43Mi0xLjYzLDMuNzQtMy42NS0uMDMsNC44Ni0zLjY1LDguODctOC4zNSw5LjU0LDAsMCwwLDAsMCwwLS4wNy4wMS0uMTUuMDItLjIyLjAzLDAsMC0uMDEsMC0uMDIsMC0uMDcsMC0uMTQuMDItLjIxLjAyLS4wMSwwLS4wMywwLS4wNCwwLS4wNiwwLS4xMy4wMS0uMTkuMDItLjAyLDAtLjA1LDAtLjA3LDAtLjA2LDAtLjExLDAtLjE3LDAtLjA0LDAtLjA4LDAtLjEyLDAtLjA0LDAtLjA4LDAtLjEyLDAtLjA4LDAtLjE2LDAtLjI0LDAtLjAxLDAtLjAzLDAtLjA0LDAtMi4wNSwwLTMuNy0xLjY4LTMuNy0zLjcybDIuMjMtMS44NGMuMzQtLjI4Ljc4LS40NCwxLjIyLS40NGgxLjIyWiIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTIwLjI4LDE0LjcxYy0uMDgsMC0uMTcsMC0uMjUsMGgtNi4zMWMtLjQ1LDAtLjg4LjE1LTEuMjIuNDRsLTIuMjMsMS44NGMwLC4wOCwwLC4xNywwLC4yNSwxLjA5LjY1LDIuMzcsMS4wMiwzLjczLDEuMDIsMi42NywwLDUuMDEtMS40Myw2LjI4LTMuNTVaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy02IiBkPSJNMjMuNzcsMTAuOTdzMC0uMDMsMC0uMDRjMC0uMDgsMC0uMTYsMC0uMjQsMC0uMDQsMC0uMDgsMC0uMTIsMC0uMDQsMC0uMDgsMC0uMTIsMC0uMDYsMC0uMTEtLjAxLS4xNywwLS4wMiwwLS4wNSwwLS4wNywwLS4wNi0uMDEtLjEzLS4wMi0uMTksMC0uMDEsMC0uMDMsMC0uMDQsMC0uMDctLjAyLS4xNC0uMDItLjIxLDAsMCwwLS4wMSwwLS4wMiwwLS4wNy0uMDItLjE1LS4wMy0uMjIsMCwwLDAsMCwwLDAtLjcxLTQuNjctNC43Ny04LjI0LTkuNjYtOC4yNCwyLjA0LDAsMy42OCwxLjY2LDMuNywzLjY5bC4wNCw1LjA2djEuODZzLjAxLjAyLjAxLjAzYzAsMS41Mi0xLjI1LDIuNzYtMi43OCwyLjc3bDUuMDktLjA0YzIuMDUtLjAxLDMuNzItMS42NiwzLjcxLTMuN1oiLz4KICAgICAgPC9nPgogICAgPC9nPgogIDwvZz4KPC9zdmc+",Vt=null,be=!1;function Pe(){if(Vt||be)return Vt;be=!0;let t=new Image;return t.onload=()=>{Vt=t},t.src=ar,null}function lr(){return Math.floor(Date.now()/864e5)}function ur(t){let r=(t^2654435769)>>>0;return function(){r=r+1831565813>>>0;let s=Math.imul(r^r>>>15,1|r);return s=s+Math.imul(s^s>>>7,61|s)^s,((s^s>>>14)>>>0)/4294967296}}function fr(t,r,s,o,w,e){let i=Pe();t.save(),t.setTransform(1,0,0,1,0,0),t.font="bold 10px Inter, system-ui, sans-serif";let n=t.measureText(o);t.font="8px Inter, system-ui, sans-serif";let l=t.measureText(w),u=i?18:0,f=i?14:0,h=7,g=5,a=i?5:0,d=u+a+Math.max(n.width,l.width)+h*2,p=Math.max(f,20)+g*2,c=Math.round(r-d/2),M=Math.round(s-p/2);t.globalAlpha=.45,t.fillStyle=e?"rgba(255,255,255,0.8)":"rgba(18,18,28,0.8)",t.shadowColor=e?"rgba(0,0,0,0.06)":"rgba(0,0,0,0.25)",t.shadowBlur=8,t.shadowOffsetY=1,t.beginPath(),t.roundRect(c,M,d,p,6),t.fill(),t.shadowColor="transparent",t.strokeStyle=e?"rgba(0,0,0,0.04)":"rgba(255,255,255,0.04)",t.lineWidth=.5,t.stroke();let m=c+h,I=M+p/2;i&&(t.globalAlpha=.5,t.drawImage(i,m,I-f/2,u,f),m+=u+a),t.globalAlpha=.5,t.font="bold 10px Inter, system-ui, sans-serif",t.fillStyle=e?"#1a1a2e":"#ededf5",t.textAlign="left",t.textBaseline="alphabetic",t.fillText(o,m,I-1),t.font="8px Inter, system-ui, sans-serif",t.fillStyle=e?"#777790":"#8080a0",t.textBaseline="top",t.fillText(w,m,I+2),t.restore()}function Fe(t,r,s,o){Pe();let w=r.width,e=r.height;if(w<100||e<80)return;t.save(),t.setTransform(1,0,0,1,0,0);let i=ur(lr()),n=100,l=Math.max(w-n*2,60),u=Math.max(e-n*2,40),f=n+i()*l,h=n+i()*u,g=s.trialExpired||s.plan===Ct,a=ir,_=g?`Free \u2014 ${Se}/pricing`:`Trial: ${s.daysLeft||0}d left \u2014 ${Se}`;fr(t,f,h,a,_,o),t.restore()}function _r({plan:t,domain:r="*",expiryDays:s=365,name:o,email:w}){let e=s>0?Math.floor(Date.now()/1e3)+s*86400:0,i={p:t,d:r,e,...o?{n:o}:{},...w?{m:w}:{},i:Date.now()};return i.s=Re(i),btoa(JSON.stringify(i))}var kt=null,te=null,Pt=null;async function Ft(){return kt?{module:kt,memory:te}:Pt||(Pt=(async()=>{let t=await import("./chart_engine.js");return await t.default(),te=t.wasm_memory(),kt=t,{module:t,memory:te}})(),Pt)}function et(t){let r=t.replace("#","");return[parseInt(r.substring(0,2),16)||0,parseInt(r.substring(2,4),16)||0,parseInt(r.substring(4,6),16)||0]}var Yt=null,Ot=null;async function Ye(){if(Yt)return Yt;let{module:t,memory:r}=await Ft();return Yt=t,Ot=r,t}function cr(){Yt||Ye().catch(()=>{})}async function dr(t,r={}){r.appId&&typeof window<"u"&&(window.__mrd_app_id=r.appId);let s=r.licenseKey||r.key||null,o=Rt(s);if(!o.valid)if(o.expired)console.warn(`[MRD Chart Engine] ${o.error}. Get a license at https://mrd-chart.dev/pricing`);else throw new Error(`[MRD Chart Engine] ${o.error}`);o.plan==="trial"&&console.info(`[MRD Chart Engine] Trial mode \u2014 ${o.daysLeft} days remaining. Purchase: https://mrd-chart.dev/pricing`);let w=await Ye(),e=window.devicePixelRatio||1,i=t.getBoundingClientRect();(i.width<1||i.height<1)&&(await new Promise(S=>{let A=new ResizeObserver(y=>{for(let T of y)if(T.contentRect.width>0&&T.contentRect.height>0){A.disconnect(),S();return}});A.observe(t.parentElement||t),setTimeout(()=>{A.disconnect(),S()},2e3)}),i=t.getBoundingClientRect());let n=Math.max(i.width,100),l=Math.max(i.height,100);t.width=n*e,t.height=l*e;let u=t.getContext("2d");u.scale(e,e);let f=new w.ChartEngine(n,l);if("ontouchstart"in window||navigator.maxTouchPoints>0)try{f.set_touch_mode(!0)}catch{}try{let S=o.expired?2:o.watermark?1:0,A=o.daysLeft||0,y=1297237059;y=Math.imul(y,31)+S>>>0,y=Math.imul(y,31)+A>>>0,y=(y^y>>>16)>>>0,y=Math.imul(y,73244475)>>>0,y=(y^y>>>16)>>>0,f.set_license_state(S,A,y)}catch(S){console.warn("[MRD] set_license_state failed:",S.message)}let g=!0,a=null,_=!1,d=!1,p=!1,c=null,M=null,m=0,I=!1,L=!1,X=("ontouchstart"in window||navigator.maxTouchPoints>0)&&window.innerWidth<=1399?33:0;function $(){if(!(!_||d||a)){if(X>0){let S=performance.now()-m;if(S<X){M||(M=setTimeout(()=>{M=null,$()},X-S));return}}a=requestAnimationFrame(Xe)}}let N=()=>{g=!0,$()},k=()=>p,at=null,ht=null,Y=null,W=null,H=null,G=null,lt=null,b=null,C=0,E=null,R=null,O=0,v=0,pt=-1,vt=!1,yt=!1,Ze=Xt(t,f,{onDirty:N,onCrosshairMove:(S,A,y)=>{O=S,v=A,pt=y,vt=!0,yt=!0},onCrosshairHide:()=>{yt&&(yt=!1,vt=!0,pt=-1)},drawingApi:S=>{at=S},onDrawingComplete:()=>{ht?.()},onDrawingCancel:()=>{Y?.()},onDrawingSelected:(S,A,y)=>{W?.(S,A,y)},onMarkerSelected:S=>{H?.(S)},onDrawingDblClick:(S,A,y,T,rt)=>{G?.(S,A,y,T,rt)},onVrvpHover:(S,A)=>{lt?.(S,A)},onLiqAnnotationPin:(S,A)=>{R?.(S,A)}});function De(){if(!(!vt||L)){if(vt=!1,!yt){c&&c(null,0,0),b&&b("");return}if(c)if(pt===0||pt===1)try{let S=f.get_tooltip_data();c(S,O,v)}catch{}else c(null,0,0);if(b){let S=performance.now();if(pt===0||pt===1){if(S-C>=80){C=S;try{b(f.lt_hit_test(O,v))}catch{}}}else b("")}}}function Xe(){if(a=null,!(!_||d||L)){I=!0;try{let S=!1;try{S=g||f.is_dirty()}catch{L=!0;return}if(S){g=!1,m=performance.now();let A=!1;try{if(f.render()>0){let T=f.get_command_buffer_ptr(),rt=f.get_command_buffer_len();u.save(),u.setTransform(1,0,0,1,0,0),u.clearRect(0,0,t.width,t.height),u.restore(),ct(u,Ot,T,rt),A=!0}try{_t.renderAll(u)}catch{}}catch(y){if(A||(g=!0),y instanceof WebAssembly.RuntimeError){L=!0,console.error("[MRD] Engine crashed:",y.message);return}}De();try{E?.()}catch{}if(o.watermark)try{let y=f.get_theme()===1;Fe(u,t,o,y)}catch{}try{(g||f.is_dirty())&&$()}catch{}}}finally{I=!1}}}let St=Ht(o.plan),We=he(f,N,k,()=>St),He=pe(f,N,k,()=>St),Ve=we(f,N,k,()=>St),_t=Wt(f,Ot,ct);return{engine:f,start(){_=!0,d=!1,g=!0,$()},stop(){_=!1,a&&(cancelAnimationFrame(a),a=null),M&&(clearTimeout(M),M=null)},resize(S){if(L||I)return;if(i=t.getBoundingClientRect(),i.width<1||i.height<1){(S||0)<8&&setTimeout(()=>this.resize((S||0)+1),250);return}e=window.devicePixelRatio||1;let A=i.width*e,y=i.height*e;t.width=A,t.height=y,u.setTransform(1,0,0,1,0,0),u.scale(e,e);try{f.resize(i.width,i.height)}catch(T){if(T instanceof WebAssembly.RuntimeError){L=!0;return}throw T}N()},renderSync(){if(L)return 0;try{let S=f.render();if(S>0){let A=f.get_command_buffer_ptr(),y=f.get_command_buffer_len();u.save(),u.setTransform(1,0,0,1,0,0),u.clearRect(0,0,t.width,t.height),u.restore(),ct(u,Ot,A,y)}return S}catch(S){return S instanceof WebAssembly.RuntimeError&&(L=!0),0}},setHoverPrice(S){f.set_hover_price(S),N()},clearHoverPrice(){f.clear_hover_price(),N()},hitZone(S,A){return f.hit_zone(S,A)},startDrawing(S,A){at?.setMode(S,A)},cancelDrawing(){at?.setMode(null)},onDrawingComplete(S){ht=S},onDrawingCancel(S){Y=S},onDrawingSelected(S){W=S},onMarkerSelected(S){H=S},onDrawingDblClick(S){G=S},setReplayState(S,A,y){f.set_replay_state(S,A,y),N()},setReplayHovered(S){f.set_replay_hovered(S)},setReplayPreview(S){f.set_replay_preview(S),N()},setPrecision(S){f.set_price_precision(S),N()},setCandleInterval(S){f.set_candle_interval(S)},setTheme(S){let A=S==="light"?1:0;typeof f.set_theme=="function"?(f.set_theme(A),N()):console.warn("[ChartEngine] set_theme not available \u2014 reload page to load updated WASM")},getTheme(){return f.get_theme()===1?"light":"dark"},setCandleBullColor(S){let[A,y,T]=et(S);typeof f.set_candle_bull_color=="function"&&(f.set_candle_bull_color(A,y,T),N())},setCandleBearColor(S){let[A,y,T]=et(S);typeof f.set_candle_bear_color=="function"&&(f.set_candle_bear_color(A,y,T),N())},setBackgroundColor(S){let[A,y,T]=et(S);typeof f.set_background_color=="function"&&(f.set_background_color(A,y,T),N())},setGridColor(S,A=255){let[y,T,rt]=et(S);typeof f.set_grid_color=="function"&&(f.set_grid_color(y,T,rt,A),N())},setCrosshairColor(S,A=160){let[y,T,rt]=et(S);typeof f.set_crosshair_color=="function"&&(f.set_crosshair_color(y,T,rt,A),N())},setCrosshairStyle(S){typeof f.set_crosshair_style=="function"&&(f.set_crosshair_style(S),N())},setCrosshairWidth(S){typeof f.set_crosshair_width=="function"&&(f.set_crosshair_width(S),N())},setFontSize(S){typeof f.set_font_size=="function"&&(f.set_font_size(S),N())},getFontSize(){return typeof f.get_font_size=="function"?f.get_font_size():11},setGridHVisible(S){typeof f.set_grid_h_visible=="function"&&(f.set_grid_h_visible(!!S),N())},setGridVVisible(S){typeof f.set_grid_v_visible=="function"&&(f.set_grid_v_visible(!!S),N())},setBgGradient(S,A){if(typeof f.set_bg_gradient=="function"){let[y,T,rt]=et(A||"#000000");f.set_bg_gradient(!!S,y,T,rt),N()}},setCandleBullWickColor(S){let[A,y,T]=et(S);typeof f.set_candle_bull_wick_color=="function"&&(f.set_candle_bull_wick_color(A,y,T),N())},setCandleBullBorderColor(S){let[A,y,T]=et(S);typeof f.set_candle_bull_border_color=="function"&&(f.set_candle_bull_border_color(A,y,T),N())},setCandleBearWickColor(S){let[A,y,T]=et(S);typeof f.set_candle_bear_wick_color=="function"&&(f.set_candle_bear_wick_color(A,y,T),N())},setCandleBearBorderColor(S){let[A,y,T]=et(S);typeof f.set_candle_bear_border_color=="function"&&(f.set_candle_bear_border_color(A,y,T),N())},onTooltip(S){c=S},onVrvpHover(S){lt=S},onLtHover(S){b=S},onPostRender(S){E=S},onLiqAnnotationPin(S){R=S},pause(){d||(d=!0,a&&(cancelAnimationFrame(a),a=null),M&&(clearTimeout(M),M=null))},resume(){d&&(d=!1,_&&(g=!0,$()))},get isPaused(){return d},destroy(){p=!0,_=!1,d=!1,a&&(cancelAnimationFrame(a),a=null),M&&(clearTimeout(M),M=null),Ze();try{f.free()}catch{}},addIndicator(S){if(!St("customIndicators"))return null;let A=_t.add(S);return N(),A},removeIndicator(S){_t.remove(S),N()},updateIndicatorParams(S,A){_t.updateParams(S,A),N()},setIndicatorEnabled(S,A){_t.setEnabled(S,A),N()},listIndicators(){return _t.list()},invalidateCustomIndicators(){_t.invalidateCompute(),N()},get license(){return{plan:o.plan,valid:o.valid,expired:!!o.expired,watermark:!!o.watermark,daysLeft:o.daysLeft,features:o.features||{}}},setLicenseKey(S){o=Rt(S),!o.valid&&!o.expired&&console.error(`[MRD Chart Engine] ${o.error}`),St=Ht(o.plan);try{let A=o.expired?2:o.watermark?1:0,y=o.daysLeft||0,T=1297237059;T=Math.imul(T,31)+A>>>0,T=Math.imul(T,31)+y>>>0,T=(T^T>>>16)>>>0,T=Math.imul(T,73244475)>>>0,T=(T^T>>>16)>>>0,f.set_license_state(A,y,T)}catch{}return N(),o.valid},...Ve,...We,...He}}function hr(t,r){let{t:s,o,h:w,l:e,c:i,v:n}=t,l=i.length;if(l===0||r<=0)return{t:[],o:[],h:[],l:[],c:[],v:[]};let u=[],f=[],h=[],g=[],a=[],_=[],d=Math.round(i[0]/r)*r,p=0;for(let c=0;c<l;c++){p+=n[c];let m=i[c]-d;for(;m>=r;){let I=d,L=d+r;u.push(s[c]),f.push(I),h.push(L),g.push(I),a.push(L),_.push(p),p=0,d=L}for(;-m>=r;){let I=d,L=d-r;u.push(s[c]),f.push(I),h.push(I),g.push(L),a.push(L),_.push(p),p=0,d=L}}return{t:u,o:f,h,l:g,c:a,v:_}}function pr(t,r){let{t:s,o,h:w,l:e,c:i,v:n}=t,l=i.length;if(l===0||r<=0)return{t:[],o:[],h:[],l:[],c:[],v:[]};let u=[],f=[],h=[],g=[],a=[],_=[],d=o[0],p=w[0],c=e[0],M=0,m=s[0];for(let I=0;I<l;I++)for(p=Math.max(p,w[I]),c=Math.min(c,e[I]),M+=n[I];p-c>=r;){let L=i[I]>=d,P=L?c+r:p-r;if(u.push(m),f.push(d),h.push(p),g.push(c),a.push(P),_.push(M),d=P,p=L?Math.max(w[I],P):P,c=L?P:Math.min(e[I],P),M=0,m=s[I],p-c<r)break}return(M>0||u.length===0)&&(u.push(m),f.push(d),h.push(p),g.push(c),a.push(i[l-1]),_.push(M)),{t:u,o:f,h,l:g,c:a,v:_}}function wr(t,r){let{t:s,o,h:w,l:e,c:i,v:n}=t,l=i.length;if(l===0||r<=0)return{t:[],o:[],h:[],l:[],c:[],v:[]};let u=[],f=[],h=[],g=[],a=[],_=[],d=Math.max(1,Math.round(r));for(let p=0;p<l;p+=d){let c=Math.min(p+d,l),M=-1/0,m=1/0,I=0;for(let L=p;L<c;L++)w[L]>M&&(M=w[L]),e[L]<m&&(m=e[L]),I+=n[L];u.push(s[p]),f.push(o[p]),h.push(M),g.push(m),a.push(i[c-1]),_.push(I)}return{t:u,o:f,h,l:g,c:a,v:_}}function gr(t,r){let s=t>1e4?50:t>1e3?10:t>100?1:t>1?.1:.001,o=s*2,w=r<=60?10:r<=300?5:3;return{brickSize:s,rangeSize:o,tickCount:w}}var mr={minRefills:3,hiddenRatio:2,refillWindowMs:1e4,maxTrackedLevels:200,maxEvents:500,decayMs:3e5};function Mr(t={}){let r={...mr,...t},s=new Map,o=new Map,w=[],e=0;function i(g){return Math.round(g*1e8)/1e8}function n(g,a,_,d){for(let[p,c]of g){let M=i(p),m=a.get(M);if(!m){a.set(M,{lastVol:c,refills:0,totalConsumed:0,lastRefillTs:d,peakVisible:c});continue}if(c<m.lastVol*.3&&m.lastVol>0){let I=m.lastVol-c;m.totalConsumed+=I,m.lastVol=c;continue}if(c>m.lastVol*1.5&&m.totalConsumed>0)if(d-m.lastRefillTs<r.refillWindowMs){if(m.refills++,m.lastRefillTs=d,m.peakVisible=Math.max(m.peakVisible,c),m.refills>=r.minRefills){let L=m.totalConsumed,P=m.peakVisible;L>=P*r.hiddenRatio&&(w.push({timestamp:d,price:p,visibleSize:P,hiddenSize:L,isBid:_,refillCount:m.refills}),w.length>r.maxEvents&&w.shift(),m.refills=0,m.totalConsumed=0)}}else m.refills=1,m.totalConsumed=0,m.lastRefillTs=d;m.lastVol=c}if(a.size>r.maxTrackedLevels){let p=[...a.entries()];p.sort((M,m)=>M[1].lastRefillTs-m[1].lastRefillTs);let c=p.length-r.maxTrackedLevels;for(let M=0;M<c;M++)a.delete(p[M][0])}}function l(g,a,_){let d=_||Date.now();e=d;let p=g instanceof Map?g:new Map(g.map(([m,I])=>[m,I])),c=a instanceof Map?a:new Map(a.map(([m,I])=>[m,I]));n(p,s,!0,d),n(c,o,!1,d);let M=d-r.decayMs;for(;w.length>0&&w[0].timestamp<M;)w.shift()}function u(){return w}function f(g){if(!g||w.length===0)return;let a=w.length,_=new Float64Array(a),d=new Float64Array(a),p=new Float64Array(a),c=new Float64Array(a),M=new Uint8Array(a),m=new Uint32Array(a);for(let I=0;I<a;I++){let L=w[I];_[I]=L.timestamp,d[I]=L.price,p[I]=L.visibleSize,c[I]=L.hiddenSize,M[I]=L.isBid?1:0,m[I]=L.refillCount}g.setIcebergEvents(_,d,p,c,M,m)}function h(){s.clear(),o.clear(),w.length=0}return{onOrderbookUpdate:l,getEvents:u,pushToEngine:f,reset:h}}var ee=null,ze=null;async function Sr(){if(ee)return ee;let{module:t,memory:r}=await Ft();return ee=t,ze=r,t}var Oe=Promise.resolve();async function br(t,r={}){let s=await Sr();return await(Oe=Oe.then(()=>je(s,t,r),()=>je(s,t,r)))}function je(t,r,s){let o=window.devicePixelRatio||1,w=r.getBoundingClientRect(),e=Math.max(w.width,60),i=Math.max(w.height,60);r.width=e*o,r.height=i*o;let n=r.getContext("2d");n.scale(o,o);let l=new t.OrderbookEngine(e,i);s.symbol&&l.set_symbol(s.symbol),s.tickSize&&l.set_tick_size(s.tickSize),s.visibleTicks&&l.set_visible_ticks(s.visibleTicks),s.exchangeCount&&l.set_exchange_count(s.exchangeCount),s.pricePrecision!=null&&l.set_price_precision(s.pricePrecision),s.theme==="light"&&l.set_theme(1),s.heatmapCols&&l.set_heatmap_cols(s.heatmapCols),(s.ringCols||s.ringRows)&&l.set_ring_capacity(s.ringCols||300,s.ringRows||400),s.heatmapAlphaMul!=null&&l.set_heatmap_alpha_mul(Number(s.heatmapAlphaMul)),s.showCumulative!=null&&l.set_show_cumulative(!!s.showCumulative),s.showSignalOverlays!=null&&l.set_show_signal_overlays(!!s.showSignalOverlays);let u=!0,f=null,h=!1,g=!1,a=!1,_=null,d=null;function p(){!h||a||f||(f=requestAnimationFrame(M))}let c=()=>{u=!0,p()};function M(){if(f=null,!h||a)return;let b=!1;try{b=u||l.is_dirty()}catch{a=!0;return}if(b){u=!1;try{if(l.render()>0){let E=l.get_command_buffer_ptr(),R=l.get_command_buffer_len();n.save(),n.setTransform(1,0,0,1,0,0),n.clearRect(0,0,r.width,r.height),n.restore(),ct(n,ze,E,R)}}catch(C){if(C instanceof WebAssembly.RuntimeError){a=!0,console.error("[OrderbookEngine] crashed:",C.message);return}u=!0}}}r.style.touchAction="none";let m=!1,I=0,L=new Map,P=0,X=0,$=0,N=0,k=!1;function at(b){if(a)return;b.preventDefault();let C=b.deltaY>0?1.08:.93;l.zoom_y(C,b.offsetY),c()}function ht(b){if(!a){if(L.set(b.pointerId,{y:b.offsetY}),r.setPointerCapture(b.pointerId),L.size===1)m=!0,I=b.offsetY,N=b.offsetX,$=b.offsetY,k=!1;else if(L.size===2){m=!1;let C=[...L.values()];P=Math.abs(C[0].y-C[1].y),X=(C[0].y+C[1].y)/2}}}function Y(b){if(!a){if(L.set(b.pointerId,{y:b.offsetY}),L.size>=2){let C=[...L.values()],E=Math.abs(C[0].y-C[1].y),R=(C[0].y+C[1].y)/2;if(P>0){let v=P/Math.max(E,1);l.zoom_y(v,R)}let O=R-X;Math.abs(O)>.5&&l.pan_y(O),P=E,X=R,c()}else if(m){let C=b.offsetY-I;I=b.offsetY,(Math.abs(b.offsetX-N)>4||Math.abs(b.offsetY-$)>4)&&(k=!0),l.pan_y(C),c()}else if(l.set_hover(b.offsetX,b.offsetY),c(),_)try{let C=l.get_hover_price();if(C>0){let E=l.get_hover_qty(),R=l.get_hover_side();_({price:C,qty:E,side:R===2?"ask":"bid"})}else _(null)}catch{}}}function W(){a||(_&&_(null),l.clear_hover(),c())}function H(b){let C=m&&!k&&L.size===1;L.delete(b.pointerId);try{r.releasePointerCapture(b.pointerId)}catch{}if(L.size===0){if(C&&d&&!a)try{l.set_hover(b.offsetX,b.offsetY);let E=l.get_hover_price();if(E>0){let R=l.get_hover_qty(),O=l.get_hover_side();d({price:E,qty:R,side:O===2?"ask":"bid"})}}catch{}m=!1,P=0}else L.size===1&&(m=!0,I=[...L.values()][0].y,P=0)}function G(){a||(l.center_on_mid(),c())}r.addEventListener("wheel",at,{passive:!1}),r.addEventListener("pointerdown",ht),r.addEventListener("pointermove",Y),r.addEventListener("pointerup",H),r.addEventListener("pointercancel",H),r.addEventListener("pointerleave",W),r.addEventListener("dblclick",G);function lt(){r.removeEventListener("wheel",at),r.removeEventListener("pointerdown",ht),r.removeEventListener("pointermove",Y),r.removeEventListener("pointerup",H),r.removeEventListener("pointercancel",H),r.removeEventListener("pointerleave",W),r.removeEventListener("dblclick",G)}return{engine:l,start(){h=!0,u=!0,p()},stop(){h=!1,f&&(cancelAnimationFrame(f),f=null)},resize(){if(!(g||a)&&(w=r.getBoundingClientRect(),!(w.width<1||w.height<1))){o=window.devicePixelRatio||1,r.width=w.width*o,r.height=w.height*o,n.setTransform(1,0,0,1,0,0),n.scale(o,o);try{l.resize(w.width,w.height)}catch(b){if(b instanceof WebAssembly.RuntimeError){a=!0;return}throw b}c()}},pushSnapshot(b,C,E){if(a)return;let R=new Float64Array(b.length*2);for(let v=0;v<b.length;v++)R[v*2]=b[v][0],R[v*2+1]=b[v][1];let O=new Float64Array(C.length*2);for(let v=0;v<C.length;v++)O[v*2]=C[v][0],O[v*2+1]=C[v][1];try{l.push_snapshot(R,O,E)}catch(v){if(v instanceof WebAssembly.RuntimeError){a=!0;return}throw v}c()},pushSnapshotFlat(b,C,E){if(!a){try{l.push_snapshot(b,C,E)}catch(R){if(R instanceof WebAssembly.RuntimeError){a=!0;return}throw R}c()}},setDepthBook(b,C,E){if(a)return;let R=new Float64Array(b.length*2);for(let v=0;v<b.length;v++)R[v*2]=b[v][0],R[v*2+1]=b[v][1];let O=new Float64Array(C.length*2);for(let v=0;v<C.length;v++)O[v*2]=C[v][0],O[v*2+1]=C[v][1];try{l.set_depth_book(R,O,E)}catch(v){if(v instanceof WebAssembly.RuntimeError){a=!0;return}throw v}c()},setDepthBookFlat(b,C,E){if(!a){try{l.set_depth_book(b,C,E)}catch(R){if(R instanceof WebAssembly.RuntimeError){a=!0;return}throw R}c()}},pushHeatmapCol(b,C,E){if(a)return;let R=new Float64Array(b.length*2);for(let v=0;v<b.length;v++)R[v*2]=b[v][0],R[v*2+1]=b[v][1];let O=new Float64Array(C.length*2);for(let v=0;v<C.length;v++)O[v*2]=C[v][0],O[v*2+1]=C[v][1];try{l.push_heatmap_col(R,O,E)}catch(v){if(v instanceof WebAssembly.RuntimeError){a=!0;return}throw v}c()},pushHeatmapColFlat(b,C,E){if(!a){try{l.push_heatmap_col(b,C,E)}catch(R){if(R instanceof WebAssembly.RuntimeError){a=!0;return}throw R}c()}},resetRing(){if(!a){try{l.reset_ring()}catch(b){if(b instanceof WebAssembly.RuntimeError){a=!0;return}throw b}c()}},setExchangeLabels(b){if(a)return;let C=Array.isArray(b)?b.join(","):String(b);try{l.set_exchange_labels(C)}catch(E){if(E instanceof WebAssembly.RuntimeError){a=!0;return}throw E}c()},setSignalObi(b,C,E){if(!a){try{l.set_signal_obi(b,C,E)}catch(R){if(R instanceof WebAssembly.RuntimeError){a=!0;return}throw R}c()}},setSignalSpoof(b){if(!a){try{l.set_signal_spoof(b)}catch(C){if(C instanceof WebAssembly.RuntimeError){a=!0;return}throw C}c()}},setSignalAbsorption(b,C){if(!a){try{l.set_signal_absorption(b,C)}catch(E){if(E instanceof WebAssembly.RuntimeError){a=!0;return}throw E}c()}},setSignalFlow(b,C){if(!a){try{l.set_signal_flow(b,C)}catch(E){if(E instanceof WebAssembly.RuntimeError){a=!0;return}throw E}c()}},setSignalWalls(b,C){if(!a){try{l.set_signal_walls(new Float64Array(b),new Float64Array(C))}catch(E){if(E instanceof WebAssembly.RuntimeError){a=!0;return}throw E}c()}},setSignalGaps(b,C){if(!a){try{l.set_signal_gaps(new Float64Array(b),new Float64Array(C))}catch(E){if(E instanceof WebAssembly.RuntimeError){a=!0;return}throw E}c()}},setSymbol(b){a||(l.set_symbol(b),c())},setTickSize(b){a||(l.set_tick_size(b),c())},setVisibleTicks(b){a||(l.set_visible_ticks(b),c())},setExchangeCount(b){a||(l.set_exchange_count(b),c())},setPrecision(b){a||(l.set_price_precision(b),c())},setAutoCenter(b){a||l.set_auto_center(b)},centerOnMid(){a||(l.center_on_mid(),c())},setHeatmapCols(b){a||(l.set_heatmap_cols(b),c())},setHeatmapAlphaMul(b){if(!a){try{l.set_heatmap_alpha_mul(Number(b))}catch(C){if(C instanceof WebAssembly.RuntimeError){a=!0;return}throw C}c()}},setShowCumulative(b){if(!a){try{l.set_show_cumulative(!!b)}catch(C){if(C instanceof WebAssembly.RuntimeError){a=!0;return}throw C}c()}},setShowSignalOverlays(b){if(!a){try{l.set_show_signal_overlays(!!b)}catch(C){if(C instanceof WebAssembly.RuntimeError){a=!0;return}throw C}c()}},getHoverPrice(){return a?0:l.get_hover_price()},getHoverQty(){return a?0:l.get_hover_qty()},getHoverSide(){return a?0:l.get_hover_side()},onHoverPrice(b){_=b},onClickPrice(b){d=b},setTheme(b){a||(l.set_theme(b==="light"?1:0),c())},clear(){a||(l.clear(),c())},get isDead(){return a},destroy(){g=!0,h=!1,f&&(cancelAnimationFrame(f),f=null),lt();try{l.free()}catch{}}}}export{pr as buildRange,hr as buildRenko,wr as buildTick,dr as createChartBridge,Wt as createCustomIndicatorManager,Mr as createIcebergDetector,br as createOrderbookBridge,ct as dispatchCommands,_r as generateLicenseKey,cr as prefetchWasm,Xt as setupEvents,gr as suggestDefaults,Rt as validateLicense};
1
+ var z={FILL_RECT:1,STROKE_RECT:2,LINE:3,DASHED_LINE:4,POLYLINE:5,TEXT:6,CIRCLE:7,TRIANGLE:8,SAVE:9,RESTORE:10,CLIP_RECT:11,ROTATED_TEXT:12,BUBBLE_3D:13,FILL_POLYGON:14,DASHED_POLYLINE:15,GRADIENT_RECT:16,END_FRAME:255},Be=["left","center","right"],Tt=new Map,Ge=4096;function qe(t,r,s,o){return t<<24|r<<16|s<<8|o}function V(t,r,s,o){let w=qe(t,r,s,o),e=Tt.get(w);return e||(e=`rgba(${t},${r},${s},${(o/255).toFixed(3)})`,Tt.size>=Ge&&Tt.clear(),Tt.set(w,e),e)}var re=new TextDecoder;function ut(t,r){return r&1?Math.round(t)+.5:Math.round(t)}function ct(t,r,s,o){let w=r.buffer;if(s+o>w.byteLength)return;let e=new DataView(w,s,o),i=new Uint8Array(w,s,o),n=0,u="",l="",f=-1,p="";for(;n<o;){let g=i[n];if(n+=1,g===z.END_FRAME)break;switch(g){case z.FILL_RECT:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let h=e.getFloat32(n,!0);n+=4;let c=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4,c!==u&&(t.fillStyle=c,u=c);let M=Math.round(a),m=Math.round(_);t.fillRect(M,m,Math.round(a+d)-M,Math.round(_+h)-m);break}case z.STROKE_RECT:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let h=e.getFloat32(n,!0);n+=4;let c=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let M=e.getFloat32(n,!0);n+=4,c!==l&&(t.strokeStyle=c,l=c),M!==f&&(t.lineWidth=M,f=M);let I=Math.round(M)&1,L=I?Math.round(a)+.5:Math.round(a),P=I?Math.round(_)+.5:Math.round(_);t.strokeRect(L,P,Math.round(d),Math.round(h));break}case z.LINE:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let h=e.getFloat32(n,!0);n+=4;let c=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let M=e.getFloat32(n,!0);n+=4,t.beginPath(),c!==l&&(t.strokeStyle=c,l=c),M!==f&&(t.lineWidth=M,f=M),t.setLineDash([]);let m=Math.round(M);t.moveTo(ut(a,m),ut(_,m)),t.lineTo(ut(d,m),ut(h,m)),t.stroke();break}case z.DASHED_LINE:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let h=e.getFloat32(n,!0);n+=4;let c=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let M=e.getFloat32(n,!0);n+=4;let m=e.getFloat32(n,!0);n+=4;let I=e.getFloat32(n,!0);n+=4,t.beginPath(),c!==l&&(t.strokeStyle=c,l=c),M!==f&&(t.lineWidth=M,f=M),t.setLineDash([m,I]);let L=Math.round(M);t.moveTo(ut(a,L),ut(_,L)),t.lineTo(ut(d,L),ut(h,L)),t.stroke(),t.setLineDash([]);break}case z.POLYLINE:{let a=e.getUint16(n,!0);n+=2;let _=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let d=e.getFloat32(n,!0);if(n+=4,a>0){let h=new Float32Array(a*2);for(let c=0;c<a;c++)h[c*2]=e.getFloat32(n,!0),n+=4,h[c*2+1]=e.getFloat32(n,!0),n+=4;if(t.beginPath(),_!==l&&(t.strokeStyle=_,l=_),d!==f&&(t.lineWidth=d,f=d),t.setLineDash([]),t.lineJoin="round",t.lineCap="round",a<=3){t.moveTo(h[0],h[1]);for(let c=1;c<a;c++)t.lineTo(h[c*2],h[c*2+1])}else{t.moveTo(h[0],h[1]),t.lineTo((h[0]+h[2])*.5,(h[1]+h[3])*.5);for(let c=1;c<a-1;c++){let M=h[c*2],m=h[c*2+1],I=h[(c+1)*2],L=h[(c+1)*2+1];t.quadraticCurveTo(M,m,(M+I)*.5,(m+L)*.5)}t.lineTo(h[(a-1)*2],h[(a-1)*2+1])}t.stroke()}break}case z.TEXT:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let h=e.getFloat32(n,!0);n+=4;let c=i[n];n+=1;let M=e.getUint16(n,!0);n+=2;let m=re.decode(new Uint8Array(r.buffer,s+n,M));n+=M,d!==u&&(t.fillStyle=d,u=d);let I=`${Math.round(h)}px "IBM Plex Mono",monospace`;I!==p&&(t.font=I,p=I),t.textAlign=Be[c]||"left",t.textBaseline="middle",t.fillText(m,Math.round(a),Math.round(_));break}case z.CIRCLE:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let h=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let c=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let M=e.getFloat32(n,!0);n+=4,t.beginPath(),t.arc(a,_,d,0,Math.PI*2),h!==u&&(t.fillStyle=h,u=h),t.fill(),M>0&&(c!==l&&(t.strokeStyle=c,l=c),M!==f&&(t.lineWidth=M,f=M),t.stroke());break}case z.TRIANGLE:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let h=e.getFloat32(n,!0);n+=4;let c=e.getFloat32(n,!0);n+=4;let M=e.getFloat32(n,!0);n+=4;let m=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4,t.beginPath(),t.moveTo(a,_),t.lineTo(d,h),t.lineTo(c,M),t.closePath(),m!==u&&(t.fillStyle=m,u=m),t.fill();break}case z.SAVE:{t.save();break}case z.RESTORE:{t.restore(),u="",l="",f=-1,p="";break}case z.CLIP_RECT:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let h=e.getFloat32(n,!0);n+=4;let c=Math.floor(a),M=Math.floor(_);t.beginPath(),t.rect(c,M,Math.ceil(a+d)-c,Math.ceil(_+h)-M),t.clip();break}case z.ROTATED_TEXT:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let h=e.getFloat32(n,!0);n+=4;let c=e.getFloat32(n,!0);n+=4;let M=e.getUint16(n,!0);n+=2;let m=re.decode(i.subarray(n,n+M));n+=M;let I=`${h}px sans-serif`;I!==p&&(t.font=I,p=I),d!==u&&(t.fillStyle=d,u=d),t.textAlign="center",t.textBaseline="middle",t.save(),t.translate(a,_),t.rotate(c),t.fillText(m,0,0),t.restore();break}case z.BUBBLE_3D:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let h=i[n],c=i[n+1],M=i[n+2],m=i[n+3];n+=4;let I=i[n],L=i[n+1],P=i[n+2],X=i[n+3];n+=4;let $=i[n],N=i[n+1],k=i[n+2],at=i[n+3];n+=4;let ht=e.getFloat32(n,!0);n+=4;let Y=d;if(Y<10){let W=`rgba(${h},${c},${M},${(m/255).toFixed(3)})`;t.beginPath(),t.arc(a,_,Y,0,Math.PI*2),t.fillStyle=W,t.fill(),u=""}else if(Y<18){let W=a-Y*.25,H=_-Y*.25,G=t.createRadialGradient(W,H,Y*.08,a,_,Y);G.addColorStop(0,`rgba(${I},${L},${P},${(X/255).toFixed(3)})`),G.addColorStop(1,`rgba(${h},${c},${M},${(m/255).toFixed(3)})`),t.beginPath(),t.arc(a,_,Y,0,Math.PI*2),t.fillStyle=G,t.fill(),u=""}else{let W=a-Y*.25,H=_-Y*.25,G=t.createRadialGradient(a,_,Y*.85,a,_,Y*1.2);G.addColorStop(0,`rgba(${$},${N},${k},${(at/255*.5).toFixed(3)})`),G.addColorStop(1,`rgba(${$},${N},${k},0)`),t.beginPath(),t.arc(a,_,Y*1.2,0,Math.PI*2),t.fillStyle=G,t.fill();let lt=t.createRadialGradient(W,H,Y*.08,a,_,Y);lt.addColorStop(0,`rgba(${I},${L},${P},${(X/255).toFixed(3)})`),lt.addColorStop(1,`rgba(${h},${c},${M},${(m/255).toFixed(3)})`),t.beginPath(),t.arc(a,_,Y,0,Math.PI*2),t.fillStyle=lt,t.fill();let b=Y*.2,C=t.createRadialGradient(W,H,0,W,H,b);C.addColorStop(0,"rgba(255,255,255,0.22)"),C.addColorStop(1,"rgba(255,255,255,0)"),t.beginPath(),t.arc(W,H,b,0,Math.PI*2),t.fillStyle=C,t.fill(),u=""}break}case z.FILL_POLYGON:{let a=e.getUint16(n,!0);n+=2;let _=V(i[n],i[n+1],i[n+2],i[n+3]);if(n+=4,a>2){t.beginPath();let d=e.getFloat32(n,!0);n+=4;let h=e.getFloat32(n,!0);n+=4,t.moveTo(d,h);for(let c=1;c<a;c++)t.lineTo(e.getFloat32(n,!0),e.getFloat32(n+4,!0)),n+=8;t.closePath(),_!==u&&(t.fillStyle=_,u=_),t.fill()}else n+=a*8;break}case z.DASHED_POLYLINE:{let a=e.getUint16(n,!0);n+=2;let _=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let d=e.getFloat32(n,!0);n+=4;let h=e.getFloat32(n,!0);n+=4;let c=e.getFloat32(n,!0);if(n+=4,a>1){t.beginPath(),_!==l&&(t.strokeStyle=_,l=_),d!==f&&(t.lineWidth=d,f=d),t.setLineDash([h,c]),t.lineJoin="round";let M=e.getFloat32(n,!0);n+=4;let m=e.getFloat32(n,!0);n+=4,t.moveTo(M,m);for(let I=1;I<a;I++)t.lineTo(e.getFloat32(n,!0),e.getFloat32(n+4,!0)),n+=8;t.stroke(),t.setLineDash([])}else n+=a*8;break}case z.GRADIENT_RECT:{let a=e.getFloat32(n,!0);n+=4;let _=e.getFloat32(n,!0);n+=4;let d=e.getFloat32(n,!0);n+=4;let h=e.getFloat32(n,!0);n+=4;let c=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let M=V(i[n],i[n+1],i[n+2],i[n+3]);n+=4;let m=Math.round(a),I=Math.round(_),L=Math.round(a+d)-m,P=Math.round(_+h)-I,X=t.createLinearGradient(m,I,m,I+P);X.addColorStop(0,c),X.addColorStop(1,M),t.fillStyle=X,u="",t.fillRect(m,I,L,P);break}default:return}}}var K={trendline:{type:"2point",previewKind:0,addFn:"add_trendline"},arrow:{type:"2point",previewKind:4,addFn:"add_arrow"},measure:{type:"2point",previewKind:2,addFn:"add_price_range"},fib:{type:"2point",previewKind:3,addFn:"add_fib_retracement"},long:{type:"2point",previewKind:5,addFn:"add_long_position"},short:{type:"2point",previewKind:5,addFn:"add_short_position"},hline:{type:"1point_xp",previewKind:1,addFn:"add_horizontal_line"},vwap:{type:"1point_x",previewKind:6,addFn:"add_anchored_vwap"},pricelabel:{type:"1point_xy",previewKind:7,addFn:"add_price_label"},circle:{type:"2point",previewKind:8,addFn:"add_circle"},arrowup:{type:"1point_xy",previewKind:9,addFn:"add_arrow_marker_up"},arrowdown:{type:"1point_xy",previewKind:10,addFn:"add_arrow_marker_down"},textnote:{type:"1point_xy",previewKind:11,addFn:"add_text_note"},channel:{type:"3point",previewKind:0,addFn:"add_parallel_channel"},fibext:{type:"3point",previewKind:0,addFn:"add_fib_extension",previewFn:"fib_ext"},brush:{type:"freehand"},path:{type:"npoint"},elliott:{type:"elliott_manual"},elliottauto:{type:"1point_xy",previewKind:12,addFn:"add_elliott_impulse",previewFn:"elliott"}};function bt(t){return K[t]?.type==="2point"}function It(t){return K[t]?.type==="3point"}function wt(t){let r=K[t]?.type;return r==="1point"||r==="1point_x"||r==="1point_xy"||r==="1point_xp"}function Et(t){return K[t]?.type==="freehand"}function ot(t){return K[t]?.type==="npoint"}function st(t){return K[t]?.type==="elliott_manual"}var oe={r:.04,g:.49,b:1,lineWidth:2,dashed:!1,fontSize:12};function nt(t,r,s,o,w,e){e=e||oe;let i=K[r];if(!i)return 0;let n=0;return i.type==="3point"?n=t[i.addFn](s.x1,s.y1,s.x2,s.y2,o,w,e.r,e.g,e.b,e.lineWidth,e.dashed,s.pane):i.type==="2point"?n=t[i.addFn](s.x1,s.y1,o,w,e.r,e.g,e.b,e.lineWidth,e.dashed,s.pane):i.type==="1point_x"?n=t[i.addFn](o,e.r,e.g,e.b,e.lineWidth,e.dashed,s.pane):i.type==="1point_xp"?n=t[i.addFn](o,w,e.r,e.g,e.b,e.lineWidth,e.dashed,s.pane):i.type==="1point_xy"?n=t[i.addFn](o,w,e.r,e.g,e.b,e.fontSize||12,s.pane):n=t[i.addFn](w,e.r,e.g,e.b,e.lineWidth,e.dashed,s.pane),n||0}function U(t,r,s,o,w,e,i){e=e||oe;let n=K[r];if(n){if(n.previewFn==="elliott"){t.set_elliott_preview(o,w,e.r,e.g,e.b,e.lineWidth,i);return}n.type==="3point"?s.step===1?t.set_drawing_preview(n.previewKind,s.x1,s.y1,o,w,e.r,e.g,e.b,e.lineWidth,e.dashed,i):s.step===2&&(n.previewFn==="fib_ext"?t.set_fib_ext_preview(s.x1,s.y1,s.x2,s.y2,o,w,e.r,e.g,e.b,e.lineWidth,e.dashed,i):t.set_channel_preview(s.x1,s.y1,s.x2,s.y2,o,w,e.r,e.g,e.b,e.lineWidth,e.dashed,i)):n.type==="2point"?t.set_drawing_preview(n.previewKind,s.x1,s.y1,o,w,e.r,e.g,e.b,e.lineWidth,e.dashed,i):n.type==="1point_x"?t.set_drawing_preview(n.previewKind,o,0,0,0,e.r,e.g,e.b,e.lineWidth,e.dashed,i):n.type==="1point_xp"||n.type==="1point_xy"?t.set_drawing_preview(n.previewKind,o,w,0,0,e.r,e.g,e.b,e.lineWidth,e.dashed,i):t.set_drawing_preview(n.previewKind,0,w,0,0,e.r,e.g,e.b,e.lineWidth,e.dashed,i)}}function F(t,r,s,o){let w=t.screen_to_world_x(r),e;switch(o){case 1:e=t.screen_to_rsi_y(s);break;case 2:e=t.screen_to_oi_y(s);break;case 3:e=t.screen_to_fr_y(s);break;case 4:e=t.screen_to_cvd_y(s);break;case 5:e=t.screen_to_vpin_y(s);break;case 6:e=t.screen_to_ob_flow_y(s);break;default:e=t.screen_to_world_y(s);break}return{wx:w,wy:e}}function J(t){return t===4?1:t===6?2:t===8?3:t===10?4:t===12?5:t===19?6:0}function dt(t){return t===4||t===6||t===8||t===10||t===12||t===19}function D(t){return t===14||t===15||t===16||t===17||t===18||t===21}function x(t){return t===4||t===14?1:t===6||t===15?2:t===8||t===16?3:t===10||t===17?4:t===12||t===18?5:t===19||t===21?6:0}function it(t,r,s,o){dt(r)?(t.pan(s,0),Math.abs(o)>.01&&r!==4&&t.pan_indicator_y(x(r),o)):t.pan(s,o)}function q(t){return t===0||t===4||t===6||t===8||t===10||t===12}function _e(t,r,s,o){t.addEventListener("wheel",l=>{if(o.disposed)return;l.preventDefault(),o.cancelMomentum();let f=l.deltaY>0?1.1:.9,p=r.hit_zone(l.offsetX,l.offsetY);D(p)?p!==14&&r.zoom_indicator_y(x(p),l.offsetY,f):dt(p)?p===4?r.zoom_x(l.offsetX,f):l.ctrlKey?r.zoom_indicator_y(x(p),l.offsetY,f):r.zoom_x(l.offsetX,f):l.ctrlKey?r.zoom_y(l.offsetY,f):l.shiftKey||p===2?r.zoom_x(l.offsetX,f):p===3?r.zoom_y(l.offsetY,f):r.zoom(l.offsetX,l.offsetY,f),s.onDirty()},{passive:!1}),t.addEventListener("mousedown",l=>{if(o.disposed||l.button!==0)return;o.cancelMomentum(),e();let f=performance.now();if(f-o.lastClickTime<300){o.lastClickTime=f;return}o.lastClickTime=f;let p=o.drawingMode;if(p){let a=r.hit_zone(l.offsetX,l.offsetY);if(!q(a))return;let _=J(a),{wx:d,wy:h}=F(r,l.offsetX,l.offsetY,_),c=p.style,M=p.tool;if(st(M)){if(!p.pathStarted)p.pane=_,r.start_elliott_manual(c.r,c.g,c.b,c.lineWidth,_),r.add_elliott_manual_point(d,h),p.pathStarted=!0,p.step=1;else if(r.add_elliott_manual_point(d,h)){o.finishDrawing(),s.onDirty();return}}else if(ot(M))p.pathStarted?r.add_path_point(d,h):(p.pane=_,r.start_path(c.r,c.g,c.b,c.lineWidth,c.dashed,_),r.add_path_point(d,h),p.pathStarted=!0,p.step=1);else if(Et(M))p.pane=_,r.start_brush(c.r,c.g,c.b,c.lineWidth,_),r.add_brush_point(d,h),o.isBrushing=!0;else if(It(M))if(p.step===0)p.x1=d,p.y1=h,p.pane=_,p.step=1;else if(p.step===1)p.x2=d,p.y2=h,p.step=2,r.clear_drawing_preview();else{let m=K[M];m&&m.previewFn==="fib_ext"?r.clear_fib_ext_preview():r.clear_channel_preview(),nt(r,M,p,d,h,c),o.finishDrawing()}else if(bt(M))p.step===0?(p.x1=d,p.y1=h,p.pane=_,p.step=1):(nt(r,M,p,d,h,c),o.finishDrawing());else{p.pane=_;let m=nt(r,M,p,d,h,c);o.finishDrawing(),M==="textnote"&&m>0&&(r.select_drawing(m),s.onDrawingSelected?.(m),s.onDrawingDblClick?.(m,l.offsetX,l.offsetY,l.clientX,l.clientY))}s.onDirty();return}let g=r.hit_zone(l.offsetX,l.offsetY);if(g===5){o.isResizingRsi=!0,o.resizeStartY=l.offsetY,o.resizeStartRatio=r.get_rsi_ratio(),t.style.cursor="ns-resize";return}if(g===7){o.isResizingOi=!0,o.resizeStartY=l.offsetY,o.resizeStartRatio=r.get_oi_ratio(),t.style.cursor="ns-resize";return}if(g===9){o.isResizingFr=!0,o.resizeStartY=l.offsetY,o.resizeStartRatio=r.get_fr_ratio(),t.style.cursor="ns-resize";return}if(g===11){o.isResizingCvd=!0,o.resizeStartY=l.offsetY,o.resizeStartRatio=r.get_cvd_ratio(),t.style.cursor="ns-resize";return}if(g===13){o.isResizingVpin=!0,o.resizeStartY=l.offsetY,o.resizeStartRatio=r.get_vpin_ratio(),t.style.cursor="ns-resize";return}if(g===20){o.isResizingObFlow=!0,o.resizeStartY=l.offsetY,o.resizeStartRatio=r.get_obf_ratio(),t.style.cursor="ns-resize";return}if(q(g)){let a=r.get_selected_drawing();if(a>0){let M=r.hit_test_drawing_anchor(l.offsetX,l.offsetY);if(M>=0){o.isDraggingAnchor=!0,o.dragAnchorIdx=M,o.dragAnchorPane=J(g),t.style.cursor="grabbing";return}if(r.hit_test_drawing(l.offsetX,l.offsetY)===a){o.isDraggingDrawing=!0,o.dragDrawingPane=J(g);let{wx:I,wy:L}=F(r,l.offsetX,l.offsetY,o.dragDrawingPane);o.dragDrawingLastWx=I,o.dragDrawingLastWy=L,t.style.cursor="move";return}}let _=r.hit_test_drawing(l.offsetX,l.offsetY);if(_>0){r.deselect_marker(),s.onMarkerSelected?.(0),r.select_drawing(_),s.onDrawingSelected?.(_),s.onDirty();return}let d=r.hit_test_marker(l.offsetX,l.offsetY);if(d>0){r.deselect_drawing(),s.onDrawingSelected?.(0),r.select_marker(d),s.onMarkerSelected?.(d),s.onDirty();return}let h=r.get_selected_drawing(),c=r.get_selected_marker();h>0&&(r.deselect_drawing(),s.onDrawingSelected?.(0),s.onDirty()),c>0&&(r.deselect_marker(),s.onMarkerSelected?.(0),s.onDirty())}q(g)&&(o.liqPinSx=l.offsetX,o.liqPinSy=l.offsetY,o.liqPinTimer&&clearTimeout(o.liqPinTimer),o.liqPinTimer=setTimeout(()=>{o.liqPinTimer=null,s.onLiqAnnotationPin?.(o.liqPinSx,o.liqPinSy)},700)),o.isDragging=!0,o.dragZone=g,o.lastX=l.offsetX,o.lastY=l.offsetY,g===2?t.style.cursor="ew-resize":g===3||D(g)?t.style.cursor="ns-resize":t.style.cursor="grabbing"});let w=null;function e(){w&&(cancelAnimationFrame(w),w=null)}function i(l,f){let p=r.hover_hit_test(l,f),g=p[0],a=p[1],_=p[2],d=p[3],h=p[4],c=o.drawingMode;g===2?t.style.cursor="ew-resize":g===3||D(g)||g===5||g===7||g===9||g===11||g===13||g===20?t.style.cursor="ns-resize":!c&&q(g)&&a>0&&_>=0?t.style.cursor="grab":!c&&q(g)&&a>0&&d===a?t.style.cursor="move":!c&&q(g)&&(d>0||h>0)?t.style.cursor="pointer":t.style.cursor="crosshair"}function n(l,f){let p=r.hit_zone(l,f);p===2||p===3||D(p)?r.hide_crosshair():r.set_crosshair(l,f),s.onDirty(),s.onCrosshairMove?.(l,f,p),s.onVrvpHover?.(l,f),o._pendingHoverX=l,o._pendingHoverY=f,w||(w=requestAnimationFrame(()=>{w=null,o.disposed||i(o._pendingHoverX,o._pendingHoverY)}))}t.addEventListener("mousemove",l=>{if(o.disposed)return;if(o.liqPinTimer){let p=Math.abs(l.offsetX-o.liqPinSx),g=Math.abs(l.offsetY-o.liqPinSy);(p>6||g>6)&&(clearTimeout(o.liqPinTimer),o.liqPinTimer=null)}if(o.isResizingRsi){let g=t.getBoundingClientRect().height-28,_=(o.resizeStartY-l.offsetY)/g,d=Math.max(.05,Math.min(.5,o.resizeStartRatio+_));r.set_rsi_ratio(d),s.onDirty();return}if(o.isResizingOi){let g=t.getBoundingClientRect().height-28,_=(o.resizeStartY-l.offsetY)/g,d=Math.max(.05,Math.min(.5,o.resizeStartRatio+_));r.set_oi_ratio(d),s.onDirty();return}if(o.isResizingFr){let g=t.getBoundingClientRect().height-28,_=(o.resizeStartY-l.offsetY)/g,d=Math.max(.05,Math.min(.5,o.resizeStartRatio+_));r.set_fr_ratio(d),s.onDirty();return}if(o.isResizingCvd){let g=t.getBoundingClientRect().height-28,_=(o.resizeStartY-l.offsetY)/g,d=Math.max(.05,Math.min(.5,o.resizeStartRatio+_));r.set_cvd_ratio(d),s.onDirty();return}if(o.isResizingVpin){let g=t.getBoundingClientRect().height-28,_=(o.resizeStartY-l.offsetY)/g,d=Math.max(.05,Math.min(.5,o.resizeStartRatio+_));r.set_vpin_ratio(d),s.onDirty();return}if(o.isResizingObFlow){let g=t.getBoundingClientRect().height-28,_=(o.resizeStartY-l.offsetY)/g,d=Math.max(.05,Math.min(.5,o.resizeStartRatio+_));r.set_obf_ratio(d),s.onDirty();return}if(o.isDraggingAnchor){let{wx:p,wy:g}=F(r,l.offsetX,l.offsetY,o.dragAnchorPane);r.update_drawing_anchor(o.dragAnchorIdx,p,g),r.set_crosshair(l.offsetX,l.offsetY),s.onDirty(),s.onCrosshairMove?.(l.offsetX,l.offsetY,r.hit_zone(l.offsetX,l.offsetY));return}if(o.isDraggingDrawing){let{wx:p,wy:g}=F(r,l.offsetX,l.offsetY,o.dragDrawingPane),a=p-o.dragDrawingLastWx,_=g-o.dragDrawingLastWy;r.move_drawing(a,_),o.dragDrawingLastWx=p,o.dragDrawingLastWy=g,r.set_crosshair(l.offsetX,l.offsetY),s.onDirty(),s.onCrosshairMove?.(l.offsetX,l.offsetY,r.hit_zone(l.offsetX,l.offsetY));return}let f=o.drawingMode;if(o.isBrushing&&f){let p=f.pane||0,{wx:g,wy:a}=F(r,l.offsetX,l.offsetY,p);r.add_brush_point(g,a),r.set_crosshair(l.offsetX,l.offsetY),s.onDirty();return}if(f&&st(f.tool)&&f.pathStarted){let p=f.pane||0,{wx:g,wy:a}=F(r,l.offsetX,l.offsetY,p);r.set_elliott_manual_cursor(g,a),r.set_crosshair(l.offsetX,l.offsetY);let _=r.hit_zone(l.offsetX,l.offsetY);s.onDirty(),s.onCrosshairMove?.(l.offsetX,l.offsetY,_);return}if(f&&ot(f.tool)&&f.pathStarted){let p=f.pane||0,{wx:g,wy:a}=F(r,l.offsetX,l.offsetY,p);r.set_path_cursor(g,a),r.set_crosshair(l.offsetX,l.offsetY);let _=r.hit_zone(l.offsetX,l.offsetY);s.onDirty(),s.onCrosshairMove?.(l.offsetX,l.offsetY,_);return}if(f&&f.step>0){let p=f.pane||0,{wx:g,wy:a}=F(r,l.offsetX,l.offsetY,p);U(r,f.tool,f,g,a,f.style,p),r.set_crosshair(l.offsetX,l.offsetY);let _=r.hit_zone(l.offsetX,l.offsetY);s.onDirty(),s.onCrosshairMove?.(l.offsetX,l.offsetY,_);return}if(f&&wt(f.tool)){let p=r.hit_zone(l.offsetX,l.offsetY),g=J(p),{wx:a,wy:_}=F(r,l.offsetX,l.offsetY,g);U(r,f.tool,f,a,_,f.style,g),r.set_crosshair(l.offsetX,l.offsetY),s.onDirty(),s.onCrosshairMove?.(l.offsetX,l.offsetY,p);return}if(o.isDragging){let p=l.offsetX-o.lastX,g=l.offsetY-o.lastY;o.lastX=l.offsetX,o.lastY=l.offsetY,o.dragZone===2?r.pan_x(p):o.dragZone===3?r.pan_y(g):o.dragZone===14||(D(o.dragZone)?r.pan_indicator_y(x(o.dragZone),g):it(r,o.dragZone,p,g)),r.set_crosshair(l.offsetX,l.offsetY),s.onDirty(),s.onCrosshairMove?.(l.offsetX,l.offsetY,o.dragZone),s.onVrvpHover?.(l.offsetX,l.offsetY);return}n(l.offsetX,l.offsetY)}),t.addEventListener("mouseup",()=>{o.disposed||(o.liqPinTimer&&(clearTimeout(o.liqPinTimer),o.liqPinTimer=null),o.isBrushing&&(o.isBrushing=!1,r.finish_brush(),o.finishDrawing(),s.onDirty()),o.isDragging=!1,o.isResizingRsi=!1,o.isResizingOi=!1,o.isResizingFr=!1,o.isResizingCvd=!1,o.isResizingVpin=!1,o.isResizingObFlow=!1,o.isDraggingAnchor=!1,o.isDraggingDrawing=!1,o.dragAnchorIdx=-1,t.style.cursor="crosshair")});function u(){o.disposed||o._leaveHandled||(o._leaveHandled=!0,requestAnimationFrame(()=>{o._leaveHandled=!1}),e(),o.liqPinTimer&&(clearTimeout(o.liqPinTimer),o.liqPinTimer=null),o.isBrushing&&(o.isBrushing=!1,r.finish_brush(),o.finishDrawing()),o.isDragging=!1,o.isResizingRsi=!1,o.isResizingOi=!1,o.isResizingFr=!1,o.isResizingCvd=!1,o.isResizingVpin=!1,o.isResizingObFlow=!1,o.isDraggingAnchor=!1,o.isDraggingDrawing=!1,o.dragAnchorIdx=-1,r.hide_crosshair(),t.style.cursor="crosshair",s.onDirty(),s.onCrosshairHide?.(),s.onVrvpHover?.(null,null))}t.addEventListener("pointerleave",u),t.addEventListener("mouseleave",u),t.addEventListener("dblclick",l=>{if(o.disposed)return;l.preventDefault(),l.stopPropagation();let f=o.drawingMode;if(f&&st(f.tool)&&f.pathStarted){r.finish_elliott_manual(),o.finishDrawing(),s.onDirty();return}if(f&&ot(f.tool)&&f.pathStarted){r.finish_path(),o.finishDrawing(),s.onDirty();return}if(f)return;let p=r.hit_zone(l.offsetX,l.offsetY);if(dt(p)||D(p)){r.reset_indicator_y_auto(x(p)),s.onDirty();return}let g=r.hit_test_drawing(l.offsetX,l.offsetY);g>0&&(r.select_drawing(g),s.onDirty(),s.onDrawingDblClick?.(g,l.offsetX,l.offsetY,l.clientX,l.clientY))}),t.addEventListener("contextmenu",l=>{if(o.disposed)return;let f=o.drawingMode;if(f&&st(f.tool)&&f.pathStarted){l.preventDefault(),l.stopPropagation(),r.finish_elliott_manual(),o.finishDrawing(),s.onDirty();return}if(f&&ot(f.tool)&&f.pathStarted){l.preventDefault(),l.stopPropagation(),r.finish_path(),o.finishDrawing(),s.onDirty();return}})}var Nt=25;function ce(t,r,s,o){t.addEventListener("touchstart",w=>{if(!o.disposed){if(w.preventDefault(),o.cancelMomentum(),w.touches.length===2){clearTimeout(o.longPressTimer),o.isCrosshairMode=!1;let e=t.getBoundingClientRect(),i=w.touches[1].clientX-w.touches[0].clientX,n=w.touches[1].clientY-w.touches[0].clientY;o.lastTouchDist=Math.sqrt(i*i+n*n),o.lastX=(w.touches[0].clientX+w.touches[1].clientX)/2-e.left,o.lastY=(w.touches[0].clientY+w.touches[1].clientY)/2-e.top,o.dragZone=r.hit_zone(o.lastX,o.lastY),o.pinchAnchorY=o.lastY}else if(w.touches.length===1){let e=t.getBoundingClientRect(),i=w.touches[0].clientX-e.left,n=w.touches[0].clientY-e.top;o.touchStartX=i,o.touchStartY=n,o.touchMoved=!1;let u=o.drawingMode;if(u){let a=r.hit_zone(i,n);if(q(a)){let _=J(a),{wx:d,wy:h}=F(r,i,n,_),c=u.tool;if(st(c)){if(!u.pathStarted)u.pane=_,r.start_elliott_manual(u.style.r,u.style.g,u.style.b,u.style.lineWidth,_),r.add_elliott_manual_point(d,h),u.pathStarted=!0,u.step=1;else if(r.add_elliott_manual_point(d,h)){o.finishDrawing(),s.onDirty();return}}else ot(c)?u.pathStarted?r.add_path_point(d,h):(u.pane=_,r.start_path(u.style.r,u.style.g,u.style.b,u.style.lineWidth,u.style.dashed,_),r.add_path_point(d,h),u.pathStarted=!0,u.step=1):Et(c)?(u.pane=_,r.start_brush(u.style.r,u.style.g,u.style.b,u.style.lineWidth,_),r.add_brush_point(d,h),o.isBrushing=!0):It(c)?u.step===0?(u.x1=d,u.y1=h,u.pane=_,u.step=1,u._stepAtTouchStart=0,U(r,c,u,d,h,u.style,_)):u.step===1?(u._stepAtTouchStart=1,U(r,c,u,d,h,u.style,u.pane)):(u._stepAtTouchStart=2,U(r,c,u,d,h,u.style,u.pane)):bt(c)?u.step===0?(u.x1=d,u.y1=h,u.pane=_,u.step=1,u._stepAtTouchStart=0,U(r,c,u,d,h,u.style,_)):(u._stepAtTouchStart=1,U(r,c,u,d,h,u.style,u.pane)):wt(c)?(u.pane=_,U(r,c,u,d,h,u.style,_)):(u.pane=_,nt(r,c,u,d,h,u.style),o.finishDrawing());r.set_crosshair(i,n),s.onDirty(),s.onCrosshairMove?.(i,n,a)}return}let l=r.hover_hit_test(i,n),f=l[0],p=l[1],g=l[2];if(q(f)&&!o.drawingMode&&p>0){if(g>=0){o.isDraggingAnchor=!0,o.dragAnchorIdx=g,o.dragAnchorPane=J(f);return}if(l[3]===p){o.isDraggingDrawing=!0,o.dragDrawingPane=J(f);let{wx:_,wy:d}=F(r,i,n,o.dragDrawingPane);o.dragDrawingLastWx=_,o.dragDrawingLastWy=d;return}}o.isDragging=!0,o.isCrosshairMode=!1,o.lastX=i,o.lastY=n,o.dragZone=f,clearTimeout(o.longPressTimer),o.longPressTimer=setTimeout(()=>{o.isDragging&&!o.touchMoved&&(o.isCrosshairMode=!0,r.set_crosshair(i,n),s.onDirty(),s.onCrosshairMove?.(i,n,o.dragZone),s.onVrvpHover?.(i,n))},300),q(o.dragZone)&&(o.liqPinSx=i,o.liqPinSy=n,o.liqPinTimer&&clearTimeout(o.liqPinTimer),o.liqPinTimer=setTimeout(()=>{o.liqPinTimer=null,o.touchMoved||s.onLiqAnnotationPin?.(o.liqPinSx,o.liqPinSy)},700))}}},{passive:!1}),t.addEventListener("touchmove",w=>{if(o.disposed)return;w.preventDefault();let e=t.getBoundingClientRect();if(o.isDraggingAnchor&&w.touches.length===1){let n=w.touches[0].clientX-e.left,u=w.touches[0].clientY-e.top,{wx:l,wy:f}=F(r,n,u,o.dragAnchorPane);r.update_drawing_anchor(o.dragAnchorIdx,l,f),r.set_crosshair(n,u),s.onDirty();return}if(o.isDraggingDrawing&&w.touches.length===1){let n=w.touches[0].clientX-e.left,u=w.touches[0].clientY-e.top;o.touchMoved=!0;let{wx:l,wy:f}=F(r,n,u,o.dragDrawingPane),p=l-o.dragDrawingLastWx,g=f-o.dragDrawingLastWy;r.move_drawing(p,g),o.dragDrawingLastWx=l,o.dragDrawingLastWy=f,r.set_crosshair(n,u),s.onDirty();return}let i=o.drawingMode;if(o.isBrushing&&i&&w.touches.length===1){let n=w.touches[0].clientX-e.left,u=w.touches[0].clientY-e.top,l=i.pane||0,{wx:f,wy:p}=F(r,n,u,l);r.add_brush_point(f,p),r.set_crosshair(n,u),s.onDirty(),o.touchMoved=!0;return}if(i&&st(i.tool)&&i.pathStarted&&w.touches.length===1){let n=w.touches[0].clientX-e.left,u=w.touches[0].clientY-e.top,l=i.pane||0,{wx:f,wy:p}=F(r,n,u,l);r.set_elliott_manual_cursor(f,p),r.set_crosshair(n,u),s.onDirty(),o.touchMoved=!0;return}if(i&&ot(i.tool)&&i.pathStarted&&w.touches.length===1){let n=w.touches[0].clientX-e.left,u=w.touches[0].clientY-e.top,l=i.pane||0,{wx:f,wy:p}=F(r,n,u,l);r.set_path_cursor(f,p),r.set_crosshair(n,u),s.onDirty(),o.touchMoved=!0;return}if(i&&i.step>0&&w.touches.length===1){let n=w.touches[0].clientX-e.left,u=w.touches[0].clientY-e.top;!o.touchMoved&&(Math.abs(n-o.touchStartX)>Nt||Math.abs(u-o.touchStartY)>Nt)&&(o.touchMoved=!0);let l=i.pane||0,{wx:f,wy:p}=F(r,n,u,l);U(r,i.tool,i,f,p,i.style,l),r.set_crosshair(n,u);let g=r.hit_zone(n,u);s.onDirty(),s.onCrosshairMove?.(n,u,g);return}if(i&&wt(i.tool)&&w.touches.length===1){let n=w.touches[0].clientX-e.left,u=w.touches[0].clientY-e.top,l=r.hit_zone(n,u),f=J(l),{wx:p,wy:g}=F(r,n,u,f);U(r,i.tool,i,p,g,i.style,f),r.set_crosshair(n,u),s.onDirty(),s.onCrosshairMove?.(n,u,l);return}if(w.touches.length===2){o.velSamples=[];let n=w.touches[1].clientX-w.touches[0].clientX,u=w.touches[1].clientY-w.touches[0].clientY,l=Math.sqrt(n*n+u*u),f=o.lastTouchDist/l,p=(w.touches[0].clientX+w.touches[1].clientX)/2-e.left,g=(w.touches[0].clientY+w.touches[1].clientY)/2-e.top,a=o.pinchAnchorY??g;o.dragZone===3?r.zoom_y(a,f):D(o.dragZone)&&o.dragZone!==14?r.zoom_indicator_y(x(o.dragZone),a,f):o.dragZone===14?(r.zoom_x(p,f),it(r,4,p-o.lastX,g-o.lastY)):o.dragZone===2?r.zoom_x(p,f):dt(o.dragZone)?(r.zoom_x(p,f),it(r,o.dragZone,p-o.lastX,g-o.lastY)):(r.zoom(p,g,f),it(r,o.dragZone,p-o.lastX,g-o.lastY)),o.lastTouchDist=l,o.lastX=p,o.lastY=g,s.onDirty()}else if(w.touches.length===1&&o.isDragging){let n=w.touches[0].clientX-e.left,u=w.touches[0].clientY-e.top,l=n-o.lastX,f=u-o.lastY;if(!o.touchMoved&&(Math.abs(n-o.touchStartX)>Nt||Math.abs(u-o.touchStartY)>Nt)&&(o.touchMoved=!0,o.isCrosshairMode||clearTimeout(o.longPressTimer),o.liqPinTimer&&(clearTimeout(o.liqPinTimer),o.liqPinTimer=null)),o.isCrosshairMode)r.set_crosshair(n,u),s.onDirty(),s.onCrosshairMove?.(n,u,o.dragZone),s.onVrvpHover?.(n,u);else if(o.touchMoved){if(o.lastX=n,o.lastY=u,o.dragZone===3||D(o.dragZone)||o.recordVelocity(l,f),o.dragZone===2)r.pan_x(l);else if(o.dragZone===3){let g=Math.pow(1.005,f);r.zoom_y(o.touchStartY,g)}else if(o.dragZone!==14)if(D(o.dragZone)){let g=Math.pow(1.005,f);r.zoom_indicator_y(x(o.dragZone),o.touchStartY,g)}else it(r,o.dragZone,l,f);s.onDirty()}else o.lastX=n,o.lastY=u}},{passive:!1}),t.addEventListener("touchend",w=>{if(o.disposed)return;if(clearTimeout(o.longPressTimer),o.liqPinTimer&&(clearTimeout(o.liqPinTimer),o.liqPinTimer=null),o.isDraggingAnchor){o.isDraggingAnchor=!1,o.dragAnchorIdx=-1,r.hide_crosshair(),s.onDirty(),s.onCrosshairHide?.();return}if(o.isDraggingDrawing){if(o.isDraggingDrawing=!1,r.hide_crosshair(),s.onDirty(),s.onCrosshairHide?.(),!o.touchMoved){let n=r.get_selected_drawing();if(n>0){let u=t.getBoundingClientRect();s.onDrawingDblClick?.(n,o.touchStartX,o.touchStartY,o.touchStartX+u.left,o.touchStartY+u.top)}}return}if(o.isBrushing){o.isBrushing=!1,r.finish_brush(),o.finishDrawing(),s.onDirty(),s.onCrosshairHide?.();return}let e=o.drawingMode;if(e&&st(e.tool)&&e.pathStarted){let n=Date.now(),u=o.touchStartX-(o._pathLastTapX||0),l=o.touchStartY-(o._pathLastTapY||0),f=Math.sqrt(u*u+l*l);n-(o._pathLastTapTime||0)<350&&f<30?(r.finish_elliott_manual(),o.finishDrawing(),o._pathLastTapTime=0):(o._pathLastTapTime=n,o._pathLastTapX=o.touchStartX,o._pathLastTapY=o.touchStartY),o.isDragging=!1,o.lastTouchDist=0,s.onDirty();return}if(e&&ot(e.tool)&&e.pathStarted){let n=Date.now(),u=o.touchStartX-(o._pathLastTapX||0),l=o.touchStartY-(o._pathLastTapY||0),f=Math.sqrt(u*u+l*l);n-(o._pathLastTapTime||0)<350&&f<30?(r.finish_path(),o.finishDrawing(),o._pathLastTapTime=0):(o._pathLastTapTime=n,o._pathLastTapX=o.touchStartX,o._pathLastTapY=o.touchStartY),o.isDragging=!1,o.lastTouchDist=0,s.onDirty();return}if(e&&It(e.tool)){let n=e._stepAtTouchStart;if(e.step===1&&(n===1||o.touchMoved)){let u=t.getBoundingClientRect(),l=w.changedTouches?.[0];if(l){let f=l.clientX-u.left,p=l.clientY-u.top,g=e.pane||0,{wx:a,wy:_}=F(r,f,p,g);e.x2=a,e.y2=_,e.step=2,r.clear_drawing_preview()}}else if(e.step===2&&(n===2||o.touchMoved)){let u=t.getBoundingClientRect(),l=w.changedTouches?.[0];if(l){let f=l.clientX-u.left,p=l.clientY-u.top,g=e.pane||0,{wx:a,wy:_}=F(r,f,p,g),d=K[e.tool];d&&d.previewFn==="fib_ext"?r.clear_fib_ext_preview():r.clear_channel_preview(),nt(r,e.tool,e,a,_,e.style),o.finishDrawing()}}o.isDragging=!1,o.lastTouchDist=0,o.drawingMode||(r.hide_crosshair(),s.onCrosshairHide?.()),s.onDirty();return}if(e&&e.step===1&&bt(e.tool)){if(e._stepAtTouchStart===1||o.touchMoved){let u=t.getBoundingClientRect(),l=w.changedTouches?.[0];if(l){let f=l.clientX-u.left,p=l.clientY-u.top,g=e.pane||0,{wx:a,wy:_}=F(r,f,p,g);nt(r,e.tool,e,a,_,e.style),o.finishDrawing()}}o.isDragging=!1,o.lastTouchDist=0,o.drawingMode||(r.hide_crosshair(),s.onCrosshairHide?.()),s.onDirty();return}if(e&&wt(e.tool)){let n=t.getBoundingClientRect(),u=w.changedTouches?.[0];if(u){let l=u.clientX-n.left,f=u.clientY-n.top,p=r.hit_zone(l,f),g=q(p)?J(p):e.pane||0,{wx:a,wy:_}=F(r,l,f,g),d=e.tool;r.clear_drawing_preview();let h=nt(r,d,e,a,_,e.style);o.finishDrawing(),d==="textnote"&&h>0&&(r.select_drawing(h),s.onDrawingSelected?.(h),s.onDrawingDblClick?.(h,l,f,l+n.left,f+n.top))}o.isDragging=!1,o.lastTouchDist=0,r.hide_crosshair(),s.onCrosshairHide?.(),s.onDirty();return}if(!o.touchMoved&&!o.drawingMode){let n=Date.now(),u=o.touchStartX,l=o.touchStartY,f=u-o.lastTapX,p=l-o.lastTapY,g=Math.sqrt(f*f+p*p),a=n-o.lastTapTime<350&&g<30,_=r.hit_zone(u,l);if(a&&(dt(_)||D(_)))r.reset_indicator_y_auto(x(_)),s.onDirty();else if(q(_)){let d=r.get_selected_drawing(),h=r.hit_test_drawing(u,l),c=0;if(h<=0&&(c=r.hit_test_marker(u,l)),h>0){r.deselect_marker(),s.onMarkerSelected?.(0),r.select_drawing(h);let M=t.getBoundingClientRect(),m=u+M.left,I=l+M.top;s.onDrawingSelected?.(h,m,I),(d<=0||d===h)&&s.onDrawingDblClick?.(h,u,l,m,I),s.onDirty()}else c>0?(r.deselect_drawing(),s.onDrawingSelected?.(0),r.select_marker(c),s.onMarkerSelected?.(c),s.onDirty()):(d>0&&(r.deselect_drawing(),s.onDrawingSelected?.(0),s.onDirty()),r.get_selected_marker()>0&&(r.deselect_marker(),s.onMarkerSelected?.(0),s.onDirty()))}o.lastTapTime=n,o.lastTapX=u,o.lastTapY=l}o.touchMoved&&!o.isCrosshairMode&&!o.drawingMode&&o.dragZone!==3&&!D(o.dragZone)&&o.startMomentum(o.dragZone),o.isDragging=!1,o.isCrosshairMode=!1,o.lastTouchDist=0,(!o.drawingMode||o.drawingMode.step===0)&&(r.hide_crosshair(),s.onCrosshairHide?.()),s.onDirty(),s.onVrvpHover?.(null,null)}),t.addEventListener("touchcancel",()=>{clearTimeout(o.longPressTimer),o.liqPinTimer&&(clearTimeout(o.liqPinTimer),o.liqPinTimer=null),o.isDragging=!1,o.isDraggingAnchor=!1,o.isDraggingDrawing=!1,o.isBrushing=!1,o.isCrosshairMode=!1,o.lastTouchDist=0,o.cancelMomentum(),r.hide_crosshair(),s.onCrosshairHide?.(),s.onDirty()})}function Xt(t,r,s){let o={disposed:!1,isDragging:!1,dragZone:0,lastX:0,lastY:0,lastTouchDist:0,isResizingRsi:!1,isResizingOi:!1,isResizingFr:!1,isResizingCvd:!1,resizeStartY:0,resizeStartRatio:0,lastClickTime:0,isDraggingAnchor:!1,dragAnchorIdx:-1,dragAnchorPane:0,isBrushing:!1,isDraggingDrawing:!1,dragDrawingPane:0,dragDrawingLastWx:0,dragDrawingLastWy:0,touchStartX:0,touchStartY:0,touchMoved:!1,longPressTimer:null,isCrosshairMode:!1,liqPinTimer:null,liqPinSx:0,liqPinSy:0,velSamples:[],momentumRaf:null,momentumVx:0,momentumVy:0,momentumZone:0,lastTapTime:0,lastTapX:0,lastTapY:0,drawingMode:null},w=.92,e=.5,i=80;o.recordVelocity=function(f,p){let g=performance.now();for(o.velSamples.push({dx:f,dy:p,t:g});o.velSamples.length>0&&g-o.velSamples[0].t>i;)o.velSamples.shift()};function n(){if(o.velSamples.length<2)return{vx:0,vy:0};let f=o.velSamples[0],g=o.velSamples[o.velSamples.length-1].t-f.t;if(g<5)return{vx:0,vy:0};let a=0,_=0;for(let h of o.velSamples)a+=h.dx,_+=h.dy;let d=16.67;return{vx:a/g*d,vy:_/g*d}}o.cancelMomentum=function(){o.momentumRaf&&(cancelAnimationFrame(o.momentumRaf),o.momentumRaf=null),o.velSamples=[]},o.startMomentum=function(f){let{vx:p,vy:g}=n();if(o.velSamples=[],Math.abs(p)<e&&Math.abs(g)<e)return;o.momentumVx=p,o.momentumVy=g,o.momentumZone=f;function a(){if(o.momentumVx*=w,o.momentumVy*=w,Math.abs(o.momentumVx)<e&&Math.abs(o.momentumVy)<e){o.momentumRaf=null;return}if(o.momentumZone===2)r.pan_x(o.momentumVx);else if(o.momentumZone===3)r.pan_y(o.momentumVy);else if(o.momentumZone===14){o.momentumRaf=null;return}else D(o.momentumZone)?r.pan_indicator_y(x(o.momentumZone),o.momentumVy):it(r,o.momentumZone,o.momentumVx,o.momentumVy);s.onDirty(),o.momentumRaf=requestAnimationFrame(a)}o.momentumRaf=requestAnimationFrame(a)};let u={setMode(f,p){f?(o.drawingMode={tool:f,style:p,step:0,x1:0,y1:0},t.style.cursor="crosshair"):(o.drawingMode?.pathStarted&&r.finish_path(),o.drawingMode=null,r.clear_drawing_preview(),t.style.cursor="crosshair"),s.onDirty()},getMode(){return o.drawingMode}};s.drawingApi?.(u),o.finishDrawing=function(){r.clear_drawing_preview(),s.onDrawingComplete?.(),o.drawingMode=null,t.style.cursor="crosshair"},_e(t,r,s,o),ce(t,r,s,o);let l=f=>{let p=document.activeElement?.tagName,g=p==="INPUT"||p==="TEXTAREA"||document.activeElement?.isContentEditable;if((f.key==="Delete"||f.key==="Backspace")&&!o.drawingMode&&!g){let _=r.get_selected_drawing();if(_>0){r.remove_drawing(_),s.onDrawingSelected?.(0),s.onDirty();return}let d=r.get_selected_marker();if(d>0){r.remove_marker(d),s.onMarkerSelected?.(0),s.onDirty();return}}if(f.key==="Escape"&&!o.drawingMode){if(r.get_selected_drawing()>0){r.deselect_drawing(),s.onDrawingSelected?.(0),s.onDirty();return}if(r.get_selected_marker()>0){r.deselect_marker(),s.onMarkerSelected?.(0),s.onDirty();return}}if(f.key==="Escape"&&o.drawingMode){if(o.drawingMode.pathStarted){o.drawingMode.tool==="elliott"?r.finish_elliott_manual():r.finish_path(),o.finishDrawing(),s.onDirty();return}r.clear_drawing_preview(),o.drawingMode=null,t.style.cursor="crosshair",s.onDrawingCancel?.(),s.onDirty();return}let a=20;switch(f.key){case"+":case"=":r.zoom(t.width/2,t.height/2,.9);break;case"-":r.zoom(t.width/2,t.height/2,1.1);break;case"ArrowLeft":r.pan_x(a);break;case"ArrowRight":r.pan_x(-a);break;case"ArrowUp":r.pan_y(-a);break;case"ArrowDown":r.pan_y(a);break;case"r":case"R":r.auto_scale_y();for(let _=1;_<=5;_++)r.reset_indicator_y_auto(_);break;default:return}s.onDirty()};return window.addEventListener("keydown",l),()=>{o.disposed=!0,o.cancelMomentum(),window.removeEventListener("keydown",l)}}function he(t,r,s,o){let w=e=>o()(e);return{enableRsi(){t.enable_rsi(),r()},disableRsi(){t.disable_rsi(),r()},setRsiPeriod(e){t.set_rsi_period(e),r()},isRsiEnabled(){return t.is_rsi_enabled()},setRsiShowEma(e){t.set_rsi_show_ema(e),r()},setRsiShowWma(e){t.set_rsi_show_wma(e),r()},setRsiShowSignals(e){t.set_rsi_show_signals(e),r()},setRsiShowDivergence(e){t.set_rsi_show_divergence(e),r()},setRsiShowTraps(e){t.set_rsi_show_traps(e),r()},setRsiShowLevels(e){t.set_rsi_show_levels(e),r()},setRsiSmoothing(e){t.set_rsi_smoothing(e),r()},setRsiRatio(e){t.set_rsi_ratio(e),r()},getRsiRatio(){return t.get_rsi_ratio()},enableForexSignals(){w("forexSignals")&&(t.enable_forex_signals(),r())},disableForexSignals(){t.disable_forex_signals(),r()},isForexSignalsEnabled(){return t.is_forex_signals_enabled()},setForexSignalsSetup(e){t.set_forex_signals_setup(e),r()},setForexSignalsMode(e){t.set_forex_signals_mode(e),r()},setForexSignalsShowStats(e){t.set_forex_signals_show_stats(e),r()},getForexSignalsCount(){return t.get_forex_signals_count()},enableOi(){s()||w("oi")&&(t.enable_oi(),r())},disableOi(){s()||(t.disable_oi(),r())},isOiEnabled(){if(s())return!1;try{return t.is_oi_enabled()}catch{return!1}},setOiData(e){s()||(t.set_oi_data(e),r())},setOiDataTs(e,i){s()||(t.set_oi_data_ts(e,i),r())},setOiShowOnChart(e){s()||(t.set_oi_show_on_chart(e),r())},setOiDisplayMode(e){s()||(t.set_oi_display_mode(e),r())},setOiRatio(e){s()||(t.set_oi_ratio(e),r())},getOiRatio(){if(s())return .2;try{return t.get_oi_ratio()}catch{return .2}},enableFundingRate(){s()||w("fundingRate")&&(t.enable_funding_rate(),r())},disableFundingRate(){s()||(t.disable_funding_rate(),r())},isFundingRateEnabled(){if(s())return!1;try{return t.is_funding_rate_enabled()}catch{return!1}},setFrBinanceData(e,i){s()||(t.set_fr_binance_data(e,i),r())},setFrAggData(e,i){s()||(t.set_fr_agg_data(e,i),r())},setFrShowAgg(e){s()||(t.set_fr_show_agg(e),r())},setFrShowSma(e){s()||(t.set_fr_show_sma(e),r())},enableCvd(){s()||w("cvd")&&(t.enable_cvd(),r())},disableCvd(){s()||(t.disable_cvd(),r())},isCvdEnabled(){if(s())return!1;try{return t.is_cvd_enabled()}catch{return!1}},setCvdData(e,i){s()||(t.set_cvd_data(e,i),r())},setCvdSpotData(e,i){s()||(t.set_cvd_spot_data(e,i),r())},setCvdSource(e){s()||(t.set_cvd_source(e),r())},getCvdSource(){if(s())return 0;try{return t.get_cvd_source()}catch{return 0}},setCvdMode(e){s()||(t.set_cvd_mode(e),r())},getCvdMode(){if(s())return 0;try{return t.get_cvd_mode()}catch{return 0}},setCvdShowDelta(e){s()||(t.set_cvd_show_delta(e),r())},getCvdShowDelta(){if(s())return!0;try{return t.get_cvd_show_delta()}catch{return!0}},setCvdShowSignals(e){s()||(t.set_cvd_show_signals(e),r())},getCvdShowSignals(){if(s())return!0;try{return t.get_cvd_show_signals()}catch{return!0}},setCvdShowDivergence(e){s()||(t.set_cvd_show_divergence(e),r())},getCvdShowDivergence(){if(s())return!1;try{return t.get_cvd_show_divergence()}catch{return!1}},enableLargeTrades(){s()||w("largeTrades")&&(t.enable_large_trades(),r())},disableLargeTrades(){s()||(t.disable_large_trades(),r())},isLargeTradesEnabled(){if(s())return!1;try{return t.is_large_trades_enabled()}catch{return!1}},setLargeTradesData(e){s()||(t.set_large_trades_data(e),r())},pushLargeTrade(e,i,n,u){s()||(t.push_large_trade(e,i,n,u),r())},clearLargeTrades(){s()||(t.clear_large_trades(),r())},setLtVolumeFilter(e,i){s()||(t.set_lt_volume_filter(e,i),r())},setLtBubbleScale(e){s()||(t.set_lt_bubble_scale(e),r())},getLtDataMinVol(){return s()?0:t.get_lt_data_min_vol()},getLtDataMaxVol(){return s()?0:t.get_lt_data_max_vol()},ltHitTest(e,i){if(s())return"";try{return t.lt_hit_test(e,i)}catch{return""}},enableVrvp(){s()||w("vrvp")&&(t.enable_vrvp(),r())},disableVrvp(){s()||(t.disable_vrvp(),r())},isVrvpEnabled(){if(s())return!1;try{return t.is_vrvp_enabled()}catch{return!1}},setVrvpPocLine(e){s()||(t.set_vrvp_poc_line(e),r())},vrvpHitTest(e,i){if(s())return"";try{return t.vrvp_hit_test(e,i)}catch{return""}},enableTpo(){s()||w("tpo")&&(t.enable_tpo(),r())},disableTpo(){s()||(t.disable_tpo(),r())},isTpoEnabled(){if(s())return!1;try{return t.is_tpo_enabled()}catch{return!1}},setTpoPocLine(e){s()||(t.set_tpo_poc_line(e),r())},setTpoVaLines(e){s()||(t.set_tpo_va_lines(e),r())},setTpoIb(e){s()||(t.set_tpo_ib(e),r())},setTpoSinglePrints(e){s()||(t.set_tpo_single_prints(e),r())},setTpoPeriod(e){s()||(t.set_tpo_period(e),r())},getTpoPeriod(){if(s())return 1440;try{return t.get_tpo_period()}catch{return 1440}},setTpoNakedPoc(e){s()||(t.set_tpo_naked_poc(e),r())},setTpoProfileShape(e){s()||(t.set_tpo_profile_shape(e),r())},setTpoIbMinutes(e){s()||(t.set_tpo_ib_minutes(e),r())},setTpoLetterMinutes(e){s()||(t.set_tpo_letter_minutes(e),r())},setTpoSignals(e){s()||(t.set_tpo_signals(e),r())},isTpoSignals(){if(s())return!1;try{return t.is_tpo_signals()}catch{return!1}},enableLiqHeatmap(){s()||w("liqHeatmap")&&(t.enable_liq_heatmap(),r())},disableLiqHeatmap(){s()||(t.disable_liq_heatmap(),r())},isLiqHeatmapEnabled(){if(s())return!1;try{return t.is_liq_heatmap_enabled()}catch{return!1}},setLiqHeatmapRange(e,i){s()||(t.set_liq_heatmap_range(e,i),r())},getLiqHeatmapMin(){if(s())return 0;try{return t.get_liq_heatmap_min()}catch{return 0}},getLiqHeatmapMax(){if(s())return 1;try{return t.get_liq_heatmap_max()}catch{return 1}},getLiqHeatmapSegMax(){if(s())return 0;try{return t.get_liq_heatmap_seg_max()}catch{return 0}},setLiqHeatmapProfile(e){s()||(t.set_liq_heatmap_profile(e),r())},isLiqHeatmapProfile(){if(s())return!0;try{return t.is_liq_heatmap_profile()}catch{return!0}},setLiqHeatmapCellHeight(e){s()||(t.set_liq_heatmap_cell_height(e),r())},getLiqHeatmapCellHeight(){if(s())return 1;try{return t.get_liq_heatmap_cell_height()}catch{return 1}},setLiqHeatmapPredictions(e){s()||(t.set_liq_heatmap_predictions(e),r())},setLiqHeatmapFilledPct(e){s()||(t.set_liq_heatmap_filled_pct(e),r())},getLiqHeatmapFilledPct(){if(s())return .85;try{return t.get_liq_heatmap_filled_pct()}catch{return .85}},liqHeatmapHitTest(e,i){if(s())return"";try{return t.liq_heatmap_hit_test(e,i)}catch{return""}},liqZoneHitTest(e,i){if(s())return"";try{return t.liq_zone_hit_test(e,i)}catch{return""}},enableSmartRanges(){s()||w("smartRanges")&&(t.enable_smart_ranges(),r())},disableSmartRanges(){s()||(t.disable_smart_ranges(),r())},isSmartRangesEnabled(){if(s())return!1;try{return t.is_smart_ranges_enabled()}catch{return!1}},setSrTextSize(e){s()||(t.set_sr_text_size(e),r())},setSrShowOb(e){s()||(t.set_sr_show_ob(e),r())},setSrObLast(e){s()||(t.set_sr_ob_last(e),r())},setSrShowObActivity(e){s()||(t.set_sr_show_ob_activity(e),r())},setSrShowBreakers(e){s()||(t.set_sr_show_breakers(e),r())},setSrMitigation(e){s()||(t.set_sr_mitigation(e),r())},setSrShowMetrics(e){s()||(t.set_sr_show_metrics(e),r())},setSrShowHtfOb(e){s()||(t.set_sr_show_htf_ob(e),r())},setSrHtfMinutes(e){s()||(t.set_sr_htf_minutes(e),r())},setSrShowFvg(e){s()||(t.set_sr_show_fvg(e),r())},setSrFvgTheme(e){s()||(t.set_sr_fvg_theme(e),r())},setSrFvgMitigation(e){s()||(t.set_sr_fvg_mitigation(e),r())},setSrFvgHtf(e){s()||(t.set_sr_fvg_htf(e),r())},setSrFvgExtend(e){s()||(t.set_sr_fvg_extend(e),r())},setSrShowObSignals(e){s()||(t.set_sr_show_ob_signals(e),r())},setSrShowPredict(e){s()||(t.set_sr_show_predict(e),r())},setSrShowFvgSignals(e){s()||(t.set_sr_show_fvg_signals(e),r())},setSrShowSmartRev(e){s()||(t.set_sr_show_smart_rev(e),r())},setSrSmartRevHtf(e){s()||(t.set_sr_smart_rev_htf(e),r())},setSrStatsType(e){s()||(t.set_sr_stats_type(e),r())},setSrStatsPosition(e){s()||(t.set_sr_stats_position(e),r())},getSrSignalsCount(){if(s())return 0;try{return t.get_sr_signals_count()}catch{return 0}},enableEmaStructure(){s()||w("emaStructure")&&(t.enable_ema_structure(),r())},disableEmaStructure(){s()||(t.disable_ema_structure(),r())},isEmaStructureEnabled(){if(s())return!1;try{return t.is_ema_structure_enabled()}catch{return!1}},setEsEma1Len(e){s()||(t.set_es_ema1_len(e),r())},setEsEma2Len(e){s()||(t.set_es_ema2_len(e),r())},setEsWmaLen(e){s()||(t.set_es_wma_len(e),r())},setEsShowEma1(e){s()||(t.set_es_show_ema1(e),r())},setEsShowEma2(e){s()||(t.set_es_show_ema2(e),r())},setEsShowWma(e){s()||(t.set_es_show_wma(e),r())},setEsSwingLen(e){s()||(t.set_es_swing_len(e),r())},setEsShowBos(e){s()||(t.set_es_show_bos(e),r())},enableLiveSignals(){s()||(t.enable_live_signals(),r())},disableLiveSignals(){s()||(t.disable_live_signals(),r())},isLiveSignalsEnabled(){if(s())return!1;try{return t.is_live_signals_enabled()}catch{return!1}},setLiveSignalsData(e){s()||(t.set_live_signals_data(new Float64Array(e)),r())},clearLiveSignals(){s()||(t.clear_live_signals(),r())},setLiveSignalsLeverage(e){s()||(t.set_live_signals_leverage(e),r())},getLiveSignalsLeverage(){if(s())return 10;try{return t.get_live_signals_leverage()}catch{return 10}},setLiveSignalsTrial(e){s()||(t.set_live_signals_trial(e),r())},setLiveSignalsShowEntry(e){s()||(t.set_live_signals_show_entry(e),r())},setLiveSignalsShowTpSl(e){s()||(t.set_live_signals_show_tp_sl(e),r())},setLiveSignalsShowMaxProfit(e){s()||(t.set_live_signals_show_max_profit(e),r())},setLiveSignalsShowLabels(e){s()||(t.set_live_signals_show_labels(e),r())},setLiveSignalsShowZones(e){s()||(t.set_live_signals_show_zones(e),r())},setLiveSignalsTextSize(e){s()||(t.set_live_signals_text_size(e),r())},setLiveSignalsPipValue(e){s()||(t.set_live_signals_pip_value(e),r())},setLiveSignalsLoading(e){s()||(t.set_live_signals_loading(e),r())},getLiveSignalsCount(){if(s())return 0;try{return t.get_live_signals_count()}catch{return 0}},enableVpin(){s()||w("vpin")&&(t.enable_vpin(),r())},disableVpin(){s()||(t.disable_vpin(),r())},isVpinEnabled(){if(s())return!1;try{return t.is_vpin_enabled()}catch{return!1}},setVpinData(e,i){s()||(t.set_vpin_data(e,i),r())},setVpinBucketSize(e){s()||(t.set_vpin_bucket_size(e),r())},getVpinBucketSize(){if(s())return 50;try{return t.get_vpin_bucket_size()}catch{return 50}},setVpinNumBuckets(e){s()||(t.set_vpin_num_buckets(e),r())},getVpinNumBuckets(){if(s())return 50;try{return t.get_vpin_num_buckets()}catch{return 50}},setVpinThreshold(e){s()||(t.set_vpin_threshold(e),r())},getVpinThreshold(){if(s())return .7;try{return t.get_vpin_threshold()}catch{return .7}},setVpinShowSma(e){s()||(t.set_vpin_show_sma(e),r())},setVpinShowZones(e){s()||(t.set_vpin_show_zones(e),r())},enableStopIceberg(){s()||w("stopIceberg")&&(t.enable_stop_iceberg(),r())},disableStopIceberg(){s()||(t.disable_stop_iceberg(),r())},isStopIcebergEnabled(){if(s())return!1;try{return t.is_stop_iceberg_enabled()}catch{return!1}},setSiShowStops(e){s()||(t.set_si_show_stops(e),r())},setSiShowIcebergs(e){s()||(t.set_si_show_icebergs(e),r())},setSiShowZones(e){s()||(t.set_si_show_zones(e),r())},setIcebergEvents(e,i,n,u,l,f){s()||(t.set_iceberg_events(e,i,n,u,l,f),r())},getStopRunCount(){if(s())return 0;try{return t.get_stop_run_count()}catch{return 0}},getIcebergCount(){if(s())return 0;try{return t.get_iceberg_count()}catch{return 0}},enableVolume(){t.enable_volume(),r()},disableVolume(){t.disable_volume(),r()},isVolumeEnabled(){return t.is_volume_enabled()},setVolumeMaPeriod(e){t.set_volume_ma_period(e),r()},setVolumeShowMa(e){t.set_volume_show_ma(e),r()},setVolumeShowSignals(e){t.set_volume_show_signals(e),r()},setVolumeColorMode(e){t.set_volume_color_mode(e),r()},getVolumeMaPeriod(){return t.get_volume_ma_period()},getVolumeShowMa(){return t.get_volume_show_ma()},getVolumeShowSignals(){return t.get_volume_show_signals()},getVolumeColorMode(){return t.get_volume_color_mode()},enableObSignals(){t.enable_ob_signals(),r()},disableObSignals(){t.disable_ob_signals(),r()},isObSignalsEnabled(){return t.is_ob_signals_enabled()},setObsShowWalls(e){t.set_obs_show_walls(e),r()},setObsShowGaps(e){t.set_obs_show_gaps(e),r()},setObsShowAlerts(e){t.set_obs_show_alerts(e),r()},setObsShowCom(e){t.set_obs_show_com(e),r()},setObsWalls(e,i){t.set_obs_walls(new Float64Array(e),new Float64Array(i)),r()},setObsGaps(e,i){t.set_obs_gaps(new Float64Array(e),new Float64Array(i)),r()},pushObsAlert(e,i,n,u,l){t.push_obs_alert(e,i,n,u,l),r()},setObsCom(e){t.set_obs_com(e),r()},clearObSignals(){t.clear_ob_signals(),r()},enableObFlow(){t.enable_ob_flow(),r()},disableObFlow(){t.disable_ob_flow(),r()},isObFlowEnabled(){return t.is_ob_flow_enabled()},setObfShowObi(e){t.set_obf_show_obi(e),r()},setObfShowNetFlow(e){t.set_obf_show_net_flow(e),r()},setObfShowCumDelta(e){t.set_obf_show_cum_delta(e),r()},pushObfSample(e,i,n,u){t.push_obf_sample(e,i,n,u),r()},setObfData(e){t.set_obf_data(new Float64Array(e)),r()},clearObFlow(){t.clear_ob_flow(),r()},setObfRatio(e){t.set_obf_ratio(e),r()},getObfRatio(){return t.get_obf_ratio()},enableObMicro(){t.enable_ob_micro(),r()},disableObMicro(){t.disable_ob_micro(),r()},isObMicroEnabled(){return t.is_ob_micro_enabled()},setObmData(e,i,n,u,l,f,p,g,a,_,d,h,c){t.set_obm_data(e,i,n,u,l,f,p,g,a,_,d,h,c),r()},setObmAnchorTopRight(e){t.set_obm_anchor_top_right(e),r()},clearObMicro(){t.clear_ob_micro(),r()}}}function pe(t,r,s,o){let w=i=>o()(i),e=(i,n,u)=>i<=1&&n<=1&&u<=1&&(i>0||n>0||u>0)?[Math.round(i*255),Math.round(n*255),Math.round(u*255)]:[i&255,n&255,u&255];return{addMarker(i,n,u){t.add_marker(i,n,u),r()},clearMarkers(){t.clear_markers(),r()},hitTestMarker(i,n){return t.hit_test_marker(i,n)},selectMarker(i){t.select_marker(i),r()},deselectMarker(){t.deselect_marker(),r()},getSelectedMarker(){return t.get_selected_marker()},removeMarker(i){t.remove_marker(i),r()},deleteSelectedMarker(){let i=t.get_selected_marker();return i>0&&(t.remove_marker(i),r()),i},addTrendline(i,n,u,l,f,p,g,a,_,d=0){let[h,c,M]=e(f,p,g),m=t.add_trendline(i,n,u,l,h,c,M,a,_,d);return r(),m},addHorizontalLine(i,n,u,l,f,p,g,a=0){let[_,d,h]=e(u,l,f),c=t.add_horizontal_line(i,n,_,d,h,p,g,a);return r(),c},addArrow(i,n,u,l,f,p,g,a,_,d=0){let[h,c,M]=e(f,p,g),m=t.add_arrow(i,n,u,l,h,c,M,a,_,d);return r(),m},addFibRetracement(i,n,u,l,f,p,g,a,_,d=0){if(!w("drawingFull"))return 0;let[h,c,M]=e(f,p,g),m=t.add_fib_retracement(i,n,u,l,h,c,M,a,_,d);return r(),m},addFibExtension(i,n,u,l,f,p,g,a,_,d,h,c=0){if(!w("drawingFull"))return 0;let[M,m,I]=e(g,a,_),L=t.add_fib_extension(i,n,u,l,f,p,M,m,I,d,h,c);return r(),L},addLongPosition(i,n,u,l,f,p,g,a,_,d=0){if(!w("drawingFull"))return 0;let[h,c,M]=e(f,p,g),m=t.add_long_position(i,n,u,l,h,c,M,a,_,d);return r(),m},addShortPosition(i,n,u,l,f,p,g,a,_,d=0){if(!w("drawingFull"))return 0;let[h,c,M]=e(f,p,g),m=t.add_short_position(i,n,u,l,h,c,M,a,_,d);return r(),m},addAnchoredVwap(i,n,u,l,f,p,g=0){if(!w("drawingFull"))return 0;let[a,_,d]=e(n,u,l),h=t.add_anchored_vwap(i,a,_,d,f,p,g);return r(),h},addPriceLabel(i,n,u,l,f,p,g=0){let[a,_,d]=e(u,l,f),h=t.add_price_label(i,n,a,_,d,p,g);return r(),h},addTextNote(i,n,u,l,f,p,g=0){let[a,_,d]=e(u,l,f),h=t.add_text_note(i,n,a,_,d,p,g);return r(),h},addElliottImpulse(i,n,u,l,f,p,g=0){if(!w("drawingFull"))return 0;let[a,_,d]=e(u,l,f),h=t.add_elliott_impulse(i,n,a,_,d,p,g);return r(),h},setDrawingFontSize(i,n){t.set_drawing_font_size(i,n),r()},getDrawingFontSize(i){return t.get_drawing_font_size(i)},setDrawingText(i,n){t.set_drawing_text(i,n),r()},getDrawingText(i){return t.get_drawing_text(i)},setDrawingStyle(i,n,u,l,f){let[p,g,a]=e(n,u,l);t.set_drawing_style(i,p,g,a,f),r()},getDrawingColor(i){let n=t.get_drawing_color(i);return n?{r:n>>>24&255,g:n>>>16&255,b:n>>>8&255,lineWidth:(n&255)/10}:null},getDrawingDashed(i){try{return t.get_drawing_dashed(i)}catch{return!1}},setDrawingDashed(i,n){t.set_drawing_dashed(i,n),r()},getDrawingHideLabel(i){try{return t.get_drawing_hide_label(i)}catch{return!1}},setDrawingHideLabel(i,n){t.set_drawing_hide_label(i,n),r()},getDrawingKindId(i){try{return t.get_drawing_kind_id(i)}catch{return 255}},removeDrawing(i){t.remove_drawing(i),r()},clearDrawings(){t.clear_drawings(),r()},drawingCount(){return t.drawing_count()},setDrawingPreview(i,n,u,l,f,p,g,a,_,d,h=0){let[c,M,m]=e(p,g,a);t.set_drawing_preview(i,n,u,l,f,c,M,m,_,d,h),r()},clearDrawingPreview(){t.clear_drawing_preview(),r()},cancelBrush(){t.cancel_brush(),r()},selectDrawing(i){t.select_drawing(i),r()},deselectDrawing(){t.deselect_drawing(),r()},getSelectedDrawing(){return t.get_selected_drawing()},deleteSelectedDrawing(){let i=t.get_selected_drawing();return i>0&&(t.remove_drawing(i),r()),i},exportDrawingsJson(){try{return t.export_drawings_json()}catch{return"[]"}},importDrawingsJson(i){try{t.import_drawings_json(i),r()}catch(n){console.warn("[bridge] importDrawingsJson failed",n)}},screenToWorld(i,n){return{x:t.screen_to_world_x(i),y:t.screen_to_world_y(n)}},worldToScreen(i,n){try{return{x:t.world_to_screen_x(i),y:t.world_to_screen_y(n)}}catch{return null}}}}var j=t=>t instanceof Float64Array?t:new Float64Array(t);function we(t,r,s,o){let w=e=>o()(e);return{setKlines(e,i,n,u,l,f){t.set_klines(j(e),j(i),j(n),j(u),j(l),j(f)),r()},setRealTimestamps(e){t.set_real_timestamps(j(e)),r()},appendRealTimestamp(e){t.append_real_timestamp(e)},prependKlines(e,i,n,u,l,f){t.prepend_klines(j(e),j(i),j(n),j(u),j(l),j(f)),r()},appendKline(e,i,n,u,l,f){t.append_kline(e,i,n,u,l,f),r()},updateLastKline(e,i,n,u,l,f){t.update_last_kline(e,i,n,u,l,f),r()},popLastKline(){let e=t.pop_last_kline();return e&&r(),e},getLastClose(){try{return t.get_last_close()}catch{return 0}},getKlineCount(){if(s())return 0;try{return t.kline_count()}catch{return 0}},getKlineTimestamps(){if(s())return null;try{return t.kline_timestamps()}catch{return null}},getKlineOpens(){if(s())return null;try{return t.kline_opens()}catch{return null}},getKlineHighs(){if(s())return null;try{return t.kline_highs()}catch{return null}},getKlineLows(){if(s())return null;try{return t.kline_lows()}catch{return null}},getKlineCloses(){if(s())return null;try{return t.kline_closes()}catch{return null}},getKlineVolumes(){if(s())return null;try{return t.kline_volumes()}catch{return null}},setHeatmap(e,i,n,u,l,f,p){w("heatmap")&&(t.set_heatmap(j(e),i,n,u,l,f,p),r())},appendHeatmapColumn(e,i,n,u){w("heatmap")&&(t.append_heatmap_column(j(e),i,n,u),r())},updateLastHeatmapColumn(e,i,n){t.update_last_heatmap_column(j(e),i,n),r()},getHeatmapLastTimestamp(){try{return t.get_heatmap_last_timestamp()}catch{return 0}},getHeatmapXStep(){try{return t.get_heatmap_x_step()}catch{return 0}},updateHeatmapColumnAt(e,i,n,u){t.update_heatmap_column_at(j(e),i,n,u),r()},setHeatmapRange(e,i){t.set_heatmap_range(e,i),r()},getHeatmapDataRange(){try{return{min:t.get_heatmap_data_min(),max:t.get_heatmap_data_max()}}catch{return{min:0,max:0}}},setHeatmapPrefetchRange(e){try{t.set_heatmap_prefetch_range(e)}catch{}},clearHeatmapPrefetchRange(){try{t.clear_heatmap_prefetch_range()}catch{}},getHeatmapPrefetchMax(){try{return t.get_heatmap_prefetch_max()}catch{return 0}},setHeatmapColorScheme(e){try{t.set_heatmap_color_scheme(e),r()}catch{}},setChartType(e){s()||e===2&&!w("footprint")||(t.set_chart_type(e),r())},getChartType(){if(s())return 0;try{return t.get_chart_type()}catch{return 0}},setFootprintTickSize(e){s()||w("footprint")&&(t.set_footprint_tick_size(e),r())},footprintEnsureLen(e){s()||t.footprint_ensure_len(e)},footprintAddTrade(e,i,n,u){s()||t.footprint_add_trade(e,i,n,u)},footprintAddTradeBatch(e){s()||!e||e.length===0||t.footprint_add_trade_batch(j(e))},footprintSetBar(e,i,n,u,l){s()||(t.footprint_set_bar(e,i,n,u,l),r())},footprintClear(){s()||(t.footprint_clear(),r())},footprintClearBar(e){s()||t.footprint_clear_bar(e)},footprintPrependEmpty(e){s()||t.footprint_prepend_empty(e)},footprintSetShowSignals(e){s()||(t.footprint_set_show_signals(e),r())},footprintGetShowSignals(){if(s())return!0;try{return t.footprint_get_show_signals()}catch{return!0}},footprintSignalCount(){if(s())return 0;try{return t.footprint_signal_count()}catch{return 0}},footprintSetShowProfile(e){s()||(t.footprint_set_show_profile(e),r())},footprintGetShowProfile(){if(s())return!1;try{return t.footprint_get_show_profile()}catch{return!1}},footprintProfileHitTest(e,i){if(s())return"";try{return t.footprint_profile_hit_test(e,i)}catch{return""}},footprintSetDisplayMode(e){s()||(t.footprint_set_display_mode(e),r())},footprintGetDisplayMode(){if(s())return 0;try{return t.footprint_get_display_mode()}catch{return 0}},enableDeltaHistogram(){s()||t.enable_delta_histogram()},disableDeltaHistogram(){s()||t.disable_delta_histogram()},deltaHistogramEnabled(){if(s())return!1;try{return t.delta_histogram_enabled()}catch{return!1}}}}var Ue=1;function B(t){if(typeof t!="string")return{r:255,g:255,b:255,a:153};if(t.startsWith("#")){let s=t.slice(1);if(s.length===8)return{r:parseInt(s.slice(0,2),16),g:parseInt(s.slice(2,4),16),b:parseInt(s.slice(4,6),16),a:parseInt(s.slice(6,8),16)};let o=parseInt(s.slice(0,2),16),w=parseInt(s.slice(2,4),16),e=parseInt(s.slice(4,6),16);return{r:o,g:w,b:e,a:255}}let r=t.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+))?\)/);return r?{r:+r[1],g:+r[2],b:+r[3],a:r[4]!==void 0?Math.round(+r[4]*255):255}:{r:255,g:255,b:255,a:153}}function Wt(t,r,s){let o=new Map,w=null,e=0,i=NaN;function n(){let a;try{a=t.kline_count()}catch{return w}if(a===0)return null;let _=t.kline_closes(),d=_?.[a-1]??NaN;if(w&&!(a!==e||d!==i))return w;try{let c=t.kline_timestamps(),M=t.kline_opens(),m=t.kline_highs(),I=t.kline_lows(),L=t.kline_volumes();if(!c||!_)return w;w={timestamps:Array.from(c),open:Array.from(M),high:Array.from(m),low:Array.from(I),close:Array.from(_),volume:Array.from(L),length:a},e=a,i=d;for(let P of o.values())P._needsCompute=!0}catch{}return w}function u(){return{seriesLine(a,_="#ffffff99",d=1.5){let h=B(_);t.custom_series_line(new Float64Array(a),h.r,h.g,h.b,h.a,d)},seriesDashedLine(a,_="#ffffff66",d=1,h=4,c=4){let M=B(_);t.custom_series_dashed_line(new Float64Array(a),M.r,M.g,M.b,M.a,d,h,c)},band(a,_,d="rgba(100,149,237,0.08)"){let h=B(d);t.custom_band(new Float64Array(a),new Float64Array(_),h.r,h.g,h.b,h.a)},hline(a,_="#ffffff66",d=1){let h=B(_);t.custom_hline(a,h.r,h.g,h.b,h.a,d)},dashedHline(a,_="#ffffff66",d=1,h=6,c=4){let M=B(_);t.custom_dashed_hline(a,M.r,M.g,M.b,M.a,d,h,c)},marker(a,_,d="#e8a04a",h=3){let c=B(d);t.custom_marker(a,_,c.r,c.g,c.b,c.a,h)},markerUp(a,_,d="#26a69a",h=5){let c=B(d);t.custom_marker_up(a,_,c.r,c.g,c.b,c.a,h)},markerDown(a,_,d="#ef5350",h=5){let c=B(d);t.custom_marker_down(a,_,c.r,c.g,c.b,c.a,h)},text(a,_,d,h="#ffffffaa",c=10,M="center"){let m=B(h),I=M==="center"?1:M==="right"?2:0;t.custom_text(a,_,d,m.r,m.g,m.b,m.a,c,I)},priceLabel(a,_,d="#ffffffaa",h=10){let c=B(d);t.custom_price_label(a,_,c.r,c.g,c.b,c.a,h)},linePx(a,_,d,h,c,M=1){let m=B(c);t.custom_line_px(a,_,d,h,m.r,m.g,m.b,m.a,M)},fillRectPx(a,_,d,h,c){let M=B(c);t.custom_fill_rect_px(a,_,d,h,M.r,M.g,M.b,M.a)},strokeRectPx(a,_,d,h,c,M=1){let m=B(c);t.custom_stroke_rect_px(a,_,d,h,m.r,m.g,m.b,m.a,M)},textPx(a,_,d,h,c=10,M="left"){let m=B(h),I=M==="center"?1:M==="right"?2:0;t.custom_text_px(a,_,d,m.r,m.g,m.b,m.a,c,I)},worldToScreenX:a=>t.world_to_screen_x(a),worldToScreenY:a=>t.world_to_screen_y(a),screenToWorldX:a=>t.screen_to_world_x(a),screenToWorldY:a=>t.screen_to_world_y(a),chartArea:()=>({x:t.chart_area_x(),y:t.chart_area_y(),w:t.chart_area_w(),h:t.chart_area_h()})}}function l(a){if(!a.compute)return;let _=n();if(_)try{a._computed=a.compute(_,a.params)||{}}catch(d){console.warn(`[CustomIndicator "${a.name}"] compute error:`,d),a._computed={}}}let f=Object.freeze({length:0,timestamps:[],open:[],high:[],low:[],close:[],volume:[]});function p(a){if(o.size===0)return;let _=n(),d=!1;for(let m of o.values())if(m.enabled&&!(m.compute&&!_)){d=!0;break}if(!d)return;t.custom_begin();let h=u(),c=_||f;for(let m of o.values())if(m.enabled&&!(m.compute&&!_)){m._needsCompute&&(l(m),m._needsCompute=!1);try{m.render.call(m,h,m._computed||{},c)}catch(I){console.warn(`[CustomIndicator "${m.name}"] render error:`,I)}}if(t.custom_end(),t.custom_command_count()>0){let m=t.get_custom_buffer_ptr(),I=t.get_custom_buffer_len();s(a,r,m,I)}}function g(){w=null,e=0,i=NaN;for(let a of o.values())a._needsCompute=!0}return{add(a){let _=Ue++,d={id:_,name:a.name||`Custom ${_}`,params:{...a.params},compute:a.compute||null,render:a.render,enabled:!0,_computed:{},_needsCompute:!0};return o.set(_,d),_},remove(a){o.delete(a)},updateParams(a,_){let d=o.get(a);d&&(Object.assign(d.params,_),d._needsCompute=!0)},setEnabled(a,_){let d=o.get(a);d&&(d.enabled=_)},list(){return[...o.values()].map(a=>({id:a.id,name:a.name,params:{...a.params},enabled:a.enabled}))},invalidateCompute:g,renderAll:p}}var ge={trial:{candlestick:!0,volume:!0,rsi:!0,drawingBasic:!0,drawingFull:!0,heatmap:!0,footprint:!0,liqHeatmap:!0,oi:!0,fundingRate:!0,cvd:!0,largeTrades:!0,vrvp:!0,tpo:!0,smartRanges:!0,emaStructure:!0,customIndicators:!0,forexSignals:!0,vpin:!0,stopIceberg:!0},standard:{candlestick:!0,volume:!0,rsi:!0,drawingBasic:!0,drawingFull:!1,heatmap:!1,footprint:!1,liqHeatmap:!1,oi:!1,fundingRate:!1,cvd:!1,largeTrades:!1,vrvp:!1,tpo:!1,smartRanges:!1,emaStructure:!1,customIndicators:!1,forexSignals:!1,vpin:!1,stopIceberg:!1},professional:{candlestick:!0,volume:!0,rsi:!0,drawingBasic:!0,drawingFull:!0,heatmap:!0,footprint:!0,liqHeatmap:!0,oi:!0,fundingRate:!0,cvd:!0,largeTrades:!0,vrvp:!1,tpo:!1,smartRanges:!1,emaStructure:!1,customIndicators:!1,forexSignals:!1,vpin:!1,stopIceberg:!1},enterprise:{candlestick:!0,volume:!0,rsi:!0,drawingBasic:!0,drawingFull:!0,heatmap:!0,footprint:!0,liqHeatmap:!0,oi:!0,fundingRate:!0,cvd:!0,largeTrades:!0,vrvp:!0,tpo:!0,smartRanges:!0,emaStructure:!0,customIndicators:!0,forexSignals:!0,vpin:!0,stopIceberg:!0}},xe={rsi:"RSI",drawingBasic:"Basic Drawing Tools",heatmap:"Orderbook Heatmap",footprint:"Footprint Chart",liqHeatmap:"Liquidation Heatmap",oi:"Open Interest",fundingRate:"Funding Rate",cvd:"CVD",largeTrades:"Large Trades",vrvp:"VRVP",tpo:"TPO / Market Profile",smartRanges:"Smart Ranges",emaStructure:"EMA Structure",drawingFull:"All Drawing Tools",customIndicators:"Custom Indicators",forexSignals:"Forex Signals",vpin:"VPIN",stopIceberg:"Stops & Icebergs"},Qe={rsi:"Standard",drawingBasic:"Standard",heatmap:"Professional",footprint:"Professional",liqHeatmap:"Professional",oi:"Professional",fundingRate:"Professional",cvd:"Professional",largeTrades:"Professional",drawingFull:"Professional",vrvp:"Enterprise",tpo:"Enterprise",smartRanges:"Enterprise",emaStructure:"Enterprise",customIndicators:"Enterprise",forexSignals:"Enterprise",vpin:"Enterprise",stopIceberg:"Enterprise"};function gt(t){return ge[t]||ge.trial}function Ht(t){let r=gt(t),s=new Set;return function(w){if(r[w])return!0;if(!s.has(w)){s.add(w);let e=xe[w]||w,i=Qe[w]||"a higher";console.warn(`[MRD Chart Engine] "${e}" requires ${i} plan. Current plan: ${t}. Upgrade at https://mrd-chart.dev/pricing`)}return!1}}var $e=14,me="trial",Ct="free";var Bt=[95,95,109,114].map(t=>String.fromCharCode(t)).join(""),Je=1297237059;function Ie(t){let r=`${t}:${Je}:${(t^2043453)>>>0}`,s=2166136261;for(let o=0;o<r.length;o++)s^=r.charCodeAt(o),s=Math.imul(s,16777619);return(s>>>0).toString(36)}function Lt(t){return`${t}.${Ie(t)}`}function At(t){if(!t||typeof t!="string")return null;let r=t.lastIndexOf(".");if(r<1)return null;let s=parseInt(t.slice(0,r),10);return!s||s<1e9||s>2e9||t.slice(r+1)!==Ie(s)?null:s}var Ce=Bt+"e7x",Le=Bt+"p3q",Ae="mrd_engine_session_id",ve="mrd_ce_db",mt="meta",ye="trial_ts",Te=Bt+"ck";function Gt(){try{return At(localStorage.getItem(Ce))}catch{return null}}function qt(t){try{localStorage.setItem(Ce,Lt(t))}catch{}}function Kt(){try{return At(localStorage.getItem(Le))}catch{return null}}function Ut(t){try{localStorage.setItem(Le,Lt(t))}catch{}}function xt(){try{return At(sessionStorage.getItem(Ae))}catch{return null}}function Qt(t){try{sessionStorage.setItem(Ae,Lt(t))}catch{}}function $t(){try{let t=document.cookie.match(new RegExp(`(?:^|;\\s*)${Te}=([^;]+)`));return t?At(decodeURIComponent(t[1])):null}catch{return null}}function Jt(t){try{let r=encodeURIComponent(Lt(t));document.cookie=`${Te}=${r};path=/;max-age=${86400*400};SameSite=Lax`}catch{}}var Mt=null,Me=!1;function ke(){if(!(Me||typeof indexedDB>"u")){Me=!0;try{let t=indexedDB.open(ve,1);t.onupgradeneeded=()=>{let r=t.result;r.objectStoreNames.contains(mt)||r.createObjectStore(mt)},t.onsuccess=()=>{let o=t.result.transaction(mt,"readonly").objectStore(mt).get(ye);o.onsuccess=()=>{let w=At(o.result);w&&(!Mt||w<Mt)&&(Mt=w,tr(w))}}}catch{}}}function Ee(t){Mt=t;try{let r=indexedDB.open(ve,1);r.onsuccess=()=>{r.result.transaction(mt,"readwrite").objectStore(mt).put(Lt(t),ye)}}catch{}}function tr(t){let r=Math.floor(Date.now()/1e3),s=Ne([Gt(),Kt(),xt(),$t(),t],r);s&&s!==t||s&&(qt(s),Ut(s),Qt(s),Jt(s))}function Ne(t,r){let s=null;for(let o of t)o&&(o>r+60||o<17e8||(!s||o<s)&&(s=o));return s}function er(){let t=Math.floor(Date.now()/1e3),r=[Gt(),Kt(),xt(),$t(),Mt];return Ne(r,t)}function rr(t){qt(t),Ut(t),Qt(t),Jt(t),Ee(t)}function or(t){Gt()||qt(t),Kt()||Ut(t),xt()||Qt(t),$t()||Jt(t),Mt||Ee(t)}ke();function Rt(t){if(!t||t==="trial")return sr();try{let r=JSON.parse(atob(t)),{p:s,d:o,e:w,s:e}=r;if(!s||!e)return{valid:!1,error:"Invalid license key format"};let i={...r};if(delete i.s,e!==Re(i))return{valid:!1,error:"Invalid license key signature"};if(w>0&&Date.now()/1e3>w)return{valid:!0,plan:Ct,watermark:!0,trialExpired:!0,originalPlan:s,error:`License expired on ${new Date(w*1e3).toLocaleDateString()}`,features:gt(Ct)};let n=r.pl||"web";if((n==="web"||n==="any")&&o&&o!=="*"&&typeof window<"u"){let u=window.location.hostname;if(u&&u!=="localhost"&&u!=="127.0.0.1"&&u!=="0.0.0.0"&&u!==""&&!o.split(",").map(p=>p.trim()).some(p=>nr(p,u)))return{valid:!1,error:`License not valid for domain: ${u}`}}if(n==="mobile"&&r.a&&typeof window<"u"){let u=window.__mrd_app_id;if(u&&u!==r.a)return{valid:!1,error:`License not valid for app: ${u}`}}return{valid:!0,plan:s,domain:o,platform:n,appId:r.a||null,expiry:w,watermark:!1,features:gt(s)}}catch{return{valid:!1,error:"Invalid license key"}}}function Re(t){let r="mrd-ce-hmac-2024-x9k2m",s=JSON.stringify(t),o=r+":"+s,w=2166136261,e=1818371886,i=3735928559;for(let n=0;n<o.length;n++){let u=o.charCodeAt(n);w=Math.imul(w^u,16777619)>>>0,e=Math.imul(e^u,1540483477)>>>0,i=Math.imul(i^u,461845907)>>>0}return(w.toString(36)+e.toString(36)+i.toString(36)).slice(0,24)}function sr(){let t=er();t?or(t):(t=Math.floor(Date.now()/1e3),rr(t));let r=t+$e*86400,s=Date.now()/1e3,o=Math.max(0,Math.ceil((r-s)/86400));return s>r?{valid:!0,plan:Ct,watermark:!0,trialExpired:!0,daysLeft:0,features:gt(Ct)}:{valid:!0,plan:me,watermark:!1,daysLeft:o,trialEnd:r,features:gt(me)}}function nr(t,r){if(t==="*"||t===r)return!0;if(t.startsWith("*.")){let s=t.slice(1);return r.endsWith(s)||r===t.slice(2)}return!1}var ir="MRD-Indicators",Se="mrd-indicators.com",ar="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iMzAiIHZpZXdCb3g9IjAgMCAzMCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgPGRlZnM+CiAgICA8c3R5bGU+CiAgICAgIC5jbHMtMSB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQtNCk7CiAgICAgIH0KCiAgICAgIC5jbHMtMiB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQtMik7CiAgICAgIH0KCiAgICAgIC5jbHMtMiwgLmNscy0zLCAuY2xzLTQsIC5jbHMtNSwgLmNscy02IHsKICAgICAgICBtaXgtYmxlbmQtbW9kZTogbXVsdGlwbHk7CiAgICAgIH0KCiAgICAgIC5jbHMtMyB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQtMyk7CiAgICAgIH0KCiAgICAgIC5jbHMtNCB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQtNik7CiAgICAgIH0KCiAgICAgIC5jbHMtNSB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQtNSk7CiAgICAgIH0KCiAgICAgIC5jbHMtNiB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQtNyk7CiAgICAgIH0KCiAgICAgIC5jbHMtNyB7CiAgICAgICAgZmlsbDogdXJsKCNsaW5lYXItZ3JhZGllbnQpOwogICAgICB9CgogICAgICAuY2xzLTggewogICAgICAgIGlzb2xhdGlvbjogaXNvbGF0ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50IiB4MT0iOS4xMiIgeTE9IjE1Ljg4IiB4Mj0iMTkuNjMiIHkyPSI1LjM3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2IzNTA5ZSIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmNWE0YzciLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhci1ncmFkaWVudC0yIiB4MT0iOS4wOCIgeTE9IjYuODEiIHgyPSI5LjA4IiB5Mj0iMTQuNzMiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMjM0ZmIzIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2ZmZiIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50LTMiIHgxPSIxNy42NyIgeTE9IjYuMTEiIHgyPSI4LjQxIiB5Mj0iNi4xMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM1YTJhOGIiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZmZmIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXItZ3JhZGllbnQtNCIgeDE9IjIwLjAzIiB5MT0iMTUuODkiIHgyPSIxMC45OCIgeTI9IjE1Ljg5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2Y2YWFjYiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM3NzJhOGQiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhci1ncmFkaWVudC01IiB4MT0iMTkuMDMiIHkxPSIxNi44MiIgeDI9IjE0Ljc5IiB5Mj0iMTIuNTgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZmZmIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2VkMzQ4ZCIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50LTYiIHgxPSIxNS4yNyIgeTE9IjE1LjA2IiB4Mj0iMTUuMjciIHkyPSIxOS4zNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmYiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZWU0YzliIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXItZ3JhZGllbnQtNyIgeDE9IjUuNTEiIHkxPSItMTI4LjAyIiB4Mj0iLTMuNyIgeTI9Ii0xMjguMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwOS4xMiAxMC4wMSkgcm90YXRlKDg5LjYpIiB4bGluazpocmVmPSIjbGluZWFyLWdyYWRpZW50LTMiLz4KICA8L2RlZnM+CiAgPGcgY2xhc3M9ImNscy04IiBpZD0iTG9nbyI+CiAgICA8ZyBpZD0iT0JKRUNUUyIgPgogICAgICA8ZyBpZCA9IkxvZ28iPiAKICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTciIGQ9Ik00LjIzLDExYzAsNS4zNiw0LjM3LDkuNzEsOS43Niw5LjcxczkuNzYtNC4zNSw5Ljc2LTkuNzFTMTkuMzksMS4yOSwxNCwxLjI5LDQuMjMsNS42NCw0LjIzLDExWk0xMC4yNiwxMC4wN2MwLTEuNTQsMS4yNS0yLjc4LDIuOC0yLjc4aDEuODdjMS41NSwwLDIuOCwxLjI1LDIuOCwyLjc4djEuODZjMCwxLjU0LTEuMjUsMi43OC0yLjgsMi43OGgtMS4yMmMtLjQ1LDAtLjg4LjE1LTEuMjIuNDRsLTIuMjMsMS44NHYtNi45MloiLz4KICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0xMC4yNiwxNi45OXYtNi45MnMwLS4wMiwwLS4wM2MuMDItMS41MiwxLjI2LTIuNzUsMi44LTIuNzVoLTUuMDljLTIuMDUsMC0zLjczLDEuNjQtMy43NCwzLjY4LDAsLjAxLDAsLjAzLDAsLjA0LDAsLjA4LDAsLjE2LDAsLjI0LDAsLjA0LDAsLjA4LDAsLjEyLDAsLjA0LDAsLjA4LDAsLjEyLDAsLjA2LDAsLjExLjAxLjE3LDAsLjAyLDAsLjA1LDAsLjA3LDAsLjA2LjAxLjEzLjAyLjE5LDAsLjAxLDAsLjAzLDAsLjA0LDAsLjA3LjAxLjE0LjAyLjIxLDAsMCwwLC4wMSwwLC4wMiwwLC4wNy4wMi4xNS4wMy4yMiwwLDAsMCwwLDAsMCwuNjgsNC42OCw0LjcxLDguMjcsOS42LDguMy0yLjA0LS4wMi0zLjY3LTEuNjktMy42Ny0zLjcyWiIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIgZD0iTTE0LjA0LDEuMjlzLS4wMywwLS4wNCwwYy0uMDgsMC0uMTYsMC0uMjQsMC0uMDQsMC0uMDgsMC0uMTIsMC0uMDQsMC0uMDgsMC0uMTIsMC0uMDYsMC0uMTEsMC0uMTcsMC0uMDIsMC0uMDUsMC0uMDcsMC0uMDYsMC0uMTMuMDEtLjE5LjAyLS4wMSwwLS4wMywwLS4wNCwwLS4wNywwLS4xNC4wMS0uMjEuMDIsMCwwLS4wMSwwLS4wMiwwLS4wNywwLS4xNS4wMi0uMjIuMDMsMCwwLDAsMCwwLDAtNC43LjY4LTguMzIsNC42OS04LjM1LDkuNTQuMDItMi4wMiwxLjctMy42NSwzLjc0LTMuNjVoNi45NnMuMDIsMCwuMDMsMGMxLjUzLjAyLDIuNzcsMS4yNiwyLjc3LDIuNzh2LTUuMDZjMC0yLjA0LTEuNjUtMy43MS0zLjctMy43MloiLz4KICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0xNC45MywxNC43MWg1LjA5YzIuMDQsMCwzLjcyLTEuNjMsMy43NC0zLjY1LS4wMyw0Ljg2LTMuNjUsOC44Ny04LjM1LDkuNTQsMCwwLDAsMCwwLDAtLjA3LjAxLS4xNS4wMi0uMjIuMDMsMCwwLS4wMSwwLS4wMiwwLS4wNywwLS4xNC4wMi0uMjEuMDItLjAxLDAtLjAzLDAtLjA0LDAtLjA2LDAtLjEzLjAxLS4xOS4wMi0uMDIsMC0uMDUsMC0uMDcsMC0uMDYsMC0uMTEsMC0uMTcsMC0uMDQsMC0uMDgsMC0uMTIsMC0uMDQsMC0uMDgsMC0uMTIsMC0uMDgsMC0uMTYsMC0uMjQsMC0uMDEsMC0uMDMsMC0uMDQsMC0yLjA1LDAtMy43LTEuNjgtMy43LTMuNzJsMi4yMy0xLjg0Yy4zNC0uMjguNzgtLjQ0LDEuMjItLjQ0aDEuMjJaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy01IiBkPSJNMTQuOTMsMTQuNzFoNS4wOWMyLjA0LDAsMy43Mi0xLjYzLDMuNzQtMy42NS0uMDMsNC44Ni0zLjY1LDguODctOC4zNSw5LjU0LDAsMCwwLDAsMCwwLS4wNy4wMS0uMTUuMDItLjIyLjAzLDAsMC0uMDEsMC0uMDIsMC0uMDcsMC0uMTQuMDItLjIxLjAyLS4wMSwwLS4wMywwLS4wNCwwLS4wNiwwLS4xMy4wMS0uMTkuMDItLjAyLDAtLjA1LDAtLjA3LDAtLjA2LDAtLjExLDAtLjE3LDAtLjA0LDAtLjA4LDAtLjEyLDAtLjA0LDAtLjA4LDAtLjEyLDAtLjA4LDAtLjE2LDAtLjI0LDAtLjAxLDAtLjAzLDAtLjA0LDAtMi4wNSwwLTMuNy0xLjY4LTMuNy0zLjcybDIuMjMtMS44NGMuMzQtLjI4Ljc4LS40NCwxLjIyLS40NGgxLjIyWiIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTIwLjI4LDE0LjcxYy0uMDgsMC0uMTcsMC0uMjUsMGgtNi4zMWMtLjQ1LDAtLjg4LjE1LTEuMjIuNDRsLTIuMjMsMS44NGMwLC4wOCwwLC4xNywwLC4yNSwxLjA5LjY1LDIuMzcsMS4wMiwzLjczLDEuMDIsMi42NywwLDUuMDEtMS40Myw2LjI4LTMuNTVaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy02IiBkPSJNMjMuNzcsMTAuOTdzMC0uMDMsMC0uMDRjMC0uMDgsMC0uMTYsMC0uMjQsMC0uMDQsMC0uMDgsMC0uMTIsMC0uMDQsMC0uMDgsMC0uMTIsMC0uMDYsMC0uMTEtLjAxLS4xNywwLS4wMiwwLS4wNSwwLS4wNywwLS4wNi0uMDEtLjEzLS4wMi0uMTksMC0uMDEsMC0uMDMsMC0uMDQsMC0uMDctLjAyLS4xNC0uMDItLjIxLDAsMCwwLS4wMSwwLS4wMiwwLS4wNy0uMDItLjE1LS4wMy0uMjIsMCwwLDAsMCwwLDAtLjcxLTQuNjctNC43Ny04LjI0LTkuNjYtOC4yNCwyLjA0LDAsMy42OCwxLjY2LDMuNywzLjY5bC4wNCw1LjA2djEuODZzLjAxLjAyLjAxLjAzYzAsMS41Mi0xLjI1LDIuNzYtMi43OCwyLjc3bDUuMDktLjA0YzIuMDUtLjAxLDMuNzItMS42NiwzLjcxLTMuN1oiLz4KICAgICAgPC9nPgogICAgPC9nPgogIDwvZz4KPC9zdmc+",Vt=null,be=!1;function Pe(){if(Vt||be)return Vt;be=!0;let t=new Image;return t.onload=()=>{Vt=t},t.src=ar,null}function lr(){return Math.floor(Date.now()/864e5)}function ur(t){let r=(t^2654435769)>>>0;return function(){r=r+1831565813>>>0;let s=Math.imul(r^r>>>15,1|r);return s=s+Math.imul(s^s>>>7,61|s)^s,((s^s>>>14)>>>0)/4294967296}}function fr(t,r,s,o,w,e){let i=Pe();t.save(),t.setTransform(1,0,0,1,0,0),t.font="bold 10px Inter, system-ui, sans-serif";let n=t.measureText(o);t.font="8px Inter, system-ui, sans-serif";let u=t.measureText(w),l=i?18:0,f=i?14:0,p=7,g=5,a=i?5:0,d=l+a+Math.max(n.width,u.width)+p*2,h=Math.max(f,20)+g*2,c=Math.round(r-d/2),M=Math.round(s-h/2);t.globalAlpha=.45,t.fillStyle=e?"rgba(255,255,255,0.8)":"rgba(18,18,28,0.8)",t.shadowColor=e?"rgba(0,0,0,0.06)":"rgba(0,0,0,0.25)",t.shadowBlur=8,t.shadowOffsetY=1,t.beginPath(),t.roundRect(c,M,d,h,6),t.fill(),t.shadowColor="transparent",t.strokeStyle=e?"rgba(0,0,0,0.04)":"rgba(255,255,255,0.04)",t.lineWidth=.5,t.stroke();let m=c+p,I=M+h/2;i&&(t.globalAlpha=.5,t.drawImage(i,m,I-f/2,l,f),m+=l+a),t.globalAlpha=.5,t.font="bold 10px Inter, system-ui, sans-serif",t.fillStyle=e?"#1a1a2e":"#ededf5",t.textAlign="left",t.textBaseline="alphabetic",t.fillText(o,m,I-1),t.font="8px Inter, system-ui, sans-serif",t.fillStyle=e?"#777790":"#8080a0",t.textBaseline="top",t.fillText(w,m,I+2),t.restore()}function Fe(t,r,s,o){Pe();let w=r.width,e=r.height;if(w<100||e<80)return;t.save(),t.setTransform(1,0,0,1,0,0);let i=ur(lr()),n=100,u=Math.max(w-n*2,60),l=Math.max(e-n*2,40),f=n+i()*u,p=n+i()*l,g=s.trialExpired||s.plan===Ct,a=ir,_=g?`Free \u2014 ${Se}/pricing`:`Trial: ${s.daysLeft||0}d left \u2014 ${Se}`;fr(t,f,p,a,_,o),t.restore()}function _r({plan:t,domain:r="*",expiryDays:s=365,name:o,email:w}){let e=s>0?Math.floor(Date.now()/1e3)+s*86400:0,i={p:t,d:r,e,...o?{n:o}:{},...w?{m:w}:{},i:Date.now()};return i.s=Re(i),btoa(JSON.stringify(i))}var kt=null,te=null,Pt=null;async function Ft(){return kt?{module:kt,memory:te}:Pt||(Pt=(async()=>{let t=await import("./chart_engine.js");return await t.default(),te=t.wasm_memory(),kt=t,{module:t,memory:te}})(),Pt)}function et(t){let r=t.replace("#","");return[parseInt(r.substring(0,2),16)||0,parseInt(r.substring(2,4),16)||0,parseInt(r.substring(4,6),16)||0]}var Yt=null,Ot=null;async function Ye(){if(Yt)return Yt;let{module:t,memory:r}=await Ft();return Yt=t,Ot=r,t}function cr(){Yt||Ye().catch(()=>{})}async function dr(t,r={}){r.appId&&typeof window<"u"&&(window.__mrd_app_id=r.appId);let s=r.licenseKey||r.key||null,o=Rt(s);if(!o.valid)if(o.expired)console.warn(`[MRD Chart Engine] ${o.error}. Get a license at https://mrd-chart.dev/pricing`);else throw new Error(`[MRD Chart Engine] ${o.error}`);o.plan==="trial"&&console.info(`[MRD Chart Engine] Trial mode \u2014 ${o.daysLeft} days remaining. Purchase: https://mrd-chart.dev/pricing`);let w=await Ye(),e=window.devicePixelRatio||1,i=t.getBoundingClientRect();(i.width<1||i.height<1)&&(await new Promise(S=>{let A=new ResizeObserver(y=>{for(let T of y)if(T.contentRect.width>0&&T.contentRect.height>0){A.disconnect(),S();return}});A.observe(t.parentElement||t),setTimeout(()=>{A.disconnect(),S()},2e3)}),i=t.getBoundingClientRect());let n=Math.max(i.width,100),u=Math.max(i.height,100);t.width=n*e,t.height=u*e;let l=t.getContext("2d");l.scale(e,e);let f=new w.ChartEngine(n,u);if("ontouchstart"in window||navigator.maxTouchPoints>0)try{f.set_touch_mode(!0)}catch{}try{let S=o.expired?2:o.watermark?1:0,A=o.daysLeft||0,y=1297237059;y=Math.imul(y,31)+S>>>0,y=Math.imul(y,31)+A>>>0,y=(y^y>>>16)>>>0,y=Math.imul(y,73244475)>>>0,y=(y^y>>>16)>>>0,f.set_license_state(S,A,y)}catch(S){console.warn("[MRD] set_license_state failed:",S.message)}let g=!0,a=null,_=!1,d=!1,h=!1,c=null,M=null,m=0,I=!1,L=!1,X=("ontouchstart"in window||navigator.maxTouchPoints>0)&&window.innerWidth<=1399?33:0;function $(){if(!(!_||d||a)){if(X>0){let S=performance.now()-m;if(S<X){M||(M=setTimeout(()=>{M=null,$()},X-S));return}}a=requestAnimationFrame(Xe)}}let N=()=>{g=!0,$()},k=()=>h,at=null,ht=null,Y=null,W=null,H=null,G=null,lt=null,b=null,C=0,E=null,R=null,O=0,v=0,pt=-1,vt=!1,yt=!1,Ze=Xt(t,f,{onDirty:N,onCrosshairMove:(S,A,y)=>{O=S,v=A,pt=y,vt=!0,yt=!0},onCrosshairHide:()=>{yt&&(yt=!1,vt=!0,pt=-1)},drawingApi:S=>{at=S},onDrawingComplete:()=>{ht?.()},onDrawingCancel:()=>{Y?.()},onDrawingSelected:(S,A,y)=>{W?.(S,A,y)},onMarkerSelected:S=>{H?.(S)},onDrawingDblClick:(S,A,y,T,rt)=>{G?.(S,A,y,T,rt)},onVrvpHover:(S,A)=>{lt?.(S,A)},onLiqAnnotationPin:(S,A)=>{R?.(S,A)}});function De(){if(!(!vt||L)){if(vt=!1,!yt){c&&c(null,0,0),b&&b("");return}if(c)if(pt===0||pt===1)try{let S=f.get_tooltip_data();c(S,O,v)}catch{}else c(null,0,0);if(b){let S=performance.now();if(pt===0||pt===1){if(S-C>=80){C=S;try{b(f.lt_hit_test(O,v))}catch{}}}else b("")}}}function Xe(){if(a=null,!(!_||d||L)){I=!0;try{let S=!1;try{S=g||f.is_dirty()}catch{L=!0;return}if(S){g=!1,m=performance.now();let A=!1;try{if(f.render()>0){let T=f.get_command_buffer_ptr(),rt=f.get_command_buffer_len();l.save(),l.setTransform(1,0,0,1,0,0),l.clearRect(0,0,t.width,t.height),l.restore(),ct(l,Ot,T,rt),A=!0}try{_t.renderAll(l)}catch{}}catch(y){if(A||(g=!0),y instanceof WebAssembly.RuntimeError){L=!0,console.error("[MRD] Engine crashed:",y.message);return}}De();try{E?.()}catch{}if(o.watermark)try{let y=f.get_theme()===1;Fe(l,t,o,y)}catch{}try{(g||f.is_dirty())&&$()}catch{}}}finally{I=!1}}}let St=Ht(o.plan),We=he(f,N,k,()=>St),He=pe(f,N,k,()=>St),Ve=we(f,N,k,()=>St),_t=Wt(f,Ot,ct);return{engine:f,start(){_=!0,d=!1,g=!0,$()},stop(){_=!1,a&&(cancelAnimationFrame(a),a=null),M&&(clearTimeout(M),M=null)},resize(S){if(L||I)return;if(i=t.getBoundingClientRect(),i.width<1||i.height<1){(S||0)<8&&setTimeout(()=>this.resize((S||0)+1),250);return}e=window.devicePixelRatio||1;let A=i.width*e,y=i.height*e;t.width=A,t.height=y,l.setTransform(1,0,0,1,0,0),l.scale(e,e);try{f.resize(i.width,i.height)}catch(T){if(T instanceof WebAssembly.RuntimeError){L=!0;return}throw T}N()},renderSync(){if(L)return 0;try{let S=f.render();if(S>0){let A=f.get_command_buffer_ptr(),y=f.get_command_buffer_len();l.save(),l.setTransform(1,0,0,1,0,0),l.clearRect(0,0,t.width,t.height),l.restore(),ct(l,Ot,A,y)}return S}catch(S){return S instanceof WebAssembly.RuntimeError&&(L=!0),0}},setHoverPrice(S){f.set_hover_price(S),N()},clearHoverPrice(){f.clear_hover_price(),N()},hitZone(S,A){return f.hit_zone(S,A)},startDrawing(S,A){at?.setMode(S,A)},cancelDrawing(){at?.setMode(null)},onDrawingComplete(S){ht=S},onDrawingCancel(S){Y=S},onDrawingSelected(S){W=S},onMarkerSelected(S){H=S},onDrawingDblClick(S){G=S},setReplayState(S,A,y){f.set_replay_state(S,A,y),N()},setReplayHovered(S){f.set_replay_hovered(S)},setReplayPreview(S){f.set_replay_preview(S),N()},setPrecision(S){f.set_price_precision(S),N()},setCandleInterval(S){f.set_candle_interval(S)},setTheme(S){let A=S==="light"?1:0;typeof f.set_theme=="function"?(f.set_theme(A),N()):console.warn("[ChartEngine] set_theme not available \u2014 reload page to load updated WASM")},getTheme(){return f.get_theme()===1?"light":"dark"},setCandleBullColor(S){let[A,y,T]=et(S);typeof f.set_candle_bull_color=="function"&&(f.set_candle_bull_color(A,y,T),N())},setCandleBearColor(S){let[A,y,T]=et(S);typeof f.set_candle_bear_color=="function"&&(f.set_candle_bear_color(A,y,T),N())},setBackgroundColor(S){let[A,y,T]=et(S);typeof f.set_background_color=="function"&&(f.set_background_color(A,y,T),N())},setGridColor(S,A=255){let[y,T,rt]=et(S);typeof f.set_grid_color=="function"&&(f.set_grid_color(y,T,rt,A),N())},setCrosshairColor(S,A=160){let[y,T,rt]=et(S);typeof f.set_crosshair_color=="function"&&(f.set_crosshair_color(y,T,rt,A),N())},setCrosshairStyle(S){typeof f.set_crosshair_style=="function"&&(f.set_crosshair_style(S),N())},setCrosshairWidth(S){typeof f.set_crosshair_width=="function"&&(f.set_crosshair_width(S),N())},setFontSize(S){typeof f.set_font_size=="function"&&(f.set_font_size(S),N())},getFontSize(){return typeof f.get_font_size=="function"?f.get_font_size():11},setGridHVisible(S){typeof f.set_grid_h_visible=="function"&&(f.set_grid_h_visible(!!S),N())},setGridVVisible(S){typeof f.set_grid_v_visible=="function"&&(f.set_grid_v_visible(!!S),N())},setBgGradient(S,A){if(typeof f.set_bg_gradient=="function"){let[y,T,rt]=et(A||"#000000");f.set_bg_gradient(!!S,y,T,rt),N()}},setCandleBullWickColor(S){let[A,y,T]=et(S);typeof f.set_candle_bull_wick_color=="function"&&(f.set_candle_bull_wick_color(A,y,T),N())},setCandleBullBorderColor(S){let[A,y,T]=et(S);typeof f.set_candle_bull_border_color=="function"&&(f.set_candle_bull_border_color(A,y,T),N())},setCandleBearWickColor(S){let[A,y,T]=et(S);typeof f.set_candle_bear_wick_color=="function"&&(f.set_candle_bear_wick_color(A,y,T),N())},setCandleBearBorderColor(S){let[A,y,T]=et(S);typeof f.set_candle_bear_border_color=="function"&&(f.set_candle_bear_border_color(A,y,T),N())},onTooltip(S){c=S},onVrvpHover(S){lt=S},onLtHover(S){b=S},onPostRender(S){E=S},onLiqAnnotationPin(S){R=S},pause(){d||(d=!0,a&&(cancelAnimationFrame(a),a=null),M&&(clearTimeout(M),M=null))},resume(){d&&(d=!1,_&&(g=!0,$()))},get isPaused(){return d},destroy(){h=!0,_=!1,d=!1,a&&(cancelAnimationFrame(a),a=null),M&&(clearTimeout(M),M=null),Ze();try{f.free()}catch{}},addIndicator(S){if(!St("customIndicators"))return null;let A=_t.add(S);return N(),A},removeIndicator(S){_t.remove(S),N()},updateIndicatorParams(S,A){_t.updateParams(S,A),N()},setIndicatorEnabled(S,A){_t.setEnabled(S,A),N()},listIndicators(){return _t.list()},invalidateCustomIndicators(){_t.invalidateCompute(),N()},get license(){return{plan:o.plan,valid:o.valid,expired:!!o.expired,watermark:!!o.watermark,daysLeft:o.daysLeft,features:o.features||{}}},setLicenseKey(S){o=Rt(S),!o.valid&&!o.expired&&console.error(`[MRD Chart Engine] ${o.error}`),St=Ht(o.plan);try{let A=o.expired?2:o.watermark?1:0,y=o.daysLeft||0,T=1297237059;T=Math.imul(T,31)+A>>>0,T=Math.imul(T,31)+y>>>0,T=(T^T>>>16)>>>0,T=Math.imul(T,73244475)>>>0,T=(T^T>>>16)>>>0,f.set_license_state(A,y,T)}catch{}return N(),o.valid},...Ve,...We,...He}}function hr(t,r){let{t:s,o,h:w,l:e,c:i,v:n}=t,u=i.length;if(u===0||r<=0)return{t:[],o:[],h:[],l:[],c:[],v:[]};let l=[],f=[],p=[],g=[],a=[],_=[],d=Math.round(i[0]/r)*r,h=0;for(let c=0;c<u;c++){h+=n[c];let m=i[c]-d;for(;m>=r;){let I=d,L=d+r;l.push(s[c]),f.push(I),p.push(L),g.push(I),a.push(L),_.push(h),h=0,d=L}for(;-m>=r;){let I=d,L=d-r;l.push(s[c]),f.push(I),p.push(I),g.push(L),a.push(L),_.push(h),h=0,d=L}}return{t:l,o:f,h:p,l:g,c:a,v:_}}function pr(t,r){let{t:s,o,h:w,l:e,c:i,v:n}=t,u=i.length;if(u===0||r<=0)return{t:[],o:[],h:[],l:[],c:[],v:[]};let l=[],f=[],p=[],g=[],a=[],_=[],d=o[0],h=w[0],c=e[0],M=0,m=s[0];for(let I=0;I<u;I++)for(h=Math.max(h,w[I]),c=Math.min(c,e[I]),M+=n[I];h-c>=r;){let L=i[I]>=d,P=L?c+r:h-r;if(l.push(m),f.push(d),p.push(h),g.push(c),a.push(P),_.push(M),d=P,h=L?Math.max(w[I],P):P,c=L?P:Math.min(e[I],P),M=0,m=s[I],h-c<r)break}return(M>0||l.length===0)&&(l.push(m),f.push(d),p.push(h),g.push(c),a.push(i[u-1]),_.push(M)),{t:l,o:f,h:p,l:g,c:a,v:_}}function wr(t,r){let{t:s,o,h:w,l:e,c:i,v:n}=t,u=i.length;if(u===0||r<=0)return{t:[],o:[],h:[],l:[],c:[],v:[]};let l=[],f=[],p=[],g=[],a=[],_=[],d=Math.max(1,Math.round(r));for(let h=0;h<u;h+=d){let c=Math.min(h+d,u),M=-1/0,m=1/0,I=0;for(let L=h;L<c;L++)w[L]>M&&(M=w[L]),e[L]<m&&(m=e[L]),I+=n[L];l.push(s[h]),f.push(o[h]),p.push(M),g.push(m),a.push(i[c-1]),_.push(I)}return{t:l,o:f,h:p,l:g,c:a,v:_}}function gr(t,r){let s=t>1e4?50:t>1e3?10:t>100?1:t>1?.1:.001,o=s*2,w=r<=60?10:r<=300?5:3;return{brickSize:s,rangeSize:o,tickCount:w}}var mr={minRefills:3,hiddenRatio:2,refillWindowMs:1e4,maxTrackedLevels:200,maxEvents:500,decayMs:3e5};function Mr(t={}){let r={...mr,...t},s=new Map,o=new Map,w=[],e=0;function i(g){return Math.round(g*1e8)/1e8}function n(g,a,_,d){for(let[h,c]of g){let M=i(h),m=a.get(M);if(!m){a.set(M,{lastVol:c,refills:0,totalConsumed:0,lastRefillTs:d,peakVisible:c});continue}if(c<m.lastVol*.3&&m.lastVol>0){let I=m.lastVol-c;m.totalConsumed+=I,m.lastVol=c;continue}if(c>m.lastVol*1.5&&m.totalConsumed>0)if(d-m.lastRefillTs<r.refillWindowMs){if(m.refills++,m.lastRefillTs=d,m.peakVisible=Math.max(m.peakVisible,c),m.refills>=r.minRefills){let L=m.totalConsumed,P=m.peakVisible;L>=P*r.hiddenRatio&&(w.push({timestamp:d,price:h,visibleSize:P,hiddenSize:L,isBid:_,refillCount:m.refills}),w.length>r.maxEvents&&w.shift(),m.refills=0,m.totalConsumed=0)}}else m.refills=1,m.totalConsumed=0,m.lastRefillTs=d;m.lastVol=c}if(a.size>r.maxTrackedLevels){let h=[...a.entries()];h.sort((M,m)=>M[1].lastRefillTs-m[1].lastRefillTs);let c=h.length-r.maxTrackedLevels;for(let M=0;M<c;M++)a.delete(h[M][0])}}function u(g,a,_){let d=_||Date.now();e=d;let h=g instanceof Map?g:new Map(g.map(([m,I])=>[m,I])),c=a instanceof Map?a:new Map(a.map(([m,I])=>[m,I]));n(h,s,!0,d),n(c,o,!1,d);let M=d-r.decayMs;for(;w.length>0&&w[0].timestamp<M;)w.shift()}function l(){return w}function f(g){if(!g||w.length===0)return;let a=w.length,_=new Float64Array(a),d=new Float64Array(a),h=new Float64Array(a),c=new Float64Array(a),M=new Uint8Array(a),m=new Uint32Array(a);for(let I=0;I<a;I++){let L=w[I];_[I]=L.timestamp,d[I]=L.price,h[I]=L.visibleSize,c[I]=L.hiddenSize,M[I]=L.isBid?1:0,m[I]=L.refillCount}g.setIcebergEvents(_,d,h,c,M,m)}function p(){s.clear(),o.clear(),w.length=0}return{onOrderbookUpdate:u,getEvents:l,pushToEngine:f,reset:p}}var ee=null,ze=null;async function Sr(){if(ee)return ee;let{module:t,memory:r}=await Ft();return ee=t,ze=r,t}var Oe=Promise.resolve();async function br(t,r={}){let s=await Sr();return await(Oe=Oe.then(()=>je(s,t,r),()=>je(s,t,r)))}function je(t,r,s){let o=window.devicePixelRatio||1,w=r.getBoundingClientRect(),e=Math.max(w.width,60),i=Math.max(w.height,60);r.width=e*o,r.height=i*o;let n=r.getContext("2d");n.scale(o,o);let u=new t.OrderbookEngine(e,i);s.symbol&&u.set_symbol(s.symbol),s.tickSize&&u.set_tick_size(s.tickSize),s.visibleTicks&&u.set_visible_ticks(s.visibleTicks),s.exchangeCount&&u.set_exchange_count(s.exchangeCount),s.pricePrecision!=null&&u.set_price_precision(s.pricePrecision),s.theme==="light"&&u.set_theme(1),s.heatmapCols&&u.set_heatmap_cols(s.heatmapCols),(s.ringCols||s.ringRows)&&u.set_ring_capacity(s.ringCols||300,s.ringRows||400),s.heatmapAlphaMul!=null&&u.set_heatmap_alpha_mul(Number(s.heatmapAlphaMul)),s.showCumulative!=null&&u.set_show_cumulative(!!s.showCumulative),s.showSignalOverlays!=null&&u.set_show_signal_overlays(!!s.showSignalOverlays);let l=!0,f=null,p=!1,g=!1,a=!1,_=null,d=null;function h(){!p||a||f||(f=requestAnimationFrame(M))}let c=()=>{l=!0,h()};function M(){if(f=null,!p||a)return;let b=!1;try{b=l||u.is_dirty()}catch{a=!0;return}if(b){l=!1;try{if(u.render()>0){let E=u.get_command_buffer_ptr(),R=u.get_command_buffer_len();n.save(),n.setTransform(1,0,0,1,0,0),n.clearRect(0,0,r.width,r.height),n.restore(),ct(n,ze,E,R)}}catch(C){if(C instanceof WebAssembly.RuntimeError){a=!0,console.error("[OrderbookEngine] crashed:",C.message);return}l=!0}}}r.style.touchAction="none";let m=!1,I=0,L=new Map,P=0,X=0,$=0,N=0,k=!1;function at(b){if(a)return;b.preventDefault();let C=b.deltaY>0?1.08:.93;u.zoom_y(C,b.offsetY),c()}function ht(b){if(!a){if(L.set(b.pointerId,{y:b.offsetY}),r.setPointerCapture(b.pointerId),L.size===1)m=!0,I=b.offsetY,N=b.offsetX,$=b.offsetY,k=!1;else if(L.size===2){m=!1;let C=[...L.values()];P=Math.abs(C[0].y-C[1].y),X=(C[0].y+C[1].y)/2}}}function Y(b){if(!a){if(L.set(b.pointerId,{y:b.offsetY}),L.size>=2){let C=[...L.values()],E=Math.abs(C[0].y-C[1].y),R=(C[0].y+C[1].y)/2;if(P>0){let v=P/Math.max(E,1);u.zoom_y(v,R)}let O=R-X;Math.abs(O)>.5&&u.pan_y(O),P=E,X=R,c()}else if(m){let C=b.offsetY-I;I=b.offsetY,(Math.abs(b.offsetX-N)>4||Math.abs(b.offsetY-$)>4)&&(k=!0),u.pan_y(C),c()}else if(u.set_hover(b.offsetX,b.offsetY),c(),_)try{let C=u.get_hover_price();if(C>0){let E=u.get_hover_qty(),R=u.get_hover_side();_({price:C,qty:E,side:R===2?"ask":"bid"})}else _(null)}catch{}}}function W(){a||(_&&_(null),u.clear_hover(),c())}function H(b){let C=m&&!k&&L.size===1;L.delete(b.pointerId);try{r.releasePointerCapture(b.pointerId)}catch{}if(L.size===0){if(C&&d&&!a)try{u.set_hover(b.offsetX,b.offsetY);let E=u.get_hover_price();if(E>0){let R=u.get_hover_qty(),O=u.get_hover_side();d({price:E,qty:R,side:O===2?"ask":"bid"})}}catch{}m=!1,P=0}else L.size===1&&(m=!0,I=[...L.values()][0].y,P=0)}function G(){a||(u.center_on_mid(),c())}r.addEventListener("wheel",at,{passive:!1}),r.addEventListener("pointerdown",ht),r.addEventListener("pointermove",Y),r.addEventListener("pointerup",H),r.addEventListener("pointercancel",H),r.addEventListener("pointerleave",W),r.addEventListener("dblclick",G);function lt(){r.removeEventListener("wheel",at),r.removeEventListener("pointerdown",ht),r.removeEventListener("pointermove",Y),r.removeEventListener("pointerup",H),r.removeEventListener("pointercancel",H),r.removeEventListener("pointerleave",W),r.removeEventListener("dblclick",G)}return{engine:u,start(){p=!0,l=!0,h()},stop(){p=!1,f&&(cancelAnimationFrame(f),f=null)},resize(){if(!(g||a)&&(w=r.getBoundingClientRect(),!(w.width<1||w.height<1))){o=window.devicePixelRatio||1,r.width=w.width*o,r.height=w.height*o,n.setTransform(1,0,0,1,0,0),n.scale(o,o);try{u.resize(w.width,w.height)}catch(b){if(b instanceof WebAssembly.RuntimeError){a=!0;return}throw b}c()}},pushSnapshot(b,C,E){if(a)return;let R=new Float64Array(b.length*2);for(let v=0;v<b.length;v++)R[v*2]=b[v][0],R[v*2+1]=b[v][1];let O=new Float64Array(C.length*2);for(let v=0;v<C.length;v++)O[v*2]=C[v][0],O[v*2+1]=C[v][1];try{u.push_snapshot(R,O,E)}catch(v){if(v instanceof WebAssembly.RuntimeError){a=!0;return}throw v}c()},pushSnapshotFlat(b,C,E){if(!a){try{u.push_snapshot(b,C,E)}catch(R){if(R instanceof WebAssembly.RuntimeError){a=!0;return}throw R}c()}},setDepthBook(b,C,E){if(a)return;let R=new Float64Array(b.length*2);for(let v=0;v<b.length;v++)R[v*2]=b[v][0],R[v*2+1]=b[v][1];let O=new Float64Array(C.length*2);for(let v=0;v<C.length;v++)O[v*2]=C[v][0],O[v*2+1]=C[v][1];try{u.set_depth_book(R,O,E)}catch(v){if(v instanceof WebAssembly.RuntimeError){a=!0;return}throw v}c()},setDepthBookFlat(b,C,E){if(!a){try{u.set_depth_book(b,C,E)}catch(R){if(R instanceof WebAssembly.RuntimeError){a=!0;return}throw R}c()}},pushHeatmapCol(b,C,E){if(a)return;let R=new Float64Array(b.length*2);for(let v=0;v<b.length;v++)R[v*2]=b[v][0],R[v*2+1]=b[v][1];let O=new Float64Array(C.length*2);for(let v=0;v<C.length;v++)O[v*2]=C[v][0],O[v*2+1]=C[v][1];try{u.push_heatmap_col(R,O,E)}catch(v){if(v instanceof WebAssembly.RuntimeError){a=!0;return}throw v}c()},pushHeatmapColFlat(b,C,E){if(!a){try{u.push_heatmap_col(b,C,E)}catch(R){if(R instanceof WebAssembly.RuntimeError){a=!0;return}throw R}c()}},resetRing(){if(!a){try{u.reset_ring()}catch(b){if(b instanceof WebAssembly.RuntimeError){a=!0;return}throw b}c()}},setExchangeLabels(b){if(a)return;let C=Array.isArray(b)?b.join(","):String(b);try{u.set_exchange_labels(C)}catch(E){if(E instanceof WebAssembly.RuntimeError){a=!0;return}throw E}c()},setSignalObi(b,C,E){if(!a){try{u.set_signal_obi(b,C,E)}catch(R){if(R instanceof WebAssembly.RuntimeError){a=!0;return}throw R}c()}},setSignalSpoof(b){if(!a){try{u.set_signal_spoof(b)}catch(C){if(C instanceof WebAssembly.RuntimeError){a=!0;return}throw C}c()}},setSignalAbsorption(b,C){if(!a){try{u.set_signal_absorption(b,C)}catch(E){if(E instanceof WebAssembly.RuntimeError){a=!0;return}throw E}c()}},setSignalFlow(b,C){if(!a){try{u.set_signal_flow(b,C)}catch(E){if(E instanceof WebAssembly.RuntimeError){a=!0;return}throw E}c()}},setSignalWalls(b,C){if(!a){try{u.set_signal_walls(new Float64Array(b),new Float64Array(C))}catch(E){if(E instanceof WebAssembly.RuntimeError){a=!0;return}throw E}c()}},setSignalGaps(b,C){if(!a){try{u.set_signal_gaps(new Float64Array(b),new Float64Array(C))}catch(E){if(E instanceof WebAssembly.RuntimeError){a=!0;return}throw E}c()}},setSymbol(b){a||(u.set_symbol(b),c())},setTickSize(b){a||(u.set_tick_size(b),c())},setVisibleTicks(b){a||(u.set_visible_ticks(b),c())},setExchangeCount(b){a||(u.set_exchange_count(b),c())},setPrecision(b){a||(u.set_price_precision(b),c())},setAutoCenter(b){a||u.set_auto_center(b)},centerOnMid(){a||(u.center_on_mid(),c())},setHeatmapCols(b){a||(u.set_heatmap_cols(b),c())},setHeatmapAlphaMul(b){if(!a){try{u.set_heatmap_alpha_mul(Number(b))}catch(C){if(C instanceof WebAssembly.RuntimeError){a=!0;return}throw C}c()}},setShowCumulative(b){if(!a){try{u.set_show_cumulative(!!b)}catch(C){if(C instanceof WebAssembly.RuntimeError){a=!0;return}throw C}c()}},setShowSignalOverlays(b){if(!a){try{u.set_show_signal_overlays(!!b)}catch(C){if(C instanceof WebAssembly.RuntimeError){a=!0;return}throw C}c()}},getHoverPrice(){return a?0:u.get_hover_price()},getHoverQty(){return a?0:u.get_hover_qty()},getHoverSide(){return a?0:u.get_hover_side()},onHoverPrice(b){_=b},onClickPrice(b){d=b},setTheme(b){a||(u.set_theme(b==="light"?1:0),c())},clear(){a||(u.clear(),c())},get isDead(){return a},destroy(){g=!0,p=!1,f&&(cancelAnimationFrame(f),f=null),lt();try{u.free()}catch{}}}}export{pr as buildRange,hr as buildRenko,wr as buildTick,dr as createChartBridge,Wt as createCustomIndicatorManager,Mr as createIcebergDetector,br as createOrderbookBridge,ct as dispatchCommands,_r as generateLicenseKey,cr as prefetchWasm,Xt as setupEvents,gr as suggestDefaults,Rt as validateLicense};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kline-orderbook-chart",
3
- "version": "0.2.18",
3
+ "version": "0.2.20",
4
4
  "description": "Candlestick chart with built-in orderbook heatmap, footprint chart, and liquidation heatmap. Native high-performance engine. 60 fps, zero dependencies.",
5
5
  "type": "module",
6
6
  "main": "dist/mrd-chart-engine.mjs",