
    Kwg                     
   d Z dZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZmZ d	d
lmZmZmZmZ ddlmZ  G d d      Z e       Z	 ddlZ ej>                         dk(  Z d Z! G d d      Z" e#e"jH                        fdZ%["d Z&e'e(ffdZ)d Z* e#d      Z+e,e-fZ.d Z/ddZ0ddZ1ddZ2ddZ3d Z4d Z5d Z6d Z7d  Z8d! Z9d" Z:dd#Z;d$ Z<d% Z=d& Z>d' Z?ddl@Z@ eAe@d(      ZB[@d) ZCdd*ZDd+ ZEdd,ZFdd-ZG G d. d/eH      ZIej                  d0k(  rddlKZKddlLZLd1d2d2d3d4d4d5d5d6d7d8d8d9d:d;ZMdd<ZNndd=ZNddlOZOej                  j                  eOj                        ZSej                  j                  eS      xr eSxs ej                  j                  eS      ZV[O	 eR ddlXZXddlYZY	 eZZ[e[ Z\ eFe[>      s e]d?e[z        ej                  j                  ej                  j                  e[j                              Zaeaej                  z   Zcej                  j                  ea      Zdedej                  z   Ze efec      Zg efee      Zheceeeaedej                  j                  ej                  j                  ej                  ej                   efej                        f	d@ZjdA ZkeXj                  eYj                  eVej                  j                  fdBZm[X[Ye\xr: ej                  j                  ej                  j                  eR      d   dEz         ZpdF ZqdG ZrdH ZsdI Zt eAedJdK       ZuddLZveduZw G dM dN      ZxdO ZyddPZzdQ Z{ddRZ|ddSl}m~Z~mZ ddTlmZ dU ZddVZddWZddXZej                  j                  fdYZej                  j                  ej                  j                  fdZZej                  j                  ej                  j                  ej                  fd[Zej                  j                  ej                  j                  ej                  j                  ej                  fd\Zdd]lmZ d^ Zd_ Zd` Z G da db      Z G dc dde      Zde Z G df dg      Zdh Zdi ZddjZ G dk dl      Z G dm dn      Zdo Zdp Zdq Zdr ZddlZds Zdt Zdu ZddvZddwZdx Z G dy dze,      Z G d{ d|e,      Zd} Z G d~ dejT                        Z G d d      ZddZd Zd Zd Zy#  dZ Y xY w#  ej                  d   ZRY txY w#  ej                  j                  eR      Z\dZ[dC ZkeXj                  fdDZmY vxY w)z3.5.34z6Gazillions of miscellaneous internal utility functions    N)literal_eval)decodebytesencodebytes)BytesIO)md5)get_rl_tempfileget_rl_tempdir   )rl_safe_execrl_safe_evalsafer_globalsrl_extended_literal_eval)Imagec                   0    e Zd Zed        Zed        ZeZy)	__UNSET__c                       y)NF r       J/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/lib/utils.py__bool__z__UNSET__.__bool__   s    r   c                       y)Nr   r   r   r   r   __str__z__UNSET__.__str__   s    r   N)__name__
__module____qualname__staticmethodr   r   __repr__r   r   r   r   r      s+      Hr   r   PyPyFc                 8    t        |       t        t              k(  S N)type
isFunctionvs    r   r"   r"   !   s    7d:&&&r   c                       e Zd Zd Zy)cc                      y r    r   selfs    r   mzc.m%       r   N)r   r   r   r*   r   r   r   r&   r&   $   s    r   r&   c                     t        |       |k(  S r    )r!   )r$   mts     r   isMethodr.   '   s    7b=r   c                 8    t        |       t        t              k(  S r    )r!   sysr#   s    r   isModuler1   +   s    7d3ir   c                     t        | |      S r    )
isinstance)r$   _sts     r   isSeqr5   .   s    ar   c                 "    t        | t              S r    r3   strr#   s    r   isNativer9   1       ar   c                     t        t        |       r|       j                         S | j                  d            j                         S )Nutf8)r   isBytesencode	hexdigestss    r   	_digesterrB   9   s6    GAJq5??AAAHHV$45??AAr   c           	          t        | t              r| S 	 | j                  |      S #  t        dt	        |       dt	        |      d       Y y xY w)NzasBytes(,enc=	) error: )r3   bytesr>   annotateExceptionasciir$   encs     r   asBytesrK   <   sA    !E1HPxx}P%(5:NO	   % &Ac           	          t        | t              r| S 	 | j                  |      S #  t        dt	        |       dt	        |      d       Y y xY w)Nz
asUnicode(rD   rE   )r3   r8   decoderG   rH   rI   s     r   	asUnicoderO   C   sA    !C(Rxx}RE!HU3ZPQrL   c           	          t        | t              r| S 	 t        | t              r| j                  |      S t        |       S #  t	        dt        |       dt        |      d       Y y xY w)NzasUnicodeEx(rD   rE   )r3   r8   rF   rN   rG   rH   rI   s     r   asUnicodeExrQ   J   sS    !C(T *1U 3qxx}?Q?TeAhuSzRSs    A  
A   &A(c                     t        | |      S )N)rJ   )rO   rI   s     r   asNativerS   Q   s    Q3r   c                     t        | g      S r    )rF   )is    r   int2ByterV   T   s    !:r   c                 .    t        | t        t        f      S r    )r3   r8   rF   r#   s    r   isStrrX   W   s    a#e%%r   c                 "    t        | t              S r    )r3   rF   r#   s    r   r=   r=   Z   s    ar   c                 "    t        | t              S r    r7   r#   s    r   	isUnicoder[   ]   r:   r   c                 "    t        | t              S r    r3   r!   r#   s    r   isClassr^   `   s    ar   c                 8   t        | t        t        t        t        t
        t        t        t        t        t        t        t        t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  t        j,                  t        j.                  t        j0                  t        j2                  t        j4                  t        j6                  f       S r    )r3   floatintr!   tuplelistdictr8   rF   complexboolslice_rl_NoneTypetypesFunctionType
LambdaTypeCodeTypeMappingProxyTypeSimpleNamespaceGeneratorType
MethodTypeBuiltinFunctionTypeBuiltinMethodType
ModuleTypeTracebackType	FrameTypeGetSetDescriptorTypeMemberDescriptorType)xs    r   isNonPrimitiveInstancery   c   s    !U3tE$tCgdSXYe5++ENNu44E,,U-F-F 0 01D1D2253M3MO P P Pr   c                 $    t        | t               S r    r]   r#   s    r   instantiatedr{   k   s    !D!!!r   c                     t        | t              r| j                  |      S t        | t              r| S t        |       j                  |      S r    )r3   r8   r>   rF   )rx   rJ   s     r   bytestrr}   n   s<    !Cxx}	Ae	1v}}S!!r   c                 x    t        t        j                  |             j                         j	                  d      S Nlatin1)base64_encodebytespickledumpsstriprN   )argss    r   encode_labelr   v   s*    fll401779@@JJr   c                 \    t        j                  t        | j                  d                  S r   )r   loadsbase64_decodebytesr>   )labels    r   decode_labelr   y   s     <<*5<<+ABCCr   c                 H    t        | t              s| j                  d      S | S zconverts first 256 unicodes 1-1r   )r3   r8   rN   r@   s    r   
rawUnicoder   |   s    %/#%6188H=A=r   c                 H    t        | t              r| j                  d      S | S r   )r3   r8   r>   r@   s    r   rawBytesr      s    !+Ac!2188H99r   execc                 ~    t        | t              r| S t        t        | t              r| n| j	                  d            S r   )r3   ra   ordr8   rN   r@   s    r   char2intr      s0    Ac"A[Ac1BAQYHZ([[r   c                 D    |j                   |ur|j                  |      |r    )__traceback__with_traceback)tr$   bs      r   
rl_reraiser      s$    aq!!
Gr   c                  V    dd l }| j                         D ]  \  }}t        |||        y Nr   )builtinsitemssetattr)kwdr   kr$   s       r   rl_add_builtinsr      s*    yy{ !1r   c                     	 | s"t        j                  d      j                  d   } ddlm} t        | |      rt        | j                        r| S d S #  Y y xY w)Nr
   
__loader__r   )zipimporter)r0   	_getframe	f_globals	zipimportr   r3   len_files)ldrr   s     r   zipImportedr      sN    --",,\:C) [1c#**osO4Os   AA A Ac                    ddl m}m}m} ddlm} |j                         }g }|j                  }| D ]T  } ||      s ||      D ]>  }	 |||	      }	 ||	      s|r |	j                         j                  |      s7 ||	       @ V |S )Nr   )isfileisdirjoin)listdir)	os.pathr   r   r   osr   lowerappendendswith)
dirListextr   r   	path_joinr   RADfns
             r   
_findFilesr      s    88
))+C
A	A KQx!* 	KB1RBbz3"((**=*=c*BQrU	KK
 Hr   c                   D    e Zd Zd Zd Zd Zd Zd ZddZd Z	d	 Z
d
 Zy)CIDictc                 V    |D ]  }| j                  |        | j                  |       y r    )update)r)   r   kwdsas       r   __init__zCIDict.__init__   s#    %At{{1~%Dr   c                 >    |j                         D ]
  \  }}|| |<    y r    )r   )r)   r   r   r$   s       r   r   zCIDict.update   s    779)CAad1g)r   c                 b    	 |j                         }t        j                  | ||       y #  Y xY wr    )r   rd   __setitem__r)   r   r$   s      r   r   zCIDict.__setitem__   s0    		A 	a"	s   * .c                 ^    	 |j                         }t        j                  | |      S #  Y xY wr    )r   rd   __getitem__r)   r   s     r   r   zCIDict.__getitem__   1    		A Q''	   ( ,c                 ^    	 |j                         }t        j                  | |      S #  Y xY wr    )r   rd   __delitem__r   s     r   r   zCIDict.__delitem__   r   r   Nc                 0    	 | |   S # t         $ r |cY S w xY wr    )KeyError)r)   r   dvs      r   getz
CIDict.get   s$    	7N 	I	s    c                     	 | |    y#  Y yxY w)NTFr   r   s     r   __contains__zCIDict.__contains__   s    	G	s    c                 `    	 |j                         }t        j                  | |f|z    S #  Y xY wr    )r   rd   popr)   r   r   s      r   r   z
CIDict.pop   s5    		A xx4(1*&&	   ) -c                 `    	 |j                         }t        j                  | |f|z    S #  Y xY wr    )r   rd   
setdefaultr   s      r   r   zCIDict.setdefault   s5    		A $q!--	r   r    )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s/    *#(('.r   r   mac)oglezBMP )r   EPSF)r   GIFf)r   JPEG)ttxtPICT)r   PNGf)r   z.PPM)r   TIFF)CAROzPDF )MSIETEXT)BMPEPSr   GIFJPGr   PCTr   PNGPPMTIFr   PDFHTMLc                     	 |||	 t         |j                            \  }}t        j                  |       j	                  ||       t        j                  |        y #  Y y xY w#  Y y xY wr    )_KNOWN_MAC_EXTuppermacfsFSSpecSetCreatorType
macostoolstouched)filenamecreatorcodefiletyper   s       r   markfilenamer      sl    		"h&63?,:399;,G)K LL"11+hGx(	s'   A% A :A% A" A% "A% %A)c                      y r    r   )r   r   r   s      r   r   r      s    r   )r   z#can't handle compact distro type %rc
                     || j                  d|            }  ||       }
|
||fv ry|
j                  |      rd| t        d fS |
j                  |      rd| t        d fS  | |             }t	        |      }|
j                  |      r-| |d j                  |      r
d| ||	z   d fS |t	        |       k(  ryt
        j                  j                  |        | fS )z3if the name starts with a known prefix strip it off/)r
    r
   N)replace
startswith_archivepfxlen_archivedirpfxlenr   r   pathisabs)r   _archivepfx_archivedirpfx_archive_archivediros_path_normpathos_path_normcase	os_getcwdos_sep
os_sep_lennfncwdns                r   __startswith_rlr    s     bjjV45r";x((>>+&qNO1D/D(D>>.)!B7H7I4J2J+Jy{+H>>#!"v  (Bq|}4E1E*E#b'z$77==$$R''r   c                     t        |       d   S )Nr
   )r  r   s    r   _startswith_rlr  3  s    r"1%%r   c                     t        |       \  }} ||      }|s|g k(  r\|t        t        t        |fdt        t	        ||fdt        t
        j                  j                                                       z  }|S )Nc                      |t         |       S r    )r	  )rx   r   pjoins      r   <lambda>zrl_glob.<locals>.<lambda>:  s    eKPQ>R r   c                      || |      S r    r   )rx   pfnfnmatchs      r   r  zrl_glob.<locals>.<lambda>:  s       BI  JK  LO  BP r   )r  rc   mapr	  filter__rl_loader__r   keys)patternglobr  _RL_DIRr  r&   r  rs           r   rl_globr(  6  s     )3I2c[uRSWX^lox  `P  QU  Vc  Vj  Vj  Vo  Vo  Vq  Qr  Ys  Tt  u  v  vAr   c                     | S r    r   r  s    r   r  r  ?  s    	r   c                      ||       S r    r   )r$  r%  s     r   r(  r(  A  s    G}r   .pyc                      t         S )z*return truth if a file system distribution_isFSDr   r   r   isFileSystemDistror/  F  s    Mr   c                      t          S )z.return truth if not a file system distributionr-  r   r   r   isCompactDistror1  J  s
    :r   c                      t         S )z1return truth if a source file system distribution)_isFSSDr   r   r   isSourceDistror4  N  s    Nr   c                     t         j                  j                  t         j                  j                  t         j                  j	                  |                   S r    )r   r  normcaseabspathnormpath)ps    r   normalize_pathr:  R  s3    77BGGOOBGG,<,<Q,?@AAr   invalidate_cachesc                       y r    r   r   r   r   r  r  U  r+   r   c                 T   t         j                  D cg c]  }t        |       }}|rEt        |t        t
        f      r|n|fD ]'  }|st        |      }||vs|j                  d|       ) |r?ddt        d      fD ]-  }||v s|rt        d|z         |j                  |       ||v r&/ n*t        j                         }||vr|j                  d|       t         j                  }	 |t         _        t                |rt                t        d       t        dt        |       z         t        dt        t        j                               z         t        dt        t         j                        z         t        d	t        d
| z        dt        t        j                  j                  d
| z                     t        dt        |      z         t        d       t        j                  |       |t         _        t                |rt        dt!        |      z         S S c c}w # t"        $ r7 t%        d| dt         j                  dt        j                                Y n[ t%        dt'        t        j(                         d         d| dt         j                  dt        j                                Y nxY w|t         _        t                |rt        dt!        |      z         yy# |t         _        t                |rt        dt!        |      z         w w xY w)zEDynamically imports possible packagized module, or raises ImportErrorr   r  .zremoved "%s" from pathz++++++++++++++++++++z+++++ modulename=%sz+++++ cwd=%sz+++++ sys.path=%sz+++++ os.paths.isfile(z./%s.pyz)=z+++++ opath=%sz--------------------z===== restore sys.path=%szCould not import z
using sys.path z in cwd=z
Exception r
   z while importing N)r0   r  r:  r3   rc   rb   insertprintremover   getcwd_importlib_invalidate_cachesrH   r   	importlibimport_modulereprImportErrorrG   r8   exc_info)
modulenamebaseDirnoCWDdebugr9  r  opaths          r   recursiveImportrN  W  s~   '*xx0!N10D0&wU|<7* 	3A"1%D=$++a"2	3 S,- 	At)% 81 <=A t)	
 IIKD=KK! HHE=$&G&M'%
*;;<.5#556%chh78E)J:N4OQVWYW^W^WeWefopzfzW{Q|}~"U5\12&M&&z2 $&-U;< S 1>  388BIIK1 	JCLLN1%&
388BIIKI 	J $&-U;<  $&-U;< s+   H'*DH, ,=K)K6 +AKK6 61L'c                       e Zd ZdZd Zy)ArgvDictValuezGA type to allow clients of getArgvDict to specify a conversion functionc                      || _         || _        y r    )valuefunc)r)   rR  rS  s      r   r   zArgvDictValue.__init__  s    
	r   N)r   r   r   __doc__r   r   r   r   rP  rP    s
    Qr   rP  c                  z   d }t         j                  dd }i }| j                         D ]  \  }}t        |t              r|j
                  |j                  }}nd}d}|dz   }|D ]C  }	|	j                  |      s|	t        |      d }
|j                  |	        |||
|      ||<   d} n |r ||||      ||<    |S )z Builds a dictionary from its keyword arguments with overrides from sys.argv.
        Attempts to be smart about conversions, but the value can be an instance
        of ArgDictValue to allow specifying a conversion function.
    c                 |   |r
 ||      } | S t        |       r|} | S t        | t              rt        |      } | S t        | t              rt        |      } | S t        | t              rt	        t        |      i       } | S t        | t              rt        t        |      i       } | S t        d|dt        |             )NzCan't convert string z to )	rX   r3   r`   ra   rc   r   rb   	TypeErrorr!   )r$   avrS  s      r   handleValuez getArgvDict.<locals>.handleValue  s    RA  Qx  Ae$"I  Ac"G  Ad#b)"-
 	 Ae$,r*2.   2d1g NOOr   r
   Nr   =)
r0   argvr   r3   rP  rR  rS  r  r   rA  )kwrY  r   r   r   r$   rS  handledker   rX  s              r   getArgvDictr_    s    
$ 	A
A
 51a&ggqvvtADsU 	A||Bs2wx["1R-!	 {1Qt4!5" Hr   c                     	 ddl m} | At        j                  j	                  t        j                  j                  t              d      }  ||       S # t        $ r}t        |      dk7  r Y d }~y d }~ww xY w)Nr   )Hyphenzhyphen.mashedzNo module named pyHnj)	reportlab.lib.pyHnjra  r   r  r   dirname__file__rG  r8   )hDictra  errMsgs      r   getHyphenaterrg    s[    .=RWW__X-F W%e} v;//s   AA 	A5A00A5c                     	 | j                   j                  }|j                  d      }|dk\  r||dz   d S |S # t        $ r t	        |       cY S w xY w)zReturn a shortened class namer>  r   r
   N)	__class__r   rfindAttributeErrorr8   )r)   namerU   s      r   
_classNamerm    sW    ~~&&
**S/a4QqST
" 4ys   38 8 AAc                 *   d|vrd|z   }	 t        | |      S # t        $ rr t        st         t	        |       } t        j                  |       }d|vr3t        j                  dk7  r |j                  t        j                  d      }t        |      cY S w xY w)Nr'  r   
)
openIOErrorr.  r"  r  get_datar   linesepr  r   )rl  moderA   s      r   open_for_read_by_nameru    s    
$s4x	D ]*E d#""4(d?rzz4/QYYrzz$5Oqzs    A8BB)unquoteurlparse)urlopenc                 4    t        |       j                         S r    )rx  read)rl  s    r   	rlUrlReadr{    s    4=r   c                     t         fdddlmm rIdd l}dd lfd}|j                  dj                  ddj                  t        |            df            dfd		}|t               d
<    || |      S )Nc                 6   	 | j                  dd      \  }}|sd}|j                  d      }|dk\  rd||d	 vr||dz   d	 }|d	| }nd
}|dk(  rt	        |j                  d            }|S  ||      j                  d      }|S # t        $ r t        dd      w xY w)zUse "data" URL.,r
   z
data errorzbad data URLztext/plain;charset=US-ASCII;r   rZ  Nr  base64rH   zlatin-1)split
ValueErrorrq  rj  r   r>   )urlrv  typdatasemiencodings         r   
datareaderz!open_for_read.<locals>.datareader  s    	8		#q)IC /Cyy~19CJ.467|Het*CHx%dkk'&:;D  4=''	2D  	8,77	8s   B Br   )trustedHoststrustedSchemesc                 ^     j                   |       } | j                  d      r| dd S | d d S )Nz(?s:   i)	translater  )rA   r  s    r   xrezopen_for_read.<locals>.xre  s7    !!!!$All621Qr7>#2>r   r  z^(?:|z)\Zc                 H   t        | d      r| S 	 t        | |      S #  	 =t        |       }|d   r-|d   dv sj                  |d         r|d   v st	        d      t         | dd j                         dk(  rnt        |             cY S #  t        d	| z        xY wxY w)
z)attempt to open a file or URL for readingrz  Nr   )r  filer
   zAttempted untrusted host access   zdata:zCannot open resource "%s")	hasattrru  rw  matchr  r   r   r{  rq  )rl  rt  purlr  r  r  s      r   open_for_readz$open_for_read.<locals>.open_for_read  s    4
	B(d33	BB+#D>DAwaO)C|GYGYZ^_`ZaGbimnoip  uC  jC()JKK Vd2Ahnn.>.G
YX\]^^B9D@AAs!    B!A+BB!BB!r  r   )
rv  reportlab.rl_configr  r  rer  compiler   r   globals)	rl  rt  r  r  r  r  r  r  r  s	        @@@@r   r  r    sw    
 !( 6 A	? zz"''6 #S)> ? &+( #) *B "/GIod##r   c                     t        | |      }| |ur(t        |d      r|5  |j                         cd d d        S |j                         S # 1 sw Y   y xY w)N__exit__)r  r  rz  )rl  rt  fs      r   open_and_readr    sQ    d4 A1}:. 	668	 	 vvx	 	s   A		Ac                 8    t        | |      j                  d      S Nro  )r  r  )rl  rt  s     r   open_and_readlinesr     s    d#))$//r   c                     t        | d      ry ||       ryt        st        yt        |       } | t	        t        j
                  j                               v S )Nrz  TF)r  r.  r"  r  rc   r   r#  )r   os_path_isfiles     r   	rl_isfiler  #  sK    r&$b$&u		Bm**//1222r   c                 F    ||       ryt         st        yt         ||             } | j                  t        j
                        s| t        j
                  z  } t        t        t        | fdt        t        j                  j                                                 dkD  S )NTFc                 $    | j                  |      S r    )r  )rx   pns     r   r  zrl_isdir.<locals>.<lambda>/  s    1<<+; r   r   )r.  r"  r  r   r   sepr   rc   r!  r   r#  )r  os_path_isdirr  s      r   rl_isdirr  *  sv    R&u	(,	-B;;rvvbfftFr;DAUAUAZAZA\<]^_`abbbr   c                 ^    ||       st         st         ||       S t         ||             } | j                  t        j
                        s| t        j
                  z  } t        j                  j                         D cg c]"  }|j                  |       s|t        |       d  $ c}S c c}w r    )
r.  r"  r  r   r   r  r   r#  r  r   )r  r  r  
os_listdirrx   s        r   
rl_listdirr  1  s~    RFm&;JrN=R	(,	-B;;rvvbff!.!5!5!:!:!<QAR@PAc"ghKQQQs    B*B*c                 0    ||       st         st         ||       S t         ||             }	 t        j                  |   }|d   }|d   } ||dz	  dz  dz   |dz	  dz  |dz  |dz	  dz  |dz	  d	z  |dz  d
z  dddf	      S # t        $ r  ||       cY S w xY w)Nr     	      i           ?   r
   r   )r.  r"  r  r   r   )	r  r  r  os_path_getmtimetime_mktimer9  erA   ds	            r   rl_getmtimer  7  s    bV}'<EUVXEY>Y'+,A$  # 	
!A	!A!Q$d*AqD#:afaeT\1a4QU+WXY]W]`aVabcdefghii	  $##$s   B BB)utilc                    dD ]v  }t         j                  j                  || |z         }t         j                  j                  |      sFt	        j
                  | |      }|j                  j                         c S  t        d      )N)r+  z.pywz.pyoz.pycz.pydzno suitable file found)	r   r  r   r   importlib_utilspec_from_file_locationloaderload_modulerG  )rl  dirr   r  specs        r   __rl_get_module__r  C  sl    2 -ww||CS)77>>$!99$tDD;;**,,	-
 .
//r   c                 p   | t         j                  v r%t         j                  |    }t         j                  | = nd }	 	 t        | |      |r|t         j                  | <   S S #  t               rdd l}t        |      }|dk(  xs | xr t        xsB t        j                  j                  t        |j                  dt        j                              }|j                  |      }|j                  |       cY |r|t         j                  | <   S S t        | d|d      xY w# |r|t         j                  | <   w w xY w)Nr   r>  r  [])r0   modulesr  r1  r   r  r  r   r  r   r  r  r   r  rG  )rl  r  omr   zis        r   rl_get_moduler  K  s   s{{[[KK&
	5$T#. 2s{{4 2	5  $S)Cx*s78jBGGLLRUR]R]^abdbhbhRi<j**3/~~d++ 2s{{4 2 $s3442s{{4 2s$   A BD1D 	DD D5c                 V    	 t        | t        j                        S # t        $ r Y yw xY wr   )r3   r   rk  )ims    r   _isPILImager  `  s*    "U[[)) s    	((c                   r    e Zd ZdZi ZdZddZd Zd Ze	d        Z
e	dd       Zd Zd	 Zd
 Zd Zd Zd Zy)ImageReaderz%Wraps up PIL to get data from bitmapsNc                    t        |t              r|j                  | _        y || _        || _        d | _        d | _        d | _        d | _        d | _	        t        |      r6|| _        t        |dd       | _        	 | j
                  j                  | _        y 	 ddlm} |dk7  rt#        d      t%        |d      }t        |t&              s,|t'        |j)                               }}|j+                          ~|| _        | j-                  | j                        | _        t        |t.              r|n
t1        |      | j
                  _        | j3                  | j
                         t        | j
                  dd       dk(  r| j4                  | _        y y # t        $ r dt        |       z  | _        Y y w xY w#  t9        d	|d
| j;                                Y y xY w)NfpzPILIMAGE_%dr   )imageReaderFlagszYimageReaderFlags values other than 0 are no longer supported; all images are interned nowr   formatr   z

fileName=z
 identity=)r3   r  __dict___identfileName_image_width_height_transparent_datar  getattrr  rk  idr  r  r  r  r   rz  close_read_imager8   rF  check_pil_image_size_jpeg_fhjpeg_fhrG   identity)r)   r  identr  r  tfps         r   r   zImageReader.__init__j  s   h{+$--DM ! 
x "DKhtD1DG9 $ 4 4Z@#q($  &A  B  B"8C0!"g. '"'')"4CIIK"..tww73=hs3KxQUV^Q_$))$++64;;x5v=#'==DL >! " 9 -4 89$Z!x"XYs   9F C7F1 F.-F.1!Gc                 
   | j                   }t        |      st        t        | dd      dd      }| j                  }d| j                  j
                  dt        t        |             |xr d|z  xs d|xr d|z  xs dd	S )
z9try to return information that will identify the instancer  Nrl  r  @z	 ident=%rr  z filename=%rr  )r  rX   r  r  ri  r   hexr  )r)   r   r  s      r   r  zImageReader.identity  s    ]]Ryd40=B $ 7 7BtHeFeQ\_dQdFkikFkln  mI  uC  FH  uH  mO  MO  mO  P  	Pr   c                 ,    t        j                  |      S r    )r   rp  r)   r  s     r   r  zImageReader._read_image  s    zz"~r   c                     | j                   }|y |j                  \  }}|j                  }t        d|dk(  rdndt	        |      z  |z  |z  dz	        }||kD  rt        d|d|d|d|d	|d
      y )Nr
   1      zPIL  z x z image would use z > z bytes)_max_image_sizesizert  maxr   MemoryError)clsr  max_image_sizewhr*   r  s          r   r  z ImageReader.check_pil_image_size  s    ,,!6ww1GG1AsFq#a&!3A59:./!DI J J r   c                 H    || _         |ddlm}  || j                         y y )Nr   )register_reset)r  r  r  set_max_image_size)r  r  r  s      r   r  zImageReader.set_max_image_size  s&    ,%:3112 &r   c                 @    | j                   }|j                  d       |S r   )r  seekr  s     r   r  zImageReader._jpeg_fh  s    WW

	r   c                      y r    r   r(   s    r   r  zImageReader.jpeg_fh  s    r   c                     | j                   | j                  #| j                  j                  \  | _         | _        | j                   | j                  fS r    )r  r  r  r  r(   s    r   getSizezImageReader.getSize  s@    KK4<<#7(,(8(8%DKT\\**r   c                 0   	 | j                   Zd| _        | j                  }|j                  x}| _        |dv rvt	        t
        dd      j                  d      r|j                          t        |j                         |dk(  rdnd         | _        |dd	 }|j                  |      }|| _        n|d
vr|j                  dk(  ra|j                  dk(  rRd|j                  v rD|j                  d      }t        |j                         d         | _        |j                  d      }n|j                  d      }d| _         t        |d      r|j                  n|j                         | _         | j                   S #  t!        d| j#                         z         Y yxY w)z'Return byte array of RGB data as stringN)LARGBAVERSIONr  z1.1.7r  r  r
   )LRGBCMYKr   Ptransparencyr  tobytesz
identity=%s)r  _dataAr  rt  r  r   r  loadr  r  convertr  infor  r  tostringrG   r  )r)   r  rt  nms       r   
getRGBDatazImageReader.getRGBData  sL   	?zz!"[[#%77*ty=(uYr2==gF	"-bhhjdFlPQ.R"SDKcrBBB "DI!33yy%'BGGSL^rww=VZZ/&1"((*Q-&@ZZ.ZZ. %DISGB	,BbjjV
::	?odmmo=>s   E2E5 5Fc                 N    | j                         \  }}||| j                         fS r    )r  r  )r)   widthheights      r   getImageDatazImageReader.getImageData  s%    vfdoo///r   c                     d| j                   j                  v rG| j                   j                  d   dz  }| j                   j                  }	 |j                  }|||dz    S y #  	 |j                  }n#  Y Y y xY wY #xY w)Nr  r  )r  r  paletter  )r)   r  r  s      r   getTransparentzImageReader.getTransparent  s    T[[---;;++N;a?Lkk))G !// <Q77  %llG  s*   A! !A;$A10A;1A63A;6A;r    )r   r   r   rT  _cacher  r   r  r  classmethodr  r  r  r  r  r  r  r  r   r   r   r  r  f  si    +FO%ZNP J J 3 3
+
?60r   r  c                       e Zd Zy)LazyImageReaderN)r   r   r   r   r   r   r  r    s    r   r  c                 t    	 | j                         S # t        $ r t        |       j                         cY S w xY w)z<Get width, height and RGB pixels from image file.  Wraps PIL)r  rk  r  )imageFileNames    r   r  r    s9    9))++ 9=)66889s    "77c                       e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZeeeedZd Zd Zd Zd Zd Zy)	DebugMemoa  Intended as a simple report back encapsulator

    Typical usages:
        
    1. To record error data::
        
        dbg = DebugMemo(fn='dbgmemo.dbg',myVar=value)
        dbg.add(anotherPayload='aaaa',andagain='bbb')
        dbg.dump()

    2. To show the recorded info::
        
        dbg = DebugMemo(fn='dbgmemo.dbg',mode='r')
        dbg.load()
        dbg.show()

    3. To re-use recorded information::
        
        dbg = DebugMemo(fn='dbgmemo.dbg',mode='r')
            dbg.load()
        myTestFunc(dbg.payload('myVar'),dbg.payload('andagain'))

    In addition to the payload variables the dump records many useful bits
    of information which are also printed in the show() method.
    Nc                 @
   dd l }|| _        |st        j                  | _        n%t	        |d      r|| _        nt        |d      | _        |dk7  ry i x| _        }	|rJt        j                         dk7  r3dd l}
t               }|
j                  d |       |j                         |	d<   t        j                         }t        j                  |      }t        j                  j!                  |      }|xr t        j                  |      xs d}t        j                  j#                  t        j                  j!                  t        j$                  d               }d}d }	 dd l}|j)                  t*        j-                  d            }|d   }t        j.                  }t1        |j3                               }|j5                          |	j7                  i d	t9        j:                  t9        j<                  t9        j8                                     d
t        j>                  dt        j@                  dtC        t        jD                        dt        jF                  dt        jH                  dt        jJ                  dt        j                  dt        j$                  d|d|jM                         d|d|dt        jN                  dtQ        t        dd      dtQ        t        dd      dtQ        t        dd      tQ        t        dd      djS                  dg|D cg c]  }|d||    c}z         tU        t*              ||d        t        d!ft        d"ffD ].  \  }}|D ]$  }t	        ||      s	  tQ        ||             |	|<   & 0 ||k7  r(	 |	j7                  |t        j                  |      d#       |rot        j                  j#                  t        j$                  d         }t        j                  jW                  |      r 	 |t        |d$      jY                         f|	d%<   i }t        jZ                  j]                         D ]y  \  }}|d&k(  s|d'k(  s|d d( d)k(  s	|d d* d+k(  s!d,D cg c]  }tQ        ||d        }}|D cg c]  }|s|	 c}sO|d   g|d-d  D cg c]  }|s|	 c}z   }t_        |      ||<   { ||	d.<   i | j                  d/<   | ja                  |       y #  Y jxY wc c}w #  Y xY w#  Y MxY w#  Y xY wc c}w c c}w c c}w )0Nr   writer  )NNN__tracebackz???zmeta_data.marproject_versiongmtplatformversion
hexversion
executableexec_prefixprefixr  r[  r  hostnamelcwdlpcwd	byteordermaxint
maxunicodez????api_versionversion_infowinverz
			r  rZ  )r6  environmentr"  project_meta_datar&  )getwindowsversiongetfilesystemencoding)unamectermidgetgidgetuidgetegidgeteuidgetlogin	getgroupsgetpgrpgetpidgetppid)exedlexedr'  __script	reportlabrlextra
   z
reportlab.r  zrlextra.)__version____path__rd  r
   __module_versions	__payload)1socketr   r0   stdoutr  rp  storerH  	tracebackr   	print_excgetvaluer   rB  r   r  rc  r7  r[  marshalr   r"  rr  environrc   r#  sortr   timeasctimegmtimer(  r)  r  r*  r+  r,  r-  gethostnamer1  r  r   rF  r   rz  r  r   rb   _add) r)   r   rt  	getScriptr  capture_tracebackrQ  r\  rP  rR  rS  rA   r  r/  pcwdr0  rF  r&  mdrV  envKr   Mr   r   module_versionsr  r*   rx   r$   _fs                                    r   r   zDebugMemo.__init__  s   **DKvg&$"6#.9f
U3C!C	AQ'#$::<E- IIKzz#wws#)D)2Uwwrwwsxx{;<	}}]33ODEB01O jj
sxxz
	 t||DKK		,DE "CLL!3;; %c#..&9 %cnn	
 &s !#**   s #F$6$6$8    $S]] !'#l6"B &ws='H  'N6(J!" #*#hv">'1t[\<]VW#a&=Q<]7]'^)-m)<-/+:+ 	0 BC   	CAa  1Q<#/71Q<>a	 9dRZZ5EGH !-Bww~~b!)+DCL,=,=,?(@E*% ;;$$& 	2CAa+~I3B1E2APZIZ0UV1WQq&VV!")2bB)1qu!;"!;;A).qOA&	2 &5!""$

;		"{	, =^ W)!;sT   -S- S55S:'T T
 0T
TT&T.T-S2:S?T
Tc                 \    | j                   d   }|j                         D ]
  \  }}|||<    y NrO  )rR  r   )r)   r   payloadr   r$   s        r   r]  zDebugMemo._addg  s2    **[)GGI 	DAqGAJ	r   c                 &    | j                  |       y r    )r]  )r)   r\  s     r   addzDebugMemo.addl  s    		"r   c                    	 |j                         }t        j                  | j                  |       y #  | j                  j	                         }t               }|j                         D ]-  \  }}	 t        j                  ||i|        #  d|z  ||<   Y ,xY w |j                  d       t        j                  ||       Y y xY w)Nz<unpicklable object %r>r   )tellr   dumprR  copyr   r   r  )r)   r  posSffr   r$   s          r   _dumpzDebugMemo._dumpo  s    	CKK

1%		jjooAyBwwy 9!9KK1b)94q8AaD	9
 FF3qMKK!s!   03 <C0B	C	
B.Cc                     t        | j                  d      }	 | j                  |       |j                          y # |j                          w xY w)Nwb)rp  r   rs  r  r)   r  s     r   rn  zDebugMemo.dump~  5    	JJqMGGIAGGI	   : Ac                 X    t               }| j                  |       |j                         S r    )r   rs  rU  rv  s     r   r   zDebugMemo.dumps  s     I

1zz|r   c                 8    t        j                  |      | _        y r    )r   r  rR  rv  s     r   _loadzDebugMemo._load  s    [[^
r   c                     t        | j                  d      }	 | j                  |       |j                          y # |j                          w xY w)Nrb)rp  r   r{  r  rv  s     r   r  zDebugMemo.load  rw  rx  c                 8    | j                  t        |             y r    )r{  r   )r)   rA   s     r   r   zDebugMemo.loads  s    

71:r   c           
      ~   | j                  |dd         t        |j                               }|j                          |D ]p  }||   x}}t	        |t
              r|d   }	 t        |       t        j                  |   }t        |dd       |k(  xr dxs d}| j                  d|d|d	|d
       r y #  d }d}Y &xY w)N   r   rL  SAME	DIFFERENTz??????unknown??????z   = z ())
_writelnrc   r#  rX  r3   rb   
__import__r0   r  r  )r)   r   r$   rc  vkvk0r*   r  s           r   _show_module_versionszDebugMemo._show_module_versions  s    aeN	 
	7AtOB"U#2a5S*1KKNAmD136A6P[ MMa156
	7*)s    6B44B<c                 :    | j                  d|d|dd  d       y )Nz###################r  r  z##################)r  )r)   r   whats      r   _bannerzDebugMemo._banner  s    d1QR5QRr   c                 (    | j                  |d       y )NzStart  r  r   s     r   _startzDebugMemo._start      Qy!r   c                 (    | j                  |d       y )NzFinish r  r   s     r   _finishzDebugMemo._finish  r  r   c                 j    | j                  |       | j                  |       | j                  |       y r    )r  r  r  r   s      r   _show_lineszDebugMemo._show_lines  s$    AaQr   c                 |    |dt         j                  j                  |d         }| j                  ||d          y )Nr  r   r
   )r   r  basenamer  r   s      r   
_show_filezDebugMemo._show_file  s3    ))!A$/01Q4 r   c                     |rCdd l }| j                  |       |j                  || j                         | j                  |       y y r   )pprintr  rQ  r  )r)   r   r$   r  s       r   _show_payloadzDebugMemo._show_payload  s5    KKNMM!DKK(LLO	 r   c           
      ^   dD ]  }	 |gj                   }t        |       t        j                  |   } ||j                         dD ]&  }t        ||      s ||dt        ||             ( 	 | j                  ddj                  |j                        z           y #   d       Y <xY w)N)	_rl_accel	_renderPMsgmloppyRXPpyRXPU_imagingr   )rL  r  _versionr)  rZ  z	not foundr  )
r   r  r0   r  rd  r  r  r  r   __self__)r)   mnr   r*   vns        r   _show_extensionszDebugMemo._show_extensions  s    X 	4B	DKK2KKO!**H 8Bq}R"678
 MM#chhqzz223	4+s   AB B  
B,)rN  rO  r%  rH  c                    t        | j                  j                               }|j                          |D ]L  }|t        | j                  j                               vs)| j                  |dd| j                  |          N |D ]L  }|t        | j                  j                               v s) | j                  |   | || j                  |          N | j                          y )N15r  )rc   rR  r#  rX  specialsr  r  )r)   rc  r   s      r   showzDebugMemo.show  s    "#	 	dAT]]//122DMMRSTXT^T^_`TaBb4c	d 	WAD++-..0@a0@a

ST0V	Wr   c                 &    | j                   d   |   S rh  rR  r)   rl  s     r   ri  zDebugMemo.payload      zz+&t,,r   c                 (    || j                   d   |<   y rh  r  )r)   rl  rR  s      r   r   zDebugMemo.__setitem__  s    (-

;%r   c                 &    | j                   d   |   S rh  r  r  s     r   r   zDebugMemo.__getitem__  r  r   c                 @    | j                   j                  |dz          y r  )rQ  r$  )r)   msgs     r   r  zDebugMemo._writeln  s    #d(#r   )zrl_dbgmemo.dbgr  r
   r   r
   N)r   r   r   rT  r   r]  rk  rs  rn  r   r{  r  r   r  r  r  r  r  r  r  r  r  r  ri  r   r   r  r   r   r   r"  r"    s    2Yv

$7 S""
!4 &;**&H
 -.-$r   r"  c                 R    | D ]"  }t        |      rt        ||        ||       $ y r    )r5   _flatten)r  r   rx   s      r   r  r    s'     8Xa]dr   c                 6    g }t        | |j                         |S )z'recursively flatten the list or tuple L)r  r   )r  r   s     r   flattenr    s    
AQqxxHr   c                 b    	  | t        j                  |      j                        }|r|S |dz  }/)zPapply func to the locals at each stack frame till func returns a non false valuer
   )r0   r   f_locals)rS  depth_s      r   find_localsr    s3    
u%../Qh
 r   c                       e Zd Zd Zd Zy)_FmtSelfDictc                      || _         || _        y r    )obj_overrideArgs)r)   r  overrideArgss      r   r   z_FmtSelfDict.__init__  s    )r   c                     	 | j                   |   S # t        $ rD 	 | j                  j                  |   cY S # t        $ r t	        | j                  |      cY cY S w xY ww xY wr    )r  r   r  r  r  r   s     r   r   z_FmtSelfDict.__getitem__  sa    	+%%a(( 	++xx((++ +txx**+	+s)    	A6AAAAAN)r   r   r   r   r   r   r   r   r  r    s    *+r   r  c                       e Zd ZdZd Zy)FmtSelfDictz mixin to provide the _fmt methodc                 $    t        | |      }||z  S r    )r  )r)   fmtr  r   s       r   _fmtzFmtSelfDict._fmt	  s    |,Qwr   N)r   r   r   rT  r  r   r   r   r  r    s
    *r   r  c                 F   g } |d      }g }| }| j                         D ]Y  } ||      }||z   |z   |k  s|g k(  r|j                  |       ||z   |z   }5|j                  dj                  |             |g}|}[ |g k7  r |j                  dj                  |             |S )Nr  )r  r   r   )	txtmWSWr  wsOr  r   lts	            r   _simpleSplitr    s    
A	CB
A	AYY[ UR47B;!R%HHQKBAHHSXXa[!AA 	"uahhsxx{#Hr   c                     ddl m t        |       j                  d      }||ffd	}|r'g }|D ]  }|j	                  t        |||               |}|S )Nr   )stringWidthro  c                      | ||      S r    r   )textfNfSr  s      r   r  zsimpleSplit.<locals>.<lambda>!  s    D"b0I r   )reportlab.pdfbase.pdfmetricsr  rO   r  extendr  )	r  fontNamefontSizemaxWidthlinesr  r  lr  s	           @r   simpleSplitr    sZ    8dO!!%(E!h	IB 	2AHH\!HR01	2Lr   c                     ddl m} | | S t        |       r| j                  d      } ||       } | j	                  dd      } | j	                  dd      } | j	                  dd	      } | S )
zEscapes once onlyr   )escaper<   	&amp;amp;&amp;&amp;gt;&gt;&amp;lt;&lt;)xml.sax.saxutilsr  r=   rN   r  )r  r  rA   s      r   escapeTextOncer  )  sa    '|t}$++f-a$<D<<X.D<<W-D<<W-DKr   c                     t        |       r| S t        D ]  }	 | j                  |      c S  t        d| z        #  Y *xY w)Nz(cannot convert %r to filesystem encoding)r[   fsEncodingsrN   r  )r   rJ   s     r   fileName2FSEncr  5  sM    }
 	Cyy~%	
 ?"D
EEs   :>c                     t        j                  dg| dg      }t        j                  |d      \  }}}	  ||        ||        ||       t	        |||      S # t        $ r Y w xY w)a  
    Loop over a collection with look-ahead and look-back.
    
    From Thomas Guest, 
    http://wordaligned.org/articles/zippy-triples-served-with-python
    
    Seriously useful looping tool (Google "zippy triples")
    lets you loop a collection and see the previous and next items,
    which get set to None at the ends.
    
    To be used in layout algorithms where one wants a peek at the
    next item coming down the pipe.

    Nr  )	itertoolschainteeStopIterationzip)r   r  prevthisnexts        r   prev_this_nextr  A  sp      __dVUTF3F }}VQ/D$T
T
T
 tT4    s   A 	A&%A&c                    t        |       r| j                  d      } t        |       dz
  }| dz  } d}dg}||k  rn| |   dk(  rK| |dz      dk(  r|dxx   dz  cc<   |dz  }n=|d   j                         |d<   ||k7  r"|j	                  d       n|dxx   | |   z  cc<   |dz  }||k  rn|d   j                         |d<   |S )a  
    Splits the string s at every unescaped comma and returns the result as a list.
    To escape a comma, double it. Individual items are stripped.
    To avoid the ambiguity of 3 successive commas to denote a comma at the beginning
    or end of an item, add a space between the item seperator and the escaped comma.
    
    >>> commasplit(u'a,b,c') == [u'a', u'b', u'c']
    True
    >>> commasplit('a,, , b , c    ') == [u'a,', u'b', u'c']
    True
    >>> commasplit(u'a, ,,b, c') == [u'a', u',b', u'c']
    r<   r
   r  r   r  r~  r  )r=   rN   r   r   r   )rA   r  rU   r'  s       r   
commasplitr  [  s     qzqxx'1AqAIA	A
eA
Q$Q4:1vt|"tQ""a4#bEQqTME	1 Q$ bEKKMAbEHr   c           
          dj                  | D cg c]#  }dt        |      j                  dd      z   dz   % c}      S c c}w )a  
    Inverse of commasplit, except that whitespace around items is not conserved.
    Adds more whitespace than needed for simplicity and performance.
    
    >>> commasplit(commajoin(['a', 'b', 'c'])) == [u'a', u'b', u'c']
    True
    >>> commasplit((commajoin([u'a,', u' b ', u'c'])) == [u'a,', u'b', u'c']
    True
    >>> commasplit((commajoin([u'a ', u',b', u'c'])) == [u'a', u',b', u'c'] 
    r~  r  z,,)r   rO   r  )r  rU   s     r   	commajoinr  {  s=     99PQS1til224??$FSTTSs   (?c                 ^   |xr t         j                  j                  xs t         j                  j                  } ||       r| S t         j                  j                  }t         j                  j                  |       s|D ]  } |||       } ||      s|c S  |rt        d| d|      | S )z*search for relative files in likely placeszcannot locate z with paths=)r   r  r   r   r   r  r  )r   pathsr   failexistsr  r9  r  s           r   findInPathsr    s    &7"''--Fbz"9GGLLE77== 	A"+Cc{
	 :"UKLLIr   c                     t        j                         \  }}}t        | ||j                  d | t	        |      |fD                    |       y)z,add msg to the args of an existing exceptionc              3   &   K   | ]	  }|s|  y wr    r   ).0r  s     r   	<genexpr>z$annotateException.<locals>.<genexpr>  s     B1QBs   N)r0   rH  r   r   r8   )r  rJ   postMsgr  r   r$   r   s          r   rG   rG     s>    
,,.EAaq388BSVG(<BCDQGr   c                 &   | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd	      } | j                  dd      } | j                  dd      } | j                  dd      } | S )
zEnsure XML output is escaped just once, irrespective of input

    >>> escapeOnce('A & B')
    'A &amp; B'
    >>> escapeOnce('C &amp; D')
    'C &amp; D'
    >>> escapeOnce('E &amp;amp; F')
    'E &amp; F'

    &r  r  r  r  r  r  z&amp;#z&#)r  )r  s    r   
escapeOncer    s     <<W%D
 <<W-D<<
F+D<<
F+D<<$'D <<W-D<<
F+D<<
F+DKr   c                       e Zd ZdZd Zy)IdentStrz,useful for identifying things that get splitc                     t        |t              r-|j                  }|d dt        t	        |            z     }|dz  }nd}|d|z  z  }t        j                  | |      }||_        |S )Nr  r
   r   z[%d])r3   r  _IdentStr__incr   r8   __new__)r  rR  incr)   s       r   r
  zIdentStr.__new__  si    eH%++C-Qs3s8}_-.E1HCC#{{3u%
r   Nr   r   r   rT  r
  r   r   r   r  r    s
    6
r   r  c                       e Zd ZdZd Zy)RLStringzallows specification of extra properties of a string using a dictionary of extra attributes
    eg fontName = RLString('proxima-nova-bold',
                    svgAttrs=dict(family='"proxima-nova"',weight='bold'))
    c                 |    t         j                  | |      }|j                         D ]  \  }}t        |||        |S r    )r8   r
  r   r   )r  r$   r   r)   r   s        r   r
  zRLString.__new__  s<    {{3q!::< 	CAaD1	r   Nr  r   r   r   r  r    s    r   r  c                 >    t        |       s| j                  d      } | S )zEforce filename strings to unicode so python can handle encoding stuffr<   )r[   rN   r@   s    r   makeFileNamer    s    Q<HHVHr   c                   (    e Zd ZdZd Zd Zd Zd Zy)FixedOffsetTZz&Fixed offset in minutes east from UTC.c                 J    t        j                  ||      | _        || _        y )N)hoursminutes)datetime	timedelta_FixedOffsetTZ__offset_FixedOffsetTZ__name)r)   r  r*   rl  s       r   r   zFixedOffsetTZ.__init__  s     **a@r   c                     | j                   S r    )r  r)   dts     r   	utcoffsetzFixedOffsetTZ.utcoffset  s    }}r   c                     | j                   S r    )r  r  s     r   tznamezFixedOffsetTZ.tzname  s    {{r   c                 ,    t        j                  d      S r   )r  r  r  s     r   dstzFixedOffsetTZ.dst  s    !!!$$r   N)r   r   r   rT  r   r  r   r"  r   r   r   r  r    s    0%r   r  c                   4    e Zd ZddZed        Zed        Zy)	TimeStampNc                    |ddl m} t        j                  j	                  dd      j                         }|s|r0|rt        |      nd}t        j                  |      }dx}}d| _	        nkt        j                         }t        t        j                  |            }t        t        j                  dz        }t        j                  dz  d	z  }d| _	        || _        || _        t        |      d d
 | _        || _        || _        y )Nr   )	invariantSOURCE_DATE_EPOCHr  g   6AUTCg      @i  <   r  )r  r&  r   rW  r   r   ra   rY  r[  r   rb   	localtimetimezoner   r  YMDhmsdhhdmm)r)   r&  r   r  r-  r.  s         r   r   zTimeStamp.__init__  s    5JJNN.r288:AAQBMC#DK		At~~a()Bdmmv./C==4'2-CDKBimr   c                     | j                   rSt        j                  j                  | j                  t	        | j
                  | j                  | j                               S t        j                  j                         S r    )r   r  fromtimestampr   r  r-  r.  nowr(   s    r   r  zTimeStamp.datetime  sV    ;;$$22466-QUQYQYZ^ZeZe:fgg$$((**r   c                 @    t        j                  | j                        S r    )rY  rZ  r  r(   s    r   rZ  zTimeStamp.asctime  s    ||DGG$$r   r    )r   r   r   r   propertyr  rZ  r   r   r   r$  r$    s/    * + + % %r   r$  c                    t        |      st        dt        |       d|      t        |      }|j	                         }|st        dt        |       z        |r	|d   dvrdnd}t        d||i t        |       	      S )
z/Can call down into e.g. object1.object2[4].attrzinvalid recursive access of r>  zempty recursive access of %sr   z[.(r  r  )r  )gr  )rX   rW  rF  rS   r   r  r   rd   )r  rl  r5  dots       r   recursiveGetAttrr7    su    ;itTWyY](^__D>D::<Dz"@49"LMM$q'.#BC3t,dsmDDr   c                     |j                  d      }t        |      dk(  rt        | ||       ydj                  |dd       }|d   }t	        | |      }t        |||       y)z7Can call down into e.g. object1.object2[4].attr = valuer>  r
   Nr  )r  r   r   r   r7  )r  rl  rR  tokensmostlastparents          r   recursiveSetAttrr=    s^     ZZ_F
6{aT5!xxs$bz!#t,e$r   c                     |j                  d      }t        |      dk(  rt        | |       y dj                  |d d       }|d   }t	        | |      }t        ||       y )Nr>  r
   r  )r  r   delattrr   r7  )r  rl  r9  r:  r;  r<  s         r   recursiveDelAttrr@    sX    ZZ_F
6{aTxxs$bz!#t,r   c              #      K   d}t        |       }||k  r*	 | j                  d|      }| ||  |dz   }| sy	 ||k  r)yy# t        $ r
 | |d  Y yw xY ww)z:yield sublists of L separated by None; the Nones disappearr   Nr
   )r   indexr  )r  rU   r  js       r   yieldNoneSplitsrD  $  sq     	AAA
A#	QAAa&L!Ae1 A#  	AB%K	s,   A A  AA AAAA)r<   r    )z.ttf)NNr   )NN)Nr   r   r  )r   )r   )TF)r<   r  r  )rL  rT  r   r   r0   rY  ri   r  rD  astr   r  r   r   r   r   ior   hashlibr   reportlab.lib.rltempfiler   r	   r   r   r   r   PILr   r   r(  python_implementationisPyPyr"   r&   r!   r*   r.   r1   rb   rc   r5   r9   rh   r8   rF   strTypesrB   rK   rO   rQ   rS   rV   rX   r=   r[   r^   ry   r{   r}   r   r   r   r   r   r  rl_execr   r   r   r   r   rd   r   rl  r   r   r   r   rI  r  rc  rd  __RL_DIRr  r7  r&  r[  r%  r  r   r"  r.  NotImplementedErrorr6  r8  archiver  r  r	  r  r
  r   r  r  rB  r  r  r   r(  r   splitextr3  r/  r1  r4  r:  rC  rN  
haveImagesrP  r_  rg  rm  ru  urllib.parserv  rw  urllib.requestrx  r{  r  r  r  r  r   r  r   r  getmtimemktimer  r  r  r  r  r  r  r  r  r"  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rG   r  r  r  r  tzinfor  r$  r7  r=  r@  rD  r   r   r   <module>rX     sw   D 8 8 8 8  W   D ^ ^   K	+X++-v5F'  qss)   t  $Z;BPRT & P""KD>: 
(6
"\
6.T 6.p 77e 
N 
 	++	,
h,HI0I 1MF=)!"G-"WXXww 0 01F1F GHHRVV#K''//(+K 266)N%NN+ +#1% +%'WW%5%5%'WW%5%5 ii66!$RVV(.& "YYwVXV]V]VbVb  	'

IRWW^^BGG$4$4X$>q$A5$HIB  'y1D\R ,=\ $
 *X + " 8$t0 !# 3 !ggmmRWW=M=M c !#rww?O?O[][e[e R #%''.."''BRBRdfdkdkdtdt  BF  BM  BM 	j -0&*@ @D	k 	9t$ t$l
+ + "	
	F !4@UH
6s 	s 	%HOO % % %BE
%M(F^xx{HZWW^^H%FM!YY s%   'T 6T D,T/ TT,/1U#