Ë
    Ûvžj˜½  ã                   óH  — d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZ d dlmZ d dlmZmZ d dlmZ dZd	Zd
Zd ZdZdZdZdZdZdZdZ dddddddddddddœZ!h d£Z"dddddœZ#h d£Z$dZ%dZ&dZ' ejP                  dejR                  «      Z*e G d„ de«      «       Z+ee,e-ej\                  f   Z/ee/e	e+f   Z0 G d„ de
«      Z1 G d„ de
«      Z2 G d„ d «      Z3d!e0fd"„Z4d#„ Z5d$„ Z6d%„ Z7 G d&„ d'e
«      Z8 G d(„ d)e
«      Z9d*„ Z:d+„ Z;dPd,„Z<dPd-„Z=d.„ Z>d/„ Z?d0„ Z@d1„ ZA G d2„ d3«      ZBdQd4„ZCd5dd6œd7„ZDd8„ ZEd9„ ZFdPd:„ZGdd;œd<„ZHd=„ ZIdd;œd>„ZJdRd?„ZKdd;œd@„ZLdPdA„ZMdPdB„ZNd5d5d5d5d5dCœdD„ZOd5d5d5d5d5dEœd!e0dFePdGePdHePdIePdJePdKe1fdL„ZQd5dMœd!e0dIePdKeeReRf   fdN„ZSd!e0dKeeReRf   fdO„ZTy)Sé    N)ÚOrderedDict)ÚDecimal)ÚBinaryIOÚ
NamedTupleÚProtocolÚTupleÚUnionÚruntime_checkable)Ú	HTTPError)ÚRequestÚurlopen)ÚElementTreeéýÿÿÿéþÿÿÿéÿÿÿÿé   é   é   é   é   é   é   )r   r   r   r   r   r   é   r   é	   é
   é   é   >   ó   avifó   avisó   heicó   heixó   hevcó   hevxó   mif1ó   msf1)r   r   r   r   >   éÄ   éÈ   éÌ   i    é   zbytes (\d+)-(\d+)/(\d+)$c                   ó4   — e Zd Zddedefd„Zd	dededefd„Zy)
ÚReadSeekBinaryÚsizeÚreturnc                  ó   — y ©N© )Úselfr,   s     úd/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/imagesize/imagesize.pyÚreadzReadSeekBinary.read>   ó   € Øó    ÚoffsetÚwhencec                  ó   — y r/   r0   )r1   r6   r7   s      r2   ÚseekzReadSeekBinary.seekA   r4   r5   N©r   ©r   )Ú__name__Ú
__module__Ú__qualname__ÚintÚbytesr3   r9   r0   r5   r2   r+   r+   <   s/   „ ñ˜ð  eó ñ˜3ð ¨ð °Cô r5   r+   c                   óp   — e Zd ZU dZeed<   dZeed<   dZeed<   dZeed<   dZ	eed<   dZ
eed<   dZeed<   y	)
Ú	ImageInfor   ÚwidthÚheightÚrotationÚxdpiÚydpiÚcolorsÚchannelsN©r<   r=   r>   rC   r?   Ú__annotations__rD   rE   rF   rG   rH   rI   r0   r5   r2   rB   rB   I   óE   … Ø€Eˆ3ƒOØ€FˆCÓØ€HˆcÓØ€Dˆ#ƒNØ€Dˆ#ƒNØ€FˆCÓØ€HˆcÔr5   rB   c                   óp   — e Zd ZU dZeed<   dZeed<   dZeed<   dZeed<   dZ	eed<   dZ
eed<   dZeed<   y	)
Ú_ImageMetadatar   rC   rD   rE   rF   rG   rH   rI   NrJ   r0   r5   r2   rN   rN   S   rL   r5   rN   c                   ón   — e Zd ZdZd„ Zdd„Zed„ «       Zed„ «       Zd„ Z	d„ Z
dd	„Zdd
„Zdd„Zd„ Zd„ Zy)Ú_HttpRangeReaderzCSmall seekable HTTP reader backed by validated byte-range requests.c                 óv   — || _         d| _        d | _        d | _        t	        «       | _        d | _        d| _        y )Nr   F)ÚurlÚ	_positionÚ_sizeÚ
_validatorr   Ú_blocksÚ	_fallbackÚclosed)r1   rR   s     r2   Ú__init__z_HttpRangeReader.__init__`   s5   € ØˆŒØˆŒØˆŒ
ØˆŒÜ"“}ˆŒØˆŒØˆ�r5   Nc                 óô   — ddi}|�0dj                  ||«      |d<   | j                  r| j                  |d<   	 t        t        | j                  |¬«      «      S # t
        $ r}|j                  «        ‚ d }~ww xY w)NzAccept-EncodingÚidentityzbytes={}-{}ÚRangezIf-Range)Úheaders)ÚformatrU   r   r   rR   r   Úclose)r1   ÚstartÚendr]   Úerrors        r2   Ú_requestz_HttpRangeReader._requesti   su   € Ø$ jÐ1ˆØÐØ,×3Ñ3°E¸3Ó?ˆG�GÑØ�ŠØ&*§o¡o�˜
Ñ#ð	Üœ7 4§8¡8°WÔ=Ó>Ð>øÜò 	Ø�K‰KŒMØûð	ús   ¸A Á	A7Á!A2Á2A7c                 ó8   — t        | d| j                  «       «      S )NÚstatus)ÚgetattrÚgetcode)Úresponses    r2   Ú_response_statusz!_HttpRangeReader._response_statusu   s   € ä�x ¨8×+;Ñ+;Ó+=Ó>Ð>r5   c                 ó˜   — | j                   j                  d«      }|r|j                  d«      s|S | j                   j                  d«      S )NÚETagzW/zLast-Modified)r]   ÚgetÚ
startswith)rh   Úetags     r2   Ú_response_validatorz$_HttpRangeReader._response_validatory   sB   € à×Ñ×#Ñ# FÓ+ˆÙ˜Ÿ™¨Ô-ØˆKØ×Ñ×#Ñ# OÓ4Ð4r5   c                 óB  — | j                  «       5 }| j                  |«      dk7  rt        d«      ‚|j                  «       }d d d «       | j                  j                  «        t        j                  «      | _        t        |«      | _
        d | _        y # 1 sw Y   ŒUxY w)Nr'   z*Server did not provide a complete response)rc   ri   Ú
ValueErrorr3   rV   ÚclearÚioÚBytesIOrW   ÚlenrT   rU   )r1   rh   Údatas      r2   Ú_download_fullz_HttpRangeReader._download_full€   sx   € Ø�]‰]Œ_ Ø×$Ñ$ XÓ.°#Ò5Ü Ð!MÓNÐNØ—=‘=“?ˆD÷ ð 	�‰×ÑÔÜŸ™ DÓ)ˆŒÜ˜“YˆŒ
Øˆ�÷ ˆ_ús   ‘0BÂBc                 ó0  — | j                   �y | j                  j                  |«      }|t        z  }| j                  |z
  }|�*|t        |«      k  r| j                  j                  |«       y ||�t        |«      ndz   }| j                  �!|| j                  k\  r|€d| j                  |<   y |dk(  r|€
t        dz
  }n|t        z   dz
  }| j                  ||«      5 }| j                  |«      }|j                  «       }	| j                  |«      }
|j                  j                  dd«      }d d d «       dk(  rL| j                  j                  «        t        j                   	«      | _         t        |	«      | _        d | _        y |dk(  r#t$        j'                  j)                  «       «      nd }|s| j+                  «        y d„ |j-                  «       D «       \  }}}||k7  s||k  s||kD  st        	«      ||z
  dz   k7  r| j+                  «        y | j                  � | j                  |k7  r| j+                  «        y | j"                  �"
� |
| j"                  k7  r| j+                  «        y || _        | j"                  €
| _        |xs d|	z   | j                  |<   | j                  j                  |«       t        | j                  «      t.        kD  r:| j                  j1                  d	¬
«       t        | j                  «      t.        kD  rŒ9y y # 1 sw Y   �ŒãxY w)Nr   r5   r   zContent-RangeÚ r'   éÎ   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr/   )r?   )Ú.0Úvalues     r2   Ú	<genexpr>z/_HttpRangeReader._load_block.<locals>.<genexpr>°   s   è ø€ Ð.XÑGW¸e¬s°5¯zÑGWùs   ‚F)Úlast)rW   rV   rl   Ú_HTTP_RANGE_BLOCK_SIZErS   ru   Úmove_to_endrT   Ú_HTTP_INITIAL_RANGE_SIZErc   ri   r3   ro   r]   rr   rs   rt   rU   Ú_CONTENT_RANGE_REÚ	fullmatchÚstriprw   ÚgroupsÚ_HTTP_RANGE_CACHE_BLOCKSÚpopitem)r1   Úblock_indexÚblockÚblock_startr6   r`   ra   rh   re   rv   Ú	validatorÚcontent_rangeÚmatchedÚresponse_startÚresponse_endÚtotals                   r2   Ú_load_blockz_HttpRangeReader._load_blockŠ   s¾  € Ø�>‰>Ð%ØØ—‘× Ñ  Ó-ˆØ!Ô$:Ñ:ˆØ—‘ +Ñ-ˆØÐ ¬#¨e«*Ò!4Ø�L‰L×$Ñ$ [Ô1Øà¨UÐ->œs 5œzÀAÑFˆØ�:‰:Ð! e¨t¯z©zÒ&9Øˆ}Ø,/�—‘˜[Ñ)ØØ˜!Ò  Ü*¨QÑ.‰CàÔ 6Ñ6¸Ñ:ˆCà�]‰]˜5 #Ô&¨(Ø×*Ñ*¨8Ó4ˆFØ—=‘=“?ˆDØ×0Ñ0°Ó:ˆIØ$×,Ñ,×0Ñ0°À"ÓEˆM÷	 'ð �SŠ=Ø�L‰L×ÑÔ ÜŸZ™Z¨Ó-ˆDŒNÜ˜T›ˆDŒJØ"ˆDŒOØàHNÐRUÊÔ#×-Ñ-¨m×.AÑ.AÓ.CÔDÐ[_ˆÙØ×ÑÔ!Øá.XÀwÇ~Á~ÔGWÓ.XÑ+ˆ˜ eØ˜eÒ# |°nÒ'DØ˜sÒ"¤c¨$£i°<À.Ñ3PÐSTÑ3TÒ&TØ×ÑÔ!ØØ�:‰:Ð! d§j¡j°EÒ&9Ø×ÑÔ!ØØ�?‰?Ð&¨9Ð+@ÀYÐRV×RaÑRaÒEaØ×ÑÔ!ØàˆŒ
Ø�?‰?Ð"Ø'ˆDŒOØ%*¢\¨c°TÑ$9ˆ�‰�[Ñ!Ø�‰× Ñ  Ô-Ü�$—,‘,ÓÔ":Ò:Ø�L‰L× Ñ  eÐ Ô,ô �$—,‘,ÓÔ":Õ:÷G 'Ñ&ús   ÃALÌLc                 óL  — | j                   rt        d«      ‚|dk(  ry| j                  �`| j                  j                  | j                  «       | j                  j                  |«      }| xj                  t        |«      z  c_        |S | j                  | j                  t        z  «       | j                  �| j                  |«      S |dk  r$t        d| j                  | j                  z
  «      }n9| j                  �-t        |t        d| j                  | j                  z
  «      «      }g }|}|dkD  rá| j                  t        z  }| j                  |«       | j                  �A| j                  j                  | j                  «       | j                  j                  |«      }n*| j                  |   }| j                  t        z  }||||z    }|snC|j                  |«       | xj                  t        |«      z  c_        |t        |«      z  }|dkD  rŒádj                  |«      S )Nú#I/O operation on closed HTTP readerr   r5   )rX   rq   rW   r9   rS   r3   ru   r’   r€   ÚmaxrT   ÚminrV   ÚappendÚjoin)	r1   r,   rv   ÚchunksÚ	remainingr‰   ÚchunkrŠ   r6   s	            r2   r3   z_HttpRangeReader.readÄ   sÀ  € Ø�;Š;ÜÐBÓCÐCØ�1Š9ØØ�>‰>Ð%Ø�N‰N×Ñ §¡Ô/Ø—>‘>×&Ñ& tÓ,ˆDØ�NŠNœc $›iÑ'�NØˆKà×Ñ˜Ÿ™Ô+AÑAÔBØ�>‰>Ð%Ø—9‘9˜T“?Ð"Ø�!Š8Ü�q˜$Ÿ*™* t§~¡~Ñ5Ó6‰DØ�Z‰ZÐ#Ü�tœS  D§J¡J°·±Ñ$?Ó@ÓAˆDàˆØˆ	Ø˜!ŠmØŸ.™.Ô,BÑBˆKØ×Ñ˜[Ô)Ø�~‰~Ð)Ø—‘×#Ñ# D§N¡NÔ3ØŸ™×+Ñ+¨IÓ6‘àŸ™ [Ñ1�ØŸ™Ô*@Ñ@�Ø˜f V¨iÑ%7Ð8�ÙØØ�M‰M˜%Ô Ø�NŠNœc %›jÑ(�NØœ˜U›Ñ#ˆIð ˜!‹mð �x‰x˜ÓÐr5   c                 óæ   — t        «       }|dk  st        |«      |k  rJ| j                  d«      }|s	 t        |«      S ||z  }|dk(  r	 t        |«      S |dk  rŒ;t        |«      |k  rŒJt        |«      S )Nr   r   ó   
)Ú	bytearrayru   r3   r@   )r1   r,   Úresultr}   s       r2   Úreadlinez_HttpRangeReader.readlineê   sy   € Ü“ˆØ�QŠhœ#˜f›+¨Ò,Ø—I‘I˜a“LˆEÙØô �V‹}Ðð �e‰OˆFØ˜Š~ØÜ�V‹}Ðð �Q‹hœ#˜f›+¨Ó,ô �V‹}Ðr5   c                 ój  — | j                   rt        d«      ‚|t        j                  k(  r|}nn|t        j                  k(  r| j
                  |z   }nK|t        j                  k(  r-| j                  €| j                  d«       | j                  |z   }nt        d«      ‚|dk  rt        d«      ‚|| _        |S )Nr”   r   úinvalid whenceúnegative seek position)	rX   rq   ÚosÚSEEK_SETÚSEEK_CURrS   ÚSEEK_ENDrT   r’   ©r1   r6   r7   Úpositions       r2   r9   z_HttpRangeReader.seekõ   s�   € Ø�;Š;ÜÐBÓCÐCØ”R—[‘[Ò Ø‰HØ”r—{‘{Ò"Ø—~‘~¨Ñ.‰HØ”r—{‘{Ò"Ø�z‰zÐ!Ø× Ñ  Ô#Ø—z‘z FÑ*‰HäÐ-Ó.Ð.Ø�aŠ<ÜÐ5Ó6Ð6Ø!ˆŒØˆr5   c                 ó   — | j                   S r/   )rS   ©r1   s    r2   Útellz_HttpRangeReader.tell  s   € Ø�~‰~Ðr5   c                 ó”   — d| _         | j                  j                  «        | j                  �| j                  j	                  «        y y )NT)rX   rV   rr   rW   r_   r«   s    r2   r_   z_HttpRangeReader.close
  s8   € ØˆŒØ�‰×ÑÔØ�>‰>Ð%Ø�N‰N× Ñ Õ"ð &r5   ©NNr:   r;   )r<   r=   r>   Ú__doc__rY   rc   Ústaticmethodri   ro   rw   r’   r3   r    r9   r¬   r_   r0   r5   r2   rP   rP   ]   s\   „ ÙMòó
ð ñ?ó ð?ð ñ5ó ð5òò8-ót$ óL	óò$ó#r5   rP   Úfilepathc                 ó  — t        | t        «      r,| j                  d«      rt        | «      dfS t	        | d«      dfS t        | t
        t        j                  f«      rt	        | d«      dfS t        | t        «      r| dfS t	        | d«      dfS )N)zhttp://zhttps://TÚrbF)	Ú
isinstanceÚstrrm   rP   Úopenr@   r¤   ÚPathLiker+   )r±   s    r2   Ú
_open_filer¸     sˆ   € Ü�(œCÔ Ø×ÑÐ6Ô7Ü# HÓ-¨tÐ3Ð3Ü�H˜dÓ# TÐ)Ð)Ü�(œU¤B§K¡KÐ0Ô1Ü�H˜dÓ# TÐ)Ð)Ü�(œNÔ+Ø˜ˆÐÜ�˜$Ó Ð%Ð%r5   c                 óÆ  — |t         k(  rt        | dz  dz   «      S |t        k(  rt        | dz  dz   «      S |t        k(  rt        | dz  dz   «      S |t        k(  rt        | dz  dz   «      S |t
        k(  rt        | dz  dz   «      S |t        k(  rt        | dz  dz   «      S |t        k(  rt        | dz  dz   «      S |t        k(  r| d	z  S |t        k(  r| d
z  S |t        k(  r| dz  S | S )Ngê5‡µB¢ú>g      à?g²�t±i¥0?g¢ÑÄÎd?g¦
F%uš?g¨ÆK7‰AÐ?gR¸…ëQ@gffffff9@éþ   iì	  i8c  )Ú_UNIT_KMr?   Ú
_UNIT_100MÚ	_UNIT_10MÚ_UNIT_1MÚ
_UNIT_10CMÚ_UNIT_CMÚ_UNIT_MMÚ_UNIT_0_1MMÚ_UNIT_0_01MMÚ_UNIT_UM)ÚdensityÚunits     r2   Ú_convertToDPIrÇ     s  € ØŒxÒÜ�7˜YÑ&¨Ñ,Ó-Ð-Ø	”Ò	Ü�7˜XÑ%¨Ñ+Ó,Ð,Ø	”Ò	Ü�7˜WÑ$ sÑ*Ó+Ð+Ø	”Ò	Ü�7˜VÑ# cÑ)Ó*Ð*Ø	”Ò	Ü�7˜U‘? SÑ(Ó)Ð)Ø	”Ò	Ü�7˜T‘> CÑ'Ó(Ð(Ø	”Ò	Ü�7˜T‘> CÑ'Ó(Ð(Ø	”Ò	Ø˜‰}ÐØ	”Ò	Ø˜‰~ÐØ	”Ò	Ø˜‰ÐØ€Nr5   c                 ó^  — t        j                  d| «      }|st        d| z  «      ‚|j                  «       \  }}t	        |«      }|dk(  rt        |«      S |dk(  r#t        |t	        d«      z  t	        d«      z  «      S |dk(  r#t        |t	        d«      z  t	        d«      z  «      S |d	k(  rt        |t	        d«      z  «      S |d
k(  r#t        |t	        d«      z  t	        d«      z  «      S |dk(  r#t        |t	        d«      z  t	        d«      z  «      S |dk(  rt        |«      S t        d|z  «      ‚)Nz(\d+(?:\.\d+)?)?([a-z]*)$zunknown length value: %sry   ÚcmÚ96z2.54Úmmz25.4ÚinÚpcÚ6ÚptÚ72Úpxzunknown unit type: %s)ÚreÚmatchrq   r†   r   Úfloat)r}   rŽ   ÚlengthrÆ   s       r2   Ú_convertToPxrÖ   5  s  € Ü�h‰hÐ3°UÓ;€GÙÜÐ3°eÑ;Ó<Ð<à—>‘>Ó#�L€FˆDÜ�V‹_€FØˆr‚zÜ�V‹}ÐØ	�ŠÜ�Vœg d›mÑ+¬g°f«oÑ=Ó>Ð>Ø	�ŠÜ�Vœg d›mÑ+¬g°f«oÑ=Ó>Ð>Ø	�ŠÜ�Vœg d›mÑ+Ó,Ð,Ø	�ŠÜ�Vœg d›mÑ+¬g°c«lÑ:Ó;Ð;Ø	�ŠÜ�Vœg d›mÑ+¬g°d«mÑ;Ó<Ð<Ø	�ŠÜ�V‹}Ðä
Ð,¨tÑ3Ó
4Ð4r5   c                 óŠ  — t        | «      dk  ry| d d }|dk(  rd}n	|dk(  rd}ny	 t        j                  |dz   | d	d «      d
   }|dz   t        | «      kD  ry	 t        j                  |dz   | ||dz    «      d
   }|dz   }t	        |«      D ]j  }|dz   t        | «      kD  r y	 t        j                  |dz   | ||dz    «      \  }}}	}
|dk(  r&|dk(  r!|	dk(  r|dk(  rt        |
dz  «      c S |
dz  c S |dz  }Œl y# t        j                  $ r Y yw xY w# t        j                  $ r Y yw xY w# t        j                  $ r Y  yw xY w)Nr   r   r   ó   IIÚ<ó   MMÚ>ÚLr   r   ÚHr   ÚHHLLé  r   r   r)   iÿÿ  )ru   ÚstructÚunpackrb   Úranger?   )Ú	exif_dataÚendian_tokenÚendianÚfirst_ifd_offsetÚ	ifd_countÚcursorÚ_ÚtagÚdatatypeÚcountr}   s              r2   Ú#_read_orientation_from_exif_payloadrí   N  sˆ  € Ü
ˆ9ƒ~˜ÒØØ˜R˜a�=€LØ�uÒØ‰Ø	˜Ò	Ø‰àðÜ!Ÿ=™=¨°#©°yÀÀ1°~ÓFÀqÑIÐð ˜!Ñœc )›nÒ,ØðÜ—M‘M &¨3¡,°	Ð:JÐK[Ð^_ÑK_Ð0`ÓaÐbcÑdˆ	ð  Ñ!€Fä�9ÖˆØ�B‰;œ˜Y›Ò'Ùð	Ü*0¯-©-¸À¹ÈÐSYÐZ`ÐceÑZeÐIfÓ*gÑ'ˆC�˜5 %ð �&Š=˜X¨š]¨u¸ªzØ)/°3ª”3�u˜u‘}Ó%ÒJ¸EÀF¹NÒJØ�"‰‰ð ð øô+ �<‰<ò Ùðûô �<‰<ò Ùðûô �|‰|ò 	Úð	ús5   §C9 Á"D Â"$D+Ã9DÄDÄD(Ä'D(Ä+EÅEc                   óV   — e Zd ZU eed<   eed<   eed<   eed<   ed„ «       Zed„ «       Zy)Ú_IsoFileBoxr6   r,   Úbox_typeÚheader_sizec                 ó4   — | j                   | j                  z   S r/   )r6   rñ   r«   s    r2   Úpayload_startz_IsoFileBox.payload_starty  s   € à�{‰{˜T×-Ñ-Ñ-Ð-r5   c                 ó4   — | j                   | j                  z   S r/   )r6   r,   r«   s    r2   ra   z_IsoFileBox.end}  s   € à�{‰{˜TŸY™YÑ&Ð&r5   N)	r<   r=   r>   r?   rK   r@   Úpropertyró   ra   r0   r5   r2   rï   rï   s  s=   … ØƒKØ
ƒIØƒOØÓàñ.ó ð.ð ñ'ó ñ'r5   rï   c                   ó6   — e Zd ZU eed<   eed<   eed<   eed<   y)Ú_ItemLocationÚconstruction_methodÚdata_reference_indexÚbase_offsetÚextentsN)r<   r=   r>   r?   rK   Útupler0   r5   r2   r÷   r÷   ‚  s   … ØÓØÓØÓØ„Nr5   r÷   c                 óZ   — | j                  |«      }t        |«      |k7  rt        d«      ‚|S )NzUnexpected end of file)r3   ru   rq   )Úfhandler,   rv   s      r2   Ú_read_exactrÿ   ‰  s-   € Ø�<‰<˜Ó€DÜ
ˆ4ƒy�DÒÜÐ1Ó2Ð2Ø€Kr5   c                 ó¨   — | j                  dt        j                  «      }| j                  dt        j                  «      }| j                  |«       |S ©Nr   )r9   r¤   r¦   r§   )rþ   r©   r,   s      r2   Ú_stream_sizer  �  s;   € Ø�|‰|˜AœrŸ{™{Ó+€HØ�<‰<˜œ2Ÿ;™;Ó'€DØ‡L�L�ÔØ€Kr5   c              #   óB  K  — |}||k  �r“||z
  dk  rt        d«      ‚|�,|dz   t        |«      k  rt        j                  d||«      \  }}nh|�|t        |«      k  r||d  nd}| j	                  |t        |«      z   «       |t        | dt        |«      z
  «      z   }t        j                  d|«      \  }}d}	|dk(  r¡|�/|dz   t        |«      k  rt        j                  d||dz   «      d   }
nm|dz   }|�|t        |«      k  r||d  nd}| j	                  |t        |«      z   «       |t        | dt        |«      z
  «      z   }t        j                  d|«      d   }
d}	n|dk(  r||z
  }
n|}
|
|	k  s||
z   |kD  rt        d	«      ‚t        ||
||	«      –— ||
z  }||k  r�Œ’y y ­w)
Nr   zInvalid ISO box headerú>L4sr5   r   é   ú>Qr   zInvalid ISO box size)rq   ru   rà   Úunpack_fromr9   rÿ   rá   rï   )rþ   r`   ra   Úheadr6   Úsize32rð   ÚcachedÚheaderrñ   r,   Úextended_offsetÚextendeds                r2   Ú_iter_iso_file_boxesr  —  sÆ  è ø€ Ø€FØ
�3‹,Ø�‰<˜!ÒÜÐ5Ó6Ð6ØÐ ¨¡
¬c°$«iÒ 7Ü%×1Ñ1°&¸$ÀÓGÑˆF‘Hà&*Ð&6¸6ÄCÈÃIÒ;M�T˜&˜'‘]ÐSVˆFØ�L‰L˜¤# f£+Ñ-Ô.Øœk¨'°1´s¸6³{±?ÓCÑCˆFÜ%Ÿ}™}¨V°VÓ<ÑˆF�HØˆØ�QŠ;ØÐ F¨R¡K´3°t³9Ò$<Ü×)Ñ)¨$°°f¸q±jÓAÀ!ÑD‘à"(¨1¡*�Ø48Ð4DØ)¬C°«IÒ5ð ˜Ð/Ñ0Ø;>ð à—‘˜_¬s°6«{Ñ:Ô;Ø!¤K°¸¼SÀ»[¹Ó$IÑI�Ü—}‘} T¨8Ó4°QÑ7�Ø‰KØ�qŠ[Ø˜‘<‰DàˆDØ�+Ò ¨$¡°Ò!4ÜÐ3Ó4Ð4Ü˜& $¨°+Ó>Ò>Ø�$‰ˆð; �3Ž,ùs   ‚FFÆFc                 ó   — |j                   |j                  z
  }||k  rt        d«      ‚|�7|j                  |z   t        |«      k  r||j                  |j                  |z    S |�'|j                  t        |«      k  r||j                  d  nd}| j	                  |j                  t        |«      z   «       |t        | |t        |«      z
  «      z   S )NzInvalid ISO box payloadr5   )ra   ró   rq   ru   r9   rÿ   )rþ   Úboxr,   r  Ú	availabler
  s         r2   Ú_read_box_prefixr  ¹  sÍ   € Ø—‘˜#×+Ñ+Ñ+€IØ�4ÒÜÐ2Ó3Ð3ØÐ˜C×-Ñ-°Ñ4¼¸D»	ÒAØ�C×%Ñ% c×&7Ñ&7¸$Ñ&>Ð?Ð?Ø*.Ð*:Ø×Ñ¤# d£)Ò+ð �3×$Ñ$Ð%Ñ&Ø14ð à‡L�L�×"Ñ"¤S¨£[Ñ0Ô1Ø”K ¨´°F³Ñ);Ó<Ñ<Ð<r5   c           	      ó   — t        | |t        d|j                  |j                  z
  «      «      }t	        |«      dk  rt        d«      ‚|d   }|j                  |dk(  rdndz   }||j                  kD  rt        d«      ‚t        | ||j                  «      D ]¸  }|j                  dk7  rŒt        d|j                  |j                  z
  «      }t        | ||«      }t	        |«      dk  rŒR|d   }	|	dk(  r"t        j                  d	|d
d «      d   }
|dd }n6|	dk\  r0t	        |«      dk\  r"t        j                  d|d
d «      d   }
|dd }nŒ´|||
<   Œº y )Nr   r   zInvalid iinf boxr   s   infer  r   r   ú>Hr   r   ú>L)
r  r–   ra   ró   ru   rq   r  rð   rà   rá   )rþ   r  Ú
item_typesr  ÚversionÚentries_startÚentryÚprefix_sizeÚprefixÚinfe_versionÚitem_idÚ	item_types               r2   Ú_parse_iinfr  Å  sR  € Ü˜g s¬C°°3·7±7¸S×=NÑ=NÑ3NÓ,OÓP€FÜ
ˆ6ƒ{�Q‚ÜÐ+Ó,Ð,Ø�Q‰i€GØ×%Ñ%¨g¸ªl©ÀÑB€MØ�s—w‘wÒÜÐ+Ó,Ð,Ü% g¨}¸c¿g¹gÖFˆØ�>‰>˜WÒ$ØÜ˜"˜eŸi™i¨%×*=Ñ*=Ñ=Ó>ˆÜ! '¨5°+Ó>ˆÜˆv‹;˜ÒØØ˜a‘yˆØ˜1ÒÜ—m‘m D¨&°°1¨+Ó6°qÑ9ˆGØ˜q ˜‰IØ˜QÒ¤3 v£;°"Ò#4Ü—m‘m D¨&°°1¨+Ó6°qÑ9ˆGØ˜r "˜‰IàØ'ˆ
�7Òñ! Gr5   c           	      ó¢  ‡‡— |j                   |j                  z
  }| j                  |j                  «       t        | |«      Št	        ‰«      dk  rt        d«      ‚‰d   }dŠ‰‰   dz	  }‰‰   dz  }‰dz  Š‰‰   dz	  }|dv r‰‰   dz  nd}‰dz  Šˆˆfd„} ||d	k  rd	nd«      }	i }
t        |	«      D ]—  } ||d	k  rd	nd«      }|dv r |d	«      dz  nd} |d	«      } ||«      } |d	«      }g }t        |«      D ]3  }|dv r
|r ||«        ||«      } ||«      }|j                  ||f«       Œ5 t        |||t        |«      «      |
|<   Œ™ |
S )
Nr   úInvalid iloc boxr   r   é   r   )r   r   c                 óŠ   •— ‰| z   t        ‰«      kD  rt        d«      ‚| rt        j                  ‰‰‰| z    d«      nd}‰| z  Š|S )Nr!  Úbigr   ©ru   rq   r?   Ú
from_bytes©r,   r}   rè   rv   s     €€r2   Útake_intz_parse_iloc.<locals>.take_intï  sL   ø€ à�D‰=œ3˜t›9Ò$ÜÐ/Ó0Ð0ÙEI”—‘˜t F¨6°D©=Ð9¸5ÔAÈqˆØ�$‰ˆØˆr5   r   )
ra   ró   r9   rÿ   ru   rq   râ   r—   r÷   rü   )rþ   r  Úpayload_sizer  Úoffset_sizeÚlength_sizeÚbase_offset_sizeÚ
index_sizer(  Ú
item_countÚ	locationsré   r  rø   rù   rú   Úextent_countrû   Úextent_offsetÚextent_lengthrè   rv   s                       @@r2   Ú_parse_ilocr3  à  s•  ù€ Ø—7‘7˜S×.Ñ.Ñ.€LØ‡L�L�×"Ñ"Ô#Ü�w Ó-€DÜ
ˆ4ƒy�1‚}ÜÐ+Ó,Ð,Ø�1‰g€GØ€FØ�v‘, !Ñ#€KØ�v‘, Ñ%€KØ
ˆa�K€FØ˜F‘| qÑ(ÐØ*1°VÑ*;�$�v‘, Ò%À€JØ
ˆa�K€Fõñ ˜w¨š{™!°Ó2€JØ€IÜ�:ÖˆÙ ¨!¢™1°Ó3ˆØ4;¸vÑ4E™h q›k¨DÒ0È1ÐÙ'¨›{ÐÙÐ/Ó0ˆÙ “{ˆØˆÜ�|Ö$ˆAØ˜&Ñ ¡ZÙ˜Ô$Ù$ [Ó1ˆMÙ$ [Ó1ˆMØ�N‰N˜M¨=Ð9Õ:ð %ô +ØÐ!5°{ÄEÈ'ÃNó
ˆ	�'Òð ð  Ðr5   c                 óö  ‡‡— |j                   |j                  z
  }| j                  |j                  «       t        | |«      Št	        ‰«      dk  rt        d«      ‚‰d   }t        j                  ‰dd d«      }t        |dz  «      }dŠˆˆfd„} |d«      }t        |«      D ]T  }	 ||dk(  rdnd«      }
 |d«      }g }t        |«      D ]&  }	 ||rdnd«      }|j                  ||rd	nd
z  «       Œ( |||
<   ŒV y )Nr   úInvalid ipma boxr   r   r   r$  c                 ó‚   •— ‰| z   t        ‰«      kD  rt        d«      ‚t        j                  ‰‰‰| z    d«      }‰| z  Š|S )Nr5  r$  r%  r'  s     €€r2   r(  z_parse_ipma.<locals>.take_int  sH   ø€ à�D‰=œ3˜t›9Ò$ÜÐ/Ó0Ð0Ü—‘˜t F¨6°D©=Ð9¸5ÓAˆØ�$‰ˆØˆr5   r   iÿ  é   )ra   ró   r9   rÿ   ru   rq   r?   r&  Úboolrâ   r—   )rþ   r  Úassociationsr)  r  ÚflagsÚlarge_indexr(  Úentry_countré   r  Úassociation_countÚindexesr}   rè   rv   s                 @@r2   Ú_parse_ipmar?    sü   ù€ Ø—7‘7˜S×.Ñ.Ñ.€LØ‡L�L�×"Ñ"Ô#Ü�w Ó-€DÜ
ˆ4ƒy�1‚}ÜÐ+Ó,Ð,Ø�1‰g€GÜ�N‰N˜4  !˜9 eÓ,€EÜ�u˜q‘y“/€KØ€Fõñ ˜1“+€KÜ�;ÖˆÙ ¨1¢™1°!Ó4ˆÙ$ Q›KÐØˆÜÐ(Ö)ˆAÙ¡+™Q°1Ó5ˆEØ�N‰N˜5©k¡F¸tÑDÕEð *ð !(ˆ�WÒñ  r5   c                 ó  — t        | |j                  |j                  «      D ]â  }|j                  dk(  r´t        | |j                  |j                  «      D ]�  }d }|j                  dk(  r't	        | |d«      }t        j                  d|dd «      }n8|j                  dk(  r)t	        | |d«      }t        j                  |d   dz  d	«      }|j                  |j                  |f«       Œ‘ ŒÆ|j                  d
k(  sŒÖt        | ||«       Œä y )Ns   ipcoó   isper   ú>LLr   ó   irotr   r   r   s   ipma)r  ró   ra   rð   r  rà   rá   Ú_HEIF_IROT_TO_EXIFrl   r—   r?  )rþ   r  Ú
propertiesr9  ÚchildÚpropr}   r  s           r2   Ú_parse_iprprH  *  så   € Ü% g¨s×/@Ñ/@À#Ç'Á'ÖJˆØ�>‰>˜WÒ$Ü,¨W°e×6IÑ6IÈ5Ï9É9ÖU�Ø�Ø—=‘= GÒ+Ü-¨g°t¸RÓ@�FÜ"ŸM™M¨%°¸¸"°Ó>‘EØ—]‘] gÒ-Ü-¨g°t¸QÓ?�FÜ.×2Ñ2°6¸!±9¸tÑ3CÀRÓH�EØ×!Ñ! 4§=¡=°%Ð"8Õ9ñ Vð �^‰^˜wÓ&Ü˜ ¨Õ5ñ Kr5   c                   ó"   — e Zd Zd„ Zdd„Zdd„Zy)Ú_ExtentReaderc                 ó¬   — || _         g | _        d}|D ]1  \  }}|dk  rŒ| j                  j                  |||z   |f«       ||z  }Œ3 || _        d| _        y r  )Ú_fhandleÚ_extentsr—   rT   rS   )r1   rþ   rû   Úlogical_startÚfile_offsetrÕ   s         r2   rY   z_ExtentReader.__init__;  sf   € ØˆŒØˆŒØˆÛ#*ÑˆK˜Ø˜Š{ØØ�M‰M× Ñ  -°ÀÑ1GÈÐ!UÔVØ˜VÑ#‰Mð	 $+ð
 #ˆŒ
Øˆ�r5   c                 ó  — |t         j                  k(  r|}nQ|t         j                  k(  r| j                  |z   }n.|t         j                  k(  r| j
                  |z   }nt        d«      ‚|dk  rt        d«      ‚|| _        |S )Nr¢   r   r£   )r¤   r¥   r¦   rS   r§   rT   rq   r¨   s       r2   r9   z_ExtentReader.seekG  sr   € Ø”R—[‘[Ò Ø‰HØ”r—{‘{Ò"Ø—~‘~¨Ñ.‰HØ”r—{‘{Ò"Ø—z‘z FÑ*‰HäÐ-Ó.Ð.Ø�aŠ<ÜÐ5Ó6Ð6Ø!ˆŒØˆr5   c                 óŽ  — |dk  r| j                   | j                  z
  }t        |t        d| j                   | j                  z
  «      «      }g }|}|rä| j                  D ]Ñ  \  }}}|| j                  cxk  r|k  sŒn Œ t        ||| j                  z
  «      }| j
                  j                  || j                  z   |z
  «       | j
                  j                  |«      }|sdj                  |«      c S |j                  |«       | xj                  t        |«      z  c_        |t        |«      z  } n n|rŒädj                  |«      S )Nr   r5   )rT   rS   r–   r•   rM  rL  r9   r3   r˜   r—   ru   )	r1   r,   r™   rš   rN  Úlogical_endrO  r  r›   s	            r2   r3   z_ExtentReader.readU  s  € Ø�!Š8Ø—:‘: §¡Ñ.ˆDÜ�4œ˜Q §
¡
¨T¯^©^Ñ ;Ó<Ó=ˆØˆØˆ	ÙØ;?¿=¼=Ñ7�˜{¨KØ  D§N¡NÔ@°[Ö@Ü # I¨{¸T¿^¹^Ñ/KÓ L�IØ—M‘M×&Ñ& {°T·^±^Ñ'CÀmÑ'SÔTØ ŸM™M×.Ñ.¨yÓ9�EÙ Ø"Ÿx™x¨Ó/Ò/Ø—M‘M %Ô(Ø—N’N¤c¨%£jÑ0•NØ¤ U£Ñ+�IÙð <Ið ò ð �x‰x˜ÓÐr5   Nr;   r:   )r<   r=   r>   rY   r9   r3   r0   r5   r2   rJ  rJ  :  s   „ ò
óô r5   rJ  c                 óª  — | j                  |«       | j                  d«      }t        |«      dk  ry|d d dk(  rd}n|d d dk(  rd}ny	 t        j                  |dz   |dd	 «      d
   dk7  ryt        j                  |dz   |d	d «      d
   }| j                  ||z   «       t        j                  |dz   t        | d«      «      d
   }t        |«      D ]`  }t        | d«      }t        j                  |dz   |d d «      \  }}	}
|dk(  sŒ5|	dk(  sŒ;|
dk(  sŒAt        j                  |dz   |dd «      d
   c S  	 y# t        j                  t        f$ r Y yw xY w)Nr   r   r   rØ   rÙ   rÚ   rÛ   rÝ   r   r   é*   rÜ   r   ÚHHIrß   r   r   r   )	r9   r3   ru   rà   rá   rÿ   râ   rb   rq   )rþ   rú   r  rå   Ú
ifd_offsetrì   ré   r  rê   rë   Úvalue_counts              r2   Ú_read_tiff_orientation_streamrX  l  s]  € Ø‡L�L�ÔØ�\‰\˜!‹_€FÜ
ˆ6ƒ{�Q‚ØØˆbˆq€z�UÒØ‰Ø	��ˆ�uÒ	Ø‰àðÜ�=‰=˜ #™ v¨a° {Ó3°AÑ6¸"Ò<ØÜ—]‘] 6¨C¡<°¸¸!°Ó=¸aÑ@ˆ
Ø�‰�[ :Ñ-Ô.Ü—‘˜f s™l¬K¸ÀÓ,CÓDÀQÑGˆÜ�u–ˆAÜ ¨Ó,ˆEÜ)/¯©°vÀ±~ÀuÈRÈaÀyÓ)QÑ&ˆC�˜;Ø�f‹} ¨Q£°;À!Ó3CÜ—}‘} V¨c¡\°5¸¸2°;Ó?ÀÑBÒBñ	 ð øô �L‰Lœ*Ð%ò Ùðús1   Á
"D6 Á-BD6 ÄD6 ÄD6 Ä D6 Ä3D6 Ä6EÅET©Úread_rotationr  c                óÖ  — t        | «      }d}d}t        | d||¬«      D ]â  }|j                  dk(  r¹|j                  |j                  z
  dk  r yt        | |d|¬«      }|dd }|t        v }|j                  dz   }	|s|	dz   |j                  k  rm|�|	dz   t        |«      k  r	||	|	dz    }
n| j                  |	«       t        | d«      }
|
t        v }|	dz  }	|s%|	dz   |j                  k  rŒ[n|j                  d	k(  r|}|sŒß|€Œâ n |r|�|j                  |j                  z
  dk  ryd}g }i }i }i }d}|j                  dz   }t        | ||j                  |¬«      D �]  }|j                  d
k(  rft        | |t        d|j                  |j                  z
  «      «      }t        |«      dk\  sŒP|d   dk(  r|dd n|dd }t        j                  |d«      }Œy|j                  dk(  r|rt        | ||«       Œ˜|j                  dk(  r|r|j                  t        | |«      «       ŒÅ|j                  dk(  rt!        | |||«       Œã|j                  dk(  sŒó|sŒö|j                  }�Œ |j#                  |t%        t'        dt        |«      dz   «      «      «      }dx}x}x}}|D ]?  }d|cxk  rt        |«      k  sn Œ||dz
     \  }}|dk(  r|�|\  }}Œ2|sŒ5|dk(  sŒ;|€Œ>|}ŒA |dk(  r|j)                  «       ndD ]ê  \  }}|dk7  rŒ|j#                  |«      }|�|j*                  dk7  rŒ/|j,                  dk(  r|j.                  }n"|j,                  dk(  r|�||j.                  z   }nŒm|j0                  D �� cg c]  \  }} ||z   | f‘Œ }!}} t3        | |!«      }"|"j5                  d«      }#t        |#«      dk7  rŒ¼dt7        j8                  d|#«      d   z   }$t;        |"|$«      }|dk7  sŒê n ||||fS c c} }w )zFRead HEIF metadata after locating ftyp and meta in one top-level scan.FNr   ©r  ó   ftypr   )r   r   r   r   r   s   metas   pitmr   r$  s   iinfs   ilocs   iprps   idatr   r   rA  rC  r0   s   Exifr  )r  r  rð   ra   ró   r  Ú_HEIF_BRANDSru   r9   rÿ   r–   r?   r&  r  Úupdater3  rH  rl   Úlistrâ   Úitemsrù   rø   rú   rû   rJ  r3   rà   rá   rX  )%rþ   rZ  r  Ú	file_sizeÚis_heifÚmeta_boxr  r  Úmajor_brandÚbrand_offsetÚbrandÚprimary_item_idrE  r9  r  Úitem_locationsÚidat_payload_startÚchildren_startÚitem_id_dataÚtarget_indexesrC   rD   Úproperty_rotationÚexif_rotationÚindexÚproperty_typer}   r  r  ÚlocationÚoriginr6   rÕ   rû   ÚreaderÚoffset_dataÚtiff_offsets%                                        r2   Ú_read_heif_metadata_streamrw  ‡  s;  € ä˜WÓ%€IØ€GØ€HÜ# G¨Q°	À×EˆØ�<‰<˜7Ò"Ø�w‰w˜×*Ñ*Ñ*¨QÒ.Ù%Ü% g¨s°A¸DÔAˆFØ   !˜*ˆKØ!¤\Ð1ˆGØ×,Ñ,¨qÑ0ˆLÙ ,°Ñ"2°c·g±gÒ"=ØÐ#¨°qÑ(8¼CÀ»IÒ(EØ  ¨l¸QÑ.>Ð?‘Eà—L‘L Ô.Ü'¨°Ó3�EØ¤<Ð/�Ø Ñ!�ñ  ,°Ñ"2°c·g±gÔ"=ð �\‰\˜WÒ$ØˆHÚ�xÑ+Ùð' Fñ( �hÐ&¨(¯,©,¸×9OÑ9OÑ*OÐRSÒ*SØà€OØ€JØ€LØ€JØ€NØÐØ×+Ñ+¨aÑ/€NÜ# G¨^¸X¿\¹\ÐPT×UÐUˆØ�<‰<˜7Ò"Ü% g¨s´C¸¸3¿7¹7ÀS×EVÑEVÑ;VÓ4WÓXˆFÜ�6‹{˜aÓØ.4°Q©i¸1ªn˜v a¨™{À&ÈÈ1À+�Ü"%§.¡.°¸uÓ"E‘Ø�\‰\˜WÒ$©Ü˜  jÕ1Ø�\‰\˜WÒ$©Ø×!Ñ!¤+¨g°sÓ";Õ<Ø�\‰\˜WÒ$Ü˜  j°,Õ?Ø�\‰\˜WÓ$ªØ!$×!2Ñ!2Òð Vð "×%Ñ% o´t¼EÀ!ÄSÈÃ_ÐWXÑEXÓ<YÓ7ZÓ[€NØ9;Ð;€EÐ;ˆFÐ;Ð&¨ÛˆØ�EÔ,œS ›_Ô,ØØ)¨%°!©)Ñ4Ñˆ�uØ˜GÒ#¨Ð(9Ø!‰MˆE‘6Ú˜}°Ó7¸EÑ<MØ %Ñð  ð 5FÈÒ4K˜j×.Ñ.Ô0ÐQSÒSÑˆ�Ø˜ÒØØ!×%Ñ% gÓ.ˆØÐ˜x×<Ñ<ÀÒAØØ×'Ñ'¨1Ò,Ø×)Ñ)‰FØ×)Ñ)¨QÒ.Ð3EÐ3QØ'¨(×*>Ñ*>Ñ>‰FàØCK×CSÒCSÔTÑCS±°¸�F˜V‘O VÒ,ÐCSˆÑTÜ˜w¨Ó0ˆØ—k‘k !“nˆÜˆ{Ó˜qÒ ØØœ&Ÿ-™-¨¨kÓ:¸1Ñ=Ñ=ˆÜ5°f¸kÓJˆØ˜BÓÙð) Tð, �&Ð+¨]Ð:Ð:ùó Us   Í.O%c                 ó
   — | dv S )N>   r   r   r   r   r0   )rE   s    r2   Ú_is_rotation_swappedry  Ý  s   € Ø�|Ð#Ð#r5   c                 ó@  — t        | «      dk\  r| d d dv ryt        | «      dk\  r| j                  d«      ryt        | «      dk\  r| j                  d	«      ry
t        | «      dk\  r| j                  d«      ryt        | «      dk\  r	| dd dk(  ryt        | «      dk\  r| d d dv ryt        | «      dk\  r#| j                  d«      s| j                  d«      ry| d d dk(  r| dd dv ryt        | «      dk\  r| j                  d«      r	| dd dk(  ry| j                  d«      ry y!)"Nr   r   )s   GIF87as   GIF89aÚgifr   s   ‰PNG

Úpngr   s   ÿØÚjpegr   s      jP  
‡
Újp2r   r]  Úiso)ó   MM *ó   II* ó   II+ Útiffr   s   <?xmls   <svgÚsvgr   ó   Ps   123456Únetpbmr  s   RIFFs   WEBPÚwebps   BMÚbmpÚunknown)ru   rm   r\  s    r2   Ú_detect_image_formatrŠ  á  s  € Ü
ˆ4ƒy�B‚˜4  ˜8Ð'=Ñ=ØÜ
ˆ4ƒy�A‚~˜$Ÿ/™/Ð*>Ô?ØÜ
ˆ4ƒy�A‚~˜$Ÿ/™/¨+Ô6ØÜ
ˆ4ƒy�B‚˜4Ÿ?™?Ð+LÔMØÜ
ˆ4ƒy�A‚~˜$˜q ˜) wÒ.ØÜ
ˆ4ƒy�A‚~˜$˜r ˜(Ð&JÑJØÜ
ˆ4ƒy�A‚~˜4Ÿ?™?¨8Ô4¸¿¹ÈÔ8PØØˆBˆQ€x�4Ò˜D  1˜I¨Ñ2ØÜ
ˆ4ƒy�B‚˜4Ÿ?™?¨7Ô3¸¸Q¸r¸
ÀgÒ8MØØ‡��uÔØØr5   c                 ó,  — d}	 |�|dz   t        |«      k  r	|||dz    }n"| j                  |«       | j                  d«      }t        |«      dk7  rt        d«      ‚t	        j
                  d|«      \  }}|dk(  rŽ|dk  rt        d«      ‚|dz   }|�|dz   t        |«      k  r	|||dz    }n| j                  |«       t        | d«      }t	        j
                  d|«      \  }}	}
|
r t        |t        «      t        |	t        «      fS ||	fS |dv ry|d	|z   z  }�Œ)
Nr   úInvalid PNG filer  s   pHYsr   z>LLB)s   IDATs   IEND©r   r   r   )	ru   r9   r3   rq   rà   rá   rÿ   rÇ   r¾   )rþ   r  r6   r  rÕ   Ú
chunk_typeró   ÚpayloadÚxdensityÚydensityrÆ   s              r2   Ú_read_png_dpir’  ù  s:  € Ø€FØ
ØÐ ¨¡
¬c°$«iÒ 7Ø˜& ¨!¡Ð,‰Fà�L‰L˜Ô Ø—\‘\ !“_ˆFÜˆv‹;˜!ÒÜÐ/Ó0Ð0Ü#Ÿ]™]¨6°6Ó:Ñˆ�
Ø˜Ò Ø˜ŠzÜ Ð!3Ó4Ð4Ø" Q™JˆMØÐ M°AÑ$5¼¸T»Ò$BØ˜}¨]¸QÑ->Ð?‘à—‘˜]Ô+Ü% g¨qÓ1�Ü'-§}¡}°V¸WÓ'EÑ$ˆH�h ÙÜ% h´Ó9Ü% h´Ó9ð;ð ;à˜XÐ%Ð%ØÐ+Ñ+ØØ�"�v‘+Ñˆñ3 r5   r\  c          	      ó   ‡‡‡‡‡‡‡— dx}x}x}x}	x}
}dŠdŠdŠd}ˆˆˆˆˆˆˆfd„}|��’|t        |«      k  �rƒ|j                  d|«      }|dk(  rt        |«      }�n_|dz   }|t        |«      k  r$||   dk(  r|dz  }|t        |«      k  r	||   dk(  rŒ|t        |«      k\  r|}�n||   }|dz   }|dv rd}�n|dk(  sd	|cxk  rd
k  rn nŒ¥|dz   t        |«      kD  r|}�nÛt        j                  d||«      d   }|dk  rt	        d«      ‚|dz
  }|dz   }||z   }d}|dk(  r‰rt        |d«      }n,|dk(  r‰r|}n"d|cxk  rdk  rn n|t        vrt        |d«      }d}|rRt        ||z   t        |«      «      }||| }|t        |«      z
  }|r%| j                  |«       || j                  |«      z  }|dk(  ro‰rmt        |«      dk\  rÙ|j                  d«      rÈt        j                  d|dd «      \  }}}|dv r||}	}n%|dk(  r t        |t        «      }t        |t        «      }	dŠnz|dk(  r'‰r%|j                  d«      rbt        |dd  «      }
|
dk7  ŠnNd|cxk  rdk  rCn n@|t        vr8t        |«      dk  rt	        d«      ‚t        j                  d|d d «      \  }}}dŠ|} |«       rn|�|t        |«      k  r�Œƒ |«       s|dk\  r| j                  |«       	  |«       s|dk  r�n2| j                  d«      }|r|dk7  r| j                  d«      }|r|dk7  rŒ|s�ný| j                  d«      }|dk(  r| j                  d«      }|dk(  rŒ|s�nÌ|d   }|dv r�nÁ|dk(  sd	|cxk  rd
k  rn nŒ”	 t        j                  dt        | d«      «      d   }|dk  rt	        d«      ‚|dz
  }| j                  dt         j"                  «      }|dk(  r‹‰r‰| j                  t        |d«      «      }t        |«      dk\  �r|j                  d«      rôt        j                  d|dd «      \  }}}|dv r||}	}n%|dk(  r t        |t        «      }t        |t        «      }	dŠn¦|dk(  r8‰r6| j                  |«      }|j                  d«      r}t        |dd  «      }
|
dk7  Šnid|cxk  rdk  r^n n[|t        vrS| j                  t        |d«      «      }t        |«      dk  rt	        d«      ‚t        j                  d|d d «      \  }}}dŠ| j                  ||z   «        |«       rn�Œ@‰s‰r‰st	        d«      ‚t%        ‰r|nd‰r|nd‰r|
nd‰r|nd‰r|	ndd‰r|«      S d«      S # t        j                  t        f$ r t	        d«      ‚w xY w)Nr   Fr   c                  óJ   •— ‰	xs ‰ xs ‰} ‰ xs ‰}‰ xs ‰}| xr |xr |S r/   r0   )
Ú
needed_sofÚ
needed_dpiÚneeded_rotationrI   ÚdpiÚ	found_dpiÚfound_rotationÚ	found_sofrE   r,   s
      €€€€€€€r2   Údonez!_read_jpeg_metadata.<locals>.done  s=   ø€ ØÒ* (Ð+Ò8¨yˆ
Ø�WÒ) 	ˆ
Ø&˜,Ò8¨.ˆØÒ<˜jÒ<¨_Ð<r5   ó   ÿr   éÿ   )éÙ   éÚ   éÐ   é×   r  r   zInvalid JPEG segment sizeéà   é   éá   éÀ   éÏ   r   r5   r   s   JFIF z>BHHr   )r   r   Ts   Exif  zInvalid JPEG filez>xHHB)ru   Úfindrà   r  rq   r–   Ú_JPEG_NO_SOF_MARKERSr9   r3   rm   rá   rÇ   rÀ   rí   rÿ   rb   r¤   r¦   rN   ) rþ   r,   r˜  rE   rI   r  rC   rD   rF   rG   ÚorientationÚchannel_countr©   rœ  Úmarker_startÚmarker_cursorÚmarkerÚsegment_sizer)  ró   Úpayload_endÚ	read_sizer�  Ú
cached_endrš   rÆ   r�  r‘  Úmarker_byter™  rš  r›  s     ````                        @@@r2   Ú_read_jpeg_metadatar´    s  þ€ ØACÐC€EÐCˆFÐC�TÐC˜DÐC ;°Ø€IØ€IØ€NØ€H÷=ò =ð Ñ
˜x¬#¨d«)Ó3Ø—y‘y ¨(Ó3ˆØ˜2ÒÜ˜4“yˆHÙØ$ qÑ(ˆØœc $›iÒ'¨D°Ñ,?À4Ò,GØ˜QÑˆMð œc $›iÒ'¨D°Ñ,?À4Ó,GàœC ›IÒ%Ø#ˆHÙØ�mÑ$ˆØ  1Ñ$ˆØ�\Ñ!ØˆHÙØ�TŠ>˜T VÔ3¨tÕ3ØØ�a‰<œ#˜d›)Ò#Ø#ˆHÙÜ×)Ñ)¨$°°hÓ?ÀÑBˆØ˜!ÒÜÐ8Ó9Ð9Ø# aÑ'ˆØ  1™ˆØ# lÑ2ˆàˆ	Ø�TŠ>™cÜ˜L¨"Ó-‰IØ�tŠ^¡Ø$‰IØ�VÔ#˜tÕ#¨Ô6JÑ(JÜ˜L¨!Ó,ˆIàˆÙÜ˜]¨YÑ6¼¸D»	ÓBˆJØ˜=¨Ð4ˆGØ!¤C¨£LÑ0ˆIÙØ—‘˜ZÔ(Ø˜7Ÿ<™<¨	Ó2Ñ2�à�TŠ>™cÜ�7‹|˜rÒ! g×&8Ñ&8¸Ô&EÜ+1¯=©=¸ÀÈÈ2ÀÓ+OÑ(��h Ø˜6‘>Ø!)¨8˜$‘DØ˜Q’YÜ(¨´8Ó<�DÜ(¨´8Ó<�DØ ‘	Ø�tŠ^¡Ø×!Ñ! /Ô2ÜAÀ'È!È"À+ÓN�Ø!,°Ñ!2‘Ø�VÔ#˜tÕ#¨Ô6JÑ(JÜ�7‹|˜aÒÜ Ð!4Ó5Ð5Ü+1¯=©=¸À'È"È1À+Ó+NÑ(ˆF�E˜=ØˆIàˆÙŒ6ØðE Ð
˜x¬#¨d«)Ô3ñH Œ6�h !’mØ�‰�XÔØ
ÙŒ6�X ’\ÙØ—|‘| A“ˆÙ˜|¨wÒ6Ø"Ÿ<™<¨›?ˆLñ ˜|¨wÓ6áÙØ—l‘l 1“oˆØ˜WÒ$Ø!Ÿ,™, q›/ˆKð ˜WÓ$áÙØ˜Q‘ˆØ�\Ñ!ÙØ�TŠ>˜T VÔ3¨tÕ3Øð	2Ü!Ÿ=™=¨¬{¸7ÀAÓ/FÓGÈÑJˆLð ˜!ÒÜÐ8Ó9Ð9Ø# aÑ'ˆØŸ™ Q¬¯©Ó4ˆà�TŠ>™cØ—l‘l¤3 |°RÓ#8Ó9ˆGÜ�7‹|˜rÓ! g×&8Ñ&8¸Ô&EÜ+1¯=©=¸ÀÈÈ2ÀÓ+OÑ(��h Ø˜6‘>Ø!)¨8˜$‘DØ˜Q’YÜ(¨´8Ó<�DÜ(¨´8Ó<�DØ ‘	Ø�tŠ^¡Ø—l‘l <Ó0ˆGØ×!Ñ! /Ô2ÜAÀ'È!È"À+ÓN�Ø!,°Ñ!2‘Ø�VÔ#˜tÕ#¨Ô6JÑ(JØ—l‘l¤3 |°QÓ#7Ó8ˆGÜ�7‹|˜aÒÜ Ð!4Ó5Ð5Ü+1¯=©=¸À'È"È1À+Ó+NÑ(ˆF�E˜=ØˆIà�‰�] \Ñ1Ô2ÙŒ6Øñg ñj 	‘¡)ÜÐ,Ó-Ð-ÜÙ‰˜2Ù‰˜BÙ‰ RÙ‰˜Ù‰˜Ø
Ù!ˆóð ð (*óð øôG —‘œjÐ)ò 	2ÜÐ0Ó1Ð1ð	2ús   Í.#U Õ%U=c                 ó”   — |dk(  rt        j                  |dz   | d d «      d   S |dk(  rt        j                  |dz   | d d «      d   S y )Nr   rÝ   r   r   r   rÜ   )rà   rá   )r  rå   rë   s      r2   Ú_inline_tiff_valuer¶  ¯  sS   € Ø�1‚}Ü�}‰}˜V c™\¨5°°!¨9Ó5°aÑ8Ð8Ø�1‚}Ü�}‰}˜V c™\¨5°°!¨9Ó5°aÑ8Ð8Ør5   c                óÎ  — |�t        |«      dk\  r|d d }n| j                  d«       t        | d«      }|j                  d«      rd\  }}n9|j                  d«      rd\  }}n"|j                  d«      rd\  }}nt	        d	«      ‚|rQt        j                  |d
z   |dd «      d   dk7  rt	        d«      ‚t        j                  |dz   |dd «      d   }d}d}	n#t        j                  |dz   |dd «      d   }d}d}	|�||z   t        |«      k  r	||||z    }
n| j                  |«       t        | |«      }
t        j                  ||rdnd
z   |
«      d   }||z   }dx}x}}t        |«      D ]×  }|�||	z   t        |«      k  r	||||	z    }n| j                  |«       t        | |	«      }||	z  }t        j                  |dz   |d d «      \  }}|r|dd n|dd }|dk(  r|rt        |||«      }|�4|}n1|dk(  r|rt        |||«      }|�|}n|dk(  r|rt        |||«      }|�|}| xs |dk7  xr |dk7  }| xs |dk7  }|sŒÔ|sŒ× n |r|dk(  s|dk(  rt	        d«      ‚t        |||«      S )Nr  r   r€  )rÛ   Fr�  )rÙ   Fr‚  )rÙ   TzInvalid TIFF filerÝ   r   r   r   zInvalid BigTIFF fileÚQé   rÜ   r   r   r   ÚHHé   i  rß   z%Invalid TIFF file: missing dimensions)
ru   r9   rÿ   rm   rq   rà   rá   râ   r¶  rN   )rþ   r,   rE   r  r  rå   ÚbigtiffrV  Ú
count_sizeÚ
entry_sizeÚ
count_datar<  Úentry_offsetrC   rD   rª  ré   r  rê   rë   Úvalue_fieldr}   Ú	size_doneÚrotation_dones                           r2   Ú_read_tiff_metadatarÄ  ·  sÎ  € ØÐœC ›I¨šOØ�c�r�‰à�‰�QŒÜ˜W bÓ)ˆØ×Ñ˜Ô$Ø$‰ˆ‘Ø	×	Ñ	˜:Ô	&Ø$‰ˆ‘Ø	×	Ñ	˜:Ô	&Ø#‰ˆ‘äÐ,Ó-Ð-áÜ�=‰=˜ #™ v¨a° {Ó3°AÑ6¸!Ò;ÜÐ3Ó4Ð4Ü—]‘] 6¨C¡<°¸¸"°Ó>¸qÑAˆ
Øˆ
Ø‰
ä—]‘] 6¨C¡<°¸¸!°Ó=¸aÑ@ˆ
Øˆ
Øˆ
àÐ˜J¨Ñ3´s¸4³yÒ@Ø˜* Z°*Ñ%<Ð=‰
à�‰�ZÔ Ü  ¨*Ó5ˆ
Ü—-‘- ±©#¸cÑ BÀJÓOÐPQÑR€KØ 
Ñ*€Là#%Ð%€EÐ%ˆF�[Ü�;ÖˆØÐ ¨zÑ 9¼SÀ»YÒ FØ˜ l°ZÑ&?Ð@‰Eà�L‰L˜Ô&Ü ¨Ó4ˆEØ˜
Ñ"ˆÜŸ™ f¨t¡m°U¸2¸A°YÓ?‰ˆˆXÙ&-�e˜B˜r‘l°5¸¸2°;ˆØ�#Š:™$Ü& {°F¸HÓEˆEØÐ Ø‘Ø�CŠZ™DÜ& {°F¸HÓEˆEØÐ Ø‘Ø�CŠZ™HÜ& {°F¸HÓEˆEØÐ Ø#�Ø�HÒ> ¨"¡Ò!=°¸2±ˆ	Ø$˜Ò9¨°rÑ(9ˆÚšÙð1  ñ2 �˜"’ ¨"¢ÜÐ@ÓAÐAÜ˜% ¨Ó5Ð5r5   c              #   óœ  K  — |}|}|�|dkD  �r¼|�|dk  rt        d«      ‚|�|dz   t        |«      k  r	|||dz    }nT|�|t        |«      k  r||d  nd}| j                  |t        |«      z   «       || j                  dt        |«      z
  «      z   }|s|€y t        |«      dk7  rt        d«      ‚t	        j
                  d|«      \  }}	d}
|dk(  r¡|�/|dz   t        |«      k  rt	        j                  d	||dz   «      d   }nm|dz   }|�|t        |«      k  r||d  nd}| j                  |t        |«      z   «       |t        | dt        |«      z
  «      z   }t	        j
                  d	|«      d   }d}
n|dk(  r|}|€t        | «      |z
  |
z
  }n||
k  s|�||kD  rt        d«      ‚||
z
  }||
z   }|	||f–— ||z   }|�||z  }|€�Œ´|dkD  r�Œ»y y ­w)
Nr   r   zInvalid JPEG2000 box sizer5   zInvalid JPEG2000 box headerr  r   r  r  )	rq   ru   r9   r3   rà   rá   r  rÿ   r  )rþ   r`   Úcontainer_sizer  rš   Ú	box_startr  r
  Úbox_sizerð   rñ   r  r  r)  ró   s                  r2   Ú_iter_jp2_boxesrÉ  ø  s-  è ø€ Ø€IØ€IØ
Ð
˜y¨1›}ØÐ  Y°¢]ÜÐ8Ó9Ð9ØÐ 	¨A¡´°T³Ò :Ø˜) I°¡MÐ2‰Fà*.Ð*:Ø¤# d£)Ò+ð ˜9˜:Ñ&Ø14ð à�L‰L˜¤S¨£[Ñ0Ô1Ø˜gŸl™l¨1¬s°6«{©?Ó;Ñ;ˆFÙ˜)Ð+ØÜˆv‹;˜!ÒÜÐ:Ó;Ð;Ü#Ÿ]™]¨6°6Ó:Ñˆ�(ØˆØ�qŠ=ØÐ I°¡N´c¸$³iÒ$?Ü!×-Ñ-¨d°D¸)Àa¹-ÓHÈÑK‘à"+¨a¡-�Ø48Ð4DØ)¬C°«IÒ5ð ˜Ð/Ñ0Ø;>ð à—‘˜_¬s°6«{Ñ:Ô;Ø!¤K°¸¼SÀ»[¹Ó$IÑI�Ü!Ÿ=™=¨¨xÓ8¸Ñ;�Ø‰KØ˜Š]Ø ˆHØÐÜ'¨Ó0°9Ñ<¸{ÑJ‰Là˜+Ò%¨)Ð*?ÀHÈyÒDXÜ Ð!<Ó=Ð=Ø# kÑ1ˆLØ! KÑ/ˆØ˜ |Ð3Ò3Ø! LÑ0ˆ	ØÐ Ø˜Ñ!ˆIðO Ò
˜y¨1ž}ùs   ‚F?GÇGÇ
Gc          
      ó,  — d }t        | d|¬«      D ]  \  }}}|dk(  sŒ||f} n |€t        d«      ‚dx}x}	x}
}t        | |d   |d   |¬«      D �]�  \  }}}|dk(  r‡|r…|�|dz   t        |«      k  r	|||dz    }nO|�|t        |«      k  r||d  nd	}| j                  |t        |«      z   «       |t	        | dt        |«      z
  «      z   }t        j                  d
|«      \  }	}nø|dk(  ró|rñt        | |||¬«      D ]ß  \  }}}|dk7  rŒ|dk  rt        d«      ‚|�|dz   t        |«      k  r	|||dz    }nOd	}|�|t        |«      k  r||d  }| j                  |t        |«      z   «       |t	        | dt        |«      z
  «      z   }t        j                  d|«      \  }}}}}}|r8|r6||z  d|z  z  }||z  d|z  z  }t        |t        «      }
t        |t        «      } n |r|dk7  s�Œ•|r|
dk7  s�Œž n |r|dk(  s|	dk(  rt        d«      ‚t        ||	d|
|«      S )Nr   r\  s   jp2hzInvalid JPEG2000 filer   r   s   ihdrr   r5   rB  s   res s   resdr   zInvalid JPEG2000 resolution boxz>HHHHbbz!Invalid JPEG2000 image header box)
rÉ  rq   ru   r9   rÿ   rà   rá   rÇ   r¾   rN   )rþ   r,   r˜  r  Ú
jp2_headerrð   ró   r)  rC   rD   rF   rG   Ú
dimensionsr
  Úresolution_typeÚresolution_startÚresolution_sizeÚ
resolutionÚy_numeratorÚy_denominatorÚx_numeratorÚx_denominatorÚ
y_exponentÚ
x_exponentÚ	x_densityÚ	y_densitys                             r2   Ú_read_jp2_metadatarÙ  %  s¡  € Ø€JÜ1@ÀÈ!ÐRV×1WÑ-ˆ�- Ø�wÓØ'¨Ð6ˆJÙð 2Xð ÐÜÐ0Ó1Ð1à#%Ð%€EÐ%ˆFÐ%�T˜DÜ1@Ø�Z ‘] J¨q¡M¸÷2>ð 2>Ñ-ˆ�- à�wÒ¡4ØÐ M°AÑ$5¼¸T»Ò$BØ! -°ÀÑ0AÐB‘
à26Ð2BØ'¬#¨d«)Ò3ð ˜}˜~Ñ.Ø9<ð à—‘˜]¬S°«[Ñ8Ô9Ø#¤k°'¸1¼sÀ6»{¹?Ó&KÑK�
Ü"ŸM™M¨%°Ó<‰MˆF‘EØ˜Ò ¡SÜFUØ˜]¨L¸t÷GEÑB�Ð!1°?à" gÒ-ØØ" RÒ'Ü$Ð%FÓGÐGØÐ#Ð(8¸2Ñ(=ÄÀTÃÒ(JØ!%Ð&6Ð7GÈ"Ñ7LÐ!M‘Jà �FØÐ'Ð,<¼sÀ4»yÒ,HØ!%Ð&6Ð&7Ð!8˜Ø—L‘LÐ!1´C¸³KÑ!?Ô@Ø!'¬+°g¸rÄCÈÃKÑ?OÓ*PÑ!P�Jä+1¯=©=¸ÀJÓ+Oñ)�˜m¨[¸-Ø˜ZÙ ¡]Ø +¨mÑ ;¸rÀZÑ?OÑ P�IØ +¨mÑ ;¸rÀZÑ?OÑ P�IÜ(¨´HÓ=�DÜ(¨´HÓ=�DÙð+GEñ, ˜ œ©c°T¸R´ZÙðG2>ñH �˜"’ ¨"¢ÜÐ<Ó=Ð=Ü˜% ¨¨T°4Ó8Ð8r5   c                 ó²  — 	 |xs d}t        |«      dk  r:| j                  t        |«      «       || j                  dt        |«      z
  «      z  }|j                  d«      }t	        j
                  d|«      j                  d«      }t	        j
                  d|«      j                  d«      }t        |«      t        |«      fS # t        $ r t        d«      ‚w xY w)Nr5   i   zutf-8z[^-]width=(["'])(.*?)\1r   z[^-]height=(["'])(.*?)\1zInvalid SVG file)
ru   r9   r3   ÚdecoderÒ   ÚsearchÚgroupÚ	Exceptionrq   rÖ   )rþ   r  r  rv   rC   rD   s         r2   Ú_read_svg_sizerß  X  sÂ   € ð	-Ø’˜ˆÜˆv‹;˜ÒØ�L‰Lœ˜V›Ô%Ø�g—l‘l 4¬#¨f«+Ñ#5Ó6Ñ6ˆFØ�}‰}˜WÓ%ˆÜ—	‘	Ð8¸$Ó?×EÑEÀaÓHˆÜ—‘Ð:¸DÓA×GÑGÈÓJˆô ˜Ó¤¨VÓ 4Ð4Ð4øô ò -ÜÐ+Ó,Ð,ð-ús   ‚B)C ÃCc                 ó˜  ‡ ‡‡— t        |xs d«      ŠdŠˆˆˆ fd„}g }t        |«      dk  �r |«       st        d«      ‚t        ‰‰   g«      }‰dz  Š|j	                  «       rŒF|dk(  r/	  |«       st        d«      ‚t        ‰‰   g«      }‰dz  Š|dk(  rnŒ-Œz|j                  «       st        d«      ‚|} |«       r2t        ‰‰   g«      }‰dz  Š|j                  «       sn||z  } |«       rŒ2|j                  t        |«      «       |j                  «       rt        |«      dk  rt        d«      ‚t        |«      dk  r�Œt        |«      S )	Nr5   r   c                  ó¢   •— ‰t        ‰«      k  ry‰j                  t        ‰«      «       ‰j                  d«      } | sy‰j                  | «       y)NTé@   F)ru   r9   r3   Úextend)r›   rè   rv   rþ   s    €€€r2   Úensure_dataz&_read_netpbm_size.<locals>.ensure_dataj  sE   ø€ Ø”C˜“IÒØØ�‰”S˜“YÔØ—‘˜RÓ ˆÙØØ�‰�EÔØr5   zInvalid Netpbm filer   ó   #r�   z&Invalid character found in Netpbm file)	rž   ru   rq   r@   ÚisspaceÚisdigitr—   r?   rü   )rþ   r  rä  Úvaluesr}   Údigitsrè   rv   s   `     @@r2   Ú_read_netpbm_sizerê  f  sI  ú€ Ü�T’[˜SÓ!€DØ€Föð €FÜ
ˆf‹+˜‹/ÙŒ}ÜÐ2Ó3Ð3Ü�t˜F‘|�nÓ%ˆØ�!‰ˆØ�=‰=Œ?ØØ�DŠ=ØÙ"”}Ü$Ð%:Ó;Ð;Ü˜t F™|˜nÓ-�Ø˜!‘�Ø˜E’>Øð ð Ø�}‰}ŒÜÐEÓFÐFØˆÙŒmÜ˜4 ™<˜.Ó)ˆEØ�a‰KˆFØ—=‘=”?ØØ�e‰OˆFñ �mð 	�‰”c˜&“kÔ"Ø�=‰=Œ?œs 6›{¨QšÜÐ2Ó3Ð3ô7 ˆf‹+˜Œ/ô8 �‹=Ðr5   ©r,   r˜  rH   rE   rI   c          	      óº  — t        |||||f«      s
t        «       S | j                  d«       | j                  d«      }t	        |«      }|dk(  r*t        ||||f«      s
t        «       S t        | |||||¬«      S |dk(  r|s|s
t        «       S t        | |||¬«      S |dk(  r|s|s
t        «       S t        | |||¬«      S |d	k(  rG|s|s
t        «       S t        | ||¬
«      \  }}	}
}|
dk7  r|
n|}t        |r|nd|r|	nd|r|«      S d«      S |dk(  r±t        |«      dk  s|dd dk7  rt        d«      ‚|rt        j                  d|dd «      nd\  }}	|d   |d   }}ddddddœj                  |«      }|r
|rd||z  z  nd}|rddddddœj                  |d«      nd}|rt        | |¬«      nd\  }}t        ||	d||||«      S |dk(  ra|rt        j                  d|dd «      nd\  }}	d}|r$t        |«      d k\  r|d   d!z  rd|d   d"z  dz   z  }t        ||	ddd||rd«      S d«      S |d#k(  r‚|rt        j                  d$|d%d «      nd\  }}	|rt        |	«      nd}	d}|rAt        |«      d&k\  r3t        j                  d'|d(d& «      d   }|d)k  rdn|dk(  rdn|d*k(  rdnd}t        ||	|¬+«      S |d,k(  r |rt!        | |¬«      nd\  }}	t        ||	«      S |d-k(  r |rt#        | |¬«      nd\  }}	t        ||	«      S |d.k(  rÚdx}}	|r%|dd d/k(  rt        j                  d0|dd& «      \  }}	n£|rM|dd d1k(  rEt        j                  d2|dd3 d4z   «      d   dz   }t        j                  d2|d3d& d4z   «      d   dz   }	nT|rE|dd d5k(  r=|d6d }|d   d7z  d)z  |d   z  dz   }|d   d8z  dz  |d   dz  z  |d   d9z  dz	  z  dz   }	n|rt        d:«      ‚t        ||	«      S t        «       S );Nr   râ  r}  )r,   r˜  rE   rI   r  rƒ  )r,   rE   r  r~  )r,   r˜  r  r  rY  r   r|  é   r   r  s   IHDRrŒ  rB  é   r�  é   r   r   )r   r   r   r   r   r   r   r\  r{  z<hhr   r   r   é€   r   rˆ  z<llé   é   z<Hé   r   é    )rI   r„  r†  r‡  s   VP8 z<HHs   VP8Xz<Ié   ó    s   VP8Lé   é?   r"  r¦  zUnsupported WebP file)ÚanyrN   r9   r3   rŠ  r´  rÄ  rÙ  rw  ru   rq   rà   rá   rl   r’  Úabsrß  rê  )rþ   r,   r˜  rH   rE   rI   r  Úimage_formatrC   rD   rn  ro  rª  Ú	bit_depthÚ
color_typeÚcolor_channelsÚcolor_countr«  rF   rG   Údepthr}   s                         r2   Ú_read_image_metadatar  ”  s¤  € ä��c˜6 8¨XÐ6Ô7ÜÓÐØ‡L�L�„OØ�<‰<˜Ó€DÜ'¨Ó-€Là�vÒÜ�D˜#˜x¨Ð2Ô3Ü!Ó#Ð#Ü"Ø˜$ C°(ÀXÐTXô
ð 	
ð �vÒÙ™Ü!Ó#Ð#Ü" 7°ÀÈtÔTÐTØ�uÒÙ™Ü!Ó#Ð#Ü! '°¸#ÀDÔIÐIØ�uÒÙ™Ü!Ó#Ð#Ü:TØ 8°$ô;
Ñ7ˆˆvÐ(¨-ð ,=ÀÒ+BÑ'ÈˆÜÙ‰E˜rÙ‰F Ù#ˆKó
ð 	
ð *,ó
ð 	
ð
 �uÒÜˆt‹9�rŠ>˜T " R˜[¨GÒ3ÜÐ/Ó0Ð0Ù=AœŸ™ e¨T°"°R¨[Ô9Àx‰ˆˆvØ $ R¡¨$¨r©(�:ˆ	Ø 1¨¨q°QÑ7×;Ñ;¸JÓGˆÙ;AÁn�a˜I¨Ñ6Ò7ÐZ\ˆÙNV˜A !¨¨a°AÑ6×:Ñ:¸:ÀrÔJÐ\^ˆÙ:=”] 7°Õ6À8‰
ˆˆdÜ˜e V¨R°°t¸[È-ÓXÐXØ�uÒÙ<@œŸ™ e¨T°!°B¨ZÔ8Àh‰ˆˆvØˆÙ”c˜$“i 2’o¨$¨r©(°Tª/Ø  b¡¨D¡°AÑ 5Ñ6ˆKÜ˜e V¨R°°R¸É8ÀaÓ\Ð\ÐY[Ó\Ð\Ø�uÒÙ=AœŸ™ e¨T°"°R¨[Ô9Àx‰ˆˆvÙ $”�V”¨"ˆØˆÙœ˜D›	 RšÜ—M‘M $¨¨R°¨Ó4°QÑ7ˆEØ!&¨!¢™A°e¸r²k±ÈEÐUWÊKÁqÐ]_ˆMÜ˜e V°mÔDÐDØ�uÒÙ>Bœ w°TÕ:È‰ˆˆvÜ˜e VÓ,Ð,Ø�xÒÙAEÔ)¨'¸Õ=È8‰ˆˆvÜ˜e VÓ,Ð,Ø�vÒØÐˆ�Ù�D˜˜B�K 7Ò*Ü"ŸM™M¨%°°b¸°Ó=‰MˆE‘6Ù�d˜2˜b�k WÒ,Ü—M‘M $¨¨R°¨°eÑ(;Ó<¸QÑ?À!ÑCˆEÜ—]‘] 4¨¨b°¨°uÑ)<Ó=¸aÑ@À1ÑD‰FÙ�d˜2˜b�k WÒ,Ø˜˜B�KˆEØ˜Q‘x "‘}¨Ñ*¨e°A©hÑ6¸!Ñ;ˆEØ˜a™ 2™¨"Ñ,°°q±¸Q±Ñ?ÀEÈ!ÁHÈsÁNÐWXÑCXÑYÐ]^Ñ^‰FÙÜÐ4Ó5Ð5Ü˜e VÓ,Ð,ÜÓÐr5   )r,   r˜  rH   ro  rI   r,   r˜  rH   ro  rI   r-   c          	      ó†  — t        | «      \  }}	 t        ||||||¬«      }|j                  |j                  }
}	|rt	        |j
                  «      r|
|	}
}	t        |	|
|j
                  |j                  |j                  |j                  |j                  ¬«      |r|j                  «        S S # |r|j                  «        w w xY w)Nrë  )rC   rD   rE   rF   rG   rH   rI   )r¸   r  rC   rD   ry  rE   rB   rF   rG   rH   rI   r_   )r±   r,   r˜  rH   ro  rI   rþ   Úshould_closeÚmetadatarC   rD   s              r2   Úget_infor  å  s¹   € ä& xÓ0Ñ€Gˆ\ðÜ'ØØØØØØô
ˆð !Ÿ™¨¯©ˆvˆÙÔ1°(×2CÑ2CÔDØ" E�6ˆEÜØØØ×&Ñ&Ø—‘Ø—‘Ø—?‘?Ø×&Ñ&ô
ñ Ø�M‰M�Oð ø‰<Ø�M‰M�Oð ús   �BB+ Â+C )ro  c                ó&  — 	 t        | «      \  }}	 t        |ddd|d¬«      }|r|j                  «        	 |j                  |j
                  }}|rt        |j                  «      r||}}||fS # |r|j                  «        w w xY w# t        $ r Y yw xY w)zÌ
    Return (width, height) for a given img file content.
    Set exif_rotation=False to return stored dimensions as-is.
    :type filepath: Union[bytes, str, pathlib.Path]
    :rtype Tuple[int, int]
    TFrë  r�  )r¸   r  r_   rÞ  rC   rD   ry  rE   )r±   ro  rþ   r  r  rC   rD   s          r2   rl   rl     s¢   € ðÜ *¨8Ó 4Ñˆ�ð	 Ü+ØØØØØ&ØôˆHñ Ø—‘•ð —N‘N H§O¡Oˆ6€EÙÔ-¨h×.?Ñ.?Ô@Ø ˆvˆØ�&ˆ=Ðøñ Ø—‘•ð ûäò Ùðús'   ‚B ‘A, ¢B Á,BÂB Â	BÂBc                 óè   — 	 t        | «      \  }}	 t        |ddddd¬«      }|r|j                  «        	 |j                  |j
                  fS # |r|j                  «        w w xY w# t        $ r Y yw xY w)zŸ
    Return (x DPI, y DPI) for a given img file content
    no requirements
    :type filepath: Union[bytes, str, pathlib.Path]
    :rtype Tuple[int, int]
    FTrë  r�  )r¸   r  r_   rÞ  rF   rG   )r±   rþ   r  r  s       r2   ÚgetDPIr    s€   € ðÜ *¨8Ó 4Ñˆ�ð	 Ü+ØØØØØØôˆHñ Ø—‘•ð �=‰=˜(Ÿ-™-Ð'Ð'øñ	 Ø—‘•ð ûäò Ùðús'   ‚A% ‘A ¢A% ÁA"Á"A% Á%	A1Á0A1r/   r;   r®   )Urs   r¤   rÒ   rà   Úcollectionsr   Údecimalr   Útypingr   r   r   r   r	   r
   Úurllib.errorr   Úurllib.requestr   r   Ú	xml.etreer   r»   r¼   r½   r¾   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   Ú
_UNIT_INCHÚ_TIFF_TYPE_SIZESr^  rD  r©  r‚   r€   r‡   ÚcompileÚ
IGNORECASErƒ   r+   rµ   r@   r·   Ú	PathInputÚ	FileInputrB   rN   rP   r¸   rÇ   rÖ   rí   rï   r÷   rÿ   r  r  r  r  r3  r?  rH  rJ  rX  rw  ry  rŠ  r’  r´  r¶  rÄ  rÉ  rÙ  rß  rê  r  r8  r  r?   rl   r  r0   r5   r2   Ú<module>r     s§  ðÛ 	Û 	Û 	Û Ý #Ý ß R× RÝ "ß +å !à€Ø€
Ø€	Ø€Ø€
Ø€Ø€Ø€Ø€Ø€Ø€
ð ØØØØØØØØØØØñÐ ò€ð 	ØØØñ	Ð ò *Ð Ø#Ð Ø"Ð ØÐ Ø�B—J‘JÐ:¸B¿M¹MÓJÐ ð ô�Xó ó ðð �#�u˜bŸk™kÐ)Ñ*€	Ø�)˜X ~Ð5Ñ6€	ô�
ô ô�Zô ÷q#ñ q#ðh	&˜ó 	&òò05ò2"ôJ'�*ô 'ô�Jô òòóóD	=ò(ò6)òX(ò<6÷ / ñ / ódð6 :>ÀDô S;òl$òó0ð< IMô Uòpð :>ô >6óB*"ðZ 48ô 09óf5ó+ð\ +/°DÀØ"&°ôNðb 37ÀDÐY]Ø#'¸$ò�yð ¨4ð ¸Tð ÐRVð Ø ðØ37ðØCLóð: 7;ò �)ð ¨tð ¸uÀSÈ#ÀX¹ó ð:(�Yð ( 5¨¨c¨¡?ô (r5   