
    NYhf-             #         d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZ d dlmZmZ d dlmZmZmZ ddlmZmZmZmZmZmZ dd	lmZ dd
lmZ ddlm Z  ddlm!Z!  ejD                  e#      Z$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8d Z9d!Z:d"Z;d#Z<d$Z=d%Z>d&Z?d'Z@d(ZAd)ZBd*ZCd+ZDd,ZEd-ZFd.ZGd/ZHd0ZId1ZJd2ZKd3ZLd4ZMd5ZNd6ZOd7ZPd8ZQd9ZRd:ZSi dd;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[ZTeTj                         D  ci c]  \  } }|| 
 c}} ZVi e)d d\dd\d]fd^e*d d\dd\d]fd^e)d d\d<d\d]fd_e*d d\d<d\d]fd_e)dd\dd\d]fd`e*dd\dd\d]fd`e)dd\d<d\d]fdae*dd\d<d\d]fdae)d d\ddbd]fdce*d d\ddbd]fdce)d d\d<dbd]fdde*d d\d<dbd]fdde)dd\ddbd]fdee*dd\ddbd]fdee)dd\d<dbd]fdfe*dd\d<dbd]fdfe)d d\ddgd]fdhi e*d d\ddgd]fdhe)d d\d<dgd]fdie*d d\d<dgd]fdie)dd\ddgd]fdje*dd\ddgd]fdje)dd\d<dgd]fdke*dd\d<dgd]fdke)d d\ddld]fdme*d d\ddld]fdme)d d\d<dld]fdne*d d\d<dld]fdne)dd\ddld]fdoe*dd\ddld]fdoe)ddbddld]fdoe*ddbddld]fdoe)dd\d<dld]fdpe*dd\d<dld]fdpi e)dd\ddqd]fdre)d d\ddsd]fdte)dd\ddsd]fdte*dd\ddsd]fdue)dd\d<dsd]fdve)ddbddsd]fdwe*ddbddsd]fdxe)d dyddzd]fd{e*d dyddzd]fd|e)dd\ddzd]fd}e)ddbddzd]fd~e*ddbddzd]fde)ddyddzd]fd{e*ddyddzd]fd|e)dd\dddbfde*dd\dddbfde)d<d\ddd]fdi e*d<d\ddd]fde)d<d\d<dd]fde*d<d\d<dd]fde)d<d\ddd]fde*d<d\ddd]fde)d<d\dddfde*d<d\dddfde)d<d\dddfde*d<d\dddfde)d<d\dddfde*d<d\dddfde)d<d\ddd\fde*d<d\ddd\fde)d<d\dddfde*d<d\dddfde)d<d\dddfde*d<d\dddfdi e)d<d\dddbfde*d<d\dddbfde)d<d\dddfde*d<d\dddfde)d<d\dddfde*d<d\dddfde)d<d\dddfde*d<d\dddfde)d<d\ddd]fde*d<d\ddd]fde)d<d\ddd]fde*d<d\ddd]fde)d<d\dddfde*d<d\dddfde)d<d\ddd\fde*d<d\ddd\fde)d<d\dddbfdi e*d<d\dddbfde)d>d\dd\d]fde*d>d\dd\d]fde)d>d\d<d\d]fde*d>d\d<d\d]fde)d>d\ddbd]fde*d>d\ddbd]fde)d>d\d<dbd]fde*d>d\d<dbd]fde)d>d\ddgd]fde*d>d\ddgd]fde)d>d\d<dgd]fde*d>d\d<dgd]fde)d>d\ddld]fde*d>d\ddld]fde)d>d\dddbfde*d>d\dddbfde)d>d\d<dld]fde*d>d\d<dld]fde)dBd\ddd]fde*dBd\ddd]fde)dBd\dddfde*dBd\dddfde)dBd\dddfde*dBd\dddfde)dBd\ddd]fde)dDd\ddld]fdoe*dDd\ddld]fdoe)dDd\ddd]fde*dDd\ddd]fde)dHd\ddd]fde*dHd\ddd]fdiZW eXd eWD              ZYg dZZd Z[d Z\d Z]i Z^i Z_d Z` G d de      Zad Zbd Zcd Zdere
eeef   Zfne
Zf G d def      Zge^eg_^        e_eg__         e!j                         D ]:  \  ZhZieij                  dd      Zi ekegdeiz   e^eh   d           ekegdeiz   e_eh          < [^[_[h[i G dÄ deg      ZlelZm G dń dej.                        Zni dde)ddd\dfdde)dddldfdde)dddd<fdde)d>ddldfdde)d>ddd<fdde)dd<dzdfdde)dddsdfdde)dd<dsdfdde)dd>dzdfdde)d<dddfdde)d<ddd fdde)d<ddd<fdde)dBdddfdde)dDdddfdde)dHdddfdde*dd<dzdfdde*dddsdfde*dd<dsdfde*dd>dzdfdܜZod݄ Zp G dބ d߫      Zqd Zr ej                  enj                  ene[        ej                  enj                  ep        ej                  enj                  er        ej                  enj                  ddg        ej                  enj                  d       yc c}} w )    )annotationsN)MutableMapping)Fraction)NumberRational)TYPE_CHECKINGAnyCallable   )ExifTagsImage	ImageFileImageOpsImagePaletteTiffTags)i16be)i32be)o8TYPESFT   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)r6   z1;IR)r6   r6   )r6   z1;R)r   )LzL;2I)r7   zL;2IR)r7   zL;2)r7   zL;2R)r!   )r7   zL;4I)r7   zL;4IR)r7   zL;4)r7   zL;4R)r)   )r7   zL;I)r7   zL;IR)r7   r7   )r7   zL;R)   )I;16zI;12)   )r9   r9   )I;16Br;   )r9   zI;16R)II;16S)r<   I;16BS)r   )    )FF;32F)r@   F;32BF)r<   zI;32N)r<   I;32S)r<   I;32BS)r)   r)   )LArE   )r)   r)   r)   )RGBrF   )rF   zRGB;R)r)   r)   r)   r)   )RGBArG   r   )RGBXrI   )r)   r)   r)   r)   r)   r   r   )rI   RGBXX)r)   r)   r)   r)   r)   r)   )r   r   r   )rI   RGBXXX)rG   RGBa)r   r   )rG   RGBaX)r   r   r   )rG   RGBaXX)r   r   )rG   RGBAX)r   r   r   )rG   RGBAXX)i  )r:   r:   r:   )rF   zRGB;16L)rF   zRGB;16B)r:   r:   r:   r:   )rG   zRGBA;16L)rG   zRGBA;16B)rI   zRGBX;16L)rI   zRGBX;16B)rG   zRGBa;16L)rG   zRGBa;16B)PzP;1)rR   zP;1R)rR   zP;2)rR   zP;2R)rR   zP;4)rR   zP;4R)rR   rR   )PArS   )rR   zP;R)CMYKrT   )rT   CMYKX)rT   CMYKXX)rT   zCMYK;16L)rF   rI   )LABrW   c              #  8   K   | ]  }t        |d            yw)r!   N)len).0key_tps     R/var/www/feuerwehr-webapp/venv/lib/python3.12/site-packages/PIL/TiffImagePlugin.py	<genexpr>r]     s     AV#fQi.As   )   MM *   II* s   MM* s   II *s   MM +s   II+ c                    | d d t         v S Nr!   )PREFIXESprefixs    r\   _acceptre     s    "1:!!    c                x    t        |       dkD  }t        |rd| z  n|       j                  |      }|r|d d d   S |S )Nr   )absIFDRationallimit_rational)valmax_valinvn_ds       r\   _limit_rationalrp     sA    
c(Q,C
a#g#
.
=
=g
FC3tt9$$rf   c                    t        |       }|j                  |j                  f}t        |      |k  rt	        | t        |            }t        |      |kD  rt        | } t	        | |      }|S N)r   	numeratordenominatorminrp   ri   max)rl   rm   min_valfracro   s        r\   _limit_signed_rationalry   "  sa    C=D
..$**
*C
3x'c3w<0
3x'nc7+Jrf   c                      fd}|S )Nc                6     t        | j                        | S rr   )getattr_val)selfargsops     r\   delegatez_delegate.<locals>.delegate8  s    %wtyy"%t,,rf   r5   )r   r   s   ` r\   	_delegater   7  s    - Orf   c                  (   e Zd ZdZ	 dZd(dZed        Zed        Zd Z	d Z
d Zd	 Zd
 Zd Z	  ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z  ed      Z! ed      Z" ed      Z# ed       Z$ ed!      Z% ed"      Z& ed#      Z' ed$      Z( ed%      Z) e*e+d&      r	 ed&      Z,y'y'))rj   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                   t        |t              r4|j                  | _        |j                  | _        |j                  | _        yt        |t              r#|j                  | _        |j                  | _        n|| _        || _        |dk(  rt        d      | _        y|dk(  rt        |      | _        yt        ||      | _        y)z
        :param value: either an integer numerator, a
        float/rational/other number, or an IFDRational
        :param denominator: Optional integer denominator
        Nr   nanr   )	
isinstancerj   rs   r   rt   r   r}   r   float)r~   valuert   s      r\   __init__zIFDRational.__init__L  s     e[)#ooDO % 1 1D

DIeX&#ooDO % 1 1D#DO +D!eDIA DI 4DIrf   c                    | j                   S rr   )r   r~   s    r\   rs   zIFDRational.numeratorf  s    rf   c                    | j                   S rr   )r   r   s    r\   rt   zIFDRational.denominatorj  s       rf   c                    | j                   dk(  r| j                  | j                   fS | j                  j                  |      }|j                  |j                   fS )z

        :param max_denominator: Integer, the maximum denominator value
        :returns: Tuple of (numerator, denominator)
        r   )rt   rs   r}   limit_denominator)r~   max_denominatorfs      r\   rk   zIFDRational.limit_rationaln  sN     q >>4#3#333II''8{{AMM))rf   c                >    t        t        | j                              S rr   )strr   r}   r   s    r\   __repr__zIFDRational.__repr__{  s    5#$$rf   c                6    | j                   j                         S rr   )r}   __hash__r   s    r\   r   zIFDRational.__hash__~  s    yy!!##rf   c                    | j                   }t        |t              r|j                   }t        |t              rt        |      }||k(  S rr   )r}   r   rj   r   )r~   otherrl   s      r\   __eq__zIFDRational.__eq__  s;    iie[)JJEeU#*Ce|rf   c                H    | j                   | j                  | j                  gS rr   )r}   r   r   r   s    r\   __getstate__zIFDRational.__getstate__  s    		4??D,=,=>>rf   c                f    t         j                  | d       |\  }}}|| _        || _        || _        y )Nr   )rj   r   r}   r   r   )r~   stater}   r   r   s        r\   __setstate__zIFDRational.__setstate__  s4    T1%).&j,	$(rf   __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__Nr4   )-__name__
__module____qualname____doc__	__slots__r   propertyrs   rt   rk   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   r5   rf   r\   rj   rj   >  s   
 7I54   ! !*%$?) 	"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& $rf   rj   c                      fd}|S )Nc                    ddl m} | j                  j                  d      r"| j                  dd  j	                  dd      |<   | ft
        <   | S )Nr   r   load_r#   _ )r   r   r   
startswithreplace_load_dispatch)funcr   idxsizes     r\   	decoratorz#_register_loader.<locals>.decorator  sL    #==##G,qr*223<E#J"Djsrf   r5   )r   r   r   s   `` r\   _register_loaderr     s     rf   c                      fd}|S )Nc                    | t         <   | S rr   )_write_dispatch)r   r   s    r\   r   z#_register_writer.<locals>.decorator  s    #rf   r5   )r   r   s   ` r\   _register_writerr     s     rf   c                    ddl m} | \  }}|||<   t        j                  dz         dfd	ft        |<   fdt
        |<   y )Nr   r   =c                H    | j                  t        |      z    |      S rr   )_unpackrY   )r~   data
legacy_apifmtr   s      r\   <lambda>z!_register_basic.<locals>.<lambda>  s)    LLCI-.se4d; rf   c                <     dj                   fd|D              S )Nrf   c              3  B   K   | ]  }j                  |        y wrr   )_pack)rZ   r   r   r~   s     r\   r]   z4_register_basic.<locals>.<lambda>.<locals>.<genexpr>  s     <EC'<s   join)r~   valuesr   s   ` r\   r   z!_register_basic.<locals>.<lambda>  s    <V<< rf   T)r   r   structcalcsizer   r   )idx_fmt_namer   r   namer   r   s       @@r\   _register_basicr     sL    !NCdE#J??39%D	
N3OCrf   c                  6   e Zd ZU dZi Zded<   i Zded<   d<dZ ed       Z	 ed	       Z
ed
        Zej                  d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z e eeej:                  ddfej<                  ddfej>                  ddfej@                  ddfejB                  d d!fejD                  d"d#fejF                  d$d%fejH                  ddfejJ                  d&d'fg	              e&d(d(      d=d)       Z' e(d(      d*        Z) e&d+d(      d=d,       Z* e(d+      d-        Z+ e&d.d/      d=d0       Z, e(d.      d1        Z- e&d2d(      d=d3       Z. e(d2      d4        Z/ e&d5d/      d=d6       Z0 e(d5      d7        Z1d8 Z2d9 Z3d>d:Z4d; Z5y)?ImageFileDirectory_v2a  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, Callable[[ImageFileDirectory_v2, bytes, bool], Any]]r   zdict[int, Callable[..., Any]]r   Nc                   t        |      sdt        |       d}t        |      ||n|dd | _        | j                  t        k(  rd| _        n(| j                  t        k(  rd| _        nd}t        |      |d   dk(  | _        || _        i | _	        	 | j                          | j                  r| j                  d	|d
d       n| j                  d|dd       \  | _        d| _        y)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+   Qr)   r7   r!   F)re   reprSyntaxError_prefixMM_endianII_bigtiffgrouptagtyperesetr   next_legacy_api)r~   ifhrd   r   msgs        r\   r   zImageFileDirectory_v2.__init__%  s     s|,T#YK{CCc""!'!3vRa<<2DL\\RDL"Cc""A"
'

*.--DLLc!"g&T\\#sSTSUw=W 	 !rf   c                    | j                   S rr   )r   r   s    r\   r   zImageFileDirectory_v2.<lambda>E  
    4<< rf   c                    | j                   S rr   )_offsetr   s    r\   r   zImageFileDirectory_v2.<lambda>F  r   rf   c                    | j                   S rr   )r   r   s    r\   r   z ImageFileDirectory_v2.legacy_apiH  s    rf   c                    d}t        |      )Nz"Not allowing setting of legacy api)	Exception)r~   r   r   s      r\   r   z ImageFileDirectory_v2.legacy_apiL  s    2nrf   c                X    i | _         i | _        i | _        i | _        d | _        d | _        y rr   )_tags_v1_tags_v2_tagdatar   _nextr   r   s    r\   r   zImageFileDirectory_v2.resetQ  s,    
rf   c                *    t        t        |             S rr   )r   dictr   s    r\   __str__zImageFileDirectory_v2.__str__Y  s    4:rf   c                    | j                         D ci c]0  \  }}t        j                  || j                        j                  |2 c}}S c c}}w )z
        :returns: dict of name|key: value

        Returns the complete tag dictionary, with named tags where possible.
        )itemsr   lookupr   r   )r~   coder   s      r\   namedzImageFileDirectory_v2.named\  sH      $zz|
e OOD$**-22E9
 	
 
s   5Ac                j    t        t        | j                        t        | j                        z        S rr   )rY   setr  r  r   s    r\   __len__zImageFileDirectory_v2.__len__g  $    3t}}%DMM(::;;rf   c                   || j                   vrG| j                  |   }| j                  |   }| j                  |   \  }} || || j                        | |<   | j                   |   }| j                  rt        |t        t        f      s|f}|S rr   )r  r  r   r   r   r   tuplebytes)r~   tagr   typr   handlerrl   s          r\   __getitem__z!ImageFileDirectory_v2.__getitem__j  s    dmm#==%D,,s#C //4MD'dDOO<DImmC ??:cE5>#B&C
rf   c                >    || j                   v xs || j                  v S rr   )r  r  r~   r  s     r\   __contains__z"ImageFileDirectory_v2.__contains__u      dmm#;sdmm';;rf   c                >    | j                  ||| j                         y rr   )_setitemr   )r~   r  r   s      r\   __setitem__z!ImageFileDirectory_v2.__setitem__x  s    c5$//2rf   c           	       	 t         t        t        f}t        j                  || j
                        	t        ||      r|gn|}|| j                  vr؉	j                  r	j                  | j                  |<   nt        j                  | j                  |<   t        d |D              rAt        d |D              rt        j                  nt        j                  | j                  |<   nAt        d |D              rt        d |D              rt        j                  | j                  |<   nt        d |D              rt        j                  | j                  |<   nt        d |D              rt        j                  nt        j                   | j                  |<   nt        d |D              rt        j"                  | j                  |<   n_t        d |D              rt        j$                  | j                  |<   n/t        d	 |D              rt        j&                  | j                  |<   | j                  |   t        j                  k(  r2|D cg c]&  }t        |t              r|j)                  d
d      n|( }}nJ| j                  |   t        j                  k(  r*|D cg c]  }t        |t*              rt-        |      n|! }}| j                  |   t        j                  k(  xr t        |t.              }|st1        	fd|D              }|r| j2                  n| j4                  }|s	j6                  dk(  s<| j                  |   t        j&                  k(  s	j6                  Mt9        |      dk(  r?|s=|r2| j                  |   t        j                  t        j                  fv r|f}	 |\  ||<   y |||<   y c c}w c c}w # t:        $ r0 t=        j>                  d| dt9        |       d       |d   ||<   Y y w xY w)Nc              3  <   K   | ]  }t        |t                y wrr   )r   rj   rZ   vs     r\   r]   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     Baz![1B   c              3  &   K   | ]	  }|d k\    ywr   Nr5   r$  s     r\   r]   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     6!qAv6   c              3  <   K   | ]  }t        |t                y wrr   )r   intr$  s     r\   r]   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>       <As+<r&  c              3  <   K   | ]  }d |cxk  xr dk  nc   yw)r   r   Nr5   r$  s     r\   r]   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     :a1>E>>:r&  c              3  <   K   | ]  }d |cxk  xr dk  nc   yw)i i   Nr5   r$  s     r\   r]   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     BaX1E11Br&  c              3  &   K   | ]	  }|d k\    ywr(  r5   r$  s     r\   r]   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     ":a16":r)  c              3  <   K   | ]  }t        |t                y wrr   )r   r   r$  s     r\   r]   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>       >!Au->r&  c              3  <   K   | ]  }t        |t                y wrr   )r   r   r$  s     r\   r]   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  r,  r&  c              3  <   K   | ]  }t        |t                y wrr   )r   r  r$  s     r\   r]   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  r1  r&  asciir   c              3  @   K   | ]  }j                  |        y wrr   )cvt_enum)rZ   r   infos     r\   r]   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     DE4==/Ds   r   zMetadata Warning, tag z had too many entries: z, expected 1r   ) r   r  r   r   r  r   r   r   type	UNDEFINEDallRATIONALSIGNED_RATIONALSHORTSIGNED_SHORTLONGSIGNED_LONGDOUBLEASCIIBYTEencoder+  r   r	  r  r  r  lengthrY   
ValueErrorwarningswarn)
r~   r  r   r   	basetypesr   r%  is_ifddestr7  s
            @r\   r   zImageFileDirectory_v2._setitem{  sE   UC(	sDJJ/&ui8%edll"yy$(IIS!$,$6$6S!B6BB 6v66 !))%55 LL%
 <V<<:6::,4NNS)B6BB,4,A,AS)  #":6":: %MM!)!5!5 S)
 >v>>(0DLL%<V<<(0DLL%>v>>(0DLL%<< 2 22   1;1c0B),IF  \\#("3"33EKL*Q"4eAh!;LFLc"hmm3P
648PDVDDF *t}} [[A||C HMM1#Fq(8 dll3/!!((4  !&%c DIU
 M4  &,SE1H6{m<1 #1IS	&s   +N9!$N>+O 6O<;O<c                    | j                   j                  |d        | j                  j                  |d        | j                  j                  |d        y rr   )r  popr  r  r  s     r\   __delitem__z!ImageFileDirectory_v2.__delitem__  s>    #t$#t$#t$rf   c                j    t        t        | j                        t        | j                        z        S rr   )iterr  r  r  r   s    r\   __iter__zImageFileDirectory_v2.__iter__  $    C&T]]);;<<rf   c                H    t        j                  | j                  |z   |      S rr   )r   unpackr   )r~   r   r   s      r\   r   zImageFileDirectory_v2._unpack  s    }}T\\C/66rf   c                H    t        j                  | j                  |z   g| S rr   )r   packr   )r~   r   r   s      r\   r   zImageFileDirectory_v2._pack  s    {{4<<#-777rf   Hshortr7   longbzsigned bytehzsigned shortlzsigned longr   r   ddoubler   long8r   c                    |S rr   r5   r~   r   r   s      r\   	load_bytezImageFileDirectory_v2.load_byte      rf   c                t    t        |t              rt        |      }t        |t              rt        |f      }|S rr   )r   rj   r+  r  r~   r   s     r\   
write_bytez ImageFileDirectory_v2.write_byte  s/    dK(t9DdC $>Drf   r   c                R    |j                  d      r|d d }|j                  dd      S )N    rh   zlatin-1r   )endswithdecodera  s      r\   load_stringz!ImageFileDirectory_v2.load_string  s*    ==9D{{9i00rf   c                    t        |t              rt        |      }t        |t              s|j	                  dd      }|dz   S )Nr4  r   rh  )r   r+  r   r  rD  r~   r   s     r\   write_stringz"ImageFileDirectory_v2.write_string  s;     eS!JE%'LL)4Eu}rf   r#   r)   c           
         | j                  t        |      dz   d|      }fdt        fdt        |d d d   |dd d         D              S )Nr!   r7   c                (    r| |fS t        | |      S rr   rj   arZ  r   s     r\   combinez4ImageFileDirectory_v2.load_rational.<locals>.combine	      'Aq6>[A->>rf   c              3  6   K   | ]  \  }} ||        y wrr   r5   rZ   numdenomrt  s      r\   r]   z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>       VZS%WS%(V   r   r   r   rY   r  zipr~   r   r   valsrt  s     ` @r\   load_rationalz#ImageFileDirectory_v2.load_rational  U    ||s4yA~.a0$7	? V3tCaCy$qtRSt*;UVVVrf   c                8     dj                   fd|D              S )Nrf   c              3  X   K   | ]!  } j                   d gt        |d        # yw)2Ll    N)r   rp   rZ   rx   r~   s     r\   r]   z7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>  s-      
DHJDJJt?odI>?
s   '*r   r~   r   s   ` r\   write_rationalz$ImageFileDirectory_v2.write_rational  s!    xx 
LR
 
 	
rf   r'   c                    |S rr   r5   ra  s      r\   load_undefinedz$ImageFileDirectory_v2.load_undefined  rc  rf   c                    t        |t              rt        |      }t        |t              rt        |      j	                  dd      }|S )Nr4  r   )r   rj   r+  r   rD  rm  s     r\   write_undefinedz%ImageFileDirectory_v2.write_undefined  s:    e[)JEeS!J%%gy9Erf   
   c           
         | j                  t        |      dz   d|      }fdt        fdt        |d d d   |dd d         D              S )Nr!   r\  c                (    r| |fS t        | |      S rr   rq  rr  s     r\   rt  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combine$  ru  rf   c              3  6   K   | ]  \  }} ||        y wrr   r5   rw  s      r\   r]   z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>'  rz  r{  r   r   r|  r~  s     ` @r\   load_signed_rationalz*ImageFileDirectory_v2.load_signed_rational   r  rf   c                8     dj                   fd|D              S )Nrf   c           	   3  Z   K   | ]"  } j                   d gt        |dd        $ yw)2lii   N)r   ry   r  s     r\   r]   z>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>+  s3      
 DJJtP4T9hOP
s   (+r   r  s   ` r\   write_signed_rationalz+ImageFileDirectory_v2.write_signed_rational)  s!    xx 

 
 	
rf   c                ~    |j                  |      }t        |      |k7  rd| dt        |       d}t        |      |S )Nz&Corrupt EXIF data.  Expecting to read  bytes but only got z. )readrY   OSError)r~   fpr   retr   s        r\   _ensure_readz"ImageFileDirectory_v2._ensure_read0  sN    ggdms8t%%)F*>s3xjL  #,
rf   c           
     x   | j                          |j                         | _        	 | j                  r"| j	                  d| j                  |d            n!| j	                  d| j                  |d            d   }t        |      D ]   }| j                  r"| j	                  d| j                  |d            n!| j	                  d| j                  |d	            \  }}}}t        j                  || j                        j                  }t        j                  |d
      }	d| d| d|	 d| d	}
	 | j                  |   \  }}||z  }|| j                  rdndkD  rv|j                         }| j	                  | j                  rdnd|      \  }|
d| d| z  }
|j#                  |       t%        j&                  ||      }|j#                  |       n|d | }t)        |      |k7  r>t+        j,                  d| dt)        |       d|        t        j!                  |
       |st        j!                  |
       || j.                  |<   || j0                  |<   |
d|dkD  rd|z  n
t3        |      z   z  }
t        j!                  |
        | j                  r"| j	                  d| j                  |d            n!| j	                  d| j                  |d            \  | _        y # t        $ r t        j!                  d|
|       Y w xY w# t6        $ r(}
t+        j,                  t9        |
             Y d }
~
y d }
~
ww xY w)Nr   r)   rW  r   r   HHQ8s   HHL4sr8   unknownztag:  (
) - type: )z%s - unsupported type %sr!   r7   z Tag Location: z - Data Location: z/Possibly corrupt EXIF data.  Expecting to read r  z. Skipping tag 
 - value: r?   <table: %d bytes>)r   tellr   r   r   r  ranger   r  r   r   r   getr   KeyErrorloggerdebugseekr   
_safe_readrY   rG  rH  r  r   r   r   r  r   )r~   r  	tag_countir  r  countr   tagnametypnamer   	unit_sizer  r   hereoffsets                   r\   loadzImageFileDirectory_v2.load:  s   

wwy=	 == S$"3"3B":;\\#t'8'8Q'?@	I
 9% ." }} LL$*;*;B*CDgt/@/@R/HI &S% #//#tzz:??))C3gYbZy3%qI)-)<)<S)A&Iw y(115779D $DMMSsD QIV_TF2DVHMMCGGFO$//D9DGGDM;Dt9$MM--1F2Fs4yk R)),/
 LL%LL%%)c"$'S!|26)'$.d  S!]."d == S$"3"3B":;\\#t'8'8Q'?@ TYG   LL!;S#FP  	MM#c(#	s=   DL .K! F L ! LL LL 	L9L44L9c                F   | j                  dt        | j                              }g }|t        |      z   t        | j                        dz  z   dz   }d }t        | j                  j	                               D ]\  \  }}|t
        k(  rt        |      }| j                  j                  |      }t        j                  d||t        |             |t        j                  k(  xr t        |t              }|r_| j                  dk(  rd}	nd}	t!        |	|      }
| j                  |   }|j	                         D ]
  \  }}||
|<    |
j#                  |      }n+t        |t$              r|n|f} | j&                  |   | g| }t        j(                  || j*                        j,                  }|rd	nt/        j                  |d
      }d| d| d| d| d	}|dt        |      dk\  rdt        |      z  n
t1        |      z   z  }t        j                  |       |rd}nH|t        j2                  t        j4                  t        j6                  fv rt        |      }nt        |      }t        |      dk  r(|j9                  ||||j;                  dd      df        |j9                  |||| j                  d|      |f       |t        |      dz   dz  dz  z  }_ |L||   \  }}}}}|rd}t=        |      | j                  d| j?                  d|      d   |z         }|||||f||<   |D ]L  \  }}}}}t        j                  d|||t        |      t        |             || j                  d||||      z  }N |dz  }|D ]!  \  }}}}}||z  }t        |      dz  s|dz  }# |S )NrW  r8   r!   zTag %s, Type: %s, Value: %sr   s   II*    s   MM *   )r   ifdr  zsave: r  r  r  r  r:   r  r   rh  rf   r7   r   z&multistrip support not yet implementedr   z%s %s %s %s %sr  s       ) r   rY   r  sortedr  STRIPOFFSETSr   r  r  r  r   r   r?  r   r	  r   r   tobytesr  r   r  r   r   r   r   rC  rB  r9  appendljustNotImplementedErrorr   )r~   r  resultentriesstripoffsetsr  r   r  rJ  r   r  r   ifd_tag	ifd_valuer   r  r  r   r  s                      r\   r  zImageFileDirectory_v2.tobytes}  s   CT]]!34#f+%DMM(:R(??!C !!4!4!67 (	3JCl""7|,,""3'CLL6S$u+NHMM)Ej.EF<<3&7C7C+Cs;s+*0,,. -&GY#,CL-{{6*",UE":0t++C0??ooc4::6;;G%e599S)+DG7)2cU*WIRuAFC<36t9?#c$i/F C LL 8J8JKKD	F4yA~S%Au1EsKLS%C1H$OP3t9q=Q.22Q(	3V #+2<+@(CeUD>)#..JJsDLLe$<Q$?&$HIE$'eUD$@GL! -4 	B(CeUDLL)3UDKdTdjj#sE5AAF	B
 	+ -4 	 (CeUDdNF4y1}%	 
 rf   c                   |j                         dk(  r/|j                  | j                  | j                  ddd      z          |j                         }| j	                  |      }|j                  |       |t        |      z   S )Nr   HL*   r)   )r  writer   r   r  rY   )r~   r  r  r  s       r\   savezImageFileDirectory_v2.save  se    779>HHT\\DJJtR$;;<f%
F##rf   )s   II*     NNr   rH   )6r   r   r   r   r   __annotations__r   r   r   rd   r  r   setterr   r
  r  r  r  r  r!  r   rN  rQ  r   r   listmapr   r   r=  r?  SIGNED_BYTEr>  r@  FLOATrA  IFDLONG8r   rb  r   rf  rk  rn  r  r  r  r  r  r  r  r  r  r  r5   rf   r\   r   r     sh   :x VXNRW57O27!@ /0F/0F     	
<	<3N`%
=78 	g.V,%%sM:&&^<%%sM:g.#x0sF+g.
	
" a  a  a1 1
 a  aW W a
 

 a  a  b!W W b
 
AFKZ$rf   r   r   r   r   write_c                       e Zd ZU dZ fdZ ed       Z ed       Zded<   	 e	d        Z
d Zd	 Zd
 Zd Zd Zd Z xZS )ImageFileDirectory_v1a  This class represents the **legacy** interface to a TIFF tag directory.

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

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

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

    Values are returned as a tuple.

    ..  deprecated:: 3.0.0
    c                2    t        |   |i | d| _        y )NT)superr   r   )r~   r   kwargs	__class__s      r\   r   zImageFileDirectory_v1.__init__  s    $)&)rf   c                    | j                   S rr   )r  r   s    r\   r   zImageFileDirectory_v1.<lambda>  s
     rf   c                    | j                   S rr   )r  r   s    r\   r   zImageFileDirectory_v1.<lambda>  s
    DMM rf   zdict[int, int]r   c                     | |j                         }|j                  |_        |j                  |_        |j                  |_        |S )a2  Returns an
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`
        instance with the same data as is contained in the original
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`
        instance.

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

        rc   )rd   r  r   r   )clsoriginalr  s      r\   from_v2zImageFileDirectory_v1.from_v2  s<     )((&&==
rf   c                    t        | j                        }t        | j                        |_        t        | j                        |_        t        | j
                        |_        |S )a2  Returns an
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`
        instance with the same data as is contained in the original
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`
        instance.

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

        rc   )r   rd   r	  r  r   r  )r~   r  s     r\   to_v2zImageFileDirectory_v1.to_v2  sG     $4;;7DMM*4<<(DMM*
rf   c                >    || j                   v xs || j                  v S rr   )r  r  r  s     r\   r  z"ImageFileDirectory_v1.__contains__   r  rf   c                j    t        t        | j                        t        | j                        z        S rr   )rY   r  r  r  r   s    r\   r  zImageFileDirectory_v1.__len__#  r  rf   c                j    t        t        | j                        t        | j                        z        S rr   )rP  r  r  r  r   s    r\   rQ  zImageFileDirectory_v1.__iter__&  rR  rf   c                8    dD ]  }| j                  |||        y N)FT)r   )r~   r  r   r   s       r\   r!  z!ImageFileDirectory_v1.__setitem__)  s!    ' 	2JMM#uj1	2rf   c           	        || j                   vrR| j                  |   }| j                  |   }| j                  |   \  }}dD ]  }| j	                  | || ||      |        | j                   |   }t        |t        t        f      s|f}|S r  )r  r  r   r   r   r   r  r  )r~   r  r   r  r   r  legacyrl   s           r\   r  z!ImageFileDirectory_v1.__getitem__-  s    dmm#==%D,,s#C //4MD'' Hc74v#>GHmmC #u~.&C
rf   )r   r   r   r   r   r   tagstagdatar  classmethodr  r  r  r  rQ  r!  r  __classcell__r  s   @r\   r  r    s`    $  ./D12G ! ""<<=2
rf   r  c                  |     e Zd ZdZdZdZd fd	Zd Zed        Z	d Z
d Zd	 Zd
 Zd Z fdZd Zd Zd Z xZS )TiffImageFileTIFFz
Adobe TIFFFc                F    d | _         	 d | _        	 t        |   ||       y rr   )tag_v2r  r  r   )r~   r  filenamer  s      r\   r   zTiffImageFile.__init__G  s&    5"X&rf   c                   | j                   j                  d      }|d   dk(  r|| j                   j                  d      z  }t        |      | _        d| _        | j                  j
                  x| _        | _        d| _        | j                   | _	        g | _
        d| _        t        j                  d       t        j                  d| j                         t        j                  dt        |             | j                  d	       y)
z#Open the first image in a TIFF filer)   r   r   Nrh   z*** TiffImageFile._open ***z- __first: %sz	- ifh: %sr   )r  r  r   r  r  r   _TiffImageFile__first_TiffImageFile__next_TiffImageFile__frame_fp
_frame_pos	_n_framesr  r  r   _seek)r~   r   s     r\   _openzTiffImageFile._openP  s     ggll1oq6R<477<<?"C+C0  &*[[%5%55t{7723_dll3[$s), 	

1rf   c                2   | j                   | j                         }| j                  t        | j                               | j                   /| j                  | j                         dz          | j                   /| j                  |       | j                   S )Nr   )r  r  r  rY   r  r  )r~   currents     r\   n_frameszTiffImageFile.n_framesk  sn    >>!iikGJJs4??+,..(

499;?+ ..(IIg~~rf   c                    | j                  |      sy| j                  |       t        j                  | j                         t        j
                  j                  | j                  | j                        | _        y)z%Select a given frame as current imageN)	_seek_checkr  r   _decompression_bomb_checkr   corenewmodeim)r~   frames     r\   r  zTiffImageFile.seeku  sQ    &

5 	''		2**..DII6rf   c                j   | j                   | _        | j                  j                          t        | j                        |k  r| j
                  sd}t        |      t        j                  d|| j                  | j
                  | j                  j                                | j
                  dk\  rd}t        |      | j                  j                  | j
                         | j                  j                  | j
                         t        j                  d| j                  j                                | j                  j                  | j                         | j                  j                  | j                  v rd| _        n| j                  j                  | _        | j
                  dk(  r
|dz   | _        t        | j                        dk(  r| j
                  dk7  | _        | xj                  dz  c_	        t        | j                        |k  r| j                  j                  | j                  |          | j                  j                  | j                         | j%                          t&        j)                  | j                        x| _        | _        || _	        | j/                          y )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   )r  r  r  rY   r  r  EOFErrorr  r  r  rF  r  r  r  r  r   r  is_animated_reload_exifr  r  r  r  _setup)r~   r  r   s      r\   r  zTiffImageFile._seek  s   (( 	$//"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+,!3;;DKKHH48rf   c                    | j                   S )zReturn the current frame number)r  r   s    r\   r  zTiffImageFile.tell  s    ||rf   c                n    t         | j                  v r"| j                  | j                  t                  S i S )z
        Returns a dictionary containing the XMP tags.
        Requires defusedxml to be installed.

        :returns: XMP tags in a dictionary.
        )XMPr  _getxmpr   s    r\   getxmpzTiffImageFile.getxmp  s,     251Ct||DKK,-KKrf   c                   i }| j                   j                  t        j                  j                        }|r|dd dk(  rt        |dd       }t        j                  |d   dz   dz        dz  }t        |d|z   d|z          }|d|z   d|z   |z    }d|i||<   |t        j                  d|z   |z   dz        dz  d }|dd dk(  r|S )	a5  
        Returns a dictionary of Photoshop "Image Resource Blocks".
        The keys are the image resource ID. For more information, see
        https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_pgfId-1037727

        :returns: Photoshop "Image Resource Blocks" in a dictionary.
        Nr!   s   8BIMr%   r   r   r  r   )	r  r  r   BaseImageResourcesi16mathceili32)r~   blocksrl   idnr   r   s          r\   get_photoshop_blocksz"TiffImageFile.get_photoshop_blocks  s     kkoohmm::;bq'W$Qq]IIs1vzQ./!33q1urAv./26BFTM2$d^r
$))R!Vd]a$781<>? bq'W$ rf   c                p    | j                   r| j                  r| j                         S t        |          S rr   )tileuse_load_libtiff_load_libtiffr  r  )r~   r  s    r\   r  zTiffImageFile.load  s-    99..%%''w|~rf   c                   | j                   s\d| _        | j                  j                          | j	                         }t
        j                  D ]  }||vr|j                  |        t        j                  | d       t        j                  j                  | j                  v r&| j                  t        j                  j                  = y y )NT)in_place)r  !_close_exclusive_fp_after_loadingr  r  getexifr   TAGS_V2_GROUPSget_ifdr   exif_transposer   r  Orientationr  )r~   exifkeys      r\   load_endzTiffImageFile.load_end  s     59D2 GGLLN <<>D.. "d?S!"
 	t4==$$3HMM556 4rf   c                   t         j                   j                  |        | j                          t        | j                        dk(  sd}t        |      | j                  d   d   }t        | j                  d   d         }	 t        | j                  d      xr | j                  j                         }t        | j                  d      r| j                  j                          |r||d<   t        j                  | j                  d	t        |      | j                        }	 |j                  | j                   |       | j$                  xr | j&                   }t        | j                  d      rBt(        j+                  d       |j-                  | j                  j/                               \  }}	n|rGt(        j+                  d       |s| j                  j1                  d       |j-                  d      \  }}	n\t(        j+                  d       | j                  j1                  d       |j-                  | j                  j3                               \  }}	g | _        d| _        | j7                          |r!| j                  j9                          d| _        |	dk  rt        |	      t         j                   j                  |       S # t
        $ r d}Y w xY w# t"        $ r}d
}t        |      |d}~ww xY w)zWOverload method triggered when we detect a compressed tiff
        Calls out to libtiffr   zNot exactly one tiler   r   filenoflushFr   libtiffzCouldn't set the imageNgetvaluez5have getvalue. just sending in a string from getvaluez3have fileno, calling fileno version of the decoder.s   fpfpz+don't have fileno or getvalue. just reading)r   r  load_preparerY   r  r  r  r   r  r+  r,  _getdecoderr  r  decoderconfigsetimager  rF  _exclusive_fpr  r  r  rj  r.  r  r  readonlyr)  close)
r~   r   extentsr   r  decodereclose_self_fpr  errs
             r\   r  zTiffImageFile._load_libtiff  sN    	499~"(C#, ))A,q/DIIaLO$

	(+@0@B tww( DG##IIy%+t/A/A
	&TWWg.
 **C43C3C/C477J' LLPQ^^DGG$4$4$67FAsLLNO Q^^G,FAs LLFGGGLLO^^DGGLLN3FAs	GGMMODG7#,{{%%q  	 B	  	&*C#,A%	&s+   A"K "K KK	K4!K//K4c                p   d| j                   v rd}t        |      t        | j                   j                  t        d         | _        | j                   j                  t        d      | _        | j                   j                  t        d      }| j
                  dk(  rd}| j                   j                  t        d      }t        j                  d       t        j                  d| j
                         t        j                  d	|       t        j                  d
| j                         t        j                  d|       t        j                  d| j                  j                  t                     t        | j                   j                  t                    }t        | j                   j                  t                     }||f| _        t        j                  d| j$                         | j                   j                  t&        d      }t)        |      dkD  r"t+        |      t-        |      cxk(  rdk(  rn nd}| j                   j                  t.        d      }| j                   j                  t0        d      }|dv rd}	n
|dk(  rd}	nd}	|	t)        |      z  }	t)        |      }
| j                   j                  t2        | j
                  dk(  r|dv rdnd      }|t4        kD  r#t        j7                  d|       d}t9        |      ||
k  r|d| }n||
kD  r
|
dk(  r||z  }t)        |      |k7  rd}t9        |      | j                   j:                  |||||f}t        j                  d|       	 t<        |   \  | _        }t        j                  d|       t        j                  d| jB                         | j
                  | jD                  d<   | j                   j                  tF        d      }| j                   j                  tH        d      }|r|r| j                   j                  tJ              }|dk(  r||f| jD                  d <   nS|dk(  r|d!z  |d!z  f| jD                  d <   n6|#||f| jD                  d <   ||f| jD                  d"<   n||f| jD                  d"<   dx}x}}g | _&        tN        xs | j
                  d#k7  | _(        | jP                  r|dk(  r5|dd dz   |dd z   }t        j                  d|       t<        |   \  | _        }|d$k(  rd%}d&|v r|jS                  d&d'      }d(|v r|jS                  d(d'      }|dk(  r | j
                  d)k(  r| j                  dk(  rd*}|| j
                  d+| j                   jT                  f}| jL                  jW                  d,dd||fd|f       ntX        | j                   v stZ        | j                   v rutX        | j                   v rC| j                   tX           }| j                   j                  t\        |      }| j$                  d   }nQ| j                   tZ           }| j                   j                  t^              }| j                   j                  t`              }|D ]  }||z   |kD  r|tc        |      z  d-z  }nd}|}| j                  dk(  r
||   }||	z  }|t        |      df}| jL                  jW                  | j
                  ||t-        ||z   |      t-        ||z   |      f||f       ||z   }|| j$                  d   k\  sd||z   }}|| j$                  d   k\  sdx}}|dz  } n"t        j                  d.       d}t9        |      td        | j                   v r | j                   td           | jD                  d/<   | jB                  d0v rW| j                   tf           D cg c]  }ti        |d1z         }}tk        jl                  d2d3jo                  |            | _8        yy# t@        $ r(}t        j                  d       d}t9        |      |d}~ww xY wc c}w )4z-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
- size: %sr4   r5   )r   r%   r)   r   r#   r!   )r   r%   z.More samples per pixel than can be decoded: %sz#Invalid value for samples per pixelNzunknown data organizationzformat key: %sz- unsupported formatzunknown pixel modez- raw mode: %sz- pil mode: %scompressionr   dpigRQ@
resolutionr   r9   I;16Nz;16Bz;16Nz;16Lr(   rF   Fr-  r)   z- unsupported data organizationicc_profilerR   rS   r   RGB;Lrf   )9r  r  COMPRESSION_INFOr  COMPRESSION_compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION	FILLORDERr  r  r  YCBCRSUBSAMPLINGr+  
IMAGEWIDTHIMAGELENGTH_sizer   SAMPLEFORMATrY   rv   ru   BITSPERSAMPLEEXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELerrorr   rd   	OPEN_INFO_moder  r  r7  X_RESOLUTIONY_RESOLUTIONRESOLUTION_UNITr  READ_LIBTIFFr  r   r  r  r  TILEOFFSETSROWSPERSTRIP	TILEWIDTH
TILELENGTHsum
ICCPROFILECOLORMAPr   r   r   r   palette)r~   r   photo	fillorderxsizeysizesample_format	bps_tupleextra_tuple	bps_countbps_actual_countsamples_per_pixelr(  rawmoder8  xresyresresunitxylayerrs  offsetsr[  wr  stridetile_rawmoderZ  ra  s                                 r\   r
  zTiffImageFile._setup=  sW    T[[ ?C#, -T[[__[!-LM%)[[__5I1%M"  :A> +EKKOOIq1	&'($*;*;<7?143M3MN'3.=M0NO DKKOOJ/0DKKOOK01E\
\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!116F!6K "$5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
 & ! !//&&9 !//&&9
 
%%/..!3 $++UDKK4F4FGAIIi!Qu)=q!DET[[(K4;;,Ft{{*++l3KKOOL%8IIaL ++k2KKOOI.KKOOJ/! #q55=Y/!3FF&--2#*5>Li'F!3v;2		  ))As1q5%0#a!eU2CD	 E		!$a!eqADIIaL( !	A
7#: LL:;-Cc"" $'+{{:'>DIIm$ 99#-1[[-BCr!s(|CGC'++GSXXg5FGDL $A  	*LL/0&Cc")	*B Ds   ._? <`3?	`0#`++`0)NN)r   r   r   formatformat_descriptionr!  r   r  r   r  r  r  r  r  r  r  r)  r  r
  r  r  s   @r\   r  r  B  se    F%(-%'6  	7*XL*
7*S&j^Hrf   r  r6   r7   rE   rR   rS   r<   rC   r9   r=   r@   rA   rF   rI   rG   rT   YCbCrrW   rD   r;   r>   rB   )r>   rB   c                `   	 t         | j                     \  }}}}}}t	        |      }| j
                  }| j                  }	 |d   }|d}n|dk(  rd}n|dk(  rd	}t        xs |dk7  }d
|t        <   | j                  d   |t        <   | j                  d
   |t        <   d|v r|d   }nCd|v r=|d   }t        |t               r*t#        j$                         }|j'                  |       |}ni }t(        j+                  dt-        |             t        |t.              r|j1                         }|D ]t  }t        |t"        j$                        r'|t2        j4                  v r|j7                  |      ||<   n|j                  |      ||<   	 |j8                  |   |j8                  |<   v t=        | d      rlt>        t@        tB        tD        tF        tH        fD ]I  }|| jJ                  v s| jJ                  |   ||<   | jJ                  j8                  |   |j8                  |<   K |j                  d| j                  j                  d            }|r	||tL        <   tN        dft@        dftB        dft@        dftB        dft>        dftP        dftR        dftT        dftV        dff
D ]  \  }}||v s||   ||<    |j                  d      }|r!d|t>        <   |d   |t@        <   |d
   |tB        <   |dk7  r)||tX        <   t[        |      d
k7  rt[        |      |t\        <   |	||t^        <   |d
k7  r	||t`        <   tb        |vr
||tb        <   n| j                  dv r|tb           dk(  r| j                  dk(  rj| je                         }|j'                         }tg        |jh                        D ]/  }tg        |jj                        D ]  }|||f   dk(  rdnd|||f<    1 |} ntm        jn                  |       } | j                  d v rs| jp                  js                  d!d"      }g }t[        |      d#z  }tg        d#      D ]0  }||||z  ||d
z   z   D cg c]  }|d$z  	 c}z  }|dgd$|z
  z  z  }2 ||tt        <   |t           |t           } }t[        |      ||d   z  d%z   d&z  z  }!tv        |vr[|rG|j                  d'tx              }"|!dk(  rd
nt{        |"|!z  |       }#|dk(  rt{        |#d%z   d&z  d&z  |       }#n| }#|#dk(  rd
}#|#|tv        <   |!dk(  rd
n|!|tv           z  }$| |tv           z   d
z
  |tv           z  }%|$d(k\  r!t2        j|                  |j8                  t~        <   |$f|%d
z
  z  |!| z  |$|%d
z
  z  z
  fz   |t~        <   t        tg        d|$|%z  |$            |t        <   t        j                  |d
      |t        <   | j                  d)k(  r6t        d*t        d+ij                         D ]  \  }&}'|j                  |&|'        t        t        t        t        g}(|rd,|v rG|d,   })t        |)t              r
|)dk  s|)d-kD  rd.}
t        |
      |dk7  rd/}
t        |
      |)|t        <   t(        j+                  d0       t(        j+                  d1t        |j                                      d}*t=        |d2      r5	 |j                  d       t        j                  |j                               }*i }+|(t        t        t~        t        t        t        gz  }(tX        |d   i},i }-t=        | d3      r| j                  j1                         }-i t        | di       |-}.t`        |.v r|.t`        = t        j                  |j                         |.j                               D ]  \  }&}'|&t2        j                  vrt        t"        j                  d4d5      s4|&|j8                  v r|j8                  |&   |+|&<   nGt        |'t        t        t        t         f      svt3        j                  |&      j                  }/|/r|/|+|&<   |&|,vs|&|(vst        |'t              r|'j                  d6d7      d8z   |,|&<   t        |'t              rt        |'      |,|&<   |'|,|&<    t`        |,v r(t[        |,t`                 d
k(  r|,t`           d   |,t`        <   t(        j+                  d9t        |,j                                      | j                  d:v rd;}t-        |,j                               }0|0j                          |||*||0|+f}1t#        j                  | j                  d<|1|      }2|2j                  | jp                  d=| j                  z          	 |2j                  d>      d
d  \  }3}4|*s|j                  |4       |3rn.|*r	 t        j                  |*       |3dk  rXd?|3 d@}
t        |
      |(D ]  }&||&=  |j                  |      }5t        j                  | |dd=| j                  z   |5||!d
ffg       dA|v r|| _l        y y # t        $ r!}	d| j                   d}
t        |
      |	d }	~	ww xY w# t        $ r1 | j                  j                  d      }t        |t              rd }Y 
'w xY w# t:        $ r Y 	Sw xY wc c}w # t        j                  $ r Y w xY w# t        $ r Y w xY w)BNzcannot write mode z as TIFFrc   r<  r   r&   r(   r.   r*   r   r   tiffinfor'  zTiffinfo Keys: %sr  r@  descriptionr>  x_resolutiony_resolutionresolution_unitsoftware	date_timeartist	copyrightr=  r   r4   )r6   r7   r6   r   rA  rF   rB  r   r   r'   r)   
strip_sizer   ry  )r   r   )r   r      r   r  r   qualityd   zInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz	Items: %sr+  r  libtiff_support_custom_tagsFr4  r   rh  zConverted items: %s)r;   r9   r?  r-  rJ   i @  zencoder error z when writing image file_debug_multipage)m	SAVE_INFOr  r  r  r   encoderinfoencoderconfigr7  r  r   r+  WRITE_LIBTIFFrF  r   rK  rL  r  r   Exifr  r  r  r  r  r  r   r#  r$  r   r  r   rX  rV  rW  IPTC_NAA_CHUNKPHOTOSHOP_CHUNKr  r  r_  IMAGEDESCRIPTIONSOFTWARE	DATE_TIMEARTIST	COPYRIGHTrO  rY   rQ  rP  rN  rH  copyr  heightwidthr   invertr  
getpaletter`  r[  
STRIP_SIZEru   r?  STRIPBYTECOUNTSr  r  COMPRESSION_INFO_REVrD  rJ  REFERENCEBLACKWHITEr  
setdefaultr\  r]  rZ  TILEBYTECOUNTSrF  JPEGQUALITYr  r  osdupr+  ioUnsupportedOperationOSUBFILETYPETRANSFERFUNCTIONSUBIFDr  r|   	itertoolschainLIBTIFF_COREr  r   r   r  r8  rD  rj   sort_getencoderr2  r  r5  r  r   _saver  )6r  r  r  rl  rd   rb  rw  bitsextrar8  r   r  r  r  r<  r-  r7  r'  r(  iccr   r=  inverted_impxrq  rp  lutcolormapcolorsr  r%  rt  r[  ru  im_strip_sizerows_per_stripstrip_byte_countsstrips_per_imager  r   	blocklistr  r  typesatts
legacy_ifdsupplied_tagsr8  r  rs  encodererrcoder   r  s6                                                         r\   r  r  >  s
   "6?6H3e
  v
.C..K$$M!-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 r8 
 
	:C bii99S>C#%99#4#4S#9C 
	: //-])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;--. ={001 =A$&q!tHOqBq!tH== B$B	ww+eeug.SQq 	-A#fqj6QU;K*LMQS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!=
 %'	'JC NN3&		' J^DI#!),Ggs+w{gm/ o%f$M o%&C34[&"562x 
ffRYY[)
  	
 	
	 tAw' 
2uJ D72x4C
C=(l+#//#))+}7J7J7LM 	&JC
 (///uzz+H%P#++%!$S!1E#J$US%e,DE#??3/44D%)c
$3i#7eS) %Wi @5 HDI{3 %eDI %DI/	&2 4C\(:$;q$@!%l!3A!6D*F4::<,@A 77''G
 DJJL!		k3$>##BGGY=I 01#NN95ab9MGT   Q;"7)+CDC#,  	CC	"eVbgg-v7KLM	

 [(! )E	  ""277)84cl!"  ggkk-0k3'K	T  		R Nt ** v  se   h h4 i1:j4j j  	h1h,,h146i.-i.1	i>=i>jj 	j-,j-c                      e Zd Zg dZh dZddZd Zd Zd Zd Z	d Z
d	 Zej                  fd
Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZy)AppendingTiffWriter)r   r   r   r   r!   r)   r   r   r   r!   r)   r!   r)   r!   r   r!   r)   >       	     r   r   c                    t        |d      r|| _        d| _        n$|| _        d| _        	 t	        ||rdnd      | _        | j                  j                         | _        | j                          y # t
        $ r t	        |d      | _        Y Lw xY w)Nr  FTzw+bzr+b)	r   r   close_fpr   openr  r  	beginningsetup)r~   fnr  s      r\   r   zAppendingTiffWriter.__init__  sy    2vDF!DMDI DM)b3%E: 

  )b%)s   A0 0BBc                   | j                   j                  | j                  t        j                         d | _        d| _        | j                   j                  d      x| _        }|sd| _	        y d| _	        |dk(  r| j                  d       n$|dk(  r| j                  d       nd	}t        |      | j                          | j                          y )
Nr   r!   TFr_   r   r^   r   zInvalid TIFF file header)r   r  r  r  SEEK_SETwhereToWriteNewIFDOffsetoffsetOfNewPager  IIMMisFirst	setEndianRuntimeErrorskipIFDsgoToEnd)r~   iimmr   s      r\   r  zAppendingTiffWriter.setup  s    DNNBKK0(,% 66;;q>)	DDL= NN3]"NN3,Cs##rf   c                   | j                   ry | j                  j                  | j                         | j                  j	                  d      }|sy || j
                  k7  rd}t        |      | j                         }|| j                  z  }| j                  j                  | j                         | j                  |       | j                  j                  |       | j                          y )Nr!   z1IIMM of new page doesn't match IIMM of first page)r  r   r  r  r  r  r  readLongr  	writeLongfixIFD)r~   r  r   
ifd_offsets       r\   finalizezAppendingTiffWriter.finalize  s    << 	D(()vv{{1~499ECs##]]_
d***
D112z"Jrf   c                D    | j                          | j                          y rr   )r  r  r   s    r\   newFramezAppendingTiffWriter.newFrame  s    

rf   c                    | S rr   r5   r   s    r\   	__enter__zAppendingTiffWriter.__enter__  s    rf   c                <    | j                   r| j                          y)NF)r  r5  )r~   exc_type	exc_value	tracebacks       r\   __exit__zAppendingTiffWriter.__exit__  s    ==JJLrf   c                P    | j                   j                         | j                  z
  S rr   )r   r  r  r   s    r\   r  zAppendingTiffWriter.tell  s    vv{{}t3333rf   c                    |t         j                  k(  r|| j                  z  }| j                  j	                  ||       | j                         S rr   )r  r  r  r   r  r  )r~   r  whences      r\   r  zAppendingTiffWriter.seek  s<    R[[ d***FFF#yy{rf   c                >   | j                   j                  dt        j                         | j                   j	                         }d|dz  z
  }d|cxk  rdk  r'n n$| j                   j                  t        |             | j                   j	                         | _        y )Nr   r:   )r   r  r  SEEK_ENDr  r  r  r  )r~   pos	pad_bytess      r\   r  zAppendingTiffWriter.goToEnd  sj    Ar{{#ffkkm rM	y2FFLLy)*#vv{{}rf   c                    || _         | j                   dz   | _        | j                   dz   | _        | j                   dz   | _        y )Nr7   rW  HHL)endianlongFmtshortFmt	tagFormat)r~   r  s     r\   r  zAppendingTiffWriter.setEndian  s9    {{S(c)u,rf   c                &   	 | j                         }|dk(  r#| j                  j                         dz
  | _        y | j                  j	                  |       | j                         }| j                  j	                  |dz  t        j                         )Nr   r!   r8   )r  r   r  r  r  	readShortr  SEEK_CUR)r~   r  num_tagss      r\   r  zAppendingTiffWriter.skipIFDs  sl    JQ040A-FFKK
#~~'HFFKK2r{{3 rf   c                8    | j                   j                  |      S rr   )r   r  re  s     r\   r  zAppendingTiffWriter.write  s    vv||D!!rf   c                |    t        j                  | j                  | j                  j	                  d            \  }|S )Nr   )r   rT  r  r   r  rm  s     r\   r  zAppendingTiffWriter.readShort  s)    ==A?rf   c                |    t        j                  | j                  | j                  j	                  d            \  }|S ra   )r   rT  r  r   r  rm  s     r\   r  zAppendingTiffWriter.readLong  s)    ==tvv{{1~>rf   c                    | j                   j                  dt        j                         | j                   j	                  t        j                  | j                  |            }||dk7  rd| d}t        |      y y )Nr!   wrote only  bytes but wanted 4	r   r  r  r  r  r   rV  r  r  r~   r   bytes_writtenr   s       r\   rewriteLastShortToLongz*AppendingTiffWriter.rewriteLastShortToLong  h    B$V[[u%EF$!);.ABCs## *<$rf   c                    | j                   j                  dt        j                         | j                   j	                  t        j                  | j                  |            }||dk7  rd| d}t        |      y y )Nr  r   r   bytes but wanted 2)	r   r  r  r  r  r   rV  r  r  r  s       r\   rewriteLastShortz$AppendingTiffWriter.rewriteLastShort  sh    B$V[[%FG$!);.ABCs## *<$rf   c                    | j                   j                  dt        j                         | j                   j	                  t        j                  | j                  |            }||dk7  rd| d}t        |      y y )Nr!   r  r  r   r  s       r\   rewriteLastLongz#AppendingTiffWriter.rewriteLastLong  r  rf   c                    | j                   j                  t        j                  | j                  |            }||dk7  rd| d}t        |      y y )Nr   r  r  )r   r  r   rV  r  r  r  s       r\   
writeShortzAppendingTiffWriter.writeShort  sR    V[[%FG$!);.ABCs## *<$rf   c                    | j                   j                  t        j                  | j                  |            }||dk7  rd| d}t        |      y y )Nr!   r  r  )r   r  r   rV  r  r  r  s       r\   r  zAppendingTiffWriter.writeLong  sR    V[[u%EF$!);.ABCs## *<$rf   c                X    | j                          | j                  j                          y rr   )r  r   r5  r   s    r\   r5  zAppendingTiffWriter.close"  s    rf   c                &   | j                         }t        |      D ]r  }t        j                  | j                  | j
                  j                  d            \  }}}| j                  |   }||z  }|dk  }|s0| j                         }	|	| j                  z  }	| j                  |	       || j                  v r| j
                  j                         }
|r9| j                  ||dk(  |dk(         | j
                  j                  |
dz          nP| j
                  j                  	       | j                  ||dk(  |dk(         | j
                  j                  |
       d x}	}
E|sI| j
                  j                  dt        j                          u y )Nr)   r!   r   )isShortisLong)r  r  r   rT  r  r   r  
fieldSizesr  r  r
  Tagsr  
fixOffsetsr  r  r  )r~   r  r  r  
field_typer  
field_size
total_sizeis_localr  cur_poss              r\   r  zAppendingTiffWriter.fixIFD&  sP   >>#x 	,A%+]]4>>466;;q>%R"CU4J#e+J!QH$...$$V,dii&&++-OO
a*PQ/ $  FFKK!,FFKK'OO
a*PQ/ $  FFKK(#''Ar{{+=	,rf   c                .   |s|sd}t        |      t        |      D ]  }|r| j                         n| j                         }|| j                  z  }|r|dk\  r|dk7  rd}t        |      | j                  |       | j                  j                  dt        j                         | j                  t        j                         | j                  j                  dt        j                         |r| j                  |       | j                  |        y )Nz offset is neither short nor longr   r   znot implementedir)   )r  r  r  r  r  r  r   r  r  r  r  r   r?  r  r
  )r~   r  r  r  r   r  r  s          r\   r  zAppendingTiffWriter.fixOffsetsI  s    v4Cs##u 	-A)0T^^%dmmoFd***F6U?A:+C&s++ ++F3C-.Ar{{+%%f-$$V,%	-rf   N)F)FF)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  r5  r  r  r5   rf   r\   r  r  h  s    J(D2.

4 #%++ --	4"$$$$$!,F-rf   r  c                r   | j                   j                         }| j                  }t        |j	                  dg             }t        | d      s|st        | ||      S | j                         }	 t        |      5 }| g|z   D ]y  }||_         ||_        t        |d      sd}	n|j                  }	t        |	      D ]@  }
|j                  |
       |j                          t        |||       |j                          B { 	 d d d        | j                  |       y # 1 sw Y   xY w# | j                  |       w xY w)Nappend_imagesr  r   )r  r  r  r  r  r   r  r  r  r  r  r  r  r  )r  r  r  r  r  r  cur_idxtfimsnfrr   s              r\   	_save_allr!  c  s   ..%%'K$$M"=>M2z"=RX&&ggiG $ 	"tm+ ""-$1!sJ/C,,C : "CHHSMHHJ#r8,KKM	""	" 		" 	" 	s%   .D# 9BD=D# D D# #D6z.tifz.tiffz
image/tiff)y
__future__r   r  r  loggingr  r  r   rG  collections.abcr   	fractionsr   numbersr   r   typingr   r	   r
    r   r   r   r   r   r   _binaryr   r  r   r  r   r   	getLoggerr   r  rY  r  IFD_LEGACY_APIr  r   r   r  rK  rL  rO  rD  rH  rI  r  r  rQ  r[  r  rV  rW  rF  rX  r  r  r  r  	PREDICTORr`  r\  r]  rZ  r  r  rP  rN  
JPEGTABLESrJ  r  r  r  r  r_  EXIFIFDr  r  IMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATArC  r  r  rT  rv   rR  rb   re   rp   ry   r   r   r   rj   r   r   r   r+  
_IFDv2Baser   r   r   r   setattrr  ImageFileDirectoryr  r  r  r  r!  register_openrw  register_saveregister_save_allregister_extensionsregister_mime)kr%  s   00r\   <module>r:     s7  R # 	    	   *  $ / / J J ! !  			8	$ 


 
  	   				
	
  	

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