§
    œ"²cË[  ã                   óH  — 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ZdZ	dZ
	 dd	d
dddœZ	 d„ Zd„ Z G d„ dej        ¦  «        Z G d„ de¦  «        Z G d„ d¦  «        Zd!d„Zd"d„Zd„ Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ de¦  «        Z G d„ d e¦  «        ZdS )#é    Né   )ÚImage)Úis_pathi   i   Fzimage buffer overrun errorzdecoding errorzunknown errorzbad configurationzout of memory error)éÿÿÿÿéþÿÿÿéýÿÿÿéøÿÿÿi÷ÿÿÿc                 óÎ   — 	 t           j                             | ¦  «        }n*# t          $ r t                               | ¦  «        }Y nw xY w|sd| › �}|dz  }t          |¦  «        ‚)Nzdecoder error z when reading image file)r   ÚcoreÚgetcodecstatusÚAttributeErrorÚERRORSÚgetÚOSError)ÚerrorÚmsgs     ú//usr/lib/python3/dist-packages/PIL/ImageFile.pyÚraise_oserrorr   @   sz   € ð ÝŒj×'Ò'¨Ñ.Ô.ˆˆøÝð  ð  ð  Ý�jŠj˜ÑÔˆˆˆð øøøàð 'Ø&˜uÐ&Ð&ˆØÐ%Ñ%€CÝ
�#‰,Œ,Ðs   ‚" ¢$A	ÁA	c                 ó   — | d         S )Né   © )Úts    r   Ú	_tilesortr   K   s   € àˆQŒ4€Kó    c                   óR   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ fd„Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zˆ xZS )Ú	ImageFilez*Base class for image file format handlers.Nc                 ó¸  •— t          ¦   «                              ¦   «          d| _        d | _        d | _        	 d| _        d| _        t          | _        t          |¦  «        r$t          |d¦  «        | _        || _        d| _        n|| _        || _        d | _        	 	 |                      ¦   «          n@# t          t           t"          t$          t&          j        f$ r}t+          |¦  «        |‚d }~ww xY w| j        r"| j        d         dk    s| j        d         dk    rd}t+          |¦  «        ‚d S # t0          $ r" | j        r| j                             ¦   «          ‚ w xY w)Nr   r   r   ÚrbTznot identified by this driver)ÚsuperÚ__init__Ú
_min_frameÚcustom_mimetypeÚtileÚreadonlyÚdecoderconfigÚMAXBLOCKÚdecodermaxblockr   ÚopenÚfpÚfilenameÚ_exclusive_fpÚ_openÚ
IndexErrorÚ	TypeErrorÚKeyErrorÚEOFErrorÚstructr   ÚSyntaxErrorÚmodeÚsizeÚBaseExceptionÚclose)Úselfr)   r*   Úvr   Ú	__class__s        €r   r    zImageFile.__init__X   sm  ø€ Ý‰Œ×ÒÑÔÐàˆŒà#ˆÔàˆŒ	Ø7àˆŒàˆÔÝ'ˆÔå�2‰;Œ;ð 
	&å˜2˜t‘n”nˆDŒGØˆDŒMØ!%ˆDÔÐð ˆDŒGØ$ˆDŒMà!%ˆDÔð	ð	,Ø—
’
‘”��øåÝÝÝÝ”ðð ,ð ,ð ,õ " !‘n”n¨!Ð+øøøøð,øøøð ”9ð ' ¤	¨!¤°Ò 1Ð 1°T´Y¸q´\ÀQÒ5FÐ5FØ5�Ý! #Ñ&Ô&Ð&ð 6GÐ5Føõ ð 	ð 	ð 	àÔ!ð  Ø”—’‘”�Øð		øøøs*   ÂB1 Â0D- Â1(C.ÃC)Ã)C.Ã.=D- Ä-,Ec                 óœ   — | j         r| j         S | j        �6t          j                             | j                             ¦   «         ¦  «        S d S ©N)r"   Úformatr   ÚMIMEr   Úupper©r7   s    r   Úget_format_mimetypezImageFile.get_format_mimetypeˆ   sH   € ØÔð 	(ØÔ'Ð'ØŒ;Ð"Ý”:—>’> $¤+×"3Ò"3Ñ"5Ô"5Ñ6Ô6Ð6ð #Ð"r   c                 óX   •— g | _         t          ¦   «                              |¦  «         d S r;   )r#   r   Ú__setstate__)r7   Ústater9   s     €r   rB   zImageFile.__setstate__Ž   s(   ø€ ØˆŒ	Ý‰Œ×Ò˜UÑ#Ô#Ð#Ð#Ð#r   c                 óT   — | j         r| j                             ¦   «          d| _        dS )zCheck file integrityN)r+   r)   r6   r?   s    r   ÚverifyzImageFile.verify’   s)   € ð
 Ôð 	ØŒG�MŠM‰OŒOˆOØˆŒˆˆr   c                 ól	  — | j         €d}t          |¦  «        ‚t          j                             | ¦  «        }| j         s|S d| _        | j        ot          | j         ¦  «        dk    }|ot          t          d¦  «         }d}	 | j	        }d}n# t          $ r | j        j        }Y nw xY w	 | j        }d}n# t          $ r | j        j        }Y nw xY w|�r`| j         d         \  }}}	}
|dk    �rGt          |
¦  «        dk    �r3|
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t          ‚t          j                             | j        | j        ||	|
¦  «        | _        d}| j        rd| j        _        n$# t          t          t6          f$ r
 d| _        Y nw xY w|                      ¦   «          d
}| j        �sÔ| j                              t<          ¬¦  «         	 | j        }n# t          $ r d}Y nw xY wd„ tA          j!        | j         d„ ¦  «        D ¦   «         | _         | j         D �]f\  }}}	}
 ||	¦  «         t          j"        | j        ||
| j#        ¦  «        }	 | $                    | j        |¦  «         |j%        r6| &                    | j        ¦  «         | '                    d¦  «        d         }n¬|}	 	  || j(        ¦  «        }n<# tR          tT          j+        f$ r#}tX          rY d}~nud}t          |¦  «        |‚d}~ww xY w|s*tX          rnQdt          |¦  «        › d�}t          |¦  «        ‚||z   }| '                    |¦  «        \  }}|dk     rn||d…         }Œ©| -                    ¦   «          �ŒO# | -                    ¦   «          w xY wg | _         || _.        |  /                    ¦   «          | j0        r | j1        r| j         2                    ¦   «          d| _        | j        stX          s|dk     rtg          |¦  «         t          j                             | ¦  «        S )z"Load image data based on tile listNzcannot load this imager   Úpypy_version_infor   FÚrawé   )Úaccessr   ©Úkeyr   c                 ó>   — g | ]\  }}t          |¦  «        d          ‘ŒS )r   )Úlist)Ú.0Ú_Útiless      r   ú
<listcomp>z"ImageFile.load.<locals>.<listcomp>å   s6   € ð ð ð á�A�uõ �U‘”˜B”ðð ð r   c                 ó0   — | d         | d         | d         fS )Nr   r   rI   r   )r#   s    r   ú<lambda>z ImageFile.load.<locals>.<lambda>è   s   € ¨T°!¬W°d¸1´g¸tÀA¼wÐ,G€ r   Tzimage file is truncatedzimage file is truncated (z bytes not processed))4r#   r   r   ÚloadÚmapr*   ÚlenÚhasattrÚsysÚ	load_readr   r)   ÚreadÚ	load_seekÚseekr3   Ú	_MAPMODESÚmmapr(   ÚfilenoÚACCESS_READr4   r   Ú
map_bufferÚimÚpaletteÚdirtyÚImportErrorÚload_prepareÚsortr   Útile_prefixÚ	itertoolsÚgroupbyÚ_getdecoderr%   ÚsetimageÚpulls_fdÚsetfdÚdecoder'   r-   r1   r   ÚLOAD_TRUNCATED_IMAGESÚcleanupr$   Úload_endr+   Ú!_close_exclusive_fp_after_loadingr6   r   )r7   r   ÚpixelÚuse_mmapr$   r[   r]   Údecoder_nameÚextentsÚoffsetÚargsr_   r)   Úerr_codeÚprefixÚdecoderÚbÚsÚeÚns                       r   rU   zImageFile.load›   sw  € ð Œ9ÐØ*ˆCÝ˜#‘,”,Ðå”× Ò  Ñ&Ô&ˆØŒyð 	ØˆLàˆŒØ”=Ð8¥S¨¬¡^¤^°qÒ%8ˆàÐE¥G­CÐ1DÑ$EÔ$EÐ Eˆàˆð	 Ø”>ˆDàˆHˆHøÝð 	 ð 	 ð 	 Ø”7”<ˆDˆDˆDð	 øøøð	 Ø”>ˆDØˆHˆHøÝð 	 ð 	 ð 	 Ø”7”<ˆDˆDˆDð	 øøøð ñ 	$à26´)¸A´,Ñ/ˆL˜' 6¨4à Ò%Ñ%Ý˜‘I”I ’N‘NØ˜”G˜tœyÒ(Ñ(Ø˜”G�uœÐ.Ñ.ð$à�K�K�Kå˜dœmÑ,Ô,ð V°Ø#'§9¢9¨R¯YªY©[¬[¸!ÀDÔDT 9Ñ#UÔ#U˜œðVð Vð Vñ Vô Vð Vð Vð Vð Vð Vð Vøøøð Vð Vð Vð Và ¤	¨!¤¨t°A¬wÑ 6Ñ6¸¼¿º¹¼ÒHÐHå%˜Ý#œj×3Ò3Øœ $¤)¨\¸6À4ñô �D”Gð  !�Hð ”|ð /Ø-.˜œÔ*øøÝ&­µÐ=ð $ð $ð $Ø#�D”H�H�Hð$øøøð 	×ÒÑÔÐØˆØŒxñ 9	&àŒI�NŠN�yˆNÑ)Ô)Ð)ðàÔ)��øÝ!ð ð ð Ø���ðøøøðð å )Ô 1Ø”IÐGÐGñ!ô !ðñ ô ˆDŒIð 8<´yð (&ñ (&Ñ3�˜g v¨tØ��V‘”�ÝÔ+Ø”I˜|¨T°4Ô3Eñô �ð#&Ø×$Ò$ T¤W¨gÑ6Ô6Ð6ØÔ'ð &ØŸš d¤gÑ.Ô.Ð.Ø#*§>¢>°#Ñ#6Ô#6°qÔ#9˜˜à"˜ð&ð>Ø$( D¨Ô)=Ñ$>Ô$>  øÝ$.µ´Ð#=ð >ð >ð >å#8ð !>Ø$) E E E Eà*C CÝ*1°#©,¬,¸AÐ$=øøøøð>øøøð $%ð 7Ý#8ð !7Ø$)ð)JÝ,/°©F¬Fð)Jð )Jð )Jð %(õ +2°#©,¬,Ð$6à ! A¡˜AØ*1¯.ª.¸Ñ*;Ô*;™K˜A˜xØ  1šu˜uØ %Ø ! ! " "¤˜Að3&ð8 —O’OÑ%Ô%Ð%Ñ%ø�G—O’OÑ%Ô%Ð%Ð%øøøàˆŒ	Ø ˆŒà�Š‰ŒˆàÔð 	 $Ô"Hð 	ØŒG�MŠM‰OŒOˆOØˆŒàŒxð 	$Õ 5ð 	$¸(ÀQº,¸,å˜(Ñ#Ô#Ð#åŒ{×Ò Ñ%Ô%Ð%s«   Â	B ÂB%Â$B%Â)	B3 Â3CÃCÄ'H Ä?5F Å4H Æ FÆH ÆFÆBH ÈH/È.H/É1I9 É9JÊJË1APÍMÍPÍNÍ4NÍ;PÎ NÎNÎAPÐP!c                 ó  — | j         r*| j         j        | j        k    s| j         j        | j        k    r/t          j                             | j        | j        ¦  «        | _         | j        dk    r!t          j                             | ¦  «         d S d S )NÚP)rc   r3   r4   r   r   ÚnewrU   r?   s    r   rg   zImageFile.load_prepare$  sx   € àŒwð 	;˜$œ'œ,¨$¬)Ò3Ð3°t´w´|ÀtÄyÒ7PÐ7PÝ”j—n’n T¤Y°´	Ñ:Ô:ˆDŒGàŒ9˜ÒÐÝŒK×Ò˜TÑ"Ô"Ð"Ð"Ð"ð Ðr   c                 ó   — d S r;   r   r?   s    r   rs   zImageFile.load_end,  s   € àˆr   c                 ó¾   — || j         k     s*t          | d¦  «        r| j        �$|| j        | j         z   k    rd}t	          |¦  «        ‚|                      ¦   «         |k    S )NÚ	_n_framesz attempt to seek outside sequence)r!   rX   r‡   Ún_framesr0   Útell)r7   Úframer   s      r   Ú_seek_checkzImageFile._seek_check8  sg   € à�D”OÒ#Ð#õ ˜T ;Ñ/Ô/ð	 $ð 59´NÐ4JØ˜Tœ]¨T¬_Ñ<Ò<Ð<ð 5ˆCÝ˜3‘-”-Ðà�yŠy‰{Œ{˜eÒ#Ð#r   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    r@   rB   rE   rU   rg   rs   r‹   Ú__classcell__)r9   s   @r   r   r   U   s»   ø€ € € € € Ø4Ð4ð.ð .ð .ð .ð .ð .ð`7ð 7ð 7ð$ð $ð $ð $ð $ðð ð ðG&ð G&ð G&ðR#ð #ð #ðð ð ð$ð $ð $ð $ð $ð $ð $r   r   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚStubImageFilez±
    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.
    c                 ó$   — d}t          |¦  «        ‚)Nz+StubImageFile subclass must implement _open©ÚNotImplementedError©r7   r   s     r   r,   zStubImageFile._openP  s   € Ø;ˆÝ! #Ñ&Ô&Ð&r   c                 óì   — |                       ¦   «         }|€d| j        › d�}t          |¦  «        ‚|                     | ¦  «        }|€J ‚|j        | _        |j        | _        |                     ¦   «         S )Nzcannot find loader for this z file)Ú_loadr<   r   rU   r9   Ú__dict__)r7   Úloaderr   Úimages       r   rU   zStubImageFile.loadT  so   € Ø—’‘”ˆØˆ>ØC°´ÐCÐCÐCˆCÝ˜#‘,”,ÐØ—’˜DÑ!Ô!ˆØÐ Ð Ð àœˆŒØœˆŒØ�zŠz‰|Œ|Ðr   c                 ó$   — d}t          |¦  «        ‚)z (Hook) Find actual image loader.z+StubImageFile subclass must implement _loadr”   r–   s     r   r˜   zStubImageFile._load`  s   € à;ˆÝ! #Ñ&Ô&Ð&r   N)rŒ   r�   rŽ   r�   r,   rU   r˜   r   r   r   r’   r’   H  sK   € € € € € ðð ð'ð 'ð 'ð
ð 
ð 
ð'ð 'ð 'ð 'ð 'r   r’   c                   óH   — e Zd ZdZdZdZdZdZdZdZ	d„ Z
d„ Zd„ Zd„ Zd„ ZdS )	ÚParserzj
    Incremental image parser.  This class implements the standard
    feed/close consumer interface.
    Nr   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)Údatar?   s    r   ÚresetzParser.resets  s!   € ð ŒyÐ Ð Ð"8Ñ Ô Ð Ð Ð r   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          |¦  «         n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   r\   rZ   )Úfinishedr    r}   ry   ÚminrW   rp   r›   r   ÚioÚBytesIOr   r(   rX   r#   rg   rl   r3   r%   rm   rc   r   )r7   r    Úskipr�   r€   r)   rc   ÚflagÚdÚoÚas              r   ÚfeedzParser.feed{  sœ  € ð Œ=ð 	ØˆFàŒ9ÐØˆDŒIˆIàœ	 DÑ(ˆDŒIð Œ<ð <	 àŒ{˜QŠˆå�3˜tœy™>œ>¨4¬;Ñ7Ô7�Ø œI d e eÔ,�”	Ø"œk¨DÑ0�”Ø”; ’?�?¨$¬)�?Ø�Fà”<×&Ò& t¤yÑ1Ô1‰DˆAˆqà�1Šuˆuà �”	Ø !�”Ø�q’5�5à!%�D”JÝ! !Ñ$Ô$Ð$Ð$ð �FØœ	 ! " "œˆDŒIˆIˆIàŒZð #	 ð
 ˆDð
 Ý”Z ¤	Ñ*Ô*ð (¨bÝœ B™œ�Bð(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (õ ˜r ;Ñ/Ô/ÐKµ7¸2¸{Ñ3KÔ3K�Øð (�3˜rœw™<œ<¨1Ò,Ð,à"&�D”K�Kð —O’OÑ%Ô%Ð%Ø!#¤¨¤‘J�A�q˜!˜QØ �B”GÝ#(Ô#4°R´W¸aÀÀBÔDTÑ#UÔ#U�D”LØ”L×)Ò)¨"¬%°Ñ3Ô3Ð3ð #$�D”KØ”{¥c¨$¬)¡n¤nÒ4Ð4Ø$(¤I¨d¬k¨m¨mÔ$<˜œ	Ø&'˜œà�”
�
�
øõ- ð ð ð à��ðøøøs6   ÄI Ä&EÄ;I ÅEÅI ÅEÅI É
I"É!I"c                 ó   — | S r;   r   r?   s    r   Ú	__enter__zParser.__enter__Ë  s   € Øˆr   c                 ó.   — |                       ¦   «          d S r;   )r6   ©r7   rz   s     r   Ú__exit__zParser.__exit__Î  s   € Ø�
Š
‰Œˆˆˆr   c                 óÚ  — | j         r;|                      d¦  «         dx| _        | _         | j        sd}t	          |¦  «        ‚| j        sd}t	          |¦  «        ‚| j        r„t          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   r(   rU   )r7   r   r)   s      r   r6   zParser.closeÑ  s  € ð Œ<ð 	#à�IŠI�c‰NŒNˆNØ'+Ð+ˆDŒI˜œØ”=ð #Ø,�Ý˜c‘l”lÐ"ØŒzð 	Ø+ˆCÝ˜#‘,”,ÐØŒ9ð 	&õ ”˜DœIÑ&Ô&ð &¨"ð&Ý!&¤¨B¡¤�D”Jà”J—O’OÑ%Ô%Ð%Ð%ø�D”J—O’OÑ%Ô%Ð%Ð%øøøÐ%ð	&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð
 ŒzÐs*   Á;CÁ=B0ÂCÂ0CÃCÃCÃ"C)rŒ   r�   rŽ   r�   Úincrementalr›   r    r}   ry   r£   r¡   r¬   r®   r±   r6   r   r   r   rž   rž   f  s�   € € € € € ðð ð
 €KØ€EØ€DØ€GØ€FØ€Hð9ð 9ð 9ðN ð N ð N ð`ð ð ðð ð ðð ð ð ð r   rž   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 )z«Helper 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   rK   r   é   NÚflush)rU   rX   rµ   rh   r   Úmaxr&   r4   r`   r·   Ú_encode_tiler   r¥   ÚUnsupportedOperation)rc   r)   r#   ÚbufsizeÚfhÚexcs         r   Ú_saver¾   ó  s  € ð ‡G‚G�I„I€IÝ�2�Ñ'Ô'ð ØˆÔØ‡I‚I•)€IÑÔÐõ
 •(˜G R¤W¨Q¤Z°!¡^Ñ4Ô4€Gð7Ø�YŠY‰[Œ[ˆØ
�Š‰
Œ
ˆ
Ý�R˜˜T 7¨BÑ/Ô/Ð/Ð/øÝ�BÔ3Ð4ð 7ð 7ð 7Ý�R˜˜T 7¨D°#Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6øøøøð7øøøåˆr�7ÑÔð Ø
�Š‰
Œ
ˆ
ˆ
ˆ
ðð s   Á,;B( Â(CÂ>CÃCc                 ób  — |D �]*\  }}}}	|dk    r|                      |¦  «         t          j        | j        ||	| j        ¦  «        }
	 |
                     | j        |¦  «         |
j        r-|
                     |¦  «         |
 	                    ¦   «         \  }}nL|r4	 |
 
                    |¦  «        \  }}}|                     |¦  «         |rnŒ2n|
                     ||¦  «        }|dk     rd|› d�}t          |¦  «        |‚	 |
                     ¦   «          �Œ# |
                     ¦   «          w xY wd S )Nr   Tzencoder error z when writing image file)r]   r   Ú_getencoderr3   rµ   rm   rc   Ú	pushes_fdro   Úencode_to_pyfdÚencodeÚwriteÚencode_to_filer   rr   )rc   r)   r#   r»   r¼   r½   r€   r~   rª   r«   ÚencoderÚlr   r©   r   s                  r   r¹   r¹     s]  € Øð ñ ‰
ˆˆ1ˆa�ØˆqŠ5ˆ5Ø�GŠG�A‰JŒJˆJÝÔ# B¤G¨Q°°2Ô3CÑDÔDˆð	Ø×Ò˜RœU AÑ&Ô&Ð&ØÔ ð <Ø—’˜bÑ!Ô!Ð!Ø×-Ò-Ñ/Ô/‘��1�1àð 	<ð"Ø")§.¢.°Ñ"9Ô"9™˜˜1˜aØŸš ™œ˜Øð "Ø!ð	"ð "ð  ×.Ò.¨r°7Ñ;Ô;�AØ�1ŠuˆuØB qÐBÐBÐB�Ý˜c‘l”l¨Ð+ð ð �OŠOÑÔÐÑøˆG�OŠOÑÔÐÐøøøð1ð s   ÁB7DÄD,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 r;   )rW   )rO   r©   s     r   ú	<genexpr>z_safe_read.<locals>.<genexpr>H  s(   è è € Ð
 Ð
 �a�3ˆq‰6Œ6Ð
 Ð
 Ð
 Ð
 Ð
 Ð
 r   )Ú	SAFEBLOCKr[   rW   r   r¤   ÚappendÚsumÚjoin)r)   r4   r    r   Úremaining_sizeÚblocks         r   Ú
_safe_readrÑ   +  s  € ð ˆq‚y€yØˆsØ�yÒÐØ�wŠw�t‰}Œ}ˆÝˆt‰9Œ9�tÒÐØ'ˆCÝ˜#‘,”,ÐØˆØ€DØ€NØ
˜1Ò
Ð
Ø—’�˜N­IÑ6Ô6Ñ7Ô7ˆØð 	ØØ�Š�EÑÔÐØ�#˜e™*œ*Ñ$ˆð ˜1Ò
Ð
õ Ð
 Ð
 ˜4Ð
 Ñ
 Ô
 Ñ Ô  4Ò'Ð'Ø#ˆÝ�c‰lŒlÐØ�8Š8�D‰>Œ>Ðr   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚPyCodecStatec                 ó>   — d| _         d| _        d| _        d| _        d S )Nr   )ÚxsizeÚysizeÚxoffÚyoffr?   s    r   r    zPyCodecState.__init__O  s"   € ØˆŒ
ØˆŒ
ØˆŒ	ØˆŒ	ˆ	ˆ	r   c                 óV   — | j         | j        | j         | j        z   | j        | j        z   fS r;   )r×   rØ   rÕ   rÖ   r?   s    r   rx   zPyCodecState.extentsU  s'   € ØŒy˜$œ) T¤Y°´Ñ%;¸T¼YÈÌÑ=SÐSÐSr   N)rŒ   r�   rŽ   r    rx   r   r   r   rÓ   rÓ   N  s7   € € € € € ðð ð ðTð Tð Tð Tð Tr   rÓ   c                   ó.   — e Zd Zd„ Zd„ Zd„ Zd„ Zdd„ZdS )ÚPyCodecc                 ó€   — d | _         t          ¦   «         | _        d | _        || _        |                      |¦  «         d S r;   )rc   rÓ   rC   Úfdr3   Úinit)r7   r3   rz   s      r   r    zPyCodec.__init__Z  s5   € ØˆŒÝ!‘^”^ˆŒ
ØˆŒØˆŒ	Ø�	Š	�$‰Œˆˆˆr   c                 ó   — || _         dS )z˜
        Override to perform codec specific initialization

        :param args: Array of args items from the tile entry
        :returns: None
        N)rz   r°   s     r   rÞ   zPyCodec.inita  s   € ð ˆŒ	ˆ	ˆ	r   c                 ó   — dS )zT
        Override to perform codec specific cleanup

        :returns: None
        Nr   r?   s    r   rr   zPyCodec.cleanupj  s	   € ð 	ˆ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Ý   )r7   rÝ   s     r   ro   zPyCodec.setfdr  s   € ð ˆŒˆˆr   Nc                 ó:  — || _         |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)rc   r4   rC   rÕ   rÖ   r×   rØ   Ú
ValueError)r7   rc   rx   Úx0Úy0Úx1Úy1r   s           r   rm   zPyCodec.setimage{  s  € ð ˆŒàð 	,Ø&ÑˆR��R˜˜à+ÑˆR��R˜à�Š7ˆ7�r˜Q’w�wØ15´´Ñ.ˆDŒJÔ˜dœjÔ.Ð.à ˆDŒJŒOØ ˆDŒJŒOØ! B™wˆDŒJÔØ! B™wˆDŒJÔàŒ:Ô˜qÒ Ð  D¤JÔ$4¸Ò$9Ð$9Ø+ˆCÝ˜S‘/”/Ð!ð ŒJÔ˜tœzœÑ.°´´¸a´Ò@Ð@ØŒzÔ $¤*¤/Ñ1°D´G´LÀ´OÒCÐCà4ˆCÝ˜S‘/”/Ð!ð DÐCr   r;   )rŒ   r�   rŽ   r    rÞ   rr   ro   rm   r   r   r   rÛ   rÛ   Y  sd   € € € € € ðð ð ðð ð ðð ð ðð ð ð#"ð #"ð #"ð #"ð #"ð #"r   rÛ   c                   ó:   — e Zd ZdZdZed„ ¦   «         Zd„ Z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>`
    Fc                 ó   — | j         S r;   )Ú	_pulls_fdr?   s    r   rn   zPyDecoder.pulls_fd«  s
   € àŒ~Ðr   c                 ó   — 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`.
        r”   )r7   Úbuffers     r   rp   zPyDecoder.decode¯  ó   € õ "Ñ#Ô#Ð#r   Nc                 óP  — |s| j         }t          j        | j         d|¦  «        }|                     | j        | j                             ¦   «         ¦  «         |                     |¦  «        }|d         dk    rd}t          |¦  «        ‚|d         dk    rd}t          |¦  «        ‚dS )a  
        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
        :returns: None
        rH   r   znot enough image datar   zcannot decode image dataN)	r3   r   rl   rm   rc   rC   rx   rp   rã   )r7   r    Úrawmoder©   r   r   s         r   Ú
set_as_rawzPyDecoder.set_as_rawº  sŸ   € ð ð 	 Ø”iˆGÝÔ˜dœi¨°Ñ8Ô8ˆØ	�
Š
�4”7˜DœJ×.Ò.Ñ0Ô0Ñ1Ô1Ð1Ø�HŠH�T‰NŒNˆàˆQŒ4�1Š9ˆ9Ø)ˆCÝ˜S‘/”/Ð!ØˆQŒ4�1Š9ˆ9Ø,ˆCÝ˜S‘/”/Ð!ð ˆ9r   r;   )	rŒ   r�   rŽ   r�   rë   Úpropertyrn   rp   rñ   r   r   r   ré   ré   ¡  sa   € € € € € ðð ð €Iàðð ñ „Xðð	$ð 	$ð 	$ð"ð "ð "ð "ð "ð "r   ré   c                   ó>   — e Zd ZdZdZed„ ¦   «         Zd„ Zd„ Z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>`
    Fc                 ó   — | j         S r;   )Ú
_pushes_fdr?   s    r   rÁ   zPyEncoder.pushes_fdÜ  s
   € àŒÐr   c                 ó   — 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`.
        r”   )r7   r»   s     r   rÃ   zPyEncoder.encodeà  rî   r   c                 ó†   — | j         sdS |                      d¦  «        \  }}}|r| 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Ä   )r7   Úbytes_consumedÚerrcoder    s       r   rÂ   zPyEncoder.encode_to_pyfdë  sP   € ð Œ~ð 	Ø�5Ø(,¯ª°A©¬Ñ%ˆ˜ Øð 	 ØŒG�MŠM˜$ÑÔÐØ˜wÐ&Ð&r   c                 óš   — d}|dk    rB|                       |¦  «        \  }}}|dk    r|                     ||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Ã   rÄ   )r7   r¼   r»   rú   ÚstatusÚbufs         r   rÅ   zPyEncoder.encode_to_fileú  s_   € ð ˆØ˜ŠlˆlØ#'§;¢;¨wÑ#7Ô#7Ñ ˆF�G˜SØ˜ŠzˆzØ—’˜˜V˜W˜WœÑ&Ô&Ð&ð ˜Šlˆlð ˆr   N)
rŒ   r�   rŽ   r�   rö   rò   rÁ   rÃ   rÂ   rÅ   r   r   r   rô   rô   Ò  sk   € € € € € ðð ð €Jàðð ñ „Xðð	$ð 	$ð 	$ð'ð 'ð 'ðð ð ð ð r   rô   )r   r;   )r¥   rj   r1   rY   Ú r   Ú_utilr   r&   rË   rq   r   r   r   r   r’   rž   r¾   r¹   rÑ   rÓ   rÛ   ré   rô   r   r   r   ú<module>r      s-  ðð< 
€	€	€	Ø Ð Ð Ð Ø €€€Ø 
€
€
€
à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à€à€	àÐ Ø Nð 	%ØØØØð
ð 
€ððð ð ðð ð ðp$ð p$ð p$ð p$ð p$�”ñ p$ô p$ð p$ðf'ð 'ð 'ð 'ð '�Iñ 'ô 'ð 'ð<Gð Gð Gð Gð Gñ Gô Gð GðZð ð ð ð8ð ð ð ð8 ð  ð  ðFTð Tð Tð Tð Tñ Tô Tð TðE"ð E"ð E"ð E"ð E"ñ E"ô E"ð E"ðP."ð ."ð ."ð ."ð ."�ñ ."ô ."ð ."ðb6ð 6ð 6ð 6ð 6�ñ 6ô 6ð 6ð 6ð 6r   