
    jjԅ                        d dl Z d dlZd dlZd dlmZmZmZmZ d dlZej                  d    dk(  Z
dZdZ G d de      Z G d d	e      Z G d
 de      Z G d de      Z G d dee      Z G d dee      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d  d!e      Z G d" d#e      Z G d$ d%e      Z  G d& d'e      Z!y)(    N)openBytesIOSEEK_CURSEEK_END   z0.11)r      c                   T    e Zd Zd Zd Zd Zd Zed        Zed        Z	ed        Z
y)	KaitaiStructc                     || _         y N)_ioselfios     U/home/ubuntu/.cache/pipx/cdb5059130eadca/lib/python3.12/site-packages/kaitaistruct.py__init__zKaitaiStruct.__init__   s	        c                     | S r    r   s    r   	__enter__zKaitaiStruct.__enter__        r   c                 $    | j                          y r   closer   argskwargss      r   __exit__zKaitaiStruct.__exit__#       

r   c                 8    | j                   j                          y r   )r   r   r   s    r   r   zKaitaiStruct.close&   s    r   c                 z    t        |d      }	  | t        |            S # t        $ r |j                           w xY w)Nrb)r   KaitaiStream	Exceptionr   )clsfilenamefs      r   	from_filezKaitaiStruct.from_file)   s=    4 	|A'' 	GGI	s    :c                 6     | t        t        |                  S r   )r$   r   )r&   bufs     r   
from_byteszKaitaiStruct.from_bytes3   s    <-..r   c                 $     | t        |            S r   )r$   )r&   r   s     r   from_iozKaitaiStruct.from_io7   s    <#$$r   N)__name__
__module____qualname__r   r   r   r   classmethodr)   r,   r.   r   r   r   r
   r
      sR       / / % %r   r
   c                   <     e Zd Z fdZd ZddZd Z fdZ xZS )ReadWriteKaitaiStructc                 :    t         t        |   |       d| _        y )NT)superr4   r   _dirty)r   r   	__class__s     r   r   zReadWriteKaitaiStruct.__init__=   s    #T3B7r   c                     t               r   )NotImplementedErrorr   s    r   _fetch_instancesz&ReadWriteKaitaiStruct._fetch_instancesA   s    !##r   c                 z    | j                  |       | j                          | j                  j                          y r   )_write__seqr;   r   write_back_child_streamsr   s     r   _writezReadWriteKaitaiStruct._writeD   s,    ))+r   c                 D    ||| _         | j                  rt        d      y )Nz_consistency not checked: _check() has not been called since the last modification of the object)r   r7   ConsistencyNotCheckedErrorr   s     r   r=   z!ReadWriteKaitaiStruct._write__seqI   s/    >DH;;,  .O  P  P r   c                     t         t        | 
  }|j                  d      r|dv s|j                  d      r	 |dd        |||       y )N_>   _root_parent_unnamedr7   T)r6   r4   __setattr__
startswith)r   keyvaluesuper_setattrr8   s       r   rG   z!ReadWriteKaitaiStruct.__setattr__O   sD    3TF~~c"c-A&AS^^T^E_(D)c5!r   r   )	r/   r0   r1   r   r;   r?   r=   rG   __classcell__r8   s   @r   r4   r4   <   s"    $,
P" "r   r4   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
 ej                  d	      Z ej                  d
      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  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/d, Z0d- Z1d. Z2d/ Z3d0 Z4d1 Z5d2 Z6d3 Z7d4 Z8d5 Z9d6 Z:e;d7        Z<e;d8        Z=e;d9        Z>d: Z?d; Z@d< ZAd= ZBd> ZCd? ZDd@ ZEdA ZFdB ZGdC ZHdD ZIdE ZJdF ZKdG ZLdH ZMdI ZNdJ ZOdK ZPdL ZQdM ZRdN ZSdO ZTdP ZUdQ ZVdR ZWe;dS        ZXe;dT        ZYe;dU        ZZe;dV        Z[e;dW        Z\e;dX        Z]e;dY        Z^e;dZ        Z_e;d[        Z`e;d\        Zad] Zb G d^ d_ec      Zdd` ZedddbZfdc Zgya)er$   c                     || _         | j                          d| _        d| _        d | _        g | _        	 | j                         | _        y # t        t        t        f$ r Y y w xY w)NF)r   align_to_bytebits_lebits_write_modewrite_back_handlerchild_streamssize_sizeOSErrorIOError
ValueErrorr   s     r   r   zKaitaiStream.__init__W   sc    $"&	DJ *- 	 		s   A A"!A"c                     | S r   r   r   s    r   r   zKaitaiStream.__enter__r   r   r   c                 $    | j                          y r   r   r   s      r   r   zKaitaiStream.__exit__u   r    r   c                     	 | j                   r| j                          n| j                          | j                  j	                          y # | j                  j	                          w xY wr   )rR   write_align_to_byterP   r   r   r   s    r   r   zKaitaiStream.closex   sE    	##((*""$HHNNDHHNNs   -A
 
A&c                     | j                   s| j                  dkD  ry| j                  j                         | j	                         k\  S )Nr   F)rR   	bits_leftr   tellrU   r   s    r   is_eofzKaitaiStream.is_eof   s6    ##(: xx}}$))+--r   c                     |dk  rt        d|fz        | j                  r| j                          n| j                          | j                  j                  |       y )Nr   z"cannot seek to invalid position %d)InvalidArgumentErrorrR   r]   rP   r   seekr   ns     r   rd   zKaitaiStream.seek   sM    q5&'Kqd'RSS$$& ar   c                 z    | j                   j                         | j                  r| j                  dkD  rdz   S dz   S )Nr      )r   r`   rR   r_   r   s    r   poszKaitaiStream.pos   s4    xx}}t';';QR@R!ZZXYZZr   c                     | j                   }|j                         }|j                  dt              }||j                         }|j                  |       |S Nr   )r   r`   rd   r   )r   r   cur_pos	full_sizes       r   rU   zKaitaiStream.size   sO     XX'')GGAx(	 	I 	r   bz>hz>iz>qz<hz<iz<qBz>Hz>Iz>Qz<Hz<Iz<Qz>fz>dz<fz<dc                 d    t         j                  j                  | j                  d            d   S Nrh   r   )r$   	packer_s1unpack
read_bytesr   s    r   read_s1zKaitaiStream.read_s1   '    %%,,T__Q-?@CCr   c                 d    t         j                  j                  | j                  d            d   S Nr   r   )r$   packer_s2bers   rt   r   s    r   	read_s2bezKaitaiStream.read_s2be   '    ''..tq/AB1EEr   c                 d    t         j                  j                  | j                  d            d   S N   r   )r$   packer_s4bers   rt   r   s    r   	read_s4bezKaitaiStream.read_s4be   r{   r   c                 d    t         j                  j                  | j                  d            d   S N   r   )r$   packer_s8bers   rt   r   s    r   	read_s8bezKaitaiStream.read_s8be   r{   r   c                 d    t         j                  j                  | j                  d            d   S rx   )r$   packer_s2lers   rt   r   s    r   	read_s2lezKaitaiStream.read_s2le   r{   r   c                 d    t         j                  j                  | j                  d            d   S r}   )r$   packer_s4lers   rt   r   s    r   	read_s4lezKaitaiStream.read_s4le   r{   r   c                 d    t         j                  j                  | j                  d            d   S r   )r$   packer_s8lers   rt   r   s    r   	read_s8lezKaitaiStream.read_s8le   r{   r   c                 d    t         j                  j                  | j                  d            d   S rq   )r$   	packer_u1rs   rt   r   s    r   read_u1zKaitaiStream.read_u1   rv   r   c                 d    t         j                  j                  | j                  d            d   S rx   )r$   packer_u2bers   rt   r   s    r   	read_u2bezKaitaiStream.read_u2be   r{   r   c                 d    t         j                  j                  | j                  d            d   S r}   )r$   packer_u4bers   rt   r   s    r   	read_u4bezKaitaiStream.read_u4be   r{   r   c                 d    t         j                  j                  | j                  d            d   S r   )r$   packer_u8bers   rt   r   s    r   	read_u8bezKaitaiStream.read_u8be  r{   r   c                 d    t         j                  j                  | j                  d            d   S rx   )r$   packer_u2lers   rt   r   s    r   	read_u2lezKaitaiStream.read_u2le
  r{   r   c                 d    t         j                  j                  | j                  d            d   S r}   )r$   packer_u4lers   rt   r   s    r   	read_u4lezKaitaiStream.read_u4le  r{   r   c                 d    t         j                  j                  | j                  d            d   S r   )r$   packer_u8lers   rt   r   s    r   	read_u8lezKaitaiStream.read_u8le  r{   r   c                 d    t         j                  j                  | j                  d            d   S r}   )r$   packer_f4bers   rt   r   s    r   	read_f4bezKaitaiStream.read_f4be  r{   r   c                 d    t         j                  j                  | j                  d            d   S r   )r$   packer_f8bers   rt   r   s    r   	read_f8bezKaitaiStream.read_f8be   r{   r   c                 d    t         j                  j                  | j                  d            d   S r}   )r$   packer_f4lers   rt   r   s    r   	read_f4lezKaitaiStream.read_f4le'  r{   r   c                 d    t         j                  j                  | j                  d            d   S r   )r$   packer_f8lers   rt   r   s    r   	read_f8lezKaitaiStream.read_f8le*  r{   r   c                      d| _         d| _        y rk   )r_   bitsr   s    r   rP   zKaitaiStream.align_to_byte3  s    	r   c                    d| _         d}|| j                  z
  }| dz  | _        |dkD  re|dz
  dz  dz   }| j                  |      }t        rt	        |      }|D ]
  }|dz  |z  } |}|| j                  z	  | j
                  |z  z  }|| _        n| j
                  | z	  }d| j                  z  dz
  }| xj
                  |z  c_        |S )NFr   r   rh   )rR   r_   _read_bytes_not_alignedPY2	bytearrayr   )	r   rf   resbits_neededbytes_neededr+   bytenew_bitsmasks	            r   read_bits_int_bezKaitaiStream.read_bits_int_be7  s    $$..(%)? )1_2a7L..|<Cn &Qho& H'$)){*BBC DI))|+CT^^#q(		T	
r   c                 \    t        j                  dt        d       | j                  |      S )zDeprecated and no longer used as of KSC 0.9. It is only available
        for backwards compatibility and will be removed in the future.

        KSC 0.9 and later uses `read_bits_int_be()` instead.
        zGread_bits_int() is deprecated since 0.9, use read_bits_int_be() insteadr   
stacklevel)warningswarnDeprecationWarningr   re   s     r   read_bits_intzKaitaiStream.read_bits_intU  s,     	U	

 $$Q''r   c                    d| _         d}|| j                  z
  }|dkD  rt|dz
  dz  dz   }| j                  |      }t        rt	        |      }t        |      D ]  \  }}|||dz  z  z  } ||z	  }|| j                  z  | j                  z  }|| _        n!| j                  }| xj                  |z  c_        | dz  | _        d|z  dz
  }	||	z  }|S )NFr   rh   r   )rR   r_   r   r   r   	enumerater   )
r   rf   r   r   r   r+   ir   r   r   s
             r   read_bits_int_lezKaitaiStream.read_bits_int_leb  s    $$..(? )1_2a7L..|<Cn$S> '4tA&' k)H'$))3C DI))CII!OI%)Q!|t
r   c                 D    | j                          | j                  |      S r   )rP   r   re   s     r   rt   zKaitaiStream.read_bytes  s    ++A..r   c                 ~   |dk  rt        d|fz        d}|dk\  r`t        t        | j                  dd             r@| j                  j	                         r&| j                         | j                         z
  }||k  }|r+| j                  j                  |      }t        |      }||k  }|st        d|fz  ||      S )Nr   z$requested invalid %d amount of bytesTi   seekablez/requested %d bytes, but only %d bytes available)
rc   callablegetattrr   r   rU   ri   readlenEndOfStreamError)r   rf   is_satisfiablenum_bytes_availablers        r   r   z$KaitaiStream._read_bytes_not_aligned  s    q5&6 
   :t<=!!#"&))+
":#66Na A"%a&#66N"A'()&  r   c                 V    | j                          | j                  j                         S r   )rP   r   r   r   s    r   read_bytes_fullzKaitaiStream.read_bytes_full  s    xx}}r   c                 L   | j                          t        j                  |      }t               }	 | j                  j                  d      }|s|rt        |d      t        |      S ||k(  r4|r||z  }|s | j                  j                  dt               t        |      S ||z  }u)Nrh   r   )
rP   r$   byte_from_intr   r   r   NoTerminatorFoundErrorbytesrd   r   )r   terminclude_termconsume_term	eos_error	term_byter   cs           r   read_bytes_termzKaitaiStream.read_bytes_term  s     ..t4	Ka A0A>>QxI~FA#HHMM"h/QxFA r   c                 n   | j                          t        |      }t               }	 | j                  j	                  |      }t        |      |k  r'|rt        |t        |            ||z  }t        |      S ||k(  r5|r||z  }|s!| j                  j                  | t               t        |      S ||z  }r   )	rP   r   r   r   r   r   r   rd   r   )r   r   r   r   r   	unit_sizer   r   s           r   read_bytes_term_multiz"KaitaiStream.read_bytes_term_multi  s    I	Ki(A1v	!0s1v>>QQxDyFA#HHMM9*h7QxFA! r   c                     t        j                  dt        d       | j                  j	                  t        |            }||k7  rt        d|d|      |S )a   Deprecated and no longer used as of KSC 0.9. It is only available
        for backwards compatibility and will be removed in the future.

        KSC 0.9 and later explicitly raises `ValidationNotEqualError` from an
        `if` statement instead.
        zxensure_fixed_contents() is deprecated since 0.9, explicitly raise ValidationNotEqualError from an `if` statement insteadr   r   zunexpected fixed contents: got z, was waiting for )r   r   r   r   r   r   r%   )r   expectedactuals      r   ensure_fixed_contentsz"KaitaiStream.ensure_fixed_contents  sZ     	E		
 s8}-X#  r   c                 J    | j                  t        j                  |            S r   )rstripr$   r   )datapad_bytes     r   bytes_strip_rightzKaitaiStream.bytes_strip_right  s    {{<55h?@@r   c                 `    t         j                  | |      }|dk(  r| d d  S | d ||rdz    S dz    S )Nr   rh   r   )r$   byte_array_index_of)r   r   r   
term_indexs       r   bytes_terminatezKaitaiStream.bytes_terminate  sE    !55dDA
7N<Z1<==!<==r   c                     t        |      }| j                  |      }	 |dk(  r| d d  S ||z  }|dk(  r| d ||r|z    S dz    S | j                  ||||z
  z         }<)Nr   r   )r   find)r   r   r   r   search_indexmods         r   bytes_terminate_multiz"KaitaiStream.bytes_terminate_multi  s{    I	yyr!Aw*CaxN\,YNOOANOO99T<9s?+KLL r   c                     	 | j                   }||z
  }||kD  rt        d||fz  ||      y # t        $ r t        d      w xY w)Nz0writing to non-seekable streams is not supportedzArequested to write %d bytes, but only %d bytes left in the stream)rV   AttributeErrorrY   r   )r   rf   ri   rm   num_bytes_lefts        r   _ensure_bytes_left_to_writez(KaitaiStream._ensure_bytes_left_to_write  sj    	Q

I #S~"SN#$>  	  	QOPP	Qs	   + A c                 `    | j                  t        j                  j                  |             y r   )write_bytesr$   rr   packr   vs     r   write_s1zKaitaiStream.write_s1"  !    //44Q78r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   ry   r   r   s     r   
write_s2bezKaitaiStream.write_s2be'  !    1166q9:r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   r   r   r   s     r   
write_s4bezKaitaiStream.write_s4be*  r  r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   r   r   r   s     r   
write_s8bezKaitaiStream.write_s8be-  r  r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   r   r   r   s     r   
write_s2lezKaitaiStream.write_s2le4  r  r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   r   r   r   s     r   
write_s4lezKaitaiStream.write_s4le7  r  r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   r   r   r   s     r   
write_s8lezKaitaiStream.write_s8le:  r  r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   r   r   r   s     r   write_u1zKaitaiStream.write_u1C  r   r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   r   r   r   s     r   
write_u2bezKaitaiStream.write_u2beH  r  r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   r   r   r   s     r   
write_u4bezKaitaiStream.write_u4beK  r  r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   r   r   r   s     r   
write_u8bezKaitaiStream.write_u8beN  r  r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   r   r   r   s     r   
write_u2lezKaitaiStream.write_u2leU  r  r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   r   r   r   s     r   
write_u4lezKaitaiStream.write_u4leX  r  r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   r   r   r   s     r   
write_u8lezKaitaiStream.write_u8le[  r  r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   r   r   r   s     r   
write_f4bezKaitaiStream.write_f4beh  r  r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   r   r   r   s     r   
write_f8bezKaitaiStream.write_f8bek  r  r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   r   r   r   s     r   
write_f4lezKaitaiStream.write_f4ler  r  r   c                 `    | j                  t        j                  j                  |             y r   )r   r$   r   r   r   s     r   
write_f8lezKaitaiStream.write_f8leu  r  r   c                     | j                   dkD  r_| j                  }| j                  s|d| j                   z
  z  }| j                          | j	                  t
        j                  |             y y )Nr   r   )r_   r   rQ   rP   _write_bytes_not_alignedr$   r   )r   rn   s     r   r]   z KaitaiStream.write_align_to_byte~  s]    >>A		A<<a$..((2  )),*D*DQ*GH; r   c                 >   d| _         d| _        d|z  dz
  }||z  }| j                  |z   }|dz
  dz  dz   }| j                  || j                  dkD  rdndz
  | j	                                |dz  }|dz  | _        |dkD  rt        |      }d| j                  z  dz
  }||z  }|| j                  z	  | j                  || j                  z
  z  z  }|| _        t        |dz
  dd      D ]  }	|dz  ||	<   |dz  } | j                  |       y | j                  |z  |z  | _        y )NFTrh   r   r   r      	rQ   rR   r_   r   ri   r   r   ranger%  )
r   rf   valr   bits_to_writer   bytes_to_writer+   r   r   s
             r   write_bits_int_bezKaitaiStream.write_bits_int_be  s?   #Q!|t*&*q0A5 	((dnnq>PVW)XZ^ZbZbZde&!+&*AN+C'1,DTzH'$))DNN8J*KKC DI>A-r26 tA	 ))#.		Q,DIr   c                 D   d| _         d| _        | j                  |z   }|dz
  dz  dz   }| j                  || j                  dkD  rdndz
  | j	                                |dz  }| j                  }|dz  | _        |dkD  ret        |      }||| j                  z
  z	  }||z  | j                  z  }|| _        t        |      D ]  }	|dz  ||	<   |dz  } | j                  |       n| xj                  ||z  z  c_        d| j                  z  dz
  }
| xj                  |
z  c_        y )NTrh   r   r   r'  r(  )r   rf   r*  r+  r   r,  old_bits_leftr+   r   r   r   s              r   write_bits_int_lezKaitaiStream.write_bits_int_le  s.   #*&*q0A5 	((dnnq>PVW)XZ^ZbZbZde&!+&*AN+Cq4>>12H&2C DI>* tA	 ))#.II--IT^^#q(		T	r   c                 F    | j                          | j                  |       y r   )r]   r%  )r   r+   s     r   r   zKaitaiStream.write_bytes  s      "%%c*r   c                     t        |      }| j                  || j                  j                                | j                  j	                  |       y r   )r   r   r   r`   write)r   r+   rf   s      r   r%  z%KaitaiStream._write_bytes_not_aligned  s5    H((DHHMMO<sr   c                     t        |      }||k  sJ d||fz         | j                  |       ||k  r?| j                  |       | j                  t        j	                  |      ||z
  dz
  z         y y )Nz)writing %d bytes, but %d bytes were givenrh   )r   r   r  r$   r   )r   r+   rU   r   r   rf   s         r   write_bytes_limitzKaitaiStream.write_bytes_limit  su    H DyQEq	QQyt8MM$\77ATAXPQ\RS r   c                     t         r&t        t        fdt        |       D                    S t        fd| D              S )Nc              3   (   K   | ]	  }|z    y wr   r   .0r   rI   s     r   	<genexpr>z/KaitaiStream.process_xor_one.<locals>.<genexpr>  s     "Dq1s7"D   c              3   (   K   | ]	  }|z    y wr   r   r8  s     r   r:  z/KaitaiStream.process_xor_one.<locals>.<genexpr>  s     +QW+r;  )r   r   r   r   rI   s    `r   process_xor_onezKaitaiStream.process_xor_one  s1    "DIdO"DDEE+d+++r   c                     t         rJt        t        d t        t        |       t	        j
                  t        |                  D                    S t        d t        | t	        j
                  |            D              S )Nc              3   ,   K   | ]  \  }}||z    y wr   r   r9  arn   s      r   r:  z0KaitaiStream.process_xor_many.<locals>.<genexpr>  s     "kTQ1q5"k   c              3   ,   K   | ]  \  }}||z    y wr   r   rA  s      r   r:  z0KaitaiStream.process_xor_many.<locals>.<genexpr>  s     Gtq!QUGrC  )r   r   r   zip	itertoolscycler=  s     r   process_xor_manyzKaitaiStream.process_xor_many  sW    "kS4)//ZcdgZhJi5j"kkllGs41E'FGGGr   c                     |dk7  rt        d|fz        | |dz  z  }t        |       }t        |      D ]  \  }}||z  dz  ||z	  z  ||<    t        |      S )Nrh   z&unable to rotate group of %d bytes yetr   r'  )r:   r   r   r   )r   amount
group_sizeanti_amountr   r   r   s          r   process_rotate_leftz KaitaiStream.process_rotate_left  s|    ?%8 
 ga0dO | 	CGAtFNd*dk.ABAaD	CQxr   c                 (    t         rt        |       S | S r   )r   ord)r   s    r   int_from_bytezKaitaiStream.int_from_byte,  s    s1v#!#r   c                 <    t         rt        |       S t        | f      S r   )r   chrr   )r   s    r   r   zKaitaiStream.byte_from_int0  s    s1v-%+-r   c                 2    t         j                  | |         S r   )r$   rP  )r   r   s     r   byte_array_indexzKaitaiStream.byte_array_index4  s    ))$q'22r   c                 >    t         j                  t        |             S r   )r$   rP  minrn   s    r   byte_array_minzKaitaiStream.byte_array_min8      ))#a&11r   c                 >    t         j                  t        |             S r   )r$   rP  maxrW  s    r   byte_array_maxzKaitaiStream.byte_array_max<  rY  r   c                 J    | j                  t        j                  |            S r   )r   r$   r   )r   rn   s     r   r   z KaitaiStream.byte_array_index_of@  s    yy33A677r   c                 6    	  | |      S # t         $ r |cY S w xY w)zResolves value using enum: if the value is not found in the map,
        we'll just use literal value per se. Works around problem with Python
        enums throwing an exception when encountering unknown value.
        )rY   )enum_objrJ   s     r   resolve_enumzKaitaiStream.resolve_enumD  s%    	E?" 	L	s   
 c                     | j                         }| j                  d       | j                         }| j                  |       |S rk   )ri   rd   r   )r   ri   r   s      r   to_byte_arrayzKaitaiStream.to_byte_arrayQ  s6    hhj		!  "		#r   c                       e Zd Zd Zd Zy)KaitaiStream.WriteBackHandlerc                      || _         || _        y r   )ri   handler)r   ri   rf  s      r   r   z&KaitaiStream.WriteBackHandler.__init__Y  s    DH"DLr   c                 \    |j                  | j                         | j                  |       y r   )rd   ri   rf  r   parents     r   
write_backz(KaitaiStream.WriteBackHandler.write_back]  s    KK!LL r   N)r/   r0   r1   r   rj  r   r   r   WriteBackHandlerrd  X  s    	#	!r   rk  c                 :    | j                   j                  |       y r   )rT   append)r   childs     r   add_child_streamzKaitaiStream.add_child_streama  s    !!%(r   Nc                     | j                         }| j                  D ]  }|j                  |         | j                  d d = | j                  |       || j	                  |       y y r   )ri   rT   r>   rd   _write_back)r   ri  _posrn  s       r   r>   z%KaitaiStream.write_back_child_streamsd  sd    xxz'' 	1E**40	1 q!		$V$ r   c                 :    | j                   j                  |       y r   )rS   rj  rh  s     r   rq  zKaitaiStream._write_backq  s    **62r   r   )hr/   r0   r1   r   r   r   r   ra   rd   ri   rU   structStructrr   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ru   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rP   r   r   r   rt   r   r   r   r   r   staticmethodr   r   r   r   r   r  r  r  r	  r  r  r  r  r  r  r  r  r  r  r  r!  r#  r]   r-  r0  r   r%  r5  r>  rH  rM  rP  r   rT  rX  r\  r   r`  rb  objectrk  ro  r>   rq  r   r   r   r$   r$   V   s   6	.	[< c"I&--%K&--%K&--%K&--%K&--%K&--%Kc"I&--%K&--%K&--%K&--%K&--%K&--%K&--%K&--%K&--%K&--%KD
FFFFFFD
FFFFFFFFFF<(D/%N*,* A A > > 	M 	M"$9
;;;;;;9
;;;;;;;;;;I@ -D L+
T8 , , H H  $ $ $ . . 3 3 2 2 2 2 8 8  !6 !)%3r   r$   c                   "     e Zd ZdZ fdZ xZS )KaitaiStructErrora*  Common ancestor for all errors originating from correct Kaitai Struct
    usage (i.e. errors that indicate a problem with user input, not errors
    indicating incorrect usage that are not meant to be caught but fixed in the
    application code). Use this exception type in the `except` clause if you
    want to handle all parse errors and serialization errors.

    If available, the `src_path` attribute will contain the KSY source path
    pointing to the element where the error occurred. If it is not available,
    `src_path` will be `None`.
    c                 N    t         t        |   |dn|dz   |z          || _        y )N z: )r6   ry  r   src_path)r   msgr|  r8   s      r   r   zKaitaiStructError.__init__  s,    /x7GXX\_`c0cd r   r/   r0   r1   __doc__r   rL   rM   s   @r   ry  ry  u  s    	! !r   ry  c                   "     e Zd ZdZ fdZ xZS )rc   zIndicates that an invalid argument value was received (like `ValueError`),
    but used in places where this might indicate invalid user input and
    therefore represents a parse error or serialization error.
    c                 .    t         t        |   |d        y r   )r6   rc   r   )r   r}  r8   s     r   r   zInvalidArgumentError.__init__  s    "D23=r   r~  rM   s   @r   rc   rc     s    > >r   rc   c                   "     e Zd ZdZ fdZ xZS )r   zRead or write beyond end of stream. Provides the `bytes_needed` (number
    of bytes requested to read or write) and `bytes_available` (number of bytes
    remaining in the stream) attributes.
    c                 J    t         t        |   |d        || _        || _        y r   )r6   r   r   r   bytes_available)r   r}  r   r  r8   s       r   r   zEndOfStreamError.__init__  s%    .sD9(.r   r~  rM   s   @r   r   r     s    / /r   r   c                   "     e Zd ZdZ fdZ xZS )r   a  Special type of `EndOfStreamError` that occurs when end of stream is
    reached before the required terminator is found. If you want to tolerate a
    missing terminator, you can specify `eos-error: false` in the KSY
    specification, in which case the end of stream will be considered a valid
    end of field and this error will no longer be raised.

    The `term` attribute contains a `bytes` object with the searched terminator.
    c                 X    t         t        |   d|dt        |      |       || _        y )Nz)end of stream reached, but no terminator z found)r6   r   r   r   r   )r   r   r  r8   s      r   r   zNoTerminatorFoundError.__init__  s1    $d4lp5rtwx|t}  @O  	P	r   r~  rM   s   @r   r   r     s     r   r   c                   "     e Zd ZdZ fdZ xZS )UndecidedEndiannessErrorzError that occurs when default endianness should be decided with
    switch, but nothing matches (although using endianness expression
    implies that there should be some positive result).
    c                 .    t         t        |   d|       y )Nz)unable to decide on endianness for a type)r6   r  r   )r   r|  r8   s     r   r   z!UndecidedEndiannessError.__init__  s    &67bdlmr   r~  rM   s   @r   r  r    s    n nr   r  c                   "     e Zd ZdZ fdZ xZS )ValidationFailedErrorz~Common ancestor for all validation failures. Stores pointer to
    KaitaiStream IO object which was involved in an error.
    c                 t    t         t        |   |dnd|j                         fz  dz   |z   |       || _        y )Nr{  zat pos %d: zvalidation failed: )r6   r  r   ri   r   )r   r}  r   r|  r8   s       r   r   zValidationFailedError.__init__  sO    #T32:R=\^\b\b\d[fKfj4  CF  5F  HP  	Qr   r~  rM   s   @r   r  r    s     r   r  c                   "     e Zd ZdZ fdZ xZS )ValidationNotEqualErrorz{Signals validation failure: we required "actual" value to be equal to
    "expected", but it turned out that it's not.
    c                 |    t         t        |   dt        |      dt        |      ||       || _        || _        y )Nznot equal, expected 
, but got )r6   r  r   reprr   r   )r   r   r   r   r|  r8   s        r   r   z ValidationNotEqualError.__init__  sA    %t5^bck^lnrsynz6{}  BJ  	K r   r~  rM   s   @r   r  r         r   r  c                   "     e Zd ZdZ fdZ xZS )ValidationLessThanErrorzSignals validation failure: we required "actual" value to be
    greater than or equal to "min", but it turned out that it's not.
    c                 |    t         t        |   dt        |      dt        |      ||       || _        || _        y )Nznot in range, min r  )r6   r  r   r  rV  r   )r   	min_boundr   r   r|  r8   s        r   r   z ValidationLessThanError.__init__  sA    %t5\`aj\kmqrxmy6z|~  AI  	Jr   r~  rM   s   @r   r  r    r  r   r  c                   "     e Zd ZdZ fdZ xZS )ValidationGreaterThanErrorzSignals validation failure: we required "actual" value to be
    less than or equal to "max", but it turned out that it's not.
    c                 |    t         t        |   dt        |      dt        |      ||       || _        || _        y )Nznot in range, max r  )r6   r  r   r  r[  r   )r   	max_boundr   r   r|  r8   s        r   r   z#ValidationGreaterThanError.__init__  sE    ($8_cdm_nptu{p|9}  @B  DL  	Mr   r~  rM   s   @r   r  r    r  r   r  c                   "     e Zd ZdZ fdZ xZS )ValidationNotAnyOfErrorzuSignals validation failure: we required "actual" value to be
    from the list, but it turned out that it's not.
    c                 V    t         t        |   dt        |      z  ||       || _        y )Nznot any of the list, got %s)r6   r  r   r  r   r   r   r   r|  r8   s       r   r   z ValidationNotAnyOfError.__init__  s-    %t56SW[\bWc6dfhjrsr   r~  rM   s   @r   r  r         r   r  c                   "     e Zd ZdZ fdZ xZS )ValidationNotInEnumErrorzsSignals validation failure: we required "actual" value to be in
    the enum, but it turned out that it's not.
    c                 V    t         t        |   dt        |      z  ||       || _        y )Nznot in the enum, got %s)r6   r  r   r  r   r  s       r   r   z!ValidationNotInEnumError.__init__  s-    &67PTXY_T`7acegopr   r~  rM   s   @r   r  r    r  r   r  c                   "     e Zd ZdZ fdZ xZS )ValidationExprErrorz{Signals validation failure: we required "actual" value to match
    the expression, but it turned out that it doesn't.
    c                 V    t         t        |   dt        |      z  ||       || _        y )Nz#not matching the expression, got %s)r6   r  r   r  r   r  s       r   r   zValidationExprError.__init__  s-    !412W[_`f[g2hjlnvwr   r~  rM   s   @r   r  r    r  r   r  c                        e Zd Z fdZ xZS )ConsistencyErrorc           
          t         t        |   d|dt        |      dt        |             || _        || _        || _        y )NzCheck failed: z, expected: z
, actual: )r6   r  r   r  idr   r   )r   attr_idr   r   r8   s       r   r   zConsistencyError.__init__  sL    ._fhlmuhvx|  ~D  yE  0F  	G r   )r/   r0   r1   r   rL   rM   s   @r   r  r    s     r   r  c                       e Zd ZdZy)rA   zpThrown when attempting to write an object whose consistency hasn't been
    checked since the last modification.N)r/   r0   r1   r  r   r   r   rA   rA     s
    ,r   rA   )"rF  sysrt  r   r   r   r   r   r   version_infor   __version__API_VERSIONrw  r
   r4   r$   r%   ry  rY   rc   EOFErrorr   r   r  r  r  r  r  r  r  r  r  rA   r   r   r   <module>r     s    
  0 0 	qQ 
 %6 %@"L "4\36 \3~!	 ! >,j >/(( /- n0 n- 3 3 !6 3 4 / y 	 	r   