ó
    Rì?g8“  ã                   ó  • S r SSKrSSKrSSKrSSKrSSKJrJrJr  SSK	J
r
Jr  SSKJr  SSKJr  SSKJr  SSKJrJr  SS	KJr  SS
KJrJrJrJrJrJrJr  \R:                  " S5      r " S S\5      r  " S S\!5      r" " S S\!5      r# " S S\RH                  5      r% " S S\RL                  5      r' " S S\!5      r(\R:                  " S5      r)\R:                  " S5      r*S\+S\,4S jr-S\+S\,4S jr.S\R^                  S\04S jr1g) zFClient and server implementations of HTTP/1.x.

.. versionadded:: 4.0
é    N)ÚFutureÚfuture_add_done_callbackÚ"future_set_result_unless_cancelled)Ú
native_strÚutf8)Úgen)Úhttputil)Úiostream)Úgen_logÚapp_log)ÚGzipDecompressor)ÚcastÚOptionalÚTypeÚ	AwaitableÚCallableÚUnionÚTuples   |
c                   ó   • \ rS rSrSS jrSrg)Ú_QuietExceptioné,   Nc                 ó   • g ©N© ©Úselfs    Ú9/usr/lib/python3/dist-packages/tornado/http1connection.pyÚ__init__Ú_QuietException.__init__-   ó   € Øó    r   ©ÚreturnN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   Ú__static_attributes__r   r!   r   r   r   ,   s   † ÷r!   r   c                   ó|   • \ rS rSrSrS\R                  SS4S jrSS jrSS	S
\	\
   S\R                  SS4S jrSrg)Ú_ExceptionLoggingContexté1   z¤Used with the ``with`` statement when calling delegate methods to
log any exceptions with the given logger.  Any exceptions caught are
converted to _QuietException
Úloggerr#   Nc                 ó   • Xl         g r   ©r,   )r   r,   s     r   r   Ú!_ExceptionLoggingContext.__init__7   s   € Ø�r!   c                 ó   • g r   r   r   s    r   Ú	__enter__Ú"_ExceptionLoggingContext.__enter__:   r    r!   ÚtypzOptional[Type[BaseException]]ÚvalueÚtbc                 óX   • Ub'  Uc   eU R                   R                  SXU4S9  [        eg )NúUncaught exception©Úexc_info)r,   Úerrorr   )r   r3   r4   r5   s       r   Ú__exit__Ú!_ExceptionLoggingContext.__exit__=   s<   € ð ÑØ‘?Ð"�?Ø�K‰K×ÑÐ2¸cÈ"Ð=MÐÑNÜ!Ð!ð r!   r.   r"   )r$   r%   r&   r'   Ú__doc__ÚloggingÚLoggerr   r1   r   ÚBaseExceptionÚtypesÚTracebackTyper;   r(   r   r!   r   r*   r*   1   sY   † ñð
˜wŸ~™~ð °$ô ôð	"à,ð	"ð ˜Ñ&ð	"ð ×Ñð		"ð
 
÷	"r!   r*   c                   ór   • \ rS rSrSr       SS\S\\   S\\   S\\   S\\   S	\\   S
\SS4S jjr	Sr
g)ÚHTTP1ConnectionParameterséI   z?Parameters for `.HTTP1Connection` and `.HTTP1ServerConnection`.NÚno_keep_aliveÚ
chunk_sizeÚmax_header_sizeÚheader_timeoutÚmax_body_sizeÚbody_timeoutÚ
decompressr#   c                 ó€   • Xl         U=(       d    SU l        U=(       d    SU l        X@l        XPl        X`l        Xpl        g)aë  
:arg bool no_keep_alive: If true, always close the connection after
    one request.
:arg int chunk_size: how much data to read into memory at once
:arg int max_header_size:  maximum amount of data for HTTP headers
:arg float header_timeout: how long to wait for all headers (seconds)
:arg int max_body_size: maximum amount of data for body
:arg float body_timeout: how long to wait while reading body (seconds)
:arg bool decompress: if true, decode incoming
    ``Content-Encoding: gzip``
i   N)rF   rG   rH   rI   rJ   rK   rL   )r   rF   rG   rH   rI   rJ   rK   rL   s           r   r   Ú"HTTP1ConnectionParameters.__init__L   s:   € ð* +ÔØ$×-¨ˆŒØ.×7°%ˆÔØ,ÔØ*ÔØ(ÔØ$�r!   )rK   rG   rL   rI   rJ   rH   rF   )FNNNNNF)r$   r%   r&   r'   r=   Úboolr   ÚintÚfloatr   r(   r   r!   r   rD   rD   I   sˆ   † ÙIð $Ø$(Ø)-Ø*.Ø'+Ø(,Ø ñ%àð%ð ˜S‘Mð%ð " #™ð	%ð
 ! ™ð%ð   ‘}ð%ð ˜u‘oð%ð ð%ð 
÷%ð %r!   rD   c                   ó  • \ rS rSrSr  S+S\R                  S\S\\	   S\\
   SS4
S	 jjrS
\R                  S\\   4S jrS
\R                  S\4S jrS,S jrS\\/ S4      SS4S jrS,S jrS,S jrS\R                  4S jrS\SS4S jrS\SS4S jr S-S\\R8                  \R:                  4   S\R<                  S\\   SS4S jjr S\S\4S jr!S\SS4S jr"S,S jr#S.S jr$S\R8                  S\R<                  S\4S  jr%S/S! jr&S"\S\'\(\R<                  4   4S# jr)S$\S\R<                  S
\R                  S\\S      4S% jr*S&\S
\R                  SS4S' jr+S
\R                  SS4S( jr,S
\R                  SS4S) jr-S*r.g)0ÚHTTP1Connectionéj   zyImplements the HTTP/1.x protocol.

This class can be on its own for clients, or via `HTTP1ServerConnection`
for servers.
NÚstreamÚ	is_clientÚparamsÚcontextr#   c                 óò  • X l         Xl        Uc
  [        5       nX0l        X@l        UR
                  U l        U R                  R                  b  U R                  R                  OU R                  R                  U l        U R                  R                  U l
        SU l        SU l        [        5       U l        SU l        U R!                  5         SU l        SU l        SU l        SU l        SU l        SU l        g)zë
:arg stream: an `.IOStream`
:arg bool is_client: client or server
:arg params: a `.HTTP1ConnectionParameters` instance or ``None``
:arg context: an opaque application-defined object that can be accessed
    as ``connection.context``.
NF)rV   rU   rD   rW   rX   rF   rJ   Úmax_buffer_sizeÚ_max_body_sizerK   Ú_body_timeoutÚ_write_finishedÚ_read_finishedr   Ú_finish_futureÚ_disconnect_on_finishÚ_clear_callbacksÚ_request_start_lineÚ_response_start_lineÚ_request_headersÚ_chunking_outputÚ_expected_content_remainingÚ_pending_write)r   rU   rV   rW   rX   s        r   r   ÚHTTP1Connection.__init__q   så   € ð #ŒØŒØ‰>Ü.Ó0ˆFØŒØŒØ#×1Ñ1ˆÔð
 �{‰{×(Ñ(Ñ4ð �K‰K×%Ò%à—‘×,Ñ,ð 	Ôð
 "Ÿ[™[×5Ñ5ˆÔð  %ˆÔà#ˆÔô %›hˆÔð &+ˆÔ"Ø×ÑÔð $(ˆÔ Ø$(ˆÔ!Ø $ˆÔà %ˆÔð ,0ˆÔ(à"ˆÕr!   Údelegatec                 ó˜   • U R                   R                  (       a  [        XR                   R                  5      nU R	                  U5      $ )aJ  Read a single HTTP response.

Typical client-mode usage is to write a request using `write_headers`,
`write`, and `finish`, and then call ``read_response``.

:arg delegate: a `.HTTPMessageDelegate`

Returns a `.Future` that resolves to a bool after the full response has
been read. The result is true if the stream is still open.
)rW   rL   Ú_GzipMessageDelegaterG   Ú_read_message)r   ri   s     r   Úread_responseÚHTTP1Connection.read_responseª   s6   € ð �;‰;×!×!Ü+¨H·k±k×6LÑ6LÓMˆHØ×!Ñ! (Ó+Ð+r!   c              ƒ   óÄ  #   • Sn U R                   R                  SU R                  R                  S9nU R                  R                  c  UI S h  v•N nOf [
        R                  " U R                   R                  R                  5       U R                  R                  -   U[        R                  S9I S h  v•N nU R#                  U5      u  pVU R$                  (       a&  [&        R(                  " U5      nXpl        UnSU l        O?[&        R.                  " U5      n	X�l        X`l        U	nU R5                  X–5      (       + U l        Sn[        [        5         UR7                  X†5      n
U
b
  U
I S h  v•N   S S S 5        U R                   cE  Sn U(       a(  [        [        5         UR                  5         S S S 5        S nU R!                  5         gSnU R$                  (       a­  [9        U[&        R:                  5      (       d   eU R0                  b  U R0                  R<                  S:X  a  SnUR>                  nUS:X  a  SnSUs=::  a  S	:  aA  O  O€S
U;   d  SU;   a  [&        R@                  " SU-  5      eU RC                  U5      I S h  v•N   OAURE                  S5      S:X  a,  U RF                  (       d  U R                   RI                  S5        U(       d¦  U RK                  U R$                  (       a  WR>                  OSXa5      nUbt  U RL                  c  UI S h  v•N   O\ [
        R                  " U R                   R                  R                  5       U RL                  -   U[        R                  S9I S h  v•N   SU l*        U RF                  (       a  U R$                  (       a*  Sn[        [        5         URW                  5         S S S 5        U RX                  R[                  5       (       de  U R                   bX  U R                   R]                  5       (       d9  U R                   R_                  U R`                  5        U RX                  I S h  v•N   U R$                  (       a!  U R,                  (       a  U R                  5         U R                   cC   U(       a(  [        [        5         UR                  5         S S S 5        S nU R!                  5         g U(       a(  [        [        5         UR                  5         S S S 5        S nU R!                  5         g GNÉ GNe! [
        R                   af    U R                  5          U(       a:  [        [        5         UR                  5         S S S 5        O! , (       d  f       O= fS nU R!                  5         gf = f GN,! , (       d  f       GN1= f! , (       d  f       GN= f GN: GN« GNQ! [
        R                   a‘    [N        RP                  " SU RR                  5        U R                   R                  5          U(       a:  [        [        5         UR                  5         S S S 5        O! , (       d  f       O= fS nU R!                  5         gf = f! , (       d  f       GN³= f GN7! , (       d  f       GNÕ= f! [&        R@                   aÄ  n[N        RP                  " SU RR                  U5        U R$                  (       d$  U R                   RI                  S5      I S h  v•N    U R                  5          S nAU(       a:  [        [        5         UR                  5         S S S 5        O! , (       d  f       O= fS nU R!                  5         gS nAff = f! , (       d  f       GN= f! U(       a:  [        [        5         UR                  5         S S S 5        O! , (       d  f       O= fS nU R!                  5         f = f7f)NFs   ?
?
©Ú	max_bytes)Úquiet_exceptionsTÚHEADé0  éd   éÈ   úContent-LengthúTransfer-Encodingz!Response code %d cannot have bodyÚExpectz100-continues   HTTP/1.1 100 (Continue)

r   zTimeout reading body from %sz"Malformed HTTP message from %s: %ss   HTTP/1.1 400 Bad Request

)1rU   Úread_until_regexrW   rH   rI   r   Úwith_timeoutÚio_loopÚtimer
   ÚStreamClosedErrorÚTimeoutErrorÚcloser*   r   Úon_connection_closera   Ú_parse_headersrV   r	   Úparse_response_start_linerc   r`   Úparse_request_start_linerb   rd   Ú_can_keep_aliveÚheaders_receivedÚ
isinstanceÚResponseStartLineÚmethodÚcodeÚHTTPInputErrorrl   Úgetr]   ÚwriteÚ
_read_bodyr\   r   ÚinforX   r^   Úfinishr_   ÚdoneÚclosedÚset_close_callbackÚ_on_connection_close)r   ri   Úneed_delegate_closeÚheader_futureÚheader_dataÚstart_line_strÚheadersÚresp_start_lineÚ
start_lineÚreq_start_lineÚheader_recv_futureÚ	skip_bodyrŠ   Úbody_futureÚes                  r   rl   ÚHTTP1Connection._read_message¹   s  é € Ø#Ððu	$Ø ŸK™K×8Ñ8Ø¨¯©×)DÑ)Dð 9ð ˆMð �{‰{×)Ñ)Ñ1Ø$1×1‘ð!Ü(+×(8Ò(8ØŸ™×+Ñ+×0Ñ0Ó2°T·[±[×5OÑ5OÑOØ%Ü)1×)CÑ)Cñ)÷ #�Kð '+×&9Ñ&9¸+Ó&FÑ#ˆNØ�~�~Ü"*×"DÒ"DÀ^Ó"T�Ø,;Ô)à#ð ð .3�Õ*ä!)×!BÒ!BÀ>Ó!R�Ø+9Ô(Ø(/Ô%Ø+�
Ø15×1EÑ1EØ"ó2ô .�Ô*ð #'ÐÜ)¬'Õ2Ø%-×%>Ñ%>¸zÓ%SÐ"Ø%Ñ1Ø,×,Ð,÷ 3ð �{‰{Ñ"à&+Ð#ØöP #Ü-¬gÕ6Ø×0Ñ0Ô2÷ 7à ˆMØ×!Ñ!Õ#ðW ˆIØ�~�~Ü! *¬h×.HÑ.H×IÑIÐIÐIà×,Ñ,Ñ8Ø×0Ñ0×7Ñ7¸6ÓAà $�IØ!—‘�Ø˜3“;ð !%�IØ˜$Õ$ Ö$ð (¨7Ó2Ð6IÈWÓ6TÜ&×5Ò5Ø?À$ÑFóð ð
 ×,Ñ,¨XÓ6×6Ð6øà—;‘;˜xÓ(¨NÓ:À4×CW×CWØ—K‘K×%Ñ%Ð&HÔIÞØ"Ÿo™oØ,0¯N¯N�O×(Ò(ÀÀ7ó�ð Ñ*Ø×)Ñ)Ñ1Ø)×)Ñ)ð	)Ü"%×"2Ò"2Ø $§¡× 3Ñ 3× 8Ñ 8Ó :¸T×=OÑ=OÑ OØ +Ü19×1KÑ1Kñ#÷ ð ð #'ˆDÔØ×'×'¨4¯>¯>Ø&+Ð#Ü-¬gÕ6Ø—O‘OÔ%÷ 7ð ×'Ñ'×,Ñ,×.Ñ.Ø—K‘KÑ+ØŸ™×*Ñ*×,Ñ,à—‘×.Ñ.¨t×/HÑ/HÔIØ×)Ñ)×)Ð)Ø�~�~ $×"<×"<Ø—
‘
”Ø�{‰{Ñ"Øö #Ü-¬gÕ6Ø×0Ñ0Ô2÷ 7à ˆMØ×!Ñ!Õ#ð #ö #Ü-¬gÕ6Ø×0Ñ0Ô2÷ 7à ˆMØ×!Ñ!Ô#Øòc 2ò#øô
 ×'Ñ'ó !Ø—J‘J”LØ öD #Ü-¬gÕ6Ø×0Ñ0Ô2÷ 7×6Ö6úà ˆMØ×!Ñ!Õ#ðQ!úò0 -÷ 3Ö2ú÷` 7Ö6úòc 7ò *òøô
  #×/Ñ/ó )Ü#ŸLšLÐ)GÈÏÉÔVØ ŸK™K×-Ñ-Ô/Ø#(ö6 #Ü-¬gÕ6Ø×0Ñ0Ô2÷ 7×6Ö6úà ˆMØ×!Ñ!Õ#ðE)ú÷ 7Ö6úò *÷ 7Ö6ûô ×&Ñ&ó 	Ü�LŠLÐ=¸t¿|¹|ÈQÔOØ—>—>Ø—k‘k×'Ñ'Ð(KÓL×LÑLØ�J‰JŒLÛæ"Ü-¬gÕ6Ø×0Ñ0Ô2÷ 7×6Ö6úà ˆMØ×!Ñ!Õ#ûð	ú÷ 7Ö6ûö #Ü-¬gÕ6Ø×0Ñ0Ô2÷ 7×6Ö6úà ˆMØ×!Ñ!Õ#üs  ‚_ †A
Z ÁTÁZ ÁA T Â7TÂ8T Â<BZ ÅVÅ0VÅ1VÅ5Z Æ_ Æ#V1Æ4_ ÇB:Z Ê	WÊ
BZ ÌWÌZ Ì"AW Í8W	Í9W Í=:Z Î7Y4ÏBZ ÑZÑAZ Ò_ Ò*Z	Ò;_ Ó_ Ó-]6Ó>_ ÔZ ÔT Ô$VÕZ Õ_ ÕU4Õ+	_ Õ4
VÕ>_ ÖVÖZ ÖVÖ
V.Ö)Z Ö1
W Ö;_ ×Z ×Z ×	W ×AY1ØZ Ø_ Ø2YÙ	_ Ù
YÙ_ Ù0Y1Ù1Z Ù4
ZÙ>	Z Ú	
ZÚ_ Ú]3Ú/A].Ü \Ü].Ü^ Ü_ Ü0]
Ý	_ Ý

]Ý_ Ý.]3Ý3^ Ý6
^Þ _ Þ_Þ^9Þ0	_Þ9
_ß_ß_ c                 ó€   • SU l         SU l        SU l        U R                  b  U R                  R	                  S5        gg)z’Clears the callback attributes.

This allows the request handler to be garbage collected more
quickly in CPython by breaking up reference cycles.
N)Ú_write_callbackÚ_write_futureÚ_close_callbackrU   r“   r   s    r   ra   Ú HTTP1Connection._clear_callbacks3  s=   € ð  $ˆÔØ!ˆÔØ#ˆÔØ�;‰;Ñ"Ø�K‰K×*Ñ*¨4Õ0ð #r!   Úcallbackc                 ó   • Xl         g)aÜ  Sets a callback that will be run when the connection is closed.

Note that this callback is slightly different from
`.HTTPMessageDelegate.on_connection_close`: The
`.HTTPMessageDelegate` method is called when the connection is
closed while receiving a message. This callback is used when
there is not an active delegate (for example, on the server
side this callback is used if the client closes the connection
after sending its request but before receiving all the
response.
N)r¥   ©r   r§   s     r   r“   Ú"HTTP1Connection.set_close_callback?  s
   € ð  (Õr!   c                 óÜ   • U R                   b  U R                   nS U l         U" 5         U R                  R                  5       (       d  [        U R                  S 5        U R	                  5         g r   )r¥   r_   r‘   r   ra   r©   s     r   r”   Ú$HTTP1Connection._on_connection_closeM  sY   € ð ×ÑÑ+Ø×+Ñ+ˆHØ#'ˆDÔ ÙŒJØ×"Ñ"×'Ñ'×)Ñ)Ü.¨t×/BÑ/BÀDÔIØ×ÑÕr!   c                 óÞ   • U R                   b  U R                   R                  5         U R                  5         U R                  R	                  5       (       d  [        U R                  S 5        g g r   )rU   r€   ra   r_   r‘   r   r   s    r   r€   ÚHTTP1Connection.closeY  sR   € Ø�;‰;Ñ"Ø�K‰K×ÑÔØ×ÑÔØ×"Ñ"×'Ñ'×)Ñ)Ü.¨t×/BÑ/BÀDÕIð *r!   c                 ó¶   • U R                  5         U R                  nSU l        U R                  R                  5       (       d  [	        U R                  S5        U$ )a  Take control of the underlying stream.

Returns the underlying `.IOStream` object and stops all further
HTTP processing.  May only be called during
`.HTTPMessageDelegate.headers_received`.  Intended for implementing
protocols like websockets that tunnel over an HTTP handshake.
N)ra   rU   r_   r‘   r   )r   rU   s     r   ÚdetachÚHTTP1Connection.detach`  sJ   € ð 	×ÑÔØ—‘ˆØˆŒØ×"Ñ"×'Ñ'×)Ñ)Ü.¨t×/BÑ/BÀDÔIØˆr!   Útimeoutc                 ó   • Xl         g)zdSets the body timeout for a single request.

Overrides the value from `.HTTP1ConnectionParameters`.
N)r\   )r   r²   s     r   Úset_body_timeoutÚ HTTP1Connection.set_body_timeouto  s
   € ð
 %Õr!   rJ   c                 ó   • Xl         g)zgSets the body size limit for a single request.

Overrides the value from `.HTTP1ConnectionParameters`.
N)r[   )r   rJ   s     r   Úset_max_body_sizeÚ!HTTP1Connection.set_max_body_sizev  s
   € ð
 ,Õr!   r›   r™   ÚchunkúFuture[None]c                 ó¢  • / nU R                   (       aq  [        U[        R                  5      (       d   eXl        UR                  [        US   < SUS   < S35      5        UR                  S;   =(       a    SU;  U l        GOs[        U[        R                  5      (       d   eU R                  c   eU R                  c   eXl        UR                  [        SUS   US	   4-  5      5        U R                  R                  S
:H  =(       ag    U R                  R                  S:g  =(       aG    UR                  S;  =(       a1    UR                  S:  =(       d    UR                  S:¬  =(       a    SU;  U l        U R                  R                  S
:X  a  U R                  (       a  SUS'   U R                  R                  S:X  a3  U R                  R                  SS5      R!                  5       S:X  a  SUS'   U R                  (       a  SUS'   U R                   (       dJ  U R                  R                  S:X  d(  [#        [        R                  U5      R                  S:X  a  SU l        O!SU;   a  ['        US   5      U l        OSU l        S UR)                  5        5       nUR+                  S U 5       5        U H+  n[,        R/                  U5      (       d  M  [1        SU-  5      e   SnU R2                  R5                  5       (       aF  [7        5       =opl        UR;                  [<        R>                  " 5       5        URA                  5         U$ [7        5       =opl        SRC                  U5      S-   nU(       a  X€RE                  U5      -  nU R2                  RG                  U5      U l$        [K        U RH                  U RL                  5        U$ )z+Implements `.HTTPConnection.write_headers`.r   Ú é   z	 HTTP/1.1)ÚPOSTÚPUTÚPATCHrw   NzHTTP/1.1 %d %sé   úHTTP/1.1rs   )éÌ   rt   ru   rv   r€   Ú
ConnectionzHTTP/1.0Ú ú
keep-alivez
Keep-AliveÚchunkedrx   rt   c              3   óZ   #   • U  H!  u  p[        U5      S -   [        U5      -   v •  M#     g7f)z: N)r   )Ú.0ÚnÚvs      r   Ú	<genexpr>Ú0HTTP1Connection.write_headers.<locals>.<genexpr>¿  s(   é € ð 
Ú=N±T°QŒJ�q‹M˜DÑ ¤:¨a£=Ö0Ò=Nùs   ‚)+c              3   óB   #   • U  H  oR                  S 5      v •  M     g7f)Úlatin1N)Úencode)rÉ   Úlines     r   rÌ   rÍ   Â  s   é € ÐD²|¨t—[‘[ ×*Ð*²|ùs   ‚z+Illegal characters (CR or LF) in header: %ró   
s   

)'rV   r‡   r	   ÚRequestStartLinerb   Úappendr   r‰   re   rˆ   rd   rc   ÚversionrŠ   r`   rŒ   Úlowerr   rf   Ú	parse_intÚget_allÚextendÚCR_OR_LF_REÚsearchÚ
ValueErrorrU   r’   r   r¤   Úset_exceptionr
   r~   Ú	exceptionÚjoinÚ_format_chunkr�   rg   r   Ú_on_write_complete)	r   r›   r™   r¹   ÚlinesÚheader_linesrÑ   ÚfutureÚdatas	            r   Úwrite_headersÚHTTP1Connection.write_headers}  sJ  € ð ˆØ�>�>Ü˜j¬(×*CÑ*C×DÑDÐDÐDØ'1Ô$Ø�L‰Lœ°*¸Q´-ÀÈAÄÐOÓPÔQð
 ×!Ñ!Ð%=Ñ=÷ 4Ø$¨GÑ3ð Ö!ô
 ˜j¬(×*DÑ*D×EÑEÐEÐEØ×+Ñ+Ñ7Ð7Ð7Ø×(Ñ(Ñ4Ð4Ð4Ø(2Ô%Ø�L‰LœÐ.°*¸Q±-ÀÈAÁÐ1OÑOÓPÔQð
 ×(Ñ(×0Ñ0°JÑ>÷ 	4à×,Ñ,×3Ñ3°vÑ=÷	4ð —O‘O¨:Ñ5÷	4ð  —_‘_ sÑ*×D¨j¯o©oÀÑ.D÷	4ð %¨GÑ3ð Ô!ð" ×(Ñ(×0Ñ0°JÓ>Ø×.×.à(/�˜Ñ%ð ×(Ñ(×0Ñ0°JÓ>Ø×)Ñ)×-Ñ-¨l¸BÓ?×EÑEÓGÈ<ÓWà(4�˜Ñ%Ø× × Ø+4ˆGÐ'Ñ(Ø�~�~Ø×$Ñ$×+Ñ+¨vÓ5Ü”H×.Ñ.°
Ó;×@Ñ@ÀCÓGà/0ˆDÕ,Ø Ó(Ü/8¸ÐAQÑ9RÓ/SˆDÕ,à/3ˆDÔ,ñ
Ø=D¿_¹_Ô=Nó
ˆð 	�‰ÑD±|ÓDÔDÛˆDÜ×!Ñ! $×'Ó'Ü Ð!NÐQUÑ!UÓVÐVñ ð ˆØ�;‰;×Ñ×ÑÜ*0«(Ð2ˆFÔ'Ø× Ñ ¤×!;Ò!;Ó!=Ô>Ø×ÑÔð ˆô +1«(Ð2ˆFÔ'Ø—<‘< Ó&¨Ñ4ˆDÞØ×*Ñ*¨5Ó1Ñ1�Ø"&§+¡+×"3Ñ"3°DÓ"9ˆDÔÜ$ T×%8Ñ%8¸$×:QÑ:QÔRØˆr!   c                 óL  • U R                   b^  U =R                   [        U5      -  sl         U R                   S:  a0  U R                  R                  5         [        R
                  " S5      eU R                  (       a'  U(       a   [        S[        U5      -  5      S-   U-   S-   $ U$ )Nr   z,Tried to write more data than Content-Lengthz%xrÒ   )rf   ÚlenrU   r€   r	   ÚHTTPOutputErrorre   r   )r   r¹   s     r   rà   ÚHTTP1Connection._format_chunkÔ  sŽ   € Ø×+Ñ+Ñ7Ø×,Ò,´°E³
Ñ:Õ,Ø×/Ñ/°!Ó3à—‘×!Ñ!Ô#Ü×.Ò.ØBóð ð × × ¦Uô ˜œs 5›zÑ)Ó*¨WÑ4°uÑ<¸wÑFÐFàˆLr!   c                 óº  • SnU R                   R                  5       (       aZ  [        5       =o l        U R                  R	                  [
        R                  " 5       5        U R                  R                  5         U$ [        5       =o l        U R                   R                  U R                  U5      5      U l
        [        U R                  U R                  5        U$ )z²Implements `.HTTPConnection.write`.

For backwards compatibility it is allowed but deprecated to
skip `write_headers` and instead call `write()` with a
pre-encoded header block.
N)rU   r’   r   r¤   rÝ   r
   r~   rÞ   r�   rà   rg   r   rá   )r   r¹   rä   s      r   r�   ÚHTTP1Connection.writeä  s«   € ð ˆØ�;‰;×Ñ×ÑÜ*0«(Ð2ˆFÔ'Ø×Ñ×,Ñ,¬X×-GÒ-GÓ-IÔJØ×Ñ×(Ñ(Ô*ð
 ˆô +1«(Ð2ˆFÔ'Ø"&§+¡+×"3Ñ"3°D×4FÑ4FÀuÓ4MÓ"NˆDÔÜ$ T×%8Ñ%8¸$×:QÑ:QÔRØˆr!   c                 óÒ  • U R                   bl  U R                   S:w  a\  U R                  R                  5       (       d=  U R                  R                  5         [        R
                  " SU R                   -  5      eU R                  (       ad  U R                  R                  5       (       dE  U R                  R                  S5      U l        U R                  R                  U R                  5        SU l        U R                  (       d  SU l        U R                  R                  S5        U R                  c  U R                  S5        g[!        U R                  U R                  5        g)z$Implements `.HTTPConnection.finish`.Nr   z0Tried to write %d bytes less than Content-Lengths   0

T)rf   rU   r’   r€   r	   rê   re   r�   rg   Úadd_done_callbackrá   r]   r^   r`   Úset_nodelayÚ_finish_requestr   r   s    r   r�   ÚHTTP1Connection.finishö  s  € ð ×,Ñ,Ñ8Ø×0Ñ0°AÓ5Ø—K‘K×&Ñ&×(Ñ(à�K‰K×ÑÔÜ×*Ò*ØBØ×2Ñ2ñ3óð ð × × Ø—;‘;×%Ñ%×'Ñ'Ø&*§k¡k×&7Ñ&7¸Ó&E�Ô#Ø×#Ñ#×5Ñ5°d×6MÑ6MÔNØ#ˆÔð ×"×"Ø)-ˆDÔ&ð 	�‰×Ñ Ô%Ø×ÑÑ&Ø× Ñ  Õ&ä$ T×%8Ñ%8¸$×:NÑ:NÕOr!   c                 ól  • UR                  5       nUb/  [        U[        R                  5      (       d  UR	                  5         U R
                  b8  U R
                  nS U l        U R                  R                  R                  U5        U R                  b   U R                  nS U l	        [        US 5        g g r   )rÞ   r‡   r
   r~   Úresultr£   rU   r|   Úadd_callbackr¤   r   )r   rä   Úexcr§   s       r   rá   Ú"HTTP1Connection._on_write_complete  s•   € Ø×ÑÓ ˆØ‰?¤:¨c´8×3MÑ3M×#NÑ#NØ�M‰MŒOØ×ÑÑ+Ø×+Ñ+ˆHØ#'ˆDÔ Ø�K‰K×Ñ×,Ñ,¨XÔ6Ø×ÑÑ)Ø×'Ñ'ˆFØ!%ˆDÔÜ.¨v°tÕ<ð *r!   c                 ó  • U R                   R                  (       a  gUR                  S5      nUb  UR                  5       nUR                  S:X  a  US:g  $ SU;   d!  [        U5      (       d  [        USS 5      S;   a  US:H  $ g)	NFrÄ   rÂ   r€   rw   r‰   )rs   ÚGETrÆ   )rW   rF   rŒ   rÖ   rÕ   Úis_transfer_encoding_chunkedÚgetattr)r   r›   r™   Úconnection_headers       r   r…   ÚHTTP1Connection._can_keep_alive#  s…   € ð �;‰;×$×$ØØ#ŸK™K¨Ó5ÐØÑ(Ø 1× 7Ñ 7Ó 9ÐØ×Ñ Ó+Ø$¨Ñ/Ð/à Ó'Ü+¨G×4Ñ4Ü�z 8¨TÓ2°oÓEð %¨Ñ4Ð4Ør!   c                 ó,  • U R                  5         U R                  (       d"  U R                  (       a  U R                  5         g U R                  R                  S5        U R                  R                  5       (       d  [        U R                  S 5        g g )NF)	ra   rV   r`   r€   rU   rð   r_   r‘   r   )r   rä   s     r   rñ   ÚHTTP1Connection._finish_request7  sg   € Ø×ÑÔØ�~�~ $×"<×"<Ø�J‰JŒLØð 	�‰×Ñ Ô&Ø×"Ñ"×'Ñ'×)Ñ)Ü.¨t×/BÑ/BÀDÕIð *r!   rå   c                 óæ   • [        UR                  S5      5      R                  S5      nUR                  S5      nUS U R	                  S5      n[
        R                  R                  X#S  5      nXE4$ )NrÏ   z
Ú
Ú)r   ÚdecodeÚlstripÚfindÚrstripr	   ÚHTTPHeadersÚparse)r   rå   Údata_strÚeolr›   r™   s         r   r‚   ÚHTTP1Connection._parse_headersB  si   € ô
 ˜dŸk™k¨(Ó3Ó4×;Ñ;¸FÓCˆà�m‰m˜DÓ!ˆØ˜d˜s�^×*Ñ*¨4Ó0ˆ
Ü×&Ñ&×,Ñ,¨X°d¨^Ó<ˆØÐ"Ð"r!   rŠ   c                 óÂ  ^• SU;   a¥  SUS   ;   aX  [         R                  " SUS   5      m[        U4S jT 5       5      (       a  [        R                  " SUS   -  5      eTS   US'    [        US   5      n[        [        U5      U R                  :”  a  [        R                  " S5      eOS n[        U5      nUS	:X  a(  U(       d  US
;  a  [        R                  " SU-  5      eSnU(       a  U R                  U5      $ Ub  U R                  XC5      $ U R                  (       a  U R                  U5      $ g ! [         a    [        R                  " SUS   -  5      ef = f)Nrw   Ú,z,\s*c              3   ó2   >#   • U  H  oTS    :g  v •  M     g7f)r   Nr   )rÉ   ÚiÚpiecess     €r   rÌ   Ú-HTTP1Connection._read_body.<locals>.<genexpr>Z  s   øé € Ð6ªv¨!˜F 1™I–~ªvùs   ƒz$Multiple unequal Content-Lengths: %rr   z*Only integer Content-Length is allowed: %szContent-Length too longrÃ   )Nr   z*Response with code %d should not have body)ÚreÚsplitÚanyr	   r‹   r×   rÜ   r   rP   r[   rú   Ú_read_chunked_bodyÚ_read_fixed_bodyrV   Ú_read_body_until_close)r   rŠ   r™   ri   Úcontent_lengthÚ
is_chunkedr  s         @r   rŽ   ÚHTTP1Connection._read_bodyN  s}  ø€ ð ˜wÓ&Ø�gÐ.Ñ/Ó/ô Ÿš '¨7Ð3CÑ+DÓE�ÜÔ6©vÓ6×6Ñ6Ü"×1Ò1Ø>Ø!Ð"2Ñ3ñ4óð ð -3°1©I�Ð(Ñ)ðÜ09¸'ÐBRÑ:SÓ0T�ô ”C˜Ó(¨4×+>Ñ+>Ó>Ü×-Ò-Ð.GÓHÐHð ?ð "ˆNä1°'Ó:ˆ
à�3‹;ö ˜^°9Ó<Ü×-Ò-Ø@À4ÑGóð ð ˆNæØ×*Ñ*¨8Ó4Ð4ØÑ%Ø×(Ñ(¨ÓBÐBØ�>�>Ø×.Ñ.¨xÓ8Ð8Øøô= ó ä×-Ò-Ø@ØÐ.Ñ/ñ0óð ðús   Á*D7 Ä7'Er  c              ƒ   ó   #   • US:”  a¯  U R                   R                  [        U R                  R                  U5      SS9I S h  v•N nU[        U5      -  nU R                  (       a  U R                  (       a6  [        [        5         UR                  U5      nUb
  UI S h  v•N   S S S 5        US:”  a  M®  g g  Nt N! , (       d  f       N= f7f)Nr   T©Úpartial)rU   Ú
read_bytesÚminrW   rG   ré   r]   rV   r*   r   Údata_received)r   r  ri   ÚbodyÚrets        r   r  Ú HTTP1Connection._read_fixed_bodyƒ  s§   é € ð ˜qÓ ØŸ™×/Ñ/Ü�D—K‘K×*Ñ*¨NÓ;ÀTð 0ð ÷ ˆDð œc $›iÑ'ˆNØ×'×'¨4¯>¯>Ü-¬gÕ6Ø"×0Ñ0°Ó6�CØ‘Ø!Ÿ	˜	÷ 7ð ˜q× ññ "÷ 7Õ6üsC   ‚ACÁB9ÁACÂB=Â"B;Â#B=Â'CÂ7CÂ;B=Â=
CÃCc              ƒ   ó®  #   • Sn U R                   R                  SSS9I S h  v•N n [        [        US S 5      5      nUS:X  a@  U R                   R                  S5      I S h  v•N nUS:w  a  [
        R                  " S	5      eg X$-  nX R                  :”  a  [
        R                  " S
5      eUnU(       a®  U R                   R                  [        X`R                  R                  5      SS9I S h  v•N nU[        U5      -  nU R                  (       a  U R                  (       a6  [        [         5         UR#                  U5      nUb
  UI S h  v•N   S S S 5        U(       a  M®  U R                   R                  S5      I S h  v•N nUS:X  d   eGMŽ   GNq! [         a    [
        R                  " S5      ef = f GNW NË No! , (       d  f       Ns= f NN7f)Nr   TrÒ   é@   rp   éþÿÿÿzinvalid chunk sizerÁ   z%improperly terminated chunked requestzchunked body too larger  )rU   Ú
read_untilÚparse_hex_intr   rÜ   r	   r‹   r  r[   r  rW   rG   ré   r]   rV   r*   r   r   )	r   ri   Ú
total_sizeÚchunk_len_strÚ	chunk_lenÚcrlfÚbytes_to_readr¹   r"  s	            r   r  Ú"HTTP1Connection._read_chunked_body‘  s¥  é € àˆ
ØØ"&§+¡+×"8Ñ"8¸ÈBÐ"8Ð"O×OˆMðDÜ)¬*°]À3ÀBÐ5GÓ*HÓI�	ð ˜A‹~Ø!Ÿ[™[×3Ñ3°AÓ6×6�Ø˜7“?Ü"×1Ò1Ø?óð ð ØÑ#ˆJØ×/Ñ/Ó/Ü×-Ò-Ð.FÓGÐGØ%ˆMÞØ"Ÿk™k×4Ñ4Ü˜§{¡{×'=Ñ'=Ó>Èð 5ð ÷ �ð ¤ U£Ñ+�Ø×+×+¨t¯~¯~Ü1´'Õ:Ø&×4Ñ4°UÓ;˜Ø™?Ø"%ŸI˜I÷ ;÷  �-ð Ÿ™×/Ñ/°Ó2×2ˆDØ˜7“?Ð"�?ò; ÚOøô ó DÜ×-Ò-Ð.BÓCÐCðDúò 7ññ &÷ ;Õ:úñ
 3ùs‚   ‚!G£F¤G©F Á $GÁ$F;Á%BGÃ2F>Ã3AGÄ6GÅG ÅGÅGÅ&GÆGÆGÆ!F8Æ8GÆ>GÇ GÇ
GÇGc              ƒ   ó,  #   • U R                   R                  5       I S h  v•N nU R                  (       a  U R                  (       a7  [	        [
        5         UR                  U5      nUb
  UI S h  v•N   S S S 5        g g  N^ N! , (       d  f       g = f7fr   )rU   Úread_until_closer]   rV   r*   r   r   )r   ri   r!  r"  s       r   r  Ú&HTTP1Connection._read_body_until_close³  sn   é € ð —[‘[×1Ñ1Ó3×3ˆØ×#×# t§~§~Ü)¬'Õ2Ø×,Ñ,¨TÓ2�Ø‘?Ø—I�I÷ 3Ð2ð (6ñ 4ñ
 ÷ 3Õ2üs9   ‚B A?¡5BÁBÁ0BÁ1BÁ5BÂBÂ
BÂB)r\   re   r¥   r`   rf   r_   r[   rg   r^   rd   rb   rc   r£   r]   r¤   rX   rV   rF   rW   rU   ©NNr"   r   )rä   rº   r#   N)rä   zOptional[Future[None]]r#   N)/r$   r%   r&   r'   r=   r
   ÚIOStreamrO   r   rD   Úobjectr   r	   ÚHTTPMessageDelegater   rm   rl   ra   r   r“   r”   r€   r°   rQ   r´   rP   r·   r   rÓ   rˆ   r  Úbytesræ   rà   r�   r�   rá   r…   rñ   r   Ústrr‚   rŽ   r  r  r  r(   r   r!   r   rS   rS   j   sn  † ñð 7;Ø$(ñ7#à×!Ñ!ð7#ð ð7#ð Ð2Ñ3ð	7#ð
 ˜&Ñ!ð7#ð 
õ7#ðr, h×&BÑ&Bð ,ÀyÐQUÁô ,ðx¨H×,HÑ,Hð xÈTô xôt
1ð(¨8°H¸RÀ¸XÑ4FÑ+Gð (ÈDô (ô
 ôJð˜×)Ñ)ô ð%¨ð %°$ô %ð,¨sð ,°tô ,ð "&ñ	Uà˜(×3Ñ3°X×5OÑ5OÐOÑPðUð ×%Ñ%ðUð ˜‰ð	Uð
 
õUðn 5ð ¨Uô ð ˜5ð  ^ô ô$Pô@=ðØ"×3Ñ3ðØ>F×>RÑ>Rðà	ôô(	Jð
# 5ð 
#¨U°3¸×8LÑ8LÐ3LÑ-Mô 
#ð3àð3ð ×%Ñ%ð3ð ×.Ñ.ð	3ð
 
�)˜D‘/Ñ	"ô3ðj"Ø!ð"Ø-5×-IÑ-Ið"à	ô"ð #°×1MÑ1Mð  #ÐRVô  #ðDØ ×4Ñ4ðà	÷r!   rS   c                   óÐ   • \ rS rSrSrS\R                  S\SS4S jrS\	\R                  \R                  4   S	\R                  S\\S      4S
 jrS\SS4S jrSS jrSS jrSrg)rk   i¾  zDWraps an `HTTPMessageDelegate` to decode ``Content-Encoding: gzip``.ri   rG   r#   Nc                 ó*   • Xl         X l        S U l        g r   )Ú	_delegateÚ_chunk_sizeÚ_decompressor)r   ri   rG   s      r   r   Ú_GzipMessageDelegate.__init__Á  s   € Ø!ŒØ%ÔØ!ˆÕr!   r›   r™   c                 óÎ   • UR                  SS5      R                  5       S:X  a'  [        5       U l        UR	                  SUS   5        US	 U R
                  R                  X5      $ )NzContent-EncodingrÅ   ÚgzipzX-Consumed-Content-Encoding)rŒ   rÖ   r   r<  Úaddr:  r†   )r   r›   r™   s      r   r†   Ú%_GzipMessageDelegate.headers_receivedÆ  sa   € ð
 �;‰;Ð)¨2Ó.×4Ñ4Ó6¸&Ó@Ü!1Ó!3ˆDÔð �K‰KÐ5°wÐ?QÑ7RÔSØÐ*Ð+Ø�~‰~×.Ñ.¨zÓCÐCr!   r¹   c              ƒ   óÌ  #   • U R                   (       a¢  UnU(       a˜  U R                   R                  X R                  5      nU(       a(  U R                  R	                  U5      nUb
  UI S h  v•N   U R                   R
                  nU(       a  U(       d  [        R                  " S5      eU(       a  M—  g g U R                  R	                  U5      nUb  UI S h  v•N   g g  Ns N7f)Nz8encountered unconsumed gzip data without making progress)r<  rL   r;  r:  r   Úunconsumed_tailr	   r‹   )r   r¹   Úcompressed_dataÚdecompressedr"  s        r   r   Ú"_GzipMessageDelegate.data_receivedÔ  s¾   é € Ø××Ø#ˆOÞ!Ø#×1Ñ1×<Ñ<Ø#×%5Ñ%5ó �ö  ØŸ.™.×6Ñ6°|ÓD�CØ‘Ø!Ÿ	˜	Ø"&×"4Ñ"4×"DÑ"D�Þ"®<Ü"×1Ò1ØRóð ÷ "’/ð —.‘.×.Ñ.¨uÓ5ˆCØ‰Ø—	‘	ð ñ "ñ ùs+   ‚A*C$Á,C Á-AC$Â4%C$ÃC"ÃC$Ã"C$c                 ó¨   • U R                   b,  U R                   R                  5       nU(       a  [        S5      eU R                  R	                  5       $ )Nz:decompressor.flush returned data; possible truncated input)r<  ÚflushrÜ   r:  r�   )r   Útails     r   r�   Ú_GzipMessageDelegate.finishé  sL   € Ø×ÑÑ)Ø×%Ñ%×+Ñ+Ó-ˆDÞô !ØPóð ð �~‰~×$Ñ$Ó&Ð&r!   c                 ó6   • U R                   R                  5       $ r   )r:  r�   r   s    r   r�   Ú(_GzipMessageDelegate.on_connection_closeø  s   € Ø�~‰~×1Ñ1Ó3Ð3r!   )r;  r<  r:  r"   )r$   r%   r&   r'   r=   r	   r5  rP   r   r   rÓ   rˆ   r  r   r   r†   r6  r   r�   r�   r(   r   r!   r   rk   rk   ¾  s�   † ÙNð" ×!=Ñ!=ð "È3ð "ÐSWô "ð
Dà˜(×3Ñ3°X×5OÑ5OÐOÑPðDð ×%Ñ%ðDð 
�)˜D‘/Ñ	"ô	Dð¨ð °4ô ô*'÷4r!   rk   c            	       ó°   • \ rS rSrSr  SS\R                  S\\   S\\	   SS4S jjr
SS	 jrS
\R                  SS4S jrS
\R                  SS4S jrSrg)ÚHTTP1ServerConnectioniü  zAn HTTP/1.x server.NrU   rW   rX   r#   c                 óP   • Xl         Uc
  [        5       nX l        X0l        SU l        g)zµ
:arg stream: an `.IOStream`
:arg params: a `.HTTP1ConnectionParameters` or None
:arg context: an opaque application-defined object that is accessible
    as ``connection.context``
N)rU   rD   rW   rX   Ú_serving_future)r   rU   rW   rX   s       r   r   ÚHTTP1ServerConnection.__init__ÿ  s(   € ð ŒØ‰>Ü.Ó0ˆFØŒØŒØ#ˆÕr!   c              ƒ   ó¬   #   • U R                   R                  5         U R                  c   e U R                  I Sh  v•N   g N! [         a     gf = f7f)z]Closes the connection.

Returns a `.Future` that resolves after the serving loop has exited.
N)rU   r€   rP  Ú	Exceptionr   s    r   r€   ÚHTTP1ServerConnection.close  sP   é € ð
 	�‰×ÑÔð ×#Ñ#Ñ/Ð/Ð/ð	Ø×&Ñ&×&Ó&øÜó 	Ùð	üs8   ‚*A­A ¼A½A ÁAÁA Á
AÁAÁAÁAri   c                 óê   • [        U[        R                  5      (       d   e[        R                  " U R                  U5      5      nX l        U R                  R                  R                  US 5        g)z^Starts serving requests on this connection.

:arg delegate: a `.HTTPServerConnectionDelegate`
c                 ó"   • U R                  5       $ r   )rô   )Úfs    r   Ú<lambda>Ú5HTTP1ServerConnection.start_serving.<locals>.<lambda>)  s
   € °a·h±h´jr!   N)
r‡   r	   ÚHTTPServerConnectionDelegater   Úconvert_yieldedÚ_server_request_looprP  rU   r|   Ú
add_future)r   ri   Úfuts      r   Ústart_servingÚ#HTTP1ServerConnection.start_serving   sY   € ô
 ˜(¤H×$IÑ$I×JÑJÐJÐJÜ×!Ò! $×";Ñ";¸HÓ"EÓFˆØ"Ôà�‰×Ñ×&Ñ& sÑ,@ÕAr!   c              ƒ   óÒ  #   •   [        U R                  SU R                  U R                  5      nUR	                  X5      n UR                  U5      I S h  v•N nU(       d   UR                  U 5        g [        R"                  " S5      I S h  v•N   M‘   N>! [        R                  [        R                  [        R                  4 a     UR                  U 5        g [         a$    UR                  5          UR                  U 5        g [         a9    [        R                   " SSS9  UR                  5          UR                  U 5        g f = f N¿! UR                  U 5        f = f7f)NTFr7   r8   r   )rS   rU   rW   rX   Ústart_requestrm   r
   r~   ÚUnsatisfiableReadErrorÚasyncioÚCancelledErrorÚon_closer   r€   rS  r   r:   Úsleep)r   ri   ÚconnÚrequest_delegater"  s        r   r\  Ú*HTTP1ServerConnection._server_request_loop+  s:  é € ð	$ØÜ& t§{¡{°E¸4¿;¹;ÈÏÉÓU�Ø#+×#9Ñ#9¸$Ó#EÐ ðØ $× 2Ñ 2Ð3CÓ D×D�Cö Øð ×Ñ˜dÕ#ô —m’m AÓ&×&Ð&ñ+ ñ Eøä×.Ñ.Ü×3Ñ3Ü×*Ñ*ðó ð
 ð ×Ñ˜dÕ#ô 'ó à—J‘J”LØð ×Ñ˜dÕ#ô !ó Ü—M’MÐ"6ÀÒFØ—J‘J”LØð
 ×Ñ˜dÕ#ðúñ 'øà×Ñ˜dÕ#üsŽ   ‚E'„>E ÁB ÁBÁB ÁE Á$E'Á6E ÂEÂE ÂB Â3EÃE ÃE'ÃEÃ7E Ã8E'Ä
.EÄ8E Ä9E'ÅEÅE ÅE$Å$E')rP  rX   rW   rU   r2  r"   )r$   r%   r&   r'   r=   r
   r3  r   rD   r4  r   r€   r	   rZ  r_  r\  r(   r   r!   r   rN  rN  ü  s†   † Ùð
 7;Ø$(ñ	$à×!Ñ!ð$ð Ð2Ñ3ð$ð ˜&Ñ!ð	$ð
 
õ$ô&ð	B h×&KÑ&Kð 	BÐPTô 	Bð$Ø ×=Ñ=ð$à	÷$r!   rN  z[0-9]+z[0-9a-fA-F]+Úsr#   c                 ó`   • [         R                  U 5      c  [        SU -  5      e[        U 5      $ )z+Parse a non-negative integer from a string.znot an integer: %r)ÚDIGITSÚ	fullmatchrÜ   rP   ©rk  s    r   r×   r×   M  s-   € ä×Ñ˜ÓÑ"ÜÐ-°Ñ1Ó2Ð2Üˆq‹6€Mr!   c                 ób   • [         R                  U 5      c  [        SU -  5      e[        U S5      $ )z7Parse a non-negative hexadecimal integer from a string.znot a hexadecimal integer: %ré   )Ú	HEXDIGITSrn  rÜ   rP   ro  s    r   r(  r(  T  s0   € ä×Ñ˜1ÓÑ%ÜÐ8¸1Ñ<Ó=Ð=Üˆq�"‹:Ðr!   r™   c                 ó°   • SU ;  a  gSU ;   a  [         R                  " S5      eU S   R                  5       S:X  a  g[         R                  " SU S   -  5      e)z‡Returns true if the headers specify Transfer-Encoding: chunked.

Raise httputil.HTTPInputError if any other transfer encoding is used.
rx   Frw   z6Message with both Transfer-Encoding and Content-LengthrÇ   Tz Unsupported Transfer-Encoding %s)r	   r‹   rÖ   )r™   s    r   rú   rú   [  sn   € ð  'Ó)ØØ˜7Ó"ô ×%Ò%ØDó
ð 	
ð Ð"Ñ#×)Ñ)Ó+¨yÓ8Øô ×
!Ò
!Ø*¨WÐ5HÑ-IÑIóð r!   )2r=   rd  r>   r  rA   Útornado.concurrentr   r   r   Útornado.escaper   r   Útornador   r	   r
   Útornado.logr   r   Útornado.utilr   Útypingr   r   r   r   r   r   r   ÚcompilerÚ   rS  r   r4  r*   rD   ÚHTTPConnectionrS   r5  rk   rN  rm  rr  r7  rP   r×   r(  r  rO   rú   r   r!   r   Ú<module>r|     s	  ðñ ó
 Û Û 	Û ÷ñ ÷
 ,Ý Ý Ý ß (Ý )÷ K× JÑ Jà�jŠj˜Ó"€ô�iô ô
"˜vô "ô0% ô %ôBQ	�h×-Ñ-ô Q	ôh;4˜8×7Ñ7ô ;4ô|J$˜Fô J$ðZ 
�Š�IÓ	€Ø�JŠJ�Ó'€	ð�ð ˜ô ð�Sð ˜Sô ð¨(×*>Ñ*>ð À4õ r!   