
    zvgf                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZ e
rddlmZ d	Zd
ZdZ	 ddddddZ	 d?dZd@dZdAdZ G d de          Z G d dej                  Z G d  d!          Z G d" d#e          Z  G d$ d%          Z!dBdCd.Z"	 dDdEd3Z#dFd6Z$ G d7 d8          Z% G d9 d:          Z& G d; d<e&          Z' G d= d>e&          Z(dS )G    )annotationsN)IOTYPE_CHECKINGAny
NamedTuplecast   )Image)	deprecate)is_path)StrOrBytesPathi   i   Fzimage buffer overrun errorzdecoding errorzunknown errorzbad configurationzout of memory error)ierrorintencoderboolreturnOSErrorc                   	 t           j                            |           }n*# t          $ r t                              |           }Y nw xY w|s|rdnd d|  }|d|rdnd dz  }t          |          S )Nr   decoderz error z when writingreadingz image file)r
   coregetcodecstatusAttributeErrorERRORSgetr   )r   r   msgs      J/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/PIL/ImageFile.py_get_oserrorr#   H   s     j''..      jj  E%49DDUDDD7IIiDDDDC3<<s   " $A	A	c                H    t          ddd           t          | d          )Nraise_oserror   zIt is only useful for translating error codes returned by a codec's decode() method, which ImageFile already does automatically.)actionFr   )r   r#   )r   s    r"   r%   r%   S   s:    
G    ue
,
,
,,    t_Tilec                    | d         S )N    )r*   s    r"   	_tilesortr/   ]   s    Q4Kr)   c                  @    e Zd ZU ded<   ded<   dZded<   dZd	ed
<   dS )r+   str
codec_name tuple[int, int, int, int] | Noneextentsr   r   offsetNztuple[Any, ...] | str | Noneargs)__name__
__module____qualname____annotations__r5   r6   r.   r)   r"   r+   r+   b   sE         OOO----FOOOO)-D------r)   c                  l     e Zd ZdZ	 dd fd	Zdd
ZddZd fdZddZddZ	ddZ
ddZddZ xZS ) 	ImageFilez*Base class for image file format handlers.NfpStrOrBytesPath | IO[bytes]filenamestr | bytes | Noner   Nonec                    t                                                       d| _        d | _        g | _        	 d| _        d| _        t          | _        t          |          r6t          |d          | _        t          j        |          | _        d| _        n7t!          t"          t$                   |          | _        ||nd| _        d| _        	 	 |                                  n@# t(          t*          t,          t.          t0          j        f$ r}t5          |          |d }~ww xY w| j        r"| j        d         dk    s| j        d         dk    rd}t5          |          d S # t:          $ r" | j        r| j                                          w xY w)	Nr   r	   r.   rbT Fznot identified by this driver)super__init__
_min_framecustom_mimetypetilereadonlydecoderconfigMAXBLOCKdecodermaxblockr   openr=   osfspathr?   _exclusive_fpr   r   bytes_open
IndexError	TypeErrorKeyErrorEOFErrorstructr   SyntaxErrormodesizeBaseExceptionclose)selfr=   r?   vr!   	__class__s        r"   rF   zImageFile.__init__q   s    	+/!#	*.0'2;; 
	'2tnnDGIbMMDM!%D 2e9b))DG(0(<HH"DM!&D		,

 , , , "!nn!+, 9 '	! 1 1TYq\Q5F5F5!#&&& 6G5F  	 	 	!  		s*   C% $E! %(D"DD""=E! !,Fc                    d S Nr.   r^   s    r"   rS   zImageFile._open       r)   
str | Nonec                    | j         r| j         S | j        6t          j                            | j                                                  S d S rb   )rH   formatr
   MIMEr    upperrc   s    r"   get_format_mimetypezImageFile.get_format_mimetype   sE     	('';":>>$+"3"3"5"5666tr)   state	list[Any]c                X    g | _         t                                          |           d S rb   )rI   rE   __setstate__)r^   rk   r`   s     r"   rn   zImageFile.__setstate__   s(    	U#####r)   c                T    | j         r| j                                         d| _        dS )zCheck file integrityN)rQ   r=   r]   rc   s    r"   verifyzImageFile.verify   s)    
  	GMMOOOr)   Image.core.PixelAccess | Nonec                	   | j         s| j        d}t          |          t          j                            |           }| j         s|S d| _        | j        ot          | j                   dk    }|ot          t          d           }d}t          | d          r
| j
        }d}n| j        j        }t          | d          r
| j        }d}n| j        j        }|r| j         d         \  }}}	}
t          |
t                     r|
ddf}
|d	k    rgt          |
t"                    rQt          |
          d
k    r=|
d         | j        k    r+|
d         t          j        v r	 ddl}t+          | j                  5 }|                    |                                d|j                  | _        ddd           n# 1 swxY w Y   |	| j        d         |
d         z  z   | j                                        k    rd}t          |          t          j                            | j        | j        ||	|
          | _        d}| j        rd| j        _        n$# t<          t          t>          f$ r
 d| _        Y nw xY w|                                   d}| j        s| j         !                    tD                     tG          | dd          }d tI          j%        | j         d           D             | _         | j         D ]f\  }}}	}
 ||	           t          j&        | j        ||
| j'                  }	 |(                    | j        |           |j)        r6|*                    | j                   |+                    d          d         }n|}	 	  || j,                  }n<# tZ          t\          j/        f$ r#}t`          rY d}~nud}t          |          |d}~ww xY w|s*t`          rnQdt          |           d}t          |          ||z   }|+                    |          \  }}|dk     rn||d         }|1                                 O# |1                                 w xY wg | _         || _2        | 3                                 | j4        r | j5        r| j        6                                 d| _        | j        st`          s|dk     rto          |d          t          j                            |           S )z"Load image data based on tile listNzcannot load this imager	   pypy_version_infor   	load_readF	load_seekraw   )accesszbuffer is not large enoughr   keytile_prefixr)   c                >    g | ]\  }}t          |          d          S )r   )list).0_tiless      r"   
<listcomp>z"ImageFile.load.<locals>.<listcomp>  s6       Au UB  r)   c                0    | d         | d         | d         fS )Nr   r	   rw   r.   )rI   s    r"   <lambda>z ImageFile.load.<locals>.<lambda>  s    T!Wd1gtAw,G r)   Tzimage file is truncatedzimage file is truncated (z bytes not processed)r(   )8rI   _imr   r
   loadmapr?   lenhasattrsysrt   r=   readru   seek
isinstancer1   tuplerZ   	_MAPMODESmmaprN   filenoACCESS_READr[   r   
map_bufferimpalettedirtyr   ImportErrorload_preparesortr/   getattr	itertoolsgroupby_getdecoderrK   setimagepulls_fdsetfddecoderM   rT   rX   r   LOAD_TRUNCATED_IMAGEScleanuprJ   load_endrQ   !_close_exclusive_fp_after_loadingr]   r#   )r^   r!   pixeluse_mmaprJ   r   r   decoder_namer4   r5   r6   r   r=   err_codeprefixr   bsens                       r"   r   zImageFile.load   s|    y 	TX-*C#,,  &&y 	L%)=8S^^q%8EGC1D$E$E E 4%% 	 >DHH7<D4%% 	 >DHH7<D 	$26)A,/L'64$$$ $a|%%tU++ &IINNGty((Gu..$KKKdm,, V#'99RYY[[!DDT9#U#UV V V V V V V V V V V V V V V	!tAw 66HH:%cll*#j33$)\64 DG  !H | /-.*&= $ $ $#DHHH$ 	x 6	&INNyN))) T=#66F  ) 1IGG! !  DI 8<y (& (&3gvtV+I|T43E #&$$TWg666' &dg...#*>>##6#6q#9"&>$(D)=$>$>$.#= > > >#8 !>$)EEEE*CC*1#,,A$=> $% 7#8 !7$))J,/FF)J )J )J %( +2#,,$6 !AA*1..*;*;KAx 1uu % !!""A3&8 OO%%%%GOO%%%%	  	$"H 	GMMOOOx 	8 5 	8(Q,,x7777{%%%su   I 45F5)I 5F99I <F9=BI I.-I.&AQ NQ O)O0Q 5OOAQ  Qc                    | j         /t          j                            | j        | j                  | _        | j        dk    r!t          j                            |            d S d S )NP)r   r
   r   newrZ   r[   r   r   rc   s    r"   r   zImageFile.load_prepareC  sV    8jnnTY	::DG9KT""""" r)   c                    d S rb   r.   rc   s    r"   r   zImageFile.load_endK      r)   framer   r   c                    || j         k     s3t          | d          r| j        -|t          | d          | j         z   k    rd}t	          |          |                                 |k    S )N	_n_framesn_framesz attempt to seek outside sequence)rG   r   r   r   rW   tell)r^   r   r!   s      r"   _seek_checkzImageFile._seek_checkW  so    DO## T;//	 $ 59N4JWT:66HHH 5C3--yy{{e##r)   rb   )r=   r>   r?   r@   r   rA   r   rA   )r   re   )rk   rl   r   rA   r   rq   )r   r   r   r   )r7   r8   r9   __doc__rF   rS   rj   rn   rp   r   r   r   r   __classcell__)r`   s   @r"   r<   r<   n   s        44 NR0 0 0 0 0 0 0d      $ $ $ $ $ $   G& G& G& G&R# # # #   $ $ $ $ $ $ $ $r)   r<   c                  8    e Zd Zd	dZej        d
d            ZdS )StubHandlerr   StubImageFiler   rA   c                    d S rb   r.   r^   r   s     r"   rN   zStubHandler.openh  rd   r)   Image.Imagec                    d S rb   r.   r   s     r"   r   zStubHandler.loadk  r   r)   N)r   r   r   rA   )r   r   r   r   )r7   r8   r9   rN   abcabstractmethodr   r.   r)   r"   r   r   g  sL            	     r)   r   c                  *    e Zd ZdZd
dZddZddZd	S )r   z
    Base class for stub image loaders.

    A stub loader is an image loader that can identify files of a
    certain format, but relies on external code to load the file.
    r   rA   c                $    d}t          |          )Nz+StubImageFile subclass must implement _openNotImplementedErrorr^   r!   s     r"   rS   zStubImageFile._openx  s    ;!#&&&r)   rq   c                    |                                  }|d| j         d}t          |          |                    |           }|J |j        | _        |j        | _        |                                S )Nzcannot find loader for this z file)_loadrg   r   r   r`   __dict__)r^   loaderr!   images       r"   r   zStubImageFile.load|  so    >CCCCC#,,D!!   zz||r)   StubHandler | Nonec                $    d}t          |          )z (Hook) Find actual image loader.z+StubImageFile subclass must implement _loadr   r   s     r"   r   zStubImageFile._load  s    ;!#&&&r)   Nr   r   )r   r   )r7   r8   r9   r   rS   r   r   r.   r)   r"   r   r   p  sZ         ' ' ' '
 
 
 
' ' ' ' ' 'r)   r   c                  r    e Zd ZU dZdZdZded<   dZded<   dZded<   d	Z	d	Z
ddZddZddZddZddZdS )Parserzj
    Incremental image parser.  This class implements the standard
    feed/close consumer interface.
    NzImage.Image | Noner   zbytes | Nonedataz,Image.core.ImagingDecoder | PyDecoder | Noner   r   r   rA   c                (    | j         
J d            dS )z
        (Consumer) Reset the parser.  Note that you can only call this
        method immediately after you've created a parser; parser
        instances cannot be reused.
        Nzcannot reuse parsers)r   rc   s    r"   resetzParser.reset  s!     y  "8     r)   rR   c                   | j         rdS | j        || _        n| j        |z   | _        | j        r| j        dk    r^t	          t          | j                  | j                  }| j        |d         | _        | j        |z
  | _        | j        dk    s| j        sdS | j                            | j                  \  }}|dk     r.d| _        d| _         |dk     rd| _        t          |d          dS | j        |d         | _        dS | j        rdS 	 t          j
        | j                  5 }t          j        |          }ddd           n# 1 swxY w Y   t          |d          pt          |d          }|st          |j                  dk    rd| _        n|                                 |j        d         \  }}}	}
g |_        t          j        |j        ||
|j                  | _        | j                            |j        |           |	| _        | j        t          | j                  k    r | j        | j        d         | _        d| _        || _        dS # t*          $ r Y dS w xY w)z
        (Consumer) Feed data to the parser.

        :param data: A string buffer.
        :exception OSError: If the parser failed to parse the image file.
        Nr   r	   Fr(   ru   rt   )finishedr   r   r5   minr   r   r   r#   ioBytesIOr
   rN   r   rI   r   r   rZ   rK   r   r   r   )r^   r   skipr   r   r=   r   flagdoas              r"   feedzParser.feed  s    = 	F9DII	D(DI < 8	 {Q3ty>>4;77 Idee,	"kD0;??$)?F<&&ty11DAq1uu 	 !q55!%DJ&q%8888 F	!""DIIIZ  	  D Z	** (bBB( ( ( ( ( ( ( ( ( ( ( ( ( ( (
 r;//K72{3K3K (3rw<<1,,"&DKK OO%%%!#JAq!Q BG#(#4RWaBDT#U#UDLL))"%333 #$DK{c$)nn44$(Idkmm$<	&'


+    s6   I 'E<I EI EI 
I#"I#c                    | S rb   r.   rc   s    r"   	__enter__zParser.__enter__  s    r)   r6   objectc                .    |                                   d S rb   )r]   r^   r6   s     r"   __exit__zParser.__exit__  s    

r)   r   c                   | j         r;|                     d           dx| _        | _         | j        sd}t	          |          | j        sd}t	          |          | j        rt          j        | j                  5 }	 t          j	        |          | _        | j        
                                 n# | j        
                                 w xY w	 ddd           n# 1 swxY w Y   | j        S )a  
        (Consumer) Close the stream.

        :returns: An image object.
        :exception OSError: If the parser failed to parse the image file either
                            because it cannot be identified or cannot be
                            decoded.
        r)   Nzimage was incompletezcannot parse this image)r   r   r   r   r   r   r   r   r
   rN   r   )r^   r!   r=   s      r"   r]   zParser.close  s    < 	#IIcNNN'++DI= #,cll"z 	+C#,,9 	& DI&& &"&!&BDJJOO%%%%DJOO%%%%%	& & & & & & & & & & & & & & &
 zs*   ;C=B0C0CCC"Cr   )r   rR   r   rA   )r   r   )r6   r   r   rA   )r   r   )r7   r8   r9   r   incrementalr   r:   r   r   r5   r   r   r   r   r   r]   r.   r)   r"   r   r     s          
 K $E$$$$D<@G@@@@FH9 9 9 9J  J  J  J X           r)   r   r   r   r=   	IO[bytes]rI   list[_Tile]bufsizerA   c           	        |                                   t          | d          sd| _        |                    t                     t          t          || j        d         dz            }	 |                                }|	                                 t          | ||||           n7# t          t          j        f$ r}t          | |||d|           Y d}~nd}~ww xY wt          |d          r|	                                 dS dS )zHelper to save image based on tile list

    :param im: Image object.
    :param fp: File object.
    :param tile: Tile list.
    :param bufsize: Optional buffer size
    encoderconfigr.   ry   r      Nflush)r   r   r   r   r/   maxrL   r[   r   r   _encode_tiler   r   UnsupportedOperation)r   r=   rI   r   fhexcs         r"   _saver     s    GGIII2'' II)I
 (GRWQZ!^44G7YY[[



RT7B////B34 7 7 7RT7D#666666667r7 





 s   ,;B( (C>CCr   
int | Noner   BaseException | Nonec                v   |D ]4\  }}}}	|dk    r|                     |           t          j        | j        ||	| j                  }
	 |
                    | j        |           |
j        r0|
                    |           |
	                                d         }nW|r;	 |

                    |          dd          \  }}|                    |           |rn9n|J |
                    ||          }|dk     rt          |d          |	 |
                                 # |
                                 w xY wd S )Nr   r	   Tr(   )r   r
   _getencoderrZ   r   r   r   	pushes_fdr   encode_to_pyfdencodewriteencode_to_filer#   r   )r   r=   rI   r   r   r   encoder_namer4   r5   r6   r   errcoder   s                r"   r   r   3  sj    04  +gvtA::GGFOOO#BG\4AQRR	RUG,,,  Bb!!!!002215 
B"(/w(?(?(C" "!	" " >>>%44RAAG{{"7D999sB  OOGOO1 s   CD  D6r[   rR   c                   |dk    rdS |t           k    r;|                     |          }t          |          |k     rd}t          |          |S g }|}|dk    rX|                     t	          |t                               }|sn-|                    |           |t          |          z  }|dk    Xt          d |D                       |k     rd}t          |          d                    |          S )a  
    Reads large blocks in a safe way.  Unlike fp.read(n), this function
    doesn't trust the user.  If the requested size is larger than
    SAFEBLOCK, the file is read block by block.

    :param fp: File handle.  Must implement a <b>read</b> method.
    :param size: Number of bytes to read.
    :returns: A string containing <i>size</i> bytes of data.

    Raises an OSError if the file is truncated and the read cannot be completed

    r   r)   zTruncated File Readc              3  4   K   | ]}t          |          V  d S rb   )r   )r~   blocks     r"   	<genexpr>z_safe_read.<locals>.<genexpr>s  s(      
*
*%3u::
*
*
*
*
*
*r)   )	SAFEBLOCKr   r   r   r   appendsumjoin)r=   r[   r   r!   blocksremaining_sizer  s          r"   
_safe_readr  V  s    qyysywwt}}t99t'C#,,FN
1

NI6677 	e#e**$ 1

 
*
*6
*
*
***T11#cll88Fr)   c                      e Zd ZddZddZdS )	PyCodecStater   rA   c                >    d| _         d| _        d| _        d| _        d S )Nr   )xsizeysizexoffyoffrc   s    r"   rF   zPyCodecState.__init__z  s"    

				r)   tuple[int, int, int, int]c                V    | j         | j        | j         | j        z   | j        | j        z   fS rb   )r  r  r  r  rc   s    r"   r4   zPyCodecState.extents  s'    y$)TY%;TY=SSSr)   Nr   )r   r  )r7   r8   r9   rF   r4   r.   r)   r"   r  r  y  sB           T T T T T Tr)   r  c                  F    e Zd ZU ded<   dd	ZddZddZddZ	 dddZdS )PyCodeczIO[bytes] | NonefdrZ   r1   r6   r   r   rA   c                    d | _         t                      | _        d | _        || _        |                     |           d S rb   )r   r  rk   r  rZ   init)r^   rZ   r6   s      r"   rF   zPyCodec.__init__  s5    15!^^
			$r)   tuple[Any, ...]c                    || _         dS )z
        Override to perform codec specific initialization

        :param args: Tuple of arg items from the tile entry
        :returns: None
        N)r6   r   s     r"   r  zPyCodec.init  s     			r)   c                    dS )zT
        Override to perform codec specific cleanup

        :returns: None
        Nr.   rc   s    r"   r   zPyCodec.cleanup  s	     	r)   r   c                    || _         dS )z
        Called from ImageFile to set the Python file-like object

        :param fd: A Python file-like object
        :returns: None
        N)r  )r^   r  s     r"   r   zPyCodec.setfd  s     r)   Nr   Image.core.ImagingCorer4   r3   c                :   || _         |r|\  }}}}nd\  }}}}|dk    r*|dk    r$| j         j        \  | j        _        | j        _        n6|| j        _        || j        _        ||z
  | j        _        ||z
  | j        _        | j        j        dk    s| j        j        dk    rd}t          |          | j        j        | j        j        z   | j         j        d         k    s-| j        j        | j        j        z   | j         j        d         k    rd}t          |          dS )z
        Called from ImageFile to set the core output image for the codec

        :param im: A core image object
        :param extents: a 4 tuple of (x0, y0, x1, y1) defining the rectangle
            for this tile
        :returns: None
        )r   r   r   r   r   zSize cannot be negativer	   z Tile cannot extend outside imageN)r   r[   rk   r  r  r  r  
ValueError)r^   r   r4   x0y0x1y1r!   s           r"   r   zPyCodec.setimage  s     	,&RR+RR77rQww15.DJdj.. DJO DJO!BwDJ!BwDJ:q  DJ$4$9$9+CS//! Jtz.a@@z$*/1DGLOCC4CS//! DCr)   )rZ   r1   r6   r   r   rA   )r6   r  r   rA   r   )r  r   r   rA   rb   )r   r  r4   r3   r   rA   )	r7   r8   r9   r:   rF   r  r   r   r   r.   r)   r"   r  r    s                      59'" '" '" '" '" '" '"r)   r  c                  B    e Zd ZdZdZedd            Zdd	Z	 dddZd
S )	PyDecoderz
    Python implementation of a format decoder. Override this class and
    add the decoding logic in the :meth:`decode` method.

    See :ref:`Writing Your Own File Codec in Python<file-codecs-py>`
    Fr   r   c                    | j         S rb   )	_pulls_fdrc   s    r"   r   zPyDecoder.pulls_fd  s
    ~r)   buffer$bytes | Image.SupportsArrayInterfacetuple[int, int]c                $    d}t          |          )a=  
        Override to perform the decoding process.

        :param buffer: A bytes object with the data to be decoded.
        :returns: A tuple of ``(bytes consumed, errcode)``.
            If finished with decoding return -1 for the bytes consumed.
            Err codes are from :data:`.ImageFile.ERRORS`.
        zunavailable in base decoderr   )r^   r*  r!   s      r"   r   zPyDecoder.decode       ,!#&&&r)   Nr.   r   rR   rawmodere   extrar  rA   c                d   |s| j         }t          j        | j         d||          }| j        J |                    | j        | j                                                   |                    |          }|d         dk    rd}t          |          |d         dk    rd}t          |          dS )aS  
        Convenience method to set the internal image from a stream of raw data

        :param data: Bytes to be set
        :param rawmode: The rawmode to be used for the decoder.
            If not specified, it will default to the mode of the image
        :param extra: Extra arguments for the decoder.
        :returns: None
        rv   Nr   znot enough image datar	   zcannot decode image data)	rZ   r
   r   r   r   rk   r4   r   r!  )r^   r   r/  r0  r   r   r!   s          r"   
set_as_rawzPyDecoder.set_as_raw  s      	 iGdi??w"""	

47DJ..00111HHTNNQ4199)CS//!Q4199,CS//! 9r)   r   r   )r*  r+  r   r,  )Nr.   )r   rR   r/  re   r0  r  r   rA   )	r7   r8   r9   r   r)  propertyr   r   r2  r.   r)   r"   r'  r'    sw          I   X
' 
' 
' 
' QS" " " " " " "r)   r'  c                  F    e Zd ZdZdZedd            Zdd	ZddZddZ	dS )	PyEncoderz
    Python implementation of a format encoder. Override this class and
    add the decoding logic in the :meth:`encode` method.

    See :ref:`Writing Your Own File Codec in Python<file-codecs-py>`
    Fr   r   c                    | j         S rb   )
_pushes_fdrc   s    r"   r   zPyEncoder.pushes_fd  s
    r)   r   r   tuple[int, int, bytes]c                $    d}t          |          )a   
        Override to perform the encoding process.

        :param bufsize: Buffer size.
        :returns: A tuple of ``(bytes encoded, errcode, bytes)``.
            If finished with encoding return 1 for the error code.
            Err codes are from :data:`.ImageFile.ERRORS`.
        zunavailable in base encoderr   )r^   r   r!   s      r"   r   zPyEncoder.encode  r.  r)   r,  c                    | j         sdS |                     d          \  }}}|r#| j        J | j                            |           ||fS )z
        If ``pushes_fd`` is ``True``, then this method will be used,
        and ``encode()`` will only be called once.

        :returns: A tuple of ``(bytes consumed, errcode)``.
            Err codes are from :data:`.ImageFile.ERRORS`.
        )r   r   r   )r   r   r  r   )r^   bytes_consumedr  r   s       r"   r   zPyEncoder.encode_to_pyfd"  s^     ~ 	5(,A% 	 7&&&GMM$w&&r)   r   c                    d}|dk    rB|                      |          \  }}}|dk    rt          j        |||d                    |dk    B|S )z
        :param fh: File handle.
        :param bufsize: Buffer size.

        :returns: If finished successfully, return 0.
            Otherwise, return an error code. Err codes are from
            :data:`.ImageFile.ERRORS`.
        r   N)r   rO   r   )r^   r   r   r  statusbufs         r"   r   zPyEncoder.encode_to_file2  s_     ll#';;w#7#7 FGSzzS\*** ll r)   Nr3  )r   r   r   r9  )r   r,  )r   r   r   r   r   r   )
r7   r8   r9   r   r8  r4  r   r   r   r   r.   r)   r"   r6  r6    s          J   X
' 
' 
' 
'' ' ' '      r)   r6  )r   r   r   r   r   r   )r   r   r   r   )r*   r+   r   r   )r   )
r   r   r=   r   rI   r   r   r   r   rA   rb   )r   r   r=   r   rI   r   r   r   r   r   r   r   r   rA   )r=   r   r[   r   r   rR   ))
__future__r   r   r   r   rO   rX   r   typingr   r   r   r   r   rD   r
   
_deprecater   _utilr   _typingr   rL   r  r   r   r#   r%   r/   r+   r<   r   r   r   r   r   r  r  r  r'  r6  r.   r)   r"   <module>rE     s-  : # " " " " " 



 				     				  



 ; ; ; ; ; ; ; ; ; ; ; ; ; ;       ! ! ! ! ! !       (''''''	  N 	%
 
   - - - -   
. . . . .J . . .v$ v$ v$ v$ v$ v$ v$ v$r       ' ' ' ' 'I ' ' '<C C C C C C C CR    D !%         F       FT T T T T T T TK" K" K" K" K" K" K" K"\3" 3" 3" 3" 3" 3" 3" 3"l8 8 8 8 8 8 8 8 8 8r)   