k(X,D,K,Q,d),ref:r,style:gk(gk({},q),t.style)}))})};function xk(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function _k(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?xk(Object(r),!0).forEach(function(n){XF(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):xk(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function XF(e,t,r){return(t=JF(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function JF(e){var t=QF(e,"string");return typeof t=="symbol"?t:t+""}function QF(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Hd=Math.PI/180,ZF=e=>e*180/Math.PI,Bt=(e,t,r,n)=>({x:e+Math.cos(-Hd*n)*r,y:t+Math.sin(-Hd*n)*r}),eW=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(t-(n.left||0)-(n.right||0)),Math.abs(r-(n.top||0)-(n.bottom||0)))/2},tW=(e,t)=>{var{x:r,y:n}=e,{x:i,y:a}=t;return Math.sqrt((r-i)**2+(n-a)**2)},rW=(e,t)=>{var{x:r,y:n}=e,{cx:i,cy:a}=t,s=tW({x:r,y:n},{x:i,y:a});if(s<=0)return{radius:s,angle:0};var u=(r-i)/s,c=Math.acos(u);return n>a&&(c=2*Math.PI-c),{radius:s,angle:ZF(c),angleInRadian:c}},nW=e=>{var{startAngle:t,endAngle:r}=e,n=Math.floor(t/360),i=Math.floor(r/360),a=Math.min(n,i);return{startAngle:t-a*360,endAngle:r-a*360}},iW=(e,t)=>{var{startAngle:r,endAngle:n}=t,i=Math.floor(r/360),a=Math.floor(n/360),s=Math.min(i,a);return e+s*360},aW=(e,t)=>{var{relativeX:r,relativeY:n}=e,{radius:i,angle:a}=rW({x:r,y:n},t),{innerRadius:s,outerRadius:u}=t;if(i<s||i>u||i===0)return null;var{startAngle:c,endAngle:d}=nW(t),h=a,p;if(c<=d){for(;h>d;)h-=360;for(;h<c;)h+=360;p=h>=c&&h<=d}else{for(;h>c;)h-=360;for(;h<d;)h+=360;p=h>=d&&h<=c}return p?_k(_k({},t),{},{radius:i,angle:iW(h,t)}):null};function HC(e){var{cx:t,cy:r,radius:n,startAngle:i,endAngle:a}=e,s=Bt(t,r,n,i),u=Bt(t,r,n,a);return{points:[s,u],cx:t,cy:r,radius:n,startAngle:i,endAngle:a}}var Sk,kk,Pk,Ek,Ok,Ak,Ck;function Qg(){return Qg=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Qg.apply(null,arguments)}function Ea(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var oW=(e,t)=>{var r=vr(t-e),n=Math.min(Math.abs(t-e),359.999);return r*n},Jc=e=>{var{cx:t,cy:r,radius:n,angle:i,sign:a,isExternal:s,cornerRadius:u,cornerIsExternal:c}=e,d=u*(s?1:-1)+n,h=Math.asin(u/d)/Hd,p=c?i:i+a*h,m=Bt(t,r,d,p),g=Bt(t,r,n,p),b=c?i-a*h:i,w=Bt(t,r,d*Math.cos(h*Hd),b);return{center:m,circleTangency:g,lineTangency:w,theta:h}},KC=e=>{var{cx:t,cy:r,innerRadius:n,outerRadius:i,startAngle:a,endAngle:s}=e,u=oW(a,s),c=a+u,d=Bt(t,r,i,a),h=Bt(t,r,i,c),p=ut(Sk||(Sk=Ea(["M ",",",`
    A `,",",`,0,
    `,",",`,
    `,",",`
  `])),d.x,d.y,i,i,+(Math.abs(u)>180),+(a>c),h.x,h.y);if(n>0){var m=Bt(t,r,n,a),g=Bt(t,r,n,c);p+=ut(kk||(kk=Ea(["L ",",",`
            A `,",",`,0,
            `,",",`,
            `,","," Z"])),g.x,g.y,n,n,+(Math.abs(u)>180),+(a<=c),m.x,m.y)}else p+=ut(Pk||(Pk=Ea(["L ",","," Z"])),t,r);return p},sW=e=>{var{cx:t,cy:r,innerRadius:n,outerRadius:i,cornerRadius:a,forceCornerRadius:s,cornerIsExternal:u,startAngle:c,endAngle:d}=e,h=vr(d-c),{circleTangency:p,lineTangency:m,theta:g}=Jc({cx:t,cy:r,radius:i,angle:c,sign:h,cornerRadius:a,cornerIsExternal:u}),{circleTangency:b,lineTangency:w,theta:S}=Jc({cx:t,cy:r,radius:i,angle:d,sign:-h,cornerRadius:a,cornerIsExternal:u}),k=u?Math.abs(c-d):Math.abs(c-d)-g-S;if(k<0)return s?ut(Ek||(Ek=Ea(["M ",",",`
        a`,",",",0,0,1,",`,0
        a`,",",",0,0,1,",`,0
      `])),m.x,m.y,a,a,a*2,a,a,-a*2):KC({cx:t,cy:r,innerRadius:n,outerRadius:i,startAngle:c,endAngle:d});var A=ut(Ok||(Ok=Ea(["M ",",",`
    A`,",",",0,0,",",",",",`
    A`,",",",0,",",",",",",",`
    A`,",",",0,0,",",",",",`
  `])),m.x,m.y,a,a,+(h<0),p.x,p.y,i,i,+(k>180),+(h<0),b.x,b.y,a,a,+(h<0),w.x,w.y);if(n>0){var{circleTangency:P,lineTangency:C,theta:N}=Jc({cx:t,cy:r,radius:n,angle:c,sign:h,isExternal:!0,cornerRadius:a,cornerIsExternal:u}),{circleTangency:j,lineTangency:M,theta:F}=Jc({cx:t,cy:r,radius:n,angle:d,sign:-h,isExternal:!0,cornerRadius:a,cornerIsExternal:u}),W=u?Math.abs(c-d):Math.abs(c-d)-N-F;if(W<0&&a===0)return"".concat(A,"L").concat(t,",").concat(r,"Z");A+=ut(Ak||(Ak=Ea(["L",",",`
      A`,",",",0,0,",",",",",`
      A`,",",",0,",",",",",",",`
      A`,",",",0,0,",",",",","Z"])),M.x,M.y,a,a,+(h<0),j.x,j.y,n,n,+(W>180),+(h>0),P.x,P.y,a,a,+(h<0),C.x,C.y)}else A+=ut(Ck||(Ck=Ea(["L",",","Z"])),t,r);return A},lW={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},VC=e=>{var t=or(e,lW),{cx:r,cy:n,innerRadius:i,outerRadius:a,cornerRadius:s,forceCornerRadius:u,cornerIsExternal:c,startAngle:d,endAngle:h,className:p}=t;if(a<i||d===h)return null;var m=Fe("recharts-sector",p),g=a-i,b=cn(s,g,0,!0),w;return b>0&&Math.abs(d-h)<360?w=sW({cx:r,cy:n,innerRadius:i,outerRadius:a,cornerRadius:Math.min(b,g/2),forceCornerRadius:u,cornerIsExternal:c,startAngle:d,endAngle:h}):w=KC({cx:r,cy:n,innerRadius:i,outerRadius:a,startAngle:d,endAngle:h}),x.createElement("path",Qg({},nr(t),{className:m,d:w}))};function uW(e,t,r){if(e==="horizontal")return[{x:t.x,y:r.top},{x:t.x,y:r.top+r.height}];if(e==="vertical")return[{x:r.left,y:t.y},{x:r.left+r.width,y:t.y}];if(AA(t)){if(e==="centric"){var{cx:n,cy:i,innerRadius:a,outerRadius:s,angle:u}=t,c=Bt(n,i,a,u),d=Bt(n,i,s,u);return[{x:c.x,y:c.y},{x:d.x,y:d.y}]}return HC(t)}}var Tm={},Nm={},Im={},jk;function cW(){if(jk)return Im;jk=1;const e=UA();function t(r){return e.isSymbol(r)?NaN:Number(r)}return Im.toNumber=t,Im}var Tk;function dW(){if(Tk)return Nm;Tk=1;const e=cW();function t(r){return r?(r=e.toNumber(r),r===1/0||r===-1/0?(r<0?-1:1)*Number.MAX_VALUE:r===r?r:0):r===0?r:0}return Nm.toFinite=t,Nm}var Nk;function fW(){if(Nk)return Tm;Nk=1;const e=dW(),t=zA();function r(n,i,a){a&&typeof a!="number"&&t.isIterateeCall(n,i,a)&&(i=a=void 0),n=e.toFinite(n),i===void 0?(i=n,n=0):i=e.toFinite(i),a=a===void 0?n<i?1:-1:e.toFinite(a);const s=Math.max(Math.ceil((i-n)/(a||1)),0),u=new Array(s);for(let c=0;c<s;c++)u[c]=n,n+=a;return u}return Tm.range=r,Tm}var Rm,Ik;function hW(){return Ik||(Ik=1,Rm=fW().range),Rm}var pW=hW();const GC=ai(pW);var hn=e=>e.chartData,Qy=L([hn],e=>{var t=e.chartData!=null?e.chartData.length-1:0;return{chartData:e.chartData,computedData:e.computedData,dataEndIndex:t,dataStartIndex:0}}),vu=(e,t,r,n)=>n?Qy(e):hn(e),vW=(e,t,r)=>r?Qy(e):hn(e),mW=L([vu],e=>{var{chartData:t,dataStartIndex:r,dataEndIndex:n}=e;return t!=null?t.slice(r,n+1):[]});L([Qy],e=>{var{chartData:t,dataStartIndex:r,dataEndIndex:n}=e;return t!=null?t.slice(r,n+1):[]});var gW=L([hn],e=>{var{chartData:t,dataStartIndex:r,dataEndIndex:n}=e;return t!=null?t.slice(r,n+1):[]});function jn(e){if(Array.isArray(e)&&e.length===2){var[t,r]=e;if(je(t)&&je(r))return!0}return!1}function Rk(e,t,r){return r?e:[Math.min(e[0],t[0]),Math.max(e[1],t[1])]}function YC(e,t){if(t&&typeof e!="function"&&Array.isArray(e)&&e.length===2){var[r,n]=e,i,a;if(je(r))i=r;else if(typeof r=="function")return;if(je(n))a=n;else if(typeof n=="function")return;var s=[i,a];if(jn(s))return s}}function yW(e,t,r){if(!(!r&&t==null)){if(typeof e=="function"&&t!=null)try{var n=e(t,r);if(jn(n))return Rk(n,t,r)}catch{}if(Array.isArray(e)&&e.length===2){var[i,a]=e,s,u;if(i==="auto")t!=null&&(s=Math.min(...t));else if(ce(i))s=i;else if(typeof i=="function")try{t!=null&&(s=i(t==null?void 0:t[0]))}catch{}else if(typeof i=="string"&&PS.test(i)){var c=PS.exec(i);if(c==null||c[1]==null||t==null)s=void 0;else{var d=+c[1];s=t[0]-d}}else s=t==null?void 0:t[0];if(a==="auto")t!=null&&(u=Math.max(...t));else if(ce(a))u=a;else if(typeof a=="function")try{t!=null&&(u=a(t==null?void 0:t[1]))}catch{}else if(typeof a=="string"&&ES.test(a)){var h=ES.exec(a);if(h==null||h[1]==null||t==null)u=void 0;else{var p=+h[1];u=t[1]+p}}else u=t==null?void 0:t[1];var m=[s,u];if(jn(m))return t==null?m:Rk(m,t,r)}}}var hs=1e9,wW={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},e0,et=!0,Fr="[DecimalError] ",Na=Fr+"Invalid argument: ",Zy=Fr+"Exponent out of range: ",ps=Math.floor,Sa=Math.pow,bW=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,kr,Ct=1e7,Qe=7,XC=9007199254740991,Kd=ps(XC/Qe),se={};se.absoluteValue=se.abs=function(){var e=new this.constructor(this);return e.s&&(e.s=1),e};se.comparedTo=se.cmp=function(e){var t,r,n,i,a=this;if(e=new a.constructor(e),a.s!==e.s)return a.s||-e.s;if(a.e!==e.e)return a.e>e.e^a.s<0?1:-1;for(n=a.d.length,i=e.d.length,t=0,r=n<i?n:i;t<r;++t)if(a.d[t]!==e.d[t])return a.d[t]>e.d[t]^a.s<0?1:-1;return n===i?0:n>i^a.s<0?1:-1};se.decimalPlaces=se.dp=function(){var e=this,t=e.d.length-1,r=(t-e.e)*Qe;if(t=e.d[t],t)for(;t%10==0;t/=10)r--;return r<0?0:r};se.dividedBy=se.div=function(e){return Zn(this,new this.constructor(e))};se.dividedToIntegerBy=se.idiv=function(e){var t=this,r=t.constructor;return qe(Zn(t,new r(e),0,1),r.precision)};se.equals=se.eq=function(e){return!this.cmp(e)};se.exponent=function(){return mt(this)};se.greaterThan=se.gt=function(e){return this.cmp(e)>0};se.greaterThanOrEqualTo=se.gte=function(e){return this.cmp(e)>=0};se.isInteger=se.isint=function(){return this.e>this.d.length-2};se.isNegative=se.isneg=function(){return this.s<0};se.isPositive=se.ispos=function(){return this.s>0};se.isZero=function(){return this.s===0};se.lessThan=se.lt=function(e){return this.cmp(e)<0};se.lessThanOrEqualTo=se.lte=function(e){return this.cmp(e)<1};se.logarithm=se.log=function(e){var t,r=this,n=r.constructor,i=n.precision,a=i+5;if(e===void 0)e=new n(10);else if(e=new n(e),e.s<1||e.eq(kr))throw Error(Fr+"NaN");if(r.s<1)throw Error(Fr+(r.s?"NaN":"-Infinity"));return r.eq(kr)?new n(0):(et=!1,t=Zn(Jl(r,a),Jl(e,a),a),et=!0,qe(t,i))};se.minus=se.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?ZC(t,e):JC(t,(e.s=-e.s,e))};se.modulo=se.mod=function(e){var t,r=this,n=r.constructor,i=n.precision;if(e=new n(e),!e.s)throw Error(Fr+"NaN");return r.s?(et=!1,t=Zn(r,e,0,1).times(e),et=!0,r.minus(t)):qe(new n(r),i)};se.naturalExponential=se.exp=function(){return QC(this)};se.naturalLogarithm=se.ln=function(){return Jl(this)};se.negated=se.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};se.plus=se.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?JC(t,e):ZC(t,(e.s=-e.s,e))};se.precision=se.sd=function(e){var t,r,n,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(Na+e);if(t=mt(i)+1,n=i.d.length-1,r=n*Qe+1,n=i.d[n],n){for(;n%10==0;n/=10)r--;for(n=i.d[0];n>=10;n/=10)r++}return e&&t>r?t:r};se.squareRoot=se.sqrt=function(){var e,t,r,n,i,a,s,u=this,c=u.constructor;if(u.s<1){if(!u.s)return new c(0);throw Error(Fr+"NaN")}for(e=mt(u),et=!1,i=Math.sqrt(+u),i==0||i==1/0?(t=Cn(u.d),(t.length+e)%2==0&&(t+="0"),i=Math.sqrt(t),e=ps((e+1)/2)-(e<0||e%2),i==1/0?t="5e"+e:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),n=new c(t)):n=new c(i.toString()),r=c.precision,i=s=r+3;;)if(a=n,n=a.plus(Zn(u,a,s+2)).times(.5),Cn(a.d).slice(0,s)===(t=Cn(n.d)).slice(0,s)){if(t=t.slice(s-3,s+1),i==s&&t=="4999"){if(qe(a,r+1,0),a.times(a).eq(u)){n=a;break}}else if(t!="9999")break;s+=4}return et=!0,qe(n,r)};se.times=se.mul=function(e){var t,r,n,i,a,s,u,c,d,h=this,p=h.constructor,m=h.d,g=(e=new p(e)).d;if(!h.s||!e.s)return new p(0);for(e.s*=h.s,r=h.e+e.e,c=m.length,d=g.length,c<d&&(a=m,m=g,g=a,s=c,c=d,d=s),a=[],s=c+d,n=s;n--;)a.push(0);for(n=d;--n>=0;){for(t=0,i=c+n;i>n;)u=a[i]+g[n]*m[i-n-1]+t,a[i--]=u%Ct|0,t=u/Ct|0;a[i]=(a[i]+t)%Ct|0}for(;!a[--s];)a.pop();return t?++r:a.shift(),e.d=a,e.e=r,et?qe(e,p.precision):e};se.toDecimalPlaces=se.todp=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(Dn(e,0,hs),t===void 0?t=n.rounding:Dn(t,0,8),qe(r,e+mt(r)+1,t))};se.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=za(n,!0):(Dn(e,0,hs),t===void 0?t=i.rounding:Dn(t,0,8),n=qe(new i(n),e+1,t),r=za(n,!0,e+1)),r};se.toFixed=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?za(i):(Dn(e,0,hs),t===void 0?t=a.rounding:Dn(t,0,8),n=qe(new a(i),e+mt(i)+1,t),r=za(n.abs(),!1,e+mt(n)+1),i.isneg()&&!i.isZero()?"-"+r:r)};se.toInteger=se.toint=function(){var e=this,t=e.constructor;return qe(new t(e),mt(e)+1,t.rounding)};se.toNumber=function(){return+this};se.toPower=se.pow=function(e){var t,r,n,i,a,s,u=this,c=u.constructor,d=12,h=+(e=new c(e));if(!e.s)return new c(kr);if(u=new c(u),!u.s){if(e.s<1)throw Error(Fr+"Infinity");return u}if(u.eq(kr))return u;if(n=c.precision,e.eq(kr))return qe(u,n);if(t=e.e,r=e.d.length-1,s=t>=r,a=u.s,s){if((r=h<0?-h:h)<=XC){for(i=new c(kr),t=Math.ceil(n/Qe+4),et=!1;r%2&&(i=i.times(u),Mk(i.d,t)),r=ps(r/2),r!==0;)u=u.times(u),Mk(u.d,t);return et=!0,e.s<0?new c(kr).div(i):qe(i,n)}}else if(a<0)throw Error(Fr+"NaN");return a=a<0&&e.d[Math.max(t,r)]&1?-1:1,u.s=1,et=!1,i=e.times(Jl(u,n+d)),et=!0,i=QC(i),i.s=a,i};se.toPrecision=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?(r=mt(i),n=za(i,r<=a.toExpNeg||r>=a.toExpPos)):(Dn(e,1,hs),t===void 0?t=a.rounding:Dn(t,0,8),i=qe(new a(i),e,t),r=mt(i),n=za(i,e<=r||r<=a.toExpNeg,e)),n};se.toSignificantDigits=se.tosd=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(Dn(e,1,hs),t===void 0?t=n.rounding:Dn(t,0,8)),qe(new n(r),e,t)};se.toString=se.valueOf=se.val=se.toJSON=se[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=mt(e),r=e.constructor;return za(e,t<=r.toExpNeg||t>=r.toExpPos)};function JC(e,t){var r,n,i,a,s,u,c,d,h=e.constructor,p=h.precision;if(!e.s||!t.s)return t.s||(t=new h(e)),et?qe(t,p):t;if(c=e.d,d=t.d,s=e.e,i=t.e,c=c.slice(),a=s-i,a){for(a<0?(n=c,a=-a,u=d.length):(n=d,i=s,u=c.length),s=Math.ceil(p/Qe),u=s>u?s+1:u+1,a>u&&(a=u,n.length=1),n.reverse();a--;)n.push(0);n.reverse()}for(u=c.length,a=d.length,u-a<0&&(a=u,n=d,d=c,c=n),r=0;a;)r=(c[--a]=c[a]+d[a]+r)/Ct|0,c[a]%=Ct;for(r&&(c.unshift(r),++i),u=c.length;c[--u]==0;)c.pop();return t.d=c,t.e=i,et?qe(t,p):t}function Dn(e,t,r){if(e!==~~e||e<t||e>r)throw Error(Na+e)}function Cn(e){var t,r,n,i=e.length-1,a="",s=e[0];if(i>0){for(a+=s,t=1;t<i;t++)n=e[t]+"",r=Qe-n.length,r&&(a+=Li(r)),a+=n;s=e[t],n=s+"",r=Qe-n.length,r&&(a+=Li(r))}else if(s===0)return"0";for(;s%10===0;)s/=10;return a+s}var Zn=function(){function e(n,i){var a,s=0,u=n.length;for(n=n.slice();u--;)a=n[u]*i+s,n[u]=a%Ct|0,s=a/Ct|0;return s&&n.unshift(s),n}function t(n,i,a,s){var u,c;if(a!=s)c=a>s?1:-1;else for(u=c=0;u<a;u++)if(n[u]!=i[u]){c=n[u]>i[u]?1:-1;break}return c}function r(n,i,a){for(var s=0;a--;)n[a]-=s,s=n[a]<i[a]?1:0,n[a]=s*Ct+n[a]-i[a];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,a,s){var u,c,d,h,p,m,g,b,w,S,k,A,P,C,N,j,M,F,W=n.constructor,H=n.s==i.s?1:-1,Y=n.d,B=i.d;if(!n.s)return new W(n);if(!i.s)throw Error(Fr+"Division by zero");for(c=n.e-i.e,M=B.length,N=Y.length,g=new W(H),b=g.d=[],d=0;B[d]==(Y[d]||0);)++d;if(B[d]>(Y[d]||0)&&--c,a==null?A=a=W.precision:s?A=a+(mt(n)-mt(i))+1:A=a,A<0)return new W(0);if(A=A/Qe+2|0,d=0,M==1)for(h=0,B=B[0],A++;(d<N||h)&&A--;d++)P=h*Ct+(Y[d]||0),b[d]=P/B|0,h=P%B|0;else{for(h=Ct/(B[0]+1)|0,h>1&&(B=e(B,h),Y=e(Y,h),M=B.length,N=Y.length),C=M,w=Y.slice(0,M),S=w.length;S<M;)w[S++]=0;F=B.slice(),F.unshift(0),j=B[0],B[1]>=Ct/2&&++j;do h=0,u=t(B,w,M,S),u<0?(k=w[0],M!=S&&(k=k*Ct+(w[1]||0)),h=k/j|0,h>1?(h>=Ct&&(h=Ct-1),p=e(B,h),m=p.length,S=w.length,u=t(p,w,m,S),u==1&&(h--,r(p,M<m?F:B,m))):(h==0&&(u=h=1),p=B.slice()),m=p.length,m<S&&p.unshift(0),r(w,p,S),u==-1&&(S=w.length,u=t(B,w,M,S),u<1&&(h++,r(w,M<S?F:B,S))),S=w.length):u===0&&(h++,w=[0]),b[d++]=h,u&&w[0]?w[S++]=Y[C]||0:(w=[Y[C]],S=1);while((C++<N||w[0]!==void 0)&&A--)}return b[0]||b.shift(),g.e=c,qe(g,s?a+mt(g)+1:a)}}();function QC(e,t){var r,n,i,a,s,u,c=0,d=0,h=e.constructor,p=h.precision;if(mt(e)>16)throw Error(Zy+mt(e));if(!e.s)return new h(kr);for(et=!1,u=p,s=new h(.03125);e.abs().gte(.1);)e=e.times(s),d+=5;for(n=Math.log(Sa(2,d))/Math.LN10*2+5|0,u+=n,r=i=a=new h(kr),h.precision=u;;){if(i=qe(i.times(e),u),r=r.times(++c),s=a.plus(Zn(i,r,u)),Cn(s.d).slice(0,u)===Cn(a.d).slice(0,u)){for(;d--;)a=qe(a.times(a),u);return h.precision=p,t==null?(et=!0,qe(a,p)):a}a=s}}function mt(e){for(var t=e.e*Qe,r=e.d[0];r>=10;r/=10)t++;return t}function Dm(e,t,r){if(t>e.LN10.sd())throw et=!0,r&&(e.precision=r),Error(Fr+"LN10 precision limit exceeded");return qe(new e(e.LN10),t)}function Li(e){for(var t="";e--;)t+="0";return t}function Jl(e,t){var r,n,i,a,s,u,c,d,h,p=1,m=10,g=e,b=g.d,w=g.constructor,S=w.precision;if(g.s<1)throw Error(Fr+(g.s?"NaN":"-Infinity"));if(g.eq(kr))return new w(0);if(t==null?(et=!1,d=S):d=t,g.eq(10))return t==null&&(et=!0),Dm(w,d);if(d+=m,w.precision=d,r=Cn(b),n=r.charAt(0),a=mt(g),Math.abs(a)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)g=g.times(e),r=Cn(g.d),n=r.charAt(0),p++;a=mt(g),n>1?(g=new w("0."+r),a++):g=new w(n+"."+r.slice(1))}else return c=Dm(w,d+2,S).times(a+""),g=Jl(new w(n+"."+r.slice(1)),d-m).plus(c),w.precision=S,t==null?(et=!0,qe(g,S)):g;for(u=s=g=Zn(g.minus(kr),g.plus(kr),d),h=qe(g.times(g),d),i=3;;){if(s=qe(s.times(h),d),c=u.plus(Zn(s,new w(i),d)),Cn(c.d).slice(0,d)===Cn(u.d).slice(0,d))return u=u.times(2),a!==0&&(u=u.plus(Dm(w,d+2,S).times(a+""))),u=Zn(u,new w(p),d),w.precision=S,t==null?(et=!0,qe(u,S)):u;u=c,i+=2}}function Dk(e,t){var r,n,i;for((r=t.indexOf("."))>-1&&(t=t.replace(".","")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;)++n;for(i=t.length;t.charCodeAt(i-1)===48;)--i;if(t=t.slice(n,i),t){if(i-=n,r=r-n-1,e.e=ps(r/Qe),e.d=[],n=(r+1)%Qe,r<0&&(n+=Qe),n<i){for(n&&e.d.push(+t.slice(0,n)),i-=Qe;n<i;)e.d.push(+t.slice(n,n+=Qe));t=t.slice(n),n=Qe-t.length}else n-=i;for(;n--;)t+="0";if(e.d.push(+t),et&&(e.e>Kd||e.e<-Kd))throw Error(Zy+r)}else e.s=0,e.e=0,e.d=[0];return e}function qe(e,t,r){var n,i,a,s,u,c,d,h,p=e.d;for(s=1,a=p[0];a>=10;a/=10)s++;if(n=t-s,n<0)n+=Qe,i=t,d=p[h=0];else{if(h=Math.ceil((n+1)/Qe),a=p.length,h>=a)return e;for(d=a=p[h],s=1;a>=10;a/=10)s++;n%=Qe,i=n-Qe+s}if(r!==void 0&&(a=Sa(10,s-i-1),u=d/a%10|0,c=t<0||p[h+1]!==void 0||d%a,c=r<4?(u||c)&&(r==0||r==(e.s<0?3:2)):u>5||u==5&&(r==4||c||r==6&&(n>0?i>0?d/Sa(10,s-i):0:p[h-1])%10&1||r==(e.s<0?8:7))),t<1||!p[0])return c?(a=mt(e),p.length=1,t=t-a-1,p[0]=Sa(10,(Qe-t%Qe)%Qe),e.e=ps(-t/Qe)||0):(p.length=1,p[0]=e.e=e.s=0),e;if(n==0?(p.length=h,a=1,h--):(p.length=h+1,a=Sa(10,Qe-n),p[h]=i>0?(d/Sa(10,s-i)%Sa(10,i)|0)*a:0),c)for(;;)if(h==0){(p[0]+=a)==Ct&&(p[0]=1,++e.e);break}else{if(p[h]+=a,p[h]!=Ct)break;p[h--]=0,a=1}for(n=p.length;p[--n]===0;)p.pop();if(et&&(e.e>Kd||e.e<-Kd))throw Error(Zy+mt(e));return e}function ZC(e,t){var r,n,i,a,s,u,c,d,h,p,m=e.constructor,g=m.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new m(e),et?qe(t,g):t;if(c=e.d,p=t.d,n=t.e,d=e.e,c=c.slice(),s=d-n,s){for(h=s<0,h?(r=c,s=-s,u=p.length):(r=p,n=d,u=c.length),i=Math.max(Math.ceil(g/Qe),u)+2,s>i&&(s=i,r.length=1),r.reverse(),i=s;i--;)r.push(0);r.reverse()}else{for(i=c.length,u=p.length,h=i<u,h&&(u=i),i=0;i<u;i++)if(c[i]!=p[i]){h=c[i]<p[i];break}s=0}for(h&&(r=c,c=p,p=r,t.s=-t.s),u=c.length,i=p.length-u;i>0;--i)c[u++]=0;for(i=p.length;i>s;){if(c[--i]<p[i]){for(a=i;a&&c[--a]===0;)c[a]=Ct-1;--c[a],c[i]+=Ct}c[i]-=p[i]}for(;c[--u]===0;)c.pop();for(;c[0]===0;c.shift())--n;return c[0]?(t.d=c,t.e=n,et?qe(t,g):t):new m(0)}function za(e,t,r){var n,i=mt(e),a=Cn(e.d),s=a.length;return t?(r&&(n=r-s)>0?a=a.charAt(0)+"."+a.slice(1)+Li(n):s>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(i<0?"e":"e+")+i):i<0?(a="0."+Li(-i-1)+a,r&&(n=r-s)>0&&(a+=Li(n))):i>=s?(a+=Li(i+1-s),r&&(n=r-i-1)>0&&(a=a+"."+Li(n))):((n=i+1)<s&&(a=a.slice(0,n)+"."+a.slice(n)),r&&(n=r-s)>0&&(i+1===s&&(a+="."),a+=Li(n))),e.s<0?"-"+a:a}function Mk(e,t){if(e.length>t)return e.length=t,!0}function ej(e){var t,r,n;function i(a){var s=this;if(!(s instanceof i))return new i(a);if(s.constructor=i,a instanceof i){s.s=a.s,s.e=a.e,s.d=(a=a.d)?a.slice():a;return}if(typeof a=="number"){if(a*0!==0)throw Error(Na+a);if(a>0)s.s=1;else if(a<0)a=-a,s.s=-1;else{s.s=0,s.e=0,s.d=[0];return}if(a===~~a&&a<1e7){s.e=0,s.d=[a];return}return Dk(s,a.toString())}else if(typeof a!="string")throw Error(Na+a);if(a.charCodeAt(0)===45?(a=a.slice(1),s.s=-1):s.s=1,bW.test(a))Dk(s,a);else throw Error(Na+a)}if(i.prototype=se,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=ej,i.config=i.set=xW,e===void 0&&(e={}),e)for(n=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t<n.length;)e.hasOwnProperty(r=n[t++])||(e[r]=this[r]);return i.config(e),i}function xW(e){if(!e||typeof e!="object")throw Error(Fr+"Object expected");var t,r,n,i=["precision",1,hs,"rounding",0,8,"toExpNeg",-1/0,0,"toExpPos",0,1/0];for(t=0;t<i.length;t+=3)if((n=e[r=i[t]])!==void 0)if(ps(n)===n&&n>=i[t+1]&&n<=i[t+2])this[r]=n;else throw Error(Na+r+": "+n);if((n=e[r="LN10"])!==void 0)if(n==Math.LN10)this[r]=new this(n);else throw Error(Na+r+": "+n);return this}var e0=ej(wW);kr=new e0(1);const Ce=e0;function tj(e){var t;return e===0?t=1:t=Math.floor(new Ce(e).abs().log(10).toNumber())+1,t}function rj(e,t,r){for(var n=new Ce(e),i=0,a=[];n.lt(t)&&i<1e5;)a.push(n.toNumber()),n=n.add(r),i++;return a}var nj=e=>{var[t,r]=e,[n,i]=[t,r];return t>r&&([n,i]=[r,t]),[n,i]},t0=(e,t,r)=>{if(e.lte(0))return new Ce(0);var n=tj(e.toNumber()),i=new Ce(10).pow(n),a=e.div(i),s=n!==1?.05:.1,u=new Ce(Math.ceil(a.div(s).toNumber())).add(r).mul(s),c=u.mul(i);return t?new Ce(c.toNumber()):new Ce(Math.ceil(c.toNumber()))},ij=(e,t,r)=>{var n;if(e.lte(0))return new Ce(0);var i=[1,2,2.5,5],a=e.toNumber(),s=Math.floor(new Ce(a).abs().log(10).toNumber()),u=new Ce(10).pow(s),c=e.div(u).toNumber(),d=i.findIndex(g=>g>=c-1e-10);if(d===-1&&(u=u.mul(10),d=0),d+=r,d>=i.length){var h=Math.floor(d/i.length);d%=i.length,u=u.mul(new Ce(10).pow(h))}var p=(n=i[d])!==null&&n!==void 0?n:1,m=new Ce(p).mul(u);return t?m:new Ce(Math.ceil(m.toNumber()))}