
    BUh                     
   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 Zd Z G d d      Zy#  dZ Y xY w#  ej                  d   ZRY xY w#  ej                  j                  eR      Z\dZ[dC ZkeXj                  fdDZmY x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       T/var/www/html/profi_bot/bot/venv/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%   s    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   isModuler0   +   s    7d3ir   c                     t        | |      S r    )
isinstance)r$   _sts     r   isSeqr4   .   s    ar   c                 "    t        | t              S r    r2   strr#   s    r   isNativer8   1       ar   c                     t        t        |       r|       j                         S | j                  d            j                         S )Nutf8)r   isBytesencode	hexdigestss    r   	_digesterrA   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: )r2   bytesr=   annotateExceptionasciir$   encs     r   asBytesrJ   <   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(rC   rD   )r2   r7   decoderF   rG   rH   s     r   	asUnicoderN   C   sA    !C(Rxx}RE!HU3ZPQrK   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(rC   rD   )r2   r7   rE   rM   rF   rG   rH   s     r   asUnicodeExrP   J   sS    !C(T *1U 3qxx}?Q?TeAhuSzRSs    A  
A   &A(c                     t        | |      S )N)rI   )rN   rH   s     r   asNativerR   Q   s    Q3r   c                     t        | g      S r    )rE   )is    r   int2ByterU   T   s    !:r   c                 .    t        | t        t        f      S r    )r2   r7   rE   r#   s    r   isStrrW   W   s    a#e%%r   c                 "    t        | t              S r    )r2   rE   r#   s    r   r<   r<   Z   s    ar   c                 "    t        | t              S r    r6   r#   s    r   	isUnicoderZ   ]   r9   r   c                 "    t        | t              S r    r2   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    )r2   floatintr!   tuplelistdictr7   rE   complexboolslice_rl_NoneTypetypesFunctionType
LambdaTypeCodeTypeMappingProxyTypeSimpleNamespaceGeneratorType
MethodTypeBuiltinFunctionTypeBuiltinMethodType
ModuleTypeTracebackType	FrameTypeGetSetDescriptorTypeMemberDescriptorType)xs    r   isNonPrimitiveInstancerx   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   instantiatedrz   k   s    !D!!!r   c                     t        | t              r| j                  |      S t        | t              r| S t        |       j                  |      S r    )r2   r7   r=   rE   )rw   rI   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striprM   )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   )r2   r7   rM   r?   s    r   
rawUnicoder   |   s    %/#%6188H=A=r   c                 H    t        | t              r| j                  d      S | S r   )r2   r7   r=   r?   s    r   rawBytesr      s    !+Ac!2188H99r   execc                 ~    t        | t              r| S t        t        | t              r| n| j	                  d            S r~   )r2   r`   ordr7   rM   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)r/   	_getframe	f_globals	zipimportr   r2   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      sy    88
))+C
A	AQx!*B1RBbz3"((**=*=c*BQrU  
 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    779CAad1g9r   c                 b    	 |j                         }t        j                  | ||       y #  Y xY wr    )r   rc   __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   rc   __getitem__r)   r   s     r   r   zCIDict.__getitem__   1    		A Q''	   ( ,c                 ^    	 |j                         }t        j                  | |      S #  Y xY wr    )r   rc   __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   rc   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   rc   
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  )rw   r   pjoins      r   <lambda>zrl_glob.<locals>.<lambda>:  s    eKPQ>Rr   c                      || |      S r    r   )rw   pfnfnmatchs      r   r  zrl_glob.<locals>.<lambda>:  s      BI  JK  LO  BPr   )r  rb   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   isCompactDistror0  J  s
    :r   c                      t         S )z1return truth if a source file system distribution)_isFSSDr   r   r   isSourceDistror3  N  s    Nr   c                     t         j                  j                  t         j                  j                  t         j                  j	                  |                   S r    )r   r  normcaseabspathnormpath)ps    r   normalize_pathr9  R  s3    77BGGOOBGG,<,<Q,?@AAr   invalidate_cachesc                       y r    r   r   r   r   r  r  U  s    Tr   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)r/   r  r9  r2   rb   ra   insertprintremover   getcwd_importlib_invalidate_cachesrG   r   	importlibimport_modulereprImportErrorrF   r7   exc_info)
modulenamebaseDirnoCWDdebugr8  r  opaths          r   recursiveImportrM  W  sy   '*xx0x!N1xD0&wU|<7*LA"1%D=$++a"2 M 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)   rQ  rR  s      r   r   zArgvDictValue.__init__  s    
	r   N)r   r   r   __doc__r   r   r   r   rO  rO    s
    Qr   rO  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 )	rW   r2   r_   r`   rb   r   ra   	TypeErrorr!   )r$   avrR  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   =)
r/   argvr   r2   rO  rQ  rR  r  r   r@  )kwrX  r   r   r   r$   rR  handledker   rW  s              r   getArgvDictr^    s    
$ 	A
A
1a&ggqvvtADsUA||Bs2wx["1R-!  {1Qt4! " 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.pyHnjr`  r   r  r   dirname__file__rF  r7   )hDictr`  errMsgs      r   getHyphenaterrf    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AttributeErrorr7   )r)   namerT   s      r   
_classNamerl    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   )rk  moder@   s      r   open_for_read_by_namert    s    
$s4x	D ]*E d#""4(d?rzz4/QYYrzz$5Oqzs    A8BB)unquoteurlparse)urlopenc                 4    t        |       j                         S r    )rw  read)rk  s    r   	rlUrlReadrz    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   rY  Nr  base64rG   zlatin-1)split
ValueErrorrp  ri  r   r=   )urlru  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  )r@   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 readingry  Nr   )r  filer
   zAttempted untrusted host access   zdata:zCannot open resource "%s")	hasattrrt  rv  matchr  r   r   rz  rp  )rk  rs  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   )
ru  reportlab.rl_configr  r  rer  compiler   r  globals)	rk  rs  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  ry  )rk  rs  fs      r   open_and_readr    sF    d4 A1}:.668 Q vvx Qs   A		Ac                 8    t        | |      j                  d      S Nrn  )r  r  )rk  rs  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 )Nry  TF)r  r-  r!  r  rb   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  )rw   pns     r   r  zrl_isdir.<locals>.<lambda>/  s    1<<+;r   r   )r-  r!  r  r   r   sepr   rb   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_listdirrw   s        r   
rl_listdirr  1  s    RFm&;JrN=R	(,	-B;;rvvbff!.!5!5!:!:!<Q!<A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_mktimer8  er@   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_modulerF  )rk  dirr   r  specs        r   __rl_get_module__r  C  sg    2ww||CS)77>>$!99$tDD;;**,,	 3
 .
//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   [])r/   modulesr  r0  r   r  r
  r   r  r   r  r  r   r  rF  )rk  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   )r2   r   rj  )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=)r2   r  __dict___identfileName_image_width_height_transparent_datar  getattrr  rj  idr  r  r  r  r   ry  close_read_imager7   rE  check_pil_image_size_jpeg_fhjpeg_fhrF   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  Nrk  r  @z	 ident=%rr  z filename=%rr  )r  rW   r  r  rh  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   ro  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sizers  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  rs  r  r   r  loadr  r  convertr  infor  r  tostringrF   r  )r)   r  rs  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   rS  _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  rj  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  rZ  r  hostnamelcwdlpcwd	byteordermaxint
maxunicodez????api_versionversion_infowinverz
			r  rY  )r5  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__rc  r
   __module_versions	__payload)1socketr   r/   stdoutr  ro  storerG  	tracebackr   	print_excgetvaluer   rA  r   r  rb  r6  rZ  marshalr   r!  rq  environrb   r"  sortr   timeasctimegmtimer'  r(  r  r)  r*  r+  r,  gethostnamer0  r  r   rE  r   ry  r  r   ra   _add) r)   r   rs  	getScriptr  capture_tracebackrP  r[  rO  rQ  rR  r@   r  r.  pcwdr/  rE  r%  mdrU  envKr   Mr   r   module_versionsr  r*   rw   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*% ;;$$&CAa+~I3B1E2APZIZ0UV0U1WQq&0UV!")2bB)1qu!;u"u!;;A).qOA& ' &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 NrN  )rQ  r   )r)   r   payloadr   r$   s        r   r\  zDebugMemo._addg  s-    **[)GGIDAq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   dumprQ  copyr   r   r  )r)   r  posSffr   r$   s          r   _dumpzDebugMemo._dumpo  s    	CKK

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

1zz|r   c                 8    t        j                  |      | _        y r    )r   r  rQ  ru  s     r   _loadzDebugMemo._load  s    [[^
r   c                     t        | j                  d      }	 | j                  |       |j                          y # |j                          w xY w)Nrb)ro  r   rz  r  ru  s     r   r  zDebugMemo.load  rv  rw  c                 8    | j                  t        |             y r    )rz  r   )r)   r@   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   rK  SAME	DIFFERENTz??????unknown??????z   = z ())
_writelnrb   r"  rW  r2   ra   
__import__r/   r  r  )r)   r   r$   rb  vkvk0r*   r  s           r   _show_module_versionszDebugMemo._show_module_versions  s    aeN	AtOB"U#2a5S*1KKNAmD136A6P[ MMa156 *)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  rP  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   )rK  r  _versionr(  rY  z	not foundr  )
r   r  r/   r  rc  r  r  r  r   __self__)r)   mnr   r*   vns        r   _show_extensionszDebugMemo._show_extensions  s    XB	DKK2KKO!**HBq}R"67 I
 MM#chhqzz223 Y+s   AB B  
B,)rM  rN  r$  rG  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  )rb   rQ  r"  rW  specialsr  r  )r)   rb  r   s      r   showzDebugMemo.show  s    "#	AT]]//122DMMRSTXT^T^_`TaBb4c AD++-..0@a0@a

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

;%r   c                 &    | j                   d   |   S rg  r  r  s     r   r   zDebugMemo.__getitem__  r  r   c                 @    | j                   j                  |dz          y r  )rP  r#  )r)   msgs     r   r  zDebugMemo._writeln  s    #d(#r   )zrl_dbgmemo.dbgr  r
   r   r
   N)r   r   r   rS  r   r\  rj  rr  rm  r   rz  r  r   r  r  r  r  r  r  r  r  r  r  rh  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    )r4   _flatten)r  r   rw   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
   )r/   r   f_locals)rR  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   rS  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   )stringWidthrn  c                      | ||      S r    r   )textfNfSr  s      r   r  zsimpleSplit.<locals>.<lambda>!  s    D"b0Ir   )reportlab.pdfbase.pdfmetricsr  rN   r  extendr  )	r  fontNamefontSizemaxWidthlinesr  r  lr  s	           @r   simpleSplitr    sU    8dO!!%(E!h	IBAHH\!HR01 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<   rM   r  )r  r  r@   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)rZ   fsEncodingsrM   r  )r   rI   s     r   fileName2FSEncr  5  sH    }
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<   rM   r   r   r   )r@   r  rT   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   rN   r  )r  rT   s     r   	commajoinr  {  sC     99PQSPQ1til224??$FPQ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  r8  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     B(<1Q(<s   N)r/   rG  r   r   r7   )r  rI   postMsgr  r   r$   r   s          r   rF   rF     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])r2   r  _IdentStr__incr   r7   __new__)r  rQ  incr)   s       r   r
  zIdentStr.__new__  si    eH%++C-Qs3s8}_-.E1HCC#{{3u%
r   Nr   r   r   rS  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    )r7   r
  r   r   )r  r$   r   r)   r   s        r   r
  zRLString.__new__  s7    {{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;   )rZ   rM   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*   rk  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   rS  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| _	        not        j                         }t        j                  |      }t        |      }t        |j                  dz        }|j                  dz  d	z  }|j                  | _	        || _        || _        t        |      d d
 | _        || _        || _        y )Nr   )	invariantSOURCE_DATE_EPOCHr  g   6AUTCg      @i  <   r  )r  r&  r   rV  r   r   r`   rX  rZ  r   	localtimera   	tm_gmtofftm_zoner   r  YMDhmsdhhdmm)r)   r&  r   r  r.  r/  
local_times          r   r   zTimeStamp.__init__  s    5JJNN.r288:AAQBMC#DK		A*Jz"Bj**f56C''$."4C$,,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    )rX  rY  r  r(   s    r   rY  zTimeStamp.asctime  s    ||DGG$$r   r    )r   r   r   r   propertyr  rY  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  )rW   rV  rE  rR   r   r  r   rc   )r  rk  r7  dots       r   recursiveGetAttrr9    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   r9  )r  rk  rQ  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   r9  )r  rk  r;  r<  r=  r>  s         r   recursiveDelAttrrB    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  rT   r  js       r   yieldNoneSplitsrF  %  sq     	AAA
A#	QAAa&L!Ae1 A#  	AB%K	s,   A A  AA AAAAc                 P    dj                  d | j                  d      D              S )Nrn  c              3   <   K   | ]  }|j                           y wr    )lstripr  s     r   r  z_rl_docdent.<locals>.<genexpr>4  s     8-Qahhj-s   )r   r  r?   s    r   _rl_docdentrJ  3  s    998!''$-899r   c                   .    e Zd ZddZd Zd Zd ZddZy)	
KlassStorec                      || _         i | _        y r    )limrQ  )r)   rN  s     r   r   zKlassStore.__init__7  s    
r   c                 h   t        |t              rt        |t              s9t        | j                  j
                   dt        |      t        |      f d      | j                  }|||<   t        |      | j                  k\  r0t        |j                               d | j                    D ]  }||=  y y )Nz%.add takes (str,type) arguments not (r  )r2   r7   r!   r  rh  r   rQ  r   rN  rb   r"  )r)   r   r$   rQ  r  s        r   rj  zKlassStore.add;  s    1S!j4&8 7 788]^bcd^efjklfm^m]nnopqq

au:txx%**,'
$((3!H 4  r   c                     || j                   v S r    r  r   s     r   r   zKlassStore.__contains__D  s    DJJr   c                      | j                   |   S r    r  r   s     r   r   zKlassStore.__getitem__G  s    zz!}r   Nc                 :    | j                   j                  ||      S r    )rQ  r   )r)   r   defaults      r   r   zKlassStore.getJ  s    zz~~a((r   )r  r    )r   r   r   r   rj  r   r   r   r   r   r   rL  rL  6  s    )r   rL  )r;   r    )z.ttf)NNr   )NN)Nr   r   r  )r   )r   )TF)r;   r  r  )rK  rS  r   r   r/   rX  rh   r  rC  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-   r0   ra   rb   r4   r8   rg   r7   rE   strTypesrA   rJ   rN   rP   rR   rU   rW   r<   rZ   r]   rx   rz   r|   r   r   r   r   r   r  rl_execr   r   r   r   r   rc   r   rk  r   r   r   r   rH  r  rb  rc  __RL_DIRr  r6  r%  rZ  r$  r  r   r!  r-  NotImplementedErrorr5  r7  archiver
  r  r  r  r	  r   r  r  rA  r  r  r   r'  r   splitextr2  r.  r0  r3  r9  rB  rM  
haveImagesrO  r^  rf  rl  rt  urllib.parseru  rv  urllib.requestrw  rz  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  rF   r  r  r  r  tzinfor  r$  r9  r?  rB  rF  rJ  rL  r   r   r   <module>rg     s   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 %  %  %DE
%:) )q(F^xx{HZWW^^H%FM!YY s%   'T 6T% D,T< T"%T9<1U0