o
    ë6Wjfz  ã                   @  sì  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Zd dl	Z	d dl
Z
ddlmZmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ d
Zerbd dlmZmZ ddlmZ d×dd„Zd×dd„Zd×dd„Z d×dd„Z!d×dd„Z"i ddde!f“d d!d"e!f“d#d$d%e!f“d&d'd(e!f“d)d*d+ef“d,d-d.e!f“d/d0d1e!f“d2d3d4e!f“d5d6“d7d8d9e!f“d:d;d<e!f“d=d>d?e!f“d@dAdBef“dCdDdEe!f“dFdGdHe!f“dIdJdKe!f“dLdM“i dNdO“dPdQ“dRdS“dTdU“dVdW“dXdY“dZd[“d\d]“d^d_“d`dadbef“dcddde"f“dedfdgef“dhdidjef“dkdldme!f“dndodpef“dqdrdsef“dtdudvef“¥i dwdxdyef“dzd{d|ef“d}d~def“d€d�d‚ef“dƒd„d…ef“d†d‡dˆef“d‰dŠd‹ef“dŒd�dŽef“d�d�d‘ef“d’d“d”ef“d•d–d—ef“d˜d™dšef“d›dœd�ef“dždŸd ef“d¡d¢“d£d¤“d¥d¦“¥d§d¨d©dªd«d¬d­d®d¯d°d±dd²e fd³œ¥Z#dØd·d¸„Z$G d¹d„ dejƒZ%dÙd»d¼„Z&dÙd½d¾„Z'd¿d¿dÀdÀdÁdÂdÃœZ(dÄZ)d ddÅdÆœZ*dÚdÉdÊ„Z+dÛdÏdÐ„Z,	dÜdÝdÓdÔ„Z-e .e%j/e-e$¡ e 0e%j/e,¡ e 1e%j/g dÕ¢¡ e 2e%j/dÖ¡ dS )Þé    )ÚannotationsNé   )ÚImageÚ	ImageFile)Úi16be)Úi32be)Úo8)Úo16be)ÚpresetsF)ÚIOÚAny©ÚMpoImageFileÚselfÚJpegImageFileÚmarkerÚintÚreturnÚNonec                 C  s4   | j d usJ ‚t| j  d¡ƒd }t | j |¡ d S )Né   )ÚfpÚi16Úreadr   Ú
_safe_read)r   r   Ún© r   úb/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/PIL/JpegImagePlugin.pyÚSkip?   s   r   c                 C  s®  | j d usJ ‚t| j  d¡ƒd }t | j |¡}d|d@ › �}|| j|< | j ||f¡ |dkrˆ| d¡rˆt|dƒ | j	d< }t
|dƒ| j	d	< z|d
 }t|dƒt|dƒf}W n
 tya   Y d S w |dkrl|| j	d< n|dkr|tdd„ |D ƒƒ| j	d< || j	d< || j	d< d S |dkr¶| d¡r¶d| j	v r¥| j	d  |dd … 7  < d S || j	d< | j  ¡ | d | _d S |dkrÌ| d¡rÌ| dd¡d | j	d< d S |dkrÜ| d¡rÜ|| j	d< d S |dkrí| d¡rí| j |¡ d S |dk�r…| d¡�r…d }| j	 d!i ¡}	zw|||d" … d#k�rv|d"7 }t||ƒ}
|d7 }|| }|d| 7 }||d@ 7 }t||ƒ}|d"7 }|||| … }|
d$k�rZt|d%ƒd& t|d"ƒt|dƒd& t|d'ƒd(œ|	|
< n||	|
< ||7 }||d@ 7 }|||d" … d#k�sW d S W d S  tj�y„   Y d S w |d)k�r±| d*¡�r±t|dƒ| j	d+< z|d, }W n t�y©   Y d S w || j	d-< d S |dk�rÓ| d.¡�rÕ|d"d … | j	d/< | j  ¡ | d" | j	d0< d S d S d S )1Nr   ÚAPPé   éàÿ  s   JFIFé   Újfifé   Újfif_versioné   é   é
   r   Údpic                 s  s   � | ]}|d  V  qdS )çR¸…ëQ@Nr   )Ú.0Údr   r   r   Ú	<genexpr>b   s   € zAPP.<locals>.<genexpr>Ú	jfif_unitÚjfif_densityéáÿ  s   Exif  Úexifé   ó   http://ns.adobe.com/xap/1.0/ ó    Úxmpéâÿ  s   FPXR Úflashpixó   ICC_PROFILE éíÿ  s   Photoshop 3.0 é   Ú	photoshopé   s   8BIMií  r   i   é   )ÚXResolutionÚDisplayedUnitsXÚYResolutionÚDisplayedUnitsYéîÿ  s   AdobeÚadobeé   Úadobe_transforms   MPF ÚmpÚmpoffset)r   r   r   r   r   ÚappÚapplistÚappendÚ
startswithÚinfoÚdivmodÚ	ExceptionÚtupleÚtellÚ_exif_offsetÚsplitÚicclistÚ
setdefaultÚi32ÚstructÚerrorÚ
IndexError)r   r   r   ÚsrG   Úversionr-   r.   Úoffsetr:   ÚcodeÚname_lenÚsizeÚdatarD   r   r   r   r   E   sŽ   
ÿ





ü"èÿÿûr   c                 C  sX   | j d usJ ‚t| j  d¡ƒd }t | j |¡}|| jd< || jd< | j d|f¡ d S )Nr   ÚcommentÚCOM)	r   r   r   r   r   rK   rG   rH   rI   )r   r   r   rX   r   r   r   r`   °   s   

r`   c           	      C  s®  | j d usJ ‚t| j  d¡ƒd }t | j |¡}t|dƒt|dƒf| _| jd ur2| j| jjkr2d | _|d | _	| j	dkrGd| j	› d�}t
|ƒ‚|d | _| jdkrUd	| _n| jdkr^d
| _n| jdkrgd| _nd| j› d�}t
|ƒ‚|dv r€d | jd< | jd< | jr¬| j ¡  | jd d t| jƒkr¢dd„ | jD ƒ}d |¡}nd }|| jd< g | _tdt|ƒdƒD ] }|||d … }| j |d |d d |d d@ |d f¡ q´d S )Nr   é   r   r   r&   zcannot handle z-bit layersr!   ÚLÚRGBr;   ÚCMYKz-layer images)éÂÿ  éÆÿ  éÊÿ  éÎÿ  ÚprogressiveÚprogressioné   c                 S  s   g | ]}|d d… ‘qS )r9   Nr   )r*   Úpr   r   r   Ú
<listcomp>â   s    zSOF.<locals>.<listcomp>ó    Úicc_profiler1   é   r   )r   r   r   r   r   Ú_sizeÚ_imr]   ÚimÚbitsÚSyntaxErrorÚlayersÚ_moderK   rR   ÚsortÚlenÚjoinÚrangeÚlayerrI   )	r   r   r   rX   ÚmsgÚprofilero   ÚiÚtr   r   r   ÚSOF¼   sB   







.ýr�   c                   sê   | j d usJ ‚t| j  d¡ƒd }t | j |¡}t|ƒrs|d }|d dkr(dnd}d|d  }t|ƒ|k r<d}t|ƒ‚t |dkrDdnd|d|… ¡‰ tj	d	krY|dkrYˆ  
¡  ‡ fd
d„tD ƒ| j|d@ < ||d … }t|ƒsd S d S )Nr   r   rp   r   é@   zbad quantization table markerÚBÚHÚlittlec                   s   g | ]}ˆ | ‘qS r   r   )r*   r   ©r^   r   r   rm     ó    zDQT.<locals>.<listcomp>r   )r   r   r   r   r   ry   ru   ÚarrayÚsysÚ	byteorderÚbyteswapÚzigzag_indexÚquantization)r   r   r   rX   ÚvÚ	precisionÚ	qt_lengthr}   r   r†   r   ÚDQTï   s     õr‘   iÀÿ  ÚSOF0zBaseline DCTiÁÿ  ÚSOF1zExtended Sequential DCTre   ÚSOF2zProgressive DCTiÃÿ  ÚSOF3zSpatial losslessiÄÿ  ÚDHTzDefine Huffman tableiÅÿ  ÚSOF5zDifferential sequential DCTrf   ÚSOF6zDifferential progressive DCTiÇÿ  ÚSOF7zDifferential spatialiÈÿ  )ÚJPGÚ	ExtensionNiÉÿ  ÚSOF9zExtended sequential DCT (AC)rg   ÚSOF10zProgressive DCT (AC)iËÿ  ÚSOF11zSpatial lossless DCT (AC)iÌÿ  ÚDACz%Define arithmetic coding conditioningiÍÿ  ÚSOF13z Differential sequential DCT (AC)rh   ÚSOF14z!Differential progressive DCT (AC)iÏÿ  ÚSOF15zDifferential spatial (AC)iÐÿ  )ÚRST0z	Restart 0NiÑÿ  )ÚRST1z	Restart 1NiÒÿ  )ÚRST2z	Restart 2NiÓÿ  )ÚRST3z	Restart 3NiÔÿ  )ÚRST4z	Restart 4NiÕÿ  )ÚRST5z	Restart 5NiÖÿ  )ÚRST6z	Restart 6Ni×ÿ  )ÚRST7z	Restart 7NiØÿ  )ÚSOIzStart of imageNiÙÿ  )ÚEOIzEnd of imageNéÚÿ  ÚSOSzStart of scaniÛÿ  zDefine quantization tableiÜÿ  ÚDNLzDefine number of linesiÝÿ  ÚDRIzDefine restart intervaliÞÿ  ÚDHPzDefine hierarchical progressionißÿ  ÚEXPzExpand reference componentr    ÚAPP0zApplication segment 0r/   ÚAPP1zApplication segment 1r5   ÚAPP2zApplication segment 2iãÿ  ÚAPP3zApplication segment 3iäÿ  ÚAPP4zApplication segment 4iåÿ  ÚAPP5zApplication segment 5iæÿ  ÚAPP6zApplication segment 6içÿ  ÚAPP7zApplication segment 7ièÿ  ÚAPP8zApplication segment 8iéÿ  ÚAPP9zApplication segment 9iêÿ  ÚAPP10zApplication segment 10iëÿ  ÚAPP11zApplication segment 11iìÿ  ÚAPP12zApplication segment 12r8   ÚAPP13zApplication segment 13rA   ÚAPP14zApplication segment 14iïÿ  ÚAPP15zApplication segment 15iðÿ  )ÚJPG0zExtension 0Niñÿ  )ÚJPG1zExtension 1Niòÿ  )ÚJPG2zExtension 2N)ÚJPG3zExtension 3N)ÚJPG4zExtension 4N)ÚJPG5zExtension 5N)ÚJPG6zExtension 6N)ÚJPG7zExtension 7N)ÚJPG8zExtension 8N)ÚJPG9zExtension 9N)ÚJPG10zExtension 10N)ÚJPG11zExtension 11N)ÚJPG12zExtension 12N)ÚJPG13zExtension 13NÚComment)ióÿ  iôÿ  iõÿ  iöÿ  i÷ÿ  iøÿ  iùÿ  iúÿ  iûÿ  iüÿ  éýÿ  iþÿ  ÚprefixÚbytesÚboolc                 C  s
   |   d¡S )Ns   ÿØÿ)rJ   )rÓ   r   r   r   Ú_acceptN  s   
rÖ   c                      sz   e Zd ZdZdZd"dd„Zd#‡ fdd	„Zd$‡ fdd„Zd%dd„Zd&dd„Z	d"dd„Z
d'dd„Zd"dd„Zd'd d!„Z‡  ZS )(r   ÚJPEGzJPEG (ISO 10918)r   r   c                 C  sX  | j d usJ ‚| j  d¡}t|ƒsd}t|ƒ‚d}d | _| _d| _g | _i | _i | _	i | _
i | _g | _g | _	 |d }|dkrM|| j  d¡ }t|ƒ}n| j  d¡}q7|tv r�t| \}}}|d urh|| |ƒ |dkr†| j}| jd	krvd
}t dd| j d|df¡g| _n | j  d¡}n|dv r”d}n|dkrŸ| j  d¡}nd}t|ƒ‚q8|  ¡  d S )Nra   znot a JPEG fileó   ÿr   Téÿ   r   r­   rd   úCMYK;IÚjpeg©r   r   Ú >   éÿÿ  r   i ÿ  zno marker found)r   r   rÖ   ru   rt   rv   rP   r|   Ú_huffman_dcÚ_huffman_acr�   rG   rH   rR   r   ÚMARKERÚmoder   Ú_Tiler]   ÚtileÚ_read_dpi_from_exif)r   rX   r}   r   ÚnameÚdescriptionÚhandlerÚrawmoder   r   r   Ú_open[  sT   


ÿá!zJpegImageFile._openú	list[Any]c                   s   t ƒ  ¡ | j| jg S ©N)ÚsuperÚ__getstate__rv   r|   ©r   ©Ú	__class__r   r   rî   ”  s   zJpegImageFile.__getstate__Ústatec                   s$   |dd … \| _ | _tƒ  |¡ d S )Nr1   )rv   r|   rí   Ú__setstate__)r   rò   rð   r   r   ró   —  s   zJpegImageFile.__setstate__Ú
read_bytesr   rÔ   c                 C  s<   | j dusJ ‚| j  |¡}|stjrt| dƒsd| _dS |S )z›
        internal: read more image data
        For premature EOF and LOAD_TRUNCATED_IMAGES adds EOI marker
        so libjpeg can finish decoding
        NÚ_endedTs   ÿÙ)r   r   r   ÚLOAD_TRUNCATED_IMAGESÚhasattrrõ   )r   rô   rX   r   r   r   Ú	load_read›  s   zJpegImageFile.load_readrâ   ú
str | Noner]   útuple[int, int] | Noneú0tuple[str, tuple[int, int, float, float]] | Nonec                 C  s~  t | jƒdkr	d S | jrd S | jd \}}}}d}| j}t|tƒs#J ‚|d dkr4|dv r4|| _|df}|r�t| jd |d  | jd |d  ƒ}dD ]}	||	krS nqK|d usZJ ‚|d |d |d |d  |	 d |	 |d  |d |d  |	 d |	 |d  f}| jd |	 d |	 | jd |	 d |	 f| _|	}t	 
||||¡g| _|df| _dd|d | |d | f}
| j|
fS )	Nr   r   rc   )rb   ÚYCbCrrÝ   )r&   r;   r   r   r   ra   )ry   rä   Údecoderconfigr]   Ú
isinstancerN   rw   Úminrq   r   rã   râ   )r   râ   r]   r+   ÚeÚoÚaÚscaleÚoriginal_sizerX   Úboxr   r   r   Údraft¬  s:   &ÿ""ü.

zJpegImageFile.draftc                 C  s  t  ¡ \}}t |¡ tj | j¡rt dd|| jg¡ nzt 	|¡ W n	 t
y-   Y nw d}t|ƒ‚z/t |¡�}| ¡  |j| _W d   ƒ n1 sMw   Y  W zt 	|¡ W n t
yc   Y nw zt 	|¡ W w  t
yt   Y w w | jj| _| jj| _g | _d S )NÚdjpegz-outfilezInvalid Filename)ÚtempfileÚmkstempÚosÚcloseÚpathÚexistsÚfilenameÚ
subprocessÚ
check_callÚunlinkÚOSErrorÚ
ValueErrorr   ÚopenÚloadrs   râ   rw   r]   rq   rä   )r   Úfr  r}   rr   r   r   r   Ú
load_djpegÔ  s<   
ÿ
þ€ÿþÿ


zJpegImageFile.load_djpegúdict[int, Any] | Nonec                 C  ó   t | ƒS rì   )Ú_getexifrï   r   r   r   r  ó  ó   zJpegImageFile._getexifc                 C  sÈ   d| j v s
d| j vrd S zA|  ¡ }|d }|d }zt|d ƒ|d  }W n ty0   |}Y nw t |¡r<d}t|ƒ‚|dkrD|d	9 }||f| j d< W d S  tjt	t
tttfyc   d
| j d< Y d S w )Nr(   r0   i(  i  r   r   zDPI is not a numberra   r)   )éH   r  )rK   ÚgetexifÚfloatÚ	TypeErrorÚmathÚisnanr  rU   rV   ÚKeyErrorru   ÚZeroDivisionError)r   r0   Úresolution_unitÚx_resolutionr(   r}   r   r   r   rå   ö  s6   ÿ

úøz!JpegImageFile._read_dpi_from_exifc                 C  r  rì   )Ú_getmprï   r   r   r   r&    r  zJpegImageFile._getmp)r   r   )r   rë   )rò   rë   r   r   )rô   r   r   rÔ   )râ   rù   r]   rú   r   rû   )r   r  )Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionrê   rî   ró   rø   r  r  r  rå   r&  Ú__classcell__r   r   rð   r   r   W  s    
9


(

r  c                 C  s   d| j vrd S |  ¡  ¡ S )Nr0   )rK   r  Ú_get_merged_dictrï   r   r   r   r    s   
r  c              
   C  s  z| j d }W n
 ty   Y d S w t |¡}| d¡}| d¡r#dnd}ddlm} z| |¡}| 	|j
¡ | |¡ t|ƒ}W n tyT } zd}	t|	ƒ|‚d }~ww z|d	 }
W n tyn } zd
}	t|	ƒ|‚d }~ww g }z€|d }t|
ƒD ]p}t |› d�||d ¡}d}tt||ƒƒ}t|d d@ ƒt|d d@ ƒt|d d@ ƒ|d d@ d? |d d@ d? |d d@ dœ}|d dkrÇd|d< nd}	t|	ƒ‚dddd d!d"d#d$œ}| |d% d&¡|d%< ||d< | |¡ qz||d< W |S  t�y } zd'}	t|	ƒ|‚d }~ww )(NrE   r&   s   MM *ú>ú<r   )ÚTiffImagePluginz)malformed MP Index (unreadable directory)é°  z(malformed MP Index (no number of images)i°  ÚLLLHHrp   )Ú	AttributeÚSizeÚ
DataOffsetÚEntryNo1ÚEntryNo2r3  l        i   @i    i   é   i   é   iÿÿÿ )ÚDependentParentImageFlagÚDependentChildImageFlagÚRepresentativeImageFlagÚReservedÚImageDataFormatÚMPTyper>  r   r×   z!unsupported picture format in MPOÚ	Undefinedz Large Thumbnail (VGA Equivalent)z$Large Thumbnail (Full HD Equivalent)zMulti-Frame Image (Panorama)zMulti-Frame Image: (Disparity)z Multi-Frame Image: (Multi-Angle)zBaseline MP Primary Image)r   i  i  i  i  i  i   r?  ÚUnknownz!malformed MP Index (bad MP Entry))rK   r"  ÚioÚBytesIOr   rJ   rÝ   r0  ÚImageFileDirectory_v2ÚseekÚnextr  ÚdictrM   ru   r{   rU   Úunpack_fromÚziprÕ   ÚgetrI   )r   r^   Úfile_contentsÚheadÚ
endiannessr0  rK   rE   r   r}   ÚquantÚ	mpentriesÚrawmpentriesÚentrynumÚunpackedentryÚlabelsÚmpentryÚmpentryattrÚ	mptypemapr   r   r   r&    s€   ÿ




€þ
€þÿ
ú
ù	
ú
€þr&  rb   rc   rÚ   rü   )Ú1rb   rc   ÚRGBXrd   rü   )@r   r   r!   r1   r9   r   r8  é   r   r;   r%   rk   rp   é   é   é*   ra   r&   r<   é   é   é   é)   é+   é	   rC   é   r9  é   é(   é,   é5   r'   é   é   é    é'   é-   é4   é6   é   é   é!   é&   é.   é3   é7   é<   é   é"   é%   é/   é2   é8   é;   é=   é#   é$   é0   é1   é9   é:   é>   é?   r   ))r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   rs   úImage.Imagec                 C  sZ   t | tƒr
| jdv rdS | jd dd… | jd dd…  | jd dd…  }t |d¡S )N)r   r;   éÿÿÿÿr   r   ra   r   )rþ   r   rv   r|   Ú	samplingsrJ  )rs   Úsamplingr   r   r   Úget_sampling‰  s   6r‹  r   ú	IO[bytes]r  ústr | bytesc                 C  sV  zt | j }W n ty } zd| j› d�}t|ƒ|‚d }~ww | j}dd„ | dd¡D ƒ}| dd¡}| d	d¡}	| d
¡}
|dkrJd}d}	d}
n=|tv r`t| }d}| d	d¡}	| d¡}
n't|tƒskd}t	|ƒ‚|	tv rwt|	  d	d¡}	t|
t
ƒr‡|
tv r‡t|
  d¡}
|	dkrŽd}	n(|	dkr•d}	n!|	dkrœd}	n|	dkr£d}	n|	dkr¶| jdkr²d}t	|ƒ‚t| ƒ}	d9dd„}|
dkrÐ| jdkrÊd}t	|ƒ‚t| dd ƒ}
||
ƒ}
| dd¡}d}| d¡ }�r
d }|| }t|ƒ|kröd!}t	|ƒ‚td| t|ƒ ƒ}|d"| d# | 7 }| d$¡ }�rYd%}|| }g }|�r/| |d |… ¡ ||d … }|�sd}|D ]%}td| t|ƒ ƒ}|d&| d' t|ƒ tt|ƒƒ | 7 }|d7 }�q3| d(| j d(¡¡}| d)d*¡�po| d+d*¡}| d,d*¡}| d-d¡}t|tjƒ�r‡| ¡ }t|ƒ|k�r”d.}t	|ƒ‚||| d/d¡|| d0d*¡| d1d¡||	| d2d¡| d3d¡|
|||f| _|�s¿|�r
| jd4k�rÒd5| jd  | jd  }n!|d6k�sÜ|dk�réd| jd  | jd  }n
| jd | jd  }|�rþ|t|ƒd7 7 }|�r	|t|ƒd 7 }ntt|ƒd7 t|ƒd ƒ}t | |t d8d| j d|¡g|¡ d S ):Nzcannot write mode z as JPEGc                 S  s   g | ]}t |ƒ‘qS r   )Úround)r*   Úxr   r   r   rm      r‡   z_save.<locals>.<listcomp>r(   rÜ   Úqualityrˆ  ÚsubsamplingÚqtablesÚkeepr�   zInvalid quality settingz4:4:4r   z4:2:2r   z4:2:0r   z4:1:1r×   z3Cannot use 'keep' when original image is not a JPEGúKstr | tuple[list[int], ...] | list[list[int]] | dict[int, list[int]] | Noner   úlist[list[int]] | Nonec              
     sP  ˆd u rˆS t ˆtƒr9zdd„ ˆ ¡ D ƒ‰ W n ty) } zd}t|ƒ|‚d }~ww ‡ fdd„tdtˆ ƒdƒD ƒ‰t ˆtttfƒr¦t ˆtƒrT‡fdd„ttˆƒƒD ƒ‰n	t ˆtƒr]tˆƒ‰dtˆƒ  k ridk spn d	}t|ƒ‚z"t	ˆƒD ]\}}t|ƒdkr…d}t
|ƒ‚tt d
|¡ƒˆ|< quW ˆS  t
y¥ } zd}t|ƒ|‚d }~ww d S )Nc                 S  s.   g | ]}|  d d¡d   ¡ D ]}t|ƒ‘qqS )ú#r   r   )rQ   r   )r*   ÚlineÚnumr   r   r   rm   Ñ  s    ýþÿz3_save.<locals>.validate_qtables.<locals>.<listcomp>zInvalid quantization tablec                   s   g | ]
}ˆ ||d  … ‘qS )r‚   r   )r*   rX   )Úlinesr   r   rm   Ú  s    r   r‚   c                   s   g | ]
}|ˆ v rˆ | ‘qS r   r   )r*   Úkey)r’  r   r   rm   Ý  s    r!   z$None or too many quantization tablesr„   )rþ   ÚstrÚ
splitlinesr  r{   ry   rN   ÚlistrG  Ú	enumerater  rˆ   )r’  r   r}   ÚidxÚtabler   )r™  r’  r   Úvalidate_qtablesÈ  sJ   

þ
€þ


ÿ
üý
€þðz_save.<locals>.validate_qtablesÚextrarn   rÒ   r4   r[  zXMP data is too longs   ÿár2   ro   r9   s   ÿâr7   r_   ri   Frj   Úoptimizer0   zEXIF data is too longÚsmoothÚkeep_rgbÚ
streamtypeÚrestart_marker_blocksÚrestart_marker_rowsrd   r;   é_   r!   rÛ   )r’  r”  r   r•  )ÚRAWMODErâ   r"  r  ÚencoderinforJ  r
   rþ   r   r  r›  r*  r‹  Úgetattrry   Úo16rI   r   rK   r   ÚExifÚtobytesÚencoderconfigr]   Úmaxr   Ú_saverã   )rs   r   r  ré   r   r}   rK   r(   r�  r‘  r’  Úpresetr¡  r¢  ÚMAX_BYTES_IN_MARKERr4   Úoverhead_lenÚmax_data_bytes_in_markerr]   ro   Úmarkersr   r   r_   ri   r£  r0   Úbufsizer   r   r   r²  —  sô   
€þ



(
þÿþý
üûÿ




ò€ÿr²  ústr | bytes | NoneúJpegImageFile | MpoImageFilec              	   C  s°   t | |ƒ}z8| ¡ }|d ur8|d dkr;|jD ]\}}|dkr(d|v r(|  W S qddlm} | ||¡}W |S W |S W |S  ttfyI   Y |S  tyW   t	 
d¡ Y |S w )Nr1  r   r´   s    hdrgm:Version="r   zTImage appears to be a malformed MPO file, it will be interpreted as a base JPEG file)r   r&  rH   ÚMpoImagePluginr   Úadoptr  rW   ru   ÚwarningsÚwarn)r   r  rs   ÚmpheaderÚsegmentÚcontentr   r   r   r   Újpeg_factoryV  s0   

€	îîøûÿûrÂ  )z.jfifz.jpez.jpgz.jpegz
image/jpeg)r   r   r   r   r   r   )rÓ   rÔ   r   rÕ   )r   r   r   r  )rs   r‡  r   r   )rs   r‡  r   rŒ  r  r�  r   r   rì   )r   rŒ  r  r¹  r   rº  )3Ú
__future__r   rˆ   rB  r   r
  rU   r  r‰   r  r½  rÝ   r   r   Ú_binaryr   r   r   rT   r   r	   r­  ÚJpegPresetsr
   ÚTYPE_CHECKINGÚtypingr   r   r»  r   r   r   r`   r�   r‘   rá   rÖ   r   r  r&  rª  rŒ   r‰  r‹  r²  rÂ  Úregister_openr*  Úregister_saveÚregister_extensionsÚregister_mimer   r   r   r   Ú<module>   sN  !


k

3
ÿ
þ
ý
ü
û
ú
ù
ø	÷

ö
õ
ô
ó
ò
ñ
ðïîíìëêéèçæ
å
ä
ã
â
á
 à
!ß
"Þ
#Ý
$Ü
%Û
&Ú
'Ù
(Ø
)×
*Ö
+Õ
,Ô
-Ó
.Ò
/Ñ
0Ð1Ï2Î3Í4Á
C	 
A
Pú
ý

 Aÿ