
    h4hu0                    B   d dl mZ d dlZd dlZd dlZd dlZd dlmZ ddlm	Z	m
Z
mZmZ  ej                  d      ZerddlmZ dZd	Zd!d
Z	 	 	 	 	 	 	 	 d"dZ	 	 	 	 	 	 	 	 d"dZ	 	 	 	 	 	 	 	 d"dZ	 	 	 	 	 	 	 	 d"dZ G d d      Z G d de
j                        Zd#dZd$dZ e	j6                  ej8                  ee        e	j:                  ej8                  d        e	j<                  ej8                  e        e	j>                  ej8                  d       e dk(  r e!ejD                        dk  r e#d        ejH                           e%ejD                  d   d      5 Z& ee&      Z'e'jP                  d   D ]*  Z)e)x\  Z*Z+Z,e'_)        e'j[                  de* de+ de, d       ,  e	jJ                  ejD                  d         5 Z.e.j[                  d       ddd       ej^                  d k(  r ej`                  d       ddd       yy# 1 sw Y   4xY w# 1 sw Y   yxY w)%    )annotationsN)IO   )Image	ImageFilePngImagePluginfeaturesjpg_2000)Jpeg2KImagePlugins   icns   c                T    t        j                  d| j                  t                    S )Nz>4sI)structunpackread
HEADERSIZE)fobjs    K/var/www/flask-api/venv/lib/python3.12/site-packages/PIL/IcnsImagePlugin.py
nextheaderr   %   s    ==:!677    c                    |\  }}| j                  |       | j                  d      }|dk7  rd}t        |      t        | |dz   |dz
  f|      S )N   s       z'Unknown signature, expecting 0x00000000)seekr   SyntaxErrorread_32)r   start_lengthsizestartlengthsigmsgs          r   read_32tr!   )   s[     #OUFIIe
))A,C
!!7#4%!)VaZ0$77r   c           
     B   |\  }}| j                  |       |d   |d   z  |d   |d   z  f}|d   |d   z  }||dz  k(  r0| j                  |      }t        j                  d||dddd      }d|iS t        j                  d|d      }t        d      D ]  }	g }
|}|dkD  r| j                  d      }|snx|d   }|dz  r8|d	z
  }| j                  d      }t        |      D ]  }|
j                  |        n%|dz   }|
j                  | j                  |             ||z  }|dk  rn|dkD  r|dk7  rd
t        |       d}t        |      t        j                  d|dj                  |
      dddd      }|j                  j                  |j                  |	       
 d|iS )zn
    Read a 32bit RGB icon resource.  Seems to be either uncompressed or
    an RLE packbits-like scheme.
    r      r      RGBrawN   }   zError reading channel [z left]Lr   )r   r   r   
frombuffernewrangeappendreprr   joinimputband)r   r   r   r   r   
pixel_sizesizesqindatar0   band_ixdata	bytesleftbytebyte_int	blocksizeir    bands                     r   r   r   6   s    #OUFIIeq'DG#T!WtAw%67J]Z]*F!6"eZq!L8 2;3 YYuj$/Qx 	,GDIa-yy|7d? (3I99Q<D"9- *D)* !)1IKK		) 45Y&	> a-  A~/Y/@G!#&&##CSXXd^UCQRTUVDEEMM$''7+/	,0 2;r   c           	         |d   }| j                  |       |d   |d   z  |d   |d   z  f}|d   |d   z  }t        j                  d|| j                  |      dddd      }d|iS )Nr   r#   r   r)   r&   A)r   r   r*   r   )r   r   r   r   r2   r3   r<   s          r   read_mkr?   c   s~     OEIIeq'DG#T!WtAw%67J]Z]*FCTYYv->sAqQD;r   c                   |\  }}| j                  |       | j                  d      }|j                  d      rI| j                  |       t        j                  |       }t        j                  |j                         d|iS |j                  d      s|dk(  rt        sd}t        |      | j                  |       | j                  |      }t        j                  |      }	t        j                  |	      }t        j                  |j                         |j                  dk7  r|j                  d      }d|iS d}t        |      )N   s   PNG

RGBA)s   OQs   

s      jP  

zQUnsupported icon subimage format (rebuild PIL with JPEG 2000 support to fix this)z Unsupported icon subimage format)r   r   
startswithr   PngImageFiler   _decompression_bomb_checkr   enable_jpeg2k
ValueErrorioBytesIOr   Jpeg2KImageFilemodeconvert)
r   r   r   r   r   r   r0   r    
jp2kstreamfs
             r   read_png_or_jpeg2000rO   o   s    #OUFIIe
))B-C ~~01		%((.''0|AB996  S/!		%YYv&
JJz"..q1''077fF#B|0or   c                      e Zd Zdefgdefgdefgdefgdefgdefdefdefgd	efgd
efgdefdefgdefdefdefgdefgdefdefdefgdZddZddZ	ddZ
ddZ	 d	 	 	 d dZy)!IcnsFile   ic10   ic09   ic14   ic08   ic13   ic07s   it32s   t8mks   icp6   ic12s   ih32s   h8mks   icp5s   il32s   l8mk   ic11s   icp4s   is32s   s8mk))   rZ   r#   )rZ   rZ   r   )   r[   r#   )r[   r[   r   )r'   r'   r#   )r'   r'   r   )@   r\   r   )    r]   r#   )0   r^   r   )r]   r]   r   )   r_   r#   )r_   r_   r   c                `   i | _         || _        t        |      \  }}t        |      sd}t	        |      t
        }||k  rot        |      \  }}|dk  rd}t	        |      |t
        z  }|t
        z  }||f| j                   |<   |j                  |t        j                         ||z  }||k  rnyy)z@
        fobj is a file-like object as an icns resource
        znot an icns filer   zinvalid block headerN)	dctr   r   _acceptr   r   r   rH   SEEK_CUR)selfr   r   filesizer    r;   r:   s          r   __init__zIcnsFile.__init__   s    
 	"4(Xs|$Cc""(l'-NCA~,!#&&OA#I	NDHHSMIIi-NA (lr   c                    g }| j                   j                         D ]0  \  }}|D ]&  \  }}|| j                  v s|j                  |        0 2 |S N)SIZESitemsra   r-   )rd   sizesr   fmtsfmtreaders         r   	itersizeszIcnsFile.itersizes   s[    ****, 	JD$# V$((?LL&	
 r   c                V    | j                         }|sd}t        |      t        |      S )NzNo 32bit icon resources found)ro   r   max)rd   rk   r    s      r   bestsizezIcnsFile.bestsize   s+     1Cc""5zr   c                    i }| j                   |   D ]F  \  }}| j                  j                  |      }|$|j                   || j                  ||             H |S )z
        Get an icon resource as {channel: array}.  Note that
        the arrays are bottom-up like windows bitmaps and will likely
        need to be flipped or transposed in some way.
        )ri   ra   getupdater   )rd   r   ra   codern   descs         r   dataforsizezIcnsFile.dataforsize   s]      JJt, 	:LD&88<<%D

6$))T489	: 
r   Nc                   || j                         }nt        |      dk(  r|d   |d   df}| j                  |      }|j                  d      }|r|S |d   j	                         }	 |j                  |d          |S # t        $ r Y |S w xY w)Nr#   r   r   rB   r%   r>   )rr   lenrx   rt   copyputalphaKeyError)rd   r   channelsr0   s       r   getimagezIcnsFile.getimage   s     <==?DY!^GT!Wa(D##D)\\&!Ie_!!#	KK& 	  			s   'A= =	B
	B
)r   	IO[bytes]returnNone)r   zlist[tuple[int, int, int]])r   tuple[int, int, int])r   r   r   dict[str, Image.Image]rh   )r   z-tuple[int, int] | tuple[int, int, int] | Noner   Image.Image)__name__
__module____qualname__rO   r!   r?   r   ri   rf   ro   rr   rx   r    r   r   rQ   rQ      s	    "678 "678 "678 "678 "678*+hg

  456 456(7G*<=*+gg

  456*+gg
)E6. EIA	r   rQ   c                  b    e Zd ZdZdZdZd	dZed
d       Zej                  dd       ZdddZ
y)IcnsImageFilea!  
    PIL image support for Mac OS .icns files.
    Chooses the best resolution, but will possibly load
    a different size image if you mutate the size attribute
    before calling 'load'.

    The info dictionary has a key 'sizes' that is a list
    of sizes that the icns file has.
    ICNSzMac OS icns resourcec                X   t        | j                        | _        d| _        | j                  j	                         | j
                  d<   | j                  j                         | _        | j                  d   | j                  d   z  | j                  d   | j                  d   z  f| _        y )NrB   rk   r   r#   r   )	rQ   fpicns_modero   inforr   	best_sizer   rd   s    r   _openzIcnsImageFile._open  s    TWW%	
!YY002		'++-NN1q 11NN1q 11
	r   c                    | j                   S rh   )_sizer   s    r   r   zIcnsImageFile.size  s    zzr   c                    | j                   d   D ]:  }|d   |d   z  |d   |d   z  f}|d   |d   z  }|d   |d   z  |k(  s3|| _         y  d}t        |      )Nrk   r   r#   r   z2This is not one of the allowed sizes of this image)r   r   rG   )rd   valuer   simple_sizescaler    s         r   r   zIcnsImageFile.size  s     IIg& 	Dq'DG+T!WtAw->>KNeAh.E1~a(E1"
	 Cor   Nc                   |+| j                   d d \  }}||z  ||z  f| _         |||f| _        t        j                  j                  |       }| j                  %| j
                  j                   | j                   k(  r|S | j                          | j                  j                  | j                        }|j                         }|j
                  | _        |j                  | _
        |j                   | _         |S )Nr#   )r   r   r   load_imr0   load_preparer   r   rK   r   )rd   r   widthheightpxr0   s         r   r   zIcnsImageFile.load&  s     IIbqMME6v~5DI"FE1DN[[d#88DGGLLDII$=IYY/ WWY%%WW
GG		r   )r   r   )r   tuple[int, int])r   r   r   r   rh   )r   z
int | Noner   zImage.core.PixelAccess | None)r   r   r   __doc__formatformat_descriptionr   propertyr   setterr   r   r   r   r   r      sJ     F/
   
[[
 
r   r   c           	        t        |d      r|j                          ddddddddd}| j                  j                  d	g       D  ci c]  } | j                  |  }} i }t        |j                               D ]W  }||v r||   n j                  ||f      }t        j                         }|j                  |d
       |j                         ||<   Y g }	|j                         D ].  \  }
}||   }|	j                  |
t        t        |      z   |f       0 |j!                  t"               t        }|t        dt        |	      z  z   z  }|t%        d |	D              z  }|j!                  t'        j(                  d|             |j!                  d       |j!                  t'        j(                  dt        t        |	      t        z  z                |	D ]>  }|j!                  |d          |j!                  t'        j(                  d|d                @ |	D ]R  }|j!                  |d          |j!                  t'        j(                  d|d                |j!                  |d          T t        |d      r|j                          yyc c} w )za
    Saves the image as a series of PNG files,
    that are then combined into a .icns file.
    flushr'   r[   rZ   i   r]   r\   )rW   rU   rS   rR   rY   rX   rV   rT   append_imagespngr   c              3  &   K   | ]	  }|d      yw)r   Nr   ).0entrys     r   	<genexpr>z_save.<locals>.<genexpr>f  s     5EuQx5s   z>is   TOC r   r   r#   N)hasattrr   encoderinfort   r   setvaluesresizerH   rI   savegetvaluerj   r-   r   rz   writeMAGICsumr   pack)r0   r   filenamerk   provided_imagessize_streamsr   imagetempentriestypestreamfile_lengthr   s                 r   _saver   >  sR   
 r7

 	E /1nn.@.@RT.UVrxx|VOVLELLN# 	- & D!D$<( 	 zz|

4!]]_T	- Gkkm A
dd#j3v;6?@A
 HHUOK:CL 000K35W555KHHV[[{+, HHWHHV[[zCL:,EEFG .
q
T58,-.
  
q
T58,-
q
 r7

 M Ws   Jc                ,    | j                  t              S rh   )rC   r   )prefixs    r   rb   rb   z  s    U##r   z.icnsz
image/icns__main__r#   z)Syntax: python3 IcnsImagePlugin.py [file]rbrk   zout--z.pngzout.pngwindows)r   r   r   ztuple[bytes, int])r   r   r   r   r   r   r   r   )r0   r   r   r   r   zstr | bytesr   r   )r   bytesr   bool)1
__future__r   rH   osr   systypingr    r   r   r   r	   check_codecrF   r   r   r   r   r!   r   r?   rO   rQ   r   r   rb   register_openr   register_extensionregister_saveregister_mimer   rz   argvprintexitopenr   imfr   r   r   r   r   r   r0   platform	startfiler   r   r   <module>r      su  & # 	 	  
  8 8$$$Z0#
8
8

8#2
8:N
8
8*
*#2*:N**Z	
	#2	:N		"
"#2":N""Jb bR>I'' >B9x$   M((- A   --w 7   M((% 0   M((, 7z
388}q9:
	chhqk4	  $BBHHW% 	:D.22 E6538HHtE7!F81UG489	: UZZ$ 	GGI	<<9$BLL#$ $ 	 	$ $s%    A$HH	)H	H	HH