python (3.12.0)

(root)/
lib/
python3.12/
__pycache__/
_pydatetime.cpython-312.pyc

ˑeeh	dZdZddlZddlZddlZddlmZ	dZ
dZdZdZ
d	Zgd
ZdgZdZeddD]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?je1d0d1Ee?_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)Nrxys  ?/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/_pydatetime.py_cmprsQ1.QA.B.c>|jj}|dk(ry|S)N_pydatetimer)	__class__
__module__)selfmodule_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.rdr)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<!S& 1c6))rcjd|cxkrdksJ|J||dk(rt|ryt|S)z9year, month -> number of days in that month in that year.r)r&_DAYS_IN_MONTHr%months  r_days_in_monthr1:s="U""U"zhtn%  rcnd|cxkrdksJdJdt||dkDxrt|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_monthr5AsA555555e$	(DhtnEErcd|cxkrdksJdJdt||}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;Fsm555555
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|dzd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"rr+r2r=r,)divmod_DI400Y_DI100Y_DI4Yr&r4r.r1)	nn400r%n100n4n1leapyearr0	precedings	         r_ord2ymdrN_sX.FAQ GD!#:>DQ GD!
1eEB
1cNEBD3Ja"$$D	Qw$!)Av
Avr2~Qw2B"H1	Hx~%%
VME"5)UQY-C8DI1}

^E*eqj.EXFF	NA/N4/////!r)
NJanFebMarAprMayJunJulAugSepOctNovDec)NMonTueWedThuFriSatSunct|||dzdz}t|||z}tj|||||||||f	S)N)r;r5_timestruct_time)	rmdhhmmssdstflagwdaydnums	         r_build_struct_timerosOQ1!Q&Da#a'DaAr2r4wGHHrcdddddd}|dk(r|rdnd	}n
|d
k(r|dz}	||}|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	|jd	
}nd	}d|vsJ|j|n|dk(rq|	|
kr||	}|	dz
}	|dk(rD|*t|drt	|jd
}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)Nrr%fz%06dmicrosecondz	utcoffsetrr:Ztznamez%%)appendlengetattrhasattrrrrreplacejoinrestrftime)objectrx	timetuplefreplacezreplace
colonzreplaceZreplace	newformatpushirGchch2rs              r_wrap_strftimersHHMHID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|dkrtd|dkDr-|d|k(r%|dk(rtd|d	kDrt|d	ryy	yy	|d|k(r2d}||krt||sn|d
z
}||kr|dkr|S|dzd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(|k7rtd||z
}t|||dz}tt	|||St|||dz}|dz
}|||dzdk(|k7rtd||z
}t|||dz}|||gS)	Nrdrrrr"rrrr,z"Inconsistent use of dash separator)rintrzlist_isoweek_to_gregorian)rr%has_sepposweeknodaynor0r9s        r_parse_isoformat_daterOsGu:##uQqz?DAh#oG
g+CSqS qU3sQw'(qu:c#'"c)g5 !EFF7NCc#'*+E)$>??E#cAg&'q#cAg#%'1ABBw%C!G$%eS!!r)ii'rwr#rc t|}gd}d}tddD]c}||z
dkrtdt|||dz||<|dz
}|||dz}|dk(r|dk(}|r|dk\rnr|dk7rtd|z||z
}e||kr||d	vrtd
|dz
}||z
}|dk\rd}n|}t||||z|d<|dkr|dxxt|dz
zcc<||kDr*tt
t|||zdstd|S)
N)rrrrrr@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cMQ899tCA/
4qSUO	193&GDAIyC'9IEFFw%(W}9D <==1HC#cMM!(S#h, 89JqM!|1
!5hqj!AA
(OT3x</5J KL !HIIrcbt|}|dkrtd|jddzxs*|jddzxs|jddz}|dkDr|d|dz
n|}t|}d}||k(r|ddk(rtj
}n|dkDr||d}t|d	vrtd
t|}t
d|Drtj
}n8||dz
dk(rdnd}t|d|d|d|d
}	t	||	z}|j||S)Nr,zIsoformat time too shortrrrrrr)rrr@zMalformed time zone stringc3&K|]	}|dk(yw)rNr).0rs  r	<genexpr>z(_parse_isoformat_time.<locals>.<genexpr>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;'Ccrcht|cxkr	tksntd|d|cxkrdks@nd}|dk(r't|dddz}|dk(s|dk(r
t	|rd	}|rtd
|d|cxkrdksntd|d
|dz
dz|dz
z}t|}||z}t
|S)NzYear is out of range: r5Trrdr"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        rrrsd%g%1$899t=b=2:%T1a014M"}'9'/~$~dV455s;Q;,SE1CDEE(a37+J
D!Ej GGrcX|(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_offsetrsq'''
~fi(48$v,HI	IaL=60IaL0()	)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$<D5ME
+Cd%g%1Wg4FFMM1599
u
%C?s?/#5s;;rcPt|}t|}t|}t|}d|cxkrdksntd|d|cxkrdksntd|d|cxkrdksntd|d|cxkrdksntd||d	vrtd
||||||fS)Nrzhour must be in 0..23;zminute must be in 0..59zsecond must be in 0..59?Bz microsecond must be in 0..999999)rrzfold must be either 0 or 1)rrz)hourminutesecondrfolds     r_check_time_fieldsrs$<D
F^F
F^F%K??0$77"2F;;"2F;;%v%;[II65t<<d22rc@|t|tstdyy)Nz4tzinfo argument must be None or of a tzinfo subclass)rrr)tzs r_check_tzinfo_argr+s#	~jV4NOO5~rcrtdt|jdt|jd)Nzcan't compare 'z' to 'r)rr__name__rs  r	_cmperrorr/s-
G$$d1g&6&6899rctt||\}}|dz}|dkDr||kDn||k}|s
||k(r
|dzdk(r|dz
}|S)zdivide a by b and round result to the nearest integer

    When the ratio is exactly half-way between two integers,
    the even integer is returned.
    r,rr)rC)abqrgreater_than_halfs     r_divide_and_roundr3sU!Q<DAqFA!"QAAEAFq1uz	QHrceZdZdZdZ		d!dZdZdZdZe	dZ
e	dZe	d	Zd
Z
e
ZdZdZd
ZdZdZdZeZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$y )"raRepresent the difference between two datetime objects.

    Supported operators:

    - add, subtract timedelta
    - unary plus, minus, abs
    - compare to timedelta
    - multiply, divide by int

    In addition, datetime supports subtraction of two datetime objects
    returning a timedelta, and addition or subtraction of a datetime
    and a timedelta giving a datetime.

    Representation: (days, seconds, microseconds).
    )_days_seconds
_microseconds	_hashcodecdx}x}	}
||dzz
}||dz|dzzz
}||dzz
}t|trjtj|\}}tj|dz\}}
|
t	|
k(sJt	|
}	|t	|k(sJt	|}nd}|}t|tsJt|dksJt|tsJt|	d	ksJt|trHtj|\}}|t	|k(sJt	|}||z
}t|d
ksJ|}t|tsJt|d
ksJt|tsJt
|d	\}}||z
}|	t	|z
}	t|	tsJt|	dksJ|dz}t|d
ksJt|tr7t||z}t
|d\}}t
|d	\}}||z
}|	|z
}	nAt	|}t
|d\}}t
|d	\}}||z
}|	|z
}	t||z}t|	tsJt|tsJt|	dksJt|dksJt
|d\}}
|	|z
}	t
|	d	\}}	||z
}t|tsJt|	trd|	cxkrd	ksJJt|
trd|
cxkrdksJJt|dkDrtd|ztj|}||_|	|_|
|_
d|_|S)Nrrd<rwg@gg?Qg@i.Ag@A@BigGAɚ;z$timedelta # of days is too large: %dr)rfloat_mathmodfrabsrCround
OverflowErrorr__new__rrrr)clsrrsrurtrrrqweeksrhrr{dayfracdaysecondsfracdaysecondswholesecondsfracusdoublers                 rrztimedelta.__new__]snA	
a72:d
**T))dE"!JJt,MGT.3jjI9N.O+NO"c/&:::O$A3t9$$D	A NA.%00>"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&66&66"c"qB'8'88'88q6I 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__.<locals>.plurals#a&A+-#333rz
%d day%s, r)rCrrr)rrjrkrirr2s      r__str__ztimedelta.__str__s|

r*BBBb"b\)::
4tzz 22a7AGd0000Arc`|jdz|jzdz|jzdzS)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__XeY'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__seY'55= rc^t|j|j|jSr@)rrrrr5s r__neg__ztimedelta.__neg__
s.$**--,,,.	.rc|Sr@rr5s r__pos__ztimedelta.__pos__src*|jdkr|S|SNrr9r5s 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__seS!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3eS!Q45=11"rctt|tttfstS|j}t|tr||jzSt|trtddt
||St|tr-|j\}}tddt
||z|SyrP)rrrrrBrSrrTrUs     r__truediv__ztimedelta.__truediv__6s%#ui!89!!$$&eY'%00222eS!Q#4T5#ABBeU#))+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__HsKeY'$//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)rrrrrrr)%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	Zd
ZdZ
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	|jd}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     rfromordinalzdate.fromordinals!1+1a1a|rct|tstdt|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)a5Convert to formal string, for repr().

        >>> dt = datetime(2010, 1, 1)
        >>> repr(dt)
        'datetime.datetime(2010, 1, 1, 0, 0)'

        >>> dt = datetime(2010, 1, 1, tzinfo=timezone.utc)
        >>> repr(dt)
        'datetime.datetime(2010, 1, 1, 0, 0, tzinfo=datetime.timezone.utc)'
        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 %srrrrrrrrrr~s  r
__format__zdate.__format__K#s#1DI4F4FFGGs8q===%%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.year2r:rc|jS)zmonth (1-12))rr5s rr0z
date.month7s{{rc|jS)z
day (1-31))rr5s rr9zdate.day<syyrc	`t|j|j|jddddS)9Return local time tuple compatible with time.localtime().rr)rorrrr5s rrzdate.timetupleDs*!$**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.toordinalIs

DKK;;rc|||j}||j}||j}t||||S)z;Return a new date with new values for the specified fields.)rrrr)rr%r0r9s    rrzdate.replaceQsA<::D=KKE;))CtDz$s++rcVt|tr|j|dk(StSrPrrrrBrCs  rrdzdate.__eq__]&eT"99U#q((rcVt|tr|j|dkStSrPrrCs  rrgzdate.__le__brrcVt|tr|j|dkStSrPrrCs  rrizdate.__lt__g&eT"99U#a''rcVt|tr|j|dk\StSrPrrCs  rrlzdate.__ge__lrrcVt|tr|j|dkDStSrPrrCs  rrnzdate.__gt__qrrct|tsJ|j|j|j}}}|j|j|j}}}t|||f|||fSr@)rrrrrr)rrDrrgrhy2m2d2s        rrz	date._cmpvsZ%&&**dkk499a1[[%,,

BQ1IB|,,rct|jdk(rt|j|_|jS)Hash.rrrr5s rrtz
date.__hash__|s+>>R!$.."23DN~~rct|tr^|j|jz}d|cxkr	tkr'ntdt|j
|StdtS)zAdd a date to a timedelta.rresult out of range)	rrrr_MAXORDINALrrrrB)rrDos   rrEzdate.__add__sceY' 5::-A1## 566Dz--a00 566rct|tr|t|jzSt|tr.|j	}|j	}t||z
St
S)z.Subtract two dates, or a date and a timedelta.)rrrrrrB)rrDdays1days2s    rrHzdate.__sub__sYeY')UZZK000eT"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)
        rdrr4)rrr;rrrC_IsoCalendarDate)rr%week1mondayrrr9s      risocalendarzdate.isocalendarszz%d+T[[$))<5;.2	c!8AID)$/Ku{2A6ID#
RZQ//	d1fc!e44rc|t|jd\}}t|||j|jgfSN)rCrrrr)ryhiylos   rrpzdate._getstates5$**c*Sc3TYY7899rc@|\}}|_|_|dz|z|_yr)rrr)rstringrrs    r
__setstatezdate.__setstates#+1(S$+ty3Y_
rc:|j|jfSr@ryr5s rrzzdate.__reduce__r{r)NN)NNN))rrr-r|r}rclassmethodrrrrrr/rrrrr3r~r%r0r9rrrrdrgrirlrnrrtrErrHrrrrprrzrrrrrs867ID
$$
KK<<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|tstd|j|urt	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__)rgetinitargsr.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.yearAwrc|dS)Nrrr5s rrzIsoCalendarDate.weekrrc|dSNr,rr5s rrzIsoCalendarDate.weekdayrrc&tt|ffSr@)tupler5s rrzzIsoCalendarDate.__reduce__"sd~&&rcX|jjd|dd|dd|ddS)Nz(year=rz, week=rz
, weekday=r,r,)rrr5s rr/zIsoCalendarDate.__repr__'s?>>**+a	a	DG9AG	Hr)rrr-rr~r%rrrzr/
__classcell__)rs@rrrsO;'
Hrrc eZdZdZdZd"dddZedZedZed	Z	ed
Z
edZed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_foldrNrct|ttfrxt|dk(rjt	|dddzdkrVt|tr	|jd}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)
        rcrrrArznFailed 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__Is
teS\*s4yA~Qq	N4"$$$L;;x0D>>#&DOOD&.D1DNK2D&&+t35/ffk4&!~~c"
'
+*L$KLLLs
C77Dc|jSzhour (0-23)rr5s rrz	time.hourqr:rc|jSz
minute (0-59)rr5s rrztime.minutev||rc|jSz
second (0-59)rr5s rrztime.second{rrc|jSzmicrosecond (0-999999)rr5s rrztime.microsecond   rc|jSztimezone info objectrr5s rrztime.tzinforrc|jSr@rr5s rrz	time.foldzzrcZt|tr|j|ddk(StS)NTallow_mixedrrrrrBrCs  rrdztime.__eq__s*eT"99U95::!!rcVt|tr|j|dkStSrPrrCs  rrgztime.__le__&eT"99U#q((!!rcVt|tr|j|dkStSrPrrCs  rriztime.__lt__&eT"99U#a''!!rcVt|tr|j|dk\StSrPrrCs  rrlztime.__ge__r!rcVt|tr|j|dkDStSrPrrCs  rrnztime.__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._cmpsG%&&||}}4<LNN$EOO%E E>LT\\4<<**,emmU]]++-.
.=EM FGGb4<</%19M2MMr!EMM1E9Q;O4OOVT\\4+<+<=U]]E,>,>?A	Arc|jdk(r2|jr|jd}n|}|j}|s-t	|jd|_|jSt
t|j|j|z
td\}}|tdzrJd|tdz}d|cxkrd	kr?nn<t	t|||j|j|_|jSt	|||j|jf|_|jS)
rrrrrqrrrrrzwhole minuterA)
rrrrrsrprCrrrrrr)rrtzoffhrgs     rrtz
time.__hash__s>>RyyLLaL(KKME!%akkmA&6!7~~idiiMPUU'a021y33C^Ci**;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_tzstrztime._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().rz, %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|tstd|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.fromisoformatsg+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.
        ilrrr)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.utcoffset24<<''-+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  rrztime.tzname;2<<||""4(drcn|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.dstH4<<!!$'%(
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.replaceWsx<99D>[[F>[[F**KT>[[F<::DtDz$V$OOrct|jd\}}t|d\}}|j}|jr
|dkDr|dz
}t	||j
|j|||g}|j|fS||jfSNrr@)rCrrrrrrr)rprotocolus2us3us1r1	basestates       rrpztime._getstatejs$++S1S#s#SJJ::(Q,
HA1dllDLLS*+	<<<t||,,rc|t|tstd|\}|_|_}}}|dkDrd|_|dz
|_nd|_||_|dz|zdz|z|_||_y)Nbad tzinfo state argrrrPrr)	r
_tzinfo_classrrrrrrr)rrrr1rTrRrSs       rrztime.__setstatews|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__!!!$$rrrrrNFrv)NNNNTr@)$rrr-r|r}rr~rrrrrrrdrgrirlrnrrtr3r/rr3rrrrrrrrrprr[rzrrrrr0s),_I%UV%P!!"""""A8.#
&"G
K
K	7
HLP%)P&-:%rrceZdZdZej
ej
zZ		d2dddZedZ	edZ
edZed	Zed
Z
edZed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.
    Nrrc	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.
        rrrrrNrwinrc)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.rNzdatetime.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.utcfromtimestamps=	

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().rNzdatetime.utcnow() is deprecated and scheduled for removal in a future version. Instead, Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).r,rT)rrrrerr|)r rrs   rutcnowzdatetime.utcnow"sG	

=)!"		$
JJL!!!T400rcPt|tstdt|tstd|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DT>[[F499djj$((99dkk4;;8H8H		+	+rc^t|tstdt|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.rrdrrrNr`)rrrrrzrrr)r rseparator_locationdstrrdate_componentstime_componentss       rrzdatetime.fromisoformat<s+s+ABB{a9+IJJ	H!CK!Pq!34D 21 467D3D9O

L"7"=
1O_688	H,[O<>CG
H	H
L 0@BGKL
Ls#A7B7BB,c	|j}|d}n|rd}nd}t|j|j|j|j
|j|j|S)rrrr)rror%r0r9rrr)rrs  rrzdatetime.timetuple[sYhhj;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.rrrctj|dd\}}}}}}t||||||z
tddzS)Nrcrr)rerrr)urrgrhrirjrkepochs       rlocalzdatetime._mktime.<locals>.localmsJ"'//!"4Ra"8Aq!RRQ1b"b1E9i1oMMr)rrrmaxrq)rrxrrru1t1u2rt2rs          @r_mktimezdatetime._mktimehsq!$$
E\i1o-	N

!HqL
U
2Y
7((*:;DIIFFBb	BAAv	RA6M
U
2Y
7I
7ISz$))$R,,rc|j"|j}||jdzzS|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))TZZa1YYT[[B!!Q2r2q99rcXt|j|j|jS)zReturn the date part.)rrrrr5s rrz
datetime.datesDJJTYY77rct|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**KT>[[F<99DtDz$sD&&%vD:	:rc|jW|j}|jd|jz
j}||k7r+||kD|jk(r|}n|tz
tdz}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|tstd|j}|"|j}|j	|}nD|j	|}|1|jdj}|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JJ2	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)
r5rrr)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()).rN)	_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.utcoffset0rCrcl|jy|jj|}t||SrErFrGs  rrzdatetime.tzname9rHrcn|jy|jj|}td||SrJrKrBs  rrzdatetime.dstFrLrc|t|tr|j|ddk(St|tstSy)NTrrF)rrrrrBrCs  rrdzdatetime.__eq__Ws7eX&99U95::E4(!!rct|tr|j|dkSt|tstSt||yrPrrrrrBrrCs  rrgzdatetime.__le___:eX&99U#q((E4(!!dE"rct|tr|j|dkSt|tstSt||yrPrrCs  rrizdatetime.__lt__g:eX&99U#a''E4(!!dE"rct|tr|j|dk\St|tstSt||yrPrrCs  rrlzdatetime.__ge__orrct|tr|j|dkDSt|tstSt||yrPrrCs  rrnzdatetime.__gt__wrrc
(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 datetimesrrr)rrrrrrrrrrrrrrrr)	rrDrr'r(r)r*r+diffs	         rrz
datetime._cmps`%**||}}4<LNN$EOO%EDLL$))mL<FFHHEMM5::~M>HHJJ E>LT[[$))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.rrrrrr)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	|jd|_|jSt
|j|j|j}|jdz|jdzz|jz}t	t|||j|z
|_|jS)Nrrrrr)rrrrrsrpr;r%r0r9rrrrr)rrr0rrss     rrtzdatetime.__hash__s>>RyyLLaL(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|tstd|\
}}}|_|_|_|_}}}|dkDrd|_|dz
|_nd|_||_|dz|z|_	|dz|zdz|z|_
||_y)NrWrrrPrrr)rrXrrrrrrrrrr)	rrrrrrgrTrRrSs	         rrzdatetime.__setstatesj&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)NNrrrrNr@)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\)KhqrceZdZdZeZefdZeddZdZ	dZ
dZdZd	Z
d
ZdZdZd
ZeddZeZedZy)r)_offset_namec<t|tstd||jur|s|jSd}nt|t
std|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93<<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__3	s+::LL?"djj))rc`t|tr|j|jk(StSr@)rrrrBrCs  rrdztimezone.__eq__9	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__A	sq488*::"3D"9"&.."="="&,,0
0#4D"9"&.."="="&,,

<	<rc$|jdSr@)rr5s rr3ztimezone.__str__U	s{{4  rcTt|ts||jStd)Nz8utcoffset() argument must be a datetime instance or None)rrrrrs  rrztimezone.utcoffsetX	s,b(#rz<<#$	$rct|ts|3|j|j|jS|jStd)Nz5tzname() argument must be a datetime instance or None)rrr_name_from_offsetrrrs  rrztimezone.tzname^	sKb(#rzzz!--dll;;::#$	$rc>t|ts|ytd)Nz2dst() argument must be a datetime instance or None)rrrrs  rrztimezone.dstf	s%b(#rz#$	$rct|tr(|j|urtd||jzStd)Nzfromutc: dt.tzinfo is not selfz6fromutc() argument must be a datetime instance or None)rrrrzrrrs  rrztimezone.fromutcl	sKb(#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
rrrrrr02drr)06d)rrCrsru)rrrqrestrrrsrus       rrztimezone._name_from_offsetx	s9Q<DFEDUIA$67ttYq%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
rrrrr<module>rs(
$/
FT!"Cc"3JCB*
!F
C
 
C
 
A

!g+/!!"u*q.  <~?C	I
**
&@0F6r!"H6.`,^B1
)3"P9
(|2|2|	*%	
yB'-/	
 a0	A2A2F
1a=b"#:;:;zHeH6#
X%X%t
1a=BF#+s	%ts	%l1a b"b"b&9Q/	r5vr5h%%il33hl
R!@ @A	B ?@	$1X\\	2r