
    vKg1                       % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	J
r
  S SKJrJr  SSKJrJr   SSKJr  / SQr " S	 S
\R,                  5      r\R0                  r\R4                  r\R8                  r\R<                  r\R@                  r!\RD                  r#\\\4r$\\!\#4r% " S S\R,                  5      r&\&RN                  S\&RP                  S\&RR                  S\&RT                  S\&RV                  S\&RX                  S\&RZ                  S\&R\                  S\&R^                  S\&R`                  S\&Rb                  S\&Rd                  S\&Rf                  S\&Rh                  S\&Rj                  S0r6S\7S'   \&RN                  \&RP                  \&RR                  \&RT                  \&RZ                  \&R\                  \&R^                  \&R`                  \&Rb                  \&Rd                  \&Rf                  \&Rh                  1r8\&RN                  \&RP                  \&RV                  1r9\:\;\<4r=\R|                   " S S5      5       r?\R|                   " S  S!5      5       r@SS"KAJBrB  g! \ a
    SSKJr   GN1f = f)#    )annotationsN)	GeneratorSequence)CallableUnion   )PayloadTooBigProtocolError)
apply_mask)OpcodeOP_CONTOP_TEXT	OP_BINARYOP_CLOSEOP_PINGOP_PONGDATA_OPCODESCTRL_OPCODESFrameClosec                  0    \ rS rSrSrSu  rrrSu  rr	r
Srg)r   $   z#Opcode values for WebSocket frames.)r   r      )   	   
    N)__name__
__module____qualname____firstlineno____doc__CONTTEXTBINARYCLOSEPINGPONG__static_attributes__r       Q/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/websockets/frames.pyr   r   $   s    -)D$(E4r*   r   c                  T    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrg)	CloseCode6   z-Close code values for WebSocket close frames.i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  r   N)r   r   r    r!   r"   NORMAL_CLOSURE
GOING_AWAYPROTOCOL_ERRORUNSUPPORTED_DATANO_STATUS_RCVDABNORMAL_CLOSUREINVALID_DATAPOLICY_VIOLATIONMESSAGE_TOO_BIGMANDATORY_EXTENSIONINTERNAL_ERRORSERVICE_RESTARTTRY_AGAIN_LATERBAD_GATEWAYTLS_HANDSHAKEr)   r   r*   r+   r-   r-   6   sT    7NJNNLONOOKMr*   r-   OKz
going awayzprotocol errorzunsupported datazno status received [internal]zabnormal closure [internal]zinvalid frame payload datazpolicy violationzmessage too bigzmandatory extensionzinternal errorzservice restartztry again laterzbad gatewayz TLS handshake failure [internal]zdict[int, str]CLOSE_CODE_EXPLANATIONSc                  
   \ rS rSr% SrS\S'   S\S'   SrS\S	'   S
rS\S'   S
rS\S'   S
r	S\S'   \
" \R                  R                  SS5      5      rSS jr\SSS.         SS jj5       rSS.     SS jjrSS jrSrg)r   {   a"  
WebSocket frame.

Attributes:
    opcode: Opcode.
    data: Payload data.
    fin: FIN bit.
    rsv1: RSV1 bit.
    rsv2: RSV2 bit.
    rsv3: RSV3 bit.

Only these fields are needed. The MASK bit, payload length and masking-key
are handled on the fly when parsing and serializing frames.

r   opcodez#Union[bytes, bytearray, memoryview]dataTboolfinFrsv1rsv2rsv3WEBSOCKETS_MAX_LOG_SIZE75c                *   Sn[        U R                  5       S[        U R                  5      S:X  a  SOS 3nU R                  (       a  SOSnU R                  [        L a.  [        [        U R                  5      R                  5       5      nGOU R                  [        L as  U R                  n[        U5      U R                  S-  :  a2  U R                  S-  S-
  S-  nSR                  USS	U-   S
XV* S /5      nSR                  S U 5       5      nOU R                  [        L a)  [        [        R                  U R                  5      5      nOCU R                  (       a0   [        [        U R                  5      R                  5       5      nSnOSn[        U5      U R                  :  a#  U R                  S-  S-
  nUSS	U-   S-   XF* S -   nSR                  [#        SXU/5      5      nU R                  R$                   SU SU S3$ ! [        [         4 aw    U R                  n[        U5      U R                  S-  :  a2  U R                  S-  S-
  S-  nSR                  USS	U-   S
XV* S /5      nSR                  S U 5       5      nSn Nf = f)z5
Return a human-readable representation of a frame.

Nz byter    s	continued   r*   r   s      c              3  &   #    U H  oS  v   M
     g7f02xNr   .0bytes     r+   	<genexpr> Frame.__str__.<locals>.<genexpr>   s     =fdCjMf   textc              3  &   #    U H  oS  v   M
     g7frR   r   rT   s     r+   rW   rX      s     A&$*&rY   binaryz''z...z, z [])lenrC   rE   rB   r   reprbytesdecoder   MAX_LOG_SIZEjoinr   strr   parseUnicodeDecodeErrorAttributeErrorfiltername)selfcodinglength	non_finalrC   r\   cutmetadatas           r+   __str__Frame.__str__   sW   
 		N#5s499~/B(LM((B	;;'! dii(//12D[[I% YYF6{T..!33((A-1a76)AG#4k6$%="QR88=f==D[[H$u{{499-.DYY	"E$)),3356 Dt9t(((##q(1,C	!c'?U*T$%[8D99VD69*EFG++""#1TF"XJa88! '7 "v;!2!2a!77,,1A5!;C XXviC'8+vde}&UVFxxA&AA!"s   ".H BJJN)max_size
extensionsc             #  ^  #    U" S5       Sh  vN n[         R                  " SU5      u  pgUS-  (       a  SOSnUS-  (       a  SOSn	US-  (       a  SOSn
US	-  (       a  SOSn [        US
-  5      nUS-  (       a  SOSU:w  a  [	        S5      eUS-  nUS:X  a*  U" S5       Sh  vN n[         R                  " SU5      u  nO/US:X  a)  U" S5       Sh  vN n[         R                  " SU5      u  nUb  X:  a  [        X5      eU(       a  U" S5       Sh  vN nU" U5       Sh  vN nU(       a  [        UW5      nU " XXX5      nUc  / n[        U5       H  nUR                  UUS9nM     UR                  5         U$  GNv! [         a  n[	        S5      UeSnAff = f N N N N7f)aq  
Parse a WebSocket frame.

This is a generator-based coroutine.

Args:
    read_exact: Generator-based coroutine that reads the requested
        bytes or raises an exception if there isn't enough data.
    mask: Whether the frame should be masked i.e. whether the read
        happens on the server side.
    max_size: Maximum payload size in bytes.
    extensions: List of extensions, applied in reverse order.

Raises:
    EOFError: If the connection is closed without a full WebSocket frame.
    PayloadTooBig: If the frame's payload size exceeds ``max_size``.
    ProtocolError: If the frame contains incorrect values.

r   N!BB   TF@             zinvalid opcodezincorrect masking   ~   !Hr   z!Q   )rr   )
structunpackr   
ValueErrorr
   r	   r   reversedra   check)cls
read_exactmaskrr   rs   rC   head1head2rE   rF   rG   rH   rB   excrl   
mask_bytesframe	extensions                     r+   re   Frame.parse   s    : %Q-'}}UD1 j(dez)tuz)tuz)tu	;EJ./F J&DEd: 344#S=(m+DdD1IVs](m+DdD1IVF$511$.qM1J %V,,dJ/DF#T8J!*-I$$UX$>E . 	W (  	; 01s:	; , ,
 2 -sx   F-FAF-%F 33F-&F%'/F-F'AF-F)F-)F+*AF-
F"FF""F-'F-)F-+F-rs   c                  U R                  5         Uc  / nU H  nUR                  U 5      n M     [        R                  " 5       nU R                  (       a  SOSU R
                  (       a  SOS-  U R                  (       a  SOS-  U R                  (       a  SOS-  U R                  -  nU(       a  SOSn[        U R                  5      nUS:  a*  UR                  [        R                  " SXVU-  5      5        O[US:  a+  UR                  [        R                  " S	XVS-  U5      5        O*UR                  [        R                  " S
XVS-  U5      5        U(       a'  [        R                  " S5      nUR                  U5        U(       a  [!        U R                  W5      n	OU R                  n	UR                  U	5        UR#                  5       $ )a  
Serialize a WebSocket frame.

Args:
    mask: Whether the frame should be masked i.e. whether the write
        happens on the client side.
    extensions: List of extensions, applied in order.

Raises:
    ProtocolError: If the frame contains incorrect values.

rv   r   rw   rx   ry   r|   ru   i   z!BBHz!BBQr{   r~   )r   encodeioBytesIOrE   rF   rG   rH   rB   r^   rC   writer   packsecretstoken_bytesr   getvalue)
rj   r   rs   r   outputr   r   rl   r   rC   s
             r+   	serializeFrame.serialize  sb   $ 	

J#I##D)D $   88Z!YYzA/!YYzA/ "YYzA/ kk	 	 #
TYYC<LLUE6>BCe^LLVUCKHILLVUCKHI ,,Q/JLL$ dii4D99DT  r*   c                *   U R                   (       d"  U R                  (       d  U R                  (       a  [        S5      eU R                  [
        ;   aA  [        U R                  5      S:  a  [        S5      eU R                  (       d  [        S5      egg)z
Check that reserved bits and opcode have acceptable values.

Raises:
    ProtocolError: If a reserved bit or the opcode is invalid.

zreserved bits must be 0}   zcontrol frame too longzfragmented control frameN)	rF   rG   rH   r
   rB   r   r^   rC   rE   rj   s    r+   r   Frame.checkN  sh     99		TYY 9::;;,&499~##$<==88#$>??  'r*   r   returnrd   )
r   z-Callable[[int], Generator[None, None, bytes]]r   rD   rr   z
int | Noners   %Sequence[extensions.Extension] | Noner   zGenerator[None, None, Frame])r   rD   rs   r   r   r`   r   None)r   r   r    r!   r"   __annotations__rE   rF   rG   rH   intosenvirongetrb   rp   classmethodre   r   r   r)   r   r*   r+   r   r   {   s      N
--CD$D$D$ rzz~~&?FGL09d   $<@GAG 	G
 G :G 
&G GZ =A	9! 9! :	9!
 
9!v@r*   r   c                  `    \ rS rSr% SrS\S'   S\S'   SS jr\SS j5       rSS	 jr	SS
 jr
Srg)r   i`  zk
Code and reason for WebSocket close frames.

Attributes:
    code: Close code.
    reason: Close reason.

r   coderd   reasonc                "   SU R                   s=::  a  S:  a  O  OSnO=SU R                   s=::  a  S:  a  O  OSnO [        R                  U R                   S5      nU R                    SU S3nU R                  (       a  U S	U R                   3nU$ )
zE
Return a human-readable representation of a close code and reason.

  i  
registered  zprivate useunknownz ()rP   )r   r?   r   r   )rj   explanationresults      r+   rp   Close.__str__n  s|    
 499#t#&KTYY%%'K155diiKKII;bQ/;;xq.Fr*   c                   [        U5      S:  aI  [        R                  " SUSS 5      u  nUSS R                  5       nU " X#5      nUR	                  5         U$ [        U5      S:X  a  U " [
        R                  S5      $ [        S5      e)z
Parse the payload of a close frame.

Args:
    data: Payload of the close frame.

Raises:
    ProtocolError: If data is ill-formed.
    UnicodeDecodeError: If the reason isn't valid UTF-8.

r   r}   Nr   rL   zclose frame too short)r^   r   r   ra   r   r-   r3   r
   )r   rC   r   r   closes        r+   re   Close.parse  s{     t9>mmD$r(3GT!"X__&F%EKKMLY!^y//44 788r*   c                    U R                  5         [        R                  " SU R                  5      U R                  R                  5       -   $ )z*
Serialize the payload of a close frame.

r}   )r   r   r   r   r   r   r   s    r+   r   Close.serialize  s4    
 	

{{4+dkk.@.@.BBBr*   c                v    U R                   [        ;   d%  SU R                   s=::  a  S:  d  O  [        S5      egg)z{
Check that the close code has a valid value for a close frame.

Raises:
    ProtocolError: If the close code is invalid.

r   r   zinvalid status codeN)r   EXTERNAL_CLOSE_CODESr
   r   s    r+   r   Close.check  s6     		11TTYY5M5M 566 6N1r*   r   Nr   )rC   r`   r   r   )r   r`   r   )r   r   r    r!   r"   r   rp   r   re   r   r   r)   r   r*   r+   r   r   `  s7     IK$ 9 9.C	7r*   r   r   )C
__future__r   dataclassesenumr   r   r   r   collections.abcr   r   typingr   r   
exceptionsr	   r
   speedupsr   ImportErrorutils__all__IntEnumr   r#   r   r$   r   r%   r   r&   r   r'   r   r(   r   r   r   r-   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r?   r   r   OK_CLOSE_CODESr`   	bytearray
memoryview	BytesLike	dataclassr   r   rL   rs   r   r*   r+   <module>r      sr   "   	 	   / " 4"$
)T\\ ) ++
++MM	<<
++
++*') . d,. 2= =8 20!!#8.00=?+  , !! "  9j(	 a@ a@ a@H H7 H7 H7X y  "!!"s   I! !I10I1