§
    œ"²c‚)  ã                   óB  — d dl Z d dlZd dlZddlmZmZ  G d„ d¦  «        Zd„ Zd„ Zd„ Z	 G d	„ d
ej        ¦  «        Z
d„ Zd„ Z ej        e
j        e
e¦  «          ej        e
j        e¦  «          ej        e
j        g d¢¦  «          ej        e
j        d¦  «         dS )é    Né   )ÚImageÚ	ImageFilec                   ó>   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
S )Ú	BoxReaderz}
    A small helper class to read fields stored in JPEG2000 header boxes
    and to easily step into and read sub-boxes.
    éÿÿÿÿc                 óF   — || _         |dk    | _        || _        d| _        d S )Nr   r   )ÚfpÚ
has_lengthÚlengthÚremaining_in_box)Úselfr
   r   s      ú7/usr/lib/python3/dist-packages/PIL/Jpeg2KImagePlugin.pyÚ__init__zBoxReader.__init__   s)   € ØˆŒØ  Aš+ˆŒØˆŒØ "ˆÔÐÐó    c                 óŽ   — | j         r'| j                             ¦   «         |z   | j        k    rdS | j        dk    r|| j        k    S dS )NFr   T)r   r
   Útellr   r   )r   Ú	num_bytess     r   Ú	_can_readzBoxReader._can_read#   sM   € ØŒ?ð 	˜tœwŸ|š|™~œ~°	Ñ9¸D¼KÒGÐGà�5ØÔ  AÒ%Ð%à Ô 5Ò5Ð5à�4r   c                 ó,  — |                       |¦  «        sd}t          |¦  «        ‚| j                             |¦  «        }t	          |¦  «        |k     r%d|› dt	          |¦  «        › d�}t          |¦  «        ‚| j        dk    r| xj        |z  c_        |S )NzNot enough data in headerzExpected to read z bytes but only got ú.r   )r   ÚSyntaxErrorr
   ÚreadÚlenÚOSErrorr   )r   r   ÚmsgÚdatas       r   Ú_read_byteszBoxReader._read_bytes-   sž   € Ø�~Š~˜iÑ(Ô(ð 	#Ø-ˆCÝ˜cÑ"Ô"Ð"àŒw�|Š|˜IÑ&Ô&ˆÝˆt‰9Œ9�yÒ Ð ØQ iÐQÐQÅSÈÁYÄYÐQÐQÐQˆCÝ˜#‘,”,ÐàÔ  1Ò$Ð$ØÐ!Ô! YÑ.Ð!Ô!Øˆr   c                 ó~   — t          j        |¦  «        }|                      |¦  «        }t          j        ||¦  «        S ©N)ÚstructÚcalcsizer   Úunpack)r   Úfield_formatÚsizer   s       r   Úread_fieldszBoxReader.read_fields;   s6   € ÝŒ˜|Ñ,Ô,ˆØ×Ò Ñ%Ô%ˆÝŒ}˜\¨4Ñ0Ô0Ð0r   c                 ó~   — | j         }|                      |¦  «        }t          t          j        |¦  «        |¦  «        S r    )r   r   r   ÚioÚBytesIO)r   r%   r   s      r   Ú
read_boxeszBoxReader.read_boxes@   s7   € ØÔ$ˆØ×Ò Ñ%Ô%ˆÝ�œ DÑ)Ô)¨4Ñ0Ô0Ð0r   c                 óh   — | j         r*| j                             ¦   «         | j        z   | j        k     S dS )NT)r   r
   r   r   r   )r   s    r   Úhas_next_boxzBoxReader.has_next_boxE   s0   € ØŒ?ð 	Ø”7—<’<‘>”> DÔ$9Ñ9¸D¼KÒGÐGà�4r   c                 ól  — | j         dk    r*| j                             | j         t          j        ¦  «         d| _         |                      d¦  «        \  }}|dk    r|                      d¦  «        d         }d}nd}||k     s|                      ||z
  ¦  «        sd}t          |¦  «        ‚||z
  | _         |S )	Nr   r   z>I4sr   z>Qé   é   zInvalid header length)r   r
   ÚseekÚosÚSEEK_CURr&   r   r   )r   ÚlboxÚtboxÚhlenr   s        r   Únext_box_typezBoxReader.next_box_typeK   sº   € àÔ  1Ò$Ð$ØŒG�LŠL˜Ô.µ´Ñ<Ô<Ð<Ø "ˆÔð ×%Ò% fÑ-Ô-‰
ˆˆdØ�1Š9ˆ9Ø×#Ò# DÑ)Ô)¨!Ô,ˆDØˆDˆDàˆDà�$Š;ˆ;˜dŸnšn¨T°D©[Ñ9Ô9ˆ;Ø)ˆCÝ˜cÑ"Ô"Ð"à $ t¡ˆÔØˆr   N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r&   r*   r,   r6   © r   r   r   r      sŒ   € € € € € ðð ð
#ð #ð #ð #ðð ð ðð ð ð1ð 1ð 1ð
1ð 1ð 1ð
ð ð ðð ð ð ð r   r   c                 ó   — |                       d¦  «        }t          j        d|¦  «        d         }||                       |dz
  ¦  «        z   }t          j        d|¦  «        \  }}}}}}}	}	}	}	}
dg|
z  }dg|
z  }dg|
z  }t	          |
¦  «        D ]+}t          j        d|dd|z  z   ¦  «        \  ||<   ||<   ||<   Œ,||z
  ||z
  f}|
d	k    r|d         d
z  dk    rd}n d}n|
dk    rd}n|
dk    rd}n|
dk    rd}nd}||fS )z‹Parse the JPEG 2000 codestream to extract the size and component
    count from the SIZ marker segment, returning a PIL (size, mode) tuple.é   z>Hr   z>HHIIIIIIIIHNz>BBBé$   é   r   é   r/   úI;16ÚLÚLAÚRGBé   ÚRGBA)r   r!   r#   Úunpack_fromÚrange)r
   ÚhdrÚlsizÚsizÚrsizÚxsizÚysizÚxosizÚyosizÚ_ÚcsizÚssizÚxrsizÚyrsizÚir%   Úmodes                    r   Ú_parse_codestreamrX   a   sW  € ð �'Š'�!‰*Œ*€CÝŒ=˜˜sÑ#Ô# AÔ&€DØ
�—’˜˜q™Ñ!Ô!Ñ
!€CÝ=CÔ=OØ˜ñ>ô >Ñ:€Dˆ$��d˜E 5¨!¨Q°°1°dð ˆ6�D‰=€DØˆF�T‰M€EØˆF�T‰M€EÝ�4‰[Œ[ð Rð RˆÝ&,Ô&8¸ÀÀbÈ1ÈqÉ5ÁjÑ&QÔ&QÑ#ˆˆQ‰��q‘˜5 ™8˜8à�5‰L˜$ ™,Ð'€DØˆq‚y€yØ�!ŒH�t‰O˜qÒ Ð ØˆDˆDàˆDˆDØ	�ŠˆØˆˆØ	�ŠˆØˆˆØ	�ŠˆØˆˆàˆà�ˆ:Ðr   c                 ó4   — |dk    rd| z  d|z  z  d|z  z  S dS )zµConvert JPEG2000's (numerator, denominator, exponent-base-10) resolution,
    calculated as (num / denom) * 10^exp and stored in dots per meter,
    to floating-point dots per inch.r   éþ   é
   i'  Nr;   )ÚnumÚdenomÚexps      r   Ú_res_to_dpir_   ƒ   s0   € ð �‚z€zØ�c‘	˜R ™WÑ%¨%°%©-Ñ8Ð8ð €zr   c                 óä  — t          | ¦  «        }d}d}|                     ¦   «         rj|                     ¦   «         }|dk    r|                     ¦   «         }n;|dk    r!|                     d¦  «        d         dk    rd}|                     ¦   «         °jd}d}d}d}d}	|                     ¦   «         �r&|                     ¦   «         }|dk    rT|                     d	¦  «        \  }
}}}||
f}|d
k    r|dz  dk    rd}nÇ|d
k    rd}n¾|dk    rd}nµ|dk    rd}n¬|dk    rd}n£|dk    r�|                     ¦   «         }|                     ¦   «         ru|                     ¦   «         }|dk    rG|                     d¦  «        \  }}}}}}t          |||¦  «        }t          |||¦  «        }|�|�||f}	n|                     ¦   «         °u|                     ¦   «         �°&|�|€d}t          |¦  «        ‚||||	fS )zªParse the JP2 header box to extract size, component count,
    color space information, and optionally DPI information,
    returning a (size, mode, mimetype, dpi) tuple.Ns   jp2hs   ftypz>4sr   s   jpx z	image/jpxs   ihdrz>IIHBr   r@   r/   rA   rB   r=   rC   r?   rD   rE   rF   s   res s   rescz>HHHHBBzMalformed JP2 header)r   r,   r6   r*   r&   r_   r   )r
   ÚreaderÚheaderÚmimetyper4   r%   rW   ÚbpcÚncÚdpiÚheightÚwidthÚresÚtresÚvrcnÚvrcdÚhrcnÚhrcdÚvrceÚhrceÚhresÚvresr   s                          r   Ú_parse_jp2_headerrs   ‹   s`  € õ �r‰]Œ]€FØ€FØ€HØ
×
Ò
Ñ
Ô
ð 'Ø×#Ò#Ñ%Ô%ˆà�7Š?ˆ?Ø×&Ò&Ñ(Ô(ˆFØØ�WŠ_ˆ_Ø×!Ò! %Ñ(Ô(¨Ô+¨wÒ6Ð6Ø&�ð ×
Ò
Ñ
Ô
ð 'ð €DØ€DØ
€CØ	€BØ
€Cà
×
Ò
Ñ
Ô
ñ Ø×#Ò#Ñ%Ô%ˆà�7Š?ˆ?Ø%+×%7Ò%7¸Ñ%@Ô%@Ñ"ˆF�E˜2˜sØ˜6�?ˆDØ�QŠwˆw˜C $™J¨!Ò+Ð+Ø��Ø�q’�Ø��Ø�q’�Ø��Ø�q’�Ø��Ø�q’�Ø�øØ�WŠ_ˆ_Ø×#Ò#Ñ%Ô%ˆCØ×"Ò"Ñ$Ô$ð Ø×(Ò(Ñ*Ô*�Ø˜7’?�?Ø9<¿ºÈÑ9SÔ9SÑ6�D˜$  d¨D°$Ý& t¨T°4Ñ8Ô8�DÝ& t¨T°4Ñ8Ô8�DØÐ'¨DÐ,<Ø# T˜l˜Øð ×"Ò"Ñ$Ô$ð ð% ×
Ò
Ñ
Ô
ñ ð8 €|�t�|Ø$ˆÝ˜#ÑÔÐà��x Ð$Ð$r   c                   ób   ‡ — e Zd ZdZdZd„ Zeˆ fd„¦   «         Zej        d„ ¦   «         Zd„ Z	ˆ xZ
S )ÚJpeg2KImageFileÚJPEG2000zJPEG 2000 (ISO 15444)c                 óÄ  — | j                              d¦  «        }|dk    r)d| _        t          | j         ¦  «        \  | _        | _        nr|| j                              d¦  «        z   }|dk    r>d| _        t          | j         ¦  «        }|\  | _        | _        | _        }|�
|| j        d<   nd}t          |¦  «        ‚| j
        �| j        €d	}t          |¦  «        ‚d
| _        d
| _        d}d}	 | j                              ¦   «         }t          j        |¦  «        j        }n—# t"          $ rŠ d}	 | j                              ¦   «         }| j                              d
t(          j        ¦  «         | j                              ¦   «         }| j                              |¦  «         n# t"          $ r d}Y nw xY wY nw xY wdd| j
        z   d
| j        | j        | j        ||ffg| _        d S )NrE   ó   ÿOÿQÚj2kr/   ó      jP  
‡
Újp2rf   znot a JPEG 2000 filezunable to determine size/moder   r   Újpeg2k©r   r   )r
   r   ÚcodecrX   Ú_sizerW   rs   Úcustom_mimetypeÚinfor   r%   Ú_reduceÚlayersÚfilenor1   ÚfstatÚst_sizeÚ	Exceptionr   r0   r(   ÚSEEK_ENDÚtile)r   Úsigrb   rf   r   Úfdr   Úposs           r   Ú_openzJpeg2KImageFile._openÏ   sä  € ØŒg�lŠl˜1‰oŒoˆØÐ%Ò%Ð%ØˆDŒJÝ$5°d´gÑ$>Ô$>Ñ!ˆDŒJ˜œ	˜	à˜œŸš Q™œÑ'ˆCàÐ=Ò=Ð=Ø"�”
Ý*¨4¬7Ñ3Ô3�ØCIÑ@�”
˜DœI tÔ';¸SØ�?Ø'*�D”I˜eÑ$øà,�Ý! #Ñ&Ô&Ð&àŒ9Ð ¤	Ð 1Ø1ˆCÝ˜cÑ"Ô"Ð"àˆŒØˆŒàˆØˆð	Ø”—’Ñ!Ô!ˆBÝ”X˜b‘\”\Ô)ˆFˆFøÝð 	ð 	ð 	ØˆBðØ”g—l’l‘n”n�Ø”—’˜Q¥¤Ñ,Ô,Ð,ØœŸš™œ�Ø”—’˜SÑ!Ô!Ð!Ð!øÝð ð ð Ø���ðøøøøøð	øøøð Ø˜œÑ"ØØ”˜Tœ\¨4¬;¸¸FÐCð	ð
ˆŒ	ˆ	ˆ	s7   Ã.2D! Ä!F5Ä.A1F ÆF5Æ F/Æ,F5Æ.F/Æ/F5Æ4F5c                 ó8   •— | j         pt          ¦   «         j        S r    )r‚   ÚsuperÚreduce)r   Ú	__class__s    €r   r�   zJpeg2KImageFile.reduce  s   ø€ ð
 Œ|Ð-�u™wœwœ~Ð-r   c                 ó   — || _         d S r    )r‚   )r   Úvalues     r   r�   zJpeg2KImageFile.reduce  s   € àˆŒˆˆr   c                 óÈ  — | j         r½| j        r¶d| j        z  }|dz	  }t          | j        d         |z   |z  ¦  «        t          | j        d         |z   |z  ¦  «        f| _        | j         d         }|d         d         | j        | j        |d         d         |d         d         f}|d         d| j        z   |d         |fg| _         t          j                             | ¦  «        S )Nr   r   r?   rE   r}   r=   )r‰   r‚   Úintr%   r   rƒ   r   Úload)r   ÚpowerÚadjustÚtÚt3s        r   r–   zJpeg2KImageFile.load  sÛ   € ØŒ9ð 	?˜œð 	?Ø˜œÑ%ˆEØ˜a‘ZˆFå�T”Y˜q”\ FÑ*¨eÑ3Ñ4Ô4Ý�T”Y˜q”\ FÑ*¨eÑ3Ñ4Ô4ðˆDŒJð ”	˜!”ˆAØ�A”$�q”'˜4œ<¨¬°a¸´d¸1´g¸qÀ¼tÀA¼wÐGˆBØ˜Aœ$ ¨¬Ñ 2°A°a´D¸"Ð=Ð>ˆDŒIåÔ"×'Ò'¨Ñ-Ô-Ð-r   )r7   r8   r9   ÚformatÚformat_descriptionr�   Úpropertyr�   Úsetterr–   Ú__classcell__)r‘   s   @r   ru   ru   Ë   s‹   ø€ € € € € Ø€FØ0Ðð0
ð 0
ð 0
ðd ð.ð .ð .ð .ñ „Xð.ð „]ðð ñ „]ðð.ð .ð .ð .ð .ð .ð .r   ru   c                 ó:   — | d d…         dk    p| d d…         dk    S )NrE   rx   é   rz   r;   )Úprefixs    r   Ú_acceptr£     s/   € àˆr�ˆrŒ
Ð)Ò)ð 	BØ�#�2�#Œ;ÐAÒAðr   c                 ó$  — | j         }|                     d¦  «        s|                     dd¦  «        rd}nd}|                     dd ¦  «        }|                     dd ¦  «        }|                     dd ¦  «        }|                     d	d
¦  «        }|                     dd ¦  «        }	|	�Ft          |	t          t
          f¦  «        rt          d„ |	D ¦   «         ¦  «        sd}
t          |
¦  «        ‚|                     dd¦  «        }|                     dd ¦  «        }|                     dd ¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }d}t          |d¦  «        r(	 | 	                    ¦   «         }n# t          $ r d}Y nw xY w|||||	|||||||||f| _        t          j        | |dd| j        z   d|fg¦  «         d S )Nú.j2kÚno_jp2Fry   r{   ÚoffsetÚtile_offsetÚ	tile_sizeÚquality_modeÚratesÚquality_layersc                 óF   — g | ]}t          |t          t          f¦  «        ‘ŒS r;   )Ú
isinstancer•   Úfloat)Ú.0Úquality_layers     r   ú
<listcomp>z_save.<locals>.<listcomp>9  s6   € ð ð ð à!õ ˜=­3µ¨,Ñ7Ô7ðð ð r   z,quality_layers must be a sequence of numbersÚnum_resolutionsr   Úcodeblock_sizeÚprecinct_sizeÚirreversibleÚprogressionÚLRCPÚcinema_modeÚnoÚmctÚsignedr   r„   r|   r}   )ÚencoderinfoÚendswithÚgetr®   ÚlistÚtupleÚallÚ
ValueErrorÚhasattrr„   r‡   Úencoderconfigr   Ú_saver%   )Úimr
   Úfilenamer�   Úkindr§   r¨   r©   rª   r¬   r   r³   Ú	cblk_sizerµ   r¶   r·   r¹   r»   r¼   r‹   s                       r   rÆ   rÆ   (  sK  € àŒ>€Dà×Ò˜Ñ Ô ð  D§H¢H¨X°uÑ$=Ô$=ð Øˆˆàˆà�XŠX�h Ñ%Ô%€FØ—(’(˜=¨$Ñ/Ô/€KØ—’˜ dÑ+Ô+€IØ—8’8˜N¨GÑ4Ô4€LØ—X’XÐ.°Ñ5Ô5€NØÐ!Ý�>¥D­% =Ñ1Ô1ð "åðð à%3ðñ ô ñ
ô 
ð "ð =ˆÝ˜‰oŒoÐà—h’hÐ0°!Ñ4Ô4€OØ—’Ð)¨4Ñ0Ô0€IØ—H’H˜_¨dÑ3Ô3€MØ—8’8˜N¨EÑ2Ô2€LØ—(’(˜=¨&Ñ1Ô1€KØ—(’(˜=¨$Ñ/Ô/€KØ
�(Š(�5˜!Ñ
Ô
€CØ�XŠX�h Ñ&Ô&€FØ	€Båˆr�8ÑÔð ð	Ø—’‘”ˆBˆBøÝð 	ð 	ð 	ØˆBˆBˆBð	øøøð 	ØØØØØØØØØØØØØ
ð€BÔõ" „O�B˜˜h¨°´Ñ(8¸!¸TÐBÐCÑDÔDÐDÐDÐDs   Æ1G ÇGÇG)z.jp2r¥   z.jpcz.jpfz.jpxz.j2cz	image/jp2)r(   r1   r!   Ú r   r   r   rX   r_   rs   ru   r£   rÆ   Úregister_openr›   Úregister_saveÚregister_extensionsÚregister_mimer;   r   r   ú<module>rÐ      sl  ðð  
€	€	€	Ø 	€	€	€	Ø €€€à Ð Ð Ð Ð Ð Ð Ð ðGð Gð Gð Gð Gñ Gô Gð GðTð ð ðD9ð 9ð 9ð9%ð 9%ð 9%ð@O.ð O.ð O.ð O.ð O.�iÔ)ñ O.ô O.ð O.ðdð ð ð;Eð ;Eð ;EðD €Ô �OÔ*¨O¸WÑ EÔ EÐ EØ €Ô �OÔ*¨EÑ 2Ô 2Ð 2à €Ô ØÔÐLÐLÐLñô ð ð €Ô �OÔ*¨KÑ 8Ô 8Ð 8Ð 8Ð 8r   