
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,aÅ{  ã                   @   s  d dddg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Zddl	Z	ddl
mZ ddl
mZmZ dd	lmZ ejZz$ddlZdd
lmZmZmZmZ W n$ ek
rÊ   ejdkrÂ‚ dZY nX dZdZe ¡ ZdZdgZeedƒrþdZedg7 Zejdk�rdZedg7 Zefdd„Z dd„ Z!dd„ Z"dd„ Z#dd„ Z$G dd„ dƒZ%e�rhG dd„ de%ƒZ&G dd „ d e%ƒZ'G d!d„ de(ƒZ)dOd"d „Z*ejdk�rªdPd$d„Z+n
dQd%d„Z+G d&d'„ d'e(ƒZ,d(d)„ Z-ejdk�rðG d*d+„ d+e(ƒZ.d,d-„ Z/d.Z0d/Z1d0Z2d1Z3d2d3„ Z4d4d5„ Z5G d6d7„ d7e(ƒZ6d8d9„ Z7d:d;„ Z8G d<d=„ d=e)ƒZ9d>d?„ Z:ejdk�rtd@dA„ Z;ej<ej=hZ>dRdBd„Z?n,ddl@Z@ee@dCƒ�r�e@jAZBne@jCZBdSdDd„Z?ejdk�rædEdF„ ZDdGdH„ ZEe Fe'eD¡ dIdJ„ ZGdKdL„ ZHe Fe&eG¡ ndMdF„ ZDdNdH„ ZEe Fe'eD¡ dS )TÚClientÚListenerÚPipeÚwaité    Né   )Úutil)ÚAuthenticationErrorÚBufferTooShort)Ú	reduction)ÚWAIT_OBJECT_0ÚWAIT_ABANDONED_0ÚWAIT_TIMEOUTÚINFINITEÚwin32i    g      4@ÚAF_INETÚAF_UNIXÚAF_PIPEc                 C   s   t  ¡ |  S ©N©ÚtimeÚ	monotonic)Útimeout© r   ú?/opt/alt/python38/lib64/python3.8/multiprocessing/connection.pyÚ_init_timeout;   s    r   c                 C   s   t  ¡ | kS r   r   )Útr   r   r   Ú_check_timeout>   s    r   c                 C   sX   | dkrdS | dkr&t jdt ¡ d�S | dkrLt jdt ¡ ttƒf dd�S td	ƒ‚d S )
Nr   )Z	localhostr   r   z	listener-)ÚprefixÚdirr   z\\.\pipe\pyc-%d-%d-Ú zunrecognized family)	ÚtempfileZmktempr   Zget_temp_dirÚosÚgetpidÚnextÚ_mmap_counterÚ
ValueError©Úfamilyr   r   r   Úarbitrary_addressE   s    ÿÿr(   c                 C   sJ   t jdkr| dkrtd|  ƒ‚t jdkrF| dkrFtt| ƒsFtd|  ƒ‚d S )Nr   r   zFamily %s is not recognized.r   )ÚsysÚplatformr%   ÚhasattrÚsocketr&   r   r   r   Ú_validate_familyS   s
    
r-   c                 C   sT   t | ƒtkrdS t | ƒtkr*|  d¡r*dS t | ƒtks@t | ¡rDdS td|  ƒ‚d S )Nr   z\\r   r   zaddress type of %r unrecognized)ÚtypeÚtupleÚstrÚ
startswithr   Úis_abstract_socket_namespacer%   )Úaddressr   r   r   Úaddress_type_   s    r4   c                   @   s¾   e Zd ZdZd+dd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	e
dd„ ƒZe
dd„ ƒZe
dd„ ƒZdd„ Zdd„ Zd,dd„Zdd„ Zd-dd„Zd.d d!„Zd"d#„ Zd/d%d&„Zd'd(„ Zd)d*„ ZdS )0Ú_ConnectionBaseNTc                 C   s>   |  ¡ }|dk rtdƒ‚|s(|s(tdƒ‚|| _|| _|| _d S )Nr   zinvalid handlez6at least one of `readable` and `writable` must be True)Ú	__index__r%   Ú_handleÚ	_readableÚ	_writable)ÚselfÚhandleÚreadableÚwritabler   r   r   Ú__init__u   s    ÿz_ConnectionBase.__init__c                 C   s   | j d k	r|  ¡  d S r   ©r7   Ú_close©r:   r   r   r   Ú__del__‚   s    
z_ConnectionBase.__del__c                 C   s   | j d krtdƒ‚d S )Nzhandle is closed)r7   ÚOSErrorrA   r   r   r   Ú_check_closed†   s    
z_ConnectionBase._check_closedc                 C   s   | j stdƒ‚d S )Nzconnection is write-only)r8   rC   rA   r   r   r   Ú_check_readableŠ   s    z_ConnectionBase._check_readablec                 C   s   | j stdƒ‚d S )Nzconnection is read-only)r9   rC   rA   r   r   r   Ú_check_writableŽ   s    z_ConnectionBase._check_writablec                 C   s"   | j rd| _n|  ¡  tdƒ‚d S )NFzbad message length)r9   r8   ÚcloserC   rA   r   r   r   Ú_bad_message_length’   s    z#_ConnectionBase._bad_message_lengthc                 C   s
   | j d kS r   ©r7   rA   r   r   r   Úclosed™   s    z_ConnectionBase.closedc                 C   s   | j S r   )r8   rA   r   r   r   r<   ž   s    z_ConnectionBase.readablec                 C   s   | j S r   )r9   rA   r   r   r   r=   £   s    z_ConnectionBase.writablec                 C   s   |   ¡  | jS r   )rD   r7   rA   r   r   r   Úfileno¨   s    z_ConnectionBase.filenoc                 C   s$   | j d k	r z|  ¡  W 5 d | _ X d S r   r?   rA   r   r   r   rG   ­   s    
z_ConnectionBase.closer   c                 C   s¨   |   ¡  |  ¡  t|ƒ}|jdkr.tt|ƒƒ}t|ƒ}|dk rFtdƒ‚||k rVtdƒ‚|d krh|| }n&|dk rztdƒ‚n|| |krŽtdƒ‚|  |||| … ¡ d S )Nr   r   zoffset is negativezbuffer length < offsetzsize is negativezbuffer length < offset + size)rD   rF   Ú
memoryviewÚitemsizeÚbytesÚlenr%   Ú_send_bytes)r:   ÚbufÚoffsetÚsizeÚmÚnr   r   r   Ú
send_bytesµ   s"    


z_ConnectionBase.send_bytesc                 C   s$   |   ¡  |  ¡  |  t |¡¡ d S r   )rD   rF   rP   Ú_ForkingPicklerÚdumps©r:   Úobjr   r   r   ÚsendÊ   s    z_ConnectionBase.sendc                 C   sJ   |   ¡  |  ¡  |d k	r(|dk r(tdƒ‚|  |¡}|d krB|  ¡  | ¡ S )Nr   znegative maxlength)rD   rE   r%   Ú_recv_bytesrH   Úgetvalue)r:   Z	maxlengthrQ   r   r   r   Ú
recv_bytesÐ   s    
z_ConnectionBase.recv_bytesc              
   C   s¸   |   ¡  |  ¡  t|ƒ�–}|j}|t|ƒ }|dk r>tdƒ‚n||krNtdƒ‚|  ¡ }| ¡ }||| k rvt| 	¡ ƒ‚| 
d¡ | ||| || | … ¡ |W  5 Q R £ S Q R X d S )Nr   znegative offsetzoffset too large)rD   rE   rL   rM   rO   r%   r\   Útellr	   r]   ÚseekÚreadinto)r:   rQ   rR   rT   rM   ZbytesizeÚresultrS   r   r   r   Úrecv_bytes_intoÝ   s$    



ÿz_ConnectionBase.recv_bytes_intoc                 C   s&   |   ¡  |  ¡  |  ¡ }t | ¡ ¡S r   )rD   rE   r\   rW   ÚloadsÚ	getbuffer)r:   rQ   r   r   r   Úrecvö   s    z_ConnectionBase.recvç        c                 C   s   |   ¡  |  ¡  |  |¡S r   )rD   rE   Ú_poll©r:   r   r   r   r   Úpollý   s    z_ConnectionBase.pollc                 C   s   | S r   r   rA   r   r   r   Ú	__enter__  s    z_ConnectionBase.__enter__c                 C   s   |   ¡  d S r   ©rG   ©r:   Úexc_typeÚ	exc_valueZexc_tbr   r   r   Ú__exit__  s    z_ConnectionBase.__exit__)TT)r   N)N)r   )rg   )Ú__name__Ú
__module__Ú__qualname__r7   r>   rB   rD   rE   rF   rH   ÚpropertyrJ   r<   r=   rK   rG   rV   r[   r^   rc   rf   rj   rk   rp   r   r   r   r   r5   r   s.   







r5   c                   @   s@   e Zd ZdZejfdd„Zdd„ Zddd„Zd	d
„ Z	dd„ Z
dS )ÚPipeConnectionFc                 C   s   || j ƒ d S r   rI   )r:   Z_CloseHandler   r   r   r@     s    zPipeConnection._closec              	   C   sh   t j| j|dd�\}}z<z |t jkr6t  |jgdt¡}W n   | ¡  ‚ Y nX W 5 | d¡\}}X d S )NT©Ú
overlappedF)	Ú_winapiZ	WriteFiler7   ÚGetOverlappedResultÚERROR_IO_PENDINGÚWaitForMultipleObjectsÚeventr   Úcancel)r:   rQ   ÚovÚerrZnwrittenÚwaitresr   r   r   rP     s    
  ÿzPipeConnection._send_bytesNc           	      C   s&  | j rd| _ t ¡ S |d kr dnt|dƒ}z´tj| j|dd�\}}d z<z |tjkrdt |jgdt¡}W n   | ¡  ‚ Y nX W 5 | d¡\}}|dkrºt ¡ }| | 	¡ ¡ |£  W S |tj
krØ|  ||¡£  W S X  W n: tk
�r } z|jtjk�rt‚n‚ W 5 d }~X Y nX tdƒ‚d S )NFé€   Trv   r   z.shouldn't get here; expected KeyboardInterrupt)Ú_got_empty_messageÚioÚBytesIOÚminrx   ÚReadFiler7   ry   Úwritere   ZERROR_MORE_DATAÚ_get_more_datarz   r{   r|   r   r}   rC   ÚwinerrorÚERROR_BROKEN_PIPEÚEOFErrorÚRuntimeError)	r:   ÚmaxsizeZbsizer~   r   ZnreadÚfr€   Úer   r   r   r\   &  s>    
ÿ

  ÿ
zPipeConnection._recv_bytesc                 C   s.   | j st | j¡d dkrdS tt| g|ƒƒS )Nr   T)r‚   rx   ÚPeekNamedPiper7   Úboolr   ri   r   r   r   rh   F  s
    ÿzPipeConnection._pollc                 C   s€   |  ¡ }t ¡ }| |¡ t | j¡d }|d k	rJt|ƒ| |krJ|  ¡  tj	| j|dd�\}}| 
d¡\}}| |  ¡ ¡ |S )Nr   Trv   )re   rƒ   r„   r‡   rx   r�   r7   rO   rH   r†   ry   )r:   r~   r�   rQ   rŽ   Úleftr   Zrbytesr   r   r   rˆ   L  s    
zPipeConnection._get_more_data)N)rq   rr   rs   r‚   rx   ÚCloseHandler@   rP   r\   rh   rˆ   r   r   r   r   ru     s   
 ru   c                   @   sx   e Zd Zer(ejfdd„ZejZej	Z
nejfdd„ZejZejZ
efdd„Ze
fdd„Zdd	„ Zddd„Zdd„ Zd
S )Ú
Connectionc                 C   s   || j ƒ d S r   rI   ©r:   r@   r   r   r   r@   c  s    zConnection._closec                 C   s   || j ƒ d S r   rI   r•   r   r   r   r@   h  s    c                 C   s8   t |ƒ}|| j|ƒ}||8 }|dkr&q4||d … }qd S ©Nr   )rO   r7   )r:   rQ   r‡   Ú	remainingrU   r   r   r   Ú_sendm  s    zConnection._sendc                 C   sb   t  ¡ }| j}|}|dkr^|||ƒ}t|ƒ}|dkrJ||krBt‚ntdƒ‚| |¡ ||8 }q|S )Nr   zgot end of file during message)rƒ   r„   r7   rO   r‹   rC   r‡   )r:   rS   ÚreadrQ   r;   r—   ÚchunkrU   r   r   r   Ú_recvv  s    


zConnection._recvc                 C   s„   t |ƒ}|dkrHt dd¡}t d|¡}|  |¡ |  |¡ |  |¡ n8t d|¡}|dkrr|  |¡ |  |¡ n|  || ¡ d S )Niÿÿÿú!iéÿÿÿÿú!Qi @  )rO   ÚstructZpackr˜   )r:   rQ   rU   Z
pre_headerÚheaderr   r   r   rP   †  s    


zConnection._send_bytesNc                 C   s^   |   d¡}t d| ¡ ¡\}|dkr@|   d¡}t d| ¡ ¡\}|d k	rT||krTd S |   |¡S )Né   rœ   r�   é   rž   )r›   rŸ   Zunpackr]   )r:   r�   rQ   rS   r   r   r   r\   �  s    

zConnection._recv_bytesc                 C   s   t | g|ƒ}t|ƒS r   )r   r‘   )r:   r   Úrr   r   r   rh   §  s    zConnection._poll)N)rq   rr   rs   rx   Ú_multiprocessingZclosesocketr@   r[   Z_writerf   Z_readr!   rG   r‡   r™   r˜   r›   rP   r\   rh   r   r   r   r   r”   \  s   	

r”   c                   @   sN   e Zd Zddd„Zdd„ Zdd„ Zed	d
„ ƒZedd„ ƒZdd„ Z	dd„ Z
dS )r   Nr   c                 C   sp   |p|rt |ƒpt}|pt|ƒ}t|ƒ |dkr>t||ƒ| _nt|||ƒ| _|d k	rft|tƒsft	dƒ‚|| _
d S ©Nr   zauthkey should be a byte string)r4   Údefault_familyr(   r-   ÚPipeListenerÚ	_listenerÚSocketListenerÚ
isinstancerN   Ú	TypeErrorÚ_authkey)r:   r3   r'   ÚbacklogÚauthkeyr   r   r   r>   ·  s    ÿzListener.__init__c                 C   s>   | j d krtdƒ‚| j  ¡ }| jr:t|| jƒ t|| jƒ |S )Nzlistener is closed)r¨   rC   Úacceptr¬   Údeliver_challengeÚanswer_challenge)r:   Úcr   r   r   r¯   Ç  s    

zListener.acceptc                 C   s    | j }|d k	rd | _ | ¡  d S r   )r¨   rG   )r:   Zlistenerr   r   r   rG   Õ  s    zListener.closec                 C   s   | j jS r   )r¨   Ú_addressrA   r   r   r   r3   Þ  s    zListener.addressc                 C   s   | j jS r   )r¨   Ú_last_acceptedrA   r   r   r   Úlast_acceptedâ  s    zListener.last_acceptedc                 C   s   | S r   r   rA   r   r   r   rk   æ  s    zListener.__enter__c                 C   s   |   ¡  d S r   rl   rm   r   r   r   rp   é  s    zListener.__exit__)NNr   N)rq   rr   rs   r>   r¯   rG   rt   r3   rµ   rk   rp   r   r   r   r   r   °  s   
	

c                 C   sh   |p
t | ƒ}t|ƒ |dkr&t| ƒ}nt| ƒ}|d k	rHt|tƒsHtdƒ‚|d k	rdt||ƒ t||ƒ |S r¥   )	r4   r-   Ú
PipeClientÚSocketClientrª   rN   r«   r±   r°   )r3   r'   r®   r²   r   r   r   r   í  s    


Tc                 C   sj   | r>t  ¡ \}}| d¡ | d¡ t| ¡ ƒ}t| ¡ ƒ}n$t ¡ \}}t|dd�}t|dd�}||fS )NTF©r=   ©r<   )r,   Z
socketpairÚsetblockingr”   Údetachr!   Úpipe)ÚduplexÚs1Ús2Úc1Úc2Zfd1Zfd2r   r   r   r     s    

c              
   C   sâ   t dƒ}| r*tj}tjtjB }tt }}ntj}tj}dt }}t ||tjB tj	B tj
tjB tjB d||tjtj¡}t ||dtjtjtjtj¡}t |tjd d ¡ tj|dd�}| d¡\}	}
t|| d�}t|| d�}||fS )Nr   r   r   Trv   r¸   r¹   )r(   rx   ÚPIPE_ACCESS_DUPLEXÚGENERIC_READÚGENERIC_WRITEÚBUFSIZEZPIPE_ACCESS_INBOUNDÚCreateNamedPipeÚFILE_FLAG_OVERLAPPEDÚFILE_FLAG_FIRST_PIPE_INSTANCEÚPIPE_TYPE_MESSAGEÚPIPE_READMODE_MESSAGEÚ	PIPE_WAITÚNMPWAIT_WAIT_FOREVERÚNULLÚ
CreateFileÚOPEN_EXISTINGÚSetNamedPipeHandleStateÚConnectNamedPipery   ru   )r½   r3   ZopenmodeÚaccessZobsizeZibsizeZh1Zh2rw   Ú_r   rÀ   rÁ   r   r   r   r     sT    
 ÿ
ÿ   ù	     þ   ÿc                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
r©   r   c                 C   sÈ   t   tt |ƒ¡| _zRtjdkr2| j t jt jd¡ | j d¡ | j 	|¡ | j 
|¡ | j ¡ | _W n  tk
r„   | j ¡  ‚ Y nX || _d | _|dkr¾t |¡s¾tj| tj|fdd�| _nd | _d S )NÚposixr   Tr   r   ©ÚargsZexitpriority)r,   ÚgetattrÚ_socketr!   ÚnameZ
setsockoptZ
SOL_SOCKETZSO_REUSEADDRrº   ZbindZlistenZgetsocknamer³   rC   rG   Z_familyr´   r   r2   ÚFinalizeÚunlinkÚ_unlink)r:   r3   r'   r­   r   r   r   r>   G  s0    

 ÿ
   ÿ
zSocketListener.__init__c                 C   s&   | j  ¡ \}| _| d¡ t| ¡ ƒS ©NT)rØ   r¯   r´   rº   r”   r»   ©r:   Úsr   r   r   r¯   `  s    
zSocketListener.acceptc                 C   s0   z| j ¡  W 5 | j }|d k	r*d | _ |ƒ  X d S r   )rÜ   rØ   rG   )r:   rÛ   r   r   r   rG   e  s    zSocketListener.closeN)r   )rq   rr   rs   r>   r¯   rG   r   r   r   r   r©   C  s   
r©   c              
   C   sP   t | ƒ}t tt|ƒ¡�.}| d¡ | | ¡ t| ¡ ƒW  5 Q R £ S Q R X d S rÝ   )r4   r,   r×   rº   Zconnectr”   r»   )r3   r'   rß   r   r   r   r·   o  s
    

r·   c                   @   s4   e Zd Zddd„Zddd„Zdd„ Zed	d
„ ƒZdS )r§   Nc                 C   sL   || _ | jdd�g| _d | _t d| j ¡ tj| tj| j| j fdd�| _	d S )NT)Úfirstz listener created with address=%rr   rÕ   )
r³   Ú_new_handleÚ_handle_queuer´   r   Ú	sub_debugrÚ   r§   Ú_finalize_pipe_listenerrG   )r:   r3   r­   r   r   r   r>   ƒ  s     
 þzPipeListener.__init__Fc              
   C   sH   t jt jB }|r|t jO }t  | j|t jt jB t jB t j	t
t
t jt j¡S r   )rx   rÂ   rÇ   rÈ   rÆ   r³   rÉ   rÊ   rË   ZPIPE_UNLIMITED_INSTANCESrÅ   rÌ   rÍ   )r:   rà   Úflagsr   r   r   rá   Ž  s    
 
ÿ   ûzPipeListener._new_handlec              
   C   s¶   | j  |  ¡ ¡ | j  d¡}ztj|dd�}W n0 tk
r^ } z|jtjkrN‚ W 5 d }~X Y nPX z<zt 
|jgdt¡}W n    | ¡  t |¡ ‚ Y nX W 5 | 	d¡\}}X t|ƒS )Nr   Trv   F)râ   Úappendrá   Úpoprx   rÑ   rC   r‰   ZERROR_NO_DATAry   r{   r|   r   r}   r“   ru   )r:   r;   r~   r�   rÓ   r   Úresr   r   r   r¯   š  s(      ÿ
zPipeListener.acceptc                 C   s$   t  d|¡ | D ]}t |¡ qd S )Nz closing listener with address=%r)r   rã   rx   r“   )Zqueuer3   r;   r   r   r   rä   ±  s    z$PipeListener._finalize_pipe_listener)N)F)rq   rr   rs   r>   rá   r¯   Ústaticmethodrä   r   r   r   r   r§     s
   

r§   c              
   C   sœ   t ƒ }z6t | d¡ t | tjtjB dtjtjtjtj¡}W q‚ t	k
rz } z |j
tjtjfksht|ƒrj‚ W 5 d }~X Y qX q‚q‚ t |tjd d ¡ t|ƒS )Néè  r   )r   rx   ZWaitNamedPiperÎ   rÃ   rÄ   rÍ   rÏ   rÇ   rC   r‰   ZERROR_SEM_TIMEOUTZERROR_PIPE_BUSYr   rÐ   rÊ   ru   )r3   r   Úhr�   r   r   r   r¶   ·  s8     
   ýÿÿ   ÿr¶   é   s   #CHALLENGE#s	   #WELCOME#s	   #FAILURE#c                 C   s‚   dd l }t|tƒs$td t|ƒ¡ƒ‚t t¡}|  	t
| ¡ | ||d¡ ¡ }|  d¡}||krl|  	t¡ n|  	t¡ tdƒ‚d S )Nr   ú Authkey must be bytes, not {0!s}Úmd5é   zdigest received was wrong)Úhmacrª   rN   r%   Úformatr.   r!   ÚurandomÚMESSAGE_LENGTHrV   Ú	CHALLENGEÚnewÚdigestr^   ÚWELCOMEÚFAILUREr   ©Z
connectionr®   rð   Úmessagerö   Zresponser   r   r   r°   Ü  s    
ÿ


r°   c                 C   sx   dd l }t|tƒs$td t|ƒ¡ƒ‚|  d¡}|ttƒd … }| 	||d¡ 
¡ }|  |¡ |  d¡}|tkrttdƒ‚d S )Nr   rí   rï   rî   zdigest sent was rejected)rð   rª   rN   r%   rñ   r.   r^   rO   rô   rõ   rö   rV   r÷   r   rù   r   r   r   r±   ë  s    
ÿ


r±   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚConnectionWrapperc                 C   s6   || _ || _|| _dD ]}t||ƒ}t| ||ƒ qd S )N)rK   rG   rj   r^   rV   )Ú_connÚ_dumpsÚ_loadsr×   Úsetattr)r:   ÚconnrX   rd   ÚattrrZ   r   r   r   r>   þ  s    
zConnectionWrapper.__init__c                 C   s   |   |¡}| j |¡ d S r   )rý   rü   rV   )r:   rZ   rß   r   r   r   r[     s    
zConnectionWrapper.sendc                 C   s   | j  ¡ }|  |¡S r   )rü   r^   rþ   rÞ   r   r   r   rf     s    
zConnectionWrapper.recvN)rq   rr   rs   r>   r[   rf   r   r   r   r   rû   ý  s   rû   c                 C   s   t  | fd d d d¡ d¡S )Nr   úutf-8)Ú	xmlrpclibrX   Úencode)rZ   r   r   r   Ú
_xml_dumps  s    r  c                 C   s   t  |  d¡¡\\}}|S )Nr  )r  rd   Údecode)rß   rZ   Úmethodr   r   r   Ú
_xml_loads  s    r  c                   @   s   e Zd Zdd„ ZdS )ÚXmlListenerc                 C   s"   dd l ma t | ¡}t|ttƒS r–   )Úxmlrpc.clientÚclientr  r   r¯   rû   r  r  rY   r   r   r   r¯     s    
zXmlListener.acceptN)rq   rr   rs   r¯   r   r   r   r   r	    s   r	  c                  O   s   dd l ma tt| |ŽttƒS r–   )r
  r  r  rû   r   r  r  )rÖ   Úkwdsr   r   r   Ú	XmlClient  s    r  c                 C   s®   t | ƒ}g }|rªt |d|¡}|tkr*qªn\t|  krFtt|ƒ k rTn n
|t8 }n2t|  krptt|ƒ k r~n n
|t8 }ntdƒ‚| || ¡ ||d d … }d}q|S )NFzShould not get herer   r   )	Úlistrx   r{   r   r   rO   r   rŒ   ræ   )Zhandlesr   ÚLÚreadyrè   r   r   r   Ú_exhaustive_wait%  s     
 
r  c           
         s^  |d krt }n|dk rd}nt|d d ƒ}t| ƒ} i ‰g }tƒ ‰ tƒ }�z@| D �]&}zt|dƒ}	W n  tk
r„   |ˆ| ¡ < Y qPX zt	 |	ƒ dd¡\}}W n8 tk
rÖ } zd |j }}|tkrÆ‚ W 5 d }~X Y nX |t	jkrø| |¡ |ˆ|j< qP|�rjt ¡ d d… dk�rjz| d	¡\}}W n* tk
�rP } z
|j}W 5 d }~X Y nX |�sjt|dƒ�rjd|_ˆ  |¡ d}qPtˆ ¡ |ƒ}W 5 |D ]}| ¡  �q�|D ]Œ}z| d¡\}}W n6 tk
�rð } z|j}|tk�rà‚ W 5 d }~X Y nX |t	j
k�r¤ˆ|j }ˆ  |¡ |dk�r¤t|dƒ�r¤d|_�q¤X ˆ  ‡fd
d„|D ƒ¡ ‡ fdd„| D ƒS )Nr   rê   g      à?Tr‚   rK   é   )é   r  Fc                 3   s   | ]}ˆ | V  qd S r   r   )Ú.0rë   )Úwaithandle_to_objr   r   Ú	<genexpr>†  s     zwait.<locals>.<genexpr>c                    s   g | ]}|ˆ kr|‘qS r   r   )r  Úo)Úready_objectsr   r   Ú
<listcomp>‡  s      úwait.<locals>.<listcomp>)r   Úintr  Úsetr}   ry   rC   r‰   Ú_ready_errorsrx   ZERROR_OPERATION_ABORTEDr|   Úaddr+   r‚   r×   ÚAttributeErrorr6   r†   rz   ræ   r)   Zgetwindowsversionr  ÚkeysÚupdate)
Úobject_listr   Zov_listZready_handlesr~   rÓ   r   r�   r  rK   r   )r  r  r   r   ;  sh    







ÚPollSelectorc              
   C   s˜   t ƒ �ˆ}| D ]}| |tj¡ q|d k	r4t ¡ | }| |¡}|r\dd„ |D ƒW  5 Q R £ S |d k	r4|t ¡  }|dk r4|W  5 Q R £ S q4W 5 Q R X d S )Nc                 S   s   g | ]\}}|j ‘qS r   )Zfileobj)r  ÚkeyZeventsr   r   r   r  ¥  s     r  r   )Ú_WaitSelectorÚregisterÚ	selectorsZ
EVENT_READr   r   Zselect)r"  r   ZselectorrZ   Zdeadliner  r   r   r   r   •  s    
c              
   C   sZ   |   ¡ }t |tjtj¡�6}ddlm} | |¡}t|| j	| j
ffW  5 Q R £ S Q R X d S )Nr   )Úresource_sharer)rK   r,   Zfromfdr   ZSOCK_STREAMr   r(  Z	DupSocketÚrebuild_connectionr<   r=   )r   r;   rß   r(  Údsr   r   r   Úreduce_connection±  s
    
r+  c                 C   s   |   ¡ }t|  ¡ ||ƒS r   ©r»   r”   )r*  r<   r=   Zsockr   r   r   r)  ·  s    r)  c                 C   sB   | j rtjnd| jrtjndB }t |  ¡ |¡}t|| j | jffS r–   )	r<   rx   ZFILE_GENERIC_READr=   ZFILE_GENERIC_WRITEr
   Z	DupHandlerK   Úrebuild_pipe_connection)r   rÒ   Údhr   r   r   Úreduce_pipe_connection¼  s
    ÿr/  c                 C   s   |   ¡ }t|||ƒS r   )r»   ru   )r.  r<   r=   r;   r   r   r   r-  Á  s    r-  c                 C   s    t  |  ¡ ¡}t|| j| jffS r   )r
   ZDupFdrK   r)  r<   r=   )r   Údfr   r   r   r+  Ç  s    c                 C   s   |   ¡ }t|||ƒS r   r,  )r0  r<   r=   Úfdr   r   r   r)  Ê  s    )NN)T)T)N)N)IÚ__all__rƒ   r!   r)   r,   rŸ   r   r    Ú	itertoolsr¤   r   r   r   r	   Úcontextr
   ZForkingPicklerrW   rx   r   r   r   r   ÚImportErrorr*   rÅ   ZCONNECTION_TIMEOUTÚcountr$   r¦   Zfamiliesr+   r   r   r(   r-   r4   r5   ru   r”   Úobjectr   r   r   r©   r·   r§   r¶   ró   rô   r÷   rø   r°   r±   rû   r  r  r	  r  r  rŠ   ZERROR_NETNAME_DELETEDr  r   r'  r#  r%  ZSelectSelectorr+  r)  r&  r/  r-  r   r   r   r   Ú<module>
   s¢   




 PT=

,,8	P
