§
    œ"²ce,  ã                   óÐ  — d dl mZmZ d dlmZ d dlmZ d dlmZ dZ	ddddddd	d
dd	dœ
Z
d„ Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Zd„ Z ej        ej        ee¦  «          ej        ej        e¦  «          ej        de¦  «          ej        de¦  «          ej        ej        g d¢¦  «          ej        ej        d¦  «         dS )é   )ÚImageÚ	ImageFile)Úi16be)Úo8)Úo32les    	
Ú1ÚLÚRGBÚCMYKÚPÚRGBA)
ó   P1ó   P2ó   P3ó   P4ó   P5ó   P6s   P0CMYKs   PyPs   PyRGBAs   PyCMYKc                 ó2   — | dd…         dk    o	| d         dv S )Né    r   ó   Ps   0123456y© )Úprefixs    ú4/usr/lib/python3/dist-packages/PIL/PpmImagePlugin.pyÚ_acceptr   -   s#   € Ø�!�A�#Œ;˜$ÒÐ; 6¨!¤9°Ð#;Ð;ó    c                   ó(   — e Zd ZdZdZd„ Zd„ Zd„ ZdS )ÚPpmImageFileÚPPMzPbmplus imagec                 ó†   — d}t          d¦  «        D ].}| j                             d¦  «        }|r	|t          v r n||z  }Œ/|S )Nr   é   r   )ÚrangeÚfpÚreadÚb_whitespace)ÚselfÚmagicÚ_Úcs       r   Ú_read_magiczPpmImageFile._read_magic:   sT   € Øˆå�q‘”ð 	ð 	ˆAØ”—’˜Q‘”ˆAØð ˜�\Ð)Ð)Ø�Ø�Q‰JˆEˆEØˆr   c                 óÌ  — d}t          |¦  «        dk    r‚| j                             d¦  «        }|sne|t          v r|sŒ<nX|dk    r:| j                             d¦  «        dvr	 | j                             d¦  «        dv°Œ}||z  }t          |¦  «        dk    °‚|sd}t	          |¦  «        ‚t          |¦  «        dk    r&d|                     ¦   «         › �}t	          |¦  «        ‚|S )Nr   é
   r   ó   #s   
z Reached EOF while reading headerzToken too long in file header: )Úlenr"   r#   r$   Ú
ValueErrorÚdecode)r%   Útokenr(   Úmsgs       r   Ú_read_tokenzPpmImageFile._read_tokenD   sø   € ØˆÝ�%‰jŒj˜BÒÐØ”—’˜Q‘”ˆAØð ØØ•lÐ"Ð"Øð àØØ�d’�à”g—l’l 1‘o”o¨WÐ4Ð4Øð ”g—l’l 1‘o”o¨WÐ4Ð4àØ�Q‰JˆEõ �%‰jŒj˜BÒÐð ð 	"à4ˆCÝ˜S‘/”/Ð!Ý�‰ZŒZ˜"Š_ˆ_ØD°E·L²L±N´NÐDÐDˆCÝ˜S‘/”/Ð!Øˆr   c                 óÐ  — |                       ¦   «         }	 t          |         }n# t          $ r d}t          |¦  «        ‚w xY w|dv rd| _        n|dv rd| _        n|dv rd| _        d }d}|d	v rd
}t          d¦  «        D ]§}t          |                      ¦   «         ¦  «        }|dk    r|}Œ,|dk    r|}	|dk    rd| _        d}
 nc|x| _        }
ŒO|dk    rR|}d|cxk     rdk     sn d}t          |¦  «        ‚|dk    r|dk    rd| _        |d
k    r|dk    r	|dk    rd}
ŒŸ|dk    rd}Œ¨|dk    r|
ddfn|
|f}||	f| _
        |dd||	f| j                             ¦   «         |fg| _        d S )Nznot a PPM file)r   r   zimage/x-portable-bitmap)r   r   zimage/x-portable-graymap)r   r   zimage/x-portable-pixmapÚraw)r   r   r   Ú	ppm_plainé   r   r   r   ú1;Ié   i   z1maxval must be greater than 0 and less than 65536éÿ   r	   ÚIéÿÿ  úI;16BÚppm)r)   ÚMODESÚKeyErrorÚSyntaxErrorÚcustom_mimetyper!   Úintr2   Úmoder.   Ú_sizer"   ÚtellÚtile)r%   Úmagic_numberrC   r1   ÚmaxvalÚdecoder_nameÚixr0   ÚxsizeÚysizeÚrawmodeÚargss               r   Ú_openzPpmImageFile._open^   sý  € Ø×'Ò'Ñ)Ô)ˆð	#Ý˜Ô&ˆDˆDøÝð 	#ð 	#ð 	#Ø"ˆCÝ˜cÑ"Ô"Ð"ð	#øøøð ˜>Ð)Ð)Ø#<ˆDÔ Ð Ø˜^Ð+Ð+Ø#=ˆDÔ Ð Ø˜^Ð+Ð+Ø#<ˆDÔ àˆØˆØÐ0Ð0Ð0Ø&ˆLÝ˜‘(”(ð 	-ð 	-ˆBÝ˜×(Ò(Ñ*Ô*Ñ+Ô+ˆEØ�QŠwˆwØ��Ø�q’�Ø�Ø˜3’;�;Ø #�D”IØ#�GØ�Eà*.Ð.�D”I  Ø�q’�Ø�Ø˜6Ð)Ð)Ò)Ð) EÒ)Ð)Ð)Ð)ØM�CÝ$ S™/œ/Ð)Ø˜C’<�< D¨C¢K KØ #�D”Ià ;Ò.Ð.à ’�¨4°3ª;¨;Ø")˜˜Ø 3š˜Ø',˜øà".°%Ò"7Ð"7�˜˜Aˆˆ¸gÀvÐ=NˆØ˜E�\ˆŒ
Ø" Q¨¨5°%Ð$8¸$¼'¿,º,¹.¼.È$ÐOÐPˆŒ	ˆ	ˆ	s	   –$ ¤A N)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr)   r2   rO   r   r   r   r   r   5   sQ   € € € € € à€FØ(Ððð ð ðð ð ð40Qð 0Qð 0Qð 0Qð 0Qr   r   c                   ó8   — e Zd ZdZd„ Zd
d„Zd„ Zd„ Zd„ Zd„ Z	d	S )ÚPpmPlainDecoderTc                 óJ   — | j                              t          j        ¦  «        S )N)Úfdr#   r   Ú	SAFEBLOCK)r%   s    r   Ú_read_blockzPpmPlainDecoder._read_block˜   s   € ØŒw�|Š|�IÔ/Ñ0Ô0Ð0r   r   c                 ó¬   — |                      d|¦  «        }|                      d|¦  «        }||z  dk    rt          ||¦  «        nt          ||¦  «        S )Nó   
ó   r   )ÚfindÚminÚmax)r%   ÚblockÚstartÚaÚbs        r   Ú_find_comment_endz!PpmPlainDecoder._find_comment_end›   sN   € Ø�JŠJ�u˜eÑ$Ô$ˆØ�JŠJ�u˜eÑ$Ô$ˆØ ™E AšI˜I�s�1�a‰yŒyˆy­3¨q°!©9¬9Ð4r   c                 ón  — | j         rA|r?|                      |¦  «        }|dk    r||dz   d …         }n|                      ¦   «         }|°?d| _         	 |                     d¦  «        }|dk    rnH|                      ||¦  «        }|dk    r|d |…         ||dz   d …         z   }n|d |…         }d| _         nŒd|S )Néÿÿÿÿr   FTr,   )Ú_comment_spansre   rZ   r^   )r%   ra   Úcomment_endÚcomment_starts       r   Ú_ignore_commentsz PpmPlainDecoder._ignore_comments    s  € ØÔð 	/àð 
/Ø"×4Ò4°UÑ;Ô;�Ø "Ò$Ð$ð " +°¡/Ð"3Ð"3Ô4�EØð !×,Ò,Ñ.Ô.�Eð ð 
/ð $ˆÔð	Ø!ŸJšJ tÑ,Ô,ˆMØ Ò"Ð"àØ×0Ò0°¸ÑFÔFˆKØ˜bÒ Ð ð ˜n˜}˜nÔ-°°kÀA±oÐ6GÐ6GÔ0HÑH��ð ˜n˜}˜nÔ-�Ø&*�Ô#Øð	ð ˆr   c                 ó  — t          ¦   «         }| j        j        | j        j        z  }t	          |¦  «        |k    rž|                      ¦   «         }|sn‡|                      |¦  «        }d                     |                     ¦   «         ¦  «        }|D ](}|dvr"dt          |g¦  «        z  }t          |¦  «        ‚Œ)||z   d|…         }t	          |¦  «        |k    °žt                               dd¦  «        }|                     |¦  «        S )z¥
        This is a separate method because in the plain PBM format, all data tokens are
        exactly one byte, so the inter-token whitespace is optional.
        r   )é0   é1   s   Invalid token for this mode: %sNs   01s   ÿ )Ú	bytearrayÚstaterK   rL   r-   rZ   rk   ÚjoinÚsplitÚbytesr.   Ú	maketransÚ	translate)r%   ÚdataÚtotal_bytesra   Útokensr0   r1   Úinverts           r   Ú_decode_bitonalzPpmPlainDecoder._decode_bitonalÂ   s  € õ
 ‰{Œ{ˆØ”jÔ&¨¬Ô)9Ñ9ˆå�$‰iŒi˜;Ò&Ð&Ø×$Ò$Ñ&Ô&ˆEØð àà×)Ò)¨%Ñ0Ô0ˆEà—X’X˜eŸkšk™mœmÑ,Ô,ˆFØð *ð *�Ø Ð(Ð(Ø<½uÀeÀW¹~¼~ÑM�CÝ$ S™/œ/Ð)ð )ð ˜6‘M < K <Ô0ˆDõ �$‰iŒi˜;Ò&Ð&õ —’ ¨Ñ4Ô4ˆØ�~Š~˜fÑ%Ô%Ð%r   c                 ó  — t          ¦   «         }d}| j        dk    rdnd}| j        dk    rdnd}t          j        | j        ¦  «        }| j        j        | j        j        z  |z  |z  }d}t          |¦  «        |k    �rˆ|                      ¦   «         }	|	s|rt          d¦  «        }	n�n^|  	                    |	¦  «        }	|r||	z   }	|	 
                    ¦   «         }
|	rb|	d	d …                              ¦   «         sF|
                     ¦   «         }t          |¦  «        |k    rd
|d |dz   …         z  }t          |¦  «        ‚|
D ]³}t          |¦  «        |k    rd
|d |dz   …         z  }t          |¦  «        ‚t          |¦  «        }||k    rd|› �}t          |¦  «        ‚t          ||z  |z  ¦  «        }|| j        dk    rt!          |¦  «        nt#          |¦  «        z  }t          |¦  «        |k    r nŒ´t          |¦  «        |k    �°ˆ|S )Nr+   r:   é   r   r;   r9   Fó    rg   s    Token too long found in data: %sz'Channel value too large for this mode: )ro   rC   r   Úgetmodebandsrp   rK   rL   r-   rZ   rk   rr   ÚisspaceÚpopr.   rB   ÚroundÚo32r   )r%   rH   rv   Úmax_lenÚout_byte_countÚout_maxÚbandsrw   Ú
half_tokenra   rx   r1   r0   Úvalues                 r   Ú_decode_blockszPpmPlainDecoder._decode_blocksÛ   s3  € Ý‰{Œ{ˆØˆØ"œi¨3Ò.Ð.˜˜°AˆØœ9¨Ò+Ð+�%�%°ˆÝÔ" 4¤9Ñ-Ô-ˆØ”jÔ&¨¬Ô)9Ñ9¸EÑAÀNÑRˆàˆ
Ý�$‰iŒi˜;Ò&Ñ&Ø×$Ò$Ñ&Ô&ˆEØð Øð Ý% d™OœO�E�Eñ à×)Ò)¨%Ñ0Ô0ˆEàð +Ø" UÑ*�à—[’[‘]”]ˆFàð *˜U 2 3 3œZ×/Ò/Ñ1Ô1ð *Ø#ŸZšZ™\œ\�
Ý�z‘?”? WÒ,Ð,à;¸jÈÈ7ÐUVÉ;ÈÔ>WÑWð õ % S™/œ/Ð)àð ð �Ý�u‘:”: Ò'Ð'Ø=ÀÀmÈÐRSÉÀmÔ@TÑT�CÝ$ S™/œ/Ð)Ý˜E™
œ
�Ø˜6’>�>ØKÀEÐKÐK�CÝ$ S™/œ/Ð)Ý˜e f™n¨wÑ6Ñ7Ô7�Ø d¤i°3Ò&6Ð&6�˜E™
œ
˜
½B¸u¹I¼IÑE�Ý�t‘9”9 Ò+Ð+Ø�Eð ,õE �$‰iŒi˜;Ò&Ñ&ðH ˆr   c                 ó
  — d| _         | j        dk    r|                      ¦   «         }d}n6| j        d         }|                      |¦  «        }| j        dk    rdn| j        }|                      t          |¦  «        |¦  «         dS )NFr   z1;8rg   r:   úI;32©rg   r   )rh   rC   rz   rN   r‰   Ú
set_as_rawrs   )r%   Úbufferrv   rM   rH   s        r   r/   zPpmPlainDecoder.decode
  sƒ   € Ø#ˆÔØŒ9˜ÒÐØ×'Ò'Ñ)Ô)ˆDØˆGˆGà”Y˜r”]ˆFØ×&Ò& vÑ.Ô.ˆDØ $¤	¨SÒ 0Ð 0�f�f°d´iˆGØ�Š�˜d™œ WÑ-Ô-Ð-Øˆur   N)r   )
rP   rQ   rR   Ú	_pulls_fdrZ   re   rk   rz   r‰   r/   r   r   r   rV   rV   •   sz   € € € € € Ø€Ið1ð 1ð 1ð5ð 5ð 5ð 5ð
 ð  ð  ðD&ð &ð &ð2-ð -ð -ð^
ð 
ð 
ð 
ð 
r   rV   c                   ó   — e Zd ZdZd„ ZdS )Ú
PpmDecoderTc                 óX  — t          ¦   «         }| j        d         }|dk     rdnd}| j        dk    rdnd}| j        dk    rdnd}t          j        | j        ¦  «        }t          |¦  «        | j        j        | j        j        z  |z  |z  k     ræ| j	         
                    ||z  ¦  «        }t          |¦  «        ||z  k     rn²t          |¦  «        D ]r}	|dk    r||	         nt          ||	|z  ¦  «        }
t          |t          |
|z  |z  ¦  «        ¦  «        }
|| j        dk    rt          |
¦  «        nt!          |
¦  «        z  }Œst          |¦  «        | j        j        | j        j        z  |z  |z  k     °æ| j        dk    rd	n| j        }|                      t%          |¦  «        |¦  «         d
S )Nrg   é   r   r8   r:   r|   r;   r9   r‹   rŒ   )ro   rN   rC   r   r~   r-   rp   rK   rL   rX   r#   r!   Úi16r_   r�   r‚   r   r�   rs   )r%   rŽ   rv   rH   Úin_byte_countr„   r…   r†   Úpixelsrd   rˆ   rM   s               r   r/   zPpmDecoder.decode  s¬  € Ý‰{Œ{ˆØ”˜2”ˆØ# cš\˜\˜˜¨qˆØ"œi¨3Ò.Ð.˜˜°AˆØœ9¨Ò+Ð+�%�%°ˆÝÔ" 4¤9Ñ-Ô-ˆÝ�$‰iŒi˜$œ*Ô*¨T¬ZÔ-=Ñ=ÀÑEÈÑVÒVÐVØ”W—\’\ -°%Ñ"7Ñ8Ô8ˆFÝ�6‰{Œ{˜]¨UÑ2Ò2Ð2àÝ˜5‘\”\ð Fð F�à!.°!Ò!3Ð!3�F˜1”I�I½¸VÀQÈÑEVÑ9WÔ9Wð õ ˜G¥U¨5°6©>¸GÑ+CÑ%DÔ%DÑEÔE�Ø d¤i°3Ò&6Ð&6�˜E™
œ
˜
½B¸u¹I¼IÑE��õ �$‰iŒi˜$œ*Ô*¨T¬ZÔ-=Ñ=ÀÑEÈÑVÒVÐVð !œI¨Ò,Ð,�&�&°$´)ˆØ�Š�˜d™œ WÑ-Ô-Ð-Øˆur   N)rP   rQ   rR   r�   r/   r   r   r   r‘   r‘     s(   € € € € € Ø€Iðð ð ð ð r   r‘   c           
      óð  — | j         dk    rd\  }}nK| j         dk    rd\  }}n:| j         dk    rd\  }}n)| j         dv rd\  }}nd	| j         › d
�}t          |¦  «        ‚|                     |d| j        z  z   ¦  «         |dk    r|                     d¦  «         n7|dk    r1|dk    r|                     d¦  «         n|                     d¦  «         t	          j        | |dd| j        z   d|ddffg¦  «         d S )Nr   )r7   r   r	   )r	   r   r:   )r<   r   )r
   r   )r
   r   zcannot write mode z as PPMs   
%d %d
r   s   255
r   s   65535
r4   )r   r   r   r   )rC   ÚOSErrorÚwriteÚsizer   Ú_save)Úimr"   ÚfilenamerM   Úheadr1   s         r   r›   r›   5  s"  € Ø	„w�#‚~€~Ø$‰ˆ��Ø	Œ�CŠˆØ"‰ˆ��Ø	Œ�CŠˆØ&‰ˆ��Ø	Œ�OÐ	#Ð	#Ø$‰ˆ��à3 2¤7Ð3Ð3Ð3ˆÝ�c‰lŒlÐØ‡H‚HˆT�L 2¤7Ñ*Ñ*Ñ+Ô+Ð+Øˆu‚}€}Ø
�Š�ÑÔÐÐØ	�ŠˆØ�cŠ>ˆ>Ø�HŠH�XÑÔÐÐà�HŠH�ZÑ Ô Ð Ý„O�B˜˜e V¨b¬gÑ%5°q¸7ÀAÀq¸/ÐJÐKÑLÔLÐLÐLÐLr   r=   r5   )z.pbmz.pgmz.ppmz.pnmzimage/x-portable-anymapN)Ú r   r   Ú_binaryr   r”   r   r   r‚   r$   r>   r   r   Ú	PyDecoderrV   r‘   r›   Úregister_openrS   Úregister_saveÚregister_decoderÚregister_extensionsÚregister_mimer   r   r   ú<module>r§      sæ  ðð$ Ð Ð Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !ð
 +€ð ØØØØØààØØð	ð 	€ð"<ð <ð <ðYQð YQð YQð YQð YQ�9Ô&ñ YQô YQð YQð@ð ð ð ð �iÔ)ñ ô ð ðDð ð ð ð �Ô$ñ ô ð ð<Mð Mð Mð< €Ô �LÔ'¨°wÑ ?Ô ?Ð ?Ø €Ô �LÔ'¨Ñ /Ô /Ð /à €Ô �u˜jÑ )Ô )Ð )Ø €Ô �{ OÑ 4Ô 4Ð 4à €Ô ˜,Ô-Ð/OÐ/OÐ/OÑ PÔ PÐ Pà €Ô �LÔ'Ð)BÑ CÔ CÐ CÐ CÐ Cr   