Ë
    ³¸‘i‚i  ã                   ó¤  — d dl Z d dlZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZ d dlZd dlZd dlmZ d	d
l m!Z!m"Z" d	dl#m$Z$ d	dl%m&Z& d	dlm'Z'm(Z(m)Z)m*Z*m+Z+ d	dl,m-Z- d	dl.m/Z/m0Z0 d	dl1m2Z2m3Z3 d	dl4m5Z5 d	dl6m7Z7m8Z8 d	dl9m:Z: d	dl;m<Z< d	dl=m>Z>m?Z? dZ@er
d dlAZAd	dlBmCZC ee*e3de"dge<f   ZDee<gee?   f   ZE e*dde)i i dddd ejŒ                  d«      «
      ZG G d„ deH«      ZI G d „ d!eH«      ZJ eJ«       ZK ej˜                  ddd¬"«       G d#„ d$«      «       ZMeee*eMf   e3f   ZN G d%„ de$«      ZOy)&é    N)Údeque)Úsuppress)Úescape)Ú
HTTPStatus)ÚLogger)ÚTYPE_CHECKINGÚAnyÚ	AwaitableÚCallableÚDequeÚOptionalÚSequenceÚTupleÚTypeÚUnionÚcast)Úunder_cached_propertyé   )ÚAbstractAccessLoggerÚAbstractStreamWriter)ÚBaseProtocol)Úceil_timeout)ÚHttpProcessingErrorÚHttpRequestParserÚHttpVersion10ÚRawRequestMessageÚStreamWriter)ÚBadHttpMethod)Úaccess_loggerÚserver_logger)ÚEMPTY_PAYLOADÚStreamReader)Útcp_keepalive)ÚHTTPExceptionÚHTTPInternalServerError)ÚAccessLogger)ÚBaseRequest)ÚResponseÚStreamResponse)ÚRequestHandlerÚRequestPayloadErrorÚPayloadAccessError)ÚServerr*   zasyncio.Task[None]ÚUNKNOWNú/TFc                   ó   — e Zd ZdZy)r+   zPayload parsing error.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úN/var/www/telegram/bot_env/lib/python3.12/site-packages/aiohttp/web_protocol.pyr+   r+   S   s   „ Ú r7   r+   c                   ó   — e Zd ZdZy)r,   z-Payload was accessed after response was sent.Nr1   r6   r7   r8   r,   r,   W   s   „ Ú7r7   r,   )Úauto_attribsÚfrozenÚslotsc                   ó,   — e Zd ZU eed<   eed<   eed<   y)Ú_ErrInfoÚstatusÚexcÚmessageN)r2   r3   r4   ÚintÚ__annotations__ÚBaseExceptionÚstrr6   r7   r8   r>   r>   ^   s   … àƒKØ	ÓØ„Lr7   r>   c            !       óà  ‡ — e Zd ZdZdZddeeeej                  dddddd	dd
dœddde	j                  dedededee   dedededededededededef ˆ fd„Zdefd„Zeded    fd!„«       Zedeeeeeeeef   eeef   f      fd"„«       Zedefd#„«       ZdHd$ee   dd%fd&„Zd'e	j:                  dd%fˆ fd(„Zd)ee   dd%fˆ fd*„Z d+e!dd%fd,„Z"dId-„Z#d.e$dd%fd/„Z%d0edd%fd1„Z&dId2„Z'dId3„Z(d4e)d5e*d6ee   dd%fd7„Z+d8e!d9e!dd%fd:„Z,d8e!d9e!dd%fd;„Z-dId<„Z.d4e)d=ee   d>e/e)ge0e*   f   dee*ef   fd?„Z1dId@„Z2d4e)dAe*d=ee   dee*ef   fdB„Z3	 	 	 dJd4e)dCed)ee   dDee   de*f
dE„Z4dFe5de/e)ge0e*   f   fdG„Z6ˆ xZ7S )Kr*   aj  HTTP protocol implementation.

    RequestHandler handles incoming HTTP request. It reads request line,
    request headers and request payload and calls handle_request() method.
    By default it always returns with 404 response.

    RequestHandler handles errors in incoming request, like bad
    status line, bad headers or incomplete payload. If any error occurs,
    connection gets closed.

    keepalive_timeout -- number of seconds before closing
                         keep-alive connection

    tcp_keepalive -- TCP keep-alive is on, default is on

    debug -- enable debug mode

    logger -- custom logger object

    access_log_class -- custom class for access_logger

    access_log -- custom logging object

    access_log_format -- access log format string

    loop -- Optional event loop

    max_line_size -- Optional maximum header line size

    max_field_size -- Optional maximum header field size

    max_headers -- Optional maximum header size

    timeout_ceil_threshold -- Optional value to specify
                              threshold to ceil() timeout
                              values

    )Ú_request_countÚ
_keepaliveÚ_managerÚ_request_handlerÚ_request_factoryÚ_tcp_keepaliveÚ_next_keepalive_close_timeÚ_keepalive_handleÚ_keepalive_timeoutÚ_lingering_timeÚ	_messagesÚ_message_tailÚ_handler_waiterÚ_waiterÚ_task_handlerÚ_upgradeÚ_payload_parserÚ_request_parserÚ_reading_pausedÚloggerÚdebugÚ
access_logr   Ú_closeÚ_force_closeÚ_current_requestÚ_timeout_ceil_thresholdÚ_request_in_progressÚ_logging_enabledÚ_cachei.  TFiþ  i €  g      $@i   é   )Úkeepalive_timeoutr#   rZ   Úaccess_log_classr\   Úaccess_log_formatr[   Úmax_line_sizeÚmax_headersÚmax_field_sizeÚlingering_timeÚread_bufsizeÚauto_decompressÚtimeout_ceil_thresholdÚmanagerr-   Úloopre   r#   rZ   rf   r\   rg   r[   rh   ri   rj   rk   rl   rm   rn   c          
      óÒ  •— t         ‰| �  |«       d| _        d| _        d | _        || _        |j                  | _        |j                  | _	        || _
        d| _        d | _        || _        t        |«      | _        t!        «       | _        d| _        d | _        d | _        d | _        d| _        d | _        t1        | |||
||t2        |¬«      | _        d| _        	 t        |«      | _        || _        |	| _        || _         |r* |||«      | _!        | jB                  jD                  | _#        nd | _!        d| _#        d| _$        d| _%        d| _&        i | _'        y # t8        t:        f$ r Y Œ}w xY w)Nr   Fg        r7   )rh   rj   ri   Úpayload_exceptionrm   rd   )(ÚsuperÚ__init__rG   rH   r_   rI   Úrequest_handlerrJ   Úrequest_factoryrK   rL   rM   rN   rO   ÚfloatrP   r   rQ   rR   rT   rS   rU   rV   rW   r   r+   rX   r`   Ú	TypeErrorÚ
ValueErrorrZ   r[   r\   r   Úenabledrb   r]   r^   ra   rc   )Úselfro   rp   re   r#   rZ   rf   r\   rg   r[   rh   ri   rj   rk   rl   rm   rn   Ú	__class__s                    €r8   rt   zRequestHandler.__init__±   s  ø€ ô* 	‰Ñ˜Ôð  ˆÔØˆŒØ7;ˆÔØ*1ˆŒØ;B×;RÑ;RˆÔØ;B×;RÑ;RˆÔà+ˆÔà*-ˆÔ'Ø;?ˆÔØ"3ˆÔÜ$ ^Ó4ˆÔä*/«'ˆŒØ ˆÔà7;ˆŒØ?CˆÔØ;?ˆÔàˆŒØ$(ˆÔÜ<MØØØØ'Ø)Ø#Ü1Ø+ô	=
ˆÔð /0ˆÔ$ð	Ü+0Ð1GÓ+HˆDÔ(ð ˆŒØˆŒ
Ø$ˆŒÙÙAQØÐ-óBˆDÔð %)×$6Ñ$6×$>Ñ$>ˆDÕ!à!%ˆDÔØ$)ˆDÔ!àˆŒØ!ˆÔØ$)ˆÔ!Ø&(ˆ�øô% œ:Ð&ò 	Ùð	ús   ÃE ÅE&Å%E&Úreturnc                 ór   — dj                  | j                  j                  | j                  �d«      S d«      S )Nz<{} {}>Ú	connectedÚdisconnected)Úformatr|   r2   Ú	transport©r{   s    r8   Ú__repr__zRequestHandler.__repr__  s;   € Ø×ÑØ�N‰N×#Ñ#ØŸ>™>Ð5ˆKó
ð 	
à;Ió
ð 	
r7   zssl.SSLContextc                 óT   — | j                   €dS | j                   j                  d«      S )zReturn SSLContext if available.NÚ
sslcontext©r‚   Úget_extra_inforƒ   s    r8   Ússl_contextzRequestHandler.ssl_context  s1   € ð
 �~‰~Ð%ð ð	
ð —‘×.Ñ.¨|Ó<ð	
r7   c                 óT   — | j                   €dS | j                   j                  d«      S )zReturn peername if available.NÚpeernamer‡   rƒ   s    r8   r‹   zRequestHandler.peername  s1   € ð �~‰~Ð%ð ð	
ð —‘×.Ñ.¨zÓ:ð	
r7   c                 ó   — | j                   S ©N)rO   rƒ   s    r8   re   z RequestHandler.keepalive_timeout  s   € à×&Ñ&Ð&r7   ÚtimeoutNc              ƒ   óþ  K  — d| _         | j                  �| j                  j                  «        | j                  rX| j                  j                  «       | _        	 t        |«      4 ƒd{  –—†  | j                  ƒ d{  –—†  ddd«      ƒd{  –—†  	 t        |«      4 ƒd{  –—†  | j                  �-| j                  j!                  t        j                  «       «       | j"                  �A| j"                  j%                  «       s't        j&                  | j"                  «      ƒ d{  –—†  ddd«      ƒd{  –—†  | j"                  �| j"                  j                  «        | j)                  «        y7 �Œ7 Œù7 Œë# 1 ƒd{  –—†7  sw Y   ŒûxY w# t        j                  t        j                  f$ rE d| _        t        j                  dk\  r't        j                  «       x}r|j                  «       r‚ Y �Œew xY w7 �ŒY7 ŒÕ7 ŒÇ# 1 ƒd{  –—†7  sw Y   Œ×xY w# t        j                  t        j                  f$ r> t        j                  dk\  r't        j                  «       x}r|j                  «       r‚ Y �Œ:w xY w­w)z±Do worker process exit preparations.

        We need to clean up everything and stop accepting requests.
        It is especially important for keep-alive connections.
        TN©é   é   )r^   rN   Úcancelra   Ú_loopÚcreate_futurerS   r   ÚasyncioÚCancelledErrorÚTimeoutErrorÚsysÚversion_infoÚcurrent_taskÚ
cancellingr_   Ú_cancelrU   ÚdoneÚshieldÚforce_close)r{   rŽ   Útasks      r8   ÚshutdownzRequestHandler.shutdown   s  è ø€ ð !ˆÔà×!Ñ!Ð-Ø×"Ñ"×)Ñ)Ô+ð ×$Ò$ð $(§:¡:×#;Ñ#;Ó#=ˆDÔ ð
Ü'¨Ó0÷ /ñ /Ø×.Ñ.×.Ð.÷/÷ /ð	Ü# GÓ,÷ =ñ =Ø×(Ñ(Ð4Ø×)Ñ)×1Ñ1´'×2HÑ2HÓ2JÔKà×%Ñ%Ð1¸$×:LÑ:L×:QÑ:QÔ:SÜ!Ÿ.™.¨×);Ñ);Ó<×<Ð<÷=÷ =ð ×ÑÐ)Ø×Ñ×%Ñ%Ô'à×ÑÕð=/ùØ.øð/ø÷ /÷ /ñ /ûä×*Ñ*¬G×,@Ñ,@ÐAò Ø'+�Ô$ä×$Ñ$¨Ò/Ü!(×!5Ñ!5Ó!7Ð7˜Ð7ØŸ™Ô)àúðúð=ùð
 =øð=ø÷ =÷ =ñ =ûô ×&Ñ&¬×(<Ñ(<Ð=ò 	ä× Ñ  GÒ+Ü$×1Ñ1Ó3Ð3�TÐ3Ø—O‘OÔ%àúð	üsÿ   ‚AI=ÁF Á+E6Á,F Á/E=Á?E9Â E=ÂF ÂE;ÂF ÂH Â$G=Â%H Â(BHÄ*H Ä+HÄ/H Ä:HÄ;H Ä?7I=Å6F Å9E=Å;F Å=FÆFÆFÆF ÆA$G:Ç6I=Ç9G:Ç:I=Ç=H È HÈH ÈHÈ
HÈHÈH ÈAI:É6I=É9I:É:I=r‚   c                 óÀ  •— t         ‰| �  |«       t        t        j                  |«      }| j
                  rt        |«       | j                  €J ‚| j                  j                  | |«       | j                  }t        j                  dk\  r.t        j                  | j                  «       |d¬«      }|| _        y |j                  | j                  «       «      }|| _        y )N©r‘   é   T©rp   Úeager_start)rs   Úconnection_mader   r–   Ú	TransportrL   r#   rI   r”   r™   rš   ÚTaskÚstartÚcreate_taskrU   )r{   r‚   Úreal_transportrp   r¡   r|   s        €r8   r¨   zRequestHandler.connection_madeR  s°   ø€ Ü‰Ñ 	Ô*äœg×/Ñ/°Ó;ˆØ×ÒÜ˜.Ô)à�}‰}Ð(Ð(Ð(Ø�‰×%Ñ% d¨NÔ;à�z‰zˆÜ×Ñ˜wÒ&Ü—<‘< §
¡
£°4ÀTÔJˆDð "ˆÕð ×#Ñ# D§J¡J£LÓ1ˆDØ!ˆÕr7   r@   c                 óh  •— | j                   €y | j                   j                  | |«       | j                   j                  }| j                  «        t        ‰| �  |«       d | _         d | _        d | _        d | _        | j                  �| j                  j                  «        | j                  �(|€t        d«      }| j                  j                  |«       |r&| j                  �| j                  j                  «        d | _        | j                  �"| j                  j                  «        d | _        y y )NzConnection lost)rI   Úconnection_lostÚhandler_cancellationr    rs   rK   rJ   rX   rN   r“   r_   ÚConnectionResetErrorr�   rU   rW   Úfeed_eof)r{   r@   r°   r|   s      €r8   r¯   zRequestHandler.connection_lostc  s  ø€ Ø�=‰=Ð ØØ�‰×%Ñ% d¨CÔ0ð  $Ÿ}™}×AÑAÐà×ÑÔÜ‰Ñ Ô$ØˆŒØ $ˆÔØ $ˆÔØ#ˆÔà×!Ñ!Ð-Ø×"Ñ"×)Ñ)Ô+à× Ñ Ð,Øˆ{Ü*Ð+<Ó=�Ø×!Ñ!×)Ñ)¨#Ô.á D×$6Ñ$6Ð$BØ×Ñ×%Ñ%Ô'à!ˆÔà×ÑÐ+Ø× Ñ ×)Ñ)Ô+Ø#'ˆDÕ ð ,r7   Úparserc                 ó    — | j                   �J ‚|| _         | j                  r-| j                   j                  | j                  «       d| _        y y )Nr7   )rW   rR   Ú	feed_data)r{   r³   s     r8   Ú
set_parserzRequestHandler.set_parserƒ  sL   € à×#Ñ#Ð+Ð+Ð+à%ˆÔà×ÒØ× Ñ ×*Ñ*¨4×+=Ñ+=Ô>Ø!$ˆDÕð r7   c                  ó   — y r�   r6   rƒ   s    r8   Úeof_receivedzRequestHandler.eof_received�  s   € Ør7   Údatac                 ó
  — | j                   s| j                  ry | j                  €À| j                  s´| j                  €J ‚	 | j                  j                  |«      \  }}}|xs dD ]7  \  }}| xj                  dz  c_
        | j                  j                  ||f«       Œ9 | j                  }|r#|�!|j                  «       s|j                  d «       || _        |r|r|| _        y y y | j                  €$| j                  r|r| xj                   |z  c_        y |r2| j                  j                  |«      \  }	}|	r| j#                  «        y y y # t        $ r.}t        d||j                  ¬«      t        fg}d}d}Y d }~�Œd }~ww xY w)Ni�  )r?   r@   rA   Fr7   r6   r   )r^   r]   rW   rV   rX   rµ   r   r>   rA   r!   rG   rQ   ÚappendrT   rž   Ú
set_resultrR   Úclose)
r{   r¹   ÚmessagesÚupgradedÚtailr@   ÚmsgÚpayloadÚwaiterÚeofs
             r8   Údata_receivedzRequestHandler.data_received�  sv  € Ø×Ò §¢Øð ×ÑÐ'°·²Ø×'Ñ'Ð3Ð3Ð3ðØ+/×+?Ñ+?×+IÑ+IÈ$Ó+OÑ(�˜( Dð !)¢¨Bò 6‘��WØ×#Ò# qÑ(Õ#Ø—‘×%Ñ% s¨G nÕ5ð6ð —\‘\ˆFÙ˜FÐ.°v·{±{´}à×!Ñ! $Ô'à$ˆDŒMÙ™DØ%)�Õ"ð !ˆxð ×!Ñ!Ð)¨d¯mªmÁØ×Ò $Ñ&Öñ Ø×,Ñ,×6Ñ6°tÓ<‰IˆC�ÙØ—
‘
•ð ð øô3 'ò ä S¨c¸3¿;¹;ÔGÌÐWð�ð !�Ø–ûðús   ÁE Å	FÅ#E=Å=FÚvalc                 ón   — || _         | j                  r"| j                  j                  «        d| _        yy)zMSet keep-alive connection mode.

        :param bool val: new state.
        N)rH   rN   r“   )r{   rÆ   s     r8   Ú
keep_alivezRequestHandler.keep_alive·  s3   € ð
 ˆŒØ×!Ò!Ø×"Ñ"×)Ñ)Ô+Ø%)ˆDÕ"ð "r7   c                 ó`   — d| _         | j                  r| j                  j                  «        yy)z�Close connection.

        Stop accepting new pipelining messages and close
        connection when handlers done processing messages.
        TN)r]   rT   r“   rƒ   s    r8   r½   zRequestHandler.closeÁ  s'   € ð ˆŒØ�<Š<Ø�L‰L×ÑÕ!ð r7   c                 óº   — d| _         | j                  r| j                  j                  «        | j                  �"| j                  j	                  «        d| _        yy)zForcefully close connection.TN)r^   rT   r“   r‚   r½   rƒ   s    r8   r    zRequestHandler.force_closeË  sG   € à ˆÔØ�<Š<Ø�L‰L×ÑÔ!Ø�>‰>Ð%Ø�N‰N× Ñ Ô"Ø!ˆD�Nð &r7   ÚrequestÚresponseÚtimec                 ó¼   — | j                   rP| j                  �Ct        r|€J ‚| j                  j                  ||| j                  j                  «       |z
  «       y y y r�   )rb   r   r   Úlogr”   rÍ   )r{   rË   rÌ   rÍ   s       r8   Ú
log_accesszRequestHandler.log_accessÔ  sX   € ð × Ò  T×%7Ñ%7Ð%CÝØÐ'Ð'Ð'Ø×Ñ×"Ñ" 7¨H°d·j±j·o±oÓ6GÈ$Ñ6NÕOð &DÐ r7   ÚargsÚkwc                 óV   — | j                   r | j                  j                   |i |¤Ž y y r�   )r[   rZ   ©r{   rÑ   rÒ   s      r8   Ú	log_debugzRequestHandler.log_debugÜ  s'   € Ø�:Š:ØˆD�K‰K×Ñ˜tÐ* rÓ*ð r7   c                 ó<   —  | j                   j                  |i |¤Ž y r�   )rZ   Ú	exceptionrÔ   s      r8   Úlog_exceptionzRequestHandler.log_exceptionà  s   € Øˆ�‰×Ñ˜tÐ* rÓ*r7   c                 óR  — d | _         | j                  s| j                  sy | j                  }|j	                  «       }| j
                  }||k  r"|j                  || j                  «      | _         y | j                  r,| j                  j                  «       s| j                  «        y y y r�   )rN   r^   rH   r”   rÍ   rM   Úcall_atÚ_process_keepaliverT   rž   r    )r{   rp   ÚnowÚ
close_times       r8   rÛ   z!RequestHandler._process_keepaliveã  sŠ   € Ø!%ˆÔØ×Ò D§O¢OØà�z‰zˆØ�i‰i‹kˆØ×4Ñ4ˆ
Ø�Òà%)§\¡\°*¸d×>UÑ>UÓ%VˆDÔ"Øð �<Š< §¡× 1Ñ 1Ô 3Ø×ÑÕð !4ˆ<r7   Ú
start_timeru   c              ƒ   óª  K  — d| _         	 	 || _         ||«      ƒ d {  –—† }d | _        	 t        |dd«      rt        j                  dt
        «       | j                  |||«      ƒ d {  –—† \  }}d| _         | j                  �| j                  j                  d «       ||fS 7 Œƒ# d | _        w xY w7 ŒG# t        $ r+}|}| j                  |||«      ƒ d {  –—†7  \  }}Y d }~Œqd }~wt        j                  $ r ‚ t        j                  $ rN}| j                  d|¬«       | j                  |d«      }| j                  |||«      ƒ d {  –—†7  \  }}Y d }~Œãd }~wt        $ r=}| j                  |d|«      }| j                  |||«      ƒ d {  –—†7  \  }}Y d }~�Œ'd }~ww xY w# d| _         | j                  �| j                  j                  d «       w w xY w­w)	NTÚ__http_exception__Fzlreturning HTTPException object is deprecated (#2415) and will be removed, please raise the exception insteadzRequest handler timed out.©Úexc_infoiø  éô  )ra   r_   ÚgetattrÚwarningsÚwarnÚDeprecationWarningÚfinish_responser$   r–   r—   r˜   rÕ   Úhandle_errorÚ	ExceptionrS   r¼   )r{   rË   rÞ   ru   ÚrespÚresetr@   s          r8   Ú_handle_requestzRequestHandler._handle_requestô  sÄ  è ø€ ð %)ˆÔ!ð 	6ð-Ø(/�Ô%Ù,¨WÓ5×5�à(,�Õ%ô �tÐ1°5Ô9Ü—‘ð9ô 'ô	ð !%× 4Ñ 4°W¸dÀJÓ O×O‰KˆD�%à(-ˆDÔ%Ø×#Ñ#Ð/Ø×$Ñ$×/Ñ/°Ô5à�Uˆ{Ðð? 6ùà(,�Õ%úð. Pùô- ò 	PØˆDØ $× 4Ñ 4°W¸dÀJÓ O×OÐO‰KˆD•%ûÜ×%Ñ%ò 	ØÜ×#Ñ#ò 	PØ�N‰NÐ7À#ˆNÔFØ×$Ñ$ W¨cÓ2ˆDØ $× 4Ñ 4°W¸dÀJÓ O×OÐO‰KˆD•%ûÜò 	PØ×$Ñ$ W¨c°3Ó7ˆDØ $× 4Ñ 4°W¸dÀJÓ O×OÐO‰KˆD–%ûð	Pûð ).ˆDÔ%Ø×#Ñ#Ð/Ø×$Ñ$×/Ñ/°Õ5ð 0üsº   ‚GŒB$ žB"ŸB$ £B2 «=F Á(B0Á)F Á02GÂ"B$ Â$	B-Â-B2 Â0F Â2	FÂ;C!ÃCÃC!ÃF Ã!)FÄ
;EÅEÅEÅF ÅFÅ)FÆFÆ	FÆF ÆFÆF Æ1GÇGc           	   ƒ   ó@  K  — | j                   }| j                  }|€J ‚| j                  }d}| j                  €J ‚| j                  €J ‚| j
                  �s{| j                  s1	 |j                  «       | _        | j                  ƒ d{  –—†  d| _        | j                  j                  «       \  }}| j                  r|j                  «       nd}|xj                  dz  c_        t        | |«      }t        |t        «      r| j!                  |«      }	t"        }n| j                  }	| j                  ||| || j$                  xs t'        j(                  |«      «      }
	 | j+                  |
||	«      }t,        j.                  dk\  rt'        j0                  ||d¬«      }n|j3                  |«      }	 |ƒ d{  –—† \  }}~|r<| j7                  d«       	 d|
_        | j:                  �€ð|��í| j7                  d«       �nÚt=        |j>                  «      | _         |jC                  «       sù| jD                  }| j
                  s¤|r¢| j7                  d	|«       |j                  «       }||z   }	 |jC                  «       sj||k  retG        ||z
  «      4 ƒd{  –—†  |jI                  «       ƒ d{  –—†  ddd«      ƒd{  –—†  |j                  «       }|jC                  «       s||k  rŒe|jC                  «       s-| j
                  s!| j7                  d«       | jQ                  «        |jS                  tT        «       d|
_        | j:                  €|�| j7                  d«       	 | j@                  r`| j^                  sT| j
                  sH|j                  «       |z   }|| _0        | jb                  €#|je                  || jf                  «      | _1        nn| j
                  s�Œ{| j
                  s/d| _        | j:                  �| j:                  jQ                  «        yyy7 �Œ†# d| _        w xY w7 �Œl# t4        $ r< | j7                  d«       Y d|
_        | j:                  �Œ}|€Œ€| j7                  d«       Œ’w xY w7 �ŒÝ7 �ŒÈ7 �Œ»# 1 ƒd{  –—†7  sw Y   �ŒÌxY w# t&        jJ                  t&        jL                  f$ r> t,        j.                  d
k\  r't'        j(                  «       x}r|jO                  «       r‚ Y �Œ	w xY w# t&        jJ                  $ r# | j7                  d«       | jW                  «        ‚ tX        $ r.}| j[                  d|¬«       | jW                  «        Y d}~�Œ!d}~wt\        $ r | jW                  «        ‚ w xY w# d|
_        | j:                  €|�| j7                  d«       w w w xY w­w)a_  Process incoming request.

        It reads request line, request headers and request payload, then
        calls handle_request() method. Subclass has to override
        handle_request(). start() handles various exceptions in request
        or response handling. Connection is being closed always unless
        keep_alive(True) specified.
        Nr   r¤   Tr¦   z&Ignored premature client disconnectionz'Ignored premature client disconnection.z(Ignored premature client disconnection 2z'Start lingering close timer for %s sec.r�   zUncompleted request.zUnhandled exceptionrá   )4r”   rI   rO   rK   rJ   r^   rQ   r•   rT   Úpopleftrb   rÍ   Úrequests_countr   Ú
isinstancer>   Ú_make_error_handlerÚERRORrU   r–   r›   rí   r™   rš   rª   r¬   ÚConnectionErrorrÕ   Ú_taskr‚   ÚboolrÈ   rH   Úis_eofrP   r   Úreadanyr—   r˜   rœ   r½   Úset_exceptionÚ_PAYLOAD_ACCESS_ERRORr    rê   rØ   rD   r]   rM   rN   rÚ   rÛ   )r{   rp   ro   re   rë   rA   rÂ   r«   Úwriterru   rË   Úcoror¡   rì   rk   rÜ   Úend_tÚtr@   rÝ   s                       r8   r«   zRequestHandler.start  s  è ø€ ð �z‰zˆØ—-‘-ˆØÐ"Ð"Ð"Ø ×3Ñ3ÐØˆØ×$Ñ$Ð0Ð0Ð0Ø×$Ñ$Ð0Ð0Ð0à×#Ó#Ø—>’>ð(à#'×#5Ñ#5Ó#7�D”LØŸ,™,×&Ð&à#'�D”Là#Ÿ~™~×5Ñ5Ó7ÑˆG�Wð $(×#8Ò#8�D—I‘I”K¸dˆEà×"Ò" aÑ'Õ"Ü! $¨Ó-ˆFÜ˜'¤8Ô,à"&×":Ñ":¸7Ó"C�Ü‘à"&×"7Ñ"7�ð
 ×+Ñ+ØØØØØ×"Ñ"Ò@¤g×&:Ñ&:¸4Ó&@óˆGðCNà×+Ñ+¨G°U¸OÓL�Ü×#Ñ# wÒ.Ü"Ÿ<™<¨°4ÀTÔJ‘Dà×+Ñ+¨DÓ1�DðØ(,§*‘K�D˜%ð ÙØ—N‘NÐ#MÔNØð` !%�”Ø—>‘>Ñ)¨dÑ.>Ø—N‘NÐ#LÖMô_ #' t§¡Ó"7�”ð —~‘~Ô'Ø%)×%9Ñ%9�NØ×,Ò,±ØŸ™ØEÀ~ôð #Ÿi™i›k˜Ø # nÑ 4˜ð&Ø&-§n¡nÔ&6¸3Àº;Ü+7¸À¹Ó+D÷ !<ñ !<à*1¯/©/Ó*;×$;Ð$;÷!<÷ !<ð '+§i¡i£k ð	 '.§n¡nÔ&6¸3À»;ð #Ÿ>™>Ô+°D×4EÒ4EØŸ™Ð'=Ô>ØŸ
™
œà×%Ñ%Ô&;Ô<ð !%�”Ø—>‘>Ð)¨dÐ.>Ø—N‘NÐ#LÕMà�Š t§{¢{¸4×;LÒ;Là!ŸY™Y›[Ð+<Ñ<�
Ø2<�Ô/Ø×)Ñ)Ð1Ø-1¯\©\Ø" D×$;Ñ$;ó.�DÕ*ð ða ×#Ô#ðf × Ò Ø!%ˆDÔØ�~‰~Ð)Ø—‘×$Ñ$Õ&ð *ð !ð] 'úà#'�D•LúðF #-úÜ&ò Ø—N‘NÐ#KÔLØðl !%�”Ø—>‘>Ñ)¨dÑ.>Ø—N‘NÐ#LÕMðuúð4!<ùà$;ùð!<ù÷ !<÷ !<ò !<ûô !(× 6Ñ 6¼×8LÑ8LÐMò &ä #× 0Ñ 0°GÒ ;Ü*1×*>Ñ*>Ó*@Ð%@ QÐ%@Ø$%§L¡L¤Nà %úð&ûô ×)Ñ)ò Ø—‘ÐGÔHØ× Ñ Ô"ØÜò #Ø×"Ñ"Ð#8À3Ð"ÔGØ× Ñ ×"Ò"ûÜ ò Ø× Ñ Ô"Øðûð !%�”Ø—>‘>Ð)¨dÐ.>Ø—N‘NÐ#LÕMð /?Ð)üsD  ‚A VÁ#$P ÂPÂP ÂCVÅAS* Æ+P Æ0PÆ1P Æ8S* Ç*VÇ7A+S* É#'R Ê
Q'ÊR ÊQ0Ê"Q*Ê#Q0Ê'R Ê2Q-Ê3)R ËAS* Ì/B VÏ<VÐP Ð	PÐVÐP ÐQ$Ð9S* Ð:VÑVÑVÑ#Q$Ñ$S* Ñ'R Ñ*Q0Ñ-R Ñ0RÑ6Q9Ñ7RÑ>R ÒAS'Ó#S* Ó&S'Ó'S* Ó*=U.Ô'#UÕ
U1 ÕU.Õ.U1 Õ1*VÖVrë   c              ƒ   ó  K  — |j                  «        | j                  �Z| j                  j                  d«       d| _        | j                  r,| j                  j                  | j                  «       d| _        	 |j                  }	  ||«      ƒ d{  –—†  |j!                  «       ƒ d{  –—†  | j%                  |||«       |dfS # t        $ r„ |€| j                  d«       n | j                  dj                  |«      «       t        «       }t        |j                  |j                  |j                  |j                  ¬«      }|j                  }Y ŒÌw xY w7 ŒÃ7 Œ­# t"        $ r | j%                  |||«       |dfcY S w xY w­w)a   Prepare the response and write_eof, then log access.

        This has to
        be called within the context of any exception so the access logger
        can get exception information. Returns True if the client disconnects
        prematurely.
        NFr7   z+Missing return statement on request handlerz7Web-handler should return a response instance, got {!r})r?   ÚreasonÚtextÚheadersT)Ú_finishrX   Úset_upgradedrV   rR   rµ   ÚprepareÚAttributeErrorrØ   r�   r%   r(   r?   r   r  r  Ú	write_eofrô   rÐ   )r{   rË   rë   rÞ   Úprepare_methr@   s         r8   rè   zRequestHandler.finish_response¨  s[  è ø€ ð 	�‰ÔØ×ÑÐ+Ø× Ñ ×-Ñ-¨eÔ4Ø!ˆDŒMØ×!Ò!Ø×$Ñ$×.Ñ.¨t×/AÑ/AÔBØ%(�Ô"ð	(ØŸ<™<ˆLð	Ù˜wÓ'×'Ð'Ø—.‘.Ó"×"Ð"ð
 	�‰˜  zÔ2Ø�Uˆ{Ðøô+ ò 	(Øˆ|Ø×"Ñ"Ð#PÕQà×"Ñ"ðß%™v d›|ôô *Ó+ˆCÜØ—z‘z¨#¯*©*¸3¿8¹8ÈSÏ[É[ôˆDð  Ÿ<™<ŠLð	(úð (øØ"ùÜò 	Ø�O‰O˜G T¨:Ô6Ø˜�:Òð	üsm   ‚A7F Á:C ÂE ÂEÂE Â*EÂ+E Â/F ÃB
EÅF ÅEÅF ÅE ÅE Å E=Å:F Å<E=Å=F r?   rA   c                 ó$  — | j                   dk(  r9t        |t        «      r)| j                  j	                  d|j
                  |¬«       n| j                  d|j
                  |¬«       |j                  j                  dkD  rt        d«      ‚d}|t        j                  k(  rÆdj                  t        j                  «      }t        j                  j                  }d}| j                  r,t        t        «      5  t!        j"                  «       }ddd«       d	|j$                  j'                  d
d«      v r)|rt)        |«      }d|› d�}dj                  ||¬«      }d	}n|r|}|dz   |z   }t+        |||¬«      }	|	j-                  «        |	S # 1 sw Y   Œ|xY w)z›Handle errors.

        Returns HTTP response with specific status code. Logs additional
        information. It always closes current connection.
        r   zError handling request from %srá   r   zMResponse is sent already, cannot send another response with the error messagez
text/plainz{0.value} {0.phrase}Nz	text/htmlÚAcceptÚ z<h2>Traceback:</h2>
<pre>z</pre>zV<html><head><title>{title}</title></head><body>
<h1>{title}</h1>
{msg}
</body></html>
)ÚtitlerÁ   z

)r?   r  Úcontent_type)rG   rñ   r   rZ   r[   ÚremoterØ   rû   Úoutput_sizerô   r   ÚINTERNAL_SERVER_ERRORr�   Údescriptionr   rê   Ú	tracebackÚ
format_excr  ÚgetÚhtml_escaper(   r    )
r{   rË   r?   r@   rA   Úctr  rÁ   Útbrë   s
             r8   ré   zRequestHandler.handle_errorÒ  sƒ  € ð ×Ñ !Ò#¬
°3¼Ô(Fð
 �K‰K×ÑØ0°'·.±.È3ð õ ð ×ÑØ0°'·.±.È3ð ô ð
 �>‰>×%Ñ%¨Ò)Ü!ð)óð ð
 ˆØ”Z×5Ñ5Ò5Ø*×1Ñ1´*×2RÑ2RÓSˆEÜ×2Ñ2×>Ñ>ˆCØˆBØ�zŠzÜœiÓ(ñ 0Ü"×-Ñ-Ó/�B÷0ð ˜gŸo™o×1Ñ1°(¸BÓ?Ñ?ÙÜ$ R›�BØ6°r°d¸&ÐA�Cð0÷ ‘&˜u¨#�&Ó.ð ð !‘áØ�CØ &™.¨3Ñ.�ä˜v¨GÀ"ÔEˆØ×ÑÔàˆ÷-0ð 0ús   Ã6FÆFÚerr_infoc                 ó0   ‡ ‡— dt         dt        fˆˆ fd„}|S )NrË   r}   c              “   óp   •K  — ‰j                  | ‰j                  ‰j                  ‰j                  «      S ­wr�   )ré   r?   r@   rA   )rË   r  r{   s    €€r8   Úhandlerz3RequestHandler._make_error_handler.<locals>.handler  s1   øè ø€ Ø×$Ñ$Ø˜Ÿ™¨(¯,©,¸×8HÑ8Hóð ùs   ƒ36)r'   r)   )r{   r  r  s   `` r8   rò   z"RequestHandler._make_error_handler  s   ù€ ð	¤;ð 	´>ö 	ð
 ˆr7   )g      .@)r}   N)rã   NN)8r2   r3   r4   r5   Ú	__slots__r    r&   r   Ú
LOG_FORMATr–   ÚAbstractEventLooprw   rö   r   r   r   rE   rB   rt   r„   r   r   r‰   r   r   r‹   Úpropertyre   r¢   ÚBaseTransportr¨   rD   r¯   r	   r¶   r¸   ÚbytesrÅ   rÈ   r½   r    r'   r)   rÐ   rÕ   rØ   rÛ   r   r
   rí   r«   rè   ré   r>   rò   Ú__classcell__)r|   s   @r8   r*   r*   h   s  ø„ ñ%ðN€IðN $(Ø"Ø&Ø7CØ*Ø!-×!8Ñ!8ØØ!Ø Ø"Ø $Ø!Ø $Ø()ò'O)àðO)ð ×'Ñ'ð	O)ð !ðO)ð ðO)ð ðO)ð Ð3Ñ4ðO)ð ðO)ð ðO)ð ðO)ð ðO)ð ðO)ð ðO)ð  ð!O)ð" ð#O)ð$ ð%O)ð& !&õ'O)ðb
˜#ó 
ð ð
˜XÐ&6Ñ7ò 
ó ð
ð ð
à	�%˜˜U 3¨¨S°#Ð#5Ñ6¸¸cÀ3¸h¹ÐGÑHÑ	Iò
ó ð
ð ð' 5ò 'ó ð'ñ0 h¨u¡oð 0Àó 0ðd"¨×)>Ñ)>ð "À4õ "ð"( 8¨MÑ#:ð (¸tõ (ð@% ð %¨ó %óð% %ð %¨Dó %ðN*˜dð * tó *ó"ó"ðPØ"ðPØ.<ðPØDLÈUÁOðPà	óPð+˜sð +¨#ð +°$ó +ð+ 3ð +¨cð +°dó +óð")àð)ð ˜U‘Oð)ð " ; -°¸>Ñ1JÐ"JÑKð	)ð
 
ˆ~˜tÐ#Ñ	$ó)óVG'ðR(Ø"ð(Ø*8ð(ØFNÈuÁoð(à	ˆ~˜tÐ#Ñ	$ó(ðZ Ø'+Ø!%ñ<àð<ð ð<ð �mÑ$ð	<ð
 ˜#‘ð<ð 
ó<ð|Ø ðà	�;�- ¨>Ñ!:Ð:Ñ	;÷r7   )Pr–   Úasyncio.streamsr™   r  rå   Úcollectionsr   Ú
contextlibr   Úhtmlr   r  Úhttpr   Úloggingr   Útypingr   r	   r
   r   r   r   r   r   r   r   r   ÚattrÚyarlÚ	propcacher   Úabcr   r   Úbase_protocolr   Úhelpersr   r   r   r   r   r   Úhttp_exceptionsr   rÏ   r   r    Ústreamsr!   r"   Útcp_helpersr#   Úweb_exceptionsr$   r%   Úweb_logr&   Úweb_requestr'   Úweb_responser(   r)   Ú__all__ÚsslÚ
web_serverr-   Ú_RequestFactoryÚ_RequestHandlerÚURLró   rê   r+   r,   rú   Úsr>   Ú_MsgTyper*   r6   r7   r8   ú<module>r?     sf  ðÛ Û Û 
Û Û Ý Ý Ý &Ý Ý ÷÷ ÷ ñ ó Û Ý +ç ;Ý 'Ý !÷õ õ +ß -ß 0Ý &ß BÝ !Ý $ß 2à
I€áÛå"ð àØØØØðð ðñ	€ð ˜K˜=¨)°NÑ*CÐCÑD€áØØØØØØØØ	Ø	Ø€D‡H�HˆSƒMó	€ô!˜)ô !ô8˜ô 8ñ +Ó,Ð ð €‡��T $¨dÔ3÷ð ó 4ðð �Ð(¨(Ð2Ñ3°\ÐAÑB€ôp
�\õ p
r7   