
    }i$                         d dl Z d dlmZ d Zd Zd Zd Zdedefd	Z	d
 Z
dededefdZdededefdZ G d d      Z G d d      Z G d d      Zy)    N)Callablec                 H    d| cxk  rdk  st        d       t        d      y )Nr       zValue is not a valid uint32
ValueErrorvalues    ?/usr/local/lib/python3.12/dist-packages/pytubefix/sabr/proto.pyassert_uint32r      s1    $*$677 %677 %    c                 H    d| cxk  rdk  st        d       t        d      y )Ni   izValue is not a valid int32r   r   s    r
   assert_int32r   	   s1    5.J.566 /566 /r   c                 t    | dkD  r"|j                  | dz  dz         | dz  } | dkD  r"|j                  |        y )N         )append)r	   bufs     r
   varint32writer      s>    
$,

EDLD()! $, JJur   c                     t        d      D ]N  }|dk(  r| dk  r|j                  |         y |j                  | dz  dz         | dz	  }|dz  | dz	  z  dz  } |dz	  }P |j                  |        y )N	   r   r   r   r      r   )ranger   )lohir   _carrys        r
   varint64writer      s{    1X 7rDyJJrN

BI%&qRxB!G$
21W JJrNr   r   posc                     dx}}	 |t        |       k\  rt        d      | |   }|dz  }||dz  |z  z  }|dz  s	 ||fS |dz  }|dkD  rt        d      N)	Nr   z/Unexpected end of buffer while reading varint32   r   r   r   #   zVarint32 too long)lenEOFErrorr   )r   r   resultshiftbs        r
   read_varint32r(      s    FU
#c(?LMMHq1t8%%D 3; 	
2:011 r   c                 L   d}d}t        ddd      D ]&  }| |   }|dz  }||dz  |z  z  }|dz  dk(  s!|||fc S  | |   }|dz  }||dz  dz  z  }|dz  d	z	  }|dz  dk(  r|||fS t        d
dd      D ]&  }| |   }|dz  }||dz  |z  z  }|dz  dk(  s!|||fc S  t        d      )Nr      r   r!   r   r      p             zinvalid varint)r   r   )r   r   low_bits	high_bitsr&   r'   middle_bytes          r
   read_varint64r3   -   s   HI q"a ,HqQX%''H?Y++, c(K1HCt#**Ht#)Idq C''q"a ,Hqa$h5((	H?Y++, %
&&r   r   r   returnc                 *    |dz  | z  }|dz  r|dz  }|S )Nr/   l                     )r   r   r	   s      r
   decode_int64r8   I   s%    2XOE	JLr   c                     |dz  | z  S )Nr/   r7   r   r   s     r
   decode_uint64r;   O   s    "H?r   c                   8    e Zd Zedefd       Zedefd       Zy)
ProtoInt64r	   c                 :    | dk  r| dz  } | dz  }| dz	  dz  }||dS )z)Signed 64-bit -> lo/hi pair (int32 each).r   r6   r   r/   r:   r7   r	   r   r   s      r
   enczProtoInt64.encT   s8     19WEZrkZ'##r   c                 &    | dz  }| dz	  dz  }||dS )z+Unsigned 64-bit -> lo/hi pair (int32 each).r   r/   r:   r7   r?   s      r
   uEnczProtoInt64.uEnc]   s'     ZrkZ'##r   N)__name__
__module____qualname__staticmethodintr@   rB   r7   r   r
   r=   r=   S   s6    $3 $ $ $C $ $r   r=   c                      e Zd Zd fdeegef   fdZdefdZd Zd Z	de
d	e
fd
ZdefdZde
fdZde
fdZdefdZdefdZdefdZdefdZdefdZde
fdZde
fdZde
fdZde
fdZde
fdZde
fdZde
fdZde
fdZy)BinaryWriterc                 $    | j                  d      S Nzutf-8)encode)ss    r
   <lambda>zBinaryWriter.<lambda>e   s    qxxPWGX r   encode_utf8c                 L    || _         g | _        g | _        t               | _        y N)rO   stackchunks	bytearrayr   )selfrO   s     r
   __init__zBinaryWriter.__init__e   s!    &
;r   r4   c                     | j                   rH| j                  j                  t        | j                                | j                   j	                          dj                  | j                        S )Nr   )r   rS   r   bytesclearjoinrU   s    r
   finishzBinaryWriter.finishk   sD    88KKuTXX/HHNNxx$$r   c                     | j                   j                  | j                  | j                  f       g | _        t	               | _        | S rQ   )rR   r   rS   r   rT   r[   s    r
   forkzBinaryWriter.forkq   s6    

4;;12;r   c                     | j                         }| j                  st        d      | j                  j                         \  | _        | _        | j                  t        |             | j                  |      S )NzInvalid state, fork stack empty)	r\   rR   RuntimeErrorpoprS   r   uint32r#   rawrU   chunks     r
   rZ   zBinaryWriter.joinw   sW    zz@AA $

 0TXCJxxr   field_no	wire_typec                 0    | j                  |dz  |z        S )Nr.   rb   )rU   rf   rg   s      r
   tagzBinaryWriter.tag   s    {{HMY677r   re   c                     | j                   rH| j                  j                  t        | j                                | j                   j	                          | j                  j                  |       | S rQ   )r   rS   r   rX   rY   rd   s     r
   rc   zBinaryWriter.raw   sH    88KKuTXX/HHNN5!r   r	   c                 H    t        |       t        || j                         | S rQ   )r   r   r   rU   r	   s     r
   rb   zBinaryWriter.uint32   s    eeTXX&r   c                 N    t        |       t        |dz  | j                         | S )Nr   r   r   r   rm   s     r
   int32zBinaryWriter.int32   s"    Uej($((3r   c                 P    | j                   j                  |rd       | S d       | S )Nr!   r   )r   r   rm   s     r
   boolzBinaryWriter.bool   s&    U* )**r   c                 X    | j                  t        |             | j                  |      S rQ   )rb   r#   rc   rm   s     r
   rX   zBinaryWriter.bytes   s     CJxxr   c                 z    | j                  |      }| j                  t        |             | j                  |      S rQ   )rO   rb   r#   rc   rU   r	   encodeds      r
   stringzBinaryWriter.string   s1    ""5)CL!xx  r   c                 P    | j                  t        j                  d|             | S )N<frc   structpackrm   s     r
   floatzBinaryWriter.float       T5)*r   c                 P    | j                  t        j                  d|             | S )N<drz   rm   s     r
   doublezBinaryWriter.double   r~   r   c                 f    t        |       | j                  t        j                  d|             | S )N<I)r   rc   r{   r|   rm   s     r
   fixed32zBinaryWriter.fixed32   s&    eT5)*r   c                 f    t        |       | j                  t        j                  d|             | S )N<i)r   rc   r{   r|   rm   s     r
   sfixed32zBinaryWriter.sfixed32   s&    UT5)*r   c                 ^    t        |       |dz  |dz	  z  }t        || j                         | S Nr!      ro   ru   s      r
   sint32zBinaryWriter.sint32   s/    UA:%2+.gtxx(r   c                     t         j                  |      }| j                  t        j                  d|d   |d                | S )Nz<iir   r   )r=   r@   rc   r{   r|   rU   r	   tcs      r
   sfixed64zBinaryWriter.sfixed64   s6    ^^E"UBtHbh78r   c                     t         j                  |      }| j                  t        j                  d|d   |d                | S )Nz<IIr   r   )r=   rB   rc   r{   r|   r   s      r
   fixed64zBinaryWriter.fixed64   s6    __U#UBtHbh78r   c                 j    t         j                  |      }t        |d   |d   | j                         | S Nr   r   r=   r@   r   r   r   s      r
   int64zBinaryWriter.int64   s-    ^^E"bh4$((3r   c                     t         j                  |      }|d   dz	  }|d   dz  |z  }|d   dz  |d   dz	  z  |z  }t        ||| j                         | S )Nr   r   r   r!   r   )rU   r	   r   signr   r   s         r
   sint64zBinaryWriter.sint64   sc    ^^E"$x2~h!mt#$x1}DR0D8b"dhh'r   c                 j    t         j                  |      }t        |d   |d   | j                         | S r   )r=   rB   r   r   r   s      r
   uint64zBinaryWriter.uint64   s-    __U#bh4$((3r   N)rC   rD   rE   r   strrX   rV   r\   r^   rZ   rG   rj   rc   rb   rp   rr   rw   r}   r   r   r   r   r   r   r   r   r   r7   r   r
   rI   rI   d   s   =X HcUE\$: % %8C 8C 8 C 
3 
$ 5 !C !
5 E S 
c 
C c 
S 
3 
C C r   rI   c                       e Zd Zd fdeegef   fdZd ZddefdZ	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)BinaryReaderc                 $    | j                  d      S rK   )decode)r'   s    r
   rN   zBinaryReader.<lambda>   s    AHHU\L] r   decode_utf8c                    t        |t              rt        |      }nCt        |t              rt        |      }n't        |t              st	        dt        |             || _        || _        t        |      | _        d| _	        y )NzUnsupported buffer type: r   )

isinstancelistrX   rT   	TypeErrortyper   r   r#   r   )rU   r   r   s      r
   rV   zBinaryReader.__init__   sj    c4 *CY'*CC'7S	{CDD&s8r   c                     t        | j                  | j                        \  }| _        |dz	  }|dz  }|dk  s
|dk  s|dkD  rt        d| d|       ||fS )Nr.   r   r      zIllegal tag: field no z wire type )r(   r   r   r   )rU   rj   rf   rg   s       r
   rj   zBinaryReader.tag   se    %dhh9TX!8#I	q=IMY]5hZ{9+VWW""r   Nrg   c                    | j                   }|dk(  rd| j                  | j                      dz  r2| xj                   dz  c_         | j                  | j                      dz  r2| xj                   dz  c_         n|dk(  r| xj                   dz  c_         n|dk(  r>t        | j                  | j                         \  }| _         | xj                   |z  c_         nm|dk(  r?	 | j                         \  }}|dk(  r|||k7  rt	        d      n<| j                  ||       >|d	k(  r| xj                   dz  c_         nt	        d
|       | j                          | j                  || j                    S )Nr   r   r!         r.   r-   zInvalid end group tagr   zCan't skip unknown wire type )r   r   r(   rj   r   skipassert_bounds)rU   rg   rf   startlengthfnwts          r
   r   zBinaryReader.skip   s4   >((488$t+A ((488$t+HHMH!^HHMH!^,TXXtxx@FDHHHH!^B7+h()@AA		"b!  !^HHMH<YKHIIxxdhh''r   c                 L    | j                   | j                  kD  rt        d      y )NzPremature EOF)r   r#   r$   r[   s    r
   r   zBinaryReader.assert_bounds  s"    88dhh?++ r   c                 V    t        | j                  | j                        \  }| _        |S rQ   )r(   r   r   rm   s     r
   rb   zBinaryReader.uint32	  s!    '$((;txr   c                 (    | j                         dz  S Nr   ri   r[   s    r
   rp   zBinaryReader.int32  s    {{}q  r   c                 :    | j                         }|dz	  |dz   z  S )Nr!   ri   rm   s     r
   r   zBinaryReader.sint32  s"    
	l**r   c                 \    t        | j                  | j                        \  }}| _        ||fS rQ   )r3   r   r   rU   r   r   s      r
   varint64zBinaryReader.varint64  s(    (488<B2vr   c                 .    t        | j                          S rQ   )r8   r   r[   s    r
   r   zBinaryReader.int64  s    T]]_--r   c                 .    t        | j                          S rQ   )r;   r   r[   s    r
   r   zBinaryReader.uint64  s    dmmo..r   c                 ~    | j                         \  }}|dz   }|dz	  |dz  dz  z  |z  }|dz	  |z  }t        ||      S r   )r   r8   )rU   r   r   r   s       r
   r   zBinaryReader.sint64  sR    BayQwBFr>*d2AgB##r   c                 @    | j                         \  }}|dk7  xs |dk7  S r   )r   r   s      r
   rr   zBinaryReader.bool%  s$    BQw!"'!r   c                     t        j                  d| j                  | j                        d   }| xj                  dz  c_        |S )Nr   r   r-   r{   unpack_fromr   r   rm   s     r
   r   zBinaryReader.fixed32)  5    ""4488<Q?Ar   c                     t        j                  d| j                  | j                        d   }| xj                  dz  c_        |S )Nr   r   r-   r   rm   s     r
   r   zBinaryReader.sfixed32.  r   r   c                 Z    | j                         }| j                         }t        ||      S rQ   )r   r;   r   s      r
   r   zBinaryReader.fixed643  s%    ]]_]]_R$$r   c                 Z    | j                         }| j                         }t        ||      S rQ   )r   r8   r   s      r
   r   zBinaryReader.sfixed648  s%    ]]_]]_B##r   c                     t        j                  d| j                  | j                        d   }| xj                  dz  c_        |S )Nry   r   r-   r   rm   s     r
   r}   zBinaryReader.float=  r   r   c                     t        j                  d| j                  | j                        d   }| xj                  dz  c_        |S )Nr   r   r   r   rm   s     r
   r   zBinaryReader.doubleB  r   r   c                     | j                         }| j                  }| xj                  |z  c_        | j                          | j                  || j                   S rQ   )rb   r   r   r   )rU   r   r   s      r
   rX   zBinaryReader.bytesG  sE    Fxxdhh''r   c                 @    | j                  | j                               S rQ   )r   rX   r[   s    r
   rw   zBinaryReader.stringN  s    

--r   rQ   )rC   rD   rE   r   rX   r   rV   rj   rG   r   r   rb   rp   r   r   r   r   r   rr   r   r   r   r   r}   r   rw   r7   r   r
   r   r      s    B] 5'3,)? #(c (4,!+./$"

%
$


(.r   r   )r{   typingr   r   r   r   r   rX   rG   r(   r3   r8   r;   r=   rI   r   r7   r   r
   <module>r      s     87	u 3 '8S c c c s s $ $"n nbz. z.r   