o
    ᡡiZ                     @  s  d dl mZ d dlZd dlmZ d dlZd dlZd dlmZmZm	Z	 ddl
mZmZ ejdk r5d dlmZ er=d d	lmZ dOddZdPddZdOddZdOddZdOddZdOddZdOddZdOddZdOddZdOd d!ZdOd"d#ZdOd$d%ZdOd&d'ZdOd(d)ZdOd*d+Z dOd,d-Z!dOd.d/Z"dQd1d2Z#dOd3d4Z$dOd5d6Z%dOd7d8Z&dOd9d:Z'dOd;d<Z(dOd=d>Z)dOd?d@Z*dOdAdBZ+dOdCdDZ,dOdEdFZ-dOdGdHZ.dOdIdJZ/dOdKdLZ0dOdMdNZ1dS )R    )annotationsN)TYPE_CHECKING)EndOfChannelas_safe_channelopen_memory_channel   )assert_checkpointswait_all_tasks_blocked      )ExceptionGroup)AsyncGeneratorreturnNonec                    s6  t t td W d    n1 sw   Y  t jtdd td W d    n1 s0w   Y  tttB d B  d\} }t|  t| | d t	  | 
dI d H  W d    n1 sdw   Y  t tj | d  W d    n1 sw   Y  t	  | I d H dksJ W d    n1 sw   Y  | dksJ t tj |  W d    n1 sw   Y  | d |  I d H  t tj | 
dI d H  W d    n1 sw   Y  t tj | d W d    n	1 sw   Y  t tj |   W d    n	1 s w   Y  |  I d H  | dks5J t t | I d H  W d    n	1 sMw   Y  | I d H  t tj | I d H  W d    n	1 srw   Y  t tj |  W d    n	1 sw   Y  | I d H  d S )	Ng      ?z^max_buffer_size must be >= 0$matchr      lastztoo late)pytestraises	TypeErrorr   
ValueErrorintstrreprsend_nowaitr   sendtrio
WouldBlockreceivereceive_nowaitacloseClosedResourceErrorcloner   )sr r(   i/var/www/html/asbeauty/laura_geller_scraping/env/lib/python3.10/site-packages/trio/_tests/test_channel.pytest_channel   s`   






r*   autojump_clocktrio.abc.Clockc                   sh   t t d\}}td}| I d H  W d    n1 s w   Y  |js*J |dI d H  d S )Nr   
   zTest for PR #553)r   r   r   move_on_afterr!   cancelled_caughtr   )r+   r&   r'   timeout_scoper(   r(   r)   test_553?   s   
r1   c               
     s   ddd} t t d	\}}t 4 I d H P}|4 I d H  td
D ]}|| | | q"W d   I d H  n1 I d H s>w   Y  dd |2 I d H }|  |ttdks[J W d   I d H  d S 1 I d H slw   Y  d S )Nsend_channeltrio.MemorySendChannel[int]ir   r   r   c              	     sl   | 4 I d H " t d| d|d  D ]
}| |I d H  qW d   I d H  d S 1 I d H s/w   Y  d S )Nr   r   )ranger   )r2   r4   jr(   r(   r)   producerH   s   .z1test_channel_multiple_producers.<locals>.producerr   r-   c                      g | z3 d H W }|q6 S Nr(   ).0valuer(   r(   r)   
<listcomp>V       z3test_channel_multiple_producers.<locals>.<listcomp>   )r2   r3   r4   r   r   r   )	r   r   r   open_nurseryr5   
start_soonr%   sortlist)r7   r2   receive_channelnurseryr4   gotr(   r(   r)   test_channel_multiple_producersG   s   
(.rF   c               
     s(  t  g  d fdd} t 4 I d H S}tjt d	\}}|4 I d H . td
D ]	}|| || q+t I d H  tdD ]
}||I d H  q?W d   I d H  n1 I d H sZw   Y  W d   I d H  n1 I d H sow   Y  t td
ks~J t	 dksJ t  t tdksJ d S )NrC   trio.MemoryReceiveChannel[int]r4   r   r   r   c                   s.   | 2 z3 d H W } |  | q6 d S r9   )addappend)rC   r4   r;   receivedsuccessful_receiversr(   r)   consumer`   s
   
z1test_channel_multiple_consumers.<locals>.consumerr      r-   )rC   rG   r4   r   r   r   )
setr   r?   r   r   r5   r@   r	   r   len)rM   rD   r2   rC   r4   r(   rJ   r)   test_channel_multiple_consumers\   s$   *(	rQ   c               	     s@  ddd} t d  d	\}}t 4 I d H  }|| |tj t I d H  | I d H  W d   I d H  n1 I d H s<w   Y  ttj |	d  W d    n1 sWw   Y  ttj |
d I d H  W d    n1 suw   Y  tt |  W d    n1 sw   Y  tt | I d H  W d    n1 sw   Y  t d  d	\}}t 4 I d H  }|| |tj t I d H  | I d H  W d   I d H  n1 I d H sw   Y  ttj |	d  W d    n	1 sw   Y  ttj |
d I d H  W d    n	1 s w   Y  ddd}t t d	\}}t 4 I d H }||| t I d H  | I d H  W d   I d H  n1 I d H s_w   Y  ttj |  W d    n	1 szw   Y  ttj | I d H  W d    d S 1 sw   Y  d S )Nr&   trio.MemorySendChannel[None]expecttype[BaseException]r   r   c                   B   t | | d I d H  W d    d S 1 sw   Y  d S r9   r   r   r   r&   rS   r(   r(   r)   
send_blockt      "z%test_close_basics.<locals>.send_blockr   r'   rG   c                   B   t tj |  I d H  W d    d S 1 sw   Y  d S r9   r   r   r   r$   r!   r'   r(   r(   r)   receive_block      "z(test_close_basics.<locals>.receive_blockr&   rR   rS   rT   r   r   )r'   rG   r   r   )r   r   r?   r@   r$   r	   r#   r   r   r   r   r   r"   r!   BrokenResourceErrorr   )rX   r&   r'   rD   r]   _s2r2r(   r(   r)   test_close_basicss   sZ   
(
(
*
$rc   c               	     s,  ddd} t d  d	\}}t 4 I d H }|| |tj t I d H  |  W d   I d H  n1 I d H s9w   Y  ttj |	d  W d    n1 sTw   Y  ttj |
d I d H  W d    n1 srw   Y  tt |  W d    n1 sw   Y  tt | I d H  W d    n1 sw   Y  t d  d	\}}t 4 I d H }|| |tj t I d H  |  W d   I d H  n1 I d H sw   Y  ttj |	d  W d    n1 sw   Y  ttj |
d I d H  W d    n	1 sw   Y  ddd}t d  d	\}}t 4 I d H }||| t I d H  |  W d   I d H  n1 I d H sUw   Y  ttj |  W d    n	1 spw   Y  ttj | I d H  W d    d S 1 sw   Y  d S )Nr&   rR   rS   rT   r   r   c                   rU   r9   rV   rW   r(   r(   r)   rX      rY   z#test_close_sync.<locals>.send_blockr   r'   trio.MemoryReceiveChannel[None]c                   rZ   r9   r[   r\   r(   r(   r)   r]      r^   z&test_close_sync.<locals>.receive_blockr_   )r'   rd   r   r   )r   r   r?   r@   r$   r	   closer   r   r   r   r   r"   r!   r`   )rX   r&   r'   rD   r]   r(   r(   r)   test_close_sync   sZ   

(

(

*
$rf   c                    s  t d  d\} }| }| }| d  | I d H  | W d    n1 s*w   Y  ttj |  W d    n1 sDw   Y  ttj |  W d    n1 s^w   Y  | d  | I d H  ttj | d  W d    d S 1 sw   Y  d S )Nr-   )	r   r%   r   r#   r   r   r   r$   r`   )r&   r'   rb   r3r(   r(   r)   $test_receive_channel_clone_and_close   s(   



"rh   c               	     s   t t d\ }   d	 fdd}d	fdd}t 4 I d H .}|| || t I d H    I d H  |  I d H dksFJ W d   I d H  d S 1 I d H sWw   Y  d S )
Nr   r   r   c                     sD   t tj  dI d H  W d    d S 1 sw   Y  d S )Nnope)r   r   r   r$   r   r(   )s1r(   r)   send_will_close  s   "z9test_close_multiple_send_handles.<locals>.send_will_closec                     s     dI d H  d S Nok)r   r(   )s2r(   r)   send_will_succeed  s   z;test_close_multiple_send_handles.<locals>.send_will_succeedrm   r   r   )	r   r   r%   r   r?   r@   r	   r#   r!   )r'   rk   ro   rD   r(   )rj   rn   r)    test_close_multiple_send_handles  s   

.rq   c               	     s   t t d\}    d	 fdd}d	fdd}t 4 I d H +}|| || t I d H    I d H  | dI d H  W d   I d H  d S 1 I d H sTw   Y  d S )
Nr   r   r   c                     sB   t tj   I d H  W d    d S 1 sw   Y  d S r9   r[   r(   )r1r(   r)   receive_will_close  r^   z?test_close_multiple_receive_handles.<locals>.receive_will_closec                     s      I d H dksJ d S rl   r!   r(   )rb   r(   r)   receive_will_succeed!  s   zAtest_close_multiple_receive_handles.<locals>.receive_will_succeedrm   rp   )	r   r   r%   r   r?   r@   r	   r#   r   )r&   rs   ru   rD   r(   )rr   rb   r)   #test_close_multiple_receive_handles  s   

.rv   c                    s~   t t td\} }|  tdD ]}| | qW d    n1 s$w   Y  dd |2 I d H }|ttdks=J d S )Ninfr-   c                   r8   r9   r(   )r:   r4   r(   r(   r)   r<   4  r=   z%test_inf_capacity.<locals>.<listcomp>)r   r   floatr5   r   rB   )r   r!   r4   rE   r(   r(   r)   test_inf_capacity,  s   ry   c               	     sn  t d  d\} }|  | ksJ |  }|jdksJ |jdks%J |jdks,J |jdks3J |jdks:J |jdksAJ | d  |  jdksOJ | 	 }|  jdks\J | 
 I d H  | jdkslJ |	 }| jdksyJ |
 I d H  | jdksJ t 4 I d H ;}|d  |  jdksJ ||jd  ||jd  t I d H  |  jdksJ |j  W d   I d H  n1 I d H sw   Y  |  jdksJ z	 |  q tjy   Y nw t 4 I d H &}||j t I d H  |  jdksJ |j  W d   I d H  n1 I d H s&w   Y  |  jdks5J d S )Nr   r   r   )r   
statisticscurrent_buffer_usedmax_buffer_sizeopen_send_channelsopen_receive_channelstasks_waiting_sendtasks_waiting_receiver   r%   r#   r   r?   r@   r   r	   cancel_scopecancelr"   r    r!   )r&   r'   statsrn   rb   rD   r(   r(   r)   test_statistics8  sX   

(*r   c               	     s  t td B  d\} }| d | dksJ | d | dks%J d  d
 fdd}t 4 I d H 6}||| t I d H  | d t	tj
 |  W d    n1 s]w   Y  W d   I d H  n1 I d H srw   Y   dks}J t td B  d\} }| d t	tj
 | d  W d    n1 sw   Y  t 4 I d H G}|| jd t I d H  | dksJ t	tj
 | d	 W d    n1 sw   Y  | I d H dksJ W d   I d H  d S 1 I d H sw   Y  d S )Nr   r   r'   %trio.MemoryReceiveChannel[int | None]r   r   c                   s   |   I d H  d S r9   rt   r\   resultr(   r)   
do_receivex  s   z)test_channel_fairness.<locals>.do_receiver   )r'   r   r   r   )r   r   r   r"   r   r?   r@   r	   r   r   r    r   r!   )r&   r'   r   rD   r(   r   r)   test_channel_fairnessj  s>   



(
.r   c               	     sF  t t d\} }ttj |  W d    n1 sw   Y  ttj | d W d    n1 s9w   Y  dd	d
}t 4 I d H 0}|	|| d t
  | I d H dksbJ W d    n1 slw   Y  W d   I d H  n1 I d H sw   Y  ttj |  W d    d S 1 sw   Y  d S )Nr   r   r&   r3   vr   r   r   c                   s>   t   | |I d H  W d    d S 1 sw   Y  d S r9   )r   r   )r&   r   r(   r(   r)   do_send  s   "z test_unbuffered.<locals>.do_send)r&   r3   r   r   r   r   )r   r   r   r   r   r    r"   r   r?   r@   r   r!   )r&   r'   r   rD   r(   r(   r)   test_unbuffered  s$   

(
"r   c               	     sp   t ddd} |  4 I d H }|2 z3 d H W }|dksJ q6 W d   I d H  d S 1 I d H s1w   Y  d S )Nr   AsyncGenerator[int]c                   S s   dV  d S Nr   r(   r(   r(   r(   r)   agen     
z*test_as_safe_channel_exhaust.<locals>.agenr   r   r   r   r   	recv_chanxr(   r(   r)   test_as_safe_channel_exhaust  s   .r   c               	     s   t ddd} |  4 I d H ;}| I d H dksJ | I d H  ttj | I d H  W d    n1 s:w   Y  W d   I d H  d S 1 I d H sPw   Y  d S )Nr   r   c                   S s   dV  dV  d S )Nr   r   r(   r(   r(   r(   r)   r     s   
z2test_as_safe_channel_broken_resource.<locals>.agenr   r   )r   	__anext__r#   r   r   r   r$   r   r   r(   r(   r)   $test_as_safe_channel_broken_resource  s   .r   c               
     s   t  9} tddd}| 4 I d H  |   W d   I d H  n1 I d H s)w   Y  W d    d S W d    d S 1 sAw   Y  d S )Nr   AsyncGenerator[None]c                   S 
   t d)Nz@cancel before consumption means generator should not be iteratedAssertionErrorr(   r(   r(   r)   r     s   z,test_as_safe_channel_cancelled.<locals>.agenr   r   )r   CancelScoper   r   )csr   r(   r(   r)   test_as_safe_channel_cancelled  s   

*	"r   c               
     s   t ddd} tjtdd> |  4 I d H }|2 z3 d H W }|dks&J q6 W d   I d H  n1 I d H s8w   Y  W d    d S W d    d S 1 sPw   Y  d S )	Nr   r   c                   S    dV  t d)Nr   oae)r   r(   r(   r(   r)   r     s   z*test_as_safe_channel_no_race.<locals>.agenz^oae$r   r   r   )r   r   r   r   r   r(   r(   r)   test_as_safe_channel_no_race  s   *"r   trio.testing.MockClockc              
     s   t ddd}tdE | 4 I d H "}|2 z3 d H W }|dks$J t I d H  q6 W d   I d H  n1 I d H s=w   Y  W d    d S W d    d S 1 sUw   Y  d S )Nr   r   c                   S r   )Nr   z;buffer size 0 means we shouldn't be asked for another valuer   r(   r(   r(   r)   r     s
   z8test_as_safe_channel_buffer_size_too_small.<locals>.agenrN   r   r   )r   r   r.   sleep_forever)r+   r   r   r   r(   r(   r)   *test_as_safe_channel_buffer_size_too_small  s   *"r   c               	     sv   t ddd} |  4 I d H }| I d H dksJ tj I d H  W d   I d H  d S 1 I d H s4w   Y  d S )Nr   r   c                   S s   dV  t r   r   r(   r(   r(   r)   r     s   z0test_as_safe_channel_no_interleave.<locals>.agenr   r   )r   r   r   lowlevel
checkpointr   r(   r(   r)   "test_as_safe_channel_no_interleave  s   .r   c               
     s   t ddd} g }ttjtddtjtd	d9}| |4 I d H }|2 z3 d H W }|d
ks2J td6 W d   I d H  n1 I d H sGw   Y  W d    n1 sVw   Y  tjdkri|jj	dgksiJ |ddgksqJ d S )Nevents	list[str]r   r   c              
   S s^   z$zdV  W n t y } z| t|  d }~ww W | d td| d td)Nr   finallyr   )BaseExceptionrI   r   r   )r   er(   r(   r)   r     s   


z2test_as_safe_channel_genexit_finally.<locals>.agenz^agen$r   z
^iterator$r   iteratorr
   z}Encountered exception during cleanup of generator object, as well as exception in the contextmanager body - unable to unwrap.zGeneratorExit()r   )r   r   r   r   )
r   r   RaisesGroup	RaisesExcr   r   sysversion_infor;   	__notes__)r   r   gr   r4   r(   r(   r)   $test_as_safe_channel_genexit_finally  s,   
(
	
r   c                    s   t ddd} d}|  4 I d H Q}|2 zA3 d H W }|  4 I d H %}d}|2 z3 d H W }||f||fks6J |d7 }q&6 W d   I d H  n1 I d H sLw   Y  |d7 }q6 W d   I d H  d S 1 I d H shw   Y  d S )Nr   r   c                  S s   t dD ]} | V  qd S )Nr   )r5   )r4   r(   r(   r)   r     s   z.test_as_safe_channel_nested_loop.<locals>.agenr   r   r   r   )r   ii
recv_chan1r4   r   jjr6   r(   r(   r)    test_as_safe_channel_nested_loop  s    
(
.r   c               
     s   t ddd} tt/ |  4 I d H }|2 z3 d H W }q6 W d   I d H  td1 I d H s3w   Y  td1 s?w   Y  d S )Nr   r   c                  S sD   d V  t  } |   d V  W d    d S 1 sw   Y  d S r9   )r   r   r   )cscoper(   r(   r)   r   -  s   
"z;test_as_safe_channel_doesnt_leak_cancellation.<locals>.agenzshould be reachabler   )r   r   r   r   )r   r   _r(   r(   r)   -test_as_safe_channel_doesnt_leak_cancellation,  s   r   c               
     s   t ddd} tjtjtdddd$ |  4 I d H 	}tdtdg1 I d H s+w   Y  W d    d S 1 s;w   Y  d S )	Nr   r   c                   S r   )Nznot entered)NotImplementedErrorr(   r(   r(   r)   r   <     zBtest_as_safe_channel_dont_unwrap_user_exceptiongroup.<locals>.agenbarr   foor   )r   r   r   r   r   r   r   r   r(   r(   r)   4test_as_safe_channel_dont_unwrap_user_exceptiongroup;  s   "r   c               
     s   t   td fdd} ddd}|  4 I d H B}t  4 I d H #}|||dI d H  |||dI d H     W d   I d H  n1 I d H sLw   Y  W d   I d H  d S 1 I d H sbw   Y  d S )Nr   r   c                    s       I d H  dV  dV  d S )Nr   r   )waitr(   eventr(   r)   r   I  s   
z4test_as_safe_channel_multiple_receiver.<locals>.agenr   trio.abc.ReceiveChannel[int]r;   r   task_statustrio.TaskStatusr   c                   s$   |   |  I d H |ksJ d S r9   )startedr!   )r   r;   r   r(   r(   r)   handle_valueO  s   z<test_as_safe_channel_multiple_receiver.<locals>.handle_valuer   r   r   )r   r   r;   r   r   r   r   r   )r   Eventr   r?   startrO   )r   r   r   rD   r(   r   r)   &test_as_safe_channel_multiple_receiverF  s   

*.r   c                    s  t d	dd} g }t b}ttjL | |4 I d H 1}|2 z"3 d H W }|  z
tj I d H  W q! tjyC   |	d  w 6 W d   I d H  n1 I d H sUw   Y  W d    n1 sdw   Y  W d    n1 ssw   Y  |ddgksJ d S )
Nr   r   r   r   c                 S sr   zd V  W zt j I d H  W d S  t jy   | d  w z
t j I d H  W w  t jy8   | d  w )Nagen cancel)r   r   r   	CancelledrI   )r   r(   r(   r)   r   _  s   

z/test_as_safe_channel_multi_cancel.<locals>.agenzbody cancelr   )r   r   r   r   )
r   r   r   r   r   r   r   r   r   rI   )r   r   r   r   r   r(   r(   r)   !test_as_safe_channel_multi_cancel^  s,   

(
r   c               	     sf   t ddd} |  4 I d H }|2 z3 d H W } n6 W d   I d H  d S 1 I d H s,w   Y  d S )Nr   r   c               
   S s~   z&t  4 I d H  d V  W d   I d H  W d S 1 I d H s w   Y  W d S  ty> }  ztt| s9J  d } ~ ww r9   )r   r?   r   r   r   GeneratorExitmatches)r   r(   r(   r)   r   {  s   2z:test_as_safe_channel_genexit_exception_group.<locals>.agenr   r   r   r   r   r(   r(   r)   ,test_as_safe_channel_genexit_exception_groupz  s   .r   c                    s   t ddd} ttK |  4 I d H (}t 4 I d H 
 | I d H  t1 I d H s.w   Y  W d   I d H  n1 I d H sCw   Y  W d    d S W d    d S 1 s[w   Y  d S )Nr   r   c                   S s   d V  d S r9   r(   r(   r(   r(   r)   r     r   zCtest_as_safe_channel_does_not_suppress_nested_genexit.<locals>.agenr   )r   r   r   r   r   r?   r!   )r   r   r(   r(   r)   5test_as_safe_channel_does_not_suppress_nested_genexit  s   "B"r   c               
     s   ddd t d	 fdd} tt9 |  4 I d H }|2 z3 d H W } n6 W d   I d H  n1 I d H s8w   Y  W d    d S W d    d S 1 sPw   Y  d S )
Nr   r   c                     s.   z
t  I d H  W d S  t jy   td w r9   )r   r   r   r   r(   r(   r(   r)   wait_then_raise     z<test_as_safe_channel_genexit_filter.<locals>.wait_then_raiser   c               	    sT   t  4 I d H } |   d V  W d   I d H  d S 1 I d H s#w   Y  d S r9   )r   r?   r@   )rD   r   r(   r)   r     s
   
.z1test_as_safe_channel_genexit_filter.<locals>.agenrp   r   )r   r   r   r   r   r(   r   r)   #test_as_safe_channel_genexit_filter  s   
*"r   c               
     s.  d
dd t d fdd	} tt1 | t4 I d H }|2 z3 d H W } n6 W d   I d H  n1 I d H s9w   Y  W d    n1 sHw   Y  ttt: | t4 I d H }|2 z3 d H W } n6 W d   I d H  n1 I d H sxw   Y  W d    d S W d    d S 1 sw   Y  d S )NexrT   r   r   c                   s.   z
t  I d H  W d S  t jy   | d w r9   )r   r   r   )r   r(   r(   r)   r     r   zItest_as_safe_channel_swallowing_extra_exceptions.<locals>.wait_then_raiser   c              	    sb   t  4 I d H }| |  | t d V  W d   I d H  d S 1 I d H s*w   Y  d S r9   )r   r?   r@   r   )r   rD   r   r(   r)   r     s   .z>test_as_safe_channel_swallowing_extra_exceptions.<locals>.agen)r   rT   r   r   )r   rT   r   r   )r   r   r   r   r   r   r   r(   r   r)   0test_as_safe_channel_swallowing_extra_exceptions  s*   
(*"r   c               
     s   t ddd} |  4 I d H V t 4 I d H 7}d	 fdd}|| ttj  2 z3 d H W }q.6 W d    n1 s@w   Y  W d   I d H  n1 I d H sUw   Y  W d   I d H  d S 1 I d H skw   Y  d S )
Nr   r   c                   S s   	 d V  qr9   r(   r(   r(   r(   r)   r     s   z:test_as_safe_channel_close_between_iteration.<locals>.agenr   c                     s$   t j I d H    I d H  d S r9   )r   r   r   r#   r(   chanr(   r)   close_channel  s   zCtest_as_safe_channel_close_between_iteration.<locals>.close_channelr   rp   )r   r   r?   r@   r   r   r$   )r   rD   r   r   r(   r   r)   ,test_as_safe_channel_close_between_iteration  s   "
Xr   c               	     s   t ddd} |  4 I d H 0}| I d H  ttj | I d H  W d    n1 s/w   Y  W d   I d H  d S 1 I d H sEw   Y  d S )Nr   r   c                   S r   )Nzshould be unreachabler   r(   r(   r(   r)   r     r   z9test_as_safe_channel_close_before_iteration.<locals>.agenr   )r   r#   r   r   r   r$   r!   )r   r   r(   r(   r)   +test_as_safe_channel_close_before_iteration  s   .r   c               	     s   t d fdd} |  4 I d H 4 ttj  2 z3 d H W }q6 W d    n1 s-w   Y  tj I d H  W d   I d H  d S 1 I d H sKw   Y  d S )Nr   r   c                    s    d V     I d H  	 d V  qr9   )r#   r(   r   r(   r)   r     s   z9test_as_safe_channel_close_during_iteration.<locals>.agenr   )r   r   r   r   r$   testingr	   r   r(   r   r)   +test_as_safe_channel_close_during_iteration  s   .r   rp   )r+   r,   r   r   )r+   r   r   r   )2
__future__r   r   typingr   r   r   r   r   r   r   r   r	   r   exceptiongroupr   collections.abcr   r*   r1   rF   rQ   rc   rf   rh   rq   rv   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   r(   r(   r)   <module>   sV    


+



:
:




2
*


















