Qf,h ldZdZddlZddlZddlZddlmZ dZ dZ dZ dZ d Zgd Zd gZdZeddD]Zej'eeez Z[[d Zd ZdZdZdZedZedZedZdZgdZgdZdZdEdZ dFdZ!dZ"dZ#dZ$dZ%gdZ&dZ'd Z(d!Z)d"Z*d#Z+d$Z,d%Z-d&Z.d'Z/d(Z0Gd)d*Z1e1d+e1_2e1d,d-d.d.d/0e1_3e1d1e1_4Gd2d3Z5e5Z6e5ddde5_2e5dd4d5e5_3e1d6e5_4Gd7d8Z7Gd9d:e8Z9e9Z:[9e7Z;Gd;d<ZeZ<eddde_2ed-d.d.d/e_3e1d1e_4Gd=d>e5Z=e=ddde=_2e=dd4d5d-d.d.d/e=_3e1d1e=_4d?Z>Gd@dAe7Z?e?je1dxZAe?_Be?je1d-d.B e?_2e?je1d-d.Be?_3e=dCdde?jDZCy)GzConcrete date/time and related types. See http://www.iana.org/time-zones/repository/tz-link.html for time zone and DST data sources. ) datedatetimetime timedeltatimezonetzinfoMINYEARMAXYEARUTCN)indexc"||k(rdS||kDrdSdS)Nr xys 2/opt/alt/python312/lib64/python3.12/_pydatetime.py_cmprsQ1.QA.B.c>|jj}|dk(ry|S)N _pydatetimer) __class__ __module__)self module_names r_get_class_modulers"..++Km#rri'i۹7) rrrr rrr rr rrc:|dzdk(xr|dzdk7xs|dzdk(S)zyear -> 1 if leap year, else 0.r dr)years r_is_leapr&1s* !8q= AdSjAo@qArc:|dz }|dz|dzz|dzz |dzzS)z2year -> number of days before January 1st of year.rmr"r#r$r)r%rs r_days_before_yearr)5s/ qA S51a4 number of days in that month in that year.)r&_DAYS_IN_MONTHr%months r_days_in_monthr0:s zhtn %  rc:t||dkDxr t|zS)zCyear, month -> number of days in year preceding first day of month.r+)_DAYS_BEFORE_MONTHr&r.s r_days_before_monthr3As! e $ (Dhtn EErcPt||}t|t||z|zS)z>year, month, day -> ordinal, considering 01-Jan-0001 as day 1.)r0r)r3r%r/daydims r_ymd2ordr8Fs4 u %C d # tU + ,  riec|dz}t|t\}}|dzdz}t|t\}}t|t\}}t|d\}}||dz|dzz|zz }|dk(s|dk(r|dz ddfS|dk(xr |d k7xs|dk(}|d zd z }t||d kDxr|z}||kDr|dz}|t ||d k(xr|zz}||z}|||dzfS) z@ordinal -> (year, month, day), considering 01-Jan-0001 as day 1.rr$r(r#r" r2r:r+)divmod_DI400Y_DI100Y_DI4Yr2r-) nn400r%n100n4n1leapyearr/ precedings r_ord2ymdrK_s#.FAQ GD! #:>DQ GD! 1e EB 1cNEBD3Ja " $$D Qw$!)Avr2~Qw2B"H1 H VME"5)UQY-C8DI1}  ^E*eqj.EXFF NA ! r) NJanFebMarAprMayJunJulAugSepOctNovDec)NMonTueWedThuFriSatSunc t|||dzdz}t|||z}tj|||||||||f S)N)r8r3_time struct_time) rmdhhmmssdstflagwdaydnums r_build_struct_timerlsO Q1  !Q &D a #a 'D   aAr2r4wG HHrcdddddd}|dk(r|rdnd }n |d k(r|d z} ||}|j||||S#t$r td wxYw) Nz{:02d}z {:02d}:{:02d}z{:02d}:{:02d}:{:02d}z{:02d}:{:02d}:{:02d}.{:03d}z{:02d}:{:02d}:{:02d}.{:06d})hoursminutesseconds milliseconds microsecondsautorrrprqzUnknown timespec value)formatKeyError ValueError)rfrgrhustimespecspecsfmts r _format_timer|s~")55  E6%'>Y ^ # t *Hozz"b"b)) 31223s 9Ac8d}||jdkrd}| }nd}t|td\}}t|td\}}|d||||fzz }|s |jr2|d ||jfzz }|jr|d |jzz }|S) Nr -+rrnroz %s%02d%s%02dz%s%02d.%06d)daysr@rrrrp)offsepssignrfrgrhs r_format_offsetrs A  88a<D$CDYQ/0BIa01B ^tRb1 11  S"**-- -AWr.. Hrcd}d}d}d}g}|j}dt|} } | | krq|| } | dz } | dk(rR| | krC|| } | dz } | dk(r%|dt|ddz}|j|n | dk(r>|*t|drt |j d }nd }|j|n| d k(rk| | kr|| } | dz } | dk(r>|*t|drt |j d }nd }|j|n|d|| || nm| d k(rF|2d }t|d r$|j } | | jdd}|j|n"|d|| n|dn|| | | krqd j|}tj||S)Nr r%fz%06d microsecondz utcoffsetr~r:Ztznamez%%) appendlengetattrhasattrrrrreplacejoinrbstrftime)objectru timetuplefreplacezreplace colonzreplaceZreplace newformatpushirDchch2rs r_wrap_strftimersHHMHI   D c&kqA a% AY Q 91uAYQ9'#)GF4A1-F$F$$X.3Y'"6;7'5f6F6F6Hb'QH')H$$X.3Y1u$QiQ#:,4#*6;#?4B6CSCSCU[^4_M46M%,,]; I H I3Y'#%"684 & A }+,99S$+?$$X.IHS Hg a%h "I >>)Y //rc |dvS)N 0123456789r)cs r_is_ascii_digitrs rcJt|}|dk(ryd}d}|d|k(rL|d|k(rC|dkr td|dkDr-|d|k(r%|dk(r td|d kDrt|d ryy yy |d|k(r2d}||krt||sn |d z }||kr|dkr|S|d zd k(ryyy) NrarWr"r:zInvalid ISO string rr+r )rrwr)dtstr len_dtstrdate_separatorweek_indicatoridxs r"_find_isoformat_datetime_separatorrsE IA~NN Qx>! 8~ %1} !5661}q^!;>$%9::r>oeBi&@ 8~ %C /&uSz2q / Qw Qw!|rct|dd}|ddk(}d|z}|||dzdk(rp|dz }t|||dz}|dz }d}t||kDr/|||dzdk(|k7r td||z }t|||dz}tt |||St|||dz}|dz }|||dzdk(|k7r td||z }t|||dz}|||gS)Nr r"rrrr+z"Inconsistent use of dash separator)intrrwlist_isoweek_to_gregorian)rr%has_sepposweeknodaynor/r6s r_parse_isoformat_daterOs8 uQqz?DAh#oG g+C SqS  qU3sQw'( q u: c#'"c)g5 !EFF 7NCc#'*+E)$>??E#cAg&' q #cAg # %' 1AB B w%C!G$%eS!!r)ii'rtr#rc t|}gd}d}tddD]c}||z dkr tdt|||dz||<|dz }|||dz}|dk(r|dk(}|r|dk\rnr|dk7rtd|z||z }e||kr||d vr td |dz }||z }|d k\rd }n|}t||||z|d<|d kr|dxxt|dz zcc<||kDr*t t t|||zds td |S) N)r r r r r r=r+zIncomplete time componentrrzInvalid time separator: %cz.,zInvalid microsecond componentr`z%Non-digit values in unparsed fraction)rrangerwr_FRACTION_CORRECTIONallmapr) tstrlen_str time_compsrcomp next_charr len_remainderto_parses r_parse_hh_mm_ss_ffrvs`$iGJ Ca  cMQ 89 9tCA/ 4 qSUO 193&GDAI  yC'9IEF F w%( W} 9D <= = 1HC#cMM!(S#h, 89JqM!|1 !5hqj!AA (OT3xz(_parse_isoformat_time..s(x!qAvxsr=rnrorprr) rrwfindrrutcrrr) rrtz_postimestrrtzitzstrtz_compstzsigntds r_parse_isoformat_timersC$iG{344iinq LDIIcNQ$6L$))C.1:LF!'!d9F1HoG#G,J C T"X_ll !VW  u: "9: :%e, (x( (,,C +s2RF!hqk#+A;Xa[JB6B;'Cc rcht|cxkr tksntd|d|cxkrdks@nd}|dk(r't|dddz}|dk(s|dk(r t |rd }|rtd |d|cxkrd ksntd |d |dz dz|dz z}t |}||z}t |S)NzYear is out of range: r 5Trrar"r=FzInvalid week: rzInvalid weekday: z (range is [1, 7]))rr rwr8r&_isoweek1mondayrK)r%weekr6 out_of_range first_weekday day_offsetday_1ord_days rrrs d %g %1$899 t=b= 2:%T1a014M"}'9'/~$ ~dV45 5 s;Q;,SE1CDEE(a37+J D !Ej G G rcX|(t|tstdt|zyy)Nz4tzinfo.tzname() must return None or string, not '%s') isinstancestr TypeErrortype)names r _check_tznamers7  4 5#%)$Z01 1!6rc|yt|tstd|dt|dtd |cxkrtdksnt |d|dy)Nztzinfo.z'() must return None or timedelta, not ''rz()=zG, must be strictly between -timedelta(hours=24) and timedelta(hours=24))rrrrrw)roffsets r_check_utc_offsetrse ~ fi (48$v,HI I aL=6 0IaL 0() ) 1rc,t|}t|}t|}t|cxkr tksntdttfz|d|cxkrdksntd|t ||}d|cxkr|ksntd|z||||fS)Nzyear must be in %d..%drr<zmonth must be in 1..12zday must be in 1..%d)_indexrr rwr0r5s r_check_date_fieldsr s $ )K)K w0 g T  S\ $ lE * !89L$*<$A !G\"7G4MD' IA LA|,L$*<$A !G\"7G4MD' IA LA !89L\73  W G$a T  q6I  F JK K~~c"   rcg}|jr|jd|jz|jr|jd|jz|jr|jd|jz|s|jdt |d|j j ddj|dS) Nzdays=%dz seconds=%dzmicroseconds=%d0.(, ))r rr r rr __qualname__r)rargss r__repr__ztimedelta.__repr__s :: KK DJJ. / == KK t}}4 5    KK)D,>,>> ? KK /5"nn99"iio/ /rct|jd\}}t|d\}}d|||fz}|jrd}d||jz|z}|jr|d|jzz}|S)Nrz %d:%02d:%02dc2|t|dk7xrdxsdfS)Nrrr~)r)rDs rpluralz!timedelta.__str__..plurals#a&A+-#333rz %d day%s, r)r@r r r )rrgrhrfrr-s r__str__ztimedelta.__str__s| r*BBB b"b\ ) :: 4tzz 22a7A   Gd0000Arc`|jdz|jzdz|jzdz S)zTotal seconds in the duration.rr)rrprrrs r total_secondsztimedelta.total_secondss7U"T\\1U:!!"%*+ +rc|jSrr r0s rrztimedelta.dayszzrc|jSrp)r r0s rrpztimedelta.secondss}}rc|jSrr)r r0s rrrztimedelta.microsecondss!!!rct|trRt|j|jz|j|jz|j|jzSt SNrrr r r NotImplementedrothers r__add__ztimedelta.__add__X eY 'TZZ%++5!]]U^^;!//%2E2EEG Grct|trRt|j|jz |j|jz |j|jz St Sr;r<r>s r__sub__ztimedelta.__sub__rArc:t|tr| |zStSr;)rrr=r>s r__rsub__ztimedelta.__rsub__s eY '55= rc^t|j |j |j Sr;)rr r r r0s r__neg__ztimedelta.__neg__ s.$**--,,,. .rc|Sr;rr0s r__pos__ztimedelta.__pos__s rc*|jdkr| S|SNr r4r0s r__abs__ztimedelta.__abs__s ::>5LKrc0t|tr4t|j|z|j|z|j |zSt|t r=|j}|j\}}tddt||z|StSrK) rrrr r r r_to_microsecondsas_integer_ratiorr=rr?usecrrs r__mul__ztimedelta.__mul__s eS !TZZ%/!]]U2!//%79 9 eU #((*D))+DAqQ#4TAXq#AB BrcZ|jdz|jzdz|jzS)Nrrr r r r0s rrNztimedelta._to_microseconds)s/w'$--77B""# $rct|ttfstS|j }t|tr||j zSt|trtdd||zSyrK)rrrr=rN)rr?rQs r __floordiv__ztimedelta.__floordiv__-se%#y!12! !$$& eY '51133 3 eS !Q45=1 1 "rctt|tttfstS|j }t|tr||j z St|trtddt ||St|tr-|j\}}tddt ||z|SyrK)rrrrr=rNrrOrPs r __truediv__ztimedelta.__truediv__6s%#ui!89! !$$& eY '%0022 2 eS !Q#4T5#AB B eU #))+DAqQ#4QXq#AB B $rct|tr.|j|jz}tdd|StSrK)rrrNr=)rr?rs r__mod__ztimedelta.__mod__Bs= eY '%%'%*@*@*BBAQ1% %rct|tr:t|j|j\}}|tdd|fStSrK)rrr@rNr=)rr?rrs r __divmod__ztimedelta.__divmod__HsK eY '$//10024DAqi1a(( (rcVt|tr|j|dk(StSrKrrrr=r>s r__eq__ztimedelta.__eq__Q& eY '99U#q( (! !rcVt|tr|j|dkStSrKr^r>s r__le__ztimedelta.__le__Wr`rcVt|tr|j|dkStSrKr^r>s r__lt__ztimedelta.__lt__]& eY '99U#a' '! !rcVt|tr|j|dk\StSrKr^r>s r__ge__ztimedelta.__ge__cr`rcVt|tr|j|dkDStSrKr^r>s r__gt__ztimedelta.__gt__irercRt|j|jSr;)r _getstater>s rrztimedelta._cmposDNN$eoo&788rct|jdk(rt|j|_|jS)Nrr hashrkr0s r__hash__ztimedelta.__hash__ss+ >>R !$.."23DN~~rcd|jdk7xs |jdk7xs|jdk7SrKrTr0s r__bool__ztimedelta.__bool__xs6 a( "(""a' )rcH|j|j|jfSr;rTr0s rrkztimedelta._getstates DMM4+=+=>>rc:|j|jfSr;rrkr0s r __reduce__ztimedelta.__reduce__ 011rN)r r r r r r r )%rrr(__doc__ __slots__rr*r.r1propertyrrprrr@__radd__rCrErGrIrLrR__rmul__rNrVrXrZr\r_rbrdrgrirrorqrkrurrrrrGs&BI56:;cJ / + ""H . H$2 C " " " " " 9 )?2rri6errrr)rrnrorprrr9c0eZdZdZdZd$dZedZedZedZ edZ ed Z d Z d Z d Zd ZdZeZedZedZedZdZdZd%dZdZdZdZdZdZdZdZdZ e Z!dZ"dZ#dZ$d Z%d!Z&d"Z'd#Z(y)&raConcrete date type. Constructors: __new__() fromtimestamp() today() fromordinal() Operators: __repr__, __str__ __eq__, __le__, __lt__, __ge__, __gt__, __hash__ __add__, __radd__, __sub__ (add/radd only with timedelta arg) Methods: timetuple() toordinal() weekday() isoweekday(), isocalendar(), isoformat() ctime() strftime() Properties (readonly): year, month, day )_year_month_dayr Nc|t|ttfryt|dk(rkdt |ddcxkrdkrTnnQt|tr |j d}tj|}|j|d|_ |St|||\}}}tj|}||_ ||_||_d|_ |S#t $r tdwxYw) zVConstructor. Arguments: year, month, day (required, base 1) r"rr+r=r<latin1znFailed to encode latin1 string when unpickling a date object. pickle.load(data, encoding='latin1') is assumed.r)rbytesrrordencodeUnicodeEncodeErrorrwrr_date__setstater rr}r~r)rr%r/r6rs rrz date.__new__s M teS\ *s4yA~ T!AY %2 %$$L;;x0D>>#&D OOD !DNK-dE3?eS~~c"    !*L$KLLLs CC+c n| tdtj|\ }}}}}}}} } ||||S)z;Construct a date from a POSIX timestamp (like time.time()).z5'NoneType' object cannot be interpreted as an integer)rrb localtime) rtrrdrerfrgrhweekdayjdaydsts r fromtimestampzdate.fromtimestampsD 9ST T27//!2D/1aRWdC1a|rcLtj}|j|S)z"Construct a date from time.time().rbrr)rrs rtodayz date.todays  JJL  ##rc4t|\}}}||||S)zConstruct a date from a proleptic Gregorian ordinal. January 1 of year 1 is day 1. Only the year, month and day are non-zero in the result. )rK)rrDrrdres r fromordinalzdate.fromordinals!1+1a1a|rct|ts tdt|dvrt d| |t |S#t $rt d|wxYw)z2Construct a date from a string in ISO 8601 format.#fromisoformat: argument must be str)rarrInvalid isoformat string: )rrrrrwr Exception)r date_strings r fromisoformatzdate.fromisoformatsu+s+AB B { : -9+IJ J K-k:; ; K9+IJ J Ks AAc"|t|||S)z|Construct a date from the ISO year, week number and weekday. This is the inverse of the date.isocalendar() function)r)rr%rr6s rfromisocalendarzdate.fromisocalendars )$c:;;rcdt||jj|j|j|j fzS)zConvert to formal string, for repr(). >>> d = date(2010, 1, 1) >>> repr(d) 'datetime.date(2010, 1, 1)' z%s.%s(%d, %d, %d))rrr(r}r~rr0s rr*z date.__repr__s@#&7&=&*nn&A&A&*jj&*kk&*ii &11 1rc|jdzxsd}dt|t|j|j|j fzS)Return ctime() style string.raz%s %s %2d 00:00:00 %04d) toordinal _DAYNAMES _MONTHNAMESr~rr}rrs rctimez date.ctime sK.."Q&+!( g   $ IItzz,## #rc8t|||jS)zQ Format using strftime(). Example: "%d/%m/%Y, %H:%M:%S" )rr)rrus rrz date.strftimes dFDNN,<==rct|ts!tdt|jzt |dk7r|j |St|SNzmust be str, not %sr rrrrrrrrr{s r __format__zdate.__format__K#s#1DI4F4FFG G s8q===% %4yrcNd|j|j|jfzS)zReturn the date formatted according to ISO. This is 'YYYY-MM-DD'. References: - http://www.w3.org/TR/NOTE-datetime - http://www.cl.cam.ac.uk/~mgk25/iso-time.html z%04d-%02d-%02d)r}r~rr0s r isoformatzdate.isoformat"s" 4::t{{DII"FFFrc|jS)z year (1-9999))r}r0s rr%z date.year0r5rc|jS)z month (1-12))r~r0s rr/z date.month5s{{rc|jS)z day (1-31))rr0s rr6zdate.day:syyrc `t|j|j|jddddS)9Return local time tuple compatible with time.localtime().r r)rlr}r~rr0s rrzdate.timetupleBs*!$**dkk499"#Q2/ /rcXt|j|j|jS)zReturn proleptic Gregorian ordinal for the year, month and day. January 1 of year 1 is day 1. Only the year, month and day values contribute to the result. )r8r}r~rr0s rrzdate.toordinalGs  DKK;;rc|| |j}| |j}| |j}t||||S)z;Return a new date with new values for the specified fields.)r}r~rr)rr%r/r6s rrz date.replaceOsA <::D =KKE ;))CtDz$s++rcVt|tr|j|dk(StSrKrrrr=r>s rr_z date.__eq__[& eT "99U#q( (rcVt|tr|j|dkStSrKrr>s rrbz date.__le__`rrcVt|tr|j|dkStSrKrr>s rrdz date.__lt__e& eT "99U#a' 'rcVt|tr|j|dk\StSrKrr>s rrgz date.__ge__jrrcVt|tr|j|dkDStSrKrr>s rriz date.__gt__orrc|j|j|j}}}|j|j|j}}}t|||f|||fSr;)r}r~rr)rr?rrdrey2m2d2s rrz date._cmptsM**dkk499a1[[%,, BQ1IB|,,rct|jdk(rt|j|_|jS)Hash.rrmr0s rroz date.__hash__zs+ >>R !$.."23DN~~rct|tr^|j|jz}d|cxkr tkr'n tdt |j |StdtS)zAdd a date to a timedelta.r result out of range) rrrr _MAXORDINALrrrr=)rr?os rr@z date.__add__sc eY ' 5::-A1# # 56 6Dz--a00 56 6rct|tr|t|j zSt|tr.|j }|j }t||z St S)z.Subtract two dates, or a date and a timedelta.)rrrrrr=)rr?days1days2s rrCz date.__sub__sY eY ')UZZK00 0 eT "NN$EOO%EUU]+ +rc.|jdzdzS)z:Return day of the week, where Monday == 0 ... Sunday == 6.r`rarr0s rrz date.weekdays 1$))rc0|jdzxsdS)z:Return day of the week, where Monday == 1 ... Sunday == 7.rarr0s r isoweekdayzdate.isoweekdays~~!#(q(rcZ|j}t|}t|j|j|j}t ||z d\}}|dkr#|dz}t|}t ||z d\}}n|dk\r|t|dzk\r|dz }d}t ||dz|dzS)aReturn a named tuple containing ISO year, week number, and weekday. The first ISO week of the year is the (Mon-Sun) week containing the year's first Thursday; everything else derives from that. The first week is 1; Monday is 1 ... Sunday is 7. ISO calendar algorithm taken from http://www.phys.uu.nl/~vgent/calendar/isocalendar.htm (used with permission) rar r4)r}rr8r~rr@_IsoCalendarDate)rr% week1mondayrrr6s r isocalendarzdate.isocalendarszz%d+ T[[$))<5;.2 c !8 AID)$/Ku{2A6ID# RZQ// d1fc!e44rc|t|jd\}}t|||j|jgfSN)r@r}rr~r)ryhiylos rrkzdate._getstates5$**c*Sc3 TYY7899rc@|\}}|_|_|dz|z|_yr)r~rr})rstringrrs r __setstatezdate.__setstates#+1(S$+ty3Y_ rc:|j|jfSr;rtr0s rruzdate.__reduce__rvr)NN)NNN))rrr(rwrxr classmethodrrrrrr*rrrrr.ryr%r/r6rrrr_rbrdrgrirror@rzrCrrrrkrrurrrrrs867ID$$  K K<< 1$#> GG/ <,     - H* ) 5<:%2rrr<rr3c2eZdZdZdZdZdZdZdZdZ y) rzAbstract base class for time zone info classes. Subclasses must override the tzname(), utcoffset() and dst() methods. rctd)z%datetime -> string name of time zone.z&tzinfo subclass must override tzname()NotImplementedErrorrdts rrz tzinfo.tznames!"JKKrctd)zIdatetime -> timedelta, positive for east of UTC, negative for west of UTCz)tzinfo subclass must override utcoffset()rrs rrztzinfo.utcoffsets!"MNNrctd)zdatetime -> DST offset as timedelta, positive for east of UTC. Return 0 if DST not in effect. utcoffset() must include the DST offset. z#tzinfo subclass must override dst()rrs rrz tzinfo.dsts ""GHHrc:t|ts td|j|ur t d|j }| t d|j }| t d||z }|r"||z }|j }| t d||zS)z*datetime in UTC -> datetime in local time.z&fromutc() requires a datetime argumentzdt.tzinfo is not selfz0fromutc() requires a non-None utcoffset() resultz*fromutc() requires a non-None dst() resultz;fromutc(): dt.dst gave inconsistent results; cannot convert)rrrrrwrr)rrdtoffdtdstdeltas rfromutcztzinfo.fromutcs"h'DE E 99D 45 5  =&' '  =IJ J   %KBFFHE} ";<<Ezrcnt|dd}|r|}nd}|j||jfS)N__getinitargs__r)rr __getstate__)r getinitargsr)s rruztzinfo.__reduce__s:d$5t< =DDd&7&7&9::rN) rrr(rwrxrrrrrurrrrrs*ILOI:;rrcZeZdZfdZedZedZedZdZdZ xZ S)IsoCalendarDatec*t|||||fSr;)superr)rr%rrrs rrzIsoCalendarDate.__new__swsT4$9::rc |dSrKrr0s rr%zIsoCalendarDate.year Awrc |dS)Nrrr0s rrzIsoCalendarDate.weekrrc |dSNr+rr0s rrzIsoCalendarDate.weekdayrrc&tt|ffSr;)tupler0s rruzIsoCalendarDate.__reduce__ sd ~&&rcX|jjd|dd|dd|ddS)Nz(year=r z, week=rz , weekday=r+r')rrr0s rr*zIsoCalendarDate.__repr__%s?>>**+a a DG9AG Hr) rrr(rryr%rrrur* __classcell__)rs@rrrsO;' Hrrc eZdZdZdZd"dddZedZedZed Z ed Z ed Z ed Z d Z dZdZdZdZd#dZdZdZdZd$dZeZedZdZdZdZdZdZ d%dddZd&dZ dZ!d Z"d!Z#y)'ra<Time with time zone. Constructors: __new__() Operators: __repr__, __str__ __eq__, __le__, __lt__, __ge__, __gt__, __hash__ Methods: strftime() isoformat() utcoffset() tzname() dst() Properties (readonly): hour, minute, second, microsecond, tzinfo, fold )_hour_minute_second _microsecond_tzinfor _foldr Nrct|ttfrxt|dk(rjt |dddzdkrVt|tr |j d}tj|}|j||xsdd |_ |St|||||\}}}}}t|tj|}||_||_||_||_||_d |_ ||_|S#t $r tdwxYw) zConstructor. Arguments: hour, minute (required) second, microsecond (default to zero) tzinfo (default to None) fold (keyword only, default to zero) r`r rr>rznFailed to encode latin1 string when unpickling a time object. pickle.load(data, encoding='latin1') is assumed.Nr)rrrrrrrrwrr_time__setstater rrrrrrrr)rrrrrrrrs rrz time.__new__Gs teS\ *s4yA~ Qq N4 " $$$L;;x0D>>#&D OOD&.D 1DNK2D &&+t35/ffk4&!~~c"   '   +*L$KLLLs C77D c|jSz hour (0-23)rr0s rrz time.houror5rc|jSz minute (0-59)rr0s rrz time.minutet||rc|jSz second (0-59)rr0s rrz time.secondyr rc|jSzmicrosecond (0-999999)rr0s rrztime.microsecond~   rc|jSztimezone info objectrr0s rrz time.tzinfor rc|jSr;rr0s rrz time.fold zzrcZt|tr|j|ddk(StS)NT allow_mixedr rrrr=r>s rr_z time.__eq__s* eT "99U95: :! !rcVt|tr|j|dkStSrKrr>s rrbz time.__le__& eT "99U#q( (! !rcVt|tr|j|dkStSrKrr>s rrdz time.__lt__& eT "99U#a' '! !rcVt|tr|j|dk\StSrKrr>s rrgz time.__ge__rrcVt|tr|j|dkDStSrKrr>s rriz time.__gt__rrc|j}|j}dx}}||urd}n%|j}|j}||k(}|rdt|j|j|j |j f|j|j|j |j fS|||rytd|jdz|jz|tdzz }|jdz|jz|tdzz } t||j |j f| |j |j fS)NTr+z$cannot compare naive and aware timesrrr) rrrrrrrrr) rr?rmytzottzmyoffotoff base_comparemyhhmmothhmms rrz time._cmps:||}} 4<LNN$EOO%E E>L T\\4<<**,emmU]]++-. . =EM FGGb4<</%19M2MMr!EMM1E9Q;O4OOVT\\4+<+<=U]]E,>,>?A Arcr|jdk(r|jr|jd}n|}|j}|s-t |j d|_|jSt t|j|j|z td\}}|tdz}d|cxkrdkr?nn) r rrrrnrkr@rrrrrr)rrtzoffhrds rroz time.__hash__s >>R yyLLaL(KKME!%akkmA&6!7~~idiiMPUU'a021i**;B;%)$q!T[[$BRBR*S%TDN~~&*1ad>N>N*O%PDN~~rc8|j}t|S)z=Return formatted timezone offset (+xx:xx) or an empty string.)rr)rrs r_tzstrz time._tzstrsnnc""rc|jdk7rd|j|jfz}n!|jdk7rd|jz}nd}dt||jj|j |j |fz}|j|ddd|jzzd z}|jr|ddd z}|S) %Convert to formal string, for repr().r z, %d, %dz, %dr~z%s.%s(%d, %d%s)Nr , tzinfo=%rr' , fold=1)) rrrrr(rrrrrrs rr*z time.__repr__s    !dllD,=,=>>A \\Q %AA  1$ 7 $ ; ; $ DLL! = = << ##255;A ::#2$Arct|j|j|j|j|}|j }|r||z }|S)aReturn the time formatted according to ISO. The full format is 'HH:MM:SS.mmmmmm+zz:zz'. By default, the fractional part is omitted if self.microsecond == 0. The optional argument timespec specifies the number of additional terms of the time to include. Valid options are 'auto', 'hours', 'minutes', 'seconds', 'milliseconds' and 'microseconds'. )r|rrrrr/)rryrrs rrztime.isoformatsG T\\4<<++X 7 [[] GArct|ts td|jd} |t |S#t $rt d|wxYw)z>Construct a time from a string in one of the ISO 8601 formats.rTr)rrr removeprefixrrrw)r time_strings rrztime.fromisoformat sg+s+AB B "..s3  K-k:; ; K9+IJ J Ks <Ac nddd|j|j|jdddf }t|||S)z{Format using strftime(). The date part of the timestamp passed to underlying strftime should not be used. ilrr r)rrrr)rrurs rrz time.strftimes= 1aZZt||2 dFI66rct|ts!tdt|jzt |dk7r|j |St|Srrrs rrztime.__format__'rrcn|jy|jjd}td||S)z^Return the timezone offset as timedelta, positive east of UTC (negative west of UTC).Nrrrrrrs rrztime.utcoffset04 << ''-+v. rcl|jy|jjd}t||SaReturn the timezone name. Note that the name is 100% informational -- there's no requirement that it mean anything in particular. For example, "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all valid replies. Nrrrrrs rrz time.tzname92 << ||""4(d rcn|jy|jjd}td||SaqReturn 0 if DST is not in effect, or the DST offset (as timedelta positive eastward) if DST is in effect. This is purely informational; the DST offset has already been added to the UTC offset returned by utcoffset() if applicable, so there's no need to consult dst() unless you're interested in displaying the DST info. Nrrrrr>s rrztime.dstF4 << !!$'%( rc| |j}| |j}| |j}| |j}|dur |j}| |j }t |||||||S)z;Return a new time with new values for the specified fields.Tr)rrrrrrr)rrrrrrrs rrz time.replaceUsx <99D >[[F >[[F  **K T>[[F <::DtDz$ V$OOrct|jd\}}t|d\}}|j}|jr |dkDr|dz }t ||j |j |||g}|j|fS||jfSNrr=)r@rrrrrrr)rprotocolus2us3us1r- basestates rrkztime._getstatehs$++S1S#s#S JJ ::(Q, HA1dllDLLS*+ << < t||, ,rc|t|ts td|\}|_|_}}}|dkDrd|_|dz |_nd|_||_|dz|zdz|z|_||_y)Nbad tzinfo state argrrrLr r) r _tzinfo_classrrrrrrr)rrrr-rPrNrOs rrztime.__setstateus|  j&G23 37=44<sC s7DJSDJDJDJ"ax3.14; rc<|j|j|fSr;rtrrMs r __reduce_ex__ztime.__reduce_ex__x 899rc$|jdSrrWr0s rruztime.__reduce__!!!$$rr r r r NFrs)NNNNTr=)$rrr(rwrxrryrrrrrrr_rbrdrgrirror/r*rr.rrrrrrrrrkrrWrurrrrr.s),_I%UV%P!!" " " " " A8.# &"G K K 7  HLP%)P& - :%rrceZdZdZej ej zZ d2dddZedZ edZ edZ ed Z ed Z ed Zed Zed3d ZedZed3dZedZed4dZedZdZdZdZdZdZdZdZ d5dddZdZd3dZdZd6dZ dZ!d Z"ed!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d7d*Z,d+Z-e-Z.d,Z/d-Z0d8d.Z1d/Z2d0Z3d1Z4y)9rzdatetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]]) The year, month and day arguments are required. tzinfo may be None, or an instance of a tzinfo subclass. The remaining arguments may be ints. Nr rc jt|ttfrxt|dk(rjdt |dddzcxkrdkrPnnMt|tr t|d}tj|} | j||d | _ | St|||\}}}t||||| \}}}}} t|tj|} || _|| _|| _|| _|| _|| _|| _|| _d | _ | | _| S#t $r t dwxYw) Nrrr+r=rr<rzrFailed to encode latin1 string when unpickling a datetime object. pickle.load(data, encoding='latin1') is assumed.r)rrrrrrrwrr_datetime__setstater rrrr}r~rrrrrrr) rr%r/r6rrrrrrrs rrzdatetime.__new__s; teS\ *s4yB T!AY$ * *$$L x0D>>#&D OOD% (DNK-dE3?eS2D &&+t35/ffk4&!~~c"      '   3*L$KLLLs  DD2c|jSrrr0s rrz datetime.hourr5rc|jSrr r0s rrzdatetime.minuter rc|jSr r r0s rrzdatetime.secondr rc|jSrrr0s rrzdatetime.microsecondrrc|jSrrr0s rrzdatetime.tzinfor rc|jSr;rr0s rrz datetime.foldrrc tj|\}}t|dz}|dk\r |dz }|dz}n|dkr |dz}|dz }|rtjntj }||\ }}} } } } } }}t | d} |||| | | | ||}||sd}||kr!tjjdr|S|||z dd \}}} } } } |||| | | | ||}||z td|z }|jdkr=|||tddzzdd \}}} } } } |||| | | | ||}||k(rd|_ |S||j|}|S) Construct a datetime from a POSIX timestamp (like time.time()). A timezone info object may be passed in as well. rrrr rNrwinr`)rrrrbgmtimerminsysplatform startswithrrrr)rrrrfracrx converterrrdrerfrgrhrrrresultmax_fold_secondsprobe1transprobe2s r_fromtimestampzdatetime._fromtimestamps **Q-a 4#:  = FA 'MB !V FA 'MB$'ELLU__ 2;A,/1aRWdC R[Q1b"b"b1 :c )  ## (?(?(F "+A0@,@"A"1"E Aq!RRAq"b"b"5FVOi3C&DDEzzA~&/EYq!_4L0L&Mbq&Q#1aRQ1b"b"b9V##$FL ^ZZ'F rcBt||j||du|S)rjN)rrx)r timestamprs rrzdatetime.fromtimestamps% "!!)Rt^R@@rc`ddl}|jdtd|j|ddS)z6Construct a naive UTC datetime from a POSIX timestamp.r Nzdatetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(t, datetime.UTC).r+ stacklevelT)warningswarnDeprecationWarningrx)rrr~s rutcfromtimestampzdatetime.utcfromtimestamps=  J)!"  $ !!!T400rcNtj}|j||S)zBConstruct a datetime from time.time() and optional time zone info.r)rrrs rnowz datetime.nows" JJL  B''rcddl}|jdtdtj}|j |ddS)z*Construct a UTC datetime from time.time().r Nzdatetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).r+r|T)r~rrrbrrx)rr~rs rutcnowzdatetime.utcnow sG  =)!"  $ JJL!!!T400rc Pt|ts tdt|ts td|dur |j}||j |j |j|j|j|j|j||j S)z8Construct a datetime from a given date and a given time.z%date argument must be a date instancez%time argument must be a time instanceTr) r _date_classr _time_classrr%r/r6rrrrr)rrrrs rcombinezdatetime.combine-s$ ,CD D$ ,CD D T>[[F499djj$((99dkk4;;8H8H + +rc^t|ts tdt|dkrt d| t |}|d|}||dzd}t |}|r t|}ngd}|||zS#t$rt d|dwxYw#t$rt d|dwxYw)zBConstruct a datetime from a string in one of the ISO 8601 formats.rrarr rNr\)rrrrrwrrr)rrseparator_locationdstrrdate_componentstime_componentss rrzdatetime.fromisoformat:s+s+AB B { a 9+IJ J H!CK!P q!34D 21 467D3D9O  L"7"= 1O_688 H,[O<>CG H H L 0@BGKL Ls#A7 B7BB,c |j}|d}n|rd}nd}t|j|j|j|j |j |j|S)rrrr )rrlr%r/r6rrr)rrs rrzdatetime.timetupleYsYhhj ;C CC!$))TZZ"&))T[[$++"%' 'rcV tddd d}| z tddz} fd}|||z }||z }||}||k(r'|| |f|jz}|||z }||k(r|S||z }||z }||} | |k(r|S||k(r|Sttf|j||S)zReturn integer POSIX timestamp.rrr ctj|dd\}}}}}}t||||||z tddzS)Nr`r r)rbrrr)urrdrerfrgrhepochs rlocalzdatetime._mktime..localksJ"'//!"4Ra"8 Aq!RRQ1b"b1E9i1oM Mr)rrrmaxrm) rrtrrru1t1u2rt2rs @r_mktimezdatetime._mktimefsq!$$ E\i1o - N !HqL U 2Y 7((*:;DIIFFBb BAAv RA U 2Y 7I 7ISz$))$R,,rc|j"|j}||jdz zS|tz j S)zReturn POSIX timestamp as floatr)rrr_EPOCHr1r4s rrzzdatetime.timestamps@ <<  At''#-- -6M002 2rc |j}|r||z}|j|j|j}}}|j|j |j }}}t||||||dS)z4Return UTC time tuple compatible with time.gmtime().r )rr%r/r6rrrrl)rrrrdrerfrgrhs r utctimetuplezdatetime.utctimetuplesc!  FND))TZZa1YY T[[B!!Q2r2q99rcXt|j|j|jS)zReturn the date part.)rr}r~rr0s rrz datetime.datesDJJ TYY77rct|j|j|j|j|j S)z'Return the time part, with tzinfo None.r)rrrrrrr0s rrz datetime.times.DIIt{{DKK9I9IPTPYPYZZrct|j|j|j|j|j |j S)z'Return the time part, with same tzinfo.r)rrrrrrrr0s rtimetzzdatetime.timetzs6DIIt{{DKK9I9ILLtyy2 2rc  6| |j}| |j}| |j}| |j}| |j}| |j }| |j }|dur |j}| |j} t||||||||||  S)z?Return a new datetime with new values for the specified fields.Tr) r%r/r6rrrrrrr) rr%r/r6rrrrrrs rrzdatetime.replaces <99D =JJE ;((C <99D >[[F >[[F  **K T>[[F <99DtDz$sD&&%vD: :rc|jW|j}|jd|jz j}||k7r+||kD|jk(r|}n|tz t dz}t j|}t|dd}|j}|j}tt ||S)Nrrr7r`) rrrrrrrbrr tm_gmtofftm_zoner)rtsts2localtmrgmtoffzones r_local_timezonezdatetime._local_timezones ;; B,,AdiiK,088:Cby"H*B-Ia$88B//"%'"1+&"" &1488rc||j}nt|ts td|j}|"|j}|j |}nD|j |}|1|j dj}|j |}||ur|S||z j |}|j |S)Nz)tz argument must be an instance of tzinfor)rrrrrrr)rrr#myoffsetrs r astimezonezdatetime.astimezones :%%'BB'GH H{{ <'')D~~d+H~~d+H||4|0@@B>>$/ :Kh''r'2zz#rc|jdzxsd}dt|t|j|j|j |j |j|jfzS)rraz%s %s %2d %02d:%02d:%02d %04d) rrrr~rrrrr}rs rrzdatetime.ctimes_.."Q&+!. g   $ II JJ dll JJ 2 rcd|j|j|j|fzt|j|j |j |j|z}|j}t|}|r||z }|S)aReturn the time formatted according to ISO. The full format looks like 'YYYY-MM-DD HH:MM:SS.mmmmmm'. By default, the fractional part is omitted if self.microsecond == 0. If self.tzinfo is not None, the UTC offset is also attached, giving giving a full format of 'YYYY-MM-DD HH:MM:SS.mmmmmm+HH:MM'. Optional argument sep specifies the separator between date and time, default 'T'. The optional argument timespec specifies the number of additional terms of the time to include. Valid options are 'auto', 'hours', 'minutes', 'seconds', 'milliseconds' and 'microseconds'. z%04d-%02d-%02d%c) r}r~rr|rrrrrr)rrryrrrs rrzdatetime.isoformatsv  4::t{{DIIs"K K $**dllDLL++X77nn C  GArc |j|j|j|j|j|j |j g}|ddk(r|d=|ddk(r|d=t|d|jjddjtt|d}|j|ddd|jzzdz}|jr|ddd z}|S) r1rr r$r%r&r'Nr2r3)r}r~rrrrrrrr(rrrrr)rLrs rr*zdatetime.__repr__s ZZdii ZZt||T5F5F H R5A:" R5A:",T2>>6699Sa[1 3 << ##255;A ::#2$Arc&|jdS)zConvert to string, for str(). r)rr0s rr.zdatetime.__str__$s~~#~&&rc0ddl}|j|||S)zKstring, format -> new datetime parsed from a string (like time.strptime()).r N) _strptime_strptime_datetime)rrrurs rstrptimezdatetime.strptime(s ++CfEErcn|jy|jj|}td||S)z\Return the timezone offset as timedelta positive east of UTC (negative west of UTC).Nrr=r>s rrzdatetime.utcoffset.r?rcl|jy|jj|}t||SrArBrCs rrzdatetime.tzname7rDrcn|jy|jj|}td||SrFrGr>s rrz datetime.dstDrHrc|t|tr|j|ddk(St|tstSy)NTrr F)rrrrr=r>s rr_zdatetime.__eq__Us7 eX &99U95: :E4(! !rct|tr|j|dkSt|tstSt ||yrKrrrrr=rr>s rrbzdatetime.__le__]: eX &99U#q( (E4(! ! dE "rct|tr|j|dkSt|tstSt ||yrKrr>s rrdzdatetime.__lt__e: eX &99U#a' 'E4(! ! dE "rct|tr|j|dk\St|tstSt ||yrKrr>s rrgzdatetime.__ge__mrrct|tr|j|dkDSt|tstSt ||yrKrr>s rrizdatetime.__gt__urrc |j}|j}dx}}||urd}n|j}|j}|r^||j|j jk7ry||j|j jk7ry||k(}|rt |j |j |j|j|j|j|jf|j |j |j|j|j|j|jfS|||rytd||z }|jdkry|xrdxsdS)NTrr+z(cannot compare naive and aware datetimesr rr)rrrrrr}r~rrrrrrr) rr?rr#r$r%r&r'diffs rrz datetime._cmp}sS||}} 4<LNN$EOO%EDLL$))mL<FFHHEMM5::~M>HHJJ E>L T[[$))T\\4<<**,ellEJJemmU]]++-. . =EM JKKe| 99q=zQrc *t|tstSt|j|j|j |j |j}||z }t|jd\}}t|d\}}d|jcxkr tkrgn t'dt|jtj|jt!||||j"|j$St'd)zAdd a datetime and a timedelta.rrrr rr)rrr=rrrrrr@rprrrrrrrrrrr)rr?rrremrrs rr@zdatetime.__add__s%+! !$..* $ "&,,"&,,'+'8'8 : 5==$/ cR uzz ([ ( 122 :%%d&6&6uzz&B&*4+0+=+=26,,'@A A122rcNt|tst|tr|| zStS|j }|j }|j |j dzz|jdzz}|j |j dzz|jdzz}t||z ||z |j|jz }|j|jur|S|j}|j}||k(r|S|| td||z|z S)z6Subtract two datetimes, or a datetime and a timedelta.rrz(cannot mix naive and timezone-aware time) rrrr=rrrrrrrr) rr?rrsecs1secs2baser%r&s rrCzdatetime.__sub__s%*%+uf}$! ! ! t||b004::3DD   22U[[45GG**U-?-??A <<5== (K ! E>K =EMFG Ge|e##rc|jdk(r|jr|jd}n|}|j}|-t |j d|_|jSt |j|j|j}|jdz|jdzz|jz}t t|||j|z |_|jS)Nrr rrr)r rrrrnrkr8r%r/r6rrrrr)rrr,rrps rrozdatetime.__hash__s >>R yyLLaL(KKME}!%akkmA&6!7 ~~  4::txx@))d*T[[2-== K!%igt?O?O&PSX&X!Y~~rc |t|jd\}}t|jd\}}t|d\}}|j}|jr |dkDr|dz }t ||||j |j|j|j|||g }|j|fS||jfSrK) r@r}rr~rrrrrrr) rrMrrrNrOrPrdrQs rrkzdatetime._getstates$**c*S$++S1S#s#S KK ::(Q, HA3Q ::t||T\\S*+  << < t||, ,rc |t|ts td|\ }}}|_|_|_|_}}}|dkDrd|_|dz |_nd|_||_|dz|z|_ |dz|zdz|z|_ ||_ y)NrSrrrLr rr) rrTrrrrrrr~r}rr) rrrrrrdrPrNrOs rrzdatetime.__setstates  j&G23 36< 4c1di t|S#s s7DJc'DKDJDK3Y_ "ax3.14; rc<|j|j|fSr;rtrVs rrWzdatetime.__reduce_ex__rXrc$|jdSrrZr0s rruzdatetime.__reduce__ r[r)NNr r r r Nr;)T)NNNNNNNT)r7rsr]r_)5rrr(rwrrxrrryrrrrrrrrxrrrrrrrrrzrrrrrrrr*r.rrrrr_rbrdrgrirr@rzrCrorkrbrWrurrrrrs /IJK&*!45!H!!))VAA 1 1((  1 1 + +99< ' -F3:8[2 =ACG::29"66&'FF   "#####J3&H$0 " - :%rrcRd}t|dd}|dzdz}||z }||kDr|dz }|S)Nr=rr`ra)r8)r%THURSDAYfirstday firstweekdayrs rrr sGHa#HqLA%L\)Khq rceZdZdZeZefdZeddZdZ dZ dZ dZ d Z d Zd Zd Zd ZeddZe ZedZy)r)_offset_namec<t|ts td||jur|s |jSd}nt|t s td|j |cxkr|jkstdtd|j||S)Nzoffset must be a timedeltazname must be a stringzYoffset must be a timedelta strictly between -timedelta(hours=24) and timedelta(hours=24).) rrr_Omittedrr _minoffset _maxoffsetrw_create)rrrs rrztimezone.__new__ s&),89 9 3<< wwDD#&34 4~~93>>945 5:45 5{{64((rNcLtj|}||_||_|Sr;)rrrr)rrrrs rrztimezone._create* s#~~c"   rcd|j |jfS|j|jfS)zpickle support)rrr0s rrztimezone.__getinitargs__1 s+ :: LL? " djj))rc`t|tr|j|jk(StSr;)rrrr=r>s rr_ztimezone.__eq__7 s% eX &<<5==0 0rc,t|jSr;)rnrr0s rroztimezone.__hash__< sDLL!!rc||jury|j2t|d|jjd|j dSt|d|jjd|j d|jdS)aConvert to formal string, for repr(). >>> tz = timezone.utc >>> repr(tz) 'datetime.timezone.utc' >>> tz = timezone(timedelta(hours=-5), 'EST') >>> repr(tz) "datetime.timezone(datetime.timedelta(-1, 68400), 'EST')" zdatetime.timezone.utcr$r%r'r&)rrrrr(rr0s rr*ztimezone.__repr__? sq 488 * :: "3D"9"&.."="="&,,0 0#4D"9"&.."="="&,, < t|ts|ytd)Nz2dst() argument must be a datetime instance or None)rrrrs rrz timezone.dstd s% b( #rz#$ $rct|tr(|j|ur td||jzSt d)Nzfromutc: dt.tzinfo is not selfz6fromutc() argument must be a datetime instance or None)rrrrwrrrs rrztimezone.fromutcj sK b( #yy$ "/00 $ $#$ $rr>r)rnrrc 0|sy|tdkrd}| }nd}t|td\}}t|td\}}|j}|j}|rd||dd |dd |dd |d  S|rd||dd |dd |dSd||dd |dS) Nr r rrrrr02drr$06d)rr@rprr)rrrnrestrorprrs rrztimezone._name_from_offsetv s 9Q< DFEDUIA$67 ttYq%9: ,,(( $c{!GC='# S)+ , uSk73-q F FTF5+Qwsm44rr;)rrr(rxrrrrrrr_ror*r.rrrrrrr staticmethodrrrrrr s"IxH"* ) *  "<(!$ $$ $"5JJ55rrr+rrr^)r)Drw__all__rrbmathrrnoperatorr rrrrr rr-r2dbmr7rr&r)r0r3r8rArBrCrKrrrlr|rrrrrrrrrrrrrrrrrrmr resolutionrrrrrrrTrrrrrr rrrrrrs  ( $/   FT !" Cc"3JC B* !F  C  C  A <~? C I ** &@0F6r!"H6.`,^B1 ) 3"P9 (|2|2| *% yB'-/  a0 22B  1a= b" #:;:;zHeH6# X%X%t  1a= BF #+s %ts %l1a  b"b"b&9 Q/ r5vr5h%%il33hl R!@ @A  B ?@ $1X\\ 2r