fg dZdZddlZddlZddlZddlmZ dZ dZ dZ dZ d Zgd Zd gZdZeddD]Zej'eeez Z[[d Zd ZdZdZdZedZedZedZedk(sJedezdzk(sJedezdz k(sJdZgdZgdZdZdHdZ dIdZ!dZ"dZ#dZ$d Z%gd!Z&d"Z'd#Z(d$Z)d%Z*d&Z+d'Z,d(Z-d)Z.d*Z/d+Z0Gd,d-Z1e1d.e1_2e1d/d0d1d1d23e1_3e1d4e1_4Gd5d6Z5e5Z6e5ddde5_2e5dd7d8e5_3e1d9e5_4Gd:d;Z7Gd<d=e8Z9e9Z:[9e7Z;Gd>d?ZeZ<eddde_2ed0d1d1d2e_3e1d4e_4Gd@dAe5Z=e=ddde=_2e=dd7d8d0d1d1d2e=_3e1d4e=_4dBZ>GdCdDe7Z?e?je1dxZAe?_Be?je1d0d1E e?_2e?je1d0d1Ee?_3e=dFdde?jGZCy)JzConcrete 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 "/usr/lib/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 )r&_DAYS_IN_MONTHr%months r_days_in_monthr1:s@   "U" "U"  zhtn %  rcnd|cxkr dksJdJdt||dkDxr t|zS)zCyear, month -> number of days in year preceding first day of month.rr+month must be in 1..12r,)_DAYS_BEFORE_MONTHr&r/s r_days_before_monthr5AsD   555 555  e $ (Dhtn EErcd|cxkr dksJdJdt||}d|cxkr|ks nJd|zt|t||z|zS)z>year, month, day -> ordinal, considering 01-Jan-0001 as day 1.rr+r3day must be in 1..%d)r1r)r5r%r0daydims r_ymd2ordr;Fsr   555 555  u %C ?s?:3c9:? d # tU + ,  rieir"c |dz}t|t\}}|dzdz}t|t\}}t|t\}}t|d\}}||dz|dzz|zz }|dk(s|dk(r|dk(sJ|dz ddfS|d k(xr |d k7xs|d k(}|t |k(sJ|d zd z }t ||d kDxr|z}||kDr|dz}|t ||d k(xr|zz}||z}d|cxkrt||ksJJ|||dzfS)z@ordinal -> (year, month, day), considering 01-Jan-0001 as day 1.rr$r(r#r"r r+r2r=r,)divmod_DI400Y_DI100Y_DI4Yr&r4r.r1) nn400r%n100n4n1leapyearr0 precedings r_ord2ymdrN_s`.FAQ GD! #:>DQ GD! 1e EB 1cNEBD3Ja " $$D Qw$!)Av vAvr2~Qw2B"H1 H x~ %% % VME"5)UQY-C8DI1}  ^E*eqj.EXFF NA  /N4/ // // / ! r) NJanFebMarAprMayJunJulAugSepOctNovDec)NMonTueWedThuFriSatSunc t|||dzdz}t|||z}tj|||||||||f S)N)r;r5_time struct_time) rmdhhmmssdstflagwdaydnums r_build_struct_timerosO 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 microsecondsautorursrtzUnknown timespec value)formatKeyError ValueError)rirjrkustimespecspecsfmts r _format_timers~")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 -+rrqrrz %s%02d%s%02dz%s%02d.%06d)daysrCrrurs)offsepssignrirjrks r_format_offsetrs A  88a<D$CDYQ/0BIa01B ^tRb1 11  S"**-- -AWr.. Hrcd}d}d}d}g}|j}dt|} } | | kr}|| } | dz } | dk(r^| | krO|| } | dz } | dk(r%|dt|ddz}|j|n,| dk(rD|*t|drt |j d }nd }d|vsJ|j|n| d k(rq| | kr|| } | dz } | dk(rD|*t|drt |j d }nd }d|vsJ|j|n|d|| || nm| d k(rF|2d }t|d r$|j } | | jdd}|j|n"|d|| n|dn|| | | kr}d j|}tj||S)Nr r%fz%06d microsecondz utcoffsetrr:Ztznamez%%) appendlengetattrhasattrrrrreplacejoinrestrftime)objectrx timetuplefreplacezreplace colonzreplaceZreplace newformatpushirGchch2rs r_wrap_strftimersHHMHI   D c&kqA a% AY Q 91uAYQ9'#)GF4A1-F$F$$X.3Y'"6;7'5f6F6F6Hb'QH')Hh...$$X.3Y1u$QiQ#:,4#*6;#?4B6CSCSCU[^4_M46M#&m#;;#;%,,]; I H I3Y'#%"684 & A }+,99S$+?$$X.IHS Hg a%h "I >>)Y //rc |dvS)N 0123456789r)cs r_is_ascii_digitrs rcXt|}|dk(ry|dkDsJd}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) NrdrWr"r=zInvalid ISO string rr,r )rrzr)dtstr len_dtstrdate_separatorweek_indicatoridxs r"_find_isoformat_datetime_separatorrsE IA~ q==NN Qx>! 8~ %1} !5661}q^!;>$%9::r>oeBi&@ 8~ %C /&uSz2q / Qw Qw!|rct|dvsJt|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) Nrdrrr r"rrrr,z"Inconsistent use of dash separator)rintrzlist_isoweek_to_gregorian)rr%has_sepposweeknodaynor0r9s r_parse_isoformat_daterOsJ u: ## # 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'rwr#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 componentrcz%Non-digit values in unparsed fraction)rrangerzr_FRACTION_CORRECTIONallmapr) tstrlen_str time_compsrcomp next_charr len_remainderto_parses r_parse_hh_mm_ss_ffrvse$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(!qAv(sr@rqrrrsru) rrzfindrrutcrrr) 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 5Trrdr"r@FzInvalid week: rzInvalid weekday: z (range is [1, 7]))rr rzr;r&_isoweek1mondayrN)r%weekr9 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|dvsJ|yt|tstd|dt|dtd |cxkrtdksnt |d|dy)N)rdstztzinfo.z'() must return None or timedelta, not ''rz()=zG, must be strictly between -timedelta(hours=24) and timedelta(hours=24))rrrrrz)roffsets r_check_utc_offsetrst ' '' ' ~ 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+r3r7)_indexrr rzr1r8s r_check_date_fieldsr s $"c)))!S!!!1v""" gu %#(::g#6 Kc'l* **'lG > )K{#s* **(K+u---;3&&&'3'''w0 g T  S\!S!!!1v&&&$8}u$$$ lE * !89L$*<$A !G\"7G4MD' IA LA|,L$*<$A !G\"7G4MD' IA LA !89L!S!!!,,,,1v&&&< 5(((\73  W G$a T !S!!!!S!a1&6w&666&666"c"qB'8'888'888 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.(, ))rrrrrr __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)rGs rpluralz!timedelta.__str__..plurals#a&A+-#333rz %d day%s, r)rCrrr)rrjrkrirr2s r__str__ztimedelta.__str__s| r*BBB b"b\ ) :: 4tzz 22a7A   Gd0000Arc`|jdz|jzdz|jzdz S)zTotal seconds in the duration.rr)rrsrurs r total_secondsztimedelta.total_secondss7U"T\\1U:!!"%*+ +rc|jSrrr5s rrztimedelta.dayszzrc|jSrs)rr5s rrsztimedelta.secondss}}rc|jSru)rr5s rruztimedelta.microsecondss!!!rct|trRt|j|jz|j|jz|j|jzSt SNrrrrrNotImplementedrothers r__add__ztimedelta.__add__X eY 'TZZ%++5!]]U^^;!//%2E2EEG Grct|trRt|j|jz |j|jz |j|jz St Sr@rArCs r__sub__ztimedelta.__sub__rFrc:t|tr| |zStSr@)rrrBrCs r__rsub__ztimedelta.__rsub__s eY '55= rc^t|j |j |j Sr@)rrrrr5s r__neg__ztimedelta.__neg__ s.$**--,,,. .rc|Sr@rr5s r__pos__ztimedelta.__pos__s rc*|jdkr| S|SNr r9r5s r__abs__ztimedelta.__abs__s ::>5LKrc0t|tr4t|j|z|j|z|j |zSt|t r=|j}|j\}}tddt||z|StSrP) rrrrrrr_to_microsecondsas_integer_ratior rBrrDusecrrs r__mul__ztimedelta.__mul__s eS !TZZ%/!]]U2!//%79 9 eU #((*D))+DAqQ#4TAXq#AB BrcZ|jdz|jzdz|jzS)Nrrrrrr5s rrSztimedelta._to_microseconds)s/w'$--77B""# $rct|ttfstS|j }t|tr||j zSt|trtdd||zSyrP)rrrrBrS)rrDrVs 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|SyrP)rrrrrBrSr rTrUs 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|StSrP)rrrSrB)rrDr s r__mod__ztimedelta.__mod__Bs= eY '%%'%*@*@*BBAQ1% %rct|tr:t|j|j\}}|tdd|fStSrP)rrrCrSrB)rrDr r s r __divmod__ztimedelta.__divmod__HsK eY '$//10024DAqi1a(( (rcVt|tr|j|dk(StSrPrrrrBrCs r__eq__ztimedelta.__eq__Q& eY '99U#q( (! !rcVt|tr|j|dkStSrPrcrCs r__le__ztimedelta.__le__WrercVt|tr|j|dkStSrPrcrCs r__lt__ztimedelta.__lt__]& eY '99U#a' '! !rcVt|tr|j|dk\StSrPrcrCs r__ge__ztimedelta.__ge__crercVt|tr|j|dkDStSrPrcrCs r__gt__ztimedelta.__gt__irjrcvt|tsJt|j|jSr@)rrr _getstaterCs rrztimedelta._cmpos-%+++DNN$eoo&788rct|jdk(rt|j|_|jS)Nrrhashrpr5s r__hash__ztimedelta.__hash__ss+ >>R !$.."23DN~~rcd|jdk7xs |jdk7xs|jdk7SrPrYr5s r__bool__ztimedelta.__bool__xs6 a( "(""a' )rcH|j|j|jfSr@rYr5s rrpztimedelta._getstates DMM4+=+=>>rc:|j|jfSr@rrpr5s r __reduce__ztimedelta.__reduce__ 011rN)r r r r r r r )%rrr-__doc__ __slots__rr/r3r6propertyrrsrurE__radd__rHrJrLrNrQrW__rmul__rSr[r]r_rardrgrirlrnrrtrvrprzrrrrrGs&BI56:;cJ / + ""H . H$2 C " " " " " 9 )?2rri6errrr)rrqrrrsrur>c0eZdZdZdZd$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_dayrNc|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)rbytesrrordencodeUnicodeEncodeErrorrzrr_date__setstaterrrrr)r r%r0r9rs rrz date.__new__s M teS\ *s4yA~ T!AY %2 %$$L;;x0D>>#&D OOD !DNK-dE3?eS~~c"    !*L$KLLLs CC+c Ttj|\ }}}}}}}} } ||||S)z;Construct a date from a POSIX timestamp (like time.time()).)re localtime) r trrgrhrirjrkweekdayjdayrs r fromtimestampzdate.fromtimestamps338//!2D/1aRWdC1a|rcLtj}|j|S)z"Construct a date from time.time().rerr)r rs 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. )rN)r rGrrgrhs 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 strrInvalid isoformat string: )rrrrrzr 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)r r%rr9s 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-rrrr5s 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.rdz%s %s %2d 00:00:00 %04d) toordinal _DAYNAMES _MONTHNAMESrrrrrs rctimez date.ctime sK.."Q&+!( g   $ IItzz,## #rc8t|||jS)zQ Format using strftime(). Example: "%d/%m/%Y, %H:%M:%S" )rr)rrxs 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)rrrr5s r isoformatzdate.isoformat s" 4::t{{DII"FFFrc|jS)z year (1-9999))rr5s rr%z date.year.r:rc|jS)z month (1-12))rr5s rr0z date.month3s{{rc|jS)z day (1-31))rr5s rr9zdate.day8syyrc `t|j|j|jddddS)9Return local time tuple compatible with time.localtime().r r)rorrrr5s rrzdate.timetuple@s*!$**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. )r;rrrr5s rrzdate.toordinalEs  DKK;;rc|| |j}| |j}| |j}t||||S)z;Return a new date with new values for the specified fields.)rrrr)rr%r0r9s rrz date.replaceMsA <::D =KKE ;))CtDz$s++rcVt|tr|j|dk(StSrPrrrrBrCs rrdz date.__eq__Y& eT "99U#q( (rcVt|tr|j|dkStSrPrrCs rrgz date.__le__^rrcVt|tr|j|dkStSrPrrCs rriz date.__lt__c& eT "99U#a' 'rcVt|tr|j|dk\StSrPrrCs rrlz date.__ge__hrrcVt|tr|j|dkDStSrPrrCs rrnz date.__gt__mrrct|tsJ|j|j|j}}}|j|j|j}}}t |||f|||fSr@)rrrrrr)rrDrrgrhy2m2d2s rrz date._cmprs]%&&&**dkk499a1[[%,, BQ1IB|,,rct|jdk(rt|j|_|jS)Hash.rrrr5s rrtz date.__hash__xs+ >>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 _MAXORDINALrrrrB)rrDos rrEz 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.)rrrrrrB)rrDdays1days2s rrHz date.__sub__sY eY ')UZZK00 0 eT "NN$EOO%EUU]+ +rc.|jdzdzS)z:Return day of the week, where Monday == 0 ... Sunday == 6.rcrdrr5s rrz date.weekdays 1$))rc0|jdzxsdS)z:Return day of the week, where Monday == 1 ... Sunday == 7.rdrr5s 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) rdr r4)rrr;rrrC_IsoCalendarDate)rr% week1mondayrrr9s r isocalendarzdate.isocalendarszz%d+ T[[$))<5;.2 c !8 AID)$/Ku{2A6ID# RZQ// d1fc!e44rc|t|jd\}}t|||j|jgfSN)rCrrrr)ryhiylos rrpzdate._getstates5$**c*Sc3 TYY7899rc@|\}}|_|_|dz|z|_yr)rrr)rstringrrs r __setstatezdate.__setstates#+1(S$+ty3Y_ rc:|j|jfSr@ryr5s rrzzdate.__reduce__r{r)NN)NNN))rrr-r|r}r classmethodrrrrrr/rrrrr3r~r%r0r9rrrrdrgrirlrnrrtrErrHrrrrprrzrrrrrs867ID $$  K K<< 1$#> GG/ <,     - H* ) 5<:%2rrr+rr8c2eZdZdZdZdZdZdZdZdZ 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)rrrrrzrr)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 rrzztzinfo.__reduce__s:d$5t< =DDd&7&7&9::rN) rrr-r|r}rrrrrzrrrrrs*ILOI:;rrcZeZdZfdZedZedZedZdZdZ xZ S)IsoCalendarDatec*t|||||fSr@)superr)r r%rrrs rrzIsoCalendarDate.__new__swsT4$9::rc |dSrPrr5s rr%zIsoCalendarDate.year Awrc |dS)Nrrr5s rrzIsoCalendarDate.weekrrc |dSNr,rr5s rrzIsoCalendarDate.weekdayrrc&tt|ffSr@)tupler5s rrzzIsoCalendarDate.__reduce__sd ~&&rcX|jjd|dd|dd|ddS)Nz(year=r z, week=rz , weekday=r,r,)rrr5s rr/zIsoCalendarDate.__repr__#s?>>**+a a DG9AG Hr) rrr-rr~r%rrrzr/ __classcell__)rs@rrr sO;' 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) rcr rrArznFailed to encode latin1 string when unpickling a time object. pickle.load(data, encoding='latin1') is assumed.Nr)rrrrrrrrzrr_time__setstaterrrrrrrrr)r rrrrrrrs rrz time.__new__Es teS\ *s4yA~ Qq N4 " $$$L;;x0D>>#&D OOD&.D 1DNK2D &&+t35/ffk4&!~~c"   '   +*L$KLLLs C77D c|jSz hour (0-23)rr5s rrz time.hourmr:rc|jSz minute (0-59)rr5s rrz time.minuter||rc|jSz second (0-59)rr5s rrz time.secondwrrc|jSzmicrosecond (0-999999)rr5s rrztime.microsecond|   rc|jSztimezone info objectrr5s rrz time.tzinforrc|jSr@rr5s rrz time.fold zzrcZt|tr|j|ddk(StS)NT allow_mixedr rrrrBrCs rrdz time.__eq__s* eT "99U95: :! !rcVt|tr|j|dkStSrPrrCs rrgz time.__le__& eT "99U#q( (! !rcVt|tr|j|dkStSrPrrCs rriz time.__lt__& eT "99U#a' '! !rcVt|tr|j|dk\StSrPrrCs rrlz time.__ge__r!rcVt|tr|j|dkDStSrPrrCs rrnz time.__gt__r#rct|tsJ|j}|j}dx}}||urd}n%|j}|j}||k(}|rdt |j |j |j|jf|j |j |j|jfS|||rytd|j dz|j z|tdzz }|j dz|j z|tdzz } t ||j|jf| |j|jfS)NTr,z$cannot compare naive and aware timesrrr) rrrrrrrrrrr) rrDrmytzottzmyoffotoff base_comparemyhhmmothhmms rrz time._cmpsJ%&&&||}} 4<LNN$EOO%E E>L T\\4<<**,emmU]]++-. . =EM FGGb4<</%19M2MMr!EMM1E9Q;O4OOVT\\4+<+<=U]]E,>,>?A Arc|jdk(r2|jr|jd}n|}|j}|s-t |j d|_|jSt t|j|j|z td\}}|tdzrJd|tdz}d|cxkrd kr?nn>R yyLLaL(KKME!%akkmA&6!7~~idiiMPUU'a021y33C^C3i**;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"|dddk(sJ|ddd |jzzdz}|jr|dddk(sJ|ddd z}|S) %Convert to formal string, for repr().r z, %d, %dz, %drz%s.%s(%d, %d%s)Nrr, , tzinfo=%r , fold=1)) rrrrr-rrrrrrs rr/z time.__repr__s    !dllD,=,=>>A \\Q %AA  1$ 7 $ ; ; $ DLL! = = << #RS6S= =#255;A ::RS6S= =#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'. )rrrrrr3)rr|rrs 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 removeprefixrrrz)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)rrxrs 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.utcoffset.4 << ''-+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.tzname72 << ||""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. NrrrrrBs rrztime.dstD4 << !!$'%( 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.replaceSsx <99D >[[F >[[F  **K T>[[F <::DtDz$ V$OOrct|jd\}}t|d\}}|j}|jr |dkDr|dz }t ||j |j |||g}|j|fS||jfSNrr@)rCrrrrrrr)rprotocolus2us3us1r1 basestates rrpztime._getstatefs$++S1S#s#S JJ ::(Q, HA1dllDLLS*+ << < t||, ,rc|t|ts td|\}|_|_}}}|dkDrd|_|dz |_nd|_||_|dz|zdz|z|_||_y)Nbad tzinfo state argrrrPr r) r _tzinfo_classrrrrrrr)rrrr1rTrRrSs rrztime.__setstatess|  j&G23 37=44<sC s7DJSDJDJDJ"ax3.14; rc<|j|j|fSr@ryrrQs r __reduce_ex__ztime.__reduce_ex__x 899rc$|jdSrr[r5s rrzztime.__reduce__!!!$$rr r r r NFrv)NNNNTr@)$rrr-r|r}rr~rrrrrrrdrgrirlrnrrtr3r/rr3rrrrrrrrrprr[rzrrrrr,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)rrrrrrrzrr_datetime__setstaterrrrrrrrrrrrr) r r%r0r9rrrrrrrs rrzdatetime.__new__s; teS\ *s4yB T!AY$ * *$$L x0D>>#&D OOD% (DNK-dE3?eS2D &&+t35/ffk4&!~~c"      '   3*L$KLLLs  DD2c|jSr r r5s rrz datetime.hourr:rc|jSr r r5s rrzdatetime.minuterrc|jSrrr5s rrzdatetime.secondrrc|jSrrr5s rrzdatetime.microsecondrrc|jSrrr5s rrzdatetime.tzinforrc|jSr@rr5s 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 rNrwinrc)rrrregmtimerminsysplatform startswithrrrr)r rrrfracr{ converterrrgrhrirjrkrrrresultmax_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)rnN)rr|)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)warningswarnDeprecationWarningr|)r rrs rutcfromtimestampzdatetime.utcfromtimestamp s=  J)!"  $ !!!T400rcNtj}|j||S)zBConstruct a datetime from time.time() and optional time zone info.r)r rrs 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,rT)rrrrerr|)r rrs rutcnowzdatetime.utcnowsG  =)!"  $ 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%r0r9rrrrr)r rrrs 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.rrdrr rNr`)rrrrrzrrr)r rseparator_locationdstrrdate_componentstime_componentss rrzdatetime.fromisoformat8s+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 )rror%r0r9rrr)rrs rrzdatetime.timetupleWsYhhj ;C CC!$))TZZ"&))T[[$++"%' 'rcd tddd d}| z tddz} fd}|||z }||z }||}||k(r'|| |f|jz}|||z }||k(r|S||z }||k7sJ||z }||} | |k(r|S||k(r|Sttf|j||S)zReturn integer POSIX timestamp.rrr ctj|dd\}}}}}}t||||||z tddzS)Nrcr r)rerrr)urrgrhrirjrkepochs rlocalzdatetime._mktime..localisJ"'//!"4Ra"8 Aq!RRQ1b"b1E9i1oM Mr)rrrmaxrq) rrxrrru1t1u2rt2rs @r_mktimezdatetime._mktimedsq!$$ E\i1o - N !HqL U 2Y 7((*:;DIIFFBb BAAv RA6M6 U 2Y 7I 7ISz$))$R,,rc|j"|j}||jdz zS|tz j S)zReturn POSIX timestamp as floatr)rrr_EPOCHr6r8s rr~zdatetime.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%r0r9rrrro)rrrrgrhrirjrks r utctimetuplezdatetime.utctimetuplesc!  FND))TZZa1YY T[[B!!Q2r2q99rcXt|j|j|jS)zReturn the date part.)rrrrr5s rrz datetime.datesDJJ TYY77rct|j|j|j|j|j S)z'Return the time part, with tzinfo None.r)rrrrrrr5s rrz datetime.times.DIIt{{DKK9I9IPTPYPYZZrct|j|j|j|j|j |j S)z'Return the time part, with same tzinfo.r)rrrrrrrr5s 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%r0r9rrrrrrr) rr%r0r9rrrrrrs 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)Nrrr<rc) rrrrrrrerr 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)rrdz%s %s %2d %02d:%02d:%02d %04d) rrrrrrrrrrs 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) rrrrrrrrrr)rrr|rrrs 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"|dddk(sJ|ddd|jzzdz}|jr|dddk(sJ|ddd z}|S) r5rr r)r*r+r,Nr6r7)rrrrrrrrrr-rrrrr)rLrs rr/zdatetime.__repr__s ZZdii ZZt||T5F5F H R5A:" R5A:",T2>>6699Sa[1 3 << #RS6S= =#255;A ::RS6S= =#2$Arc&|jdS)zConvert to string, for str(). r)rr5s rr3zdatetime.__str__"s~~#~&&rc0ddl}|j|||S)zKstring, format -> new datetime parsed from a string (like time.strptime()).r N) _strptime_strptime_datetime)r rrxrs rstrptimezdatetime.strptime&s ++CfEErcn|jy|jj|}td||S)z\Return the timezone offset as timedelta positive east of UTC (negative west of UTC).NrrArBs rrzdatetime.utcoffset,rCrcl|jy|jj|}t||SrErFrGs rrzdatetime.tzname5rHrcn|jy|jj|}td||SrJrKrBs rrz datetime.dstBrLrc|t|tr|j|ddk(St|tstSy)NTrr F)rrrrrBrCs rrdzdatetime.__eq__Ss7 eX &99U95: :E4(! !rct|tr|j|dkSt|tstSt ||yrPrrrrrBrrCs rrgzdatetime.__le__[: eX &99U#q( (E4(! ! dE "rct|tr|j|dkSt|tstSt ||yrPrrCs rrizdatetime.__lt__c: eX &99U#a' 'E4(! ! dE "rct|tr|j|dk\St|tstSt ||yrPrrCs rrlzdatetime.__ge__krrct|tr|j|dkDSt|tstSt ||yrPrrCs rrnzdatetime.__gt__srrc (t|tsJ|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)rrrrrrrrrrrrrrrr) rrDrr'r(r)r*r+diffs rrz datetime._cmp{sc%***||}} 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)rrrBrrrrrrCrsrrrrrrrrurr)rrDrrremrrs rrEzdatetime.__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) rrrrBrrrrrrrr) rrDrrsecs1secs2baser)r*s rrHzdatetime.__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)rrrrrsrpr;r%r0r9rrrrr)rrr0rrss rrtzdatetime.__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||jfSrO) rCrrrrrrrrrr) rrQrrrRrSrTrgrUs rrpzdatetime._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)NrWrrrPr rr) rrXrrrrrrrrrr) rrrrrrgrTrRrSs rrzdatetime.__setstates  j&G23 36< 4c1di t|S#s s7DJc'DKDJDK3Y_ "ax3.14; rc<|j|j|fSr@ryrZs rr[zdatetime.__reduce_ex__r\rc$|jdSrr^r5s rrzzdatetime.__reduce__r_r)NNr r r r Nr@)T)NNNNNNNT)r;rvrarc)5rrr-r|rr}rrr~rrrrrrrr|rrrrrrrrr~rrrrrrrr/r3rrrrrdrgrirlrnrrErrHrtrprfr[rzrrrrrs /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@rrcrd)r;)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 _maxoffsetrz_create)r rrs rrztimezone.__new__ s&),89 9 3<< wwDD#&34 4~~93>>945 5:45 5{{64((rNcLtj|}||_||_|Sr@)rrrr)r rrrs rrztimezone._create( s#~~c"   rcd|j |jfS|j|jfS)zpickle support)rrr5s rrztimezone.__getinitargs__/ s+ :: LL? " djj))rc`t|tr|j|jk(StSr@)rrrrBrCs rrdztimezone.__eq__5 s% eX &<<5==0 0rc,t|jSr@)rsrr5s rrtztimezone.__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-rr5s 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.dstb s% b( #rz#$ $rct|tr(|j|ur td||jzSt d)Nzfromutc: dt.tzinfo is not selfz6fromutc() argument must be a datetime instance or None)rrrrzrrrs rrztimezone.fromutch sK b( #yy$ "/00 $ $#$ $rrAr)rqruc 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)rrCrsru)rrrqrestrrrsrus rrztimezone._name_from_offsett s 9Q< DFEDUIA$67 ttYq%9: ,,(( $c{!GC='# S)+ , uSk73-q F FTF5+Qwsm44rr@)rrr-r}rrrrrrrdrtr/r3rrrrrrr staticmethodrrrrrr s"IxH"* ) *  "<(!$ $$ $"5JJ55rrr/rrrb)r)Dr|__all__rremathrrroperatorr rrrrr rr.r4dbmr:rr&r)r1r5r;rDrErFrNrrrorrrrrrrrrrrrrrrrr rrqr resolutionrrrrrrrXrrrrrr rrrrrrs   ( $/   FT !" Cc"3JCB* !F  C  C  A  !g+/!!!"u*q.  <~? C I ** &@0F6r!"H6.`,^B1 ) 3"P9 (|2|2| *% yB'-/  a0 }2}2~  1a= b" #:;:;zHeH6# X%X%t  1a= BF #+s %ts %l1a  b"b"b&9 Q/ r5vr5h%%il33hl R!@ @A  B ?@ $1X\\ 2r