
¿«‘_i^  ã               @   sÔ  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 e j d  d k Z e j	 j
 d ƒ Z e j	 j
 d ƒ o� d e j k Z d e j k o¹ d e j j d	 d
 ƒ k Z e j	 j
 d ƒ oÙ e oÙ e Z d Z e j d ƒ Z d d „  Z d d d d „ Z d d „  Z d d „  Z Gd d „  d e j ƒ Z Gd d „  d e ƒ Z e r�e Z e Z e  e f Z! e" e# f Z$ d d „  Z% e& Z' d d „  Z( e j d ƒ Z) d d  „  Z* y d  d l+ Z+ Wn e, k
 rÝYn Xd! d  „  Z* y d  d l- Z- Wn e, k
 rYn Xd" d  „  Z* d# d$ „  Z. d% d& „  Z/ d' d( „  Z0 d) d* „  Z1 d d d+ d, „ Z2 d d d- d. „ Z3 d d d/ d0 „ Z4 d1 d2 „  Z5 nDd  d l Z e  Z e6 Z e  f Z! e" f Z$ e7 Z' d3 d „  Z. d4 d „  Z% d5 d „  Z( d d6 d7 „ Z8 d d8 d9 „ Z9 d: d; „  Z: d< d= „  Z; d> d? „  Z< d@ dA „  Z= dB dC „  Z> d d dD dE „ Z? d dF dG „ Z@ d dH dI „ ZA dJ d& „  Z/ dK d( „  Z0 dL d* „  Z1 d d dM d, „ Z2 d d dN d. „ Z3 d d dO d0 „ Z4 dP d2 „  Z5 d dQ dR „ ZB dS dT „  ZC dU d dV d dW dX „ ZD eE e dY ƒ r(e jF ZG dZ ZH n e jI ZG e ZH Gd[ d\ „  d\ e ƒ ZJ d ZK d ZL d ZM d] d^ „  ZN d_ d` „  ZO d d da db „ ZP e rdc Z dd de lQ mR ZR mS ZS df dg „  ZT e rÍd
 dh di „ Z y d  d lL ZL Wn e, k
 rñYq=Xe ƒ  ZU d dj dk „ ZK dl dm „  ZM n$ dn dg „  ZT do d „  ZR dp d „  ZS dq dr „  ZV ds dt „  ZW du dv „  ZX eX dw d „  e2 ƒ ZY eX dx d „  e3 ƒ ZZ eX dy d „  e4 ƒ Z[ dz e/ d{ e0 d| e1 i Z\ dz e2 d{ e3 d| e4 i Z] d S)}é    N)ÚWeakKeyDictionaryé   ÚcygwinÚwinZGCCZAPPENGINE_RUNTIMEzDevelopment/ZSERVER_SOFTWAREÚ éP   z\033\[[;?0-9]*[a-zA-Z]c               C   s   t  j ƒ  p t  j ƒ  S)N)ÚsysÚgetfilesystemencodingÚgetdefaultencoding© r   r   ú./tmp/pip-build-5gj8f0j9/click/click/_compat.pyÚget_filesystem_encoding   s    r   Fc          
   C   sL   | d  k r t  |  ƒ } | d  k r* d } t |  | | d d d | d | ƒS)NÚreplaceÚline_bufferingTÚforce_readableÚforce_writable)Úget_best_encodingÚ_NonClosingTextIOWrapper)ÚstreamÚencodingÚerrorsr   r   r   r   r   Ú_make_text_stream   s    r   c             C   s7   y t  j |  ƒ j d k SWn t k
 r2 d SYn Xd S)z$Checks if a given encoding is ascii.ÚasciiFN)ÚcodecsÚlookupÚnameÚLookupError)r   r   r   r   Úis_ascii_encoding,   s    r   c             C   s2   t  |  d d ƒ p t j ƒ  } t | ƒ r. d S| S)z1Returns the default stream encoding if not found.r   Nzutf-8)Úgetattrr   r
   r   )r   Úrvr   r   r   r   4   s    r   c               @   sX   e  Z d  Z d d d d „ Z e r< d d „  Z d d „  Z d d	 „  Z d
 d „  Z d S)r   Fc             K   s9   t  | | | ƒ |  _ } t j j |  | | | | � d  S)N)Ú_FixupStreamÚ_streamÚioÚTextIOWrapperÚ__init__)Úselfr   r   r   r   r   Úextrar   r   r   r$   =   s    	z!_NonClosingTextIOWrapper.__init__c             C   sg   t  | t ƒ s t | ƒ rT y |  j ƒ  Wn t k
 r= Yn X|  j j t | ƒ ƒ St j j |  | ƒ S)N)	Ú
isinstanceÚstrÚis_bytesÚflushÚ	ExceptionÚbufferÚwriter"   r#   )r%   Úxr   r   r   r-   N   s    z_NonClosingTextIOWrapper.writec             C   s"   x | D] } |  j  | ƒ q Wd  S)N)r-   )r%   ÚlinesÚliner   r   r   Ú
writelinesW   s    z#_NonClosingTextIOWrapper.writelinesc             C   s'   y |  j  ƒ  Wn t k
 r" Yn Xd  S)N)Údetachr+   )r%   r   r   r   Ú__del__[   s    z _NonClosingTextIOWrapper.__del__c             C   s   |  j  j ƒ  S)N)r!   Úisatty)r%   r   r   r   r4   a   s    z_NonClosingTextIOWrapper.isattyN)	Ú__name__Ú
__module__Ú__qualname__r$   ÚPY2r-   r1   r3   r4   r   r   r   r   r   <   s   		r   c               @   sd   e  Z d  Z d Z d d d d „ Z d d „  Z d d „  Z d	 d
 „  Z d d „  Z d d „  Z	 d S)r    aQ  The new io interface needs more from streams than streams
    traditionally implement.  As such, this fix-up code is necessary in
    some circumstances.

    The forcing of readable and writable flags are there because some tools
    put badly patched objects on sys (one such offender are certain version
    of jupyter notebook).
    Fc             C   s   | |  _  | |  _ | |  _ d  S)N)r!   Ú_force_readableÚ_force_writable)r%   r   r   r   r   r   r   r$   p   s    		z_FixupStream.__init__c             C   s   t  |  j | ƒ S)N)r   r!   )r%   r   r   r   r   Ú__getattr__u   s    z_FixupStream.__getattr__c             C   sQ   t  |  j d d  ƒ } | d  k	 r+ | | ƒ St rA |  j j | ƒ S|  j j | ƒ S)NÚread1)r   r!   r8   ÚreadlineÚread)r%   ÚsizeÚfr   r   r   r<   x   s    
z_FixupStream.read1c             C   sf   |  j  r d St |  j d d  ƒ } | d  k	 r5 | ƒ  Sy |  j j d ƒ Wn t k
 ra d SYn Xd S)NTÚreadabler   F)r9   r   r!   r>   r+   )r%   r.   r   r   r   rA   ƒ   s    		z_FixupStream.readablec             C   s�   |  j  r d St |  j d d  ƒ } | d  k	 r5 | ƒ  Sy |  j j d ƒ Wn? t k
 rŠ y |  j j d ƒ Wn t k
 r… d SYn XYn Xd S)NTÚwritabler   ó    F)r:   r   r!   r-   r+   )r%   r.   r   r   r   rB   �   s    	z_FixupStream.writablec             C   sb   t  |  j d d  ƒ } | d  k	 r( | ƒ  Sy |  j j |  j j ƒ  ƒ Wn t k
 r] d SYn Xd S)NÚseekableFT)r   r!   ÚseekÚtellr+   )r%   r.   r   r   r   rD   ž   s    	z_FixupStream.seekableN)
r5   r6   r7   Ú__doc__r$   r;   r<   rA   rB   rD   r   r   r   r   r    f   s   r    c             C   s
   |  j  ƒ  S)N)Ú	iteritems)r.   r   r   r   Ú<lambda>®   s    rI   c             C   s   t  |  t t f ƒ S)N)r'   r,   Ú	bytearray)r.   r   r   r   r)   ±   s    r)   z^[a-zA-Z_][a-zA-Z0-9_]*$c             C   s   |  S)Nr   )r@   r   r   r   Úset_binary_modeÈ   s    rK   c             C   s<   y |  j  ƒ  } Wn t k
 r$ Yn Xt j | t j ƒ |  S)N)Úfilenor+   ÚmsvcrtZsetmodeÚosÚO_BINARY)r@   rL   r   r   r   rK   Ñ   s    c             C   s\   y |  j  ƒ  } Wn t k
 r$ Yn4 Xt j | t j ƒ } t j | t j | t j @ƒ |  S)N)rL   r+   ÚfcntlÚF_GETFLÚF_SETFLrN   Ú
O_NONBLOCK)r@   rL   Úflagsr   r   r   rK   à   s    c             C   s   t  j |  ƒ d  k	 S)N)Ú_identifier_reÚsearch)r.   r   r   r   Úisidentifierê   s    rW   c               C   s   t  t j ƒ S)N)rK   r   Ústdinr   r   r   r   Úget_binary_stdiní   s    rY   c               C   s   t  d ƒ t t j ƒ S)NÚstdout)Ú_wrap_std_streamrK   r   rZ   r   r   r   r   Úget_binary_stdoutð   s    
r\   c               C   s   t  d ƒ t t j ƒ S)NÚstderr)r[   rK   r   r]   r   r   r   r   Úget_binary_stderrô   s    
r^   c             C   s>   t  t j |  | ƒ } | d  k	 r% | St t j |  | d d ƒS)Nr   T)Ú_get_windows_console_streamr   rX   r   )r   r   r   r   r   r   Úget_text_stdinø   s    r`   c             C   sH   t  d ƒ t t j |  | ƒ } | d  k	 r/ | St t j |  | d d ƒS)NrZ   r   T)r[   r_   r   rZ   r   )r   r   r   r   r   r   Úget_text_stdoutþ   s
    
ra   c             C   sH   t  d ƒ t t j |  | ƒ } | d  k	 r/ | St t j |  | d d ƒS)Nr]   r   T)r[   r_   r   r]   r   )r   r   r   r   r   r   Úget_text_stderr  s
    
rb   c             C   s(   t  |  t ƒ r$ |  j t ƒ  d ƒ }  |  S)Nr   )r'   ÚbytesÚdecoder   )Úvaluer   r   r   Úfilename_to_ui  s    rf   c             C   s
   |  j  ƒ  S)N)rW   )r.   r   r   r   rI     s    c             C   s   t  |  j ƒ  ƒ S)N)ÚiterÚitems)r.   r   r   r   rI     s    c             C   s   t  |  t t t f ƒ S)N)r'   rc   Ú
memoryviewrJ   )r.   r   r   r   r)     s    c             C   s7   y t  |  j d ƒ t ƒ SWn t k
 r2 | SYn Xd  S)Nr   )r'   r>   rc   r+   )r   Údefaultr   r   r   Ú_is_binary_reader   s    rk   c             C   sX   y |  j  d ƒ Wn@ t k
 rS y |  j  d ƒ d SWn t k
 rJ Yn X| SYn Xd S)NrC   r   FT)r-   r+   )r   rj   r   r   r   Ú_is_binary_writer(  s    	rl   c             C   sH   t  |  d ƒ r |  St |  d d  ƒ } | d  k	 rD t  | d ƒ rD | Sd  S)NFr,   T)rk   r   )r   Úbufr   r   r   Ú_find_binary_reader4  s
    rn   c             C   sH   t  |  d ƒ r |  St |  d d  ƒ } | d  k	 rD t  | d ƒ rD | Sd  S)NFr,   T)rl   r   )r   rm   r   r   r   Ú_find_binary_writerC  s
    ro   c             C   s   t  t |  d d ƒ p d ƒ S)z3A stream is misconfigured if its encoding is ASCII.r   Nr   )r   r   )r   r   r   r   Ú_stream_is_misconfiguredR  s    rp   c             C   s4   t  |  | d ƒ } | | k p3 | d k o3 | d k	 S)zšA stream attribute is compatible if it is equal to the
        desired value or the desired value is unset and the attribute
        has a value.
        N)r   )r   Úattrre   Zstream_valuer   r   r   Ú_is_compat_stream_attrZ  s    rr   c             C   s"   t  |  d | ƒ o! t  |  d | ƒ S)zkCheck if a stream's encoding and errors attributes are
        compatible with the desired values.
        r   r   )rr   )r   r   r   r   r   r   Ú_is_compatible_text_streamb  s    rs   c             C   s‘   | |  d ƒ r |  } nK t  |  | | ƒ rG | d  k o? t |  ƒ rG |  S| |  ƒ } | d  k rc |  S| d  k ru d } t | | | d | d | ƒS)NFr   r   r   )rs   rp   r   )Ztext_streamr   r   Z	is_binaryZfind_binaryr   r   Zbinary_readerr   r   r   Ú_force_correct_text_streamj  s     		rt   c             C   s   t  |  | | t t d | ƒS)Nr   )rt   rk   rn   )Ztext_readerr   r   r   r   r   r   Ú_force_correct_text_reader”  s    ru   c             C   s   t  |  | | t t d | ƒS)Nr   )rt   rl   ro   )Ztext_writerr   r   r   r   r   r   Ú_force_correct_text_writerž  s    rv   c              C   s+   t  t j ƒ }  |  d  k r' t d ƒ ‚ |  S)Nz6Was not able to determine binary stream for sys.stdin.)rn   r   rX   ÚRuntimeError)Úreaderr   r   r   rY   ¨  s    c              C   s+   t  t j ƒ }  |  d  k r' t d ƒ ‚ |  S)Nz7Was not able to determine binary stream for sys.stdout.)ro   r   rZ   rw   )Úwriterr   r   r   r\   ®  s
    	c              C   s+   t  t j ƒ }  |  d  k r' t d ƒ ‚ |  S)Nz7Was not able to determine binary stream for sys.stderr.)ro   r   r]   rw   )ry   r   r   r   r^   ¶  s
    	c             C   s>   t  t j |  | ƒ } | d  k	 r% | St t j |  | d d ƒS)Nr   T)r_   r   rX   ru   )r   r   r   r   r   r   r`   ¾  s
    c             C   s>   t  t j |  | ƒ } | d  k	 r% | St t j |  | d d ƒS)Nr   T)r_   r   rZ   rv   )r   r   r   r   r   r   ra   Æ  s
    c             C   s>   t  t j |  | ƒ } | d  k	 r% | St t j |  | d d ƒS)Nr   T)r_   r   r]   rv   )r   r   r   r   r   r   rb   Î  s
    c             C   sI   t  |  t ƒ r' |  j t ƒ  d ƒ }  n |  j d d ƒ j d d ƒ }  |  S)Nr   zutf-8Úsurrogateescape)r'   rc   rd   r   Úencode)re   r   r   r   rf   Ö  s    c             C   sa   t  |  d ƒ r |  j } n! | d  k	 r0 | } n t |  ƒ } t | t ƒ r] | j d d ƒ } | S)NÚstrerrorzutf-8r   )Úhasattrr|   r(   r'   rc   rd   )Úerj   Úmsgr   r   r   Úget_streerrorÞ  s    	r€   c             C   s�   d | k } | r i  } n d | d | i } t  s: | rM t j |  | | � St j |  d j | j d d ƒ ƒ ƒ } t | | � S)a+  On Python 2, :func:`io.open` returns a text file wrapper that
    requires passing ``unicode`` to ``write``. Need to open the file in
    binary mode then wrap it in a subclass that can write ``str`` and
    ``unicode``.

    Also handles not passing ``encoding`` and ``errors`` in binary mode.
    Úbr   r   z{}bÚtr   )r8   r"   ÚopenÚformatr   r   )ÚfileÚmoder   r   ÚbinaryÚkwargsr@   r   r   r   Ú_wrap_io_openë  s    	'r‰   ÚrÚstrictc                sÂ  d ˆ  k } |  d k r˜ t  ‡  f d d †  d d d g Dƒ ƒ rl | rS t ƒ  d f St d	 | d
 | ƒ d f S| r t ƒ  d f St d	 | d
 | ƒ d f S| s· t |  ˆ  | | ƒ d f Sd ˆ  k rÏ t d ƒ ‚ d ˆ  k rç t d ƒ ‚ d ˆ  k rÿ t d ƒ ‚ d d  l } d d  l } y t	 j
 |  ƒ j } Wn t k
 rGd  } Yn Xt	 j t	 j Bt	 j B}	 | r{|	 t t	 d d ƒ O}	 xñ t	 j j t	 j j |  ƒ d j | j d ƒ ƒ ƒ }
 y, t	 j |
 |	 | d  k rÒd n | ƒ } PWq~t k
 rj} zk | j | j k sRt	 j d k rU| j | j k rUt	 j j | j ƒ rUt	 j | j t	 j ƒ rUw~‚  WYd  d  } ~ Xq~Xq~W| d  k	 r‹t	 j |
 | ƒ t | ˆ  | | ƒ } t | |
 t	 j j  |  ƒ ƒ d f S)Nr�   ú-c             3   s   |  ] } | ˆ  k Vq d  S)Nr   )Ú.0Úm)r†   r   r   ú	<genexpr>  s    zopen_stream.<locals>.<genexpr>ÚwÚar.   Fr   r   TzÏAppending to an existing file is not supported, because that would involve an expensive `copy`-operation to a temporary file. Open the file in normal `w`-mode and copy explicitly if that's what you're after.z&Use the `overwrite`-parameter instead.z,Atomic writes only make sense with `w`-mode.r   rO   z.__atomic-write{:08x}é   é    i¶  Úntl        )!Úanyr\   ra   rY   r`   r‰   Ú
ValueErrorÚerrnoÚrandomrN   ÚstatÚst_modeÚOSErrorÚO_RDWRÚO_CREATÚO_EXCLr   ÚpathÚjoinÚdirnamer„   Ú	randrangerƒ   ÚEEXISTr   ZEACCESÚisdirÚfilenameÚaccessÚW_OKÚchmodÚ_AtomicFileÚrealpath)r¥   r†   r   r   Zatomicr‡   r—   r˜   ZpermrT   Útmp_filenameÚfdr~   r@   r   )r†   r   Úopen_stream  s\    (		'r­   r   Tc               @   sm   e  Z d  Z d d „  Z e d d „  ƒ Z d d d „ Z d d	 „  Z d
 d „  Z d d „  Z	 d d „  Z
 d S)r©   c             C   s(   | |  _  | |  _ | |  _ d |  _ d  S)NF)Ú_fÚ_tmp_filenameÚ_real_filenameÚclosed)r%   r@   r«   Zreal_filenamer   r   r   r$   T  s    			z_AtomicFile.__init__c             C   s   |  j  S)N)r°   )r%   r   r   r   r   Z  s    z_AtomicFile.nameFc             C   si   |  j  r d  S|  j j ƒ  t sI y t j |  j ƒ Wn t k
 rH Yn Xt |  j	 |  j ƒ d |  _  d  S)NT)
r±   r®   ÚcloseÚ_can_replacerN   Úremover°   r›   Ú_replacer¯   )r%   Údeleter   r   r   r²   ^  s    	z_AtomicFile.closec             C   s   t  |  j | ƒ S)N)r   r®   )r%   r   r   r   r   r;   j  s    z_AtomicFile.__getattr__c             C   s   |  S)Nr   )r%   r   r   r   Ú	__enter__m  s    z_AtomicFile.__enter__c             C   s   |  j  d | d  k	 ƒ d  S)Nr¶   )r²   )r%   Úexc_typeÚ	exc_valueÚtbr   r   r   Ú__exit__p  s    z_AtomicFile.__exit__c             C   s   t  |  j ƒ S)N)Úreprr®   )r%   r   r   r   Ú__repr__s  s    z_AtomicFile.__repr__N)r5   r6   r7   r$   Úpropertyr   r²   r;   r·   r»   r½   r   r   r   r   r©   S  s   r©   c             C   s   t  j d |  ƒ S)Nr   )Ú_ansi_reÚsub)re   r   r   r   Ú
strip_ansi|  s    rÁ   c             C   sB   t  r
 d  Sx" t |  t t f ƒ r. |  j }  q W|  j j j d ƒ S)Nz
ipykernel.)ÚWINr'   r    r   r!   Ú	__class__r6   Ú
startswith)r   r   r   r   Ú_is_jupyter_kernel_output€  s
    rÅ   c             C   s>   | d  k r9 |  d  k r! t  j }  t |  ƒ o8 t |  ƒ S| S)N)r   rX   r4   rÅ   )r   Úcolorr   r   r   Úshould_strip_ansiŒ  s
    	rÇ   éO   r’   )r_   r[   c              C   s   d d  l  }  |  j ƒ  S)Nr   )ÚlocaleÚgetpreferredencoding)rÉ   r   r   r   Ú_get_argv_encoding�  s    rË   c             C   sE   t  j j ƒ  |  r) t ƒ  } | j |  ƒ t ƒ  } | j ƒ  j d ƒ S)Nz
)r   r]   r*   Ú_default_text_stdoutr-   Ú_default_text_stdinr=   Úrstrip)ÚpromptrZ   rX   r   r   r   Ú	raw_input¤  s    		rÐ   c                s¹   y t  j |  ƒ } Wn t k
 r- d } Yn X| d k	 r> | St |  | ƒ } t j |  d | ƒ‰ ˆ j } | j ‰  ‡  ‡ f d d †  } | | _ y | t  |  <Wn t k
 r´ Yn X| S)a  This function wraps a stream so that calls through colorama
            are issued to the win32 console API to recolor on demand.  It
            also ensures to reset the colors if a write call is interrupted
            to not destroy the console afterwards.
            NÚstripc          	      s*   y ˆ  |  ƒ SWn ˆ j  ƒ  ‚  Yn Xd  S)N)Ú	reset_all)Ús)Ú_writeÚansi_wrapperr   r   Ú_safe_writeÄ  s
    
z'auto_wrap_for_ansi.<locals>._safe_write)Ú_ansi_stream_wrappersÚgetr+   rÇ   ÚcoloramaÚAnsiToWin32r   r-   )r   rÆ   ÚcachedrÑ   r   rÖ   r   )rÔ   rÕ   r   Úauto_wrap_for_ansi³  s"    			rÜ   c              C   s9   t  j j t  j j ƒ j }  |  j |  j |  j |  j f S)N)	rÙ   Úwin32ÚGetConsoleScreenBufferInfoÚSTDOUTZsrWindowZRightZLeftZBottomZTop)r   r   r   r   Úget_winterm_sizeÒ  s    	rà   c               C   s   t  t j d d  ƒ p t ƒ  S)Nr   )r   r   rX   r   r   r   r   r   rË   Û  s    c              G   s   d  S)Nr   )r.   r   r   r   rI   Þ  s    c              G   s   d  S)Nr   )r.   r   r   r   rI   ß  s    c             C   s   t  t |  ƒ ƒ S)N)ÚlenrÁ   )r.   r   r   r   Úterm_lenâ  s    râ   c             C   s+   y |  j  ƒ  SWn t k
 r& d SYn Xd  S)NF)r4   r+   )r   r   r   r   r4   æ  s    r4   c                s%   t  ƒ  ‰  ‡  ‡ ‡ f d d †  } | S)Nc                 s€   ˆ ƒ  }  y ˆ  j  |  ƒ } Wn t k
 r6 d  } Yn X| d  k	 rG | Sˆ ƒ  } y ˆ ƒ  }  | ˆ  |  <Wn t k
 r{ Yn X| S)N)rØ   r+   )r   r   )ÚcacheÚsrc_funcÚwrapper_funcr   r   Úfuncð  s    			z&_make_cached_stream_func.<locals>.func)r   )rä   rå   ræ   r   )rã   rä   rå   r   Ú_make_cached_stream_funcí  s    	rç   c               C   s   t  j S)N)r   rX   r   r   r   r   rI     s    c               C   s   t  j S)N)r   rZ   r   r   r   r   rI     s    c               C   s   t  j S)N)r   r]   r   r   r   r   rI     s    rX   rZ   r]   )^r   r"   rN   Úrer   Úweakrefr   Úversion_infor8   ÚplatformrÄ   ZCYGWINÚversionZMSYS2ÚenvironrØ   Z
APP_ENGINErÂ   ZDEFAULT_COLUMNSÚcompiler¿   r   r   r   r   r#   r   Úobjectr    ÚunicodeÚ	text_typerÐ   r(   Ústring_typesÚintÚlongZ	int_typesrH   ÚxrangeZ
range_typer)   rU   rK   rM   ÚImportErrorrP   rW   rY   r\   r^   r`   ra   rb   rf   ÚinputÚrangerk   rl   rn   ro   rp   rr   rs   rt   ru   rv   r€   r‰   r­   r}   r   rµ   r³   Úrenamer©   rÜ   rÙ   rà   rÁ   rÅ   rÇ   Z_winconsoler_   r[   rË   r×   râ   r4   rç   rÍ   rÌ   Z_default_text_stderrZbinary_streamsZtext_streamsr   r   r   r   Ú<module>   sê   ! *C	
		#

J			$		