ó
    ÖÁ“ioj  ã                  óÜ  • S SK Jr  S SKrS SKrS SKrS SKJr  SSKJrJ	r	J
r
Jr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JrJr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$  / SQr%\\-  \-  r&  " S S\RN                  5      r(\(RR                  r)\(RT                  r* " S S\RN                  5      r+\+RX                  r,\+RZ                  r-\+R\                  r.\+R^                  r/Sr0  " S S5      r1g)é    )ÚannotationsN)Ú	Generatoré   )ÚConnectionClosedÚConnectionClosedErrorÚConnectionClosedOKÚInvalidStateÚPayloadTooBigÚProtocolError)Ú	Extension)
ÚOK_CLOSE_CODESÚ	OP_BINARYÚOP_CLOSEÚOP_CONTÚOP_PINGÚOP_PONGÚOP_TEXTÚCloseÚ	CloseCodeÚFrame)ÚRequestÚResponse)ÚStreamReader)Ú	BytesLikeÚ
LoggerLikeÚOriginÚSubprotocol)ÚProtocolÚSideÚStateÚSEND_EOFc                  ó.   • \ rS rSrSr\" S5      u  rrSrg)r   é-   z6A WebSocket connection is either a server or a client.é   © N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚrangeÚSERVERÚCLIENTÚ__static_attributes__r%   ó    ÚP/home/mande/repo/quber/.venv/lib/python3.13/site-packages/websockets/protocol.pyr   r   -   s   † Ù@á˜1“X�N€F‹Fr/   r   c                  ó2   • \ rS rSrSr\" S5      u  rrrr	Sr
g)r    é7   z6A WebSocket connection is in one of these four states.é   r%   N)r&   r'   r(   r)   r*   r+   Ú
CONNECTINGÚOPENÚCLOSINGÚCLOSEDr.   r%   r/   r0   r    r    7   s   † Ù@á(-¨a«Ñ%€J��g›vr/   r    r/   c                  ór  • \ rS rSrSr\SSS.         SS jjr\SS j5       r\R                  S S j5       r\S!S	 j5       r
\S"S
 j5       r\S#S j5       rS$S jrS%S jrS&S jrS'S&S jjrS'S&S jjrS(S)S jjrS*S jrS*S jrS+S,S jjrS-S jrS.S jrS/S jrS0S jrS0S jrS1S jrS1S jrS%S jrSrg)2r   éG   aÃ  
Sans-I/O implementation of a WebSocket connection.

Args:
    side: :attr:`~Side.CLIENT` or :attr:`~Side.SERVER`.
    state: Initial state of the WebSocket connection.
    max_size: Maximum size of incoming messages in bytes.
        :obj:`None` disables the limit. You may pass a ``(max_message_size,
        max_fragment_size)`` tuple to set different limits for messages and
        fragments when you expect long messages sent in short fragments.
    logger: Logger for this connection; depending on ``side``,
        defaults to ``logging.getLogger("websockets.client")``
        or ``logging.getLogger("websockets.server")``;
        see the :doc:`logging guide <../../topics/logging>` for details.

i   N)ÚstateÚmax_sizeÚloggerc               ó¨  • [         R                  " 5       U l         Uc1  [        R                  " SUR
                  R                  5        35      nX@l         UR                  [        R                  5      U l
        Xl        X l        [        U[        5      (       d  Uc  US sU l        U l        OUu  U l        U l        S U l        SU l        S U l        / U l        S U l        S U l        S U l        S U l        S U l         SU l        [7        5       U l        / U l        / U l        U R?                  5       U l         [C        U R@                  5        S U l"        g )Nzwebsockets.F)#ÚuuidÚuuid4ÚidÚloggingÚ	getLoggerÚnameÚlowerr<   ÚisEnabledForÚDEBUGÚdebugÚsider:   Ú
isinstanceÚintÚmax_message_sizeÚmax_fragment_sizeÚcurrent_sizeÚexpect_continuation_frameÚoriginÚ
extensionsÚsubprotocolÚ
close_rcvdÚ
close_sentÚclose_rcvd_then_sentÚhandshake_excÚeof_sentr   ÚreaderÚeventsÚwritesÚparseÚparserÚnextÚ
parser_exc)ÚselfrH   r:   r;   r<   s        r0   Ú__init__ÚProtocol.__init__Y   s7  € ô "ŸZšZ›\ˆŒØBð ‰>Ü×&Ò&¨°T·Y±Y·_±_Ó5FÐ4GÐ'HÓIˆFØ"(ŒØ)ð ×(Ñ(¬¯©Ó7ˆŒ
ð Œ	ð Œ
ô �h¤×$Ñ$¨Ñ(8Ø<DÀdÐ9ˆDÔ! 4Õ#9à<DÑ9ˆDÔ! 4Ô#9ð )-ˆÔð */ˆÔ&ð &*ˆŒØ+-ˆŒØ/3ˆÔð )-ˆŒØ(,ˆŒØ15ˆÔ!ð 04ˆÔð	ð ˆŒô #“nˆŒØ#%ˆŒØ#%ˆŒØ—j‘j“lˆŒÜˆT�[‰[ÔØ,0ˆ�r/   c                ó   • U R                   $ )au  
State of the WebSocket connection.

Defined in 4.1_, 4.2_, 7.1.3_, and 7.1.4_ of :rfc:`6455`.

.. _4.1: https://datatracker.ietf.org/doc/html/rfc6455#section-4.1
.. _4.2: https://datatracker.ietf.org/doc/html/rfc6455#section-4.2
.. _7.1.3: https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.3
.. _7.1.4: https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.4

)Ú_state©r^   s    r0   r:   ÚProtocol.state    s   € ð �{‰{Ðr/   c                ó~   • U R                   (       a&  U R                  R                  SUR                  5        Xl        g )Nz= connection is %s)rG   r<   rC   rb   )r^   r:   s     r0   r:   rd   ¯   s'   € à�:�:Ø�K‰K×ÑÐ2°E·J±JÔ?Ø�r/   c                ó�   • U R                   [        La  gU R                  c  [        R                  $ U R                  R
                  $ )zÖ
WebSocket close code received from the remote endpoint.

Defined in 7.1.5_ of :rfc:`6455`.

.. _7.1.5: https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5

:obj:`None` if the connection isn't closed yet.

N)r:   r7   rR   r   ÚABNORMAL_CLOSUREÚcoderc   s    r0   Ú
close_codeÚProtocol.close_codeµ   s9   € ð �:‰:œVÒ#ØØ�_‰_Ñ$Ü×-Ñ-Ð-à—?‘?×'Ñ'Ð'r/   c                ór   • U R                   [        La  gU R                  c  gU R                  R                  $ )zÙ
WebSocket close reason  received from the remote endpoint.

Defined in 7.1.6_ of :rfc:`6455`.

.. _7.1.6: https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.6

:obj:`None` if the connection isn't closed yet.

NÚ )r:   r7   rR   Úreasonrc   s    r0   Úclose_reasonÚProtocol.close_reasonÈ   s0   € ð �:‰:œVÒ#ØØ�_‰_Ñ$Øà—?‘?×)Ñ)Ð)r/   c                ór  • U R                   [        L d   S5       eU R                  bP  U R                  bC  U R                  R                  [
        ;   a%  U R                  R                  [
        ;   a  [        nO[        nU" U R                  U R                  U R                  5      nU R                  Ul
        U$ )a   
Exception to raise when trying to interact with a closed connection.

Don't raise this exception while the connection :attr:`state`
is :attr:`~websockets.protocol.State.CLOSING`; wait until
it's :attr:`~websockets.protocol.State.CLOSED`.

Indeed, the exception includes the close code and reason, which are
known only once the connection is closed.

Raises:
    AssertionError: If the connection isn't closed yet.

zconnection isn't closed yet)r:   r7   rR   rS   rh   r   r   r   rT   r]   Ú	__cause__)r^   Úexc_typeÚexcs      r0   Ú	close_excÚProtocol.close_excÛ   s“   € ð  �z‰zœVÒ#ÐBÐ%BÓBÐ#ð �O‰OÑ'Ø—‘Ñ+Ø—‘×$Ñ$¬Ó6Ø—‘×$Ñ$¬Ó6ä)‰Hä,ˆHÙ (Ø�O‰OØ�O‰OØ×%Ñ%ó!
ˆð Ÿ™ˆŒØˆ
r/   c                ód   • U R                   R                  U5        [        U R                  5        g)a  
Receive data from the network.

After calling this method:

- You must call :meth:`data_to_send` and send this data to the network.
- You should call :meth:`events_received` and process resulting events.

Raises:
    EOFError: If :meth:`receive_eof` was called earlier.

N)rW   Ú	feed_datar\   r[   ©r^   Údatas     r0   Úreceive_dataÚProtocol.receive_data  s"   € ð 	�‰×Ñ˜dÔ#ÜˆT�[‰[Õr/   c                óš   • U R                   R                  (       a  gU R                   R                  5         [        U R                  5        g)aa  
Receive the end of the data stream from the network.

After calling this method:

- You must call :meth:`data_to_send` and send this data to the network;
  it will return ``[b""]``, signaling the end of the stream, or ``[]``.
- You aren't expected to call :meth:`events_received`; it won't return
  any new events.

:meth:`receive_eof` is idempotent.

N)rW   ÚeofÚfeed_eofr\   r[   rc   s    r0   Úreceive_eofÚProtocol.receive_eof  s.   € ð �;‰;�?�?ØØ�‰×ÑÔÜˆT�[‰[Õr/   c                ó  • U R                   (       d  [        S5      eU R                  [        La0  [	        SU R
                  R                  R                  5        35      eU(       + U l         U R                  [        [        X5      5        g)a�  
Send a `Continuation frame`_.

.. _Continuation frame:
    https://datatracker.ietf.org/doc/html/rfc6455#section-5.6

Parameters:
    data: payload containing the same kind of data
        as the initial frame.
    fin: FIN bit; set it to :obj:`True` if this is the last frame
        of a fragmented message and to :obj:`False` otherwise.

Raises:
    ProtocolError: If a fragmented message isn't in progress.

úunexpected continuation frameúconnection is N)rN   r   rb   r5   r	   r:   rC   rD   Ú
send_framer   r   ©r^   ry   Úfins      r0   Úsend_continuationÚProtocol.send_continuation&  sf   € ð" ×-×-ÜÐ ?Ó@Ð@Ø�;‰;œdÒ"Ü °·
±
·±×0EÑ0EÓ0GÐ/HÐIÓJÐJØ-0¬ˆÔ&Ø�‰œœg tÓ1Õ2r/   c                ó  • U R                   (       a  [        S5      eU R                  [        La0  [	        SU R
                  R                  R                  5        35      eU(       + U l         U R                  [        [        X5      5        g)aS  
Send a `Text frame`_.

.. _Text frame:
    https://datatracker.ietf.org/doc/html/rfc6455#section-5.6

Parameters:
    data: payload containing text encoded with UTF-8.
    fin: FIN bit; set it to :obj:`False` if this is the first frame of
        a fragmented message.

Raises:
    ProtocolError: If a fragmented message is in progress.

úexpected a continuation framerƒ   N)rN   r   rb   r5   r	   r:   rC   rD   r„   r   r   r…   s      r0   Ú	send_textÚProtocol.send_text>  sf   € ð  ×)×)ÜÐ ?Ó@Ð@Ø�;‰;œdÒ"Ü °·
±
·±×0EÑ0EÓ0GÐ/HÐIÓJÐJØ-0¬ˆÔ&Ø�‰œœg tÓ1Õ2r/   c                ó  • U R                   (       a  [        S5      eU R                  [        La0  [	        SU R
                  R                  R                  5        35      eU(       + U l         U R                  [        [        X5      5        g)aU  
Send a `Binary frame`_.

.. _Binary frame:
    https://datatracker.ietf.org/doc/html/rfc6455#section-5.6

Parameters:
    data: payload containing arbitrary binary data.
    fin: FIN bit; set it to :obj:`False` if this is the first frame of
        a fragmented message.

Raises:
    ProtocolError: If a fragmented message is in progress.

rŠ   rƒ   N)rN   r   rb   r5   r	   r:   rC   rD   r„   r   r   r…   s      r0   Úsend_binaryÚProtocol.send_binaryU  sf   € ð  ×)×)ÜÐ ?Ó@Ð@Ø�;‰;œdÒ"Ü °·
±
·±×0EÑ0EÓ0GÐ/HÐIÓJÐJØ-0¬ˆÔ&Ø�‰œœi¨Ó3Õ4r/   c                ó   • U R                   [        La0  [        SU R                  R                  R                  5        35      eUc.  US:w  a  [        S5      e[        [        R                  S5      nSnO[        X5      nUR                  5       nU R                  [        [        U5      5        U R                  b   eX0l        [         U l        g)a  
Send a `Close frame`_.

.. _Close frame:
    https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.1

Parameters:
    code: close code.
    reason: close reason.

Raises:
    ProtocolError: If the code isn't valid or if a reason is provided
        without a code.

rƒ   Nrl   z#cannot send a reason without a coder/   )rb   r5   r	   r:   rC   rD   r   r   r   ÚNO_STATUS_RCVDÚ	serializer„   r   r   rR   rS   r6   ©r^   rh   rm   Úclosery   s        r0   Ú
send_closeÚProtocol.send_closel  sª   € ð$ �;‰;œdÒ"Ü °·
±
·±×0EÑ0EÓ0GÐ/HÐIÓJÐJØ‰<Ø˜‹|Ü#Ð$IÓJÐJÜœ)×2Ñ2°BÓ7ˆEØ‰Dä˜$Ó'ˆEØ—?‘?Ó$ˆDà�‰œœh¨Ó-Ô.ð �‰Ñ&Ð&Ð&ØŒÜˆ�
r/   c                óî   • U R                   [        LaC  U R                   [        La0  [        SU R                  R
                  R                  5        35      eU R                  [        [        U5      5        g)zª
Send a `Ping frame`_.

.. _Ping frame:
    https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.2

Parameters:
    data: payload containing arbitrary binary data.

rƒ   N)
rb   r5   r6   r	   r:   rC   rD   r„   r   r   rx   s     r0   Ú	send_pingÚProtocol.send_ping�  óR   € ð �;‰;œdÒ" t§{¡{¼'Ò'AÜ °·
±
·±×0EÑ0EÓ0GÐ/HÐIÓJÐJØ�‰œœg tÓ,Õ-r/   c                óî   • U R                   [        LaC  U R                   [        La0  [        SU R                  R
                  R                  5        35      eU R                  [        [        U5      5        g)zª
Send a `Pong frame`_.

.. _Pong frame:
    https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.3

Parameters:
    data: payload containing arbitrary binary data.

rƒ   N)
rb   r5   r6   r	   r:   rC   rD   r„   r   r   rx   s     r0   Ú	send_pongÚProtocol.send_pong   rš   r/   c                óÌ  • U R                   [        L as  U[        R                  :w  a_  [	        X5      nUR                  5       nU R                  [        [        U5      5        X0l	        U R                  b  SU l        [        U l         U R                  [        L a!  U R                  (       d  U R!                  5         U R#                  5       U l        ['        U R$                  5        g)z÷
`Fail the WebSocket connection`_.

.. _Fail the WebSocket connection:
    https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.7

Parameters:
    code: close code
    reason: close reason

Raises:
    ProtocolError: If the code isn't valid.
NT)r:   r5   r   rg   r   r’   r„   r   r   rS   rR   rT   r6   rH   r,   rV   Úsend_eofÚdiscardr[   r\   r“   s        r0   ÚfailÚProtocol.fail°  sŸ   € ð& �:‰:œÒØ”y×1Ñ1Ó1Ü˜dÓ+�Ø—‘Ó(�Ø—‘¤¤h°Ó 5Ô6Ø"'”ð
 —?‘?Ñ.Ø04�DÔ-Ü$�”
ð �9‰9œÒ t§}§}Ø�M‰MŒOð —l‘l“nˆŒÜˆT�[‰[Õr/   c                ó,   • U R                   / sol         U$ )zú
Fetch events generated from data received from the network.

Call this method immediately after any of the ``receive_*()`` methods.

Process resulting events, likely by passing them to the application.

Returns:
    Events read from the connection.
)rX   )r^   rX   s     r0   Úevents_receivedÚProtocol.events_receivedá  s   € ð #Ÿk™k¨2Ðˆ”Øˆr/   c                ó,   • U R                   / sol         U$ )ay  
Obtain data to send to the network.

Call this method immediately after any of the ``receive_*()``,
``send_*()``, or :meth:`fail` methods.

Write resulting data to the connection.

The empty bytestring :data:`~websockets.protocol.SEND_EOF` signals
the end of the data stream. When you receive it, half-close the TCP
connection.

Returns:
    Data to write to the connection.

)rY   )r^   rY   s     r0   Údata_to_sendÚProtocol.data_to_sendñ  s   € ð" #Ÿk™k¨2Ðˆ”Øˆr/   c                ó¼   • U R                   [        L a  gU R                   [        L a  gU R                   [        L a  gU R                   [        L d   eU R
                  $ )ai  
Tell if the TCP connection is expected to close soon.

Call this method immediately after any of the ``receive_*()``,
``send_close()``, or :meth:`fail` methods.

If it returns :obj:`True`, schedule closing the TCP connection after a
short timeout if the other side hasn't already closed it.

Returns:
    Whether the TCP connection is expected to close soon.

FT)r:   r5   r6   r7   r4   rV   rc   s    r0   Úclose_expectedÚProtocol.close_expected  sN   € ðD �:‰:œÒØØ�:‰:œÒ ØØ�:‰:œÒØØ�z‰zœZÒ'Ð'Ð'Ø�}‰}Ðr/   c              #  ó  #   •   U R                   R                  5        Sh  v•N (       a7  U R                  (       a  U R                  R                  S5        [	        S5      eSnU R
                  b3  U R                  c  U R
                  nOU R
                  U R                  -
  nU R                  b%  Uc  U R                  nO[        XR                  5      n[        R                  " U R                   R                  U R                  [        L UU R                  S9 Sh  v•N nU R                  (       a  U R                  R                  SU5        U R                  U5        GM`   GNC NH! [          a:  nU R#                  [$        R&                  [)        U5      5        X0l         SnAGOHSnAf[         a:  nU R#                  [$        R,                  [)        U5      5        X0l         SnAGOSnAf[.         aI  nU R#                  [$        R0                  UR2                   SUR4                   35        X0l         SnAOµSnAf[6         aT  nUR9                  U R                  5        U R#                  [$        R:                  [)        U5      5        X0l         SnAOYSnAf[<         aI  nU R                  R?                  SSS	9  U R#                  [$        R@                  5        X0l         SnAOSnAff = fSv •  [C        S
5      e7f)zý
Parse incoming data into frames.

:meth:`receive_data` and :meth:`receive_eof` run this generator
coroutine until it needs more data or reaches EOF.

:meth:`parse` never raises an exception. Instead, it sets the
:attr:`parser_exc` and yields control.

TNú< EOFzunexpected end of stream)Úmaskr;   rP   z< %sz at position zparser failed)Úexc_infoz"parse() shouldn't step after error)"rW   Úat_eofrG   r<   ÚEOFErrorrK   rM   rL   Úminr   rZ   Ú
read_exactrH   r,   rP   Ú
recv_framer   r¡   r   ÚPROTOCOL_ERRORÚstrr]   rg   ÚUnicodeDecodeErrorÚINVALID_DATArm   Ústartr
   Úset_current_sizeÚMESSAGE_TOO_BIGÚ	ExceptionÚerrorÚINTERNAL_ERRORÚAssertionError)r^   r;   Úframers   s       r0   rZ   ÚProtocol.parse2  s:  é € ð=	"ØØ#Ÿ{™{×1Ñ1Ó3×3Õ3Ø—z—zØŸ™×)Ñ)¨'Ô2ô
 #Ð#=Ó>Ð>à�à×(Ñ(Ñ4Ø×(Ñ(Ñ0Ø#'×#8Ñ#8™à#'×#8Ñ#8¸4×;LÑ;LÑ#L˜à×)Ñ)Ñ5ØÑ'Ø#'×#9Ñ#9™ä#& x×1GÑ1GÓ#H˜ô
 $)§;¢;Ø—K‘K×*Ñ*ØŸ™¤fÐ,Ø%Ø#Ÿ™ñ	$÷ �ð —:—:Ø—K‘K×%Ñ% f¨eÔ4à—‘ Ô&òK Ú3ñ4øô ó 	"Ø�I‰I”i×.Ñ.´°C³Ô9Ø!�OŠOûäó 	"Ø�I‰I”i×0Ñ0´#°c³(Ô;Ø!�OŠOûä!ó 	"Ø�I‰I”i×,Ñ,°·±°¸MÈ#Ï)É)ÈÐ.UÔVØ!�O‰Oûäó 	"Ø× Ñ  ×!2Ñ!2Ô3Ø�I‰I”i×/Ñ/´°S³Ô:Ø!�O‰Oûäó 	"Ø�K‰K×Ñ˜o¸ÐÑ=à�I‰I”i×.Ñ.Ô/Ø!�O‰Oûð		"úó 	ÜÐAÓBÐBùs�   ‚L „E* ¢E%£C<E* ÄE(Ä AE* Å(E* Å*
K.Å4/F)Æ#L Æ)K.Æ6/G+Ç%L Ç+K.Ç8?H<È7L È<K.É	A
JÊL ÊK.Ê%?K)Ë$L Ë)K.Ë.L c              #  óT  #   • U R                   [        L =(       d    U R                  [        L U R                  :X  d   eU R
                  R                  5        Sh  v•N (       dC  U R
                  R                  5         U R
                  R                  5        Sh  v•N (       d  MC  U R                  (       a  U R                  R                  S5        U R                   [        L a#  U R                  [        La  U R                  5         [        U l        Sv •  [        S5      e NÈ N‰7f)zÅ
Discard incoming data.

This coroutine replaces :meth:`parse`:

- after receiving a close frame, during a normal closure (1.4);
- after sending a close frame, during an abnormal closure (7.1.7).

Nr­   z"discard() shouldn't step after EOF)rH   r,   r:   r4   rV   rW   r°   r    rG   r<   r-   rŸ   r7   r¿   rc   s    r0   r    ÚProtocol.discard�  sÆ   é € ð —	‘	œVÐ#×? t§z¡z´ZÐ'?ÀTÇ]Á]ÓSÐSÐSØ"Ÿk™k×0Ñ0Ó2×2Õ2Ø�K‰K×ÑÔ!ð #Ÿk™k×0Ñ0Ó2×2×2à�:�:Ø�K‰K×Ñ˜gÔ&ð �9‰9œÒ 4§:¡:´ZÒ#?Ø�M‰MŒOÜˆŒ
ãô ÐAÓBÐBó 3ùs,   ‚AD(ÁD$ÁA D(ÂD&Â	D(Â(A=D(Ä&D(c                ó  • UR                   [        L d  UR                   [        L aE  U R                  b  [	        S5      eUR
                  (       d  [        UR                  5      U l        GOUR                   [        L a\  U R                  c  [	        S5      eUR
                  (       a	  SU l        GO¿U =R                  [        UR                  5      -  sl        GO•UR                   [        L a-  [        [        UR                  5      nU R                  U5        GOUUR                   [        L a  GO@UR                   [        L Ga  [        R                  " UR                  5      U l        U R"                  [$        L a  U R&                  c   eSU l        U R                  b  [	        S5      eU R"                  [*        L aL  U R                  [        [        UR                  5      5        U R                   U l        SU l        [$        U l        U R,                  [.        L a  U R1                  5         U R3                  5       U l        [7        U R4                  5        O[9        SUR                   S 35      eU R:                  R=                  U5        g)	z
Process an incoming frame.

NrŠ   r‚   Fzincomplete fragmented messageTzunexpected opcode: Ú02x)Úopcoder   r   rM   r   r†   Úlenry   r   r   r   r   r„   r   r   rZ   rR   r:   r6   rS   rT   r5   rH   r,   rŸ   r    r[   r\   r¿   rX   Úappend)r^   rÀ   Ú
pong_frames      r0   r´   ÚProtocol.recv_frameŸ  sÑ  € ð
 �<‰<œ7Ò" e§l¡l´iÒ&?Ø× Ñ Ñ,Ü#Ð$CÓDÐDØ—9—9Ü$'¨¯
©
£O�Ô!ùà�\‰\œWÒ$Ø× Ñ Ñ(Ü#Ð$CÓDÐDØ�y�yØ$(�Ö!à×!Ò!¤S¨¯©£_Ñ4×!à�\‰\œWÒ$ô œw¨¯
©
Ó3ˆJØ�O‰O˜JÖ'à�\‰\œWÒ$ñ à�\‰\œXÓ%ô $Ÿkšk¨%¯*©*Ó5ˆDŒOØ�z‰zœWÒ$Ø—‘Ñ2Ð2Ð2Ø,1�Ô)à× Ñ Ñ,Ü#Ð$CÓDÐDð �z‰zœTÒ!ð
 —‘¤¤h°·
±
Ó ;Ô<Ø"&§/¡/�”Ø,0�Ô)Ü$�”
ð �y‰yœFÒ"Ø—‘”ð Ÿ,™,›.ˆDŒKÜ�—‘Õô !Ð#6°u·|±|ÀCÐ6HÐ!IÓJÐJà�‰×Ñ˜5Õ!r/   c                óä   • U R                   (       a  U R                  R                  SU5        U R                  R                  UR	                  U R
                  [        L U R                  S95        g )Nz> %s)r®   rP   )rG   r<   rY   rÈ   r’   rH   r-   rP   )r^   rÀ   s     r0   r„   ÚProtocol.send_frameñ  sS   € Ø�:�:Ø�K‰K×Ñ˜f eÔ,Ø�‰×ÑØ�O‰OØ—Y‘Y¤&Ð(ØŸ?™?ð ð õ	
r/   c                óÎ   • U R                   (       a   eSU l         U R                  (       a  U R                  R                  S5        U R                  R	                  [
        5        g )NTz> EOF)rV   rG   r<   rY   rÈ   r!   rc   s    r0   rŸ   ÚProtocol.send_eofû  sA   € Ø—=—=Ð Ð ØˆŒØ�:�:Ø�K‰K×Ñ˜gÔ&Ø�‰×Ñœ8Õ$r/   )rb   rR   rT   rS   rM   rG   rV   rX   rN   rP   rU   r@   r<   rL   rK   rO   r[   r]   rW   rH   r:   rQ   rY   )
rH   r   r:   r    r;   z*tuple[int | None, int | None] | int | Noner<   zLoggerLike | NoneÚreturnÚNone)rÏ   r    )r:   r    rÏ   rÐ   )rÏ   z
int | None)rÏ   z
str | None)rÏ   r   )ry   zbytes | bytearrayrÏ   rÐ   )rÏ   rÐ   )ry   r   r†   ÚboolrÏ   rÐ   )T)Nrl   )rh   zCloseCode | int | Nonerm   r¶   rÏ   rÐ   )ry   r   rÏ   rÐ   )rl   )rh   zCloseCode | intrm   r¶   rÏ   rÐ   )rÏ   zlist[Event])rÏ   zlist[bytes])rÏ   rÑ   )rÏ   zGenerator[None])rÀ   r   rÏ   rÐ   )r&   r'   r(   r)   r*   r5   r_   Úpropertyr:   Úsetterri   rn   rt   rz   r   r‡   r‹   rŽ   r•   r˜   rœ   r¡   r¤   r§   rª   rZ   r    r´   r„   rŸ   r.   r%   r/   r0   r   r   G   s  † ñð* Ø?DØ$(ñE1àðE1ð ð	E1ð
 =ðE1ð "ðE1ð 
õE1ðN óó ðð ‡\�\óó ðð
 ó(ó ð(ð$ ó*ó ð*ð$ ó!ó ð!ôJô ô*3ö03ö.5ö."ôH.ô .ö -ôbô ô()ôZMCô^Cô<N"ôd
÷%r/   r   )2Ú
__future__r   ÚenumrA   r>   Úcollections.abcr   Ú
exceptionsr   r   r   r	   r
   r   rP   r   Úframesr   r   r   r   r   r   r   r   r   r   Úhttp11r   r   Ústreamsr   Útypingr   r   r   r   Ú__all__ÚEventÚIntEnumr   r,   r-   r    r4   r5   r6   r7   r!   r   r%   r/   r0   Ú<module>rß      sÍ   ðÝ "ã Û Û Ý %÷÷ õ "÷÷ ÷ ÷ &Ý !ß >Ó >ò€ð 	�(Ñ˜UÑ"€Ø ?ôˆ4�<‰<ô ð 
�‰€Ø	�‰€ô1ˆD�L‰Lô 1ð ×Ñ€
Ø‡z�z€Ø
�-‰-€Ø	�‰€ð €Ø E÷y
%ò y
%r/   