§
    aÒ³g+A  ã                  óœ  — d Z ddlm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 ddlmZmZ  G d	„ d
e¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Zd7d„Z	 d8d9d„Zd:d„Zd:d„Z G d„ de¦  «        Zd;d „Z G d!„ d"ej        ¦  «        Z G d#„ d$ej        ¦  «        Z G d%„ d&e¦  «        Z G d'„ d(e¦  «        Z G d)„ d*ej        ¦  «        Zd<d2„Z  ej!        ej"        ee¦  «          ej#        ej"        d3¦  «          ej$        d4e¦  «          ej$        d5e¦  «          ej%        ej"        e ¦  «          ej&        d6e¦  «         dS )=aÑ  
Blizzard Mipmap Format (.blp)
Jerome Leclanche <jerome@leclan.ch>

The contents of this file are hereby released in the public domain (CC0)
Full text of the CC0 license:
  https://creativecommons.org/publicdomain/zero/1.0/

BLP1 files, used mostly in Warcraft III, are not fully supported.
All types of BLP2 files used in World of Warcraft are supported.

The BLP file structure consists of a header, up to 16 mipmaps of the
texture

Texture sizes must be powers of two, though the two dimensions do
not have to be equal; 512x256 is valid, but 512x200 is not.
The first mipmap (mipmap #0) is the full size image; each subsequent
mipmap halves both dimensions. The final mipmap should be 1x1.

BLP files come in many different flavours:
* JPEG-compressed (type == 0) - only supported for BLP1.
* RAW images (type == 1, encoding == 1). Each mipmap is stored as an
  array of 8-bit values, one per pixel, left to right, top to bottom.
  Each value is an index to the palette.
* DXT-compressed (type == 1, encoding == 2):
- DXT1 compression is used if alpha_encoding == 0.
  - An additional alpha bit is used if alpha_depth == 1.
  - DXT3 compression is used if alpha_encoding == 1.
  - DXT5 compression is used if alpha_encoding == 7.
é    )ÚannotationsN)ÚIntEnum)ÚBytesIO)ÚIOé   )ÚImageÚ	ImageFilec                  ó   — e Zd ZdZdS )ÚFormatr   N)Ú__name__Ú
__module__Ú__qualname__ÚJPEG© ó    úP/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/PIL/BlpImagePlugin.pyr   r   ,   s   € € € € € Ø€D€D€Dr   r   c                  ó   — e Zd ZdZdZdZdS )ÚEncodingr   é   é   N)r   r   r   ÚUNCOMPRESSEDÚDXTÚUNCOMPRESSED_RAW_BGRAr   r   r   r   r   0   s    € € € € € Ø€LØ
€CØÐÐÐr   r   c                  ó   — e Zd ZdZdZdZdS )ÚAlphaEncodingr   r   é   N)r   r   r   ÚDXT1ÚDXT3ÚDXT5r   r   r   r   r   6   s   € € € € € Ø€DØ€DØ€D€D€Dr   r   ÚiÚintÚreturnútuple[int, int, int]c                ó<   — | dz	  dz  dz  | dz	  dz  dz  | dz  dz  fS )Né   é   r   é   é?   r   r   )r    s    r   Ú
unpack_565r)   <   s2   € Ø�"‰W˜Ñ Ñ" a¨1¡f°¡_¸Ñ$:¸QÀ¹XÈ!¹OÐKÐKr   FÚdataÚbytesÚalphaÚboolú1tuple[bytearray, bytearray, bytearray, bytearray]c           	     óT  — t          | ¦  «        dz  }t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         f}t          |¦  «        D �]N}|dz  }t          j        d| |¦  «        \  }}}t          |¦  «        \  }	}
}t          |¦  «        \  }}}t          d¦  «        D ]ö}t          d¦  «        D ]ä}|dz  }|dz	  }d}|dk    r|	|
|}}}n‰|dk    r|||}}}n||dk    rA||k    r"d|	z  |z   dz  }d|
z  |z   dz  }d|z  |z   dz  }nN|	|z   dz  }|
|z   dz  }||z   dz  }n5|dk    r/||k    r"d|z  |	z   dz  }d|z  |
z   dz  }d|z  |z   dz  }nd	\  }}}}|r ||                              ||||g¦  «         ŒÆ||                              |||g¦  «         ŒåŒ÷�ŒP|S )
úE
    input: one "row" of data (i.e. will produce 4*width pixels)
    é   z<HHIé   r   r   éÿ   r   r   )r   r   r   r   ©ÚlenÚ	bytearrayÚrangeÚstructÚunpack_fromr)   Úextend)r*   r,   ÚblocksÚretÚblock_indexÚidxÚcolor0Úcolor1ÚbitsÚr0Úg0Úb0Úr1Úg1Úb1Újr    ÚcontrolÚaÚrÚgÚbs                         r   Údecode_dxt1rN   @   s)  € õ �‰YŒY˜!‰^€FÝ‰;Œ;�	™œ¥Y¡[¤[µ)±+´+Ð
>€Cå˜V‘}”}ð *-ñ *-ˆà˜A‰oˆÝ%Ô1°&¸$ÀÑDÔDÑˆ�˜å Ñ'Ô'‰
ˆˆB�Ý Ñ'Ô'‰
ˆˆB�õ �q‘”ð  	-ð  	-ˆAÝ˜1‘X”Xð -ð -�ð  ™(�Ø˜q‘y�à�Ø˜a’<�<Ø  " b˜!�q�A�AØ ’\�\Ø  " b˜!�q�A�AØ ’\�\Ø ’�Ø ™V b™[¨QÑ.˜Ø ™V b™[¨QÑ.˜Ø ™V b™[¨QÑ.˜˜à "™W¨™N˜Ø "™W¨™N˜Ø "™W¨™N˜˜Ø ’\�\Ø ’�Ø ™V b™[¨QÑ.˜Ø ™V b™[¨QÑ.˜Ø ™V b™[¨QÑ.˜˜à%/™
˜˜1˜a àð -Ø˜”F—M’M 1 a¨¨A ,Ñ/Ô/Ð/Ð/à˜”F—M’M 1 a¨ )Ñ,Ô,Ð,Ð,ð?-ñ 	-ðD €Jr   c           	     óŠ  — t          | ¦  «        dz  }t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         f}t          |¦  «        D �]i}|dz  }| ||dz   …         }t          j        d|¦  «        }t          j        d|d¦  «        \  }}t          j        d|d¦  «        \  }	t          |¦  «        \  }
}}t          |¦  «        \  }}}t          d¦  «        D ]Ø}d}t          d¦  «        D ]Ä}d|z  |z   d	z  }||         }|rd}|dz  }nd
}|dz  }|dz  }|	d	d|z  |z   z  z	  dz  }|dk    r|
||}}}n\|dk    r|||}}}nO|d	k    r"d	|
z  |z   dz  }d	|z  |z   dz  }d	|z  |z   dz  }n'|dk    r!d	|z  |
z   dz  }d	|z  |z   dz  }d	|z  |z   dz  }||                              ||||g¦  «         ŒÅŒÙ�Œk|S )r0   é   z<8Bú<HHr1   ú<Ié   r2   Fr   Té   é   r   r   r   r4   )r*   r;   r<   r=   r>   ÚblockrA   r?   r@   ÚcoderB   rC   rD   rE   rF   rG   rH   Úhighr    Úalphacode_indexrJ   Ú
color_coderK   rL   rM   s                            r   Údecode_dxt3r[   y   s?  € õ
 �‰YŒY˜"‰_€FÝ‰;Œ;�	™œ¥Y¡[¤[µ)±+´+Ð
>€Cå˜V‘}”}ð (,ñ (,ˆØ˜BÑˆØ�S˜3 ™8�^Ô$ˆåÔ! %¨Ñ/Ô/ˆÝÔ+¨E°5¸!Ñ<Ô<‰ˆ�åÔ$ T¨5°"Ñ5Ô5‰ˆå Ñ'Ô'‰
ˆˆB�Ý Ñ'Ô'‰
ˆˆB�å�q‘”ð 	,ð 	,ˆAØˆDÝ˜1‘X”Xð ,ð ,�Ø#$ q¡5¨1¡9°Ñ"2�Ø˜Ô)�Øð Ø �DØ˜!‘G�A�Aà�DØ˜‘H�AØ�R‘�à" a¨1¨q©5°1©9¡oÑ5¸Ñ=�
à ’?�?Ø  " b˜!�q�A�AØ 1’_�_Ø  " b˜!�q�A�AØ 1’_�_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�A�AØ 1’_�_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�Aà�A”—’˜q ! Q¨˜lÑ+Ô+Ð+Ð+ð5,ñ	,ð< €Jr   c           	     ó  — t          | ¦  «        dz  }t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         f}t          |¦  «        D �](}|dz  }| ||dz   …         }t          j        d|¦  «        \  }}t          j        d|d¦  «        }|d         |d         dz  z  |d         dz  z  |d         d	z  z  }	|d
         |d         dz  z  }
t          j        d|d¦  «        \  }}t          j        d|d¦  «        \  }t          |¦  «        \  }}}t          |¦  «        \  }}}t          d¦  «        D �]=}t          d¦  «        D �])}dd|z  |z   z  }|dk    r	|
|z	  dz  }n |dk    r|
dz	  |	dz  dz  z  }n|	|dz
  z	  dz  }|d
k    r|}nJ|dk    r|}nA||k    rd|z
  |z  |dz
  |z  z   dz  }n&|dk    rd
}n|dk    rd}nd|z
  |z  |dz
  |z  z   dz  }|dd|z  |z   z  z	  dz  }|d
k    r|||}}}n\|dk    r|||}}}nO|dk    r"d|z  |z   dz  }d|z  |z   dz  }d|z  |z   dz  }n'|dk    r!d|z  |z   dz  }d|z  |z   dz  }d|z  |z   dz  }||                              ||||g¦  «         �Œ+�Œ?�Œ*|S )zG
    input: one "row" of data (i.e. will produce 4 * width pixels)
    rP   z<BBz<6Br   r   r1   r2   r'   é   r   r   rQ   rR   rS   r   rT   é   r3   r4   )r*   r;   r<   r=   r>   rV   Úa0Úa1rA   Ú
alphacode1Ú
alphacode2r?   r@   rW   rB   rC   rD   rE   rF   rG   rH   r    rY   Ú	alphacoderJ   rZ   rK   rL   rM   s                                r   Údecode_dxt5rd   ®   sB  € õ
 �‰YŒY˜"‰_€FÝ‰;Œ;�	™œ¥Y¡[¤[µ)±+´+Ð
>€Cå˜V‘}”}ð 9,ñ 9,ˆØ˜BÑˆØ�S˜3 ™8�^Ô$ˆåÔ# E¨5Ñ1Ô1‰ˆˆBåÔ! %¨°Ñ2Ô2ˆØ˜!”W  Q¤¨1¡Ñ-°°a´¸B±Ñ?À4ÈÄ7ÈbÁ=ÑQˆ
Ø˜!”W  Q¤¨1¡Ñ-ˆ
åÔ+¨E°5¸!Ñ<Ô<‰ˆ�åÔ$ T¨5°"Ñ5Ô5‰ˆå Ñ'Ô'‰
ˆˆB�Ý Ñ'Ô'‰
ˆˆB�å�q‘”ð (	,ñ (	,ˆAÝ˜1‘X”Xð ',ñ ',�à"# q¨1¡u¨q¡y¡/�à" bÒ(Ð(Ø!+¨Ñ!>À$Ñ F�I�IØ$¨Ò*Ð*Ø!+¨rÑ!1°zÀQ±È$Ñ6NÑ O�I�Ià!+°À"Ñ0DÑ!EÈÑ M�Ià ’>�>Ø�A�AØ !’^�^Ø�A�AØ˜"’W�WØ˜i™-¨2Ñ-°¸Q±À"Ñ0DÑDÈÑJ�A�AØ !’^�^Ø�A�AØ !’^�^Ø�A�Aà˜i™-¨2Ñ-°¸Q±À"Ñ0DÑDÈÑJ�Aà" a¨1¨q©5°1©9¡oÑ5¸Ñ=�
à ’?�?Ø  " b˜!�q�A�AØ 1’_�_Ø  " b˜!�q�A�AØ 1’_�_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�A�AØ 1’_�_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�Aà�A”—’˜q ! Q¨˜lÑ+Ô+Ð+Ñ+ñO',ñ(	,ðT €Jr   c                  ó   — e Zd ZdS )ÚBLPFormatErrorN)r   r   r   r   r   r   rf   rf   ô   s   € € € € € Ø€Dr   rf   Úprefixc                ó   — | d d…         dv S )Nr2   )ó   BLP1ó   BLP2r   )rg   s    r   Ú_acceptrk   ø   s   € Ø�"�1�"Œ:Ð+Ð+Ð+r   c                  ó"   — e Zd ZdZdZdZdd„ZdS )	ÚBlpImageFilez 
    Blizzard Mipmap Format
    ÚBLPzBlizzard Mipmap Formatr"   ÚNonec                ó  — | j                              d¦  «        | _        t          | j        ¦  «        s&dt	          | j        ¦  «        › �}t          |¦  «        ‚t          j        d| j                              d¦  «        ¦  «        d         }| j        dk    r8t          j        d| j                              d¦  «        ¦  «        d         dk    }nÂt          j        d| j                              d¦  «        ¦  «        d         }t          j        d| j                              d¦  «        ¦  «        d         dk    }t          j        d| j                              d¦  «        ¦  «        d         }| j                              dt          j
        ¦  «         t          j        d	| j                              d
¦  «        ¦  «        | _        | j        dk    r`t          j        d| j                              d¦  «        ¦  «        d         }| j                              dt          j
        ¦  «         |||f}d}n||||f}d}| j                             ¦   «         }|rdnd| _        t          j        |d| j        z   ||¦  «        g| _        d S )Nr2   zBad BLP magic ú<ir   ri   rR   ú<br   ú<IIr1   é   é   ÚRGBAÚRGB©r   r   )ÚfpÚreadÚmagicrk   Úreprrf   r8   ÚunpackÚseekÚosÚSEEK_CURÚ_sizeÚdecodeÚ_moder	   Ú_TileÚsizeÚtile)	ÚselfÚmsgÚcompressionr,   ÚencodingÚalpha_encodingÚargsÚoffsetÚdecoders	            r   Ú_openzBlpImageFile._open  sý  € Ø”W—\’\ !‘_”_ˆŒ
Ý�t”zÑ"Ô"ð 	&Ø5¥4¨¬
Ñ#3Ô#3Ð5Ð5ˆCÝ  Ñ%Ô%Ð%å”m D¨$¬'¯,ª,°q©/¬/Ñ:Ô:¸1Ô=ˆØŒ:˜Ò Ð Ý”M $¨¬¯ª°Q©¬Ñ8Ô8¸Ô;¸qÒ@ˆEˆEå”} T¨4¬7¯<ª<¸©?¬?Ñ;Ô;¸AÔ>ˆHÝ”M $¨¬¯ª°Q©¬Ñ8Ô8¸Ô;¸qÒ@ˆEÝ#œ]¨4°´·²¸a±´ÑAÔAÀ!ÔDˆNØŒG�LŠL˜�BœKÑ(Ô(Ð(å”] 5¨$¬'¯,ª,°q©/¬/Ñ:Ô:ˆŒ
ð Œ:˜Ò Ð Ý”} T¨4¬7¯<ª<¸©?¬?Ñ;Ô;¸AÔ>ˆHØŒG�LŠL˜�BœKÑ(Ô(Ð(à ¨5Ð1ˆDØˆFˆFà ¨5°.ÐAˆDØˆFà”*×#Ò#Ñ%Ô%ˆà$Ð/�V�V¨%ˆŒ
Ý”_ W¨f°t´yÑ.@À&È$ÑOÔOÐPˆŒ	ˆ	ˆ	r   N©r"   ro   )r   r   r   Ú__doc__ÚformatÚformat_descriptionr�   r   r   r   rm   rm   ü   sE   € € € € € ðð ð €FØ1ÐðQð Qð Qð Qð Qð Qr   rm   c                  ó\   — e Zd ZdZdd„Zej        dd„¦   «         Zdd	„Zdd„Z	dd„Z
dd„ZdS )Ú_BLPBaseDecoderTÚbufferú$bytes | Image.SupportsArrayInterfacer"   útuple[int, int]c                ó¬   — 	 |                       ¦   «          |                      ¦   «          n)# t          j        $ r}d}t	          |¦  «        |‚d }~ww xY wdS )NzTruncated BLP file)éÿÿÿÿr   )Ú_read_headerÚ_loadr8   ÚerrorÚOSError)r‡   r–   Úerˆ   s       r   r‚   z_BLPBaseDecoder.decode)  sc   € ð	&Ø×ÒÑÔÐØ�JŠJ‰LŒLˆLˆLøÝŒ|ð 	&ð 	&ð 	&Ø&ˆCÝ˜#‘,”, AÐ%øøøøð	&øøøð ˆus   ‚(+ «AºAÁAro   c                ó   — d S ©Nr   ©r‡   s    r   rœ   z_BLPBaseDecoder._load2  s   € àˆr   c                óº   — t          j        d|                      d¦  «        ¦  «        | _        t          j        d|                      d¦  «        ¦  «        | _        d S )Nú<16Ié@   )r8   r}   Ú
_safe_readÚ_offsetsÚ_lengthsr¢   s    r   r›   z_BLPBaseDecoder._read_header6  sD   € Ýœ f¨d¯oªo¸fÑ.EÔ.EÑFÔFˆŒÝœ f¨d¯oªo¸fÑ.EÔ.EÑFÔFˆŒˆˆr   Úlengthr!   r+   c                óH   — | j         €J ‚t          j        | j         |¦  «        S r¡   )Úfdr	   r¦   )r‡   r©   s     r   r¦   z_BLPBaseDecoder._safe_read:  s%   € ØŒwÐ"Ð"Ð"ÝÔ# D¤G¨VÑ4Ô4Ð4r   úlist[tuple[int, int, int, int]]c                óê   — g }t          d¦  «        D ]`}	 t          j        d|                      d¦  «        ¦  «        \  }}}}n# t          j        $ r Y  nw xY w|                     ||||f¦  «         Œa|S )Né   ú<4Br2   )r7   r8   r}   r¦   r�   Úappend)r‡   r<   r    rM   rL   rK   rJ   s          r   Ú_read_palettez_BLPBaseDecoder._read_palette>  sŽ   € ØˆÝ�s‘”ð 	%ð 	%ˆAðÝ#œ]¨5°$·/²/À!Ñ2DÔ2DÑEÔE‘
��1�a˜˜øÝ”<ð ð ð Ø��ðøøøà�JŠJ˜˜1˜a �|Ñ$Ô$Ð$Ð$Øˆ
s   •-AÁAÁAÚpaletter,   r-   r6   c                ó`  — t          ¦   «         }t          |                      | j        d         ¦  «        ¦  «        }	 	 t	          j        d|                     d¦  «        ¦  «        \  }n# t          j        $ r Y n4w xY w||         \  }}}}	|||f}
|r|
|	fz  }
|                     |
¦  «         Œq|S )Nr   Tú<Br   )	r6   r   r¦   r¨   r8   r}   rz   r�   r:   )r‡   r²   r,   r*   Ú_datar�   rM   rL   rK   rJ   Úds              r   Ú
_read_bgraz_BLPBaseDecoder._read_bgraH  sÂ   € õ ‰{Œ{ˆÝ˜Ÿš¨¬°aÔ(8Ñ9Ô9Ñ:Ô:ˆð		ðÝ"œM¨$°·
²
¸1±´Ñ>Ô>‘	��øÝ”<ð ð ð Ø�ðøøøà  œ‰JˆAˆq�!�QØ"# Q¨ ˆAØð Ø�a�T‘	�Ø�KŠK˜‰NŒNˆNð		ð ˆs   ¾*A) Á)A;Á:A;N)r–   r—   r"   r˜   r�   )r©   r!   r"   r+   )r"   r¬   )r²   r¬   r,   r-   r"   r6   )r   r   r   Ú	_pulls_fdr‚   ÚabcÚabstractmethodrœ   r›   r¦   r±   r·   r   r   r   r•   r•   &  s¥   € € € € € Ø€Iðð ð ð ð 	Ôðð ð ñ ÔððGð Gð Gð Gð5ð 5ð 5ð 5ðð ð ð ðð ð ð ð ð r   r•   c                  ó   — e Zd Zdd„Zdd„ZdS )ÚBLP1Decoderr"   ro   c                óÄ  — | j         \  | _        | _        }| j        t          j        k    r|                      ¦   «          d S | j        dk    rp| j        dv rA|                      ¦   «         }|                      ||¦  «        }|                      |¦  «         d S dt          | j        ¦  «        › �}t          |¦  «        ‚dt          | j        ¦  «        › �}t          |¦  «        ‚)Nr   )r2   r'   zUnsupported BLP encoding zUnsupported BLP compression )rŒ   Ú_compressionÚ	_encodingr   r   Ú_decode_jpeg_streamr±   r·   Ú
set_as_rawr|   rf   )r‡   r,   r²   r*   rˆ   s        r   rœ   zBLP1Decoder._load[  sÞ   € Ø37´9Ñ0ˆÔ˜4œ>¨5àÔ¥¤Ò+Ð+Ø×$Ò$Ñ&Ô&Ð&Ð&Ð&àÔ !Ò#Ð#ØŒ~ Ð'Ð'Ø×,Ò,Ñ.Ô.�Ø—’ w°Ñ6Ô6�Ø—’ Ñ%Ô%Ð%Ð%Ð%àHµ$°t´~Ñ2FÔ2FÐHÐH�Ý$ SÑ)Ô)Ð)àGµ°d´nÑ1EÔ1EÐGÐGˆCÝ  Ñ%Ô%Ð%r   c                óH  — ddl m} t          j        d|                      d¦  «        ¦  «        \  }|                      |¦  «        }| j        €J ‚|                      | j        d         | j                             ¦   «         z
  ¦  «         |                      | j        d         ¦  «        }||z   } |t          |¦  «        ¦  «        }t          j        |j        ¦  «         |j        dk    rN|j        d         \  }}}}	t          |	t           ¦  «        sJ ‚t#          j        ||||	d         df¦  «        g|_        |                     d¦  «                             ¦   «         \  }
}}t          j        d|||
f¦  «        }|                      |                     ¦   «         ¦  «         d S )Nr   )ÚJpegImageFilerR   r2   r   ÚCMYKrw   )ÚJpegImagePluginrÃ   r8   r}   r¦   r«   r§   Útellr¨   r   r   Ú_decompression_bomb_checkr…   Úmoder†   Ú
isinstanceÚtupler	   r„   ÚconvertÚsplitÚmergerÁ   Útobytes)r‡   rÃ   Újpeg_header_sizeÚjpeg_headerr*   ÚimageÚdecoder_nameÚextentsr�   rŒ   rK   rL   rM   Úreversed_images                 r   rÀ   zBLP1Decoder._decode_jpeg_streamm  sƒ  € Ø2Ð2Ð2Ð2Ð2Ð2å$œm¨D°$·/²/À!Ñ2DÔ2DÑEÔEÑÐ	Ø—o’oÐ&6Ñ7Ô7ˆØŒwÐ"Ð"Ð"Ø�Š˜œ aÔ(¨4¬7¯<ª<©>¬>Ñ9Ñ:Ô:Ð:Ø�Š˜tœ}¨QÔ/Ñ0Ô0ˆØ˜TÑ!ˆØ��g d™mœmÑ,Ô,ˆÝÔ'¨¬
Ñ3Ô3Ð3ØŒ:˜ÒÐØ27´*¸Q´-Ñ/ˆL˜' 6¨4Ý˜d¥EÑ*Ô*Ð*Ð*Ð*å” ¨g°vÀÀQÄÈÐ?PÑQÔQðˆEŒJð —-’- Ñ&Ô&×,Ò,Ñ.Ô.‰ˆˆ1ˆaÝœ U¨Q°°1¨IÑ6Ô6ˆØ�Š˜×.Ò.Ñ0Ô0Ñ1Ô1Ð1Ð1Ð1r   Nr�   )r   r   r   rœ   rÀ   r   r   r   r¼   r¼   Z  s<   € € € € € ð&ð &ð &ð &ð$2ð 2ð 2ð 2ð 2ð 2r   r¼   c                  ó   — e Zd Zdd„ZdS )ÚBLP2Decoderr"   ro   c                óV  — | j         \  | _        | _        }| _        |                      ¦   «         }| j        €J ‚| j                             | j        d         ¦  «         | j        dk    �r| j        t          j	        k    r|  
                    ||¦  «        }�ný| j        t          j        k    �r›t          ¦   «         }| j        t          j        k    rd| j        j        dz   dz  dz  }t#          | j        j        dz   dz  ¦  «        D ]-}t'          |                      |¦  «        |¦  «        D ]}||z  }ŒŒ.�n`| j        t          j        k    rb| j        j        dz   dz  dz  }t#          | j        j        dz   dz  ¦  «        D ],}t-          |                      |¦  «        ¦  «        D ]}||z  }ŒŒ-né| j        t          j        k    rb| j        j        dz   dz  dz  }t#          | j        j        dz   dz  ¦  «        D ],}t1          |                      |¦  «        ¦  «        D ]}||z  }ŒŒ-nrdt3          | j        ¦  «        › �}t5          |¦  «        ‚dt3          | j        ¦  «        › �}t5          |¦  «        ‚d	t3          | j        ¦  «        › �}t5          |¦  «        ‚|                      |¦  «         d S )
Nr   r   r   r2   r1   rP   zUnsupported alpha encoding zUnknown BLP encoding zUnknown BLP compression )rŒ   r¾   r¿   Ú_alpha_encodingr±   r«   r~   r§   r   r   r·   r   r6   r   r   ÚstateÚxsizer7   ÚysizerN   r¦   r   r[   r   rd   r|   rf   rÁ   )r‡   r,   r²   r*   ÚlinesizeÚybr¶   rˆ   s           r   rœ   zBLP2Decoder._load„  sÎ  € ØIMÌÑFˆÔ˜4œ>¨5°$Ô2Fà×$Ò$Ñ&Ô&ˆàŒwÐ"Ð"Ð"ØŒ�Š�T”] 1Ô%Ñ&Ô&Ð&àÔ Ò!Ñ!ð Œ~¥Ô!6Ò6Ð6Ø—’ w°Ñ6Ô6�‘à”¥8¤<Ò/Ñ/Ý ‘{”{�ØÔ'­=Ô+=Ò=Ð=Ø $¤
Ô 0°1Ñ 4¸Ñ:¸QÑ>�HÝ# T¤ZÔ%5¸Ñ%9¸aÑ$?Ñ@Ô@ð &ð &˜Ý!,¨T¯_ª_¸XÑ-FÔ-FÈÑ!NÔ!Nð &ð &˜AØ  A™I˜D˜Dð&ñ&ð Ô)­]Ô-?Ò?Ð?Ø $¤
Ô 0°1Ñ 4¸Ñ:¸RÑ?�HÝ# T¤ZÔ%5¸Ñ%9¸aÑ$?Ñ@Ô@ð &ð &˜Ý!,¨T¯_ª_¸XÑ-FÔ-FÑ!GÔ!Gð &ð &˜AØ  A™I˜D˜Dð&ð&ð Ô)­]Ô-?Ò?Ð?Ø $¤
Ô 0°1Ñ 4¸Ñ:¸RÑ?�HÝ# T¤ZÔ%5¸Ñ%9¸aÑ$?Ñ@Ô@ð &ð &˜Ý!,¨T¯_ª_¸XÑ-FÔ-FÑ!GÔ!Gð &ð &˜AØ  A™I˜D˜Dð&ð&ð U½¸TÔ=QÑ8RÔ8RÐTÐT�CÝ(¨Ñ-Ô-Ð-àD­d°4´>Ñ.BÔ.BÐDÐD�Ý$ SÑ)Ô)Ð)ð G­T°$Ô2CÑ-DÔ-DÐFÐFˆCÝ  Ñ%Ô%Ð%à�Š˜ÑÔÐÐÐr   Nr�   )r   r   r   rœ   r   r   r   rÖ   rÖ   ƒ  s(   € € € € € ð,ð ,ð ,ð ,ð ,ð ,r   rÖ   c                  ó"   — e Zd ZdZd
d„Zdd„Zd	S )Ú
BLPEncoderTr"   r+   c           	     óR  — d}| j         €J ‚| j                              dd¦  «        }t          t          |¦  «        dz  ¦  «        D ]5}||dz  |dz   dz  …         \  }}}}|t	          j        d||||¦  «        z  }Œ6t          |¦  «        dk     r|dz  }t          |¦  «        dk     °|S )Nr   rv   r2   r   r¯   i   s       )ÚimÚ
getpaletter7   r5   r8   Úpack)r‡   r*   r²   r    rK   rL   rM   rJ   s           r   Ú_write_palettezBLPEncoder._write_palette¶  sÂ   € ØˆØŒwÐ"Ð"Ð"Ø”'×$Ò$ V¨VÑ4Ô4ˆÝ•s˜7‘|”| qÑ(Ñ)Ô)ð 	3ð 	3ˆAØ   Q¡¨!¨a©%°1©Ð!4Ô5‰JˆAˆq�!�QØ•F”K  q¨!¨Q°Ñ2Ô2Ñ2ˆDˆDÝ�$‰iŒi˜'Ò!Ð!Ø�KÑˆDõ �$‰iŒi˜'Ò!Ð!àˆr   Úbufsizer!   útuple[int, int, bytes]c           
     ó°  — |                       ¦   «         }dt          |¦  «        z   }t          j        d|gd¢R Ž }| j        €J ‚| j        j        \  }}|t          j        d||z  gd¢R Ž z  }||z  }t          |¦  «        D ]F}t          |¦  «        D ]4}|t          j        d| j                             ||f¦  «        ¦  «        z  }Œ5ŒGt          |¦  «        d|fS )Né”   r¤   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r´   r   )rä   r5   r8   rã   rá   r…   r7   Úgetpixel)	r‡   rå   Úpalette_datar�   r*   ÚwÚhÚyÚxs	            r   ÚencodezBLPEncoder.encodeÁ  sú   € Ø×*Ò*Ñ,Ô,ˆà ¥3 |Ñ#4Ô#4Ñ4ˆÝŒ{˜6 6Ð8¨YÐ8Ð8Ð8ˆàŒwÐ"Ð"Ð"ØŒwŒ|‰ˆˆ1Ø•”˜F A¨¡EÐ8¨YÐ8Ð8Ð8Ñ8ˆà�Ñˆå�q‘”ð 	Dð 	DˆAÝ˜1‘X”Xð Dð D�Ø�œ D¨$¬'×*:Ò*:¸A¸q¸6Ñ*BÔ*BÑCÔCÑC��ðDõ �4‰yŒy˜!˜TÐ!Ð!r   N)r"   r+   )rå   r!   r"   ræ   )r   r   r   Ú
_pushes_fdrä   rï   r   r   r   rß   rß   ³  sA   € € € € € Ø€Jð	ð 	ð 	ð 	ð"ð "ð "ð "ð "ð "r   rß   rá   úImage.Imagery   ú	IO[bytes]Úfilenameústr | bytesro   c           
     óZ  — | j         dk    rd}t          |¦  «        ‚| j                             d¦  «        dk    rdnd}|                     |¦  «         | j        €J ‚|                     t          j        dd¦  «        ¦  «         | j        j         d	k    rdnd
}|dk    r)|                     t          j        d|¦  «        ¦  «         nª|                     t          j        dt          j	        ¦  «        ¦  «         |                     t          j        d|¦  «        ¦  «         |                     t          j        dd
¦  «        ¦  «         |                     t          j        dd
¦  «        ¦  «         |                     t          j        dg| j
        ¢R Ž ¦  «         |dk    rP|                     t          j        dd¦  «        ¦  «         |                     t          j        dd
¦  «        ¦  «         t          j        | |t          j        dd| j
        z   d
| j         ¦  «        g¦  «         d S )NÚPzUnsupported BLP image modeÚblp_versionÚBLP1ri   rj   rq   r   rv   r   z<Lrr   rs   r'   rn   rx   )rÈ   Ú
ValueErrorÚencoderinfoÚgetÚwriter²   r8   rã   r   r   r…   r	   Ú_saver„   )rá   ry   ró   rˆ   r{   Úalpha_depths         r   rý   rý   Ô  sÝ  € Ø	„w�#‚~€~Ø*ˆÝ˜‰oŒoÐà”~×)Ò)¨-Ñ8Ô8¸FÒBÐBˆGˆGÈ€EØ‡H‚HˆU�O„O€OàŒ:Ð!Ð!Ð!Ø‡H‚H�VŒ[˜˜qÑ!Ô!Ñ"Ô"Ð"à”z”¨&Ò0Ð0�!�!°a€KØ�ÒÐØ
�Š•”˜T ;Ñ/Ô/Ñ0Ô0Ð0Ð0à
�Š•”˜T¥8Ô#8Ñ9Ô9Ñ:Ô:Ð:Ø
�Š•”˜T ;Ñ/Ô/Ñ0Ô0Ð0Ø
�Š•”˜T 1Ñ%Ô%Ñ&Ô&Ð&Ø
�Š•”˜T 1Ñ%Ô%Ñ&Ô&Ð&Ø‡H‚H�VŒ[˜Ð) ¤Ð)Ð)Ð)Ñ*Ô*Ð*Ø�ÒÐØ
�Š•”˜T 1Ñ%Ô%Ñ&Ô&Ð&Ø
�Š•”˜T 1Ñ%Ô%Ñ&Ô&Ð&å„O�B˜�Yœ_¨U°F¸R¼WÑ4DÀaÈÌÑQÔQÐRÑSÔSÐSÐSÐSr   z.blprø   ÚBLP2rn   )r    r!   r"   r#   )F)r*   r+   r,   r-   r"   r.   )r*   r+   r"   r.   )rg   r+   r"   r-   )rá   rñ   ry   rò   ró   rô   r"   ro   )'r‘   Ú
__future__r   r¹   r   r8   Úenumr   Úior   Útypingr   Ú r   r	   r   r   r   r)   rN   r[   rd   ÚNotImplementedErrorrf   rk   rm   Ú	PyDecoderr•   r¼   rÖ   Ú	PyEncoderrß   rý   Úregister_openr’   Úregister_extensionÚregister_decoderÚregister_saveÚregister_encoderr   r   r   ú<module>r     s?  ððð ð> #Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ð Ð ðð ð ð ð ˆWñ ô ð ðð ð ð ð ˆwñ ô ð ðð ð ð ð �Gñ ô ð ðLð Lð Lð Lð
  %ð6ð 6ð 6ð 6ð 6ðr2ð 2ð 2ð 2ðjCð Cð Cð CðL	ð 	ð 	ð 	ð 	Ð(ñ 	ô 	ð 	ð,ð ,ð ,ð ,ð'Qð 'Qð 'Qð 'Qð 'Q�9Ô&ñ 'Qô 'Qð 'QðT1ð 1ð 1ð 1ð 1�iÔ)ñ 1ô 1ð 1ðh&2ð &2ð &2ð &2ð &2�/ñ &2ô &2ð &2ðR-ð -ð -ð -ð -�/ñ -ô -ð -ð`"ð "ð "ð "ð "�Ô$ñ "ô "ð "ðBTð Tð Tð Tð6 €Ô �LÔ'¨°wÑ ?Ô ?Ð ?Ø €Ô ˜Ô,¨fÑ 5Ô 5Ð 5Ø €Ô �v˜{Ñ +Ô +Ð +Ø €Ô �v˜{Ñ +Ô +Ð +à €Ô �LÔ'¨Ñ /Ô /Ð /Ø €Ô �u˜jÑ )Ô )Ð )Ð )Ð )r   