
    i
L                      S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
Jr  S SKJr  S SKJrJr  S SKJrJrJr  SSKJrJrJrJrJrJr  SS	KJr  SS
KJr   SSKJ!r!  SSK"J#r#J$r$  SSKJ%r%  Sr&\&(       a  S SK	J'r'  S SKJ(r(  SSK)J*r*J+r+J,r,  \RZ                  " \.5      r/Sr0Sr1Sr2Sr3Sr4Sr5Sr6Sr7Sr8Sr9Sr:Sr;Sr<Sr=Sr>Sr?S r@S!rAS"rBS#rCS$rDS%rES&rFS'rGS(rHS)rIS*rJS+rKS,rLS-rMS.rNS/rOS0rPS1rQS2rRS3rSS4rTS5rUS6rVS7rWS8rXS9rYS:rZS;r[S<r\S=r]0 SS>_S?S@_SASB_SCSD_SESF_SGSH_SISJ_SKSL_SMSN_SOSP_SQSR_SSST_SUSV_SWSX_SYSZ_S[S\_S]S^_r^\^R                  5        V Vs0 s H  u  pX_M	     snn r`0 \3S S_SS_S`4Sa_\4S S_SS_S`4Sa_\3S S_S?S_S`4Sb_\4S S_S?S_S`4Sb_\3SS_SS_S`4Sc_\4SS_SS_S`4Sc_\3SS_S?S_S`4Sd_\4SS_S?S_S`4Sd_\3S S_SSeS`4Sf_\4S S_SSeS`4Sf_\3S S_S?SeS`4Sg_\4S S_S?SeS`4Sg_\3SS_SSeS`4Sh_\4SS_SSeS`4Sh_\3SS_S?SeS`4Si_\4SS_S?SeS`4Si_\3S S_SSjS`4Sk_0 \4S S_SSjS`4Sk_\3S S_S?SjS`4Sl_\4S S_S?SjS`4Sl_\3SS_SSjS`4Sm_\4SS_SSjS`4Sm_\3SS_S?SjS`4Sn_\4SS_S?SjS`4Sn_\3S S_SSoS`4Sp_\4S S_SSoS`4Sp_\3S S_S?SoS`4Sq_\4S S_S?SoS`4Sq_\3SS_SSoS`4Sr_\4SS_SSoS`4Sr_\3SSeSSoS`4Sr_\4SSeSSoS`4Sr_\3SS_S?SoS`4Ss_\4SS_S?SoS`4Ss_E0 \3SS_SStS`4Su_\3S S_SSvS`4Sw_\3SS_SSvS`4Sw_\4SS_SSvS`4Sx_\3SS_S?SvS`4Sy_\3SSeSSvS`4Sz_\4SSeSSvS`4S{_\3S S|SS}S`4S~_\4S S|SS}S`4S_\3SS_SS}S`4S_\3SSeSS}S`4S_\4SSeSS}S`4S_\3SS|SS}S`4S~_\4SS|SS}S`4S_\3SS_SSSe4S_\4SS_SSSe4S_\3S?S_SSS`4S_E0 \4S?S_SSS`4S_\3S?S_S?SS`4S_\4S?S_S?SS`4S_\3S?S_SSS`4S_\4S?S_SSS`4S_\3S?S_SSS4S_\4S?S_SSS4S_\3S?S_SSS4S_\4S?S_SSS4S_\3S?S_SSS4S_\4S?S_SSS4S_\3S?S_SSS_4S_\4S?S_SSS_4S_\3S?S_SSS4S_\4S?S_SSS4S_\3S?S_SSS4S_\4S?S_SSS4S_E0 \3S?S_SSSe4S_\4S?S_SSSe4S_\3S?S_SSS4S_\4S?S_SSS4S_\3S?S_SSS4S_\4S?S_SSS4S_\3S?S_SSS4S_\4S?S_SSS4S_\3S?S_SSS`4S_\4S?S_SSS`4S_\3S?S_SSS`4S_\4S?S_SSS`4S_\3S?S_SSS4S_\4S?S_SSS4S_\3S?S_SSS_4S_\4S?S_SSS_4S_\3S?S_SSSe4S_E0 \4S?S_SSSe4S_\3SAS_SS_S`4S_\4SAS_SS_S`4S_\3SAS_S?S_S`4S_\4SAS_S?S_S`4S_\3SAS_SSeS`4S_\4SAS_SSeS`4S_\3SAS_S?SeS`4S_\4SAS_S?SeS`4S_\3SAS_SSjS`4S_\4SAS_SSjS`4S_\3SAS_S?SjS`4S_\4SAS_S?SjS`4S_\3SAS_SSoS`4S_\4SAS_SSoS`4S_\3SAS_SSS4S_\4SAS_SSS4S_E0 \3SAS_SSSe4S_\4SAS_SSSe4S_\3SAS_S?SoS`4S_\4SAS_S?SoS`4S_\3SES_SSS`4S_\4SES_SSS`4S_\3SES_SSS4S_\4SES_SSS4S_\3SES_SSS4S_\4SES_SSS4S_\3SES_SSS`4S_\4SES_SSS`4S_\3SGS_SSoS`4Sr_\4SGS_SSoS`4Sr_\3SGS_SSS`4S_\4SGS_SSS`4S_\3SKS_SSS`4S_E\4SKS_SSS`4S0Era\b" S \a 5       5      rc/ SQrdSS jre      SS jrf        SS jrg0 rh0 riSS jrj " S S\5      rk\
S\l\m/\4   rnSS jroSS jrpSS jrq\&(       a  \\r\4   rsO\rs " S S\s5      rt\h\tlh        \i\tli        \%R                  " 5        H;  u  rurv\vR                  SS5      rv\x" \tS\v 3\h\u   S   5        \x" \tS\v 3\i\u   5        M=     ChCiCuCv " S S\t5      ry\yrz " S S\R0                  5      r{0 SS\3SSS_S4_SS\3SSSoS4_SS\3SSSS?4_SS\3SASSoS4_SS\3SASSS?4_SS\3SS?S}S4_SS\3SSSvS4_SS\3SSSvS4_SS\3SSAS}S4_SS\3S?SSS4_SS\3S?SSS 4_SS\3S?SSS?4_SS\3SESSS4_SS\3SGSSS4_SS\3SKSSS4_SS\4SSSvS4_r|SS jr} " S S\R                  5      rSS jr\GR                  " \{GR                  \{\e5        \GR                  " \{GR                  \}5        \GR                  " \{GR                  \5        \GR
                  " \{GR                  SS/5        \GR                  " \{GR                  S5        gs  snn f )    )annotationsN)CallableMutableMapping)Fraction)NumberRational)IOAnycast   )ExifTagsImage	ImageFileImageOpsImagePaletteTiffTags)i16be)i32be)o8)DeferredErroris_pathTYPESF)Iterator)NoReturn)BufferIntegralLikeStrOrBytesPath   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  webpr    )1z1;I)r>   z1;IR)r>   r>   )r>   z1;R)r%   )LzL;2I)r?   zL;2IR)r?   zL;2)r?   zL;2R)r)   )r?   zL;4I)r?   zL;4IR)r?   zL;4)r?   zL;4R)r1   )r?   zL;I)r?   zL;IR)r?   r?   )r?   zL;R)   )I;16zI;12)   )rA   rA   )I;16BrC   )rA   zI;16R)IzI;16S)rD   zI;16BS)r'   )    )FF;32F)rF   zF;32BF)rD   zI;32N)rD   I;32S)rD   zI;32BS)r1   r1   )LArI   )r1   r1   r1   )RGBrJ   )rJ   zRGB;R)r1   r1   r1   r1   )RGBArK   r   )rJ   RGBX)r1   r1   r1   r1   r1   r   r   )rJ   RGBXX)r1   r1   r1   r1   r1   r1   )r   r   r   )rJ   RGBXXX)rK   RGBa)r   r   )rK   RGBaX)r   r   r   )rK   RGBaXX)r%   r   )rK   RGBAX)r%   r   r   )rK   RGBAXX)i  )rB   rB   rB   )rJ   zRGB;16L)rJ   zRGB;16B)rB   rB   rB   rB   )rK   zRGBA;16L)rK   zRGBA;16B)rJ   zRGBX;16L)rJ   zRGBX;16B)rK   zRGBa;16L)rK   zRGBa;16B)PzP;1)rV   zP;1R)rV   zP;2)rV   zP;2R)rV   zP;4)rV   zP;4R)rV   rV   )rV   PX)PArX   )rV   zP;R)CMYKrY   )rY   CMYKX)rY   CMYKXX)rY   zCMYK;16L)rY   zCMYK;16B)LABr\   c              #  >   #    U  H  n[        US    5      v   M     g7f)r)   N)len).0key_tps     [/var/www/html/qgis-automation/mouza_env/lib/python3.13/site-packages/PIL/TiffImagePlugin.py	<genexpr>rb     s     AyV#fQi..ys   )s   MM *s   II* s   MM* s   II *s   MM +s   II+ c                >    U R                  [        [        5      5      $ N)
startswithtuplePREFIXESprefixs    ra   _acceptrj   "  s    U8_--    c                    [        U 5      S:  n[        U(       a  SU -  OU 5      R                  U5      nU(       a  US S S2   $ U$ )Nr   )absIFDRationallimit_rational)valmax_valinvn_ds       ra   _limit_rationalru   &  sC     c(Q,C
a#g#
.
=
=g
FC3tt9$$rk   ro   c                   [        U 5      nUR                  UR                  4n[        S U 5       5      U:  a  [	        U [        U5      5      n[        S U 5       5      n[        U5      U:  a  [	        US   US   -  U5      nU$ )Nc              3  8   #    U  H  n[        U5      v   M     g 7frd   floatr_   is     ra   rb   )_limit_signed_rational.<locals>.<genexpr>4  s     
!S588S   c              3  8   #    U  H  n[        U5      v   M     g 7frd   rx   rz   s     ra   rb   r|   7  s     ,1eAhhr}   r   r   )r   	numeratordenominatorminru   rn   rf   max)rq   rr   min_valfracrt   	n_d_floats         ra   _limit_signed_rationalr   .  s~     C=D-1^^T=M=M-MC

!S
!!G+c3w<0,,,I
9~ilYq\97CJrk   c                $   ^        SU 4S jjnU$ )Nc                6   > [        U R                  T5      " U6 $ rd   )getattr_val)selfargsops     ra   delegate_delegate.<locals>.delegateF  s     tyy"%t,,rk   )r   ro   r   ztuple[float, ...]returnzbool | float | Fractionr=   )r   r   s   ` ra   	_delegater   E  s'    --"3-	 -
 Ork   c                  p   \ rS rSrSr Sr S*     S+S jjr\S,S j5       r\S-S j5       r	S.S jr
S/S jrS-S	 jrS0S
 jrS1S jrS2S jr \" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r \" S5      r!\" S5      r"\" S5      r#\" S 5      r$\" S!5      r%\" S"5      r&\" S#5      r'\" S$5      r(\" S%5      r)\" S&5      r*\+" \,S'5      (       a  \" S'5      r-S(r.g)S(r.g))3ro   iN  zImplements 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   c                8   U   [        U[        5      (       a4  UR                  U l        UR                  U l        UR                  U l        g[        U[        5      (       a#  UR                  U l        UR                  U l        O-[        (       a  [        [        U5      U l        OXl        X l        US:X  a  [        S5      U l        gUS:X  a  [        U5      U l        g[        U5      U:X  a  [        [        U5      U5      U l        g[        X-  5      U l        g)z
:param value: either an integer numerator, a
float/rational/other number, or an IFDRational
:param denominator: Optional integer denominator
Nr   nanr   )
isinstancero   r   r   r   r   r   r   TYPE_CHECKINGr   r   ry   int)r   valuer   s      ra   __init__IFDRational.__init__\  s     	e[))#ooDO % 1 1D

DIeX&&#ooDO % 1 1D}"&|U";"' +!eDIA DIZ5  U[9DI !45DIrk   c                    U R                   $ rd   )r   r   s    ra   r   IFDRational.numerator~  s    rk   c                    U R                   $ rd   )r   r   s    ra   r   IFDRational.denominator  s       rk   c                    U R                   S:X  a  U R                  U R                   4$ [        U R                  [        5      (       d   eU R                  R                  U5      nUR                  UR                   4$ )zm

:param max_denominator: Integer, the maximum denominator value
:returns: Tuple of (numerator, denominator)
r   )r   r   r   r   r   limit_denominator)r   max_denominatorfs      ra   rp   IFDRational.limit_rational  se     q >>4#3#333$))X....II''8{{AMM))rk   c                >    [        [        U R                  5      5      $ rd   )strry   r   r   s    ra   __repr__IFDRational.__repr__  s    5#$$rk   c                6    U R                   R                  5       $ rd   )r   __hash__r   s    ra   r   IFDRational.__hash__  s    yy!!##rk   c                    U R                   n[        U[        5      (       a  UR                   n[        U[        5      (       a  [        U5      nX!:H  $ rd   )r   r   ro   ry   )r   otherrq   s      ra   __eq__IFDRational.__eq__  s?    iie[))JJEeU##*C|rk   c                H    U R                   U R                  U R                  /$ rd   )r   r   r   r   s    ra   __getstate__IFDRational.__getstate__  s    		4??D,=,=>>rk   c                   [         R                  U S5        Uu  p#n[        U[        [        45      (       d   eX l        [        (       a  [        [        U5      U l	        OX0l	        [        U[        5      (       d   eX@l        g Nr   )ro   r   r   ry   r   r   r   r   r   r   r   r   )r   stater   r   r   s        ra   __setstate__IFDRational.__setstate__  sj    T1%).&,$ 12222	="<<DO(O,,,,,(rk   __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__)r   r   r   Nr<   )r   float | Fraction | IFDRationalr   r   r   None)r   r   r   r   )r   r   r   ztuple[IntegralLike, int]r   r   )r   objectr   bool)r   %list[float | Fraction | IntegralLike])r   r   r   r   )/__name__
__module____qualname____firstlineno____doc__	__slots__r   propertyr   r   rp   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   __static_attributes__r=   rk   ra   ro   ro   N  s   
 7I IJ 63 6BE 6	 6D   ! !*%$?
) 	"G$H	"G$H	"G$HM*K^,L^,Lo.M	"G$H	"G$H	"G	"G	"G+&Ix Fx Fx Fx F$H$H+&I+&Ix##I& $rk   ImageFileDirectory_v2c                   ^ ^ SU U4S jjnU$ )Nc                   > SSK Jn  U R                  R                  S5      (       a"  U R                  SS  R	                  SS5      UT'   TU 4[
        T'   U $ )Nr   r   load_r+   _ )r   r   r   re   replace_load_dispatch)funcr   idxsizes     ra   	decorator#_register_loader.<locals>.decorator  sO    #==##G,,qr*223<E#J"Djsrk   )r   _LoaderFuncr   r   r=   )r   r   r   s   `` ra   _register_loaderr     s      rk   c                   ^  SU 4S jjnU$ )Nc                   > U [         T'   U $ rd   )_write_dispatch)r   r   s    ra   r   #_register_writer.<locals>.decorator  s    #rk   )r   Callable[..., Any]r   r   r=   )r   r   s   ` ra   _register_writerr     s     rk   c                   ^^ SSK Jn  U u  nmnX1U'   [        R                  " ST 35      m S       SUU4S jjjnTU4[        U'   U4S j[
        U'   g )Nr   r   =c                H   > U R                  [        U5      T-   T 3U5      $ rd   )_unpackr^   )r   data
legacy_apifmtr   s      ra   basic_handler&_register_basic.<locals>.basic_handler  s)     ||s4yD01#7>>rk   c                >   >^  SR                  UU 4S jU 5       5      $ )Nrk   c              3  H   >#    U  H  nTR                  TU5      v   M     g 7frd   )_pack)r_   r   r   r   s     ra   rb   4_register_basic.<locals>.<lambda>.<locals>.<genexpr>  s     <VEC''Vs   "join)r   valuesr   s   ` ra   <lambda>!_register_basic.<locals>.<lambda>  s    <V<<rk   T)r   r   r   bytesr   r   r   tuple[Any, ...])r   r   structcalcsizer   r   )idx_fmt_namer   r   namer  r   r   s        @@ra   _register_basicr    sz    !NCd#J??Qse9%D FJ?#?+0?>B?	? ?
 -N3OCrk   c                     \ rS rSr% Sr0 rS\S'   0 rS\S'      S?       S@S jjr\	" S	 5      r
\	" S
 5      r\	SAS j5       r\R                  SBS j5       rSCS jrSDS jrSES jrSFS jrSGS jrSHS jrSIS jrSJS jrSKS jrSLS jrSMS jrSNS jr\" \" \\R<                  SS4\R>                  SS4\R@                  SS4\RB                  SS 4\RD                  S!S"4\RF                  S#S$4\RH                  S%S&4\RJ                  SS4\RL                  S'S(4/	5      5        \'" S)S)5      SOSPS* jj5       r(\)" S)5      SQS+ j5       r*\'" S,S)5      SOSRS- jj5       r+\)" S,5      SSS. j5       r,\'" S/S05       SO     STS1 jj5       r-\)" S/5      SUS2 j5       r.\'" S3S)5      SOSPS4 jj5       r/\)" S35      SVS5 j5       r0\'" S6S05       SO     STS7 jj5       r1\)" S65      SUS8 j5       r2SWS9 jr3SXS: jr4SYS; jr5SZS[S< jjr6S\S= jr7S>r8g)]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   Nc                   [        U5      (       d  S[        U5       S3n[        U5      eUb  UOUSS U l        U R                  [        :X  a  SU l        O)U R                  [        :X  a  SU l        OSn[        U5      eUS   S:H  U l        X0l        0 U l	         U R                  5         U R                  (       a  U R                  S	US
S 5      S   OU R                  SUSS 5      S   U l        SU l        g)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+   Qr1   r   r?   r)   F)rj   reprSyntaxError_prefixMM_endianII_bigtiffgrouptagtyperesetr   next_legacy_api)r   ifhri   r"  msgs        ra   r   ImageFileDirectory_v2.__init__G  s      s||,T#YK{CCc""!'!3vRa<<2DL\\RDL"Cc""A"
')'

 }} LLc!"g&q)c3qr7+A. 		
 !rk   c                    U R                   $ rd   )r  r   s    ra   r
  ImageFileDirectory_v2.<lambda>n      4<<rk   c                    U R                   $ rd   )_offsetr   s    ra   r
  r+  o  r,  rk   c                    U R                   $ rd   r&  r   s    ra   r    ImageFileDirectory_v2.legacy_apiq  s    rk   c                    Sn[        U5      e)Nz"Not allowing setting of legacy api)	Exception)r   r   r(  s      ra   r   r1  u  s    2nrk   c                X    0 U l         0 U l        0 U l        0 U l        S U l        S U l        g rd   )_tags_v1_tags_v2_tagdatar#  _nextr.  r   s    ra   r$  ImageFileDirectory_v2.resetz  s,    (*(**,
#'rk   c                *    [        [        U 5      5      $ rd   )r   dictr   s    ra   __str__ImageFileDirectory_v2.__str__  s    4:rk   c                    U R                  5        VVs0 s H0  u  p[        R                  " XR                  5      R                  U_M2     snn$ s  snnf )zi
:returns: dict of name|key: value

Returns the complete tag dictionary, with named tags where possible.
)itemsr   lookupr"  r  )r   coder   s      ra   namedImageFileDirectory_v2.named  sI      $zz|
+ OOD**-22E9+
 	
 
s   7Ac                j    [        [        U R                  5      [        U R                  5      -  5      $ rd   )r^   setr7  r6  r   s    ra   __len__ImageFileDirectory_v2.__len__  $    3t}}%DMM(::;;rk   c                (   XR                   ;  aD  U R                  U   nU R                  U   nU R                  U   u  pEU" XU R                  5      X'   U R                   U   nU R                  (       a  [        U[        [        45      (       d  U4nU$ rd   )r6  r7  r#  r   r   r   rf   r  )r   tagr   typr   handlerrq   s          ra   __getitem__!ImageFileDirectory_v2.__getitem__  s}    mm#==%D,,s#C //4MDDOO<DImmC ??:cE5>#B#B&C
rk   c                H    XR                   ;   =(       d    XR                  ;   $ rd   )r6  r7  r   rJ  s     ra   __contains__"ImageFileDirectory_v2.__contains__      mm#;smm';;rk   c                <    U R                  XU R                  5        g rd   )_setitemr   )r   rJ  r   s      ra   __setitem__!ImageFileDirectory_v2.__setitem__  s    c$//2rk   c           	     	  ^ [         [        [        4n[        R                  " XR
                  5      m[        X$5      (       a  U/OUnXR                  ;  Gaq  TR                  (       a  TR                  U R                  U'   GOE[        R                  U R                  U'   [        S U 5       5      (       ae  U H@  n[        U[        5      (       d   eUS:  d  M"  [        R                  U R                  U'     GO   [        R                  U R                  U'   GO[        S U 5       5      (       a  SnSnSn	U H]  n[        U[        5      (       d   eU(       a  SUs=::  a  S:  d  O  SnU(       a  SUs=:  a  S:  d  O  SnU	(       d  MS  US:  d  M[  Sn	M_     U(       a  [        R                  U R                  U'   GOU(       a  [        R                   U R                  U'   OU	(       a  [        R"                  U R                  U'   O[        R$                  U R                  U'   O[        S	 U 5       5      (       a  [        R&                  U R                  U'   Oi[        S
 U 5       5      (       a  [        R(                  U R                  U'   O4[        S U 5       5      (       a  [        R*                  U R                  U'   U R                  U   [        R                  :X  a:  U Vs/ s H,  n[        U[        5      (       a  UR-                  SS5      OUPM.     nnOSU R                  U   [        R                  :X  a2  U Vs/ s H%  n[        U[        5      (       a  [/        U5      OUPM'     nnU R                  U   [        R"                  :H  =(       a    [        U[0        5      n
U
(       d  [3        U4S jU 5       5      nU(       a  U R4                  OU R6                  nU
(       d  TR8                  S:X  dD  U R                  U   [        R*                  :X  d#  TR8                  cY  [;        U5      S:X  aJ  U(       dC  U(       a4  U R                  U   [        R                  [        R                  4;   a  U4n Uu  X'   g X[U'   g s  snf s  snf ! [<         a0    [>        R@                  " SU S[;        U5       S35        US   X'    g f = f)Nc              3  B   #    U  H  n[        U[        5      v   M     g 7frd   )r   ro   r_   vs     ra   rb   1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     B6az![116   r   c              3  B   #    U  H  n[        U[        5      v   M     g 7frd   )r   r   rZ  s     ra   rb   r\         <VAs++Vr]  Tr   Fi i   c              3  B   #    U  H  n[        U[        5      v   M     g 7frd   )r   ry   rZ  s     ra   rb   r\         >v!Au--vr]  c              3  B   #    U  H  n[        U[        5      v   M     g 7frd   )r   r   rZ  s     ra   rb   r\    r_  r]  c              3  B   #    U  H  n[        U[        5      v   M     g 7frd   )r   r  rZ  s     ra   rb   r\    ra  r]  asciir   c              3  t   >#    U  H-  n[        U[        5      (       a  TR                  U5      OUv   M/     g 7frd   )r   r   cvt_enum)r_   r   infos     ra   rb   r\    s2      #E )35#(>(>e$EI#s   58r   zMetadata Warning, tag z had too many entries: z, expected 1)!r   r  r   r   r@  r"  r   r#  type	UNDEFINEDallro   SIGNED_RATIONALRATIONALr   SHORTSIGNED_SHORTLONGSIGNED_LONGDOUBLEASCIIBYTEencodery   r;  rf   r5  r6  lengthr^   
ValueErrorwarningswarn)r   rJ  r   r   	basetypesr	  r[  shortsigned_shortlongis_ifddestrg  s               @ra   rU  ImageFileDirectory_v2._setitem  s   UC(	sJJ/&u88%ell"yy$(IIS!$,$6$6S!B6BBB#)![9999q5080H0HDLL-!	 $ -5,=,=S)<V<<< E#'LD#)!S1111 !q.5.$)E'A1E1E+0L4AE#(D $ ,4NNS)%,4,A,AS),4MMS),4,@,@S)>v>>>(0DLL%<V<<<(0DLL%>v>>>(0DLL%<< 2 22  A 1;1c0B0B),I  F \\#("3"33EKLV*Q"4"4eAh!;VFLc"hmm3P
648P # F
 !+t}} [[A||C HMM1#Fq(8 dll3/!!((4  !&% I[
 M:  &,SE1H6{m<1 #1I	&s   .3R	,R R 7SSc                    U R                   R                  US 5        U R                  R                  US 5        U R                  R                  US 5        g rd   )r6  popr5  r7  rP  s     ra   __delitem__!ImageFileDirectory_v2.__delitem__  s>    #t$#t$#t$rk   c                j    [        [        U R                  5      [        U R                  5      -  5      $ rd   )iterrE  r7  r6  r   s    ra   __iter__ImageFileDirectory_v2.__iter__  $    C&T]]);;<<rk   c                J    [         R                  " U R                  U-   U5      $ rd   )r  unpackr  )r   r   r   s      ra   r   ImageFileDirectory_v2._unpack
  s    }}T\\C/66rk   c                J    [         R                  " U R                  U-   /UQ76 $ rd   )r  packr  )r   r   r	  s      ra   r  ImageFileDirectory_v2._pack  s    {{4<<#-777rk   Hrz  r?   r|  bzsigned bytehzsigned shortlzsigned longr   ry   ddoubler  long8r   c                    U$ rd   r=   r   r   r   s      ra   	load_byteImageFileDirectory_v2.load_byte!      rk   c                    [        U[        5      (       a  [        U5      n[        U[        5      (       a  [        U45      nU$ rd   )r   ro   r   r  r   r   s     ra   
write_byte ImageFileDirectory_v2.write_byte%  s5    dK((t9DdC  $>Drk   r%   c                \    UR                  S5      (       a  US S nUR                  SS5      $ )N    rm   zlatin-1r   )endswithdecoder  s      ra   load_string!ImageFileDirectory_v2.load_string-  s-    ==9D{{9i00rk   c                    [        U[        5      (       a  [        U5      n[        U[        5      (       d  UR	                  SS5      nUS-   $ )Nrd  r   r  )r   r   r   r  rt  r   r   s     ra   write_string"ImageFileDirectory_v2.write_string3  sA     eS!!JE%''LL)4Eu}rk   r+   r1   c           
        ^^ U R                  [        U5      S-   S3U5      nSU4S jjm[        U4S j[        US S S2   USS S2   5       5       5      $ )Nr)   r?   c                .   > T(       a  X4$ [        X5      $ rd   ro   ar  r   s     ra   combine4ImageFileDirectory_v2.load_rational.<locals>.combineB      'A6>[->>rk   c              3  8   >#    U  H  u  pT" X5      v   M     g 7frd   r=   r_   numdenomr  s      ra   rb   6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>E       V;UZSWS((;U   r%   r   r  r   r  r   r   ztuple[int, int] | IFDRationalr   r^   rf   zipr   r   r   valsr  s     ` @ra   load_rational#ImageFileDirectory_v2.load_rational<  W     ||s4yA~.a0$7	? V3tCaCy$qtRSt*;UVVVrk   c                :   ^  SR                  U 4S jU 5       5      $ )Nrk   c              3  ^   >#    U  H"  nTR                   " S /[        US5      Q76 v   M$     g7f)2Ll    N)r  ru   r_   r   r   s     ra   rb   7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>I  s)      
LRDDJJt?odI>?Fs   *-r  r   r	  s   ` ra   write_rational$ImageFileDirectory_v2.write_rationalG  s!    xx 
LR
 
 	
rk   r/   c                    U$ rd   r=   r  s      ra   load_undefined$ImageFileDirectory_v2.load_undefinedM  r  rk   c                    [        U[        5      (       a  [        U5      n[        U[        5      (       a  [        U5      R	                  SS5      nU$ )Nrd  r   )r   ro   r   r   rt  r  s     ra   write_undefined%ImageFileDirectory_v2.write_undefinedQ  s@    e[))JEeS!!J%%gy9Erk   
   c           
        ^^ U R                  [        U5      S-   S3U5      nSU4S jjm[        U4S j[        US S S2   USS S2   5       5       5      $ )Nr)   r  c                .   > T(       a  X4$ [        X5      $ rd   r  r  s     ra   r  ;ImageFileDirectory_v2.load_signed_rational.<locals>.combine_  r  rk   c              3  8   >#    U  H  u  pT" X5      v   M     g 7frd   r=   r  s      ra   rb   =ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>b  r  r  r%   r   r  r  r  s     ` @ra   load_signed_rational*ImageFileDirectory_v2.load_signed_rationalY  r  rk   c                :   ^  SR                  U 4S jU 5       5      $ )Nrk   c           	   3  `   >#    U  H#  nTR                   " S /[        USS5      Q76 v   M%     g7f)2lii   N)r  r   r  s     ra   rb   >ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>f  s0      
 JJtP4T9hOPs   +.r  r  s   ` ra   write_signed_rational+ImageFileDirectory_v2.write_signed_rationald  s!    xx 

 
 	
rk   c                    UR                  U5      n[        U5      U:w  a  SU S[        U5       S3n[        U5      eU$ )Nz&Corrupt EXIF data.  Expecting to read  bytes but only got z. )readr^   OSError)r   fpr   retr(  s        ra   _ensure_read"ImageFileDirectory_v2._ensure_readk  sN    ggdms8t%%)F*>s3xjL  #,
rk   c           
        U R                  5         UR                  5       U l         U R                  (       a"  U R	                  SU R                  US5      5      O!U R	                  SU R                  US5      5      S   n[        U5       GH  nU R                  (       a"  U R	                  SU R                  US5      5      O!U R	                  SU R                  US	5      5      u  pEpg[        R                  " X@R                  5      R                  n[        R                  " US
5      n	SU SU SU	 SU S3	n
 U R                  U   u  pXk-  nXR                  (       a  SOS:  a{  UR                  5       nU R	                  U R                  (       a  SOSU5      u  nU
SU SU 3-  n
UR#                  U5        [$        R&                  " X5      nUR#                  U5        OUS U n[)        U5      U:w  a@  [*        R,                  " SU S[)        U5       SU 35        [        R!                  U
5        GM  U(       d  [        R!                  U
5        GM  XpR.                  U'   XPR0                  U'   U
S-  n
XS:  a  SU S3O
[3        U5      -  n
[        R!                  U
5        GM     U R                  (       a"  U R	                  SU R                  US5      5      O!U R	                  SU R                  US5      5      u  U l        g ! [         a    [        R!                  SX5         GM  f = f! [6         a)  n
[*        R,                  " [9        U
5      5         S n
A
g S n
A
ff = f)Nr  r1   r  r%   r   HHQ8s   HHL4sr@   unknownztag:  (
) - type: )z%s - unsupported type %sr)   r?   z Tag Location: z - Data Location: z/Possibly corrupt EXIF data.  Expecting to read r  z. Skipping tag z
 - value: rE   <table:  bytes>)r$  tellr.  r!  r   r  ranger   r@  r"  r  r   getr   KeyErrorloggerdebugseekr   
_safe_readr^   rw  rx  r7  r#  r  r%  r  r   )r   r  	tag_countr{   rJ  rK  countr   tagnametypnamer(  	unit_sizerL  r   hereoffsets                   ra   loadImageFileDirectory_v2.loadu  s   

wwy=	 == S$"3"3B":;\\#t'8'8Q'?@	I
 9% }} LL$*;*;B*CDgt/@/@R/HI &% #//#zz:??))C3gYbZy3%qI)-)<)<S)A&I (115779D $DMMSsD QIV_TF2DVHMMCGGFO$//9DGGDM;Dt9$MM--1F2Fs4yk R)),/
 LL%LL%%)c"$'S!|#"9$w/$t*LS!] &d == S$"3"3B":;\\#t'8'8Q'?@ TYG   LL!;SFP  	MM#c(#	s=   DL+ 7LF:L+  L(#L+ 'L((L+ +
M5MMc                ,   U R                   U R                  SU R                  (       a  SOS5      -   nU R                  (       a  XR                  SSS5      -  nXR                  (       a  U R                  SS5      -  nU$ U R                  S	S5      -  nU$ )
Nr  r  *   HHr1   r   r  rB   r?   )r  r  r!  r   r'  s     ra   _get_ifhImageFileDirectory_v2._get_ifh  sw    llTZZ4==RbII==::dAq))Cmmtzz#r"K
 :>C9KK
rk   c                   U R                  U R                  (       a  SOS[        U R                  5      5      n/ nU R                  (       a  SOSnU R                  (       a  SOSnU[        U5      [        U R                  5      U R                  (       a  SOS-  -   U-   -  nS n[	        U R                  R                  5       5       GHa  u  pxU[        :X  a  [        U5      nU R                  U   n	[        R                  SXy[        U5      5        U	[        R                  :H  =(       a    [        U[        5      n
U
(       aV  [        U R!                  5       US	9nU R                  U   nUR                  5        H	  u  pXU'   M     UR#                  U5      nO0[        U[$        5      (       a  UOU4nU R&                  U	   " U /UQ76 n[        R(                  " XpR*                  5      R,                  nU
(       a  S
O[.        R0                  " U	S5      nSU SU SU SU	 S3	nU[        U5      S:  a  S[        U5       S3O
[3        U5      -  n[        R                  U5        U
(       a  SnOJU	[        R4                  [        R6                  [        R8                  4;   a  [        U5      nO[        U5      n[        U5      U::  a(  UR;                  XyUUR=                  US5      S45        GM&  UR;                  XyUU R                  XA5      U45        U[        U5      S-   S-  S-  -  nGMd     Ub  X6   u  pynpU(       aO  U R>                  U	   u  nnU" XU R@                  5       Vs/ s H  nUU-   PM
     nnU R&                  U	   " U /UQ76 nO&U R                  X@RC                  XH5      S   U-   5      nXyUX4X6'   U H[  u  pynp[        R                  SXyU[        U5      [        U5      5        X R                  U R                  (       a  SOSXyUU5      -  nM]     X R                  US5      -  nU H%  u  pynpX/-  n[        U5      S-  (       d  M   US-  nM'     U$ s  snf )Nr  r  r?   r1   r)   r  r@   zTag %s, Type: %s, Value: %s)r"  ifdr  zsave: r  r  z) - value: rB   r  r  r   r  rk   r%   r   z%s %s %s %s %sr  r  )"r  r!  r^   r6  sortedr?  STRIPOFFSETSr#  r  r  r  r   ro  r   r;  r   r  tobytesrf   r   r@  r"  r  r   r  r   rs  rr  ri  appendljustr   r   r   )r   r  resultentriesr   fmt_sizestripoffsetsrJ  r   rK  r}  r  r	  ifd_tag	ifd_valuer   r  r  r(  r  r   rL  rq   s                          ra   r	  ImageFileDirectory_v2.tobytes  s   4==Cc3t}};MN<>]]c11K#dmm,dmmLLxW	
  !!4!4!67JCl""7|,,s#CLL6$u+NHMM)Ej.EF+DMMO3Gs+*0,,.&G#,L +9{{6*",UE":":++C0??ooc::6;;G%e599S)+DG7)2cU*WIRuKPCCIOXc$i[0VTCLL 8J8JKKD	F4yH$%He1LcRS%C1H$OP3t9q=Q.22E 8J #+2+@(CeU $ 3 3C 8g29$doo2VW2V3#,2VW++C0??

3S(@(Cf(LM$'eU$@G! -4(CeULL)3UDKdTjj==gs F -4 	**S!$$ -4(CeUNF4y1}}% -4
 - Xs   &Qc                    UR                  5       S:X  a  UR                  U R                  5       5        UR                  5       nU R                  U5      nUR                  U5        U[	        U5      -   $ r   )r  writer  r	  r^   )r   r  r  r  s       ra   saveImageFileDirectory_v2.save  sU    779>HHT]]_%f%
F##rk   )r!  r  r&  r8  r.  r  r7  r5  r6  r"  r%  r#  )s   II*     NN)r'  r  ri   zbytes | Noner"  
int | Noner   r   )r   r   )r   r   r   r   r   r   r   )r   zdict[str, Any]r   rJ  r   r   r
   rJ  r   r   r   rJ  r   r   r
   r   r   )rJ  r   r   r
   r   r   r   r   )rJ  r   r   r   r   zIterator[int])r   r   r   r  r   r  )r   r   r	  r
   r   r  r  )r   r  r   r   r   r  )r   bytes | int | IFDRationalr   r  )r   r  r   r   r   r   )r   zstr | bytes | intr   r  )r   r  r   r   r   z)tuple[tuple[int, int] | IFDRational, ...])r	  ro   r   r  )r   r  r   r  )r  	IO[bytes]r   r   r   r  )r  r  r   r   )r   r  rL   )r  r   r   r  )r  r  r   r   )9r   r   r   r   r   r   __annotations__r   r   r   ri   r  r   setterr$  r<  rB  rF  rM  rQ  rV  rU  r  r  r   r  listmapr  r   rm  ro  SIGNED_BYTErn  rp  FLOATrq  IFDLONG8r   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r   r=   rk   ra   r   r     s   :x :<N6;57O27 3# 	%!%! %! 	%!
 
%!N /0F/0F     (	
<	<3\|%
=78 	g.V,%%sM:&&^<%%sM:g.#x0sF+g.
	
" a  a  a1 1
 a  a.2WW'+W	2W W a
 

 a  a  b!.2WW'+W	2W W b
 
AFN`$rk   r   r   r   write_c                     ^  \ rS rSr% SrSU 4S jjr\" S 5      r\" S 5      rS\	S'    \
SS j5       rSS	 jrSS
 jrSS jrSS jrSS jrSS jrSrU =r$ )ImageFileDirectory_v1i$  a  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
c                4   > [         TU ]  " U0 UD6  SU l        g )NT)superr   r&  )r   r   kwargs	__class__s      ra   r   ImageFileDirectory_v1.__init__7  s    $)&)rk   c                    U R                   $ rd   )r5  r   s    ra   r
  ImageFileDirectory_v1.<lambda>;  s    rk   c                    U R                   $ rd   )r7  r   s    ra   r
  r0  <  s    DMMrk   zdict[int, int]r#  c                    U " UR                   S9nUR                  Ul        UR                  Ul        UR                  Ul        U$ )a  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`

rh   )ri   r7  r#  r%  )clsoriginalr  s      ra   from_v2ImageFileDirectory_v1.from_v2B  s<     )((&&==
rk   c                    [        U R                  S9n[        U R                  5      Ul        [        U R                  5      Ul        [        U R
                  5      Ul        U$ )a  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`

rh   )r   ri   r;  r7  r#  r6  )r   r  s     ra   to_v2ImageFileDirectory_v1.to_v2T  sG     $4;;7DMM*4<<(DMM*
rk   c                H    XR                   ;   =(       d    XR                  ;   $ rd   )r5  r7  rP  s     ra   rQ  "ImageFileDirectory_v1.__contains__e  rS  rk   c                j    [        [        U R                  5      [        U R                  5      -  5      $ rd   )r^   rE  r7  r5  r   s    ra   rF  ImageFileDirectory_v1.__len__h  rH  rk   c                j    [        [        U R                  5      [        U R                  5      -  5      $ rd   )r  rE  r7  r5  r   s    ra   r  ImageFileDirectory_v1.__iter__k  r  rk   c                :    S H  nU R                  XU5        M     g N)FT)rU  )r   rJ  r   r   s       ra   rV  !ImageFileDirectory_v1.__setitem__n  s    'JMM#j1 (rk   c           	         XR                   ;  aQ  U R                  U   nU R                  U   nU R                  U   u  pES H  nU R	                  X" XU5      U5        M     U R                   U   n[        U[        [        45      (       d  U4nU$ rA  )r5  r7  r#  r   rU  r   rf   r  )r   rJ  r   rK  r   rL  legacyrq   s           ra   rM  !ImageFileDirectory_v1.__getitem__r  s    mm#==%D,,s#C //4MD'c74v#>G (mmC #u~..&C
rk   r0  )r   r
   r,  r
   r   r   )r4  r   r   r)  )r   r   r  r   r  r  r  )r   r   r   r   r   r   r   tagstagdatar  classmethodr5  r8  rQ  rF  r  rV  rM  r   __classcell__r-  s   @ra   r)  r)  $  se    $  ./D12G ! ""<<=2
 
rk   r)  c                     ^  \ rS rSrSrSrSr S     SU 4S jjjrSS jr\	SS j5       r
SS jrSS	 jrSS
 jrSS jrSU 4S jjrSS jrSS jrSS jrSS jrSrU =r$ )TiffImageFilei  TIFFz
Adobe TIFFFc                0   > U    U    [         TU ]  X5        g rd   )r+  r   )r   r  filenamer-  s      ra   r   TiffImageFile.__init__  s    
 	5"&rk   c                   U R                   c   eU R                   R                  S5      nUS   S:X  a  XR                   R                  S5      -  n[        U5      U l        U R                  R                  =U l        U l        SU l        U R                   U l        / U l	        SU l
        [        R                  S5        [        R                  SU R
                  5        [        R                  S[        U5      5        U R                  S	5        g)
z#Open the first image in a TIFF fileNr1   r%   r  rm   z*** 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  s     ra   _openTiffImageFile._open  s     ww"""ggll1oq6R<77<<?"C+C0 &*[[%5%55t{77%'%)23_dll3[$s), 	

1rk   c                \   U R                   nUc  U R                  5       nU R                  [        U R                  5      5        U R                   c1  U R                  U R                  5       S-   5        U R                   c  M1  U R                  U5        U R                   c   eU R                   $ )Nr   )rX  r  rY  r^   rW  r  )r   current_n_framescurrents      ra   n_framesTiffImageFile.n_frames  s    >>#iikGJJs4??+,..(

499;?+ ..(IIg~~)))~~rk   c                2   U R                  U5      (       d  gU R                  U5        U R                  bb  U R                  R                  U R
                  :w  d5  U R                  R                  U R                  :w  d  U R                  (       a  SU l        ggg)z%Select a given frame as current imageN)_seek_checkrY  _imimr   
_tile_sizemodereadonly)r   frames     ra   r  TiffImageFile.seek  sl    &&

588GGLLDOO+ww||tyy(}}DH   rk   c                   [        U R                  [        5      (       a  U R                  R                  eU R                  U l        [        U R                  5      U::  Ga  U R                  (       d  Sn[        U5      e[        R                  SUU R                  U R                  U R                  R                  5       5        U R                  S:  a  Sn[        U5      eU R                  R                  U R                  5        U R                  R                  U R                  5        [        R                  SU R                  R                  5       5        U R                   R#                  U R                  5        U R                   R$                  U R                  ;   a  SU l        OU R                   R$                  U l        U R                  S:X  a
  US-   U l        [        U R                  5      S:X  a  U R                  S:g  U l        U =R                  S-  sl        [        U R                  5      U::  a  GM  U R                  R                  U R                  U   5        U R                   R#                  U R                  5        [*        U R                   ;   aK  U R                   [*           n[        U[,        5      (       a  [        U5      S:X  a  US   nX0R.                  S'   OSU R.                  ;   a  U R.                  S	 U R1                  5         [2        R5                  U R                   5      =U l        U l        Xl        U R;                  5         g )	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   rV  r   exr  r^   rW  rT  EOFErrorr  r  rU  r  rv  r  r
  rR  r  r%  rX  is_animatedXMPrf   rg  _reload_exifr)  r5  rJ  r  _setup)r   rh  r(  rk  s       ra   rY  TiffImageFile._seek  sF   dhh..((++(($//"e+;;3sm#LLK {{e#/ o%GGLL%OO""4;;/LL5tww||~FKKTWW%{{4??2  "kk..{{a!&4??#q(#';;!#3 LLAL9 $//"e+: 	T__U+,!$++++c"C#u%%#c(a-!f"IIedii		% 3;;DKKHH48rk   c                    U R                   $ )zReturn the current frame number)rU  r   s    ra   r  TiffImageFile.tell  s    ||rk   c                   0 nU R                   R                  [        R                  R                  5      nU(       a  UR                  S5      (       a  [        USS 5      n[        R                  " US   S-   S-  5      S-  n[        USU-   SU-    5      nUSU-   SU-   U-    nSU0X'   U[        R                  " SU-   U-   S-  5      S-  S nUR                  S5      (       a  M  U$ )	a  
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)
rR  r  r   BaseImageResourcesre   i16mathceili32)r   blocksrq   idnr   r   s          ra   get_photoshop_blocks"TiffImageFile.get_photoshop_blocks  s     kkoohmm::;..))Qq]IIs1vzQ./!33q1urAv./26BFTM2$d^
$))R!Vd]a$781<>? ..)) rk   c                   > U R                   (       a!  U R                  (       a  U R                  5       $ [        TU ]  5       $ rd   )tileuse_load_libtiff_load_libtiffr+  r  )r   r-  s    ra   r  TiffImageFile.load  s-    99..%%''w|~rk   c                   U R                   cY  [        R                  " U R                  5        [        R                  R                  U R                  U R                  5      U l        [        R                  R                  U 5        g rd   )
rc  r   _decompression_bomb_checkre  corenewrf  rd  r   load_preparer   s    ra   r  TiffImageFile.load_prepare  sP    88++DOO<jjnnTYY@DG((.rk   c                x   U R                   (       dF  SU l        U R                  5       n[        R                   H  nX!;  a  M
  UR                  U5        M     [        R                  " U SS9  [        R                  R                  U R                  ;   a&  U R                  [        R                  R                  	 g g )NT)in_place)rn  !_close_exclusive_fp_after_loadinggetexifr   TAGS_V2_GROUPSget_ifdr   exif_transposer   rv  OrientationrR  )r   exifkeys      ra   load_endTiffImageFile.load_end  s     59D2 <<>D..?S! /
 	t4==$$3HMM556 4rk   c                :   [         R                   R                  U 5        U R                  5         [        U R                  5      S:X  d  Sn[        U5      eU R                  S   S   nU R                  S   S   nU R                  c   e [        U R                  S5      =(       a    U R                  R                  5       n[        U R                  S5      (       a  U R                  R                  5         U(       a1  [        U[        5      (       d   e[        U5      nXES	'   [        U5      n[         R                  " U R                  S
X0R                  5      n UR!                  U R"                  U5        U R&                  =(       a    U R(                  (       + n[        U R                  S5      (       aA  [*        R-                  S5        UR/                  U R                  R1                  5       5      u  pOU(       a  [*        R-                  S5        U(       d  U R                  R3                  S5        [4        R6                  " US[4        R8                  5      nUR/                  S5      u  p[4        R6                  " XK[4        R:                  5        O[[*        R-                  S5        U R                  R3                  S5        UR/                  U R                  R=                  5       5      u  p/ U l        SU l        U RA                  5         U(       a!  U R                  RC                  5         SU l        U
S:  a  SU
 3n[        U5      e[         R                   R                  U 5      $ ! [
         a    Sn GNf = f! [$         a  nSn[        U5      UeSnAff = f)zOOverload method triggered when we detect a compressed tiff
Calls out to libtiffr   zNot exactly one tiler   r'   NfilenoflushFr%   libtiffzCouldn't set the image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  r^   r  r  r  r   r  r  r   rf   r!  _getdecoderrf  decoderconfigsetimagerd  rv  _exclusive_fprn  r  r  r  r  r  oslseekSEEK_CURSEEK_SETr  rg  r  close)r   r(  extentsr   r  	args_listdecodereclose_self_fpr~  errposs               ra   r  TiffImageFile._load_libtiff0  s    	499~"(C#, ))A,q/yy|A
 ww"""
	(+@0@B tww(( dE****T
IaL#D##DIIy$@R@RS	&TWWg.
 **C43C3C/C477J'' LLPQ^^DGG$4$4$67FAsLLNO Q ((2q"++.C^^G,FAHHRbkk* LLFGGGLLO^^DGGLLN3FA	GGMMODG7"3%(C#,{{%%G  	 B	  	&*C#,A%	&s+   
A,M* M= *M:9M:=
NNNc                r   SU R                   ;   a  Sn[        U5      e[        U R                   R                  [        S5         U l        U R                   R                  [        S5      U l        U R                   R                  [        S5      nU R
                  S:X  a  SnU R                   R                  [        S5      n[        R                  S5        [        R                  SU R
                  5        [        R                  S	U5        [        R                  S
U R                  5        [        R                  SU5        [        R                  SU R                   R                  [        5      5         U R                   [           nU R                   [           n[#        U[$        5      (       a  [#        U[$        5      (       d  Sn['        U5      eXE4U l        U R                   R                  [*        R,                  R.                  5      nUS;   a	  XT4U l        OXE4U l        [        R                  SU R2                  5        U R                   R                  [4        S5      n[7        U5      S:  a$  [9        U5      [;        U5      s=:X  a  S:X  a  O  OSnU R                   R                  [<        S5      n	U R                   R                  [>        S5      n
US;   a  SnOUS:X  a  SnOSnU[7        U
5      -  n[7        U	5      nU R                   R                  [@        U R
                  S:X  a  US;   a  SOS5      nU[B        :  a#  [        RE                  SU5        Sn[G        U5      eX:  a  U	SU n	OX:  a
  US:X  a  X-  n	[7        U	5      U:w  a  Sn[G        U5      eU R                   RH                  UUUU	U
4n[        R                  SU5         [J        U   u  U l&        n[        R                  SU5        [        R                  S U RN                  5        U R
                  U RP                  S!'   U R                   R                  [R        S5      nU R                   R                  [T        S5      nU(       a  U(       a  U R                   R                  [V        5      nUS":X  a  UU4U RP                  S#'   OUUS:X  a  US$-  US$-  4U RP                  S#'   O7Uc#  UU4U RP                  S#'   UU4U RP                  S%'   OUU4U RP                  S%'   S=n=nn/ U l,        [Z        =(       d    U R
                  S&:g  U l.        U R\                  (       a  US":X  a5  USS S-   USS -   n[        R                  SU5        [J        U   u  U l&        nUS:X  a#  U R
                  S':X  a  U R                  S:X  a  S(nO'US):X  a  S*nOUR_                  S+5      (       a  USS, S--   nXR
                  S.U R                   R`                  4nU RX                  Rc                  [d        Rf                  " S/SSXE4SU5      5        GO[h        U R                   ;   d  [j        U R                   ;   Ga  [h        U R                   ;   a6  U R                   [h           nU R                   R                  [l        U5      nUnOU R                   [j           nU R                   R                  [n        5      nU R                   R                  [p        5      n[#        U[$        5      (       a  [#        U[$        5      (       d  S0n['        U5      eUnUU:X  a  UU:X  a  U R                  S":w  a  US,S nU H  nUU-   U:  a  U[s        U	5      -  S1-  nOSnUnU R                  S":X  a
  UU   nUU-  nU[%        U5      S4nU RX                  Rc                  [d        Rf                  " U R
                  UU[;        UU-   U5      [;        UU-   U5      4UU5      5        UU-  nUU:  d  M  SUU-   nnUU:  d  M  SnUS-  nM     O"[        R                  S25        Sn[G        U5      e[t        U R                   ;   a   U R                   [t           U RP                  S3'   U RN                  S4;   a[  U R                   [v            Vs/ s H  n[y        US5-  5      PM     n n[z        R|                  " S6S7R                  U 5      5      U l@        gg! [         a  nSn[!        U5      UeSnAff = f! [         a(  n[        R                  S5        Sn[G        U5      UeSnAff = fs  snf )8z-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-   r/   r1   z
- size: %sr<   r=   )r%   r-   r1   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$   r0   rJ   rA   I;16N)z;16Bz;16Lrm   NFr  zInvalid tile dimensionsr1   z- unsupported data organizationicc_profilerV   rX   r!   RGB;Lrk   )ArR  r  COMPRESSION_INFOr  COMPRESSION_compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION	FILLORDERr  r  YCBCRSUBSAMPLING
IMAGEWIDTHIMAGELENGTHr  	TypeErrorr   r   rv  re  r   rv  r  _sizer   SAMPLEFORMATr^   r   r   BITSPERSAMPLEEXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELerrorr  ri   	OPEN_INFO_moderf  rg  X_RESOLUTIONY_RESOLUTIONRESOLUTION_UNITr  READ_LIBTIFFr  r  r  r
  r   _Tiler  TILEOFFSETSROWSPERSTRIP	TILEWIDTH
TILELENGTHsum
ICCPROFILECOLORMAPr   r   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layerr  offsetsr  w	tilewidthr  stridetile_rawmoder   r  r  s!                                    ra   rq  TiffImageFile._setup  s    T[[ ?C#, -T[[__[!-LM%)[[__5I1%M"  :A> +EKKOOIq1	&'($*;*;<7?143M3MN'3.@P0QR	(KK
+EKK,E %%%Zs-C-C&CS/!,kkoohmm&?&?@,&DJDJ\499-d;}!c-&8C<N&SRS&S !MKKOOM48	kkoolB7IIaZIIS%%	y> KKOO""k1evoA1

 22LL@BS 8Cc""/ ""4#45I16F!6K "5Iy>..-Cc"" KK
 	%s+	*"+C.DJ 	%w/%tyy1#'#4#4		- {{|Q/{{|Q/Dkkooo6G!|$($<		% A$(4K#=		% $($<		%  +/*		,'*.*		,' A	 , J0A0AU0J   A~"1gns12w.-s3 '0n#
G 
%%/..!3
 F"!!!"233!#2,, ++UDKK4F4FGAIIY__YAu8LaQRSTT[[(K4;;,Ft{{*++l3KKOOL%8 ++k2 KKOOI6	KKOOJ/!)S11As9K9K3C$S/)Eza5jT-G-G1-L!"#,!q55=Y/!3FF&--2#*5>Li'F$c&k15		  OO))As1q5%0#a!eU2CD	 Q:a!eqAEz
7 ": LL:;-Cc"" $'+{{:'>DIIm$ 99#-1[[-BC-Br!s(|-BGC'++GSXXg5FGDL $[  	(&CC.a'	(P  	*LL/0&Cc")	*L Ds6   6&c c? d4
c<)c77c<?
d1	#d,,d1)__first__frame__nextr  r  rV  rW  rc  r  rX  r  r  re  r  r  rd  rn  r  rg  rJ  rR  r  r  rd   )r  StrOrBytesPath | IO[bytes]rO  zstr | bytes | Noner   r   r  r   )rh  r   r   r   )r   zdict[int, dict[str, bytes]])r   zImage.core.PixelAccess | None)r   r   r   r   formatformat_descriptionr  r   rZ  r   r_  r  rY  r  r  r  r  r  r  rq  r   rI  rJ  s   @ra   rL  rL    s    F%(-%
 (,'&' %' 
	' '2 	 	
/b*
/7"_&BoH oHrk   rL  r>   r?   rI   rV   rX   rD   rH   rA   I;16LrF   rG   rJ   rM   rK   rY   YCbCrr\   rC   c                    [         U R                     u  p4pVpxU R                  nU R
                  n[        US9nUR                  S5      (       a  SUl         US   nUc  SnOUS:X  a  S	nOUS
:X  a  Sn[        =(       d    US:g  nSU[        '   U R                  S   U[        '   U R                  S   U[         '   SU;   a  US   nOKSU;   aC  US   n[        U["        5      (       a(  [$        R&                  " 5       nUR)                  U5        UnO0 n[*        R-                  S[/        U5      5        [        U[0        5      (       a  UR3                  5       nU H|  n[        U[$        R&                  5      (       a)  U[4        R6                  ;   a  UR9                  U5      UU'   OUR                  U5      UU'    UR:                  U   UR:                  U'   M~     0 n[?        U S5      (       a  U R@                  R3                  5       n0 UE[C        U S0 5      En[D        [F        4 H  nUU;   d  M  UU	 M     [?        U S5      (       a  [H        [J        [L        [N        [P        [R        4 H  nUU RT                  ;   d  M  U[N        :X  a@  U RT                  R:                  U   [4        RV                  [4        RX                  4;  a  UU	 M_  U RT                  U   UU'   U RT                  R:                  U   UR:                  U'   M     UR                  SU R                  R                  S5      5      nU(       a	  UU[Z        '   [\        S4[J        S4[L        S4[J        S4[L        S4[H        S4[^        S4[`        S4[b        S4[d        S44
 H  u  nnUU;   d  M  UU   UU'   M     UR                  S5      nU(       a!  SU[H        '   US   U[J        '   US   U[L        '   US:w  a)  X}[f        '   [i        U5      S:w  a  [i        U5      U[j        '   Ub  X[l        '   US:w  a  Xm[F        '   [n        U;  a	  X][n        '   OU R                  S ;   a  U[n           S:X  a  U R                  S!:X  ar  U Rq                  5       nUR)                  5       nUbN  [s        URt                  5       H3  n[s        URv                  5       H  nUUU4   S":X  a  SOS"UUU4'   M     M5     Un O[x        Rz                  " U 5      n U R                  S#;   ax  U R|                  R                  S$S%5      n/ n[i        U5      S&-  n[s        S&5       H4  n UUUU -  UU S-   -    V!s/ s H  n!U!S'-  PM
     sn!-  nUS/S'U-
  -  -  nM6     UU[        '   U[           U[            n#n"[i        U5      U"US   -  S(-   S)-  -  n$[        U;  ac  U(       aI  UR                  S*[        5      n%U$S:X  a  SO[        U%U$-  U#5      n&US	:X  a  [        U&S(-   S)-  S)-  U#5      n&OU#n&U&S:X  a  Sn&U&U[        '   U$S:X  a  SOU$U[           -  n'U#U[           -   S-
  U[           -  n(U'S+:  a!  [4        R                  UR:                  [        '   U'4U(S-
  -  U$U#-  U'U(S-
  -  -
  4-   U[        '   [        [s        SU'U(-  U'5      5      U[        '   [        R                  US5      U[        '   U R                  S,:X  a8  [        S-[        S.0R                  5        H  u  nn)UR                  UU)5        M     [        [        [        [        /n*U(       Ga  S/U;   aO  US/   n+[        U+[        5      (       a  U+S:  d  U+S0:  a  S1n
[        U
5      eUS	:w  a  S2n
[        U
5      eU+U[        '   [*        R-                  S35        [*        R-                  S4[        UR                  5       5      5        Sn,[?        US55      (       a"   UR                  S5        UR                  5       n,0 n-U*[        [        [        [        [        [        /-  n*[f        US   0n.[        R                  " UR                  5       UR                  5       5       GHN  u  nn/U[4        R                  ;  a  U[4        R6                  ;   a  [4        R                  U-U'   OUUR:                  ;   a  UR:                  U   U-U'   O}[        U/[        [        [        ["        45      (       d,  [        U/[        5      (       aC  [        S6 U/ 5       5      (       a,  [4        R                  " U5      R                  n0U0(       a  U0U-U'   UU.;  d  M  UU*;  d  M  [        U/[        5      (       a  U/R                  S7S85      S9-   U.U'   GM#  [        U/[        5      (       a  [        U/5      U.U'   GMI  U/U.U'   GMQ     [F        U.;   a)  [i        U.[F           5      S:X  a  U.[F           S   U.[F        '   [*        R-                  S:[        U.R                  5       5      5        U R                  S;;   a  S<n[/        U.R                  5       5      n1U1R                  5         X>U,UU1U-4n2[$        R                  " U R                  S=U2U5      n3U3R                  U R|                  S>U R                  -   5         U3R                  [        R                  5      SS  u  n4n5U,(       d  UR                  U55        U4(       a  OMG  U4S:  a  S?U4 S@3n
[        U
5      eO]U* H  nUU	 M     UR                  U5      n6[        R                  " U U[        R                  " SS>U R                  -   U6UU$S45      /5        SAU;   a  [        U SAU5        g g ! [         a!  n	SU R                   S3n
[        U
5      U	eS n	A	ff = f! [         a6    U R                  R                  S5      n[        U[        5      (       a  S n GNpf = f! [<         a     G
M  f = fs  sn!f ! [        R                   a     GNf = f)BNzcannot write mode z as TIFFrh   big_tiffTr  r$   r.   r0   r6   r2   r   r   tiffinfor  zTiffinfo Keys: %srJ  rR  r  descriptionr  x_resolutiony_resolutionresolution_unitsoftware	date_timeartist	copyrightr  r%   r<   )r>   r?   r>   r    r  rJ   r  r'   r!   r/   r1   
strip_sizer   r  )r   r   )r   r       r    r  r    qualityd   zInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz	Items: %sr  c              3  X   #    U  H   n[        U[        [        [        45      v   M"     g 7frd   )r   r   ry   ro   rZ  s     ra   rb   _save.<locals>.<genexpr>  s!     TeJq3{*CDDes   (*rd  r   r  zConverted items: %s)rA   rC   r  r  r  rN   zencoder error z when writing image file_debug_multipage)q	SAVE_INFOrf  r  r  encoderinfoencoderconfigr   r  r!  rg  r   r   WRITE_LIBTIFFr  r   r  r  r  r   Exifr  r  r  r!  r)  r8  r   r  r  r#  r3  r   rJ  r   EXIFIFDr  r  r  r  IPTC_NAA_CHUNKPHOTOSHOP_CHUNKro  rR  rs  ri  r  IMAGEDESCRIPTIONSOFTWARE	DATE_TIMEARTIST	COPYRIGHTr  r^   r  r  r  copyr  heightwidthr   invertrd  
getpaletter  r  
STRIP_SIZEr   ro  STRIPBYTECOUNTSrf   r  COMPRESSION_INFO_REVr  r  REFERENCEBLACKWHITEr?  
setdefaultr  r  r  TILEBYTECOUNTSrv  JPEGQUALITYr  r  r  ioUnsupportedOperationOSUBFILETYPETRANSFERFUNCTIONSUBIFD	itertoolschainLIBTIFF_COREr&  ry   r   rj  r@  rh  rt  ro   sort_getencoderr  r   MAXBLOCKr  r  _saver  setattr)7rd  r  rO  r  ri   r  r  bitsextrar  r(  r  r  r  r  r  rg  r  r  
legacy_ifdsupplied_tagsrJ  iccr  r  inverted_impxr  r  lutcolormapcolorsr{   r[  r  r  r  im_strip_sizerows_per_stripstrip_byte_countsstrips_per_imagedefault_value	blocklistr  rV  typesattsr   rh  rF  r  encodererrcoder   r  s7                                                          ra   r.  r.    s!   "6?6H3
 ..K$$M
v
.Cz""!-0 		#		&*3{e3G !"CggajC
OwwqzC [ :&	;	6"dE""::<DIIdOD
LL$d4j1$-..zz|dEJJ''C83J3J,J||C(CHxx}CH	#||C0CKK  Jr5VV\\^
?z?WR2%>?M 		 -c" r8 
C bii.(RYY->->s-CMM&&L . &c*!yy~CH')yy'8'8'=CKK$!
( //-])C
DC
J 
=)	|$	|$	~&	~&	+,	:	K 		K 	T ;"4(CH //%
 C
 OFLFLt|!Mt9>#&t9C !L{"L!,*/&'	J	3'A#Ba#G77c>'')K!!#B~{112A";#4#45(*1a4C1S1a4 6 3 !$B	ww+eeug.SQqA#fqj6QU;K*LM*LQS*LMMHsV|,,H  !Hz?C,qAY1tAw;?q01F3'OOL*EM"(A+Q3}7NPQ3RNf$!$~'9a&?1%Da!HNQN*L#q[fs<7H.HC--1c,6GGE!'/}}O$-/3Ca3GH
&*:Q*>??L C a"%557HIC ,//Q?C	ww'f!=#
 %'#C NN3.	# J^DI#!),Ggs++w{gm/ o%f$M o%&C34[&"562x  
iik
  	
 	
	 !.tAw7 $//#))+}7J7J7LMJC
 (///(111!)E#JCKK'!$S!1E#JUC'?@@ue,,TeTTT#??3/44D%)c
$3i#7eS)) %Wi @5 HDI{33 %eDI %DI/ N2 4C\(:$;q$@!%l!3A!6D*F4::<,@A 7700G
 DJJL!		3$>##BGGY=I 01#NN9+=+=>qrBMGT  Q;"7)+CDC#, 
 CC "__UFRWW$4fwPQ>RST	
 [(&, )Y	  ""277)84cl!"  ggkk-0k3''K	T  		| Nt ** sS   m  n 8oo#	!o(  
n*nn<oo
o o (p ?p c                     \ rS rSr/ SQr1 SkrS"S#S jjrS$S jrS$S jrS$S jr	S%S jr
S&S	 jrS'S
 jr\R                  4S(S jjrS$S jrS)S jrS$S jrS*S jrS+S jrS,S jrS'S jrS'S jr\S-S j5       r S.       S/S jjrS0S jrS0S jrS0S jrS1S jrS0S jrS0S jr S$S jr!S$S jr"S2S jr# S3       S4S jjr$S r%g!)5AppendingTiffWriteri  )r   r   r   r%   r)   r1   r   r   r%   r)   r1   r)   r1   r)   r%   r)   r1   >   r    	  r"      r#   c                ^   U   [        U5      (       a(  Xl        SU l         [        X(       a  SOS5      U l        O#[        [        [           U5      U l        SU l        U R                  R                  5       U l
        U R                  5         g ! [
         a    [        US5      U l         NMf = f)NTzw+bzr+bF)r   r  close_fpopenr   r  r   r	   r  r  	beginningsetup)r   fnr  s      ra   r   AppendingTiffWriter.__init__  s    2;;I DM)b3%E: "U)R(DF!DM

  )b%)s   B B,+B,c                J   U R                   R                  U R                  [        R                  5        S U l        SU l        U R                   R                  S5      =U l        nSU;   U l	        U(       d  SU l
        g SU l
        U[        ;  a  Sn[        U5      eU R                  UR                  [        5      (       a  SOS5        U R                  (       a*  U R                   R                  S[        R                   5        U R#                  5         U R%                  5         g )	Nr   r)      +TFzInvalid TIFF file headerr  r  )r   r  rL  r  r  whereToWriteNewIFDOffsetoffsetOfNewPager  IIMMr!  isFirstrg   RuntimeError	setEndianre   r   r  skipIFDsgoToEnd)r   iimmr(  s      ra   rM  AppendingTiffWriter.setup  s    DNNBKK048% 66;;q>)	D4DLx,Cs##doob11ss;==FFKK2;;'rk   c                   U R                   (       a  g U R                  R                  U R                  5        U R                  R	                  S5      nU(       d  g XR
                  :w  a  Sn[        U5      eU R                  (       a*  U R                  R                  S[        R                  5        U R                  U R                  (       a  SOS5      nX0R                  -  nU R                  c   eU R                  R                  U R                  5        U R                  X0R                  (       a  SOS5        U R                  R                  U5        U R                  5         g )Nr)   z1IIMM of new page doesn't match IIMM of first pager1   )rU  r   r  rS  r  rT  rV  r!  r  r  _readrR  _writefixIFD)r   rZ  r(  
ifd_offsets       ra   finalizeAppendingTiffWriter.finalize  s    << 	D(()vv{{1~99ECs##==FFKK2;;'ZZT]]:
***
,,888D112J]]:Jrk   c                D    U R                  5         U R                  5         g rd   )ra  rM  r   s    ra   newFrameAppendingTiffWriter.newFrame5  s    

rk   c                    U $ rd   r=   r   s    ra   	__enter__AppendingTiffWriter.__enter__:  s    rk   c                H    U R                   (       a  U R                  5         g g rd   )rJ  r  )r   r   s     ra   __exit__AppendingTiffWriter.__exit__=  s    ==JJL rk   c                P    U R                   R                  5       U R                  -
  $ rd   )r   r  rS  r   s    ra   r  AppendingTiffWriter.tellA  s    vv{{}t3333rk   c                    U[         R                  :X  a  XR                  -  nU R                  R	                  X5        U R                  5       $ )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  rS  r   r  r  )r   r  whences      ra   r  AppendingTiffWriter.seekD  s:     R[[ ***FF#yy{rk   c                B   U R                   R                  S[        R                  5        U R                   R	                  5       nSUS-  -
  nSUs=:  a  S:  a'  O  O$U R                   R                  [        U5      5        U R                   R	                  5       U l        g )Nr   rB   )r   r  r  SEEK_ENDr  r  r  rS  )r   r  	pad_bytess      ra   rY  AppendingTiffWriter.goToEndQ  sj    Ar{{#ffkkm rM	y2FFLLy)*#vv{{}rk   c                    Xl         U R                    S3U l        U R                    S3U l        U R                    S3U R                  (       a  SOS-   U l        g )Nr?   r  r  r  )endianlongFmtshortFmtr!  	tagFormat)r   rv  s     ra   rW  AppendingTiffWriter.setEndian[  sJ    ++a(;;-q) KK=+dmmsMrk   c                    U R                  U R                  (       a  SOS5      nUS:X  a6  U R                  R                  5       U R                  (       a  SOS-
  U l        g U R                  R                  U5        U R                  U R                  (       a  SOS5      nU R                  R                  X R                  (       a  SOS-  [        R                  5        M  )Nr1   r)   r   r%   r  r@   )r]  r!  r   r  rR  r  r  r  )r   r`  num_tagss      ra   rX  AppendingTiffWriter.skipIFDsa  s    AA>JQ04AA1- FFKK
#zzt}}!!<HFFKK--BR@"++N rk   c               8    U R                   R                  U5      $ rd   )r   r  r  s     ra   r  AppendingTiffWriter.writen  s    vv||D!!rk   c                L     SSSS.U   $ ! [          a    Sn[        U5      ef = f)Nr  r?   r  )r%   r)   r1   zoffset is not supported)r  rV  )r   
field_sizer(  s      ra   _fmtAppendingTiffWriter._fmtq  s8    	$ss+J77 	$+Cs##	$s    #c                    [         R                  " U R                  U R                  U5      -   U R                  R                  U5      5      u  nU$ rd   )r  r  rv  r  r   r  )r   r  r   s      ra   r]  AppendingTiffWriter._readx  s=    ==KK$))J//Z1H
 rk   c                $    U R                  S5      $ Nr%   r]  r   s    ra   	readShortAppendingTiffWriter.readShort~      zz!}rk   c                $    U R                  S5      $ Nr)   r  r   s    ra   readLongAppendingTiffWriter.readLong  r  rk   c                <    U b  X:w  a  SU  SU 3n[        U5      eg g )Nzwrote only z bytes but wanted )rV  )bytes_writtenexpectedr(  s      ra   _verify_bytes_written)AppendingTiffWriter._verify_bytes_written  s4    $)B.@
KCs## *C$rk   c                &   U R                   R                  U* [        R                  5        U(       d  UnU R                   R	                  [
        R                  " U R                  U R                  U5      -   U5      5      nU R                  XC5        g rd   )
r   r  r  r  r  r  r  rv  r  r  )r   r   r  new_field_sizer  s        ra   _rewriteLast AppendingTiffWriter._rewriteLast  sf     	ZK-'NKKdii&??G
 	""=Ark   c                *    U R                  USS5        g )Nr%   r)   r  r  s     ra   rewriteLastShortToLong*AppendingTiffWriter.rewriteLastShortToLong  s    %A&rk   c                &    U R                  US5      $ r  r  r  s     ra   rewriteLastShort$AppendingTiffWriter.rewriteLastShort        **rk   c                &    U R                  US5      $ r  r  r  s     ra   rewriteLastLong#AppendingTiffWriter.rewriteLastLong  r  rk   c                    U R                   R                  [        R                  " U R                  U R                  U5      -   U5      5      nU R                  X25        g rd   )r   r  r  r  rv  r  r  )r   r   r  r  s       ra   r^  AppendingTiffWriter._write  sD    KKdii
&;;UC
 	""==rk   c                (    U R                  US5        g r  r^  r  s     ra   
writeShortAppendingTiffWriter.writeShort      E1rk   c                (    U R                  US5        g r  r  r  s     ra   	writeLongAppendingTiffWriter.writeLong  r  rk   c                |    U R                  5         U R                  (       a  U R                  R                  5         g g rd   )ra  rJ  r   r  r   s    ra   r  AppendingTiffWriter.close  s$    ==FFLLN rk   c           
     2   U R                  U R                  (       a  SOS5      n[        U5       GH  n[        R                  " U R
                  U R                  R                  U R                  (       a  SOS5      5      u  p4nU R                  U   nXe-  nU R                  (       a  SOSnXx:*  n	U	(       d/  U R                  U5      U R                  -   n
U R                  X5        X0R                  ;   a  U R                  R                  5       n[        R                  S[        R                   " U5      R"                  U[$        R&                  " US5      UUU5        U	(       a1  U R)                  XV5        U R                  R+                  X-   5        GMe  U R                  R+                  W
5        U R)                  XV5        U R                  R+                  U5        GM  U	(       d  GM  U R                  R+                  U[,        R.                  5        GM     g )Nr1   r%   r@   r)   z;fixIFD: %s (%d) - type: %s (%d) - type size: %d - count: %dr  )r]  r!  r  r  r  ry  r   r  
fieldSizesrS  r  Tagsr  r  r  r   r@  r  r   r  _fixOffsetsr  r  r  )r   r|  r{   rJ  
field_typer  r  
total_sizer  is_localr  cur_poss               ra   r_  AppendingTiffWriter.fixIFD  sr   ::4==aa8xA%+]]$--BQ G&"CU 4J#+J MMqqH!-HH-0D0DD!!&3ii&&++-QOOC(--IIj)4 $$U7FFKK 23FFKK'$$U7FFKK(Hbkk2I !rk   c                *   [        U5       GH  nU R                  U5      nX@R                  -  nSnU R                  (       a  US;   a	  US:  a  SnOUS:X  a  US:  a  SnU(       a  US:w  a  S	n[	        U5      eU R                  XBU5        U* S-
  S-
  nU R                  R                  U[        R                  5        U R                  U5        U R                  R                  SU-
  [        R                  5        M  U R                  XB5        GM     g )
Nr   )r%   r)   l        r1   r%   r   r)   r   znot implemented)r  r]  rS  r!  rV  r  r   r  r  r  r  )r   r  r  r{   r  r  r(  rewinds           ra   r  AppendingTiffWriter._fixOffsets  s    uAZZ
+F***FN}}v!5&E/!"qVu_!"A:+C&s++ !!&nE(1,q0FBKK0/AJ4!!&53 rk   c                P    U(       a  SnOU(       a  SnOSnU R                  X5      $ )Nr%   r)   r   )r  )r   r  isShortisLongr  s        ra   
fixOffsetsAppendingTiffWriter.fixOffsets  s*     JJJ22rk   )rT  r!  rL  rJ  rv  r   rU  rw  r  rS  rx  ry  rR  N)F)rN  r  r  r   r   r   r  )r   rE  )r   r   r   r   r   )r  r   ro  r   r   r   )rv  r   r   r   )r   r   r   r   )r  r   r   r   )r  r   r   r   )r  r  r  r   r   r   rL   )r   r   r  r   r  r   r   r   )r   r   r   r   )r   r   r  r   r   r   )r  r   r  r   r   r   )FF)r  r   r  r   r  r   r   r   )&r   r   r   r   r  r  r   rM  ra  rd  rg  rj  r  r#  r  r  rY  rW  rX  r  r  r]  r  r  staticmethodr  r  r  r  r  r^  r  r  r  r_  r  r  r   r=   rk   ra   rE  rE    s   J(D44
4 /1kk -NO"$ $ $ BC	B	B&)	B;>	B		B'++>
'3R6: AF	3	3#'	39=	3		3 	3rk   rE  c                   [        U R                  R                  S/ 5      5      n[        U S5      (       d  U(       d  [	        XU5      $ U R                  5       n [        U5       nU /U-    H  nUR                  U 5      n[        US5      (       d  SUl        [        USS5      n[        U5       H@  n	UR                  U	5        UR                  5         [	        XeU5        UR                  5         MB     Xvl        M     S S S 5        U R                  U5        g ! , (       d  f       N = f! U R                  U5        f = f)Nappend_imagesr_  r  r=   r   )r!  r  r  r   r.  r  rE  _attach_default_encoderinfor  r   r  r  r  rd  )
rd  r  rO  r  cur_idxtfimsr  nfrr   s
             ra   	_save_allr   	  s    ++OR@AM2z""=RX&&ggiG $tm+!==bAsO44(*C%c:q1 :CHHSMHHJ#8,KKM	 &
 #. , % 	 %$ 	s%   D* &BD?D* 
D'#D* *D=z.tifz.tiffz
image/tiff)ri   r  r   r   )rq   r   rr   r   r   !tuple[IntegralLike, IntegralLike])rq   ro   rr   r   r   r   r   r  )r   r   r   r
   )r   r   r   r   r   z$Callable[[_LoaderFunc], _LoaderFunc])r   r   r   z2Callable[[Callable[..., Any]], Callable[..., Any]])r  ztuple[int, str, str]r   r   )rd  zImage.Imager  r  rO  zstr | bytesr   r   )
__future__r   r#  r(  loggingry  r  r  rw  collections.abcr   r   	fractionsr   numbersr   r   typingr	   r
   r    r   r   r   r   r   r   _binaryr   rx  r   r{  r   _utilr   r   r   r   r   r   _typingr   r   r   	getLoggerr   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  	PREDICTORr  r  r  r  r!  r'  r  r  
JPEGTABLESr  r  r  r  r  r  r  ro  r"  IMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATAr  r?  r  r  r   r  rg   rj   ru   r   r   r   r   ro   r  r   r   r   r   r  r   
_IFDv2Baser   r   r  r   r/  r)  ImageFileDirectoryrL  r
  r.  BytesIOrE  r  register_openr  register_saveregister_save_allregister_extensionsregister_mime)kr[  s   00ra   <module>r     s0  R # 	    	   4  $     J J ! !  ) (==			8	$ 


 
  	   				
	
  	

	  %  u | x	
 x z { v  
= 
: 
 
> 
= 
?  
6!" 
6#$ 
6% * *:)?)?)AB)A)AB } D!T2} D!T2	}
 D!T2} D!T2} D!T2
} D!T2
} D!T2} D!T2} D!T2} D!T2} D!T2} D!T2} D!T2}  D!T2!}" D!T2#}$ D!T2%}& D!T2'}( D!T2)}* D!T2+}, D!T2-}. D!T2/}0 D!T21}2 D!T23}4 D!T25}6 D!T27}8 D!T29}: D!T2;}< D!T2=}> D!T2
?}@ D!T2
A}B D!T2
C}D D!T2
E}F D!T2G}H D!T2I}J D!UB!1K}L D!UB!1M}N D!UB!1O}P D!UB!3Q}R D!UB!2S}T D!UBU}V D!UBW}X D!UBY}Z D!UB[}\ D!UB]}^ D!UB_}` D!UBa}b D!UBc}d D!UBe}f D!VT"Lg}h D!VT"Li}j D!Y#^k}l D!Y#^m}n D!Y#%5o}p D!Y#%5q}r D!\2&(8s}t D!\2&(8u}v D!\4(/w}x D!\4(/y}z D!_f-/?{}| D!_f-/?}}~ D!'35F}@ D!'35FA}B D!\4(*:C}D D!\4(*:E}F D!_f-/@G}H D!_f-/@I}J D!'35GK}L D!'35GM}N D!\4(*:O}P D!\4(*:Q}R D!_f-/@S}T D!_f-/@U}V D!'35GW}X D!'35GY}Z D!\6*,<[}\ D!\6*,<]}^ D!\2&(:_}` D!\2&(:a}b D!%r*,@c}d D!%r*,@e}f D!%t,.Ag}h D!%t,.Ai}j D!%t,.Bk}l D!%t,.Bm}n D!%t,.Bo}p D!%t,.Bq}r D!T2s}t D!T2u}v D!T2w}x D!T2y}z D!T2{}| D!T2}}~ D!T2}@ D!T2A}B D!T2C}D D!T2E}F D!T2G}H D!T2I}J D!T2
K}L D!T2
M}N D!VT"KO}P D!VT"KQ}R D!VT"LS}T D!VT"LU}V D!T2W}X D!T2Y}Z D!\2&(8[}\ D!\2&(8]}^ D!_d+->_}` D!_d+->a}b D!'02Dc}d D!'02De}f D!%r*,@g}h D!%r*,@i}j D!T2
k}l D!T2
m}r D!Y#_s}t D!Y#_u}v D!Y#^w}x D!Y#^y}	~ AyAA .%	'%25%&%	"-0&& G'( G'T /=sBC	$ S)JJP$J P$f (6  $(7  %IC<<S!D!U4&>>#3Fq3IJ!VD6?OC4HI  OS$X1 Xx + yHI'' yHF #r1at	$ #r1at	$	
 	4Q61
% #r1at	$ 	4Q61
% '2q!UD	) VRAud+ gr1a- '2q!UD	) 
E2q!Y- VRA|Q/ VRA|Q/ VRA|T2  gr1aD1!" 
E2q!Y-#$ gr1a-%	,q-h	i3"** i3X	8   M((- A   M((% 0   ,,i 8   -..0A B   M((, 7[D Cs   _.