
    j^                        d dl Z d dlZd dlZd dlZd dl mZ d dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZ ddlmZ ddlmZmZ ddlmZmZmZmZmZmZmZ dd	lmZmZm 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&dZ' G d de(e#          Z) G d de*e#          Z+ G d de,e#          Z- G d de.e#          Z/ G d de.e#          Z0de.d e,fd!Z1dS )"    N)	unhexlify)log10)AnyCallableClassVarDictOptionalSequenceUnioncast   )_pdfdoc_encoding_rev)PdfObjectProtocolPdfWriterProtocol)
StreamTypeb_deprecate_no_replacementlogger_warningread_non_whitespaceread_until_regexstr_)STREAM_TRUNCATED_PREMATURELYPdfReadErrorPdfStreamErrorzMathieu Fenniakzbiziqe@mathieu.fenniak.netc                      e Zd ZU ej        Zed         ed<   ed         ed<   de	fdZ
de	fdZ	 	 dd
ededeeeeef                           dd fdZ	 dded
ededefdZded          fdZ	 ddededee	f         ddfdZdS )	PdfObject).zhashlib._Hash	hash_funcIndirectObjectindirect_referencereturnc                 0    d| z                                   S )Nz%s)encodeselfs    ]/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/pypdf/generic/_base.pyhash_value_datazPdfObject.hash_value_data9   s    t##%%%    c                     | j         j        d|                     |                                                                                                           S )N:)	__class____name__r   r&   	hexdigestr"   r#   s    r%   
hash_valuezPdfObject.hash_value<   sQ     '''t335566@@BBB
 &((	r'   F pdf_destforce_duplicateignore_fieldsc                 :    t          | j        j         d          )a  
        Clone object into pdf_dest (PdfWriterProtocol which is an interface for PdfWriter).

        By default, this method will call ``_reference_clone`` (see ``_reference``).


        Args:
          pdf_dest: Target to clone to.
          force_duplicate: By default, if the object has already been cloned and referenced,
            the copy will be returned; when ``True``, a new copy will be created.
            (Default value = ``False``)
          ignore_fields: List/tuple of field names (for dictionaries) that will be ignored
            during cloning (applies to children duplication as well). If fields are to be
            considered for a limited number of levels, you have to add it as integer, for
            example ``[1,"/B","/TOTO"]`` means that ``"/B"`` will be ignored at the first
            level only but ``"/TOTO"`` on all levels.

        Returns:
          The cloned PdfObject
        z! does not implement .clone so far)NotImplementedErrorr*   r+   r$   r/   r0   r1   s       r%   clonezPdfObject.cloneE   s'    4 "~&III
 
 	
r'   r5   c                    	 |s|j         j        |k    r|S n# t          $ r Y nw xY w	 | j         }n# t          $ r |cY S w xY wt	          |j                  dz   }|t          |j                  |j        vrCi |j        t          |j                  <   |j        |j        t          |j                           d<   |si|j        |j        t          |j                           v rC|	                    |j        t          |j                           |j                           }|J |S ||j        t          |j                           |j        <   |j        
                    |           t          |d|          |_         |S )aW  
        Reference the object within the _objects of pdf_dest only if
        indirect_reference attribute exists (which means the objects was
        already identified in xref/xobjstm) if object has been already
        referenced do nothing.

        Args:
          clone:
          pdf_dest:

        Returns:
          The clone
           N	PreventGCr   )r   pdf	ExceptionAttributeErrorlen_objectsid_id_translatedidnum
get_objectappendr   )r$   r5   r/   r0   indiobjs          r%   _reference_clonezPdfObject._reference_clonec   s    	" u'?'Cx'O'O 	 	 	D		)CC 	 	 	LLL	!""Q&?#'{{("99979'374DGG'374[A#I!8CG!EEE))+BswKK8C  
>?H#BswKK0;  '''#1!Q#A#A s    
$$0 ??c                     | S )zResolve indirect references.r.   r#   s    r%   rA   zPdfObject.get_object       r'   Nstreamencryption_keyc                     t           N)r3   r$   rI   rJ   s      r%   write_to_streamzPdfObject.write_to_stream   s
     "!r'   Fr.   )FrL   )r+   
__module____qualname__hashlibsha1r   r   __annotations__r	   bytesr&   r-   r   boolr
   r   strintr5   r   r   rF   rA   r   rN   r.   r'   r%   r   r   4   st        07Ix,-<<< !12222& & & & &E     !&=?	
 
#
 
  sCx 9:	

 

 
 
 
> PU+ ++$5+HL+	+ + + +ZH[1    
 MQ" " "27c58H2I"	" " " " " "r'   r   c                       e Zd Z	 	 ddededeeeee	f                           dd fdZ
	 dd	ed
edeef         ddfdZed	edd fd            ZdefdZdS )
NullObjectFr.   r/   r0   r1   r    c                 d    t          d|                     t                      ||                    S )Clone object into pdf_dest.rZ   )r   rF   rZ   r4   s       r%   r5   zNullObject.clone   s1     $//
hXX
 
 	
r'   NrI   rJ   c                 T    |t          dd           |                    d           d S )N/the encryption_key parameter of write_to_stream5.0.0   null)r   writerM   s      r%   rN   zNullObject.write_to_stream   s;     %$A7   	Wr'   c                 r    |                      d          }|dk    rt          d          t                      S )N   r`   zCould not read Null object)readr   rZ   )rI   nulltxts     r%   read_from_streamzNullObject.read_from_stream   s5    ++a..g;<<<||r'   c                     dS )NrZ   r.   r#   s    r%   __repr__zNullObject.__repr__   s    |r'   rO   rL   )r+   rP   rQ   r   rV   r	   r
   r   rW   rX   r5   r   rU   rN   staticmethodrf   rh   r.   r'   r%   rZ   rZ      s         !&=?		
 	
#	
 	
  sCx 9:		

 
	
 	
 	
 	
 MQ  27c58H2I	         \#      r'   rZ   c                       e Zd ZdeddfdZ	 	 ddeded	eee	e
ef                           dd fd
ZdedefdZde
fdZ	 ddede	de
ef         ddfdZededd fd            ZdS )BooleanObjectvaluer    Nc                     || _         d S rL   rl   )r$   rl   s     r%   __init__zBooleanObject.__init__   s    


r'   Fr.   r/   r0   r1   c                 p    t          d|                     t          | j                  ||                    S )r\   rk   )r   rF   rk   rl   r4   s       r%   r5   zBooleanObject.clone   s8     !!-
";";XWW
 
 	
r'   _BooleanObject__oc                     t          |t                    r| j        |j        k    S t          |t                    r| j        |k    S dS )NF)
isinstancerk   rl   rV   )r$   rq   s     r%   __eq__zBooleanObject.__eq__   sG    c=)) 	:**T"" 	:$$5r'   c                     | j         rdndS )NTrueFalsern   r#   s    r%   rh   zBooleanObject.__repr__   s    0vv0r'   rI   rJ   c                     |t          dd           | j        r|                    d           d S |                    d           d S )Nr^   r_      trues   false)r   rl   ra   rM   s      r%   rN   zBooleanObject.write_to_stream   s]     %$A7   : 	#LL!!!!!LL"""""r'   c                     |                      d          }|dk    rt          d          S |dk    r$|                      d           t          d          S t          d          )Nrc   ry   Ts   falsr7   FzCould not read Boolean object)rd   rk   r   )rI   words     r%   rf   zBooleanObject.read_from_stream   s]    {{1~~7?? &&&W__KKNNN '''>???r'   rO   rL   )r+   rP   rQ   r   ro   r   rV   r	   r
   r   rW   rX   r5   objectrt   rh   r   rU   rN   ri   rf   r.   r'   r%   rk   rk      sF       c d     !&=?	

 

#

 

  sCx 9:	


 


 

 

 

& T    1# 1 1 1 1 MQ
# 
# 
#27c58H2I
#	
# 
# 
# 
# @ @ @ @ @ \@ @ @r'   rk   c                   j   e Zd ZdedededdfdZ	 	 d d	ed
edee	e
eef                           dd fdZed!d            Zded         fdZdedd fdZded         fdZdedefdZdedefdZdefdZdefdZdedefdZdedefdZ	 d"dede
deef         ddfdZedededd fd            ZdS )#r   r@   
generationr9   r    Nc                 0    || _         || _        || _        d S rL   )r@   r~   r9   )r$   r@   r~   r9   s       r%   ro   zIndirectObject.__init__   s    
$r'   Fr.   r/   r0   r1   c                    | j         |k    r|s| S t          | j                   |j        vri |j        t          | j                   <   | j        |j        t          | j                            v rt|                    |j        t          | j                            | j                           }|r4|J |j        J |j        }t          |j        |j        |j                   S nm|                                 }|-t                      }t          | t          f          sJ | |_        |
                    |                    |||                    }|J |j        J |j        S )r\   )r9   r>   r?   r@   rA   r   r   r~   rZ   rs   _add_objectr5   )r$   r/   r0   r1   dupidrefrE   s          r%   r5   zIndirectObject.clone   s`    8xKdh<<x66646H#BtxLL1:0DH>>>%%h&=bll&KDJ&WXXC P-999.%ek53CUYOOO	P //##C{ ll!$(9:::::)-&&&		(O]CC C %111%%r'   c                     | S rL   r.   r#   s    r%   r   z!IndirectObject.indirect_reference  rH   r'   r   c                 6    | j                             |           S rL   )r9   rA   r#   s    r%   rA   zIndirectObject.get_object  s    x""4(((r'   memoc                 B    t          | j        | j        | j                  S rL   )r   r@   r~   r9   )r$   r   s     r%   __deepcopy__zIndirectObject.__deepcopy__  s    dj$/48DDDr'   c                     |                                  }t          |t                    r8t          |                                  d|                                           |S )Nz references an IndirectObject )rA   rs   r   r   rh   )r$   os     r%   _get_object_with_checkz%IndirectObject._get_object_with_check!  s]    OOa(( 	 ==??PP!**,,PP   r'   namec                     	 t          |                                 |          S # t          $ r t          d| d          w xY w)NzNo attribute z* found in IndirectObject or pointed object)getattrr   r;   )r$   r   s     r%   __getattr__zIndirectObject.__getattr__*  s^    	46688$??? 	 	 	 PPPP  	s	   !$ Akeyc                 6    |                                  |         S rL   )r   )r$   r   s     r%   __getitem__zIndirectObject.__getitem__3  s    **,,S11r'   c                 N    |                                                                  S rL   )rA   __str__r#   s    r%   r   zIndirectObject.__str__7  s      ((***r'   c                 R    d| j         d| j        dt          | j                   dS )NzIndirectObject(z, ))r@   r~   r>   r9   r#   s    r%   rh   zIndirectObject.__repr__;  s/    UUUUUbllUUUUr'   otherc                     |d uoBt          |t                    o-| j        |j        k    o| j        |j        k    o| j        |j        u S rL   )rs   r   r@   r~   r9   r$   r   s     r%   rt   zIndirectObject.__eq__>  sY     &5.11&
ek)& 5#33& EI%	
r'   c                 .    |                      |           S rL   )rt   r   s     r%   __ne__zIndirectObject.__ne__G  s    ;;u%%%%r'   rI   rJ   c                     |t          dd           |                    | j         d| j         d                                           d S )Nr^   r_    z R)r   ra   r@   r~   r"   rM   s      r%   rN   zIndirectObject.write_to_streamJ  s\     %$A7   	
88T_888??AABBBBBr'   c                    d}	 |                      d          }|st          t                    |                                rn||z  }Fd}	 |                      d          }|st          t                    |                                r|sCn||z  }It	          |           }|dk    r1t          dt          |                                                      t          t          |          t          |          |          S )Nr'   Tr7      Rz0Error reading indirect object reference at byte )
rd   r   r   isspacer   r   hextellr   rX   )rI   r9   r@   tokr~   rs         r%   rf   zIndirectObject.read_from_streamS  s   	++a..C C$%ABBB{{}} SLE	 
	++a..C C$%ABBB{{}} ! #J	  ''99W3v{{}}CUCUWW   c%jj#j//3???r'   rO   )r    r   rL   )r+   rP   rQ   rX   r   ro   r   rV   r	   r
   r   rW   r5   propertyr   rA   r   r   r   r   r   rh   r|   rt   r   r   rU   rN   ri   rf   r.   r'   r%   r   r      su       c s       !&=?	"& "&#"& "&  sCx 9:	"&
 
"& "& "& "&H    X)H[1 ) ) ) )E E)9 E E E E(=         2s 2s 2 2 2 2+ + + + +V# V V V V
F 
t 
 
 
 
&F &t & & & & MQC C C27c58H2IC	C C C C @ @# @:J @ @ @ \@ @ @r'   r      c                       e Zd Z	 ddeeef         dee         dd fdZ	 	 dd	ed
edee	eee
f                           dd fdZdefdZdefdZdefdZ	 ddededeef         ddfdZdS )FloatObject0.0Nrl   contextr    c                    	 t          t          |                    }t                               | |          S # t          $ r@}t	          | d| dt
                     t                               | d          cY d }~S d }~ww xY w)Nz : FloatObject (z) invalid; use 0.0 insteadg        )floatr   __new__r:   r   r+   )clsrl   r   es       r%   r   zFloatObject.__new__s  s    		+$u++&&E==e,,, 	+ 	+ 	+ GGeGGG   ==c********	+s   69 
B5A>8B>BFr.   r/   r0   r1   c                 f    t          d|                     t          |           ||                    S )r\   r   )r   rF   r   r4   s       r%   r5   zFloatObject.clone  s6     !!+d"3"3XOO
 
 	
r'   c                     | dk    rdS t           t          t          t          |                               z
  }| dt	          d|           d                    d                              d          }|S )Nr   r   .r7   f0)FLOAT_WRITE_PRECISIONrX   r   absmaxrstrip)r$   nbss      r%   myreprzFloatObject.myrepr  so    1995"Ss4yy)9)9%:%::#c!Bii####**3//66s;;r'   c                 *    |                                  S rL   )r   r#   s    r%   rh   zFloatObject.__repr__  s    {{}}r'   c                      t          |           S rL   )r   r#   s    r%   
as_numericzFloatObject.as_numeric  s    T{{r'   rI   rJ   c                     |t          dd           |                    |                                                     d                     d S Nr^   r_   utf8)r   ra   r   r"   rM   s      r%   rN   zFloatObject.write_to_stream  sQ     %$A7   	T[[]]))&1122222r'   )r   NrO   rL   )r+   rP   rQ   r   rW   r   r	   r   rV   r
   rX   r5   r   rh   r   r   r   rU   rN   r.   r'   r%   r   r   r  sB       FJ+ +#s(O+6>sm+	+ + + +" !&=?	

 



 

  sCx 9:	


 


 

 

 

    #    E     MQ3 3 327c58H2I3	3 3 3 3 3 3r'   r   c                       e Zd Z ej        d          Zdedd fdZ	 	 ddeded	e	e
eeef                           dd fd
ZdefdZ	 ddededeef         ddfdZededed         fd            ZdS )NumberObjects	   [^+-.0-9]rl   r    c                     	 t                               | t          |                    S # t          $ r7 t          d| dt                     t                               | d          cY S w xY w)NzNumberObject(z) invalid; use 0 insteadr   )rX   r   
ValueErrorr   r+   )r   rl   s     r%   r   zNumberObject.__new__  sr    	';;sCJJ/// 	' 	' 	'J5JJJHUUU;;sA&&&&&	's   '* >A+*A+Fr.   r/   r0   r1   c                 f    t          d|                     t          |           ||                    S )r\   r   )r   rF   r   r4   s       r%   r5   zNumberObject.clone  s6     !!,t"4"4hPP
 
 	
r'   c                 `    t          t          |                               d                    S )Nr   )rX   reprr"   r#   s    r%   r   zNumberObject.as_numeric  s$    4::$$V,,---r'   NrI   rJ   c                     |t          dd           |                    t          |                               d                     d S r   )r   ra   r   r"   rM   s      r%   rN   zNumberObject.write_to_stream  sO     %$A7   	T$ZZ&&v../////r'   )r   r   c                     t          | t          j                  }|                    d          dk    rt	          |          S t          |          S )N   .)r   r   NumberPatternfindr   )rI   nums     r%   rf   zNumberObject.read_from_stream  sE    v|'ABB88D>>Rs###C   r'   rO   rL   )r+   rP   rQ   recompiler   r   r   rV   r	   r
   r   rW   rX   r5   r   r   rU   rN   ri   rf   r.   r'   r%   r   r     s3       BJ|,,M'C 'N ' ' ' ' !&=?	

 



 

  sCx 9:	


 


 

 

 

.C . . . . MQ0 0 027c58H2I0	0 0 0 0 ! !6S0T ! ! ! \! ! !r'   r   c                       e Zd ZdZ	 	 ddededeeee	e
f                           dd fdZedefd	            Z	 ddeded
e	ef         dd
fdZd
S )ByteStringObjecta>  
    Represents a string object where the text encoding could not be determined.

    This occurs quite often, as the PDF spec doesn't provide an alternate way to
    represent strings -- for example, the encryption data stored in files (like
    /O) is clearly not text, but is still stored in a "String" object.
    Fr.   r/   r0   r1   r    c           
          t          d|                     t          t          |                     ||                    S )r\   r   )r   rF   r   rU   r4   s       r%   r5   zByteStringObject.clone  sA     !! t--x 
 
 	
r'   c                     | S )z7For compatibility with TextStringObject.original_bytes.r.   r#   s    r%   original_byteszByteStringObject.original_bytes  s	     r'   NrI   rJ   c                     |t          dd           |                    d           |                    t          j        |                      |                    d           d S )Nr^   r_      <   >)r   ra   binasciihexlifyrM   s      r%   rN   z ByteStringObject.write_to_stream  sj     %$A7   	TX%d++,,,Tr'   rO   rL   )r+   rP   rQ   __doc__r   rV   r	   r
   r   rW   rX   r5   r   rU   r   r   rN   r.   r'   r%   r   r     s          !&=?	
 

 
  sCx 9:	

 

 
 
 
     X
 MQ	 	 	27c58H2I			 	 	 	 	 	r'   r   c                       e Zd ZdZ	 	 ddededeeee	e
f                           dd fdZdZdZedefd	            Zdefd
ZdefdZ	 ddedede	ef         ddfdZdS )TextStringObjectz
    A string object that has been decoded into a real unicode string.

    If read from a PDF document, this string appeared to match the
    PDFDocEncoding, or contained a UTF-16BE BOM mark to cause UTF-16 decoding
    to occur.
    Fr.   r/   r0   r1   r    c                     t          |           }| j        |_        | j        |_        t          d|                     |||                    S )r\   r   )r   autodetect_pdfdocencodingautodetect_utf16r   rF   )r$   r/   r0   r1   rE   s        r%   r5   zTextStringObject.clone  sP     t$$(,(F%#4 5 5c8_ U U
 
 	
r'   c                 *    |                                  S )a-  
        It is occasionally possible that a text string object gets created where
        a byte string object was expected due to the autodetection mechanism --
        if that occurs, this "original_bytes" property can be used to
        back-calculate what the original encoded bytes were.
        )get_original_bytesr#   s    r%   r   zTextStringObject.original_bytes  s     &&(((r'   c                     | j         r"t          j        |                     d          z   S | j        rt          |           S t          d          )Nutf-16bez#no information about original bytes)r   codecsBOM_UTF16_BEr"   r   encode_pdfdocencodingr:   r#   s    r%   r   z#TextStringObject.get_original_bytes  sS       	C&Z)@)@@@+ 	C(...ABBBr'   c                     	 t          |           }n2# t          $ r% t          j        |                     d          z   }Y nw xY w|S )Nr   )r   UnicodeEncodeErrorr   r   r"   )r$   bytearrs     r%   get_encoded_bytesz"TextStringObject.get_encoded_bytes'  sX    	D+D11GG! 	D 	D 	D)DKK
,C,CCGGG	Ds    ,A ANrI   rJ   c                    |t          dd           |                                 }|                    d           |D ]}t          |                                          s1|dk    r+|                    d|z                                             T|                    t          t          |                               |                    d           d S )Nr^   r_      (    z\%03o   ))r   r   ra   chrisalnumr"   r   )r$   rI   rJ   r   cs        r%   rN   z TextStringObject.write_to_stream1  s     %$A7   ((**T 	) 	)Aq66>>## )T		
 hl22445555RAZZ((((Tr'   rO   rL   )r+   rP   rQ   r   r   rV   r	   r
   r   rW   rX   r5   r   r   r   rU   r   r   r   r   rN   r.   r'   r%   r   r     s)         !&=?	
 

 
  sCx 9:	

 

 
 
 
 !&) ) ) ) X)CE C C C C5     MQ  27c58H2I	     r'   r   c                   T   e Zd ZU  ej        d          ZdZddddddd	  ed
          D             Ze	e
eef                  ed<   	 	 ddededeeeeef                           dd fdZ	 ddededeef         ddfdZdefdZededefd            Zedededd fd            ZdS )
NameObjects   \s+|[\(\)<>\[\]{}/%]   /s   #23s   #28s   #29s   #2Fs   #25)#(r   /%c                 Z    i | ](}t          |          d |d                                )S )r   02X)r   r"   ).0rD   s     r%   
<dictcomp>zNameObject.<dictcomp>O  s4    
;
;
;A3q66;q;;;%%''
;
;
;r'   !   renumber_tableFr.   r/   r0   r1   r    c                 f    t          d|                     t          |           ||                    S )r\   r   )r   rF   r   r4   s       r%   r5   zNameObject.cloneR  s6     !!*T"2"2HoNN
 
 	
r'   NrI   rJ   c                 x    |t          dd           |                    |                                            d S )Nr^   r_   )r   ra   renumberrM   s      r%   rN   zNameObject.write_to_stream^  sC     %$A7   	T]]__%%%%%r'   c                 p   | d                              d          }|dk    rt          d|  dd           | dd          D ]u}|dk    r4|                     d          D ]}|d	|d
                                 z  }<	 || j        |         z  }N# t          $ r ||                     d          z  }Y rw xY w|S )Nr   utf-8r   z<Incorrect first char in NameObject, should start with '/': (r   z6.0.0r7   ~r   r   )r"   r   r   KeyError)r$   outr   xs       r%   r  zNameObject.renumberg  s    1gnnW%%$;;$%kdh%k%k%kmtuuuabb 	- 	-A3ww'** 0 0A;q;;;--///CC0-4.q11CC - - -188G,,,CCC-
s   =B"B32B3sinc                    |                      dd          }|dk    rl	 | d |         t          | |dz   |dz                      z   | |dz   d          z   } |                      d|dz             }n# t          $ r |dz   }Y nw xY w|dk    l| S )N   #r   r7      )r   r   r   )r
  rD   s     r%   unnumberzNameObject.unnumberv  s    HHT11ff"1"g	#a!ea!em*< = ==AEGGLHHT1q5))    E	 1ff 
s   AA. .B ?B r9   c                 ^   |                      d          }|t          j        k    rt          d          |t	          | t          j                  z  }	 t                              |          }dD ]8}	 |                    |          }t          |          c S # t          $ r Y 5w xY wt          d|ddd          # t          t          f$ r`}|j        s@t          d|dt                     t          |                    d	                    cY d }~S t          d|d          |d }~ww xY w)
Nr7   zname read error)r  gbk r   zCode Not Foundz"Illegal character in Name Object (r   charmap)rd   r   surfixr   r   delimiter_patternr  decoder:   UnicodeDecodeErrorr   strictr   r+   )rI   r9   r   encretr   s         r%   rf   zNameObject.read_from_stream  se   {{1~~:$$$0111 )EFFF	 &&t,,D'  ++c**C%c??***    D$Rq!5EFFF"$67 	 	 	: MDMMMxXXX!$++i"8"899999999"BBBB 	sI   B; 2#BB; 
B%"B; $B%%B; ;D,AD'D,D''D,rO   rL   )r+   rP   rQ   r   r   r  r  ranger   r   r   rW   rU   rT   r   rV   r	   r
   r   rX   r5   r   rN   r  ri   r  rf   r.   r'   r%   r   r   F  s        "
#;<<F2 2 <
;r
;
;
;2NHT#u*-.    !&=?	

 



 

  sCx 9:	


 


 

 

 

 MQ& & &27c58H2I&	& & & &%     
e 
 
 
 
 \
  # ,    \  r'   r   unicode_stringr    c           	          t                      }| D ]N}	 |t          t          t          |                             z  }.# t          $ r t          d|ddd          w xY wt          |          S )Npdfdocencodingr   z#does not exist in translation table)	bytearrayr   r   r   r  r   rU   )r  retvalr   s      r%   r   r     s    [[F  	b1!455666FF 	 	 	$ !R-R  	 ==s	   *?A)2r   r   rR   r   r   mathr   typingr   r   r   r   r	   r
   r   r   _codecsr   
_protocolsr   r   _utilsr   r   r   r   r   r   r   errorsr   r   r   
__author____author_email__r   rZ   rk   r   r   r   r   rX   r   rU   r   rW   r   r   r   r.   r'   r%   <module>r(     s-  6    				             Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q * * * * * * = = = = = = = =                  P O O O O O O O O O
/ c" c" c" c" c"! c" c" c"L       @0@ 0@ 0@ 0@ 0@I 0@ 0@ 0@f@ @ @ @ @Y @ @ @D  /3 /3 /3 /3 /3% /3 /3 /3d'! '! '! '! '!3	 '! '! '!T% % % % %ui % % %PM M M M MsI M M M`U U U U Ui U U Up	# 	% 	 	 	 	 	 	r'   