o �J�h���@s�ddlmZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z mZmZmZmZmZddlmZmZmZmZmZddlmZdd lmZdd lmZdd lmZ dd lm!Z"erndd lm#Z#e�$e%�Z&e�'d�j(Z)dZ*dddddddddddddddd�Z+e�'d �Z,ej-Z. d!e.Z/ Gd"d#�d#e �Z0Gd$d%�d%e �Z1dwd)d*�Z2dxdyd.d/�Z3Gd0d1�d1�Z4Gd2d3�d3e5�Z6Gd4d5�d5�Z7Gd6d7�d7e�Z8Gd8d9�d9e4�Z9dzd<d=�Z:Gd>d?�d?ej�Z;d@dAdBdCdDdEdFdFdFdGdHdIdJdKdLdM�Z<d{dRdS�Z=GdTdU�dU�Z>GdVdW�dW�Z?GdXdY�dYe�Z@d|dedf�ZAd}didj�ZBe=dkfd~dmdn�ZCddrds�ZDe�Ee;jFe;e:�e�Ge;jFeC�e�He;jFeB�e�Ie;jFdtdug�e�Je;jFdv�dS)��)� annotationsN)�Callable)�IntEnum)�IO� TYPE_CHECKING�Any� NamedTuple�NoReturn�cast�)�Image� ImageChops� ImageFile� ImagePalette� ImageSequence)�i16be)�i32be)�o8)�o16be)�o32be)�_imagings\w\w\w\ws�PNG  )�1r)�L�L;2)r�L;4)rr)�I;16�I;16B)�RGBr)rzRGB;16B)�P�P;1)r�P;2)r�P;4)rr)�LAr")�RGBAzLA;16B)r#r#)r#zRGBA;16B))r r)�r)�r)�r)�r)r&r$)r'r$)r �)r$r()r%r()r&r()r&r%)r'r%)r&�)r'r)s^�*�*$�@c@seZdZdZ dZ dZdS)�Disposalrr r$N)�__name__� __module__� __qualname__�OP_NONE� OP_BACKGROUND� OP_PREVIOUS�r2r2�PC:\pinokio\api\whisper-webui.git\app\env\lib\site-packages\PIL\PngImagePlugin.pyr+hsr+c@seZdZdZ dZdS)�Blendrr N)r,r-r.� OP_SOURCE�OP_OVERr2r2r2r3r4}s r4�s�bytes�returncCs*t��}|�|t�}|jrd}t|��|S)Nz=Decompressed data too large for PngImagePlugin.MAX_TEXT_CHUNK)�zlib� decompressobj� decompress�MAX_TEXT_CHUNK�unconsumed_tail� ValueError)r7ZdobjZ plaintext�msgr2r2r3�_safe_zlib_decompress�s  rA�data�seed�intcCst�||�d@S)Nl��)r:�crc32)rBrCr2r2r3�_crc32��rFc@sreZdZd&dd�Zd'dd �Zd(d d �Zd)dd�Zd*dd�Zd+dd�Zd,dd�Z d-dd�Z d-dd�Z d.d/d#d$�Z d%S)0� ChunkStream�fp� IO[bytes]r9�NonecCs||_g|_dS�N)rI�queue��selfrIr2r2r3�__init__�� zChunkStream.__init__�tuple[bytes, int, int]cCs�d}|jdus J�|jr|j��\}}}|j�|�n|j�d�}|dd�}|j��}t|�}t|�sCtj sCdt |��d�}t |��|||fS)z.Fetch a new chunk. Returns header information.Nr&r%zbroken PNG file (chunk �)) rIrM�pop�seek�read�tell�i32�is_cidr�LOAD_TRUNCATED_IMAGES�repr� SyntaxError)rO�cid�pos�lengthr7r@r2r2r3rV�s    zChunkStream.readcCs|SrLr2�rOr2r2r3� __enter__�szChunkStream.__enter__�args�objectcGs |��dSrL)�close)rOrbr2r2r3�__exit__�s zChunkStream.__exit__cCsd|_|_dSrL)rMrIr`r2r2r3rd�rGzChunkStream.closer]r8r^rDr_cCs$|jdusJ�|j�|||f�dSrL)rM�append�rOr]r^r_r2r2r3�push�szChunkStream.pushcCs,t�d|||�t|d|�d����||�S)z"Call the appropriate chunk handlerzSTREAM %r %s %sZchunk_�ascii)�logger�debug�getattr�decodergr2r2r3�call�szChunkStream.callrBc Cs�tjr|dd?d@r|�||�dS|jdusJ�z"t|t|��}t|j�d��}||kr:dt|��d�}t|��WdSt j yV}z dt|��d�}t|�|�d}~ww) zRead and verify checksumr�r Nr%z(broken PNG file (bad header checksum in rSz(broken PNG file (incomplete checksum in ) rrZ�crc_skiprIrFrXrVr[r\�struct�error)rOr]rBZcrc1Zcrc2r@�er2r2r3�crc�s  � ��zChunkStream.crccCs|jdusJ�|j�d�dS)z Read checksumNr%)rIrV)rOr]rBr2r2r3rp�szChunkStream.crc_skip�IEND�endchunk� list[bytes]c Cs�g}|jdus J� z |��\}}}Wntjy'}zd}t|�|�d}~ww||kr/ |S|�|t�|j|��|�|�q )NTztruncated PNG file) rIrVrqrr�OSErrorrtr� _safe_readrf)rOrvZcidsr]r^r_rsr@r2r2r3�verify�s  ��� �zChunkStream.verifyN�rIrJr9rK)r9rR)r9rH)rbrcr9rK�r9rK)r]r8r^rDr_rDr9rK)r]r8r^rDr_rDr9r8)r]r8rBr8r9rK)ru)rvr8r9rw) r,r-r.rPrVrarerdrhrnrtrprzr2r2r2r3rH�s         rHc@s4eZdZUdZded<ded<e d d d d ��ZdS)�iTXtzq Subclass of string to allow iTXt chunks to look like strings while keeping their extra information zstr | bytes | None�lang�tkeyN�text�str� str | Noner9cCst�||�}||_||_|S)z� :param cls: the class to use when creating the instance :param text: value for this key :param lang: language code :param tkey: UTF-8 version of the key name )r��__new__r~r)�clsr�r~rrOr2r2r3r�s z iTXt.__new__)NN)r�r�r~r�rr�r9r})r,r-r.�__doc__�__annotations__� staticmethodr�r2r2r2r3r}�s �r}c@sFeZdZdZddd�Zddd d �Z   dddd�Z dd dd�ZdS)!�PngInfoz< PNG chunk container (for use with save(pnginfo=)) r9rKcCs g|_dSrL��chunksr`r2r2r3rPs zPngInfo.__init__Fr]r8rB� after_idat�boolcCs|j�|||f�dS)a"Appends an arbitrary chunk. Use with caution. :param cid: a byte string, 4 bytes long. :param data: a byte string of the encoded data :param after_idat: for use with private chunks. Whether the chunk should be written after IDAT N)r�rf)rOr]rBr�r2r2r3�adds z PngInfo.add��key� str | bytes�valuer~r�zipcCs�t|t�s |�dd�}t|t�s|�dd�}t|t�s!|�dd�}t|t�s,|�dd�}|rE|�d|d|d|dt�|��dS|�d|d|d|d|�dS) z�Appends an iTXt chunk. :param key: latin-1 encodable text key name :param value: value for this key :param lang: language code :param tkey: UTF-8 version of the key name :param zip: compression flag �latin-1�strict�utf-8�iTXts�sN)� isinstancer8�encoder�r:�compress)rOr�r�r~rr�r2r2r3�add_itxt*s         �(zPngInfo.add_itxt�str | bytes | iTXtcCs�t|t�r"|j|||jdur|jnd|jdur|j|d�Sd|d�St|t�sAz|�dd�}Wnty@|j|||d�YSwt|t�sL|�dd�}|r]|�d|dt � |��dS|�d|d |�dS) z�Appends a text chunk. :param key: latin-1 encodable text key name :param value: value for this key, text or an :py:class:`PIL.PngImagePlugin.iTXt` instance :param zip: compression flag N�)r�r�r��zTXt��tEXtr�) r�r}r�r~rr8r�� UnicodeErrorr�r:r�)rOr�r�r�r2r2r3�add_textMs, ��  �  zPngInfo.add_textNr|�F)r]r8rBr8r�r�r9rK)r�r�F) r�r�r�r�r~r�rr�r�r�r9rK)r�r�r�r�r�r�r9rK)r,r-r.r�rPr�r�r�r2r2r2r3r�s   �$�r�c@�&eZdZUded<ded<ded<dS)� _RewindStatez dict[str | tuple[int, int], Any]�infozlist[ImageFile._Tile]�tilez int | None�seq_numN�r,r-r.r�r2r2r2r3r�u�  r�cs�eZdZd5�fdd� Zd6d d �Zd7d d �Zd7d d�Zd8dd�Zd8dd�Zd9dd�Z d9dd�Z d8dd�Z d8dd�Z d8dd �Z d8d!d"�Zd8d#d$�Zd8d%d&�Zd8d'd(�Zd8d)d*�Zd8d+d,�Zd8d-d.�Zd8d/d0�Zd8d1d2�Zd8d3d4�Z�ZS):� PngStreamrIrJr9rKcsZt��|�i|_i|_d|_d|_g|_d|_d|_d|_ d|_ t igd�|_ d|_ dS)N�rrr�r)�superrP�im_info�im_text�im_size�im_mode�im_tile� im_palette�im_custom_mimetype� im_n_frames�_seq_numr�� rewind_state� text_memoryrN�� __class__r2r3rP|s  zPngStream.__init__�chunklenrDcCs2|j|7_|jtkrd|j�d�}t|��dS)Nz%Too much memory used in text chunks: z>MAX_TEXT_MEMORY)r��MAX_TEXT_MEMORYr?)rOr�r@r2r2r3�check_text_memory�s ���zPngStream.check_text_memorycCst|j��|j|j�|_dSrL)r�r��copyr�r�r�r`r2r2r3� save_rewind�s  �zPngStream.save_rewindcCs&|jj��|_|jj|_|jj|_dSrL)r�r�r�r�r�r�r�r�r`r2r2r3�rewind�s zPngStream.rewindr^r_r8cCs�|jdusJ�t�|j|�}|�d�}t�d|d|��||d}t�d|�|dkr7d|�d�}t|��z t||dd��}WntyStj rPd}n�Yn t j y^d}Ynw||j d <|S) Nr�ziCCP profile name %rr zCompression method %sr�Unknown compression method z in iCCP chunkr$� icc_profile) rIrry�findrjrkr\rAr?rZr:rrr�)rOr^r_r7�i� comp_methodr@r�r2r2r3� chunk_iCCP�s*     �� zPngStream.chunk_iCCPcCs�|jdusJ�t�|j|�}|dkrtjr|Sd}t|��t|d�t|d�f|_zt|d|df\|_|_ Wn t yAYnw|drKd|j d <|d rUd }t |��|S) N� zTruncated IHDR chunkrr%r&� � r � interlace� zunknown filter category) rIrryrZr?rXr��_MODESr�� im_rawmode� Exceptionr�r\�rOr^r_r7r@r2r2r3� chunk_IHDR�s&  � zPngStream.chunk_IHDRr cCsld|jvrt�d|jd||j�g}n|jdurd|jd<t�dd|j||j�g}||_||_d}t|��)N�bboxr�T� default_imager�zimage data found) r�r�_Tiler�r�r�r�Zim_idat�EOFError)rOr^r_r�r@r2r2r3� chunk_IDAT�s   zPngStream.chunk_IDATcCs d}t|��)Nzend of PNG image)r�)rOr^r_r@r2r2r3� chunk_IEND�szPngStream.chunk_IENDcCs4|jdusJ�t�|j|�}|jdkrd|f|_|S)Nrr)rIrryr�r��rOr^r_r7r2r2r3� chunk_PLTE�s   zPngStream.chunk_PLTEcCs�|jdusJ�t�|j|�}|jdkr/t�|�r(|�d�}|dkr&||jd<|S||jd<|S|jdvr=t|�|jd<|S|jdkrRt|�t|d�t|d�f|jd<|S) Nrr�r� transparency)rrrrr$r%) rIrryr��_simple_palette�matchr�r��i16)rOr^r_r7r�r2r2r3� chunk_tRNS�s      � � � zPngStream.chunk_tRNScCs2|jdusJ�t�|j|�}t|�d|jd<|S)N�j�@�gamma)rIrryrXr�r�r2r2r3� chunk_gAMAszPngStream.chunk_gAMAcCsP|jdusJ�t�|j|�}t�dt|�d|�}tdd�|D��|jd<|S)Nz>%dIr%css�|]}|dVqdS)r�Nr2)�.0�eltr2r2r3� <genexpr>��z'PngStream.chunk_cHRM.<locals>.<genexpr>Z chromaticity)rIrryrq�unpack�len�tupler�)rOr^r_r7Zraw_valsr2r2r3� chunk_cHRMs zPngStream.chunk_cHRMcCsL|jdusJ�t�|j|�}|dkrtjr|Sd}t|��|d|jd<|S)Nr zTruncated sRGB chunkr�srgb)rIrryrZr?r�r�r2r2r3� chunk_sRGBszPngStream.chunk_sRGBc Cs�|jdusJ�t�|j|�}|dkrtjr|Sd}t|��t|d�t|d�}}|d}|dkr?|d|df}||jd<|S|dkrJ||f|jd <|S) Nr�zTruncated pHYs chunkrr%r&r � F%u�?�dpi�aspect)rIrryrZr?rXr�) rOr^r_r7r@�px�py�unitr�r2r2r3� chunk_pHYs#s  �zPngStream.chunk_pHYscCs�|jdusJ�t�|j|�}z |�dd�\}}Wn ty%|}d}Ynw|rK|�dd�}|�dd�}|dkr:|n||j|<||j|<|�t |��|S)Nr�r r�r�r��replacesexif) rIrry�splitr?rmr�r�r�r�)rOr^r_r7�k�v�k_str�v_strr2r2r3� chunk_tEXt5s �   zPngStream.chunk_tEXtc Cs|jdusJ�t�|j|�}z |�dd�\}}Wn ty%|}d}Ynw|r-|d}nd}|dkr=d|�d�}t|��z t|dd��}WntyWtjrTd}n�Yn tj ybd}Ynw|r�|� dd�}|� dd �} | |j |<|j |<|� t| ��|S) Nr�r r�rr�z in zTXt chunkr�r�r�)rIrryr�r?r\rArZr:rrrmr�r�r�r�) rOr^r_r7r�r�r�r@r�r�r2r2r3� chunk_zTXtIs< �   ��  zPngStream.chunk_zTXtcCs�|jdusJ�t�|j|�}}z |�dd�\}}Wn ty%|YSwt|�dkr.|S|d|d|dd�}}}z |�dd�\}} } Wn tyT|YSw|dkr�|dkr~zt| �} Wntyrtjrq|YS�tj y}|YSw|S|dkr�| |j d<z|� dd�} |� d d�} | � d d�} | � d d�}Wn t y�|YSwt || | �|j | <|j| <|�t|��|S) Nr�r r$rsXML:com.adobe.xmp�xmpr�r�r�)rIrryr�r?r�rArZr:rrr�rmr�r}r�r�)rOr^r_�rr7r��cf�cmr~�tkr�r�Zlang_strZtk_strr�r2r2r3� chunk_iTXtlsP �   �  �     �zPngStream.chunk_iTXtcCs.|jdusJ�t�|j|�}d||jd<|S)N�Exif�exif)rIrryr�r�r2r2r3� chunk_eXIf�szPngStream.chunk_eXIfcCs�|jdusJ�t�|j|�}|dkrtjr|Sd}t|��|jdur,d|_t�d�|St|�}|dks8|dkr?t�d�|S||_t|d�|j d<d|_ |S) Nr&z"APNG contains truncated acTL chunkz4Invalid APNG, will use default PNG image if possiblerlr%�loopz image/apng) rIrryrZr?r��warnings�warnrXr�r�)rOr^r_r7r@�n_framesr2r2r3� chunk_acTL�s&   zPngStream.chunk_acTLcCsN|jdusJ�t�|j|�}|dkrtjr|Sd}t|��t|�}|jdur*|dks6|jdur<|j|dkr<d}t|��||_t|d�t|d�}}t|d�t|d �}} |j\} } ||| ksf| || krld }t|��|| ||| |f|j d <t |d �t |d �} } | dkr�d} t | �t | �d|j d<|d|j d<|d|j d<|S)N�z"APNG contains truncated fcTL chunkrr �#APNG contains frame sequence errorsr%r&r�r'zAPNG contains invalid framesr����d���duration��disposal��blend) rIrryrZr?rXr�r\r�r�r��float)rOr^r_r7r@�seq�width�heightr�r�Zim_wZim_hZ delay_numZ delay_denr2r2r3� chunk_fcTL�s6 zPngStream.chunk_fcTLcCs�|jdusJ�|dkrtjrt�|j|�}|Sd}t|��t�|jd�}t|�}|j|dkr5d}t|��||_|�|d|d�S)Nr%z"APNG contains truncated fDAT chunkr r ) rIrrZryr?rXr�r\r�)rOr^r_r7r@rr2r2r3� chunk_fdAT�szPngStream.chunk_fdATr{)r�rDr9rKr|)r^rDr_rDr9r8)r^rDr_rDr9r )r,r-r.rPr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr� __classcell__r2r2r�r3r�{s,             # +  r��prefixr�cCs|dd�tkS)Nr&)�_MAGIC)rr2r2r3�_accept�rGrcs�eZdZdZdZd%dd�Zed&dd ��Zd%d d �Zd'dd�Z d(d)dd�Z d*dd�Z d%dd�Z d+dd�Z d%dd�Zd,d d!�Zd-�fd#d$� Z�ZS).� PngImageFile�PNGzPortable network graphicsr9rKc Cs�t|j�d��sd}t|��|j|_d|_g|_t|j�|_ |j��\}}}z |j� |||�}Wn0t y:Yn0t yat � d|||�t�|j|�}|dd���r_|j�||f�Ynw|j�||�q|jj|_|jj|_|jj|_d|_|jj|_|jj|_|jjp�d|_|j� dd �|_!|jj"r�|jj"\}}t#�$||�|_%|d kr�|d |_&n||_&|jjdur�d |_'|j�(�|j&|_)|j�*�|_+|j!r�|jd7_|�,d�|jdk|_-dS) Nr&znot a PNG filerT�%r %s %s (unknown)r r$r�F�fdATr%).rrIrVr\�_fp�_PngImageFile__frame�private_chunksr��pngrnr��AttributeErrorrjrkrry�islowerrfrtr��_moder��_sizer�r��_textr�r�r�Zcustom_mimetyper�r�getr�r�r�raw�palette�_PngImageFile__prepare_idat�!_close_exclusive_fp_after_loadingr��_PngImageFile__rewind_idatrW�_PngImageFile__rewind�_seek� is_animated)rOr@r]r^r_r7�rawmoderBr2r2r3�_open�sZ   ���           zPngImageFile._open�dict[str, str | iTXt]cCsR|jdur|jr|j}|�|jd�|��|jr|�|�|jdus&J�|jS)Nr )r)r2r"rUr�load)rO�framer2r2r3r�5s  zPngImageFile.textcCsl|jdur d}t|��|j�|jddd�|jdusJ�|j��|j��|jr1|j��d|_dS)zVerify PNG fileNz)verify must be called directly after openrr$r&)rI� RuntimeErrorrUr�r$rzrd� _exclusive_fp)rOr@r2r2r3rzEs     zPngImageFile.verifyr7rDc Cs�|�|�sdS||jkr|�dd�|j}t|jd|d�D]!}z|�|�Wqty@}z |�|�d}t|�|�d}~wwdS)NrTr zno more images in APNG file)Z _seek_checkr"r1�ranger�rU)rOr7Z last_frame�frsr@r2r2r3rUWs     ���zPngImageFile.seekFr�r�c Cs|jdusJ�|d}|dkrX|r2|j�|j�|j��|j|_d|_|jj|_ |jj |_ |j|_ d|_ d|_|j �dd�|_|j �d�|_|j �d�|_|j �d�}d|_n�||jdkrhd|��}t|��|��|jrx|j�|j|j�|j��|_ |j|_ |jr�t�|j |j�d|_d} |j �d �z |j��\}}}Wn tjtfy�Yndw|d kr�d }t |��|d kr�|r�d}t|��d }z |j�!|||�Wn?t"y�Yn8t y�|dkr�|d 8}|r�||_Yn#t�|j |�Ynt#�yt$�%d|||�t�|j |�Ynwq�||_|jj |_ |j �d�|_|j �d�|_|j �d�}|j �s9d}t |��|�r?||_|j du�rP|jt&j'k�rPt&j(|_d|_|jt&j'k�rq|j �ro|j ��|_|�)|j|j�|_dSdS|jt&j(k�r�t*j+�,|j-|j.�|_|�)|j|j�|_dSdS)Nrr�Frrr�r zcannot seek to frame Tr%ruzNo more images in APNG file�fcTLzAPNG missing frame datar rzimage not found in APNG frame)/r$r!rUr0r�r/r-�_imr�r�r�r�rI�_prev_im�disposer*r�Z dispose_op�blend_opr"r?r6�im�paste�dispose_extentr�rryrVrqrrr\r�rn�UnicodeDecodeErrorr%rjrkr+r1r0�_cropr �core�fill�mode�size) rOr7r�rCr@Z frame_startr]r^r_r2r2r3r1fs�       �  ��!   ��zPngImageFile._seekcCs|jSrL)r"r`r2r2r3rW�szPngImageFile.tellcCs0|j�d�r |jd|_|j|_tj�|�dS)z"internal: prepare to read PNG filer�)r N)r�r*Z decoderconfigr-�_PngImageFile__idatr� load_preparer`r2r2r3rK�s  zPngImageFile.load_prepare� read_bytesr8cCs�|jdusJ�|jdkrN|j�d�|j��\}}}|dvr(|j�|||�dS|dkrFz |j�|||�Wn ty?Ynw|d|_n||_|jdks |dkrV|j}nt||j�}|j||_|j�|�S)zinternal: read more image dataNrr%)�IDATsDDATr r�r )r$rJrIrVrhrnr��min)rOrLr]r^r_r2r2r3� load_read�s*   �  �   zPngImageFile.load_readc Csf|jdusJ�|jdkr|j�|j� |j�d�z |j��\}}}Wn tjtfy0Yn�w|dkr6n�|dkrI|jrId|_|j� |||�noz |j� |||�Wnct y\Yn\t y�|dkrj|d8}z t �|j|�Wnty�}z t jr�WYd}~Yn3|�d}~wwYn)ty�t�d|||�t �|j|�}|d d ���r�|j�||df�Ynwq|jj|_|js�|j��d|_dS|j�r/|jtjk�r1|�|j|j �}|jj!d kr�d |j"vr�|�#d |j"d �}n.|jj!dk�rd |j"v�r|j"d }t$|t%��r|�&|�n t$|t'��r|�(|�|�)d �}|j�*||j |�|j|_dSdSdS)z%internal: finished reading image dataNrTr%rur<r rr r$rr�r#r)+r$rJrIrVrqrrr\r2r-rhrnrDr�rryrxrZr%rjrkr&r#rfr�r)rdr>r@r4r6rErArCrHr��convert_transparentr�r8�putpalettealphasrD�putpalettealpha�convertrB) rOr]r^r_rsr7�updated�mask�tr2r2r3�load_end�sx  �  ��� ��� #   �       �zPngImageFile.load_end�dict[int, Any] | NonecCs6d|jvr |��d|jvrd|jvrdS|����S)NrzRaw profile type exif)r�r6�getexif�_get_merged_dictr`r2r2r3�_getexif4s  zPngImageFile._getexif� Image.Exifcsd|jvr |��t���S)Nr)r�r6r�rYr`r�r2r3rY;s  zPngImageFile.getexifr|)r9r5)r7rDr9rKr�)r7rDr�r�r9rK)r9rD)rLrDr9r8)r9rX)r9r\)r,r-r.�format�format_descriptionr4�propertyr�rzrUr1rWrKrOrWr[rYrr2r2r�r3r�s C     b  " >r)r�r�)�L;1r`r�)r�r�)r�r�)r�r�)r"rdrc)r�r�)rr`�)r rbrf)r!rcrf)rrdrf)rrdrb)r#rd�)rrarrrr"�Irrrr r!rrr#rIrJr]rKcGsJd�|�}|�tt|��|�|�|�t|t|��}|�t|��dS)z'Write a PNG chunk (including CRC field)r�N)�join�write�o32r�rF�rIr]rBZ byte_datartr2r2r3�putchunkYs  rmc@s eZdZddd�Zdd d �Zd S)�_idatrIrJ�chunk�Callable[..., None]r9rKcCs||_||_dSrL)rIro)rOrIror2r2r3rPgrQz_idat.__init__rBr8cCs|�|jd|�dS)NrM)rorI�rOrBr2r2r3rjk�z _idat.writeN)rIrJrorpr9rK�rBr8r9rK�r,r-r.rPrjr2r2r2r3rnds rnc@s eZdZdd d �Zdd d�ZdS)�_fdatrIrJrorpr�rDr9rKcCs||_||_||_dSrL)rIror�)rOrIror�r2r2r3rPrs z_fdat.__init__rBr8cCs*|�|jdt|j�|�|jd7_dS)Nr r )rorIrkr�rqr2r2r3rjwsz _fdat.writeN)rIrJrorpr�rDr9rKrsrtr2r2r2r3ruos ruc@r�)�_Frame� Image.ImagerAz tuple[int, int, int, int] | Noner�zdict[str, Any]� encoderinfoNr�r2r2r2r3rv|r�rvrArwrorprHr�r3r��Image.Image | None� append_images�list[Image.Image]c CsN|j�d�}|j�d|j�dd��}|j�d|j�dtj��} |j�d|j�dtj��} |r4t�|�} nt�|g|�} g} d} | D]�}t � |�D]�}|j |krT|� �}n|� |�}|j� �}t|ttf�rl|| |d<n|dur|d|jvr||jd|d<t| ttf�r�| | |d<t| ttf�r�| | |d<| d7} | �r*| d}|j�d�}|j�d�}|tjkr�t| �dkr�tj}|tjkr�|j� �}tj�d |jd �}|j}|r�|�|�}nd |j}|�||�n|tjkr�| d j}n|j}t�|� d �|� d ��}|jd d�}|�s)||�d�k�r)||�d�k�r)d|v�r)|jd|d7<qHnd}| �t |||��qHqAt| �dk�rF|�sF| djS||dt!t| ��t!|��|�rz|j |k�ra|� |�}t"�#|t$t%t&t'||��t"�(dd |jd|�g�d}t)| �D]�\}}|j}|j�s�d |j}n|j}|�|�}|j}|j}t*t+|�dd���}|�d| �}|�d| �}||dt!|�t!|d�t!|d�t!|d�t!|d�t,|�t,d�t-|�t-|�� |d7}|dk�r|�st"�#|t$t%t&t'||��t"�(dd |jd|�g��q�t.|||�}t"�#|t$t%t&|�t"�(dd |jd|�g�|j/}�q�dS)Nrrrrrr �����r$r#)rrrrr������F)� alpha_onlysacTLr�r<r )0rxr*r�r+r/r4r5� itertools�chainr�IteratorrHr�rSr��listr�r1r�r0rAr rFrGrIr��croprBr Zsubtract_modulo�getbboxrfrvrkr�_saver rr8rnr�� enumeraterD�round�o16rrur�) rArIrorHr3r�rzrrrrr�Z im_framesZ frame_count�im_seq�im_framerx�previousZ prev_disposalZ prev_blendZbase_imr?r��deltar�r7Z frame_datarIZframe_durationZframe_disposalZ frame_blendZ fdat_chunksr2r2r3�_write_multiple_frames�s�                � � ��4  �  �        � �  � r��filenamer�cCst|||dd�dS)NT)�save_all)r�)rArIr�r2r2r3� _save_allrrr�Fr�c( sV|rU|j�d|j�d��}t�}t��|j�dg�}t�|g|�D]}t�|�D]} |�| j ���| j �q(q!dD]} | |vrBnq:|� �} t �fdd�t d�D��} n|j } |j } | } | dkr�d|jvrqtd |jd>d �} n|jr�ttt|j��d �d d �d �} nd } | d kr�| dkr�d }n | d kr�d}nd }| d|��7} |j�dd�|j�dd�|j�dd�|j�dd�f|_z t| \}}}Wnty�}z d| �d�}t|�|�d}~ww|�t�||dt| d�t| d �||ddd� gd�}|j�d|j�d��}|�r d}|dt�|�}||d|�|�d �|j�d!�}|�rxgd"�}|jD]G}|dd�\}}||v�rL|�|�||||��q0||v�rY||||��q0|d d����rvt|�d k�ol|d}|�sv||||��q0|j dk�r�| d }|j� d#�d|�}t|�|k�r�|d7}t|�|k�s�||d$|�|j�d%|j�d%d��}|�s�|dk�r*|j dk�r�| } t!|t"��r�||d&|d| ��nztdtd'|��}d(|d}!||d&|!d| ��na|j d)v�rtdtd*|��}||d&t#|��nJ|j d#k�r|\}"}#}$||d&t#|"�t#|#�t#|$��n.d%|jv�r)d+}t|��n!|j dk�rK|j�$�d,k�rK|j� d,d-�}!| } ||d&|!d| ��|j�d.�}%|%�rp||d/tt%|%dd0d1��tt%|%d d0d1��d2�|�r�d3d4g}|jD]}|dd�\}}||v�r�|�|�||||��qz|j�d5�}&|&�r�t!|&t&j'��r�|&�(d6�}&|&�)d7��r�|&d8d�}&||d9|&�|}'|�r�t*|||| |||�}'|'�r�t+�,|'t-t.t"t/||��t+�0d:d;|'j d|�g�|�r|jD](}|dd�\}}|d d����rt|�d k�o |d}|�r||||��q�||d<d�t1|d=��r)|�2�dSdS)>Nr�rz)r#rrc3s&�|]�t�fdd��D��VqdS)c3s�|]}|�VqdSrLr2)r�� frame_size�r�r2r3r�-r�z"_save.<locals>.<genexpr>.<genexpr>N)�max)r���sizesr�r3r�-s�$z_save.<locals>.<genexpr>r$r�bitsr �r(r'r%�;�optimizeF�compress_levelr|� compress_type� dictionaryr�zcannot write mode z as PNGsIHDRrr�)scHRMsgAMAssBIT�sRGBstIMEr�s ICC Profiler�siCCPr��pnginfo)ssPLTr�r�r�rsPLTEr�stRNS����)rrrhri��z%cannot use transparency for this moder#�Ar�spHYsr�g�?r`sbKGDshISTrr&rr)seXIfr�r�ru�flush)3rxr*r��setrr�rr�r�rHrIrTr�r:rNr,r�r��getdata� encoderconfig� _OUTMODES�KeyErrorrxrjrrkr:r��remover�r&rA� getpaletter�r8r��getpalettemoderDr �Exif�tobytes� startswithr�rr�r rrnr��hasattrr�)(rArIr�ror�r��modesrzr�r�rHrIZoutmode�colorsr�r3Z bit_depth� color_typersr@r�Zicc�namerBr�Zchunks_multiple_allowedZ info_chunkr]r�Zpalette_byte_number� palette_bytesr�Z alpha_bytes�alpha�red�green�bluer�rZ single_imr2r�r3r�s:  � �� $    �  ��   �         � �       " � �    �     ��  �   �r��paramsr� list[tuple[bytes, bytes, bytes]]c sJddlm}g�d�fd d � }|�}z||_t||d |�W|`�S|`w)z4Return a list of PNG chunks representing this image.r)�BytesIOrIrJr]r8rBr9rKcs0d�|�}tt|t|���}��|||f�dS)Nr�)rirkrFrfrlr�r2r3rf�s zgetchunks.<locals>.appendr�N�rIrJr]r8rBr8r9rK)�ior�rxr�)rAr�r�rfrIr2r�r3� getchunks�s �r�z.pngz.apngz image/png)r7r8r9r8)r)rBr8rCrDr9rD)rr8r9r�r�)rArwrIrJrorprHr�r3r�r�ryrzr{r9ry)rArwrIrJr�r�r9rK) rArwrIrJr�r�rorpr�r�r9rK)rArwr�rr9r�)K� __future__rr�logging�rerqrr:�collections.abcr�enumr�typingrrrrr r r�r r rrr�_binaryrr�rrXrrr�rrkr� getLoggerr,rj�compiler�rYrr�r�Z SAFEBLOCKr=r�r+r4rArFrHr�r}r�r�r�rrr�rmrnrurvr�r�r�r�� register_openr]� register_save�register_save_all�register_extensions� register_mimer2r2r2r3�<module>s�            �   ^` m[�      � V
Memory