n","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},wQ={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},bQ={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},xQ=(e,t)=>{const r=Number(e),n=r%100;if(n>20||n<10)switch(n%10){case 1:return r+"st";case 2:return r+"nd";case 3:return r+"rd"}return r+"th"},_Q={ordinalNumber:xQ,era:En({values:vQ,defaultWidth:"wide"}),quarter:En({values:mQ,defaultWidth:"wide",argumentCallback:e=>e-1}),month:En({values:gQ,defaultWidth:"wide"}),day:En({values:yQ,defaultWidth:"wide"}),dayPeriod:En({values:wQ,defaultWidth:"wide",formattingValues:bQ,defaultFormattingWidth:"wide"})};function On(e){return(t,r={})=>{const n=r.width,i=n&&e.matchPatterns[n]||e.matchPatterns[e.defaultMatchWidth],a=t.match(i);if(!a)return null;const s=a[0],u=n&&e.parsePatterns[n]||e.parsePatterns[e.defaultParseWidth],c=Array.isArray(u)?kQ(u,p=>p.test(s)):SQ(u,p=>p.test(s));let d;d=e.valueCallback?e.valueCallback(c):c,d=r.valueCallback?r.valueCallback(d):d;const h=t.slice(s.length);return{value:d,rest:h}}}function SQ(e,t){for(const r in e)if(Object.prototype.hasOwnProperty.call(e,r)&&t(e[r]))return r}function kQ(e,t){for(let r=0;r<e.length;r++)if(t(e[r]))return r}function AI(e){return(t,r={})=>{const n=t.match(e.matchPattern);if(!n)return null;const i=n[0],a=t.match(e.parsePattern);if(!a)return null;let s=e.valueCallback?e.valueCallback(a[0]):a[0];s=r.valueCallback?r.valueCallback(s):s;const u=t.slice(i.length);return{value:s,rest:u}}}const PQ=/^(\d+)(th|st|nd|rd)?/i,EQ=/\d+/i,OQ={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},AQ={any:[/^b/i,/^(a|c)/i]},CQ={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},jQ={any:[/1/i,/2/i,/3/i,/4/i]},TQ={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},NQ={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},IQ={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},RQ={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},DQ={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},MQ={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},$Q={ordinalNumber:AI({matchPattern:PQ,parsePattern:EQ,valueCallback:e=>parseInt(e,10)}),era:On({matchPatterns:OQ,defaultMatchWidth:"wide",parsePatterns:AQ,defaultParseWidth:"any"}),quarter:On({matchPatterns:CQ,defaultMatchWidth:"wide",parsePatterns:jQ,defaultParseWidth:"any",valueCallback:e=>e+1}),month:On({matchPatterns:TQ,defaultMatchWidth:"wide",parsePatterns:NQ,defaultParseWidth:"any"}),day:On({matchPatterns:IQ,defaultMatchWidth:"wide",parsePatterns:RQ,defaultParseWidth:"any"}),dayPeriod:On({matchPatterns:DQ,defaultMatchWidth:"any",parsePatterns:MQ,defaultParseWidth:"any"})},LQ={code:"en-US",formatDistance:lQ,formatLong:fQ,formatRelative:pQ,localize:_Q,match:$Q,options:{weekStartsOn:0,firstWeekContainsDate:1}};function zQ(e,t){const r=ar(e,t==null?void 0:t.in);return QJ(r,oQ(r))+1}function UQ(e,t){const r=ar(e,t==null?void 0:t.in),n=+gf(r)-+ZJ(r);return Math.round(n/kI)+1}function CI(e,t){var h,p,m,g;const r=ar(e,t==null?void 0:t.in),n=r.getFullYear(),i=gh(),a=(t==null?void 0:t.firstWeekContainsDate)??((p=(h=t==null?void 0:t.locale)==null?void 0:h.options)==null?void 0:p.firstWeekContainsDate)??i.firstWeekContainsDate??((g=(m=i.locale)==null?void 0:m.options)==null?void 0:g.firstWeekContainsDate)??1,s=$n((t==null?void 0:t.in)||e,0);s.setFullYear(n+1,0,a),s.setHours(0,0,0,0);const u=Wa(s,t),c=$n((t==null?void 0:t.in)||e,0);c.setFullYear(n,0,a),c.setHours(0,0,0,0);const d=Wa(c,t);return+r>=+u?n+1:+r>=+d?n:n-1}function BQ(e,t){var u,c,d,h;const r=gh(),n=(t==null?void 0:t.firstWeekContainsDate)??((c=(u=t==null?void 0:t.locale)==null?void 0:u.options)==null?void 0:c.firstWeekContainsDate)??r.firstWeekContainsDate??((h=(d=r.locale)==null?void 0:d.options)==null?void 0:h.firstWeekContainsDate)??1,i=CI(e,t),a=$n((t==null?void 0:t.in)||e,0);return a.setFullYear(i,0,n),a.setHours(0,0,0,0),Wa(a,t)}function jI(e,t){const r=ar(e,t==null?void 0:t.in),n=+Wa(r,t)-+BQ(r,t);return Math.round(n/kI)+1}function $e(e,t){const r=e<0?"-":"",n=Math.abs(e).toString().padStart(t,"0");return r+n}const Mi={y(e,t){const r=e.getFullYear(),n=r>0?r:1-r;return $e(t==="yy"?n%100:n,t.length)},M(e,t){const r=e.getMonth();return t==="M"?String(r+1):$e(r+1,2)},d(e,t){return $e(e.getDate(),t.length)},a(e,t){const r=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return r.toUpperCase();case"aaa":return r;case"aaaaa":return r[0];case"aaaa":default:return r==="am"?"a.m.":"p.m."}},h(e,t){return $e(e.getHours()%12||12,t.length)},H(e,t){return $e(e.getHours(),t.length)},m(e,t){return $e(e.getMinutes(),t.length)},s(e,t){return $e(e.getSeconds(),t.length)},S(e,t){const r=t.length,n=e.getMilliseconds(),i=Math.trunc(n*Math.pow(10,r-3));return $e(i,t.length)}},$o={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},QE={G:function(e,t,r){const n=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return r.era(n,{width:"abbreviated"});case"GGGGG":return r.era(n,{width:"narrow"});case"GGGG":default:return r.era(n,{width:"wide"})}},y:function(e,t,r){if(t==="yo"){const n=e.getFullYear(),i=n>0?n:1-n;return r.ordinalNumber(i,{unit:"year"})}return Mi.y(e,t)},Y:function(e,t,r,n){const i=CI(e,n),a=i>0?i:1-i;if(t==="YY"){const s=a%100;return $e(s,2)}return t==="Yo"?r.ordinalNumber(a,{unit:"year"}):$e(a,t.length)},R:function(e,t){const r=OI(e);return $e(r,t.length)},u:function(e,t){const r=e.getFullYear();return $e(r,t.length)},Q:function(e,t,r){const n=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(n);case"QQ":return $e(n,2);case"Qo":return r.ordinalNumber(n,{unit:"quarter"});case"QQQ":return r.quarter(n,{width:"abbreviated",context:"formatting"});case"QQQQQ":return r.quarter(n,{width:"narrow",context:"formatting"});case"QQQQ":default:return r.quarter(n,{width:"wide",context:"formatting"})}},q:function(e,t,r){const n=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(n);case"qq":return $e(n,2);case"qo":return r.ordinalNumber(n,{unit:"quarter"});case"qqq":return r.quarter(n,{width:"abbreviated",context:"standalone"});case"qqqqq":return r.quarter(n,{width:"narrow",context:"standalone"});case"qqqq":default:return r.quarter(n,{width:"wide",context:"standalone"})}},M:function(e,t,r){const n=e.getMonth();switch(t){case"M":case"MM":return Mi.M(e,t);case"Mo":return r.ordinalNumber(n+1,{unit:"month"});case"MMM":return r.month(n,{width:"abbreviated",context:"formatting"});case"MMMMM":return r.month(n,{width:"narrow",context:"formatting"});case"MMMM":default:return r.month(n,{width:"wide",context:"formatting"})}},L:function(e,t,r){const n=e.getMonth();switch(t){case"L":return String(n+1);case"LL":return $e(n+1,2);case"Lo":return r.ordinalNumber(n+1,{unit:"month"});case"LLL":return r.month(n,{width:"abbreviated",context:"standalone"});case"LLLLL":return r.month(n,{width:"narrow",context:"standalone"});case"LLLL":default:return r.month(n,{width:"wide",context:"standalone"})}},w:function(e,t,r,n){const i=jI(e,n);return t==="wo"?r.ordinalNumber(i,{unit:"week"}):$e(i,t.length)},I:function(e,t,r){const n=UQ(e);return t==="Io"?r.ordinalNumber(n,{unit:"week"}):$e(n,t.length)},d:function(e,t,r){return t==="do"?r.ordinalNumber(e.getDate(),{unit:"date"}):Mi.d(e,t)},D:function(e,t,r){const n=zQ(e);return t==="Do"?r.ordinalNumber(n,{unit:"dayOfYear"}):$e(n,t.length)},E:function(e,t,r){const n=e.getDay();switch(t){case"E":case"EE":case"EEE":return r.day(n,{width:"abbreviated",context:"formatting"});case"EEEEE":return r.day(n,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(n,{width:"short",context:"formatting"});case"EEEE":default:return r.day(n,{width:"wide",context:"formatting"})}},e:function(e,t,r,n){const i=e.getDay(),a=(i-n.weekStartsOn+8)%7||7;switch(t){case"e":return String(a);case"ee":return $e(a,2);case"eo":return r.ordinalNumber(a,{unit:"day"});case"eee":return r.day(i,{width:"abbreviated",context:"formatting"});case"eeeee":return r.day(i,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(i,{width:"short",context:"formatting"});case"eeee":default:return r.day(i,{width:"wide",context:"formatting"})}},c:function(e,t,r,n){const i=e.getDay(),a=(i-n.weekStartsOn+8)%7||7;switch(t){case"c":return String(a);case"cc":return $e(a,t.length);case"co":return r.ordinalNumber(a,{unit:"day"});case"ccc":return r.day(i,{width:"abbreviated",context:"standalone"});case"ccccc":return r.day(i,{width:"narrow",context:"standalone"});case"cccccc":return r.day(i,{width:"short",context:"standalone"});case"cccc":default:return r.day(i,{width:"wide",context:"standalone"})}},i:function(e,t,r){const n=e.getDay(),i=n===0?7:n;switch(t){case"i":return String(i);case"ii":return $e(i,t.length);case"io":return r.ordinalNumber(i,{unit:"day"});case"iii":return r.day(n,{width:"abbreviated",context:"formatting"});case"iiiii":return r.day(n,{width:"narrow",context:"formatting"});case"iiiiii":return r.day(n,{width:"short",context:"formatting"});case"iiii":default:return r.day(n,{width:"wide",context:"formatting"})}},a:function(e,t,r){const i=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return r.dayPeriod(i,{width:"abbreviated",context:"formatting"});case"aaa":return r.dayPeriod(i,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return r.dayPeriod(i,{width:"narrow",context:"formatting"});case"aaaa":default:return r.dayPeriod(i,{width:"wide",context:"formatting"})}},b:function(e,t,r){const n=e.getHours();let i;switch(n===12?i=$o.noon:n===0?i=$o.midnight:i=n/12>=1?"pm":"am",t){case"b":case"bb":return r.dayPeriod(i,{width:"abbreviated",context:"formatting"});case"bbb":return r.dayPeriod(i,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return r.dayPeriod(i,{width:"narrow",context:"formatting"});case"bbbb":default:return r.dayPeriod(i,{width:"wide",context:"formatting"})}},B:function(e,t,r){const n=e.getHours();let i;switch(n>=17?i=$o.evening:n>=12?i=$o.afternoon:n>=4?i=$o.morning:i=$o.night,t){case"B":case"BB":case"BBB":return r.dayPeriod(i,{width:"abbreviated",context:"formatting"});case"BBBBB":return r.dayPeriod(i,{width:"narrow",context:"formatting"});case"BBBB":default:return r.dayPeriod(i,{width:"wide",context:"formatting"})}},h:function(e,t,r){if(t==="ho"){let n=e.getHours()%12;return n===0&&(n=12),r.ordinalNumber(n,{unit:"hour"})}return Mi.h(e,t)},H:function(e,t,r){return t==="Ho"?r.ordinalNumber(e.getHours(),{unit:"hour"}):Mi.H(e,t)},K:function(e,t,r){const n=e.getHours()%12;return t==="Ko"?r.ordinalNumber(n,{unit:"hour"}):$e(n,t.length)},k:function(e,t,r){let n=e.getHours();return n===0&&(n=24),t==="ko"?r.ordinalNumber(n,{unit:"hour"}):$e(n,t.length)},m:function(e,t,r){return t==="mo"?r.ordinalNumber(e.getMinutes(),{unit:"minute"}):Mi.m(e,t)},s:function(e,t,r){return t==="so"?r.ordinalNumber(e.getSeconds(),{unit:"second"}):Mi.s(e,t)},S:function(e,t){return Mi.S(e,t)},X:function(e,t,r){const n=e.getTimezoneOffset();if(n===0)return"Z";switch(t){case"X":return eO(n);case"XXXX":case"XX":return ka(n);case"XXXXX":case"XXX":default:return ka(n,":")}},x:function(e,t,r){const n=e.getTimezoneOffset();switch(t){case"x":return eO(n);case"xxxx":case"xx":return ka(n);case"xxxxx":case"xxx":default:return ka(n,":")}},O:function(e,t,r){const n=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+ZE(n,":");case"OOOO":default:return"GMT"+ka(n,":")}},z:function(e,t,r){const n=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+ZE(n,":");case"zzzz":default:return"GMT"+ka(n,":")}},t:function(e,t,r){const n=Math.trunc(+e/1e3);return $e(n,t.length)},T:function(e,t,r){return $e(+e,t.length)}};function ZE(e,t=""){const r=e>0?"-":"+",n=Math.abs(e),i=Math.trunc(n/60),a=n%60;return a===0?r+String(i):r+String(i)+t+$e(a,2)}function eO(e,t){return e%60===0?(e>0?"-":"+")+$e(Math.abs(e)/60,2):ka(e,t)}function ka(e,t=""){const r=e>0?"-":"+",n=Math.abs(e),i=$e(Math.trunc(n/60),2),a=$e(n%60,2);return r+i+t+a}const tO=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});case"PPPP":default:return t.date({width:"full"})}},TI=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});case"pppp":default:return t.time({width:"full"})}},FQ=(e,t)=>{const r=e.match(/(P+)(p+)?/)||[],n=r[1],i=r[2];if(!i)return tO(e,t);let a;switch(n){case"P":a=t.dateTime({width:"short"});break;case"PP":a=t.dateTime({width:"medium"});break;case"PPP":a=t.dateTime({width:"long"});break;case"PPPP":default:a=t.dateTime({width:"full"});break}return a.replace("{{date}}",tO(n,t)).replace("{{time}}",TI(i,t))},WQ={p:TI,P:FQ},qQ=/^D+$/,HQ=/^Y+$/,KQ=["D","DD","YY","YYYY"];function VQ(e){return qQ.test(e)}function GQ(e){return HQ.test(e)}function YQ(e,t,r){const n=XQ(e,t,r);if(console.warn(n),KQ.includes(e))throw new RangeError(n)}function XQ(e,t,r){const n=e[0]==="Y"?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${n} to the input \`${r}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const JQ=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,QQ=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,ZQ=/^'([^]*?)'?$/,eZ=/''/g,tZ=/[a-zA-Z]/;function Rl(e,t,r){var h,p,m,g,b,w,S,k;const n=gh(),i=(r==null?void 0:r.locale)??n.locale??LQ,a=(r==null?void 0:r.firstWeekContainsDate)??((p=(h=r==null?void 0:r.locale)==null?void 0:h.options)==null?void 0:p.firstWeekContainsDate)??n.firstWeekContainsDate??((g=(m=n.locale)==null?void 0:m.options)==null?void 0:g.firstWeekContainsDate)??1,s=(r==null?void 0:r.weekStartsOn)??((w=(b=r==null?void 0:r.locale)==null?void 0:b.options)==null?void 0:w.weekStartsOn)??n.weekStartsOn??((k=(S=n.locale)==null?void 0:S.options)==null?void 0:k.weekStartsOn)??0,u=ar(e,r==null?void 0:r.in);if(!tQ(u))throw new RangeError("Invalid time value");let c=t.match(QQ).map(A=>{const P=A[0];if(P==="p"||P==="P"){const C=WQ[P];return C(A,i.formatLong)}return A}).join("").match(JQ).map(A=>{if(A==="''")return{isToken:!1,value:"'"};const P=A[0];if(P==="'")return{isToken:!1,value:rZ(A)};if(QE[P])return{isToken:!0,value:A};if(P.match(tZ))throw new RangeError("Format string contains an unescaped latin alphabet character `"+P+"`");return{isToken:!1,value:A}});i.localize.preprocessor&&(c=i.localize.preprocessor(u,c));const d={firstWeekContainsDate:a,weekStartsOn:s,locale:i};return c.map(A=>{if(!A.isToken)return A.value;const P=A.value;(!(r!=null&&r.useAdditionalWeekYearTokens)&&GQ(P)||!(r!=null&&r.useAdditionalDayOfYearTokens)&&VQ(P))&&YQ(P,t,String(e));const C=QE[P[0]];return C(u,P,i.localize,d)}).join("")}function rZ(e){const t=e.match(ZQ);return t?t[1].replace(eZ,"'"):e}function nZ(e,t,r){const[n,i]=cw(r==null?void 0:r.in,e,t);return+Wa(n,r)==+Wa(i,r)}function iZ(e,t){const r=()=>$n(t==null?void 0:t.in,NaN),i=lZ(e);let a;if(i.date){const d=uZ(i.date,2);a=cZ(d.restDateString,d.year)}if(!a||isNaN(+a))return r();const s=+a;let u=0,c;if(i.time&&(u=dZ(i.time),isNaN(u)))return r();if(i.timezone){if(c=fZ(i.timezone),isNaN(c))return r()}else{const d=new Date(s+u),h=ar(0,t==null?void 0:t.in);return h.setFullYear(d.getUTCFullYear(),d.getUTCMonth(),d.getUTCDate()),h.setHours(d.getUTCHours(),d.getUTCMinutes(),d.getUTCSeconds(),d.getUTCMilliseconds()),h}return ar(s+u+c,t==null?void 0:t.in)}const od={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},aZ=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,oZ=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,sZ=/^([+-])(\d{2})(?::?(\d{2}))?$/;function lZ(e){const t={},r=e.split(od.dateTimeDelimiter);let n;if(r.length>2)return t;if(/:/.test(r[0])?n=r[0]:(t.date=r[0],n=r[1],od.timeZoneDelimiter.test(t.date)&&(t.date=e.split(od.timeZoneDelimiter)[0],n=e.substr(t.date.length,e.length))),n){const i=od.timezone.exec(n);i?(t.time=n.replace(i[1],""),t.timezone=i[1]):t.time=n}return t}function uZ(e,t){const r=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+t)+"})|(\\d{2}|[+-]\\d{"+(2+t)+"})$)"),n=e.match(r);if(!n)return{year:NaN,restDateString:""};const i=n[1]?parseInt(n[1]):null,a=n[2]?parseInt(n[2]):null;return{year:a===null?i:a*100,restDateString:e.slice((n[1]||n[2]).length)}}function cZ(e,t){if(t===null)return new Date(NaN);const r=e.match(aZ);if(!r)return new Date(NaN);const n=!!r[4],i=_l(r[1]),a=_l(r[2])-1,s=_l(r[3]),u=_l(r[4]),c=_l(r[5])-1;if(n)return gZ(t,u,c)?hZ(t,u,c):new Date(NaN);{const d=new Date(0);return!vZ(t,a,s)||!mZ(t,i)?new Date(NaN):(d.setUTCFullYear(t,a,Math.max(i,s)),d)}}function _l(e){return e?parseInt(e):1}function dZ(e){const t=e.match(oZ);if(!t)return NaN;const r=tg(t[1]),n=tg(t[2]),i=tg(t[3]);return yZ(r,n,i)?r*EI+n*PI+i*1e3:NaN}function tg(e){return e&&parseFloat(e.replace(",","."))||0}function fZ(e){if(e==="Z")return 0;const t=e.match(sZ);if(!t)return 0;const r=t[1]==="+"?-1:1,n=parseInt(t[2]),i=t[3]&&parseInt(t[3])||0;return wZ(n,i)?r*(n*EI+i*PI):NaN}function hZ(e,t,r){const n=new Date(0);n.setUTCFullYear(e,0,4);const i=n.getUTCDay()||7,a=(t-1)*7+r+1-i;return n.setUTCDate(n.getUTCDate()+a),n}const pZ=[31,null,31,30,31,30,31,31,30,31,30,31];function NI(e){return e%400===0||e%4===0&&e%100!==0}function vZ(e,t,r){return t>=0&&t<=11&&r>=1&&r<=(pZ[t]||(NI(e)?29:28))}function mZ(e,t){return t>=1&&t<=(NI(e)?366:365)}function gZ(e,t,r){return t>=1&&t<=53&&r>=0&&r<=6}function yZ(e,t,r){return e===24?t===0&&r===0:r>=0&&r<60&&t>=0&&t<60&&e>=0&&e<25}function wZ(e,t){return t>=0&&t<=59}const bZ={lessThanXSeconds:{one:{regular:"mniej niĹĽ sekunda",past:"mniej niĹĽ sekundÄ™",future:"mniej niĹĽ sekundÄ™"},twoFour:"mniej niĹĽ {{count}} sekundy",other:"mniej niĹĽ {{count}} sekund"},xSeconds:{one:{regular:"sekunda",past:"sekundÄ™",future:"sekundÄ™"},twoFour:"{{count}} sekundy",other:"{{count}} sekund"},halfAMinute:{one:"pĂłĹ‚ minuty",twoFour:"pĂłĹ‚ minuty",other:"pĂłĹ‚ minuty"},lessThanXMinutes:{one:{regular:"mniej niĹĽ minuta",past:"mniej niĹĽ minutÄ™",future:"mniej niĹĽ minutÄ™"},twoFour:"mniej niĹĽ {{count}} minuty",other:"mniej niĹĽ {{count}} minut"},xMinutes:{one:{regular:"minuta",past:"minutÄ™",future:"minutÄ™"},twoFour:"{{count}} minuty",other:"{{count}} minut"},aboutXHours:{one:{regular:"okoĹ‚o godziny",past:"okoĹ‚o godziny",future:"okoĹ‚o godzinÄ™"},twoFour:"okoĹ‚o {{count}} godziny",other:"okoĹ‚o {{count}} godzin"},xHours:{one:{regular:"godzina",past:"godzinÄ™",future:"godzinÄ™"},twoFour:"{{count}} godziny",other:"{{count}} godzin"},xDays:{one:{regular:"dzieĹ„",past:"dzieĹ„",future:"1 dzieĹ„"},twoFour:"{{count}} dni",other:"{{count}} dni"},aboutXWeeks:{one:"okoĹ‚o tygodnia",twoFour:"okoĹ‚o {{count}} tygodni",other:"okoĹ‚o {{count}} tygodni"},xWeeks:{one:"tydzieĹ„",twoFour:"{{count}} tygodnie",other:"{{count}} tygodni"},aboutXMonths:{one:"okoĹ‚o miesiÄ…c",twoFour:"okoĹ‚o {{count}} miesiÄ…ce",other:"okoĹ‚o {{count}} miesiÄ™cy"},xMonths:{one:"miesiÄ…c",twoFour:"{{count}} miesiÄ…ce",other:"{{count}} miesiÄ™cy"},aboutXYears:{one:"okoĹ‚o rok",twoFour:"okoĹ‚o {{count}} lata",other:"okoĹ‚o {{count}} lat"},xYears:{one:"rok",twoFour:"{{count}} lata",other:"{{count}} lat"},overXYears:{one:"ponad rok",twoFour:"ponad {{count}} lata",other:"ponad {{count}} lat"},almostXYears:{one:"prawie rok",twoFour:"prawie {{count}} lata",other:"prawie {{count}} lat"}};function xZ(e,t){if(t===1)return e.one;const r=t%100;if(r<=20&&r>10)return e.other;const n=r%10;return n>=2&&n<=4?e.twoFour:e.other}function rg(e,t,r){const n=xZ(e,t);return(typeof n=="string"?n:n[r]).replace("{{count}}",String(t))}const _Z=(e,t,r)=>{const n=bZ[e];return r!=null&&r.addSuffix?r.comparison&&r.comparison>0?"za "+rg(n,t,"future"):rg(n,t,"past")+" temu":rg(n,t,"regular")},SZ={full:"EEEE, do MMMM y",long:"do MMMM y",medium:"do MMM y",short:"dd.MM.y"},kZ={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},PZ={full:"{{date}} {{time}}",long:"{{date}} {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},EZ={date:Qo({formats:SZ,defaultWidth:"full"}),time:Qo({formats:kZ,defaultWidth:"full"}),dateTime:Qo({formats:PZ,defaultWidth:"full"})},OZ={masculine:"ostatni",feminine:"ostatnia"},AZ={masculine:"ten",feminine:"ta"},CZ={masculine:"nastÄ™pny",feminine:"nastÄ™pna"},jZ={0:"feminine",1:"masculine",2:"masculine",3:"feminine",4:"masculine",5:"masculine",6:"feminine"};function rO(e,t,r,n){let i;if(nZ(t,r,n))i=AZ;else if(e==="lastWeek")i=OZ;else if(e==="nextWeek")i=CZ;else throw new Error(`Cannot determine adjectives for token ${e}`);const a=t.getDay(),s=jZ[a];return`'${i[s]}' eeee 'o' p`}const TZ={lastWeek:rO,yesterday:"'wczoraj o' p",today:"'dzisiaj o' p",tomorrow:"'jutro o' p",nextWeek:rO,other:"P"},NZ=(e,t,r,n)=>{const i=TZ[e];return typeof i=="function"?i(e,t,r,n):i},IZ={narrow:["p.n.e.","n.e."],abbreviated:["p.n.e.","n.e."],wide:["przed naszÄ… erÄ…","naszej ery"]},RZ={narrow:["1","2","3","4"],abbreviated:[