o
    üÞh%L ã                   @  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	m
Z
mZ d dlmZ d dlmZmZ d dlmZmZmZmZmZ ddlmZmZmZmZmZmZ dd	lmZ  dd
lm!Z" ddlm#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z)m*Z* ddlm+Z+ dZ,e,rŽddl&m-Z-m.Z. e /e0¡Z1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAd ZBd!ZCd"ZDd#ZEd$ZFd%ZGd&ZHd'ZId(ZJd)ZKd*ZLd+ZMd,ZNd-ZOd.ZPd/ZQd0ZRd1ZSd2ZTd3ZUd4ZVd5ZWd6ZXd7ZYd8ZZd9Z[d:Z\d;Z]d<Z^d=Z_i dd>“d?d@“dAdB“dCdD“dEdF“dGdH“dIdJ“dKdL“dMdN“dOdP“dQdR“dSdT“dUdV“dWdX“dYdZ“d[d\“d]d^“Z`d_d`„ e` a¡ D ƒZbi e5d daddadbfdc“e6d daddadbfdc“e5d dad?dadbfdd“e6d dad?dadbfdd“e5ddaddadbfde“e6ddaddadbfde“e5ddad?dadbfdf“e6ddad?dadbfdf“e5d daddgdbfdh“e6d daddgdbfdh“e5d dad?dgdbfdi“e6d dad?dgdbfdi“e5ddaddgdbfdj“e6ddaddgdbfdj“e5ddad?dgdbfdk“e6ddad?dgdbfdk“e5d daddldbfdm“i e6d daddldbfdm“e5d dad?dldbfdn“e6d dad?dldbfdn“e5ddaddldbfdo“e6ddaddldbfdo“e5ddad?dldbfdp“e6ddad?dldbfdp“e5d daddqdbfdr“e6d daddqdbfdr“e5d dad?dqdbfds“e6d dad?dqdbfds“e5ddaddqdbfdt“e6ddaddqdbfdt“e5ddgddqdbfdt“e6ddgddqdbfdt“e5ddad?dqdbfdu“e6ddad?dqdbfdu“¥i e5ddaddvdbfdw“e5d daddxdbfdy“e5ddaddxdbfdy“e6ddaddxdbfdz“e5ddad?dxdbfd{“e5ddgddxdbfd|“e6ddgddxdbfd}“e5d d~dddbfd€“e6d d~dddbfd�“e5ddadddbfd‚“e5ddgdddbfdƒ“e6ddgdddbfd„“e5dd~dddbfd€“e6dd~dddbfd�“e5ddadd…dgfd†“e6ddadd…dgfd†“e5d?dadd‡dbfdˆ“¥i e6d?dadd‡dbfdˆ“e5d?dad?d‡dbfd‰“e6d?dad?d‡dbfd‰“e5d?daddŠdbfd‹“e6d?daddŠdbfd‹“e5d?daddŠdŒfd�“e6d?daddŠdŒfd�“e5d?daddŽd�fd�“e6d?daddŽd�fd�“e5d?dadd‘d’fd““e6d?dadd‘d’fd““e5d?daddŠdafd”“e6d?daddŠdafd”“e5d?daddŽd•fd–“e6d?daddŽd•fd–“e5d?dadd‘d—fd˜“e6d?dadd‘d—fd˜“¥i e5d?daddŠdgfd‹“e6d?daddŠdgfd‹“e5d?daddŽd™fdš“e6d?daddŽd™fdš“e5d?dadd‘d›fdœ“e6d?dadd‘d›fdœ“e5d?daddŠd�fd‹“e6d?daddŠd�fd‹“e5d?daddždbfdŸ“e6d?daddždbfd “e5d?dadd¡dbfd¢“e6d?dadd¡dbfd£“e5d?dadd¡dŒfd¤“e6d?dadd¡dŒfd¥“e5d?dadd¡dafd¦“e6d?dadd¡dafd§“e5d?dadd¡dgfd¢“¥i e6d?dadd¡dgfd£“e5dAdaddadbfd¨“e6dAdaddadbfd¨“e5dAdad?dadbfd©“e6dAdad?dadbfd©“e5dAdaddgdbfdª“e6dAdaddgdbfdª“e5dAdad?dgdbfd«“e6dAdad?dgdbfd«“e5dAdaddldbfd¬“e6dAdaddldbfd¬“e5dAdad?dldbfd­“e6dAdad?dldbfd­“e5dAdaddqdbfd®“e6dAdaddqdbfd®“e5dAdadd…dŒfd¯“e5dAdadd…dgfd°“¥i e6dAdadd…dgfd°“e5dAdad?dqdbfd±“e6dAdad?dqdbfd±“e5dEdaddŠdbfd²“e6dEdaddŠdbfd²“e5dEdaddŽdŒfd³“e6dEdaddŽdŒfd³“e5dEdadd‘d�fd´“e6dEdadd‘d�fd´“e5dEdadd¡dbfdµ“e6dEdadd¡dbfd¶“e5dGdaddqdbfdt“e6dGdaddqdbfdt“e5dGdadd‡dbfd�“e6dGdadd‡dbfd�“e5dKdadd‡dbfd·“e6dKdadd‡dbfd·“¥Zcedd¸d¹„ ecD ƒƒZeg dº¢Zfegejhd»d¼ƒ�s„e%d½d¾ƒ �ddÃdÄ„Zi�ddÊdË„Zj�ddÎdÏ„Zki Zli Zm�ddÓdÔ„ZnG dÕdÌ„ dÌeƒZoedÖepeqgef Zr�ddÚdÛ„Zs�ddÝdÞ„Zt�ddâdã„Zue,�rÍeevef ZwneZwG dädÖ„ dÖewƒZxelex_lemex_me+ a¡ D ]#\ZyZzez {dådæ¡Zze|exdçez› �eley d ƒ e|exdèez› �emey ƒ �qá[l[m[y[zG dédê„ dêexƒZ}e}Z~G dëdì„ dìejƒZi dídíe5dddadf“dîdîe5dddqdf“dïdïe5ddd…d?f“dðdðe5dAddqdf“dñdñe5dAdd…d?f“dòdóe5dd?ddf“dôdôe5dddxdf“dõdõe5dddxdf“död÷e5ddAddf“dødøe5d?dd‡df“dùdùe5d?ddŠd f“dúdúe5d?ddŠd?f“dûdûe5dEddŠdf“düdüe5dGdd‡df“dýdýe5dKdd‡df“dþdþe6dddxdf“Z€�d�d�d„Z�G �d�d„ �dej‚ƒZƒ�d�d	�d
„Z„e …ej†eei¡ e ‡ej†e�¡ e ˆej†e„¡ e ‰ej†�d�dg¡ e Šej†�d¡ dS (  é    )ÚannotationsN)ÚIteratorÚMutableMapping)ÚFraction)ÚNumberÚRational)ÚIOÚAnyÚCallableÚNoReturnÚcasté   )ÚExifTagsÚImageÚ	ImageFileÚImageOpsÚImagePaletteÚTiffTags)Úi16be)Úi32be©Úo8)Ú	deprecate)ÚStrOrBytesPath)ÚDeferredErrorÚis_path©ÚTYPESF)ÚBufferÚIntegralLikeé   s   IIs   MMéÿ   é   i  i  i  i  i
  i  é  i  i  i  i  i  i  i(  i-  i1  i2  i;  i=  i@  iB  iC  éD  iE  iJ  iR  iS  i[  i  i  i˜‚  i»ƒ  iI†  is‡  ii‡  i¼  i  i–Æ  i—Æ  Úrawé   Ú
tiff_ccitté   Úgroup3é   Úgroup4é   Útiff_lzwé   Ú	tiff_jpegé   Újpegé   Útiff_adobe_deflatei€  Útiff_raw_16i€  Úpackbitsi)€  Útiff_thunderscani²€  Útiff_deflateit‡  Útiff_sgilogiu‡  Útiff_sgilog24imˆ  ÚlzmaiPÃ  ÚzstdiQÃ  Úwebpc                 C  s   i | ]\}}||“qS © r=   )Ú.0ÚkÚvr=   r=   úS/var/www/html/premium_crap/venv/lib/python3.10/site-packages/PIL/TiffImagePlugin.pyÚ
<dictcomp>”   s    rB   ©r   r=   )Ú1z1;I)rD   z1;IR)rD   rD   )rD   z1;R)r&   )ÚLzL;2I)rE   zL;2IR)rE   zL;2)rE   zL;2R)r*   )rE   zL;4I)rE   zL;4IR)rE   zL;4)rE   zL;4R)r2   )rE   zL;I)rE   zL;IR)rE   rE   )rE   zL;R)é   )úI;16zI;12)é   )rG   rG   )úI;16BrI   )rG   zI;16R)ÚIzI;16S)rJ   zI;16BS)r(   )é    )ÚFúF;32F)rL   zF;32BF)rJ   zI;32N)rJ   úI;32S)rJ   zI;32BS)r2   r2   )ÚLArO   )r2   r2   r2   )ÚRGBrP   )rP   zRGB;R)r2   r2   r2   r2   )ÚRGBArQ   ©r   )rP   ÚRGBX)r2   r2   r2   r2   r2   ©r   r   )rP   ÚRGBXX)r2   r2   r2   r2   r2   r2   )r   r   r   )rP   ÚRGBXXX)rQ   ÚRGBa)r   r   )rQ   ÚRGBaX)r   r   r   )rQ   ÚRGBaXX)r&   r   )rQ   ÚRGBAX)r&   r   r   )rQ   ÚRGBAXX)iç  )rH   rH   rH   )rP   zRGB;16L)rP   zRGB;16B)rH   rH   rH   rH   )rQ   zRGBA;16L)rQ   zRGBA;16B)rP   zRGBX;16L)rP   zRGBX;16B)rQ   zRGBa;16L)rQ   zRGBa;16B)ÚPzP;1)r\   zP;1R)r\   zP;2)r\   zP;2R)r\   zP;4)r\   zP;4R)r\   r\   )r\   ÚPX)ÚPAr^   )r\   zP;R)ÚCMYKr_   )r_   ÚCMYKX)r_   ÚCMYKXX)r_   zCMYK;16L)r_   zCMYK;16B)ÚLABrb   c                 c  s   � | ]	}t |d  ƒV  qdS )r*   N)Úlen)r>   Úkey_tpr=   r=   rA   Ú	<genexpr>  ó   € re   )s   MM *s   II* s   MM* s   II *s   MM +s   II+ Úlibtiff_support_custom_tagsTz*Support for LibTIFF earlier than version 4rF   ÚprefixÚbytesÚreturnÚboolc                 C  s   |   ttƒ¡S ©N)Ú
startswithÚtupleÚPREFIXES©rh   r=   r=   rA   Ú_accept#  ó   rq   Úvalúfloat | Fraction | IFDRationalÚmax_valÚintú!tuple[IntegralLike, IntegralLike]c                 C  s<   t | ƒdk}t|rd|  n| ƒ |¡}|r|d d d… S |S )Nr   éÿÿÿÿ)ÚabsÚIFDRationalÚlimit_rational)rs   ru   ÚinvÚn_dr=   r=   rA   Ú_limit_rational'  s   r~   rz   Úmin_valc                 C  sp   t | ƒ}|j|jf}tdd„ |D ƒƒ|k rt| t|ƒƒ}tdd„ |D ƒƒ}t|ƒ|kr6t|d |d  |ƒ}|S )Nc                 s  ó   � | ]}t |ƒV  qd S rl   ©Úfloat©r>   Úir=   r=   rA   re   5  ó   € z)_limit_signed_rational.<locals>.<genexpr>c                 s  r€   rl   r�   rƒ   r=   r=   rA   re   8  r…   r   r   )r   Ú	numeratorÚdenominatorÚminr~   ry   rn   Úmax)rs   ru   r   Úfracr}   Ú	n_d_floatr=   r=   rA   Ú_limit_signed_rational/  s   rŒ   ÚopÚstrr	   c                   s   d	‡ fdd„}|S )
NÚselfrz   Úargsútuple[float, ...]rj   úbool | float | Fractionc                   s   t | jˆ ƒ|Ž S rl   )ÚgetattrÚ_val©r�   r�   ©r�   r=   rA   ÚdelegateG  s   z_delegate.<locals>.delegate)r�   rz   r�   r‘   rj   r’   r=   )r�   r—   r=   r–   rA   Ú	_delegateF  s   r˜   c                   @  sd  e Zd ZdZ	 dZ	dAdBd
d„ZedCdd„ƒZedDdd„ƒZdEdd„Z	dFdd„Z
dDdd„ZdGdd„ZdHd d!„ZdId#d$„Z	 ed%ƒZed&ƒZed'ƒZed(ƒZed)ƒZed*ƒZed+ƒZed,ƒZed-ƒZed.ƒZed/ƒZed0ƒZed1ƒZed2ƒZed3ƒZed4ƒZed5ƒZ ed6ƒZ!ed7ƒZ"ed8ƒZ#ed9ƒZ$ed:ƒZ%ed;ƒZ&ed<ƒZ'ed=ƒZ(ed>ƒZ)e*e+d?ƒr°ed?ƒZ,d@S d@S )Jrz   zÀImplements a rational class where 0/0 is a legal value to match
    the in the wild use of exif rationals.

    e.g., DigitalZoomRatio - 0.00/0.00  indicates that no digital zoom was used
    )Ú
_numeratorÚ_denominatorr”   r   Úvaluert   r‡   rv   rj   ÚNonec                 C  sÂ   |  t |tƒr|j| _|j| _|j| _dS t |tƒr#|j| _|j| _ntr,t	t
|ƒ| _n|| _|| _|dkr=tdƒ| _dS |dkrHt|ƒ| _dS t|ƒ|krXtt|ƒ|ƒ| _dS t|| ƒ| _dS )z®
        :param value: either an integer numerator, a
        float/rational/other number, or an IFDRational
        :param denominator: Optional integer denominator
        Nr   Únanr   )Ú
isinstancerz   r†   r™   r‡   rš   r”   r   ÚTYPE_CHECKINGr   r   r‚   rv   )r�   r›   r‡   r=   r=   rA   Ú__init__]  s(   


zIFDRational.__init__r   c                 C  ó   | j S rl   )r™   ©r�   r=   r=   rA   r†     ó   zIFDRational.numeratorc                 C  r¡   rl   )rš   r¢   r=   r=   rA   r‡   ƒ  r£   zIFDRational.denominatorÚmax_denominatorútuple[IntegralLike, int]c                 C  s>   | j dkr| j| j fS t| jtƒsJ ‚| j |¡}|j|j fS )z…

        :param max_denominator: Integer, the maximum denominator value
        :returns: Tuple of (numerator, denominator)
        r   )r‡   r†   rž   r”   r   Úlimit_denominator)r�   r¤   Úfr=   r=   rA   r{   ‡  s
   
zIFDRational.limit_rationalrŽ   c                 C  s   t t| jƒƒS rl   )rŽ   r‚   r”   r¢   r=   r=   rA   Ú__repr__•  rr   zIFDRational.__repr__c                 C  s
   | j  ¡ S rl   )r”   Ú__hash__r¢   r=   r=   rA   r©   ˜  ó   
zIFDRational.__hash__ÚotherÚobjectrk   c                 C  s0   | j }t|tƒr|j }t|tƒrt|ƒ}||kS rl   )r”   rž   rz   r‚   )r�   r«   rs   r=   r=   rA   Ú__eq__›  s   

zIFDRational.__eq__ú%list[float | Fraction | IntegralLike]c                 C  s   | j | j| jgS rl   )r”   r™   rš   r¢   r=   r=   rA   Ú__getstate__£  ó   zIFDRational.__getstate__Ústatec                 C  s^   t  | d¡ |\}}}t|ttfƒsJ ‚|| _tr tt|ƒ| _	n|| _	t|t
ƒs*J ‚|| _d S ©Nr   )rz   r    rž   r‚   r   r”   rŸ   r   r   r™   rv   rš   )r�   r±   r”   r™   rš   r=   r=   rA   Ú__setstate__¦  s   

zIFDRational.__setstate__Ú__add__Ú__radd__Ú__sub__Ú__rsub__Ú__mul__Ú__rmul__Ú__truediv__Ú__rtruediv__Ú__floordiv__Ú__rfloordiv__Ú__mod__Ú__rmod__Ú__pow__Ú__rpow__Ú__pos__Ú__neg__Ú__abs__Ú	__trunc__Ú__lt__Ú__gt__Ú__le__Ú__ge__Ú__bool__Ú__ceil__Ú	__floor__Ú	__round__Ú__int__NrC   )r›   rt   r‡   rv   rj   rœ   )rj   r   ©rj   rv   )r¤   rv   rj   r¥   ©rj   rŽ   )r«   r¬   rj   rk   )rj   r®   )r±   r®   rj   rœ   )-Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r    Úpropertyr†   r‡   r{   r¨   r©   r­   r¯   r³   r˜   r´   rµ   r¶   r·   r¸   r¹   rº   r»   r¼   r½   r¾   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   rÇ   rÈ   rÉ   rÊ   rË   rÌ   rÍ   Úhasattrr   rÎ   r=   r=   r=   rA   rz   O  s\    ÿ"






ÿÚImageFileDirectory_v2ÚidxÚsizeú$Callable[[_LoaderFunc], _LoaderFunc]c                   s   d‡ ‡fdd„}|S )NÚfuncÚ_LoaderFuncrj   c                   sB   ddl m} | j d¡r| jdd …  dd¡|ˆ < ˆ| ftˆ < | S )Nr   r   Úload_r,   Ú_ú )r   r   rÑ   rm   ÚreplaceÚ_load_dispatch)rÜ   r   ©rÙ   rÚ   r=   rA   Ú	decoratorÝ  s
   z#_register_loader.<locals>.decorator)rÜ   rÝ   rj   rÝ   r=   )rÙ   rÚ   rä   r=   rã   rA   Ú_register_loaderÜ  s   rå   ú2Callable[[Callable[..., Any]], Callable[..., Any]]c                   s   d‡ fdd„}|S )NrÜ   úCallable[..., Any]rj   c                   s   | t ˆ < | S rl   )Ú_write_dispatch)rÜ   ©rÙ   r=   rA   rä   é  s   z#_register_writer.<locals>.decorator)rÜ   rç   rj   rç   r=   )rÙ   rä   r=   ré   rA   Ú_register_writerè  s   rê   Úidx_fmt_nameútuple[int, str, str]rœ   c                   sb   ddl m} | \}‰ }|||< t dˆ › �¡‰	dd‡ ‡fdd„}ˆ|ft|< ‡ fdd„t|< d S )Nr   r   ú=Tr�   rØ   Údatari   Ú
legacy_apirk   rj   útuple[Any, ...]c                   s   |   t|ƒˆ › ˆ › �|¡S rl   )Ú_unpackrc   ©r�   rî   rï   ©ÚfmtrÚ   r=   rA   Úbasic_handler÷  s   z&_register_basic.<locals>.basic_handlerc                   s   d  ‡‡ fdd„|D ƒ¡S )Nó    c                 3  s   � | ]	}ˆ  ˆ |¡V  qd S rl   )Ú_pack©r>   r›   )rô   r�   r=   rA   re   þ  rf   z4_register_basic.<locals>.<lambda>.<locals>.<genexpr>©Újoin©r�   Úvalues)rô   r¢   rA   Ú<lambda>ý  s   z!_register_basic.<locals>.<lambda>©T)r�   rØ   rî   ri   rï   rk   rj   rð   )r   r   ÚstructÚcalcsizerâ   rè   )rë   r   rÙ   Únamerõ   r=   ró   rA   Ú_register_basicð  s   
ÿr  c                   @  sR  e Zd ZU dZi Zded< i Zded< 			d}d~dd„Zedd„ ƒZ	edd„ ƒZ
eddd„ƒZejd€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d‡d-d.„Zdˆd0d1„Zd‰d2d3„ZdŠd5d6„Zd‹d:d;„ZdŒd=d>„Zeeeejd?d@fejdAdBfejdCdDfej dEdFfej!dGdHfej"dIdJfej#dKdLfej$dAdBfej%dMdNfg	ƒƒ e&dOdOƒd�dŽdQdR„ƒZ'e(dOƒd�dTdU„ƒZ)e&dVdOƒd�d�dWdX„ƒZ*e(dVƒd‘dZd[„ƒZ+e&d\d]ƒ	Pd�d’d_d`„ƒZ,e(d\ƒd“dbdc„ƒZ-e&dddOƒd�dŽdedf„ƒZ.e(ddƒd”dgdh„ƒZ/e&did]ƒ	Pd�d’djdk„ƒZ0e(diƒd“dldm„ƒZ1d•dqdr„Z2d–dsdt„Z3d—dudv„Z4d˜d™dydz„Z5dšd{d|„Z6dS )›rØ   a  This class represents a TIFF tag directory.  To speed things up, we
    don't decode tags unless they're asked for.

    Exposes a dictionary interface of the tags in the directory::

        ifd = ImageFileDirectory_v2()
        ifd[key] = 'Some Data'
        ifd.tagtype[key] = TiffTags.ASCII
        print(ifd[key])
        'Some Data'

    Individual values are returned as the strings or numbers, sequences are
    returned as tuples of the values.

    The tiff metadata type of each item is stored in a dictionary of
    tag types in
    :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v2.tagtype`. The types
    are read from a tiff file, guessed from the type added, or added
    manually.

    Data Structures:

        * ``self.tagtype = {}``

          * Key: numerical TIFF tag number
          * Value: integer corresponding to the data type from
            :py:data:`.TiffTags.TYPES`

          .. versionadded:: 3.0.0

    'Internal' data structures:

        * ``self._tags_v2 = {}``

          * Key: numerical TIFF tag number
          * Value: decoded data, as tuple for multiple values

        * ``self._tagdata = {}``

          * Key: numerical TIFF tag number
          * Value: undecoded byte string from file

        * ``self._tags_v1 = {}``

          * Key: numerical TIFF tag number
          * Value: decoded data in the v1 format

    Tags will be found in the private attributes ``self._tagdata``, and in
    ``self._tags_v2`` once decoded.

    ``self.legacy_api`` is a value for internal use, and shouldn't be changed
    from outside code. In cooperation with
    :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`, if ``legacy_api``
    is true, then decoded tags will be populated into both ``_tags_v1`` and
    ``_tags_v2``. ``_tags_v2`` will be used if this IFD is used in the TIFF
    save routine. Tags should be read from ``_tags_v1`` if
    ``legacy_api == true``.

    z"dict[int, tuple[int, _LoaderFunc]]râ   zdict[int, Callable[..., Any]]rè   ó   II*     NÚifhri   rh   úbytes | NoneÚgroupú
int | Nonerj   rœ   c                 C  sÐ   t |ƒsdt|ƒ› d�}t|ƒ‚|dur|n|dd… | _| jtkr&d| _n| jtkr/d| _nd}t|ƒ‚|d dk| _|| _i | _		 |  
¡  | jrV|  d	|d
d… ¡d n|  d|dd… ¡d | _d| _dS )a—  Initialize an ImageFileDirectory.

        To construct an ImageFileDirectory from a real file, pass the 8-byte
        magic header to the constructor.  To only set the endianness, pass it
        as the 'prefix' keyword argument.

        :param ifh: One of the accepted magic headers (cf. PREFIXES); also sets
              endianness.
        :param prefix: Override the endianness of the file.
        znot a TIFF file (header z not valid)Nr&   ú>ú<znot a TIFF IFDé+   ÚQr2   r   rE   r*   F)rq   ÚreprÚSyntaxErrorÚ_prefixÚMMÚ_endianÚIIÚ_bigtiffr  ÚtagtypeÚresetrñ   ÚnextÚ_legacy_api)r�   r  rh   r  Úmsgr=   r=   rA   r    H  s(   

ÿý
zImageFileDirectory_v2.__init__c                 C  r¡   rl   )r  r¢   r=   r=   rA   rý   o  ó    zImageFileDirectory_v2.<lambda>c                 C  r¡   rl   )Ú_offsetr¢   r=   r=   rA   rý   p  r  rk   c                 C  r¡   rl   )r  r¢   r=   r=   rA   rï   r  r£   z ImageFileDirectory_v2.legacy_apir›   r   c                 C  s   d}t |ƒ‚)Nz"Not allowing setting of legacy api)Ú	Exception)r�   r›   r  r=   r=   rA   rï   v  s   c                 C  s(   i | _ i | _i | _i | _d | _d | _d S rl   )Ú_tags_v1Ú_tags_v2Ú_tagdatar  Ú_nextr  r¢   r=   r=   rA   r  {  s   
zImageFileDirectory_v2.resetrŽ   c                 C  s   t t| ƒƒS rl   )rŽ   Údictr¢   r=   r=   rA   Ú__str__ƒ  ó   zImageFileDirectory_v2.__str__údict[str, Any]c                   s   ‡ fdd„ˆ   ¡ D ƒS )z�
        :returns: dict of name|key: value

        Returns the complete tag dictionary, with named tags where possible.
        c                   s"   i | ]\}}t  |ˆ j¡j|“qS r=   )r   Úlookupr  r  )r>   Úcoder›   r¢   r=   rA   rB   Œ  s    ÿÿz/ImageFileDirectory_v2.named.<locals>.<dictcomp>)Úitemsr¢   r=   r¢   rA   Únamed†  s   
þzImageFileDirectory_v2.namedrv   c                 C  ó   t t| jƒt| jƒB ƒS rl   )rc   Úsetr  r  r¢   r=   r=   rA   Ú__len__‘  ó   zImageFileDirectory_v2.__len__Útagr	   c                 C  sf   || j vr| j| }| j| }| j| \}}|| || jƒ| |< | j | }| jr1t|ttfƒs1|f}|S rl   )r  r  r  râ   rï   rž   rn   ri   )r�   r+  rî   ÚtyprÚ   Úhandlerrs   r=   r=   rA   Ú__getitem__”  s   



z!ImageFileDirectory_v2.__getitem__r¬   c                 C  ó   || j v p	|| jv S rl   )r  r  ©r�   r+  r=   r=   rA   Ú__contains__Ÿ  ó   z"ImageFileDirectory_v2.__contains__c                 C  s   |   ||| j¡ d S rl   )Ú_setitemrï   )r�   r+  r›   r=   r=   rA   Ú__setitem__¢  r2  z!ImageFileDirectory_v2.__setitem__rï   c              
     s  t ttf}t || j¡‰ t||ƒr|gn|}|| jvråˆ jr%ˆ j| j|< nÀtj	| j|< t
dd„ |D ƒƒrS|D ]}t|tƒs?J ‚|dk rKtj| j|<  nq6tj| j|< n’t
dd„ |D ƒƒr¶d}d}d}	|D ]/}t|tƒsmJ ‚|r|d|  krydk s|n d}|r‹d|  k rˆd	k s‹n d}|	r“|dk r“d}	qd|r�tj| j|< nH|r¦tj| j|< n?|	r¯tj| j|< n6tj| j|< n/t
d
d„ |D ƒƒrÆtj| j|< nt
dd„ |D ƒƒrÖtj| j|< nt
dd„ |D ƒƒråtj| j|< | j| tj	krõdd„ |D ƒ}n| j| tjk�rdd„ |D ƒ}| j| tjk�ot|tƒ}
|
�s!t‡ fdd„|D ƒƒ}|�r'| jn| j}|
�s†ˆ jdk�sL| j| tjk�sLˆ jd u �r†t|ƒdk�r†|�s†|�r^| j| tjtjfv �r^|f}z|\||< W d S  t�y…   t d|› dt|ƒ› d�¡ |d ||< Y d S w |||< d S )Nc                 s  ó   � | ]}t |tƒV  qd S rl   )rž   rz   ©r>   r@   r=   r=   rA   re   °  ó   € z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>r   c                 s  r5  rl   )rž   rv   r6  r=   r=   rA   re   ¸  r7  Tr    Fi €ÿÿi €  c                 s  r5  rl   )rž   r‚   r6  r=   r=   rA   re   Ì  r7  c                 s  r5  rl   )rž   rŽ   r6  r=   r=   rA   re   Î  r7  c                 s  r5  rl   )rž   ri   r6  r=   r=   rA   re   Ð  r7  c                 S  s&   g | ]}t |tƒr| d d¡n|‘qS )Úasciirá   )rž   rŽ   Úencoder6  r=   r=   rA   Ú
<listcomp>Ô  s    ÿÿz2ImageFileDirectory_v2._setitem.<locals>.<listcomp>c                 S  s"   g | ]}t |tƒrt|ƒn|‘qS r=   )rž   rv   r‚   r6  r=   r=   rA   r:  Ù  s   " c                 3  s(   � | ]}t |tƒrˆ  |¡n|V  qd S rl   )rž   rŽ   Úcvt_enumrø   ©Úinfor=   rA   re   Ý  s
   € ÿ
ÿr   zMetadata Warning, tag z had too many entries: z, expected 1)r   ri   rŽ   r   r#  r  rž   r  ÚtypeÚ	UNDEFINEDÚallrz   ÚSIGNED_RATIONALÚRATIONALrv   ÚSHORTÚSIGNED_SHORTÚLONGÚSIGNED_LONGÚDOUBLEÚASCIIÚBYTEr  rn   r  r  Úlengthrc   Ú
ValueErrorÚwarningsÚwarn)r�   r+  r›   rï   Ú	basetypesrü   r@   ÚshortÚsigned_shortÚlongÚis_ifdÚdestr=   r<  rA   r3  ¥  s”   

þ€€þþ þÿÿúzImageFileDirectory_v2._setitemc                 C  s.   | j  |d ¡ | j |d ¡ | j |d ¡ d S rl   )r  Úpopr  r  r0  r=   r=   rA   Ú__delitem__  s   z!ImageFileDirectory_v2.__delitem__úIterator[int]c                 C  r'  rl   )Úiterr(  r  r  r¢   r=   r=   rA   Ú__iter__  r*  zImageFileDirectory_v2.__iter__rô   rî   rð   c                 C  s   t  | j| |¡S rl   )rÿ   Úunpackr  )r�   rô   rî   r=   r=   rA   rñ     ó   zImageFileDirectory_v2._unpackrü   c                 G  s   t j| j| g|¢R Ž S rl   )rÿ   Úpackr  )r�   rô   rü   r=   r=   rA   r÷     r*  zImageFileDirectory_v2._packÚHrO  rE   rQ  Úbzsigned byteÚhzsigned shortÚlzsigned longr§   r‚   ÚdÚdoubler  Úlong8r   Tc                 C  ó   |S rl   r=   rò   r=   r=   rA   Ú	load_byte"  ó   zImageFileDirectory_v2.load_byteúbytes | int | IFDRationalc                 C  s*   t |tƒr	t|ƒ}t |tƒrt|fƒ}|S rl   )rž   rz   rv   ri   ©r�   rî   r=   r=   rA   Ú
write_byte&  s
   


z ImageFileDirectory_v2.write_byter&   c                 C  s"   |  d¡r|d d… }| dd¡S )Nó    rx   zlatin-1rá   )ÚendswithÚdecoderò   r=   r=   rA   Úload_string.  s   
z!ImageFileDirectory_v2.load_stringústr | bytes | intc                 C  s0   t |tƒr	t|ƒ}t |tƒs| dd¡}|d S )Nr8  rá   ri  )rž   rv   rŽ   ri   r9  ©r�   r›   r=   r=   rA   Úwrite_string4  s
   

z"ImageFileDirectory_v2.write_stringr,   r2   ú)tuple[tuple[int, int] | IFDRational, ...]c                   óX   |   t|ƒd › d�|¡}d‡fdd	„‰ t‡ fd
d„t|d d d… |dd d… ƒD ƒƒS )Nr*   rE   Úarv   r]  rj   útuple[int, int] | IFDRationalc                   ó   ˆ r| |fS t | |ƒS rl   ©rz   ©rr  r]  ©rï   r=   rA   ÚcombineC  ó   z4ImageFileDirectory_v2.load_rational.<locals>.combinec                 3  ó   � | ]
\}}ˆ ||ƒV  qd S rl   r=   ©r>   ÚnumÚdenom©rx  r=   rA   re   F  ó   € z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>r&   r   ©rr  rv   r]  rv   rj   rs  ©rñ   rc   rn   Úzip©r�   rî   rï   Úvalsr=   ©rx  rï   rA   Úload_rational=  ó   0z#ImageFileDirectory_v2.load_rationalrz   c                   ó   d  ‡ fdd„|D ƒ¡S )Nrö   c                 3  s(   � | ]}ˆ j d gt|dƒ¢R Ž V  qdS )Ú2Ll   ÿÿ N)r÷   r~   ©r>   rŠ   r¢   r=   rA   re   J  s   € 
ÿz7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>rù   rû   r=   r¢   rA   Úwrite_rationalH  s   ÿz$ImageFileDirectory_v2.write_rationalr0   c                 C  rc  rl   r=   rò   r=   r=   rA   Úload_undefinedN  re  z$ImageFileDirectory_v2.load_undefinedc                 C  s0   t |tƒr	t|ƒ}t |tƒrt|ƒ dd¡}|S )Nr8  rá   )rž   rz   rv   rŽ   r9  rn  r=   r=   rA   Úwrite_undefinedR  s
   

z%ImageFileDirectory_v2.write_undefinedé
   c                   rq  )Nr*   r_  rr  rv   r]  rj   rs  c                   rt  rl   ru  rv  rw  r=   rA   rx  `  ry  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combinec                 3  rz  rl   r=   r{  r~  r=   rA   re   c  r  z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>r&   r   r€  r�  rƒ  r=   r…  rA   Úload_signed_rationalZ  r‡  z*ImageFileDirectory_v2.load_signed_rationalc                   rˆ  )Nrö   c                 3  s*   � | ]}ˆ j d gt|ddƒ¢R Ž V  qdS )Ú2liÿÿÿi   €N)r÷   rŒ   rŠ  r¢   r=   rA   re   g  s
   € ÿ
ÿz>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>rù   rû   r=   r¢   rA   Úwrite_signed_rationale  s   þz+ImageFileDirectory_v2.write_signed_rationalÚfpú	IO[bytes]rÚ   c                 C  s8   |  |¡}t|ƒ|krd|› dt|ƒ› d�}t|ƒ‚|S )Nz&Corrupt EXIF data.  Expecting to read ú bytes but only got z. )Úreadrc   ÚOSError)r�   r’  rÚ   Úretr  r=   r=   rA   Ú_ensure_readl  s   
ÿÿÿz"ImageFileDirectory_v2._ensure_readc              
   C  st  |   ¡  | ¡ | _�z| jr|  d|  |d¡¡n	|  d|  |d¡¡d }t|ƒD ]Ù}| jr7|  d|  |d¡¡n	|  d|  |d	¡¡\}}}}t || j	¡j
}t |d
¡}	d|› d|› d|	› d|› d�	}
z	| j| \}}W n ty{   t d|
|¡ Y q(w || }|| jr†dndkr´| ¡ }|  | jr”dnd|¡\}|
d|› d|› �7 }
| |¡ t ||¡}| |¡ n|d |… }t|ƒ|krÖt d|› dt|ƒ› d|› �¡ t |
¡ q(|sÞt |
¡ q(|| j|< || j|< |
d7 }
|
|dkr÷d|› d�nt|ƒ7 }
t |
¡ q(| j�r|  d|  |d¡¡n	|  d|  |d¡¡\| _W d S  t�y9 }
 zt t|
ƒ¡ W Y d }
~
d S d }
~
ww )Nr  r2   r\  r&   r   ÚHHQ8sé   ÚHHL4srF   Úunknownztag: ú (ú
) - type: ú)z%s - unsupported type %sr*   rE   z Tag Location: z - Data Location: z/Possibly corrupt EXIF data.  Expecting to read r”  z. Skipping tag z
 - value: rK   ú<table: ú bytes>)r  Útellr  r  rñ   r˜  Úranger   r#  r  r  r   Úgetrâ   ÚKeyErrorÚloggerÚdebugÚseekr   Ú
_safe_readrc   rL  rM  r  r  r  r  r–  rŽ   )r�   r’  Ú	tag_countr„   r+  r,  Úcountrî   ÚtagnameÚtypnamer  Ú	unit_sizer-  rÚ   ÚhereÚoffsetr=   r=   rA   Úloadv  sx   
ÿüÿ
ýþ
ÿÿþÿ



 ÿý€þzImageFileDirectory_v2.loadc                 C  s`   | j |  d| jr
dnd¡ }| jr||  ddd¡7 }|| jr'|  dd¡7 }|S |  d	d¡7 }|S )
Nr\  r
  é*   ÚHHr2   r   r  rH   rE   )r  r÷   r  ©r�   r  r=   r=   rA   Ú_get_ifh¹  s   þzImageFileDirectory_v2._get_ifhr   r°  c              
     s`  |   | jrdndt| jƒ¡}g }| jrdnd}| jrdnd}ˆ t|ƒt| jƒ| jr+dnd  | 7 ‰ d }t| j ¡ ƒD ]Ý\}}|tkrGt|ƒ}| j| }	t 	d||	t
|ƒ¡ |	tjko_t|tƒ}
|
r‚t|  ¡ |d	�}| j| }| ¡ D ]\}}|||< qs| ˆ ¡}nt|tƒr‰|n|f}| j|	 | g|¢R Ž }t || j¡j}|
r£d
nt |	d¡}d|› d|› d|› d|	› d�	}|t|ƒdkrÇdt|ƒ› d�nt|ƒ7 }t 	|¡ |
rÖd}n|	tjtjtjfv råt|ƒ}nt|ƒ}t|ƒ|krþ| ||	|| |d¡df¡ q;| ||	||   |ˆ ¡|f¡ ˆ t|ƒd d d 7 ‰ q;|d u�rb|| \}}	}}}|�rK| j|	 \}}‡ fdd„|| || j ƒD ƒ}| j|	 | g|¢R Ž }n|   ||  !||¡d ˆ  ¡}||	|||f||< |D ]'\}}	}}}t 	d||	|t
|ƒt
|ƒ¡ ||   | j�r‚dnd||	||¡7 }�qd||   |d¡7 }|D ]\}}	}}}||7 }t|ƒd@ �r¬|d7 }�q–|S )Nr  r\  rE   r2   r*   rš  rF   zTag %s, Type: %s, Value: %s)r  Úifdrœ  zsave: r�  rž  z) - value: rH   r   r¡  r   ri  rö   r&   c                   s   g | ]}|ˆ  ‘qS r=   r=   )r>   rs   ©r°  r=   rA   r:  ù  ó    z1ImageFileDirectory_v2.tobytes.<locals>.<listcomp>r   z%s %s %s %s %sr™  r›  )"r÷   r  rc   r  Úsortedr%  ÚSTRIPOFFSETSr  r¦  r§  r  r   rE  rž   r  rØ   rµ  Útobytesrn   rè   r#  r  r  r   r¤  rŽ   rI  rH  r?  ÚappendÚljustrâ   rï   rñ   )r�   r°  ÚresultÚentriesrô   Úfmt_sizeÚstripoffsetsr+  r›   r,  rR  r¶  rü   Úifd_tagÚ	ifd_valuerî   r¬  r­  r  r«  rÚ   r-  r=   r·  rA   r»  Á  sp   "ÿ


(



ÿ€zImageFileDirectory_v2.tobytesc                 C  sB   |  ¡ dkr| |  ¡ ¡ |  ¡ }|  |¡}| |¡ |t|ƒ S r²   )r¢  Úwriterµ  r»  rc   )r�   r’  r°  r¾  r=   r=   rA   Úsave  s   

zImageFileDirectory_v2.save)r  NN)r  ri   rh   r  r  r  rj   rœ   )rj   rk   )r›   rk   rj   r   ©rj   rœ   rÐ   )rj   r"  rÏ   ©r+  rv   rj   r	   ©r+  r¬   rj   rk   ©r+  rv   r›   r	   rj   rœ   )r+  rv   r›   r	   rï   rk   rj   rœ   )r+  rv   rj   rœ   ©rj   rV  )rô   rŽ   rî   ri   rj   rð   )rô   rŽ   rü   r	   rj   ri   rþ   )rî   ri   rï   rk   rj   ri   )rî   rf  rj   ri   )rî   ri   rï   rk   rj   rŽ   )r›   rm  rj   ri   )rî   ri   rï   rk   rj   rp  )rü   rz   rj   ri   )r›   rf  rj   ri   )r’  r“  rÚ   rv   rj   ri   )r’  r“  rj   rœ   )rj   ri   rR   )r°  rv   rj   ri   )r’  r“  rj   rv   )7rÑ   rÒ   rÓ   rÔ   râ   Ú__annotations__rè   r    rÖ   rh   r°  rï   Úsetterr  r   r&  r)  r.  r1  r4  r3  rU  rX  rñ   r÷   ÚlistÚmapr  r   rC  rE  ÚSIGNED_BYTErD  rF  ÚFLOATrG  ÚIFDÚLONG8rå   rd  rê   rh  rl  ro  r†  r‹  rŒ  r�  r�  r‘  r˜  r±  rµ  r»  rÅ  r=   r=   r=   rA   rØ     sˆ   
 <ü'








^











÷þÿÿ
ÿ




CPrà   rß   rÞ   Úwrite_c                      s�   e Zd ZU dZd$‡ fdd„Zed	d
„ ƒZedd
„ ƒZded< 	 e	d%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 ),ÚImageFileDirectory_v1aþ  This class represents the **legacy** interface to a TIFF tag directory.

    Exposes a dictionary interface of the tags in the directory::

        ifd = ImageFileDirectory_v1()
        ifd[key] = 'Some Data'
        ifd.tagtype[key] = TiffTags.ASCII
        print(ifd[key])
        ('Some Data',)

    Also contains a dictionary of tag types as read from the tiff image file,
    :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v1.tagtype`.

    Values are returned as a tuple.

    ..  deprecated:: 3.0.0
    r�   r	   Úkwargsrj   rœ   c                   s   t ƒ j|i |¤Ž d| _d S )NT)Úsuperr    r  )r�   r�   rÕ  ©Ú	__class__r=   rA   r    8  s   
zImageFileDirectory_v1.__init__c                 C  r¡   rl   )r  r¢   r=   r=   rA   rý   <  r  zImageFileDirectory_v1.<lambda>c                 C  r¡   rl   )r  r¢   r=   r=   rA   rý   =  r  zdict[int, int]r  ÚoriginalrØ   c                 C  s(   | |j d�}|j|_|j|_|j|_|S )a2  Returns an
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`
        instance with the same data as is contained in the original
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`
        instance.

        :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`

        rp   )rh   r  r  r  )ÚclsrÙ  r¶  r=   r=   rA   Úfrom_v2C  s
   zImageFileDirectory_v1.from_v2c                 C  s4   t | jd�}t| jƒ|_t| jƒ|_t| jƒ|_|S )a2  Returns an
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`
        instance with the same data as is contained in the original
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`
        instance.

        :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`

        rp   )rØ   rh   r  r  r  r  )r�   r¶  r=   r=   rA   Úto_v2U  s
   zImageFileDirectory_v1.to_v2r+  r¬   rk   c                 C  r/  rl   )r  r  r0  r=   r=   rA   r1  f  r2  z"ImageFileDirectory_v1.__contains__rv   c                 C  r'  rl   )rc   r(  r  r  r¢   r=   r=   rA   r)  i  r*  zImageFileDirectory_v1.__len__rV  c                 C  r'  rl   )rW  r(  r  r  r¢   r=   r=   rA   rX  l  r*  zImageFileDirectory_v1.__iter__r›   c                 C  s   dD ]	}|   |||¡ qd S ©N)FT)r3  )r�   r+  r›   rï   r=   r=   rA   r4  o  s   ÿz!ImageFileDirectory_v1.__setitem__c                 C  sn   || j vr&| j| }| j| }| j| \}}dD ]}|  ||| ||ƒ|¡ q| j | }t|ttfƒs5|f}|S rÝ  )r  r  r  râ   r3  rž   rn   ri   )r�   r+  rî   r,  rÚ   r-  Úlegacyrs   r=   r=   rA   r.  s  s   



z!ImageFileDirectory_v1.__getitem__)r�   r	   rÕ  r	   rj   rœ   )rÙ  rØ   rj   rÔ  )rj   rØ   rÈ  rÏ   rÊ  rÉ  rÇ  )rÑ   rÒ   rÓ   rÔ   r    rÖ   ÚtagsÚtagdatarË  ÚclassmethodrÛ  rÜ  r1  r)  rX  r4  r.  Ú__classcell__r=   r=   r×  rA   rÔ  %  s   
 




rÔ  c                      s¤   e Zd ZdZdZdZ	d'd(‡ fdd„Zd)dd„Zed*dd„ƒZ	d+dd„Z
d+dd„Zd*dd„Zd,dd„Zd-‡ fdd„Zd)dd „Zd)d!d"„Zd-d#d$„Zd)d%d&„Z‡  ZS ).ÚTiffImageFileÚTIFFz
Adobe TIFFFNr’  úStrOrBytesPath | IO[bytes]Úfilenameústr | bytes | Nonerj   rœ   c                   s   |  	 |  	 t ƒ  ||¡ d S rl   )rÖ  r    )r�   r’  ræ  r×  r=   rA   r    �  s
   zTiffImageFile.__init__c                 C  s’   | j  d¡}|d dkr|| j  d¡7 }t|ƒ| _| jj | _| _d| _| j | _g | _	d| _
t d¡ t d| j¡ t dt|ƒ¡ |  d	¡ dS )
z#Open the first image in a TIFF filer2   r&   r
  rx   Nz*** TiffImageFile._open ***z- __first: %sz	- ifh: %sr   )r’  r•  rØ   Útag_v2r  Ú_TiffImageFile__firstÚ_TiffImageFile__nextÚ_TiffImageFile__frameÚ_fpÚ
_frame_posÚ	_n_framesr¦  r§  r  Ú_seekr´  r=   r=   rA   Ú_openš  s   

zTiffImageFile._openrv   c                 C  sj   | j }|d u r+|  ¡ }|  t| jƒ¡ | j d u r&|  |  ¡ d ¡ | j d u s|  |¡ | j d us2J ‚| j S )Nr   )rî  r¢  rï  rc   rí  r¨  )r�   Úcurrent_n_framesÚcurrentr=   r=   rA   Ún_frames²  s   

ÿ
zTiffImageFile.n_framesÚframec                 C  sV   |   |¡sdS |  |¡ | jdur'| jj| jks"| jj| jks"| jr)d| _dS dS dS )z%Select a given frame as current imageN)Ú_seek_checkrï  Ú_imÚimrÚ   Ú
_tile_sizeÚmodeÚreadonly)r�   rô  r=   r=   rA   r¨  ¾  s   


ÿ
ûzTiffImageFile.seekc                 C  s²  t | jtƒr
| jj‚| j| _t| jƒ|krŠ| jsd}t|ƒ‚t	 
d|| j| j| j ¡ ¡ | jdkr7d}t|ƒ‚| j | j¡ | j | j¡ t	 
d| j ¡ ¡ | j | j¡ | jj| jv r`d| _n| jj| _| jdkro|d | _t| jƒdkr|| jdk| _|  jd7  _t| jƒ|ks| j | j| ¡ | j | j¡ t| jv r¹| jt }t |tƒr³t|ƒdkr³|d }|| jd< n	d| jv rÂ| jd= |  ¡  t | j¡ | _| _|| _|  ¡  d S )	Nzno more images in TIFF filez9Seeking to frame %s, on frame %s, __next %s, location: %sl            zUnable to seek to framezLoading tags, location: %sr   r   Úxmp)rž   rì  r   Úexr’  rc   rí  rê  ÚEOFErrorr¦  r§  rë  r¢  rK  r¨  r¼  rè  r±  r  rî  Úis_animatedÚXMPrn   r=  Ú_reload_exifrÔ  rÛ  r+  r¶  Ú_setup)r�   rô  r  rû  r=   r=   rA   rï  Ê  sV   û



ä


zTiffImageFile._seekc                 C  r¡   )zReturn the current frame number)rë  r¢   r=   r=   rA   r¢  û  r£   zTiffImageFile.tellúdict[int, dict[str, bytes]]c                 C  s¸   i }| j  tjj¡}|rZ| d¡rZt|dd… ƒ}t |d d d ¡d }t	|d| d| … ƒ}|d| d| | … }d|i||< |t d| | d ¡d d… }| d¡s|S )	a5  
        Returns a dictionary of Photoshop "Image Resource Blocks".
        The keys are the image resource ID. For more information, see
        https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_pgfId-1037727

        :returns: Photoshop "Image Resource Blocks" in a dictionary.
        s   8BIMr*   r.   r   r&   rŽ  rî   N)
rè  r¤  r   ÚBaseÚImageResourcesrm   Úi16ÚmathÚceilÚi32)r�   Úblocksrs   ÚidÚnrÚ   rî   r=   r=   rA   Úget_photoshop_blocksÿ  s   
"
ùz"TiffImageFile.get_photoshop_blocksúImage.core.PixelAccess | Nonec                   s   | j r
| jr
|  ¡ S tƒ  ¡ S rl   )ÚtileÚuse_load_libtiffÚ_load_libtiffrÖ  r±  r¢   r×  r=   rA   r±    s   
zTiffImageFile.loadc                 C  s:   | j d u rt | j¡ tj | j| j¡| _tj 	| ¡ d S rl   )
rö  r   Ú_decompression_bomb_checkrø  ÚcoreÚnewrù  r÷  r   Úload_preparer¢   r=   r=   rA   r    s   
zTiffImageFile.load_preparec                 C  sd   | j sd| _|  ¡ }tjD ]}||vrq| |¡ qtj| dd� tj	j
| jv r0| jtj	j
= d S d S )NT)Úin_place)rþ  Ú!_close_exclusive_fp_after_loadingÚgetexifr   ÚTAGS_V2_GROUPSÚget_ifdr   Úexif_transposer   r  ÚOrientationrè  )r�   ÚexifÚkeyr=   r=   rA   Úload_end  s   
ÿzTiffImageFile.load_endc              
   C  s
  t j  | ¡ |  ¡  t| jƒdksd}t|ƒ‚| jd d }| jd d }zt| jdƒo0| j ¡ }t| jdƒr<| j 	¡  W n tyH   d}Y nw |r^t
|tƒsRJ ‚t|ƒ}||d< t|ƒ}t  | jd	|| j¡}z	| | j|¡ W n ty„ } zd
}t|ƒ|‚d}~ww | jo‹| j }t| jdƒr¢t d¡ | | j ¡ ¡\}	}
n<|rÉt d¡ |s±| j d¡ t |dtj¡}| d¡\}	}
t ||tj¡ nt d¡ | j d¡ | | j ¡ ¡\}	}
g | _d| _|   ¡  |rò| j !¡  d| _|
dk rÿd|
› �}t|ƒ‚t j  | ¡S )zWOverload method triggered when we detect a compressed tiff
        Calls out to libtiffr   zNot exactly one tiler   r(   ÚfilenoÚflushFr&   ÚlibtiffzCouldn't set the imageNÚgetvaluez5have getvalue. just sending in a string from getvaluez3have fileno, calling fileno version of the decoder.s   fpfpz+don't have fileno or getvalue. just readingzdecoder error )"r   r±  r  rc   r  r–  r×   r’  r  r   rž   rn   rÍ  Ú_getdecoderrù  ÚdecoderconfigÚsetimager÷  rK  Ú_exclusive_fprþ  r¦  r§  rk  r"  r¨  ÚosÚlseekÚSEEK_CURÚSEEK_SETr•  rú  r  Úclose)r�   r  Úextentsr�   r’  Ú	args_listÚdecoderÚeÚclose_self_fpr  ÚerrÚposr=   r=   rA   r  0  sh   
€ý
€þ





zTiffImageFile._load_libtiffc                  C  sš  d| j v rd}t|ƒ‚t| j  td¡ | _| j  td¡| _| j  td¡}| jdkr+d}| j  t	d¡}t
 d¡ t
 d| j¡ t
 d	|¡ t
 d
| j¡ t
 d|¡ t
 d| j  t¡¡ z| j t }| j t }W n tyz } zd}t|ƒ|‚d}~ww t|tƒr…t|tƒs‹d}t|ƒ‚||f| _| j  tjj¡}|dv r¢||f| _n||f| _t
 d| j¡ | j  td¡}t|ƒdkrÍt|ƒt|ƒ  krÉdkrÍn nd}| j  td¡}	| j  td¡}
|dv râd}n	|dkréd}nd}|t|
ƒ7 }t|	ƒ}| j  t | jdk�r|dv �rdnd¡}|t!k�rt
 "d|¡ d}t#|ƒ‚||k �r&|	d|… }	n||k�r4|dk�r4|	| }	t|	ƒ|k�rAd}t#|ƒ‚| j j$||||	|
f}t
 d|¡ z	t%| \| _&}W n t�ys } zt
 d¡ d}t#|ƒ|‚d}~ww t
 d|¡ t
 d | j'¡ | j| j(d!< | j  t)d¡}| j  t*d¡}|�rÚ|�rÚ| j  t+¡}|d"k�r®||f| j(d#< n,|dk�r¿|d$ |d$ f| j(d#< n|du �rÓ||f| j(d#< ||f| j(d%< n||f| j(d%< d } }}g | _,t-�pê| jd&k| _.| j.�rT|d"k�r|dd… d |dd…  }t
 d|¡ t%| \| _&}|dk�r$| jd'k�r$| jdk�r$d(}n|d)k�r,d*}n| /d+¡�r:|dd,… d- }|| jd.| j j0f}| j, 1t2 3d/dd||fd|¡¡ nÍt4| j v �s`t5| j v �rt4| j v �ru| j t4 }| j  t6|¡}|}n%| j t5 }| j  t7¡}| j  t8¡}t|tƒ�r’t|tƒ�s˜d0}t|ƒ‚|}||k�r°||k�r°| jd"k�r°|d,d… }|D ]b}|| |k�rÄ|t9|	ƒ d1 }nd}|}| jd"k�rÖ|| }|| }|t|ƒdf}| j, 1t2 3| j||t|| |ƒt|| |ƒf||¡¡ ||7 }||k�rd|| }}||k�rd}|d7 }�q²nt
 d2¡ d}t#|ƒ‚t:| j v �r/| j t: | j(d3< | j'd4v �rKd5d6„ | j t; D ƒ}t< =d7d8 >|¡¡| _?dS dS )9z-Setup this image object based on current tagsi¼  z+Windows Media Photo files not yet supportedr   r   r/   r.   z*** Summary ***z- compression: %sz - photometric_interpretation: %sz- planar_configuration: %sz- fill_order: %sz- YCbCr subsampling: %szMissing dimensionsNzInvalid dimensions)r,   r.   r0   r2   z
- size: %srC   r=   )r&   r.   r2   r(   r,   r*   )r&   r.   z.More samples per pixel than can be decoded: %sz#Invalid value for samples per pixelzunknown data organizationzformat key: %sz- unsupported formatzunknown pixel modez- raw mode: %sz- pil mode: %sÚcompressionr&   ÚdpigR¸…ëQ@Ú
resolutionr%   r1   rP   rG   úI;16N)z;16Bz;16Lrx   ÚNFr!  zInvalid tile dimensionsr2   z- unsupported data organizationÚicc_profile©r\   r^   c                 S  s   g | ]}t |d  ƒ‘qS ©r"   r   )r>   r]  r=   r=   rA   r:  ~  s    z(TiffImageFile._setup.<locals>.<listcomp>úRGB;Lrö   )@rè  r–  ÚCOMPRESSION_INFOr¤  ÚCOMPRESSIONÚ_compressionÚPLANAR_CONFIGURATIONÚ_planar_configurationÚPHOTOMETRIC_INTERPRETATIONÚ	FILLORDERr¦  r§  ÚYCBCRSUBSAMPLINGÚ
IMAGEWIDTHÚIMAGELENGTHr¥  Ú	TypeErrorrž   rv   rK  rø  r   r  r  Ú_sizerÚ   ÚSAMPLEFORMATrc   r‰   rˆ   ÚBITSPERSAMPLEÚEXTRASAMPLESÚSAMPLESPERPIXELÚMAX_SAMPLESPERPIXELÚerrorr  rh   Ú	OPEN_INFOÚ_moderù  r=  ÚX_RESOLUTIONÚY_RESOLUTIONÚRESOLUTION_UNITr  ÚREAD_LIBTIFFr  rj  r°  r¼  r   Ú_Tilerº  ÚTILEOFFSETSÚROWSPERSTRIPÚ	TILEWIDTHÚ
TILELENGTHÚsumÚ
ICCPROFILEÚCOLORMAPr   r%   rú   Úpalette) r�   r  ÚphotoÚ	fillorderÚxsizeÚysizer/  ÚorientationÚsample_formatÚ	bps_tupleÚextra_tupleÚ	bps_countÚbps_actual_countÚsamples_per_pixelr  ÚrawmodeÚxresÚyresÚresunitÚxÚyÚlayerrr  Úoffsetsr^  ÚwÚ	tilewidthr°  ÚstrideÚtile_rawmoder�   r\  r=   r=   rA   r  �  s<  




€þ

,þ
ÿ
ú

€ý





"

 üÿ

€å
þzTiffImageFile._setuprl   )r’  rå  ræ  rç  rj   rœ   rÆ  rÏ   )rô  rv   rj   rœ   )rj   r  )rj   r  )rÑ   rÒ   rÓ   ÚformatÚformat_descriptionr  r    rð  rÖ   ró  r¨  rï  r¢  r  r±  r  r  r  r  râ  r=   r=   r×  rA   rã  ˆ  s$    ý



1



`rã  rD   rE   rO   r\   r^   rJ   rN   rG   úI;16LrL   rM   rP   rS   rQ   r_   ÚYCbCrrb   rI   r÷  úImage.Imager’  r“  ræ  ústr | bytesc           6      C  st	  zt | j \}}}}}}W n ty% }	 zd| j› d�}
t|
ƒ|	‚d }	~	ww | j}| j}t|d�}| d¡r9d|_z|d }W n tyU   | j	 d¡}t
|tƒrSd }Y nw |d u r]d}n|dkrdd	}n|d
krjd}tpo|dk}d|t< | jd |t< | jd |t< d|v r‹|d }nd|v r¤|d }t
|tƒr£t ¡ }| |¡ |}ni }t dt|ƒ¡ t
|tƒr·| ¡ }|D ]/}t
|tjƒrÎ|tjv rÎ| |¡||< n| |¡||< z
|j| |j|< W q¹ tyè   Y q¹w i }t| dƒrõ| j  ¡ }i |¥t!| di ƒ¥}t"t#fD ]}||v �r||= �qt| dƒ�rNt$t%t&t't(t)fD ]0}|| j*v �rL|t'k�r<| j*j| tj+tj,fv�r<||= �q| j*| ||< | j*j| |j|< �q| d| j	 d¡¡}|�r_||t-< t.dft%dft&dft%dft&dft$dft/dft0dft1dft2dff
D ]\}}||v �rŽ|| ||< �q| d¡}|�r¨d|t$< |d |t%< |d |t&< |dk�r¾||t3< t4|ƒdk�r¾t4|ƒ|t5< |d u�rÇ||t6< |dk�rÐ||t#< t7|v�rÚ||t7< nK| jd v �r%|t7 dk�r%| jd!k�r |  8¡ }| ¡ }|d u�rt9|j:ƒD ]}t9|j;ƒD ]}|||f d"k�rdnd"|||f< �q�qÿ|} nt< =| ¡} | jd#v �rb| j> ?d$d%¡}g }t4|ƒd& }t9d&ƒD ]} |d'd(„ |||  || d  … D ƒ7 }|dgd)|  7 }�q>||t@< |t |t }!}"t4|ƒ|!|d  d* d+  }#tA|v�r³|�r¦| d,tB¡}$|#dk�rŽdntC|$|# |"ƒ}%|d	k�r¥tC|%d* d+ d+ |"ƒ}%n|"}%|%dk�r¯d}%|%|tA< |#dk�rºdn|#|tA  }&|"|tA  d |tA  }'|&d-k�r×tjD|jtE< |&f|'d  |#|" |&|'d   f |tE< tFt9d|&|' |&ƒƒ|tG< tH |d¡|tI< | jd.k�rtJd/tKd0i L¡ D ]\}}(| M||(¡ �qtNtOtPtQg})|�r‰d1|v �rP|d1 }*t
|*tƒ�r;|*dk �s;|*d2k�rAd3}
tR|
ƒ‚|d	k�rLd4}
tR|
ƒ‚|*|tS< t d5¡ t d6tT| L¡ ƒ¡ d}+t|d7ƒ�r~z| Ud¡ | V¡ }+W n tWjX�y}   Y nw i },|)tYtKtEtGtZt[g7 })t3|d i}-t\ ]| L¡ | L¡ ¡D ]v\}}.|tj^v�rát!tj_d8d9ƒ�s®�qš|tjv �rºtj`|,|< n'||jv �rÈ|j| |,|< nt
|.ttatbtfƒ�sÔ�qšt c|¡jd}/|/�rá|/|,|< ||-v�r||)v�rt
|.tbƒ�rý|. ed:d;¡d< |-|< �qšt
|.tfƒ�rta|.ƒ|-|< �qš|.|-|< �qšt#|-v �r't4|-t# ƒdk�r'|-t# d |-t#< t d=tT|- L¡ ƒ¡ | jd>v �r9d?}t|- L¡ ƒ}0|0 g¡  |||+||0|,f}1t h| jd@|1|¡}2|2 i| j>dA| j ¡ 	 |2 etjjk¡dd … \}3}4|+�ss| l|4¡ |3�rwn�q_|3dk �rˆdB|3› dC�}
t|
ƒ‚n"|)D ]}||= �q‹| m|¡}5tj n| |tj oddA| j |5||#df¡g¡ dD|v �r¸tp| dD|ƒ d S d S )ENzcannot write mode z as TIFFrp   Úbig_tiffTr3  r%   r/   r1   r7   r3   r   r   Útiffinfor  zTiffinfo Keys: %sr+  rè  r8  Údescriptionr5  Úx_resolutionÚy_resolutionÚresolution_unitÚsoftwareÚ	date_timeÚartistÚ	copyrightr4  r&   rC   )rD   rE   rD   r!   r9  rP   r;  r(   c                 S  s   g | ]}|d  ‘qS r:  r=   r6  r=   r=   rA   r:  7  r¸  z_save.<locals>.<listcomp>r"   r0   r2   Ú
strip_sizer    rw  )r   r   )r   r!   é€   r!   r…  r!   Úqualityéd   zInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz	Items: %sr  rg   Fr8  rá   ri  zConverted items: %s)rG   rI   rv  r6  r!  rT   zencoder error z when writing image fileÚ_debug_multipage)qÚ	SAVE_INFOrù  r¥  r–  ÚencoderinfoÚencoderconfigrØ   r¤  r  r=  rž   rv   ÚWRITE_LIBTIFFr?  rÚ   rD  rE  ri   r   ÚExifr±  r¦  r§  rÍ  rÔ  rÜ  r   r  r  r  r  r×   r+  r“   ÚEXIFIFDrH  rR  rP  rQ  ÚIPTC_NAA_CHUNKÚPHOTOSHOP_CHUNKrÿ  rè  rI  r?  rZ  ÚIMAGEDESCRIPTIONÚSOFTWAREÚ	DATE_TIMEÚARTISTÚ	COPYRIGHTrI  rc   rK  rJ  rA  Úcopyr£  ÚheightÚwidthr   Úinvertr÷  Ú
getpaletter[  rV  Ú
STRIP_SIZErˆ   rE  ÚSTRIPBYTECOUNTSrn   rº  ÚCOMPRESSION_INFO_REVr=  rC  ÚREFERENCEBLACKWHITEr%  Ú
setdefaultrW  rX  rU  ÚTILEBYTECOUNTSrK  ÚJPEGQUALITYr¹  r¨  r  ÚioÚUnsupportedOperationÚOSUBFILETYPEÚTRANSFERFUNCTIONÚSUBIFDÚ	itertoolsÚchainÚLIBTIFF_COREr  rÒ  r‚   rŽ   r#  r>  r9  rz   ÚsortÚ_getencoderr%  r   ÚMAXBLOCKrÄ  rÅ  Ú_saverT  Úsetattr)6r÷  r’  ræ  rh  rh   r]  rt  ÚbitsÚextrar/  r  rŠ  r‹  r¶  r3  r!  r=  r  r  Ú
legacy_ifdÚsupplied_tagsr+  Úiccr  r4  Úinverted_imÚpxrm  rl  ÚlutÚcolormapÚcolorsr„   rp  r^  rr  Úim_strip_sizeÚrows_per_stripÚstrip_byte_countsÚstrips_per_imageÚdefault_valueÚ	blocklistr†  rì  ÚtypesÚattsr›   r>  rß  rr  ÚencoderÚerrcoderî   r°  r=   r=   rA   r­  Ÿ  sê  
€þ


€ü


€
ÿ

ü
€úþ
€ö
€






&ÿ€
&

€


ÿÿþ
ý
 


ÿú
€
û
þ

ý
þr­  c                   @  sH  e Zd Zg d¢Zh d£ZdVdWd
d„ZdXdd„ZdXdd„ZdXdd„ZdYdd„Z	dZdd„Z
d[dd„Zejfd\dd„ZdXdd „Zd]d#d$„ZdXd%d&„Zd^d)d*„Zd_d,d-„Zd`d.d/„Zd[d0d1„Zd[d2d3„Zedad7d8„ƒZ	9dbdcd<d=„Zddd>d?„Zddd@dA„ZdddBdC„ZdedDdE„ZdddFdG„ZdddHdI„ZdXdJdK„Z dXdLdM„Z!dfdOdP„Z"	dgdhdSdT„Z#dUS )iÚAppendingTiffWriter)r   r   r   r&   r*   r2   r   r   r&   r*   r2   r*   r2   r*   r&   r*   r2   >   é  é  é	  é   r#   r$   FÚfnrå  r  rk   rj   rœ   c                 C  s~   |  t |ƒr(|| _d| _zt||rdndƒ| _W n ty'   t|dƒ| _Y nw ttt |ƒ| _d| _| j 	¡ | _
|  ¡  d S )NTzw+bzr+bF)r   r  Úclose_fpÚopenr§   r–  r   r   ri   r¢  Ú	beginningÚsetup)r�   rÈ  r  r=   r=   rA   r    ó  s   ÿzAppendingTiffWriter.__init__c                 C  s¤   | j  | jtj¡ d | _d| _| j  d¡ | _}d|v | _	|s$d| _
d S d| _
|tvr1d}t|ƒ‚|  | t¡r:dnd¡ | j	rH| j  dtj¡ |  ¡  |  ¡  d S )	Nr   r*   ó   +TFzInvalid TIFF file headerr	  r  )r§   r¨  rË  r'  r*  ÚwhereToWriteNewIFDOffsetÚoffsetOfNewPager•  ÚIIMMr  ÚisFirstro   ÚRuntimeErrorÚ	setEndianrm   r  r)  ÚskipIFDsÚgoToEnd)r�   Úiimmr  r=   r=   rA   rÌ    s"   
zAppendingTiffWriter.setupc                 C  sÀ   | j rd S | j | j¡ | j d¡}|sd S || jkr!d}t|ƒ‚| jr,| j dtj	¡ |  
| jr3dnd¡}|| j7 }| jd usBJ ‚| j | j¡ |  || jrQdnd¡ | j |¡ |  ¡  d S )Nr*   z1IIMM of new page doesn't match IIMM of first pager2   )rÑ  r§   r¨  rÏ  r•  rÐ  rÒ  r  r'  r)  Ú_readrÎ  Ú_writeÚfixIFD)r�   rÖ  r  Ú
ifd_offsetr=   r=   rA   Úfinalize  s$   

zAppendingTiffWriter.finalizec                 C  s   |   ¡  |  ¡  d S rl   )rÛ  rÌ  r¢   r=   r=   rA   ÚnewFrame6  s   zAppendingTiffWriter.newFramec                 C  s   | S rl   r=   r¢   r=   r=   rA   Ú	__enter__;  s   zAppendingTiffWriter.__enter__r�   r¬   c                 G  s   | j r	|  ¡  d S d S rl   )rÉ  r+  r•   r=   r=   rA   Ú__exit__>  s   ÿzAppendingTiffWriter.__exit__rv   c                 C  s   | j  ¡ | j S rl   )r§   r¢  rÏ  r¢   r=   r=   rA   r¢  B  r°   zAppendingTiffWriter.tellr°  Úwhencec                 C  s*   |t jkr
|| j7 }| j ||¡ |  ¡ S )zé
        :param offset: Distance to seek.
        :param whence: Whether the distance is relative to the start,
                       end or current position.
        :returns: The resulting position, relative to the start.
        )r'  r*  rÏ  r§   r¨  r¢  )r�   r°  rß  r=   r=   rA   r¨  E  s   

zAppendingTiffWriter.seekc                 C  s^   | j  dtj¡ | j  ¡ }d|d  }d|  k rdk r'n n| j  t|ƒ¡ | j  ¡ | _d S )Nr   rH   )r§   r¨  r'  ÚSEEK_ENDr¢  rÄ  ri   rÏ  )r�   r2  Ú	pad_bytesr=   r=   rA   rÕ  R  s   
zAppendingTiffWriter.goToEndÚendianrŽ   c                 C  sB   || _ | j › d�| _| j › d�| _| j › d�| jrdnd | _d S )NrE   r\  r³  r  )râ  ÚlongFmtÚshortFmtr  Ú	tagFormat)r�   râ  r=   r=   rA   rÓ  \  s    zAppendingTiffWriter.setEndianc                 C  s|   	 |   | jrdnd¡}|dkr| j ¡ | jrdnd | _d S | j |¡ |   | jr+dnd¡}| j || jr7dnd tj¡ q)NTr2   r*   r   r&   rš  rF   )r×  r  r§   r¢  rÎ  r¨  r'  r)  )r�   rÚ  Únum_tagsr=   r=   rA   rÔ  b  s   ÿözAppendingTiffWriter.skipIFDsrî   r   c                C  s   | j  |¡S rl   )r§   rÄ  rg  r=   r=   rA   rÄ  o  r!  zAppendingTiffWriter.writeÚ
field_sizec                 C  s.   z	ddddœ| W S  t y   d}t|ƒ‚w )Nr\  rE   r  )r&   r*   r2   zoffset is not supported)r¥  rÒ  )r�   rç  r  r=   r=   rA   Ú_fmtr  s   þzAppendingTiffWriter._fmtc                 C  s&   t  | j|  |¡ | j |¡¡\}|S rl   )rÿ   rY  râ  rè  r§   r•  )r�   rç  r›   r=   r=   rA   r×  y  s   ÿzAppendingTiffWriter._readc                 C  ó
   |   d¡S ©Nr&   ©r×  r¢   r=   r=   rA   Ú	readShort  rª   zAppendingTiffWriter.readShortc                 C  ré  ©Nr*   rë  r¢   r=   r=   rA   ÚreadLong‚  rª   zAppendingTiffWriter.readLongÚbytes_writtenr  Úexpectedc                 C  s0   | d ur| |krd| › d|› �}t |ƒ‚d S d S )Nzwrote only z bytes but wanted )rÒ  )rï  rð  r  r=   r=   rA   Ú_verify_bytes_written…  s   þz)AppendingTiffWriter._verify_bytes_writtenr   r›   Únew_field_sizec                 C  sJ   | j  | tj¡ |s|}| j  t | j|  |¡ |¡¡}|  	||¡ d S rl   )
r§   r¨  r'  r)  rÄ  rÿ   r[  râ  rè  rñ  )r�   r›   rç  rò  rï  r=   r=   rA   Ú_rewriteLast‹  s   ÿz AppendingTiffWriter._rewriteLastc                 C  s   |   |dd¡ d S )Nr&   r*   ©ró  rn  r=   r=   rA   ÚrewriteLastShortToLong–  rZ  z*AppendingTiffWriter.rewriteLastShortToLongc                 C  ó   |   |d¡S rê  rô  rn  r=   r=   rA   ÚrewriteLastShort™  r!  z$AppendingTiffWriter.rewriteLastShortc                 C  rö  rí  rô  rn  r=   r=   rA   ÚrewriteLastLongœ  r!  z#AppendingTiffWriter.rewriteLastLongc                 C  s0   | j  t | j|  |¡ |¡¡}|  ||¡ d S rl   )r§   rÄ  rÿ   r[  râ  rè  rñ  )r�   r›   rç  rï  r=   r=   rA   rØ  Ÿ  s   ÿzAppendingTiffWriter._writec                 C  ó   |   |d¡ d S rê  ©rØ  rn  r=   r=   rA   Ú
writeShort¥  r°   zAppendingTiffWriter.writeShortc                 C  rù  rí  rú  rn  r=   r=   rA   Ú	writeLong¨  r°   zAppendingTiffWriter.writeLongc                 C  s    |   ¡  | jr| j ¡  d S d S rl   )rÛ  rÉ  r§   r+  r¢   r=   r=   rA   r+  «  s   ÿzAppendingTiffWriter.closec              
   C  s*  |   | jrdnd¡}t|ƒD ]„}t | j| j | jrdnd¡¡\}}}| j| }|| }| jr1dnd}||k}	|	sG|   |¡| j	 }
|  
|
|¡ || jv rˆ| j ¡ }t dt |¡j|t |d¡|||¡ |	ru|  ||¡ | j || ¡ q| j |
¡ |  ||¡ | j |¡ q|	r’| j |tj¡ qd S )Nr2   r&   rF   r*   z;fixIFD: %s (%d) - type: %s (%d) - type size: %d - count: %drœ  )r×  r  r£  rÿ   rY  rå  r§   r•  Ú
fieldSizesrÏ  ró  ÚTagsr¢  r¦  r§  r   r#  r  r   r¤  Ú_fixOffsetsr¨  r'  r)  )r�   ræ  r„   r+  Ú
field_typer«  rç  Ú
total_sizerÀ  Úis_localr°  Úcur_posr=   r=   rA   rÙ  °  sB   
ÿ




ù
€ÜzAppendingTiffWriter.fixIFDr«  c                 C  sÊ   t |ƒD ]^}|  |¡}|| j7 }d}| jr |dv r |dkr d}n
|dkr*|dkr*d}|r\|dkr6d	}t|ƒ‚|  |||¡ | d d }| j |tj	¡ |  
|¡ | j d| tj	¡ q|  ||¡ qd S )
Nr   )r&   r*   l        r2   r&   r    r*   r   znot implemented)r£  r×  rÏ  r  rÒ  ró  r§   r¨  r'  r)  rû  )r�   r«  rç  r„   r°  rò  r  Úrewindr=   r=   rA   rÿ  Ù  s&   


çzAppendingTiffWriter._fixOffsetsÚisShortÚisLongc                 C  s$   |rd}n|r
d}nd}|   ||¡S )Nr&   r*   r   )rÿ  )r�   r«  r  r  rç  r=   r=   rA   Ú
fixOffsetsõ  s   zAppendingTiffWriter.fixOffsetsN)F)rÈ  rå  r  rk   rj   rœ   rÆ  )rj   rÃ  )r�   r¬   rj   rœ   rÏ   )r°  rv   rß  rv   rj   rv   )râ  rŽ   rj   rœ   )rî   r   rj   rv   )rç  rv   rj   rŽ   )rç  rv   rj   rv   )rï  r  rð  rv   rj   rœ   rR   )r›   rv   rç  rv   rò  rv   rj   rœ   )r›   rv   rj   rœ   )r›   rv   rç  rv   rj   rœ   )r«  rv   rç  rv   rj   rœ   )FF)r«  rv   r  rk   r  rk   rj   rœ   )$rÑ   rÒ   rÓ   rý  rþ  r    rÌ  rÛ  rÜ  rÝ  rÞ  r¢  r¢  r*  r¨  rÕ  rÓ  rÔ  rÄ  rè  r×  rì  rî  Ústaticmethodrñ  ró  rõ  r÷  rø  rØ  rû  rü  r+  rÙ  rÿ  r  r=   r=   r=   rA   rÃ  Õ  sD    	














ÿ








)ÿrÃ  c           
   	   C  sú   t | j dg ¡ƒ}t| dƒs|st| ||ƒS |  ¡ }z\t|ƒ�@}| g| D ]2}| | ¡}t|dƒs4d|_t	|ddƒ}t
|ƒD ]}	| |	¡ | ¡  t|||ƒ | ¡  q>||_q%W d   ƒ n1 sbw   Y  W |  |¡ d S W |  |¡ d S |  |¡ w )NÚappend_imagesró  r‹  r=   r   )rÍ  rŠ  r¤  r×   r­  r¢  rÃ  Ú_attach_default_encoderinfor‹  r“   r£  r¨  r±  rÜ  )
r÷  r’  ræ  r	  Úcur_idxÚtfÚimsrŠ  ÚnfrrÙ   r=   r=   rA   Ú	_save_all	  s,   




õÿòr  z.tifz.tiffz
image/tiff)rh   ri   rj   rk   )rs   rt   ru   rv   rj   rw   )rs   rz   ru   rv   r   rv   rj   rw   )r�   rŽ   rj   r	   )rÙ   rv   rÚ   rv   rj   rÛ   )rÙ   rv   rj   ræ   )rë   rì   rj   rœ   )r÷  rx  r’  r“  ræ  ry  rj   rœ   )‹Ú
__future__r   r¢  r§  Úloggingr  r'  rÿ   rL  Úcollections.abcr   r   Ú	fractionsr   Únumbersr   r   Útypingr   r	   r
   r   r   Ú r   r   r   r   r   r   Ú_binaryr   r  r   r  r   Ú
_deprecater   Ú_typingr   Ú_utilr   r   r   rŸ   r   r   Ú	getLoggerrÑ   r¦  rS  rŒ  r›  r  r  r¤  rD  rE  rI  r=  rA  rB  r‘  rº  rK  rV  rœ  rP  rQ  r?  rR  r¥  r’  r“  r”  Ú	PREDICTORr[  rW  rX  rU  r   r¦  rJ  rH  Ú
JPEGTABLESrC  rž  r•  r�  r�  rZ  rŽ  rÿ  r¡  ÚIMAGEJ_META_DATA_BYTE_COUNTSÚIMAGEJ_META_DATAr<  r%  r�  rN  r‰   rL  ro   r“   r  rq   r~   rŒ   râ   rè   r˜   rz   ri   rk   rÝ   rå   rê   r  rv   Ú
_IFDv2BaserØ   rÙ   r  rá   r®  rÔ  ÚImageFileDirectoryrã  r‰  r­  ÚBytesIOrÃ  r  Úregister_openrt  Úregister_saveÚregister_save_allÚregister_extensionsÚregister_mimer=   r=   r=   rA   Ú<module>   sX  ( 
þýüûúùø	÷
öõôóòñðïîýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Ý$Ü%Û&Ú'Ù(Ø)×*Ö+Õ,Ô-Ó.Ò/Ñ0Ð1Ï2Î3Í4Ì5Ë6Ê7É8È9Ç:Æ;Å<Ä=Ã>Â?Á@ÀA¿B¾C½D¼E»FºG¹H¸I·J¶KµL´M³N²O±P°Q¯R®S­T¬U«VªW©X¨Y§Z¦[¥\¤]£^¢_¡` aŸbžc�dœe›fšg™h˜i—j–k•l”m“n’o‘p�q�rŽs�tŒu‹xˆy‡z†{…~	
	     \    ýüûúùø	÷
öõôóòñðïî  8  .