§
    2?Äjz« ã                   ó¼  — d Z ddlmZmZ ddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZdZdZdZd„ Zd¸d	„Zd¹d„Z G d„ de ¦  «        Z! G d„ de ¦  «        Z" G d„ de ¦  «        Z# G d„ de ¦  «        Z$ G d„ de ¦  «        Z% G d„ de ¦  «        Z& G d„ de ¦  «        Z' G d„ de(¦  «        Z) G d„ de ¦  «        Z* G d„ de ¦  «        Z+ G d „ d!e ¦  «        Z, G d"„ d#e ¦  «        Z- G d$„ d%e ¦  «        Z. G d&„ d'e ¦  «        Z/e/ G d(„ d)e ¦  «        ¦   «         Z0dºd*„Z1d+„ Z2d,„ Z3d-„ Z4d.„ Z5d/„ Z6d0„ Z7d1„ Z8d2„ Z9d3„ Z:d4„ Z;d»d5„Z<d6„ Z=d7„ Z>d8„ Z?d9„ Z@d:„ ZAd;„ ZBd<„ ZCd=„ ZDd>„ ZEd?„ ZFd@„ ZGdA„ ZHdB„ ZIdC„ ZJdD„ ZKdE„ ZLdF„ ZMdG„ ZNdH„ ZOdI„ ZPdJ„ ZQdK„ ZR	 	 	 	 	 	 d¼dN„ZSd»dO„ZTdP„ ZUdQ„ ZVd»dR„ZWdS„ ZXdT„ ZYdU„ ZZdV„ Z[dW„ Z\dX„ Z]e^ddYfdZ„Z_d[„ Z` e_d\¦  «        d]„ ¦   «         Za e_d^¦  «        d_„ ¦   «         Zb e_d`¦  «        d½da„¦   «         Zcd¾de„Zd e_df¦  «        dg„ ¦   «         Zed¿dh„Zfdi„ Zgdj„ Zhdk„ ZidÀdm„ZjdÁdo„ZkdÂdq„ZldÃds„Zmdt„ ZndÄdv„ZodÅdy„Zpdz„ ZqdÆd|„Zrd}„ ZsdÇd€„Ztd»d�„ZudÈdƒ„Zvd„„ Zwd…„ Zxd†„ Zyd‡„ Zzdˆ„ Z{ej         |                    d‰¦  «        fdŠ„Z}d½d‹„Z~dŒ„ Zd�„ Z€dÉdŽ„Z�dÊd”„Z‚d•„ ZƒdËd–„Z„d—„ Z…dÌd™„Z†dÍd›„Z‡dœ„ Zˆd�„ Z‰dž„ ZŠdÎd¡„Z‹dÏd£„ZŒ	 	 	 	 	 	 	 	 	 	 	 dÐd¨„Z�d©„ ZŽdª„ Z�d»d«„Z�ej‘        d         d’k    r#e’e“fZ”d¬„ Z•dºd­„Z–d»d®„Z—d¯„ Z˜ G d°„ d±e™¦  «        Zše%Z&ne’Z”e›eœfZ�e›ZžeŸZ•dÑd³„Z–dÒdµ„Z—d¶„ Z˜e d·k    r ej¡         e�¦   «         ¦  «         dS dS )Óa8  Read image and meta data from (bio) TIFF(R) files. Save numpy arrays as TIFF.

Image and metadata can be read from TIFF, BigTIFF, OME-TIFF, STK, LSM, NIH,
SGI, ImageJ, MicroManager, FluoView, ScanImage, SEQ, GEL, and GeoTIFF files.

Tifffile is not a general-purpose TIFF library.
Only a subset of the TIFF specification is supported, mainly uncompressed and
losslessly compressed 1, 8, 16, 32 and 64 bit integer, 16, 32 and 64-bit float,
grayscale and RGB(A) images, which are commonly used in scientific imaging.
Specifically, reading slices of image data, image trees defined via SubIFDs,
CCITT and OJPEG compression, chroma subsampling without JPEG compression,
or IPTC and XMP metadata are not implemented.

TIFF(R), the tagged Image File Format, is a trademark and under control of
Adobe Systems Incorporated. BigTIFF allows for files greater than 4 GB.
STK, LSM, FluoView, SGI, SEQ, GEL, and OME-TIFF, are custom extensions
defined by Molecular Devices (Universal Imaging Corporation), Carl Zeiss
MicroImaging, Olympus, Silicon Graphics International, Media Cybernetics,
Molecular Dynamics, and the Open Microscopy Environment consortium
respectively.

For command line usage run C{python -m tifffile --help}

:Author:
  `Christoph Gohlke <https://www.lfd.uci.edu/~gohlke/>`_

:Organization:
  Laboratory for Fluorescence Dynamics, University of California, Irvine

:Version: 2018.06.15

Requirements
------------
* `CPython 3.6 64-bit <https://www.python.org>`_
* `Numpy 1.14 <http://www.numpy.org>`_
* `Matplotlib 2.2 <https://www.matplotlib.org>`_ (optional for plotting)
* `Tifffile.c 2018.02.10 <https://www.lfd.uci.edu/~gohlke/>`_
  (recommended for faster decoding of PackBits and LZW encoded strings)
* `Tifffile_geodb.py 2018.02.10 <https://www.lfd.uci.edu/~gohlke/>`_
  (optional enums for GeoTIFF metadata)
* Python 2 requires 'futures', 'enum34', 'pathlib'.

Revisions
---------
2018.06.15
    Pass 2680 tests.
    Towards reading JPEG and other compressions via imagecodecs package (WIP).
    Add function to validate TIFF using 'jhove -m TIFF-hul'.
    Save bool arrays as bilevel TIFF.
    Accept pathlib.Path as filenames.
    Move 'software' argument from TiffWriter __init__ to save.
    Raise DOS limit to 16 TB.
    Lazy load lzma and zstd compressors and decompressors.
    Add option to save IJMetadata tags.
    Return correct number of pages for truncated series (bug fix).
    Move EXIF tags to TIFF.TAG as per TIFF/EP standard.
2018.02.18
    Pass 2293 tests.
    Always save RowsPerStrip and Resolution tags as required by TIFF standard.
    Do not use badly typed ImageDescription.
    Coherce bad ASCII string tags to bytes.
    Tuning of __str__ functions.
    Fix reading 'undefined' tag values (bug fix).
    Read and write ZSTD compressed data.
    Use hexdump to print byte strings.
    Determine TIFF byte order from data dtype in imsave.
    Add option to specify RowsPerStrip for compressed strips.
    Allow memory map of arrays with non-native byte order.
    Attempt to handle ScanImage <= 5.1 files.
    Restore TiffPageSeries.pages sequence interface.
    Use numpy.frombuffer instead of fromstring to read from binary data.
    Parse GeoTIFF metadata.
    Add option to apply horizontal differencing before compression.
    Towards reading PerkinElmer QPTIFF (no test files).
    Do not index out of bounds data in tifffile.c unpackbits and decodelzw.
2017.09.29 (tentative)
    Many backwards incompatible changes improving speed and resource usage:
    Pass 2268 tests.
    Add detail argument to __str__ function. Remove info functions.
    Fix potential issue correcting offsets of large LSM files with positions.
    Remove TiffFile sequence interface; use TiffFile.pages instead.
    Do not make tag values available as TiffPage attributes.
    Use str (not bytes) type for tag and metadata strings (WIP).
    Use documented standard tag and value names (WIP).
    Use enums for some documented TIFF tag values.
    Remove 'memmap' and 'tmpfile' options; use out='memmap' instead.
    Add option to specify output in asarray functions.
    Add option to concurrently decode image strips or tiles using threads.
    Add TiffPage.asrgb function (WIP).
    Do not apply colormap in asarray.
    Remove 'colormapped', 'rgbonly', and 'scale_mdgel' options from asarray.
    Consolidate metadata in TiffFile _metadata functions.
    Remove non-tag metadata properties from TiffPage.
    Add function to convert LSM to tiled BIN files.
    Align image data in file.
    Make TiffPage.dtype a numpy.dtype.
    Add 'ndim' and 'size' properties to TiffPage and TiffPageSeries.
    Allow imsave to write non-BigTIFF files up to ~4 GB.
    Only read one page for shaped series if possible.
    Add memmap function to create memory-mapped array stored in TIFF file.
    Add option to save empty arrays to TIFF files.
    Add option to save truncated TIFF files.
    Allow single tile images to be saved contiguously.
    Add optional movie mode for files with uniform pages.
    Lazy load pages.
    Use lightweight TiffFrame for IFDs sharing properties with key TiffPage.
    Move module constants to 'TIFF' namespace (speed up module import).
    Remove 'fastij' option from TiffFile.
    Remove 'pages' parameter from TiffFile.
    Remove TIFFfile alias.
    Deprecate Python 2.
    Require enum34 and futures packages on Python 2.7.
    Remove Record class and return all metadata as dict instead.
    Add functions to parse STK, MetaSeries, ScanImage, SVS, Pilatus metadata.
    Read tags from EXIF and GPS IFDs.
    Use pformat for tag and metadata values.
    Fix reading some UIC tags (bug fix).
    Do not modify input array in imshow (bug fix).
    Fix Python implementation of unpack_ints.
2017.05.23
    Pass 1961 tests.
    Write correct number of SampleFormat values (bug fix).
    Use Adobe deflate code to write ZIP compressed files.
    Add option to pass tag values as packed binary data for writing.
    Defer tag validation to attribute access.
    Use property instead of lazyattr decorator for simple expressions.
2017.03.17
    Write IFDs and tag values on word boundaries.
    Read ScanImage metadata.
    Remove is_rgb and is_indexed attributes from TiffFile.
    Create files used by doctests.
2017.01.12
    Read Zeiss SEM metadata.
    Read OME-TIFF with invalid references to external files.
    Rewrite C LZW decoder (5x faster).
    Read corrupted LSM files missing EOI code in LZW stream.
2017.01.01
    Add option to append images to existing TIFF files.
    Read files without pages.
    Read S-FEG and Helios NanoLab tags created by FEI software.
    Allow saving Color Filter Array (CFA) images.
    Add info functions returning more information about TiffFile and TiffPage.
    Add option to read specific pages only.
    Remove maxpages argument (backwards incompatible).
    Remove test_tifffile function.
2016.10.28
    Pass 1944 tests.
    Improve detection of ImageJ hyperstacks.
    Read TVIPS metadata created by EM-MENU (by Marco Oster).
    Add option to disable using OME-XML metadata.
    Allow non-integer range attributes in modulo tags (by Stuart Berg).
2016.06.21
    Do not always memmap contiguous data in page series.
2016.05.13
    Add option to specify resolution unit.
    Write grayscale images with extra samples when planarconfig is specified.
    Do not write RGB color images with 2 samples.
    Reorder TiffWriter.save keyword arguments (backwards incompatible).
2016.04.18
    Pass 1932 tests.
    TiffWriter, imread, and imsave accept open binary file streams.
2016.04.13
    Correctly handle reversed fill order in 2 and 4 bps images (bug fix).
    Implement reverse_bitorder in C.
2016.03.18
    Fix saving additional ImageJ metadata.
2016.02.22
    Pass 1920 tests.
    Write 8 bytes double tag values using offset if necessary (bug fix).
    Add option to disable writing second image description tag.
    Detect tags with incorrect counts.
    Disable color mapping for LSM.
2015.11.13
    Read LSM 6 mosaics.
    Add option to specify directory of memory-mapped files.
    Add command line options to specify vmin and vmax values for colormapping.
2015.10.06
    New helper function to apply colormaps.
    Renamed is_palette attributes to is_indexed (backwards incompatible).
    Color-mapped samples are now contiguous (backwards incompatible).
    Do not color-map ImageJ hyperstacks (backwards incompatible).
    Towards reading Leica SCN.
2015.09.25
    Read images with reversed bit order (FillOrder is LSB2MSB).
2015.09.21
    Read RGB OME-TIFF.
    Warn about malformed OME-XML.
2015.09.16
    Detect some corrupted ImageJ metadata.
    Better axes labels for 'shaped' files.
    Do not create TiffTag for default values.
    Chroma subsampling is not supported.
    Memory-map data in TiffPageSeries if possible (optional).
2015.08.17
    Pass 1906 tests.
    Write ImageJ hyperstacks (optional).
    Read and write LZMA compressed data.
    Specify datetime when saving (optional).
    Save tiled and color-mapped images (optional).
    Ignore void bytecounts and offsets if possible.
    Ignore bogus image_depth tag created by ISS Vista software.
    Decode floating point horizontal differencing (not tiled).
    Save image data contiguously if possible.
    Only read first IFD from ImageJ files if possible.
    Read ImageJ 'raw' format (files larger than 4 GB).
    TiffPageSeries class for pages with compatible shape and data type.
    Try to read incomplete tiles.
    Open file dialog if no filename is passed on command line.
    Ignore errors when decoding OME-XML.
    Rename decoder functions (backwards incompatible).
2014.08.24
    TiffWriter class for incremental writing images.
    Simplify examples.
2014.08.19
    Add memmap function to FileHandle.
    Add function to determine if image data in TiffPage is memory-mappable.
    Do not close files if multifile_close parameter is False.
2014.08.10
    Pass 1730 tests.
    Return all extrasamples by default (backwards incompatible).
    Read data from series of pages into memory-mapped array (optional).
    Squeeze OME dimensions (backwards incompatible).
    Workaround missing EOI code in strips.
    Support image and tile depth tags (SGI extension).
    Better handling of STK/UIC tags (backwards incompatible).
    Disable color mapping for STK.
    Julian to datetime converter.
    TIFF ASCII type may be NULL separated.
    Unwrap strip offsets for LSM files greater than 4 GB.
    Correct strip byte counts in compressed LSM files.
    Skip missing files in OME series.
    Read embedded TIFF files.
2014.02.05
    Save rational numbers as type 5 (bug fix).
2013.12.20
    Keep other files in OME multi-file series closed.
    FileHandle class to abstract binary file handle.
    Disable color mapping for bad OME-TIFF produced by bio-formats.
    Read bad OME-XML produced by ImageJ when cropping.
2013.11.03
    Allow zlib compress data in imsave function (optional).
    Memory-map contiguous image data (optional).
2013.10.28
    Read MicroManager metadata and little-endian ImageJ tag.
    Save extra tags in imsave function.
    Save tags in ascending order by code (bug fix).
2012.10.18
    Accept file like objects (read from OIB files).
2012.08.21
    Rename TIFFfile to TiffFile and TIFFpage to TiffPage.
    TiffSequence class for reading sequence of TIFF files.
    Read UltraQuant tags.
    Allow float numbers as resolution in imsave function.
2012.08.03
    Read MD GEL tags and NIH Image header.
2012.07.25
    Read ImageJ tags.
    ...

Notes
-----
The API is not stable yet and might change between revisions.

Tested on little-endian platforms only.

Other Python packages and modules for reading (bio) scientific TIFF files:

*  `python-bioformats <https://github.com/CellProfiler/python-bioformats>`_
*  `Imread <https://github.com/luispedro/imread>`_
*  `PyLibTiff <https://github.com/pearu/pylibtiff>`_
*  `ITK <https://www.itk.org>`_
*  `PyLSM <https://launchpad.net/pylsm>`_
*  `PyMca.TiffIO.py <https://github.com/vasole/pymca>`_ (same as fabio.TiffIO)
*  `BioImageXD.Readers <http://www.bioimagexd.net/>`_
*  `Cellcognition.io <http://cellcognition.org/>`_
*  `pymimage <https://github.com/ardoi/pymimage>`_
*  `pytiff <https://github.com/FZJ-INM1-BDA/pytiff>`_

Acknowledgements
----------------
*   Egor Zindy, University of Manchester, for lsm_scan_info specifics.
*   Wim Lewis for a bug fix and some LSM functions.
*   Hadrien Mary for help on reading MicroManager files.
*   Christian Kliche for help writing tiled and color-mapped files.

References
----------
1)  TIFF 6.0 Specification and Supplements. Adobe Systems Incorporated.
    http://partners.adobe.com/public/developer/tiff/
2)  TIFF File Format FAQ. http://www.awaresystems.be/imaging/tiff/faq.html
3)  MetaMorph Stack (STK) Image File Format.
    http://support.meta.moleculardevices.com/docs/t10243.pdf
4)  Image File Format Description LSM 5/7 Release 6.0 (ZEN 2010).
    Carl Zeiss MicroImaging GmbH. BioSciences. May 10, 2011
5)  The OME-TIFF format.
    http://www.openmicroscopy.org/site/support/file-formats/ome-tiff
6)  UltraQuant(r) Version 6.0 for Windows Start-Up Guide.
    http://www.ultralum.com/images%20ultralum/pdf/UQStart%20Up%20Guide.pdf
7)  Micro-Manager File Formats.
    http://www.micro-manager.org/wiki/Micro-Manager_File_Formats
8)  Tags for TIFF and Related Specifications. Digital Preservation.
    http://www.digitalpreservation.gov/formats/content/tiff_tags.shtml
9)  ScanImage BigTiff Specification - ScanImage 2016.
    http://scanimage.vidriotechnologies.com/display/SI2016/
    ScanImage+BigTiff+Specification
10) CIPA DC-008-2016: Exchangeable image file format for digital still cameras:
    Exif Version 2.31.
    http://www.cipa.jp/std/documents/e/DC-008-Translation-2016-E.pdf

Examples
--------
>>> # write numpy array to TIFF file
>>> data = numpy.random.rand(4, 301, 219)
>>> imsave('temp.tif', data, photometric='minisblack')

>>> # read numpy array from TIFF file
>>> image = imread('temp.tif')
>>> numpy.testing.assert_array_equal(image, data)

>>> # iterate over pages and tags in TIFF file
>>> with TiffFile('temp.tif') as tif:
...     images = tif.asarray()
...     for page in tif.pages:
...         for tag in page.tags.values():
...             _ = tag.name, tag.value
...         image = page.asarray()

é    )ÚdivisionÚprint_functionNz
2018.06.15zrestructuredtext en)ÚimsaveÚimreadÚimshowÚmemmapÚTiffFileÚ
TiffWriterÚTiffSequenceÚ
FileHandleÚlazyattrÚnatural_sortedÚ
decode_lzwÚ	stripnullÚcreate_outputÚ	repeat_ndÚformat_sizeÚproductÚxml2dictc                 ó`  ‡ — t          |dd¦  «        }t          |d¦  «        }t          ‰ t          ¦  «        r/t          ˆ fd„dD ¦   «         ¦  «        rt	          j        ‰ ¦  «        Š ‰ st          d¦  «        ‚t          ‰ d¦  «        st          ‰ ¦  «        dk    r‰ d	         Š t          ‰ t          ¦  «        st          ‰ d¦  «        r4t          ‰ fi |¤Ž5 } |j	        di |¤Žcd
d
d
¦  «         S # 1 swxY w Y   d
S t          ‰ fi |¤Ž5 } |j	        di |¤Žcd
d
d
¦  «         S # 1 swxY w Y   d
S )a¢  Return image data from TIFF file(s) as numpy array.

    Refer to the TiffFile class and member functions for documentation.

    Parameters
    ----------
    files : str, binary stream, or sequence
        File name, seekable binary stream, glob pattern, or sequence of
        file names.
    kwargs : dict
        Parameters 'multifile' and 'is_ome' are passed to the TiffFile class.
        The 'pattern' parameter is passed to the TiffSequence class.
        Other parameters are passed to the asarray functions.
        The first image series is returned if no arguments are provided.

    Examples
    --------
    >>> # get image from first page
    >>> imsave('temp.tif', numpy.random.rand(3, 4, 301, 219))
    >>> im = imread('temp.tif', key=0)
    >>> im.shape
    (4, 301, 219)

    >>> # get images from sequence of files
    >>> ims = imread(['temp.tif', 'temp.tif'])
    >>> ims.shape
    (2, 3, 4, 301, 219)

    Ú	multifileÚis_omeÚpatternc              3   ó    •K  — | ]}|‰v V — Œ	d S ©N© )Ú.0ÚiÚfiless     €úJC:\Projects\Historical\venv\Lib\site-packages\imageio/plugins/_tifffile.pyú	<genexpr>zimread.<locals>.<genexpr>À  s'   øè è € Ð,FÐ,F¸A¨Q°%¨ZÐ,FÐ,FÐ,FÐ,FÐ,FÐ,Fó    ú?*úno files foundÚseeké   r   Nr   )Úparse_kwargsÚ
isinstanceÚ
basestringÚanyÚglobÚ
ValueErrorÚhasattrÚlenr	   Úasarrayr   )r   ÚkwargsÚkwargs_fileÚ
kwargs_seqÚtifÚimseqs   `     r    r   r   Ÿ  sç  ø€ õ< ˜v {°HÑ=Ô=€KÝ˜f iÑ0Ô0€Jå�%�Ñ$Ô$ð !­Ð,FÐ,FÐ,FÐ,FÀÐ,FÑ,FÔ,FÑ)FÔ)Fð !Ý”	˜%Ñ Ô ˆØð +ÝÐ)Ñ*Ô*Ð*Ý�5˜&Ñ!Ô!ð ¥c¨%¡j¤j°A¢o oØ�a”ˆå�%�Ñ$Ô$ð +­°°vÑ(>Ô(>ð +Ý�eÐ+Ð+˜{Ð+Ð+ð 	)¨sØ�3”;Ð(Ð( Ð(Ð(ð	)ð 	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð 	)ð 	)õ ˜%Ð.Ð. :Ð.Ð.ð 	+°%Ø �5”=Ð*Ð* 6Ð*Ð*ð	+ð 	+ð 	+ð 	+ñ 	+ô 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+øøøð 	+ð 	+ð 	+ð 	+ð 	+ð 	+s$   ÃC/Ã/C3Ã6C3Ä	D#Ä#D'Ä*D'ì      | c                 óú  — t          |dddd¦  «        }|€Ct          |¦  «        t          j        |¦  «        j        z  }t          j        |¦  «        j        }n)	 |j        }|j        j        }n# t          $ r d}d}Y nw xY w||k    r5d|vr1|                     dd¦  «        s|                     dd¦  «        sd	|d<   d|vr||d<   t          | fi |¤Ž5 }	 |	j
        |||fi |¤Žcddd¦  «         S # 1 swxY w Y   dS )
a
  Write numpy array to TIFF file.

    Refer to the TiffWriter class and member functions for documentation.

    Parameters
    ----------
    file : str or binary stream
        File name or writable binary stream, such as an open file or BytesIO.
    data : array_like
        Input image. The last dimensions are assumed to be image depth,
        height, width, and samples.
        If None, an empty array of the specified shape and dtype is
        saved to file.
        Unless 'byteorder' is specified in 'kwargs', the TIFF file byte order
        is determined from the data's dtype or the dtype argument.
    shape : tuple
        If 'data' is None, shape of an empty array to save to the file.
    dtype : numpy.dtype
        If 'data' is None, data-type of an empty array to save to the file.
    bigsize : int
        Create a BigTIFF file if the size of data in bytes is larger than
        this threshold and 'imagej' or 'truncate' are not enabled.
        By default, the threshold is 4 GB minus 32 MB reserved for metadata.
        Use the 'bigtiff' parameter to explicitly specify the type of
        file created.
    kwargs : dict
        Parameters 'append', 'byteorder', 'bigtiff', and 'imagej', are passed
        to TiffWriter(). Other parameters are passed to TiffWriter.save().

    Returns
    -------
    If the image data are written contiguously, return offset and bytecount
    of image data in the file.

    Examples
    --------
    >>> # save a RGB image
    >>> data = numpy.random.randint(0, 255, (256, 256, 3), 'uint8')
    >>> imsave('temp.tif', data, photometric='rgb')

    >>> # save a random array and metadata, using compression
    >>> data = numpy.random.rand(2, 5, 3, 301, 219)
    >>> imsave('temp.tif', data, compress=6, metadata={'axes': 'TZCYX'})

    ÚappendÚbigtiffÚ	byteorderÚimagejNr   FÚtruncateT)r'   r   ÚnumpyÚdtypeÚitemsizer9   ÚnbytesÚ	ExceptionÚgetr
   Úsave)
ÚfileÚdataÚshaper=   Úbigsizer0   ÚtifargsÚsizer9   r3   s
             r    r   r   Ï  s†  € õ\ ˜6 8¨Y¸ÀXÑNÔN€GØ€|Ý�u‰~Œ~¥¤¨EÑ 2Ô 2Ô ;Ñ;ˆÝ”K Ñ&Ô&Ô0ˆ	ˆ	ð	Ø”;ˆDØœ
Ô,ˆIˆIøÝð 	ð 	ð 	ØˆDØˆIˆIˆIð	øøøð 	ˆwŠˆØ˜WÐ$Ð$Ø—’˜X uÑ-Ô-ð %Ø18·²¸ZÈÑ1OÔ1Oð %ð "ˆ�	ÑØ˜'Ð!Ð!Ø(ˆ�Ñå	�DÐ	$Ð	$˜GÐ	$Ð	$ð 6¨ØˆsŒx˜˜e UÐ5Ð5¨fÐ5Ð5ð6ð 6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6ð 6ð 6s$   ÁA. Á.A?Á>A?ÃC0Ã0C4Ã7C4úr+c                 ó&  — |�M|�K|                      d||dt          j        ¬¦  «         t          | fi |¤Ž}|€t	          d¦  «        ‚|d         }nªt          | fi |¤Ž5 }	|�<|	j        |         }|j        st	          d¦  «        ‚|j        \  }}
|j	        }|j
        }n8|	j        |         }|j        €t	          d¦  «        ‚|j	        }|j
        }|j        }|	j        |j        z   }ddd¦  «         n# 1 swxY w Y   t          j        | ||||d¦  «        S )aT  Return memory-mapped numpy array stored in TIFF file.

    Memory-mapping requires data stored in native byte order, without tiling,
    compression, predictors, etc.
    If 'shape' and 'dtype' are provided, existing files will be overwritten or
    appended to depending on the 'append' parameter.
    Otherwise the image data of a specified page or series in an existing
    file will be memory-mapped. By default, the image data of the first page
    series is memory-mapped.
    Call flush() to write any changes in the array to the file.
    Raise ValueError if the image data in the file is not memory-mappable.

    Parameters
    ----------
    filename : str
        Name of the TIFF file which stores the array.
    shape : tuple
        Shape of the empty array.
    dtype : numpy.dtype
        Data-type of the empty array.
    page : int
        Index of the page which image data to memory-map.
    series : int
        Index of the page series which image data to memory-map.
    mode : {'r+', 'r', 'c'}, optional
        The file open mode. Default is to open existing file for reading and
        writing ('r+').
    kwargs : dict
        Additional parameters passed to imsave() or TiffFile().

    Examples
    --------
    >>> # create an empty TIFF file and write to memory-mapped image
    >>> im = memmap('temp.tif', shape=(256, 256), dtype='float32')
    >>> im[255, 255] = 1.0
    >>> im.flush()
    >>> im.shape, im.dtype
    ((256, 256), dtype('float32'))
    >>> del im

    >>> # memory-map image data in a TIFF file
    >>> im = memmap('temp.tif', page=0)
    >>> im[255, 255]
    1.0

    NT)rD   rE   r=   ÚreturnoffsetÚalignz"image data are not memory-mappabler   ÚC)ÚupdateÚTIFFÚALLOCATIONGRANULARITYr   r,   r	   ÚpagesÚis_memmappableÚis_contiguousrE   r=   ÚseriesÚoffsetr9   Úcharr<   r   )ÚfilenamerE   r=   ÚpagerT   Úmoder0   ÚresultrU   r3   Ú_s              r    r   r     s‡  € ð^ Ð˜UÐ.à�ŠØØØØÝÔ,ð 	ñ 	
ô 	
ð 	
õ ˜Ð+Ð+ FÐ+Ð+ˆØˆ>åÐAÑBÔBÐBØ˜”ˆˆõ �hÐ)Ð) &Ð)Ð)ð 	/¨SØÐØ”y ”�ØÔ*ð KÝ$Ð%IÑJÔJÐJØ Ô.‘	�˜Øœ
�Øœ
��àœ FÔ+�Ø”=Ð(Ý$Ð%IÑJÔJÐJØœ�Øœ�Øœ�Ø”M E¤JÑ.ˆEð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/õ  Œ<˜ %¨¨v°u¸cÑBÔBÐBs   ÁBC/Ã/C3Ã6C3c                   ó,   ‡ — e Zd ZdZdZd„ Zˆ fd„Zˆ xZS )r   z2Attribute whose value is computed on first access.©Úfuncc                 ó   — || _         d S r   r]   )Úselfr^   s     r    Ú__init__zlazyattr.__init__m  s   € ØˆŒ	ˆ	ˆ	r"   c                 ó  •— |€| S 	 |                       |¦  «        }n!# t          $ r}t          |¦  «        ‚d }~ww xY w|t          u r(t	          t          ||¦  «        | j         j        ¦  «        S t          || j         j        |¦  «         |S r   )r^   ÚAttributeErrorÚRuntimeErrorÚNotImplementedÚgetattrÚsuperÚ__name__Úsetattr)r`   ÚinstanceÚownerÚvalueÚeÚ	__class__s        €r    Ú__get__zlazyattr.__get__s  s—   ø€ àÐØˆKð	"Ø—I’I˜hÑ'Ô'ˆEˆEøÝð 	"ð 	"ð 	"Ý˜q‘/”/Ð!øøøøð	"øøøà•NÐ"Ð"Ý�5 ¨Ñ1Ô1°4´9Ô3EÑFÔFÐFÝ�˜$œ)Ô,¨eÑ4Ô4Ð4Øˆs   ‡ �
;§6¶;)rh   Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__ra   ro   Ú__classcell__)rn   s   @r    r   r   g  sT   ø€ € € € € Ø<Ð<ð €Iðð ð ðð ð ð ð ð ð ð ð r"   r   c                   óp   — e Zd ZdZdd„Zddddddddddddddddddi dd	fd
„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ ZdS )r
   aª  Write numpy arrays to TIFF file.

    TiffWriter instances must be closed using the 'close' method, which is
    automatically called when using the 'with' context manager.

    TiffWriter's main purpose is saving nD numpy array's as TIFF,
    not to create any possible TIFF format. Specifically, JPEG compression,
    SubIFDs, ExifIFD, or GPSIFD tags are not supported.

    Examples
    --------
    >>> # successively append images to BigTIFF file
    >>> data = numpy.random.rand(2, 5, 3, 301, 219)
    >>> with TiffWriter('temp.tif', bigtiff=True) as tif:
    ...     for i in range(data.shape[0]):
    ...         tif.save(data[i], compress=6, photometric='minisblack')

    FNc                 óì  ‡	— |�r3	 t          |dd¬¦  «        5 }|                     ¦   «         }	 t          |¦  «        5 Š	|dk    r*t          ˆ	fd„dD ¦   «         ¦  «        rt	          d¦  «        ‚‰	j        }‰	j        }‰	j        j        | _	        ddd¦  «         n# 1 swxY w Y   n1# t          $ r$}t	          d	t          |¦  «        z  ¦  «        ‚d}~ww xY w|                     |¦  «         n# |                     |¦  «         w xY w	 ddd¦  «         n# 1 swxY w Y   n# t          t          f$ r d
}Y nw xY w|dv rt          j        dk    rdnd}n|dvrt	          d|z  ¦  «        ‚|r|rt!          j        d¦  «         || _        t'          |¦  «        | _        d
| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _         d| _!        |r+d| _"        d| _#        d| _$        d| _%        d| _&        d| _'        n*d
| _"        d| _#        d| _$        d| _%        d| _&        d| _'        |r4t          |dd¬¦  «        | _(        | j(                             dd¦  «         dS t          |dd¬¦  «        | _(        | j(         )                    dd dœ|         ¦  «         |r3| j(         )                    tU          j+        |d!z   d"dd¦  «        ¦  «         n0| j(         )                    tU          j+        |dz   d#¦  «        ¦  «         | j(                             ¦   «         | _	        | j(         )                    tU          j+        || j&        z   d¦  «        ¦  «         dS )$aÅ  Open a TIFF file for writing.

        An empty TIFF file is created if the file does not exist, else the
        file is overwritten with an empty TIFF file unless 'append'
        is true. Use bigtiff=True when creating files larger than 4 GB.

        Parameters
        ----------
        file : str, binary stream, or FileHandle
            File name or writable binary stream, such as an open file
            or BytesIO.
        bigtiff : bool
            If True, the BigTIFF format is used.
        byteorder : {'<', '>', '=', '|'}
            The endianness of the data in the file.
            By default, this is the system's native byte order.
        append : bool
            If True and 'file' is an existing standard TIFF file, image data
            and tags are appended to the file.
            Appending data may corrupt specifically formatted TIFF files
            such as LSM, STK, ImageJ, NIH, or FluoView.
        imagej : bool
            If True, write an ImageJ hyperstack compatible file.
            This format can handle data types uint8, uint16, or float32 and
            data shapes up to 6 dimensions in TZCYXS order.
            RGB images (S=3 or S=4) must be uint8.
            ImageJ's default byte order is big-endian but this implementation
            uses the system's native byte order by default.
            ImageJ does not support BigTIFF format or LZMA compression.
            The ImageJ file format is undocumented.

        Úrbr   )rY   rH   Úforcec              3   ó>   •K  — | ]}t          ‰d |z   ¦  «        V — ŒdS ©Úis_N)rf   )r   Úar3   s     €r    r!   z&TiffWriter.__init__.<locals>.<genexpr>½  sE   øè è € ð 
9ð 
9à$%õ !(¨¨U°Q©YÑ 7Ô 7ð
9ð 
9ð 
9ð 
9ð 
9ð 
9r"   )ÚlsmÚstkr:   ÚnihÚfluoviewÚmicromanagerzfile contains metadataNzcannot append to file: %sF)Nú=ú|Úlittleú<ú>©r…   r†   zinvalid byteorder %sz#writing incompatible BigTIFF ImageJTé   é   ÚQÚ8sé   é   ÚHÚIÚ4szr+bé   Úwbó   IIó   MMÚHHHé+   é*   ),r   Útellr	   r*   r,   r9   Ú
is_bigtiffrQ   Únext_page_offsetÚ
_ifdoffsetr@   Ústrr%   ÚIOErrorÚFileNotFoundErrorÚsysÚwarningsÚwarnÚ
_byteorderÚboolÚ_imagejÚ	_truncateÚ	_metadataÚ	_colormapÚ_descriptionoffsetÚ_descriptionlenÚ_descriptionlenoffsetÚ_tagsÚ_shapeÚ
_datashapeÚ
_datadtypeÚ_dataoffsetÚ_databytecountsÚ_tagoffsetsÚ_bigtiffÚ_offsetsizeÚ_tagsizeÚ_tagnoformatÚ_offsetformatÚ_valueformatÚ_fhÚwriteÚstructÚpack)
r`   rC   r8   r9   r7   r:   ÚfhÚposrm   r3   s
            @r    ra   zTiffWriter.__init__•  sI  ø€ ðB ñ 	ðÝ ¨4°aÐ8Ñ8Ô8ð %¸BØŸ'š'™)œ)�Cð%Ý% b™\œ\ð I¨SØ%¨Ò0Ð0µSð 
9ð 
9ð 
9ð 
9ð*"ð
9ñ 
9ô 
9ñ 
6ô 
6Ð0õ '1Ð1IÑ&JÔ&JÐ JØ(+¬˜IØ&)¤n˜GØ.1¬iÔ.H˜DœOðIð Ið Iñ Iô Ið Ið Ið Ið Ið Ið Iøøøð Ið Ið Ið Iøøõ  %ð Oð Oð OÝ(Ð)DÅsÈ1ÁvÄvÑ)MÑNÔNÐNøøøøðOøøøð Ÿš ™œ˜˜ø˜Ÿš ™œ˜˜øøø˜ð-%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %øøõ. Õ.Ð/ð ð ð Ø���ðøøøð Ð(Ð(Ð(Ý"œ}°Ò8Ð8˜˜¸cˆIˆIØ˜jÐ(Ð(ÝÐ3°iÑ?Ñ@Ô@Ð@Øð 	A�gð 	AÝŒMÐ?Ñ@Ô@Ð@à#ˆŒÝ˜F‘|”|ˆŒØˆŒØˆŒØˆŒà"#ˆÔØ ˆÔØ%&ˆÔ"ØˆŒ
ØˆŒØˆŒØˆŒØˆÔØ#ˆÔØˆÔàð 	%Ø ˆDŒMØ ˆDÔØˆDŒMØ #ˆDÔØ!$ˆDÔØ $ˆDÔÐà!ˆDŒMØ ˆDÔØˆDŒMØ #ˆDÔØ!$ˆDÔØ $ˆDÔàð 	KÝ! $¨U¸Ð;Ñ;Ô;ˆDŒHØŒH�MŠM˜!˜QÑÔÐÐÐå! $¨T¸Ð:Ñ:Ô:ˆDŒHØŒH�NŠN ¨UÐ3Ð3°IÔ>Ñ?Ô?Ð?Øð AØ”—’�vœ{¨9°uÑ+<¸bÀ!ÀQÑGÔGÑHÔHÐHÐHà”—’�vœ{¨9°s©?¸BÑ?Ô?Ñ@Ô@Ð@à"œhŸmšm™oœoˆDŒOØŒH�NŠN�6œ; y°4Ô3EÑ'EÀqÑIÔIÑJÔJÐJÐJÐJs�   †D ˜D®B%½ABÂB%ÂB	ÂB%Â B	Â!B%Â$C,Â%
CÂ/CÃCÃC,ÃDÃ,DÄDÄD ÄDÄD ÄDÄD ÄD5Ä4D5Té   r   ztifffile.pyr   c                 óÒ/  ‡T‡U‡V‡W‡X‡Y‡Z‡[— | j         }| j        ŠT|€B|rt          d¦  «        ‚|}t          j        |¦  «                             ‰T¦  «        }|j        }nWt          j        |‰T|j        j        z   d¦  «        }|j        dk    rt          d¦  «        ‚|j	        }|j        }|j        j        }|o|j
        }|dk    }|rS|d         dk    rdnd	}t          |d|…         ¦  «        }||         d
z  r|||         d
z  dz   z  }n&|||         d
z  z  }nt          |¦  «        |j        z  }t          |
¦  «        | _        | j        �r|rC| j        dd…         |k    s0| j        |k    s%|r| j        s|st          j        || j        ¦  «        sb|                      ¦   «          |                      ¦   «          d| _        d| _        d| _        d| _        d| _        | j        rt          d¦  «        ‚nd| j        d         dz   f|z   | _        |sI|                     ¦   «         }|€|                     |¦  «         n|                     |¦  «         |r||fS dS |}| j        }| j        Š[| j        ŠW| j        ŠX| j         } tB          j"        j#        }!tB          j"        j$        }"tB          j"        j%        }#tB          j"        j&        }$tB          j'        j(        }%tB          j'        j)        }&|�tU          tB          j"        |¦  «        }|rtU          tB          j'        |¦  «        }|sd}d}'d}nštW          |tX          tZ          f¦  «        r|\  }}(nJtW          |t\          ¦  «        r3dt]          |¦  «        }(}d|(cxk    rdk    sn t          d|z  ¦  «        ‚nd}(| /                    ¦   «         }tU          tB          j0        |¦  «        }'| j        r§|dv rt          d¦  «        ‚|rtc          j2        d¦  «         d}d})|dvrt          d|z  ¦  «        ‚|r||"k    nd}*|dvrd}*tg          ||*¦  «        }+|+d         dv r|"}|dvrt          d|z  ¦  «        ‚n|€|!}d}||&k    rt          d¦  «        ‚|*r|%nd}|rh|(€tB          j4        |'         \  ŠV}(n$tB          j4        |'         \  ŠV},t]          |(¦  «        }(|r#|j5        dvrt          d|z  ¦  «        ‚|(fˆVfd„	}n|(fˆVfd„	}|�Z|dvrt          d¦  «        ‚t          j        |‰Tdz   ¬ ¦  «        }|j	        d!d"|j        d
z  z  fk    rt          d#¦  «        ‚|| _        |r†tY          d$„ |dd!…         D ¦   «         ¦  «        }tm          |¦  «        d!k    })tm          |¦  «        d"k     s/|d         d%z  s$|d	         d%z  sto          d&„ |D ¦   «         ¦  «        rt          d'¦  «        ‚nd(}d})tq          |||"k    rd!nd"¦  «        }|}tm          |¦  «        }-d}.d}/|)r|-d!k     rd})|�|$}d}|€¡|!}|rtB          j"        j9        }n‹||%k    r|-d"k    r|d         dv r|"}nr||&k    r(|)r|-d!k    r|d)         dv r|"}nW|-d"k    r|d*         dv r|"}nD|-d"k    r|d         dv r|"}n1| j        r|!}n'|)r|-d!k    r|d)         dv r|"}n|-d"k    r|d*         dv r|"}|rtm          |¦  «        |)rd!nd"k    rd}|!}||"k    r»tm          |¦  «        d!k     rt          d+¦  «        ‚tm          |¦  «        d,k     rd})|€9|d         dv r|%}n,||)rd)nd*         dv r|&}n|d         ||)rd)nd*         k    r|&}n|%}||%k    rd-||)rd)nd*d…         z   }|d         }.nd.||)rd)nd*d…         z   d/z   }|d         }.|.d!k    r|.d!z
  }/�n(||#k    rTtm          |¦  «        d"k    rt          d0¦  «        ‚d})d}d-|d	d…         z   d/z   }d1d2„ |D ¦   «         vrt          d3¦  «        ‚nÎ|rYtm          |¦  «        |)rd!nd"k    rB||%k    rd-||)rd)nd*d…         z   }|d         }.nd.||)rd)nd*d…         z   d/z   }|d         }.|.dz
  }/nsd}tm          |¦  «        d"k    r5|d         dk    r)|dd…         }tm          |¦  «        d"k    r|d         dk    °)tm          |¦  «        d!k     rd})d-||)rd*nd	d…         z   d/z   }tm          |¦  «        d4v sJ ‚tm          |¦  «        d5k    r|dd"…         d/z   |d"d…         z   }|d         dk    r5t          |¦  «        t          |dd…         ¦  «        z  }0|0f|dd…         z   }|}|�| :                    |¦  «        }|r|)sd|d	         |d         f}||$k    r/|.dk    s|/s|d         dk    s|d         dk    rt          d6¦  «        ‚||"k    r|.d"k    rt          d7¦  «        ‚|rÔ|rt          d8¦  «        ‚|rt          d9¦  «        ‚|d:vrt          d;tw          |¦  «        z  ¦  «        ‚t[          |¦  «        }|d	         d
z  r|d	         d
z  dz   |d	<   n|d	         d
z  |d	<   tY          |¦  «        }|t          |¦  «        k    sJ ‚|�/t          j<        |d	¬<¦  «        }|d	         |j	        d	         k    sJ ‚tz          j>        d         d=k    rt~          nd>„ ŠUg ŠZ|rd?nd@}1tB          j@        |1dAz            }2tB          j@        |1dBz            }3|3| _A        ˆTfdC„ŠYdwˆUˆWˆXˆYˆZˆ[fdD„	}4dxdF„}5|r |4dGdHd|dI¬J¦  «         |si n| B                    ¦   «         | _C        | j        r$t‰          ||d         dv | j        dufi | jC        ¤Ž}n?|s|i k    r5| j        r| jC         E                    dI¬K¦  «         t�          |fi | jC        ¤Ž}nd}|r9t�          |dL¦  «        }|dMz  }tm          |¦  «        | _H         |4dGdHd|dI¬J¦  «         |r |4dNdHd|dI¬J¦  «         |€|  I                    ¦   «         } |4dOdHd |jJ        dP¦  «        dI¬J¦  «          |4dQdd|'¦  «         |r |4dRddd"¦  «          |4dSdTd|d	         ¦  «          |4dUdTd|d*         ¦  «         |r\ |4dVdTd|d         ¦  «          |4dWdTd|d	         ¦  «         |d         dk    r( |4dXdTd|d)         ¦  «          |4dYdTd|d         ¦  «          |4dZdTdd¦  «         |s$dd"d!d[d\œ|j5                 }6 |4d]d|.|6f|.z  ¦  «          |4d^dd|jK        ¦  «         |� |4d_d|j        |¦  «          |4d`dd|.¦  «         |rnL|r4|.dk    r. |4dadd|jK        ¦  «          |4dbd|.|j        d
z  f|.z  ¦  «         n |4dbdd|j        d
z  ¦  «         |/r,||"k    r|/dk    r |4dcddd¦  «         n |4dcd|/dd|/z  ¦  «         |�� |4dedfd |5|d         ¦  «        ¦  «          |4dgdfd |5|d         ¦  «        ¦  «         tm          |¦  «        d"k    r'|d"         }7|7€dntU          tB          jL        |7¦  «        }7n| j        rd}7nd"}7 |4dhdd|7¦  «         n1| j        s* |4dedfddi¦  «          |4dgdfddi¦  «          |4dhddd¦  «         |rt›          |‰T¦  «        D ]}8 |4|8Ž  Œ| }|rë|d"         |d         z   dz
  |d         z  |d!         |d         z   dz
  |d         z  |d,         |d"         z   dz
  |d"         z  f}9t          |9¦  «        |d         z  }:t          |¦  «        |d         z  |j        z  g|:z  }; |4|2‰W|:|;¦  «          |4|3‰W|:dg|:z  ¦  «         |ot          |9¦  «        dk    }|s t          jN        ||d         fz   |¬ ¦  «        }<�n-|r”|r"t          |d"d…         ¦  «        g|d         z  };n)t          |d"d…         ¦  «        |j        z  g|d         z  }; |4|2‰W|d         |;¦  «          |4|3‰W|d         dg|d         z  ¦  «          |4djdTd|d*         ¦  «         n—t          |d	d…         ¦  «        |j        z  }=|€dk|=z  }|dk     rd}n||d*         k    r|d*         } |4djdTd|¦  «         |d*         |z   dz
  |z  }>|>|d         z  }>dg|>z  }; |4|2‰W|>dg|>z  ¦  «          |4|3‰W|>dg|>z  ¦  «         |€|st          dl¦  «        ‚|D ]}8 |4|8Ž  ŒtŸ          ‰Zdm„ ¬n¦  «        ŠZ| jP        s1| j        s*|                     ¦   «         |z   dok    rt          dp¦  «        ‚t£          |rdn|d         ¦  «        D �]£}?|                     ¦   «         }@|@d"z  r| R                    dq¦  «         |@dz  }@| S                    | jT        ¦  «         | R                     ‰Y‰W|@¦  «        ¦  «         | S                    |@¦  «         | R                     ‰Y|tm          ‰Z¦  «        ¦  «        ¦  «         |                     ¦   «         }A| R                    dr U                    ds„ ‰ZD ¦   «         ¦  «        ¦  «         |                     ¦   «         | _T        | R                     ‰Y‰Wd¦  «        ¦  «         t­          ‰Z¦  «        D �]\  }B}C|Cd"         rÿ|                     ¦   «         }@|@d"z  r| R                    dq¦  «         |@dz  }@| S                    |A|B| z  z   ‰Xz   d,z   ¦  «         | R                     ‰Y‰W|@¦  «        ¦  «         | S                    |@¦  «         |Cd         |3k    r|@}DnM|Cd         |2k    r|@}En>|Cd         dtk    r2|Cd"          W                    du¦  «        r|@| _        |A|B| z  z   d,z   | _        | R                    |Cd"         ¦  «         �Œ|                     ¦   «         }F|	|F|	z  z
  }G| S                    |Gd¦  «         |F|Gz  }F|r0|€|                     |¦  «         �nq|                     |¦  «         �nZ|�rÆ|€ |                     |:|;d         z  ¦  «         �n5d}H||?         D �]—}It£          |9d         ¦  «        D �]}}Jt£          |9d         ¦  «        D �]c}Kt£          |9d"         ¦  «        D �]I}Lt±          |d         |d"         |J|d         z  z
  ¦  «        }Mt±          |d         |d!         |K|d         z  z
  ¦  «        }Nt±          |d"         |d,         |L|d"         z  z
  ¦  «        }Od|<|Md…|Nd…|Od…f<   |I|J|d         z  |J|d         z  |Mz   …|K|d         z  |K|d         z  |Nz   …|L|d"         z  |L|d"         z  |Oz   …f         |<d|M…d|N…d|O…f<   |r9 ||<¦  «        }8| R                    |8¦  «         tm          |8¦  «        |;|H<   |Hdz  }H�Œ |                     |<¦  «         | Y                    ¦   «          �ŒK�Œe�Œ�Œ™n‘|r�|j	        d"         dk    sJ ‚|d*         |z   dz
  |z  }>d}H||?         D ]`}It£          |>¦  «        D ]N}P|Id|P|z  |Pdz   |z  …f         }Q ||Q¦  «        }Q| R                    |Q¦  «         tm          |Q¦  «        |;|H<   |Hdz  }HŒOŒa|                     ¦   «         }@t­          ‰Z¦  «        D �]4\  }B}C|Cd         |3k    rŠ|Cd"         rA| S                    |D¦  «         |F}R|;D ]&}S| R                     ‰Y‰W|R¦  «        ¦  «         |R|Sz  }RŒ'Œ[| S                    |A|B| z  z   ‰Xz   d,z   ¦  «         | R                     ‰Y‰W|F¦  «        ¦  «         Œœ|Cd         |2k    rŒ|rˆ|Cd"         r:| S                    |E¦  «         |;D ]!}S| R                     ‰Y‰W|S¦  «        ¦  «         Œ"nF| S                    |A|B| z  z   ‰Xz   d,z   ¦  «         | R                     ‰Y‰W|;d         ¦  «        ¦  «          n�Œ6| S                    |@¦  «         | Y                    ¦   «          |?dk    rdv„ ‰ZD ¦   «         ŠZ�Œ¥|| _Z        d/|z   | _        || _        |F| _[        |;| _\        |r‰Z| _        |r|Ft»          |;¦  «        fS dS dS )yaý  Write numpy array and tags to TIFF file.

        The data shape's last dimensions are assumed to be image depth,
        height (length), width, and samples.
        If a colormap is provided, the data's dtype must be uint8 or uint16
        and the data values are indices into the last dimension of the
        colormap.
        If 'shape' and 'dtype' are specified, an empty array is saved.
        This option cannot be used with compression or multiple tiles.
        Image data are written uncompressed in one strip per plane by default.
        Dimensions larger than 2 to 4 (depending on photometric mode, planar
        configuration, and SGI mode) are flattened and saved as separate pages.
        The SampleFormat and BitsPerSample tags are derived from the data type.

        Parameters
        ----------
        data : numpy.ndarray or None
            Input image array.
        shape : tuple or None
            Shape of the empty array to save. Used only if 'data' is None.
        dtype : numpy.dtype or None
            Data-type of the empty array to save. Used only if 'data' is None.
        returnoffset : bool
            If True and the image data in the file is memory-mappable, return
            the offset and number of bytes of the image data in the file.
        photometric : {'MINISBLACK', 'MINISWHITE', 'RGB', 'PALETTE', 'CFA'}
            The color space of the image data.
            By default, this setting is inferred from the data shape and the
            value of colormap.
            For CFA images, DNG tags must be specified in 'extratags'.
        planarconfig : {'CONTIG', 'SEPARATE'}
            Specifies if samples are stored contiguous or in separate planes.
            By default, this setting is inferred from the data shape.
            If this parameter is set, extra samples are used to store grayscale
            images.
            'CONTIG': last dimension contains samples.
            'SEPARATE': third last dimension contains samples.
        tile : tuple of int
            The shape (depth, length, width) of image tiles to write.
            If None (default), image data are written in strips.
            The tile length and width must be a multiple of 16.
            If the tile depth is provided, the SGI ImageDepth and TileDepth
            tags are used to save volume data.
            Unless a single tile is used, tiles cannot be used to write
            contiguous files.
            Few software can read the SGI format, e.g. MeVisLab.
        contiguous : bool
            If True (default) and the data and parameters are compatible with
            previous ones, if any, the image data are stored contiguously after
            the previous one. Parameters 'photometric' and 'planarconfig'
            are ignored. Parameters 'description', datetime', and 'extratags'
            are written to the first page of a contiguous series only.
        align : int
            Byte boundary on which to align the image data in the file.
            Default 16. Use mmap.ALLOCATIONGRANULARITY for memory-mapped data.
            Following contiguous writes are not aligned.
        truncate : bool
            If True, only write the first page including shape metadata if
            possible (uncompressed, contiguous, not tiled).
            Other TIFF readers will only be able to read part of the data.
        compress : int or 'LZMA', 'ZSTD'
            Values from 0 to 9 controlling the level of zlib compression.
            If 0 (default), data are written uncompressed.
            Compression cannot be used to write contiguous files.
            If 'LZMA' or 'ZSTD', LZMA or ZSTD compression is used, which is
            not available on all platforms.
        rowsperstrip : int
            The number of rows per strip used for compression.
            Uncompressed data are written in one strip per plane.
        predictor : bool
            If True, apply horizontal differencing to integer type images
            before compression.
        colormap : numpy.ndarray
            RGB color values for the corresponding data value.
            Must be of shape (3, 2**(data.itemsize*8)) and dtype uint16.
        description : str
            The subject of the image. Must be 7-bit ASCII. Cannot be used with
            the ImageJ format. Saved with the first page only.
        datetime : datetime
            Date and time of image creation in '%Y:%m:%d %H:%M:%S' format.
            If None (default), the current date and time is used.
            Saved with the first page only.
        resolution : (float, float[, str]) or ((int, int), (int, int)[, str])
            X and Y resolutions in pixels per resolution unit as float or
            rational numbers. A third, optional parameter specifies the
            resolution unit, which must be None (default for ImageJ),
            'INCH' (default), or 'CENTIMETER'.
        software : str
            Name of the software used to create the file. Must be 7-bit ASCII.
            Saved with the first page only.
        metadata : dict
            Additional meta data to be saved along with shape information
            in JSON or ImageJ formats in an ImageDescription tag.
            If None, do not write a second ImageDescription tag.
            Strings must be 7-bit ASCII. Saved with the first page only.
        ijmetadata : dict
            Additional meta data to be saved in application specific
            IJMetadata and IJMetadataByteCounts tags. Refer to the
            imagej_metadata_tags function for valid keys and values.
            Saved with the first page only.
        extratags : sequence of tuples
            Additional tags as [(code, dtype, count, value, writeonce)].

            code : int
                The TIFF tag Id.
            dtype : str
                Data type of items in 'value' in Python struct format.
                One of B, s, H, I, 2I, b, h, i, 2i, f, d, Q, or q.
            count : int
                Number of data values. Not used for string or byte string
                values.
            value : sequence
                'Count' values compatible with 'dtype'.
                Byte strings must contain count values of dtype packed as
                binary data.
            writeonce : bool
                If True, the tag is written to the first page only.

        Nz!cannot save compressed empty filerM   r   zcannot save empty arrayú?éÿÿÿÿr&   éþÿÿÿrˆ   Fz+ImageJ does not support non-contiguous dataÚADOBE_DEFLATEé	   zinvalid compression level %s)ÚLZMAÚZSTDz-ImageJ cannot handle LZMA or ZSTD compressionz&not writing description to ImageJ fileÚBHhfz$ImageJ does not support data type %sÚB©é   rŒ   z,ImageJ does not support data type %s for RGBz%ImageJ does not support planar imagesÚiuz!prediction not implemented for %sc           	      óŽ   •— t          j        | d¬¦  «        }t          j        |d| ddd d …f         d¬¦  «        }  ‰| |¦  «        S )NrÂ   ©Úaxisr   .)r<   ÚdiffÚinsert)rD   ÚlevelrÏ   Ú
compressors      €r    Úcompressz!TiffWriter.save.<locals>.compress#  sO   ø€ å œ: d°Ð4Ñ4Ô4�DÝ œ<¨¨a°°c¸1¸a¸a¸a°i´ÀrÐJÑJÔJ�DØ%˜: d¨EÑ2Ô2Ð2r"   c                 ó   •—  ‰| |¦  «        S r   r   )rD   rÑ   rÒ   s     €r    rÓ   z!TiffWriter.save.<locals>.compress+  s   ø€ Ø%˜: d¨EÑ2Ô2Ð2r"   ÚBHz#invalid data dtype for palette moderŽ   ©r=   rÊ   r‘   zinvalid color map shapec              3   ó4   K  — | ]}t          |¦  «        V — Œd S r   ©Úint©r   r   s     r    r!   z"TiffWriter.save.<locals>.<genexpr>9  s(   è è € Ð2Ð2 A�˜Q™œÐ2Ð2Ð2Ð2Ð2Ð2r"   r¾   c              3   ó"   K  — | ]
}|d k     V — ŒdS ©r&   Nr   rÚ   s     r    r!   z"TiffWriter.save.<locals>.<genexpr>?  s&   è è € Ð+Ð+ �q˜1’uÐ+Ð+Ð+Ð+Ð+Ð+r"   zinvalid tile shaper   éüÿÿÿéýÿÿÿznot a RGB(A) imagerŒ   )rÁ   r&   ©rÁ   ©r&   zinvalid CFA imageéÆ  c              3   ó&   K  — | ]}|d          V — ŒdS ©r   Nr   )r   Úets     r    r!   z"TiffWriter.save.<locals>.<genexpr>†  s&   è è € Ð7Ð7 r˜R œUÐ7Ð7Ð7Ð7Ð7Ð7r"   z#must specify DNG tags for CFA image)é   é   rå   z#invalid data shape for palette modez#not a RGB image (samplesperpixel=2)z$cannot save compressed bilevel imagezcannot save tiled bilevel image©r   r&   zcannot save bilevel image as %srÍ   Ú2c                 óP   — t          | t          ¦  «        rt          | d¦  «        n| S )NÚascii)r(   rœ   Úbytes©Úxs    r    ú<lambda>z!TiffWriter.save.<locals>.<lambda>Ã  s$   € µ¸A½sÑ1CÔ1CÐJ�E ! WÑ-Ô-Ð-È€ r"   ÚTileÚStripÚ
ByteCountsÚOffsetsc                 ó.   •— t          j        ‰| z   g|¢R Ž S r   ©rº   r»   ©ÚfmtÚvalr9   s     €r    r»   zTiffWriter.save.<locals>.packÌ  ó   ø€ Ý”;˜y¨3™Ð5°Ð5Ð5Ð5Ð5r"   c           
      ór  •— t          t          j                             | | ¦  «        ¦  «        } 	 t          j        |         }n # t
          $ r t          d|z  ¦  «        ‚w xY w|}|dk    rF ‰
|¦  «        dz   }t          |¦  «        x}}|                     d¦  «        }|dk     r|}n|dz  }|f}n\t          |t          ¦  «        rGt          j        |¦  «        }t          |¦  «        |z  rt          d¦  «        ‚t          |¦  «        |z  }t          |¦  «        dk    r"|t          |d d…         ¦  «        z  }|d         } ‰d	| |¦  «         ‰‰|¦  «        g}d }	t          j        |¦  «        |z  ‰k    rÌt          |t          ¦  «        r!|                      ‰‰|¦  «        ¦  «         �n]|dk    rYt          |t          t          t           j        f¦  «        r|d         }|                      ‰‰ ‰||¦  «        ¦  «        ¦  «         nþ|                      ‰‰ ‰t%          |¦  «        |z   g|¢R Ž ¦  «        ¦  «         nÇ|                      ‰‰d¦  «        ¦  «         t          |t          ¦  «        r|}	n�t          |t           j        ¦  «        r4|j        |k    sJ ‚|j        j        |k    sJ ‚|                     ¦   «         }	nBt          |t          t          f¦  «        r ‰t%          |¦  «        |z   g|¢R Ž }	n ‰||¦  «        }	‰                     | d
                     |¦  «        |	|f¦  «         d S )Nzunknown dtype %sÚsó    s     r   r&   zinvalid packed binary datarÁ   ÚHHr"   )rÙ   rO   Ú	TAG_NAMESrA   ÚDATA_DTYPESÚKeyErrorr,   r.   Úfindr(   rë   rº   Úcalcsizer7   ÚtupleÚlistr<   Úndarrayrœ   rH   r=   rV   ÚtostringÚjoin)Úcoder=   Úcountrl   Ú	writeonceÚtifftypeÚrawcountÚdtsizeÚifdentryÚifdvalueÚbytestrÚoffsetformatÚ
offsetsizer»   ÚtagsÚvalueformats             €€€€€€r    ÚaddtagzTiffWriter.save.<locals>.addtagÏ  s]  ø€ õ •t”~×)Ò)¨$°Ñ5Ô5Ñ6Ô6ˆDð=ÝÔ+¨EÔ2��øÝð =ð =ð =Ý Ð!3°eÑ!;Ñ<Ô<Ð<ð=øøøàˆHà˜Š|ˆ|à˜ ™œ¨Ñ.�Ý#& u¡:¤:Ð-�˜Ø Ÿ:š: gÑ.Ô.�Ø˜a’<�<Ø$�H�Hà ‘M�HØ˜��Ý˜E¥5Ñ)Ô)ð -åœ¨Ñ/Ô/�Ý�u‘:”: Ñ&ð CÝ$Ð%AÑBÔBÐBÝ˜E™
œ
 fÑ,�Ý�5‰zŒz˜AŠ~ˆ~Ø�˜U 3 B 3œZ™œÑ(�Ø˜bœ	�Ø˜˜T 4¨Ñ2Ô2°D°D¸ÀxÑ4PÔ4PÐQˆHØˆHÝŒ˜uÑ%Ô%¨Ñ-°Ò;Ð;å˜e¥UÑ+Ô+ð YØ—O’O D D¨°eÑ$<Ô$<Ñ=Ô=Ð=Ñ=Ø˜a’Z�ZÝ! %­%µµu´}Ð)EÑFÔFð )Ø % a¤˜Ø—O’O D D¨°d°d¸5À%Ñ6HÔ6HÑ$IÔ$IÑJÔJÐJÐJà—O’O D D¨°d°d½3¸u¹:¼:ÈÑ;MÐ6VÐPUÐ6VÐ6VÐ6VÑ$WÔ$WÑXÔXÐXÐXð —’   \°1Ñ 5Ô 5Ñ6Ô6Ð6Ý˜e¥UÑ+Ô+ð 	2Ø$�H�HÝ ¥u¤}Ñ5Ô5ð 2Ø œ:¨Ò.Ð.Ð.Ð.Ø œ;Ô+¨uÒ4Ð4Ð4Ð4Ø$Ÿ~š~Ñ/Ô/�H�HÝ ­­t }Ñ5Ô5ð 2Ø#˜t¥C¨¡J¤J°Ñ$6Ð?¸Ð?Ð?Ð?�H�Hà#˜t E¨5Ñ1Ô1�HØ�KŠK˜˜sŸxšx¨Ñ1Ô1°8¸YÐGÑHÔHÐHÐHÐHs   °A ÁA é@B c                 óÒ   — ddl m} 	 |                     | ¦  «        }n(# t          $ r  || d         | d         ¦  «        }Y nw xY w|                     |¦  «        }|j        |j        fS )z> "Return nominator and denominator from float or two integers.r   ©ÚFractionr&   )Ú	fractionsr  Ú
from_floatÚ	TypeErrorÚlimit_denominatorÚ	numeratorÚdenominator)ÚargÚmax_denominatorr  Úfs       r    Úrationalz!TiffWriter.save.<locals>.rational  sˆ   € à*Ð*Ð*Ð*Ð*Ð*ð-Ø×'Ò'¨Ñ,Ô,��øÝð -ð -ð -Ø�H˜S œV S¨¤VÑ,Ô,���ð-øøøà×#Ò# OÑ4Ô4ˆAØ”; ¤Ð-Ð-s   ˆ ž"AÁAÚImageDescriptionrú   T)r	  )Ú	truncatedrê   s@                                                                   ÚSoftwareÚDateTimez%Y:%m:%d %H:%M:%SÚCompressionÚ	PredictorÚ
ImageWidthr�   ÚImageLengthÚ	TileWidthÚ
TileLengthÚ
ImageDepthÚ	TileDepthÚNewSubfileTyperæ   )Úur   r!  ÚcÚSampleFormatÚPhotometricInterpretationÚColorMapÚSamplesPerPixelÚPlanarConfigurationÚBitsPerSampleÚExtraSamples©r   ÚXResolutionÚ2IÚYResolutionÚResolutionUnit©r&   r&   ÚRowsPerStripi   z&cannot write non-contiguous empty filec                 ó   — | d         S ©Nr   r   rì   s    r    rî   z!TiffWriter.save.<locals>.<lambda>¥  s
   € ¨!¨A¬$€ r"   ©Úkeyéÿÿÿz%data too large for standard TIFF filerû   r"   c              3   ó&   K  — | ]}|d          V — ŒdS rÜ   r   ©r   Úts     r    r!   z"TiffWriter.save.<locals>.<genexpr>º  s&   è è € Ð1Ð1 q˜a œdÐ1Ð1Ð1Ð1Ð1Ð1r"   é  s       c                 ó"   — g | ]}|d          °
|‘ŒS rß   r   )r   Útags     r    ú
<listcomp>z#TiffWriter.save.<locals>.<listcomp>   s!   € Ð;Ð;Ð; °3°r´7Ð;˜Ð;Ð;Ð;r"   ©F)r  )^r¸   r¢   r,   r<   r=   ÚnewbyteorderrV   r/   rH   rE   Úisnativer   r>   r£   r¥   r­   r®   r«   Úarray_equalr§   Ú_write_remaining_pagesÚ_write_image_descriptionr¨   rª   r¤   r˜   Úwrite_emptyÚwrite_arrayrµ   r·   r¶   r³   r´   rO   ÚPHOTOMETRICÚ
MINISBLACKÚRGBÚCFAÚPALETTEÚPLANARCONFIGÚCONTIGÚSEPARATEÚenumargr(   r  r  rÙ   ÚupperÚCOMPRESSIONr    r¡   Úimagej_shapeÚ
COMPESSORSÚkindr.   r*   Ú
reshape_ndÚ
MINISWHITEÚreshaperœ   ÚpackbitsrŸ   Úversionrë   rý   r±   Úcopyr¦   Úimagej_descriptionrN   Újson_descriptionÚ	str2bytesr©   Ú_nowÚstrftimerl   ÚRESUNITÚimagej_metadata_tagsÚemptyÚsortedr²   Úranger¹   r%   r›   r  Ú	enumerateÚendswithÚminÚflushr¬   r¯   r°   Úsum)\r`   rD   rE   r=   rK   ÚphotometricÚplanarconfigÚtileÚ
contiguousrL   r;   rÓ   ÚrowsperstripÚ	predictorÚcolormapÚdescriptionÚdatetimeÚ
resolutionÚsoftwareÚmetadataÚ
ijmetadataÚ	extratagsr¼   Ú	datashapeÚ	datadtypeÚdatadtypecharÚbilevelÚindexÚdatasizerU   Úinput_shapeÚtagnoformatÚtagsizerU  rV  rW  rX  rZ  r[  ÚcompresstagÚcompresslevelÚvolumeÚijrgbÚijshaper[   ÚndimÚsamplesperpixelÚextrasamplesÚs0Ústrip_or_tileÚtagbytecountsÚtag_offsetsr  r"  ÚsampleformatÚunitrG  ÚtilesÚnumtilesÚstripbytecountsÚchunkÚrowsizeÚ	numstripsÚ	pageindexr½   Ú
tag_offsetÚtagindexrJ  ÚstripoffsetsoffsetÚstrip_bytecounts_offsetÚdata_offsetÚskipÚ
stripindexÚplaneÚtzÚtyÚtxÚc0Úc1Úc2r   ÚstripÚstrip_offsetrH   r9   r  rÒ   r  r  r»   r  r  s\                                                                                       @@@@@@@@r    rB   zTiffWriter.save  s�  øøøøøøøø€ ð` ŒXˆØ”Oˆ	àˆ<Øð FÝ Ð!DÑEÔEÐEØˆIÝœ EÑ*Ô*×7Ò7¸	ÑBÔBˆIØ%œNˆMˆMå”=  y°4´:´?Ñ'BÀCÑHÔHˆDØŒy˜AŠ~ˆ~Ý Ð!:Ñ;Ô;Ð;Øœ
ˆIØœ
ˆIØ œJœOˆMà#Ð:¨	Ô(:ˆØ 3Ò&ˆØð 	?Ø# Bœ-¨!Ò+Ð+�B�B°ˆEÝ˜y¨¨%¨Ô0Ñ1Ô1ˆHØ˜Ô !Ñ#ð 2Ø˜I eÔ,°Ñ1°AÑ5Ñ5��à˜I eÔ,°Ñ1Ñ1��å˜yÑ)Ô)¨IÔ,>Ñ>ˆHõ ˜h™œˆŒØŒ?ñ 	àðà”? 1 2 2Ô&¨)Ò3Ð3Ø”? iÒ/Ð/Øð 0Ø!%¤ð 0àð 0õ Ô(¨°4´>ÑBÔBð 0ð ×+Ò+Ñ-Ô-Ð-Ø×-Ò-Ñ/Ô/Ð/Ø!&�”Ø*+�Ô'Ø-.�Ô*Ø"&�”Ø!%�”Ø”<ð TÝ$Ð%RÑSÔSÐSðTð $(¤?°1Ô#5¸Ñ#9Ð";¸iÑ"G�”Øð 	àŸWšW™YœY�FØ�|ØŸš xÑ0Ô0Ð0Ð0àŸš tÑ,Ô,Ð,Ø#ð 0Ø% xÐ/Ð/Ø�FàˆØÔ'ˆØÔ'ˆØÔ)ˆØÔ%ˆ
Ø”-ˆåÔ%Ô0ˆ
ÝÔÔ"ˆÝÔÔ"ˆÝÔ"Ô*ˆÝÔ"Ô)ˆÝÔ$Ô-ˆð Ð"Ý!¥$Ô"2°KÑ@Ô@ˆKØð 	DÝ"¥4Ô#4°lÑCÔCˆLØð 	>ØˆHØˆKØˆIˆIå˜(¥U­D MÑ2Ô2ð %Ø*2Ñ'�˜-˜-Ý˜H¥cÑ*Ô*ð %Ø*9½3¸x¹=¼=˜-�Ø˜MÐ.Ð.Ò.Ð.¨QÒ.Ð.Ð.Ð.Ý$Ð%CÀhÑ%NÑOÔOÐOð /ð !%�Ø—~’~Ñ'Ô'ˆHÝ!¥$Ô"2°HÑ=Ô=ˆKð Œ<ð 	9ØÐ+Ð+Ð+Ý Ð!PÑQÔQÐQØð #Ý”ÐFÑGÔGÐGØ"�ØˆFØ FÐ*Ð*Ý Ð!GÈ-Ñ!WÑXÔXÐXØ*5Ð?�K 3Ò&Ð&¸4ˆEØ CÐ'Ð'Ø�Ý" 9¨eÑ4Ô4ˆGØ�rŒ{˜fÐ$Ð$Ø!�Ø ¨Ð+Ð+Ý$ð"Ø$1ñ2ñô ð ð ,ð
 Ð$Ø(�Ø#�Ø˜xÒ'Ð'Ý Ð!HÑIÔIÐIà).Ð8˜v˜v°D�ð ð 	3ØÐ$Ý,0¬O¸KÔ,HÑ)�
˜M˜Må $¤°Ô <‘�
˜AÝ # MÑ 2Ô 2�Øð 3Ø”>¨Ð-Ð-Ý$Ð%HÈ9Ñ%TÑUÔUÐUà)6ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð *7ð 3ð 3ð 3ð 3ð 3ð 3ð ÐØ DÐ(Ð(Ý Ð!FÑGÔGÐGÝ”} X°YÀ±_ÐEÑEÔEˆHØŒ~ ! Q¨9Ô+=ÀÑ+AÑ%BÐ!CÒCÐCÝ Ð!:Ñ;Ô;Ð;Ø%ˆDŒNð ð 	ÝÐ2Ð2¨¨b¨q¨b¬Ð2Ñ2Ô2Ñ2Ô2ˆDÝ˜‘Y”Y !’^ˆFå�D‘	”	˜A’�Ø˜”8˜b‘=ð à˜”8˜b‘=ð õ Ð+Ð+ dÐ+Ñ+Ô+Ñ+Ô+ð õ
 !Ð!5Ñ6Ô6Ð6ð ð ˆDØˆFõ ˜y¨{¸cÒ/AÐ/A¨!¨!ÀqÑIÔIˆ	ØˆÝ�9‰~Œ~ˆàˆØˆØð 	�d˜Q’h�hØˆFØÐØ!ˆKØˆLØÐØ$ˆKØð "Ý"Ô.Ô9��Ø Ò'Ð'Ø˜!’8�8  b¤	¨VÐ 3Ð 3Ø"%�KøØ Ò)Ð)Øð &˜d Qšh˜h¨5°¬9¸Ð+>Ð+>Ø"%�K�KØ˜A’X�X %¨¤)¨vÐ"5Ð"5Ø"%�KøØ˜’�˜e Bœi¨6Ð1Ð1Ø!��Ø”ð "Ø(��Øð "˜D 1šH˜H¨¨r¬°fÐ)<Ð)<Ø!��Ø˜’�˜e Bœi¨6Ð1Ð1Ø!�Øð 	%�C ™JœJ°Ð+=¨1¨1¸AÒ>Ð>ØˆLØ$ˆKØ˜#ÒÐÝ�5‰zŒz˜AŠ~ˆ~Ý Ð!5Ñ6Ô6Ð6Ý�5‰zŒz˜AŠ~ˆ~Ø�ØÐ#Ø˜”9 Ð&Ð&Ø#)�L�LØ Ð/˜2˜2¨RÔ0°FÐ:Ð:Ø#+�L�LØ˜2”Y ¨VÐ'; r r¸Ô!<Ò<Ð<Ø#+�L�Là#)�LØ˜vÒ%Ð%Ø# e°6Ð-A¨R¨R¸rÐ,DÐ,DÔ&EÑE�	Ø"+¨B¤-��à! E°Ð+?¨2¨2¸RÐ*BÐ*BÔ$CÑCÀdÑJ�	Ø"+¨A¤,�Ø Ò"Ð"Ø.°Ñ2�ùØ˜CÒÐÝ�5‰zŒz˜QŠˆÝ Ð!4Ñ5Ô5Ð5ØˆFØˆLØ %¨¨¨¤*Ñ,¨tÑ3ˆIØÐ7Ð7¨YÐ7Ñ7Ô7Ð7Ð7Ý Ð!FÑGÔGÐGð 8àð 	I�c %™jœj°Ð,>¨A¨A¸QÒ?Ð?Ø˜vÒ%Ð%Ø# e°6Ð-A¨R¨R¸rÐ,DÐ,DÔ&EÑE�	Ø"+¨B¤-��à! E°Ð+?¨2¨2¸RÐ*BÐ*BÔ$CÑCÀdÑJ�	Ø"+¨A¤,�Ø*¨QÑ.ˆLˆLàˆLå�e‘*”*˜q’.�. U¨2¤Y°!¢^ ^Ø˜c˜r˜cœ
�õ �e‘*”*˜q’.�. U¨2¤Y°!¢^ ^å�5‰zŒz˜AŠ~ˆ~Ø�Ø %¨vÐ)=¨¨¸2Ð(@Ð(@Ô"AÑAÀDÑHˆIõ �9‰~Œ~ Ð'Ð'Ð'Ð'Ýˆy‰>Œ>˜QÒÐØ! " 1 "œ¨Ñ,¨y¸¸¸¬}Ñ<ˆIØ�QŒ<˜2ÒÐÝ˜Ñ%Ô%­°¸1¸2¸2´Ñ)?Ô)?Ñ?ˆBØ˜ 	¨!¨"¨"¤Ñ-ˆIØˆØÐØ—<’< Ñ&Ô&ˆDàð 	+˜ð 	+Ø�t˜B”x  b¤Ð*ˆDà˜'Ò!Ð!Ø !Ò#Ð# |Ð#°u¸Q´xÀ1²}°}ÈÈbÌ	ÐUVÊÈÝ Ð!FÑGÔGÐGà˜#ÒÐ /°QÒ"6Ð"6ÝÐBÑCÔCÐCàð 	7Øð IÝ Ð!GÑHÔHÐHØð DÝ Ð!BÑCÔCÐCØ &Ð(Ð(Ý Ð!BÅSÈÑEUÔEUÑ!UÑVÔVÐVÝ˜Y™œˆIØ˜Œ}˜qÑ ð 3Ø )¨"¤°Ñ 2°QÑ 6�	˜"‘�à )¨"¤°Ñ 2�	˜"‘Ý˜iÑ(Ô(ˆIØ�w yÑ1Ô1Ò1Ð1Ð1Ð1ØÐÝ”~ d°Ð4Ñ4Ô4�Ø  ”}¨¬
°2¬Ò6Ð6Ð6Ð6õ Œ{˜1Œ~ Ò$Ð$õ ˆEàJÐJð 	ð
 ˆà"&Ð3˜˜¨GˆÝœ }°|Ñ'CÔDˆÝ”n ]°YÑ%>Ô?ˆØ&ˆÔð	6ð 	6ð 	6ð 	6ð 	6ð6	Ið 6	Ið 6	Ið 6	Ið 6	Ið 6	Ið 6	Ið 6	Ið 6	Ið 6	Ið 6	Iðp		.ð 		.ð 		.ð 		.ð ð 	LàˆFÐ% s¨A¨{ÀdÐKÑKÔKÐKð $,Ð@˜˜°·²±´ˆŒØŒ<ð 	Ý,ØØ�b”	˜VÐ#Ø” dÐ*ðð ð ”.ð	ð ˆKˆKð ð 	˜ Rš˜ØŒ~ð 6Ø”×%Ò%°Ð%Ñ5Ô5Ð5Ý*¨;ÐIÐI¸$¼.ÐIÐIˆKˆKàˆKØð 	Lõ $ K°Ñ9Ô9ˆKØ˜:Ñ%ˆKÝ#& {Ñ#3Ô#3ˆDÔ ØˆFÐ% s¨A¨{ÀdÐKÑKÔKÐKàð 	AØˆF�:˜s A x¸4Ð@Ñ@Ô@Ð@ØÐØ—y’y‘{”{ˆHØˆØ˜˜QÐ 1 Ô 1Ð2EÑ FÔ FÐRVð	
ñ 	
ô 	
ð 	
ð 	ˆˆ}˜c 1 kÑ2Ô2Ð2Øð 	+ØˆF�;  Q¨Ñ*Ô*Ð*Øˆˆ|˜S ! U¨2¤YÑ/Ô/Ð/Øˆˆ}˜c 1 e¨B¤iÑ0Ô0Ð0Øð 	5ØˆF�;  Q¨¨R¬Ñ1Ô1Ð1ØˆF�<  a¨¨b¬Ñ2Ô2Ð2Ø�AŒw˜Š{ˆ{Ø��| S¨!¨U°2¬YÑ7Ô7Ð7Ø��{ C¨¨D°¬GÑ4Ô4Ð4ØˆÐ  a¨Ñ+Ô+Ð+Øð 	Ø!"¨°¸Ð;Ð;¸I¼NÔKˆLØˆFØ  _°|°oÈÑ6Wñô ð ð 	ˆÐ*¨C°°KÔ4EÑFÔFÐFØÐØˆF�:˜s H¤M°8Ñ<Ô<Ð<ØˆÐ  # q¨/Ñ:Ô:Ð:Øð 	DØØð 		D˜o°Ò1Ð1ØˆFÐ(¨#¨q°,Ô2DÑEÔEÐEØˆFØØØØÔ# aÑ'Ð)¨OÑ;ñ	ô ð ð ð ˆF�? C¨¨IÔ,>ÀÑ,BÑCÔCÐCØð 	OØ˜cÒ!Ð! l°aÒ&7Ð&7Ø��~ s¨A¨qÑ1Ô1Ð1Ð1à��~ s¨L¸$ÀÑ:MÑNÔNÐNØÐ!ØˆF�= $¨¨8¨8°J¸q´MÑ+BÔ+BÑCÔCÐCØˆF�= $¨¨8¨8°J¸q´MÑ+BÔ+BÑCÔCÐCÝ�:‰Œ Ò"Ð"Ø! !”}�Ø ˜L�q�q­gµd´lÀDÑ.IÔ.I��Ø”ð Ø��à�ØˆFÐ# S¨!¨TÑ2Ô2Ð2Ð2Ø”ð 	0ØˆF�= $¨¨6Ñ2Ô2Ð2ØˆF�= $¨¨6Ñ2Ô2Ð2ØˆFÐ# S¨!¨QÑ/Ô/Ð/Øð 	Ý)¨*°iÑ@Ô@ð ð �Ø�˜�
�
�
à!�\ˆ
Øð +	Jð �q”˜D œGÑ# aÑ'¨D°¬GÑ3Ø�q”˜D œGÑ# aÑ'¨D°¬GÑ3Ø�q”˜D œGÑ# aÑ'¨D°¬GÑ3ðˆEõ
 ˜u‘~”~¨¨a¬Ñ0ˆHå˜‘”  b¤	Ñ)¨IÔ,>Ñ>ðàñˆOð ˆF�= ,°¸/ÑJÔJÐJØˆF�; ¨h¸¸¸h¹ÑGÔGÐGØ#Ð;­°©¬¸!Ò(;ˆJØð Jåœ D¨E°"¬I¨<Ñ$7¸yÐIÑIÔI�ùØð 	Jàð Ý#*¨9°Q°R°R¬=Ñ#9Ô#9Ð":¸UÀ1¼XÑ"E��å#*¨9°Q°R°R¬=Ñ#9Ô#9¸IÔ<NÑ#NÐ"OÐRWØôSñ #�ð ˆF�= ,°°a´¸/ÑJÔJÐJØˆF�; ¨e°A¬h¸¸¸eÀA¼h¹ÑGÔGÐGØˆF�> 3¨¨5°¬9Ñ5Ô5Ð5Ð5õ ˜e B C CœjÑ)Ô)¨IÔ,>Ñ>ˆGØÐ#Ø$¨Ñ/�Ø˜aÒÐØ ��Ø  b¤	Ò)Ð)Ø$ Rœy�ØˆF�> 3¨¨<Ñ8Ô8Ð8à˜rœ \Ñ1°AÑ5¸,ÑFˆIØ˜˜qœÑ!ˆIØ ˜c I™oˆOØˆF�= ,°	¸A¸3À¹?ÑKÔKÐKØˆF�; ¨i¸!¸¸y¹ÑIÔIÐIàˆ< 
ˆ<ÝÐEÑFÔFÐFð ð 	ð 	ˆAØˆF�AˆJˆJˆJõ
 �d  Ð/Ñ/Ô/ˆà”ð 	F ¤ð 	F°B·G²G±I´IÀÑ4HÈ9Ò4TÐ4TÝÐDÑEÔEÐEõ  JÐ<˜q˜q°E¸!´HÑ=Ô=ð t	<ñ t	<ˆIà—'’'‘)”)ˆCØ�Q‰wð à—’˜‘”�Ø�q‘�Ø�GŠG�D”OÑ$Ô$Ð$Ø�HŠH�T�T˜,¨Ñ,Ô,Ñ-Ô-Ð-Ø�GŠG�C‰LŒLˆLð �HŠH�T�T˜+¥s¨4¡y¤yÑ1Ô1Ñ2Ô2Ð2ØŸš™œˆJØ�HŠH�S—X’XÐ1Ð1¨DÐ1Ñ1Ô1Ñ1Ô1Ñ2Ô2Ð2Ø Ÿgšg™iœiˆDŒOØ�HŠH�T�T˜,¨Ñ*Ô*Ñ+Ô+Ð+õ "+¨4¡¤ð %ñ %‘�˜#Ø�q”6ð %ØŸ'š'™)œ)�CØ˜Q‘wð !àŸš ™œ˜Ø˜q™˜Ø—G’G˜J¨°GÑ);Ñ;¸jÑHÈ1ÑLÑMÔMÐMØ—H’H˜T˜T ,°Ñ4Ô4Ñ5Ô5Ð5Ø—G’G˜C‘L”L�LØ˜1”v Ò,Ð,Ø-0Ð*Ð*Ø˜Qœ =Ò0Ð0Ø25Ð/Ð/Ø˜Qœ 3š˜¨3¨q¬6¯?ª?¸;Ñ+GÔ+G˜à25˜Ô/Ø5?À(ÈWÑBTÑ5TÐWXÑ5X˜Ô2Ø—H’H˜S œVÑ$Ô$Ð$ùð Ÿ'š'™)œ)ˆKØ˜;¨Ñ.Ñ.ˆDØ�GŠG�D˜!ÑÔÐØ˜4ÑˆKØð *(Ø�<Ø—N’N 8Ñ,Ô,Ð,Ñ,à—N’N 4Ñ(Ô(Ð(Ñ(Øñ %(Ø�<Ø—N’N 8¨o¸aÔ.@Ñ#@ÑAÔAÐAÑAà!"�JØ!% i¤ð 3ñ 3˜Ý"'¨¨a¬¡/¤/ð 3ñ 3˜BÝ&+¨E°!¬H¡o¤oð 3ñ 3 Ý*/°°a´©/¬/ð !3ñ !3 BÝ),¨T°!¬W°e¸A´hÀÀdÈ1ÄgÁÑ6MÑ)NÔ)N BÝ),¨T°!¬W°e¸A´hÀÀdÈ1ÄgÁÑ6MÑ)NÔ)N BÝ),¨T°!¬W°e¸A´hÀÀdÈ1ÄgÁÑ6MÑ)NÔ)N BØ;< E¨"¨#¨#¨r¨s¨s°B°C°C¨-Ñ$8Ø;@Ø(*¨T°!¬W©°r¸DÀ¼G±|ÀbÑ7HÐ(HØ(*¨T°!¬W©°r¸DÀ¼G±|ÀbÑ7HÐ(HØ(*¨T°!¬W©°r¸DÀ¼G±|ÀbÑ7HÐ(Hð)Jô<& E¨#¨2¨#¨s°¨s°C°R°C¨-Ñ$8ð
 (0ð %3Ø,4¨H°U©O¬O¨Ø(*¯ª°©¬¨ÝFIÈ!ÁfÄf¨¸
Ñ(CØ(2°a©¨
©
à(*¯ª°uÑ(=Ô(=Ð(=Ø(*¯ª©
¬
¨
©
ñ#!3ñ3ñ3ð3ð* ð (à”z !”}¨Ò)Ð)Ð)Ð)Ø" 2œY¨Ñ5¸Ñ9¸lÑJ�	Ø�
Ø! )œ_ð (ð (�EÝ" 9Ñ-Ô-ð (ð (˜Ø % a¨¨\Ñ)9¸QÀ¹UÀlÑ<RÐ)RÐ&RÔ S˜Ø ( ¨¡¤˜ØŸš ™œ˜Ý69¸%±j´j˜¨
Ñ3Ø" a™˜
˜
ð(ð —'’'‘)”)ˆCÝ!*¨4¡¤ð ñ ‘�˜#Ø�q”6˜[Ò(Ð(Ø˜1”vð BØŸšÐ 2Ñ3Ô3Ð3Ø'2˜Ø$3ð 1ð 1˜DØŸHšH T T¨,¸Ñ%EÔ%EÑFÔFÐFØ(¨DÑ0˜L˜Lð1ð Ÿš 
¨X¸Ñ-?Ñ ?À*Ñ LÈqÑ PÑQÔQÐQØŸš   l°KÑ!@Ô!@ÑAÔAÐAÐAØ˜”V˜}Ò,Ð,Øð MØ˜qœ6ð MØŸGšGÐ$;Ñ<Ô<Ð<Ø(7ð Cð C Ø "§¢¨¨¨l¸DÑ)AÔ)AÑ BÔ BÐ BÐ BðCð ŸGšG J°¸GÑ1CÑ$CÀjÑ$PÐSTÑ$TÑUÔUÐUØŸHšH T T¨,¸ÈÔ8JÑ%KÔ%KÑLÔLÐLØ�Eñ -ð �GŠG�C‰LŒLˆLØ�HŠH‰JŒJˆJð ˜AŠ~ˆ~Ø;Ð; tÐ;Ñ;Ô;�ùàˆŒØ Ñ,ˆŒØ#ˆŒØ&ˆÔØ.ˆÔàð 	9àˆDŒJàð 9Ø"¥C¨Ñ$8Ô$8Ð8Ð8ð	9ð 	9ð9ð 9r"   c                 ó‚	  ‡— | j         r| j        rdS | j        }|                     ¦   «         }|dz  r|                     d¦  «         |dz  }| j        Š| j        }| j        }| j        }| j	        }| j
        }t          | j        ¦  «        }| j        d         | j        d         z  dz
  }	ˆfd„}
t          j        ¦   «         }|                      |
|t#          | j         ¦  «        ¦  «        ¦  «         |                     ¦   «         }|                     d                     d„ | j         D ¦   «         ¦  «        ¦  «         |                     ¦   «         }|                      |
|d¦  «        ¦  «         t'          | j         ¦  «        D �]'\  }}|||z  z   |z   d	z   }|d         rö|                     ¦   «         }|dz  r|                     d¦  «         |dz  }|                     |¦  «         	 |                      |
|||z   ¦  «        ¦  «         nC# t*          $ r6 | j        rt/          j        d
¦  «         d| _        Y  dS t3          d¦  «        ‚w xY w|                     |¦  «         |                     |d         ¦  «         |d         | j        k    r|}|}�Œ|d         | j        k    rd}|}�Œ)|                     ¦   «         dz  r|                     d¦  «         |                     ¦   «         }| j        sQ||                     ¦   «         |	z  z   dk    r3| j        rt/          j        d
¦  «         d| _        dS t3          d¦  «        ‚t9          |	¦  «        D �]N}|                     ¦   «         }|                     | j        ¦  «         |                      |
||¦  «        ¦  «         |                     |¦  «         ||z   | _        ||z  }|€5|                     |¦  «         |                      |
||¦  «        ¦  «         n||                     |¦  «         |                      |
|||z   ¦  «        ¦  «         |                     |¦  «         |}| j        D ]&}|                      |
||¦  «        ¦  «         ||z  }Œ'|                     |                     ¦   «         ¦  «         �ŒPd| _         d| _        d| _
        d| _        dS )z(Write outstanding IFDs and tags to file.Nr‘   rû   r&   r   c                 ó.   •— t          j        ‰| z   g|¢R Ž S r   rô   rõ   s     €r    r»   z/TiffWriter._write_remaining_pages.<locals>.packB  rø   r"   r"   c              3   ó&   K  — | ]}|d          V — ŒdS rÜ   r   rF  s     r    r!   z4TiffWriter._write_remaining_pages.<locals>.<genexpr>J  s&   è è € Ð4Ð4 A˜1˜Qœ4Ð4Ð4Ð4Ð4Ð4Ð4r"   rŒ   ztruncating ImageJ fileTz#data too large for non-BigTIFF filel    ÿ ) r«   r¥   r¸   r˜   r¹   r¢   r¶   r³   rµ   r´   r¯   rv  r°   r¬   r­   ÚioÚBytesIOr.   r  rr  r%   r@   r¤   r    r¡   r,   r±   r²   rq  r›   Úgetvaluer®   )r`   r¼   Úfhposr  r  rŒ  r�  Ú
dataoffsetÚpagedatasizeÚpagenor»   ÚifdÚ	tagoffsetÚ	ifdoffsetr¤  rJ  Úoffset2valuer½   Ústripoffset2offsetÚstripoffset2valuer[   ÚstripoffsetrH   r9   s                          @r    rP  z!TiffWriter._write_remaining_pages/  sã  ø€ àŒzð 	˜Tœ^ð 	ØˆFàŒXˆØ—’‘	”	ˆØ�1‰9ð 	Ø�HŠH�U‰OŒOˆOØ�Q‰JˆEØ”Oˆ	ØÔ)ˆØÔ%ˆ
ØÔ'ˆØ”-ˆØÔ%ˆ
Ý˜4Ô/Ñ0Ô0ˆØ”˜Q” $¤/°!Ô"4Ñ4°qÑ8ˆð	6ð 	6ð 	6ð 	6ð 	6õ
 Œj‰lŒlˆØ�	Š	�$�$�{¥C¨¬
¡O¤OÑ4Ô4Ñ5Ô5Ð5Ø—H’H‘J”Jˆ	Ø�	Š	�#—(’(Ð4Ð4¨¬Ð4Ñ4Ô4Ñ4Ô4Ñ5Ô5Ð5Ø—H’H‘J”Jˆ	Ø�	Š	�$�$�| QÑ'Ô'Ñ(Ô(Ð(å& t¤zÑ2Ô2ð 	1ñ 	1‰MˆH�cØ$ x°'Ñ'9Ñ9¸JÑFÈÑJˆLØ�1Œvð 1Ø—h’h‘j”j�Ø˜‘7ð Ø—I’I˜eÑ$Ô$Ð$Ø˜1‘H�CØ—’˜Ñ&Ô&Ð&ðLØ—I’I˜d˜d <°°u±Ñ=Ô=Ñ>Ô>Ð>Ð>øÝ ð Lð Lð LØ”|ð Ý œÐ&>Ñ?Ô?Ð?Ø)-˜œØ˜˜˜Ý$Ð%JÑKÔKÐKðLøøøð —’˜‘”�Ø—	’	˜#˜aœ&Ñ!Ô!Ð!Ø�q”6˜TÔ-Ò-Ð-à)5Ð&Ø(+Ð%ùØ�Q”˜4Ô+Ò+Ð+à%)Ð"Ø$0Ð!ùà�8Š8‰:Œ:˜‰>ð 	Ø�IŠI�eÑÔÐð �gŠg‰iŒiˆØŒ}ð 	D  s§x¢x¡z¤z°FÑ':Ñ!:¸[Ò!HÐ!HØŒ|ð Ý”Ð6Ñ7Ô7Ð7Ø!%�”Ø�ÝÐBÑCÔCÐCõ �v‘”ð 	%ñ 	%ˆAà—'’'‘)”)ˆCØ�GŠG�D”OÑ$Ô$Ð$Ø�HŠH�T�T˜,¨Ñ,Ô,Ñ-Ô-Ð-Ø�GŠG�C‰LŒLˆLØ! I™oˆDŒOà˜,Ñ&ˆJØ!Ð)Ø—’Ð*Ñ+Ô+Ð+Ø—	’	˜$˜$˜|¨ZÑ8Ô8Ñ9Ô9Ð9Ð9à—’Ð+Ñ,Ô,Ð,Ø—	’	˜$˜$˜|¨SÐ3DÑ-DÑEÔEÑFÔFÐFØ—’Ð*Ñ+Ô+Ð+Ø(�Ø Ô0ð (ð (�DØ—I’I˜d˜d <°Ñ=Ô=Ñ>Ô>Ð>Ø 4Ñ'�K�Kà�HŠH�S—\’\‘^”^Ñ$Ô$Ð$Ñ$àˆŒ
ØˆŒØˆÔØ#ˆÔÐÐs   Ç("HÈ,IÈ;Ic                 ó  — | j         r| j         d         dk    s| j        dk    rdS | j        du}| j        r)| j        d         dv }t          | j         ||fi | j        ¤Ž}nt          | j         fi | j        ¤Ž}|                     d¦  «        }|d| j	        dz
  …         }| j
                             ¦   «         }| j
                             | j        ¦  «         | j
                             |¦  «         | j
                             | j        ¦  «         | j
                             t          j        | j        | j        z   t'          |¦  «        dz   ¦  «        ¦  «         | j
                             |¦  «         d| _        d| _        d| _	        dS )z(Write meta data to ImageDescription tag.r   r&   NrÁ   rÉ   úutf-8)r­   r¨   r§   r¤   r¬   rh  r¦   ri  Úencoder©   r¸   r˜   r%   r¹   rª   rº   r»   r¢   r¶   r.   )r`   ÚcolormappedÚisrgbr~  r½   s        r    rQ  z#TiffWriter._write_image_description“  s�  € ð ”ð	àŒ˜qÔ! QÒ&Ð&ØÔ&¨!Ò+Ð+àˆFà”n¨DÐ0ˆØŒ<ð 	NØ”K ”O vÐ-ˆEÝ,Ø” ¨ðð Ø7;´~ðð ˆKˆKõ +¨4¬?ÐMÐM¸d¼nÐMÐMˆKð "×(Ò(¨Ñ1Ô1ˆØ!Ð"< DÔ$8¸1Ñ$<Ð"<Ô=ˆØŒh�mŠm‰oŒoˆØŒ�Š�dÔ-Ñ.Ô.Ð.ØŒ�Š�{Ñ#Ô#Ð#ØŒ�Š�dÔ0Ñ1Ô1Ð1ØŒ�ŠÝŒK˜œ¨$Ô*<Ñ<½cÀ+Ñ>NÔ>NÐQRÑ>RÑSÔSñ	
ô 	
ð 	
ð 	Œ�Š�cÑÔÐà"#ˆÔØ%&ˆÔ"Ø ˆÔÐÐr"   c                 ó>   — t           j                              ¦   «         S )zReturn current date and time.)r  Únow©r`   s    r    rk  zTiffWriter._nowµ  s   € åÔ ×$Ò$Ñ&Ô&Ð&r"   c                 ó–   — | j         s|                      ¦   «          |                      ¦   «          | j                             ¦   «          dS )z,Write remaining pages and close file handle.N)r¥   rP  rQ  r¸   ÚcloserË  s    r    rÍ  zTiffWriter.close¹  sH   € àŒ~ð 	*Ø×'Ò'Ñ)Ô)Ð)Ø×%Ò%Ñ'Ô'Ð'ØŒ�ŠÑÔÐÐÐr"   c                 ó   — | S r   r   rË  s    r    Ú	__enter__zTiffWriter.__enter__À  ó   € Øˆr"   c                 ó.   — |                       ¦   «          d S r   ©rÍ  ©r`   Úexc_typeÚ	exc_valueÚ	tracebacks       r    Ú__exit__zTiffWriter.__exit__Ã  ó   € Ø�
Š
‰Œˆˆˆr"   )FNFF)rh   rp   rq   rr   ra   rB   rP  rQ  rk  rÍ  rÏ  r×  r   r"   r    r
   r
   �  sô   € € € € € ðð ð&qKð qKð qKð qKðj ØØØØØØØØØØØØØØØØØØØØð-e9ð e9ð e9ð e9ðNa$ð a$ð a$ðH !ð  !ð  !ðD'ð 'ð 'ðð ð ðð ð ðð ð ð ð r"   r
   c                   óÊ  — e Zd ZdZ	 	 	 	 	 d3d„Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	d„ Z
d4d
„Ze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„ Zd5d„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d0„ ¦   «         Z/ed1„ ¦   «         Z0ed2„ ¦   «         Z1dS )6r	   a»  Read image and metadata from TIFF file.

    TiffFile instances must be closed using the 'close' method, which is
    automatically called when using the 'with' context manager.

    Attributes
    ----------
    pages : TiffPages
        Sequence of TIFF pages in file.
    series : list of TiffPageSeries
        Sequences of closely related TIFF pages. These are computed
        from OME, LSM, ImageJ, etc. metadata or based on similarity
        of page properties such as shape, dtype, and compression.
    byteorder : '>', '<'
        The endianness of data in the file.
        '>': big-endian (Motorola).
        '>': little-endian (Intel).
    is_flag : bool
        If True, file is of a certain format.
        Flags are: bigtiff, movie, shaped, ome, imagej, stk, lsm, fluoview,
        nih, vista, 'micromanager, metaseries, mdgel, mediacy, tvips, fei,
        sem, scn, svs, scanimage, andor, epics, pilatus, qptiff.

    All attributes are read-only.

    Examples
    --------
    >>> # read image array from TIFF file
    >>> imsave('temp.tif', numpy.random.rand(5, 301, 219))
    >>> with TiffFile('temp.tif') as tif:
    ...     data = tif.asarray()
    >>> data.shape
    (5, 301, 219)

    NTc                 óX  — d|v r|d= t          d¦  «        ‚|                     ¦   «         D ]]\  }}	|dd…         dk    r9|dd…         t          j        v r#|	� |	st	          | |t          |	¦  «        ¦  «         ŒLt          d|z  ¦  «        ‚t          |d|||¬¦  «        }
|
| _        t          |¦  «        | _	        |
j
        | i| _        	 |
                     d	¦  «         	 d
ddœ|
                     d¦  «                 }n# t          $ r t          d¦  «        ‚w xY wdd
dœt           j                 }||k    | _        t'          j        |dz   |
                     d¦  «        ¦  «        d	         }|dk    r‘d| _        t'          j        |dz   |
                     d¦  «        ¦  «        \  }}|s|dk    rt          d¦  «        ‚|| _        d| _        |dz   | _        d| _        |dz   | _        d| _        |dz   | _        |dz   | _        na|dk    rLd| _        || _        d| _        |dz   | _        d| _        |dz   | _        d| _        |dz   | _        |dz   | _        nt          d¦  «        ‚t;          | ¦  «        | _        | j        rz| j         j!        d k    s,| j        d	         j"        d!k    s| j        d!         j"        d!k    r>|  #                    ¦   «          |  $                    ¦   «          |  %                    ¦   «          dS |rd| j        _&        dS dS # tN          $ r |
 (                    ¦   «          ‚ w xY w)"a´  Initialize instance from file.

        Parameters
        ----------
        arg : str or open file
            Name of file or open file object.
            The file objects are closed in TiffFile.close().
        name : str
            Optional name of file in case 'arg' is a file handle.
        offset : int
            Optional start position of embedded file. By default, this is
            the current file position.
        size : int
            Optional size of embedded file. By default, this is the number
            of bytes from the 'offset' to the end of the file.
        multifile : bool
            If True (default), series may include pages from multiple files.
            Currently applies to OME-TIFF only.
        movie : bool
            If True, assume that later pages differ from first page only by
            data offsets and byte counts. Significantly increases speed and
            reduces memory usage when reading movies with thousands of pages.
            Enabling this for non-movie files will result in data corruption
            or crashes. Python 3 only.
        kwargs : bool
            'is_ome': If False, disable processing of OME-XML metadata.

        Úfastijz!the fastij option will be removedNrÊ   r{   zunexpected keyword argument: %srw   )rY   ÚnamerU   rH   r   r…   r†   ©r“   r”   r‘   znot a TIFF file©Úbigr„   rŽ   r–   Trü   rŒ   rˆ   zinvalid BigTIFF filerŠ   r‰   ÚQ8sr—   Fr�   r�   ÚI4szinvalid TIFF fileì        r&   ))ÚDeprecationWarningÚitemsrO   Ú
FILE_FLAGSri   r£   r  r   r¸   Ú
_multifilerÜ  Ú_filesr%   Úreadrÿ   r,   rŸ   r9   rN  rº   Úunpackr™   r  r  Ú	tagnosizerŒ  r�  Ú
tagformat1Ú
tagformat2Ú	TiffPagesrQ   Úis_lsmÚ
filehandlerH   ÚcompressionÚ_lsm_load_pagesÚ_lsm_fix_strip_offsetsÚ_lsm_fix_strip_bytecountsÚ	useframesr@   rÍ  )r`   r  rÜ  rU   rH   r   Úmovier0   rC  rl   r¼   r9   Úsys_byteorderrf  r  Úzeros                   r    ra   zTiffFile.__init__ì  sl  € ðL �vÐÐØ�xÐ Ý$Ð%HÑIÔIÐIØ Ÿ,š,™.œ.ð 	Ið 	I‰JˆC�Ø�2�A�2Œw˜%ÒÐ C¨¨¨¤G­t¬Ð$>Ð$>ØÐ$¨UÐ$Ý˜D #¥t¨E¡{¤{Ñ3Ô3Ð3øåÐ AÀCÑ GÑHÔHÐHå˜ $¨T¸&ÀtÐLÑLÔLˆØˆŒÝ˜y™/œ/ˆŒØ”w �oˆŒð5	Ø�GŠG�A‰JŒJˆJð4Ø$'°Ð4Ð4°R·W²W¸Q±Z´ZÔ@�	�	øÝð 4ð 4ð 4Ý Ð!2Ñ3Ô3Ð3ð4øøøà$'°3Ð7Ð7½¼ÔFˆMØ%¨Ò6ˆDŒMå”m I°¡O°R·W²W¸Q±Z´ZÑ@Ô@ÀÔCˆGØ˜"Š}ˆ}à"&�”Ý#)¤=°¸TÑ1AÀ2Ç7Â7È1Á:Ä:Ñ#NÔ#NÑ �
˜DØð =˜:¨š?˜?Ý$Ð%;Ñ<Ô<Ð<Ø!*�”Ø"#�”Ø$-°¡O�Ô!Ø!"�”Ø#,¨s¡?�Ô Ø!�”Ø"+¨dÑ"2�”Ø"+¨eÑ"3�”�Ø˜B’�Ø"'�”Ø!*�”Ø"#�”Ø$-°¡O�Ô!Ø!"�”Ø#,¨s¡?�Ô Ø!�”Ø"+¨dÑ"2�”Ø"+¨eÑ"3�”�å Ð!4Ñ5Ô5Ð5õ # 4™œˆDŒJàŒ{ð 	,Ø”Ô$¨Ò-Ð-Ø”:˜a”=Ô,°Ò1Ð1Ø”:˜a”=Ô,°Ò1Ð1à×$Ò$Ñ&Ô&Ð&Ø×+Ò+Ñ-Ô-Ð-Ø×.Ò.Ñ0Ô0Ð0Ð0Ð0Øð ,Ø'+�”
Ô$Ð$Ð$ð,ð ,øõ ð 	ð 	ð 	Ø�HŠH‰JŒJˆJØð	øøøs+   ÃL	 ÃC< Ã;L	 Ã<DÄGL	 Ë7L	 Ì	 L)c                 ó   — | j         S )zReturn file handle.©r¸   rË  s    r    rï  zTiffFile.filehandleW  s   € ð Œxˆr"   c                 ó   — | j         j        S )zReturn name of file handle.)r¸   rÜ  rË  s    r    rW   zTiffFile.filename\  s   € ð ŒxŒ}Ðr"   c                 ó|   — 	 t          j        | j                             ¦   «         ¦  «        S # t          $ r Y dS w xY w)z3Return status of file handle as stat_result object.N)ÚosÚfstatr¸   Úfilenor@   rË  s    r    rý  zTiffFile.fstata  sE   € ð	Ý”8˜DœHŸOšOÑ-Ô-Ñ.Ô.Ð.øÝð 	ð 	ð 	Ø�4�4ð	øøøs   ‚*- ­
;º;c                 ó~   — | j                              ¦   «         D ]}|j                             ¦   «          Œi | _         dS )zClose open file handle(s).N)rç  Úvaluesrï  rÍ  )r`   r3   s     r    rÍ  zTiffFile.closei  sA   € à”;×%Ò%Ñ'Ô'ð 	#ð 	#ˆCØŒN× Ò Ñ"Ô"Ð"Ð"ØˆŒˆˆr"   r&   c                 ó†  ‡— | j         st          j        g ¦  «        S |€|€d}|�.	 | j        |         }n# t          t
          f$ r Y nw xY w|j        Šn| j         Š|€nut          |t          ¦  «        r
‰|         gŠnVt          |t          ¦  «        r	‰|         Šn8t          |t          j        ¦  «        rˆfd„|D ¦   «         Šnt          d¦  «        ‚‰st          d¦  «        ‚| j        rt          ‰||d¬¦  «        }�n	|€Ä|rÂ|j        r»| j        |j        j        z   }|dk    r4‰d         j        r'| j                             ||j        |j        ¦  «        }n°|�t/          ||j        |j        ¦  «        }| j                             |j        ¦  «         | j                             |t5          |j        ¦  «        |d	¬
¦  «        }nCt7          ‰¦  «        dk    r‰d                              ||¬¦  «        }nt          ‰||¬¦  «        }|€dS |€x	 |j        |_        n¥# t          $ r] 	 t;          j        d|j        ›d|j        ›�¦  «         d|j        z   |_        n%# t          $ r d‰d         j        z   |_        Y nw xY wY n?w xY wt7          ‰¦  «        dk    r‰d         j        |_        nd‰d         j        z   |_        |S )aB  Return image data from multiple TIFF pages as numpy array.

        By default, the data from the first series is returned.

        Parameters
        ----------
        key : int, slice, or sequence of page indices
            Defines which pages to return as array.
        series : int or TiffPageSeries
            Defines which series of pages to return as array.
        out : numpy.ndarray, str, or file-like object; optional
            Buffer where image data will be saved.
            If None (default), a new array will be created.
            If numpy.ndarray, a writable array of compatible dtype and shape.
            If 'memmap', directly memory-map the image data in the TIFF file
            if possible; else create a memory-mapped array in a temporary file.
            If str or open file, the file name or file object used to
            create a memory-map to an array stored in a binary file on disk.
        validate : bool
            If True (default), validate various tags.
            Passed to TiffPage.asarray().
        maxworkers : int
            Maximum number of threads to concurrently get data from pages.
            Default is 1. If None, up to half the CPU cores are used.
            Reading data from file is limited to a single thread.
            Using multiple threads can significantly speed up this function
            if the bottleneck is decoding compressed data, e.g. in case of
            large LZW compressed LSM files.
            If the bottleneck is I/O or pure Python code, using multiple
            threads might be detrimental.

        Nr   c                 ó    •— g | ]
}‰|         ‘ŒS r   r   )r   ÚkrQ   s     €r    rK  z$TiffFile.asarray.<locals>.<listcomp>¤  s   ø€ Ð+Ð+Ð+ !�U˜1”XÐ+Ð+Ð+r"   z&key must be an int, slice, or sequencezno pages selectedF)ÚoutÚ
maxworkersÚsqueezer   T)r  Únativer&   )r  Úvalidate)r  r  zfailed to reshape ú to rß   )rQ   r<   ÚarrayrT   rÿ   r  Ú_pagesr(   ÚinttypesÚsliceÚcollectionsÚIterabler,   Úis_nihÚstack_pagesrU   r9   r=   rV   rR   rï  Úmemmap_arrayrE   r   r%   Ú
read_arrayr   r.   r/   r    r¡   )	r`   rC  rT   r  r  r  rZ   ÚtypecoderQ   s	           @r    r/   zTiffFile.asarrayo  s  ø€ ðB Œzð 	#Ý”;˜r‘?”?Ð"Øˆ;˜6˜>ØˆFØÐðØœ VÔ,��øÝ�iÐ(ð ð ð Ø�ðøøøà”MˆEˆEà”JˆEàˆ;ØÝ˜�XÑ&Ô&ð 	FØ˜3”Z�LˆEˆEÝ˜�UÑ#Ô#ð 	FØ˜#”JˆEˆEÝ˜�[Ô1Ñ2Ô2ð 	FØ+Ð+Ð+Ð+ sÐ+Ñ+Ô+ˆEˆEåÐDÑEÔEÐEàð 	2ÝÐ0Ñ1Ô1Ð1àŒ;ð 	HÝ  ¨C¸JÐPUÐVÑVÔVˆF‰FØˆ[˜Vˆ[¨¬ˆ[Ø”~¨¬Ô(9Ñ9ˆHØ�hŠˆ 5¨¤8Ô#:ˆØœ×5Ò5Ø˜fœl¨F¬Mñô ��ð �?Ý'¨¨V¬\¸6¼<ÑHÔH�CØ”×$Ò$ V¤]Ñ3Ô3Ð3Øœ×3Ò3Ø�g f¤lÑ3Ô3¸ÀTð 4ñ ô ��õ �‰ZŒZ˜1Š_ˆ_Ø˜1”X×%Ò%¨#¸Ð%ÑAÔAˆFˆFå  ¨C¸JÐGÑGÔGˆFàˆ>ØˆFàˆ;ð:Ø%œ|�”�øÝð 	:ð 	:ð 	:ð:Ý”M�MØ8>¼¸¸ÀfÄlÀlÐSñô ð ð $)¨6¬<Ñ#7�F”L�LøÝ!ð :ð :ð :à#(¨5°¬8¬>Ñ#9�F”L�L�Lð:øøøøøð	:øøøõ �‰ZŒZ˜1Š_ˆ_Ø  œ8œ>ˆFŒLˆLà  5¨¤8¤>Ñ1ˆFŒLØˆsE   ¦4 ´AÁAÈH È
JÈ'3IÉJÉI=É:JÉ<I=É=JÊJc                 óˆ  — | j         sg S | j         j        }| j         j        }g }d                     ¦   «         D ]3}t	          | d|z   d¦  «        r t	          | d|z  ¦  «        ¦   «         } nŒ4|| j         _        || j         _        |s|                      ¦   «         }d„ |D ¦   «         }t          |¦  «        D ]\  }}||_        Œ|S )z«Return related pages as TiffPageSeries.

        Side effect: after calling this function, TiffFile.pages might contain
        TiffPage and TiffFrame instances.

        z(ome imagej lsm fluoview nih mdgel shapedr{   Fz
_%s_seriesc                 óB   — g | ]}t          |j        ¦  «        d k    ¯|‘ŒS r9  )rv  rE   ©r   rú   s     r    rK  z#TiffFile.series.<locals>.<listcomp>í  s*   € Ð8Ð8Ð8˜¥s¨1¬7¡|¤|°aÒ'7Ð'7�!Ð'7Ð'7Ð'7r"   )rQ   rô  ÚkeyframeÚsplitrf   Ú_generic_seriesrr  r‰  )r`   rô  r  rT   rÜ  r   rú   s          r    rT   zTiffFile.seriesÕ  sò   € ð Œzð 	ØˆIà”JÔ(ˆ	Ø”:Ô&ˆØˆØ>×DÒDÑFÔFð 	ð 	ˆDÝ�t˜U T™\¨5Ñ1Ô1ð Ø;�  |°dÑ':Ñ;Ô;Ñ=Ô=�Ø�ðð  )ˆŒ
ÔØ&ˆŒ
ÔØð 	,Ø×)Ò)Ñ+Ô+ˆFð 9Ð8˜VÐ8Ñ8Ô8ˆå˜fÑ%Ô%ð 	ð 	‰DˆAˆqØˆAŒGˆGØˆr"   c           
      óT  — | j         j        rw| j         d         }|j        }|j        }t	          | j         ¦  «        dk    rt	          | j         ¦  «        f|z   }d|z   }t          | j         dd…         ||j        |d¬¦  «        gS | j                              d¦  «         | j                              ¦   «          g }g }i }t          j
        }| j         D ]]}|j        sŒ
|j        |j        |j        |v fz   }||v r||                              |¦  «         ŒB|                     |¦  «         |g||<   Œ^|D ]w}||         }	|	d         }|j        }|j        }t	          |	¦  «        dk    rt	          |	¦  «        f|z   }d|z   }|                     t          |	||j        |d¬¦  «        ¦  «         Œx|S )	zReturn image series in file.r   r&   r�   Nrõ  ©ÚstypeFÚGeneric)rQ   rô  rE   Úaxesr.   ÚTiffPageSeriesr=   ÚclearÚloadrO   ÚDECOMPESSORSrð  r7   )
r`   rX   rE   r  rZ   ÚkeysrT   ÚcompressionsrC  rQ   s
             r    r  zTiffFile._generic_seriesó  sÕ  € àŒ:Ôð 
	à”:˜a”=ˆDØ”JˆEØ”9ˆDÝ�4”:‰Œ Ò"Ð"Ý˜TœZ™œÐ*¨UÑ2�Ø˜T‘z�å˜tœz¨!¨!¨!œ}¨e°T´ZÀÈWÐUÑUÔUðð ð 	Œ
×Ò˜ÑÔÐØŒ
�ŠÑÔÐØˆØˆØˆÝÔ(ˆØ”Jð 	%ð 	%ˆDØ”:ð ØØ”* ¤	¨4Ô+;¸|Ð+KÐLÑLˆCØ�fˆ}ˆ}Ø�s”×"Ò" 4Ñ(Ô(Ð(Ð(à—’˜CÑ Ô Ð Ø#˜f��s‘�Øð 
	ð 
	ˆCØ˜3”KˆEØ˜”8ˆDØ”JˆEØ”9ˆDÝ�5‰zŒz˜AŠ~ˆ~Ý˜U™œ˜¨Ñ-�Ø˜T‘z�Ø�MŠMÝ˜u e¨T¬Z¸ÀYÐOÑOÔOñô ð ð ð ˆr"   c           	      óÔ  — | j         }d|_        t          |¦  «        }d„ }dx}x}x}x}}g }	d}
	 |
|k    r�n°|
|_        ||
         }|j        st          j        d¦  «         dS d}d}t          |j        ¦  «        }|                     dd¦  «        }|d         }|                     d	d¦  «        }d
|v rA|d
         }t          |¦  «        t          |¦  «        k    r|}nd}t          j        d¦  «         |g}t          |¦  «        }t          |t          |j        ¦  «        ¦  «        \  }}|rt          j        d¦  «         dS d|cxk     r	||
z
  k    r|n ny||j        j        z  }|rd}ne|j        r|j        |z   ||
dz            j        k     rd}n?d}t!          |
dz   |
|z   ¦  «        D ]&}||         }||_        |                     |¦  «         Œ' ||	||||||¦  «         |
|z  }
�Œ¸|	S )z%Return image series in "shaped" file.Tc                 ó  — |d         }|s9|j         }|j        }t          |¦  «        dk    rt          |¦  «        f|z   }d|z   }t          |¦  «        }t          |¦  «        }	|j        r!|	|k    r|	|z  dk    r|€d}d|z   }|	|z  f|z   }	 t          |||¦  «        }|}n8# t          $ r+}
t          j        t          |
¦  «        ¦  «         Y d }
~
nd }
~
ww xY w|  
                    t          |||j        ||d|¬¦  «        ¦  «         d S )Nr   r&   rŠ   TÚShaped)rÜ  r  r$  )rE   r  r.   r   rS   Úreshape_axesr,   r    r¡   rœ   r7   r   r=   )rT   rQ   r  rE   rd  rÜ  r$  rX   rH   Úresizerm   s              r    Úappend_seriesz.TiffFile._shaped_series.<locals>.append_series$  sS  € Ø˜”8ˆDØð &Øœ
�Ø”y�Ý�u‘:”: ’>�>Ý  ™ZœZ˜M¨EÑ1�EØ ™:�DÝ˜5‘>”>ˆDÝ˜WÑ%Ô%ˆFØÔ!ð 2 f¨t¢m m¸À¹ÈÒ8JÐ8JØÐ$Ø $�IØ˜T‘z�Ø 4™Ð)¨EÑ1�ð&Ý# D¨%°Ñ9Ô9�Ø��øÝð &ð &ð &Ý”�c !™fœfÑ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%øøøøð&øøøà�MŠMÝØØØ”JØØØ"Ø'ðñ ô ñ
ô 
ð 
ð 
ð 
s   ÂB Â
CÂ)!CÃCNr   z(invalid shape metadata or corrupted filerÜ  Ú rE   r$  r  úaxes do not match shapez&series shape does not match page shaper&   F)rQ   rô  r.   r  Ú	is_shapedr    r¡   Újson_description_metadatarA   r   ÚdivmodrE   Ú_dtyper>   Úis_finalrU   rq  r7   )r`   rQ   Úlenpagesr+  r  r  rE   rd  rÜ  rT   r‰  r‚  r$  ÚspagesrH   ÚnpagesÚmodÚjrX   s                      r    Ú_shaped_serieszTiffFile._shaped_series  sk  € à”
ˆØˆŒÝ�u‘:”:ˆð	ð 	ð 	ð@ 48Ð7ˆÐ7�4Ð7˜%Ð7 '¨DØˆØˆð/	Ø˜Ò Ð Ùà"ˆEŒNØ˜U”|ˆHØÔ%ð Ý”ÐHÑIÔIÐIØ�àˆDØˆEÝ0°Ô1CÑDÔDˆHØ—<’< ¨Ñ+Ô+ˆDØ˜wÔ'ˆGØ Ÿš [°$Ñ7Ô7ˆIØ˜Ð!Ð!Ø Ô'�Ý�t‘9”9¥ G¡¤Ò,Ð,Ø#�E�Eà�DÝ”MÐ";Ñ<Ô<Ð<à�ZˆFÝ˜7Ñ#Ô#ˆDÝ  ¥w¨x¬~Ñ'>Ô'>Ñ?Ô?‰KˆF�CØð Ý”ÐFÑGÔGÐGØ�Ø�6Ð-Ð-Ò-Ð-˜X¨Ñ-Ò-Ð-Ð-Ð-Ð-Ø˜œÔ0Ñ0�Øð ,Ø�F�FàÔ%ð,à œ¨$Ñ.°°u¸q±yÔ1AÔ1HÒHÐHà %�I�Ið !&�IÝ" 5¨1¡9¨e°f©nÑ=Ô=ð ,ð ,˜Ø$ Qœx˜Ø(0˜œØŸš dÑ+Ô+Ð+Ð+ØˆM˜& &¨$°°wÀÀiÑPÔPÐPØ�V‰OˆEñ_/	ðb ˆr"   c                 ó0  ‡ ‡‡‡	— d‰ j         _        d‰ j         _        ‰ j        Š‰ j         Š	‰	d         Šˆˆˆ	ˆ fd„}	  |¦   «         }n%# t          $ r t          j        d¦  «         Y dS w xY w|r‰gŠ	n‰ j                              ¦   «          g }g }d‰v r0|                     ‰d         ¦  «         |                     d¦  «         d‰v r0|                     ‰d         ¦  «         |                     d	¦  «         d
‰v rQ‰j	        dk    r‰ 
                    dd¦  «        r0|                     ‰d
         ¦  «         |                     d¦  «         ‰ 
                    dt          ‰	¦  «        ¦  «        |rt          |¦  «        ndz  }|dk    r*|                     |¦  «         |                     d¦  «         ‰j        d         dk    rE|                     ‰j        dd…         ¦  «         |                     ‰j        dd…         ¦  «         n±‰j        dd…         dk    rj‰j        dd…         t!          |¦  «        z   ‰j        dd…         z   }t#          ‰j        d         ¦  «        |z   t#          ‰j        dd…         ¦  «        z   }n4|                     ‰j        ¦  «         |                     ‰j        ¦  «         |o@t          ‰ j         ¦  «        dk    o(‰j        d         t          |¦  «        ‰j        z  dz  k    }t)          ‰	|‰j        |d|¬¦  «        gS )z#Return image series in ImageJ file.Tr   c                  óP  •— ‰j         sdS ‰                     dd¦  «        } | dk    rdS ‰j        \  }}|t          ‰j        ¦  «        ‰j        z  dz  k    s||| z  z   ‰j        j        k    rt          ¦   «         ‚t          ‰¦  «        dk    r||| z  z   ‰d         j
        k    rdS dS )NFÚimagesr   r&   rˆ   T)r2  rA   rS   r   rE   Úbitspersamplerï  rH   r,   r.   rU   )r;  rU   r  ÚijrX   rQ   r`   s      €€€€r    Úis_hyperstackz.TiffFile._imagej_series.<locals>.is_hyperstack…  s¸   ø€ ð ”=ð Ø�uØ—V’V˜H aÑ(Ô(ˆFØ˜Š{ˆ{Ø�uØ Ô.‰MˆF�Eà� ¤Ñ,Ô,¨tÔ/AÑAÀQÑFÒFÐFØ˜E F™NÑ*¨T¬_Ô-AÒAÐAå ‘l”lÐ"å�5‰zŒz˜AŠ~ˆ~ &¨5°6©>Ñ"9¸EÀ!¼H¼OÒ"KÐ"KØ�uØ�4r"   z)invalid ImageJ metadata or corrupted fileNÚframesÚTÚslicesÚZÚchannelsr‘   Ú
hyperstackFrM   r;  r&   r�   ÚSIrˆ   ÚImageJ)r  r$  )rQ   rô  r  Úimagej_metadatar,   r    r¡   r"  r7   rw  rA   r.   r   r  ÚextendrE   r  r  rS   r<  r   r=   )
r`   r>  rD  rE   r  Úremainr$  r=  rX   rQ   s
   `      @@@r    Ú_imagej_serieszTiffFile._imagej_seriesz  s:  øøøø€ ð  $ˆŒ
ÔØˆŒ
ÔàÔ!ˆØ”
ˆØ�QŒxˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð&	Ø&˜™œˆJˆJøÝð 	ð 	ð 	ÝŒMÐEÑFÔFÐFØˆFˆFð	øøøð ð 	à�FˆEˆEàŒJ�OŠOÑÔÐàˆØˆØ�rˆ>ˆ>Ø�LŠL˜˜HœÑ&Ô&Ð&Ø�KŠK˜ÑÔÐØ�rˆ>ˆ>Ø�LŠL˜˜HœÑ&Ô&Ð&Ø�KŠK˜ÑÔÐØ˜ÐÐØÔ Ò!Ð!¨"¯&ª&°¸uÑ*EÔ*EÐ!à�LŠL˜˜JœÑ(Ô(Ð(Ø�KŠK˜ÑÔÐØ—’˜¥# e¡*¤*Ñ-Ô-ÀEÐ2Pµ'¸%±.´.°.ÈqÑQˆØ�AŠ:ˆ:Ø�LŠL˜Ñ Ô Ð Ø�KŠK˜ÑÔÐØŒ9�QŒ<˜3ÒÐà�LŠL˜œ A B BœÑ(Ô(Ð(Ø�KŠK˜œ	 ! " "œÑ&Ô&Ð&Ð&ØŒY�r˜�rŒ]˜dÒ"Ð"à”J˜q ˜s”O¥e¨E¡l¤lÑ2°T´ZÀÀÀ´^ÑCˆEÝ˜œ	 !œÑ%Ô%¨Ñ,­t°D´I¸a¸b¸b´MÑ/BÔ/BÑBˆDˆDà�LŠL˜œÑ$Ô$Ð$Ø�KŠK˜œ	Ñ"Ô"Ð"ð ð RÝ�D”J‘” 1Ò$ðRàÔ" 1Ô%­°©¬¸$Ô:LÑ)LÐPQÑ)QÒQð 	õ Ø�u˜dœj¨$°hÈ)ðñ ô ð
ð 	
s   ¼
A ÁA)Á(A)c                 óˆ  — d| j         _        d| j         _        | j                              ¦   «          | j        }t          t          |d         ¦  «        ¦  «        }d                     d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }t          | j         || j         d         j
        ||d         d¬	¦  «        gS )
z%Return image series in FluoView file.Tr   Ú
Dimensionsr,  c              3   óž   K  — | ]H}|d          d k    ¯t           j                             |d                              ¦   «         d¦  «        V — ŒIdS )r&   r   rŠ   N)rO   ÚMM_DIMENSIONSrA   r]  rÚ   s     r    r!   z,TiffFile._fluoview_series.<locals>.<genexpr>Ó  sR   è è € ð 
ð 
Ø:;ÀqÈÄtÈaÂxÀx�DÔ×"Ò" 1 Q¤4§:¢:¡<¤<°Ñ5Ô5ÀxÀxÀxÀxð
ð 
r"   c              3   óX   K  — | ]%}|d          d k    ¯t          |d          ¦  «        V — Œ&dS rÜ   rØ   rÚ   s     r    r!   z,TiffFile._fluoview_series.<locals>.<genexpr>Ö  s4   è è € Ð:Ð: A°°1´¸²°•c˜!˜Aœ$‘i”i°°°°Ð:Ð:r"   Ú	ImageNameÚFluoView©rÜ  r  )rQ   rô  r  r"  Úfluoview_metadatar  Úreversedr  r  r   r=   )r`   ÚmmÚmmhdr  rE   s        r    Ú_fluoview_serieszTiffFile._fluoview_seriesÌ  sÔ   € à#ˆŒ
ÔØˆŒ
ÔØŒ
�ŠÑÔÐØÔ#ˆÝ•H˜R Ô-Ñ.Ô.Ñ/Ô/ˆØ�wŠwð 
ð 
Ø?Cð
ñ 
ô 
ñ 
ô 
ˆõ Ð:Ð:¨Ð:Ñ:Ô:Ñ:Ô:ˆåØ”
ØØ”
˜1”Ô#ØØ˜”_Ø ðñ ô ð	
ð 		
r"   c                 ór  ‡— d| j         _        d| j         _        | j                              ¦   «          | j        }|d         dv rEt          j        d¦  «        }|d         Š‰d         ‰d         z  Š|d         dk    rˆfd	„}nˆfd
„}nd}| j         d         }t          |g|j        ||j	        |d¬¦  «        gS )z#Return image series in MD Gel file.Fr   ÚFileTag)r‘   é€   Úfloat32Ú
ScalePixelr&   r‘   c                 ó:   •— |                       d¦  «        dz  ‰z  S )Nr[  r‘   ©Úastype©r|   Úscales    €r    Ú	transformz)TiffFile._mdgel_series.<locals>.transformï  s   ø€ ØŸ8š8 IÑ.Ô.°!Ñ3°eÑ;Ð;r"   c                 ó4   •— |                       d¦  «        ‰z  S )Nr[  r^  r`  s    €r    rb  z)TiffFile._mdgel_series.<locals>.transformô  s   ø€ ØŸ8š8 IÑ.Ô.°Ñ6Ð6r"   NÚMDGel)rb  r  )
rQ   rô  r  r"  Úmdgel_metadatar<   r=   r   rE   r  )r`   Úmdr=   rb  rX   ra  s        @r    Ú_mdgel_serieszTiffFile._mdgel_seriesâ  sú   ø€ ð  %ˆŒ
ÔØˆŒ
ÔØŒ
�ŠÑÔÐØÔ ˆØˆiŒ=˜HÐ$Ð$Ý”K 	Ñ*Ô*ˆEØ�|Ô$ˆEØ˜!”H˜u QœxÑ'ˆEØ�)Œ} Ò!Ð!ð<ð <ð <ð <ð <ð <ð
7ð 7ð 7ð 7ð 7ð 7ð ˆIØŒz˜!Œ}ˆåØ�˜œ
 E¨4¬9À	ÐQXðñ ô ð
ð 	
r"   c                 óX  — d| j         _        d| j         _        | j                              ¦   «          | j         d         }t	          | j         ¦  «        dk    r|j        }|j        }n't	          | j         ¦  «        f|j        z   }d|j        z   }t          | j         ||j        |d¬¦  «        gS )z Return image series in NIH file.Tr   r&   r�   ÚNIHr  )	rQ   rô  r  r"  r.   rE   r  r   r=   )r`   Úpage0rE   r  s       r    Ú_nih_serieszTiffFile._nih_series 	  s™   € à#ˆŒ
ÔØˆŒ
ÔØŒ
�ŠÑÔÐØ”
˜1”ˆÝˆtŒz‰?Œ?˜aÒÐØ”KˆEØ”:ˆDˆDå˜œ‘_”_Ð&¨¬Ñ4ˆEØ˜œÑ#ˆDÝ˜tœz¨5°%´+¸tÈ5ÐQÑQÔQÐRÐRr"   c                 ó\  ‡&— ddl m} | j        d         j        }	 |                     |¦  «        }nƒ# |j        $ rv}t          j        d|z  ¦  «         	 |                     dd¦  «         	                    d¦  «        }|                     |¦  «        }n# t          $ r Y Y d}~dS w xY wY d}~nd}~ww xY wd| j        _        d| j        _        | j                             ¦   «          |j                             dd¦  «        }|| i| _        | j        j        }i }g }|D �]u}	|	j                             d	¦  «        rt          j        d
¦  «          �nC|	j                             d¦  «        �r4|	D �]0}
|
j                             dd¦  «                             d¦  «        sŒ2|
D ]û}|D ]ö}|D ]ñ}|j        dd…                              d¦  «        sŒ%|j        d         }|j                             dd¦  «        }t*          j        |         }d|j        v rvt/          |j                             dd¦  «        ¦  «        }t/          |j        d         ¦  «        }t/          |j        d         ¦  «        |z   }t1          j        |||¦  «        }nd„ |D ¦   «         }||f||<   ŒòŒ÷Œü�Œ2|	j                             d¦  «        s�ŒŸ|	j        Š&‰&                     dd¦  «        }|	D �]µ}|j                             d¦  «        sŒ|j        Š&‰&                     dd¦  «        }d                     t7          ‰&d         ¦  «        ¦  «        }t9          ˆ&fd„|D ¦   «         ¦  «        }t;          |dd…         ¦  «        }d}d}|D �]Z}|j                             d¦  «        rm|j        Š&|€-t=          ‰&                     d |¦  «        ¦  «        }dg||z  z  }n6t=          ‰&                     d d¦  «        ¦  «        |k    rt?          d!¦  «        ‚ŒŠ|€	dg||z  z  }|j                             d"¦  «        sŒ°|j        Š&t=          ‰&                     d#d¦  «        ¦  «        }t=          ‰&                     d$d#‰&v rdnd¦  «        ¦  «        }t=          ‰&                     d%|¦  «        ¦  «        }ˆ&fd&„|dd…         D ¦   «         }	 t1          j         ||dd…         ¦  «        }n%# t>          $ r t          j        d'¦  «         Y �Œ|w xY w|D �]s}|j                             d¦  «        sŒ|j!        | j        vrÖ| j"        s
g c c c c S |j        d(         } 	 tG          tH          j%                             || ¦  «        ¦  «        }!d|!j        _        d|!j        _        |!j                             ¦   «          n5# tL          tN          t>          f$ r t          j        d)| z  ¦  «         Y  nýw xY w|!| j        |j!        <   |! (                    ¦   «          | j        |j!                 j        }"	 tS          |r|ntU          |"¦  «        ¦  «        D ]}#|"||#z            |||#z   <   Œn$# tV          $ r t          j        d*¦  «         Y nw xY w nc| j        }"	 tS          |r|ntU          |"¦  «        ¦  «        D ]}#|"||#z            |||#z   <   Œ�Œ5# tV          $ r t          j        d*¦  «         Y �ŒVw xY w�Œ\tY          d+„ |D ¦   «         ¦  «        r�Œd}$|D ]}#|#r|#|#j        k    r|#}$ nŒ|$sKt[          |¦  «        D ];\  }#}$|$r4|$j.        |$j/        j        _        |$j/        j        |$j.                 }$|$||#<    nŒ<|D ]}#|#�|$|#_        Œ|$j0        }| 1                    te          ||||| |d,¬-¦  «        ¦  «         �Œ·�Œw|D ]ë}%t9          |%j3        ¦  «        }| 4                    ¦   «         D ]¬\  }\  }}|%j5         .                    |¦  «        }#tU          |¦  «        }||#         |k    r"|%j5         6                    ||d¦  «        |%_5        Œ_||#xx         |z  cc<   | 7                    |#dz   |¦  «         |%j5         6                    |||z   d¦  «        |%_5        Œ­tq          |¦  «        |%_3        Œì|D ])}%ts          |%j3        |%j5        ¦  «        \  |%_3        |%_5        Œ*|S ).z(Return image series in OME-TIFF file(s).r   ©ÚcElementTreezome-xml: %srÅ  ÚignoreNTÚUUIDÚ
BinaryOnlyz$ome-xml: not an ome-tiff master fileÚStructuredAnnotationsÚ	Namespacer,  ÚmodulorÁ   ÚAlongÚTypeÚotherÚStartÚStepr&   ÚEndc                 óP   — g | ]#}|j                              d ¦  «        ¯|j        ‘Œ$S )ÚLabel)rJ  rs  Útext)r   Úlabels     r    rK  z(TiffFile._ome_series.<locals>.<listcomp>?	  s@   € ð .&ð .&ð .&à,1Ø+0¬9×+=Ò+=¸gÑ+FÔ+Fð.&Ø(-¬
ð.&ð .&ð .&r"   ÚImageÚNameÚPixelsÚ	PixelTypeÚDimensionOrderc              3   óH   •K  — | ]}t          ‰d |z            ¦  «        V — ŒdS )ÚSizeNrØ   ©r   ÚaxÚattrs     €r    r!   z'TiffFile._ome_series.<locals>.<genexpr>R	  s4   øè è € ÐCÐC¸�S  f¨r¡kÔ!2Ñ3Ô3ÐCÐCÐCÐCÐCÐCr"   rÂ   ÚChannelr5  z'cannot handle differing SamplesPerPixelÚTiffDataÚIFDÚ	NumPlanesÚ
PlaneCountc                 ó\   •— g | ](}t          ‰                     d |z   d¦  «        ¦  «        ‘Œ)S )ÚFirstr   )rÙ   rA   r†  s     €r    rK  z(TiffFile._ome_series.<locals>.<listcomp>j	  s3   ø€ ÐNÐNÐN¸b�3˜tŸxšx¨°"©°aÑ8Ô8Ñ9Ô9ÐNÐNÐNr"   zome-xml: invalid TiffData indexÚFileNamezome-xml: failed to read '%s'zome-xml: index out of rangec              3   ó   K  — | ]}|d u V — Œ	d S r   r   rÚ   s     r    r!   z'TiffFile._ome_series.<locals>.<genexpr>”	  s&   è è € Ð/Ð/ Q�q˜D�yÐ/Ð/Ð/Ð/Ð/Ð/r"   ÚOME)ÚparentrÜ  r  ):Ú	xml.etreern  rQ   r~  Ú
fromstringÚ
ParseErrorr    r¡   ÚdecoderÆ  r@   rô  r  r"  ÚattribrA   rç  r¸   ÚdirnamerJ  rs  rO   ÚAXES_LABELSÚfloatr<   Úaranger  rT  r  r   rÙ   r,   Úravel_multi_indexr}  ræ  r	   rü  Úpathr�   rž   rÍ  rq  r.   Ú
IndexErrorÚallrr  r‰  r“  r=   r7   r   rE   rä  r  ÚreplacerÐ   r  Úsqueeze_axes)'r`   ÚetreeÚomexmlÚrootrm   Úuuidr™  rt  rT   ÚelementÚannotrl   ÚmodulÚalongrÎ   ÚnewaxisÚstepÚstartÚstopÚlabelsrÜ  Úpixelsr=   r  rE   rH   ÚifdsÚspprD   r½  ÚnumÚidxÚfnamer3   rQ   r   r  Úserierˆ  s'                                         @r    Ú_ome_serieszTiffFile._ome_series	  sõ	  ø€ à3Ð3Ð3Ð3Ð3Ð3à”˜A”Ô*ˆð
	Ø×#Ò# FÑ+Ô+ˆDˆDøØÔð 	ð 	ð 	åŒM˜-¨!Ñ+Ñ,Ô,Ð,ðàŸš w°Ñ9Ô9×@Ò@ÀÑIÔI�Ø×'Ò'¨Ñ/Ô/��øÝð ð ð Ø������ðøøøð ����øøøøð	øøøð  $ˆŒ
ÔØˆŒ
ÔØŒ
�ŠÑÔÐàŒ{�Š˜v tÑ,Ô,ˆØ˜T�lˆŒØ”(Ô"ˆØˆØˆØð H	ñ H	ˆGØŒ{×#Ò# LÑ1Ô1ð å”ÐDÑEÔEÐEØ‘ØŒ{×#Ò#Ð$;Ñ<Ô<ñ AØ$ð Añ A�EØ œ<×+Ò+¨K¸Ñ<Ô<×EÒEÀhÑOÔOð !Ø Ø!&ð Að A˜Ø%*ð Að A˜EØ).ð Að A Ø',¤y°°"°¤~×'>Ò'>¸wÑ'GÔ'Gð !-Ø$,Ø',¤y°¤} Ø*/¬,×*:Ò*:¸6À7Ñ*KÔ*K Ý*.Ô*:¸7Ô*C Ø#*¨e¬lÐ#:Ð#:Ý+0°´×1AÒ1AÀ&È!Ñ1LÔ1LÑ+MÔ+M DÝ,1°%´,¸wÔ2GÑ,HÔ,H EÝ+0°´¸eÔ1DÑ+EÔ+EÈÑ+L DÝ-2¬\¸%ÀÀtÑ-LÔ-L F Fð.&ð .&à5:ð.&ñ .&ô .& Fð
 18¸Ð/@  t¡ ð#AðAñAð* ”;×'Ò'¨Ñ0Ô0ð Ùà”>ˆDØ—8’8˜F DÑ)Ô)ˆDà!ð dñ d�Ø”z×*Ò*¨8Ñ4Ô4ð ØØ”}�ØŸš ¨dÑ3Ô3�Ø—w’w�x¨Ð-=Ô(>Ñ?Ô?Ñ@Ô@�ÝÐCÐCÐCÐC¸dÐCÑCÔCÑCÔC�Ý˜u S b SœzÑ*Ô*�Ø�Ø�ð #ð 9Iñ 9I�DØ”x×(Ò(¨Ñ3Ô3ð !Ø#œ{˜Ø˜<Ý"% d§h¢hÐ/@À#Ñ&FÔ&FÑ"GÔ"G˜CØ$( 6¨T°S©[Ñ#9˜D˜DÝ  §¢Ð*;¸QÑ!?Ô!?Ñ@Ô@ÀCÒGÐGÝ",Ð-VÑ"WÔ"WÐWØ Ø�|Ø $˜v¨°©Ñ5˜Øœ8×,Ò,¨ZÑ8Ô8ð !Ø Øœ;�DÝ˜dŸhšh u¨aÑ0Ô0Ñ1Ô1�CÝ˜dŸhšh {¸À$¸¸°A°AÈAÑNÔNÑOÔO�CÝ˜dŸhšh |°SÑ9Ô9Ñ:Ô:�CØNÐNÐNÐNÀDÈÈ"ÈÄIÐNÑNÔN�Cð!Ý#Ô5°c¸5ÀÀ"À¼:ÑFÔF˜˜øÝ%ð !ð !ð !å œÐ&GÑHÔHÐHØ ™ð!øøøð !%ð !Iñ !I˜Ø#œx×0Ò0°Ñ8Ô8ð %Ø$Øœ9¨D¬KÐ7Ð7Ø#'¤?ð *ð (* 	 	 	 	 	 	 	 	 	Ø$(¤K°
Ô$;˜Eð&Ý&.­r¬w¯|ª|¸GÀUÑ/KÔ/KÑ&LÔ&L Ø6: ¤	Ô 3Ø56 ¤	Ô 2Ø #¤	§¢Ñ 0Ô 0Ð 0Ð 0øÝ$+Õ->Å
Ð#Kð &ð &ð &Ý (¤Ð.LÈuÑ.TÑ UÔ UÐ UØ %  ð&øøøð 69˜DœK¨¬	Ñ2ØŸIšI™KœK˜KØ $¤¨D¬IÔ 6Ô <˜ðIÝ%*°#Ð+E¨3¨3½3¸u¹:¼:Ñ%FÔ%Fð ?ð ? Ø05°c¸A±g´  S¨1¡W¡ ð?øå)ð Ið Ið IÝ$œMÐ*GÑHÔHÐHÐHÐHðIøøøð ˜à $¤
˜ðIÝ%*°#Ð+E¨3¨3½3¸u¹:¼:Ñ%FÔ%Fð ?ð ? Ø05°c¸A±g´  S¨1¡W¡ ñ?øå)ð Ið Ið IÝ$œMÐ*GÑHÔHÐHÐHÑHðIøøøùõ Ð/Ð/¨$Ð/Ñ/Ô/Ñ/Ô/ð áð  �Øð ð �Aàð ˜Q !¤*š_˜_Ø#$˜Ø˜øØð "å'0°¡¤ð "ð "™˜˜8Ø#ð "Ø=E¼^˜HœOÔ1Ô:Ø'/¤Ô'<¸X¼^Ô'L˜HØ&.˜D ™GØ!˜Eð	"ð
 ð .ð .�AØ�}Ø%-˜œ
øà œ�Ø—’Ý"Ø˜e U¨D¸ÀDÐPUðñ ô ñô ð ñ ñAdðJ ð 	'ð 	'ˆEÝ˜œÑ%Ô%ˆEØ+1¯<ª<©>¬>ð Mð MÑ'�Ñ'�w Ø”J×$Ò$ TÑ*Ô*�Ý˜6‘{”{�Ø˜”8˜tÒ#Ð#Ø!&¤×!3Ò!3°D¸'À1Ñ!EÔ!E�E”J�Jà˜!�H�H”H Ñ%�H�H‘HØ—L’L  Q¡¨Ñ-Ô-Ð-Ø!&¤×!3Ò!3°D¸$À¹.È!Ñ!LÔ!L�E”J�JÝ ™,œ,ˆEŒKˆKàð 	Lð 	LˆEÝ&2°5´;ÀÄ
Ñ&KÔ&KÑ#ˆEŒK˜œ˜Øˆs�   ›1 ±
B1»B,Á>BÂB,Â
B$ÂB,Â#B$Â$B,Â,B1Ò1SÓS1	Ó0S1	ÕAV Ö .W×WØ4YÙY&Ù%Y&Ù34Z)Ú)[	Û
[	c           
      ó  ‡	— | j         Š	t          j        ‰	d                  }| j        d         j        dk    r*|                     dd¦  «                             dd¦  «        }‰	                     dd¦  «        d	k    r|d
z  }‰	                     dd¦  «        d	k    r|dz  }|ddd…         }t          ˆ	fd„|D ¦   «         ¦  «        }‰	                     dd¦  «        }d| j        _        | j        ddd…         }|d         j	        }t          |||||d¬¦  «        g}| j        d	         j        rÝd	| j        _        | j        d	dd…         }|d         j	        }d\  }}|t          |¦  «        k     rO|t          |¦  «        dz
  k     r9|||         z  }|d	z  }|t          |¦  «        k     r|t          |¦  «        dz
  k     °9|d|…         |d         j        z   }|d|…         dz   }|                     t          |||||d¬¦  «        ¦  «         |S )z6Return main image series in LSM file. Skip thumbnails.ÚScanTyper   r‘   rM   r,  ÚXYÚXYCÚ
DimensionPr&   ÚPÚ
DimensionMÚMNrÁ   c              3   ób   •K  — | ])}t          ‰t          j        |                  ¦  «        V — Œ*d S r   )rÙ   rO   ÚCZ_LSMINFO_DIMENSIONS)r   r   Úlsmis     €r    r!   z'TiffFile._lsm_series.<locals>.<genexpr>Í	  s8   øè è € ÐMÐMÀ1•c˜$�tÔ9¸!Ô<Ô=Ñ>Ô>ÐMÐMÐMÐMÐMÐMr"   r€  ÚLSMrR  ©r&   r   ÚCYXÚ
LSMreduced)Úlsm_metadatarO   ÚCZ_LSMINFO_SCANTYPErQ   rw  r¡  rA   r  r  r=   r   Ú
is_reducedr.   rE   r7   )
r`   r  rE   rÜ  rQ   r=   rT   Úcpr   rÂ  s
            @r    Ú_lsm_serieszTiffFile._lsm_seriesÂ	  s  ø€ àÔ ˆÝÔ'¨¨ZÔ(8Ô9ˆØŒ:�aŒ=Ô$¨Ò)Ð)Ø—<’<  RÑ(Ô(×0Ò0°°uÑ=Ô=ˆDØ�8Š8�L !Ñ$Ô$ qÒ(Ð(Ø�C‰KˆDØ�8Š8�L !Ñ$Ô$ qÒ(Ð(Ø�C‰KˆDØ�D�D�b�DŒzˆÝÐMÐMÐMÐMÈÐMÑMÔMÑMÔMˆØ�xŠx˜ Ñ#Ô#ˆØˆŒ
ÔØ”
˜3˜3˜Q˜3”ˆØ�a””ˆÝ  ¨¨u°dÀÈUÐSÑSÔSÐTˆàŒ:�aŒ=Ô#ð 	Ø"#ˆDŒJÔØ”J˜q˜t !˜tÔ$ˆEØ˜!”H”NˆEØ‰EˆB�Ø•s˜5‘z”z’/�/ a­#¨e©*¬*°q©.Ò&8Ð&8Ø�e˜A”h‘�Ø�Q‘�ð •s˜5‘z”z’/�/ a­#¨e©*¬*°q©.Ò&8Ð&8ð ˜"˜1˜"”I  a¤¤Ñ.ˆEØ˜˜˜”8˜eÑ#ˆDØ�MŠMÝ˜u e¨U°D¸tÈ<ÐXÑXÔXñô ð ð ˆr"   c                 ó  — d| j         _        d| j         _        d| j         _        | j         d         }| j         ddd…         D ]	}||_        Œ
d| j         _        | j         d         }| j         ddd…         D ]	}||_        Œ
dS )zLoad all pages from LSM file.Tr&   Nr‘   r   )rQ   Úcacherô  r  )r`   r  rX   s      r    rñ  zTiffFile._lsm_load_pagesä	  s“   € àˆŒ
ÔØ#ˆŒ
ÔàˆŒ
ÔØ”:˜a”=ˆØ”J˜q˜t !˜tÔ$ð 	%ð 	%ˆDØ$ˆDŒMˆMàˆŒ
ÔØ”:˜a”=ˆØ”J˜s˜s ˜s”Oð 	%ð 	%ˆDØ$ˆDŒMˆMð	%ð 	%r"   c                 ór  — | j         j        dk     rdS | j        }t          |¦  «        }| j        d         }|j        }d}dD ]!}|j        |         dv r||j        |         z  }Œ"|dk    r–d}dD ]}||         dk    r|j        |         } nŒ|rqt          |d	|z  |z  ¦  «        \  }}	|	dk    sJ ‚|||d	f}
t          j	        t          |
¦  «        ¦  «                             |
¦  «        }t          j        |dd¦  «        }n(t          j	        |¦  «                             d
d	¦  «        }|d         j        d         |d         j        d         k    r|dddd
…f         }d}d}|j        D ]O}||         }g }|j        D ]'}||k     r|dz  }|                     ||z   ¦  «         |}Œ(t!          |¦  «        |_        ŒPdS )z�Unwrap strip offsets for LSM files greater than 4 GB.

        Each series and position require separate unwrapping (undocumented).

        râ  Nr   r&   rç   ÚPM©r&   r‘   r@  r‘   rÁ   .)rï  rH   rQ   r.   rT   r  rE   r0  r<   rœ  r   rd  ÚmoveaxisÚdataoffsetsÚflatr7   r  )r`   rQ   r5  rT   r  Ú	positionsr   ÚntimesÚdivr6  rE   ÚindicesÚwrapÚpreviousoffsetrX   rÒ  Úcurrentoffsets                    r    rò  zTiffFile._lsm_fix_strip_offsetsó	  s  € ð Œ?Ô %Ò'Ð'ØˆFà”
ˆÝ�U‘”ˆØ”˜Q”ˆØŒ{ˆð ˆ	Øð 	-ð 	-ˆAØŒ{˜1Œ~ Ð%Ð%Ø˜Vœ\¨!œ_Ñ,�	øð �qŠ=ˆ=ØˆFØð ð �Ø˜”7˜c’>�>Ø#œ\¨!œ_�FØ�Eð "ð ð 8Ý! &¨!¨i©-¸&Ñ*@ÑAÔA‘��SØ˜a’x�x�x�xØ" F¨C°Ð3�Ýœ,¥w¨u¡~¤~Ñ6Ô6×>Ò>¸uÑEÔE�Ýœ.¨°!°QÑ7Ô7�øå”l 6Ñ*Ô*×2Ò2°2°qÑ9Ô9ˆGð �Œ8Ô Ô" U¨1¤XÔ%9¸!Ô%<Ò<Ð<Ø˜c 4 4 R 4˜iÔ(ˆGð ˆØˆØ”ð 	2ð 	2ˆAØ˜”8ˆDØˆKØ!%Ô!1ð /ð /�Ø  >Ò1Ð1Ø˜E‘M�DØ×"Ò" =°4Ñ#7Ñ8Ô8Ð8Ø!.��Ý$ [Ñ1Ô1ˆDÔÐð	2ð 	2r"   c           	      óò  ‡— | j         }|d         j        dk    rdS t          |d„ ¬¦  «        }t          |¦  «        dz
  }t	          |¦  «        D ]§\  }}|j        dz  rŒ|j        Š|j        }||k     r||dz            j        d         }n,t          ‰d         d|d         z  z   | j	        j
        ¦  «        }‰|fz   Št          ˆfd„t          t          |¦  «        ¦  «        D ¦   «         ¦  «        |_        Œ¨dS )	z¦Set databytecounts to size of compressed data.

        The StripByteCounts tag in LSM files contains the number of bytes
        for the uncompressed data.

        r   r&   Nc                 ó   — | j         d         S rA  )rÒ  )Úps    r    rî   z4TiffFile._lsm_fix_strip_bytecounts.<locals>.<lambda>3
  s   € ¨A¬M¸!Ô,<€ r"   rB  r‘   rÁ   c              3   ó@   •K  — | ]}‰|d z            ‰|         z
  V — ŒdS rÜ   r   )r   r7  Úoffsetss     €r    r!   z5TiffFile._lsm_fix_strip_bytecounts.<locals>.<genexpr>@
  sE   øè è € ð (ð (Ø01�˜˜A™” ¨¤Ñ+ð(ð (ð (ð (ð (ð (r"   )rQ   rð  rp  r.   rr  r‰  rÒ  Údatabytecountsrt  r¸   rH   r  rq  )r`   rQ   r5  r   rX   Ú
bytecountsÚ
lastoffsetrß  s          @r    ró  z"TiffFile._lsm_fix_strip_bytecounts(
  s*  ø€ ð ”
ˆØ�Œ8Ô 1Ò$Ð$ØˆFå�uÐ"<Ð"<Ð=Ñ=Ô=ˆÝ�U‘”˜a‘ˆÝ  Ñ'Ô'ð 	ð 	‰GˆAˆtØŒz˜A‰~ð ØØÔ&ˆGØÔ,ˆJØ�6ŠzˆzØ" 1 q¡5œ\Ô5°aÔ8�
�
õ ! ¨¤¨q°:¸b´>Ñ/AÑ!AÀ4Ä8Ä=ÑQÔQ�
Ø  Ñ-ˆGÝ"'ð (ð (ð (ð (Ý5:½3¸z¹?¼?Ñ5KÔ5Kð(ñ (ô (ñ #ô #ˆDÔÐð	ð 	r"   c                 óö   — |dd…         t           j        v rD| j        sdS t          t	          | j        d         |¦  «        ¦  «        }t          | ||¦  «         |S t          d| j        j        ›d|›d�¦  «        ‚)z,Return 'is_flag' attributes from first page.rÊ   NFr   ú'ú' object has no attribute ')	rO   rå  rQ   r£   rf   ri   rc   rn   rh   )r`   rÜ  rl   s      r    Ú__getattr__zTiffFile.__getattr__D
  s…   € à���Œ8•t”Ð&Ð&Ø”:ð Ø�uÝ� ¤¨A¤°Ñ5Ô5Ñ6Ô6ˆEÝ�D˜$ Ñ&Ô&Ð&ØˆLÝˆnØ37´>Ô3JÐ3JÐ3JÈDÈDÈDÐQñ
ô 
ð 	
r"   c                 ó   — | S r   r   rË  s    r    rÏ  zTiffFile.__enter__P
  rÐ  r"   c                 ó.   — |                       ¦   «          d S r   rÒ  rÓ  s       r    r×  zTiffFile.__exit__S
  rØ  r"   r   éO   c                 ó  ‡‡— dt          | j        j        ¦  «        dddœ| j                 g}| j        r|                     d¦  «         |                     d                     d„ | j        D ¦   «         ¦  «        ¦  «         t          | j	        ¦  «        dk    r*|                     d	t          | j	        ¦  «        z  ¦  «         t          | j
        ¦  «        dk    r*|                     d
t          | j
        ¦  «        z  ¦  «         t          | j        ¦  «        dk    r*|                     dt          | j        ¦  «        z  ¦  «         d                     |¦  «        }|                     dd¦  «                             dd¦  «        }|t          | j        j        t          d‰dz   t          |¦  «        z
  ¦  «        ¦  «        z  }‰dk    r|S |g}|                     d                     d„ | j
        D ¦   «         ¦  «        ¦  «         ‰dk    r(|                     ˆˆfd„| j	        D ¦   «         ¦  «         n'|                     ˆˆfd„| j
        D ¦   «         ¦  «         ‰dk    r~t#          | j        ¦  «        D ]i}t%          | |dz   ¦  «        rTt'          | |dz   ¦  «        }|r?|                     |                     ¦   «         ›dt+          |‰‰dz  ¬¦  «        ›�¦  «         Œjd                     |¦  «                             dd¦  «        S )a  Return string containing information about file.

        The detail parameter specifies the level of detail returned:

        0: file only.
        1: all series, first page of series and its tags.
        2: large tag values and file metadata.
        3: all pages.

        zTiffFile '%s'ÚLittleEndianÚ	BigEndianr‡   ÚBigTiffrƒ   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r   ©r]  ©r   r!  s     r    r!   z#TiffFile.__str__.<locals>.<genexpr>h
  s*   è è € Ð;Ð;¨1˜QŸWšW™YœYÐ;Ð;Ð;Ð;Ð;Ð;r"   r&   ú%i Pagesz	%i Seriesz%i Filesú  z    z   r�   r‘   r   ú
c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r   ©rœ   r  s     r    r!   z#TiffFile.__str__.<locals>.<genexpr>u
  s(   è è € Ð:Ð:¨�c !™fœfÐ:Ð:Ð:Ð:Ð:Ð:r"   rÊ   c              3   óV   •K  — | ]#}|®t                                |‰‰¬¦  «        V — Œ$d S )N©ÚdetailÚwidth)ÚTiffPageÚ__str__)r   rÝ  rø  rù  s     €€r    r!   z#TiffFile.__str__.<locals>.<genexpr>x
  sF   øè è € ð ð àØ�}õ ×$Ò$ Q¨v¸UÐ$ÑCÔCà$�}�}�}ðð r"   c              3   ó‚   •K  — | ]9}|j         d          ®t                               |j         d          ‰‰¬¦  «        V — Œ:dS )r   Nr÷  )rQ   rú  rû  )r   rú   rø  rù  s     €€r    r!   z#TiffFile.__str__.<locals>.<genexpr>€
  sV   øè è € ð ð àØ”w˜q”zÐ-õ ×$Ò$ Q¤W¨Q¤Z¸ÀeÐ$ÑLÔLà-Ð-Ð-Ð-ðð r"   r¦   z
_METADATA
©rù  Úheightú

z


)r   r¸   rH   r9   r™   r7   r  Úflagsr.   rQ   rT   rç  r¡  ÚsnipstrrÜ  ÚmaxrH  rp  r-   rf   r]  Úpformat)r`   rø  rù  ÚinforÜ  Úms    ``   r    rû  zTiffFile.__str__V
  s  øø€ ð Ý˜œœÑ&Ô&Ø  {Ð3Ð3°D´NÔCð
ˆð
 Œ?ð 	#Ø�KŠK˜	Ñ"Ô"Ð"Ø�Š�C—H’HÐ;Ð;°´
Ð;Ñ;Ô;Ñ;Ô;Ñ<Ô<Ð<ÝˆtŒz‰?Œ?˜QÒÐØ�KŠK˜
¥S¨¬¡_¤_Ñ4Ñ5Ô5Ð5ÝˆtŒ{ÑÔ˜aÒÐØ�KŠK˜¥c¨$¬+Ñ&6Ô&6Ñ6Ñ7Ô7Ð7ÝˆtŒ{ÑÔ˜aÒÐØ�KŠK˜
¥c¨$¬+Ñ&6Ô&6Ñ7Ñ8Ô8Ð8Ø�yŠy˜‰ŒˆØ�|Š|˜F DÑ)Ô)×1Ò1°%¸Ñ>Ô>ˆØ•g˜dœhœm­S°°U¸Q±YÅÀTÁÄÑ5JÑ-KÔ-KÑLÔLÑLˆØ�QŠ;ˆ;ØˆKØˆvˆØ�Š�D—I’IÐ:Ð:¨d¬kÐ:Ñ:Ô:Ñ:Ô:Ñ;Ô;Ð;Ø�QŠ;ˆ;Ø�KŠKðð ð ð ð à!œZðñ ô ñô ð ð ð �KŠKðð ð ð ð à!œ[ðñ ô ñô ð ð �QŠ;ˆ;Ý˜tœzÑ*Ô*ð 
ð 
�Ý˜4 ¨Ñ!3Ñ4Ô4ð 	Ý  d¨[Ñ&8Ñ9Ô9�AØð ØŸšð !%§
¢
¡¤  Ý '¨°¸vÈ¹{Ð KÑ KÔ KÐ Kðñô ð øð �{Š{˜4Ñ Ô ×(Ò(¨°6Ñ:Ô:Ð:r"   c                 óh   ‡ — t          ˆ fd„t          t          j        ¦  «        D ¦   «         ¦  «        S )zReturn set of file flags.c              3   óf   •K  — | ]+}t          ‰d |z   ¦  «        ¯|                     ¦   «         V — Œ,dS rz   ©rf   Úlower©r   rÜ  r`   s     €r    r!   z!TiffFile.flags.<locals>.<genexpr>—
  sS   øè è € ð 
ð 
àÝ�t˜U T™\Ñ*Ô*ð
Ø�JŠJ‰LŒLð
ð 
ð 
ð 
ð 
ð 
r"   ©Úsetrp  rO   rå  rË  s   `r    r   zTiffFile.flags”
  sG   ø€ õ ð 
ð 
ð 
ð 
å�tœÑ/Ô/ð
ñ 
ô 
ñ 
ô 
ð 	
r"   c                 ón   — 	 | j         d         j        p| j         d         j        S # t          $ r Y dS w xY w)zFile has MD Gel format.r   r&   F)rQ   Úis_mdgelrŸ  rË  s    r    r  zTiffFile.is_mdgel�
  sF   € ð	Ø”:˜a”=Ô)ÐC¨T¬Z¸¬]Ô-CÐCøÝð 	ð 	ð 	Ø�5�5ð	øøøs   ‚#& ¦
4³4c                 ó   — | j         j        S )zReturn if file is a movie.)rQ   rô  rË  s    r    Úis_moviezTiffFile.is_movie¥
  s   € ð ŒzÔ#Ð#r"   c                 óP   — | j         sdS t          d„ | j        D ¦   «         ¦  «        S )z9Return Tifffile metadata from JSON descriptions as dicts.Nc              3   óŽ   K  — | ]@}|j                              ¦   «         d k    ¯t          |j        d         j        ¦  «        V — ŒAdS )Úshapedr   N)r  r	  r/  rQ   r.  r  s     r    r!   z+TiffFile.shaped_metadata.<locals>.<genexpr>¯
  sT   è è € ð 
ð 
àØŒw�}Š}‰Œ (Ò*Ð*õ & a¤g¨a¤jÔ&:Ñ;Ô;à*Ð*Ð*Ð*ð
ð 
r"   )r.  r  rT   rË  s    r    Úshaped_metadatazTiffFile.shaped_metadataª
  sC   € ð Œ~ð 	ØˆFÝð 
ð 
à”[ð
ñ 
ô 
ñ 
ô 
ð 	
r"   c                 ó^   — | j         sdS t          | j        d         j        ¦  «        d         S )zReturn OME XML as dict.Nr   r’  )r   r   rQ   r~  rË  s    r    Úome_metadatazTiffFile.ome_metadataµ
  s/   € ð Œ{ð 	ØˆFÝ˜œ
 1œÔ1Ñ2Ô2°5Ô9Ð9r"   c                 óš   — | j         sdS d}| j        d         j                             d|z   dz   |¦  «        }t	          |¦  «        |         S )z<Return PerkinElmer-QPI-ImageDescription XML element as dict.Nz PerkinElmer-QPI-ImageDescriptionr   ú )Ú	is_qptiffrQ   r~  r¡  r   )r`   r¥  Úxmls      r    Úqptiff_metadatazTiffFile.qptiff_metadata½
  sP   € ð Œ~ð 	ØˆFØ1ˆØŒj˜ŒmÔ'×/Ò/°°d±
¸SÑ0@À$ÑGÔGˆÝ˜‰}Œ}˜TÔ"Ð"r"   c                 óN   — | j         sdS | j        d         j        d         j        S )z0Return LSM metadata from CZ_LSMINFO tag as dict.Nr   Ú
CZ_LSMINFO)rî  rQ   r  rl   rË  s    r    rÇ  zTiffFile.lsm_metadataÆ
  s*   € ð Œ{ð 	ØˆFØŒz˜!Œ}Ô! ,Ô/Ô5Ð5r"   c                 ó4  — | j         sdS | j        d         }|j        }i }|d         j        |d<   |j        r|j                             d¦  «        |d<   d|v r |                     |d         j        ¦  «         d|v r |                     |d         j        ¦  «         d	|v r |                     |d	         j        ¦  «         |d         j        }|d
         |d
<   |d         |d<   |d         |d<   	 t          j	        d„ t          |d         |d         ¦  «        D ¦   «         d¬¦  «        |d<   t          j	        d„ t          |d         |d         ¦  «        D ¦   «         d¬¦  «        |d<   n.# t          $ r!}t          j        d|z  ¦  «         Y d}~nd}~ww xY w|S )z*Return STK metadata from UIC tags as dict.Nr   ÚUIC2tagÚNumberPlanesú ÚPlaneDescriptionsÚUIC1tagÚUIC3tagÚUIC4tagÚ	ZDistanceÚTimeCreatedÚTimeModifiedc                 ó    — g | ]}t          |Ž ‘ŒS r   ©Újulian_datetime©r   Údts     r    rK  z)TiffFile.stk_metadata.<locals>.<listcomp>æ
  ó-   € ð ð ð àõ $ RÐ(ðð ð r"   ÚDateCreatedzdatetime64[ns]rÖ   ÚDatetimeCreatedc                 ó    — g | ]}t          |Ž ‘ŒS r   r*  r,  s     r    rK  z)TiffFile.stk_metadata.<locals>.<listcomp>í
  r.  r"   ÚDateModifiedÚDatetimeModifiedzstk_metadata: %s)Úis_stkrQ   r  r  r~  r  rN   rl   r<   r
  Úzipr,   r    r¡   )r`   rX   r  rZ   Úuic2tagrm   s         r    Ústk_metadatazTiffFile.stk_metadataÍ
  s  € ð Œ{ð 	ØˆFØŒz˜!Œ}ˆØŒyˆØˆØ!% i¤Ô!6ˆˆ~ÑØÔð 	GØ*.Ô*:×*@Ò*@ÀÑ*FÔ*FˆFÐ&Ñ'ð ˜ÐÐØ�MŠM˜$˜yœ/Ô/Ñ0Ô0Ð0Ø˜ÐÐØ�MŠM˜$˜yœ/Ô/Ñ0Ô0Ð0Ø˜ÐÐØ�MŠM˜$˜yœ/Ô/Ñ0Ô0Ð0Ø�y”/Ô'ˆØ% kÔ2ˆˆ{ÑØ '¨Ô 6ˆˆ}ÑØ!(¨Ô!8ˆˆ~Ñð	2Ý(-¬ðð å! '¨-Ô"8¸'À-Ô:PÑQÔQðñ ô ð 'ð)ñ )ô )ˆFÐ$Ñ%õ */¬ðð å! '¨.Ô"9¸7À>Ô;RÑSÔSðñ ô ð 'ð*ñ *ô *ˆFÐ%Ñ&Ð&øõ ð 	2ð 	2ð 	2ÝŒMÐ,¨qÑ0Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1øøøøð	2øøøàˆs   Ã/A:E* Å*
FÅ4FÆFc                 óÚ   — | j         sdS | j        d         }t          |j         ¦  «        }d|j        v r7	 |                     |j        d         j        ¦  «         n# t          $ r Y nw xY w|S )z,Return consolidated ImageJ metadata as dict.Nr   Ú
IJMetadata)Ú	is_imagejrQ   Úimagej_description_metadatar  rN   rl   r@   )r`   rX   rZ   s      r    rG  zTiffFile.imagej_metadata÷
  sƒ   € ð Œ~ð 	ØˆFØŒz˜!Œ}ˆÝ,¨T¬^Ñ<Ô<ˆØ˜4œ9Ð$Ð$ðØ—’˜dœi¨Ô5Ô;Ñ<Ô<Ð<Ð<øÝð ð ð Ø�ðøøøàˆs   µ%A Á
A(Á'A(c                 óª   — | j         sdS i }| j        d         }|                     |j        d         j        ¦  «         |j        d         j        |d<   |S )z.Return consolidated FluoView metadata as dict.Nr   Ú	MM_HeaderÚMM_StampÚStamp)Úis_fluoviewrQ   rN   r  rl   )r`   rZ   rX   s      r    rS  zTiffFile.fluoview_metadata  sZ   € ð Ôð 	ØˆFØˆØŒz˜!Œ}ˆØ�Š�d”i Ô,Ô2Ñ3Ô3Ð3àœ) JÔ/Ô5ˆˆw‰ð ˆr"   c                 óN   — | j         sdS | j        d         j        d         j        S )z:Return NIH Image metadata from NIHImageHeader tag as dict.Nr   ÚNIHImageHeader)r  rQ   r  rl   rË  s    r    Únih_metadatazTiffFile.nih_metadata  s+   € ð Œ{ð 	ØˆFØŒz˜!Œ}Ô!Ð"2Ô3Ô9Ð9r"   c                 ó€   — | j         sdS | j        d         j        }d|v r|d         j        S d|v r|d         j        S dS )z5Return FEI metadata from SFEG or HELIOS tags as dict.Nr   ÚFEI_SFEGÚ
FEI_HELIOS)Úis_feirQ   r  rl   )r`   r  s     r    Úfei_metadatazTiffFile.fei_metadata   s[   € ð Œ{ð 	ØˆFØŒz˜!Œ}Ô!ˆØ˜ÐÐØ˜
Ô#Ô)Ð)Ø˜4ÐÐØ˜Ô%Ô+Ð+ð  Ðr"   c                 óN   — | j         sdS | j        d         j        d         j        S )z,Return SEM metadata from CZ_SEM tag as dict.Nr   ÚCZ_SEM)Úis_semrQ   r  rl   rË  s    r    Úsem_metadatazTiffFile.sem_metadata+  s*   € ð Œ{ð 	ØˆFØŒz˜!Œ}Ô! (Ô+Ô1Ð1r"   c                 óÚ   — | j         dd…         D ]}d|j        v r	|j        } nŒdS i }t          dd¦  «        D ]1}t          j        |         }||vrŒ||         j        ||dd…         <   Œ2|S )z6Return consolidated metadata from MD GEL tags as dict.Nr‘   Ú	MDFileTagé¥‚  i­‚  )rQ   r  rq  rO   ÚTAGSrl   )r`   rX   r  rZ   r  rÜ  s         r    re  zTiffFile.mdgel_metadata2  sš   € ð ”J˜r ˜r”Nð 	ð 	ˆDØ˜dœiÐ'Ð'Ø”y�Ø�ð (ð ˆFØˆÝ˜% Ñ'Ô'ð 	0ð 	0ˆDÝ”9˜T”?ˆDØ˜4ÐÐØØ# DœzÔ/ˆF�4˜˜˜”8ÑÐØˆr"   c                 ó&   — | j         d         j        S )zReturn Andor tags as dict.r   )rQ   Ú
andor_tagsrË  s    r    Úandor_metadatazTiffFile.andor_metadataC  ó   € ð Œz˜!Œ}Ô'Ð'r"   c                 ó&   — | j         d         j        S )z'Return EPICS areaDetector tags as dict.r   )rQ   Ú
epics_tagsrË  s    r    Úepics_metadatazTiffFile.epics_metadataH  rT  r"   c                 óN   — | j         sdS | j        d         j        d         j        S )zReturn TVIPS tag as dict.Nr   ÚTVIPS)Úis_tvipsrQ   r  rl   rË  s    r    Útvips_metadatazTiffFile.tvips_metadataM  s*   € ð Œ}ð 	ØˆFØŒz˜!Œ}Ô! 'Ô*Ô0Ð0r"   c                 óR   — | j         sdS t          | j        d         j        ¦  «        S )z:Return MetaSeries metadata from image description as dict.Nr   )Úis_metaseriesÚmetaseries_description_metadatarQ   r~  rË  s    r    Úmetaseries_metadatazTiffFile.metaseries_metadataT  s+   € ð Ô!ð 	ØˆFÝ.¨t¬z¸!¬}Ô/HÑIÔIÐIr"   c                 óR   — | j         sdS t          | j        d         j        ¦  «        S )z7Return Pilatus metadata from image description as dict.Nr   )Ú
is_pilatusÚpilatus_description_metadatarQ   r~  rË  s    r    Úpilatus_metadatazTiffFile.pilatus_metadata[  s*   € ð Œð 	ØˆFÝ+¨D¬J°q¬MÔ,EÑFÔFÐFr"   c                 ó    — | j         sdS t          | j        ¦  «        }|                     | j        d         j        d         j        ¦  «         |S )z2Return consolidated MicroManager metadata as dict.Nr   ÚMicroManagerMetadata)Úis_micromanagerÚread_micromanager_metadatar¸   rN   rQ   r  rl   )r`   rZ   s     r    Úmicromanager_metadatazTiffFile.micromanager_metadatab  sL   € ð Ô#ð 	ØˆFå+¨D¬HÑ5Ô5ˆà�Š�d”j ”mÔ(Ð)?Ô@ÔFÑGÔGÐGØˆr"   c                 óF  — | j         sdS i }	 t          | j        ¦  «        \  }}||d<   |                     |¦  «         n# t          $ r Y nw xY w	 t          | j        d         j        ¦  «        |d<   n.# t          $ r!}t          j
        d|z  ¦  «         Y d}~nd}~ww xY w|S )z<Return ScanImage non-varying frame and ROI metadata as dict.NÚ	FrameDatar   ÚDescriptionz)scanimage_description_metadata failed: %s)Úis_scanimageÚread_scanimage_metadatar¸   rN   r,   Úscanimage_description_metadatarQ   r~  r@   r    r¡   )r`   rZ   Ú	framedataÚroidatarm   s        r    Úscanimage_metadatazTiffFile.scanimage_metadatam  sé   € ð Ô ð 	ØˆFØˆð	Ý!8¸¼Ñ!BÔ!BÑˆI�wØ"+ˆF�;ÑØ�MŠM˜'Ñ"Ô"Ð"Ð"øÝð 	ð 	ð 	ØˆDð	øøøð	KÝ$BØ”
˜1”Ô)ñ%ô %ˆF�=Ñ!Ð!øõ ð 	Kð 	Kð 	KÝŒMÐEÈÑIÑJÔJÐJÐJÐJÐJÐJÐJøøøøð	Køøøàˆs'   �1? ¿
AÁAÁ"A3 Á3
BÁ=BÂBc                 ó8   — | j         sdS | j        d         j        S )z0Return GeoTIFF metadata from first page as dict.Nr   )Ú
is_geotiffrQ   Úgeotiff_tagsrË  s    r    Úgeotiff_metadatazTiffFile.geotiff_metadata‚  s"   € ð Œð 	ØˆFØŒz˜!Œ}Ô)Ð)r"   )NNNTN)NNNTr&   ©r   ré  )2rh   rp   rq   rr   ra   Úpropertyrï  rW   r   rý  rÍ  r/   rT   r  r8  rJ  rW  rg  rk  r·  rË  rñ  rò  ró  ræ  rÏ  r×  rû  r   r  r  r  r  r  rÇ  r7  rG  rS  rC  rH  rL  re  rS  rW  r[  r_  rc  rh  rq  ru  r   r"   r    r	   r	   Ç  s/  € € € € € ð"ð "ðN ØØØØðið ið ið iðV ðð ñ „Xðð ðð ñ „Xðð ðð ñ „Xððð ð ðdð dð dð dðL ðð ñ „Xðð:)ð )ð )ðVZð Zð ZðxP
ð P
ð P
ðd
ð 
ð 
ð,
ð 
ð 
ð<Sð Sð Sðrð rð rðh ð  ð  ðD%ð %ð %ð32ð 32ð 32ðjð ð ð8

ð 

ð 

ðð ð ðð ð ð<;ð <;ð <;ð <;ð| ð
ð 
ñ „Xð
ð ðð ñ „Xðð ð$ð $ñ „Xð$ð ð
ð 
ñ „Xð
ð ð:ð :ñ „Xð:ð ð#ð #ñ „Xð#ð ð6ð 6ñ „Xð6ð ð'ð 'ñ „Xð'ðR ðð ñ „Xðð ðð ñ „Xðð& ð:ð :ñ „Xð:ð ð,ð ,ñ „Xð,ð ð2ð 2ñ „Xð2ð ðð ñ „Xðð  ð(ð (ñ „Xð(ð ð(ð (ñ „Xð(ð ð1ð 1ñ „Xð1ð ðJð Jñ „XðJð ðGð Gñ „XðGð ðð ñ „Xðð ðð ñ „Xðð( ð*ð *ñ „Xð*ð *ð *r"   r	   c                   óþ   — e Zd ZdZd„ Zed„ ¦   «         Zej        d„ ¦   «         Zed„ ¦   «         Zej        d„ ¦   «         Zed„ ¦   «         Z	e	j        d„ ¦   «         Z	ed	„ ¦   «         Z
d
„ Zdd„Zdd„Zd„ Zd„ Zd„ Zd„ ZdS )rí  z(Sequence of TIFF image file directories.c                 ó  — || _         g | _        d| _        t          | _        d| _        d| _        |j        }|                     ¦   «         | _	        t          j        |j        |                     |j        ¦  «        ¦  «        d         }|dk    r	d| _        dS ||j        k    r t!          j        d|z  ¦  «         d| _        dS |                     |¦  «         t          |d¬¦  «        }| j                             |¦  «         || _        dS )z“Initialize instance from file. Read first TiffPage from file.

        The file position must be at an offset to an offset to a TiffPage.

        FNTr   úinvalid page offset (%i)©r‰  )r“  rQ   Úcompleterú  Ú	_tiffpageÚ	_keyframeÚ_cacherï  r˜   Ú_nextpageoffsetrº   ré  r  rè  r  rH   r    r¡   r%   r7   )r`   r“  r¼   rU   rX   s        r    ra   zTiffPages.__init__�  sù   € ð ˆŒØˆŒ
ØˆŒÝ!ˆŒØˆŒØˆŒð ÔˆØ!Ÿwšw™yœyˆÔÝ”˜vÔ2°B·G²G¸FÔ<MÑ4NÔ4NÑOÔOÐPQÔRˆà�QŠ;ˆ;à ˆDŒMØˆFØ�R”WÒÐÝŒMÐ4°vÑ=Ñ>Ô>Ð>Ø ˆDŒMØˆFð 	�Š�‰ŒˆÝ˜ aÐ(Ñ(Ô(ˆØŒ
×Ò˜$ÑÔÐØˆŒˆˆr"   c                 ó   — | j         S )z2Return if pages/frames are currently being cached.)r  rË  s    r    rÍ  zTiffPages.cache®  s   € ð Œ{Ðr"   c                 ól   — t          |¦  «        }| j        r|s|                      ¦   «          || _        dS )z@Enable or disable caching of pages/frames. Clear cache if False.N)r£   r  r!  ©r`   rl   s     r    rÍ  zTiffPages.cache³  s8   € õ �U‘”ˆØŒ;ð 	˜uð 	Ø�JŠJ‰LŒLˆLØˆŒˆˆr"   c                 ó>   — | j         t          k    ot          t          uS )z?Return if currently using TiffFrame (True) or TiffPage (False).)r}  Ú	TiffFramerú  rË  s    r    rô  zTiffPages.useframes»  s   € ð Œ~¥Ò*ÐH­yÅÐ/HÐHr"   c                 ó0   — |rt           nt          | _        dS )z0Set to use TiffFrame (True) or TiffPage (False).N)r…  rú  r}  rƒ  s     r    rô  zTiffPages.useframesÀ  s   € ð ',Ð9�˜µˆŒˆˆr"   c                 ó   — | j         j        S )z!Return index of current keyframe.)r~  r‰  rË  s    r    r  zTiffPages.keyframeÅ  s   € ð Œ~Ô#Ð#r"   c                 óh  — | j         j        |k    rdS | j        s"d|cxk    rt          | j        ¦  «        k     rRn nO| j        |         }t          |t          ¦  «        r	|| _         dS t          |t          ¦  «        r|j        | j        |<   | j	        }t          | _
        | |         | _         || _	        dS )z;Set current keyframe. Load TiffPage from file if necessary.Nr   )r~  r‰  r|  r.   rQ   r(   rú  r…  rU   rô  r}  )r`   r‰  rX   rô  s       r    r  zTiffPages.keyframeÊ  sº   € ð Œ>Ô 5Ò(Ð(ØˆFØŒ=ð 	0˜A Ð8Ð8Ò8Ð8­¨T¬Z©¬Ò8Ð8Ð8Ð8Ð8Ø”:˜eÔ$ˆDÝ˜$¥Ñ)Ô)ð 0Ø!%�”Ø�Ý˜D¥)Ñ,Ô,ð 0à$(¤K�”
˜5Ñ!à”Nˆ	Ý!ˆŒØ˜eœˆŒØ"ˆŒˆˆr"   c                 óH   — | j         s|                      d¦  «         | j        S )z7Return offset where offset to a new page can be stored.rÁ   )r|  Ú_seekr€  rË  s    r    rš   zTiffPages.next_page_offsetÝ  s&   € ð Œ}ð 	Ø�JŠJ�r‰NŒNˆNØÔ#Ð#r"   c                 ó4  — | j         j        }| j        }| j        }| j        s|                      d¦  «         t          |¦  «        D ]Q\  }}t          |t          ¦  «        r7| 	                    |¦  «         |  
                    | j         ||¬¦  «        }|||<   ŒRdS )z#Read all remaining pages from file.rÁ   ©r‰  r  N)r“  rï  r~  rQ   r|  rŠ  rr  r(   r  r%   r}  )r`   r¼   r  rQ   r   rX   s         r    r"  zTiffPages.loadä  sœ   € àŒ[Ô#ˆØ”>ˆØ”
ˆØŒ}ð 	Ø�JŠJ�r‰NŒNˆNÝ  Ñ'Ô'ð 	 ð 	 ‰GˆAˆtÝ˜$¥Ñ)Ô)ð  Ø—’˜‘”�Ø—~’~ d¤k¸ÀX�~ÑNÔN�Ø��a‘øð		 ð 	 r"   Tc                 ót  — | j         }| j        rt          |¦  «        dk     rdS |d         | _        |rAt	          |dd…         ¦  «        D ]'\  }}t          |t          ¦  «        s|j        ||dz   <   Œ(dS t          t          ur4t	          |¦  «        D ]&\  }}t          |t          ¦  «        r
|j        ||<   Œ%dS dS )zADelete all but first page from cache. Set keyframe to first page.r&   Nr   )
rQ   r  r.   r~  rr  r(   r  rU   r…  rú  )r`   ÚfullyrQ   r   rX   s        r    r!  zTiffPages.clearñ  sà   € à”
ˆØŒ{ð 	�c %™jœj¨1šn˜nØˆFØ˜qœˆŒØð 		+å$ U¨1¨2¨2¤YÑ/Ô/ð /ð /‘��4Ý! $­Ñ1Ô1ð /Ø#'¤;�E˜!˜a™%‘Løð/ð /õ �hÐ&Ð&å$ UÑ+Ô+ð +ð +‘��4Ý˜d¥IÑ.Ô.ð +Ø#œ{�E˜!‘Høð	 'Ð&ð+ð +r"   é  @ c                 ó|  — | j         }|sdS | j        j        }|j        rt	          d¦  «        ‚| j        sd|cxk    rt          |¦  «        k     r@n n=||         }t          |t          ¦  «        r|n|j	        }| 
                    |¦  «         dS | j        j        }| j        j        }| j        j        }	| j        j        }
| j        j        }t           j        }|d         }t          |t          ¦  «        r|n|j	        }t          |¦  «        |k     �rP| 
                    |¦  «         	  ||	|                     |
¦  «        ¦  «        d         }|dk    rt'          d¦  «        ‚n1# t(          $ r$ t+          j        d|z  ¦  «         |d= d| _        Y nÒw xY w||
z   ||z  z   | _        | 
                    | j        ¦  «          |||                     |¦  «        ¦  «        d         }|dk    rd| _        nq||j        k    rt+          j        d	|z  ¦  «         d| _        nG|                     |¦  «         d|cxk    rt          |¦  «        k     rn nnt          |¦  «        |k     �°P|t          |¦  «        k    rt5          d
¦  «        ‚||         }| 
                    t          |t          ¦  «        r|n|j	        ¦  «         dS )z&Seek file to offset of specified page.NzFileHandle is closedr   rÁ   é   úsuspicious number of tagsúcorrupted tag list at offset %iTrz  úlist index out of range)rQ   r“  rï  Úclosedrd   r|  r.   r(   r  rU   r%   r  r  rŒ  rê  r�  rº   ré  rè  r,   r@   r    r¡   r€  rH   r7   rŸ  )r`   r‰  ÚmaxpagesrQ   r¼   rX   rU   r  r  rŒ  rê  r�  ré  Útagnos                 r    rŠ  zTiffPages._seek  sÞ  € à”
ˆØð 	ØˆFàŒ[Ô#ˆØŒ9ð 	7ÝÐ5Ñ6Ô6Ð6àŒ=ð 	˜A Ð3Ð3Ò3Ð3­¨U©¬Ò3Ð3Ð3Ð3Ð3Ø˜”<ˆDÝ'¨­hÑ7Ô7ÐH�T�T¸T¼[ˆFØ�GŠG�F‰OŒOˆOØˆFà”{Ô/ˆØ”[Ô+ˆ
Ø”kÔ-ˆØ”KÔ)ˆ	Ø”+Ô%ˆÝ”ˆà�RŒyˆÝ# D­(Ñ3Ô3ÐD��¸¼ˆå�%‰jŒj˜8Ò#Ñ#à�GŠG�F‰OŒOˆOðØ˜˜{¨B¯GªG°IÑ,>Ô,>Ñ?Ô?ÀÔB�Ø˜4’<�<Ý$Ð%@ÑAÔAÐAð  øåð ð ð Ý”Ð?À&ÑHÑIÔIÐIØ˜"�IØ $�”Ø�ð	øøøð
 $*¨IÑ#5¸À¹Ñ#GˆDÔ Ø�GŠG�DÔ(Ñ)Ô)Ð)ð �V˜L¨"¯'ª'°*Ñ*=Ô*=Ñ>Ô>¸qÔAˆFØ˜Š{ˆ{Ø $�”ØØ˜œÒ Ð Ý”Ð8¸6ÑAÑBÔBÐBØ $�”Øà�LŠL˜Ñ Ô Ð Ø�EÐ&Ð&Ò&Ð&�C ™JœJÒ&Ð&Ð&Ð&Ð&Øõ9 �%‰jŒj˜8Ò#Ñ#ð< •C˜‘J”JÒÐÝÐ6Ñ7Ô7Ð7à�UŒ|ˆØ
�Š�
 4­Ñ2Ô2ÐC��¸¼ÑDÔDÐDÐDÐDs   Ä':E" Å"+FÆFc                 ó2   — t          | j        ¦  «        dk    S )z'Return True if file contains any pages.r   )r.   rQ   rË  s    r    Ú__bool__zTiffPages.__bool__@  s   € å�4”:‰Œ Ò"Ð"r"   c                 ób   — | j         s|                      d¦  «         t          | j        ¦  «        S )zReturn number of pages in file.rÁ   )r|  rŠ  r.   rQ   rË  s    r    Ú__len__zTiffPages.__len__D  s)   € àŒ}ð 	Ø�JŠJ�r‰NŒNˆNÝ�4”:‰ŒÐr"   c                 óÒ  ‡ — ‰ j         }|st          d¦  «        ‚|dk    r||         S t          |t          ¦  «        r‹|                     d¦  «        \  }}}‰ j        s6t          ||¦  «        t          |¦  «        k    r‰                      d¦  «         ˆ fd„t          |                     t          |¦  «        ¦  «        Ž D ¦   «         S ‰ j        r"|t          |¦  «        k    rt          d¦  «        ‚	 ||         }n# t          $ r d}Y nw xY wt          |t          ¦  «        s|S ‰                      |¦  «         ‰                      ‰ j        |‰ j        ¬¦  «        }‰ j        r|||<   |S )z,Return specified page(s) from cache or file.r”  r   rD  rÁ   c                 ó    •— g | ]
}‰|         ‘ŒS r   r   )r   r   r`   s     €r    rK  z)TiffPages.__getitem__.<locals>.<listcomp>V  s   ø€ ÐEÐEÐE �D˜”GÐEÐEÐEr"   rŒ  )rQ   rŸ  r(   r  r×  r|  r  r.   rŠ  rq  r  r}  r“  r~  r  )r`   rC  rQ   r­  r®  r[   rX   s   `      r    Ú__getitem__zTiffPages.__getitem__J  sx  ø€ à”
ˆØð 	8ÝÐ6Ñ7Ô7Ð7Ø�!Š8ˆ8Ø˜”:Ðå�c�5Ñ!Ô!ð 	FØ Ÿ[š[¨Ñ3Ô3‰NˆE�4˜Ø”=ð ¥S¨¨uÑ%5Ô%5½¸E¹
¼
Ò%BÐ%BØ—
’
˜2‘”�ØEÐEÐEÐE¥U¨C¯KªK½¸E¹
¼
Ñ,CÔ,CÐ%DÐEÑEÔEÐEàŒ=ð 	8˜S¥C¨¡J¤JÒ.Ð.ÝÐ6Ñ7Ô7Ð7ð	Ø˜”:ˆDˆDøÝð 	ð 	ð 	ØˆDˆDˆDð	øøøå˜$¥Ñ)Ô)ð 	ØˆKà�
Š
�3‰ŒˆØ�~Š~˜dœk°¸t¼~ˆ~ÑNÔNˆØŒ;ð 	ØˆE�#‰JØˆs   Ã2C; Ã;D
Ä	D
c              #   óR   K  — d}	 	 | |         V — |dz  }n# t           $ r Y dS w xY wŒ#)zReturn iterator over all pages.r   Tr&   N)rŸ  )r`   r   s     r    Ú__iter__zTiffPages.__iter__h  sT   è è € àˆð	ðØ˜1”g���Ø�Q‘��øÝð ð ð Ø��ðøøøð		s   ‡ —
%¤%N©T)r�  )rh   rp   rq   rr   ra   rw  rÍ  Úsetterrô  r  rš   r"  r!  rŠ  r™  r›  rž  r   r   r"   r    rí  rí  Š  sj  € € € € € Ø2Ð2ðð ð ðB ðð ñ „Xðð „\ðð ñ „\ðð ðIð Iñ „XðIð Ôð:ð :ñ Ôð:ð ð$ð $ñ „Xð$ð „_ð#ð #ñ „_ð#ð$ ð$ð $ñ „Xð$ð ð  ð  ð+ð +ð +ð +ð"<Eð <Eð <Eð <Eð|#ð #ð #ðð ð ðð ð ð<ð ð ð ð r"   rí  c                   ó  — e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZdZdZdZd7d„Z	 	 	 	 	 	 d8d
„Z	 	 	 	 	 d9d„Zd„ Zed„ ¦   «         Zej        d„ ¦   «         Zed„ ¦   «         Z ed„ ¦   «         Z!ed„ ¦   «         Z"ed„ ¦   «         Z#d: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!„ ¦   «         Z0ed"„ ¦   «         Z1ed#„ ¦   «         Z2ed$„ ¦   «         Z3ed%„ ¦   «         Z4ed&„ ¦   «         Z5ed'„ ¦   «         Z6ed(„ ¦   «         Z7ed)„ ¦   «         Z8ed*„ ¦   «         Z9ed+„ ¦   «         Z:ed,„ ¦   «         Z;ed-„ ¦   «         Z<ed.„ ¦   «         Z=ed/„ ¦   «         Z>ed0„ ¦   «         Z?ed1„ ¦   «         Z@ed2„ ¦   «         ZAed3„ ¦   «         ZBed4„ ¦   «         ZCed5„ ¦   «         ZDed6„ ¦   «         ZEdS );rú  a  TIFF image file directory (IFD).

    Attributes
    ----------
    index : int
        Index of page in file.
    dtype : numpy.dtype or None
        Data type (native byte order) of the image in IFD.
    shape : tuple
        Dimensions of the image in IFD.
    axes : str
        Axes label codes:
        'X' width, 'Y' height, 'S' sample, 'I' image series|page|plane,
        'Z' depth, 'C' color|em-wavelength|channel, 'E' ex-wavelength|lambda,
        'T' time, 'R' region|tile, 'A' angle, 'P' phase, 'H' lifetime,
        'L' exposure, 'V' event, 'Q' unknown, '_' missing
    tags : dict
        Dictionary of tags in IFD. {tag.name: TiffTag}
    colormap : numpy.ndarray
        Color look up table, if exists.

    All attributes are read-only.

    Notes
    -----
    The internal, normalized '_shape' attribute is 6 dimensional:

    0 : number planes/images  (stk, ij).
    1 : planar samplesperpixel.
    2 : imagedepth Z  (sgi).
    3 : imagelength Y.
    4 : imagewidth X.
    5 : contig samplesperpixel.

    r   r&   ì   ÿÿ Nr,  c           	      óZ  ‡— || _         || _        d| _        d| _        d| _        d| _        d| _        i | _        d| _        d| _	        |j
        }|                     ¦   «         | _        	 t          j        |j        |                     |j        ¦  «        ¦  «        d         }|dk    rt%          d¦  «        ‚n%# t&          $ r t%          d| j        z  ¦  «        ‚w xY w|j        }|                     ||z  ¦  «        }| j        }| }t+          |¦  «        D ]í}	||z  }	 t-          | j         ||||z   …         ¦  «        }
n=# t,          j        $ r+}t1          j        t5          |¦  «        ¦  «         Y d}~Œ^d}~ww xY w|
j        }||vr|}|
||<   nd}	 d
||fz  }||vr|
||<   nŒt8          j                             |d¦  «        }|r=|dd…         dv rt?          |
j         t4          ¦  «        sŒ×tC          | ||
j         ¦  «         Œî|sdS | j"        r| j#         n| j$        r| j%         | j&        s| j        r,| j         j&        r | j        d          '                    | ¦  «         | j(        s| j        r| j         j(        rd| _)        | j*        rqd|v rm|d         j         s`|d         }| +                    |j,        ¦  «         t[          || j         j.        |j        |j/        d|d         j/        ¦  «        |d         _         d|v rv	 ta          |d         j         |d         j         | j         j.        ¦  «        |d         _         n8# t&          $ r+}t1          j        t5          |¦  «        ¦  «         Y d}~nd}~ww xY wd|v rd|d         }
|
j/        dk    r|
j         | _1        nD|
j         d| j2        …         Štg          ˆfd„‰D ¦   «         ¦  «        r‰| _1        n‰d         | _1        d|v rd|d         }
|
j/        dk    r|
j         | _4        nD|
j         d| j2        …         Štg          ˆfd„‰D ¦   «         ¦  «        r‰| _4        n‰d         | _4        d|v r!d|vs|d         j/        dk    r| j5        | _6        | j4        | j1        f}t8          j7                             |d¦  «        }|�tq          j        |¦  «        }|x| _        | _        | j5        }| j9        }| j)        }| j2        }| j*        �r<| j)        dk    sJ ‚|d         j         }|d         j/        }| j:        dk    r8|dd|||f| _        |dk    r|||f| _        d| _        nJ||||f| _        d| _        n7||d||df| _        |dk    r|||f| _        d| _        n||||f| _        d| _        |dk    r| j        dd…         | _        �n@tq          j;        |d         dk    ¦  «        rd| j        z   | _        �ntq          j;        tq          j<        |d         ¦  «        dk    ¦  «        rd| j        z   | _        nÑd| j        z   | _        nÁ| j=        dk    s|dk    r{| j:        dk    r8dd||||f| _        |dk    r|||f| _        d| _        n€||||f| _        d | _        nmd||||df| _        |dk    r|||f| _        d| _        nH||||f| _        d!| _        n5dd|||df| _        |dk    r||f| _        d| _        n|||f| _        d"| _        d#|v r|d#         j         | _        nd$|v r|d$         j         | _        nd%| _        d&|v r|d&         j         | _	        n[d'|v r|d'         j         | _	        nDt}          | j        ¦  «        | j1        d(z  z  f| _	        | j?        dk    rt1          j        d)¦  «         t�          | j        ¦  «        t�          | j        ¦  «        k    sJ ‚dS )*zlInitialize instance from file.

        The file handle position must be at offset to a valid IFD.

        r   Nr,  r   r‘  r’  r“  r&   Tz%s%irÊ   zsof desr7  r#  r  r9  ÚIJMetadataByteCountsc              3   ó.   •K  — | ]}|‰d          z
  V — ŒdS rã   r   ©r   Úvrl   s     €r    r!   z$TiffPage.__init__.<locals>.<genexpr>  ó+   øè è € Ð4Ð4¨˜˜E !œH™Ð4Ð4Ð4Ð4Ð4Ð4r"   r2  c              3   ó.   •K  — | ]}|‰d          z
  V — ŒdS rã   r   r¨  s     €r    r!   z$TiffPage.__init__.<locals>.<genexpr>$  rª  r"   r*  r?  ÚYXÚYXSÚSYXr&  rB  r'  r@  r�   r‘   ÚZYXSÚSZYXÚZYXÚTileOffsetsÚStripOffsetsr9  ÚTileByteCountsÚStripByteCountsrˆ   z"required ByteCounts tag is missing)Ar“  r‰  rE   r¬   r=   r1  r  r  rÒ  rà  rï  r˜   rU   rº   ré  rŒ  rè  rê  r,   r@   r�  rq  ÚTiffTagÚErrorr    r¡   rœ   rÜ  rO   ÚTAG_ATTRIBUTESrA   r(   rl   ri   Úis_andorrR  Úis_epicsrV  rî  Ú_fix_lsm_bitspersampleÚis_vistaÚ
imagedepthr4  r%   ÚvalueoffsetÚread_uic1tagr9   r  rG  r<  r”  r*   rš  Úimagelengthr{  ÚSAMPLE_DTYPESr<   Ú
imagewidthrx  r   rÏ   rw  r   rð  r.   )r`   r“  r‰  r  r¼   r—  r�  rD   r  r[   rJ  rm   ÚtagnamerÜ  r   Úuic1tagr=   rÀ  rÂ  r½  r”  ÚuictagÚplanesrl   s                          @r    ra   zTiffPage.__init__®  s	  ø€ ð ˆŒØˆŒ
ØˆŒ
ØˆŒØˆŒ
ØˆŒØˆŒ	ØˆŒ	àˆÔØ ˆÔð ÔˆØ—g’g‘i”iˆŒð	NÝ”M &Ô"4°b·g²g¸fÔ>NÑ6OÔ6OÑPÔPÐQRÔSˆEØ�tŠ|ˆ|Ý Ð!<Ñ=Ô=Ð=ð øåð 	Nð 	Nð 	NÝÐ>ÀÄÑLÑMÔMÐMð	Nøøøð ”.ˆØ�wŠw�w ‘Ñ'Ô'ˆØŒyˆØ�ˆÝ�u‘”ð 	3ð 	3ˆAØ�WÑˆEðÝ˜dœk¨4°¸À¹Ð0GÔ+HÑIÔI��øÝ”=ð ð ð Ý”�c !™fœfÑ%Ô%Ð%Ø����øøøøðøøøð ”hˆGØ˜dÐ"Ð"Ø�Ø ��T‘
�
ð �ðØ! W¨a LÑ0�DØ 4Ð'Ð'Ø%(˜˜T™
Øð	õ
 Ô&×*Ò*¨4°Ñ4Ô4ˆDØð 3Ø˜˜˜”8˜yÐ(Ð(µ¸C¼IÅsÑ1KÔ1KÐ(Øå˜D $¨¬	Ñ2Ô2Ð2øàð 	ØˆFð Œ=ð 	ØŒOˆOˆOØŒ]ð 	ØŒOˆOàŒ;ð 	D˜4œ:ð 	D¨$¬+Ô*<ð 	DàŒI�oÔ&×=Ò=¸dÑCÔCÐCàŒ=ð 	 ˜TœZð 	 ¨D¬KÔ,@ð 	 àˆDŒOàŒ;ð 	˜9¨Ð,Ð,°T¸)´_Ô5JÐ,à˜9”oˆGØ�GŠG�GÔ'Ñ(Ô(Ð(Ý$0ØØ”Ô%Ø”Ø”ØØ�Y”Ô%ñ%ô %ˆD�ŒOÔ!ð ˜4ÐÐð&Ý+:Ø˜Ô&Ô,ØÐ/Ô0Ô6Ø”KÔ)ñ,ô ,��\Ô"Ô(Ð(øõ
 ð &ð &ð &Ý”�c !™fœfÑ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%øøøøð&øøøð ˜dÐ"Ð"Ø�Ô'ˆCØŒy˜AŠ~ˆ~Ø%(¤Y�Ô"Ð"ð œ	Ð"8 DÔ$8Ð"8Ô9�ÝÐ4Ð4Ð4Ð4¨eÐ4Ñ4Ô4Ñ5Ô5ð 2Ø).�DÔ&Ð&à).¨q¬�DÔ&à˜TÐ!Ð!Ø�~Ô&ˆCØŒy˜AŠ~ˆ~Ø$'¤I�Ô!Ð!àœ	Ð"8 DÔ$8Ð"8Ô9�ÝÐ4Ð4Ð4Ð4¨eÐ4Ñ4Ô4Ñ5Ô5ð 1Ø(-�DÔ%Ð%à(-¨a¬�DÔ%à˜DÐ Ð Ø TÐ)Ð)¨T°.Ô-AÔ-GÈ!Ò-KÐ-KØ$(Ô$4�Ô!ð Ô! 4Ô#5Ð5ˆÝÔ"×&Ò& u¨dÑ3Ô3ˆØÐÝ”K Ñ&Ô&ˆEØ#(Ð(ˆŒ
�T”[ð Ô&ˆØ”_ˆ
Ø”_ˆ
ØÔ.ˆàŒ;ñ C	"Ø”? aÒ'Ð'Ð'Ð'Ø˜)”_Ô*ˆFØ˜)”_Ô*ˆFØÔ  AÒ%Ð%Ø% q¨!¨[¸*ÀoÐV�”Ø" aÒ'Ð'Ø"(¨+°zÐ!B�D”JØ $�D”I�Ià"(¨+°zÀ?Ð!S�D”JØ %�D”I�Ià% ¸¸;È
ÐTUÐV�”Ø" aÒ'Ð'Ø"(¨+°zÐ!B�D”JØ $�D”I�Ià"(¨/¸;È
Ð!S�D”JØ %�D”Ià˜Š{ˆ{Ø!œZ¨¨¨œ^�”
‘
Ý”˜6 +Ô.°!Ò3Ñ4Ô4ð ,Ø $¤)™O�”	‘	Ý”�5œ: f¨]Ô&;Ñ<Ô<ÀÒAÑBÔBð ,Ø $¤)™O�”	�	à $¤)™O�”	�	ØÔ Ò"Ð" o¸Ò&9Ð&9ØÔ  AÒ%Ð%àØØØØØ#ð�”ð  ’?�?Ø"-¨z¸?Ð!K�D”JØ %�D”I�Ià",¨k¸:ÀÐ!W�D”JØ &�D”I�Ið Ø#ØØØØð�”ð  ’?�?Ø"1°;À
Ð!K�D”JØ %�D”I�Ià"1°:¸{ÈJÐ!W�D”JØ &�D”I�Ià˜a ¨[¸*ÀaÐHˆDŒKØ˜QŠˆØ)¨:Ð6�”
Ø �”	�	à(¨+°zÐB�”
Ø!�”	ð ˜DÐ Ð Ø# MÔ2Ô8ˆDÔÐØ˜tÐ#Ð#Ø# NÔ3Ô9ˆDÔÐà#ˆDÔà˜tÐ#Ð#Ø"&Ð'7Ô"8Ô">ˆDÔÐØ $Ð&Ð&Ø"&Ð'8Ô"9Ô"?ˆDÔÐå#*¨4¬:Ñ#6Ô#6¸$Ô:LÐPQÑ:QÑ#RÐ"TˆDÔØÔ 1Ò$Ð$Ý”ÐBÑCÔCÐCå�4”:‰Œ¥# d¤i¡.¤.Ò0Ð0Ð0Ð0Ð0Ð0s=   Á)AB7 Â7"CÄ D=Ä=E7Å!E2Å2E7Ë;<L8 Ì8
M-Í!M(Í(M-Tì        @c           
      óž  ‡ ‡*‡+‡,— ‰ }‰ j         Š ‰ j        rt          ‰ j        ¦  «        dk    rdS ‰ j        }|s|�€|r<t          ‰ j        ¦  «        |k    r$t	          dt          ‰ j        ¦  «        z  ¦  «        ‚‰ j        €t	          d‰ j        ‰ j        fz  ¦  «        ‚‰ j	        t          j        vrt	          d‰ j	        j        z  ¦  «        ‚d|v rJ|d         Š,‰,j        dk    r7t          ˆ,fd„‰,j        D ¦   «         ¦  «        rt	          d	‰,j        z  ¦  «        ‚‰ j        r%‰ j	        d
k    s‰ j        dk    rt%          d¦  «        ‚|€dS |j        j        }	|€|	j        n|}|5  |	j        }
|
r&|r|	                     ¦   «          nt1          d¦  «        ‚ddd¦  «         n# 1 swxY w Y   ‰ j        Š+‰ j        }‰ j        }‰ j        }‰ j        }‰ j        Š*‰ j        j        ‰+j        z   }‰ j        dk    }|j         \  }}‰ j!        }|rh‰ j"        }‰ j#        }‰ j$        }||z   dz
  |z  }||z   dz
  |z  }||z   dz
  |z  }|d         |d         ||z  ||z  ||z  |d         f}||||d         f}|}n|}‰ j        dk    r
|‰ j%        z  }|dk    rA‰ j&        r:|5  |	 '                    |||d         ¬¦  «        }ddd¦  «         n# 1 swxY w Y   �n‰ j(        rÏ|�tS          ||‰+¦  «        }|5  |	 *                    |d         ¦  «         |	 +                    |t          |¦  «        |¬¦  «        }ddd¦  «         n# 1 swxY w Y   |€M|j        j,        sA| -                    d¦  «         | .                    |j         /                    ¦   «         ¦  «        }|rta          |¦  «         �n@tS          ||‰+¦  «        }t          j        ‰ j	                 }‰ j	        d
k    r^‰*dvrt	          d‰*z  ¦  «        ‚d|v r|d         j        }nd}tb          }t           2                    ‰ j3        ¦  «        j        } ||‰*| fd„}nH‰*dv r!‰*|z  dz  rt	          d¦  «        ‚|fˆ*ˆ+ˆ fd„	}n#ti          ‰*tj          ¦  «        r|‰*fd„}n|‰*|fd„}|�r±d}!d\  }}}}"tm          |	|||¦  «        D �]~}#|rta          |#¦  «        }# ||#¦  «        }# ||#¦  «        }#	 ||#_7        nŠ# t          $ r} tq          j9        d¦  «         tu          j;        |‰+¦  «         <                    d¦  «        }$t{          |#j>        |$j>        ¦  «        }%|#d|%…         |$d|%…<   |$ <                    |¦  «        }#Y nw xY w‰ j?        dk    rB|!€|#j@        d          }!|!rtu          jA        |#d!‰+|#¬"¦  «         n1tu          jA        |#d!‰+¬#¦  «        }#n‰ j?        d$k    rt%          ¦   «         ‚|#|d|"|||z   …|||z   …|||z   …dd…f<   ~#||z  }||d%         k    r-d||z   }}||d$         k    rd||z   }}||d         k    rd|"dz   }"}�Œ€|d&d|…d|…d|…dd…f         }n³‰ jB        ‰ j        z  }&‰ j        dk    r
|&‰ j%        z  }&| <                    d¦  «        }d}'tm          |	|||¦  «        D ]e}(|rta          |(¦  «        }( ||(¦  «        }( ||(¦  «        }(t{          |j>        |(j>        |&|j>        |'z
  ¦  «        })|(d|)…         ||'|'|)z   …<   ~(|'|)z  }'Œf‰ j        |_7        ‰ j?        dk    r_|r‰ j(        rV‰ j        jC        r‰ j	        dk    rn>‰ j?        dk    rtu          jA        |d!‰+|¬"¦  «         n‰ j?        d$k    rt‰          |¦  «        }|r\	 ‰ j7        |_7        nN# t          $ rA tq          j9        d't          |j7        ¦  «        ›d(t          ‰ j7        ¦  «        ›�¦  «         Y nw xY w|
r|	 E                    ¦   «          |S ))a5  Read image data from file and return as numpy array.

        Raise ValueError if format is unsupported.

        Parameters
        ----------
        out : numpy.ndarray, str, or file-like object; optional
            Buffer where image data will be saved.
            If None (default), a new array will be created.
            If numpy.ndarray, a writable array of compatible dtype and shape.
            If 'memmap', directly memory-map the image data in the TIFF file
            if possible; else create a memory-mapped array in a temporary file.
            If str or open file, the file name or file object used to
            create a memory-map to an array stored in a binary file on disk.
        squeeze : bool
            If True, all length-1 dimensions (except X and Y) are
            squeezed out from the array.
            If False, the shape of the returned array might be different from
            the page.shape.
        lock : {RLock, NullContext}
            A reentrant lock used to synchronize reads from file.
            If None (default), the lock of the parent's filehandle is used.
        reopen : bool
            If True (default) and the parent file handle is closed, the file
            is temporarily re-opened and closed if no exception occurs.
        maxsize: int or None
            Maximum size of data before a ValueError is raised.
            Can be used to catch DOS. Default: 16 TB.
        validate : bool
            If True (default), validate various parameters.
            If None, only validate parameters and return None.

        r   Nzdata are too large %szdata type not supported: %s%izcannot decompress %sr2  r&   c              3   ó8   •K  — | ]}|‰j         d          z
  V — ŒdS rã   ©rl   )r   r   rJ  s     €r    r!   z#TiffPage.asarray.<locals>.<genexpr>Ó  s.   øè è € Ð*OÐ*OÀ¨1¨s¬y¸¬|Ñ+;Ð*OÐ*OÐ*OÐ*OÐ*OÐ*Or"   zsample formats do not match %sé   r‘   z chroma subsampling not supportedzfile handle is closedrÁ   r   ©rU   ©r  T)rˆ   r�   zunsupported JPEG precision %iÚ
JPEGTablesr"   c                 óD   —  || |||¦  «                              d¦  «        S ©NrÁ   )rd  )rí   r^   Útabler<  Ú
colorspaces        r    Ú
decompressz$TiffPage.asarray.<locals>.decompress&  s(   € ð  ˜4  5¨-¸ÑDÔD×LÒLÈRÑPÔPÐPr"   )rˆ   r¾   é    é@   rZ  rˆ   zdata and sample size mismatchc                 óä   •— ‰j         dk    r‰j        }	 t          j        | |¦  «        S # t          $ r; t          | ¦  «        ‰dz  z  ‰dz  z  }t          j        | d |…         |¦  «        cY S w xY w)NrÊ   rˆ   )r|  rV   r<   Ú
frombufferr,   r.   )rí   r  Úxlenr<  r=   r`   s      €€€r    ré  z TiffPage.asarray.<locals>.unpack3  s”   ø€ Ø”~¨Ò*Ð*ð $)¤:˜ðDå$Ô/°°8Ñ<Ô<Ð<øÝ%ð Dð Dð Dõ !$ A¡¤¨=¸AÑ+=Ñ >À=ÐTUÑCUÑV˜Ý$Ô/°°%°4°%´¸(ÑCÔCÐCÐCÐCð	Døøøs   •* ªAA/Á.A/c                 ó$   — t          | ||¦  «        S r   )Ú
unpack_rgb)rí   r  r<  s      r    ré  z TiffPage.asarray.<locals>.unpackC  s   € Ý% a¨°=ÑAÔAÐAr"   c                 ó&   — t          | |||¦  «        S r   )Úunpack_ints)rí   r  r<  Úrunlens       r    ré  z TiffPage.asarray.<locals>.unpackH  s   € õ ' q¨(°MÀ6ÑJÔJÐJr"   )r   r   r   r   zinvalid tile dataÚ	WRITEABLErÂ   ©rÎ   r=   r  )rÎ   r=   rÊ   rŒ   .zfailed to reshape from r	  )Fr  r¬   r   r  r,   rœ   r=   rš  r<  rð  rO   r#  rÜ  r  r*   rl   Úis_chroma_subsampledrx  ÚNotImplementedErrorr“  rï  Úlockr•  Úopenr�   r1  rÂ  rÀ  r½  r9   rV   Ú	fillorderÚoffsets_bytecountsÚis_tiledÚ	tilewidthÚ
tilelengthÚ	tiledepthr”  rR   r  rS   r   r%   r  rN  ÚbyteswapÚviewrM  Úreverse_bitorderÚidentityfuncrT  rw  r(   r  Úbuffered_readrE   r    r¡   r<   Úzerosrd  rt  rH   r|  r   Úcumsumr{  rî  Údecode_floatsrÍ  )-r`   r  r  râ  ÚreopenÚmaxsizer  Úself_r  r¼   r•  rE   rÂ  rÀ  r½  r  Úlsb2msbrß  rá  Úistiledrç  rè  ré  ÚtwÚtlÚtdÚ	tileshaperÝ  rZ   rÓ  rÑ  ré  rÒ  ÚwritableÚplry  rG  rú   Ú
strip_sizer‰  r±  rH   r<  r=   rJ  s-   `                                         @@@r    r/   zTiffPage.asarray•  s¡
  øøøø€ ðT ˆØŒ}ˆàŒ{ð 	�g d¤kÑ2Ô2°aÒ7Ð7ØˆFàŒyˆàð 	�xÑ'Øð M�7 4¤;Ñ/Ô/°'Ò9Ð9Ý Ð!8½3¸t¼{Ñ;KÔ;KÑ!KÑLÔLÐLØŒzÐ!Ý Ø3ØÔ(¨$Ô*<Ð=ñ>ñô ð ð Ô¥tÔ'8Ð8Ð8Ý Ð!7¸$Ô:JÔ:OÑ!OÑPÔPÐPØ Ð%Ð%Ø˜>Ô*�Ø”9 ’>�>¥cÐ*OÐ*OÐ*OÐ*OÀSÄYÐ*OÑ*OÔ*OÑ&PÔ&P�>Ý$Ð%EÈÌ	Ñ%QÑRÔRÐRØÔ(ð NØÔ  AÒ%Ð%¨Ô):¸aÒ)?Ð)?å)Ð*LÑMÔMÐMØÐØ�àŒ\Ô$ˆØ˜,ˆrŒwˆw¨DˆØð 	;ð 	;Ø”YˆFØð ;Øð ;Ø—G’G‘I”I�I�Iå!Ð"9Ñ:Ô:Ð:ð	;ð 	;ð 	;ñ 	;ô 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;øøøð 	;ð 	;ð 	;ð 	;ð ”ˆØ”ˆØ”_ˆ
ØÔ&ˆØ”_ˆ
ØÔ*ˆØ”;Ô(¨5¬:Ñ5ˆØ”. AÒ%ˆØ#Ô6Ñˆ�Ø”-ˆàð 	 ØœˆIØœˆJØœˆIØ˜yÑ(¨1Ñ,°Ñ:ˆBØ 
Ñ*¨QÑ.°:Ñ=ˆBØ˜yÑ(¨1Ñ,°Ñ:ˆBà�a”Ø�a”Ø�Y‘Ø�Z‘Ø�Y‘Ø�b”	ðˆEð # J°	¸5À¼9ÐEˆIØˆFˆFàˆFàÔ Ò!Ð!Ø�dÔ*Ñ*ˆFà�(Š?ˆ?˜tÔ2ˆ?Øð Mð MØŸš¨°5ÀÈÄ˜ÑLÔL�ðMð Mð Mñ Mô Mð Mð Mð Mð Mð Mð Møøøð Mð Mð Mð MùàÔð {	"ØˆÝ# C¨°Ñ6Ô6�Øð Jð JØ—’˜ œ
Ñ#Ô#Ð#ØŸš xµ¸±´ÀS˜ÑIÔI�ðJð Jð Jñ Jô Jð Jð Jð Jð Jð Jð Jøøøð Jð Jð Jð Jð ˆ{ 6¤<Ô#8ˆ{à—’ Ñ%Ô%Ð%ØŸš V¤\×%>Ò%>Ñ%@Ô%@ÑAÔA�Øð )Ý  Ñ(Ô(Ð(ùå" 3¨¨uÑ5Ô5ˆFåÔ*¨4Ô+;Ô<ˆJàÔ 1Ò$Ð$Ø ¨Ð/Ð/Ý$Ð%DÀ}Ñ%TÑUÔUÐUØ 4Ð'Ð'Ø  Ô.Ô4�E�Eà�EÝ%�Ý!×-Ò-¨dÔ.>Ñ?Ô?ÔD�
ð $ØØ"/Ø)ðQð Qð Qð Qð Qð Ð"6Ð6Ð6Ø! FÑ*¨aÑ/ð FÝ$Ð%DÑEÔEÐEà'/ð Dð Dð Dð Dð Dð Dð Dð Dð Dõ ˜M­5Ñ1Ô1ð 
Kà'/¸}ð Bð Bð Bð Bð Bð !)¸ÈfðKð Kð Kð Kð
 ñ 9"Ø�Ø!+‘��B˜˜BÝ)¨"¨d°G¸ZÑHÔHð &3ñ &3�DØð 6Ý/°Ñ5Ô5˜Ø%˜: dÑ+Ô+�DØ!˜6 $™<œ<�Dð4Ø%.˜œ
˜
øÝ%ð 4ð 4ð 4å œÐ&9Ñ:Ô:Ð:Ý!œK¨	°5Ñ9Ô9×AÒAÀ"ÑEÔE˜Ý ¤	¨1¬6Ñ2Ô2˜Ø $ R a R¤˜˜"˜1˜"™Ø Ÿyšy¨Ñ3Ô3˜˜˜ð4øøøð ”~¨Ò*Ð*Ø#Ð+Ø'+¤z°+Ô'>˜HØ#ð LÝ!œL¨°B¸eÈÐNÑNÔNÐNÐNå#(¤<°¸2ÀUÐ#KÑ#KÔ#K˜D˜DØœ¨1Ò,Ð,Ý1Ñ3Ô3Ð3ð ð ØØØ˜R )™^Ð+Ø˜R *™_Ð,Ø˜R )™^Ð+Ø˜˜ðñð Ø˜)‘O�BØ˜U 1œX’~�~Ø!" B¨¡O˜B˜Ø  q¤š>˜>Ø%&¨¨Y© ˜BØ! U¨1¤Xš~˜~Ø)*¨B°©F B ùØ  [ j [°,°;°,ÀÀÀÈQÈQÈQÐ NÔO��à!Ô.°´Ñ@�
ØÔ$¨Ò)Ð)Ø $Ô"6Ñ6�JØŸš¨Ñ+Ô+�Ø�Ý*¨2¨t°W¸jÑIÔIð "ð "�EØð 8Ý 0°Ñ 7Ô 7˜Ø&˜J uÑ-Ô-�EØ"˜F 5™MœM�EÝ˜vœ{¨E¬J¸
ÀFÄKÐRWÑDWÑXÔX�DØ38¸¸$¸´<�F˜5 5¨4¡<Ð/Ñ0ØØ˜T‘M�E�Eà”{ˆŒàŒ>˜QÒÐ¨Ð¸Ô8JÐØŒ{Ô!ð / dÔ&6¸!Ò&;Ð&;ØØ” 1Ò$Ð$Ý”˜V¨"°E¸vÐFÑFÔFÐFÐFØ” 1Ò$Ð$Ý& vÑ.Ô.�àð 	ðØ#œz�”�øÝð ð ð Ý”�å˜6œ<Ñ(Ô(Ð(Ð(­#¨d¬j©/¬/¨/ð;ñô ð ð ð ðøøøð ð 	à�HŠH‰JŒJˆJØˆs]   Å$0F Æ F$Æ'F$ÊK Ë KËKË)AL6Ì6L:Ì=L:ÓSÓBUÕUÝ]) Ý)A^4Þ3^4Fc                 óÔ  —  | j         |i |¤Ž}| j        } | j        }	t          j        }
|	|
j        k    r§| j        }|j        d         d| j        z  k     s| j	        j
        dvrt          d¦  «        ‚|r2|                     ¦   «         dk    r|dz  }|                     d¦  «        }d| j        v r| j        dk    r|d	         n|d
         }t!          ||¦  «        }�n|	|
j        k    rªd| j        v rz|€t          j        }| j        }| j        d         j        dk    r|f}t-          |¦  «        D ];\  }}||v r2| j        dk    r|dd
ddd|z   gf         }n|dd…d
ddd|z   gf         } nŒ<n€| j        dk    r|ddd…f         }nh|dd…dd…f         }nY|	|
j        k    rt1          ¦   «         ‚|	|
j        k    rt1          ¦   «         ‚|	|
j        k    rt1          ¦   «         ‚t1          ¦   «         ‚|S )zAReturn image data as RGB(A).

        Work in progress.

        r&   r‘   rÕ   zcannot apply colormapéÿ   rˆ   Úuint8ÚS©.r   r   r8  N.rÊ   )r/   r  rw  rO   rT  rX  r}  rE   r<  r=   rV   r,   r  r_  r  rx  Úapply_colormaprV  r  ÚEXTRASAMPLEr•  r  rr  rU  rá  rc  Ú	SEPARATED)r`   r   Úalphar}  ÚdminÚdmaxÚargsr0   rD   rw  rT  r•  r   Úexss                 r    ÚasrgbzTiffPage.asrgb   sP  € ð ˆtŒ|˜TÐ, VÐ,Ð,ˆØŒ}ˆØÔ&ˆÝÔ&ˆà˜+Ô-Ò-Ð-Ø”}ˆHØŒ~˜aÔ  1 dÔ&8Ñ#8Ò8Ð8¸D¼J¼OÐSWÐ<WÐ<WÝ Ð!8Ñ9Ô9Ð9Øð 4Ø—<’<‘>”> CÒ'Ð'Ø ‘N�HØ#Ÿ?š?¨7Ñ3Ô3�Ø�d”iÐÐØ'+Ô'8¸AÒ'=Ð'=�t˜F”|�|À4ÈÄ7�Ý! $¨Ñ1Ô1ˆD‰Dà˜KœOÒ+Ð+Ø ¤Ð*Ð*Ø�=Ý Ô,�EØ#Ô0�Ø”9˜^Ô,Ô2°aÒ7Ð7Ø$0 ?�LÝ'¨Ñ5Ô5ð ð ‘F�A�sØ˜e�|�|ØÔ,°Ò1Ð1Ø#'¨¨a°°A°q¸1±uÐ-=Ð(=Ô#>˜D˜Dà#'¨¨¨¨A¨q°!°Q¸±UÐ+;Ð(;Ô#<˜DØ˜ð $øð Ô$¨Ò)Ð)Ø  R a R œ=�D�Dà    2 A 2 œ;�D�Dð ˜KÔ2Ò2Ð2Ý%Ñ'Ô'Ð'Ø˜KÔ2Ò2Ð2Ý%Ñ'Ô'Ð'Ø˜KÔ1Ò1Ð1Ý%Ñ'Ô'Ð'å%Ñ'Ô'Ð'Øˆr"   c                 ó   — | S r   r   rË  s    r    ÚaspagezTiffPage.aspageß  rÐ  r"   c                 ó   — | S r   r   rË  s    r    r  zTiffPage.keyframeâ  s   € àˆr"   c                 ó   — d S r   r   )r`   r‰  s     r    r  zTiffPage.keyframeæ  s   € àˆr"   c                 ód   — | j         r| j         \  }}|g|gfS t          | j        | j        ¦  «        S )ú)Return simplified offsets and bytecounts.)rS   Úclean_offsets_countsrÒ  rà  )r`   rU   Ú
byte_counts      r    rå  zTiffPage.offsets_bytecountsê  sA   € ð Ôð 	*Ø!%Ô!3ÑˆF�JØ�8˜j˜\Ð)Ð)Ý# DÔ$4°dÔ6IÑJÔJÐJr"   c                 ó(  ‡‡— | j         dk    s	| j        dvrdS d| j        v rh| j        | j        k    s#| j        | j        z  s| j        dz  s
| j        dz  rdS d| j        v r*d| j        v r!| j        | j        k    s| j        | j        z  rdS | j	        Š| j
        Št          ‰¦  «        dk    r‰d         ‰d         fS | j        s9t          ˆˆfd	„t          t          ‰¦  «        dz
  ¦  «        D ¦   «         ¦  «        r‰d         t          ‰¦  «        fS dS )
zlReturn offset and size of contiguous data, else None.

        Excludes prediction and fill_order.

        r&   ©rˆ   r¾   rÔ  rÕ  Nr+  r¾   r-  r.  r   c              3   ór   •K  — | ]1}‰|         ‰|         z   ‰|d z            k    p‰|d z            dk    V — Œ2dS )r&   r   Nr   )r   r   rá  rß  s     €€r    r!   z)TiffPage.is_contiguous.<locals>.<genexpr>  sg   øè è € ð 
ð 
ð ð ˜”
˜Z¨œ]Ñ*¨g°a¸!±e¬nÒ<ÐVÀ
È1ÈqÉ5Ô@QÐUVÒ@Vð
ð 
ð 
ð 
ð 
ð 
r"   )rð  r<  r  rÂ  rç  rÀ  rè  r½  ré  rÒ  rà  r.   r4  r   rq  rv  )r`   rá  rß  s    @@r    rS   zTiffPage.is_contiguousò  sm  øø€ ð Ô˜qÒ Ð  DÔ$6¸oÐ$MÐ$MØˆFØ˜$œ)Ð#Ð#à” 4¤>Ò1Ð1ØÔ# d¤oÑ5ð 2à”> BÑ&ð 2ð ”? RÑ'ð 2ð
 �à ¤	Ð)Ð)Ø 4¤9Ð,Ð,àÔ$¨¬Ò7Ð7Ø”¨¬Ñ7ð 8ð �àÔ"ˆØÔ(ˆ
Ýˆw‰<Œ<˜1ÒÐØ˜1”:˜z¨!œ}Ð,Ð,ØŒ;ð 	/�#ð 
ð 
ð 
ð 
ð 
õ �3˜w™<œ<¨!Ñ+Ñ,Ô,ð	
ñ 
ô 
ñ 
ô 
ð 	/ð ˜1”:�s :™œÐ.Ð.ð	/ð 	/r"   c                 óL   — | j         o| j        dk    o| j        dk    o| j         S )z`Return if page's image data are stored in final form.

        Excludes byte-swapping.

        r&   )rS   rä  r|  rà  rË  s    r    r2  zTiffPage.is_final  s=   € ð Ôð .Ø” !Ò#ð.à” !Ò#ð.ð Ô-Ð-ð		
r"   c                 ón   — | j         j        j        o$| j        o| j        d         | j        j        z  dk    S )ú9Return if page's image data in file can be memory-mapped.r   )r“  rï  Úis_filer2  rS   r=   r>   rË  s    r    rR   zTiffPage.is_memmappable'  s?   € ð ŒKÔ"Ô*ð =Ø”ð=ð Ô˜qÔ! D¤JÔ$7Ñ7¸1Ò<ð	
r"   ré  c                 ó  — | j         | k    rt                               | |¦  «        S d}dD ]-}t          | d|z   ¦  «        }|r|                     ¦   «         } nŒ.d                     d„ d                     d„ | j        D ¦   «         ¦  «        t                               | j	        ¦  «        j
        ›| j        ›�d                     d	„ t                               | j        ¦  «        j
        | j        rd
nd| j        dk    r| j        j
        nd| j        dk    r| j        j
        nd| j        dk    r| j        j
        nd| j        dk    r| j        j
        ndfD ¦   «         ¦  «        |d                     d„ | j        D ¦   «         ¦  «        fD ¦   «         ¦  «        }d| j        | j        |fz  }|dk    r|S |g}| j        }g }g }t/          |                     ¦   «         d„ ¬¦  «        D ]Þ}	|	                     |dz   ¬¦  «        }
|                     |
d|…                              ¦   «         ¦  «         |dk    rŽt7          |
¦  «        |k    r{|	j
                             ¦   «         }|dk    r#d|v sd|v rt9          |	j        ||dz  ¬¦  «        }
nt9          |	j        ||dz  ¬¦  «        }
|                     |	j
        ›d|
›�¦  «         Œß|                     d                     |¦  «        ¦  «         |dk    r(|                     d                     |¦  «        ¦  «         |dk    rO	 |                     dt9          |                      ¦   «         ||dz  ¬¦  «        z  ¦  «         n# t>          $ r Y nw xY wd                     |¦  «        S )z0Return string containing information about page.r,  )ÚmemmappableÚfinalrz  r{   rò  c              3   ó   K  — | ]}|¯|V — Œ	d S r   r   r  s     r    r!   z#TiffPage.__str__.<locals>.<genexpr><  s>   è è € ð 
ð 
àð& ð+
Øð
ð 
ð 
ð 
ð 
ð 
r"   rí   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r   rõ  rÚ   s     r    r!   z#TiffPage.__str__.<locals>.<genexpr>?  ó(   è è € Ð4Ð4 A�˜Q™œÐ4Ð4Ð4Ð4Ð4Ð4r"   rƒ   c              3   ó   K  — | ]}|¯|V — Œ	d S r   r   rÚ   s     r    r!   z#TiffPage.__str__.<locals>.<genexpr>B  s>   è è € ð ð àð ðØðð ð ð ð ð r"   ÚTILEDr&   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r   rï  rð  s     r    r!   z#TiffPage.__str__.<locals>.<genexpr>O  s*   è è € Ð8Ð8¨˜!Ÿ'š'™)œ)Ð8Ð8Ð8Ð8Ð8Ð8r"   zTiffPage %i @%i  %sr   c                 ó   — | j         S r   )r  rì   s    r    rî   z"TiffPage.__str__.<locals>.<lambda>Z  s   € °q´v€ r"   rB  )rù  Nr‘   ÚCOUNTSÚOFFSETSrŒ   rý  r�   ró  rÿ  rÊ   zDATA
%srˆ   ) r  r…  rû  rf   r]  r  rE   rO   ÚSAMPLEFORMATrš  rÜ  r<  rT  rw  ræ  rð  rx  r|  rä  r   r‰  rU   r  rp  r   r7   r±  r.   r  rl   r/   r@   )r`   rø  rù  rˆ  rÜ  r  r  ÚtlinesÚvlinesrJ  rl   s              r    rû  zTiffPage.__str__2  sÐ  € àŒ=˜DÒ Ð Ý×$Ò$ T¨6Ñ2Ô2Ð2ØˆØ:ð 	ð 	ˆDÝ˜4 ¨¡Ñ.Ô.ˆDØð Ø—z’z‘|”|�Ø�ðð �yŠyð 
ð 
ð —’Ð4Ð4¨¬Ð4Ñ4Ô4Ñ4Ô4å×$Ò$ TÔ%6Ñ7Ô7Ô<Ð<¸dÔ>PÐ>PðRà—’ð ð õ ×(Ò(¨Ô)9Ñ:Ô:Ô?Ø#'¤=Ð8˜˜°bØ15Ô1AÀQÒ1FÐ1F˜Ô(Ô-Ð-ÈBØ26Ô2CÀqÒ2HÐ2H˜Ô)Ô.Ð.ÈbØ/3¬~ÀÒ/BÐ/B˜œÔ+Ð+ÈØ/3¬~ÀÒ/BÐ/B˜œÔ+Ð+Èððñ ô ñ ô ð Ø—’Ð8Ð8¨T¬ZÐ8Ñ8Ô8Ñ9Ô9ð#ð
ñ 
ô 
ñ 
ô 
ˆð. %¨¬
°D´KÀÐ'FÑFˆØ�QŠ;ˆ;ØˆKØˆvˆØŒyˆØˆØˆÝ˜$Ÿ+š+™-œ-Ð-=Ð-=Ð>Ñ>Ô>ð 		<ð 		<ˆCØ—K’K e¨a¡i�KÑ0Ô0ˆEØ�MŠM˜%   œ-×-Ò-Ñ/Ô/Ñ0Ô0Ð0Ø˜Šzˆz�c %™jœj¨5Ò0Ð0Ø”x—~’~Ñ'Ô'�Ø˜Q’;�; H°Ð$4Ð$4¸	ÀTÐ8IÐ8IÝ# C¤I°UÀ6ÈAÁ:ÐNÑNÔN�E�Eå# C¤I°UÀ6ÈBÁ;ÐOÑOÔO�EØ—’¨#¬(¨(¨(°E°EÐ:Ñ;Ô;Ð;øØ�Š�D—I’I˜fÑ%Ô%Ñ&Ô&Ð&Ø�AŠ:ˆ:Ø�KŠK˜Ÿš FÑ+Ô+Ñ,Ô,Ð,Ø�AŠ:ˆ:ðØ—’Ø¥¨¯ª©¬¸uÈVÐVWÉZÐ!XÑ!XÔ!XÑXñô ð ð øõ ð ð ð Ø�ðøøøà�{Š{˜4Ñ Ô Ð s   Ì=M Í
M)Í(M)c                 óh   ‡ — t          ˆ fd„t          t          j        ¦  «        D ¦   «         ¦  «        S )zReturn set of flags.c              3   óf   •K  — | ]+}t          ‰d |z   ¦  «        ¯|                     ¦   «         V — Œ,dS rz   r  r
  s     €r    r!   z!TiffPage.flags.<locals>.<genexpr>t  sS   øè è € ð ð àÝ˜4 ¨¡Ñ.Ô.ðØ—
’
‘”ðð ð ð ð ð r"   r  rË  s   `r    r   zTiffPage.flagsp  sG   ø€ õ ðð ð ð å"¥4¤?Ñ3Ô3ðñ ô ñ
ô 
ð 	
r"   c                 ó*   — t          | j        ¦  «        S ©z"Return number of array dimensions.©r.   rE   rË  s    r    r“  zTiffPage.ndim{  ó   € õ �4”:‰ŒÐr"   c                 ó*   — t          | j        ¦  «        S ©z#Return number of elements in array.)r   rE   rË  s    r    rH   zTiffPage.size€  s   € õ �t”zÑ"Ô"Ð"r"   c                 óH  — | j         sdS | j        }d|d         j        i}t          | j                             ¦   «         ¦  «        D ][}|j        }d|cxk     rdk     sn Œ|j        }t          |j        ¦  «        dk    r|j        dd…         n|j        }|||<   ||j        = Œ\|S )zjReturn consolidated metadata from Andor tags as dict.

        Remove Andor tags from self.tags.

        NÚIdÚAndorIdé   i§  rå   )r¹  r  rl   r  r   r  r.   rÜ  )r`   r  rZ   rJ  r  rl   rÜ  s          r    rR  zTiffPage.andor_tags…  sÀ   € ð Œ}ð 	ØˆFØŒyˆØ˜˜YœÔ-Ð.ˆÝ˜œ	×(Ò(Ñ*Ô*Ñ+Ô+ð 	ð 	ˆCØ”8ˆDØ˜$Ð%Ð%Ò%Ð% Ò%Ð%Ð%Ð%ØØ”IˆEÝ#& s¤x¡=¤=°1Ò#4Ð#4�3”8˜A˜B˜B”<�<¸#¼(ˆDØ ˆF�4‰LØ�S”X��Øˆr"   c                 ó   — | j         sdS i }| j        }t          | j                             ¦   «         ¦  «        D ]Ô}|j        }d|cxk    rdk     sn Œ|j        }|dk    r0t          j                             t          |¦  «        ¦  «        |d<   nv|dk    rt          |¦  «        |d<   n]|dk    rt          |¦  «        |d<   nD|d	k    rt          |¦  «        |d
<   n+| 
                    dd¦  «        \  }}t          |¦  «        ||<   ||j        = ŒÕ|S )z~Return consolidated metadata from EPICS areaDetector tags as dict.

        Remove areaDetector tags from self.tags.

        Néèý  iÜÿ  Ú	timeStampééý  ÚuniqueIDéêý  Ú
epicsTSSeciëý  ÚepicsTSNsecú:r&   )rº  r  r  r   r  rl   r  Úfromtimestampr›  rÙ   r  r_  rÜ  )r`   rZ   r  rJ  r  rl   rC  s          r    rV  zTiffPage.epics_tagsš  s+  € ð Œ}ð 	ØˆFØˆØŒyˆÝ˜œ	×(Ò(Ñ*Ô*Ñ+Ô+ð 	ð 	ˆCØ”8ˆDØ˜DÐ(Ð(Ò(Ð( 5Ò(Ð(Ð(Ð(ØØ”IˆEØ�uŠ}ˆ}Ý&.Ô&7×&EÒ&EÅeÈEÁlÄlÑ&SÔ&S��{Ñ#Ð#Ø˜’�Ý%(¨¡Z¤Z��zÑ"Ð"Ø˜’�Ý'*¨5¡z¤z��|Ñ$Ð$Ø˜’�Ý(+¨E©
¬
��}Ñ%Ð%à"Ÿ[š[¨¨aÑ0Ô0‘
��UÝ$ U™mœm��s‘Ø�S”X��Øˆr"   c                 ó”  — | j         sdS | j        }|d         j        }|d         dk    rt          j        d¦  «         i S |d         |d         |d         dœ}t
          j        }t
          j        }t          |d         ¦  «        D ]Ä}|d	|d	z  z   |d	z  d
z   …         \  }}}	}
| 	                    ||¦  «        }|dk    r|
}n\t
          j
        |         }||         j        |
|
|	z   …         }|dk    r|	dk    r|d         dk    r
|dd…         }|	dk    r|n|d         }||v r#	  ||         |¦  «        }n# t          $ r Y nw xY w|||<   ŒÅd|v r`|d         j        }t          j        |¦  «        }t          |¦  «        dk    r'|                     d¦  «                             ¦   «         }||d<   d|v r6t          j        |d         j        ¦  «                             ¦   «         }||d<   d|v r]|d         j        }t          j        |¦  «                             d¦  «                             ¦   «                              ¦   «         }||d<   d|v rL|d         j        }t          j        |¦  «                             d¦  «                             ¦   «         }||d<   n	 d|v rª|d         j        }i d|d         “d|d         “d |d         “d!|d         “d"|d	         “d#|d$         “d%|d         “d&|d'         “d(|d
         “d)|d*         “d+|d,         “d-|d.         “d/|d0d1…         “d2|d1d3…         “d4|d3d5…         “d6|d5d…         “|d7<   |S )8z7Return consolidated metadata from GeoTIFF tags as dict.NÚGeoKeyDirectoryTagr   r&   zinvalid GeoKeyDirectoryTagr‘   )ÚKeyDirectoryVersionÚKeyRevisionÚKeyRevisionMinorrÊ   rŒ   rˆ   é±‡  rÁ   rƒ   ÚIntergraphMatrixTagr¾   )rŒ   rŒ   ÚIntergraphMatrixÚModelPixelScaleTagÚModelPixelScaleÚModelTiepointTag)rÁ   ræ   ÚModelTiepointÚModelTransformationTagÚModelTransformationFræ   ç        )rN  rN  rN  ç      ð?ÚRPCCoefficientTagÚERR_BIASÚERR_RANDÚLINE_OFFÚSAMP_OFFÚLAT_OFFÚLONG_OFFrå   Ú
HEIGHT_OFFÚ
LINE_SCALErË  Ú
SAMP_SCALEÚ	LAT_SCALErÄ   Ú
LONG_SCALEé
   ÚHEIGHT_SCALEé   ÚLINE_NUM_COEFFr�   é!   zLINE_DEN_COEFF é5   ÚSAMP_NUM_COEFFéI   ÚSAMP_DEN_COEFFÚRPCCoefficient)rs  r  rl   r    r¡   rO   ÚGEO_KEYSÚ	GEO_CODESrq  rA   rP  r@   r<   r
  r.   rd  Útolistr  r7   )r`   r  ÚgkdrZ   ÚgeokeysÚgeocodesr‰  ÚkeyidÚtagidr  rU   rl   rÃ  ÚsxÚsyÚszÚ	tiepointsÚ
transformsÚtpr   r7  r  rí   ÚyÚzÚrpccs                             r    rt  zTiffPage.geotiff_tags¸  s  € ð Œð 	ØˆFØŒyˆàÐ'Ô(Ô.ˆØˆqŒ6�QŠ;ˆ;ÝŒMÐ6Ñ7Ô7Ð7ØˆIð $' q¤6Ø˜qœ6Ø # A¤ð
ð 
ˆõ ”-ˆÝ”>ˆÝ˜3˜qœ6‘]”]ð 	"ð 	"ˆEØ*-¨a°%¸!±)©m¸eÀa¹iÈ!¹mÐ.KÔ*LÑ'ˆE�5˜% Ø—K’K  uÑ-Ô-ˆEØ˜ŠzˆzØ��åœ) EÔ*�à˜WœÔ+¨F°V¸e±^Ð,CÔD�Ø˜E’>�> e¨a¢i i°E¸"´IÀÒ4DÐ4DØ! # 2 #œJ�EØ!&¨¢ ˜˜°°a´�Ø˜Ð Ð ðØ+˜H UœO¨EÑ2Ô2�E�EøÝ ð ð ð Ø�Dðøøøà!ˆF�5‰MˆMà  DÐ(Ð(ØÐ.Ô/Ô5ˆEÝ”K Ñ&Ô&ˆEÝ�5‰zŒz˜RÒÐØŸš fÑ-Ô-×4Ò4Ñ6Ô6�Ø).ˆFÐ%Ñ&Ø 4Ð'Ð'Ý”K Ð%9Ô :Ô @ÑAÔA×HÒHÑJÔJˆEØ(-ˆFÐ$Ñ%Ø Ð%Ð%ØÐ+Ô,Ô2ˆEÝ”K Ñ&Ô&×.Ò.¨wÑ7Ô7×?Ò?ÑAÔA×HÒHÑJÔJˆEØ&+ˆF�?Ñ#Ø# tÐ+Ð+ØÐ1Ô2Ô8ˆEÝ”K Ñ&Ô&×.Ò.¨vÑ6Ô6×=Ò=Ñ?Ô?ˆEØ,1ˆFÐ(Ñ)Ð)ð	7ð&  $Ð&Ð&ØÐ+Ô,Ô2ˆDð(Ø˜D œGð(à˜D œGð(ð ˜D œGð(ð ˜D œGð	(ð
 ˜4 œ7ð(ð ˜D œGð(ð ˜d 1œgð(ð ˜d 1œgð(ð ˜d 1œgð(ð ˜T !œWð(ð ˜d 2œhð(ð   R¤ð(ð ! $ r¨" u¤+ð(ð " 4¨¨2¨¤;ð(ð ! $ r¨" u¤+ð(ð  ! $ r s s¤)ð!(ˆFÐ#Ñ$ð& ˆs   Ä"D4Ä4
EÅ Ec                 ó   — d| j         v S )zPage contains tiled image.r+  ©r  rË  s    r    ræ  zTiffPage.is_tiled  ó   € ð ˜dœiÐ'Ð'r"   c                 ó>   — d| j         v o| j         d         j        dz  S )z'Page is reduced image of another image.r/  r&   ©r  rl   rË  s    r    rÉ  zTiffPage.is_reduced   s'   € ð   4¤9Ð,ÐV°´Ð;KÔ1LÔ1RÐUVÑ1VÐVr"   c                 ó@   — d| j         v o| j         d         j        dk    S )z&Page contains chroma subsampled image.ÚYCbCrSubSamplingr>  r{  rË  s    r    rà  zTiffPage.is_chroma_subsampled%  s.   € ð " T¤YÐ.ð °4´9Øô4
ä
�6ò4ð 	r"   c                 óV   — | j         | j        fD ]}|s dS |dd…         dk    r|c S ŒdS )z/Return ImageJ description if exists, else None.NrË  zImageJ=©r~  Údescription1©r`   r~  s     r    r:  zTiffPage.is_imagej,  s[   € ð !Ô,¨dÔ.?Ð@ð 	#ð 	#ˆKØð Ø��Ø˜2˜A˜2Œ )Ò+Ð+Ø"Ð"Ð"Ð"ð ,ð	#ð 	#r"   c                 ó‚   — | j         | j        fD ]/}|s dS |dd…         dk    rd|v r|c S |dd…         dk    r|c S Œ0dS )z?Return description containing array shape if exists, else None.Nr&   Ú{z"shape":ræ   úshape=r  r�  s     r    r.  zTiffPage.is_shaped5  s„   € ð !Ô,¨dÔ.?Ð@ð 	#ð 	#ˆKØð Ø��Ø˜2˜A˜2Œ #Ò%Ð%¨*¸Ð*CÐ*CØ"Ð"Ð"Ð"Ø˜2˜A˜2Œ (Ò*Ð*Ø"Ð"Ð"Ð"ð +ð	#ð 	#r"   c                 ó   — d| j         v S )zPage contains MDFileTag tag.rN  rx  rË  s    r    r  zTiffPage.is_mdgel@  ry  r"   c                 óP   — d| j         v o| j         d         j        dd…         dk    S )z'Page contains Media Cybernetics Id tag.ÚMC_IdNrË  s   MC TIFFr{  rË  s    r    Ú
is_mediacyzTiffPage.is_mediacyE  s.   € ð ˜$œ)Ð#ÐR¨¬	°'Ô(:Ô(@ÀÀ!ÀÔ(DÈ
Ò(RÐRr"   c                 ó   — d| j         v S )zPage contains UIC2Tag tag.r  rx  rË  s    r    r4  zTiffPage.is_stkJ  ó   € ð ˜DœIÐ%Ð%r"   c                 ó   — d| j         v S )zPage contains CZ_LSMINFO tag.r  rx  rË  s    r    rî  zTiffPage.is_lsmO  s   € ð ˜tœyÐ(Ð(r"   c                 ó   — d| j         v S )z$Page contains FluoView MM_STAMP tag.r>  rx  rË  s    r    r@  zTiffPage.is_fluoviewT  s   € ð ˜TœYÐ&Ð&r"   c                 ó   — d| j         v S )zPage contains NIH image header.rB  rx  rË  s    r    r  zTiffPage.is_nihY  s   € ð   4¤9Ð,Ð,r"   c                 ó&   — d| j         v od| j         v S )z,Page contains SGI image and tile depth tags.r-  r.  rx  rË  s    r    Úis_sgizTiffPage.is_sgi^  s   € ð ˜tœyÐ(ÐE¨[¸D¼IÐ-EÐEr"   c                 ó   — | j         dk    S )zSoftware tag is 'ISS Vista'.z	ISS Vista©r�  rË  s    r    r¼  zTiffPage.is_vistac  s   € ð Œ} Ò+Ð+r"   c                 ó”   — | j         dk    s| j        dk    rdS | j        }|                     d¦  «        o|                     d¦  «        S )z>Page contains MDS MetaSeries metadata in ImageDescription tag.r&   Ú
MetaSeriesFú
<MetaData>z</MetaData>)r‰  r�  r~  Ú
startswithrs  ©r`   Úds     r    r]  zTiffPage.is_metaseriesh  sK   € ð Œ:˜Š>ˆ>˜Tœ]¨lÒ:Ð:Ø�5ØÔˆØ�|Š|˜LÑ)Ô)ÐG¨a¯jªj¸Ñ.GÔ.GÐGr"   c                 óp   — | j         dk    s| j        sdS | j        }|dd…         dk    o|dd…         dk    S )z.Page contains OME-XML in ImageDescription tag.r&   FNé   ú<?xml version=éúÿÿÿz</OME>©r‰  r~  r–  s     r    r   zTiffPage.is_omep  óI   € ð Œ:˜Š>ˆ> Ô!1ˆ>Ø�5ØÔˆØ��"�ŒvÐ)Ò)Ð@¨a°°°¬f¸Ò.@Ð@r"   c                 óp   — | j         dk    s| j        sdS | j        }|dd…         dk    o|dd…         dk    S )z4Page contains Leica SCN XML in ImageDescription tag.r&   FNr™  rš  r›  z</scn>rœ  r–  s     r    Úis_scnzTiffPage.is_scnx  r�  r"   c                 ó   — d| j         v S )z%Page contains Micro-Manager metadata.re  rx  rË  s    r    rf  zTiffPage.is_micromanager€  s   € ð &¨¬Ð2Ð2r"   c                 ó   — d| j         v S )z$Page contains Andor Technology tags.r4  rx  rË  s    r    r¹  zTiffPage.is_andor…  rŠ  r"   c                 óN   — | j         dd…         dk    o| j        dd…         dk    S )zPage contains Pilatus tags.Nrˆ   zTVX TIFFr‘   ú# )r�  r~  rË  s    r    ra  zTiffPage.is_pilatusŠ  s0   € ð Œ}˜R˜a˜RÔ  JÒ.ÐO°4Ô3CÀBÀQÀBÔ3GÈ4Ò3OÐOr"   c                 ó.   — | j         dk    p
| j        dk    S )z&Page contains EPICS areaDetector tags.zEPICS areaDetector©r~  r�  rË  s    r    rº  zTiffPage.is_epics�  s%   € ð ÔÐ 4Ò4ð 5ØŒ}Ð 4Ò4ð	
r"   c                 ó   — d| j         v S )zPage contains TVIPS metadata.rY  rx  rË  s    r    rZ  zTiffPage.is_tvips—  s   € ð ˜$œ)Ð#Ð#r"   c                 ó&   — d| j         v pd| j         v S )z&Page contains SFEG or HELIOS metadata.rE  rF  rx  rË  s    r    rG  zTiffPage.is_feiœ  s   € ð ˜TœYÐ&ÐC¨,¸$¼)Ð*CÐCr"   c                 ó   — d| j         v S )z!Page contains Zeiss SEM metadata.rJ  rx  rË  s    r    rK  zTiffPage.is_sem¡  s   € ð ˜4œ9Ð$Ð$r"   c                 ó(   — | j         dd…         dk    S )zPage contains Aperio metadata.Nr‰   zAperio Image Library©r~  rË  s    r    Úis_svszTiffPage.is_svs¦  s   € ð Ô   Ô$Ð(>Ò>Ð>r"   c                 óp   — | j         dd…         dk    p#| j        dd…         dk    pd| j         dd…         v S )z!Page contains ScanImage metadata.Nr�   zstate.configé   zSI.LINE_FORMAT_VERSIONzscanimage.SI.i ÿÿÿr¥  rË  s    r    rl  zTiffPage.is_scanimage«  sO   € ð Ô˜S˜b˜SÔ! ^Ò3ð :ØŒ}˜S˜b˜SÔ!Ð%=Ò=ð:à $Ô"2°4°5°5Ô"9Ð9ð	
r"   c                 ó(   — | j         dd…         dk    S )z1Page contains PerkinElmer tissue images metadata.Né   zPerkinElmer-QPIr‘  rË  s    r    r  zTiffPage.is_qptiff´  s   € ð
 Œ}˜S˜b˜SÔ!Ð%6Ò6Ð6r"   c                 ó   — d| j         v S )zPage contains GeoTIFF metadata.rA  rx  rË  s    r    rs  zTiffPage.is_geotiff»  s   € ð $ t¤yÐ0Ð0r"   r   )NTNTrÇ  T)FNNNNrv  )Frh   rp   rq   rr   rÂ  rÀ  r½  rç  rè  ré  r<  r”  rš  r{  rð  rx  rä  rw  r|  r•  r}  r�  r~  r€  ra   r/   r  r  rw  r  r¢  r   rå  rS   r2  rR   rû  r   r“  rH   rR  rV  rt  ræ  rÉ  rà  r:  r.  r  rˆ  r4  rî  r@  r  r�  r¼  r]  r   rŸ  rf  r¹  ra  rº  rZ  rG  rK  r«  rl  r  rs  r   r"   r    rú  rú  s  sT  € € € € € ð"ð "ðJ €JØ€KØ€JØ€IØ€JØ€IØ€MØ€OØ€LØ€LØ€KØ€LØ€IØ€KØ€IØ€LØ€HØ€HØ€KØ€Lðe1ð e1ð e1ð e1ðR ØØØØØðIð Ið Ið IðZ ØØØØð=ð =ð =ð =ð~ð ð ð ðð ñ „Xðð „_ðð ñ „_ðð ðKð Kñ „XðKð ð$/ð $/ñ „Xð$/ðL ð
ð 
ñ „Xð
ð ð
ð 
ñ „Xð
ð<!ð <!ð <!ð <!ð| ð
ð 
ñ „Xð
ð ðð ñ „Xðð ð#ð #ñ „Xð#ð ðð ñ „Xðð( ðð ñ „Xðð: ð`ð `ñ „Xð`ðD ð(ð (ñ „Xð(ð ðWð Wñ „XðWð ðð ñ „Xðð ð#ð #ñ „Xð#ð ð#ð #ñ „Xð#ð ð(ð (ñ „Xð(ð ðSð Sñ „XðSð ð&ð &ñ „Xð&ð ð)ð )ñ „Xð)ð ð'ð 'ñ „Xð'ð ð-ð -ñ „Xð-ð ðFð Fñ „XðFð ð,ð ,ñ „Xð,ð ðHð Hñ „XðHð ðAð Añ „XðAð ðAð Añ „XðAð ð3ð 3ñ „Xð3ð ð&ð &ñ „Xð&ð ðPð Pñ „XðPð ð
ð 
ñ „Xð
ð ð$ð $ñ „Xð$ð ðDð Dñ „XðDð ð%ð %ñ „Xð%ð ð?ð ?ñ „Xð?ð ð
ð 
ñ „Xð
ð ð7ð 7ñ „Xð7ð ð1ð 1ñ „Xð1ð 1ð 1r"   rú  c                   ó†   — e Zd ZdZdZdZi Zd„ Zd„ Zd„ Z	d„ Z
ed„ ¦   «         Zed	„ ¦   «         Zed
„ ¦   «         Zd„ Zdd„ZdS )r…  a¡  Lightweight TIFF image file directory (IFD).

    Only a limited number of tag values are read from file, e.g. StripOffsets,
    and StripByteCounts. Other tag values are assumed to be identical with a
    specified TiffPage instance, the keyframe.

    TiffFrame is intended to reduce resource usage and speed up reading data
    from file, not for introspection of metadata.

    Not compatible with Python 2.

    )r  r“  r‰  rU   rÒ  rà  Fc                 ó”  — || _         || _        || _        d| _        d| _        t
          j        }|j        }|                     ¦   «         | _	        	  ||j
        |                     |j        ¦  «        ¦  «        d         }|dk    rt          d¦  «        ‚n%# t          $ r t          d| j	        z  ¦  «        ‚w xY wh d£}|j        }|j        dd…         }	|                     ||z  ¦  «        }
| }t#          |¦  «        D ]È}||z  } ||	|
||dz   …         ¦  «        d         }||vrŒ)	 t%          ||
|||z   …         ¦  «        }n=# t$          j        $ r+}t)          j        t-          |¦  «        ¦  «         Y d}~Œ{d}~ww xY w|dk    s|d	k    rt/          | d
|j        ¦  «         Œ¦|dk    s|dk    rt/          | d|j        ¦  «         ŒÉdS )zpRead specified tags from file.

        The file handle position must be at the offset to a valid IFD.

        Nr   r‘  r’  z corrupted page list at offset %i>   é  é  éD  éE  r‘   r³  rµ  rÒ  r´  r¶  rà  )r  r“  r‰  rÒ  rà  rº   ré  rï  r˜   rU   rŒ  rè  rê  r,   r@   r�  rë  rq  r¶  r·  r    r¡   rœ   ri   rl   )r`   r“  r‰  r  ré  r¼   r—  Útagcodesr�  Ú
codeformatrD   r[   r  rJ  rm   s                  r    ra   zTiffFrame.__init__Û  s  € ð !ˆŒØˆŒØˆŒ
ØˆÔØ"ˆÔå”ˆØÔˆØ—g’g‘i”iˆŒð	OØ�F˜6Ô-¨r¯wªw°vÔ7GÑ/HÔ/HÑIÔIÈ!ÔLˆEØ�tŠ|ˆ|Ý Ð!<Ñ=Ô=Ð=ð øåð 	Oð 	Oð 	OÝÐ?À$Ä+ÑMÑNÔNÐNð	Oøøøð (Ð'Ð'ˆØ”.ˆØÔ& r¨ rÔ*ˆ
à�wŠw�w ‘Ñ'Ô'ˆØ�ˆÝ�u‘”ð 	;ð 	;ˆAØ�WÑˆEØ�6˜* d¨5°5¸1±9Ð+<Ô&=Ñ>Ô>¸qÔAˆDØ˜8Ð#Ð#ØðÝ˜f d¨5°5¸7±?Ð+BÔ&CÑDÔD��øÝ”=ð ð ð Ý”�c !™fœfÑ%Ô%Ð%Ø����øøøøðøøøð �sŠ{ˆ{˜d cšk˜kÝ˜˜m¨S¬YÑ7Ô7Ð7Ð7Ø˜’� ¨¢ Ý˜Ð.°´	Ñ:Ô:Ð:øð	;ð 	;s%   ÁAB Â"B8Ä)EÅE?Å!E:Å:E?c                 ó‚   — | j         j                             | j        ¦  «         t	          | j         | j        d¬¦  «        S )zReturn TiffPage from file.NrŒ  )r“  rï  r%   rU   rú  r‰  rË  s    r    r  zTiffFrame.aspage  s6   € àŒÔ×#Ò# D¤KÑ0Ô0Ð0Ý˜œ¨4¬:ÀÐEÑEÔEÐEr"   c                 ó6   — d|d<   t          j        | g|¢R i |¤ŽS )z4Read image data from file and return as numpy array.Fr  )rú  r/   ©r`   r	  r0   s      r    r/   zTiffFrame.asarray  s/   € ð
 #ˆˆzÑÝÔ Ð6 tÐ6Ð6Ð6¨vÐ6Ð6Ð6r"   c                 ó6   — d|d<   t          j        | g|¢R i |¤ŽS )z>Read image data from file and return RGB image as numpy array.Fr  )rú  r  r»  s      r    r  zTiffFrame.asrgb  s,   € à"ˆˆzÑÝŒ~˜dÐ4 TÐ4Ð4Ð4¨VÐ4Ð4Ð4r"   c                 ó”   — | j         j        r#| j        dd…         | j         j        dd…         fS t          | j        | j        ¦  «        S )r  Nr&   )r  rS   rÒ  r  rà  rË  s    r    rå  zTiffFrame.offsets_bytecounts!  sM   € ð Œ=Ô&ð 	IØÔ# B Q BÔ'¨¬Ô)DÀQÀRÀRÔ)HÐHÐHÝ# DÔ$4°dÔ6IÑJÔJÐJr"   c                 ó\   — | j         j        r| j        d         | j         j        d         fS dS )z5Return offset and size of contiguous data, else None.r   r&   N)r  rS   rÒ  rË  s    r    rS   zTiffFrame.is_contiguous(  s;   € ð Œ=Ô&ð 	GØÔ# AÔ&¨¬Ô(CÀAÔ(FÐFÐFð	Gð 	Gr"   c                 ó   — | j         j        S )r  )r  rR   rË  s    r    rR   zTiffFrame.is_memmappable.  s   € ð Œ}Ô+Ð+r"   c                 óˆ   — |t           j        v rt          | j        |¦  «        S t	          d| j        j        ›d|›d�¦  «        ‚)zReturn attribute from keyframe.rä  rå  )rO   ÚFRAME_ATTRSrf   r  rc   rn   rh   ©r`   rÜ  s     r    ræ  zTiffFrame.__getattr__3  sO   € à•4Ô#Ð#Ð#Ý˜4œ=¨$Ñ/Ô/Ð/õ ˆnØ37´>Ô3JÐ3JÐ3JÈDÈDÈDÐQñ
ô 
ð 	
r"   r   c                 óÐ   — d                      d„ d                      d„ | j        D ¦   «         ¦  «        t          | j        ¦  «        fD ¦   «         ¦  «        }d| j        | j        |fz  S )z1Return string containing information about frame.rò  c              3   ó   K  — | ]}|V — Œd S r   r   r  s     r    r!   z$TiffFrame.__str__.<locals>.<genexpr>?  s3   è è € ð 
ð 
ØˆAð
ð 
ð 
ð 
ð 
ð 
r"   rí   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r   rõ  rÚ   s     r    r!   z$TiffFrame.__str__.<locals>.<genexpr>@  s(   è è € Ð <Ð <¨A¥ Q¡¤Ð <Ð <Ð <Ð <Ð <Ð <r"   zTiffFrame %i @%i  %s)r  rE   rœ   r=   r‰  rU   )r`   rø  r  s      r    rû  zTiffFrame.__str__=  ss   € à�yŠyð 
ð 
ØŸšÐ <Ð <°´Ð <Ñ <Ô <Ñ<Ô<½cÀ$Ä*¹o¼oÐNð
ñ 
ô 
ñ 
ô 
ˆð &¨¬°T´[À$Ð(GÑGÐGr"   Nr9  )rh   rp   rq   rr   rs   r  r  ra   r  r/   r  rw  rå  rS   rR   ræ  rû  r   r"   r    r…  r…  Á  sñ   € € € € € ðð ð€Ið €HØ€Dð*;ð *;ð *;ðhFð Fð Fð
7ð 7ð 7ð5ð 5ð 5ð
 ðKð Kñ „XðKð ðGð Gñ „XðGð
 ð,ð ,ñ „Xð,ð
ð 
ð 
ðHð Hð Hð Hð Hð Hr"   r…  c                   ó\   — e Zd ZdZdZ G d„ de¦  «        Zd„ Zed„ ¦   «         Z	d„ Z
dd
„ZdS )r¶  aš  TIFF tag structure.

    Attributes
    ----------
    name : string
        Name of tag.
    code : int
        Decimal code of tag.
    dtype : str
        Datatype of tag data. One of TIFF DATA_FORMATS.
    count : int
        Number of values.
    value : various types
        Tag data as Python object.
    ImageSourceData : int
        Location of value in file.

    All attributes are read-only.

    )r  r  r=   rl   r¾  c                   ó   — e Zd ZdS )úTiffTag.ErrorN©rh   rp   rq   r   r"   r    r·  rÈ  ]  ó   € € € € € Øˆr"   r·  c                 ó<  ‡— |j         }|j        }t          j        }|j        }|                     ¦   «         |z   dz   | _         ||j        |dd…         ¦  «        \  }}	 ||j        |dd…         ¦  «        \  }
}	 t          j
        |	         }n+# t          $ r t                               d|	z  ¦  «        ‚w xY wd||
t          |d         ¦  «        z  |d         fz  }t          j        |¦  «        }||k    s|t          j        v �r ||j        |¦  «        d         x| _        }|dk     s||j        |z
  k    rt                               d¦  «        ‚|                     |¦  «         |t          j        v r"t          j        |         } |||||
|¦  «        }n«|	d	k    s|
dk    r |d
         dk    rt)          ||||
|¦  «        }n|t          j        v s|d
         dk    r  |||                     |¦  «        ¦  «        }nEt/          ||||
|¦  «        }n1|d
         dk    s|	d	k    r|d|…         }n |||d|…         ¦  «        }|t          j        vo|t          j        vo|	d	k    }|rˆ|d
         dk    r|t3          |d         t4          ¦  «        ra|d         }	 t7          t9          |¦  «                             ¦   «         ¦  «        }n»# t<          $ r t?          j         d|z  ¦  «         d}Y n–w xY w|t          j!        v rgt          j!        |         Š	 tE          ˆfd„|D ¦   «         ¦  «        }n8# tF          $ r+}t?          j         tI          |¦  «        ¦  «         Y d}~nd}~ww xY w|rtK          |¦  «        dk    r|d         }|| _&        || _'        |
| _(        || _)        dS )z$Initialize instance from tag header.rŒ   Núunknown tag data type %iú%s%i%sr   r&   rˆ   zinvalid tag value offsetrË  rÁ   rÈ   rú   ú'tag %i: coercing invalid ASCII to bytesÚ1Bc              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S r   r   )r   r©  rG  s     €r    r!   z#TiffTag.__init__.<locals>.<genexpr>—  s+   øè è € Ð!6Ð!6¨1 ! ! A¡$¤$Ð!6Ð!6Ð!6Ð!6Ð!6Ð!6r"   )*rï  r9   rº   ré  r  r˜   r¾  rë  rì  rO   ÚDATA_FORMATSrÿ   r¶  r·  rÙ   r  ÚTAG_READERSr  rH   r%   Ú
read_bytesrP  rè  Ú
read_numpyÚ	TAG_TUPLEr(   rë   Ú	bytes2strÚ
stripasciir±  ÚUnicodeDecodeErrorr    r¡   ÚTAG_ENUMr  r,   rœ   r.   r  r=   r  rl   )r`   r“  Ú	tagheaderr0   r¼   r9   ré  r  r  Útype_r  rl   r=   rö   rH   rU   ÚreadfuncÚprocessrm   rG  s                      @r    ra   zTiffTag.__init__`  só  ø€ àÔˆØÔ$ˆ	Ý”ˆØÔ&ˆ
àŸ7š7™9œ9 zÑ1°AÑ5ˆÔØ�f˜VÔ.°	¸"¸1¸"´Ñ>Ô>‰ˆˆeØ�v˜fÔ/°¸1¸2¸2´Ñ?Ô?‰ˆˆuð	DÝÔ% eÔ,ˆEˆEøÝð 	Dð 	Dð 	DÝ—-’-Ð :¸UÑ BÑCÔCÐCð	Døøøð ˜) U­S°°q´©]¬]Ñ%:¸EÀ!¼HÐEÑEˆÝŒ˜sÑ#Ô#ˆØ�*ÒÐ ­Ô(8Ð 8Ñ 8Ø(.¨¨vÔ/BÀEÑ(JÔ(JÈ1Ô(MÐMˆDÔ˜vØ˜Šzˆz˜V b¤g°¡nÒ4Ð4Ý—m’mÐ$>Ñ?Ô?Ð?ð �GŠG�F‰OŒOˆOØ•tÔ'Ð'Ð'ÝÔ+¨DÔ1�Ø ˜  Y°°u¸jÑIÔI��Ø˜!’� ¨¢	 	¨e°B¬i¸3Ò.>Ð.>Ý" 2 y°%¸À
ÑKÔK��Ø�œÐ"Ð" e¨B¤i°3Ò&6Ð&6Ø˜˜s B§G¢G¨D¡M¤MÑ2Ô2��å" 2 y°%¸À
ÑKÔK��Ø�2ŒY˜#ÒÐ ¨!¢ Ø˜%˜4˜%”LˆEˆEà�F˜3  e t e¤Ñ-Ô-ˆEð �Ô(Ð(ÐV¨T½¼Ð-GÐVÈEÐUVÊJð 	ð ð 	%�u˜R”y CÒ'Ð'­J°u¸Q´xÅÑ,GÔ,GÐ'ð ˜!”HˆEðÝ!¥*¨UÑ"3Ô"3×"9Ò"9Ñ";Ô";Ñ<Ô<��øÝ%ð ð ð Ý”ÐGÈ$ÑNÑOÔOÐOØ���ðøøøð •t”}Ð$Ð$Ý”M $Ô'�ð*Ý!Ð!6Ð!6Ð!6Ð!6°Ð!6Ñ!6Ô!6Ñ6Ô6�E�EøÝ!ð *ð *ð *Ý”M¥# a¡&¤&Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)øøøøð*øøøàð %Ý�u‘:”: ’?�?Ø! !œH�EàˆŒ	ØˆŒ
ØˆŒ
ØˆŒ
ˆ
ˆ
s6   Á;B Â(B6Ê.K Ë#K+Ë*K+ÌL+ Ì+
M Ì5!MÍM c                 óp   — t           j                             | j        t	          | j        ¦  «        ¦  «        S r   )rO   rP  rA   r  rœ   rË  s    r    rÜ  zTiffTag.name£  s"   € åŒy�}Š}˜TœY­¨D¬I©¬Ñ7Ô7Ð7r"   c                 ór  — | j         dk    r©| j        dk    r t          j        d¦  «         |j        |j                 }t          j        || j        ¦  «        d         | _	        |j
                             | j	        ¦  «         t          j        d|j
                             d¦  «        ¦  «        | _        dS dS dS )z³Correct LSM bitspersample tag.

        Old LSM writers may use a separate region for two 16-bit values,
        although they fit into the tag value element of the tag.

        é  r‘   z correcting LSM bitspersample tagr   z<HHrŒ   N)r  r  r    r¡   r  r  rº   ré  Ú_valuer¾  rï  r%   rè  rl   )r`   r“  Útofs      r    r»  zTiffTag._fix_lsm_bitspersample§  s¥   € ð Œ9˜ÒÐ ¤
¨a¢ åŒMÐ<Ñ=Ô=Ð=ØÔ% fÔ&7Ô8ˆCÝ%œ}¨S°$´+Ñ>Ô>¸qÔAˆDÔØÔ×"Ò" 4Ô#3Ñ4Ô4Ð4Ýœ u¨fÔ.?×.DÒ.DÀQÑ.GÔ.GÑHÔHˆDŒJˆJˆJð Ð  r"   r   ré  c                 ó  — |dk    rdnd|z  }d| j         t          | j        d         ¦  «        z  | j        d         fz  }d| j        | j        || j        fd|…         z  }| j        t          j        v ra| j         dk    r*t          j        | j                 | j        ¦  «        j        }nCt          t          d„ | j        D ¦   «         ¦  «        ¦  «        }nt          | j        ||¬¦  «        }|dk    r||z  }|d|…         }n|d	|z   z  }|S )
z/Return string containing information about tag.r   r&   rˆ   z%i%szTiffTag %i %s  %s @%i  Nc              3   ó$   K  — | ]}|j         V — Œd S r   )rÜ  )r   r©  s     r    r!   z"TiffTag.__str__.<locals>.<genexpr>Ã  s$   è è € Ð%AÐ%A° a¤fÐ%AÐ%AÐ%AÐ%AÐ%AÐ%Ar"   rý  ró  )r  rÙ   r=   r  rÜ  r¾  rO   rÙ  rl   r  r  )r`   rø  rù  rþ  ÚtcodeÚlinerl   s          r    rû  zTiffTag.__str__¶  s  € à ’k�k�� q¨6¡zˆØ˜$œ*¥s¨4¬:°a¬=Ñ'9Ô'9Ñ9¸4¼:Àa¼=ÐIÑIˆà%ØŒy˜$œ) U¨DÔ,<Ð=¸f¸u¸fÔEñFð 	ð
 Œ9�œÐ%Ð%ØŒz˜QŠˆÝœ d¤iÔ0°´Ñ<Ô<ÔA��å¥Ð%AÐ%A°d´jÐ%AÑ%AÔ%AÑ AÔ AÑBÔB��å˜DœJ¨e¸FÐCÑCÔCˆEà�QŠ;ˆ;Ø�E‰MˆDØ˜˜˜”<ˆDˆDà�D˜5‘LÑ ˆDØˆr"   Nrv  )rh   rp   rq   rr   rs   r@   r·  ra   rw  rÜ  r»  rû  r   r"   r    r¶  r¶  E  s¤   € € € € € ðð ð* C€Iðð ð ð ð �	ñ ô ð ðAð Að AðF ð8ð 8ñ „Xð8ðIð Ið Iðð ð ð ð ð r"   r¶  c                   ó   — e Zd ZdS )ÚTiffFileErrorNrÉ  r   r"   r    rè  rè  Ò  s   € € € € € Ø€Dr"   rè  c                   óœ   — e Zd ZdZ	 	 	 	 	 dd„Zdd„Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
ed	„ ¦   «         Zd
„ Zd„ Zd„ Zd„ ZdS )r   aå  Series of TIFF pages with compatible shape and data type.

    Attributes
    ----------
    pages : list of TiffPage
        Sequence of TiffPages in series.
    dtype : numpy.dtype
        Data type (native byte order) of the image array in series.
    shape : tuple
        Dimensions of the image array in series.
    axes : str
        Labels of axes in shape. See TiffPage.axes.
    offset : int or None
        Position of image data in file if memory-mappable, else None.

    NFc
                 ó  — d| _         || _        t          |¦  «        | _        d                     |¦  «        | _        t          j        |¦  «        | _        |r|nd| _        |r|nd| _	        || _
        |r|| _        n|r|d         j        | _        nd| _        t          |¦  «        dk    rE|	sCt          t          | j        ¦  «        t          |d         j        ¦  «        z  ¦  «        | _        dS t          |¦  «        | _        dS )zInitialize instance.r   r,  Nr&   )r‰  r  r  rE   r  r  r<   r=   r  rÜ  rb  r“  r.   rÙ   r   Ú_len)
r`   rQ   rE   r=   r  r“  rÜ  rb  r  r$  s
             r    ra   zTiffPageSeries.__init__è  së   € ð ˆŒ
ØˆŒÝ˜5‘\”\ˆŒ
Ø—G’G˜D‘M”MˆŒ	Ý”[ Ñ'Ô'ˆŒ
Ø#Ð+�U�U¨ˆŒ
Ø Ð(�D�D bˆŒ	Ø"ˆŒØð 	Ø ˆDŒKˆKØð 	Ø œ(œ/ˆDŒKˆKàˆDŒKÝˆu‰:Œ:˜Š?ˆ? 9ˆ?Ý�G D¤JÑ/Ô/µ7¸5À¼8¼>Ñ3JÔ3JÑJÑKÔKˆDŒIˆIˆIå˜E™
œ
ˆDŒIˆIˆIr"   c                 óˆ   — | j         r:| j                              | |¬¦  «        }| j        �|                      |¦  «        }|S dS )z;Return image data from series of TIFF pages as numpy array.)rT   r  N)r“  r/   rb  )r`   r  rZ   s      r    r/   zTiffPageSeries.asarray  sN   € àŒ;ð 	Ø”[×(Ò(°¸#Ð(Ñ>Ô>ˆFØŒ~Ð)ØŸš¨Ñ/Ô/�ØˆMð		ð 	r"   c                 óª  — | j         sdS d}| j         D ]S}|€ dS |j        s dS |s|j        d         |j        d         z   }Œ/||j        d         k    r dS ||j        d         z  }ŒT| j         d         }|j        d         }|j        s|j        rt          | j         ¦  «        dk    r|S ||t          | j        ¦  «        | j        j	        z  z   k    r|S dS )z-Return offset to series data in file, if any.Nr   r&   )
r  r2  rS   r:  r.  r.   r   rE   r=   r>   )r`   r½   rX   rU   s       r    rU   zTiffPageSeries.offset  s  € ð Œ{ð 	ØˆFàˆØ”Kð 
	)ð 
	)ˆDØˆ|Ø��Ø”=ð Ø��Øð ØÔ(¨Ô+¨dÔ.@ÀÔ.CÑC�ØØ�dÔ(¨Ô+Ò+Ð+Ø��Ø�4Ô% aÔ(Ñ(ˆCˆCàŒ{˜1Œ~ˆØÔ# AÔ&ˆØŒNð 	˜dœnð 	µ#°d´kÑ2BÔ2BÀaÒ2GÐ2GàˆMØ�&�7 4¤:Ñ.Ô.°´Ô1DÑDÑDÒDÐDØˆMð EÐDr"   c                 ó*   — t          | j        ¦  «        S r-  r.  rË  s    r    r“  zTiffPageSeries.ndim+  r/  r"   c                 óD   — t          t          | j        ¦  «        ¦  «        S r1  )rÙ   r   rE   rË  s    r    rH   zTiffPageSeries.size0  s   € õ •7˜4œ:Ñ&Ô&Ñ'Ô'Ð'r"   c                 ó   — | S )z'Return sequence of all pages in series.r   rË  s    r    rQ   zTiffPageSeries.pages5  s	   € ð ˆr"   c                 ó   — | j         S )z%Return number of TiffPages in series.)rë  rË  s    r    r›  zTiffPageSeries.__len__;  ó
   € àŒyÐr"   c                 óÄ   — t          | j        ¦  «        dk    r<d|cxk     r| j        k     r*n n'| j        d         j        }| j        j        ||z            S | j        |         S )zReturn specified TiffPage.r&   r   )r.   r  rë  r‰  r“  rQ   )r`   rC  r‰  s      r    rž  zTiffPageSeries.__getitem__?  si   € åˆtŒ{ÑÔ˜qÒ Ð  Q¨Ð%8Ð%8Ò%8Ð%8¨t¬yÒ%8Ð%8Ð%8Ð%8Ð%8Ø”K ”NÔ(ˆEØ”;Ô$ U¨S¡[Ô1Ð1ØŒ{˜3ÔÐr"   c              #   óè   K  — t          | j        ¦  «        | j        k    r| j        D ]}|V — ŒdS | j        j        }| j        d         j        }t          | j        ¦  «        D ]}|||z            V — ŒdS )z)Return iterator over TiffPages in series.r   N)r.   r  rë  r“  rQ   r‰  rq  )r`   rX   rQ   r‰  r   s        r    r   zTiffPageSeries.__iter__F  s˜   è è € åˆtŒ{ÑÔ˜tœyÒ(Ð(Øœð ð �Ø�
�
�
�
ðð ð ”KÔ%ˆEØ”K ”NÔ(ˆEÝ˜4œ9Ñ%Ô%ð 'ð '�Ø˜E A™IÔ&Ð&Ð&Ð&Ð&ð'ð 'r"   c                 ól  — d                      d„ | j        rt          d| j        z  d¦  «        ndd                      d„ | j        D ¦   «         ¦  «        t	          | j        ¦  «        | j        | j        dt          | j	        ¦  «        z  | j
        r
d	| j
        z  ndfD ¦   «         ¦  «        }d
| j        |fz  S )z,Return string with information about series.rò  c              3   ó   K  — | ]}|¯|V — Œ	d S r   r   r  s     r    r!   z)TiffPageSeries.__str__.<locals>.<genexpr>S  s>   è è € ð 
ð 
àð ð
Øð
ð 
ð 
ð 
ð 
ð 
r"   z'%s'r‰   r,  rí   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r   rõ  rÚ   s     r    r!   z)TiffPageSeries.__str__.<locals>.<genexpr>W  r   r"   rñ  z	Offset=%izTiffPageSeries %i  %s)r  rÜ  r  rE   rœ   r=   r  r  r.   rQ   rU   r‰  )r`   rú   s     r    rû  zTiffPageSeries.__str__Q  sÃ   € à�IŠIð 
ð 
ð 48´9ÐD•˜ ¤Ñ*¨BÑ/Ô/Ð/À"Ø—’Ð4Ð4¨¬Ð4Ñ4Ô4Ñ4Ô4Ý�D”J‘”Ø”	Ø”
Ø�S ¤™_œ_Ñ,Ø/3¬{ÐB�˜tœ{Ñ*Ð*Àðð
ñ 
ô 
ñ 
ô 
ˆð '¨$¬*°a¨Ñ8Ð8r"   )NNNNFr   )rh   rp   rq   rr   ra   r/   r   rU   rw  r“  rH   rQ   r›  rž  r   rû  r   r"   r    r   r   Ö  s   € € € € € ðð ð. ØØØØð#ð #ð #ð #ð@ð ð ð ð ðð ñ „Xðð4 ðð ñ „Xðð ð(ð (ñ „Xð(ð ðð ñ „Xðð
ð ð ð ð  ð  ð	'ð 	'ð 	'ð9ð 9ð 9ð 9ð 9r"   r   c                   ón   — e Zd ZdZddiZ G d„ de¦  «        Zedfd„Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zdd„Zd„ ZdS )r   a¥  Sequence of TIFF files.

    The image data in all files must match shape, dtype, etc.

    Attributes
    ----------
    files : list
        List of file names.
    shape : tuple
        Shape of image sequence. Excludes shape of image array.
    axes : str
        Labels of axes in shape.

    Examples
    --------
    >>> # read image stack from sequence of TIFF files
    >>> imsave('temp_C001T001.tif', numpy.random.rand(64, 64))
    >>> imsave('temp_C001T002.tif', numpy.random.rand(64, 64))
    >>> tifs = TiffSequence('temp_C001*.tif')
    >>> tifs.shape
    (1, 2)
    >>> tifs.axes
    'CT'
    >>> data = tifs.asarray()
    >>> data.shape
    (1, 2, 64, 64)

    r  a¾  
            # matches Olympus OIF and Leica TIFF series
            _?(?:(q|l|p|a|c|t|x|y|z|ch|tp)(\d{1,4}))
            _?(?:(q|l|p|a|c|t|x|y|z|ch|tp)(\d{1,4}))?
            _?(?:(q|l|p|a|c|t|x|y|z|ch|tp)(\d{1,4}))?
            _?(?:(q|l|p|a|c|t|x|y|z|ch|tp)(\d{1,4}))?
            _?(?:(q|l|p|a|c|t|x|y|z|ch|tp)(\d{1,4}))?
            _?(?:(q|l|p|a|c|t|x|y|z|ch|tp)(\d{1,4}))?
            _?(?:(q|l|p|a|c|t|x|y|z|ch|tp)(\d{1,4}))?
            c                   ó   — e Zd ZdS )úTiffSequence.ParseErrorNrÉ  r   r"   r    r–  rú  Œ  rÊ  r"   r–  c           	      ó`  ‡— t          |t          j        ¦  «        rt          |¦  «        }t          |t          ¦  «        r!t          t          j        |¦  «        ¦  «        }t          |¦  «        }|st          d¦  «        ‚t          |d         t          j        ¦  «        rd„ |D ¦   «         }n*t          |d         t          ¦  «        st          d¦  «        ‚|| _	        t          |d¦  «        r|Šˆfd„}|| _        | j                             ||¦  «        | _        	 |                      ¦   «          | j        s	d| _        d
S d
S # | j        $ r_ d| _        t%          |¦  «        f| _        d| _        t+          d	„ t-          t%          |¦  «        ¦  «        D ¦   «         ¦  «        | _        Y d
S w xY w)a\  Initialize instance from multiple files.

        Parameters
        ----------
        files : str, pathlib.Path, or sequence thereof
            Glob pattern or sequence of file names.
            Binary streams are not supported.
        imread : function or class
            Image read function or class with asarray function returning numpy
            array from single file.
        pattern : str
            Regular expression pattern that matches axes names and sequence
            indices in file names.
            By default, the pattern matches Olympus OIF and Leica TIFF series.

        r$   r   c                 óP   — g | ]#}t          t          j        |¦  «        ¦  «        ‘Œ$S r   )rœ   ÚpathlibÚPathrð  s     r    rK  z)TiffSequence.__init__.<locals>.<listcomp>¨  s(   € Ð9Ð9Ð9¨a•S�œ a™œÑ)Ô)Ð9Ð9Ð9r"   znot a file namer/   c                 óh   •—  ‰| ¦  «        5 } |j         |i |¤Žcd d d ¦  «         S # 1 swxY w Y   d S r   )r/   )rµ  r	  r0   ÚimÚ_imreads       €r    r   z%TiffSequence.__init__.<locals>.imread±  s†   ø€ Ø�W˜U‘^”^ð 7 rØ%˜2œ: tÐ6¨vÐ6Ð6ð7ð 7ð 7ð 7ñ 7ô 7ð 7ð 7ð 7ð 7ð 7ð 7øøøð 7ð 7ð 7ð 7ð 7ð 7s   �'§+®+r�   r9  c              3   ó   K  — | ]}|fV — Œd S r   r   rÚ   s     r    r!   z(TiffSequence.__init__.<locals>.<genexpr>À  s$   è è € Ð!BÐ!B¨1 1 $Ð!BÐ!BÐ!BÐ!BÐ!BÐ!Br"   N)r(   rý  rþ  rœ   r)   r   r+   r  r,   r   r-   r   Ú	_patternsrA   r   Ú_parser  r–  r.   rE   Ú_startindexr  rq  Ú_indices)r`   r   r   r   r	  r0   r  s         @r    ra   zTiffSequence.__init__�  s½  ø€ õ" �e�Wœ\Ñ*Ô*ð 	Ý˜‘J”JˆEÝ�e�ZÑ(Ô(ð 	5Ý"¥4¤9¨UÑ#3Ô#3Ñ4Ô4ˆEÝ�U‘”ˆØð 	/ÝÐ-Ñ.Ô.Ð.Ý�e˜A”h¥¤Ñ-Ô-ð 	0Ø9Ð9°5Ð9Ñ9Ô9ˆEˆEÝ˜E !œH¥jÑ1Ô1ð 	0ÝÐ.Ñ/Ô/Ð/ØˆŒ
å�6˜9Ñ%Ô%ð 	7àˆGð7ð 7ð 7ð 7ð 7ð ˆŒà”~×)Ò)¨'°7Ñ;Ô;ˆŒð	CØ�KŠK‰MŒMˆMØ”9ð  Ø�”	�	�	ð ð  øàŒð 	Cð 	Cð 	CØˆDŒIÝ˜e™*œ*˜ˆDŒJØ#ˆDÔÝ!Ð!BÐ!Bµµc¸%±j´jÑ0AÔ0AÐ!BÑ!BÔ!BÑBÔBˆDŒMˆMˆMˆMð		Cøøøs   Ä"E ÅA%F-Æ,F-c           	      ó®   — d                      | j        d         dt          | j        ¦  «        z  d| j        z  dt	          | j        ¦  «        z  g¦  «        S )z4Return string with information about image sequence.ró  r   z	 size: %iz	 axes: %sz
 shape: %s)r  r   r.   r  rœ   rE   rË  s    r    rû  zTiffSequence.__str__Â  sP   € à�yŠyà”
˜1”Ø�c $¤*™oœoÑ-Ø˜dœiÑ'Ø�s 4¤:™œÑ.ð	ñ
ô 
ð 	
r"   c                 ó*   — t          | j        ¦  «        S r   )r.   r   rË  s    r    r›  zTiffSequence.__len__Í  s   € Ý�4”:‰ŒÐr"   c                 ó   — | S r   r   rË  s    r    rÏ  zTiffSequence.__enter__Ð  rÐ  r"   c                 ó.   — |                       ¦   «          d S r   rÒ  rÓ  s       r    r×  zTiffSequence.__exit__Ó  rØ  r"   c                 ó   — d S r   r   rË  s    r    rÍ  zTiffSequence.closeÖ  ó   € Øˆr"   Nc                 óœ  —  | j         | j        d         g|¢R i |¤Ž}| j        |j        z   }t          |||j        ¬¦  «        } |j        dg|j        ¢R Ž }t          | j        | j        ¦  «        D ]T\  }}d„ t          || j        ¦  «        D ¦   «         }t          j
        || j        ¦  «        } | j         |g|¢R i |¤Ž}|||<   ŒU||_        |S )zÔRead image data from all files and return as numpy array.

        The args and kwargs parameters are passed to the imread function.

        Raise IndexError or ValueError if image shapes do not match.

        r   rÖ   rÁ   c                 ó   — g | ]
\  }}||z
  ‘ŒS r   r   ©r   r   r7  s      r    rK  z(TiffSequence.asarray.<locals>.<listcomp>æ  s    € ÐDÐDÐD™t˜q !�Q˜‘UÐDÐDÐDr"   )r   r   rE   r   r=   rd  r5  r  r  r<   r�  )	r`   r  r	  r0   r   rE   rZ   r‰  rµ  s	            r    r/   zTiffSequence.asarrayÙ  s÷   € ð ˆTŒ[˜œ AœÐ8¨Ð8Ð8Ð8°Ð8Ð8ˆØ”
˜RœXÑ%ˆÝ˜s E°´Ð:Ñ:Ô:ˆØ�” Ð. R¤XÐ.Ð.Ð.ˆÝ ¤¨t¬zÑ:Ô:ð 	ð 	‰LˆE�5ØDÐD¥s¨5°$Ô2BÑ'CÔ'CÐDÑDÔDˆEÝÔ+¨E°4´:Ñ>Ô>ˆEØ�”˜UÐ4 TÐ4Ð4Ð4¨VÐ4Ð4ˆBØˆF�5‰MˆMØˆŒØˆr"   c           	      ó¦  — | j         s|                      d¦  «        ‚t          j        | j         t          j        t          j        z  ¦  «        }|                     | j        d         ¦  «        }|s|                      d¦  «        ‚|d         }t          |¦  «        dz  r|                      d¦  «        ‚d 	                    d„ |d	d	d…         D ¦   «         ¦  «        }|s|                      d¦  «        ‚g }| j        D ]€}|                     |¦  «        d         }|d 	                    d
„ |d	d	d…         D ¦   «         ¦  «        k    rt          d¦  «        ‚|                     d„ |dd	d…         D ¦   «         ¦  «         Œ�t          t          j        |d¬¦  «        ¦  «        }t          t          j        |d¬¦  «        ¦  «        }t          d„ t!          ||¦  «        D ¦   «         ¦  «        }t#          |¦  «        t          | j        ¦  «        k    rt%          j        d¦  «         |                     ¦   «         | _        || _        || _        || _        d	S )z#Get axes and shape from file names.zinvalid patternr   z!pattern does not match file namesrÁ   r‘   z*pattern does not match axis name and indexr,  c              3   ó   K  — | ]}|¯|V — Œ	d S r   r   ©r   r  s     r    r!   z&TiffSequence._parse.<locals>.<genexpr>ø  s'   è è € Ð4Ð4˜Q°!Ð4�qÐ4Ð4Ð4Ð4Ð4Ð4r"   Nc              3   ó   K  — | ]}|¯|V — Œ	d S r   r   r  s     r    r!   z&TiffSequence._parse.<locals>.<genexpr>ÿ  s'   è è € Ð<Ð< Q¸!Ð<˜qÐ<Ð<Ð<Ð<Ð<Ð<r"   z+axes do not match within the image sequencec                 ó0   — g | ]}|¯t          |¦  «        ‘ŒS r   rØ   r  s     r    rK  z'TiffSequence._parse.<locals>.<listcomp>  s#   € Ð?Ð?Ð? q¸QÐ?�C ™FœFÐ?Ð?Ð?r"   r&   rÍ   c              3   ó,   K  — | ]\  }}||z
  d z   V — ŒdS rÜ   r   r  s      r    r!   z&TiffSequence._parse.<locals>.<genexpr>  s.   è è € ÐCÐC¡D A q�a˜!‘e˜a‘iÐCÐCÐCÐCÐCÐCr"   z*files are missing. Missing data are zeroed)r   r–  ÚreÚcompileÚ
IGNORECASEÚVERBOSEÚfindallr   r.   r  r,   r7   r  r<   r  rt  r5  r   r    r¡   r]  r  rE   r  r  )r`   r   Úmatchesr  r×  rµ  rE   Ú
startindexs           r    r  zTiffSequence._parseí  s2  € àŒ|ð 	5Ø—/’/Ð"3Ñ4Ô4Ð4Ý”*˜Tœ\­2¬=½2¼:Ñ+EÑFÔFˆØ—/’/ $¤*¨Q¤-Ñ0Ô0ˆØð 	GØ—/’/Ð"EÑFÔFÐFØ˜"”+ˆÝˆw‰<Œ<˜!Ñð 	PØ—/’/Ð"NÑOÔOÐOØ�wŠwÐ4Ð4 '¨#¨#¨A¨#¤,Ð4Ñ4Ô4Ñ4Ô4ˆØð 	GØ—/’/Ð"EÑFÔFÐFàˆØ”Zð 	Að 	AˆEØ—o’o eÑ,Ô,¨RÔ0ˆGØ�r—w’wÐ<Ð<¨'°#°#°A°#¬,Ð<Ñ<Ô<Ñ<Ô<Ò<Ð<Ý Ð!NÑOÔOÐOØ�NŠNÐ?Ð?¨G°A°D°q°D¬MÐ?Ñ?Ô?Ñ@Ô@Ð@Ð@Ý•e”i ¨aÐ0Ñ0Ô0Ñ1Ô1ˆÝ�5œ9 W°1Ð5Ñ5Ô5Ñ6Ô6ˆ
ÝÐCÐC­C°°zÑ,BÔ,BÐCÑCÔCÑCÔCˆÝ�5‰>Œ>�S ¤™_œ_Ò,Ð,ÝŒMÐFÑGÔGÐGà—J’J‘L”LˆŒ	ØˆŒ
ØˆŒØ%ˆÔÐÐr"   r   )rh   rp   rq   rr   r  r@   r–  r	   ra   rû  r›  rÏ  r×  rÍ  r/   r  r   r"   r    r   r   c  sç   € € € € € ðð ð: ð 	ð 	€Iðð ð ð ð �Yñ ô ð ð &.°vð 1Cð 1Cð 1Cð 1Cðf	
ð 	
ð 	
ðð ð ðð ð ðð ð ðð ð ðð ð ð ð(&ð &ð &ð &ð &r"   r   c                   ó(  — e Zd ZdZdZd$d„Zd„ Zd%d„Zd	„ Zd
„ Z	d&d„Z
	 d'd„Zd(d„Zd„ Zd„ Zd„ Zd)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j        d#„ ¦   «         ZdS )*r   aÿ  Binary file handle.

    A limited, special purpose file handler that can:

    * handle embedded files (for CZI within CZI files)
    * re-open closed files (for multi-file formats, such as OME-TIFF)
    * read and write numpy arrays and records from file like objects

    Only 'rb' and 'wb' modes are supported. Concurrently reading and writing
    of the same stream is untested.

    When initialized from another file handle, do not use it unless this
    FileHandle is closed.

    Attributes
    ----------
    name : str
        Name of the file.
    path : str
        Absolute path to file.
    size : int
        Size of file in bytes.
    is_file : bool
        If True, file has a filno and can be memory-mapped.

    All attributes are read-only.

    )
r¸   Ú_fileÚ_modeÚ_nameÚ_dirÚ_lockÚ_offsetÚ_sizeÚ_closer  rw   Nc                 óÒ   — || _         d| _        || _        || _        d| _        || _        || _        d| _        d| _        t          ¦   «         | _
        |                      ¦   «          dS )aé  Initialize file handle from file name or another file handle.

        Parameters
        ----------
        file : str, pathlib.Path, binary stream, or FileHandle
            File name or seekable binary stream, such as an open file
            or BytesIO.
        mode : str
            File open mode in case 'file' is a file name. Must be 'rb' or 'wb'.
        name : str
            Optional name of file in case 'file' is a binary stream.
        offset : int
            Optional start position of embedded file. By default, this is
            the current file position.
        size : int
            Optional size of embedded file. By default, this is the number
            of bytes from the 'offset' to the end of the file.

        Nr,  TF)r  r¸   r  r   r!  r#  r$  r%  r  ÚNullContextr"  rã  )r`   rC   rY   rÜ  rU   rH   s         r    ra   zFileHandle.__init__9  s_   € ð( ˆŒ
ØˆŒØˆŒ
ØˆŒ
ØˆŒ	ØˆŒØˆŒ
ØˆŒØˆŒÝ ‘]”]ˆŒ
Ø�	Š	‰Œˆˆˆr"   c                 ó²  — | j         rdS t          | j        t          j        ¦  «        rt          | j        ¦  «        | _        t          | j        t          ¦  «        r�t          j         	                    | j        ¦  «        | _        t          j         
                    | j        ¦  «        \  | _        | _        t          | j        | j        ¦  «        | _         d| _        | j        €d| _        �nt          | j        t"          ¦  «        rí| j        j         | _         | j        €d| _        | xj        | j        j        z  c_        d| _        | j        sW| j        r?t          j                             | j        j        ¦  «        \  }}d|| j        |fz  | _        n| j        j        | _        | j        r$| j        | j        j        k    rt'          d¦  «        ‚| j        j        | _        | j        j        | _        �nt)          | j        d¦  «        ré	 | j                             ¦   «          n# t,          $ r t'          d¦  «        ‚w xY w| j        | _         | j        €| j                             ¦   «         | _        d| _        | j        sO	 t          j         
                    | j         j        ¦  «        \  | _        | _        n# t0          $ r
 d	| _        Y nw xY w	 | j         j        | _        n# t0          $ r Y nw xY wt'          d
¦  «        ‚| j        r| j                              | j        ¦  «         | j        €q| j                              ¦   «         }| j                              | j        d¦  «         | j                              ¦   «         | _        | j                              |¦  «         	 | j                              ¦   «          d| _        dS # t,          $ r d| _        Y dS w xY w)zOpen or re-open file.NTr   Fz%s@%i%szFileHandle has wrong moder%   zbinary stream is not seekablezUnnamed binary streamzNThe first parameter must be a file name, seekable binary stream, or FileHandler‘   )r¸   r(   r  rý  rþ  rœ   r)   rü  rž  Úrealpathr  r!  r   rã  r  r%  r#  r   Úsplitextr,   r-   r˜   r@   rÜ  rc   rY   r%   r$  rþ  r  )r`   rÜ  Úextr½   s       r    rã  zFileHandle.openY  sy  € àŒ8ð 	ØˆFå�d”j¥'¤,Ñ/Ô/ð 	)Ý˜TœZ™œˆDŒJÝ�d”j¥*Ñ-Ô-ð 0	åœ×)Ò)¨$¬*Ñ5Ô5ˆDŒJÝ$&¤G§M¢M°$´*Ñ$=Ô$=Ñ!ˆDŒI�t”zÝ˜DœJ¨¬
Ñ3Ô3ˆDŒHØˆDŒKØŒ|Ð#Ø �”ùÝ˜œ
¥JÑ/Ô/ð (	à”z”~ˆDŒHØŒ|Ð#Ø �”ØˆLŒL˜DœJÔ.Ñ.ˆLŒLØˆDŒKØ”:ð 2Ø”<ð 2Ý "¤× 0Ò 0°´Ô1AÑ BÔ B‘I�D˜#Ø!*¨d°D´LÀ#Ð-FÑ!F�D”J�Jà!%¤Ô!1�D”JØŒzð >˜dœj¨D¬JÔ,<Ò<Ð<Ý Ð!<Ñ=Ô=Ð=ØœÔ)ˆDŒJØœ
œˆDŒI‰IÝ�T”Z Ñ(Ô(ð 	ðBØ”
—’Ñ!Ô!Ð!Ð!øÝð Bð Bð BÝ Ð!@ÑAÔAÐAðBøøøà”zˆDŒHØŒ|Ð#Ø#œzŸšÑ0Ô0�”ØˆDŒKØ”:ð 9ð9Ý,.¬G¯MªM¸$¼(¼-Ñ,HÔ,HÑ)�D”I˜tœz˜zøÝ%ð 9ð 9ð 9Ø!8�D”J�J�Jð9øøøðØ!œXœ]�”
�
øÝ!ð ð ð Ø�ðøøøõ ð8ñô ð ð
 Œ<ð 	(ØŒH�MŠM˜$œ,Ñ'Ô'Ð'àŒ:ÐØ”(—-’-‘/”/ˆCØŒH�MŠM˜$œ,¨Ñ*Ô*Ð*ØœŸš™œˆDŒJØŒH�MŠM˜#ÑÔÐð	!ØŒH�OŠOÑÔÐØˆDŒLˆLˆLøÝð 	!ð 	!ð 	!Ø ˆDŒLˆLˆLˆLð	!øøøsB   È	H# È#H=Ê 6J7 Ê7KË
KËK! Ë!
K.Ë-K.Î O ÏOÏOrÁ   c                 ó^   — |dk     r| j         r| j        }| j                             |¦  «        S )z5Read 'size' bytes from file, or until EOF is reached.r   )r#  r$  r¸   rè  ©r`   rH   s     r    rè  zFileHandle.read¡  s,   € à�!Š8ˆ8˜œˆ8Ø”:ˆDØŒx�}Š}˜TÑ"Ô"Ð"r"   c                 ó6   — | j                              |¦  «        S )zWrite bytestring to file.)r¸   r¹   )r`   Ú
bytestrings     r    r¹   zFileHandle.write§  s   € àŒx�~Š~˜jÑ)Ô)Ð)r"   c                 ó4   — | j                              ¦   «         S )z"Flush write buffers if applicable.)r¸   ru  rË  s    r    ru  zFileHandle.flush«  s   € àŒx�~Š~ÑÔÐr"   r   ÚrrM   c                 ó|   — | j         st          d¦  «        ‚t          j        | j        ||| j        |z   ||¬¦  «        S )z+Return numpy.memmap of data stored in file.z%Cannot memory-map file without fileno)r=   rY   rU   rE   Úorder)r  r,   r<   r   r¸   r#  )r`   r=   rE   rU   rY   r3  s         r    r  zFileHandle.memmap_array¯  sP   € àŒ|ð 	FÝÐDÑEÔEÐEÝŒ|ØŒHØØØ”< &Ñ(ØØð
ñ 
ô 
ð 	
r"   r,  é   Fc                 ó   — | j         }t          j        |¦  «        }|dk     r| j        n	||j        z  }|€·	 t          j        ||||¦  «        }	nM# t          $ r@ |                     |¦  «        }
t          j        |
||¦  «         	                    ¦   «         }	Y nw xY w|rM|	j        j
        sA|	                     d¦  «         |	                     |	j                             ¦   «         ¦  «        }	|	S |j        }t          |j        |¦  «        }|                     d¦  «        }d}|dk    rr|                     t          ||¦  «        ¦  «        }
t%          |
¦  «        }|dk    rn9||z  }t          j        |
|¦  «        }
|
||||
j        z   …<   ||
j        z  }|dk    °rt)          |d¦  «        r|                     ¦   «          |                     |¦  «        S )z´Return numpy array from file.

        Work around numpy issue #2230, "numpy.fromfile does not accept
        StringIO object" https://github.com/numpy/numpy/issues/2230.

        r   NTrÁ   ru  )r¸   r<   r=   r$  r>   Úfromfiler�   rè  r×  rg  rN  rê  rë  rM  rE   rt  r?   rd  r.   rH   r-   ru  )r`   r=   r  ÚsepÚ	chunksizer  r  r¼   rH   rZ   rD   rE   r‰  rŠ  s                 r    r  zFileHandle.read_array¼  sÛ  € ð ŒXˆÝ”˜EÑ"Ô"ˆØ" QšY˜YˆtŒzˆz¨E°E´NÑ,Bˆàˆ;ðEÝœ¨¨E°5¸#Ñ>Ô>��øÝð Eð Eð Eà—w’w˜t‘}”}�ÝÔ)¨$°°uÑ=Ô=×BÒBÑDÔD���ðEøøøð ð B˜fœlÔ3ð Bà—’ Ñ%Ô%Ð%ØŸš V¤\×%>Ò%>Ñ%@Ô%@ÑAÔA�ØˆMð ”	ˆÝ�3”:˜tÑ$Ô$ˆØ�kŠk˜"‰oŒoˆØˆØ�QŠhˆhØ—7’7�3˜y¨$Ñ/Ô/Ñ0Ô0ˆDÝ˜4‘y”yˆHØ˜1Š}ˆ}ØØ�HÑˆDÝÔ# D¨%Ñ0Ô0ˆDØ-1ˆC�˜ ¤	Ñ)Ð)Ñ*Ø�T”YÑˆEð �QŠhˆhõ �3˜Ñ Ô ð 	Ø�IŠI‰KŒKˆKØ�{Š{˜5Ñ!Ô!Ð!s   ¶A ÁABÂBr&   c                 ó’  — t           j        }	 |                     | j        |||¬¦  «        }nŒ# t          $ r t          j        |¦  «        }|€| j        |j        z  }t          t          |¦  «        ¦  «        |j        z  }| j         
                    |¦  «        }|                     ||||¬¦  «        }Y nw xY w|dk    r|d         n|S )zReturn numpy record from file.©r9   Nr&   r   )r<   Úrecr6  r¸   r@   r=   r$  r>   r   Úsequencerè  r•  )r`   r=   rE   r9   r;  ÚrecordrH   rD   s           r    Úread_recordzFileHandle.read_recordé  sÏ   € åŒiˆð	MØ—\’\ $¤(¨E°5ÀI�\ÑNÔNˆFˆFøÝð 	Mð 	Mð 	MÝ”K Ñ&Ô&ˆEØˆ}Øœ
 e¤nÑ4�Ý�8 E™?œ?Ñ+Ô+¨e¬nÑ<ˆDØ”8—=’= Ñ&Ô&ˆDØ—^’^ D¨%°À)�^ÑLÔLˆFˆFˆFð	Møøøð " QšJ˜Jˆv�aŒyˆy¨FÐ2s   Ž- ­BB6Â5B6c                 ó†   — |dk     rdS | j                              |dz
  d¦  «         | j                              d¦  «         dS )z;Append size bytes to file. Position must be at end of file.r&   Nrû   )r¸   r%   r¹   r-  s     r    rR  zFileHandle.write_empty÷  sD   € à�!Š8ˆ8ØˆFØŒ�Š�d˜Q‘h Ñ"Ô"Ð"ØŒ�Š�wÑÔÐÐÐr"   c                 ó¶   — 	 |                      | j        ¦  «         dS # t          $ r0 | j                             |                     ¦   «         ¦  «         Y dS w xY w)z!Write numpy array to binary file.N)Útofiler¸   r@   r¹   r  )r`   rD   s     r    rS  zFileHandle.write_arrayþ  sa   € ð	,Ø�KŠK˜œÑ!Ô!Ð!Ð!Ð!øÝð 	,ð 	,ð 	,àŒH�NŠN˜4Ÿ=š=™?œ?Ñ+Ô+Ð+Ð+Ð+Ð+ð	,øøøs   ‚ ž6AÁAc                 óD   — | j                              ¦   «         | j        z
  S )zReturn file's current position.)r¸   r˜   r#  rË  s    r    r˜   zFileHandle.tell  s   € àŒx�}Š}‰Œ ¤Ñ-Ð-r"   c                 ó  — | j         ri|dk    r%| j                             | j         |z   |¦  «         dS |dk    r8| j        dk    r-| j                             | j         | j        z   |z   d¦  «         dS | j                             ||¦  «         dS )zSet file's current position.r   Nr‘   )r#  r¸   r%   r$  )r`   rU   Úwhences      r    r%   zFileHandle.seek
  s�   € àŒ<ð 	Ø˜Š{ˆ{Ø”—’˜dœl¨VÑ3°VÑ<Ô<Ð<Ø�Ø˜1’� ¤¨a¢ Ø”—’˜dœl¨T¬ZÑ7¸&Ñ@À!ÑDÔDÐDØ�ØŒ�Š�f˜fÑ%Ô%Ð%Ð%Ð%r"   c                 ój   — | j         r)| j        r$| j                             ¦   «          d| _        dS dS dS )zClose file.N)r%  r¸   rÍ  rË  s    r    rÍ  zFileHandle.close  sF   € àŒ;ð 	˜4œ8ð 	ØŒH�NŠNÑÔÐØˆDŒHˆHˆHð	ð 	ð 	ð 	r"   c                 ó   — | S r   r   rË  s    r    rÏ  zFileHandle.__enter__  rÐ  r"   c                 ó.   — |                       ¦   «          d S r   rÒ  rÓ  s       r    r×  zFileHandle.__exit__  rØ  r"   c                 óh   — | j         rt          j        d|z  ¦  «         t          | j        |¦  «        S )z-Return attribute from underlying file object.z3FileHandle: '%s' not implemented for embedded files)r#  r    r¡   rf   r¸   rÂ  s     r    ræ  zFileHandle.__getattr__!  s6   € àŒ<ð 	XÝŒMÐOÐRVÑVÑWÔWÐWÝ�t”x Ñ&Ô&Ð&r"   c                 ó   — | j         S r   )r   rË  s    r    rÜ  zFileHandle.name'  ó
   € àŒzÐr"   c                 ó   — | j         S r   )r!  rË  s    r    r™  zFileHandle.dirname+  rò  r"   c                 óV   — t           j                             | j        | j        ¦  «        S r   )rü  rž  r  r!  r   rË  s    r    rž  zFileHandle.path/  s   € åŒw�|Š|˜DœI t¤zÑ2Ô2Ð2r"   c                 ó   — | j         S r   )r$  rË  s    r    rH   zFileHandle.size3  rJ  r"   c                 ó   — | j         d u S r   rù  rË  s    r    r•  zFileHandle.closed7  s   € àŒx˜4ÐÐr"   c                 ó   — | j         S r   )r"  rË  s    r    râ  zFileHandle.lock;  rJ  r"   c                 óV   — |rt          j        ¦   «         nt          ¦   «         | _        d S r   )Ú	threadingÚRLockr'  r"  rƒ  s     r    râ  zFileHandle.lock?  s#   € à*/ÐB•Y”_Ñ&Ô&Ð&µ[±]´]ˆŒ
ˆ
ˆ
r"   )rw   NNNrß   )r   r1  rM   )rÁ   r,  r4  NFrÜ   r9  )rh   rp   rq   rr   rs   ra   rã  rè  r¹   ru  r  r  r>  rR  rS  r˜   r%   rÍ  rÏ  r×  ræ  rw  rÜ  r™  rž  rH   r•  râ  r¢  r   r"   r    r   r     s  € € € € € ðð ð:€Iðð ð ð ð@F!ð F!ð F!ðP#ð #ð #ð #ð*ð *ð *ð ð  ð  ð
ð 
ð 
ð 
ð JOð+"ð +"ð +"ð +"ðZ3ð 3ð 3ð 3ð ð  ð  ð,ð ,ð ,ð.ð .ð .ð	&ð 	&ð 	&ð 	&ðð ð ðð ð ðð ð ð'ð 'ð 'ð ðð ñ „Xðð ðð ñ „Xðð ð3ð 3ñ „Xð3ð ðð ñ „Xðð ð ð  ñ „Xð ð ðð ñ „Xðð 
„[ðCð Cñ „[ðCð Cð Cr"   r   c                   ó   — e Zd ZdZd„ Zd„ ZdS )r'  zINull context manager.

    >>> with NullContext():
    ...     pass

    c                 ó   — | S r   r   rË  s    r    rÏ  zNullContext.__enter__L  rÐ  r"   c                 ó   — d S r   r   rÓ  s       r    r×  zNullContext.__exit__O  r  r"   N)rh   rp   rq   rr   rÏ  r×  r   r"   r    r'  r'  D  s<   € € € € € ðð ðð ð ðð ð ð ð r"   r'  c                   ó0   — e Zd ZdZdZdd„Zd„ Zd„ Zd„ ZdS )	ÚOpenFileCachezKeep files open.)r   Úpastrâ  rH   Nc                 óx   — g | _         i | _        |€t          ¦   «         n|| _        t	          |¦  «        | _        dS )zInitialize open file cache.N)rX  r   r'  râ  rÙ   rH   )r`   rH   râ  s      r    ra   zOpenFileCache.__init__X  s4   € àˆŒ	ØˆŒ
Ø%) \•K‘M”M�M°tˆŒ	Ý˜‘I”IˆŒ	ˆ	ˆ	r"   c                 ó  — | j         5  || j        v r| j        |xx         dz  cc<   n?|j        r8|                     ¦   «          d| j        |<   | j                             |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zRe-open file if necessary.r&   N)râ  r   r•  rã  rX  r7   )r`   rï  s     r    rã  zOpenFileCache.open_  sÙ   € àŒYð 	-ð 	-Ø˜TœZÐ'Ð'Ø”
˜:Ð&Ð&Ô&¨!Ñ+Ð&Ð&Ñ&Ð&ØÔ"ð -Ø—’Ñ!Ô!Ð!Ø)*�”
˜:Ñ&Ø”	× Ò  Ñ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð 	-ð 	-s   ˆAA4Á4A8Á;A8c                 óŒ  — | j         5  || j        v rš| j        |xx         dz  cc<   d}t          | j        ¦  «        }|| j        k    rd||k     r^| j        |         }| j        |         dk    r*|                     ¦   «          | j        |= | j        |= |dz  }n|dz  }|| j        k    r||k     °^ddd¦  «         dS # 1 swxY w Y   dS )z$Close opened file if no longer used.r&   r   N)râ  r   r.   rX  rH   rÍ  )r`   rï  r‰  rH   s       r    rÍ  zOpenFileCache.closei  s/  € àŒYð 	#ð 	#Ø˜TœZÐ'Ð'Ø”
˜:Ð&Ð&Ô&¨!Ñ+Ð&Ð&Ñ&à�Ý˜4œ9‘~”~�Ø˜TœYÒ&Ð&¨5°4ª<¨<Ø!%¤¨5Ô!1�JØ”z *Ô-°Ò2Ð2Ø"×(Ò(Ñ*Ô*Ð*Ø œJ zÐ2Ø œI eÐ,Ø ™	˜˜à ™
˜ð ˜TœYÒ&Ð&¨5°4ª<¨<ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#s   ˆB$B9Â9B=Ã B=c                 ó$  — | j         5  t          | j                             ¦   «         ¦  «        D ]G\  }}|dk    r<|                     ¦   «          | j        |= | j        | j                             |¦  «        = ŒH	 ddd¦  «         dS # 1 swxY w Y   dS )z%Close all opened files if not in use.r   N)râ  r  r   rä  rÍ  rX  r‰  )r`   rï  Úrefcounts      r    r!  zOpenFileCache.clear{  sÛ   € àŒYð 	?ð 	?Ý(,¨T¬Z×-=Ò-=Ñ-?Ô-?Ñ(@Ô(@ð ?ð ?Ñ$�
˜HØ˜q’=�=Ø×$Ò$Ñ&Ô&Ð&Øœ
 :Ð.Øœ	 $¤)§/¢/°*Ñ"=Ô"=Ð>øð	?ð	?ð 	?ð 	?ñ 	?ô 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?øøøð 	?ð 	?ð 	?ð 	?ð 	?ð 	?s   ˆA/BÂB	ÂB	r   )	rh   rp   rq   rr   rs   ra   rã  rÍ  r!  r   r"   r    rW  rW  S  s`   € € € € € ØÐà1€Iðð ð ð ð-ð -ð -ð#ð #ð #ð$?ð ?ð ?ð ?ð ?r"   rW  c                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú	LazyConstzEClass whose attributes are computed on first access from its methods.c                 ó>   — || _         t          |d¦  «        | _        d S )Nrr   )Ú_clsrf   rr   )r`   Úclss     r    ra   zLazyConst.__init__ˆ  s   € ØˆŒ	Ý˜s IÑ.Ô.ˆŒˆˆr"   c                 óÔ   — t          | j        |¦  «        }t          |¦  «        s|S 	  |¦   «         }n$# t          $ r |                     ¦   «         }Y nw xY wt          | ||¦  «         |S r   )rf   ra  Úcallabler  Ú__func__ri   )r`   rÜ  r^   rl   s       r    ræ  zLazyConst.__getattr__Œ  s}   € Ý�t”y $Ñ'Ô'ˆÝ˜‰~Œ~ð 	ØˆKð	$Ø�D‘F”FˆEˆEøÝð 	$ð 	$ð 	$à—M’M‘O”OˆEˆEˆEð	$øøøõ 	��d˜EÑ"Ô"Ð"Øˆs   ¨
3 ³AÁAN)rh   rp   rq   rr   ra   ræ  r   r"   r    r_  r_  …  s8   € € € € € ØOÐOð/ð /ð /ð
ð 
ð 
ð 
ð 
r"   r_  c                   ó†  — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ 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„ 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)„ Z+d*„ Z,d+„ Z-d,„ Z.d-„ Z/d.„ Z0d/„ Z1d0„ Z2d1„ Z3d2„ Z4d3„ Z5d4„ Z6d5„ Z7d6„ Z8d7„ Z9d8„ Z:d9„ Z;d:„ Z<d;„ Z=d<„ Z>d=„ Z?d>„ Z@d?„ ZAd@S )ArO   zNamespace for module constants.c                  ó<  — i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“i d#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAdB“dCdD“¥i dEdF“dGdH“dIdJ“dKdL“dMdN“dOdP“dQdR“dSdT“dUdV“dWdX“dYdZ“d[d\“d]d^“d_d`“dadb“dcdd“dedf“¥i dgdh“didj“dkdl“dmdn“dodp“dqdr“dsdt“dudv“dwdx“dydz“d{d|“d}d~“dd€“d�d‚“dƒd„“d…d†“d‡dˆ“¥i d‰dŠ“d‹dŒ“d�dŽ“d�d�“d‘d’“d“d”“d•d–“d—d˜“d™dš“d›dœ“d�dž“dŸd “d¡d¢“d£d¤“d¥d¦“d§d¨“d©dª“¥i d«d¬“d­d®“d¯d°“d±d²“d³d´“dµd¶“d·d¸“d¹dº“d»d¼“d½d¾“d¿dÀ“dÁdÂ“dÃdÄ“dÅdÆ“dÇdÈ“dÉdÊ“dËdÌ“¥i dÍdÎ“dÏdÐ“dÑdÒ“dÓdÔ“dÕdÖ“d×dØ“dÙdÚ“dÛdÜ“dÝdÞ“dßdà“dádâ“dãdä“dådæ“dçdè“dédê“dëdì“dídî“¥i dïdð“dñdò“dódô“dõdö“d÷dø“dùdú“dûdü“dýdþ“dÿ�d “�d�d“�d�d“�d�d“�d�d“�d	�d
“�d�d“�d�d“�d�d“¥i �d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d “�d!�d"“�d#�d$“�d%�d&“�d'�d(“�d)�d*“�d+�d,“�d-�d.“�d/�d0“�d1�d2“¥i �d3�d4“�d5�d6“�d7�d8“�d9�d:“�d;�d<“�d=�d>“�d?�d@“�dA�dB“�dC�dD“�dE�dF“�dG�dH“�dI�dJ“�dK�dL“�dM�dN“�dO�dP“�dQ�dR“�dS�dT“¥i �dU�dV“�dW�dX“�dY�dZ“�d[�d\“�d]�d^“�d_�d`“�da�db“�dc�dd“�de�df“�dg�dh“�di�dj“�dk�dl“�dm�dn“�do�dp“�dq�dr“�ds�dt“�du�dv“¥i �dw�dx“�dy�dz“�d{�d|“�d}�d~“�d�d€“�d��d‚“�dƒ�d„“�d…�d†“�d‡�dˆ“�d‰�dŠ“�d‹�dŒ“�d��dŽ“�d��d�“�d‘�d’“�d“�d”“�d•�d–“�d—�d˜“¥i �d™�dš“�d›�dœ“�d��dž“�dŸ�d “�d¡�d¢“�d£�d¤“�d¥�d¦“�d§�d¨“�d©�dª“�d«�d¬“�d­�d®“�d¯�d°“�d±�d²“�d³�d´“�dµ�d¶“�d·�d¸“�d¹�dº“¥i �d»�d¼“�d½�d¾“�d¿�dÀ“�dÁ�dÂ“�dÃ�dÄ“�dÅ�dÆ“�dÇ�dÈ“�dÉ�dÊ“�dË�dÌ“�dÍ�dÎ“�dÏ�dÐ“�dÑ�dÒ“�dÓ�dÔ“�dÕ�dÖ“�d×�dØ“�dÙ�dÚ“�dÛ�dÜ“¥i �dÝ�dÞ“�dß�dà“�dá�dâ“�dã�dä“�då�dæ“�dç�dè“�dé�dê“�dë�dì“�dí�dî“�dï�dð“�dñ�dò“�dó�dô“�dõ�dö“�d÷�dø“�dù�dú“�dû�dü“�dý�dþ“¥i �dÿ�d “�d�d“�d�d“�d�d“�d�d“�d	�d
“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d “¥i �d!�d"“�d#�d$“�d%�d&“�d'�d(“�d)�d*“�d+�d,“�d-�d.“�d/�d0“�d1�d2“�d3�d4“�d5�d6“�d7�d8“�d9�d:“�d;�d<“�d=�d>“�d?�d@“�dA�dB“¥i �dC�dD“�dE�dF“�dG�dH“�dI�dJ“�dK�dL“�dM�dN“�dO�dP“�dQ�dR“�dS�dT“�dU�dV“�dW�dX“�dY�dZ“�d[�d\“�d]�d^“�d_�d`“�da�db“�dc�dd“¥i �de�df“�dg�dh“�di�dj“�dk�dl“�dm�dn“�do�dp“�dq�dr“�ds�dt“�du�dv“�dw�dx“�dy�dz“�d{�d|“�d}�d~“�d�d€“�d��d‚“�dƒ�d„“�d…�d†“¥i �d‡�dˆ“�d‰�dŠ“�d‹�dŒ“�d��dŽ“�d��d�“�d‘�d’“�d“�d”“�d•�d–“�d—�d˜“�d™�dš“�d›�dœ“�d��dž“�dŸ�d “�d¡�d¢“�d£�d¤“�d¥�d¦“�d§�d¨“¥i �d©�dª“�d«�d¬“�d­�d®“�d¯�d°“�d±�d²“�d³�d´“�dµ�d¶“�d·�d¸“�d¹�dº“�d»�d¼“�d½�d¾“�d¿�dÀ“�dÁ�dÂ“�dÃ�dÄ“�dÅ�dÆ“�dÇ�dÈ“�dÉ�dÊ“¥i �dË�dÌ“�dÍ�dÎ“�dÏ�dÐ“�dÑ�dÒ“�dÓ�dÔ“�dÕ�dÖ“�d×�dØ“�dÙ�dÚ“�dÛ�dÜ“�dÝ�dÞ“�dß�dà“�dá�dâ“�dã�dä“�då�dæ“�dç�dè“�dé�dê“�dë�dì“¥i �dí�dî“�dï�dð“�dñ�dò“�dó�dô“�dõ�dö“�d÷�dø“�dù�dú“�dû�dü“�dý�dþ“�dÿ�d “�d�d“�d�d“�d�d“�d�d“�d	�d
“�d�d“�d�d“¥i �d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d “�d!�d"“�d#�d$“�d%�d&“�d'�d(“�d)�d*“�d+�d,“�d-�d.“�d/�d0“¥i �d1�d2“�d3�d4“�d5�d6“�d7�d8“�d9�d:“�d;�d<“�d=�d>“�d?�d@“�dA�dB“�dC�dD“�dE�dF“�dG�dH“�dI�dJ“�dK�dL“�dM�dN“�dO�dP“�dQ�dR“¥i �dS�dT“�dU�dV“�dW�dX“�dY�dZ“�d[�d\“�d]�d^“�d_�d`“�da�db“�dc�dd“�de�df“�dg�dh“�di�dj“�dk�dl“�dm�dn“�do�dp“�dq�dr“�ds�dt“¥i �du�dv“�dw�dx“�dy�dz“�d{�d|“�d}�d~“�d�d€“�d��d‚“�dƒ�d„“�d…�d†“�d‡�dˆ“�d‰�dŠ“�d‹�dŒ“�d��dŽ“�d��d�“�d‘�d’“�d“�d”“�d•�d–“¥i �d—�d˜“�d™�dš“�d›�dœ“�d��dž“�dŸ�d “�d¡�d¢“�d£�d¤“�d¥�d¦“�d§�d¨“�d©�dª“�d«�d¬“�d­�d®“�d¯�d°“�d±�d²“�d³�d´“�dµ�d¶“�d·�d¸“¥i �d¹�dº“�d»�d¼“�d½�d¾“�d¿�dÀ“�dÁ�dÂ“�dÃ�dÄ“�dÅ�dÆ“�dÇ�dÈ“�dÉ�dÊ“�dË�dÌ“�dÍ�dÎ“�dÏ�dÐ“�dÑ�dÒ“�dÓ�dÔ“�dÕ�dÖ“�d×�dØ“�dÙ�dÚ“¥i �dÛ�dÜ“�dÝ�dÞ“�dß�dà“�dá�dâ“�dã�dä“�då�dæ“�dç�dè“�dé�dê“�dë�dì“�dí�dî“�dï�dð“�dñ�dò“�dó�dô“�dõ�dö“�d÷�dø“�dù�dú“�dû�dü“¥i �dý�dþ“�dÿ�d “�d�d“�d�d“�d�d“�d�d“�d	�d
“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“¥i �d�d “�d!�d"“�d#�d$“�d%�d&“�d'�d(“�d)�d*“�d+�d,“�d-�d.“�d/�d0“�d1�d2“�d3�d4“�d5�d6“�d7�d8“�d9�d:“�d;�d<“�d=�d>“�d?�d@“¥i �dA�dB“�dC�dD“�dE�dF“�dG�dH“�dI�dJ“�dK�dL“�dM�dN“�dO�dP“�dQ�dR“�dS�dT“�dU�dV“�dW�dX“�dY�dZ“�d[�d\“�d]�d^“�d_�d`“�da�db“¥i �dc�dd“�de�df“�dg�dh“�di�dj“�dk�dl“�dm�dn“�do�dp“�dq�dr“�ds�dt“�du�dv“�dw�dx“�dy�dz“�d{�d|“�d}�d~“�d�d€“�d��d‚“�dƒ�d„“¥�d…�d†�d‡�dˆ�d‰�dŠœ¥S (‹  Nr^  ÚProcessingSoftwareéþ   r/  rÿ  ÚSubfileTypeé   r)  é  r*  rà  r7  é  r'  é  r3  é  ÚThresholdingi  Ú	CellWidthi	  Ú
CellLengthé
  Ú	FillOrderi  ÚDocumentNamerH  r#  i  ÚMakei  ÚModelr³  r³  é  ÚOrientationi  r5  i  r?  r´  rµ  i  ÚMinSampleValuei  ÚMaxSampleValuei  r:  i  r<  é  r6  i  ÚPageNamei  Ú	XPositioni  Ú	YPositioni   ÚFreeOffsetsi!  ÚFreeByteCountsé"  ÚGrayResponseUniti#  ÚGrayResponseCurvei$  Ú	T4Optionsi%  Ú	T6Optionsé(  r=  i)  Ú
PageNumberé,  ÚColorResponseUniti-  ÚTransferFunctioni1  r%  i2  r&  i;  ÚArtisti<  ÚHostComputeré=  r(  i>  Ú
WhitePointi?  ÚPrimaryChromaticitiesé@  r4  iA  ÚHalftoneHintsiB  r+  iC  r,  rµ  r²  r¶  r´  iF  ÚBadFaxLinesiG  ÚCleanFaxDataiH  ÚConsecutiveBadFaxLinesiJ  ÚSubIFDsiL  ÚInkSetiM  ÚInkNamesiN  ÚNumberOfInksiP  ÚDotRangeiQ  ÚTargetPrinteréR  r8  éS  r2  iT  ÚSMinSampleValueiU  ÚSMaxSampleValueiV  ÚTransferRangeiW  ÚClipPathiX  ÚXClipPathUnitsiY  ÚYClipPathUnitsiZ  ÚIndexedi[  rÎ  i_  ÚOPIProxyi�  ÚGlobalParametersIFDi‘  ÚProfileTypei’  Ú
FaxProfilei“  ÚCodingMethodsi”  ÚVersionYeari•  Ú
ModeNumberi±  ÚDecodei²  ÚDefaultImageColori³  Ú
T82Optionsiµ  ÚJPEGTables_i   ÚJPEGProci  ÚJPEGInterchangeFormati  ÚJPEGInterchangeFormatLengthi  ÚJPEGRestartIntervali  ÚJPEGLosslessPredictorsi  ÚJPEGPointTransformsi  ÚJPEGQTablesi  ÚJPEGDCTablesi	  ÚJPEGACTablesi  ÚYCbCrCoefficientsé  r}  é  ÚYCbCrPositioningi  ÚReferenceBlackWhitei/  ÚStripRowCountsi¼  ÚXMPi  ÚGDIGammai  ÚICCProfileDescriptori  ÚSRGBRenderingIntenti   Ú
ImageTitleiç  ÚUSPTO_Miscellaneousr5  r4  i  ÚAndorTemperaturei  ÚAndorExposureTimei  ÚAndorKineticCycleTimei  ÚAndorAccumulationsi  ÚAndorAcquisitionCycleTimei  ÚAndorReadoutTimei  ÚAndorPhotonCountingi  ÚAndorEmDacLeveli  ÚAndorFramesi   ÚAndorHorizontalFlipi!  ÚAndorVerticalFlipi"  ÚAndorClockwisei#  ÚAndorCounterClockwisei(  ÚAndorVerticalClockVoltagei)  ÚAndorVerticalShiftSpeedi+  ÚAndorPreAmpSettingi,  ÚAndorCameraSeriali/  ÚAndorActualTemperaturei0  ÚAndorBaselineClampi1  ÚAndorPrescansi2  Ú
AndorModeli3  ÚAndorChipSizeXi4  ÚAndorChipSizeYiP  ÚAndorBaselineOffsetif  ÚAndorSoftwareVersioniFG  ÚRatingiGG  Ú
XP_DIP_XMLiHG  Ú
StitchInfoiIG  ÚRatingPercentiP  ÚResolutionXUnitiP  ÚResolutionYUnitiP  ÚResolutionXLengthUnitiP  ÚResolutionYLengthUnitiP  Ú
PrintFlagsiP  ÚPrintFlagsVersioniP  ÚPrintFlagsCropiP  ÚPrintFlagsBleedWidthi	P  ÚPrintFlagsBleedWidthScalei
P  ÚHalftoneLPIiP  ÚHalftoneLPIUnitiP  ÚHalftoneDegreeiP  ÚHalftoneShapeiP  ÚHalftoneMisciP  ÚHalftoneScreeniP  ÚJPEGQualityiP  ÚGridSizeiP  ÚThumbnailFormatiP  ÚThumbnailWidthiP  ÚThumbnailHeightiP  ÚThumbnailColorDepthiP  ÚThumbnailPlanesiP  ÚThumbnailRawBytesiP  ÚThumbnailSizeiP  ÚThumbnailCompressedSizeiP  ÚColorTransferFunctioniP  ÚThumbnailDatai P  ÚThumbnailImageWidthi!P  ÚThumbnailImageHeighti"P  ÚThumbnailBitsPerSamplei#P  ÚThumbnailCompressioni$P  ÚThumbnailPhotometricInterpi%P  ÚThumbnailImageDescriptioni&P  ÚThumbnailEquipMakei'P  ÚThumbnailEquipModeli(P  ÚThumbnailStripOffsetsi)P  ÚThumbnailOrientationi*P  ÚThumbnailSamplesPerPixeli+P  ÚThumbnailRowsPerStripi,P  ÚThumbnailStripBytesCounti-P  ÚThumbnailResolutionXi.P  ÚThumbnailResolutionYi/P  ÚThumbnailPlanarConfigi0P  ÚThumbnailResolutionUniti1P  ÚThumbnailTransferFunctioni2P  ÚThumbnailSoftwareUsedi3P  ÚThumbnailDateTimei4P  ÚThumbnailArtisti5P  ÚThumbnailWhitePointi6P  ÚThumbnailPrimaryChromaticitiesi7P  ÚThumbnailYCbCrCoefficientsi8P  ÚThumbnailYCbCrSubsamplingi9P  ÚThumbnailYCbCrPositioningi:P  ÚThumbnailRefBlackWhitei;P  ÚThumbnailCopyRightiAP  ÚInteroperabilityIndexiBP  ÚInteroperabilityVersioni�P  ÚLuminanceTablei‘P  ÚChrominanceTablei Q  Ú
FrameDelayiQ  Ú	LoopCountiQ  ÚGlobalPaletteiQ  ÚIndexBackgroundiQ  ÚIndexTransparentiQ  Ú	PixelUnitiQ  ÚPixelPerUnitXiQ  ÚPixelPerUnitYiQ  ÚPaletteHistogrami p  ÚSonyRawFileTypei2p  ÚVignettingCorrParamsi5p  ÚChromaticAberrationCorrParamsi7p  ÚDistortionCorrParamsi€  ÚImageIDi£€  ÚWangTag1i¤€  ÚWangAnnotationi¥€  ÚWangTag3i¦€  ÚWangTag4i¹€  ÚImageReferencePointsiº€  ÚRegionXformTackPointi»€  ÚWarpQuadrilaterali¼€  ÚAffineTransformMatiã€  ÚMatteingiä€  ÚDataTypeiå€  r-  iæ€  r.  i‚  ÚImageFullWidthi‚  ÚImageFullLengthi‚  ÚTextureFormati‚  ÚTextureWrapModesi‚  ÚFieldOfViewCotangenti‚  ÚMatrixWorldToScreeni‚  ÚMatrixWorldToCamerai}‚  ÚModel2i�‚  ÚCFARepeatPatternDimiŽ‚  Ú
CFAPatterni�‚  ÚBatteryLeveli�‚  ÚKodakIFDiš‚  ÚExposureTimei�‚  ÚFNumberi˜‚  Ú	CopyrightrO  rN  i¦‚  ÚMDScalePixeli§‚  ÚMDColorTablei¨‚  Ú	MDLabNamei©‚  ÚMDSampleInfoiª‚  Ú
MDPrepDatei«‚  Ú
MDPrepTimei¬‚  ÚMDFileUnitsiƒ  rH  i5ƒ  ÚAdventScalei6ƒ  ÚAdventRevisioné\ƒ  r#  é]ƒ  r  é^ƒ  r$  é_ƒ  r%  é»ƒ  ÚIPTCNAAiB„  ÚExtendedTagsOffseti~„  ÚIntergraphPacketDatai„  ÚIntergraphFlagRegistersi€„  rF  i�„  ÚINGRReservedi‚„  rJ  éƒ„  Ú
LeicaMagicià„  ÚSiteiá„  ÚColorSequenceiâ„  Ú	IT8Headeriã„  ÚRasterPaddingiä„  ÚBitsPerRunLengthiå„  ÚBitsPerExtendedRunLengthiæ„  Ú
ColorTableiç„  ÚImageColorIndicatoriè„  ÚBackgroundColorIndicatorié„  ÚImageColorValueiê„  ÚBackgroundColorValueië„  ÚPixelIntensityRangeiì„  ÚTransparencyIndicatorií„  ÚColorCharacterizationiî„  ÚHCUsageiï„  ÚTrapIndicatorið„  ÚCMYKEquivalentéF…  rJ  ih…  Ú	AFCP_IPTCi¸…  ÚPixelMagicJBIGOptionsi×…  ÚJPLCartoIFDiJ…  ÚIPLABiØ…  rL  i†  ÚWB_GRGBLevelsi†  ÚLeafDataé9†  r=  é:†  r>  é;†  Ú
MM_UnknowniI†  ÚImageResourceséR†  ÚMM_UserBlockél†  r  éi‡  ÚExifTagis‡  ÚInterColorProfileéx‡  rE  éz‡  rF  i{‡  Ú	FEI_TITANi‡  ÚFXExtensionsi€‡  ÚMultiProfilesi�‡  Ú
SharedDatai‚‡  Ú
T88Optionsi–‡  ÚMarCCDi¬‡  Ú
ImageLayeri¯‡  rA  é°‡  ÚGeoDoubleParamsTagrE  ÚGeoAsciiParamsTagi¾‡  ÚJBIGOptionsiˆ  ÚPIXTIFFi"ˆ  ÚExposureProgrami$ˆ  ÚSpectralSensitivityé%ˆ  ÚGPSTagi'ˆ  ÚISOSpeedRatingsi(ˆ  ÚOECFi)ˆ  Ú	Interlacei*ˆ  ÚTimeZoneOffseti+ˆ  ÚSelfTimerModei0ˆ  ÚSensitivityTypei1ˆ  ÚStandardOutputSensitivityi2ˆ  ÚRecommendedExposureIndexi3ˆ  ÚISOSpeedi4ˆ  ÚISOSpeedLatitudeyyyi5ˆ  ÚISOSpeedLatitudezzzi\ˆ  ÚHylaFAXFaxRecvParamsi]ˆ  ÚHylaFAXFaxSubAddressi^ˆ  ÚHylaFAXFaxRecvTimei_ˆ  ÚFaxDcsiqˆ  ÚFedexEDRiŠˆ  Ú
LeafSubIFDi�ˆ  Ú	Aphelion1i�ˆ  Ú	Aphelion2i‘ˆ  ÚAphelionInternali �  ÚExifVersioni�  ÚDateTimeOriginali�  ÚDateTimeDigitizedi	�  ÚGooglePlusUploadCodei�  Ú
OffsetTimei�  ÚOffsetTimeOriginali�  ÚOffsetTimeDigitizedi‘  ÚComponentsConfigurationi‘  ÚCompressedBitsPerPixeli’  ÚShutterSpeedValuei’  ÚApertureValuei’  ÚBrightnessValuei’  ÚExposureBiasValuei’  ÚMaxApertureValuei’  ÚSubjectDistancei’  ÚMeteringModei’  ÚLightSourcei	’  ÚFlashi
’  ÚFocalLengthi’  ÚFlashEnergy_i’  ÚSpatialFrequencyResponse_i’  ÚNoisei’  ÚFocalPlaneXResolutioni’  ÚFocalPlaneYResolutioni’  ÚFocalPlaneResolutionUniti’  ÚImageNumberi’  ÚSecurityClassificationi’  ÚImageHistoryi’  ÚSubjectLocationi’  ÚExposureIndexi’  ÚTIFFEPStandardIDi’  ÚSensingMethodi:’  ÚCIP3DataFilei;’  Ú	CIP3Sheeti<’  ÚCIP3Sidei?’  ÚStoNitsi|’  Ú	MakerNotei†’  ÚUserCommenti�’  Ú
SubsecTimei‘’  ÚSubsecTimeOriginali’’  ÚSubsecTimeDigitizedi/“  ÚMODITexti0“  ÚMODIOLEPropertySetStoragei1“  ÚMODIPositioningéJ“  rY  iK“  ÚTVIPS1iL“  ÚTVIPS2é\“  ÚImageSourceDatai ”  ÚTemperaturei”  ÚHumidityi”  ÚPressurei”  Ú
WaterDepthi”  ÚAccelerationi”  ÚCameraElevationAngleiAœ  ÚMC_IpWinScalé¤œ  ÚMC_IdOldé   ÚInteroperabilityTagi›œ  ÚXPTitleiœœ  Ú	XPCommenti�œ  ÚXPAuthorižœ  Ú
XPKeywordsiŸœ  Ú	XPSubjecti    ÚFlashpixVersioni   Ú
ColorSpacei   ÚPixelXDimensioni   ÚPixelYDimensioni   ÚRelatedSoundFilei   ÚSamsungRawPointersOffseti   ÚSamsungRawPointersLengthi¡  ÚSamsungRawByteOrderi¡  ÚSamsungRawUnknowni¢  ÚFlashEnergyi¢  ÚSpatialFrequencyResponsei¢  ÚNoise_i¢  ÚFocalPlaneXResolution_i¢  ÚFocalPlaneYResolution_i¢  ÚFocalPlaneResolutionUnit_i¢  ÚImageNumber_i¢  ÚSecurityClassification_i¢  ÚImageHistory_i¢  ÚSubjectLocation_i¢  zExposureIndex_ i¢  zTIFF-EPStandardIDi¢  ÚSensingMethod_i £  Ú
FileSourcei£  Ú	SceneTypei£  ÚCFAPattern_i¤  ÚCustomRenderedi¤  ÚExposureModei¤  ÚWhiteBalancei¤  ÚDigitalZoomRatioi¤  ÚFocalLengthIn35mmFilmi¤  ÚSceneCaptureTypei¤  ÚGainControli¤  ÚContrasti	¤  Ú
Saturationi
¤  Ú	Sharpnessi¤  ÚDeviceSettingDescriptioni¤  ÚSubjectDistanceRangei ¤  ÚImageUniqueIDi0¤  ÚCameraOwnerNamei1¤  ÚBodySerialNumberi2¤  ÚLensSpecificationi3¤  ÚLensMakei4¤  Ú	LensModeli5¤  ÚLensSerialNumberi€¤  ÚGDAL_METADATAi�¤  ÚGDAL_NODATAi ¥  ÚGammaé2©  rB  iÀ¯  ÚExpandSoftwareiÁ¯  Ú
ExpandLensiÂ¯  Ú
ExpandFilmiÃ¯  ÚExpandFilterLensiÄ¯  ÚExpandScanneriÅ¯  ÚExpandFlashLampi¼  ÚPixelFormati¼  ÚTransformationi¼  ÚUncompressedi¼  Ú	ImageTypei€¼  ÚImageWidth_i�¼  ÚImageHeight_i‚¼  ÚWidthResolutioniƒ¼  ÚHeightResolutioniÀ¼  ÚImageOffsetiÁ¼  ÚImageByteCountiÂ¼  ÚAlphaOffsetiÃ¼  ÚAlphaByteCountiÄ¼  ÚImageDataDiscardiÅ¼  ÚAlphaDataDiscardi'Ä  ÚOceScanjobDescriptioni(Ä  ÚOceApplicationSelectori)Ä  ÚOceIdentificationNumberi*Ä  ÚOceImageLogicCharacteristicsiOÄ  ÚAnnotationsépÄ  r‡  iqÄ  ÚMC_XYPositionirÄ  ÚMC_ZPositionisÄ  ÚMC_XYCalibrationitÄ  ÚMC_LensCharacteristicsiuÄ  ÚMC_ChannelNameivÄ  ÚMC_ExcitationWavelengthiwÄ  ÚMC_TimeStampéxÄ  ÚMC_FramePropertiesi¥Ä  ÚPrintImageMatchingi?Å  ÚPCO_RAWisÅ  ÚOriginalFileNamei€Å  ÚUSPTO_OriginalContentTypei�Å  ÚUSPTO_RotationCodeiàÅ  ÚCR2CFAPatternrá   Ú
DNGVersioniÆ  ÚDNGBackwardVersioniÆ  ÚUniqueCameraModeliÆ  ÚLocalizedCameraModeliÆ  ÚCFAPlaneColoriÆ  Ú	CFALayoutiÆ  ÚLinearizationTableiÆ  ÚBlackLevelRepeatDimiÆ  Ú
BlackLeveliÆ  ÚBlackLevelDeltaHiÆ  ÚBlackLevelDeltaViÆ  Ú
WhiteLeveliÆ  ÚDefaultScaleiÆ  ÚDefaultCropOrigini Æ  ÚDefaultCropSizei!Æ  ÚColorMatrix1i"Æ  ÚColorMatrix2i#Æ  ÚCameraCalibration1i$Æ  ÚCameraCalibration2i%Æ  ÚReductionMatrix1i&Æ  ÚReductionMatrix2i'Æ  ÚAnalogBalancei(Æ  ÚAsShotNeutrali)Æ  ÚAsShotWhiteXYi*Æ  ÚBaselineExposurei+Æ  ÚBaselineNoisei,Æ  ÚBaselineSharpnessi-Æ  ÚBayerGreenSpliti.Æ  ÚLinearResponseLimiti/Æ  ÚCameraSerialNumberi0Æ  ÚLensInfoi1Æ  ÚChromaBlurRadiusi2Æ  ÚAntiAliasStrengthi3Æ  ÚShadowScalei4Æ  ÚDNGPrivateDatai5Æ  ÚMakerNoteSafetyi@Æ  ÚRawImageSegmentationiZÆ  ÚCalibrationIlluminant1i[Æ  ÚCalibrationIlluminant2i\Æ  ÚBestQualityScalei]Æ  ÚRawDataUniqueIDi`Æ  ÚAliasLayerMetadatai‹Æ  ÚOriginalRawFileNameiŒÆ  ÚOriginalRawFileDatai�Æ  Ú
ActiveAreaiŽÆ  ÚMaskedAreasi�Æ  ÚAsShotICCProfilei�Æ  ÚAsShotPreProfileMatrixi‘Æ  ÚCurrentICCProfilei’Æ  ÚCurrentPreProfileMatrixé–Æ  r¦  é—Æ  r9  iœÆ  rP  i¿Æ  ÚColorimetricReferenceiÅÆ  ÚSRawTypeiÒÆ  ÚPanasonicTitleiÓÆ  ÚPanasonicTitle2ióÆ  ÚCameraCalibrationSignatureiôÆ  ÚProfileCalibrationSignatureiõÆ  Ú
ProfileIFDiöÆ  ÚAsShotProfileNamei÷Æ  ÚNoiseReductionAppliediøÆ  ÚProfileNameiùÆ  ÚProfileHueSatMapDimsiúÆ  ÚProfileHueSatMapData1iûÆ  ÚProfileHueSatMapData2iüÆ  ÚProfileToneCurveiýÆ  ÚProfileEmbedPolicyiþÆ  ÚProfileCopyrightiÇ  ÚForwardMatrix1iÇ  ÚForwardMatrix2iÇ  ÚPreviewApplicationNameiÇ  ÚPreviewApplicationVersioniÇ  ÚPreviewSettingsNameiÇ  ÚPreviewSettingsDigestiÇ  ÚPreviewColorSpaceiÇ  ÚPreviewDateTimeiÇ  ÚRawImageDigestiÇ  ÚOriginalRawFileDigestiÇ  ÚSubTileBlockSizeiÇ  ÚRowInterleaveFactori%Ç  ÚProfileLookTableDimsi&Ç  ÚProfileLookTableDatai@Ç  ÚOpcodeList1iAÇ  ÚOpcodeList2iNÇ  ÚOpcodeList3iOÇ  Ú	FibicsXMLiaÇ  ÚNoiseProfileicÇ  Ú	TimeCodesidÇ  Ú	FrameRateirÇ  ÚTStopi‰Ç  ÚReelNamei‘Ç  ÚOriginalDefaultFinalSizei’Ç  ÚOriginalBestQualitySizei“Ç  ÚOriginalDefaultCropSizei¡Ç  ÚCameraLabeli£Ç  ÚProfileHueSatMapEncodingi¤Ç  ÚProfileLookTableEncodingi¥Ç  ÚBaselineExposureOffseti¦Ç  ÚDefaultBlackRenderi§Ç  ÚNewRawImageDigesti¨Ç  ÚRawToPreviewGainiµÇ  ÚDefaultUserCropre  ÚPaddingÚOffsetSchemaÚFlexXMLÚ	PerSample)é³Ç  iê  iê  i°þ  i  r   r   r"   r    rP  z	TIFF.TAGS�  s™$  € ðk	
ØÐ$ðk	
àÐ!ðk	
ð �ðk	
ð �ð	k	
ð
 �ðk	
ð �ðk	
ð �ðk	
ð Ð,ðk	
ð �ðk	
ð �ðk	
ð �ðk	
ð �ðk	
ð �ðk	
ð Ð#ðk	
ð �ðk	
ð  �ð!k	
ð" �ð#k	
ð k	
ð$ �ð%k	
ð& Ð"ð'k	
ð( �ð)k	
ð* Ð"ð+k	
ð, Ð!ð-k	
ð. Ð!ð/k	
ð0 �ð1k	
ð2 �ð3k	
ð4 Ð&ð5k	
ð6 �ð7k	
ð8 �ð9k	
ð: �ð;k	
ð< �ð=k	
ð> Ð!ð?k	
ð@ Ð#ðAk	
ðB Ð$ðCk	
ðD �ðEk	
ð k	
ð k	
ðF �ðGk	
ðH Ð!ðIk	
ðJ �ðKk	
ðL Ð$ðMk	
ðN Ð#ðOk	
ðP �ðQk	
ðR �ðSk	
ðT �ðUk	
ðV �ðWk	
ðX �ðYk	
ðZ �ð[k	
ð\ Ð(ð]k	
ð^ �ð_k	
ð` �ðak	
ðb �ðck	
ðd �ðek	
ðf �ðgk	
ð k	
ð k	
ðh Ð!ðik	
ðj �ðkk	
ðl �ðmk	
ðn Ð)ðok	
ðp �ðqk	
ðr �ðsk	
ðt �ðuk	
ðv �ðwk	
ðx �ðyk	
ðz �ð{k	
ð| �ð}k	
ð~ �ðk	
ð@ Ð"ðAk	
ðB Ð"ðCk	
ðD �ðEk	
ðF �ðGk	
ðH Ð!ðIk	
ð k	
ð k	
ðJ Ð!ðKk	
ðL �ðMk	
ðN �ðOk	
ðP �ðQk	
ðR Ð&ðSk	
ðT �ðUk	
ðV �ðWk	
ðX �ðYk	
ðZ �ð[k	
ð\ �ð]k	
ð^ �ð_k	
ð` Ð$ðak	
ðb �ðck	
ðd �ðek	
ðf �ðgk	
ðh Ð(ðik	
ðj Ð.ðkk	
ð k	
ð k	
ðl Ð&ðmk	
ðn Ð)ðok	
ðp Ð&ðqk	
ðr �ðsk	
ðt �ðuk	
ðv �ðwk	
ðx Ð$ðyk	
ðz Ð#ð{k	
ð| Ð#ð}k	
ð~ Ð&ðk	
ð@ Ð!ðAk	
ðB �ðCk	
ðD �ðEk	
ðF Ð'ðGk	
ðH Ð&ðIk	
ðJ �ðKk	
ðL Ð&ðMk	
ð k	
ð k	
ðN �)ðOk	
ðP Ð$ðQk	
ðR Ð%ðSk	
ðT Ð)ðUk	
ðV Ð&ðWk	
ðX Ð-ðYk	
ðZ Ð$ð[k	
ð\ Ð'ð]k	
ð^ Ð#ð_k	
ð` �-ðak	
ðb Ð'ðck	
ðd Ð%ðek	
ðf Ð"ðgk	
ðh Ð)ðik	
ðj Ð-ðkk	
ðl Ð+ðmk	
ðn Ð&ðok	
ð k	
ð k	
ðp Ð%ðqk	
ðr Ð*ðsk	
ðt Ð&ðuk	
ðv �/ðwk	
ðx �,ðyk	
ðz Ð"ð{k	
ð| Ð"ð}k	
ð~ Ð'ðk	
ð@ Ñ(ðAk	
ñB ‘8ðCk	
ñD ‘<ðEk	
ñF ‘<ðGk	
ñH ‘?ðIk	
ñJ Ñ$ðKk	
ñL Ñ$ðMk	
ñN Ñ*ðOk	
ñP Ñ*ðQk	
ð k	
ð k	
ñR ‘<ðSk	
ñT Ñ&ðUk	
ñV Ñ#ðWk	
ñX Ñ)ðYk	
ñZ Ñ.ð[k	
ñ\ ‘=ð]k	
ñ^ Ñ$ð_k	
ñ` Ñ#ðak	
ñb ‘?ðck	
ñd ‘>ðek	
ñf Ñ#ðgk	
ñh ‘=ðik	
ñj ‘:ðkk	
ñl Ñ$ðmk	
ñn Ñ#ðok	
ñp Ñ$ðqk	
ñr Ñ(ðsk	
ð k	
ð k	
ñt Ñ$ðuk	
ñv Ñ&ðwk	
ñx ‘?ðyk	
ñz Ñ,ð{k	
ñ| Ñ*ð}k	
ñ~ ‘?ðk	
ñ@ Ñ(ðAk	
ñB Ñ)ðCk	
ñD Ñ+ðEk	
ñF Ñ)ðGk	
ñH Ñ/ðIk	
ñJ Ñ.ðKk	
ñL Ñ'ðMk	
ñN Ñ(ðOk	
ñP Ñ*ðQk	
ñR Ñ)ðSk	
ñT Ñ-ðUk	
ð k	
ð k	
ñV Ñ*ðWk	
ñX Ñ-ðYk	
ñZ Ñ)ð[k	
ñ\ Ñ)ð]k	
ñ^ Ñ*ð_k	
ñ` Ñ,ðak	
ñb Ñ.ðck	
ñd Ñ*ðek	
ñf Ñ&ðgk	
ñh Ñ$ðik	
ñj Ñ(ðkk	
ñl Ñ3ðmk	
ñn Ñ/ðok	
ñp Ñ.ðqk	
ñr Ñ.ðsk	
ñt Ñ+ðuk	
ñv Ñ'ðwk	
ð k	
ð k	
ñx Ñ*ðyk	
ñz Ñ,ð{k	
ñ| Ñ#ð}k	
ñ~ Ñ%ðk	
ñ@ ‘<ðAk	
ñB ‘;ðCk	
ñD ‘?ðEk	
ñF Ñ$ðGk	
ñH Ñ%ðIk	
ñJ ‘;ðKk	
ñL ‘?ðMk	
ñN ‘?ðOk	
ñP Ñ%ðQk	
ñR Ñ$ðSk	
ñT Ñ)ðUk	
ñV Ñ2ðWk	
ñX Ñ)ðYk	
ð k	
ð k	
ñ\ ‘9ð]k	
ñ^ ‘:ð_k	
ñ` Ñ#ðak	
ñb ‘:ðck	
ñd ‘:ðek	
ñf Ñ)ðgk	
ñh Ñ)ðik	
ñj Ñ&ðkk	
ñl Ñ'ðmk	
ñn ‘:ðok	
ñp ‘:ðqk	
ñr ‘<ðsk	
ñt ‘;ðuk	
ñv Ñ#ðwk	
ñx Ñ$ðyk	
ñz ‘?ð{k	
ñ| Ñ%ð}k	
ð k	
ð k	
ñ~ Ñ)ðk	
ñ@ Ñ(ðAk	
ñB Ñ(ðCk	
ñD ‘8ðEk	
ñF Ñ(ðGk	
ñH ‘<ðIk	
ñJ ‘>ðKk	
ñL ‘:ðMk	
ñN ‘>ðOk	
ñP ‘9ðQk	
ñR ‘;ðSk	
ñT ‘;ðUk	
ñV ‘>ðWk	
ñX ‘>ðYk	
ñZ ‘;ð[k	
ñ\ ‘>ð]k	
ñ^ ‘<ð_k	
ð k	
ð k	
ñ` ‘<ðak	
ñb ‘=ðck	
ñd Ñ'ðek	
ñf ‘=ðgk	
ñh Ñ#ðik	
ñj ‘9ðkk	
ñl ‘9ðmk	
ñn ‘9ðok	
ñp ‘9ðqk	
ñr ‘9ðsk	
ñt Ñ'ðuk	
ñv Ñ)ðwk	
ñx Ñ,ðyk	
ñz Ñ(ð{k	
ñ| ‘>ð}k	
ñ~ Ñ%ðk	
ñ@ ‘<ðAk	
ð k	
ð k	
ñB ‘6ðCk	
ñD ‘?ðEk	
ñF ‘;ðGk	
ñH ‘?ðIk	
ñJ Ñ%ðKk	
ñL Ñ-ðMk	
ñN ‘<ðOk	
ñP Ñ(ðQk	
ñR Ñ-ðSk	
ñT Ñ$ðUk	
ñV Ñ)ðWk	
ñX Ñ(ðYk	
ñZ Ñ*ð[k	
ñ\ Ñ*ð]k	
ñ^ ‘9ð_k	
ñ` ‘?ðak	
ñb Ñ#ðck	
ð k	
ð k	
ñd ‘8ðek	
ñf ‘;ðgk	
ñh Ñ*ðik	
ñj ‘=ðkk	
ñl ‘7ðmk	
ñn Ñ+ðok	
ñp ‘?ðqk	
ñr ‘:ðsk	
ñt ‘;ðuk	
ñv ‘:ðwk	
ñx ‘<ðyk	
ñz Ñ#ð{k	
ñ| ‘>ð}k	
ñ~ ‘<ðk	
ñ@	 ‘9ðA	k	
ñB	 Ñ&ðC	k	
ñD	 ‘:ðE	k	
ð k	
ð k	
ñF	 ‘<ðG	k	
ñH	 ‘;ðI	k	
ñJ	 ‘>ðK	k	
ñL	 ‘?ðM	k	
ñN	 ‘<ðO	k	
ñP	 ‘<ðQ	k	
ñR	 ‘8ðS	k	
ñT	 ‘<ðU	k	
ñV	 Ñ'ðW	k	
ñX	 Ñ'ðY	k	
ñZ	 Ñ&ð[	k	
ñ\	 ‘=ð]	k	
ñ^	 ‘9ð_	k	
ñ`	 Ñ$ða	k	
ñb	 Ñ(ðc	k	
ñd	 ‘8ðe	k	
ñf	 Ñ$ðg	k	
ð k	
ð k	
ñh	 ‘6ði	k	
ñj	 ‘;ðk	k	
ñl	 Ñ#ðm	k	
ñn	 ‘?ðo	k	
ñp	 Ñ$ðq	k	
ñr	 Ñ.ðs	k	
ñt	 Ñ-ðu	k	
ñv	 ‘:ðw	k	
ñx	 Ñ(ðy	k	
ñz	 Ñ(ð{	k	
ñ|	 Ñ)ð}	k	
ñ~	 Ñ)ð	k	
ñ@
 Ñ'ðA
k	
ñB
 ‘8ðC
k	
ñD
 ‘:ðE
k	
ñF
 ‘<ðG
k	
ñH
 ‘;ðI
k	
ð k	
ð k	
ñJ
 ‘;ðK
k	
ñL
 Ñ%ðM
k	
ñN
 ‘=ðO
k	
ñP
 Ñ%ðQ
k	
ñR
 Ñ&ðS
k	
ñT
 Ñ)ðU
k	
ñV
 ‘<ðW
k	
ñX
 Ñ'ðY
k	
ñZ
 Ñ(ð[
k	
ñ|
 Ñ,ð}
k	
ñ~
 Ñ+ð
k	
ñ@ Ñ&ðAk	
ñB ‘?ðCk	
ñD Ñ$ðEk	
ñF Ñ&ðGk	
ñH Ñ%ðIk	
ñJ Ñ$ðKk	
ð k	
ð k	
ñL ‘>ðMk	
ñN ‘=ðOk	
ñP ‘7ðQk	
ñR ‘=ðSk	
ñT ‘>ðUk	
ñV Ñ.ðWk	
ñX ‘7ðYk	
ñZ Ñ*ð[k	
ñ\ Ñ*ð]k	
ñ^ Ñ-ð_k	
ñ` ‘=ðak	
ñb Ñ+ðck	
ñd ‘>ðek	
ñf Ñ$ðgk	
ñh ‘?ðik	
ñj Ñ%ðkk	
ñl ‘?ðmk	
ð k	
ð k	
ñn ‘>ðok	
ñp ‘;ðqk	
ñr ‘:ðsk	
ñt ‘9ðuk	
ñv ‘;ðwk	
ñx ‘=ðyk	
ñz ‘<ð{k	
ñ| Ñ'ð}k	
ñ~ Ñ(ðk	
ñ@ ‘:ðAk	
ñB Ñ.ðCk	
ñD Ñ$ðEk	
ñF ‘7ðGk	
ñH ‘8ðIk	
ñJ ‘8ðKk	
ñL Ñ$ðMk	
ñN ‘=ðOk	
ð k	
ð k	
ñP ‘:ðQk	
ñR ‘:ðSk	
ñT ‘<ðUk	
ñV ‘>ðWk	
ñX Ñ)ðYk	
ñZ ‘>ð[k	
ñ\ ‘:ð]k	
ñ^ Ñ(ð_k	
ñ` ‘9ðak	
ñb ‘;ðck	
ñd ‘:ðek	
ñf ‘<ðgk	
ñh ‘;ðik	
ñj Ñ$ðkk	
ñl ‘<ðmk	
ñn Ñ$ðok	
ñp Ñ$ðqk	
ð k	
ð k	
ñr Ñ%ðsk	
ñt Ñ-ðuk	
ñv Ñ-ðwk	
ñx Ñ(ðyk	
ñz Ñ&ð{k	
ñ| ‘=ð}k	
ñ~ Ñ-ðk	
ñ@ ‘8ðAk	
ñB Ñ+ðCk	
ñD Ñ+ðEk	
ñF Ñ.ðGk	
ñH ‘>ðIk	
ñJ Ñ,ðKk	
ñL ‘?ðMk	
ñN Ñ%ðOk	
ñP Ñ$ðQk	
ñR Ñ&ðSk	
ð k	
ð k	
ñT Ñ#ðUk	
ñV ‘<ðWk	
ñX ‘;ðYk	
ñZ ‘=ð[k	
ñ\ Ñ#ð]k	
ñ^ ‘>ð_k	
ñ` ‘>ðak	
ñb Ñ%ðck	
ñd Ñ*ðek	
ñf Ñ%ðgk	
ñh ‘=ðik	
ñj ‘:ðkk	
ñl ‘<ðmk	
ñn ‘;ðok	
ñp Ñ-ðqk	
ñr Ñ)ðsk	
ñt ‘?ðuk	
ð k	
ð k	
ñv Ñ$ðwk	
ñx Ñ%ðyk	
ñz Ñ&ð{k	
ñ| ‘:ð}k	
ñ~ ‘;ðk	
ñ@ Ñ%ðAk	
ñB ‘?ðCk	
ñD ‘=ðEk	
ñF ‘7ðGk	
ñH Ñ#ðIk	
ñJ Ñ#ðKk	
ñL ‘<ðMk	
ñN ‘<ðOk	
ñP Ñ%ðQk	
ñR ‘?ðSk	
ñT Ñ$ðUk	
ñV ‘=ðWk	
ð k	
ð k	
ñX Ñ#ðYk	
ñZ ‘>ð[k	
ñ\ ‘;ð]k	
ñ^ ‘=ð_k	
ñ` ‘>ðak	
ñb Ñ$ðck	
ñd Ñ%ðek	
ñf ‘=ðgk	
ñh Ñ#ðik	
ñj ‘=ðkk	
ñl Ñ#ðmk	
ñn Ñ%ðok	
ñp Ñ%ðqk	
ñr Ñ*ðsk	
ñt Ñ+ðuk	
ñv Ñ,ðwk	
ñx Ñ1ðyk	
ð k	
ð k	
ñz ‘=ð{k	
ñ| ‘7ð}k	
ñ~ ‘?ðk	
ñ@ ‘>ðAk	
ñB Ñ%ðCk	
ñD Ñ+ðEk	
ñF Ñ#ðGk	
ñH Ñ,ðIk	
ñJ ‘>ðKk	
ñL Ñ'ðMk	
ñN Ñ'ðOk	
ñP ‘9ðQk	
ñR Ñ%ðSk	
ñT Ñ.ðUk	
ñV Ñ'ðWk	
ñX ‘?ðYk	
ñZ ‘<ð[k	
ð k	
ð k	
ñ\ Ñ'ð]k	
ñ^ Ñ&ð_k	
ñ` Ñ)ðak	
ñb ‘?ðck	
ñd ‘;ðek	
ñf Ñ'ðgk	
ñh Ñ(ðik	
ñj ‘<ðkk	
ñl Ñ%ðmk	
ñn Ñ%ðok	
ñp ‘<ðqk	
ñr ‘>ðsk	
ñt Ñ&ðuk	
ñv Ñ$ðwk	
ñx ‘>ðyk	
ñz ‘>ð{k	
ñ| Ñ'ð}k	
ð k	
ð k	
ñ~ Ñ'ðk	
ñ@ Ñ%ðAk	
ñB Ñ%ðCk	
ñD ‘?ðEk	
ñF ‘?ðGk	
ñH ‘?ðIk	
ñJ Ñ%ðKk	
ñL ‘?ðMk	
ñN Ñ&ðOk	
ñP Ñ$ðQk	
ñR Ñ(ðSk	
ñT Ñ'ðUk	
ñV ‘:ðWk	
ñX Ñ%ðYk	
ñZ Ñ&ð[k	
ñ\ ‘=ð]k	
ñ^ Ñ#ð_k	
ð k	
ð k	
ñ` Ñ$ðak	
ñb Ñ)ðck	
ñd Ñ+ðek	
ñf Ñ+ðgk	
ñh Ñ%ðik	
ñj Ñ$ðkk	
ñl Ñ'ðmk	
ñn Ñ(ðok	
ñp Ñ(ðqk	
ñr ‘<ðsk	
ñt ‘=ðuk	
ñv Ñ%ðwk	
ñx Ñ+ðyk	
ñz Ñ&ð{k	
ñ| Ñ,ð}k	
ñ~ Ñ)ðk	
ñ@ ‘<ðAk	
ð k	
ð k	
ñB Ñ&ðCk	
ñD Ñ*ðEk	
ñF ‘:ðGk	
ñH Ñ#ðIk	
ñJ Ñ$ðKk	
ñL Ñ/ðMk	
ñN Ñ0ðOk	
ñP ‘<ðQk	
ñR Ñ&ðSk	
ñT Ñ*ðUk	
ñV ‘=ðWk	
ñX Ñ)ðYk	
ñZ Ñ*ð[k	
ñ\ Ñ*ð]k	
ñ^ Ñ%ð_k	
ñ` Ñ'ðak	
ñb Ñ%ðck	
ð k	
ð k	
ñd Ñ#ðek	
ñf Ñ#ðgk	
ñh Ñ+ðik	
ñj Ñ.ðkk	
ñl Ñ(ðmk	
ñn Ñ*ðok	
ñp Ñ&ðqk	
ñr Ñ$ðsk	
ñt Ñ#ðuk	
ñv Ñ*ðwk	
ñx Ñ%ðyk	
ñz Ñ(ð{k	
ñ| Ñ)ð}k	
ñ~ Ñ)ðk	
ñ@ ‘=ðAk	
ñB ‘=ðCk	
ñD ‘=ðEk	
ð k	
ð k	
ñF ‘;ðGk	
ñH ‘>ðIk	
ñJ ‘;ðKk	
ñL ‘;ðMk	
ñN ‘7ðOk	
ñP ‘:ðQk	
ñR Ñ-ðSk	
ñT Ñ,ðUk	
ñV Ñ,ðWk	
ñX ‘=ðYk	
ñZ Ñ-ð[k	
ñ\ Ñ-ð]k	
ñ^ Ñ+ð_k	
ñ` Ñ'ðak	
ñb Ñ&ðck	
ñd Ñ%ðek	
ñf Ñ$ðgk	
ð k	
ñh *ÙÙ!ñ& ÙñUk	
ð k	
ð k	
ð k		
r"   c                  óR   — d„ t           j                             ¦   «         D ¦   «         S )Nc                 ó   — i | ]\  }}||“Œ	S r   r   )r   r1  r©  s      r    ú
<dictcomp>z"TIFF.TAG_NAMES.<locals>.<dictcomp>  s   € Ð3Ð3Ð3™˜˜A��1Ð3Ð3Ð3r"   )rO   rP  rä  r   r"   r    rý   zTIFF.TAG_NAMES  s"   € Ø3Ð3¥¤§¢Ñ!2Ô!2Ð3Ñ3Ô3Ð3r"   c                  óˆ  — i dt           “dt          “dt          “dt          “dt          “dt
          “dt          “dt          “d	t          “d
t          “dt          “dt          “dt          “dt          “dt          “dt          “dt          “t          t          t          t          t          t          t          t           t"          dœ	¥S )Nr‘  rQ  rM  rN  rO  rP  rj  rq  rr  rs  rv  rx  r|  r}  rÎ  rÑ  rW  )	r  rÚ  r*  r2  rm  r¤  ry  rŒ  rÜ  )Úread_colormaprÓ  r¿  Úread_uic2tagÚread_uic3tagÚread_uic4tagÚread_cz_semÚread_mm_headerÚread_mm_stamprÔ  Úread_cz_lsminfoÚread_fei_metadataÚread_tvips_headerÚread_nih_image_headerÚ	read_jsonÚread_exif_ifdÚread_gps_ifdÚread_interoperability_ifdr   r"   r    rÒ  zTIFF.TAG_READERS  s  € ð
Ø•ð
ð •:ð	
ð •<ð
ð •<ð
ð •<ð
ð •<ð
ð •;ð
ð •>ð
ð •=ð
ð •:ð
ð •:ð
ð •?ð
ð  Õ$ð!
ð" Õ$ð#
ð$ Õ$ð%
ð& •:ð'
ð( •:ð)
õ* )åÝÝÝÝÝ ÝÝ,ð=
ð 
ð 
ð 	
r"   c                  ó    — t          d¦  «        S )N)r³  r´  rµ  r¶  rº  r»  r…  )Ú	frozensetr   r"   r    rÕ  zTIFF.TAG_TUPLE2  s   € åÐ>Ñ?Ô?Ð?r"   c                  óx   — i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“d#d$d%d&œ¥S )'Nr)  rÂ  r*  rÀ  r7  r<  r'  rð  r6  rx  rt  rä  r3  rw  r4  r}  r#  r~  ÚImageDescription1r€  r5  r”  r?  r{  r%  r�  r(  r|  r+  rç  r,  rè  r8  r•  rš  r½  ré  )r2  r-  r.  r   r   r"   r    r¸  zTIFF.TAG_ATTRIBUTES6  sï   € ð
Ø˜,ð
à˜=ð
ð ˜_ð
ð ˜=ð	
ð
 " >ð
ð ˜ð
ð (¨ð
ð ˜
ð
ð  ð
ð   ð
ð Ð0ð
ð ˜Nð
ð ˜
ð
ð ˜ð
ð ˜ð
ð  ˜,ð!
ð" ˜Nð#
ð$ +Ø&Ø$ð)
ð 
ð 
ð 	
r"   c                  ó&  — t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j	        t           j
        t           j        t           j        t           j        dœS )N)rÿ  rm  rn  ro  rs  rx  r|  r‚  r‡  r‰  rŽ  rœ  r�  )rO   Ú	OFILETYPEr^  rT  Ú
THRESHHOLDÚ	FILLORDERÚORIENTATIONrY  ÚGRAYRESPONSEUNITrm  ÚCOLORRESPONSEUNITÚ	PREDICTORr  r'  r   r"   r    rÙ  zTIFF.TAG_ENUMO  s^   € õ ”ÝÔ!ÝÔ!Ý”Ý”ÝÔ!ÝÔ"ÝÔ&õ ”ÝÔ'Ý”ÝÔ!ÝÔ"ð!
ð 
ð 	
r"   c                  ó6   —  G d„ dt           j        ¦  «        } | S )Nc                   ó   — e Zd ZdZdZdZdZdS )úTIFF.FILETYPE.<locals>.FILETYPEr   r&   r‘   rŒ   N)rh   rp   rq   Ú	UNDEFINEDÚREDUCEDIMAGEÚPAGEÚMASKr   r"   r    ÚFILETYPErÆ  f  s"   € € € € € àˆIØˆLØˆDØˆDˆDˆDr"   rË  )ÚenumÚIntFlag)rË  s    r    rË  zTIFF.FILETYPEe  s5   € ð	ð 	ð 	ð 	ð 	•t”|ñ 	ô 	ð 	ð ˆr"   c                  ó6   —  G d„ dt           j        ¦  «        } | S )Nc                   ó   — e Zd ZdZdZdZdZdS )ú!TIFF.OFILETYPE.<locals>.OFILETYPEr   r&   r‘   rÊ   N)rh   rp   rq   rÇ  ÚIMAGErÈ  rÉ  r   r"   r    r½  rÐ  p  s"   € € € € € ØˆIØˆEØˆLØˆDˆDˆDr"   r½  ©rÌ  ÚIntEnum)r½  s    r    r½  zTIFF.OFILETYPEo  s6   € ð	ð 	ð 	ð 	ð 	�œñ 	ô 	ð 	ð Ðr"   c                  ó6   —  G d„ dt           j        ¦  «        } | S )Nc                   óÊ   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZd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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)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0S )1ú%TIFF.COMPRESSION.<locals>.COMPRESSIONr&   r‘   rÊ   rŒ   rå   ræ   rË  rˆ   rÄ   r\  éc   rn  iþ  iÿ  i€  i€  i€  i€  é€  i)€  i€  i€€  i�€  i‚€  iŒ€  i�€  é²€  i³€  ië€  ií€  ie‡  it‡  iu‡  i˜‡  i™‡  i›‡  iž‡  iŸ‡  i ‡  éLˆ  émˆ  énˆ  iuˆ  ivˆ  i]Ã  r7  iÿÿ  N)2rh   rp   rq   ÚNONEÚCCITTRLEÚCCITT_T4ÚCCITT_T6ÚLZWÚOJPEGÚJPEGrÃ   ÚJBIG_BWÚ
JBIG_COLORÚJPEG_99Ú	KODAK_262ÚNEXTÚSONY_ARWÚ
PACKED_RAWÚSAMSUNG_SRWÚCCIRLEWÚSAMSUNG_SRW2ÚPACKBITSÚTHUNDERSCANÚIT8CTPADÚIT8LWÚIT8MPÚIT8BLÚ	PIXARFILMÚPIXARLOGÚDEFLATEÚDCSÚAPERIO_JP2000_YCBCÚAPERIO_JP2000_RGBÚJBIGÚSGILOGÚSGILOG24ÚJPEG2000Ú	NIKON_NEFÚJBIG2Ú
MDI_BINARYÚMDI_PROGRESSIVEÚ
MDI_VECTORÚ
JPEG_LOSSYrÅ   rÆ   ÚOPS_PNGÚ
OPS_JPEGXRr‰  Ú	KODAK_DCRÚ
PENTAX_PEFr   r"   r    r^  rÖ  y  sû   € € € € € ØˆDØˆHØˆHØˆHØˆCØˆEØˆDØˆMØˆGØˆJØˆGØˆIØˆDØˆHØˆJØˆKØˆGØ ˆLØˆHØˆKØˆHØˆEØˆEØˆEØˆIØˆHØˆGØˆCØ!&ÐØ %ÐØˆDØˆFØˆHØˆHØˆIØˆEØˆJØ#ˆOØˆJØˆJØˆDØˆDØˆGØˆJØˆGØˆIØˆJˆJˆJr"   r^  rÒ  )r^  s    r    r^  zTIFF.COMPRESSIONx  s7   € ð/	ð /	ð /	ð /	ð /	�$œ,ñ /	ô /	ð /	ðd Ðr"   c                  ó6   —  G d„ dt           j        ¦  «        } | S )Nc                   óF   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdS )ú%TIFF.PHOTOMETRIC.<locals>.PHOTOMETRICr   r&   r‘   rÊ   rŒ   rå   ræ   rˆ   rÄ   r\  i#€  iL€  iM€  rÚ  N)rh   rp   rq   rc  rU  rV  rX  rÊ  r  ÚYCBCRÚCIELABÚICCLABÚITULABrW  ÚLOGLÚLOGLUVÚ
LINEAR_RAWr   r"   r    rT  r
  ®  sT   € € € € € ØˆJØˆJØˆCØˆGØˆDØˆIØˆEØˆFØˆFØˆFØˆCØˆDØˆFØˆJˆJˆJr"   rT  rÒ  )rT  s    r    rT  zTIFF.PHOTOMETRIC­  s6   € ð	ð 	ð 	ð 	ð 	�$œ,ñ 	ô 	ð 	ð  Ðr"   c                  ó6   —  G d„ dt           j        ¦  «        } | S )Nc                   ó   — e Zd ZdZdZdZdS )ú#TIFF.THRESHHOLD.<locals>.THRESHHOLDr&   r‘   rÊ   N)rh   rp   rq   ÚBILEVELÚHALFTONEÚERRORDIFFUSEr   r"   r    r¾  r  Á  s   € € € € € ØˆGØˆHØˆLˆLˆLr"   r¾  rÒ  )r¾  s    r    r¾  zTIFF.THRESHHOLDÀ  s6   € ð	ð 	ð 	ð 	ð 	�œñ 	ô 	ð 	ð
 Ðr"   c                  ó6   —  G d„ dt           j        ¦  «        } | S )Nc                   ó   — e Zd ZdZdZdS )ú!TIFF.FILLORDER.<locals>.FILLORDERr&   r‘   N)rh   rp   rq   ÚMSB2LSBÚLSB2MSBr   r"   r    r¿  r  É  s   € € € € € ØˆGØˆGˆGˆGr"   r¿  rÒ  )r¿  s    r    r¿  zTIFF.FILLORDERÈ  s6   € ð	ð 	ð 	ð 	ð 	�œñ 	ô 	ð 	ð Ðr"   c                  ó6   —  G d„ dt           j        ¦  «        } | S )Nc                   ó.   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
ú%TIFF.ORIENTATION.<locals>.ORIENTATIONr&   r‘   rÊ   rŒ   rå   ræ   rË  rˆ   N)rh   rp   rq   ÚTOPLEFTÚTOPRIGHTÚBOTRIGHTÚBOTLEFTÚLEFTTOPÚRIGHTTOPÚRIGHTBOTÚLEFTBOTr   r"   r    rÀ  r  Ð  s6   € € € € € ØˆGØˆHØˆHØˆGØˆGØˆHØˆHØˆGˆGˆGr"   rÀ  rÒ  )rÀ  s    r    rÀ  zTIFF.ORIENTATIONÏ  s6   € ð	ð 	ð 	ð 	ð 	�$œ,ñ 	ô 	ð 	ð Ðr"   c                  ó6   —  G d„ dt           j        ¦  «        } | S )Nc                   ó   — e Zd ZdZdZdS )ú'TIFF.PLANARCONFIG.<locals>.PLANARCONFIGr&   r‘   N)rh   rp   rq   rZ  r[  r   r"   r    rY  r*  Ý  s   € € € € € ØˆFØˆHˆHˆHr"   rY  rÒ  )rY  s    r    rY  zTIFF.PLANARCONFIGÜ  s6   € ð	ð 	ð 	ð 	ð 	�4œ<ñ 	ô 	ð 	ð Ðr"   c                  ó6   —  G d„ dt           j        ¦  «        } | S )Nc                   ó"   — e Zd ZdZdZdZdZdZdS )ú/TIFF.GRAYRESPONSEUNIT.<locals>.GRAYRESPONSEUNITr&   r‘   rÊ   rŒ   rå   N©rh   rp   rq   Ú_10SÚ_100SÚ_1000SÚ_10000SÚ_100000Sr   r"   r    rÁ  r-  ä  ó'   € € € € € ØˆDØˆEØˆFØˆGØˆHˆHˆHr"   rÁ  rÒ  )rÁ  s    r    rÁ  zTIFF.GRAYRESPONSEUNITã  s6   € ð	ð 	ð 	ð 	ð 	�tœ|ñ 	ô 	ð 	ð  Ðr"   c                  ó6   —  G d„ dt           j        ¦  «        } | S )Nc                   ó   — e Zd ZdZdS )ú!TIFF.GROUP4OPT.<locals>.GROUP4OPTr‘   N)rh   rp   rq   ÚUNCOMPRESSEDr   r"   r    Ú	GROUP4OPTr7  î  s   € € € € € ØˆLˆLˆLr"   r9  rÒ  )r9  s    r    r9  zTIFF.GROUP4OPTí  s6   € ð	ð 	ð 	ð 	ð 	�œñ 	ô 	ð 	ð Ðr"   c                  ó6   —  G d„ dt           j        ¦  «        } | S )Nc                   ó   — e Zd ZdZdZdZdS )úTIFF.RESUNIT.<locals>.RESUNITr&   r‘   rÊ   N)rh   rp   rq   rÝ  ÚINCHÚ
CENTIMETERr   r"   r    rm  r<  ô  s   € € € € € ØˆDØˆDØˆJˆJˆJr"   rm  rÒ  )rm  s    r    rm  zTIFF.RESUNITó  s5   € ð	ð 	ð 	ð 	ð 	•d”lñ 	ô 	ð 	ð ˆr"   c                  ó6   —  G d„ dt           j        ¦  «        } | S )Nc                   ó"   — e Zd ZdZdZdZdZdZdS )ú1TIFF.COLORRESPONSEUNIT.<locals>.COLORRESPONSEUNITr&   r‘   rÊ   rŒ   rå   Nr.  r   r"   r    rÂ  rA  ý  r4  r"   rÂ  rÒ  )rÂ  s    r    rÂ  zTIFF.COLORRESPONSEUNITü  s6   € ð	ð 	ð 	ð 	ð 	¥¤ñ 	ô 	ð 	ð !Ð r"   c                  ó6   —  G d„ dt           j        ¦  «        } | S )Nc                   ó   — e Zd ZdZdZdZdS )ú!TIFF.PREDICTOR.<locals>.PREDICTORr&   r‘   rÊ   N)rh   rp   rq   rÝ  Ú
HORIZONTALÚFLOATINGPOINTr   r"   r    rÃ  rD    s   € € € € € ØˆDØˆJØˆMˆMˆMr"   rÃ  rÒ  )rÃ  s    r    rÃ  zTIFF.PREDICTOR  s6   € ð	ð 	ð 	ð 	ð 	�œñ 	ô 	ð 	ð Ðr"   c                  ó6   —  G d„ dt           j        ¦  «        } | S )Nc                   ó   — e Zd ZdZdZdZdS )ú%TIFF.EXTRASAMPLE.<locals>.EXTRASAMPLEr   r&   r‘   N)rh   rp   rq   ÚUNSPECIFIEDÚ
ASSOCALPHAÚ
UNASSALPHAr   r"   r    r  rI    s   € € € € € ØˆKØˆJØˆJˆJˆJr"   r  rÒ  )r  s    r    r  zTIFF.EXTRASAMPLE  s6   € ð	ð 	ð 	ð 	ð 	�$œ,ñ 	ô 	ð 	ð
 Ðr"   c                  ó6   —  G d„ dt           j        ¦  «        } | S )Nc                   ó&   — e Zd ZdZdZdZdZdZdZdS )ú'TIFF.SAMPLEFORMAT.<locals>.SAMPLEFORMATr&   r‘   rÊ   rŒ   rå   ræ   N)	rh   rp   rq   ÚUINTÚINTÚIEEEFPÚVOIDÚ
COMPLEXINTÚCOMPLEXIEEEFPr   r"   r    r'  rO    s,   € € € € € ØˆDØˆCØˆFØˆDØˆJØˆMˆMˆMr"   r'  rÒ  )r'  s    r    r'  zTIFF.SAMPLEFORMAT  s6   € ð	ð 	ð 	ð 	ð 	�4œ<ñ 	ô 	ð 	ð Ðr"   c                  ó6   —  G d„ dt           j        ¦  «        } | S )Nc                   óZ   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdS )ú!TIFF.DATATYPES.<locals>.DATATYPESr   r&   r‘   rÊ   rŒ   rå   ræ   rË  rˆ   rÄ   r\  r^  r�   é   r™  r¯  r¾   é   é   N)rh   rp   rq   ÚNOTYPEÚBYTEÚASCIIÚSHORTÚLONGÚRATIONALÚSBYTErÇ  ÚSSHORTÚSLONGÚ	SRATIONALÚFLOATÚDOUBLEr‹  ÚUNICODEÚCOMPLEXÚLONG8ÚSLONG8ÚIFD8r   r"   r    Ú	DATATYPESrX  #  sm   € € € € € ØˆFØˆDØˆEØˆEØˆDØˆHØˆEØˆIØˆFØˆEØˆIØˆEØˆFØˆCØˆGØˆGØˆEØˆFØˆDˆDˆDr"   rm  rÒ  )rm  s    r    rm  zTIFF.DATATYPES"  s6   € ð	ð 	ð 	ð 	ð 	�œñ 	ô 	ð 	ð* Ðr"   c                  óf   — i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“S )Nr&   rÏ  r‘   Ú1srÊ   Ú1HrŒ   Ú1Irå   r;  ræ   Ú1brË  rˆ   Ú1hrÄ   Ú1ir\  Ú2ir^  Ú1fr�   Ú1drY  r¾   Ú1QrZ  Ú1qr[  r   r   r"   r    rÑ  zTIFF.DATA_FORMATS:  sÈ   € ð
Øˆtð
àˆtð
ð ˆtð	
ð
 ˆtð
ð ˆtð
ð ˆtð
ð ˆtð
ð ˆtð
ð ˆtð
ð �ð
ð" �ð#
ð$ �ð%
ð& �ð'
ð, �ð-
ð. �ð/
ð0 �ð1
ð 	
r"   c                  ó"   — ddddddddd	d
ddddœS )Nr&   r‘   rÊ   rŒ   rå   ræ   rˆ   rÄ   r\  r^  r�   r¾   rZ  )rÈ   rú   rŽ   r�   r;  ÚbÚhr   ru  r!  r—  rŠ   Úqr   r   r"   r    rþ   zTIFF.DATA_DTYPESW  s:   € ð ØØØØØØØØØØØØð
ð 
ð 	
r"   c                  óî   — i dd“dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“i dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d“d!d“d"d“d#d“d$d“d%d&“d'd(“¥d)d*d+d,d-d.d/d0dd1œ	¥S )2Nr>  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&   rY  )r&   r™  )r&   r¯  )r&   r¾   )r&   rZ  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}  rm   r!  r—  ÚFÚD)	)r‘   r¾   )r‘   rÔ  )r‘   rÕ  )rÊ   r¾   ©rÊ   rÔ  )rÊ   rÕ  )ræ   rÕ  )ræ   rZ  )r&   ©rå   ræ   rå   r   r   r"   r    rÁ  zTIFF.SAMPLE_DTYPESi  sÞ  € ð,
Ø�Cð,
à�Cð,
ð �Cð,
ð �Cð	,
ð
 �Cð,
ð �Cð,
ð �Cð,
ð �Cð,
ð �Cð,
ð �Sð,
ð �Sð,
ð �Sð,
ð �Sð,
ð �Sð,
ð �Sð,
ð  �Sð!,
ð" �Sð#,
ð ,
ð$ �Sð%,
ð& �Sð',
ð( �Sð),
ð* �Sð+,
ð, �Sð-,
ð. �Sð/,
ð0 �Sð1,
ð2 �Sð3,
ð4 �Sð5,
ð6 �Sð7,
ð8 �Sð9,
ð: �Sð;,
ð< �Sð=,
ð> �Sð?,
ð@ �SðA,
ðB �SðC,
ðD �CðE,
ð ,
ðF ØØØØØØØØðW,
ð ,
ð ,
ð ,	
r"   c                  ó<   —  G d„ dt           ¦  «        }  | ¦   «         S )Nc                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ú$TIFF.COMPESSORS.<locals>.Compressorsz"Delay import compressor functions.c                 óJ   — t           j        dft           j        dfdœ| _        d S )Nræ   )rˆ   rÙ  )ÚzlibrÓ   Ú_compressorsrË  s    r    ra   z-TIFF.COMPESSORS.<locals>.Compressors.__init__Ÿ  s'   € Ý)-¬¸Ð(:ÅDÄMÐSTÐCUÐ$VÐ$V�Ô!Ð!Ð!r"   c                 óP  ‡— || j         v r| j         |         S |dk    rH	 dd lŠn-# t          $ r  	 dd lmŠ n# t          $ r t          ‚w xY wY nw xY wˆfd„}|df| j         |<   |dfS |dk    r5	 dd l}n# t          $ r t          ‚w xY w|j        df| j         |<   |j        dfS t          ‚)NrÛ  r   c                 ó.   •— ‰                      | ¦  «        S r   )rÓ   )rí   rÑ   Úlzmas     €r    Úlzma_compresszGTIFF.COMPESSORS.<locals>.Compressors.__getitem__.<locals>.lzma_compress¯  s   ø€ Ø#Ÿ}š}¨QÑ/Ô/Ð/r"   rÜ  rÄ   )r“  r–  ÚImportErrorÚbackports.lzmarÿ   ÚzstdrÓ   )r`   rC  r—  rš  r–  s       @r    rž  z0TIFF.COMPESSORS.<locals>.Compressors.__getitem__¢  s,  ø€ Ø˜$Ô+Ð+Ð+ØÔ,¨SÔ1Ð1à˜%’<�<ð+Ø#˜˜˜˜øÝ&ð +ð +ð +ð+Ø9Ð9Ð9Ð9Ð9Ð9Ð9øÝ*ð +ð +ð +Ý"*˜Nð+øøøð :Ð9ð+øøøð0ð 0ð 0ð 0ð 0ð .;¸AÐ-=�DÔ% cÑ*Ø(¨!Ð+Ð+à˜%’<�<ð'Ø#˜˜˜˜øÝ&ð 'ð 'ð 'Ý&˜ð'øøøà-1¬]¸AÐ-=�DÔ% cÑ*Øœ=¨!Ð+Ð+å�s/   Ÿ$ ¤
A¯6µA¶AÁAÁAÁ-A2 Á2Bc                 ó:   — 	 | |          dS # t           $ r Y dS w xY w©NTF©rÿ   )r`   rC  s     r    Ú__contains__z1TIFF.COMPESSORS.<locals>.Compressors.__contains__¿  s7   € ð!Ø˜”I�IØ˜4øÝð !ð !ð !Ø ˜5˜5ð!øøøó   ‚ Œ
™N©rh   rp   rq   rr   ra   rž  rž  r   r"   r    ÚCompressorsr�  œ  sJ   € € € € € Ø4Ð4ðWð Wð Wðð ð ð:!ð !ð !ð !ð !r"   r¡  ©Úobject)r¡  s    r    r`  zTIFF.COMPESSORS™  s;   € ð(	!ð (	!ð (	!ð (	!ð (	!�&ñ (	!ô (	!ð (	!ðT ˆ{‰}Œ}Ðr"   c                  ó<   —  G d„ dt           ¦  «        }  | ¦   «         S )Nc                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ú(TIFF.DECOMPESSORS.<locals>.Decompressorsz$Delay import decompressor functions.c                 ór   — t           t           t          t          j        t          t          j        dœ| _        d S )N)Nr&   rå   rˆ   rØ  rÙ  )rí  r   r’  rÓ  Údecode_packbitsÚ_decompressorsrË  s    r    ra   z1TIFF.DECOMPESSORS.<locals>.Decompressors.__init__Î  s-   € å&Ý#Ý!Ý”Ý*Ýœ?ð'ð '�Ô#Ð#Ð#r"   c                 ó¼  ‡‡— || j         v r| j         |         S |dk    r2	 ddlmŠmŠ n# t          $ r t
          ‚w xY wdˆˆfd„	}|| j         |<   |S |dk    rI	 dd l}n-# t          $ r  	 dd lm} n# t          $ r t
          ‚w xY wY nw xY w|j        | j         |<   |j        S |dk    r1	 dd l	}n# t          $ r t
          ‚w xY w|j        | j         |<   |j        S t
          ‚)NrË  r   )ÚjpegÚjpeg_12c                 ó–   •— |dk    r‰                      | ||¦  «        S |dk    r‰                     | ||¦  «        S t          d¦  «        ‚)Nrˆ   r�   zbitspersample not supported)Údecode_jpegÚdecode_jpeg_12r,   )rí   rÑ  ÚbpsrÒ  r«  r¬  s       €€r    r®  zITIFF.DECOMPESSORS.<locals>.Decompressors.__getitem__.<locals>.decode_jpegâ  sT   ø€ Ø !š8˜8Ø#'×#3Ò#3°A°u¸jÑ#IÔ#IÐIØ  BšY˜YØ#*×#9Ò#9¸!¸UÀJÑ#OÔ#OÐOå",Ð-JÑ"KÔ"KÐKr"   rÛ  rÜ  r   )
r©  Úimagecodecsr«  r¬  r˜  rÿ   r–  r™  rÓ  rš  )r`   rC  r®  r–  rš  r«  r¬  s        @@r    rž  z4TIFF.DECOMPESSORS.<locals>.Decompressors.__getitem__Ø  sŒ  øø€ Ø˜$Ô-Ð-Ð-ØÔ.¨sÔ3Ð3à˜!’8�8ð'Ø=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=øÝ&ð 'ð 'ð 'Ý&˜ð'øøøðLð Lð Lð Lð Lð Lð Lð 0;�DÔ'¨Ñ,Ø&Ð&à˜%’<�<ð+Ø#˜˜˜˜øÝ&ð +ð +ð +ð+Ø9Ð9Ð9Ð9Ð9Ð9Ð9øÝ*ð +ð +ð +Ý"*˜Nð+øøøð :Ð9ð+øøøð
 04¬�DÔ'¨Ñ,Øœ?Ð*à˜%’<�<ð'Ø#˜˜˜˜øÝ&ð 'ð 'ð 'Ý&˜ð'øøøà/3¬�DÔ'¨Ñ,Øœ?Ð*Ý�s>    ) ©;ÁA Á
BÁ(A/Á.BÁ/BÂBÂBÂ'B, Â,B>c                 ó:   — 	 | |          dS # t           $ r Y dS w xY wrœ  r�  )r`   Úitems     r    rž  z5TIFF.DECOMPESSORS.<locals>.Decompressors.__contains__  s7   € ð!Ø˜”J�JØ˜4øÝð !ð !ð !Ø ˜5˜5ð!øøørŸ  Nr   r   r"   r    ÚDecompressorsr¦  Ë  sH   € € € € € Ø6Ð6ðð ð ð'ð 'ð 'ðR!ð !ð !ð !ð !r"   r´  r¢  )r´  s    r    r#  zTIFF.DECOMPESSORSÈ  s;   € ð;	!ð ;	!ð ;	!ð ;	!ð ;	!�Fñ ;	!ô ;	!ð ;	!ðz ˆ}‰ŒÐr"   c                  óD   — t          d                     ¦   «         ¦  «        S )Nz#shape ndim size dtype axes is_final)r  r  r   r"   r    rÁ  zTIFF.FRAME_ATTRS
  s   € åÐ8×>Ò>Ñ@Ô@ÑAÔAÐAr"   c                  ó    ‡ — t          d                     ¦   «         ¦  «        Š t          ˆ fd„t          t          ¦  «        D ¦   «         ¦  «        S )Nz<reduced final memmappable contiguous tiled chroma_subsampledc              3   ó`   •K  — | ](}|d d…         dk    ¯|dd …         ‰v¯|dd …         V — Œ)d S )NrÊ   r{   r   )r   r|   Úexcludes     €r    r!   z"TIFF.FILE_FLAGS.<locals>.<genexpr>  sV   øè è € ð 
ð 
Ø¨A¨b¨q¨b¬E°UªN¨N¸qÀÀÀ¼uÈGÐ?SÐ?SˆAˆaˆbˆbŒEÐ?SÐ?SÐ?SÐ?Sð
ð 
r"   )r  r  Údirrú  )r¸  s   @r    rå  zTIFF.FILE_FLAGS  sa   ø€ åØM×SÒSÑUÔUñ
ô 
ˆõ ð 
ð 
ð 
ð 
Ý�x™=œ=ð
ñ 
ô 
ñ 
ô 
ð 	
r"   c                  óD   — t          d                     ¦   «         ¦  «        S )NzBtif tiff ome.tif lsm stk qptiff pcoraw gel seq svs bif tf8 tf2 btf)r  r  r   r"   r    ÚFILE_EXTENSIONSzTIFF.FILE_EXTENSIONS  s"   € åð*ß*/ª%©'¬'ñ
ô 
ð 	
r"   c                  ó6   — d„ t           j        D ¦   «         dgz   S )Nc                 óF   — g | ]}d |                      ¦   «         z  d|z  f‘ŒS )z%s filesz*.%srï  )r   r+  s     r    rK  z(TIFF.FILEOPEN_FILTER.<locals>.<listcomp>   s;   € ð 
ð 
ð 
Ø9<ˆZ˜#Ÿ)š)™+œ+Ñ% v°¡|Ð4ð
ð 
ð 
r"   )ÚallfilesÚ*)rO   r»  r   r"   r    ÚFILEOPEN_FILTERzTIFF.FILEOPEN_FILTER  s1   € ð
ð 
Ý@DÔ@Tð
ñ 
ô 
àÐñ ð 	 r"   c                  óæ   — i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “} |                       t          d!„ |                      ¦   «         D ¦   «         ¦  «        ¦  «         | S )"NÚXrù  ÚYrþ  rB  Údepthr  Úsampler�   rT   r@  ÚtimerM   ÚchannelÚAÚangler½  ÚphaseÚRry  rŽ   ÚlifetimeÚEÚlambdaÚLÚexposureÚVÚeventrŠ   rw  r¿  Úmosaicc              3   ó$   K  — | ]\  }}||fV — Œd S r   r   ©r   r  r©  s      r    r!   z#TIFF.AXES_LABELS.<locals>.<genexpr>8  s*   è è € Ð9Ð9¡D A q˜!˜Q˜Ð9Ð9Ð9Ð9Ð9Ð9r"   )rN   Údicträ  )r  s    r    rš  zTIFF.AXES_LABELS$  sý   € ð
Ø�ð
à�ð
ð �ð
ð �ð	
ð
 �ð
ð �ð
ð �ð
ð �ð
ð �ð
ð �ð
ð �ð
ð �ð
ð �ð
ð �ð
ð �ð
ð  �ð!
ˆð$ 	�Š•DÐ9Ð9¨D¯JªJ©L¬LÐ9Ñ9Ô9Ñ9Ô9Ñ:Ô:Ð:Øˆr"   c                  ó<   — t          t          dd¦  «        ¦  «        S )Nr5  i¦  )r  rq  r   r"   r    Ú
ANDOR_TAGSzTIFF.ANDOR_TAGS;  s   € å•5˜˜tÑ$Ô$Ñ%Ô%Ð%r"   c                  óf   — ddddddddd	d
dddddœ} |                       t          j        ¦  «         | S )NÚ	OwnerNameÚSerialNumberÚLensÚRawFileÚ	Converterrü  ÚExposureÚShadowsÚ
Brightnessr  r  r  Ú
SmoothnessÚMoireFilter)r7  r9  r;  iLþ  iMþ  iNþ  iQþ  iRþ  iSþ  iTþ  iUþ  iVþ  iWþ  iXþ  )rN   rO   rP  rx  s    r    Ú	EXIF_TAGSzTIFF.EXIF_TAGS?  sU   € ð Ø!ØØØØ!ØØØØØØØØ ð
ð 
ˆð" 	�Š•D”IÑÔÐØˆr"   c                  ó�   — i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2œ¥S )3Nr   ÚGPSVersionIDr&   ÚGPSLatitudeRefr‘   ÚGPSLatituderÊ   ÚGPSLongitudeRefrŒ   ÚGPSLongituderå   ÚGPSAltitudeRefræ   ÚGPSAltituderË  ÚGPSTimeStamprˆ   ÚGPSSatellitesrÄ   Ú	GPSStatusr\  ÚGPSMeasureModer^  ÚGPSDOPr�   ÚGPSSpeedRefrY  ÚGPSSpeedr™  ÚGPSTrackRefr¯  ÚGPSTrackr¾   ÚGPSImgDirectionRefÚGPSImgDirectionÚGPSMapDatumÚGPSDestLatitudeRefÚGPSDestLatitudeÚGPSDestLongitudeRefÚGPSDestLongitudeÚGPSDestBearingRefÚGPSDestBearingÚGPSDestDistanceRefÚGPSDestDistanceÚGPSProcessingMethodÚGPSAreaInformationÚGPSDateStampÚGPSDifferentialÚGPSHPositioningError)rZ  r[  r  r‰   r€  r­  r�  r‚  rƒ  r„  r…  r†  r‡  rˆ  r‰  r   r   r"   r    ÚGPS_TAGSzTIFF.GPS_TAGST  s  € ð!
Øˆ~ð!
àÐð!
ð ˆ}ð!
ð Ð ð	!
ð
 ˆ~ð!
ð Ðð!
ð ˆ}ð!
ð ˆ~ð!
ð ˆð!
ð ˆ{ð!
ð Ð ð!
ð �ð!
ð �ð!
ð �
ð!
ð �ð!
ð  �
ð!!
ð" Ð$ð#!
ð$ "ØØ$Ø!Ø%Ø"Ø#Ø Ø$Ø!Ø%Ø$ØØ!Ø&ðA!
ð !
ð !
ð !	
r"   c                  ó   — ddddddœS )Nr  r  ÚRelatedImageFileFormatÚRelatedImageWidthÚRelatedImageLength)r&   r‘   r‘  é  é  r   r   r"   r    ÚIOP_TAGSzTIFF.IOP_TAGSx  s    € à&Ø(Ø*Ø%Ø&ð
ð 
ð 	
r"   c                  óø   — i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“i d#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAdB“dCdD“¥dEdFdGdHdEdIdJdKdLdMdNdOdPdQdRœ¥S )SNé   ÚGTModelTypeGeoKeyi  ÚGTRasterTypeGeoKeyi  ÚGTCitationGeoKeyi   ÚGeographicTypeGeoKeyi  ÚGeogCitationGeoKeyi  ÚGeogGeodeticDatumGeoKeyi  ÚGeogPrimeMeridianGeoKeyi  ÚGeogLinearUnitsGeoKeyi  ÚGeogLinearUnitSizeGeoKeyi  ÚGeogAngularUnitsGeoKeyi  ÚGeogAngularUnitsSizeGeoKeyi  ÚGeogEllipsoidGeoKeyi	  ÚGeogSemiMajorAxisGeoKeyi
  ÚGeogSemiMinorAxisGeoKeyi  ÚGeogInvFlatteningGeoKeyi  ÚGeogAzimuthUnitsGeoKeyi  ÚGeogPrimeMeridianLongGeoKeyi  ÚGeogTOWGS84GeoKeyió  Ú"ProjLinearUnitsInterpCorrectGeoKeyi   ÚProjectedCSTypeGeoKeyi  ÚPCSCitationGeoKeyi  ÚProjectionGeoKeyi  ÚProjCoordTransGeoKeyi  ÚProjLinearUnitsGeoKeyi  ÚProjLinearUnitSizeGeoKeyi  ÚProjStdParallel1GeoKeyi  ÚProjStdParallel2GeoKeyi  ÚProjNatOriginLongGeoKeyi	  ÚProjNatOriginLatGeoKeyi
  ÚProjFalseEastingGeoKeyi  ÚProjFalseNorthingGeoKeyi  ÚProjFalseOriginLongGeoKeyi  ÚProjFalseOriginLatGeoKeyi  ÚProjFalseOriginEastingGeoKeyÚProjFalseOriginNorthingGeoKeyÚProjCenterLongGeoKeyÚProjCenterLatGeoKeyÚProjCenterEastingGeoKeyÚProjScaleAtNatOriginGeoKeyÚProjScaleAtCenterGeoKeyÚProjAzimuthAngleGeoKeyÚProjStraightVertPoleLongGeoKeyÚProjRectifiedGridAngleGeoKeyÚVerticalCSTypeGeoKeyÚVerticalCitationGeoKeyÚVerticalDatumGeoKeyÚVerticalUnitsGeoKey)i  i  i  i  i  i  i  i  i  i  r‘  r	  r	  i  r   r   r"   r    rf  zTIFF.GEO_KEYS�  s  € ð1
ØÐ%ð1
àÐ&ð1
ð Ð$ð1
ð Ð(ð	1
ð
 Ð&ð1
ð Ð+ð1
ð Ð+ð1
ð Ð)ð1
ð Ð,ð1
ð Ð*ð1
ð Ð.ð1
ð Ð'ð1
ð Ð+ð1
ð Ð+ð1
ð Ð+ð1
ð  Ð*ð!1
ð" Ð/ð#1
ð 1
ð$ Ð%ð%1
ð& Ð6ð'1
ð( Ð)ð)1
ð* Ð%ð+1
ð, Ð$ð-1
ð. Ð(ð/1
ð0 Ð)ð11
ð2 Ð,ð31
ð4 Ð*ð51
ð6 Ð*ð71
ð8 Ð+ð91
ð: Ð*ð;1
ð< Ð*ð=1
ð> Ð+ð?1
ð@ Ð-ðA1
ðB Ð,ðC1
ðD Ð0ðE1
ð 1
ðF 2Ø(Ø'Ø+Ø1Ø.Ø+Ø*Ø2Ø0Ø(Ø*Ø'Ø'ða1
ð 1
ð 1
ð 1	
r"   c                  ó†   — 	 ddl m}  n8# t          t          f$ r$ 	 ddl m}  n# t          t          f$ r i } Y nw xY wY nw xY w| S )Nr&   ©rg  r   )Útifffile_geodbrg  r˜  r,   r@	  s    r    rg  zTIFF.GEO_CODESµ  s‰   € ð	Ø1Ð1Ð1Ð1Ð1Ð1Ð1øÝ�ZÐ(ð 	ð 	ð 	ðØ4Ð4Ð4Ð4Ð4Ð4Ð4øÝ¥Ð,ð ð ð Ø�	�	�	ðøøøøøð	øøøð
 Ðs$   ‚	 ‰>›"¡>¢8µ>·8¸>½>c                  ó
   — g d¢S )N):)ÚMagicNumberÚu4)ÚStructureSizeÚi4)Ú
DimensionXrF	  )Ú
DimensionYrF	  )Ú
DimensionZrF	  )ÚDimensionChannelsrF	  )ÚDimensionTimerF	  )r4  rF	  )Ú
ThumbnailXrF	  )Ú
ThumbnailYrF	  )Ú
VoxelSizeXÚf8)Ú
VoxelSizeYrO	  )Ú
VoxelSizeZrO	  )ÚOriginXrO	  )ÚOriginYrO	  )ÚOriginZrO	  )r¹  Úu2)ÚSpectralScanrU	  )Ú
TypeOfDatarD	  )ÚOffsetVectorOverlayrD	  )ÚOffsetInputLutrD	  )ÚOffsetOutputLutrD	  )ÚOffsetChannelColorsrD	  )ÚTimeIntervallrO	  )ÚOffsetChannelDataTypesrD	  )ÚOffsetScanInformationrD	  )ÚOffsetKsDatarD	  )ÚOffsetTimeStampsrD	  )ÚOffsetEventListrD	  )Ú	OffsetRoirD	  )ÚOffsetBleachRoirD	  )ÚOffsetNextRecordingrD	  )ÚDisplayAspectXrO	  )ÚDisplayAspectYrO	  )ÚDisplayAspectZrO	  )ÚDisplayAspectTimerO	  )ÚOffsetMeanOfRoisOverlayrD	  )ÚOffsetTopoIsolineOverlayrD	  )ÚOffsetTopoProfileOverlayrD	  )ÚOffsetLinescanOverlayrD	  )ÚToolbarFlagsrD	  )ÚOffsetChannelWavelengthrD	  )ÚOffsetChannelFactorsrD	  )ÚObjectiveSphereCorrectionrO	  )ÚOffsetUnmixParametersrD	  )ÚOffsetAcquisitionParametersrD	  )ÚOffsetCharacteristicsrD	  )ÚOffsetPaletterD	  )ÚTimeDifferenceXrO	  )ÚTimeDifferenceYrO	  )ÚTimeDifferenceZrO	  )ÚInternalUse1rD	  )r¼  rF	  )r¾  rF	  )ÚDimensionsReservedÚ16i4)ÚOffsetTilePositionsrD	  )r,  Ú9u4)ÚOffsetPositionsrD	  r   r   r"   r    r  zTIFF.CZ_LSMINFO¿  s   € ð>
ð >
ð >
ð >	
r"   c            	      ó¼   — i dt           “dt          “dt          “dt          “dt          “dt          “dd “dd “d	d “d
d “dd “dd “dd “dd “dd “dd “dd “d d d d d d d dœ¥S )NÚScanInformationÚ
TimeStampsÚ	EventListÚChannelColorsÚ	PositionsÚTilePositionsÚVectorOverlayÚInputLutÚ	OutputLutr\	  ÚChannelDataTypesÚKsDataÚRoiÚ	BleachRoiÚNextRecordingÚMeanOfRoisOverlayÚTopoIsolineOverlay)ÚTopoProfileOverlayÚChannelWavelengthÚSphereCorrectionÚChannelFactorsÚUnmixParametersÚAcquisitionParametersÚCharacteristics)Úread_lsm_scaninfoÚread_lsm_timestampsÚread_lsm_eventlistÚread_lsm_channelcolorsÚread_lsm_floatpairsr   r"   r    ÚCZ_LSMINFO_READERSzTIFF.CZ_LSMINFO_READERS   s   € ð
ØÕ0ð
àÕ-ð
ð Õ+ð
ð Õ3ð	
ð
 Õ,ð
ð Õ0ð
ð ˜Tð
ð ˜ð
ð ˜ð
ð ˜Tð
ð  ð
ð �dð
ð �4ð
ð ˜ð
ð ˜Tð
ð    ð!
ð" ! $ð#
ð$ #'Ø!%Ø $Ø"Ø#Ø%)Ø#ð1
ð 
ð 
ð 	
r"   c                  ó   — ddddddddddddœS )NÚXYZCTÚXYTCZÚXYZTCÚXYCTZÚXYCZT)r   r&   r‘   rÊ   rŒ   rå   ræ   rË  rˆ   rÄ   r\  r   r   r"   r    rÈ  zTIFF.CZ_LSMINFO_SCANTYPE  s4   € ð ØØØØØØØØØØð
ð 
ð 	
r"   c                  ó   — ddddddddœS )	NrG	  rH	  rI	  rJ	  rK	  r¼  r¾  )rÂ  rÃ  rB  rM   r@  r½  r¿  r   r   r"   r    rÁ  zTIFF.CZ_LSMINFO_DIMENSIONS.  s(   € ð ØØØ$Ø ØØð
ð 
ð 	
r"   c                  ó   — dddddœS )Nzvarying data typesz8 bit unsigned integerz12 bit unsigned integerz32 bit float)r   r&   r‘   rå   r   r   r"   r    ÚCZ_LSMINFO_DATATYPESzTIFF.CZ_LSMINFO_DATATYPES:  s   € ð $Ø'Ø(Øð	
ð 
ð 	
r"   c                  ó   — dddddœS )NzOriginal scan datazCalculated dataz3D reconstructionzTopography height map)r   r&   r‘   rÊ   r   r   r"   r    ÚCZ_LSMINFO_TYPEOFDATAzTIFF.CZ_LSMINFO_TYPEOFDATAC  s   € ð $Ø Ø"Ø&ð	
ð 
ð 	
r"   c            	      ó   — ddddddddd	œS )
NÚTracksÚLasersÚDetectionChannelsÚIlluminationChannelsÚBeamSplittersÚDataChannelsÚTimersÚMarkers)i    i   0i   `l        l      @ l        i   i   r   r   r"   r    ÚCZ_LSMINFO_SCANINFO_ARRAYSzTIFF.CZ_LSMINFO_SCANINFO_ARRAYSL  s)   € à Ø Ø+Ø.Ø'Ø&Ø Ø!ð	
ð 	
ð 		
r"   c            	      ó   — ddddddddd	œS )
NÚTrackÚLaserÚDetectionChannelÚIlluminationChannelÚBeamSplitterÚDataChannelÚTimerÚMarker)i   @i   Pi   pl        l      ` l        i   i   r   r   r"   r    ÚCZ_LSMINFO_SCANINFO_STRUCTSz TIFF.CZ_LSMINFO_SCANINFO_STRUCTSX  s+   € ð  ØØ*Ø-Ø&Ø%ØØ ð

ð 

ð 
	
r"   c                  óZ  — i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“i d#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAdB“dCdD“¥i dEdF“dGdH“dIdJ“dKdL“dMdN“dOdP“dQdR“dSdT“dUdV“dWdX“dYdZ“d[d\“d]d^“d_d`“dadb“dcdd“dedf“¥i dgdh“didj“dkdl“dmdn“dodp“dqdr“dsdt“dudv“dwdx“dydz“d{d|“d}d~“dd€“d�d‚“dƒd„“d…d†“d‡dˆ“¥i d‰dŠ“d‹dŒ“d�dŽ“d�d�“d‘d’“d“d”“d•d–“d—d˜“d™dš“d›d“dœd�“dždŸ“d d¡“d¢d£“d¤d¥“d¦d§“d¨d©“¥i dªd«“d¬d­“d®d¯“d°d±“d²d³“d´dµ“d¶d·“d¸d¹“dºd»“d¼d½“d¾d¿“dÀdÁ“dÂdÃ“dÄdÅ“dÆdÇ“dÈdÉ“dÊdË“¥i dÌdÍ“dÎdÏ“dÐdÑ“dÒdÓ“dÔdÕ“dÖd×“dØdÙ“dÚdÛ“dÜdÝ“dÞdß“dàd“dád–“dâdã“dädå“dædç“dèdé“dêdë“¥i dìdí“dîdï“dðdñ“dòdó“dôdõ“död÷“død–“dùdú“dûdü“dýdþ“dÿ�d “�d�d“�d�d“�d�d“�d�d“�d	�d
“�d�d“¥i �d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�d�d“�dd“�ddã“�d�d “�d!�d"“�d#�d$“�d%�d&“�d'�d(“�d)�d*“�d+�d,“¥i �d-d“�d.d“�d/d–“�d0�d1“�d2�d3“�d4�d5“�d6�d7“�d8�d9“�d:�d;“�d<�d=“�d>�d?“�d@�dA“�dB�dC“�dD�dE“�dF�dG“�dH�dI“�dJ�dK“¥i �dL�dM“�dN�dO“�dP�d“�dQ�d“�dR�dS“�dTd–“�dUd“�dVd“�dW�dX“�dYd«“�dZd­“�d[�d\“�d]�d^“�d_d“�d`d“�dad«“�dbd­“¥S (c  Ni  r€  i  rk  i  ÚNotesi  Ú	Objectivei  ÚProcessingSummaryi  ÚSpecialScanModei  r¹  i  ÚScanModei	  ÚNumberOfStacksi
  ÚLinesPerPlanei  ÚSamplesPerLinei  ÚPlanesPerVolumei  ÚImagesWidthi  ÚImagesHeighti  ÚImagesNumberPlanesi  ÚImagesNumberStacksi  ÚImagesNumberChannelsi  ÚLinscanXySizei  ÚScanDirectioni  Ú
TimeSeriesi  ÚOriginalScanDatai  ÚZoomXi  ÚZoomYi  ÚZoomZi  ÚSample0Xi  ÚSample0Yi  ÚSample0Zi  ÚSampleSpacingi  ÚLineSpacingi  ÚPlaneSpacingi  Ú
PlaneWidthi   ÚPlaneHeighti!  ÚVolumeDepthi#  ÚNutationi4  ÚRotationi5  Ú
Precessioni6  ÚSample0timei7  ÚStartScanTriggerIni8  ÚStartScanTriggerOuti9  ÚStartScanEventi@  ÚStartScanTimeiA  ÚStopScanTriggerIniB  ÚStopScanTriggerOutiC  ÚStopScanEventiD  ÚStopScanTimeiE  ÚUseRoisiF  ÚUseReducedMemoryRoisiG  ÚUseriH  ÚUseBcCorrectioniI  ÚPositionBcCorrection1iP  ÚPositionBcCorrection2iQ  ÚInterpolationYiR  ÚCameraBinningiS  ÚCameraSupersamplingiT  ÚCameraFrameWidthiU  ÚCameraFrameHeightiV  ÚCameraOffsetXiW  ÚCameraOffsetYiY  Ú	RtBinningiZ  ÚRtFrameWidthi[  ÚRtFrameHeighti\  ÚRtRegionWidthi]  ÚRtRegionHeighti^  Ú	RtOffsetXi_  Ú	RtOffsetYi`  ÚRtZoomia  ÚRtLinePeriodib  ÚPrescanic  ÚScanDirectionZi  @ÚMultiplexTypei  @ÚMultiplexOrderi  @ÚSamplingModei  @ÚSamplingMethodi  @ÚSamplingNumberi  @ÚAcquirei  @ÚSampleObservationTimei  @ÚTimeBetweenStacksi  @i  @ÚCollimator1Namei  @ÚCollimator1Positioni  @ÚCollimator2Namei  @ÚCollimator2Positioni  @ÚIsBleachTracki  @ÚIsBleachAfterScanNumberi  @ÚBleachScanNumberi  @Ú	TriggerIni  @Ú
TriggerOuti  @ÚIsRatioTracki  @ÚBleachCounti  @ÚSpiCenterWavelengthi  @Ú	PixelTimei!  @ÚCondensorFrontlensi#  @ÚFieldStopValuei$  @ÚIdCondensorAperturei%  @ÚCondensorAperturei&  @ÚIdCondensorRevolveri'  @ÚCondensorFilteri(  @ÚIdTransmissionFilter1i)  @ÚIdTransmission1i0  @ÚIdTransmissionFilter2i1  @ÚIdTransmission2i2  @ÚRepeatBleachi3  @ÚEnableSpotBleachPosi4  @ÚSpotBleachPosxi5  @ÚSpotBleachPosyi6  @ÚSpotBleachPoszi7  @Ú
IdTubelensi8  @ÚIdTubelensPositioni9  @ÚTransmittedLighti:  @ÚReflectedLighti;  @ÚSimultanGrabAndBleachi<  @ÚBleachPixelTimei  Pi  Pi  PÚPoweri  pÚIntegrationModei  pÚSpecialModei  pÚDetectorGainFirsti  pÚDetectorGainLasti  pÚAmplifierGainFirsti  pÚAmplifierGainLasti  pÚAmplifierOffsFirsti  pÚAmplifierOffsLasti	  pÚPinholeDiameteri
  pÚCountingTriggeri  pi  pÚPointDetectorNamei  pÚAmplifierNamei  pÚPinholeNamei  pÚFilterSetNamei  pÚ
FilterNamei  pÚIntegratorNamei  pÚChannelNamei  pÚDetectorGainBc1i  pÚDetectorGainBc2i  pÚAmplifierGainBc1i  pÚAmplifierGainBc2i  pÚAmplifierOffsetBc1i   pÚAmplifierOffsetBc2i!  pÚSpectralScanChannelsi"  pÚSpiWavelengthStarti#  pÚSpiWavelengthStopi&  pÚDyeNamei'  pÚ	DyeFolderl       l       l       Ú
Wavelengthl       ÚAquirel       ÚDetchannelNamel       ÚPowerBc1l       ÚPowerBc2l     ` Ú	FilterSetl     ` ÚFilterl     ` l       l       l       ÚColorl       Ú
SampleTypel       r7  l       Ú	RatioTypel       ÚRatioTrack1l   	    ÚRatioTrack2l   
    ÚRatioChannel1l       ÚRatioChannel2l       ÚRatioConst1l       ÚRatioConst2l       ÚRatioConst3l       ÚRatioConst4l       ÚRatioConst5l       ÚRatioConst6l       ÚRatioFirstImages1l       ÚRatioFirstImages2l       l       l       ÚSpectruml       i  i  i  ÚIntervali  i  i  ÚActivationTimei  ÚActivationNumberi  i  i  i  r   r   r"   r    ÚCZ_LSMINFO_SCANINFO_ATTRIBUTESz#TIFF.CZ_LSMINFO_SCANINFO_ATTRIBUTESe  s�  € ðE
à˜ðE
ð ˜ðE
ð ˜ð	E
ð
 ˜ðE
ð Ð+ðE
ð Ð)ðE
ð ˜
ðE
ð ˜
ðE
ð Ð(ðE
ð ˜ðE
ð Ð(ðE
ð Ð)ðE
ð ˜ðE
ð ˜ðE
ð  Ð,ð!E
ð" Ð,ð#E
ð$ Ð.ð%E
ð E
ð& ˜ð'E
ð( ˜ð)E
ð* ˜ð+E
ð, Ð*ð-E
ð. ˜ð/E
ð0 ˜ð1E
ð2 ˜ð3E
ð4 ˜
ð5E
ð6 ˜
ð7E
ð8 ˜
ð9E
ð: ˜ð;E
ð< ˜ð=E
ð> ˜ð?E
ð@ ˜ðAE
ðB ˜ðCE
ðD ˜ðEE
ðF ˜
ðGE
ð E
ð E
ðH ˜
ðIE
ðJ ˜ðKE
ðL ˜ðME
ðN Ð,ðOE
ðP Ð-ðQE
ðR Ð(ðSE
ðT ˜ðUE
ðV Ð+ðWE
ðX Ð,ðYE
ðZ ˜ð[E
ð\ ˜ð]E
ð^ ˜	ð_E
ð` Ð.ðaE
ðb ˜ðcE
ðd Ð)ðeE
ðf Ð/ðgE
ðh Ð/ðiE
ð E
ð E
ðj Ð(ðkE
ðl ˜ðmE
ðn Ð-ðoE
ðp Ð*ðqE
ðr Ð+ðsE
ðt ˜ðuE
ðv ˜ðwE
ðx ˜ðyE
ðz ˜ð{E
ð| ˜ð}E
ð~ ˜ðE
ð@ Ð(ðAE
ðB ˜ðCE
ðD ˜ðEE
ðF ˜ðGE
ðH ˜ðIE
ðJ ˜	ðKE
ð E
ð E
ðL Ð(ðME
ðP ˜ðQE
ðR Ð(ðSE
ðT ˜ðUE
ðV Ð(ðWE
ðX Ð(ðYE
ðZ ˜	ð[E
ð\ Ð/ð]E
ð^ Ð+ð_E
ð` ˜ðaE
ðb Ð)ðcE
ðd Ð-ðeE
ðf Ð)ðgE
ðh Ð-ðiE
ðj ˜ðkE
ðl Ð1ðmE
ðn Ð*ðoE
ð E
ð E
ðp ˜ðqE
ðr ˜ðsE
ðt ˜ðuE
ðv ˜ðwE
ðx Ð-ðyE
ðz ˜ð{E
ð| Ð,ð}E
ð~ Ð(ðE
ð@ Ð-ðAE
ðB Ð+ðCE
ðD Ð-ðEE
ðF Ð)ðGE
ðH Ð/ðIE
ðJ Ð)ðKE
ðL Ð/ðME
ðN Ð)ðOE
ðP ˜ðQE
ð E
ð E
ðR Ð-ðSE
ðT Ð(ðUE
ðV Ð(ðWE
ðX Ð(ðYE
ðZ ˜ð[E
ð\ Ð,ð]E
ð^ Ð*ð_E
ð` Ð(ðaE
ðb Ð/ðcE
ðd Ð)ðeE
ðh ˜ðiE
ðj ˜	ðkE
ðl ˜ðmE
ðp Ð)ðqE
ðr ˜ðsE
ðt Ð+ðuE
ðv Ð*ðwE
ð E
ð E
ðx Ð,ðyE
ðz Ð+ð{E
ð| Ð,ð}E
ð~ Ð+ðE
ð@ Ð)ðAE
ðB Ð)ðCE
ðD ˜	ðEE
ðF Ð+ðGE
ðH ˜ðIE
ðJ ˜ðKE
ðL ™ðME
ñN ™ðOE
ñP Ñ(ðQE
ñR ™ðSE
ñT Ñ)ðUE
ñV Ñ)ðWE
ñX Ñ*ðYE
ð E
ð E
ñZ Ñ*ð[E
ñ\ Ñ,ð]E
ñ^ Ñ,ð_E
ñ` Ñ.ðaE
ñb Ñ,ðcE
ñd Ñ+ðeE
ñf ™	ðgE
ñh ™ðiE
ñl ˜ðmE
ñn ˜ðoE
ñp ™ðqE
ñr ™ðsE
ñt Ñ(ðuE
ñv ™
ðwE
ñx ™
ðyE
ñ| ™ð}E
ñ~ ™ðE
ð E
ð E
ñ@ ˜ðAE
ñD ˜ðEE
ñF ˜	ðGE
ñH ™ðIE
ñJ ™ðKE
ñL ™ðME
ñN ™ðOE
ñP ™ðQE
ñR ™ðSE
ñT ™ðUE
ñV ™ðWE
ñX ™ðYE
ñZ ™ð[E
ñ\ ™ð]E
ñ^ ™ð_E
ñ` ™ðaE
ñb ™ðcE
ð E
ð E
ñd Ñ+ðeE
ñf Ñ+ðgE
ñh ™	ðiE
ñj ™ðkE
ñl ™
ðmE
ñn ˜	ðoE
ñr ˜ðsE
ñt ˜ðuE
ñv ™
ðwE
ñx ˜ðyE
ñz ˜ð{E
ñ| Ñ(ð}E
ñ~ Ñ*ðE
ñB ˜ðCE
ñD ˜ðEE
ñF ˜ðGE
ñH ˜ðIE
ð E
ð E	
r"   c                  óÎ   — g d‘d‘d‘d‘d‘d‘d‘d‘d	‘d
‘d‘d‘d‘d‘d‘d‘d‘dddgf‘dddgf‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d ‘d!‘d"‘d#‘d$‘d%‘d&‘d'‘d(‘d)‘d*‘d+‘d,‘d-‘d.‘d/‘d0‘S )1N)ÚFileIDÚa8)ÚnLinesÚi2)ÚPixelsPerLinerd
  )ÚVersionrd
  )Ú
OldLutModerd
  )Ú
OldnColorsrd
  )ÚColorsÚu1rŒ  )ÚOldColorStartrd
  )Ú
ColorWidthrd
  )ÚExtraColorsrU	  )ræ   rÊ   )ÚnExtraColorsrd
  )ÚForegroundIndexrd
  )ÚBackgroundIndexrd
  )ÚXScalerO	  )ÚUnused2rd
  )ÚUnused3rd
  )ÚUnitsIDrd
  Úp1)rí   rd
  )rt  rd
  Úp2)ÚCurveFitTyperd
  )ÚnCoefficientsrd
  )ÚCoeffrO	  ræ   )ÚUMsizerj
  )ÚUMÚa15)ÚUnusedBooleanrj
  )Ú	BinaryPicÚb1)Ú
SliceStartrd
  )ÚSliceEndrd
  )ÚScaleMagnificationÚf4)ÚnSlicesrd
  )ÚSliceSpacingrƒ
  )ÚCurrentSlicerd
  )ÚFrameIntervalrƒ
  )ÚPixelAspectRatiorƒ
  )Ú
ColorStartrd
  )ÚColorEndrd
  )ÚnColorsrd
  )ÚFill1Ú3u2)ÚFill2r�
  )ÚTablerj
  )ÚLutModerj
  )ÚInvertedTabler
  )ÚZeroClipr
  )Ú	XUnitSizerj
  )ÚXUnitÚa11)Ú	StackTyperd
  r   r   r"   r    ÚNIH_IMAGE_HEADERzTIFF.NIH_IMAGE_HEADER-  s  € ð0
Øð0
àð0
ð $ð0
ð ð	0
ð
 !ð0
ð !ð0
ð &ð0
ð $ð0
ð !ð0
ð *ð0
ð #ð0
ð &ð0
ð &ð0
ð ð0
ð ð0
ð  ð!0
ð" ð#0
ð$ �K Ð-Ð.ð%0
ð& �K Ð-Ð.ð'0
ð( #ð)0
ð* $ð+0
ð, ð-0
ð. ð/0
ð0 ð10
ð2 $ð30
ð4  ð50
ð6 !ð70
ð8 ð90
ð: )ð;0
ð< ð=0
ð> #ð?0
ð@ #ðA0
ðB $ðC0
ðD 'ðE0
ðF !ðG0
ðH ðI0
ðJ ðK0
ðL ðM0
ðN ðO0
ðP ðQ0
ðR ðS0
ðT $ðU0
ðV ðW0
ðX  ðY0
ðZ ð[0
ð\  ð]0
ð 0	
r"   c                  ó   — dS )N)
ÚCustomTableÚAppleDefaultÚPseudo20ÚPseudo32ÚRainbowÚFire1ÚFire2ÚIceÚGraysr[
  r   r   r"   r    ÚNIH_COLORTABLE_TYPEzTIFF.NIH_COLORTABLE_TYPE`  s   € ð
ð 
r"   c                  ó   — dS )N)ÚPseudoColorÚOldAppleDefaultÚOldSpectrumÚ	GrayScaleÚColorLutÚCustomGrayscaler   r   r"   r    ÚNIH_LUTMODE_TYPEzTIFF.NIH_LUTMODE_TYPEn  s   € ð
ð 
r"   c                  ó   — dS )N)ÚStraightLineÚPoly2ÚPoly3ÚPoly4ÚPoly5ÚExpoFitÚPowerFitÚLogFitÚ
RodbardFitÚ	SpareFit1ÚUncalibratedÚUncalibratedODr   r   r"   r    ÚNIH_CURVEFIT_TYPEzTIFF.NIH_CURVEFIT_TYPEx  s   € ð
ð 
r"   c                  ó   — dS )N)Ú
NanometersÚMicrometersÚMillimetersÚCentimetersÚMetersÚ
KilometersÚInchesÚFeetÚMilesr�  Ú
OtherUnitsr   r   r"   r    ÚNIH_UNITS_TYPEzTIFF.NIH_UNITS_TYPEˆ  s   € ð
ð 
r"   c                  ó   — dS )N)ÚVolumeStackÚRGBStackÚ
MovieStackÚHSVStackr   r   r"   r    ÚNIH_STACKTYPE_TYPEzTIFF.NIH_STACKTYPE_TYPE—  s   € ØDÐDr"   c                  ó
   — g d¢S )N)*)rf
  rF	  )Ú	CommentV1Úa80)ÚHighTensionrF	  )ÚSphericalAberrationrF	  )ÚIlluminationAperturerF	  )ÚMagnificationrF	  )ÚPostMagnificationrF	  )r´  rF	  )ÚDefocusrF	  )ÚAstigmatismrF	  )ÚAstigmatismDirectionrF	  )ÚBiprismVoltagerF	  )ÚSpecimenTiltAnglerF	  )ÚSpecimenTiltDirectionrF	  )ÚIlluminationTiltDirectionrF	  )ÚIlluminationTiltAnglerF	  )Ú	ImageModerF	  )ÚEnergySpreadrF	  )ÚChromaticAberrationrF	  )ÚShutterTyperF	  )ÚDefocusSpreadrF	  )Ú	CcdNumberrF	  )ÚCcdSizerF	  )Ú	OffsetXV1rF	  )Ú	OffsetYV1rF	  )ÚPhysicalPixelSizerF	  )ÚBinningrF	  )ÚReadoutSpeedrF	  )ÚGainV1rF	  )ÚSensitivityV1rF	  )ÚExposureTimeV1rF	  )ÚFlatCorrectedrF	  )ÚDeadPxCorrectedrF	  )Ú	ImageMeanrF	  )ÚImageStdrF	  )ÚDisplacementXrF	  )ÚDisplacementYrF	  )ÚDateV1rF	  )ÚTimeV1rF	  )ÚImageMinrF	  )ÚImageMaxrF	  )ÚImageStatisticsQualityrF	  r   r   r"   r    ÚTVIPS_HEADER_V1zTIFF.TVIPS_HEADER_V1š  s   € ð+
ð +
ð +
ð +	
r"   c                  ó
   — g d¢S )N)6)rP  ÚV160)ÚImageFolderr÷
  )Ú
ImageSizeXrF	  )Ú
ImageSizeYrF	  )Ú
ImageSizeZrF	  )Ú
ImageSizeErF	  )ÚImageDataTyperF	  )ÚDaterF	  )ÚTimerF	  )ÚCommentÚV1024)r½  r  )ÚScalingÚ16f4)ÚImageStatisticsÚ16c16)r  rF	  )ÚImageDisplaTyperF	  )Ú
PixelSizeXrƒ
  )Ú
PixelSizeYrƒ
  )ÚImageDistanceZrƒ
  )ÚImageDistanceErƒ
  )Ú	ImageMiscÚ32f4)ÚTemTyper÷
  )ÚTemHighTensionrƒ
  )ÚTemAberrationsr  )Ú	TemEnergyr  )ÚTemModerF	  )ÚTemMagnificationrƒ
  )ÚTemMagnificationCorrectionrƒ
  )rÒ
  rƒ
  )ÚTemStageTyperF	  )ÚTemStagePositionÚ5f4)ÚTemImageShiftÚ2f4)ÚTemBeamShiftr  )ÚTemBeamTiltr  )ÚTilingParametersÚ7f4)ÚTemIlluminationÚ3f4)Ú
TemShutterrF	  )ÚTemMiscr  )Ú
CameraTyper÷
  )ÚPhysicalPixelSizeXrƒ
  )ÚPhysicalPixelSizeYrƒ
  )ÚOffsetXrF	  )ÚOffsetYrF	  )ÚBinningXrF	  )ÚBinningYrF	  )rA  rƒ
  )ÚGainrƒ
  )ÚReadoutRaterƒ
  )ÚFlatfieldDescriptionr÷
  )ÚSensitivityrƒ
  )ÚDoserƒ
  )ÚCamMiscr  )ÚFeiMicroscopeInformationr  )ÚFeiSpecimenInformationr  )ÚMagicrD	  r   r   r"   r    ÚTVIPS_HEADER_V2zTIFF.TVIPS_HEADER_V2É  s   € ð8
ð 8
ð 8
ð 8	
r"   c                  óF   — g d¢} dddddddd	d
d| dfdddddddddd| fdddgS )N))r€  Úa16)r…  rF	  )ÚOriginrO	  )Ú
ResolutionrO	  )ÚUnitÚa64)Ú
HeaderFlagrd
  )r  rj
  )rP  Úa257)Ú
OffsetDatarD	  )ÚPaletteSizerF	  )ÚOffsetPalette0rD	  )ÚOffsetPalette1rD	  )ÚCommentSizerF	  )ÚOffsetCommentrD	  rL  r\  )ÚOffsetPositionrD	  )ÚMapTyperd
  )ÚMapMinrO	  )ÚMapMaxrO	  )ÚMinValuerO	  )ÚMaxValuerO	  )Ú	OffsetMaprD	  )r  rO	  )ÚOffsetrO	  ÚGrayChannel)ÚOffsetThumbnailrD	  )Ú
VoiceFieldrF	  )ÚOffsetVoiceFieldrD	  r   )ÚMM_DIMENSIONs    r    Ú	MM_HEADERzTIFF.MM_HEADER  sp   € ð
ð 
ð 
ˆð !ØØ!Ø Ø!Ø$Ø$Ø!Ø#Ø˜<¨Ð,Ø$ØØØØØØØØØ˜LÐ)Ø%Ø Ø&ð/
ð 	
r"   c                  ó   — ddddddddddd	œ
S )
NrÂ  rÃ  rB  r@  rM   rË  rÑ  rÏ  )
rÂ  rÃ  rB  r@  ÚCHÚ
WAVELENGTHÚTIMErº  ÚEVENTÚEXPOSUREr   r   r"   r    rN  zTIFF.MM_DIMENSIONS'  s1   € ð ØØØØØØØØØð
ð 
ð 	
r"   c                  ó  — ddl m}  g dt          f‘dt          f‘dt          f‘dt          f‘d| f‘d| f‘d	t          f‘d
t          f‘dt          f‘dt          f‘d‘dt          f‘dt          f‘dt          f‘dt          f‘dt          f‘dt          f‘dt          f‘dt          f‘d‘d‘d| f‘d| f‘d| f‘d| f‘dt          f‘dt          f‘dt          f‘d‘d ‘d!‘d"‘d#‘d$‘d%‘d&‘d't
          f‘d(‘d)| f‘d*| f‘d+‘d,‘d-‘d.‘d/‘d0‘d1‘d2t          f‘d3‘d4t          f‘d5‘d6t          f‘d7| f‘d8| f‘d9t          f‘d:t          f‘d;t          f‘d<| f‘d=| f‘d>t          f‘d?t          f‘d@t          f‘dA| f‘dB| f‘dCt          f‘dDt          f‘S )ENr   r  Ú	AutoScaleÚMinScaleÚMaxScaleÚSpatialCalibrationÚXCalibrationÚYCalibrationÚCalibrationUnitsr€  ÚThreshStateÚThreshStateRed)Útagid_10NÚThreshStateGreenÚThreshStateBlueÚThreshStateLoÚThreshStateHiÚZoomÚ
CreateTimeÚLastSavedTimeÚcurrentBuffer)ÚgrayFitN)ÚgrayPointCountNÚgrayXÚgrayYÚgrayMinÚgrayMaxÚgrayUnitNameÚStandardLUTÚ
wavelength)ÚStagePositionú
(%i,2,2)u4)ÚCameraChipOffsetrq  )ÚOverlayMaskN)ÚOverlayCompressN)ÚOverlayN)ÚSpecialOverlayMaskN)ÚSpecialOverlayCompressN)ÚSpecialOverlayNÚImageProperty)Ú
StageLabelú%ipÚAutoScaleLoInfoÚAutoScaleHiInfo)Ú	AbsoluteZz(%i,2)u4)ÚAbsoluteZValidz(%i,)u4)r  r�   )ÚGammaRedr�   )Ú
GammaGreenr�   )Ú	GammaBluer�   )Ú	CameraBinr;  ÚNewLUT)ÚImagePropertyExNÚPlaneProperty)ÚUserLutTablez	(256,3)u1ÚRedAutoScaleInfoÚRedAutoScaleLoInfoÚRedAutoScaleHiInfoÚRedMinScaleInfoÚRedMaxScaleInfoÚGreenAutoScaleInfoÚGreenAutoScaleLoInfoÚGreenAutoScaleHiInfoÚGreenMinScaleInfoÚGreenMaxScaleInfoÚBlueAutoScaleInfoÚBlueAutoScaleLoInfoÚBlueAutoScaleHiInfoÚBlueMinScaleInfoÚBlueMaxScaleInfo)r  r  rÙ   rœ   r+  Úread_uic_image_propertyr  s    r    ÚUIC_TAGSzTIFF.UIC_TAGS6  s  € ð 	'Ð&Ð&Ð&Ð&Ð&ðD
Ø�#ÐðD
à�ÐðD
ð �ÐðD
ð "¥3Ð'ð	D
ð
 ˜XÐ&ðD
ð ˜XÐ&ðD
ð  ¥Ð%ðD
ð •SˆMðD
ð �CÐ ðD
ð �sÐ#ðD
ð ðD
ð  ¥Ð%ðD
ð ¥Ð$ðD
ð �cÐ"ðD
ð �cÐ"ðD
ð  •SˆMð!D
ð" �?Ð+ð#D
ð$ �oÐ.ð%D
ð& �cÐ"ð'D
ð( ð)D
ð* %ð+D
ð, �hÐð-D
ð. �hÐð/D
ð0 ˜Ð!ð1D
ð2 ˜Ð!ð3D
ð4 �SÐ!ð5D
ð6 �CÐ ð7D
ð8 �3Ðð9D
ð: ,ð;D
ð< /ð=D
ð> "ð?D
ð@ &ðAD
ðB ðCD
ðD )ðED
ðF -ðGD
ðH %ðID
ðJ Õ5Ð6ðKD
ðL "ðMD
ðN  Ð)ðOD
ðP  Ð)ðQD
ðR &ðSD
ðT *ðUD
ðV ðWD
ðX ðYD
ðZ  ð[D
ð\ ð]D
ð^  ð_D
ð` •sˆOðaD
ðb &ðcD
ðd �cÐ"ðeD
ðf *ðgD
ðh  ¥Ð%ðiD
ðj " 8Ð,ðkD
ðl " 8Ð,ðmD
ðn ¥Ð$ðoD
ðp ¥Ð$ðqD
ðr "¥3Ð'ðsD
ðt $ XÐ.ðuD
ðv $ XÐ.ðwD
ðx !¥#Ð&ðyD
ðz !¥#Ð&ð{D
ð| !¥#Ð&ð}D
ð~ # HÐ-ðD
ð@ # HÐ-ðAD
ðB  ¥Ð%ðCD
ðD  ¥Ð%ðED
ð D	
r"   c                  ó„  — i dt          dd ¦  «        gt          f“dddgt          f“ddgt          f“ddgt          f“ddgt          f“d	dgt          f“d
dgt          f“ddgt          f“dddgt          f“ddgt          f“ddgt          f“ddgt          f“ddgt          f“ddgt          f“ddgt          f“dddgt          f“ddgt          f“i ddgt          f“dddgt          f“ddgt          f“ddgt          f“ddgt          f“ddgt          f“ddgt          f“ddgt          f“ddgt          f“ddgt          f“d dgt          f“d!dgt          f“d"dgt          f“d#dgt          f“d$t          dd ¦  «        gt          f“d%dgt          f“d&dgt          f“¥dgt          fdgt          fdgt          fdgt          fd'œ¥S )(NÚDetectorr&   Ú
Pixel_sizerŒ   ÚSiliconrÊ   ÚExposure_timeÚExposure_periodÚTauÚCount_cutoffÚThreshold_settingÚGain_settingr‘   ÚN_excluded_pixelsÚExcluded_pixelsÚ
Flat_fieldÚ	Trim_fileÚ
Image_pathrE
  ÚEnergy_rangeÚDetector_distanceÚDetector_VoffsetÚBeam_xyÚFluxÚFilter_transmissionÚStart_angleÚAngle_incrementÚDetector_2thetaÚPolarizationÚAlphaÚKappaÚPhiÚPhi_incrementÚChiÚChi_incrementÚOscillation_axisÚN_oscillationsÚStart_position)ÚPosition_incrementÚShutter_timeÚOmegaÚOmega_increment)r  rœ   r›  rÙ   r   r"   r    ÚPILATUS_HEADERzTIFF.PILATUS_HEADER�  sÑ  € ð(
Ø�%  4™.œ.Ð)­3Ð/ð(
à˜A˜q˜6¥5˜/ð(
ð ˜˜�U�|ð(
ð ˜q˜c¥5˜\ð	(
ð
   ¥U˜|ð(
ð �Q�C��<ð(
ð ˜a˜S¥#˜Jð(
ð   1 #¥u ð(
ð ˜a ˜V¥S˜Mð(
ð   1 #¥s ð(
ð   ¥S˜zð(
ð ˜A˜3¥˜*ð(
ð ˜1˜#�s˜ð(
ð ˜A˜3¥˜*ð(
ð  ˜A˜3¥˜,ð!(
ð" ˜a ˜V¥U˜Oð#(
ð$   1 #¥u ð%(
ð (
ð&  ! ¥e ð'(
ð( ˜˜A˜¥�ð)(
ð* �a�S�#�Jð+(
ð, " Q C­ <ð-(
ð. ˜Q˜C¥˜<ð/(
ð0   ¥U˜|ð1(
ð2   ¥U˜|ð3(
ð4 ˜a˜S¥%˜Lð5(
ð6 �q�c�5�\ð7(
ð8 �q�c�5�\ð9(
ð: �Q�C��<ð;(
ð< ˜q˜c¥5˜\ð=(
ð> �Q�C��<ð?(
ð@ ˜q˜c¥5˜\ðA(
ðB ¥%¨¨4¡.¤.Ð!1µ3Ð 7ðC(
ðD  ˜s¥C˜jðE(
ðF  ˜s¥E˜lðG(
ð (
ðH %& 3­ ,Ø˜S¥%˜LØ�c�5�\Ø!" ¥U˜|ðO(
ð (
ð (
ð (	
r"   c                  ó   — 	 dS )Ns    €@À  `à�PÐ0°pðˆHÈ(¨hè˜XØ8¸xø„DÄ$¤dä”TÔ4´tôŒLÌ,¬lìœ\Ü<¼|ü‚BÂ"¢bâ’RÒ2²rò
ŠJÊ*ªjêšZÚ:ºzú†FÆ&¦fæ–VÖ6¶vöŽNÎ.®nîž^Þ>¾~þ�AÁ!¡aá‘QÑ1±qñ	‰IÉ)©ié™YÙ9¹yù…EÅ%¥eå•UÕ5µuõ�MÍ-­mí�]Ý=½}ýƒCÃ#£cã“SÓ3³só‹KË+«kë›[Û;»{û‡GÇ'§gç—W×7·w÷�OÏ/¯oïŸ_ß?¿ÿr   r   r"   r    ÚREVERSE_BITORDER_BYTESzTIFF.REVERSE_BITORDER_BYTES®  s   € ð!ð	
ð 	
r"   c                  óB   — t          j        t          j        d¬¦  «        S )Nr   rÖ   )r<   r×  rO   rÁ  r   r"   r    ÚREVERSE_BITORDER_ARRAYzTIFF.REVERSE_BITORDER_ARRAYÀ  s   € åÔ¥Ô ;À7ÐKÑKÔKÐKr"   c                  ó   — dd l } | j        S rA  )ÚmmaprP   )rÅ  s    r    rP   zTIFF.ALLOCATIONGRANULARITYÄ  s   € àˆˆˆàÔ)Ð)r"   N)Brh   rp   rq   rr   rP  rý   rÒ  rÕ  r¸  rÙ  rË  r½  r^  rT  r¾  r¿  rÀ  rY  rÁ  r9  rm  rÂ  rÃ  r  r'  rm  rÑ  rþ   rÁ  r`  r#  rÁ  rå  r»  rÀ  rš  rØ  rä  r	  r	  rf  rg  r  r›	  rÈ  rÁ  r¤	  r¦	  r°	  rº	  r_
  r—
  r¢
  rª
  r¸
  rÄ
  rÊ
  rõ
  r1  rM  rN  r˜  r¿  rÁ  rÃ  rP   r   r"   r    rO   rO   ™  sä  € € € € € à)Ð)ðm	
ð m	
ð m	
ð^4ð 4ð 4ð!
ð !
ð !
ðF@ð @ð @ð
ð 
ð 
ð2
ð 
ð 
ð,ð ð ðð ð ð3ð 3ð 3ðjð ð ð&ð ð ðð ð ðð ð ðð ð ð ð  ð  ðð ð ðð ð ð!ð !ð !ðð ð ðð ð ð	ð 	ð 	ðð ð ð0
ð 
ð 
ð:
ð 
ð 
ð$.
ð .
ð .
ð`-ð -ð -ð^@ð @ð @ðDBð Bð Bð
ð 
ð 
ð
ð 
ð 
ð ð  ð  ðð ð ð.&ð &ð &ðð ð ð*"
ð "
ð "
ðH
ð 
ð 
ð2
ð 2
ð 2
ðhð ð ð?
ð ?
ð ?
ðB
ð 
ð 
ð<
ð 
ð 
ð 

ð 

ð 

ð
ð 
ð 
ð
ð 
ð 
ð

ð 

ð 

ð
ð 
ð 
ðF
ð F
ð F
ðP1
ð 1
ð 1
ðf
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð 
ð 
ð 
ðEð Eð Eð-
ð -
ð -
ð^9
ð 9
ð 9
ðv!
ð !
ð !
ðF
ð 
ð 
ðI
ð I
ð I
ðV+
ð +
ð +
ðZ
ð 
ð 
ð$Lð Lð Lð*ð *ð *ð *ð *r"   rO   c                 ó&	  — |dk    r|dz   }d}|dz   }d}	|dz   }
|dz   }n.|dk    r|d	z   }d}|d	z   }d
}	|dz   }
|dz   }nt          d¦  «        ‚|€i }|€d}g }t          j        }|                      ¦   «         }t	          |¦  «        |k     �rõ	  |||                      |¦  «        ¦  «        d         }|dk    rt          d¦  «        ‚n(# t          $ r t          j        d|z  ¦  «         Y �n•w xY wi }|                      |	|z  ¦  «        }|                      ¦   «         }d}t          |¦  «        D �]®} ||
|||dz   …         ¦  «        \  }} ||||dz   ||	z   …         ¦  «        \  }}||	z  }| 
                    |t          |¦  «        ¦  «        }	 t          j        |         }n+# t          $ r t                               d|z  ¦  «        ‚w xY wd||t#          |d         ¦  «        z  |d         fz  }t          j        |¦  «        }||k    s||v rê |||¦  «        d         }|dk     s|| j        |z
  k    rt                               d|z  ¦  «        ‚|                      |¦  «         ||v r||         d         } || ||||¦  «        }n¡|dk    s|dk    r |d         dk    rt+          | ||||¦  «        }nu||v s|d         dk    r  |||                      |¦  «        ¦  «        }nEt-          | ||||¦  «        }n1|d         dk    s|dk    r|d|…         }n |||d|…         ¦  «        }||vr)|t          j        vrt	          |¦  «        dk    r|d         }|dk    rx|d         dk    rlt1          |t2          ¦  «        rW	 t5          t7          |¦  «                             ¦   «         ¦  «        }n'# t:          $ r t          j        d|z  ¦  «         Y nw xY w|||<   �Œ°|                     |¦  «         |                      |¦  «          |||                      |¦  «        ¦  «        d         }|dk    rnL|| j        k    rt          j        d|z  ¦  «         n)|                      |¦  «         t	          |¦  «        |k     �°õ|r|dk    r|d         }|S )z|Read tags from chain of IFDs and return as list of dicts.

    The file handle position must be at a valid IFD header.

    rŒ   r�   r‘   rŽ   r�   rü   rá  rˆ   rŠ   r‰   rà  zinvalid offset sizeNrâ  r   r‘  r’  r“  rÌ  rÍ  r&   zinvalid tag value offset %irË  rÁ   rÈ   rú   rÎ  zinvalid page offset %i)r,   rº   ré  r˜   r.   rè  r@   r    r¡   rq  rA   rœ   rO   rÑ  rÿ   r¶  r·  rÙ   r  rH   r%   rÓ  rÔ  rÕ  r(   rë   rÖ  r×  r±  rØ  r7   )r¼   r9   r  ÚtagnamesÚ
customtagsÚmaxifdsr  rê  rŒ  r�  rë  rì  rZ   ré  rU   r—  r  rD   r½   r‰  r[   r  rÛ  r  rl   rÜ  r=   rö   rH   rÜ  s                                 r    Ú	read_tagsrÊ  Ë  sR  € ð �Q‚€Ø  3‘ˆØˆ	Ø #‘oˆØˆØ Ñ%ˆ
Ø Ñ&ˆ
ˆ
Ø	�qŠˆØ  3‘ˆØˆ	Ø #‘oˆØˆØ Ñ%ˆ
Ø Ñ&ˆ
ˆ
åÐ.Ñ/Ô/Ð/àÐØˆ
Ø€Øˆà€FÝŒ]€FØ�WŠW‰YŒY€FÝ
ˆf‰+Œ+˜Ò
Ñ
ð	Ø�F˜;¨¯ª°	Ñ(:Ô(:Ñ;Ô;¸AÔ>ˆEØ�tŠ|ˆ|Ý Ð!<Ñ=Ô=Ð=ð øåð 	ð 	ð 	ÝŒMÐ;¸fÑDÑEÔEÐEØ‰Eð	øøøð ˆØ�wŠw�w ‘Ñ'Ô'ˆØ�gŠg‰iŒiˆØˆÝ�u‘”ð *	ñ *	ˆAØ ˜& ¨T°%¸%À!¹)Ð2CÔ-DÑEÔE‰KˆD�%Ø!˜6 *¨d°5¸1±9¸uÀw¹Ð3NÔ.OÑPÔP‰LˆE�5Ø�WÑˆEØ—<’< ¥c¨$¡i¤iÑ0Ô0ˆDðHÝÔ)¨%Ô0��øÝð Hð Hð HÝ—m’mÐ$>ÀÑ$FÑGÔGÐGðHøøøð ˜i¨µ°U¸1´X±´Ñ)>ÀÀaÄÐIÑIˆCÝ”? 3Ñ'Ô'ˆDØ�jÒ Ð  D¨JÐ$6Ð$6Ø˜ ¨eÑ4Ô4°QÔ7�Ø˜A’:�: ¨"¬'°D©.Ò!8Ð!8Ý!Ÿ-š-Ð(EÈÑ(NÑOÔOÐOØ—’˜‘”�Ø˜:Ð%Ð%Ø)¨$Ô/°Ô2�HØ$˜H R¨°E¸5À*ÑMÔM�E�EØ˜a’Z�Z E¨A¢I I°%¸´)¸sÒ2BÐ2BÝ& r¨9°e¸UÀJÑOÔO�E�EØ˜XÐ%Ð%¨¨r¬°cÒ)9Ð)9Ø"˜F 3¨¯ª°©¬Ñ6Ô6�E�Eå& r¨9°e¸UÀJÑOÔO�E�EØ�r”˜cÒ!Ð! U¨a¢Z ZØ˜e˜t˜eœ��à˜˜s E¨%¨4¨%¤LÑ1Ô1�à˜:Ð%Ð%¨$µd´nÐ*DÐ*DÝ�u‘:”: ’?�?Ø! !œH�EØ˜Šzˆz˜e Bœi¨3Ò.Ð.µ:¸eÅUÑ3KÔ3KÐ.ðTÝ%¥j°Ñ&7Ô&7×&=Ò&=Ñ&?Ô&?Ñ@Ô@�E�EøÝ)ð Tð Tð TÝ”MÐ"KÈdÑ"RÑSÔSÐSÐSÐSðTøøøð ˆD�‰J‰Jà�Š�dÑÔÐà
�Š�‰ŒˆØ�˜ b§g¢g¨jÑ&9Ô&9Ñ:Ô:¸1Ô=ˆØ�QŠ;ˆ;ØØ�R”WÒÐÝŒMÐ2°VÑ;Ñ<Ô<Ð<ØØ
�Š�‰ŒˆõG ˆf‰+Œ+˜Ò
Ñ
ðJ ð �'˜Q’,�,Ø˜”ˆØ€Ms0   Â:C Ã!C-Ã,C-ÆF%Æ%(GÎ.N1Î1!OÏOc                 ó�  — t          | ||t          j        d¬¦  «        }dD ]+}	 t          ||         ¦  «        ||<   Œ# t          $ r Y Œ(w xY wd|v ru|d         dd…         }	 |dk    r!t          |d         dd…         ¦  «        |d<   n,|dk    r&|d         dd…                              d	¦  «        |d<   n# t          $ r Y nw xY w|S )
z,Read EXIF tags from file and return as dict.r&   ©rÉ  )r¢  rã  rÇ  Nrˆ   s   ASCII   s   UNICODE úutf-16)rÊ  rO   rä  rÖ  r@   r—  )r¼   r9   r=   r  r  ÚexifrÜ  Úidcodes           r    rµ  rµ  4  s  € å�R˜ Jµ´ÈÐJÑJÔJ€DØ2ð ð ˆð	Ý" 4¨¤:Ñ.Ô.ˆD�‰JˆJøÝð 	ð 	ð 	ØˆDð	øøøà˜ÐÐØ�mÔ$ R a RÔ(ˆð	ØÐ-Ò-Ð-Ý&/°°]Ô0CÀAÀBÀBÔ0GÑ&HÔ&H��]Ñ#Ð#Ø˜>Ò)Ð)Ø&*¨=Ô&9¸!¸"¸"Ô&=×&DÒ&DÀXÑ&NÔ&N��]Ñ#øøÝð 	ð 	ð 	ØˆDð	øøøà€Ks"   ¤=½
A
Á	A
Á"AB6 Â6
CÃCc                 ó>   — t          | ||t          j        d¬¦  «        S )z+Read GPS tags from file and return as dict.r&   rÌ  )rÊ  rO   r	  ©r¼   r9   r=   r  r  s        r    r¶  r¶  H  s   € å�R˜ Jµ´ÀqÐIÑIÔIÐIr"   c                 ó2   — ddi}t          | |||d¬¦  «        S )z8Read Interoperability tags from file and return as dict.r&   r  rÌ  )rÊ  )r¼   r9   r=   r  r  Ú	tag_namess         r    r·  r·  M  s&   € àÐ+Ð,€IÝ�R˜ J°	À1ÐEÑEÔEÐEr"   c                 ó  — |d         dk    rdn
||d         z   }|t          j        |¦  «        j        z  }|                      |¦  «        }t	          |¦  «        |k    r&t          j        dt	          |¦  «        |fz  ¦  «         |S )z2Read tag data from file and return as byte string.rÁ   rú   rÈ   z failed to read all bytes: %i, %i)r<   r=   r>   rè  r.   r    r¡   ©r¼   r9   r=   r  r  rD   s         r    rÓ  rÓ  S  s   € à˜”9 Ò#Ð#ˆCˆC¨°U¸2´YÑ)>€EØ	�UŒ[˜ÑÔÔ(Ñ(€EØ�7Š7�5‰>Œ>€DÝ
ˆ4�y„y�EÒÐÝŒÐ8½CÀ¹I¼IÀuÐ;MÑMÑNÔNÐNØ€Kr"   c                 óR   — |                       |¦  «                             d¦  «        S )z5Read tag data from file and return as unicode string.rÅ  )rè  r—  rÑ  s        r    Ú	read_utf8r×  ]  s    € à�7Š7�5‰>Œ>× Ò  Ñ)Ô)Ð)r"   c                 ó`   — |d         dk    rdn
||d         z   }|                       ||¦  «        S )z2Read tag data from file and return as numpy array.rÁ   rú   r{  ©r  rÑ  s        r    rÔ  rÔ  b  s6   € à˜”9 Ò#Ð#ˆCˆC¨°U¸2´YÑ)>€EØ�=Š=˜ Ñ&Ô&Ð&r"   c                 óR   — |                       ||d         z   |¦  «        }d|_        |S )z7Read ColorMap data from file and return as numpy array.rÁ   )rÊ   rÁ   )r  rE   )r¼   r9   r=   r  r  Úcmaps         r    r©  r©  h  s*   € à�=Š=˜ U¨2¤YÑ.°Ñ6Ô6€DØ€D„JØ€Kr"   c                 óÜ   — |                       |¦  «        }	 t          j        t          t	          |¦  «        d¦  «        ¦  «        S # t
          $ r t          j        d|z  ¦  «         Y dS w xY w)z2Read JSON tag data from file and return as object.rÅ  úinvalid JSON '%s'N)rè  ÚjsonÚloadsÚunicoder   r,   r    r¡   rÕ  s         r    r´  r´  o  sp   € à�7Š7�5‰>Œ>€Dð2ÝŒz�'¥)¨D¡/¤/°7Ñ;Ô;Ñ<Ô<Ð<øÝð 2ð 2ð 2ÝŒÐ)¨DÑ0Ñ1Ô1Ð1Ð1Ð1Ð1ð2øøøs   —.A Á!A+Á*A+c                 ól  — |                       t          j        |¬¦  «        }t          |¦  «        }d„ |d         D ¦   «         |d<   |d         }t	          |d         ¦  «                             ¦   «         |d         |d         |d         t	          |d	         ¦  «                             ¦   «         f|d<   |S )
z9Read FluoView mm_header tag from file and return as dict.r:  c           
      óÔ   — g | ]e}t          |d          ¦  «                             ¦   «         |d         |d         |d         t          |d         ¦  «                             ¦   «         f‘ŒfS )r   r&   r‘   rÊ   rŒ   )rÖ  r±  )r   r—  s     r    rK  z"read_mm_header.<locals>.<listcomp>|  sk   € ð ð ð àõ 
�1�Q”4‰Œ×	Ò	Ñ	 Ô	  ! A¤$¨¨!¬¨a°¬dµI¸aÀ¼d±O´O×4IÒ4IÑ4KÔ4KÐLðð ð r"   rL  rH  r   r&   r‘   rÊ   rŒ   )r>  rO   rM  Úrecarray2dictrÖ  r±  )r¼   r9   r=   r  r  Úmmhr—  s          r    r®  r®  x  s´   € à
�.Š.�œ°9ˆ.Ñ
=Ô
=€CÝ
˜Ñ
Ô
€Cðð à�\Ô"ðñ ô €CˆÑð 	ˆMÔ€Aå�!�A”$‰Œ×ÒÑÔØ	ˆ!ŒØ	ˆ!ŒØ	ˆ!ŒÝ�!�A”$‰Œ×ÒÑÔð€CˆÑð €Jr"   c                 ó4   — |                       |dz   d¦  «        S )zARead FluoView mm_stamp tag from file and return as numpy.ndarray.rO	  rˆ   rÙ  rÑ  s        r    r¯  r¯  ‹  s   € à�=Š=˜ TÑ)¨1Ñ-Ô-Ð-r"   c                 ó®  — |dv r|dk    sJ ‚i }|dk    rI|                       dd|z  ¦  «                             |d¦  «        }d|dd…df         |dd…d	f         z  i}nw|rut          |¦  «        D ]e}t          j        d
|                      d¦  «        ¦  «        d         }	|	dv r|                      d¦  «         ŒJt          | |	|d¬¦  «        \  }
}|||
<   Œf|S )zuRead MetaMorph STK UIC1Tag from file and return as dict.

    Return empty dictionary if planecount is unknown.

    )r;  rq  r…   r;  ú<u4r‘   r&  Nr   r&   ú<IrŒ   )r†  r‡  é%   é(   é)   TrÌ  )r  rd  rq  rº   ré  rè  Úread_uic_tag)r¼   r9   r=   r  r  Ú
planecountrZ   r   r[   rm  rÜ  rl   s               r    r¿  r¿  �  s  € ð �LÐ Ð  Y°#Ò%5Ð%5Ð%5Ð5Ø€FØ�‚}€}à—’˜u a¨%¡iÑ0Ô0×8Ò8¸ÀÑBÔBˆØ˜v a a a¨ dœ|¨f°Q°Q°Q¸°T¬lÑ:Ð;ˆˆØ	ð !Ý�u‘”ð 	!ð 	!ˆAÝ”M $¨¯ª°©
¬
Ñ3Ô3°AÔ6ˆEØÐ,Ð,Ð,à—’˜‘
”
�
ØÝ& r¨5°*ÀTÐJÑJÔJ‰KˆD�%Ø ˆF�4‰LˆLØ€Mr"   c                 ó  — |dk    r|dk    sJ ‚|                       dd|z  ¦  «                             |d¦  «        }|dd…df         |dd…df         z  |dd…df         |dd…d	f         |dd…d
f         |dd…df         dœS )z8Read MetaMorph STK UIC2Tag from file and return as dict.r;  r…   rç  ræ   Nr   r&   r‘   rÊ   rŒ   rå   )r&  r/  r'  r2  r(  ©r  rd  ©r¼   r9   r=   rí  r  r   s         r    rª  rª  ¨  s­   € à�DŠ=ˆ=˜Y¨#Ò-Ð-Ð-Ð-Ø�]Š]˜5 ! j¡.Ñ1Ô1×9Ò9¸*ÀaÑHÔH€Fà˜A˜A˜A˜q˜D”\ F¨1¨1¨1¨a¨4¤LÑ0Ø˜a˜a˜a ˜d”|Ø˜a˜a˜a ˜d”|Ø˜q˜q˜q !˜tœØ˜q˜q˜q !˜tœðð ð r"   c                 ó®   — |dk    r|dk    sJ ‚|                       dd|z  ¦  «                             |d¦  «        }d|dd…df         |dd…df         z  iS )	z8Read MetaMorph STK UIC3Tag from file and return as dict.r;  r…   rç  r‘   ÚWavelengthsNr   r&   rï  rð  s         r    r«  r«  µ  sj   € à�DŠ=ˆ=˜Y¨#Ò-Ð-Ð-Ð-Ø�]Š]˜5 ! j¡.Ñ1Ô1×9Ò9¸*ÀaÑHÔH€FØ˜6 ! ! ! Q $œ<¨&°°°°A°¬,Ñ6Ð7Ð7r"   c                 óÊ   — |dk    r|dk    sJ ‚i }	 t          j        d|                      d¦  «        ¦  «        d         }|dk    rnt          | ||d¬¦  «        \  }}|||<   ŒQ|S )	z8Read MetaMorph STK UIC4Tag from file and return as dict.rq  r…   Tz<Hr‘   r   FrÌ  )rº   ré  rè  rì  )	r¼   r9   r=   rí  r  rZ   rm  rÜ  rl   s	            r    r¬  r¬  ¼  s€   € à�DŠ=ˆ=˜Y¨#Ò-Ð-Ð-Ð-Ø€FðÝ”˜d B§G¢G¨A¡J¤JÑ/Ô/°Ô2ˆØ�AŠ:ˆ:ØÝ" 2 u¨jÀÐGÑGÔG‰ˆˆeØˆˆt‰ðð €Mr"   c                 óþ  ‡ — dˆ fd„	}	 t           j        |         \  }}n# t          $ r d|z   |¦   «         fcY S w xY wt           j        d         d         }|rn‰                      ¦   «         }|t          dfvrO |¦   «         }	|	dk     r*|t
          u r|dfS t          j        d||	fz  ¦  «         ||	fS ‰                      |	¦  «         |€d	|z   } |¦   «         }
�nˆ|t          u r |¦   «         }
�ns||u r |d
¦  «        }
|
d         |
d         z  }
�nQ|t          u rt           |d
¦  «        Ž }
�n4|t          u rt          ‰ ¦  «        }
�n|t
          u r  |¦   «         }d|cxk    rdk     rZn nWt          j        d|z  ‰                      |¦  «        ¦  «        d         dd…         }
t          t          |
¦  «        ¦  «        }
�n |rd}
t          j        d|z  ¦  «         �nƒt!          d|z  ¦  «        ‚|dk    rÅg }
t#          |¦  «        D ]²} |¦   «         }d|cxk    rdk     rnn nkt          j        d|z  ‰                      |¦  «        ¦  «        d         dd…         }t          t          |¦  «        ¦  «        }|
                     |¦  «         Œ‡|rt          j        d|z  ¦  «         Œ¡t!          d|z  ¦  «        ‚n¦d|z   }d|v r||z  }d|v r?‰                      |d¦  «        d         }
|
j        d         d
k    r|
d         |
d         z  }
nUt          j        |‰                      t          j        |¦  «        ¦  «        ¦  «        }
t-          |
¦  «        dk    r|
d         }
|r‰                      |dz   ¦  «         ||
fS )zgRead a single UIC tag value from file and return tag name and value.

    UIC1Tags use an offset.

    r&   c                 ó€   •— t          j        d| z  ‰                     d| z  ¦  «        ¦  «        }| dk    r|d         n|S )Nz<%iIrŒ   r&   r   )rº   ré  rè  )r  rl   r¼   s     €r    Úread_intzread_uic_tag.<locals>.read_intÐ  s>   ø€ Ý”˜f u™n¨b¯gªg°a¸%±iÑ.@Ô.@ÑAÔAˆØ  Aš:˜:ˆu�QŒxˆx¨5Ð0r"   z_TagId%irŒ   Nrˆ   r,  z#invalid offset for uic tag '%s': %ir[   r‘   r   r	  ú%isrÁ   zcorrupt string in uic tag '%s'zinvalid string size: %ir{  r…   z%iú(r  ).r&   rà   )rO   r˜  rŸ  r˜   rÙ   rœ   r    r¡   r%   r+  r—  rº   ré  rè  rÖ  r   r,   rq  r7   r  rE   r  r.   )r¼   rm  rí  rU   rö  rÜ  r=   r  r½   Úoffrl   rH   r[   Ústrings   `             r    rì  rì  É  sý  ø€ ð1ð 1ð 1ð 1ð 1ð 1ð.Ý”m EÔ*‰ˆˆeˆeøÝð .ð .ð .à˜EÑ! 8 8¡:¤:Ð-Ð-Ð-Ð-ð.øøøõ Œ}˜QÔ Ô"€Hàð 	Ø�gŠg‰iŒiˆØ�˜d˜Ð#Ð#Ø�(‘*”*ˆCØ�QŠwˆwØ�C�<�<Ø ˜8�OÝ”ÐCÀtÈSÀkÑQÑRÔRÐRØ˜S�yÐ Ø�GŠG�C‰LŒLˆLà€}à�T‰zˆØ�‘
”
ˆ‰Ø	•#ˆˆà�‘
”
ˆ‰Ø	�(Ð	Ð	à�˜‘”ˆØ�a”˜5 œ8Ñ#ˆ‰Ø	•/Ð	!Ð	!å  ¨!¡¤Ð-ˆ‰Ø	Õ)Ð	)Ð	)å'¨Ñ+Ô+ˆ‰Ø	•#ˆˆàˆx‰zŒzˆØ�ÐÐÒÐ�uÒÐÐÐÐÝ”M %¨$¡,°·²¸±´Ñ>Ô>¸qÔAÀ#À2À#ÔFˆEÝ�i¨Ñ.Ô.Ñ/Ô/ˆE‰EØð 	?ØˆEÝŒMÐ:¸TÑAÑBÔBÐBÑBåÐ6¸Ñ=Ñ>Ô>Ð>Ø	�%ŠˆàˆÝ�zÑ"Ô"ð 		Cð 		CˆAØ�8‘:”:ˆDØ�DÐ Ð Ò Ð ˜5Ò Ð Ð Ð Ð Ýœ u¨t¡|°R·W²W¸T±]´]ÑCÔCÀAÔFÀsÈÀsÔK�Ý"¥9¨VÑ#4Ô#4Ñ5Ô5�Ø—’˜VÑ$Ô$Ð$Ð$Øð CÝ”Ð>ÀÑEÑFÔFÐFÐFå Ð!:¸TÑ!AÑBÔBÐBð		Cð �e‘ˆØ�5ˆ=ˆ=Ø˜JÑ&ˆEØ�%ˆ<ˆ<à—M’M %¨Ñ+Ô+¨AÔ.ˆEØŒ{˜2Œ !Ò#Ð#à˜fœ¨¨f¬Ñ5�øõ ”M %¨¯ªµ´ÀÑ1GÔ1GÑ)HÔ)HÑIÔIˆEÝ�5‰zŒz˜QŠˆØ˜aœ�àð Ø
�Š��a‘ÑÔÐà�ˆ;Ðs   ‰ Ÿ;º;c                 óˆ  — t          j        d|                      d¦  «        ¦  «        d         }t          j        d|z  |                      |¦  «        ¦  «        d         dd…         }t          j        d|                      d¦  «        ¦  «        \  }}|dk    r:t          j        d	|                      d
¦  «        ¦  «        }|d         |d         z  }n_t          j        d|                      d¦  «        ¦  «        d         }t          j        d|z  |                      |¦  «        ¦  «        d         }t          |||¬¦  «        S )z:Read UIC ImagePropertyEx tag from file and return as dict.rÈ   r&   r   r÷  NrÁ   z<IBrå   ÚIIrˆ   )rÜ  r   rl   )rº   ré  rè  rÖ  )r¼   rH   rÜ  r   Úproprl   s         r    r—  r—  '  s  € õ Œ=˜˜bŸgšg a™jœjÑ)Ô)¨!Ô,€DÝŒ=˜ ™ r§w¢w¨t¡}¤}Ñ5Ô5°aÔ8¸¸"¸Ô=€DÝ”-  r§w¢w¨q¡z¤zÑ2Ô2�K€Eˆ4Øˆq‚y€yÝ”˜d B§G¢G¨A¡J¤JÑ/Ô/ˆØ�a”˜5 œ8Ñ#ˆˆåŒ}˜S "§'¢'¨!¡*¤*Ñ-Ô-¨aÔ0ˆÝ”˜e d™l¨B¯GªG°D©M¬MÑ:Ô:¸1Ô=ˆÝ�T ¨eÐ4Ñ4Ô4Ð4r"   c                 ó
  — |dk    sJ ‚t          j        d|                      d¦  «        ¦  «        \  }}|dvrt          d¦  «        ‚|                      dd¦  «         |t          j        t          j        ¦  «        j	        k     rRg }d}t          j        D ]@\  }	}|t          j        |¦  «        j	        z  }||k    r n| 
                    |	|f¦  «         ŒAnt          j        }|                      ||¬	¦  «        }t          |¦  «        }t          j                             ¦   «         D ]\\  }	}
|
€Œ|                     d|	z   d¦  «        }|dk     rŒ(|                      |¦  «         	  |
| ¦  «        ||	<   ŒM# t          $ r Y ŒYw xY w|S )z1Read CZ_LSMINFO tag from file and return as dict.r…   ú<IIrˆ   )iLI iLI zinvalid CZ_LSMINFO structureiøÿÿÿr&   r   r:  NrG  )rº   ré  rè  r,   r%   r<   r=   rO   r  r>   r7   r>  rã  r›	  rä  rA   )r¼   r9   r=   r  r  Úmagic_numberÚstructure_sizeÚlsminforH   rÜ  ÚreaderrU   s               r    r°  r°  6  s�  € à˜ÒÐÐÐÝ#)¤=°¸¿ºÀ¹
¼
Ñ#CÔ#CÑ €L�.ØÐ/Ð/Ð/ÝÐ7Ñ8Ô8Ð8Ø‡G‚GˆB��N„N€Nà�œ¥D¤OÑ4Ô4Ô=Ò=Ð=àˆØˆÝœ?ð 	*ð 	*‰KˆD�%Ø•E”K Ñ&Ô&Ô/Ñ/ˆDØ�nÒ$Ð$Ø�Ø�NŠN˜D %˜=Ñ)Ô)Ð)Ð)øå”/ˆà�nŠn˜W°	ˆnÑ:Ô:€GÝ˜GÑ$Ô$€Gõ Ô/×5Ò5Ñ7Ô7ð 
ð 
‰ˆˆfØˆ>ØØ—’˜X¨™_¨aÑ0Ô0ˆØ�AŠ:ˆ:ØØ
�Š�‰Œˆð	Ø"˜F 2™JœJˆG�D‰MˆMøÝð 	ð 	ð 	ØˆDð	øøøà€Ns   Å$E3Å3
F Å?F c                 óŒ   — t          j        d|                      d¦  «        ¦  «        d         }|                      d|¬¦  «        S )z>Read LSM sequence of float pairs from file and return as list.ú<irŒ   r   ú<2f8©r  ©rº   ré  rè  r  ©r¼   rH   s     r    rš	  rš	  \  ó8   € åŒ=˜˜rŸwšw q™zœzÑ*Ô*¨1Ô-€DØ�=Š=˜ tˆ=Ñ,Ô,Ð,r"   c                 óŒ   — t          j        d|                      d¦  «        ¦  «        d         }|                      d|¬¦  «        S )z0Read LSM positions from file and return as list.rè  rŒ   r   r  r  r  r	  s     r    Úread_lsm_positionsr  b  r
  r"   c                 óÊ   — t          j        d|                      d¦  «        ¦  «        \  }}|dd|z  z   k    rt          j        d¦  «         g S |                      d|¬¦  «        S )z2Read LSM time stamps from file and return as list.z<iirˆ   zinvalid LSM TimeStamps blockz<f8r  )rº   ré  rè  r    r¡   r  )r¼   rH   r  s      r    r—	  r—	  h  s`   € å”-  r§w¢w¨q¡z¤zÑ2Ô2�K€Dˆ%Ø��A˜‘I‘ÒÐÝŒÐ4Ñ5Ô5Ð5Øˆ	à�=Š=˜ eˆ=Ñ,Ô,Ð,r"   c                 ót  — t          j        d|                      d¦  «        ¦  «        d         }g }|dk    r�t          j        d|                      d¦  «        ¦  «        \  }}}t          t	          |                      |dz
  ¦  «        ¦  «        ¦  «        }|                     |||f¦  «         |dz  }|dk    °�|S )zCRead LSM events from file and return as list of (time, type, text).rÿ  rˆ   r&   r   z<IdIr¾   )rº   ré  rè  rÖ  r   r7   )r¼   r  ÚeventsÚesizeÚetimeÚetypeÚetexts          r    r˜	  r˜	  r  s«   € åŒM˜% §¢¨¡¤Ñ,Ô,¨QÔ/€EØ€FØ
�!Š)ˆ)Ý$œm¨F°B·G²G¸B±K´KÑ@Ô@Ñˆˆu�eÝ�) B§G¢G¨E°B©JÑ$7Ô$7Ñ8Ô8Ñ9Ô9ˆØ�Š�u˜e UÐ+Ñ,Ô,Ð,Ø�‰
ˆð	 �!Š)ˆ)ð
 €Mr"   c                 ó$  — dg g dœ}|                       ¦   «         }t          j        d|                      d¦  «        ¦  «        \  }}}}}}||k    rt	          j        d¦  «         |S t          |¦  «        |d<   |                      ||z   ¦  «         |                      d|dz  ¬	¦  «         	                    |df¦  «        }	|	 
                    ¦   «         |d
<   |                      ||z   ¦  «         |                      ||z
  ¦  «        }
g }t          |
¦  «        dk    rpt          j        d|
dd…         ¦  «        d         }|                     t          |
dd|z   …         ¦  «        ¦  «         |
d|z   d…         }
t          |
¦  «        dk    °p||d<   |S )z>Read LSM ChannelColors structure from file and return as dict.F)ÚMonori
  Ú
ColorNamesz<IIIIIIr‚  z#invalid LSM ChannelColors structurer  r   rŒ   r  ri
  rè  Nr   rÊ   r  )r˜   rº   ré  rè  r    r¡   r£   r%   r  rd  rh  r.   r7   rÖ  )r¼   rZ   r½   rH   ÚncolorsÚnnamesÚcoffsetÚnoffsetÚmonoÚcolorsÚbufferÚnamess               r    r™	  r™	  ~  sˆ  € à r¸Ð<Ð<€FØ
�'Š'‰)Œ)€CÝ4:´MØ�2—7’7˜2‘;”;ñ5ô 5Ñ1€Dˆ'�6˜7 G¨Tð �&ÒÐÝŒÐ;Ñ<Ô<Ð<ØˆÝ˜$‘Z”Z€Fˆ6�Nà‡G‚GˆC�'‰MÑÔÐØ�]Š]˜7¨'°A©+ˆ]Ñ6Ô6×>Ò>ÀÈ¸|ÑLÔL€FØ—}’}‘”€Fˆ8Ñà‡G‚GˆC�'‰MÑÔÐØ�WŠW�T˜G‘^Ñ$Ô$€FØ€EÝ
ˆf‰+Œ+˜Š/ˆ/ÝŒ}˜T 6¨"¨1¨"¤:Ñ.Ô.¨qÔ1ˆØ�Š•Y˜v a¨!¨d©( lÔ3Ñ4Ô4Ñ5Ô5Ð5Ø˜˜D™˜
˜
Ô#ˆõ ˆf‰+Œ+˜Š/ˆ/ð !€Fˆ<ÑØ€Mr"   c                 óÞ  — i }|g}t           j        }t          j        d|                      d¦  «        ¦  «        d         dk    rt          j        d¦  «         |S |                      d¦  «         	  |d|                      d	¦  «        ¦  «        \  }}}|d
k    r0t          t          |                      |¦  «        ¦  «        ¦  «        }nZ|dk    r& |d|                      d¦  «        ¦  «        d         }n.|dk    r& |d|                      d¦  «        ¦  «        d         }nd}|t          j        v r1| 	                    |¦  «         t          j        |         }g }	|	||<   |	}n†|t          j
        v r/| 	                    |¦  «         i }	| 	                    |	¦  «         |	}nI|t          j        v rt          j        |         }|||<   n#|dk    r|                     ¦   «         }n||d|z  <   |sn�Œ}|S )z9Read LSM ScanInfo structure from file and return as dict.rè  rŒ   r   i   zinvalid LSM ScanInfo structurerˆ   Tz<IIIr�   r‘   r  rå   z<dr¤  z	Entry0x%x)rº   ré  rè  r    r¡   rÖ  r   rO   r°	  r7   rº	  r_
  Úpop)
r¼   ÚblockÚblocksré  Úentryr=   rH   rl   rÜ  Únewobjs
             r    r–	  r–	  ™  sö  € à€EØˆW€FÝŒ]€FÝ„}�T˜2Ÿ7š7 1™:œ:Ñ&Ô& qÔ)¨ZÒ7Ð7åŒÐ6Ñ7Ô7Ð7ØˆØ‡G‚GˆA�J„J€Jð"Ø#˜V F¨B¯GªG°B©K¬KÑ8Ô8Ñˆˆu�dØ�AŠ:ˆ:å�i¨¯ª°©¬Ñ6Ô6Ñ7Ô7ˆEˆEØ�aŠZˆZà�F˜4 §¢¨¡¤Ñ,Ô,¨QÔ/ˆEˆEØ�aŠZˆZà�F˜4 §¢¨¡¤Ñ,Ô,¨QÔ/ˆEˆEàˆEØ•DÔ3Ð3Ð3Ø�MŠM˜%Ñ Ô Ð ÝÔ2°5Ô9ˆDØˆFØ ˆE�$‰KØˆEˆEØ•dÔ6Ð6Ð6Ø�MŠM˜%Ñ Ô Ð ØˆFØ�LŠL˜Ñ Ô Ð ØˆEˆEØ•dÔ9Ð9Ð9ÝÔ6°uÔ=ˆDØˆE�$‰KˆKØ�jÒ Ð à—J’J‘L”LˆEˆEð */ˆE�+ Ñ%Ñ&Øð 	ØñE"ðF €Lr"   c                 ó  — i }|                       t          j        |¬¦  «        }t          j        D ]"\  }}||                              ¦   «         ||<   Œ#|d         dk    �r|                       t          j        |¬¦  «        }|d         t          d¦  «        k    rt          j        d¦  «         i S t          j        D ]{\  }}|                     d¦  «        rD||          	                    ¦   «          
                    dd	¬
¦  «        }	t          |	d¬¦  «        ||<   Œ^||                              ¦   «         ||<   Œ|dD ](}
|d|
z   xx         dz  cc<   |d|
z   xx         dz  cc<   Œ)n!|j        dk    rt          j        d¦  «         i S |S )z.Read TVIPS EM-MENU headers and return as dict.r:  rf
  r‘   r0  l   ª*UU zinvalid TVIPS v2 magic numberrÑ  Úutf16ro  )Úerrorsr!  )Únullrº  rä
  g    eÍÍAÚ	PixelSizer&   zunknown TVIPS header version)r>  rO   rõ
  rh  r1  rÙ   r    r¡   r•  r  r—  r   rf  )r¼   r9   r=   r  r  rZ   ÚheaderrÜ  Útypestrrú   rÎ   s              r    r²  r²  É  s®  € à€FØ�^Š^�DÔ0¸Iˆ^ÑFÔF€FÝÔ-ð -ð -‰ˆˆgØ˜d”|×*Ò*Ñ,Ô,ˆˆt‰ˆØˆiÔ˜AÒÑØ—’¥Ô 4À	�ÑJÔJˆØ�'Œ?�c *™oœoÒ-Ð-ÝŒMÐ9Ñ:Ô:Ð:ØˆIå!Ô1ð 	5ð 	5‰MˆD�'Ø×!Ò! #Ñ&Ô&ð 5Ø˜4”L×)Ò)Ñ+Ô+×2Ò2°7À8Ð2ÑLÔL�Ý(¨°Ð6Ñ6Ô6��t‘�à% dœ|×2Ò2Ñ4Ô4��t‘�àð 	.ð 	.ˆDØÐ&¨Ñ-Ð.Ð.Ô.°#Ñ5Ð.Ð.Ñ.Ø�; Ñ%Ð&Ð&Ô&¨#Ñ-Ð&Ð&Ñ&Ð&ð	.ð 
Œ˜1Ò	Ð	ÝŒÐ4Ñ5Ô5Ð5Øˆ	Ø€Mr"   c                 ój  — i }i }t          |                      |¦  «        ¦  «        }|                     ¦   «         D ]w}|                     ¦   «         }|                     d¦  «        ri }|||dd…         <   Œ;	 |                     d¦  «        \  }	}
n# t          $ r Y Œaw xY wt          |
¦  «        ||	<   Œx|S )z0Read FEI SFEG/HELIOS headers and return as dict.ú[r&   rÁ   r‚   )rÖ  rè  Ú
splitlinesr±  r•  r  r,   r_  )r¼   r9   r=   r  r  rZ   ÚsectionrD   ræ  rC  rl   s              r    r±  r±  å  sÇ   € à€FØ€GÝ�R—W’W˜U‘^”^Ñ$Ô$€DØ—’Ñ!Ô!ð 
%ð 
%ˆØ�zŠz‰|Œ|ˆØ�?Š?˜3ÑÔð 	ØˆGØ!(ˆF�4˜˜"˜”:ÑØð	ØŸš C™œ‰JˆC��øÝð 	ð 	ð 	ØˆHð	øøøå˜e‘}”}ˆ�‰ˆØ€Ms   Á7BÂ
BÂBc           	      ó  — ddi}d}t          |                      |¦  «        ¦  «        }|                     ¦   «         D �]I}|                     ¦   «         r|                     ¦   «         }Œ,|rð	 |                     d¦  «        \  }	}
n# t          $ r Y ŒTw xY w|
                     ¦   «         }
d}	 |
                     ¦   «         \  }}t          |t          t          f¦  «        }||k    r|}
|}nA# t          $ r4 t          |
t          t          f¦  «        }||
k    r|}
|
dv rd}
n|
dv rd}
Y nw xY w|	                     ¦   «         |
f||<   |r||xx         |fz  cc<   d}�Œ|dxx         t          |t          t          f¦  «        fz  cc<   �ŒK|S )	z&Read Zeiss SEM tag and return as dict.r,  r   Nr‚   )ÚNoÚOffF)ÚYesÚOnT)rÖ  rè  r.  Úisupperr	  r  r,   r±  r_  rÙ   r›  r@   )r¼   r9   r=   r  r  rZ   rC  rD   ræ  rÜ  rl   r›  r©  r0  Únumbers                  r    r­  r­  ø  s½  € à�"ˆX€FØ
€CÝ�R—W’W˜U‘^”^Ñ$Ô$€DØ—’Ñ!Ô!ð 8ñ 8ˆØ�<Š<‰>Œ>ð 	8Ø—*’*‘,”,ˆCˆCØð 	8ðØ"Ÿjšj¨™oœo‘��e�eøÝð ð ð Ø�ðøøøà—K’K‘M”MˆEØˆDð!Ø—{’{‘}”}‘��1Ý ¥C­ <Ñ0Ô0�Ø˜Q’;�;Ø"�EØ�DøøÝð !ð !ð !Ý ­­U |Ñ4Ô4�Ø˜U’?�?Ø"�EØ˜MÐ)Ð)Ø!�E�EØ˜mÐ+Ð+Ø �Eøøð!øøøð  Ÿ:š:™<œ<¨Ð/ˆF�3‰KØð 'Ø�s��” ˜wÑ&��‘ØˆC‰Cà�2ˆJˆJŒJ�6 $­­e¨Ñ5Ô5Ð7Ñ7ˆJˆJ‰J‰JØ€Ms$   Á,BÂ
BÂBÂ,=C*Ã*;D(Ä'D(c                 ó$  — |                       t          j        |¬¦  «        }|                     |j                             |¦  «        ¦  «        }t          |¦  «        }|d         d|d         …         |d<   |d         d|d         …         |d<   |S )z7Read NIH_IMAGE_HEADER tag from file and return as dict.r:  r”
  Nr“
  r{
  rz
  )r>  rO   r—
  rë  r=   rM  rã  )r¼   r9   r=   r  r  r|   s         r    r³  r³    sƒ   € à
�Š•tÔ,¸	ˆÑBÔB€AØ	�ŠˆqŒw×#Ò# IÑ.Ô.Ñ/Ô/€AÝ�aÑÔ€AØ�7”Ð,˜a œnÐ,Ô-€A€g�JØ�Œg�m˜˜(œ�mÔ$€A€d�GØ€Hr"   c                 ó<  — |                       d¦  «         	 t          j        d|                      d¦  «        ¦  «        \  }}|dk    s|dk    rt          ‚|                       d¦  «         t          j        d|                      d¦  «        ¦  «        \  }}}}|dk    s|d	k    rt          ‚n# t          $ r t          d
¦  «        ‚w xY wt          t          |                      |¦  «        dd…         ¦  «        ¦  «        }|dk    rt          | dd|d¦  «        ni }||fS )a;  Read ScanImage BigTIFF v3 static and ROI metadata from open file.

    Return non-varying frame data as dict and ROI group data as JSON.

    The settings can be used to read image data and metadata without parsing
    the TIFF file.

    Raise ValueError if file does not contain valid ScanImage v3 metadata.

    r   z<2sHrŒ   r“   r–   r¾   z<IIIIirÊ   znot a ScanImage BigTIFF v3 fileNrÁ   r&   r…   )	r%   rº   ré  rè  r@   r,   Úmatlabstr2pyrÖ  r´  )r¼   r9   rf  ÚmagicÚsize0Úsize1Ú
frame_dataÚroi_datas           r    rm  rm  (  s!  € ð ‡G‚GˆA�J„J€Jð	<Ý#œ]¨6°2·7²7¸1±:´:Ñ>Ô>Ñˆ	�7Ø˜ÒÐ ¨B¢ ÝˆOØ
�Š�‰ŒˆÝ'-¤}°W¸b¿gºgÀb¹k¼kÑ'JÔ'JÑ$ˆˆw˜˜uØ�IÒÐ ¨A¢ ÝˆOð ".øåð <ð <ð <ÝÐ:Ñ;Ô;Ð;ð<øøøõ �i¨¯ª°©¬°s¸°sÔ(;Ñ<Ô<Ñ=Ô=€JØ8=Àº	¸	�y˜˜S $¨¨tÑ4Ô4Ð4Àr€HØ�xÐÐs   —BB+ Â+Cc                 óN  — |                       d¦  «         	 dddœ|                      d¦  «                 }n# t          $ r t          d¦  «        ‚w xY wi }|                       d¦  «         t	          j        |dz   |                      d	¦  «        ¦  «        \  }}}}}}}	}
|	d
k    rt          d¦  «        ‚t          | |d|
d¦  «        |d<   |dk    rt          d¦  «        ‚|                       |¦  «         t	          j        |dz   |                      d¦  «        ¦  «        \  }}|dk    rt          d¦  «        ‚t	          j        |d|z  z   |                      d|z  ¦  «        ¦  «        }|ddd…         |ddd…         |ddd…         |ddd…         |ddd…         dœ|d<   |dk    rt          d¦  «        ‚|                       |¦  «         t	          j        |dz   |                      d¦  «        ¦  «        \  }}|dk    rt          d¦  «        ‚t          | |d|d¦  «        |d<   |dk    rt          d¦  «        ‚|                       |¦  «         t	          j        |dz   |                      d¦  «        ¦  «        \  }}|d k    rt          d¦  «        ‚t          | |d|d¦  «        |d!<   |S )"zìRead MicroManager non-TIFF settings from open file and return as dict.

    The settings can be used to read image data without parsing the TIFF file.

    Raise ValueError if the file does not contain valid MicroManager metadata.

    r   r…   r†   rÝ  r‘   znot a MicroManager TIFF filerˆ   ÚIIIIIIIIrÔ  i$ñ# z#invalid MicroManager summary headerNÚSummaryi�ÇCz!invalid MicroManager index headerrü  i·²4 ÚIIIIIr‰   rå   r&   rÊ   rŒ   )r‰  ÚSliceÚFrameÚPositionrG  ÚIndexMapi„®Õz#invalid MicroManager display headerid‰»ÚDisplaySettingsi’}ìz$invalid MicroManager comments headerie»ÚComments)r%   rè  rŸ  r,   rº   ré  r´  )r¼   r9   rZ   Úindex_headerÚindex_offsetÚdisplay_headerÚdisplay_offsetÚcomments_headerÚcomments_offsetÚsummary_headerÚsummary_lengthr*  r  rD   s                 r    rg  rg  D  sß  € ð ‡G‚GˆA�J„J€Jð9Ø¨Ð,Ð,¨R¯WªW°Q©Z¬ZÔ8ˆ	ˆ	øÝð 9ð 9ð 9ÝÐ7Ñ8Ô8Ð8ð9øøøð €FØ‡G‚GˆA�J„J€Jõ 	Œ�i *Ñ,¨b¯gªg°b©k¬kÑ:Ô:ñ	ØØØØØØØØð ˜Ò Ð ÝÐ>Ñ?Ô?Ð?Ý! " i°°~ÀtÑLÔL€Fˆ9Ñà�xÒÐÝÐ<Ñ=Ô=Ð=Ø‡G‚GˆLÑÔÐÝ”M )¨dÑ"2°B·G²G¸A±J´JÑ?Ô?�M€FˆEØ�ÒÐÝÐ<Ñ=Ô=Ð=ÝŒ=˜ W¨u¡_Ñ4°b·g²g¸bÀ5¹jÑ6IÔ6IÑJÔJ€Dà˜˜˜!˜”9Ø�a�d˜�d”Ø�a�d˜�d”Ø˜˜˜A˜”JØ�q�t˜!�t”*ðð €Fˆ:Ñð ˜Ò"Ð"ÝÐ>Ñ?Ô?Ð?Ø‡G‚GˆNÑÔÐÝ”M )¨dÑ"2°B·G²G¸A±J´JÑ?Ô?�M€FˆEØ�ÒÐÝÐ>Ñ?Ô?Ð?Ý )¨"¨i¸¸uÀdÑ KÔ K€FÐÑà˜(Ò"Ð"ÝÐ?Ñ@Ô@Ð@Ø‡G‚GˆOÑÔÐÝ”M )¨dÑ"2°B·G²G¸A±J´JÑ?Ô?�M€FˆEØ�ÒÐÝÐ?Ñ@Ô@Ð@Ý" 2 y°$¸¸tÑDÔD€Fˆ:Ñà€Ms	   —6 ¶Ac                 ó   — t          ¦   «         ‚)zRead MetaSeries non-TIFF hint catalog from file.

    Raise ValueError if the file does not contain a valid hint catalog.

    )rá  )r¼   s    r    Úread_metaseries_catalogrR  …  s   € õ Ñ
Ô
Ðr"   c           
      ól  — dddœ|         g}dg}g }d„ }d„ }d„ }d„ }d	d
d|fddd|fddd|fddd|fddd|fddd|fddd|ff}	|	D ]Û\  }
}}}|
                      ¦   «         | v r|
                      ¦   «         }
n|
| vrŒ7|dk    r|ddd…         }| |
         }|€t          |¦  «        }n|g}|                     |t          j        |dz   |¦  «        z   ¦  «         |D ]E} |||¦  «        }|                     |¦  «         |                     t          |¦  «        ¦  «         ŒFŒÜ|sdS d                     |¦  «        }d                     |¦  «        }||z   }t          |¦  «        |d<   t          j        |dt          |¦  «        z  z   g|¢R Ž }ddt          |¦  «        |d fd!dt          |¦  «        d"z  |d ffS )#a  Return IJMetadata and IJMetadataByteCounts tags from metadata dict.

    The tags can be passed to the TiffWriter.save function as extratags.

    The metadata dict may contain the following keys and values:

        Info : str
            Human-readable information as string.
        Labels : sequence of str
            Human-readable labels for each channel.
        Ranges : sequence of doubles
            Lower and upper values for each channel.
        LUTs : sequence of (3, 256) uint8 ndarrays
            Color palettes for each channel.
        Plot : bytes
            Undocumented ImageJ internal format.
        ROI: bytes
            Undocumented ImageJ internal region of interest format.
        Overlays : bytes
            Undocumented ImageJ internal format.

    ó   IJIJó   JIJI©r†   r…   r   c                 óD   — |                       ddddœ|         z   ¦  «        S ©NrÍ  ÚbeÚlerV  ©rÆ  ©rD   r9   s     r    Ú_stringz%imagej_metadata_tags.<locals>._stringª  ó&   € Ø�{Š{˜8¨D°tÐ&<Ð&<¸YÔ&GÑGÑHÔHÐHr"   c                 óL   — t          j        |dt          | ¦  «        z  z   g| ¢R Ž S )Nr—  )rº   r»   r.   r\  s     r    Ú_doublesz&imagej_metadata_tags.<locals>._doubles­  s)   € ÝŒ{˜9¨­c°$©i¬i©Ñ8Ð@¸4Ð@Ð@Ð@Ð@r"   c                 ó*   — |                       ¦   «         S r   )Útobytesr\  s     r    Ú_ndarrayz&imagej_metadata_tags.<locals>._ndarray°  s   € Ø�|Š|‰~Œ~Ðr"   c                 ó   — | S r   r   r\  s     r    Ú_bytesz$imagej_metadata_tags.<locals>._bytes³  rÐ  r"   ÚInfoó   infor&   ÚLabelsó   lablNÚRangesó   rangÚLUTsó   lutsÚPlotó   plotÚROIó   roi ÚOverlaysó   overr…   rÁ   r�   r   r"   rm  rÈ   Trl  rŒ   )r	  r.   r7   rº   r»   r  )r‚  r9   r*  rá  Úbodyr]  r`  rc  re  Úmetadata_typesrC  Úmtyper  r^   r   rl   rD   s                    r    rn  rn  �  sj  € ð.  'Ð*Ð*¨9Ô5Ð6€FØ�€JØ€DðIð Ið IðAð Að Aðð ð ðð ð ð 
�˜!˜WÐ%Ø	�7˜D 'Ð*Ø	�7˜A˜xÐ(Ø	�˜$ Ð)Ø	�˜!˜VÐ$Ø	�˜˜FÐ#Ø	�W˜d FÐ+ð€Nð $2ð )ð )ÑˆˆU�E˜4Ø�9Š9‰;Œ;˜(Ð"Ð"Ø—)’)‘+”+ˆCˆCØ˜Ð Ð ØØ˜ÒÐØ˜$˜$˜B˜$”KˆEØ˜#”ˆØˆ=Ý˜‘K”KˆEˆEà�XˆFØ�Š�e�fœk¨)°c©/¸5ÑAÔAÑAÑBÔBÐBØð 	)ð 	)ˆEØ�4˜˜yÑ)Ô)ˆDØ�KŠK˜ÑÔÐØ×Ò�c $™iœiÑ(Ô(Ð(Ð(ð	)ð
 ð ØˆrØ�8Š8�D‰>Œ>€DØ�XŠX�fÑÔ€FØ�D‰=€DÝ˜‘K”K€Jˆq�MÝ”˜Y¨#µ°J±´Ñ*?Ñ@ÐNÀ:ÐNÐNÐN€Jà	�•S˜‘Y”Y  dÐ+Ø	�•S˜‘_”_¨Ñ)¨:°tÐ<ðð r"   c           	      óp  — d„ }d„ }d„ }d„ }d|fd|fd|fd|fd	|fd
|fd|fdœ}|                      t          d„ |                     ¦   «         D ¦   «         ¦  «        ¦  «         |st          d¦  «        ‚| dd…         dvrt          d¦  «        ‚|d         }|dk     s|dk    rt          d¦  «        ‚|dz
  dz  }	t	          j        |d|	z  z   | dd|	dz  z   …         ¦  «        }
d|	dz  z   }d}i }t          |
ddd…         |
ddd…         ¦  «        D ]¤\  }}g }|                     |t          |¦  «        t          f¦  «        \  }}t          |¦  «        D ];}|dz  }|||         z   }|                      || ||…         |¦  «        ¦  «         |}Œ<|dk    r|d         n|||                     ¦   «         <   Œ¥|S )zÕReturn IJMetadata tag value as dict.

    The 'Info' string can have multiple formats, e.g. OIF or ScanImage,
    that might be parsed into dicts using the matlabstr2py or
    oiffile.SettingsFile functions.

    c                 óD   — |                       ddddœ|         z   ¦  «        S rX  )r—  r\  s     r    r]  z imagej_metadata.<locals>._stringè  r^  r"   c                 óX   — t          j        |dt          | ¦  «        dz  z  z   | ¦  «        S )Nr—  rˆ   )rº   ré  r.   r\  s     r    r`  z!imagej_metadata.<locals>._doublesë  s(   € ÝŒ}˜Y¨#µ°T±´¸a±Ñ*@ÑAÀ4ÑHÔHÐHr"   c                 óT   — t          j        | d¦  «                             dd¦  «        S )Nr   rÁ   rk  )r<   r×  rd  r\  s     r    Ú_lutzimagej_metadata.<locals>._lutî  s%   € ÝÔ  gÑ.Ô.×6Ò6°r¸3Ñ?Ô?Ð?r"   c                 ó   — | S r   r   r\  s     r    re  zimagej_metadata.<locals>._bytesñ  rÐ  r"   rf  rh  rj  rl  ÚPlotsrp  rr  )rg  ri  rk  rm  ro  rq  rs  c              3   ó6   K  — | ]\  }}|d d d…         |fV — Œd S rÐ  r   rÕ  s      r    r!   z"imagej_metadata.<locals>.<genexpr>þ  s4   è è € Ð=Ð=™d˜a ˆa���"�Œg�qˆ\Ð=Ð=Ð=Ð=Ð=Ð=r"   zno ImageJ metadataNrŒ   )rT  rU  zinvalid ImageJ metadatar   r�   i$  z#invalid ImageJ metadata header sizerˆ   Ú4sIr‘   r&   )rN   rÖ  rä  r,   rº   ré  r5  rA   rÖ  rÓ  rq  r7   r±  )rD   rá  r9   r]  r`  r{  re  ru  Úheader_sizeÚntypesr*  r½   ÚcounterrZ   rv  r  r   rÜ  r^   r[   Úpos1s                        r    rG  rG  ß  sg  € ðIð Ið IðIð Ið Ið@ð @ð @ðð ð ð ˜'Ð"Ø˜GÐ$Ø˜HÐ%Ø˜$�Ø˜6Ð"Ø˜�Ø˜fÐ%ðð €Nð ×ÒÝÐ=Ð= n×&:Ò&:Ñ&<Ô&<Ð=Ñ=Ô=Ñ=Ô=ñô ð ð ð /ÝÐ-Ñ.Ô.Ð.àˆBˆQˆB„xÐ)Ð)Ð)ÝÐ2Ñ3Ô3Ð3à˜Q”-€KØ�RÒÐ˜;¨Ò,Ð,ÝÐ>Ñ?Ô?Ð?à˜A‰o !Ñ#€FÝŒ]˜9 u¨v¡~Ñ5°t¸AÀÀFÈQÁJÁÐ<NÔ7OÑPÔP€FØ
ˆf�q‰j‰.€CØ€GØ€FÝ˜F 3 3 Q 3œK¨°°°1°¬Ñ6Ô6ð Cð C‰ˆˆuØˆØ#×'Ò'¨µ	¸%Ñ0@Ô0@Å*Ð/MÑNÔN‰
ˆˆdÝ�u‘”ð 	ð 	ˆAØ�q‰LˆGØ˜ GÔ,Ñ,ˆDØ�MŠM˜$˜$˜t C¨ Hœ~¨yÑ9Ô9Ñ:Ô:Ð:ØˆCˆCØ,1°QªJ¨J˜v aœy˜y¸Fˆˆt�zŠz‰|Œ|ÑÐØ€Mr"   c                 óp  — d„ }i }|                       ¦   «         D ]ˆ}	 |                     d¦  «        \  }}n# t          $ r Y Œ(w xY w|                     ¦   «         }|                     ¦   «         }t          t
          |fD ]}	  ||¦  «        } n# t          $ r Y Œw xY w|||<   Œ‰d|vrt          d¦  «        ‚|S )a8  Return metatata from ImageJ image description as dict.

    Raise ValueError if not a valid ImageJ description.

    >>> description = 'ImageJ=1.11a\nimages=510\nhyperstack=true\n'
    >>> imagej_description_metadata(description)  # doctest: +SKIP
    {'ImageJ': '1.11a', 'images': 510, 'hyperstack': True}

    c                 ó<   — dddœ|                       ¦   «                  S )NTF)ÚtrueÚfalse)r	  )r÷   s    r    Ú_boolz*imagej_description_metadata.<locals>._bool'   s   € Ø uÐ-Ð-¨c¯iªi©k¬kÔ:Ð:r"   r‚   rF  znot a ImageJ image description)r.  r  r@   r±  rÙ   r›  r,   )r~  rˆ  rZ   ræ  rC  r÷   r=   s          r    r;  r;     sþ   € ð;ð ;ð ;ð €FØ×&Ò&Ñ(Ô(ð ð ˆð	Ø—z’z #‘”‰HˆC��øÝð 	ð 	ð 	ØˆHð	øøøà�iŠi‰kŒkˆØ�iŠi‰kŒkˆÝ�5 %Ð(ð 	ð 	ˆEðØ�e˜C‘j”j�Ø�øÝð ð ð Ø�ðøøøàˆˆs‰ˆà�vÐÐÝÐ9Ñ:Ô:Ð:Ø€Ms!   �6¶
AÁAÂ BÂ
BÂBFú1.11ac                 óÂ  — |rt          d¦  «        ‚t          | |¬¦  «        } | d         dv }d|z  g}g }	|                     dt          | dd…         ¦  «        z  ¦  «         |€d	}|	                     d
¦  «         n%|	                     dt	          |¦  «        z  ¦  «         | d         dk    r|                     d| d         z  ¦  «         |€|sd}|r|r|	                     d|z  ¦  «         | d         dk    r|                     d| d         z  ¦  «         | d         dk    r5|                     d| d         z  ¦  «         |€|	                     d¦  «         |�%|	                     dt	          |¦  «        z  ¦  «         |                     ¦   «         D ]1\  }
}|	                     |
                     ¦   «         ›d|›�¦  «         Œ2d                     ||	z   dgz   ¦  «        S )a5  Return ImageJ image description from data shape.

    ImageJ can handle up to 6 dimensions in order TZCYXS.

    >>> imagej_description((51, 5, 2, 196, 171))  # doctest: +SKIP
    ImageJ=1.11a
    images=510
    channels=2
    slices=5
    frames=51
    hyperstack=true
    mode=grayscale
    loop=false

    z!ImageJ colormapping not supported)ÚrgbrÁ   rÉ   z	ImageJ=%sz	images=%iNrÞ   Tzhyperstack=truezhyperstack=%sr‘   r&   zchannels=%iÚ	grayscalezmode=%sz	slices=%ir   z	frames=%iz
loop=falsezloop=%sr‚   ró  r,  )rá  r_  r7   r   r£   rä  r	  r  )rE   r‹  Ú
colormapedrf  rD  rY   Úloopr0   rZ   r7   rC  rl   s               r    rh  rh  ?   sû  € ð2 ð GÝ!Ð"EÑFÔFÐFÝ˜ CÐ(Ñ(Ô(€EØ
�Œ)�vÐ
€Cà˜GÑ#Ð$€FØ€FØ
‡M‚M�+¥¨¨c¨r¨c¬
Ñ 3Ô 3Ñ3Ñ4Ô4Ð4ØÐØˆ
Ø�ŠÐ'Ñ(Ô(Ð(Ð(à�Š�o­¨ZÑ(8Ô(8Ñ8Ñ9Ô9Ð9ØˆQ„x�!‚|€|Ø�Š�m e¨A¤hÑ.Ñ/Ô/Ð/Ø€|˜C€|ØˆØð (�dð (Ø�Š�i $Ñ&Ñ'Ô'Ð'ØˆQ„x�!‚|€|Ø�Š�k E¨!¤HÑ,Ñ-Ô-Ð-ØˆQ„x�!‚|€|Ø�Š�k E¨!¤HÑ,Ñ-Ô-Ð-Øˆ<Ø�MŠM˜,Ñ'Ô'Ð'ØÐØ�Š�i¥$ t¡*¤*Ñ,Ñ-Ô-Ð-Ø—l’l‘n”nð 6ð 6‰
ˆˆUØ�Š §¢¡¤  ¨e¨eÐ4Ñ5Ô5Ð5Ð5à�9Š9�V˜f‘_¨ tÑ+Ñ,Ô,Ð,r"   c                 ó~  — t          d„ | D ¦   «         ¦  «        } t          | ¦  «        }d|cxk    rdk    rn nt          d¦  «        ‚|€| d         dv o|dk    }|r| d         dvrt          d	¦  «        ‚|s!|dk    r| d         dk    rt          d
¦  «        ‚|s| d         dk    rdd|z
  z  | z   S dd|z
  z  | z   dz   S )zÀReturn shape normalized to 6D ImageJ hyperstack TZCYXS.

    Raise ValueError if not a valid ImageJ hyperstack shape.

    >>> imagej_shape((2, 3, 4, 5, 3), False)
    (2, 3, 4, 5, 3, 1)

    c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r   rØ   rÚ   s     r    r!   zimagej_shape.<locals>.<genexpr>‚   s(   è è € Ð(Ð(˜Q•#�a‘&”&Ð(Ð(Ð(Ð(Ð(Ð(r"   r&   ræ   z1invalid ImageJ hyperstack: not 2 to 6 dimensionalNrÁ   rÉ   r‘   z*invalid ImageJ hyperstack: not a RGB imagez.invalid ImageJ hyperstack: not a non-RGB imagerà   rå   )r  r.   r,   )rE   r‹  r“  s      r    r_  r_  y   s  € õ Ð(Ð( %Ð(Ñ(Ô(Ñ(Ô(€EÝˆu‰:Œ:€DØˆ4€|€|‚|€|�!‚|€|€|€|€|ÝÐLÑMÔMÐMØ
€{Ø�BŒi˜6Ð!Ð. d¨Q¢hˆØ
ð Gˆu�RŒy Ð&Ð&ÝÐEÑFÔFÐFØð K�4˜1’9�9  r¤¨a¢ ÝÐIÑJÔJÐJØ
ð )ˆe�BŒi˜1ŠnˆnØ�q˜4‘xÑ  5Ñ(Ð(Ø�1�t‘8Ñ˜uÑ$ tÑ+Ð+r"   c                 óV   — |                      | ¬¦  «         t          j        |¦  «        S )zÞReturn JSON image description from data shape and other meta data.

    Return UTF-8 encoded JSON.

    >>> json_description((256, 256, 3), axes='YXS')  # doctest: +SKIP
    b'{"shape": [256, 256, 3], "axes": "YXS"}'

    ©rE   )rN   rÞ  Údumps)rE   r‚  s     r    ri  ri  ‘   s(   € ð ‡O‚O˜%€OÑ Ô Ð ÝŒ:�hÑÔÐr"   c                 ó&  — | dd…         dk    rDt          d„ | dd…                              d¦  «        D ¦   «         ¦  «        }t          |¬¦  «        S | dd	…         d
k    r"| dd…         dk    rt          j        | ¦  «        S t          d| ¦  «        ‚)a‚  Return metatata from JSON formatted image description as dict.

    Raise ValuError if description is of unknown format.

    >>> description = '{"shape": [256, 256, 3], "axes": "YXS"}'
    >>> json_description_metadata(description)  # doctest: +SKIP
    {'shape': [256, 256, 3], 'axes': 'YXS'}
    >>> json_description_metadata('shape=(256, 256, 3)')
    {'shape': (256, 256, 3)}

    Nræ   r„  c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r   rØ   rÚ   s     r    r!   z,json_description_metadata.<locals>.<genexpr>¬   s(   è è € ÐCÐC •c˜!‘f”fÐCÐCÐCÐCÐCÐCr"   rË  rÁ   ú,r’  r&   rƒ  Ú}zinvalid JSON image description)r  r  rÖ  rÞ  rß  r,   )r~  rE   s     r    r/  r/  ž   s¢   € ð �2�A�2„˜(Ò"Ð"åÐCÐC k°!°B°$Ô&7×&=Ò&=¸cÑ&BÔ&BÐCÑCÔCÑCÔCˆÝ˜%Ð Ñ Ô Ð Ø�2�A�2„˜#ÒÐ +¨b¨c¨cÔ"2°cÒ"9Ð"9åŒz˜+Ñ&Ô&Ð&Ý
Ð5°{Ñ
CÔ
CÐCr"   c                 ó  — |                       d¦  «        st          d¦  «        ‚|€ddh}i }|g}d}|                      ¦   «         D �]Á}|s|                     ¦   «         }|sŒ|d         dk    r½|dd…         d	k    rl|d
= |d
         }|dd…         }|rd                     ||         ¦  «        ||<   |dd…         dk    r(t          j        ||         d¬¦  «        }d|_        |||<   Œ¢d}|dd
…         }|dd…         dk    rg }n||v rg }d}ni }|                     |¦  «         |||<   Œå|r|                     |¦  «         Œý| 	                    dd¦  «        }t          |¦  «        dk    rd||d                              ¦   «         <   �ŒE|\  }	}
|	dd…         dk    r3|                     d„ |
 	                    ¦   «         D ¦   «         ¦  «         �Œ‹t          |
                     ¦   «         ¦  «        ||	                     ¦   «         <   �ŒÃ|S )al  Return metatata from FluoView image description as dict.

    The FluoView image description format is unspecified. Expect failures.

    >>> descr = ('[Intensity Mapping]\nMap Ch0: Range=00000 to 02047\n'
    ...          '[Intensity Mapping End]')
    >>> fluoview_description_metadata(descr)
    {'Intensity Mapping': {'Map Ch0: Range': '00000 to 02047'}}

    r-  z"invalid FluoView image descriptionNzRegion Info (Fields)zProtocol DescriptionFr   éûÿÿÿz End]rÁ   r&   ró  rŒ   zLUT r   rÖ   )rÁ   rÊ   Tr‚   zRGB c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r   rØ   )r   r‹  s     r    r!   z0fluoview_description_metadata.<locals>.<genexpr>ð   s(   è è € Ð=Ð=¨�3˜s™8œ8Ð=Ð=Ð=Ð=Ð=Ð=r"   )r•  r,   r.  r±  r  r<   r
  rE   r7   r  r.   rH  r_  )r~  ÚignoresectionsrZ   ÚsectionsÚcommentræ  r/  rÜ  r|   rC  rl   s              r    Úfluoview_description_metadatarž  ´   sR  € ð ×!Ò! #Ñ&Ô&ð ?ÝÐ=Ñ>Ô>Ð>ØÐØ0Ð2HÐIˆà€FØˆx€HØ€GØ×&Ò&Ñ(Ô(ð +9ñ +9ˆØð 	 Ø—:’:‘<”<ˆDØð 	ØØ�Œ7�cŠ>ˆ>Ø�B�C�CŒy˜GÒ#Ð#à˜R�LØ" 2œ,�Ø˜A˜b˜D”z�Øð =Ø$(§I¢I¨g°d¬mÑ$<Ô$<�G˜D‘MØ˜˜˜”8˜vÒ%Ð%Ýœ G¨D¤M¸ÐAÑAÔA�AØ#�A”GØ$%�G˜D‘MØàˆGØ˜˜"˜”:ˆDØ�B�Q�BŒx˜6Ò!Ð!Ø��Ø˜Ð'Ð'Ø�Ø��à�Ø�OŠO˜GÑ$Ô$Ð$Ø"ˆF�4‰LØàð 	Ø�NŠN˜4Ñ Ô Ð ØØ�zŠz˜#˜qÑ!Ô!ˆÝˆt‰9Œ9˜Š>ˆ>Ø'+ˆG�D˜”G—M’M‘O”OÑ$ÙØ‰
ˆˆUØˆr�ˆrŒ7�fÒÐØ�NŠNÐ=Ð=¨u¯{ª{©}¬}Ð=Ñ=Ô=Ñ=Ô=Ð=Ñ=å#)¨%¯+ª+©-¬-Ñ#8Ô#8ˆG�C—I’I‘K”KÑ Ñ Ø€Mr"   c                 ó„  ‡‡— i }|                       d¦  «        s|S dD ]}|                      |d¦  «        } Œ|                      d¦  «        D �]rŠ‰dd…         dk    rŒ‰                     ¦   «         Š‰d         }‰d         t          j        vri	 t
          j                             d                     ‰¦  «        d	¦  «        |d
<   n0# t          $ r# d                     ‰dd…         ¦  «        ||<   Y nw xY wŒ«t          j        ‰d                  \  }Št          |d         t          ¦  «        r‰|d                  }nˆfd„|D ¦   «         }‰t          u r|d         dk    rdg}t          ˆfd„|D ¦   «         ¦  «        }‰t          k    rd                     |¦  «        }nt          |¦  «        dk    r|d         }|||<   �Œt|S )a  Return metatata from Pilatus image description as dict.

    Return metadata from Pilatus pixel array detectors by Dectris, created
    by camserver or TVX software.

    >>> pilatus_description_metadata('# Pixel_size 172e-6 m x 172e-6 m')
    {'Pixel_size': (0.000172, 0.000172)}

    r£  z#:=,()r  ró  Nr‘   rò  r   z%Y-%m-%dT%H %M %S.%fr&  r&   c                 ó    •— g | ]
}‰|         ‘ŒS r   r   )r   r   ræ  s     €r    rK  z0pilatus_description_metadata.<locals>.<listcomp>!  s   ø€ Ð/Ð/Ð/ !�d˜1”gÐ/Ð/Ð/r"   ÚnotÚNaNc              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S r   r   )r   r©  r=   s     €r    r!   z/pilatus_description_metadata.<locals>.<genexpr>!  s+   øè è € Ð0Ð0 A�u�u˜Q‘x”xÐ0Ð0Ð0Ð0Ð0Ð0r"   )r•  r¡  r  rO   r¿  r  Ústrptimer  r@   r(   r  r›  r  rœ   r.   )r~  rZ   r1  rÜ  r×  r   r=   ræ  s         @@r    rb  rb  ö   s÷  øø€ ð €FØ×!Ò! $Ñ'Ô'ð ØˆØð 2ð 2ˆØ!×)Ò)¨!¨SÑ1Ô1ˆˆØ×!Ò! $Ñ'Ô'ð ñ ˆØ���Œ8�tÒÐØØ�zŠz‰|Œ|ˆØ�AŒwˆØ�Œ7�$Ô-Ð-Ð-ð2Ý%-Ô%6×%?Ò%?Ø—H’H˜T‘N”NÐ$:ñ&ô &��zÑ"Ð"øõ ð 2ð 2ð 2Ø"Ÿxšx¨¨Q¨R¨R¬Ñ1Ô1��t‘��ð2øøøàÝÔ,¨T°!¬WÔ5‰ˆ�Ý�g˜a”j¥%Ñ(Ô(ð 	0à˜' !œ*Ô%ˆFˆFà/Ð/Ð/Ð/ wÐ/Ñ/Ô/ˆFØ•Eˆ>ˆ>˜f Qœi¨5Ò0Ð0Ø�WˆFÝÐ0Ð0Ð0Ð0¨Ð0Ñ0Ô0Ñ0Ô0ˆØ•CŠ<ˆ<Ø—X’X˜fÑ%Ô%ˆFˆFÝ�‰[Œ[˜AÒÐØ˜A”YˆFØˆˆt‰‰Ø€Ms   Â6CÃ*C3Ã2C3c                 ó€  — |                       d¦  «        st          d¦  «        ‚i }|                      d¦  «        }|d                              ¦   «                              dd¦  «        \  }}|                     ¦   «         ||                     ¦   «         <   t          |¦  «        dk    r|S |d                              d¦  «        }|d                              ¦   «         |d<   |dd…         D ]P}|                     d	¦  «        \  }}t          |                     ¦   «         ¦  «        ||                     ¦   «         <   ŒQ|S )
zêReturn metatata from Aperio image description as dict.

    The Aperio image description format is unspecified. Expect failures.

    >>> svs_description_metadata('Aperio Image Library v1.0')
    {'Aperio Image Library': 'v1.0'}

    zAperio Image Library z invalid Aperio image descriptionró  r   Nr&   rƒ   r,  z = )r•  r,   r  r±  Úrsplitr.   r_  )r~  rZ   ÚlinesrC  rl   rä  r³  s          r    Úsvs_description_metadatar¨  #!  s  € ð ×!Ò!Ð"9Ñ:Ô:ð =ÝÐ;Ñ<Ô<Ð<Ø€FØ×Ò˜dÑ#Ô#€EØ�q”—’Ñ!Ô!×(Ò(¨¨qÑ1Ô1�J€CˆØŸ+š+™-œ-€Fˆ3�9Š9‰;Œ;ÑÝ
ˆ5�z„z�Q‚€ØˆØ�!ŒH�NŠN˜3ÑÔ€EØ�q”—’Ñ!Ô!€Fˆ2�JØ�a�b�b”	ð 4ð 4ˆØ—Z’Z Ñ&Ô&‰
ˆˆUÝ$ U§[¢[¡]¤]Ñ3Ô3ˆˆs�yŠy‰{Œ{ÑÐØ€Mr"   c                 ó„  — |                       ¦   «         } | sg S 	 t          | ¦  «        } n&# t          $ r t          j        d¦  «         g cY S w xY wg }|                      d¦  «        D ]Ø}i }|                     d¦  «        D ]©}|                     dd¦  «        }t          |¦  «        dk    r<|\  }}t          |                      ¦   «         ¦  «        ||                      ¦   «         <   Œg|d                               ¦   «         }|r&d|v r|d                              |¦  «         Œ£|g|d<   Œª|                     |¦  «         ŒÙ|S )z”Return metadata from MetaMorph image description as list of dict.

    The MetaMorph image description format is unspecified. Expect failures.

    z+failed to parse MetaMorph image descriptionr!  ú
r>  r&   r   r,  )	r±  rÖ  rØ  r    r¡   r  r.   r_  r7   )r~  rZ   rª  r—  ræ  rÜ  rl   s          r    Ústk_description_metadatar«  <!  s^  € ð ×#Ò#Ñ%Ô%€KØð Øˆ	ðÝ Ñ,Ô,ˆˆøÝð ð ð ÝŒÐCÑDÔDÐDØˆ	ˆ	ˆ	ðøøøð €FØ×"Ò" 6Ñ*Ô*ð ð ˆØˆØ—K’K Ñ'Ô'ð 	(ð 	(ˆDØ—:’:˜c 1Ñ%Ô%ˆDÝ�4‰yŒy˜1Š}ˆ}Ø"‘��eÝ"(¨¯ª©¬Ñ"7Ô"7��$—*’*‘,”,‘�à˜QœŸš™œ�Øð (Ø˜Q�w�wØ˜"œŸš UÑ+Ô+Ð+Ð+à!& ˜˜"™øØ�Š�aÑÔÐÐØ€Ms   š* ª AÁAc                 ó  ‡‡— |                       d¦  «        st          d¦  «        ‚ddlm} |                     | ¦  «        }t
          t          d„ dœŠˆˆfd„Š ‰|i ¦  «        }d|v r|d                              d	d
¦  «        |d<   |S )z:Return metatata from MetaSeries image description as dict.r”  z$invalid MetaSeries image descriptionr   rm  c                 ó$   — t          | dd¦  «        S )NÚonrù  )Úasboolrì   s    r    rî   z1metaseries_description_metadata.<locals>.<lambda>e!  s   € ½6À!ÀTÈ5Ñ;QÔ;Q€ r"   )r›  rÙ   r£   c                 óÂ   •— | D ]Z}|j         }|s ‰|i ¦  «        ||j        <   Œ d|v r6|d         }|d         }|d         }|‰v r ‰|         |¦  «        ||<   ŒU|||<   Œ[|S )NÚidÚtyperl   )r˜  rJ  )	r¥  rZ   Úchildr˜  r   rG  r©  ÚparseÚtypess	          €€r    r´  z.metaseries_description_metadata.<locals>.parseg!  s�   ø€ àð 	"ð 	"ˆEØ”\ˆFØð Ø$) E¨%°Ñ$4Ô$4��u”yÑ!ØØ�vˆ~ˆ~Ø˜4”L�Ø˜6”N�Ø˜7”O�Ø˜�:�:Ø (  a¤¨¡¤�F˜1‘I�Ià !�F˜1‘IøØˆr"   rk  z
&#13;&#10;ró  )r•  r,   r”  rn  r•  r›  rÙ   r¡  )r~  r£  r¥  Úadictr´  rµ  s       @@r    r^  r^  ]!  sÀ   øø€ à×!Ò! ,Ñ/Ô/ð AÝÐ?Ñ@Ô@Ð@à/Ð/Ð/Ð/Ð/Ð/à×Ò˜KÑ(Ô(€DÝ¥CÐ1QÐ1QÐRÐR€Eðð ð ð ð ð ð" ˆE�$˜‰OŒO€EØ˜ÐÐØ$ ]Ô3×;Ò;¸LÈ$ÑOÔOˆˆmÑØ€Lr"   c                 ó    — t          | ¦  «        S )z9Return metatata from ScanImage image description as dict.)r9  rª  s    r    rn  rn  ~!  s   € å˜Ñ$Ô$Ð$r"   c                 ó|   — 	 t          j        | ¦  «        S # t          $ r t          j        d| z  ¦  «         Y dS w xY w)z2Return metatata from ScanImage artist tag as dict.rÝ  N)rÞ  rß  r,   r    r¡   )Úartists    r    Úscanimage_artist_metadatarº  ƒ!  sQ   € ð4ÝŒz˜&Ñ!Ô!Ð!øÝð 4ð 4ð 4ÝŒÐ)¨FÑ2Ñ3Ô3Ð3Ð3Ð3Ð3ð4øøøs   ‚ –!;º;r[   c                 ó   ‡‡‡‡— d„ S )z2Try replace decorated function by module.function.c                 ó   — | S r   r   )r!  s    r    rî   z_replace_by.<locals>.<lambda>�!  s   € �Q€ r"   )Ú	importlibÚimport_moduler˜  rí  )Úmodule_functionÚpackager¡   Úprefixrm   ÚdecorateÚ_warnr¾  s    ` `  @@r    Ú_replace_byrÄ  ‹!  s   øøøø€ àˆ;Ðr"   c                 óš  — | j         }| j        }t          |¦  «        dk     rt          d¦  «        ‚|j        dvrt          d¦  «        ‚| j        j        dk    pt          j        dk    o| j        j        dk    }|                      d¦  «        } |d	d
…         dz   |dd	…         z   | _         t          j	        | d
d| ¬¦  «         |r|d	d
…         dz   |d
d	…         z   | _         t          j
        | dd
¦  «        } t          j
        | d
d¦  «        } | dd	d	d…f         } t          j        | ¦  «        } |                      |¦  «        } || _         | S )aï  Decode floating point horizontal differencing.

    The TIFF predictor type 3 reorders the bytes of the image values and
    applies horizontal byte differencing to improve compression of floating
    point images. The ordering of interleaved color channels is preserved.

    Parameters
    ----------
    data : numpy.ndarray
        The image to be decoded. The dtype must be a floating point.
        The shape must include the number of contiguous samples per pixel
        even if 1.

    rÊ   zinvalid data shapeÚdfeznot a floating point imager…   r„   r‚   r   NrÂ   rß   rÁ   rß  rÞ   .)rE   r=   r.   r,   rV   r9   rŸ   rë  r<   rð  ÚswapaxesÚascontiguousarray)rD   rE   r=   Úlittleendians       r    rñ  rñ  ³!  sX  € ð ŒJ€EØŒJ€EÝ
ˆ5�z„z�A‚~€~ÝÐ-Ñ.Ô.Ð.Ø„z˜ÐÐÝÐ5Ñ6Ô6Ð6Ø”:Ô'¨3Ò.ð ÝŒ˜Ò!ÐA d¤jÔ&:¸cÒ&Að ð �9Š9�WÑÔ€DØ�s˜�s”˜eÑ# e¨B¨C¨C¤jÑ0€D„JÝ	„L�˜B g°4Ð8Ñ8Ô8Ð8àð 5Ø˜3˜B˜3”Z %Ñ'¨%°°°¬*Ñ4ˆŒ
ÝŒ>˜$  BÑ'Ô'€DÝŒ>˜$  BÑ'Ô'€DØ��T�T�r�T�	Œ?€DåÔ" 4Ñ(Ô(€DØ�9Š9�UÑÔ€DØ€D„JØ€Kr"   z_tifffile.decode_packbitsc                 ó¾  — t           j        d         dk    rt          nt          }g }|j        }d}	 	  || |         ¦  «        dz   }|dz  }|dk     r || |||z   …         ¦  «         ||z  }n'|dk    r! || ||dz   …         d|z
  z  ¦  «         |dz  }Œc# t
          $ r Y nw xY wt           j        d         dk    rd                     |¦  «        nt          |¦  «        S )zuDecompress PackBits encoded byte string.

    PackBits is a simple byte-oriented run-length compression scheme.

    r   rè   Tr&   é�   rà  r"   )rŸ   rf  Úordrí  rH  rŸ  r  rë   )Úencodedr^   rZ   Úresult_extendr   Úns         r    r¨  r¨  Ü!  s  € õ ”+˜a”. CÒ'Ð'�3ˆ3­\€DØ€FØ”M€MØ	€Aðð	Ø��W˜Q”ZÑ Ô  1Ñ$ˆAØ�‰FˆAØ�3ŠwˆwØ�˜g a¨!¨a©% iÔ0Ñ1Ô1Ð1Ø�Q‘��Ø�S’�Ø�˜g a¨!¨a©% iÔ0°C¸!±GÑ<Ñ=Ô=Ð=Ø�Q‘�ð	øõ ð ð ð Øˆðøøøå"œ{¨1œ~°Ò4Ð4ˆ3�8Š8�FÑÔÐ½%À¹-¼-ÐGs   ±A$B Â
B"Â!B"z_tifffile.decode_lzwc           	      óP  ‡ ‡‡‡‡— t          ‰ ¦  «        }|dz  }t          j        Št          j        d         dk    rd„ t          d¦  «        D ¦   «         }nd„ t          d¦  «        D ¦   «         }|                     d¦  «         ˆˆ ˆˆˆfd„}d	d
t          dd¦  «        fddt          dd¦  «        fddt          dd¦  «        fddt          dd¦  «        fdœ}|d         \  }ŠŠdŠ|dk     rt          d¦  «        ‚ |¦   «         dk    rt          d¦  «        ‚d}d}g }	|	j	        }
	  |¦   «         }‰|z  Š|dk    s‰|k    rn´|dk    rG|dd…         }|j	        }d}|d         \  }ŠŠ |¦   «         }‰|z  Š|dk    rny |
||         ¦  «         nT||k     r||         }||         |dd…         z   }n||         }||dd…         z  }|} |
|¦  «          ||¦  «         |dz  }|}||v r||         \  }ŠŠŒÐ|dk    rt          j        d |z  ¦  «         d!                     |	¦  «        S )"a+  Decompress LZW (Lempel-Ziv-Welch) encoded TIFF strip (byte string).

    The strip must begin with a CLEAR code and end with an EOI code.

    This implementation of the LZW decoding algorithm is described in (1) and
    is not compatible with old style LZW compressed files like quad-lzw.tif.

    rˆ   r   rè   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   )ÚchrrÚ   s     r    rK  zdecode_lzw.<locals>.<listcomp>"  s   € Ð/Ð/Ð/˜q•C˜‘F”FÐ/Ð/Ð/r"   rk  c                 ó.   — g | ]}t          |g¦  «        ‘ŒS r   )rë   rÚ   s     r    rK  zdecode_lzw.<locals>.<listcomp>"  s    € Ð3Ð3Ð3 1•E˜1˜#‘J”JÐ3Ð3Ð3r"   )r   r   c            
      óä   •— ‰dz  } ‰| | dz   …         }	  ‰d|¦  «        d         }n8# t           $ r+  ‰d|ddt          |¦  «        z
  z  z   ¦  «        d         }Y nw xY w|‰dz  z  }|‰z  }|‰z	  S )z@Return integer of 'bitw' bits at 'bitcount' position in encoded.rˆ   rŒ   z>Ir   rû   )r@   r.   )r­  rú   r  ÚbitcountrÍ  ÚmaskÚshrré  s      €€€€€r    Ú	next_codezdecode_lzw.<locals>.next_code
"  s¤   ø€ à˜A‘ˆØ�E˜E A™IÐ%Ô&ˆð	?Ø�6˜$ ‘?”? 1Ô%ˆDˆDøÝð 	?ð 	?ð 	?Ø�6˜$  G¨qµ3°q±6´6©zÑ$:Ñ :Ñ;Ô;¸AÔ>ˆDˆDˆDð	?øøøà�˜A‘ÑˆØ�‰ˆØ�s‰{Ðs   •( ¨2AÁArÄ   r�  Ú 11111111100000000000000000000000r‘   r\  r­  Ú 11111111110000000000000000000000r^  r€  Ú 11111111111000000000000000000000r�   r‰   Ú 11111111111100000000000000000000)rÿ  iÿ  iÿ  iÿ  rÿ  rŒ   z(strip must be at least 4 characters longz strip must begin with CLEAR codeTrl  Nrà  r&   z&unexpected end of LZW stream (code %i)r"   )r.   rº   ré  rŸ   rf  rq  rH  rÙ   r,   r7   r    r¡   r  )rÍ  Úlen_encodedÚbitcount_maxÚnewtablerØ  ÚswitchbitchÚbitwr  ÚoldcoderZ   Úresult_appendrÑ  Útable_appendÚlentableÚdecodedÚnewcoderÕ  rÖ  r×  ré  s   `               @@@@r    r   r   ö!  sÔ  øøøøø€ õ �g‘,”,€KØ ‘?€LÝŒ]€Få
„{�1„~˜ÒÐØ/Ð/¥E¨#¡J¤JÐ/Ñ/Ô/ˆˆà3Ð3­¨c©
¬
Ð3Ñ3Ô3ˆØ‡O‚O�FÑÔÐð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð �•SÐ+¨QÑ/Ô/Ð0Ø�"•cÐ-¨qÑ1Ô1Ð2Ø�2•sÐ.°Ñ2Ô2Ð3Ø�2•sÐ.°Ñ2Ô2Ð3ð	ð €Kð " #Ô&�O€Dˆ#ˆtØ€Hà�Q‚€ÝÐCÑDÔDÐDà€y�{„{�cÒÐÝÐ;Ñ<Ô<Ð<à€DØ€GØ€FØ”M€Mð4Øˆy‰{Œ{ˆØ�DÑˆØ�3Š;ˆ;˜( lÒ2Ð2ØØ�3Š;ˆ;Ø˜Q˜Q˜Q”KˆEØ œ<ˆLØˆHØ)¨#Ô.‰OˆD�#�tØ�9‘;”;ˆDØ˜ÑˆHØ�sŠ{ˆ{ØØˆM˜% œ+Ñ&Ô&Ð&Ð&à�hŠˆØ œ+�Ø œ.¨7°2°A°2¬;Ñ6��à œ.�Ø˜7 2 A 2œ;Ñ&�Ø!�ØˆM˜'Ñ"Ô"Ð"ØˆL˜Ñ!Ô!Ð!Ø˜‰MˆHØˆØ�{Ð"Ð"Ø)¨(Ô3‰OˆD�#�tð94ð< ˆs‚{€{ÝŒÐ>ÀÑEÑFÔFÐFà�8Š8�FÑÔÐr"   z_tifffile.unpack_intsc                 óž  ‡— ‰dk    rƒt          j        | d¦  «        } t          j        | ¦  «        } |dz  r@|                      d|d|dz  z
  z   ¦  «        } | dd…d|…f                              d¦  «        } |                      |¦  «        S t          j        |¦  «        }‰dv rt          j        | |¦  «        S ‰dvrt          d‰z  ¦  «        ‚|j        d	vrt          d
¦  «        ‚t          ˆfd„dD ¦   «         ¦  «        }||j	        k    rt          d¦  «        ‚|dk    rdt          | ¦  «        z  ‰z  }|‰z  dz  }|rd|z
  }|dz  ‰z
  }t          ‰dz  d|z  z   d¦  «        }d|j        z   }t          j        }	|t          | ¦  «        dz  |‰z  |z   z  z  }
t          j        |
f|¦  «        }d}t!          |
¦  «        D ]‹}|dz  }| |||z   …         }	  |	||¦  «        d         }n8# t"          $ r+  |	||d|t          |¦  «        z
  z  z   ¦  «        d         }Y nw xY w||dz  z  }||z  }||z	  ||<   |‰z  }|dz   |z  dk    r||z  }ŒŒ|S )a—  Decompress byte string to array of integers of any bit size <= 32.

    This Python implementation is slow and only handles itemsizes 1, 2, 4, 8,
    16, 32, and 64.

    Parameters
    ----------
    data : byte str
        Data to decompress.
    dtype : numpy.dtype or str
        A numpy boolean or integer type.
    itemsize : int
        Number of bits per integer.
    runlen : int
        Number of consecutive integers, after which to start at next byte.

    Examples
    --------
    >>> unpack_ints(b'a', 'B', 1)
    array([0, 1, 1, 0, 0, 0, 0, 1], dtype=uint8)
    >>> unpack_ints(b'ab', 'B', 2)
    array([1, 2, 0, 1, 1, 2, 0, 2], dtype=uint8)

    r&   z|Brˆ   rÁ   Nr  )r&   r‘   rŒ   rˆ   r¾   rÔ  zitemsize not supported: %iÚbiuzinvalid dtypec              3   ó.   •K  — | ]}d |z  ‰k    ¯|V — ŒdS ©rˆ   Nr   )r   r   r>   s     €r    r!   zunpack_ints.<locals>.<genexpr>w"  s1   øè è € ÐBÐB˜1°°A±¸Ò0AÐ0A�QÐ0AÐ0AÐ0AÐ0AÐBÐBr"   )r&   r‘   rŒ   rˆ   zdtype.itemsize too smallr   Ú1Ú0r‘   r†   rû   )r<   r×  Ú
unpackbitsrd  r_  r=   r,   ra  Únextr>   r.   rÙ   rV   rº   ré  ro  rq  r@   )rD   r=   r>   rÝ  Ú	itembytesÚskipbitsÚshrbitsÚbitmaskÚdtypestrré  rH   rZ   rÕ  r   r­  rú   r  s     `              r    rÜ  rÜ  M"  sÝ  ø€ ð4 �1‚}€}ÝÔ  dÑ+Ô+ˆÝÔ Ñ%Ô%ˆØ�A‰:ð 	0Ø—<’<  F¨a°&¸1±*©nÑ$=Ñ>Ô>ˆDØ˜˜˜˜7˜F˜7˜
Ô#×+Ò+¨BÑ/Ô/ˆDØ�{Š{˜5Ñ!Ô!Ð!åŒK˜ÑÔ€EØ�?Ð"Ð"ÝÔ  eÑ,Ô,Ð,ØÐ+Ð+Ð+ÝÐ5¸Ñ@ÑAÔAÐAØ„z˜ÐÐÝ˜Ñ)Ô)Ð)åÐBÐBÐBÐB ÐBÑBÔBÑBÔB€IØ�E”NÒ"Ð"ÝÐ3Ñ4Ô4Ð4Ø�‚{€{Ø•c˜$‘i”i‘- HÑ,ˆØ˜Ñ  1Ñ$€HØð  Ø�x‘<ˆØ˜!‰m˜hÑ&€GÝ�(˜S‘. 3¨¡=Ñ0°!Ñ4Ô4€GØ�U”ZÑ€HåŒ]€FØ•S˜‘Y”Y ‘] v°Ñ'8¸8Ñ'CÑDÑE€DÝŒ[˜$˜ %Ñ(Ô(€FØ€HÝ�4‰[Œ[ð !ð !ˆØ˜A‘ˆØ�˜ Ñ*Ð*Ô+ˆð	KØ�6˜( AÑ&Ô& qÔ)ˆDˆDøÝð 	Kð 	Kð 	KØ�6˜( A¨°9½sÀ1¹v¼vÑ3EÑ(FÑ$FÑGÔGÈÔJˆDˆDˆDð	Køøøà�˜A‘ÑˆØ�‰ˆØ˜G‘Oˆˆq‰	Ø�HÑˆØ�‰E�VÑ˜qÒ Ð Ø˜Ñ ˆHøØ€Ms   ÇG)Ç)2HÈHú<Br�  Tc           	      óz  ‡‡
— t          j        ‰¦  «        Št          t          j        |¦  «        ¦  «        Š
‰
dk    rt	          ˆfd„|D ¦   «         ¦  «        st          dt          |¦  «        z  ¦  «        ‚t          ˆ
fd„dD ¦   «         ¦  «        }t          j        | ‰j	        |z   ¦  «        } t          j
        | j        t          |¦  «        f‰j        ¦  «        }t          |¦  «        D ]º\  }}| t          t          j        ||dz   d…         ¦  «        ¦  «        z	  }|t          dd	|z  z   d
¦  «        z  }|rb‰j        dz  |z  dz   |z  }	|	| j        j        dz  k    r|                     d¦  «        }|d
|	z  dz
  d
|z  dz
  z  z  }|d
|	‰j        dz  z
  z  z  }||dd…|f<   Œ»|                     d¦  «        S )aÞ  Return array from byte string containing packed samples.

    Use to unpack RGB565 or RGB555 to RGB888 format.

    Parameters
    ----------
    data : byte str
        The data to be decoded. Samples in each pixel are stored consecutively.
        Pixels are aligned to 8, 16, or 32 bit boundaries.
    dtype : numpy.dtype
        The sample data type. The byteorder applies also to the data stream.
    bitspersample : tuple
        Number of bits for each sample in a pixel.
    rescale : bool
        Upscale samples to the number of bits in dtype.

    Returns
    -------
    result : ndarray
        Flattened array of unpacked samples of native dtype.

    Examples
    --------
    >>> data = struct.pack('BBBB', 0x21, 0x08, 0xff, 0xff)
    >>> print(unpack_rgb(data, '<B', (5, 6, 5), False))
    [ 1  1  1 31 63 31]
    >>> print(unpack_rgb(data, '<B', (5, 6, 5)))
    [  8   4   8 255 255 255]
    >>> print(unpack_rgb(data, '<B', (5, 5, 5)))
    [ 16   8   8 255 255 255]

    rÔ  c              3   ó4   •K  — | ]}|‰j         d z  k    V — ŒdS rë  )r>   )r   r   r=   s     €r    r!   zunpack_rgb.<locals>.<genexpr>º"  s/   øè è € ÐNÐN¸1˜q E¤N°QÑ$6Ò6ÐNÐNÐNÐNÐNÐNr"   zsample size not supported: %sc              3   ó\   •K  — | ]&}t          j        |¦  «        j        d z  ‰k    ¯"|V — Œ'dS rë  )r<   r=   r>   )r   r   Úbitss     €r    r!   zunpack_rgb.<locals>.<genexpr>¼"  s=   øè è € ÐFÐF�A¥%¤+¨a¡.¤.Ô"9¸AÑ"=ÀÒ"EÐ"EˆaÐ"EÐ"EÐ"EÐ"EÐFÐFr"   ÚBHIr&   NÚ0brì  r‘   rˆ   r�   rÁ   )r<   r=   rÙ   rv  r   r,   rœ   rï  r×  r9   ro  rH   r.   rV   rr  r>   r_  rd  )rD   r=   r<  Úrescaler-  rZ   r   r°  rG  Úorù  s    `        @r    rÚ  rÚ  —"  s×  øø€ õB ŒK˜ÑÔ€EÝ�uŒy˜Ñ'Ô'Ñ(Ô(€DØ�BŠJˆJ�3ÐNÐNÐNÐNÀÐNÑNÔNÑNÔNˆJÝÐ8½3¸}Ñ;MÔ;MÑMÑNÔNÐNÝ	ÐFÐFÐFÐF˜ÐFÑFÔFÑ	FÔ	F€BÝÔ˜D %¤/°BÑ"6Ñ7Ô7€DÝŒ[˜$œ)¥S¨Ñ%7Ô%7Ð8¸%¼*ÑEÔE€FÝ˜MÑ*Ô*ð 	ð 	‰ˆˆ3Ø•C�œ	 -°°A±°°Ô"8Ñ9Ô9Ñ:Ô:Ñ:ˆØ	�S�˜˜c™	Ñ! 1Ñ%Ô%Ñ%ˆØð 	2Ø”. 1Ñ$¨Ñ,¨qÑ0°CÑ7ˆAØ�4”:Ô&¨Ñ*Ò*Ð*Ø—H’H˜S‘M”M�Ø�!�Q‘$˜‘(  3¡¨¡
Ñ+Ñ+ˆAØ�!˜˜Uœ^¨aÑ/Ñ0Ñ1Ñ1ˆAØˆˆqˆqˆq�!ˆt‰ˆØ�>Š>˜"ÑÔÐr"   z_tifffile.reverse_bitorderc                 ó  — 	 |                       d¦  «        }t          j        t          j        ||¬¦  «         dS # t
          $ r" |                      t          j        ¦  «        cY S t          $ r t          d¦  «        ‚w xY w)aj  Reverse bits in each byte of byte string or numpy array.

    Decode data where pixels with lower column values are stored in the
    lower-order bits of the bytes (FillOrder is LSB2MSB).

    Parameters
    ----------
    data : byte string or ndarray
        The data to be bit reversed. If byte string, a new bit-reversed byte
        string is returned. Numpy arrays are bit-reversed in-place.

    Examples
    --------
    >>> reverse_bitorder(b'\x01\x64')
    b'\x80&'
    >>> data = numpy.array([1, 666], dtype='uint16')
    >>> reverse_bitorder(data)
    >>> data
    array([  128, 16473], dtype=uint16)

    r   rÍ  zslices of arrays not supportedN)
rë  r<   ÚtakerO   rÃ  rc   Ú	translaterÁ  r,   rá  )rD   rë  s     r    rì  rì  Ì"  s”   € ð.DØ�yŠy˜Ñ!Ô!ˆÝŒ
•4Ô.°¸$Ð?Ñ?Ô?Ð?Ð?Ð?øÝð ;ð ;ð ;Ø�~Š~�dÔ9Ñ:Ô:Ð:Ð:Ð:Ýð Dð Dð DÝ!Ð"BÑCÔCÐCðDøøøs   ‚6: º)A>Á%A>c                 ó–   — t          j        || d¬¦  «        } t          j        | d| j        ¦  «        } |rt          j        | ¦  «        } | S )a±  Return palette-colored image.

    The image values are used to index the colormap on axis 1. The returned
    image is of shape image.shape+colormap.shape[0] and dtype colormap.dtype.

    Parameters
    ----------
    image : numpy.ndarray
        Indexes into the colormap.
    colormap : numpy.ndarray
        RGB lookup table aka palette of shape (3, 2**bits_per_sample).
    contig : bool
        If True, return a contiguous array.

    Examples
    --------
    >>> image = numpy.arange(256, dtype='uint8')
    >>> colormap = numpy.vstack([image, image, image]).astype('uint16') * 256
    >>> apply_colormap(image, colormap)[-1]
    array([65280, 65280, 65280], dtype=uint16)

    r&   rÍ   r   )r<   rÿ  Úrollaxisr“  rÈ  )Úimager}  Úcontigs      r    r  r  ì"  sL   € õ. ŒJ�x ¨QÐ/Ñ/Ô/€EÝŒN˜5 ! U¤ZÑ0Ô0€EØð /ÝÔ'¨Ñ.Ô.ˆØ€Lr"   c                 ór  — t           j        }t          ||¦  «        }||j        k    r| S ||j        k    r| dddd…dd…f         S ||j        k    r| dddd…dd…dd…f         S ||j        k    r| dddd…ddd…dd…f         S ||j        k    rt          j	        | dd¦  «        S ||j
        k    r$t          j	        | dd¦  «        dddd…dd…f         S ||j        k    r't          j	        | dd¦  «        dddd…dd…dd…f         S ||j        k    r(t          j	        | dd¦  «        dddd…ddd…dd…f         S dS )a+  Return reoriented view of image array.

    Parameters
    ----------
    image : numpy.ndarray
        Non-squeezed output of asarray() functions.
        Axes -3 and -2 must be image length and width respectively.
    orientation : int or str
        One of TIFF.ORIENTATION names or values.

    .NrÁ   rÞ   rÂ   )rO   rÀ  r\  r   r!  r#  r"  r$  r<   rÇ  r%  r&  r'  )r  ÚorientationrÀ  s      r    Úreorientr  
#  s–  € õ Ô"€KÝ˜+ {Ñ3Ô3€Kà�kÔ)Ò)Ð)ØˆØ	˜Ô,Ò	,Ð	,Ø�S˜$˜$˜B˜$   �\Ô"Ð"Ø	˜Ô+Ò	+Ð	+Ø�S˜$˜$˜B˜$    1 1 1�_Ô%Ð%Ø	˜Ô,Ò	,Ð	,Ø�S˜$˜$˜B˜$   "  a a aÐ'Ô(Ð(Ø	˜Ô+Ò	+Ð	+ÝŒ~˜e R¨Ñ,Ô,Ð,Ø	˜Ô,Ò	,Ð	,ÝŒ~˜e R¨Ñ,Ô,¨S°$°$°B°$¸¸¸¨\Ô:Ð:Ø	˜Ô,Ò	,Ð	,ÝŒ~˜e R¨Ñ,Ô,¨S°$°$°B°$¸¸¸¸1¸1¸1¨_Ô=Ð=Ø	˜Ô+Ò	+Ð	+ÝŒ~˜e R¨Ñ,Ô,¨S°$°$°B°$¸¸¸"¸¸a¸a¸aÐ-?Ô@Ð@ð 
,Ð	+r"   c                 ó|  — t          j        | ¦  «        } g }g }g }t          | j        | j        |¦  «        D ]L\  }}}|                     ||f¦  «         |                     |df¦  «         |                     ||z  ¦  «         ŒMt           j        j         	                    | ||d¬¦  «         
                    |¦  «        S )a   Return read-only view into input array with elements repeated.

    Zoom nD image by integer factors using nearest neighbor interpolation
    (box filter).

    Parameters
    ----------
    a : array_like
        Input array.
    repeats : sequence of int
        The number of repetitions to apply along each dimension of input array.

    Example
    -------
    >>> repeat_nd([[1, 2], [3, 4]], (2, 2))
    array([[1, 1, 2, 2],
           [1, 1, 2, 2],
           [3, 3, 4, 4],
           [3, 3, 4, 4]])

    r   F)Ú	writeable)r<   r/   r5  ÚstridesrE   rH  r7   ÚlibÚstride_tricksÚ
as_stridedrd  )r|   Úrepeatsrd  rE   r
  r   r7  r  s           r    r   r   +#  sÄ   € õ, 	Œ�aÑÔ€AØ€GØ€EØ€GÝ�q”y !¤'¨7Ñ3Ô3ð ð ‰ˆˆ1ˆaØ�Š�a˜�VÑÔÐØ�Š˜˜1�vÑÔÐØ�Š�q˜1‘uÑÔÐÐÝŒ9Ô"×-Ò-Ø	ˆ5�' Uð .ñ ô ç‚gˆgÑÔðr"   c                 óÎ   — t          | t          ¦  «        }|r| n| j        }t          |¦  «        |k    r| S d|t          |¦  «        z
  z  |z   }|r|n|                      |¦  «        S )a‡  Return image array or shape with at least ndim dimensions.

    Prepend 1s to image shape as necessary.

    >>> reshape_nd(numpy.empty(0), 1).shape
    (0,)
    >>> reshape_nd(numpy.empty(1), 2).shape
    (1, 1)
    >>> reshape_nd(numpy.empty((2, 3)), 3).shape
    (1, 2, 3)
    >>> reshape_nd(numpy.empty((3, 4, 5)), 3).shape
    (3, 4, 5)
    >>> reshape_nd((2, 3), 3)
    (1, 2, 3)

    rà   )r(   r  rE   r.   rd  )Údata_or_shaper“  Úis_shaperE   s       r    rb  rb  N#  sr   € õ" ˜-­Ñ/Ô/€HØ%Ð>ˆMˆM¨=Ô+>€EÝ
ˆ5�z„z�TÒÐØÐØ�D�3˜u™:œ:Ñ%Ñ&¨Ñ.€EØÐ>ˆ5ˆ5 -×"7Ò"7¸Ñ">Ô">Ð>r"   rº  c                 óö   ‡— t          | ¦  «        t          |¦  «        k    rt          d¦  «        ‚t          ˆfd„t          | |¦  «        D ¦   «         Ž \  } }t          | ¦  «        d                     |¦  «        fS )zÑReturn shape and axes with single-dimensional entries removed.

    Remove unused dimensions unless their axes are listed in 'skip'.

    >>> squeeze_axes((5, 1, 2, 1, 1), 'TZYXC')
    ((5, 2, 1), 'TYX')

    z)dimensions of axes and shape do not matchc              3   óH   •K  — | ]}|d          dk    s
|d         ‰v ¯|V — ŒdS )r   r&   Nr   )r   r   r¨  s     €r    r!   zsqueeze_axes.<locals>.<genexpr>r#  s7   øè è € ÐPÐP˜a°q¸´t¸a²x°xÀ1ÀQÄ4È4À<À<˜À<À<À<À<ÐPÐPr"   r,  )r.   r,   r5  r  r  )rE   r  r¨  s     `r    r¢  r¢  g#  ss   ø€ õ ˆ5�z„z•S˜‘Y”YÒÐÝÐDÑEÔEÐEÝÐPÐPÐPÐP¥3 u¨dÑ#3Ô#3ÐPÑPÔPÐQ�K€Eˆ4Ý�‰<Œ<˜Ÿš ™œÐ&Ð&r"   ÚCTZYXc                 óø   ‡— ‰D ]}||vrt          d|z  ¦  «        ‚Œ| j        }t          |¦  «        D ]}|‰vr
|‰z   Šd|z   }Œ|                      |¦  «        } |                      ˆfd„|D ¦   «         ¦  «        } | S )zÌReturn image with its axes permuted to match specified axes.

    A view is returned if possible.

    >>> transpose_axes(numpy.zeros((2, 3, 4, 5)), 'TYXC', asaxes='CTZYX').shape
    (5, 2, 1, 3, 4)

    zunknown axis %srà   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   r{  )r   r‡  r  s     €r    rK  z"transpose_axes.<locals>.<listcomp>Š#  s#   ø€ Ð=Ð=Ð=°˜TŸZšZ¨™^œ^Ð=Ð=Ð=r"   )r,   rE   rT  rd  Ú	transpose)r  r  Úasaxesr‡  rE   s    `   r    Útranspose_axesr  v#  s°   ø€ ð ð 5ð 5ˆØ�VÐÐÝÐ.°Ñ3Ñ4Ô4Ð4ð ð ŒK€EÝ�vÑÔð !ð !ˆØ�Tˆ>ˆ>Ø˜‘9ˆDØ˜5‘LˆEøØ�MŠM˜%Ñ Ô €Eà�OŠOÐ=Ð=Ð=Ð=°fÐ=Ñ=Ô=Ñ>Ô>€EØ€Lr"   rŠ   c                 óT  — t          |¦  «        }t          |¦  «        }t          | ¦  «        t          |¦  «        k    rt          d¦  «        ‚t          |¦  «        }t          |¦  «        }||k    rt          d|›d|›�¦  «        ‚| r|sdS t	          dt          |¦  «        t          |¦  «        z
  ¦  «        }|r|d|z  z   }t          |¦  «        dz
  }d}d}	g }
|ddd	…         D ]˜}||z  }|dk    r/||         dk    r#|dk    r|dz  }|dk    r||         dk    r|dk    °|||         k    r;||	||         z  k    r,|	||         z  }	|
                     | |         ¦  «         |dz  }Œƒ|
                     |¦  «         Œ™d                     t          |
|d…         ¦  «        ¦  «        S )
záReturn axes matching new shape.

    Unknown dimensions are labelled 'Q'.

    >>> reshape_axes('YXS', (219, 301, 1), (219, 301))
    'YX'
    >>> reshape_axes('IYX', (12, 219, 301), (3, 4, 219, 1, 301, 1))
    'QQYQXQ'

    r-  zcannot reshape r	  r,  r   rà   r&   NrÁ   )r  r.   r,   r   r  r7   r  rT  )r  rE   ÚnewshapeÚunknownrH   ÚnewsizeÚlendiffr   ÚprodnsÚprodsrZ   Únss               r    r)  r)  Ž#  sÒ  € õ �%‰LŒL€EÝ�X‰Œ€HÝ
ˆ4�y„y•C˜‘J”JÒÐÝÐ2Ñ3Ô3Ð3å�5‰>Œ>€DÝ�hÑÔ€GØˆw‚€Ýˆj°e°e°e¸X¸XÐFÑGÔGÐGØð �xð Øˆrå�!•S˜‘Z”Z¥# h¡-¤-Ñ/Ñ0Ô0€GØð -Ø˜d W™nÑ,ˆåˆE‰
Œ
�Q‰€AØ€FØ€EØ€FØ�t�t˜�tŒnð 	#ð 	#ˆØ�"‰ˆØ�!Šeˆe˜˜aœ Aš˜¨"°ª'¨'Ø�‰FˆAð �!Šeˆe˜˜aœ Aš˜¨"°ª'¨'à��q”Š>ˆ>˜f¨°°a´Ñ(8Ò8Ð8Ø�U˜1”XÑˆEØ�MŠM˜$˜qœ'Ñ"Ô"Ð"Ø�‰FˆAˆAà�MŠM˜'Ñ"Ô"Ð"Ð"à�7Š7•8˜F 7 8 8Ô,Ñ-Ô-Ñ.Ô.Ð.r"   r&   c                 óR  — t          | ¦  «        }|dk    rt          d¦  «        ‚|dk    r | d         j        |d|i|¤ŽS t          d„ | D ¦   «         ¦  «        }|                     d¬¦  «         |f|j        j        z   }|j        j        }t          |||¦  «        }|€t          j	        ¦   «         dz  }|dk    |j
        j        _        t          t          d	|¦  «        |j
        j        j        ¬
¦  «        }	||	||fd„}
|dk     r"t          | ¦  «        D ]\  }} |
||¦  «         Œn[t           j                             |¦  «        5 }|                     |
| t)          |¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   |	                     ¦   «          d|j
        j        _        |S )zŒRead data from sequence of TiffPage and stack them vertically.

    Additional parameters are passed to the TiffPage.asarray function.

    r   zno pagesr&   r  c              3   ó   K  — | ]}|®|V — Œ	d S r   r   )r   rÝ  s     r    r!   zstack_pages.<locals>.<genexpr>È#  s"   è è € Ð3Ð3�q Q ]� ] ] ] ]Ð3Ð3r"   N)r  r‘   rŒ   )rH   râ  c                 ó¼   — | �Y|                      | j        j        ¦  «          | j        ||j        dddœ|¤Ž||<   |                     | j        j        ¦  «         dS dS )z!Read, decode, and copy page data.NF)râ  rò  r  )rã  r“  rï  r/   râ  rÍ  )rX   r‰  r  Ú	filecacher	  r0   s         r    r^   zstack_pages.<locals>.funcÖ#  su   € àÐØ�NŠN˜4œ;Ô1Ñ2Ô2Ð2Ø%˜œØDH�Y”^¨E¸Eðð ØLRðð ˆC�‰Jð �OŠO˜DœKÔ2Ñ3Ô3Ð3Ð3Ð3ð Ðr"   )r.   r,   r/   rï  r  rE   r=   r   ÚmultiprocessingÚ	cpu_countr“  rï  râ  rW  r  rr  Ú
concurrentÚfuturesÚThreadPoolExecutorÚmaprq  r!  )rQ   r  r  r	  r0   r5  rj  rE   r=   r%  r^   r   rX   Úexecutors                 r    r  r  »#  s  € õ �‰ZŒZ€FØ�‚{€{Ý˜Ñ$Ô$Ð$à�‚{€{Øˆu�QŒxÔ¨$Ð9 CÐ9°&Ð9Ð9Ð9åÐ3Ð3˜EÐ3Ñ3Ô3Ñ3Ô3€EØ	‡M‚M˜4€MÑ Ô Ð ØˆI˜œÔ,Ñ,€EØŒNÔ €EÝ
˜˜U EÑ
*Ô
*€CàÐÝ$Ô.Ñ0Ô0°AÑ5ˆ
Ø#-°¢>€E„LÔÔ åÝ��JÑÔ e¤lÔ&=Ô&Bðñ ô €Ið "¨Y¸TÈ&ð 4ð 4ð 4ð 4ð �A‚~€~Ý  Ñ'Ô'ð 	ð 	‰GˆAˆtØˆD��q‰MŒMˆMˆMð	õ Ô×2Ò2°:Ñ>Ô>ð 	5À(Ø�LŠL˜˜u¥e¨F¡m¤mÑ4Ô4Ð4ð	5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð ‡O‚OÑÔÐØ#'€E„LÔÔ à€Js   Å%E7Å7E;Å>E;c                 ó¬  — t          | ¦  «        } t          |¦  «        }t          | ¦  «        t          |¦  «        k    sJ ‚d}t          t          | |¦  «        ¦  «        D ]Y\  }\  }}|dk    r|dk    r||k    r
|| |<   |||<   |dz  }Œ*|dk    r|dk    rt	          d¦  «        ‚t          j        d¦  «         ŒZ|dk    rd}| d|…         |d|…         fS )zŸReturn cleaned offsets and byte counts.

    Remove zero offsets and counts. Use to sanitize _offsets and _bytecounts
    tag values for strips or tiles.

    r   r&   zinvalid offsetzempty byte countN)r  r.   rr  r5  r,   r    r¡   )rß  Úcountsr7  r   rý  r{  s         r    r  r  ì#  sù   € õ �7‰mŒm€GÝ�&‰\Œ\€FÝˆw‰<Œ<�3˜v™;œ;Ò&Ð&Ð&Ð&Ø	€AÝ�s 7¨FÑ3Ô3Ñ4Ô4ð 	.ð 	.‰	ˆ‰6ˆAˆqØˆqŠ5ˆ5�Q˜’U�UØ�1ŠuˆuØ�˜‘
Ø��q‘	Ø�‰FˆAˆAØ�ŠUˆU�q˜A’v�vÝÐ-Ñ.Ô.Ð.åŒMÐ,Ñ-Ô-Ð-Ð-ØˆA‚v€vØˆØ�2�A�2Œ;˜˜r ˜rœ
Ð"Ð"r"   é   c              #   óp  K  — t          |¦  «        }d}||k     rœg }|5  d}||k     rg||k     ra|                      ||         ¦  «         ||         }	|                     |                      |	¦  «        ¦  «         ||	z  }|dz  }||k     r||k     °addd¦  «         n# 1 swxY w Y   |D ]}
|
V — Œ||k     °šdS dS )z+Return iterator over blocks read from file.r   r&   N)r.   r%   r7   rè  )r¼   râ  rß  rá  Ú
buffersizeÚlengthr   rD   rH   Ú	bytecountr!  s              r    rî  rî  $  s+  è è € å�‰\Œ\€FØ	€AØ
ˆfŠ*ˆ*ØˆØð 	ð 	ØˆDØ˜Ò#Ð#¨¨Fª
¨
Ø—’˜ œ
Ñ#Ô#Ð#Ø& qœM�	Ø—’˜BŸGšG IÑ.Ô.Ñ/Ô/Ð/Ø˜	Ñ!�Ø�Q‘�ð ˜Ò#Ð#¨¨Fª
¨
ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ð 	ð 	ˆEØˆKˆKˆKˆKð ˆfŠ*ˆ*ˆ*ˆ*ˆ*ˆ*s   žA0BÂBÂ!Búw+ú.memmapc                 óÚ  — | €t          j        ||¦  «        S t          | t          ¦  «        rs| dd…         dk    ret	          | ¦  «        dk    r
| dd…         nd}t          j        ||¬¦  «        5 }t          j        ||||¬¦  «        cddd¦  «         S # 1 swxY w Y   t          | t           j        ¦  «        rrt          |¦  «        t          | j
        ¦  «        k    rt          d¦  «        ‚t          j        || j        ¦  «        st          d¦  «        ‚|                      |¦  «        S t          | t          j        ¦  «        rt          | ¦  «        } t          j        | |||¬¦  «        S )	a»  Return numpy array where image data of shape and dtype can be copied.

    The 'out' parameter may have the following values or types:

    None
        An empty array of shape and dtype is created and returned.
    numpy.ndarray
        An existing writable array of compatible dtype and shape. A view of
        the same array is returned after verification.
    'memmap' or 'memmap:tempdir'
        A memory-map to an array stored in a temporary binary file on disk
        is created and returned.
    str or open file
        The file name or file object used to create a memory-map to an array
        stored in a binary file on disk. The created memory-mapped array is
        returned.

    Nræ   r   rË  )r¹  Úsuffix)rE   r=   rY   zincompatible output shapezincompatible output dtype)r<   rï  r(   rœ   r.   ÚtempfileÚNamedTemporaryFiler   r  r   rE   r,   Úcan_castr=   rd  rý  rþ  )r  rE   r=   rY   r7  Útempdirr¼   s          r    r   r   $  s   € ð& €{ÝŒ{˜5 %Ñ(Ô(Ð(Ý�#•sÑÔð I  B Q B¤¨8Ò 3Ð 3Ý  ™XœX¨š\˜\�#�a�b�b”'�'¨tˆÝÔ(¨W¸VÐDÑDÔDð 	IÈÝ”< ¨%°uÀ4ÐHÑHÔHð	Ið 	Ið 	Ið 	Iñ 	Iô 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Iøøøð 	Ið 	Ið 	Ið 	Iå�#•u”}Ñ%Ô%ð "Ý�5‰>Œ>�W S¤YÑ/Ô/Ò/Ð/ÝÐ8Ñ9Ô9Ð9ÝŒ~˜e S¤YÑ/Ô/ð 	:ÝÐ8Ñ9Ô9Ð9Ø�{Š{˜5Ñ!Ô!Ð!Ý�#•w”|Ñ$Ô$ð Ý�#‰hŒhˆÝŒ<˜ 5°¸DÐAÑAÔAÐAs   Á0BÂBÂBc                 ó~  ‡‡‡‡— ˆfd„Šd„ Šdd„Šˆˆfd„}d| v sd| v r•i }|                       ¦   «         D ]|}|                     ¦   «         }|r|d         d	k    rŒ%|                     d
d¦  «        \  Š}‰                     ¦   «         Št          ˆfd„dD ¦   «         ¦  «        rŒn ||¦  «        |‰<   Œ}|S  || ¦  «        S )aE  Return Python object from Matlab string representation.

    Return str, bool, int, float, list (Matlab arrays or cells), or
    dict (Matlab structures) types.

    Use to access ScanImage metadata.

    >>> matlabstr2py('1')
    1
    >>> matlabstr2py("['x y z' true false; 1 2.0 -3e4; NaN Inf @class]")
    [['x y z', True, False], [1, 2.0, -30000.0], [nan, inf, '@class']]
    >>> d = matlabstr2py("SI.hChannels.channelType = {'stripe' 'stripe'}\n"
    ...                  "SI.hChannels.channelsActive = 2")
    >>> d['SI.hChannels.channelType']
    ['stripe', 'stripe']

    c                 óD  •— dg}	  ‰| ¦  «        \  }}|€nt|dk    r|                      d¦  «         nM|dk    r|                      d¦  «         n1|dk    r|                      d¦  «         n|                     |¦  «         | |d …         } Œ…|                     d¦  «         |S )Nr-  Tú;)ú]r-  )r-  r-  r?  )r?  r?  )rH  r7   )rú   ÚtokensrG  r   Ú
next_tokens       €r    Úlexzmatlabstr2py.<locals>.lexQ$  s¿   ø€ à�ˆð	Ø�:˜a‘=”=‰DˆAˆqØˆyØØ�CŠxˆxØ—’˜jÑ)Ô)Ð)Ð)Ø�c’�Ø—’˜jÑ)Ô)Ð)Ð)Ø�c’�Ø—’˜jÑ)Ô)Ð)Ð)à—’˜aÑ Ô Ð Ø�!�"�"”ˆAð	ð 	�Š�cÑÔÐØˆr"   c                 ó^  — t          | ¦  «        }|dk    rdS d}||k     r#| |         dk    r|dz  }||k     r| |         dk    °||k    rd |fS | |         dv r| |         |dz   fS | |         dk    r@|dz   }||k     r#| |         dk    r|dz  }||k     r| |         dk    °| ||dz   …         |dz   fS | |         dk    r@|dz   }||k     r#| |         dk    r|dz  }||k     r| |         dk    °| ||dz   …         |dz   fS |}||k     r| |         d	vr|dz  }||k     r
| |         d	v°| ||…         |fS )
Nr   rA  r  r&   z{[;]}rä  r…   r†   z {[;]}©r.   )rú   r2  r   r7  s       r    rA  z matlabstr2py.<locals>.next_tokend$  s¢  € å�Q‘”ˆØ�QŠ;ˆ;Ø�7ØˆØ�&Šjˆj˜Q˜qœT Sš[˜[Ø�‰FˆAð �&Šjˆj˜Q˜qœT Sš[˜[à�Š;ˆ;Ø˜�7ˆNØˆQŒ4�7ˆ?ˆ?Ø�Q”4˜˜Q™�;ÐØˆQŒ4�3Š;ˆ;Ø�A‘ˆAØ�f’*�*  1¤¨¢ Ø�Q‘�ð �f’*�*  1¤¨¢ à�Q˜˜Q™�Y”<  Q¡Ð&Ð&ØˆQŒ4�3Š;ˆ;Ø�A‘ˆAØ�f’*�*  1¤¨¢ Ø�Q‘�ð �f’*�*  1¤¨¢ à�Q˜˜Q™�Y”<  Q¡Ð&Ð&ØˆØ�&Šjˆj˜Q˜qœT¨Ð1Ð1Ø�‰FˆAð �&Šjˆj˜Q˜qœT¨Ð1Ð1à��1�Œv�qˆyÐr"   Fc                 óˆ  ‡ — ‰                       ¦   «         Š ‰ s‰ S t          ‰ ¦  «        dk    r2	 t          ‰ ¦  «        S # t          $ r |rt	          ¦   «         ‚‰ cY S w xY w‰ d         dk    r2|r‰ d         dk    sd‰ dd…         v rt	          ¦   «         ‚‰ dd…         S ‰ d         dk    r*|r‰ d         dk    sd‰ dd…         v rt	          ¦   «         ‚‰ S |r)t          ˆ fd„dD ¦   «         ¦  «        rt	          ¦   «         ‚‰ d         d	k    r‰ S ‰ d
v rdS ‰ dv rdS ‰ d d…         dk    rKt          j        d„ ‰ dd…                              d¦  «        D ¦   «         ¦  «         	                    ¦   «         S ‰ d d…         dk    rKt          j
        d„ ‰ dd…                              d¦  «        D ¦   «         ¦  «         	                    ¦   «         S d‰ v sd‰ v r 	 t          ‰ ¦  «        S # t          $ r Y nw xY w	 t          ‰ ¦  «        S # t          $ r Y nw xY w	 t          ‰ ¦  «        S # t          $ r |rt	          ¦   «         ‚Y nw xY w‰ S )Nr&   r   rä  rÁ   r…   r†   c              3   ó    •K  — | ]}|‰v V — Œ	d S r   r   )r   r   rú   s     €r    r!   z.matlabstr2py.<locals>.value.<locals>.<genexpr>“$  s'   øè è € Ð2Ð2 1˜˜Q˜Ð2Ð2Ð2Ð2Ð2Ð2r"   z ';[]{}ú@)r†  ÚTrueT)r‡  ÚFalseFræ   zzeros(c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   rØ   rÚ   s     r    rK  z/matlabstr2py.<locals>.value.<locals>.<listcomp>œ$  s   € ÐCÐCÐC¨1¥ A¡¤ÐCÐCÐCr"   r–  rå   zones(c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   rØ   rÚ   s     r    rK  z/matlabstr2py.<locals>.value.<locals>.<listcomp>ž$  s   € ÐBÐBÐB¨!�s 1™vœvÐBÐBÐBr"   ú.rm   )r±  r.   rÙ   r@   r,   r*   r<   rï  r  rh  Úonesr›  )rú   Úfails   ` r    rl   zmatlabstr2py.<locals>.value$  sÉ  ø€ à�GŠG‰IŒIˆØð 	ØˆHÝˆq‰6Œ6�QŠ;ˆ;ðÝ˜1‘v”v�øÝð ð ð Øð 'Ý$™,œ,Ð&Ø���ðøøøð ˆQŒ4�3Š;ˆ;Øð #˜˜"œ š˜¨¨q°°2°¬w¨¨Ý ‘l”lÐ"Ø�Q�r�T”7ˆNØˆQŒ4�3Š;ˆ;Øð #˜˜"œ š˜¨¨q°°2°¬w¨¨Ý ‘l”lÐ"ØˆHØð 	•CÐ2Ð2Ð2Ð2¨	Ð2Ñ2Ô2Ñ2Ô2ð 	Ý‘,”,ÐØˆQŒ4�3Š;ˆ;ØˆHØÐ Ð Ð Ø�4ØÐ"Ð"Ð"Ø�5ØˆRˆaˆRŒ5�HÒÐÝ”;ÐCÐC°°!°B°$´·²¸cÑ0BÔ0BÐCÑCÔCÑDÔD×KÒKÑMÔMÐMØˆRˆaˆRŒ5�GÒÐÝ”:ÐBÐB¨q°°2°¬w¯}ª}¸SÑ/AÔ/AÐBÑBÔBÑCÔC×JÒJÑLÔLÐLØ�!ˆ8ˆ8�s˜a�x�xðÝ˜Q‘x”x�øÝð ð ð Ø�ðøøøð	Ý�q‘6”6ˆMøÝð 	ð 	ð 	ØˆDð	øøøð	#Ý˜‘8”8ˆOøÝð 	#ð 	#ð 	#Øð #Ý ‘l”lÐ"ð#ð #ð	#øøøð ˆsE   ®= ½AÁAÇG" Ç"
G/Ç.G/Ç3H È
HÈHÈH" È"H?È>H?c                 ój  •— |                       ¦   «         } 	  ‰| d¬¦  «        S # t          $ r Y nw xY wg x}}|g} ‰| ¦  «        D ]¯}|dv rg }|                     |¦  «         Œ|dv ro|                     ¦   «         }t	          |¦  «        dk    r*t          |d         t          t          f¦  «        r|d         }|d         }|                     |¦  «         Œ‘|                      ‰|¦  «        ¦  «         Œ°t	          |¦  «        dk    r*t          |d         t          t          f¦  «        r|d         }|S )NT)rN  z[{z]}r&   r   rÁ   )r±  r,   r7   r   r.   r(   r  rœ   )rú   rZ   Úadd2ÚlevelsrG  rí   rB  rl   s         €€r    r´  zmatlabstr2py.<locals>.parse¯$  sF  ø€ à�GŠG‰IŒIˆð	Ø�5˜ Ð&Ñ&Ô&Ð&øÝð 	ð 	ð 	ØˆDð	øøøàÐˆ�Ø�ˆØ��Q‘”ð 	&ð 	&ˆAØ�DˆyˆyØ�Ø—’˜dÑ#Ô#Ð#Ð#Ø�d��Ø—J’J‘L”L�Ý�q‘6”6˜Q’;�;¥:¨a°¬dµT½3°KÑ#@Ô#@�;Ø˜!œ�AØ˜b”z�Ø—’˜A‘”��à—’˜E˜E !™HœHÑ%Ô%Ð%Ð%Ýˆv‰;Œ;˜!ÒÐ¥
¨6°!¬9µt½S°kÑ BÔ BÐØ˜A”YˆFØˆs   —$ ¤
1°1úró  r   ú%r‚   r&   c              3   ó    •K  — | ]}|‰v V — Œ	d S r   r   )r   r1  r  s     €r    r!   zmatlabstr2py.<locals>.<genexpr>Ñ$  s'   øè è € Ð/Ð/˜a�1˜�6Ð/Ð/Ð/Ð/Ð/Ð/r"   z	 ';[]{}<>rL  )r.  r±  r  r*   )	rú  r´  r—  ræ  r©  r  rB  rA  rl   s	        @@@@r    r9  r9  <$  s*  øøøø€ ð*ð ð ð ð ð&ð ð ð6.ð .ð .ð .ð`ð ð ð ð ð ð2 ˆv€~€~˜ ˜˜àˆØ×%Ò%Ñ'Ô'ð 	ð 	ˆDØ—:’:‘<”<ˆDØð ˜4 œ7 cš>˜>ØØ—:’:˜c 1Ñ%Ô%‰DˆAˆqØ—’‘	”	ˆAÝÐ/Ð/Ð/Ð/ ;Ð/Ñ/Ô/Ñ/Ô/ð ØØ�5˜‘8”8ˆAˆa‰DˆDØˆØˆ5�‰=Œ=Ðr"   rû   c                 óP   — |                       |¦  «        }|dk     r| n	| d|…         S )zçReturn string truncated at first null character.

    Clean NULL terminated C strings. For unicode strings use null='\0'.

    >>> stripnull(b'string\x00')
    b'string'
    >>> stripnull('string\x00', null='\0')
    'string'

    r   N)r   )rú  r(  r   s      r    r   r   Ø$  s/   € ð 	�Š�DÑÔ€AØ˜!’e�eˆ6ˆ6 &¨¨!¨¤*Ð,r"   c                 ó˜   — t          | ¦  «        }|r+|dz  }dt          | |         ¦  «        cxk     rdk     rn nn|°+d}| d|dz   …         S )zçReturn string truncated at last byte that is 7-bit ASCII.

    Clean NULL separated and terminated TIFF strings.

    >>> stripascii(b'string\x00string\n\x01\x00')
    b'string\x00string\n'
    >>> stripascii(b'\x00')
    b''

    r&   rˆ   é   rÁ   N)r.   Úbyte2int)rú  r   s     r    r×  r×  ç$  st   € õ 	ˆF‰Œ€AØ
ð Ø	ˆQ‰ˆØ�x˜˜qœ	Ñ"Ô"Ð(Ð(Ò(Ð( SÒ(Ð(Ð(Ð(Ð(Øð ð ð
 ˆØ�'�A˜‘E�'Œ?Ðr"   ©s   truer†  ©s   falser‡  c                 ó‚   — |                       ¦   «                              ¦   «         } | |v rdS | |v rdS t          ¦   «         ‚)zdReturn string as bool if possible, else raise TypeError.

    >>> asbool(b' False ')
    False

    TF)r±  r	  r  )rl   r†  r‡  s      r    r¯  r¯  ý$  sC   € ð �KŠK‰MŒM×ÒÑ!Ô!€EØ�€}€}ØˆtØ�€~€~ØˆuÝ
‰+Œ+Ðr"   c                 ó¨   — |€t           t          t          t          f}|D ]2}	  || ¦  «        c S # t          t
          t          t          f$ r Y Œ/w xY w| S )zºReturn argument as one of types if possible.

    >>> astype('42')
    42
    >>> astype('3.14')
    3.14
    >>> astype('True')
    True
    >>> astype(b'Neee-Wom')
    'Neee-Wom'

    )rÙ   r›  r¯  rÖ  r,   rc   r  ÚUnicodeEncodeError)rl   rµ  Útyps      r    r_  r_  %  sn   € ð €}Ý•U�F¥IÐ-ˆØð ð ˆð	Ø�3�u‘:”:ÐÐÐøÝ�N­IÕ7IÐJð 	ð 	ð 	ØˆDð	øøøà€Ls   ¢
/¯AÁAé   c                 óN   — | |k     rd| z  S dD ]}| dz  } | |k     r	d| |fz  c S ŒdS )z‰Return file size as string from byte size.

    >>> format_size(1234)
    '1234 B'
    >>> format_size(12345678901)
    '11.50 GiB'

    z%i B)ÚKiBÚMiBÚGiBÚTiBÚPiBg      �@z%.2f %sNr   )rH   Ú	thresholdr›  s      r    r   r   #%  s`   € ð ˆiÒÐØ˜‰}ÐØ3ð ,ð ,ˆØ�‰ˆØ�)ÒÐØ  d˜|Ñ+Ð+Ð+Ð+ð ð,ð ,r"   c                 ó   — | S )zOSingle argument identity function.

    >>> identityfunc('arg')
    'arg'

    r   )r  s    r    rí  rí  4%  s	   € ð €Jr"   c                  ó   — dS )z<Null function.

    >>> nullfunc('arg', kwarg='kwarg')

    Nr   )r	  r0   s     r    Únullfuncri  >%  s	   € ð €Fr"   c                 óL   — 	 t          | ¦  «         | S # t          $ r | fcY S w xY w)z{Return tuple containing value if value is not a sequence.

    >>> sequence(1)
    (1,)
    >>> sequence([1])
    [1]

    )r.   r  rÊ  s    r    r<  r<  G%  s=   € ðÝˆE‰
Œ
ˆ
ØˆøÝð ð ð Øˆxˆˆˆðøøøs   ‚ “#¢#c                 ó   — d}| D ]}||z  }Œ|S )zæReturn product of sequence of numbers.

    Equivalent of functools.reduce(operator.mul, iterable, 1).
    Multiplying numpy integers might overflow.

    >>> product([2**8, 2**30])
    274877906944
    >>> product([])
    1

    r&   r   )ÚiterableÚprodr   s      r    r   r   W%  s(   € ð €DØð ð ˆØ�‰	ˆˆØ€Kr"   c                 óX   ‡— ˆfd„}t          j        d¦  «        Št          | |¬¦  «        S )z‘Return human sorted list of strings.

    E.g. for sorting file names.

    >>> natural_sorted(['f1', 'f2', 'f10'])
    ['f1', 'f2', 'f10']

    c                 óB   •— d„ t          j        ‰| ¦  «        D ¦   «         S )Nc                 óX   — g | ]'}|                      ¦   «         rt          |¦  «        n|‘Œ(S r   )ÚisdigitrÙ   )r   r1  s     r    rK  z3natural_sorted.<locals>.sortkey.<locals>.<listcomp>t%  s/   € ÐMÐMÐM°1˜1Ÿ9š9™;œ;Ð-•�Q‘”�¨AÐMÐMÐMr"   )r  r  )rí   Únumberss    €r    Úsortkeyznatural_sorted.<locals>.sortkeys%  s#   ø€ ØMÐM½¼ÀÈ!Ñ8LÔ8LÐMÑMÔMÐMr"   z(\d+)rB  )r  r  rp  )rl  rs  rr  s     @r    r   r   i%  sE   ø€ ðNð Nð Nð Nð Nõ Œj˜Ñ"Ô"€GÝ�( Ð(Ñ(Ô(Ð(r"   iZ•
 c                 ó0   — |t          j        | ¦  «        z   S )zÃReturn datetime object from timestamp in Excel serial format.

    Convert LSM time stamps.

    >>> excel_datetime(40237.029999999795)
    datetime.datetime(2010, 2, 28, 0, 43, 11, 999982)

    )r  Ú	timedelta)Ú	timestampÚepochs     r    Úexcel_datetimerx  z%  s   € ð •8Ô% iÑ0Ô0Ñ0Ð0r"   c           	      ó<  — | dk    rdS | dz   }|dk    r(t          j        |dz
  dz  ¦  «        }|d|z   |dz  z
  z  }||dk    rdnd	z   }t          j        |d
z
  dz  ¦  «        }t          j        d|z  ¦  «        }t          j        ||z
  dz  ¦  «        }||z
  t          j        d|z  ¦  «        z
  }||dk     rdndz
  }	||	dk    rdndz
  }
t          |d¦  «        \  }}t          |d¦  «        \  }}t          |d¦  «        \  }}t          j        |
|	|||||¦  «        S )z×Return datetime from days since 1/1/4713 BC and ms since midnight.

    Convert Julian dates according to MetaMorph.

    >>> julian_datetime(2451576, 54362783)
    datetime.datetime(2000, 2, 2, 15, 6, 2, 783)

    iOD Nr&   i# g   @Ð}<Ag    ˆÕá@rŒ   iô  i†  gfffff†^@g     Ôv@gaTR' ™>@g      +@rY  g      @il  ik  i€î6 i`ê  iè  )ÚmathÚtruncr0  r  )Ú	juliandayÚ
milisecondr|   r  r{  r1  r—  rm   ÚdayÚmonthÚyearÚhourÚminuteÚseconds                 r    r+  r+  †%  sO  € ð �GÒÐàˆtà�A‰€AØˆ7‚{€{Ý”
˜A 
™N¨hÑ6Ñ7Ô7ˆØ	ˆQ�‰Y˜ !™Ñ#Ñ#ˆØ	�Q˜’[�[ˆTˆT dÑ+€AÝŒ
�A˜‘I Ñ'Ñ(Ô(€AÝŒ
�6˜A‘:ÑÔ€AÝŒ
�A˜‘E˜WÑ$Ñ%Ô%€Aà
ˆa‰%•$”*˜W q™[Ñ)Ô)Ñ
)€CØ�a˜$’h�h�� BÑ'€EØ˜ š˜��¨Ñ.€Då˜j¨.Ñ9Ô9Ñ€Dˆ*Ý 
¨IÑ6Ô6Ñ€FˆJÝ 
¨DÑ1Ô1Ñ€FˆJåÔ˜T 5¨#¨t°V¸VÀZÑPÔPÐPr"   c                 ó�   — | dk    s| t           j        k    rdS dddœ}|                     | | ¦  «        |t           j                 k    S )zcReturn if byteorder matches the system's byteorder.

    >>> byteorder_isnative('=')
    True

    r‚   Tr†   r…   rÞ  )rŸ   r9   rA   )r9   r$  s     r    Úbyteorder_isnativer…  §%  sM   € ð �CÒÐ˜9­¬Ò5Ð5ØˆtØ #Ð&Ð&€DØ�8Š8�I˜yÑ)Ô)¨Tµ#´-Ô-@Ò@Ð@r"   c                 óþ   — i }t          | j        j        | ¦  «        D ]_\  }}|dd…         \  }}|d         dk    rt          t	          |¦  «        ¦  «        }n|j        dk     r|                     ¦   «         }|||<   Œ`|S )zReturn numpy.recarray as dict.Nr‘   r&   r  )r5  r=   ÚdescrrÖ  r   r“  rh  )ÚrecarrayrZ   r‡  rl   rÜ  r=   s         r    rã  rã  ´%  sˆ   € ð €FÝ˜HœNÔ0°(Ñ;Ô;ð ð ‰ˆˆuØ˜B˜Q˜B”i‰ˆˆeØ�Œ8�sŠ?ˆ?Ý�i¨Ñ.Ô.Ñ/Ô/ˆEˆEØŒZ˜!Š^ˆ^Ø—L’L‘N”NˆEØˆˆt‰ˆØ€Mr"   c                 ó‚   ‡‡‡‡‡— ddl m} dxŠŠ|r|\  ŠŠd„ Šˆˆˆˆˆfd„Š ‰|                     | ¦  «        ¦  «        S )z“Return XML as dict.

    >>> xml2dict('<?xml version="1.0" ?><root attr="name"><key>1</key></root>')
    {'root': {'key': 1, 'attr': 'name'}}

    r   rm  r,  c                 ón   — t           t          t          fD ]}	  || ¦  «        c S # t          $ r Y Œw xY w| S r   )rÙ   r›  r¯  r@   )rl   rG  s     r    r_  zxml2dict.<locals>.astypeÏ%  sS   € å•u�fÐ%ð 	ð 	ˆAðØ�q˜‘x”x���øÝð ð ð Ø�ðøøøàˆs   ˜
%¥
2±2c                 óÔ  •— | j         }‰r|                     dd¦  «        d         }|| j        ri nd i}t          | ¦  «        }|rŒt	          j        t          ¦  «        }t          ‰|¦  «        D ]@}|                     ¦   «         D ])\  }}||                               ‰	|¦  «        ¦  «         Œ*ŒA|ˆ	fd„|                     ¦   «         D ¦   «         i}| j        r?||          	                    ˆ	ˆ
fd„| j                             ¦   «         D ¦   «         ¦  «         | j
        rJ| j
                             ¦   «         }|s| j        r|r ‰	|¦  «        ||         ‰dz   <   n ‰	|¦  «        ||<   |S )Nr—  r&   rÁ   c                 óv   •— i | ]5\  }}|t          |¦  «        d k    r ‰|d         ¦  «        n
 ‰|¦  «        “Œ6S rÄ  rD  )r   r  r©  r_  s      €r    r§  z0xml2dict.<locals>.etree2dict.<locals>.<dictcomp>å%  sR   ø€ ð ð ð ÙFJÀaÈ�A¥s¨1¡v¤v°¢{ {�v�v˜a œd‘|”|�|¸¸¸q¹	¼	ðð ð r"   c              3   ó>   •K  — | ]\  }}‰|z    ‰|¦  «        fV — Œd S r   r   )r   r  r©  r_  Úats      €€r    r!   z/xml2dict.<locals>.etree2dict.<locals>.<genexpr>ê%  s8   øè è € ÐKÐK±$°!°Q˜2 ™6 6 6¨!¡9¤9Ð-ÐKÐKÐKÐKÐKÐKr"   rl   )rJ  r¦  r˜  r  r  Údefaultdictr+  rä  r7   rN   r}  r±  )rG  rC  r—  ÚchildrenÚddÚdcr  r©  r}  r_  rŽ  Ú
etree2dictÚsanitizer­  s            €€€€€r    r“  zxml2dict.<locals>.etree2dictØ%  s   ø€ àŒeˆØð 	)Ø—*’*˜S !Ñ$Ô$ RÔ(ˆCØ˜œÐ*�"�" dÐ+ˆÝ˜‘7”7ˆØð 		ÝÔ(­Ñ.Ô.ˆBÝ˜* hÑ/Ô/ð ,ð ,�ØŸHšH™JœJð ,ð ,‘D�A�qØ�q”E—L’L  ¨¡¤Ñ+Ô+Ð+Ð+ð,ð ð ð ð ð ØNPÏhÊhÉjÌjðñ ô ðˆAð
 Œ8ð 	LØˆcŒF�MŠMÐKÐKÐKÐKÐK¸!¼(¿.º.Ñ:JÔ:JÐKÑKÔKÑKÔKÐKØŒ6ð 	&Ø”6—<’<‘>”>ˆDØð &˜1œ8ð &Øð 8Ø+1¨6°$©<¬<�A�c”F˜2 ™<Ñ(øà˜ ™œ��#‘Øˆr"   )r”  rn  r•  )r  r”  rÁ  r£  r_  rŽ  r“  r­  s    `  @@@@r    r   r   Â%  s‘   øøøøø€ ð 0Ð/Ð/Ð/Ð/Ð/à€L€BˆØð Ø‰ˆˆBðð ð ðð ð ð ð ð ð ð ð ð8 ˆ:�e×&Ò& sÑ+Ô+Ñ,Ô,Ð,r"   éK   r‚  rÂ   r‘   ú...c                 ó@  ‡— t          | ¦  «        }|dk     s|dk     s|dk     rdS |dk    r6d}t          ||t          |¦  «        z
  dz  |z  z  |¦  «        }|dk     rdS d}	nldt          d|z  ¦  «        z  }t          ||t          |dz  ¦  «        z
  dz  |z  z  |¦  «        }|dk     rdS d|z  t          |dz  ¦  «        z   }|dz
  |z  dz   }	|�|dk    r|}nAd
t          |¦  «        cxk     rdk     r'n n$t          t	          j        ||z  ¦  «        ¦  «        }|d
k     r||z  }|dk    s|	dk    rd
| d	|…         fg}
d}d}d|z  }n€|�|	|k    rd
| fg}
nr|d
k    r||	|z
  z  }|| |d	…         fg}
nV||k    s|dk     r||z  }d
| d	|…         fg}
n7||z  }|||z
  dz
  z  }d
| d	|…         f||z
  |z
  d	f||z
  | ||z
  d	…         fg}
t          |¦  «        }g }|
D �]\  }} | €|                     |¦  «         Œt          j	        | ¦  «        }t          j        dd| ¦  «        }t          d
t          | ¦  «        |¦  «        D ]›}|d|z  d|z  |dz  z   …         Š|dk    r|||z   z  n|}|d                     ˆfd„t          d
d|z  d¦  «        D ¦   «         ¦  «        z  }|d|t          |¦  «        z
  z  z  }|||||z   …         z  }|                     |¦  «         Œœ�Œd                     |¦  «        }t          j        d
         dk    r|                     d¦  «        }|S )zÃReturn hexdump representation of byte string.

    >>> hexdump(binascii.unhexlify('49492a00080000000e00fe0004000100'))
    '49 49 2a 00 08 00 00 00 0e 00 fe 00 04 00 01 00 II*.............'

    r&   r‘   r,  r"   rŒ   s   %%0%ix: s   %xrÊ   Nr   s   [^\x20-\x7f]ó   .ó    c              3   ó2   •K  — | ]}‰||d z   …         V — ŒdS )r‘   Nr   )r   r   r|  s     €r    r!   zhexdump.<locals>.<genexpr>7&  s/   øè è € ÐOÐO¨A˜1˜Q  Q¡˜Yœ<ÐOÐOÐOÐOÐOÐOr"   ó   
rê   )r.   rt  ÚabsrÙ   rz  Úfloorrj  r7   ÚbinasciiÚhexlifyr  Úsubrq  r  rŸ   Úversion_infor—  )r  rù  rþ  Úsnipatrt  ÚellipsisrH   ÚaddrÚbytesperlineÚnlinesr"  r­  ÚendÚend1Úend2rZ   ÚhexstrÚstrstrr   r1  r|  s                       @r    Úhexdumpr¬  ÷%  s  ø€ õ ˆw‰<Œ<€DØˆa‚x€x�5˜1’9�9 ¨¢
 
ØˆrØ�‚{€{ØˆÝ˜6 u­s°4©y¬yÑ'8¸QÑ&>À6Ñ%IÑJÈDÑQÔQˆØ˜!ÒÐØ�2Øˆˆà�S ¨¡Ñ.Ô.Ñ.ˆÝ˜6 u­s°4¸!±8©}¬}Ñ'<ÀÑ&BÀvÑ%MÑNÐPTÑUÔUˆØ˜!ÒÐØ�2Ø�LÑ ¥3 t¨a¡x¡=¤=Ñ0ˆØ˜‘(˜|Ñ+¨aÑ/ˆà€~˜ 1š˜ØˆˆØ	
�S�‰[Œ[Ð	Ð	Ò	Ð	˜1Ò	Ð	Ð	Ð	Ð	Ý•T”Z ¨¡Ñ0Ô0Ñ1Ô1ˆØ�‚z€zØ�&Ñˆà�‚{€{�f ’k�kØ�g˜m˜|˜mÔ,Ð-Ð.ˆØˆØˆØ�LÑ ˆˆØ	ˆ˜6 VÒ+Ð+Ø�g�,�ˆˆØ	�1ŠˆØ ¨¡Ñ0ˆØ˜' % & &œ/Ð*Ð+ˆˆØ	�6Ò	Ð	˜V ašZ˜ZØ˜VÑ#ˆØ�g˜d˜s˜d”mÐ$Ð%ˆˆà˜fÑ$ˆØ˜v¨™°Ñ2Ñ3ˆà�˜˜˜”ÐØ�D‰[˜4Ñ Ð&Ø�D‰[˜' $¨¡+ - -Ô0Ð1ð
ˆõ ˜Ñ"Ô"€HØ€FØ ð ñ ‰ˆˆwØˆ?Ø�MŠM˜(Ñ#Ô#Ð#ØÝÔ! 'Ñ*Ô*ˆÝ”Ð(¨$°Ñ8Ô8ˆÝ�q�#˜g™,œ,¨Ñ5Ô5ð 	ð 	ˆAØ�q˜1‘u˜q 1™u |°aÑ'7Ñ7Ð7Ô8ˆAØ(.°ª
¨
�˜˜U™Ñ#Ð#¸ˆAØ�—’ÐOÐOÐOÐOµ°q¸!¸lÑ:JÈAÑ1NÔ1NÐOÑOÔOÑOÔOÑOˆAØ�˜¥ Q¡¤™Ñ(Ñ(ˆAØ�˜˜A Ñ,Ð,Ô-Ñ-ˆAØ�MŠM˜!ÑÔÐÐñ	ð �ZŠZ˜ÑÔ€FÝ
Ô˜Ô˜aÒÐØ—’˜wÑ'Ô'ˆØ€Mr"   c                 ó¤  ‡— |                       ¦   «         } t          | ¦  «        dk     rdS t          j        d         dk    r^	 |                      ¦   «         S # t
          $ r Y nw xY w	 |                      d¦  «                             ¦   «         S # t
          $ r Y dS w xY w|                      ¦   «         rdS dŠt          ˆfd„| D ¦   «         ¦  «        S )	z€Return if all characters in string are printable.

    >>> isprintable('abc')
    True
    >>> isprintable(b'')
    False

    r&   Tr   rÊ   rÅ  zd0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ 	
c              3   ó    •K  — | ]}|‰v V — Œ	d S r   r   )r   r1  Ú	printables     €r    r!   zisprintable.<locals>.<genexpr>]&  s'   øè è € Ð2Ð2 a�1˜	�>Ð2Ð2Ð2Ð2Ð2Ð2r"   N)	r±  r.   rŸ   r¡  Úisprintabler@   r—  Úisalnumr   )rú  r¯  s    @r    r°  r°  A&  sþ   ø€ ð �\Š\‰^Œ^€FÝ
ˆ6�{„{�Q‚€ØˆtÝ
Ô˜Ô˜aÒÐð	Ø×%Ò%Ñ'Ô'Ð'øÝð 	ð 	ð 	ØˆDð	øøøð	Ø—=’= Ñ)Ô)×5Ò5Ñ7Ô7Ð7øÝð 	ð 	ð 	ØˆDˆDð	øøøð �>Š>ÑÔð 	Ø�4ðFð 	õ Ð2Ð2Ð2Ð2¨6Ð2Ñ2Ô2Ñ2Ô2Ð2s$   ÁA Á
A#Á"A#Á'&B Â
BÂBc                 ó¦   — dD ]\  }}|                       ||¦  «        } Œ|rdD ]\  }}|                       ||¦  «        } Œ|                      ¦   «         S )z)Return string with compressed whitespace.))rª  ró  )rR  ró  )rÿ  ró  )ú	r  ©rò  r  ))ró  r  )z[ r-  r´  r´  r´  )r¡  r±  )rú  Úcompactr|   r{  s       r    Úclean_whitespacer¶  `&  sl   € ðð &ð &‰ˆˆ1ð —’  1Ñ%Ô%ˆˆØð *ØUð 	*ð 	*‰DˆAˆqØ—^’^ A qÑ)Ô)ˆFˆFØ�<Š<‰>Œ>Ðr"   c                 ó   — 	 ddl m} t          | t          ¦  «        s|                      d¦  «        } |                     t          j        | ¦  «        ¦  «        } |                     | dd| j	        j
        ¬¦  «        } t          | ¦  «        } nJ# t          $ r= t          | t          ¦  «        rt          | ¦  «        } |                      dd¦  «        } Y nw xY w|                      dd	¦  «                             d
d	¦  «        S )zReturn pretty formatted XML.r   NrÅ  T)Úpretty_printÚxml_declarationÚencodingz><z>
<rò  r  r³  )Ú
lxml.etreer£  r(   rë   rÆ  r´  r¶  r·  r  Údocinforº  rÖ  r@   r¡  )r  r£  s     r    Úpformat_xmlr½  p&  sÿ   € ð(Ø"Ð"Ð"Ð"Ð"Ð"å˜#�uÑ%Ô%ð 	&Ø—*’*˜WÑ%Ô%ˆCØ�kŠk�"œ* S™/œ/Ñ*Ô*ˆØ�nŠnØ˜d°DÀ3Ä;ÔCWð ñ 
ô 
ˆõ ˜‰nŒnˆˆøÝð (ð (ð (Ý�c�5Ñ!Ô!ð 	!Ý˜C‘.”.ˆCØ�kŠk˜$ Ñ'Ô'ˆˆˆð(øøøð �;Š;�t˜SÑ!Ô!×)Ò)¨$°Ñ4Ô4Ð4s   ‚B	B ÂACÃCré  c                 ó.  — |�|dk     rd}|�|dk     rd}t          j        ¦   «         }t          j        d|¬¦  «         t          | t          ¦  «        r¾| dd…                              ¦   «         dv r$|dk    r| dd	|z  …         } nwt          | ¦  «        } ngt          | t          ¦  «        rRt          | ¦  «        rt          | ¦  «        } t          | ¦  «        } n$t          j        di |¤Ž t          | ||d¬
¦  «        S |                      ¦   «         } nkt          | t           j        ¦  «        r|                      ¦   «         } n<ddl}t          j        d         dk    ri nt#          |¬¦  «        } |j        | fd|i|¤Ž} t          j        di |¤Ž |dk    rt          | d¬¦  «        } | d|…         S t'          |                      ¦   «         ¦  «        }t+          |¦  «        |k    r3d                     |d|dz  …         dgz   || dz  d…         z   ¦  «        } | S )zcReturn pretty formatted representation of object as string.

    Whitespace might be altered.

    Nr&   r	  rk  éd   )rf  Ú	linewidthrå   )z<?xmls   <?xmlrŒ   )rù  rþ  rt  r   r‘   )rµ  rù  Tró  r–  r   )r<   Úget_printoptionsÚset_printoptionsr(   r)   r	  r½  rë   r°  rÖ  r¶  r¬  Úrstripr=  ÚpprintrŸ   r¡  rÖ  r  r  r.  r.   r  )r  rù  rþ  rµ  ÚnpoptrÄ  Úargls          r    r  r  ƒ&  s7  € ð €~˜ !š˜ØˆØ€}˜ š	˜	ØˆåÔ"Ñ$Ô$€EÝ	Ô S°EÐ:Ñ:Ô:Ð:å�#•zÑ"Ô"ð :Øˆr�ˆrŒ7�=Š=‰?Œ?Ð1Ð1Ð1Ø˜Š{ˆ{Ø˜+˜A ™I˜+Ô&��å! #Ñ&Ô&��Ý˜�UÑ#Ô#ð 	JÝ˜3ÑÔð JÝ ‘n”n�Ý& sÑ+Ô+��åÔ&Ð/Ð/¨Ð/Ð/Ð/Ý˜s¨%¸ÀqÐIÑIÔIÐIØ�jŠj‰lŒlˆˆÝ	�C�œÑ	&Ô	&ð :Ø�jŠj‰lŒlˆˆàˆˆˆåÔ(¨Ô+¨qÒ0Ð0�"�"µdÀ7Ð6KÑ6KÔ6KˆØˆfŒn˜SÐ9Ð9¨Ð9°Ð9Ð9ˆå	ÔÐ#Ð#˜UÐ#Ð#Ð#à�‚{€{Ý˜s¨DÐ1Ñ1Ô1ˆØ�6�E�6Œ{Ðå�—’Ñ Ô Ñ!Ô!€DÝ
ˆ4�y„y�6ÒÐØ�iŠi˜˜]˜v¨™{˜]Ô+¨u¨gÑ5¸¸f¸WÈ¹\¸^¸^Ô8LÑLÑMÔMˆØ€Jr"   ç      à?c                 ó:  — |€t          | t          ¦  «        rd}nd}t          |¦  «        }|                      ¦   «         }g }|D �]˜}|€|                     |¦  «         Œt          |¦  «        }||k    r|                     | ¦  «         ŒF|}	|	�|	dk    r|}	nAdt          |	¦  «        cxk     rdk     r'n n$t          t          j        ||	z  ¦  «        ¦  «        }	|	dk     r|	|z  }	|	dk     rd}	|dk    s	||dz   k     rC|	dk    r|                     | | d…         ¦  «         ŒÛ|                     | d|…         ¦  «         Œù|	dk    r%|                     || ||z
  d…         z   ¦  «         �Œ$|	|k    s	||dz   k     r%|                     | d||z
  …         |z   ¦  «         �ŒX||z
  |z   }
|	|
dz  z
  }||
z   }|                     | d|…         |z   | |d…         z   ¦  «         �Œšt          | t          ¦  «        rd 	                    |¦  «        S d	 	                    |¦  «        S )
zcReturn string cut to specified length.

    >>> snipstr('abcdefghijklmnop', 8)
    'abc...op'

    Ns   ...u   â€¦r&   r   rŒ   r‘   r›  ró  )
r(   rë   r.   r.  r7   rœ  rÙ   rz  r�  r  )rú  rù  r¢  r£  r  r.  rZ   ræ  Úlinelenr  Úsplitlenr¨  r©  s                r    r  r  ³&  st  € ð ÐÝ�f�eÑ$Ô$ð 	 ØˆHˆHàˆHÝ�‰MŒM€Eà×"Ò"Ñ$Ô$€Jð €FØð  Dñ  DˆØˆ<Ø�MŠM˜(Ñ#Ô#Ð#ØÝ�d‘)”)ˆØ�eÒÐØ�MŠM˜&Ñ!Ô!Ð!ØàˆØˆ=˜E QšJ˜JØˆEˆEØ•�U‘”ÐÐÒÐ˜aÒÐÐÐÐÝ�œ
 7¨U¡?Ñ3Ô3Ñ4Ô4ˆEØ�1Š9ˆ9Ø�WÑˆEØ�qŠyˆyØ�à�AŠ:ˆ:˜ ¨¡Ò*Ð*Ø˜ŠzˆzØ—’˜f e V W WœoÑ.Ô.Ð.Ð.à—’˜f V e VœnÑ-Ô-Ð-Ð-Ø�aŠZˆZØ�MŠM˜( V¨E°E©M¨O¨OÔ%<Ñ<Ñ=Ô=Ð=Ñ=Ø�gÒÐ ¨°©Ò!2Ð!2Ø�MŠM˜&  5¨5¡= Ô1°HÑ<Ñ=Ô=Ð=Ñ=à ‘¨Ñ.ˆHØ˜8 q™=Ñ(ˆDØ˜(‘?ˆDØ�MŠM˜&  $ œ-¨(Ñ2°V¸D¸E¸E´]ÑBÑCÔCÐCÑCå�&�%Ñ Ô ð !Ø�zŠz˜&Ñ!Ô!Ð!à�yŠy˜Ñ Ô Ð r"   c                 ó°   — 	  | |¦  «        S # t           $ r> 	 | |                     ¦   «                  cY S # t           $ r t          d|z  ¦  «        ‚w xY ww xY w)z±Return enum member from its name or value.

    >>> enumarg(TIFF.PHOTOMETRIC, 2)
    <PHOTOMETRIC.RGB: 2>
    >>> enumarg(TIFF.PHOTOMETRIC, 'RGB')
    <PHOTOMETRIC.RGB: 2>

    zinvalid argument %s)r@   r]  r,   )rÌ  r  s     r    r\  r\  í&  s}   € ð:Øˆt�C‰yŒyÐøÝð :ð :ð :ð	:Ø˜Ÿ	š	™œÔ$Ð$Ð$Ð$øÝð 	:ð 	:ð 	:ÝÐ2°SÑ8Ñ9Ô9Ð9ð	:øøøð:øøøs   ‚
 �
A˜4±A´AÁAc                 óœ   — i }|D ]}|| v r| |         ||<   | |= Œ|                      ¦   «         D ]\  }}|| v r| |         ||<   | |= Œ|||<   Œ|S )aX  Return dict with keys from keys|keyvals and values from kwargs|keyvals.

    Existing keys are deleted from kwargs.

    >>> kwargs = {'one': 1, 'two': 2, 'four': 4}
    >>> kwargs2 = parse_kwargs(kwargs, 'two', 'three', four=None, five=5)
    >>> kwargs == {'one': 1}
    True
    >>> kwargs2 == {'two': 2, 'four': 4, 'five': 5}
    True

    ©rä  )r0   r$  Ú	keyvaluesrZ   rC  rl   s         r    r'   r'   ÿ&  s‚   € ð €FØð ð ˆØ�&ˆ=ˆ=Ø  œ+ˆF�3‰KØ�s�øØ—o’oÑ'Ô'ð  ð  ‰
ˆˆUØ�&ˆ=ˆ=Ø  œ+ˆF�3‰KØ�s��àˆF�3‰KˆKØ€Mr"   c                 óL   — |                      ¦   «         D ]\  }}|| vr|| |<   ŒdS )zÂUpdate dict with keys and values if keys do not already exist.

    >>> kwargs = {'one': 1, }
    >>> update_kwargs(kwargs, one=None, two=2)
    >>> kwargs == {'one': 1, 'two': 2}
    True

    NrÍ  )r0   rÎ  rC  rl   s       r    Úupdate_kwargsrÐ  '  s@   € ð  —o’oÑ'Ô'ð  ð  ‰
ˆˆUØ�fÐÐØˆF�3‰Køð ð  r"   Újhove©zMore than 50 IFDsc                 ó@  — ddl }|                     || ddg¦  «        }d|v rz|                     ¦   «         D ]g}|                     ¦   «         }|                     d¦  «        r:|dd…                              d¦  «        }|D ]}||v r nŒ	t          |¦  «        ‚ dS ŒfdS dS )a2  Validate TIFF file using jhove -m TIFF-hul.

    Raise ValueError if jhove outputs an error message unless the message
    contains one of the strings in 'ignore'.

    JHOVE does not support bigtiff or more than 50 IFDs.

    See `JHOVE TIFF-hul Module <http://jhove.sourceforge.net/tiff-hul.html>`_

    r   Nz-mzTIFF-huls   ErrorMessage: r™  Úutf8)Ú
subprocessÚcheck_outputr.  r±  r•  r—  r,   )rW   rÑ  ro  rÕ  r  ræ  Úerrorr   s           r    Úvalidate_jhoverØ  ('  sÝ   € ð ÐÐÐà
×
!Ò
! 5¨(°D¸*Ð"EÑ
FÔ
F€CØ˜CÐÐØ—N’NÑ$Ô$ð 		ð 		ˆDØ—:’:‘<”<ˆDØ�ŠÐ0Ñ1Ô1ð Ø˜R˜S˜Sœ	×(Ò(¨Ñ0Ô0�Øð ,ð ,�AØ˜E�z�zØ˜ð "õ % UÑ+Ô+Ð+Ø��ðð  Ðð		ð 		r"   ©rk  rk  c                 óê  — |rt           nt          }|€| }n|                     ¦   «         dk    rd}|r|dz  } |ddd¬¦  «         t          j        ¦   «         }t	          | ¦  «        5 }|j        s |d|d¬	¦  «         t          d
¦  «        ‚|j        d         }|j        }|j	        }|j
        }	t          |¦  «        |	j        z  }
 |dt          j        ¦   «         |z
  z  ¦  «          |d|›d|›d|	›dt          |
¦  «        ›�d¬	¦  «         |j	                             d¦  «        st          d¦  «        ‚ |ddd¬¦  «         t          j        ¦   «         }|d         |d         z  |d         |d         z  f}|r!||d         |d         |d         |d         fz  }ddt          |¦  «        z
  z  |z   }t!          j        |dd…         |	¬¦  «        }t!          j        |d         |d         |d         |d         f|	¬¦  «        }t%          |j        ¦  «        }t)          |d         ¦  «        D �]
}t)          |d         ¦  «        D ]ñ}t)          |d         ¦  «        D ]Ù}t)          |d         ¦  «        D ]&}t+          |¦  «                             ¦   «         ||<   Œ't)          |d         ¦  «        D ]…}t)          |d         ¦  «        D ]m}|d||d         z  |dz   |d         z  …||d         z  |dz   |d         z  …f         |dd…<   |r|                     ||||||fz  ¦  «          |ddd¬¦  «         ŒnŒ†ŒÚŒò�Œ |d t          j        ¦   «         |z
  z  ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )!zæConvert [MP]TZCYX LSM file to series of BIN files.

    One BIN file containing 'ZCYX' data are created for each position, time,
    and tile. The position, time, and tile indices are encoded at the end
    of the filenames.

    NÚnonez*_(z%ic%iy%ix%i)_m%%ip%%it%%03iy%%ix%%i.binz
Opening LSM file... r,  T)r§  ru  ró  )ru  znot a LSM filer   z%.3f szImage
  axes:  z

  shape: z

  dtype: z

  size:  ÚTZCYXznot a *TZCYX LSM filez#Copying image from LSM to BIN filesrÂ   rÁ   rÝ   rÞ   r&   rà   rË  rÊ   rÖ   r‘   .rL  z %.3f s)Úprint_ri  r	  rÆ  r	   rî  r,   rT   rE   r  r=   r   r>   r   rs  r.   r<   ro  ÚiterrQ   rq  rï  r/   rA  )ÚlsmfileÚbinfilery  ÚverboseÚ
start_timer}   rT   rE   r  r=   rH   rœ  rD   r  rQ   r  rÝ  rG  ru  rt  rí   s                        r    Úlsm2binrã  C'  s3  € ð  Ð-�fˆf¥X€Gà€ØˆˆØ	�Š‰Œ˜FÒ	"Ð	"ØˆØð @ØÐ?Ñ?ˆà€GÐ$¨"°DÐ9Ñ9Ô9Ð9Ý”‘”€Jå	�'Ñ	Ô	ð .8˜cØŒzð 	/ØˆG�D˜# TÐ*Ñ*Ô*Ð*ÝÐ-Ñ.Ô.Ð.Ø”˜A”ˆØ”ˆØŒ{ˆØ”ˆÝ�u‰~Œ~ ¤Ñ.ˆàˆ��DœI™KœK¨*Ñ4Ñ5Ñ6Ô6Ð6àˆˆàˆtˆt�U�U�U˜E˜E˜E¥;¨tÑ#4Ô#4Ð#4ð6àð	
ñ 	
ô 	
ð 	
ð
 Œ{×#Ò# GÑ,Ô,ð 	6ÝÐ4Ñ5Ô5Ð5àˆÐ5¸2ÀTÐJÑJÔJÐJÝ”Y‘[”[ˆ
Ø�b”	˜T "œXÑ% u¨R¤y°D¸´HÑ'<Ð<ˆØð 	IØ  r¤¨E°"¬I°t¸A´wÀÀQÄÐ HÑHˆGØ˜�C ™JœJ™Ñ'¨%Ñ/ˆåŒ{˜5   œ9¨EÐ2Ñ2Ô2ˆÝŒk˜5 œ9 e¨B¤i°°a´¸$¸q¼'ÐBÈ%ÐPÑPÔPˆå�V”\Ñ"Ô"ˆÝ�u˜Q”x‘”ð 	=ñ 	=ˆAÝ˜5 œ8‘_”_ð =ð =�Ý˜u Qœx™œð =ð =�AÝ" 5¨¤8™_œ_ð 8ð 8˜Ý"& u¡+¤+×"5Ò"5Ñ"7Ô"7˜˜Q™˜Ý" 5¨¤8™_œ_ð 	=ð 	=˜Ý!& u¨Q¤x¡¤ð =ð =˜AØ%)Ø #Ø ! D¨¤G¡¨q°1©u¸¸Q¼Ñ.?Ð ?Ø ! D¨¤G¡¨q°1©u¸¸Q¼Ñ.?Ð ?ð!Aô&˜C   ™Fð
  'ð FØ #§
¢
¨7°a¸¸A¸qÀ!°_Ñ+DÑ EÔ EÐ EØ#˜G C¨R°tÐ<Ñ<Ô<Ð<Ð<ð=ð	=ð=ñ=ð 	ˆ�	�TœY™[œ[¨:Ñ5Ñ6Ñ7Ô7Ð7ð].8ð .8ð .8ñ .8ô .8ð .8ð .8ð .8ð .8ð .8ð .8ð .8øøøð .8ð .8ð .8ð .8ð .8ð .8s   Á'K4M(Í(M,Í/M,rV  é`   éo   é €  c                 ó°  ‡ ‡	‡‡‡‡‡‡‡— |dv }‰ j         j        dk    rd}|r-‰ j        d         dv s‰ j        dk    r‰ j        d         dv sd}d}‰                      ¦   «         Š |d	v rt          ‰ d¦  «        Š nt          ‰ d
¦  «        Š ‰ j        Š‰dk     rt          d¦  «        ‚‰dk    rdŠd}nÕ|r<‰ j        d         dv r-t          j        ‰ dd¦  «        Š t          j        ‰ dd¦  «        Š n}|s{‰ j        d         ‰ j        d         dz  k     r\‰ j        d         ‰ j        d         dz  k     r=‰ j        d         dk     r,t          j        ‰ dd¦  «        Š t          j        ‰ dd¦  «        Š |o‰ j        d         dv }‰|rd
ndz  Š|r‰ dd|…d|…d|…f         Š n‰ dd|…d|…f         Š |dk    r8|r6‰  	                    ¦   «         }|dk    r‰ dz	  Š ‰  
                    d¦  «        Š �n�‰ j         j        dv rÙ|r‰ j         j        dk    r|€g	 t          t          j        t          j        ‰  	                    ¦   «         d¦  «        ¦  «        ¦  «        }nC# t           $ r ‰ j         j        dz  }Y n(w xY wt#          |t$          ¦  «        s‰ j         j        dz  }d|z  }|r2|dk     r	‰ d|z
  z  Š n|dk    r‰ |dz
  z	  Š ‰  
                    d¦  «        Š n¨‰ j         j        dk    rM‰  	                    ¦   «         }|r6|dk    r0‰ j         j        dk    r‰  
                    d¦  «        Š ‰ |z  Š nQ‰ |z  Š nK‰ j         j        dk    rd}n8‰ j         j        dk    r(t          j        ‰ ¦  «        Š ‰  	                    ¦   «         }|sÉ|€|}|€Ã‰ j         j        dk    rPt          j        ‰ j         ¦  «        j        }t          j        ‰ ¦  «        }||k    rt          j        ‰ |k    ¦  «        }‰ j         j        dk    rQt          j        ‰ j         ¦  «        j        }t          j        ‰ ¦  «        }||k    rt          j        ‰ |k    ¦  «        }nd}t0          j        d         Š‰	€µ‰                     dddd¬ ¦  «         ‰                     |d!d"d#d$¬%¦  «        Š		 ‰	j        j        j                             |¦  «         n# t           $ r Y nw xY w|r!tA          | !                    ¦   «         ¦  «        nd}‰ "                    d&‰dz   z  d'|d&z  z
  d(d)d*d+¬,¦  «         ‰ #                    |
¦  «        }
|r9	 tI          |d-¦  «        }n# tJ          $ r Y nw xY w‰                     |d.¬/¦  «         |€7‰ j         j        d0k    rd1}n‰ j         j        d2v s|dk    rd3}nd4}|d5k    r|d6z  } ‰j&        t          j'        ‰ d7‰z                                ¦   «         ¦  «        f||||d8œ|¤ŽŠ|s‰ (                    ¦   «          ˆˆˆ ˆfd9„}d:„ }||
_)        |‰_*        |‰_+        ‰rÉtY          d7‰z  ¦  «        Šd‰ t[          ‰¦  «                                      ¦   «         gŠˆ ˆfd;„t]          ‰¦  «        D ¦   «         }|D ]	}d|_/        Œ
|‰ fˆˆ	ˆfd<„	Š‰ ‰fˆˆfd=„	Š‰ ‰fˆˆfd>„	}‰	j         0                    d?|¦  «         tc          |¦  «        D ]\  }}| 2                    |fˆfd@„	¦  «         Œ ‰	|
‰fS )AaÙ  Plot n-dimensional images using matplotlib.pyplot.

    Return figure, subplot and plot axis.
    Requires pyplot already imported C{from matplotlib import pyplot}.

    Parameters
    ----------
    bitspersample : int or None
        Number of bits per channel in integer RGB images.
    photometric : {'MINISWHITE', 'MINISBLACK', 'RGB', or 'PALETTE'}
        The color space of the image data.
    title : str
        Window and subplot title.
    figure : matplotlib.figure.Figure (optional).
        Matplotlib to use for plotting.
    subplot : int
        A matplotlib.pyplot.subplot axis.
    maxdim : int
        maximum image width and length.
    kwargs : optional
        Arguments for matplotlib.pyplot.imshow.

    )rV  r{  FrÁ   rÉ   r‘   rÞ   rU  )rc  rU  NrÊ   znot an imager   rÂ   rˆ   rå   .NrX  rÿ  rÈ   Úuir&   r!  rO  r—  r1  r   úmatplotlib.pyplotÚfontz
sans-serifÚnormal)ÚfamilyÚweightrH   )gš™™™™™$@g333333@Tz1.0Úw)ÚdpiÚfigsizeÚframeonÚ	facecolorÚ	edgecolorç¸…ëQ¸ž?g\�Âõ(\ï?gš™™™™™¹?gffffffî?gš™™™™™©?rN  )ÚbottomÚtopÚleftÚrightÚhspaceÚwspacezWindows-1252r^  )rH   rÀ   ÚgrayÚbufÚviridisÚcoolwarmrc  Ú_rr9  )ÚvminÚvmaxrÛ  Úinterpolationc                 óÂ   •— t          | dz   ¦  «        } t          |dz   ¦  «        }	 ‰rd‰d         || f         ‰|| fz  S d‰|| f         || fz  S # t          $ r Y dS w xY w)NrÇ  z%s @ %s [%4i, %4i]r&   z%s @ [%4i, %4i]r,  )rÙ   rŸ  )rí   rt  ÚcuraxdatÚcurrentrD   Údimss     €€€€r    Úformat_coordzimshow.<locals>.format_coord=(  sŒ   ø€ å��C‘‰LŒLˆÝ��C‘‰LŒLˆð	Øð QØ+¨x¸¬{¸1¸a¸4Ô/@À'È1ÈaÐ.PÑPÐPØ$¨¨Q°¨T¬
°A°qÐ'9Ñ9Ð9øÝð 	ð 	ð 	Ø�2�2ð	øøøs   §A Á A Á
AÁAc                 ó   — dS )Nr,  r   )rÒ  s    r    rÛ  zimshow.<locals>.noneH(  s   € Øˆrr"   c                 óÀ   •— g | ]Z}‰                      ‰                     d d|dz   z  ddg¦  «        d|z  d‰j        |         dz
  ddd‰j        |         z  ¬	¦  «        ‘Œ[S )
g      À?rô  r&   g333333ç?gš™™™™™™?zDimension %ir   z0.5z
%%.0f [%i])rò  Úvalfmt)ÚSliderr  rE   )r   rÎ   rD   Úpyplots     €€r    rK  zimshow.<locals>.<listcomp>R(  sŽ   ø€ ð 
ð 
ð 
ð ð �MŠMØ—’˜U D¨D°1©HÑ$5°u¸eÐDÑEÔEØ Ñ%ØØ”
˜4Ô  1Ñ$ØØØ# d¤j°Ô&6Ñ6ð ñ ô ð
ð 
ð 
r"   c                 ó6  •— |t          | ¦  «                                      ¦   «         ‰d<   ‰                     ‰d         ¦  «         t          || ¦  «        D ](\  }}d|_        |                     |¦  «         d|_        Œ)‰j                             ¦   «          d S )Nr&   FT)r  r  Úset_datar5  ÚeventsonÚset_valÚcanvasÚdraw)r  ÚslidersrD   Úctrlr‰  r  Úfigurer  s        €€€r    Ú	set_imagezimshow.<locals>.set_imagea(  s’   ø€ à�u W™~œ~Ô.×6Ò6Ñ8Ô8ˆH�Q‰KØ�NŠN˜8 Aœ;Ñ'Ô'Ð'Ý" 7¨GÑ4Ô4ð %ð %‘��eØ %�”Ø—’˜UÑ#Ô#Ð#Ø $�”�ØŒM×ÒÑ Ô Ð Ð Ð r"   c                 óÚ   •— t          t          | ¦  «        ¦  «        } |‰d<   | ||         k    rd S | |j        |         k    rd} n| dk     r|j        |         dz
  } | ||<    ‰|¦  «         d S )Nr   r&   )rÙ   ÚroundrE   )r‰  rÎ   rD   r  r  r  s       €€r    Ú
on_changedzimshow.<locals>.on_changedk(  s…   ø€ å�˜e™œÑ%Ô%ˆEØˆH�Q‰KØ˜ œÒ%Ð%Ø�Ø˜œ
 4Ô(Ò(Ð(Ø��Ø˜’�Øœ
 4Ô(¨1Ñ,�Ø!ˆG�D‰MØˆI�gÑÔÐÐÐr"   c                 óø  •— | j         }‰d         }t          |¦  «        dv r ‰||¦  «         d S |dk    r ‰||         dz   |¦  «         d S |dk    r ‰||         dz
  |¦  «         d S |dk    r'|t          |j        ¦  «        dz
  k    rdn|dz   ‰d<   d S |dk    r'|dk    rt          |j        ¦  «        dz
  n|dz
  ‰d<   d S |dk    r ‰|j        |         dz
  |¦  «         d S |d	k    r ‰d|¦  «         d S d S )
Nr   Ú
0123456789rø  r&   r÷  ÚupÚdownr§  Úhome)rC  rœ   r.   rE   )rÒ  rD   r  rC  rÎ   r  r  s        €€r    Úon_keypressedzimshow.<locals>.on_keypressedx(  sN  ø€ à”)ˆCØ˜A”;ˆDÝ�3‰xŒx˜<Ð'Ð'Ø�
˜3 Ñ%Ô%Ð%Ð%Ð%Ø˜’�Ø�
˜7 4œ=¨1Ñ,¨dÑ3Ô3Ð3Ð3Ð3Ø˜’�Ø�
˜7 4œ=¨1Ñ,¨dÑ3Ô3Ð3Ð3Ð3Ø˜’�Ø#'­3¨t¬z©?¬?¸QÑ+>Ò#>Ð#>˜a˜aÀDÈ1ÁH�˜‘��Ø˜’�Ø59¸Q²Y°Y�c $¤*™oœo°Ñ1Ð1ÀDÈ1ÁH�˜‘��Ø˜’�Ø�
˜4œ: dÔ+¨aÑ/°Ñ6Ô6Ð6Ð6Ð6Ø˜’�Ø�
˜1˜dÑ#Ô#Ð#Ð#Ð#ð �r"   Úkey_press_eventc                 ó   •—  ‰| |¦  «        S r   r   )r  r|   r  s     €r    rî   zimshow.<locals>.<lambda>�(  s   ø€ ¨j¨j¸¸AÑ.>Ô.>€ r"   )3r=   ra  rE   r“  r  rb  r,   r<   rÇ  r  r_  r>   rÙ   rz  ÚceilÚlogr@   r(   r  rV   ÚabsoluteÚiinfort  ÚfinforŸ   ÚmodulesÚrcr  r  ÚmanagerÚwindowÚtitler.   r.  Úsubplots_adjustÚsubplotrà  r  r   Ú
atleast_2dÚcolorbarr  Úget_cursor_dataÚformat_cursor_datar  r  rq  ÚdrawonÚmpl_connectrr  r  )rD   r+  r   r  rÛ  r<  rw  r  rï  r  r-  Úmaxdimr0   rÈ  ÚdatamaxÚdtminrH   r  rÛ  r  Úsliderr  rÎ   r  r  r  r  r  r  r  r  s   `        `              @@@@@@@r    r   r   ˆ'  s{  øøøøøøøøø€ ðL ˜8Ð#€EØ„z„˜#ÒÐØˆØð #ØŒ
�2Œ˜&Ð Ð  T¤Y°¢] ]°t´zÀ"´~ÈÐ7OÐ7OàˆØ"ˆà�<Š<‰>Œ>€DØÐ8Ð8Ð8Ý˜$ Ñ"Ô"ˆˆå˜$ Ñ"Ô"ˆàŒ9€DØˆa‚x€xÝ˜Ñ(Ô(Ð(Ø	�ŠˆØˆØˆˆàð 		0�T”Z ”^ vÐ-Ð-Ý”> $¨¨BÑ/Ô/ˆDÝ”> $¨¨BÑ/Ô/ˆDˆDØð 	0ØŒJ�rŒN˜TœZ¨œ^¨qÑ0Ò0Ð0Ø”
˜2” ¤¨B¤°1Ñ!4Ò4Ð4Ø”
˜2” Ò"Ð"å”> $¨¨BÑ/Ô/ˆDÝ”> $¨¨BÑ/Ô/ˆDØÐ2˜$œ* Rœ.¨FÐ2ˆØ�UÐ!�� Ñ!ˆàð +Ø�C˜˜&˜ ' 6 '¨7¨F¨7Ð2Ô3ˆˆà�C˜˜&˜ ' 6 'Ð)Ô*ˆà�iÒÐ EÐØ—(’(‘*”*ˆØ�SŠ=ˆ=Ø˜1‘9ˆDØ�{Š{˜3ÑÔˆ‰Ø	ŒŒ˜DÐ	 Ð	 Øð 	4˜$œ*Ô-°Ò2Ð2°}Ð7Lð8Ý #¥D¤I­d¬h°t·x²x±z´zÀ1Ñ.EÔ.EÑ$FÔ$FÑ GÔ G��øÝð 8ð 8ð 8Ø $¤
Ô 3°aÑ 7���ð8øøøå˜M­8Ñ4Ô4ð 	4à œJÔ/°!Ñ3ˆMØ�]Ñ"ˆØð 	$Ø˜qÒ Ð Ø  MÑ 1Ñ2��Ø Ò"Ð"Ø °Ñ 1Ñ2�Ø—;’;˜sÑ#Ô#ˆDøØ	ŒŒ˜CÒ	Ð	Ø—(’(‘*”*ˆØð 	&�W˜s’]�]ØŒzŒ #Ò%Ð%Ø—{’{ 3Ñ'Ô'�Ø˜‘��à˜g‘~�øØ	ŒŒ˜CÒ	Ð	ØˆˆØ	ŒŒ˜CÒ	Ð	ÝŒ~˜dÑ#Ô#ˆØ—(’(‘*”*ˆàð Øˆ<ØˆDØˆ<ØŒzŒ #Ò%Ð%Ýœ D¤JÑ/Ô/Ô3�Ý”y ‘”�Ø˜5’=�=Ý œ9 T¨E¢\Ñ2Ô2�DØŒzŒ #Ò%Ð%Ýœ D¤JÑ/Ô/Ô3�Ý”y ‘”�Ø˜5’=�=Ý œ9 T¨E¢\Ñ2Ô2�Døà�åŒ[Ð,Ô-€Fà€~Ø�	Š	�& °hÀQˆ	ÑGÔGÐGØ—’Ø˜[°$À%ÐSVð ñ 
ô 
ˆð	ØŒMÔ!Ô(×.Ò.¨uÑ5Ô5Ð5Ð5øÝð 	ð 	ð 	ØˆDð	øøøà*/Ð6�s�5×#Ò#Ñ%Ô%Ñ&Ô&Ð&°QˆØ×ÒØ˜4 !™8Ñ$Ø�t˜d‘{Ñ"ØØØØð 	ñ 	
ô 	
ð 	
ð �nŠn˜WÑ%Ô%€Gàð %ð	Ý˜E >Ñ2Ô2ˆEˆEøÝð 	ð 	ð 	ØˆDð	øøøà�Š�U ˆÑ$Ô$Ð$à€|ØŒ:Œ?˜cÒ!Ð!ØˆDˆDØŒZŒ_ Ð%Ð%¨°ª¨ØˆDˆDàˆDØ˜,Ò&Ð&Ø�D‰LˆDàˆFŒMÝÔ˜˜d T™kÔ*×2Ò2Ñ4Ô4Ñ5Ô5ðàØØØ#ðð ð ðð €Eð ð Ø�ŠÑÔÐð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðð ð ð (€GÔØ €EÔØ#€EÔàð >@Ý�t˜d‘{Ñ#Ô#ˆØ�t�E '™NœNÔ+×3Ò3Ñ5Ô5Ð6ˆð
ð 
ð 
ð 
ð 
õ ˜d™œð
ñ 
ô 
ˆð ð 	"ð 	"ˆFØ!ˆFŒMˆMà'.°Tð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð *.°wð 	ð 	ð 	ð 	ð 	ð 	ð 	ð '+°Gð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð& 	Œ×!Ò!Ð"3°]ÑCÔCÐCÝ# GÑ,Ô,ð 	@ð 	@‰JˆD�$Ø�OŠO¨Ð>Ð>Ð>Ð>Ð>Ñ?Ô?Ð?Ð?à�7˜EÐ!Ð!s7   È	AI ÉI,É+I,Ò$R- Ò-
R:Ò9R:Ô!T2 Ô2
T?Ô>T?c                  óR   — t           j        d         } |                      ¦   «          dS )z)Block the GUI. For use as skimage plugin.ré  N)rŸ   r'  Úshow©r  s    r    Ú	_app_showr;  ’(  s    € åŒ[Ð,Ô-€FØ
‡K‚K�M„M€M€M€Mr"   c                  óô   — 	 ddl m} ddl}n# t          $ r ddlm}m} Y nw xY w |¦   «         }|                     ¦   «          |                     ¦   «           |j        di | ¤Ž}| 	                    ¦   «          |S )z4Return file name(s) from Tkinter's file open dialog.r   )ÚTkN)r=  Ú
filedialogr   )
ÚTkinterr=  ÚtkFileDialogr˜  Útkinterr>  ÚwithdrawrN   ÚaskopenfilenameÚdestroy)r0   r=  r>  r¥  Ú	filenamess        r    rC  rC  ˜(  s±   € ð+ØÐÐÐÐÐØ)Ð)Ð)Ð)Ð)øÝð +ð +ð +Ø*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ð+øøøàˆ2‰4Œ4€DØ‡M‚M�O„O€OØ‡K‚K�M„M€MØ*�
Ô*Ð4Ð4¨VÐ4Ð4€IØ‡L‚L�N„N€NØÐs   ‚
 �"¡"c                 óP  ‡— t          t          j        dd…         ¦  «        dk     r-t          d¦  «         t          dt          j        z  ¦  «         dS | €t          j        } ddl}|                     ddd	t          z  ¬
¦  «        }|j        } |dddddd¬¦  «          |dddddd¬¦  «          |ddddd¬¦  «          |ddddd¬¦  «          |d d!d"d#d$¬%¦  «          |d&d'dd(d)¬¦  «          |d*d+ddd,¬¦  «          |d-d.ddd/¬¦  «          |d0d1ddd2¬¦  «          |d3d4ddd5¬¦  «          |d6d7d8dd9¬:¦  «          |d;d<d=d¬>¦  «         | 	                    ¦   «         \  }Šd? 
                    ‰¦  «        Š|j        r!ddl}|                     |j        ¬@¦  «         dS ‰s2t          dAt          j        ¬B¦  «        Š‰s|                     dC¦  «         t%          ˆfdD„dED ¦   «         ¦  «        r/t'          j        ‰¦  «        Š‰st          dF¦  «         dS ‰d         Š|j        st          dGd?¬H¦  «         t+          j        ¦   «         }	 t-          ‰|j         ¬I¦  «        }nC# t0          $ r6}|j        r‚ t          dJ|¦  «         t          j        d¦  «         Y d}~nd}~ww xY w|j        s)t          dKt+          j        ¦   «         |z
  dLz  z  ¦  «         |j        rdM|_        g }	|j        dk    �rè|j        st          dNd?¬H¦  «         dO„ }
t+          j        ¦   «         }	 |j        dk    r,|                     |j        ¬P¦  «        ||j                 dfg}	�n#|j         dk    rN|                     |j         ¬Q¦  «         |
|j         |j                  j!        ¦  «        |j         |j                  fg}	nÊg }	tE          |j         d|j        …         ¦  «        D ]¦\  }}	 |	 #                    |                     |¬Q¦  «         |
|j!        ¦  «        |j         |         f¦  «         ŒL# tH          $ rN}|	 #                    d |
|j%        ¦  «        df¦  «         |j        r‚ t          dR||fz  dS¬H¦  «         Y d}~ŒŸd}~ww xY w|j        s)t          dKt+          j        ¦   «         |z
  dLz  z  ¦  «         n.# t0          $ r!}|j        r‚ t          |¦  «         Y d}~nd}~ww xY w|j        sWt          ¦   «          t          t,           &                    |tO          |j(        ¦  «        ¬T¦  «        ¦  «         t          ¦   «          | )                    ¦   «          |	�rÔ|j        dk    �rÊ	 ddl*}| +                    dU¦  «         ddVl*m,} |	D �]_\  }}}|€Œ
|j-        |j.        }}dW|j/        v rM	 ta          j1        ||t          |j/        dW         j2        ¦  «        k             ¦  «        }n# tH          $ r Y nw xY w|j3        r@	 |j4        dX         }|j4        dY         }||k    r|j-        |j.        }}n# tj          $ r Y nw xY w|r2tm          |¦  «        ›dJtm          |¦  «        ›dJtm          |¦  «        ›�}n!tm          |¦  «        ›dZtm          |¦  «        ›�}d[}|j7        d\vr$t           8                    |j7        ¦  «        j9        }tu          |||||j;        ||j<        |j=        ¬]¦  «         �Œa| >                    ¦   «          dS # t~          $ r"}t�          jA        d^|z  ¦  «         Y d}~dS d}~ww xY wdS dS )_z!Command line usage main function.r   rÊ   gš™™™™™@z2This script requires Python version 2.7 or better.zThis is Python version %sNzusage: %prog [options] pathz!Display image data in TIFF files.z	%%prog %s)Úusager~  rf  z-pz--pagerX   rÙ   rÁ   zdisplay single page)Údestr²  ÚdefaultÚhelpz-sz--seriesrT   z%display series of pages of same shapez--nomultifileÚnomultifileÚ
store_trueFz*do not read OME series from multiple files)rH  ÚactionrI  rJ  z	--noplotsÚnoplotsrˆ   zmaximum number of plotsz
--interpolÚinterpolÚINTERPOLÚbilinearzimage interpolation method)rH  ÚmetavarrI  rJ  z--dpirï  rä  zplot resolutionz--vminr   zminimum value for colormappingz--vmaxr  zmaximum value for colormappingz--debugÚdebugzraise exception on failuresz	--doctestÚdoctestzruns the docstring examplesz-vz--detailrø  r‘   )rH  r²  rI  z-qz--quietÚquiet)rH  rM  r  )ÚoptionflagszSelect a TIFF file)r+  Ú	filetypeszNo file specifiedc              3   ó    •K  — | ]}|‰v V — Œ	d S r   r   )r   r   rž  s     €r    r!   zmain.<locals>.<genexpr>)  s'   øè è € Ð
#Ð
#˜ˆ1�ˆ9Ð
#Ð
#Ð
#Ð
#Ð
#Ð
#r"   r#   zno files match the patternz
Reading file structure...)r§  )r   ró  z%.3f msg     @�@TzReading image data... c                 ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3   ó   K  — | ]}|®|V — Œ	d S r   r   rÚ   s     r    r!   z(main.<locals>.notnone.<locals>.<genexpr>$)  s"   è è € Ð6Ð6˜a¨¨˜¨¨¨¨Ð6Ð6r"   )rï  rì   s    r    Únotnonezmain.<locals>.notnone#)  s   € ÝÐ6Ð6 1Ð6Ñ6Ô6Ñ6Ô6Ð6r"   rB  )rT   z
Series %i failed: %s... r,  )rø  ÚTkAggr:  r  rV  rW  z
 rU  )rÊ   )r+  r   r  r<  rw  r  rï  zfailed to import matplotlib.
%s)Br›  rŸ   rf  ÚprintÚargvÚoptparseÚOptionParserÚ__version__Ú
add_optionÚ
parse_argsr  rT  ÚtestmodÚELLIPSISrC  rO   rÀ  r×  r*   r+   rU  rÆ  r	   rK  r@   rS  Úexitr   ÚnorgbrN  rX   r/   rT   r  rr  r7   r,   rQ   rû  rÙ   rø  rÍ  Ú
matplotlibÚuser  r   r  r  r<   rt  rl   r4  r7  rÿ   rœ   rw  rT  rÜ  r   r<  rO  rï  r9  r˜  r    r¡   )r^  r_  ÚparserÚoptÚsettingsrT  r­  r3   rm   r;  r[  r   rú   rh  r  ÚimgrX   rT   r   r  r+  rw  rž  s                         @r    Úmainrn  §(  s+	  ø€ å�SŒ[˜˜1˜ÔÑÔ Ò$Ð$ÝÐBÑCÔCÐCÝÐ)­C¬KÑ7Ñ8Ô8Ð8ØˆqØ€|ÝŒxˆà€O€O€Oà×"Ò"Ø+Ø7Ø�kÑ)ð #ñ ô €Fð
 Ô
€CØ€Cˆˆh˜V¨%¸ÐBWÐXÑXÔXÐXØ€CØØØØØØ4ðñ ô ð ð €CØØØØØ9ðñ ô ð ð €CØØØØØ&ðñ ô ð ð €CØØØØØ)ðñ ô ð ð €Cˆ�e %°Ð:KÐLÑLÔLÐLØ€CØØØØØ-ðñ ô ð ð €CØØØØØ-ðñ ô ð ð €CØØØØØ*ðñ ô ð ð €CØØØØØ*ðñ ô ð ð €Cˆˆj˜x¨e¸QÐ?Ñ?Ô?Ð?Ø€Cˆˆi˜g¨lÐ;Ñ;Ô;Ð;à×&Ò&Ñ(Ô(�N€HˆdØ�8Š8�D‰>Œ>€DàÔð Øˆˆˆà�Š GÔ$4ˆÑ5Ô5Ð5ØˆqØð .ÝØ&µ$Ô2Fð
ñ 
ô 
ˆð ð 	.Ø�LŠLÐ,Ñ-Ô-Ð-å
Ð
#Ð
#Ð
#Ð
#˜dÐ
#Ñ
#Ô
#Ñ#Ô#ð ÝŒy˜‰ŒˆØð 	ÝÐ.Ñ/Ô/Ð/Ø�1à�AŒwˆàŒ>ð 6ÝÐ+°Ð5Ñ5Ô5Ð5ÝŒI‰KŒK€EðÝ�t¨8Ô+?Ð'?Ð@Ñ@Ô@ˆˆøÝð ð ð ØŒ>ð 	Øå�$˜‰NŒNˆNÝŒH�Q‰KŒKˆKˆKˆKˆKˆKˆKøøøøðøøøð Œ>ð 9Ýˆi�DœI™KœK¨%Ñ/°3Ñ6Ñ7Ñ8Ô8Ð8à
„zð ØˆŒà€FØÔ˜!ÒÑØŒ~ð 	5ÝÐ*°Ð4Ñ4Ô4Ð4ð	7ð 	7ð 	7õ ”	‘”ˆð	ØŒ} Ò!Ð!ØŸ;š;¨8¬=˜;Ñ9Ô9¸3¸x¼}Ô;MÈtÐTÐU�‘Ø” AÒ%Ð%ð Ÿš¨8¬?˜Ñ;Ô;Ø˜ ¤
¨8¬?Ô ;Ô BÑCÔCØœ
 8¤?Ô3ðð��ð �Ý% c¤jÐ1C°8Ô3CÐ1CÔ&DÑEÔEð 
Qð 
Q‘D�A�qð	QØŸšØ Ÿ[š[°˜[Ñ2Ô2°G°G¸A¼HÑ4EÔ4EÀsÄzÐRSÄ}ÐUñô ð ð øõ &ð Qð Qð QØŸš t¨W¨W°Q´WÑ-=Ô-=¸tÐ&DÑEÔEÐEØ#œ>ð QØ!å!Ð">À!ÀQÀÑ"GÈRÐPÑPÔPÐPÐPÐPÐPÐPÐPøøøøðQøøøð ”>ð AÝ�i¥D¤I¡K¤K°%Ñ$7¸3Ñ#>Ñ?Ñ@Ô@Ð@øøÝð 	ð 	ð 	ØŒ~ð Øå�a‘”������øøøøð		øøøð Œ>ð Ý‰ŒˆÝ�h×Ò˜s­3¨x¬Ñ+?Ô+?ÐÑ@Ô@ÑAÔAÐAÝ‰ŒˆØ‡I‚I�K„K€Kàñ .�(Ô" QÒ&Ñ&ð-	ØÐÐÐà�NŠN˜7Ñ#Ô#Ð#Ø)Ð)Ð)Ð)Ð)Ð)ð &,ð $ñ $Ñ!��T˜6Ø�;ØØ%œ]¨H¬M�d�Ø  D¤IÐ-Ð-ðÝ$œyØ ¥e¨D¬I°mÔ,DÔ,JÑ&KÔ&KÒ KÔLñ ô  ˜˜øõ &ð ð ð Ø˜ðøøøà”:ð FðFØ"Ô/°
Ô;˜Ø"Ô/°
Ô;˜ð   4š<˜<Ø)1¬¸¼ $˜Døøõ	 $ð ð ð Ø˜ðøøøð
 ð >Ý,/°©H¬H¨H¨Hµc¸$±i´i°i°iÅÀVÁÄÀÐM�E�Eå),¨S©¬¨¨µ3°t±9´9°9Ð=�EØ*�ØÔ#¨4Ð/Ð/Ý"&×"2Ò"2°4Ô3CÑ"DÔ"DÔ"I�KÝØØØØØ"&Ô"4Ø +Ø"*Ô"3Ø œð	ñ 	ô 	ð 	ñ 	ð �KŠK‰MŒMˆMˆMˆMøõQ ð 	Bð 	Bð 	BÝŒMÐ<¸qÑ@ÑAÔAÐAÐAÐAÐAÐAÐAÐAøøøøð	Bøøøð.ð .Ð&Ð&s™   ÉI$ É$
J$É.,JÊJ$Ì"B8R- ÏAP!Ð R- Ð!
Q9Ð+AQ4Ñ/R- Ñ4Q9Ñ93R- Ò-
SÒ7SÓSÕ[5 Ö ;W×
W)×(W)×4X#Ø#
X0Ø/X0Û5
\!Û?\Ü\!c                  óŽ   — |                      dd¦  «        }t          | i |¤Ž |r t          j                             ¦   «          dS dS )z"Print function with flush support.ru  FN)r   r]  rŸ   Ústdoutru  )r	  r0   ru  s      r    rÝ  rÝ  �)  sT   € à—
’
˜7 EÑ*Ô*ˆÝˆtÐ�vÐÐÐØð 	ÝŒJ×ÒÑÔÐÐÐð	ð 	r"   c                 ó   — | S )zReturn string from bytes.r   ©r{  rº  r'  s      r    rÖ  rÖ  ˆ)  ó   € àˆr"   c                 ó   — | S )zReturn bytes from string.r   ©rú   rº  s     r    rj  rj  Œ)  rs  r"   c                 ó    — t          | ¦  «        S ©zReturn value of byte as int.)rÌ  ©r{  s    r    rX  rX  �)  s   € å�1‰vŒvˆr"   c                   ó   — e Zd ZdS )rž   NrÉ  r   r"   r    rž   rž   ”)  rÊ  r"   rž   Ústrictc                 ó¬   — |�|                       ||¦  «        S 	 |                       d|¦  «        S # t          $ r |                       d|¦  «        cY S w xY w)z)Return unicode string from encoded bytes.NrÅ  Úcp1252)r—  rØ  rr  s      r    rÖ  rÖ  ž)  sj   € àÐØ—8’8˜H fÑ-Ô-Ð-ð	.Ø—8’8˜G VÑ,Ô,Ð,øÝ!ð 	.ð 	.ð 	.Ø—8’8˜H fÑ-Ô-Ð-Ð-Ð-ð	.øøøs   š0 ° AÁAr|  c                 ó,   — |                       |¦  «        S )z!Return bytes from unicode string.r[  ru  s     r    rj  rj  §)  s   € à�xŠx˜Ñ!Ô!Ð!r"   c                 ó   — | S rw  r   rx  s    r    rX  rX  «)  rs  r"   Ú__main__)NNNr5   )NNNr   rI   )NNr   )NFr‰  NNNr9  )rõ  r�  Tr¡  )rº  )r  )rŠ   )Nr&   )r/  )r4  r5  )rû   )rY  rZ  )r_  )TN)r•  r‚  rÂ   r‘   r–  rL  )ré  r‚  T)ré  rÇ  r–  )rÑ  rÒ  )NrÙ  T)Nr   NNNrV  Nrä  Nrå  ræ  )Nrz  )r|  )¢rr   Ú
__future__r   r   rŸ   rü  r¶  r  r+   rz  r’  rÆ  rÞ  rÌ  rº   rý  r    rž  r8  r  rQ  r  r&  Úconcurrent.futuresr(  r<   ra  Ú__docformat__Ú__all__r   r   r   r£  r   r
   r	   rí  rú  r…  r¶  r,   rè  r   r   r   r'  rW  r_  rO   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³  rm  rg  rR  rn  rG  r;  rh  r_  ri  r/  rž  rb  r¨  r«  r^  rn  rº  Ú__package__rÄ  rñ  r¨  r   rÜ  rÚ  rì  r  r  r   rb  r¢  r  r)  r  r  rî  r   r9  r   r×  r¯  r_  r   rí  ri  r<  r   r   Úfromordinalrx  r+  r…  rã  r   r¬  r°  r¶  r½  r  r  r\  r'   rÐ  rØ  rã  r   r;  rC  rn  r¡  rÙ   Úlongr  rÝ  rÖ  rj  rX  r�   rž   rœ   rë   r)   rà  r]  rh   rf  r   r"   r    ú<module>r‡     s†  ððDGð GðR
 0Ð /Ð /Ð /Ð /Ð /Ð /Ð /à 
€
€
€
Ø 	€	€	€	Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð à €€€ð
 €Ø%€ð€ð,-+ð -+ð -+ð`C6ð C6ð C6ð C6ðLOCð OCð OCð OCðdð ð ð ð ˆvñ ô ð ð4Cð Cð Cð Cð C�ñ Cô Cð CðL"@*ð @*ð @*ð @*ð @*ˆvñ @*ô @*ð @*ðF&fð fð fð fð f�ñ fô fð fðRK1ð K1ð K1ð K1ð K1ˆvñ K1ô K1ð K1ð\"AHð AHð AHð AHð AH�ñ AHô AHð AHðHGð Gð Gð Gð Gˆfñ Gô Gð GðZ	ð 	ð 	ð 	ð 	�Jñ 	ô 	ð 	ðJ9ð J9ð J9ð J9ð J9�Vñ J9ô J9ð J9ðZh&ð h&ð h&ð h&ð h&�6ñ h&ô h&ð h&ðVsCð sCð sCð sCð sC�ñ sCô sCð sCðl	ð ð ð ð �&ñ ô ð ð/?ð /?ð /?ð /?ð /?�Fñ /?ô /?ð /?ðdð ð ð ð �ñ ô ð ð( ðn *ð n *ð n *ð n *ð n *ˆ6ñ n *ô n *ñ „ðn *ðbAfð fð fð fðRð ð ð(Jð Jð Jð
Fð Fð Fðð ð ð*ð *ð *ð
'ð 'ð 'ðð ð ð2ð 2ð 2ðð ð ð&.ð .ð .ð
ð ð ð ð0
ð 
ð 
ð8ð 8ð 8ð
ð 
ð 
ð[ð [ð [ð|5ð 5ð 5ð#ð #ð #ðL-ð -ð -ð-ð -ð -ð-ð -ð -ð	ð 	ð 	ðð ð ð6-ð -ð -ð`ð ð ð8ð ð ð&#ð #ð #ðLð ð ð ð  ð  ð8>ð >ð >ðB ð  ð  ðMð Mð Mð`:ð :ð :ðz ð  ð  ðJ 	ØØØØ	Ø	ð7-ð 7-ð 7-ð 7-ðt,ð ,ð ,ð ,ð0
 ð 
 ð 
 ðDð Dð Dð,?ð ?ð ?ð ?ðD*ð *ð *ðZð ð ð2ð ð ðBð ð ðB%ð %ð %ð
4ð 4ð 4ð *5¸4Èð %ð %ð %ð %ðP&ð &ð &ðR €Ð(Ñ)Ô)ðHð Hñ *Ô)ðHð2 €Ð#Ñ$Ô$ðSð Sñ %Ô$ðSðl €Ð$Ñ%Ô%ðFð Fð Fñ &Ô%ðFðR2ð 2ð 2ð 2ðj €Ð)Ñ*Ô*ðDð Dñ +Ô*ðDð>ð ð ð ð<Að Að AðB ð  ð  ðF?ð ?ð ?ð2'ð 'ð 'ð 'ðð ð ð ð0*/ð */ð */ð */ðZ.ð .ð .ð .ðb#ð #ð #ð4ð ð ð ð$!Bð !Bð !Bð !BðHYð Yð Yðx-ð -ð -ð -ðð ð ð,ð ð ð ðð ð ð ð.,ð ,ð ,ð ,ð"ð ð ðð ð ðð ð ð ð ð ð$)ð )ð )ð" %-Ô$5×$AÒ$AÀ&Ñ$IÔ$Ið 	1ð 	1ð 	1ð 	1ðQð Qð Qð QðB
Að 
Að 
Aðð ð ð2-ð 2-ð 2-ð 2-ðjGð Gð Gð GðT3ð 3ð 3ð>ð ð ð ð 5ð 5ð 5ð&-ð -ð -ð -ð`7!ð 7!ð 7!ð 7!ðt:ð :ð :ð$ð ð ð6 ð  ð  ðð ð ð ð6B8ð B8ð B8ð B8ðN Ø	
Ø	Ø	ØØØØ
ØØØðG"ð G"ð G"ð G"ðTð ð ðð ð ðTð Tð Tð Tðn Ô�AÔ˜!ÒÐØ�Dˆy€Hðð ð ðð ð ð ðð ð ð ðð ð ðð ð ð ð ˜Gñ ô ð ð €I€Ià€HØ�e�€JØ€GØ€Fð.ð .ð .ð .ð"ð "ð "ð "ðð ð ð
 ˆzÒÐØ€C„HˆTˆT‰VŒVÑÔÐÐÐð Ðr"   