p;h<t;++h)u[(p=c[h]).i]=p.x(d);return u.join("")})}function ms(e,t){var r=typeof t,n;return t==null||r==="boolean"?p0(t):(r==="number"?Jd:r==="string"?(n=eu(t))?(t=n,eP):m6:t instanceof eu?eP:t instanceof Date?f6:c6(t)?u6:Array.isArray(t)?d6:typeof t.valueOf!="function"&&typeof t.toString!="function"||isNaN(t)?h6:Jd)(e,t)}function v0(e,t){return e=+e,t=+t,function(r){return Math.round(e*(1-r)+t*r)}}function g6(e,t){t===void 0&&(t=e,e=ms);for(var r=0,n=t.length-1,i=t[0],a=new Array(n<0?0:n);r<n;)a[r]=e(i,i=t[++r]);return function(s){var u=Math.max(0,Math.min(n-1,Math.floor(s*=n)));return a[u](s-u)}}function y6(e){return function(){return e}}function Qd(e){return+e}var tP=[0,1];function rr(e){return e}function ay(e,t){return(t-=e=+e)?function(r){return(r-e)/t}:y6(isNaN(t)?NaN:.5)}function w6(e,t){var r;return e>t&&(r=e,e=t,t=r),function(n){return Math.max(e,Math.min(t,n))}}function b6(e,t,r){var n=e[0],i=e[1],a=t[0],s=t[1];return i<n?(n=ay(i,n),a=r(s,a)):(n=ay(n,i),a=r(a,s)),function(u){return a(n(u))}}function x6(e,t,r){var n=Math.min(e.length,t.length)-1,i=new Array(n),a=new Array(n),s=-1;for(e[n]<e[0]&&(e=e.slice().reverse(),t=t.slice().reverse());++s<n;)i[s]=ay(e[s],e[s+1]),a[s]=r(t[s],t[s+1]);return function(u){var c=mu(e,u,1,n)-1;return a[c](i[c](u))}}function yu(e,t){return t.domain(e.domain()).range(e.range()).interpolate(e.interpolate()).clamp(e.clamp()).unknown(e.unknown())}function oh(){var e=tP,t=tP,r=ms,n,i,a,s=rr,u,c,d;function h(){var m=Math.min(e.length,t.length);return s!==rr&&(s=w6(e[0],e[m-1])),u=m>2?x6:b6,c=d=null,p}function p(m){return m==null||isNaN(m=+m)?a:(c||(c=u(e.map(n),t,r)))(n(s(m)))}return p.invert=function(m){return s(i((d||(d=u(t,e.map(n),Jd)))(m)))},p.domain=function(m){return arguments.length?(e=Array.from(m,Qd),h()):e.slice()},p.range=function(m){return arguments.length?(t=Array.from(m),h()):t.slice()},p.rangeRound=function(m){return t=Array.from(m),r=v0,h()},p.clamp=function(m){return arguments.length?(s=m?!0:rr,h()):s!==rr},p.interpolate=function(m){return arguments.length?(r=m,h()):r},p.unknown=function(m){return arguments.length?(a=m,p):a},function(m,g){return n=m,i=g,h()}}function m0(){return oh()(rr,rr)}function _6(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function Zd(e,t){if(!isFinite(e)||e===0)return null;var r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"),n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function as(e){return e=Zd(Math.abs(e)),e?e[1]:NaN}function S6(e,t){return function(r,n){for(var i=r.length,a=[],s=0,u=e[0],c=0;i>0&&u>0&&(c+u+1>n&&(u=Math.max(1,n-c)),a.push(r.substring(i-=u,i+u)),!((c+=u+1)>n));)u=e[s=(s+1)%e.length];return a.reverse().join(t)}}function k6(e){return function(t){return t.replace(/[0-9]/g,function(r){return e[+r]})}}var P6=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function tu(e){if(!(t=P6.exec(e)))throw new Error("invalid format: "+e);var t;return new g0({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}tu.prototype=g0.prototype;function g0(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}g0.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function E6(e){e:for(var t=e.length,r=1,n=-1,i;r<t;++r)switch(e[r]){case".":n=i=r;break;case"0":n===0&&(n=r),i=r;break;default:if(!+e[r])break e;n>0&&(n=0);break}return n>0?e.slice(0,n)+e.slice(i+1):e}var ef;function O6(e,t){var r=Zd(e,t);if(!r)return ef=void 0,e.toPrecision(t);var n=r[0],i=r[1],a=i-(ef=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=n.length;return a===s?n:a>s?n+new Array(a-s+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+Zd(e,Math.max(0,t+a-1))[0]}function rP(e,t){var r=Zd(e,t);if(!r)return e+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const nP={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:_6,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>rP(e*100,t),r:rP,s:O6,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function iP(e){return e}var aP=Array.prototype.map,oP=["y","z","a","f","p","n","Âµ","m","","k","M","G","T","P","E","Z","Y"];function A6(e){var t=e.grouping===void 0||e.thousands===void 0?iP:S6(aP.call(e.grouping,Number),e.thousands+""),r=e.currency===void 0?"":e.currency[0]+"",n=e.currency===void 0?"":e.currency[1]+"",i=e.decimal===void 0?".":e.decimal+"",a=e.numerals===void 0?iP:k6(aP.call(e.numerals,String)),s=e.percent===void 0?"%":e.percent+"",u=e.minus===void 0?"â’":e.minus+"",c=e.nan===void 0?"NaN":e.nan+"";function d(p,m){p=tu(p);var g=p.fill,b=p.align,w=p.sign,S=p.symbol,k=p.zero,A=p.width,P=p.comma,C=p.precision,N=p.trim,j=p.type;j==="n"?(P=!0,j="g"):nP[j]||(C===void 0&&(C=12),N=!0,j="g"),(k||g==="0"&&b==="=")&&(k=!0,g="0",b="=");var M=(m&&m.prefix!==void 0?m.prefix:"")+(S==="$"?r:S==="#"&&/[boxX]/.test(j)?"0"+j.toLowerCase():""),F=(S==="$"?n:/[%p]/.test(j)?s:"")+(m&&m.suffix!==void 0?m.suffix:""),W=nP[j],H=/[defgprs%]/.test(j);C=C===void 0?6:/[gprs]/.test(j)?Math.max(1,Math.min(21,C)):Math.max(0,Math.min(20,C));function Y(B){var pe=M,ie=F,me,_e,he;if(j==="c")ie=W(B)+ie,B="";else{B=+B;var K=B<0||1/B<0;if(B=isNaN(B)?c:W(Math.abs(B),C),N&&(B=E6(B)),K&&+B==0&&w!=="+"&&(K=!1),pe=(K?w==="("?w:u:w==="-"||w==="("?"":w)+pe,ie=(j==="s"&&!isNaN(B)&&ef!==void 0?oP[8+ef/3]:"")+ie+(K&&w==="("?")":""),H){for(me=-1,_e=B.length;++me<_e;)if(he=B.charCodeAt(me),48>he||he>57){ie=(he===46?i+B.slice(me+1):B.slice(me))+ie,B=B.slice(0,me);break}}}P&&!k&&(B=t(B,1/0));var Q=pe.length+B.length+ie.length,X=Q<A?new Array(A-Q+1).join(g):"";switch(P&&k&&(B=t(X+B,X.length?A-ie.length:1/0),X=""),b){case"<":B=pe+B+ie+X;break;case"=":B=pe+X+B+ie;break;case"^":B=X.slice(0,Q=X.length>>1)+pe+B+ie+X.slice(Q);break;default:B=X+pe+B+ie;break}return a(B)}return Y.toString=function(){return p+""},Y}function h(p,m){var g=Math.max(-8,Math.min(8,Math.floor(as(m)/3)))*3,b=Math.pow(10,-g),w=d((p=tu(p),p.type="f",p),{suffix:oP[8+g/3]});return function(S){return w(b*S)}}return{format:d,formatPrefix:h}}var ed,y0,Sj;C6({thousands:",",grouping:[3],currency:["$",""]});function C6(e){return ed=A6(e),y0=ed.format,Sj=ed.formatPrefix,ed}function j6(e){return Math.max(0,-as(Math.abs(e)))}function T6(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(as(t)/3)))*3-as(Math.abs(e)))}function N6(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,as(t)-as(e))+1}function kj(e,t,r,n){var i=ty(e,t,r),a;switch(n=tu(n??",f"),n.type){case"s":{var s=Math.max(Math.abs(e),Math.abs(t));return n.precision==null&&!isNaN(a=T6(i,s))&&(n.precision=a),Sj(n,s)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=N6(i,Math.max(Math.abs(e),Math.abs(t))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=j6(i))&&(n.precision=a-(n.type==="%")*2);break}}return y0(n)}function Zi(e){var t=e.domain;return e.ticks=function(r){var n=t();return Zg(n[0],n[n.length-1],r??10)},e.tickFormat=function(r,n){var i=t();return kj(i[0],i[i.length-1],r??10,n)},e.nice=function(r){r==null&&(r=10);var n=t(),i=0,a=n.length-1,s=n[i],u=n[a],c,d,h=10;for(u<s&&(d=s,s=u,u=d,d=i,i=a,a=d);h-- >0;){if(d=ey(s,u,r),d===c)return n[i]=s,n[a]=u,t(n);if(d>0)s=Math.floor(s/d)*d,u=Math.ceil(u/d)*d;else if(d<0)s=Math.ceil(s*d)/d,u=Math.floor(u*d)/d;else break;c=d}return e},e}function Pj(){var e=m0();return e.copy=function(){return yu(e,Pj())},qr.apply(e,arguments),Zi(e)}function Ej(e){var t;function r(n){return n==null||isNaN(n=+n)?t:n}return r.invert=r,r.domain=r.range=function(n){return arguments.length?(e=Array.from(n,Qd),r):e.slice()},r.unknown=function(n){return arguments.length?(t=n,r):t},r.copy=function(){return Ej(e).unknown(t)},e=arguments.length?Array.from(e,Qd):[0,1],Zi(r)}function Oj(e,t){e=e.slice();var r=0,n=e.length-1,i=e[r],a=e[n],s;return a<i&&(s=r,r=n,n=s,s=i,i=a,a=s),e[r]=t.floor(i),e[n]=t.ceil(a),e}function sP(e){return Math.log(e)}function lP(e){return Math.exp(e)}function I6(e){return-Math.log(-e)}function R6(e){return-Math.exp(-e)}function D6(e){return isFinite(e)?+("1e"+e):e<0?0:e}function M6(e){return e===10?D6:e===Math.E?Math.exp:t=>Math.pow(e,t)}function $6(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function uP(e){return(t,r)=>-e(-t,r)}function w0(e){const t=e(sP,lP),r=t.domain;let n=10,i,a;function s(){return i=$6(n),a=M6(n),r()[0]<0?(i=uP(i),a=uP(a),e(I6,R6)):e(sP,lP),t}return t.base=function(u){return arguments.length?(n=+u,s()):n},t.domain=function(u){return arguments.length?(r(u),s()):r()},t.ticks=u=>{const c=r();let d=c[0],h=c[c.length-1];const p=h<d;p&&([d,h]=[h,d]);let m=i(d),g=i(h),b,w;const S=u==null?10:+u;let k=[];if(!(n%1)&&g-m<S){if(m=Math.floor(m),g=Math.ceil(g),d>0){for(;m<=g;++m)for(b=1;b<n;++b)if(w=m<0?b/a(-m):b*a(m),!(w<d)){if(w>h)break;k.push(w)}}else for(;m<=g;++m)for(b=n-1;b>=1;--b)if(w=m>0?b/a(-m):b*a(m),!(w<d)){if(w>h)break;k.push(w)}k.length*2<S&&(k=Zg(d,h,S))}else k=Zg(m,g,Math.min(g-m,S)).map(a);return p?k.reverse():k},t.tickFormat=(u,c)=>{if(u==null&&(u=10),c==null&&(c=n===10?"s":","),typeof c!="function"&&(!(n%1)&&(c=tu(c)).precision==null&&(c.trim=!0),c=y0(c)),u===1/0)return c;const d=Math.max(1,n*u/t.ticks().length);return h=>{let p=h/a(Math.round(i(h)));return p*n<n-.5&&(p*=n),p<=d?c(h):""}},t.nice=()=>r(Oj(r(),{floor:u=>a(Math.floor(i(u))),ceil:u=>a(Math.ceil(i(u)))})),t}function Aj(){const e=w0(oh()).domain([1,10]);return e.copy=()=>yu(e,Aj()).base(e.base()),qr.apply(e,arguments),e}function cP(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function dP(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function b0(e){var t=1,r=e(cP(t),dP(t));return r.constant=function(n){return arguments.length?e(cP(t=+n),dP(t)):t},Zi(r)}function Cj(){var e=b0(oh());return e.copy=function(){return yu(e,Cj()).constant(e.constant())},qr.apply(e,arguments)}function fP(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function L6(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function z6(e){return e<0?-e*e:e*e}function x0(e){var t=e(rr,rr),r=1;function n(){return r===1?e(rr,rr):r===.5?e(L6,z6):e(fP(r),fP(1/r))}return t.exponent=function(i){return arguments.length?(r=+i,n()):r},Zi(t)}function _0(){var e=x0(oh());return e.copy=function(){return yu(e,_0()).exponent(e.exponent())},qr.apply(e,arguments),e}function U6(){return _0.apply(null,arguments).exponent(.5)}function hP(e){return Math.sign(e)*e*e}function B6(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function jj(){var e=m0(),t=[0,1],r=!1,n;function i(a){var s=B6(e(a));return isNaN(s)?n:r?Math.round(s):s}return i.invert=function(a){return e.invert(hP(a))},i.domain=function(a){return arguments.length?(e.domain(a),i):e.domain()},i.range=function(a){return arguments.length?(e.range((t=Array.from(a,Qd)).map(hP)),i):t.slice()},i.rangeRound=function(a){return i.range(a).round(!0)},i.round=function(a){return arguments.length?(r=!!a,i):r},i.clamp=function(a){return arguments.length?(e.clamp(a),i):e.clamp()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return jj(e.domain(),t).round(r).clamp(e.clamp()).unknown(n)},qr.apply(i,arguments),Zi(i)}function Tj(){var e=[],t=[],r=[],n;function i(){var s=0,u=Math.max(1,t.length);for(r=new Array(u-1);++s<u;)r[s-1]=HW(e,s/u);return a}function a(s){return s==null||isNaN(s=+s)?n:t[mu(r,s)]}return a.invertExtent=function(s){var u=t.indexOf(s);return u<0?[NaN,NaN]:[u>0?r[u-1]:e[0],u<r.length?r[u]:e[e.length-1]]},a.domain=function(s){if(!arguments.length)return e.slice();e=[];for(let u of s)u!=null&&!isNaN(u=+u)&&e.push(u);return e.sort(Ki),i()},a.range=function(s){return arguments.length?(t=Array.from(s),i()):t.slice()},a.unknown=function(s){return arguments.length?(n=s,a):n},a.quantiles=function(){return r.slice()},a.copy=function(){return Tj().domain(e).range(t).unknown(n)},qr.apply(a,arguments)}function Nj(){var e=0,t=1,r=1,n=[.5],i=[0,1],a;function s(c){return c!=null&&c<=c?i[mu(n,c,0,r)]:a}function u(){var c=-1;for(n=new Array(r);++c<r;)n[c]=((c+1)*t-(c-r)*e)/(r+1);return s}return s.domain=function(c){return arguments.length?([e,t]=c,e=+e,t=+t,u()):[e,t]},s.range=function(c){return arguments.length?(r=(i=Array.from(c)).length-1,u()):i.slice()},s.invertExtent=function(c){var d=i.indexOf(c);return d<0?[NaN,NaN]:d<1?[e,n[0]]:d>=r?[n[r-1],t]:[n[d-1],n[d]]},s.unknown=function(c){return arguments.length&&(a=c),s},s.thresholds=function(){return n.slice()},s.copy=function(){return Nj().domain([e,t]).range(i).unknown(a)},qr.apply(Zi(s),arguments)}function Ij(){var e=[.5],t=[0,1],r,n=1;function i(a){return a!=null&&a<=a?t[mu(e,a,0,n)]:r}return i.domain=function(a){return arguments.length?(e=Array.from(a),n=Math.min(e.length,t.length-1),i):e.slice()},i.range=function(a){return arguments.length?(t=Array.from(a),n=Math.min(e.length,t.length-1),i):t.slice()},i.invertExtent=function(a){var s=t.indexOf(a);return[e[s-1],e[s]]},i.unknown=function(a){return arguments.length?(r=a,i):r},i.copy=function(){return Ij().domain(e).range(t).unknown(r)},qr.apply(i,arguments)}const Lm=new Date,zm=new Date;function St(e,t,r,n){function i(a){return e(a=arguments.length===0?new Date:new Date(+a)),a}return i.floor=a=>(e(a=new Date(+a)),a),i.ceil=a=>(e(a=new Date(a-1)),t(a,1),e(a),a),i.round=a=>{const s=i(a),u=i.ceil(a);return a-s<u-a?s:u},i.offset=(a,s)=>(t(a=new Date(+a),s==null?1:Math.floor(s)),a),i.range=(a,s,u)=>{const c=[];if(a=i.ceil(a),u=u==null?1:Math.floor(u),!(a<s)||!(u>0))return c;let d;do c.push(d=new Date(+a)),t(a,u),e(a);while(d<a&&a<s);return c},i.filter=a=>St(s=>{if(s>=s)for(;e(s),!a(s);)s.setTime(s-1)},(s,u)=>{if(s>=s)if(u<0)for(;++u<=0;)for(;t(s,-1),!a(s););else for(;--u>=0;)for(;t(s,1),!a(s););}),r&&(i.count=(a,s)=>(Lm.setTime(+a),zm.setTime(+s),e(Lm),e(zm),Math.floor(r(Lm,zm))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?s=>n(s)%a===0:s=>i.count(0,s)%a===0):i)),i}const tf=St(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);tf.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?St(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):tf);tf.range;const Jn=1e3,Br=Jn*60,Qn=Br*60,ri=Qn*24,S0=ri*7,pP=ri*30,Um=ri*365,Aa=St(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*Jn)},(e,t)=>(t-e)/Jn,e=>e.getUTCSeconds());Aa.range;const k0=St(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Jn)},(e,t)=>{e.setTime(+e+t*Br)},(e,t)=>(t-e)/Br,e=>e.getMinutes());k0.range;const P0=St(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*Br)},(e,t)=>(t-e)/Br,e=>e.getUTCMinutes());P0.range;const E0=St(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Jn-e.getMinutes()*Br)},(e,t)=>{e.setTime(+e+t*Qn)},(e,t)=>(t-e)/Qn,e=>e.getHours());E0.range;const O0=St(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*Qn)},(e,t)=>(t-e)/Qn,e=>e.getUTCHours());O0.range;const wu=St(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Br)/ri,e=>e.getDate()-1);wu.range;const sh=St(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/ri,e=>e.getUTCDate()-1);sh.range;const Rj=St(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/ri,e=>Math.floor(e/ri));Rj.range;function Ga(e){return St(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*Br)/S0)}const lh=Ga(0),rf=Ga(1),F6=Ga(2),W6=Ga(3),os=Ga(4),q6=Ga(5),H6=Ga(6);lh.range;rf.range;F6.range;W6.range;os.range;q6.range;H6.range;function Ya(e){return St(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/S0)}const uh=Ya(0),nf=Ya(1),K6=Ya(2),V6=Ya(3),ss=Ya(4),G6=Ya(5),Y6=Ya(6);uh.range;nf.range;K6.range;V6.range;ss.range;G6.range;Y6.range;const A0=St(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());A0.range;const C0=St(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());C0.range;const ni=St(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());ni.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:St(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});ni.range;const ii=St(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());ii.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:St(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});ii.range;function Dj(e,t,r,n,i,a){const s=[[Aa,1,Jn],[Aa,5,5*Jn],[Aa,15,15*Jn],[Aa,30,30*Jn],[a,1,Br],[a,5,5*Br],[a,15,15*Br],[a,30,30*Br],[i,1,Qn],[i,3,3*Qn],[i,6,6*Qn],[i,12,12*Qn],[n,1,ri],[n,2,2*ri],[r,1,S0],[t,1,pP],[t,3,3*pP],[e,1,Um]];function u(d,h,p){const m=h<d;m&&([d,h]=[h,d]);const g=p&&typeof p.range=="function"?p:c(d,h,p),b=g?g.range(d,+h+1):[];return m?b.reverse():b}function c(d,h,p){const m=Math.abs(h-d)/p,g=c0(([,,S])=>S).right(s,m);if(g===s.length)return e.every(ty(d/Um,h/Um,p));if(g===0)return tf.every(Math.max(ty(d,h,p),1));const[b,w]=s[m/s[g-1][2]<s[g][2]/m?g-1:g];return b.every(w)}return[u,c]}const[X6,J6]=Dj(ii,C0,uh,Rj,O0,P0),[Q6,Z6]=Dj(ni,A0,lh,wu,E0,k0);function Bm(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function Fm(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function ml(e,t,r){return{y:e,m:t,d:r,H:0,M:0,S:0,L:0}}function eq(e){var t=e.dateTime,r=e.date,n=e.time,i=e.periods,a=e.days,s=e.shortDays,u=e.months,c=e.shortMonths,d=gl(i),h=yl(i),p=gl(a),m=yl(a),g=gl(s),b=yl(s),w=gl(u),S=yl(u),k=gl(c),A=yl(c),P={a:he,A:K,b:Q,B:X,c:null,d:bP,e:bP,f:Sq,g:Iq,G:Dq,H:bq,I:xq,j:_q,L:Mj,m:kq,M:Pq,p:D,q,Q:SP,s:kP,S:Eq,u:Oq,U:Aq,V:Cq,w:jq,W:Tq,x:null,X:null,y:Nq,Y:Rq,Z:Mq,"%":_P},C={a:ge,A:ye,b:Pe,B:Ee,c:null,d:xP,e:xP,f:Uq,g:Xq,G:Qq,H:$q,I:Lq,j:zq,L:Lj,m:Bq,M:Fq,p:Ne,q:ke,Q:SP,s:kP,S:Wq,u:qq,U:Hq,V:Kq,w:Vq,W:Gq,x:null,X:null,y:Yq,Y:Jq,Z:Zq,"%":_P},N={a:H,A:Y,b:B,B:pe,c:ie,d:yP,e:yP,f:mq,g:gP,G:mP,H:wP,I:wP,j:fq,L:vq,m:dq,M:hq,p:W,q:cq,Q:yq,s:wq,S:pq,u:aq,U:oq,V:sq,w:iq,W:lq,x:me,X:_e,y:gP,Y:mP,Z:uq,"%":gq};P.x=j(r,P),P.X=j(n,P),P.c=j(t,P),C.x=j(r,C),C.X=j(n,C),C.c=j(t,C);function j(ee,re){return function(Ae){var Z=[],gt=-1,De=0,Ft=ee.length,Wt,Kr,xs;for(Ae instanceof Date||(Ae=new Date(+Ae));++gt<Ft;)ee.charCodeAt(gt)===37&&(Z.push(ee.slice(De,gt)),(Kr=vP[Wt=ee.charAt(++gt)])!=null?Wt=ee.charAt(++gt):Kr=Wt==="e"?" ":"0",(xs=re[Wt])&&(Wt=xs(Ae,Kr)),Z.push(Wt),De=gt+1);return Z.push(ee.slice(De,gt)),Z.join("")}}function M(ee,re){return function(Ae){var Z=ml(1900,void 0,1),gt=F(Z,ee,Ae+="",0),De,Ft;if(gt!=Ae.length)return null;if("Q"in Z)return new Date(Z.Q);if("s"in Z)return new Date(Z.s*1e3+("L"in Z?Z.L:0));if(re&&!("Z"in Z)&&(Z.Z=0),"p"in Z&&(Z.H=Z.H%12+Z.p*12),Z.m===void 0&&(Z.m="q"in Z?Z.q:0),"V"in Z){if(Z.V<1||Z.V>53)return null;"w"in Z||(Z.w=1),"Z"in Z?(De=Fm(ml(Z.y,0,1)),Ft=De.getUTCDay(),De=Ft>4||Ft===0?nf.ceil(De):nf(De),De=sh.offset(De,(Z.V-1)*7),Z.y=De.getUTCFullYear(),Z.m=De.getUTCMonth(),Z.d=De.getUTCDate()+(Z.w+6)%7):(De=Bm(ml(Z.y,0,1)),Ft=De.getDay(),De=Ft>4||Ft===0?rf.ceil(De):rf(De),De=wu.offset(De,(Z.V-1)*7),Z.y=De.getFullYear(),Z.m=De.getMonth(),Z.d=De.getDate()+(Z.w+6)%7)}else("W"in Z||"U"in Z)&&("w"in Z||(Z.w="u"in Z?Z.u%7:"W"in Z?1:0),Ft="Z"in Z?Fm(ml(Z.y,0,1)).getUTCDay():Bm(ml(Z.y,0,1)).getDay(),Z.m=0,Z.d="W"in Z?(Z.w+6)%7+Z.W*7-(Ft+5)%7:Z.w+Z.U*7-(Ft+6)%7);return"Z"in Z?(Z.H+=Z.Z/100|0,Z.M+=Z.Z%100,Fm(Z)):Bm(Z)}}function F(ee,re,Ae,Z){for(var gt=0,De=re.length,Ft=Ae.length,Wt,Kr;gt<De;){if(Z>=Ft)return-1;if(Wt=re.charCodeAt(gt++),Wt===37){if(Wt=re.charAt(gt++),Kr=N[Wt in vP?re.charAt(gt++):Wt],!Kr||(Z=Kr(ee,Ae,Z))<0)return-1}else if(Wt!=Ae.charCodeAt(Z++))return-1}return Z}function W(ee,re,Ae){var Z=d.exec(re.slice(Ae));return Z?(ee.p=h.get(Z[0].toLowerCase()),Ae+Z[0].length):-1}function H(ee,re,Ae){var Z=g.exec(re.slice(Ae));return Z?(ee.w=b.get(Z[0].toLowerCase()),Ae+Z[0].length):-1}function Y(ee,re,Ae){var Z=p.exec(re.slice(Ae));return Z?(ee.w=m.get(Z[0].toLowerCase()),Ae+Z[0].length):-1}function B(ee,re,Ae){var Z=k.exec(re.slice(Ae));return Z?(ee.m=A.get(Z[0].toLowerCase()),Ae+Z[0].length):-1}function pe(ee,re,Ae){var Z=w.exec(re.slice(Ae));return Z?(ee.m=S.get(Z[0].toLowerCase()),Ae+Z[0].length):-1}function ie(ee,re,Ae){return F(ee,t,re,Ae)}function me(ee,re,Ae){return F(ee,r,re,Ae)}function _e(ee,re,Ae){return F(ee,n,re,Ae)}function he(ee){return s[ee.getDay()]}function K(ee){return a[ee.getDay()]}function Q(ee){return c[ee.getMonth()]}function X(ee){return u[ee.getMonth()]}function D(ee){return i[+(ee.getHours()>=12)]}function q(ee){return 1+~~(ee.getMonth()/3)}function ge(ee){return s[ee.getUTCDay()]}function ye(ee){return a[ee.getUTCDay()]}function Pe(ee){return c[ee.getUTCMonth()]}function Ee(ee){return u[ee.getUTCMonth()]}function Ne(ee){return i[+(ee.getUTCHours()>=12)]}function ke(ee){return 1+~~(ee.getUTCMonth()/3)}return{format:function(ee){var re=j(ee+="",P);return re.toString=function(){return ee},re},parse:function(ee){var re=M(ee+="",!1);return re.toString=function(){return ee},re},utcFormat:function(ee){var re=j(ee+="",C);